Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
adjointEikonalSolver Class Reference

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

Collaboration diagram for adjointEikonalSolver:
Collaboration graph
[legend]

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...
 
boundaryVectorFielddistanceSensitivities ()
 Return the sensitivity term depending on da. More...
 
tmp< volTensorFieldgetFISensitivityTerm () const
 Return the volume-based sensitivity term depending on da. More...
 
const volScalarFieldda ()
 Return the adjoint distance field. More...
 
const volScalarFieldd ()
 Return the distance field. More...
 
tmp< volVectorFieldgradEikonal ()
 Return the gradient of the eikonal equation. More...
 

Protected Member Functions

wordList patchTypes () const
 Return the boundary condition types for da. More...
 
tmp< surfaceScalarFieldcomputeYPhi ()
 Compute convecting velocity. More...
 
void read ()
 Read options each time a new solution is found. More...
 

Protected Attributes

const fvMeshmesh_
 
dictionary dict_
 
const autoPtr< incompressible::RASModelVariables > & RASModelVars_
 
autoPtr< Foam::incompressibleAdjoint::adjointRASModel > & adjointTurbulence_
 
const labelHashSetsensitivityPatchIDs_
 
label nEikonalIters_
 
scalar tolerance_
 
scalar epsilon_
 
labelHashSet wallPatchIDs_
 
volScalarField da_
 
volScalarField source_
 
autoPtr< boundaryVectorFielddistanceSensPtr_
 Wall face sens w.r.t. (x,y.z) More...
 

Detailed Description

Solver of the adjoint to the eikonal PDE.

Reference:

    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;
            .
            .
        }
    }
See also
Foam::patchDistMethod::advectionDiffusion Foam::wallDist
Source files

Definition at line 142 of file adjointEikonalSolverIncompressible.H.

Constructor & Destructor Documentation

◆ adjointEikonalSolver()

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

Here is the call graph for this function:

◆ ~adjointEikonalSolver()

virtual ~adjointEikonalSolver ( )
virtualdefault

Member Function Documentation

◆ patchTypes()

wordList patchTypes ( ) const
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_.

Here is the call graph for this function:

◆ computeYPhi()

tmp< surfaceScalarField > computeYPhi ( )
protected

◆ read()

void read ( )
protected

◆ TypeName()

TypeName ( "adjointEikonalSolver"  )

Runtime type information.

◆ readDict()

bool readDict ( const dictionary dict)
virtual

Read dict if changed.

Definition at line 168 of file adjointEikonalSolverIncompressible.C.

References dict, and adjointEikonalSolver::dict_.

◆ accumulateIntegrand()

void accumulateIntegrand ( const scalar  dt)

Accumulate source term.

Definition at line 176 of file adjointEikonalSolverIncompressible.C.

References adjointEikonalSolver::adjointTurbulence_, adjointRASModel::distanceSensitivities(), and adjointEikonalSolver::source_.

Here is the call graph for this function:

◆ solve()

void solve ( )

◆ reset()

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.

Here is the call graph for this function:

◆ distanceSensitivities()

boundaryVectorField & distanceSensitivities ( )

◆ getFISensitivityTerm()

tmp< volTensorField > getFISensitivityTerm ( ) const

◆ da()

const volScalarField & da ( )

Return the adjoint distance field.

Definition at line 308 of file adjointEikonalSolverIncompressible.C.

References adjointEikonalSolver::da_.

◆ d()

const volScalarField& d ( )

◆ gradEikonal()

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_.

Here is the call graph for this function:

Member Data Documentation

◆ mesh_

const fvMesh& mesh_
protected

◆ dict_

dictionary dict_
protected

◆ RASModelVars_

const autoPtr<incompressible::RASModelVariables>& RASModelVars_
protected

◆ adjointTurbulence_

autoPtr<Foam::incompressibleAdjoint::adjointRASModel>& adjointTurbulence_
protected

◆ sensitivityPatchIDs_

const labelHashSet& sensitivityPatchIDs_
protected

◆ nEikonalIters_

label nEikonalIters_
protected

◆ tolerance_

scalar tolerance_
protected

◆ epsilon_

scalar epsilon_
protected

◆ wallPatchIDs_

labelHashSet wallPatchIDs_
protected

◆ da_

volScalarField da_
protected

◆ source_

volScalarField source_
protected

◆ distanceSensPtr_

autoPtr<boundaryVectorField> distanceSensPtr_
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().


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