Class ae108::solve::GeneralizedNonlinearSolver
template <class Assembler>
ClassList > ae108 > solve > GeneralizedNonlinearSolver
Public Types
| Type | Name |
|---|---|
| typedef std::vector< cpppetsc::GeneralizedMeshBoundaryCondition< mesh_type > > | BoundaryConditionContainer |
| typedef std::function< void(const cpppetsc::distributed< vector_type > &, double, cpppetsc::distributed< vector_type > *)> | DistributedForceVectorAssembler |
| typedef std::function< void(const cpppetsc::distributed< vector_type > &, double, matrix_type *)> | DistributedStiffnessMatrixAssembler |
| typedef std::function< void(const cpppetsc::local< vector_type > &, double, cpppetsc::local< vector_type > *)> | LocalForceVectorAssembler |
| typedef std::function< void(const cpppetsc::local< vector_type > &, double, matrix_type *)> | LocalStiffnessMatrixAssembler |
| typedef typename mesh_type::matrix_type | matrix_type |
| typedef typename assembly::MeshTypeTrait< Assembler >::type | mesh_type |
| typedef typename assembly::PolicyTypeTrait< Assembler >::type | policy_type |
| typedef typename mesh_type::size_type | size_type |
| typedef typename mesh_type::value_type | value_type |
| typedef typename mesh_type::vector_type | vector_type |
Public Functions
| Type | Name |
|---|---|
| GeneralizedNonlinearSolver (const mesh_type * mesh) |
|
| cpppetsc::distributed< vector_type > | computeSolution (const BoundaryConditionContainer & boundaryConditions, cpppetsc::distributed< vector_type > initialGuess, const double time, const Assembler *const assembler) const Calls computeSolution with the default assembler calls (ie. calls assembleForceVector or assembleStiffnessMatrix). Passes on the rest of the arguments. |
| cpppetsc::distributed< vector_type > | computeSolution (const BoundaryConditionContainer & boundaryConditions, cpppetsc::distributed< vector_type > initialGuess, const double time, LocalForceVectorAssembler assembleForceVector, LocalStiffnessMatrixAssembler assembleStiffnessMatrix) const Calls computeSolution wrapping up the local assembler calls into distributed assembler calls. Passes on the rest of the arguments. |
| cpppetsc::distributed< vector_type > | computeSolution (const BoundaryConditionContainer & boundaryConditions, cpppetsc::distributed< vector_type > initialGuess, const double time, DistributedForceVectorAssembler assembleForceVector, DistributedStiffnessMatrixAssembler assembleStiffnessMatrix) const The goal of this function is to find the minimizer x of E(x) -> min, where x satisfies boundary conditions specified by linear equations. |
Public Types Documentation
typedef BoundaryConditionContainer
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::BoundaryConditionContainer = std::vector<cpppetsc::GeneralizedMeshBoundaryCondition<mesh_type> >;
typedef DistributedForceVectorAssembler
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::DistributedForceVectorAssembler = std::function<void(const cpppetsc::distributed<vector_type> &, double, cpppetsc::distributed<vector_type> *)>;
typedef DistributedStiffnessMatrixAssembler
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::DistributedStiffnessMatrixAssembler = std::function<void( const cpppetsc::distributed<vector_type> &, double, matrix_type *)>;
typedef LocalForceVectorAssembler
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::LocalForceVectorAssembler = std::function<void(const cpppetsc::local<vector_type> &, double, cpppetsc::local<vector_type> *)>;
typedef LocalStiffnessMatrixAssembler
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::LocalStiffnessMatrixAssembler = std::function<void( const cpppetsc::local<vector_type> &, double, matrix_type *)>;
typedef matrix_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::matrix_type = typename mesh_type::matrix_type;
typedef mesh_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::mesh_type = typename assembly::MeshTypeTrait<Assembler>::type;
typedef policy_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::policy_type = typename assembly::PolicyTypeTrait<Assembler>::type;
typedef size_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::size_type = typename mesh_type::size_type;
typedef value_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::value_type = typename mesh_type::value_type;
typedef vector_type
using ae108::solve::GeneralizedNonlinearSolver< Assembler >::vector_type = typename mesh_type::vector_type;
Public Functions Documentation
function GeneralizedNonlinearSolver
explicit ae108::solve::GeneralizedNonlinearSolver::GeneralizedNonlinearSolver (
const mesh_type * mesh
)
Parameters:
meshA valid nonzero pointer to a mesh_type instance.
function computeSolution [1/3]
Calls computeSolution with the default assembler calls (ie. calls assembleForceVector or assembleStiffnessMatrix). Passes on the rest of the arguments.
cpppetsc::distributed < vector_type > ae108::solve::GeneralizedNonlinearSolver::computeSolution (
const BoundaryConditionContainer & boundaryConditions,
cpppetsc::distributed < vector_type > initialGuess,
const double time,
const Assembler *const assembler
) const
Parameters:
boundaryConditionsThe generalized boundary conditions.initialGuessThe global vector to start iterating at.timeThis will be used to configure the assembler. @para assembler Valid nonzero pointer.
function computeSolution [2/3]
Calls computeSolution wrapping up the local assembler calls into distributed assembler calls. Passes on the rest of the arguments.
cpppetsc::distributed < vector_type > ae108::solve::GeneralizedNonlinearSolver::computeSolution (
const BoundaryConditionContainer & boundaryConditions,
cpppetsc::distributed < vector_type > initialGuess,
const double time,
LocalForceVectorAssembler assembleForceVector,
LocalStiffnessMatrixAssembler assembleStiffnessMatrix
) const
Parameters:
boundaryConditionsThe generalized boundary conditions.initialGuessThe global vector to start iterating at.timeThis will be used to configure the assembler.assembleForceVectorA valid callable. It will be called to assemble the local force vector.assembleStiffnessMatrixA valid callable. It will be called to assemble the stiffness matrix.
function computeSolution [3/3]
The goal of this function is to find the minimizer x of E(x) -> min, where x satisfies boundary conditions specified by linear equations.
cpppetsc::distributed < vector_type > ae108::solve::GeneralizedNonlinearSolver::computeSolution (
const BoundaryConditionContainer & boundaryConditions,
cpppetsc::distributed < vector_type > initialGuess,
const double time,
DistributedForceVectorAssembler assembleForceVector,
DistributedStiffnessMatrixAssembler assembleStiffnessMatrix
) const
More precisely, this function uses an "infeasible start Newton method"-based approach; See S. Boyd, L. Vandenberghe, "Convex Optimization", Cambridge University Press, 2019, pp. 531-534. PETSc's nonlinear solver is used to solve the adapted system.
This method is also widely known as Lagrange Multiplier Method; see Cook, R. D., Malkus, D. S., Plesha, M. E. & Witt, R. J. Concepts and Applications of Finite Element Analysis, 4th Edition. (Wiley, 2001).
Parameters:
boundaryConditionsThe generalized boundary conditions.initialGuessThe global vector to start iterating at.timeThis will be used to configure the assembler.assembleForceVectorA valid callable. It will be called to assemble the distributed force vector.assembleStiffnessMatrixA valid callable. It will be called to assemble the stiffness matrix.
The documentation for this class was generated from the following file solve/src/include/ae108/solve/GeneralizedNonlinearSolver.h