Skip to content

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:

  • mesh A 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:

  • boundaryConditions The generalized boundary conditions.
  • initialGuess The global vector to start iterating at.
  • time This 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:

  • boundaryConditions The generalized boundary conditions.
  • initialGuess The global vector to start iterating at.
  • time This will be used to configure the assembler.
  • assembleForceVector A valid callable. It will be called to assemble the local force vector.
  • assembleStiffnessMatrix A 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:

  • boundaryConditions The generalized boundary conditions.
  • initialGuess The global vector to start iterating at.
  • time This will be used to configure the assembler.
  • assembleForceVector A valid callable. It will be called to assemble the distributed force vector.
  • assembleStiffnessMatrix A 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