OpenLB 1.8.1
Loading...
Searching...
No Matches
olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C > Class Template Reference

This class implements the evaluation of the goal functional and its derivatives by using adjoint LBM. More...

#include <optiCaseDual.h>

+ Inheritance diagram for olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >:
+ Collaboration diagram for olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >:

Public Member Functions

 OptiCaseDual (XMLreader const &xml)
 
 ~OptiCaseDual ()
 
void free ()
 
evaluateObjective (const C &control, unsigned optiStep=0) override
 Solve primal problem and evaluate objective.
 
void computeDerivatives (const C &control, C &derivatives, unsigned optiStep=0) override
 Compute derivatives via adjoint problem.
 
void setObjective (std::shared_ptr< DistributedObjective< S, SOLVER > > objective)
 
- Public Member Functions inherited from olb::opti::OptiCase< S, C >
 OptiCase ()=default
 
 OptiCase (std::function< void(void)> postEvaluation)
 
void postEvaluation ()
 

Public Attributes

bool _verbose {true}
 
std::size_t _dimCtrl
 upper limit for the number of control variables (#voxels * field-dimension)
 
StartValueType _startValueType {Control}
 
std::string _projectionName
 
std::shared_ptr< SuperIndicatorF< S, dim > > _controlIndicator
 Marks, where there are active control variables.
 
Controller< S > * _controller {nullptr}
 Manages the array of control variables.
 
UnitConverter< S, descriptor > * _converter {nullptr}
 
std::shared_ptr< SOLVER< S, SolverMode::Primal > > _primalSolver
 
std::shared_ptr< SOLVER< S, SolverMode::Dual > > _dualSolver
 
std::shared_ptr< DistributedObjective< S, SOLVER > > _objective
 
std::shared_ptr< SuperGeometry< S, dim > > _primalGeometry
 
std::shared_ptr< SuperLattice< S, descriptor > > _refLattice
 
std::shared_ptr< GeometrySerializer< S, dim > > _serializer
 
std::shared_ptr< projection::Base< S > > _projection
 
std::shared_ptr< SuperLatticeF< S, descriptor > > _projectedControl
 maps the control to a lattice functor
 
std::shared_ptr< SuperLatticeF< S, descriptor > > _dProjectionDcontrol
 derivative of _projectionControl
 

Additional Inherited Members

- Protected Attributes inherited from olb::opti::OptiCase< S, C >
std::function< void(void)> _postEvaluation
 

Detailed Description

template<typename S, template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C>
class olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >

This class implements the evaluation of the goal functional and its derivatives by using adjoint LBM.

The adjoint equations are problem-specific and have been computed for force and porosity optimization so far.

Requirements: S is the arithmetic data type SOLVER implements the (primal/ dual) simulation, inherits from AdjointLbSolver An xml file is expected to provide additional information on e.g. simulation and optimization parameters

Definition at line 522 of file serialization.h.

Constructor & Destructor Documentation

◆ OptiCaseDual()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::OptiCaseDual ( XMLreader const & xml)
inline

Definition at line 108 of file optiCaseDual.h.

108 {
109 readFromXML(xml);
110 initialize(xml);
111 initializeFields();
112 }

◆ ~OptiCaseDual()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::~OptiCaseDual ( )
inline

Definition at line 114 of file optiCaseDual.h.

114 {
115 free();
116 }

References olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::free().

+ Here is the call graph for this function:

Member Function Documentation

◆ computeDerivatives()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
void olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::computeDerivatives ( const C & control,
C & derivatives,
unsigned optiStep = 0 )
overridevirtual

Compute derivatives via adjoint problem.

Implements olb::opti::OptiCase< S, C >.

Definition at line 134 of file optiCaseDual.hh.

136{
137 _controller->setControl(control, _dimCtrl);
138 _dualSolver->parameters(names::OutputOpti()).counterOptiStep = optiStep;
139
140 const auto& primalResults = _primalSolver->parameters(names::Results());
141 auto& dualParams = _dualSolver->parameters(names::Opti());
142
143 dualParams.fpop = std::make_shared<SuperLatticeFpop<S,descriptor>>(*(primalResults.lattice));
144 dualParams.dObjectiveDf = _objective->derivativeByPopulations();
145
146 _dualSolver->solve();
147
148 derivativesFromDualSolution(derivatives);
149}
std::size_t _dimCtrl
upper limit for the number of control variables (#voxels * field-dimension)
std::shared_ptr< SOLVER< S, SolverMode::Primal > > _primalSolver
std::shared_ptr< DistributedObjective< S, SOLVER > > _objective
Controller< S > * _controller
Manages the array of control variables.
std::shared_ptr< SOLVER< S, SolverMode::Dual > > _dualSolver

References olb::opti::control.

◆ evaluateObjective()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
S olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::evaluateObjective ( const C & control,
unsigned optiStep = 0 )
overridevirtual

Solve primal problem and evaluate objective.

Implements olb::opti::OptiCase< S, C >.

Definition at line 116 of file optiCaseDual.hh.

118{
119 _controller->setControl(control, _dimCtrl);
120 _primalSolver->parameters(names::OutputOpti()).counterOptiStep = optiStep;
121 _primalSolver->solve();
122
123 _objective->setPrimalSolver(_primalSolver);
124 return _objective->evaluate();
125}

References olb::opti::control.

◆ free()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
void olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::free ( )
inline

Definition at line 118 of file optiCaseDual.h.

118 {
119 delete _converter;
120 _converter = nullptr;
121 delete _controller;
122 _controller = nullptr;
123 }
UnitConverter< S, descriptor > * _converter

References olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_controller, and olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_converter.

+ Here is the caller graph for this function:

◆ setObjective()

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
void olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::setObjective ( std::shared_ptr< DistributedObjective< S, SOLVER > > objective)
inline

Member Data Documentation

◆ _controlIndicator

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SuperIndicatorF<S,dim> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_controlIndicator

Marks, where there are active control variables.

Definition at line 87 of file optiCaseDual.h.

◆ _controller

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
Controller<S>* olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_controller {nullptr}

Manages the array of control variables.

Definition at line 90 of file optiCaseDual.h.

90{nullptr};

◆ _converter

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
UnitConverter<S,descriptor>* olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_converter {nullptr}

Definition at line 91 of file optiCaseDual.h.

91{nullptr};

◆ _dimCtrl

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::size_t olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_dimCtrl

upper limit for the number of control variables (#voxels * field-dimension)

Definition at line 81 of file optiCaseDual.h.

◆ _dProjectionDcontrol

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SuperLatticeF<S,descriptor> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_dProjectionDcontrol

derivative of _projectionControl

Definition at line 106 of file optiCaseDual.h.

◆ _dualSolver

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SOLVER<S,SolverMode::Dual> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_dualSolver

Definition at line 93 of file optiCaseDual.h.

◆ _objective

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<DistributedObjective<S,SOLVER> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_objective

Definition at line 95 of file optiCaseDual.h.

◆ _primalGeometry

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SuperGeometry<S,dim> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_primalGeometry

Definition at line 97 of file optiCaseDual.h.

◆ _primalSolver

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SOLVER<S,SolverMode::Primal> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_primalSolver

Definition at line 92 of file optiCaseDual.h.

◆ _projectedControl

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SuperLatticeF<S,descriptor> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_projectedControl

maps the control to a lattice functor

Definition at line 104 of file optiCaseDual.h.

◆ _projection

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<projection::Base<S> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_projection

Definition at line 102 of file optiCaseDual.h.

◆ _projectionName

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::string olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_projectionName

Definition at line 84 of file optiCaseDual.h.

◆ _refLattice

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<SuperLattice<S,descriptor> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_refLattice

Definition at line 99 of file optiCaseDual.h.

◆ _serializer

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
std::shared_ptr<GeometrySerializer<S,dim> > olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_serializer

Definition at line 101 of file optiCaseDual.h.

◆ _startValueType

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
StartValueType olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_startValueType {Control}

Definition at line 83 of file optiCaseDual.h.

83{Control};

◆ _verbose

template<typename S , template< typename, SolverMode > typename SOLVER, concepts::Field CONTROLLED_FIELD, template< typename... > typename PRIMAL_DYNAMICS, typename C >
bool olb::opti::OptiCaseDual< S, SOLVER, CONTROLLED_FIELD, PRIMAL_DYNAMICS, C >::_verbose {true}

Definition at line 79 of file optiCaseDual.h.

79{true};

The documentation for this class was generated from the following files: