Skip to content

Conversation

@wdhawkins
Copy link
Collaborator

@wdhawkins wdhawkins commented Jan 31, 2026

This PR adds TransientSolver. It is very loosely based on TransientKEigenSolver by @zachhardy.

TransientSolver has two modes controlled by the initial_state parameter: existing and zero. In existing mode, the transient solver evolves the solution of a previous solver. For example, to evolve the solution of a k-eigenvalue problem, one might do:

phys = DiscreteOrdinatesProblem(...)
keigen = PowerIterationKEigenSolver(problem=phys)
keigen.Initialize()
keigen.Execute()
tsolver = TransientSolver(problem=phys, initial_state="existing")
tsolver.Initialize()
tsolver.Execute() (or using Advance with a custom time stepping loop)

or, to evolve the solution of a steady-state problem:

phys = DiscreteOrdinatesProblem(...)
steady = SteadyStateSourceSolver(problem=phys)
steady.Initialize()
steady.Execute()
tsolver = TransientSolver(problem=phys, dt=0.001, theta=1.0, stop_time=1.0, initial_state="existing")
tsolver.Initialize()
tsolver.Execute()

In zero mode, the transient solver starts from a zero initial state and evolves the solution:

phys = DiscreteOrdinatesProblem(...)
solver = TransientSolver(problem=phys, dt=0.001, theta=1.0, stop_time=1.0, initial_state="zero")
solver.Initialize()
solver.Execute()

A number of examples are given in the transport_transient regression input folder.

This is a bit of a large commit. I tried to make it as small as possible by committing the time-dependent work in other commits, but it's still quite large.

Resolves #57
Resolves #58

@wdhawkins wdhawkins self-assigned this Jan 31, 2026
@wdhawkins wdhawkins added the enhancement New feature or request label Jan 31, 2026
@wdhawkins wdhawkins force-pushed the transient branch 2 times, most recently from 50d9da2 to 661e9f8 Compare January 31, 2026 03:16
InputParameters params = Solver::GetInputParameters();
params.SetGeneralDescription("Generalized implementation of a transient k-eigenvalue solver");
params.ChangeExistingParamToOptional("name", "TransientKEigenSolver");
params.AddRequiredParameter<std::shared_ptr<Problem>>("problem", "An existing lbs problem");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lbs problem-> discrete ordinates problem (ctor downcast to DiscreteOrdinatesProblem)

@wdhawkins wdhawkins changed the title Adding transient k-eigenvalue solver Adding transient solver Feb 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Transient verification Time dependent transient capability

3 participants