libmesh
libmesh copied to clipboard
WIP: General unsteady adjoint weighted integration
This PR aims to condense and organize the different integrate_xyz_timestep methods currently present in TimeSolver. The scattered integrate_xyz_timestep implementations will be consolidated into a single advance_postprocessing_timestep method.
TS::integrate_qoi_timestep, integrate_adjoint_sensitivity and integrate_adjoint_refinement_error_estimate will be removed from the library and moved to user/example code. The lambda's to achieve their functionality will be added to relevant adjoint examples.
More details:
In general, to integrate a function f across a time interval [0, T], we have the quadrature: int_{0}^{T} f(u,z) dt ~ (sum_{i=1}^{N_outer_timesteps} ( sum_{j=1}^{N_inner_steps} w_ij f(u^j,z^j) )
- advance_posprocessing_timestep will take a vector of std::functions as the argument, which specify f(u^j,z^j).
- advance_posprocessing_timestep will manage the time incrementation, solution and mesh retrieval from history and provide quadrature weights w_ij as per the particular time stepping scheme.
- The std::functions will also receive a system reference which they can use for any system level operations, for example calling system.qoi().