Solver of the adjoint to the eikonal PDE. More...

Public Member Functions | |
| TypeName ("adjointEikonalSolver") | |
| Runtime type information. More... | |
| adjointEikonalSolver (const fvMesh &mesh, const dictionary &dict, const autoPtr< incompressible::RASModelVariables > &RASModelVars, incompressibleAdjointVars &adjointVars, const labelHashSet &sensitivityPatchIDs) | |
| Construct from components. More... | |
| virtual | ~adjointEikonalSolver ()=default |
| virtual bool | readDict (const dictionary &dict) |
| Read dict if changed. More... | |
| void | accumulateIntegrand (const scalar dt) |
| Accumulate source term. More... | |
| void | solve () |
| Calculate the adjoint distance field. More... | |
| void | reset () |
| Reset source term. More... | |
| boundaryVectorField & | distanceSensitivities () |
| Return the sensitivity term depending on da. More... | |
| tmp< volTensorField > | getFISensitivityTerm () const |
| Return the volume-based sensitivity term depending on da. More... | |
| const volScalarField & | da () |
| Return the adjoint distance field. More... | |
| const volScalarField & | d () |
| Return the distance field. More... | |
| tmp< volVectorField > | gradEikonal () |
| Return the gradient of the eikonal equation. More... | |
Protected Member Functions | |
| wordList | patchTypes () const |
| Return the boundary condition types for da. More... | |
| tmp< surfaceScalarField > | computeYPhi () |
| Compute convecting velocity. More... | |
| void | read () |
| Read options each time a new solution is found. More... | |
Protected Attributes | |
| const fvMesh & | mesh_ |
| dictionary | dict_ |
| const autoPtr< incompressible::RASModelVariables > & | RASModelVars_ |
| autoPtr< Foam::incompressibleAdjoint::adjointRASModel > & | adjointTurbulence_ |
| const labelHashSet & | sensitivityPatchIDs_ |
| label | nEikonalIters_ |
| scalar | tolerance_ |
| scalar | epsilon_ |
| labelHashSet | wallPatchIDs_ |
| volScalarField | da_ |
| volScalarField | source_ |
| autoPtr< boundaryVectorField > | distanceSensPtr_ |
| Wall face sens w.r.t. (x,y.z) More... | |
Solver of the adjoint to the eikonal PDE.
For the development of the adjoint eikonal PDE and its boundary
conditions
Papoutsis-Kiachagias, E. M., & Giannakoglou, K. C. (2014).
Continuous Adjoint Methods for Turbulent Flows, Applied to Shape
and Topology Optimization: Industrial Applications.
Archives of Computational Methods in Engineering, 23(2), 255-299.
http://doi.org/10.1007/s11831-014-9141-9
To be as consistent as possible, it is recommended to use the advectionDiffusion wallDist method in fvSchemes, instead of the more widely used meshWave
Example of the adjointEikonalSolver specification in optimisationDict:
optimisation
{
sensitivities
{
includeDistance true;
adjointEikonalSolver
{
// epsilon should be the same as the one used
// in fvSchemes/wallDist/advectionDiffusionCoeffs
epsilon 0.1;
iters 1000;
tolerance 1e-6;
}
}
}
Example of the entries in fvSchemes:
divSchemes
{
.
.
// avoid bounded schemes since yPhi is not conservative
div(-yPhi,da) Gauss linearUpwind grad(da);
.
.
}
laplacianSchemes
{
.
.
laplacian(yWall,da) Gauss linear corrected;
.
.
}
Also, the solver specification and a relaxation factor for da are required in fvSolution
da
{
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-9;
relTol 0.1;
}
relaxationFactors
{
equations
{
.
.
da 0.5;
.
.
}
}
Definition at line 142 of file adjointEikonalSolverIncompressible.H.
| adjointEikonalSolver | ( | const fvMesh & | mesh, |
| const dictionary & | dict, | ||
| const autoPtr< incompressible::RASModelVariables > & | RASModelVars, | ||
| incompressibleAdjointVars & | adjointVars, | ||
| const labelHashSet & | sensitivityPatchIDs | ||
| ) |
Construct from components.
Definition at line 111 of file adjointEikonalSolverIncompressible.C.
References Foam::read().

|
virtualdefault |
|
protected |
Return the boundary condition types for da.
Definition at line 41 of file adjointEikonalSolverIncompressible.C.
References fvMesh::boundary(), adjointEikonalSolver::mesh_, UPtrList< T >::size(), and adjointEikonalSolver::wallPatchIDs_.

|
protected |
Compute convecting velocity.
Definition at line 71 of file adjointEikonalSolverIncompressible.C.
References fvMesh::boundary(), GeometricField< Type, PatchField, GeoMesh >::boundaryFieldRef(), adjointEikonalSolver::d(), Foam::dimless, Foam::fvc::grad(), Foam::fvc::interpolate(), adjointEikonalSolver::mesh_, tmp< T >::New(), IOobjectOption::NO_READ, IOobjectOption::NO_WRITE, patches, adjointEikonalSolver::RASModelVars_, fvMesh::Sf(), fvMesh::time(), Time::timeName(), adjointEikonalSolver::wallPatchIDs_, and Foam::Zero.
Referenced by adjointEikonalSolver::solve().


|
protected |
Read options each time a new solution is found.
Definition at line 58 of file adjointEikonalSolverIncompressible.C.
References adjointEikonalSolver::dict_, Foam::constant::electromagnetic::e, adjointEikonalSolver::epsilon_, dictionary::getOrDefault(), adjointEikonalSolver::mesh_, adjointEikonalSolver::nEikonalIters_, schemesLookup::schemesDict(), dictionary::subDict(), and adjointEikonalSolver::tolerance_.
Referenced by adjointEikonalSolver::solve().


| TypeName | ( | "adjointEikonalSolver" | ) |
Runtime type information.
|
virtual |
Read dict if changed.
Definition at line 168 of file adjointEikonalSolverIncompressible.C.
References dict, and adjointEikonalSolver::dict_.
| void accumulateIntegrand | ( | const scalar | dt | ) |
Accumulate source term.
Definition at line 176 of file adjointEikonalSolverIncompressible.C.
References adjointEikonalSolver::adjointTurbulence_, adjointRASModel::distanceSensitivities(), and adjointEikonalSolver::source_.

| void solve | ( | ) |
Calculate the adjoint distance field.
Definition at line 183 of file adjointEikonalSolverIncompressible.C.
References adjointEikonalSolver::computeYPhi(), adjointEikonalSolver::d(), adjointEikonalSolver::da_, Foam::ensightOutput::debug, Foam::fvm::div(), Foam::endl(), adjointEikonalSolver::epsilon_, Foam::gMax(), Foam::Info, Foam::fvc::laplacian(), Foam::fvm::laplacian(), Foam::mag(), adjointEikonalSolver::mesh_, adjointEikonalSolver::nEikonalIters_, Time::printExecutionTime(), adjointEikonalSolver::RASModelVars_, adjointEikonalSolver::read(), fvMatrix< Type >::relax(), fvMatrix< Type >::solve(), adjointEikonalSolver::source_, Foam::fvm::SuSp(), fvMesh::time(), adjointEikonalSolver::tolerance_, and regIOobject::write().

| void reset | ( | ) |
Reset source term.
Definition at line 230 of file adjointEikonalSolverIncompressible.C.
References DimensionedField< Type, GeoMesh >::dimensions(), adjointEikonalSolver::distanceSensPtr_, adjointEikonalSolver::source_, and Foam::Zero.

| boundaryVectorField & distanceSensitivities | ( | ) |
Return the sensitivity term depending on da.
Definition at line 237 of file adjointEikonalSolverIncompressible.C.
References fvMesh::boundary(), GeometricField< Type, PatchField, GeoMesh >::boundaryField(), adjointEikonalSolver::d(), adjointEikonalSolver::da_, adjointEikonalSolver::distanceSensPtr_, Foam::endl(), Foam::Info, adjointEikonalSolver::mesh_, adjointEikonalSolver::RASModelVars_, and adjointEikonalSolver::sensitivityPatchIDs_.

| tmp< volTensorField > getFISensitivityTerm | ( | ) | const |
Return the volume-based sensitivity term depending on da.
Definition at line 258 of file adjointEikonalSolverIncompressible.C.
References IOobjectOption::AUTO_WRITE, adjointEikonalSolver::d(), adjointEikonalSolver::da_, DimensionedField< Type, GeoMesh >::dimensions(), Foam::dimLength, Foam::endl(), adjointEikonalSolver::epsilon_, Foam::fvc::grad(), Foam::Info, adjointEikonalSolver::mesh_, IOobjectOption::NO_READ, adjointEikonalSolver::RASModelVars_, GeometricField< Type, PatchField, GeoMesh >::ref(), fvMesh::time(), Time::timeName(), adjointEikonalSolver::wallPatchIDs_, and Foam::Zero.

| const volScalarField & da | ( | ) |
Return the adjoint distance field.
Definition at line 308 of file adjointEikonalSolverIncompressible.C.
References adjointEikonalSolver::da_.
| const volScalarField& d | ( | ) |
Return the distance field.
Referenced by adjointEikonalSolver::computeYPhi(), adjointEikonalSolver::distanceSensitivities(), adjointEikonalSolver::getFISensitivityTerm(), adjointEikonalSolver::gradEikonal(), and adjointEikonalSolver::solve().

| tmp< volVectorField > gradEikonal | ( | ) |
Return the gradient of the eikonal equation.
Definition at line 314 of file adjointEikonalSolverIncompressible.C.
References adjointEikonalSolver::d(), Foam::fvc::grad(), tmp< T >::New(), and adjointEikonalSolver::RASModelVars_.

|
protected |
Definition at line 163 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::computeYPhi(), adjointEikonalSolver::distanceSensitivities(), adjointEikonalSolver::getFISensitivityTerm(), adjointEikonalSolver::patchTypes(), adjointEikonalSolver::read(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 165 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::read(), and adjointEikonalSolver::readDict().
|
protected |
Definition at line 167 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::computeYPhi(), adjointEikonalSolver::distanceSensitivities(), adjointEikonalSolver::getFISensitivityTerm(), adjointEikonalSolver::gradEikonal(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 170 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::accumulateIntegrand().
|
protected |
Definition at line 172 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::distanceSensitivities().
|
protected |
Definition at line 174 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::read(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 176 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::read(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 178 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::getFISensitivityTerm(), adjointEikonalSolver::read(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 180 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::computeYPhi(), adjointEikonalSolver::getFISensitivityTerm(), and adjointEikonalSolver::patchTypes().
|
protected |
Definition at line 182 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::da(), adjointEikonalSolver::distanceSensitivities(), adjointEikonalSolver::getFISensitivityTerm(), and adjointEikonalSolver::solve().
|
protected |
Definition at line 184 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::accumulateIntegrand(), adjointEikonalSolver::reset(), and adjointEikonalSolver::solve().
|
protected |
Wall face sens w.r.t. (x,y.z)
Definition at line 189 of file adjointEikonalSolverIncompressible.H.
Referenced by adjointEikonalSolver::distanceSensitivities(), and adjointEikonalSolver::reset().
Copyright © 2011-2018 OpenFOAM | OPENFOAM® is a registered trademark of OpenCFD Ltd.