libmesh icon indicating copy to clipboard operation
libmesh copied to clipboard

WIP: General unsteady adjoint weighted integration

Open vikramvgarg opened this issue 3 years ago • 0 comments

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) )

  1. advance_posprocessing_timestep will take a vector of std::functions as the argument, which specify f(u^j,z^j).
  2. 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.
  3. The std::functions will also receive a system reference which they can use for any system level operations, for example calling system.qoi().

vikramvgarg avatar Apr 24 '22 18:04 vikramvgarg