OOFEM
2.4
OOFEM.org - Object Oriented Finite Element Solver
|
This base class is an abstraction for numerical algorithm. More...
#include <nummet.h>
Public Member Functions | |
NumericalMethod (Domain *d, EngngModel *m) | |
Constructor. More... | |
virtual | ~NumericalMethod () |
Destructor. More... | |
EngngModel * | giveEngngModel () |
virtual IRResultType | initializeFrom (InputRecord *ir) |
virtual void | reinitialize () |
Reinitializes the receiver. More... | |
virtual void | setDomain (Domain *d) |
virtual contextIOResultType | saveContext (DataStream &stream, ContextMode mode, void *obj=NULL) |
virtual contextIOResultType | restoreContext (DataStream &stream, ContextMode mode, void *obj=NULL) |
Protected Attributes | |
Domain * | domain |
Pointer to domain. More... | |
EngngModel * | engngModel |
Pointer to engineering model. More... | |
This base class is an abstraction for numerical algorithm.
Generally, the particular instances (instances of derived classes) perform some sequence of numerical operations on given data to obtain the solution. The derived class should declare the interface for specific problem type (like solution of linear system). The interface usually consist in declaring virtual abstract function solve, with parameters corresponding to problem under consideration. The solve method should return value of NM_Status type. (Other parameters can be provided via instanciateFrom service, which receives the init record of Engng method). The data are specified using parameters passed to solve method (so called mapping). Typically, each particular Engng model instance is responsible for mapping of its governing equation components to corresponding numerical components. Such mapping allows the numerical method implementation to be independent of a particular physical problem by strictly dealing with numerical components, which are mapped to corresponding physical components of governing equation, that are hidden to numerical method.
It should be pointed out, that all numerical methods solving the same numerical problem use the same compulsory names for the corresponding numerical components - this is enforced by using the same base problem-specific class. It is therefore possible to use any suitable instance of the NumericalMethod class to the solve problem, and leave the whole engineering model code, including mapping, unchanged, because all instances of the Numerical method class provide the common interface. Similarly, a high-level numerical method instance may use services of another low-level numerical method instance. The numerical method instance may also represent interface to an existing procedure written in C or Fortran.
|
inline |
|
inlinevirtual |
|
inline |
Definition at line 99 of file nummet.h.
Referenced by oofem::FETISolver::setUpCommunicationMaps(), oofem::FETISolver::solve(), and oofem::FETISolver::unpackSolution().
|
inlinevirtual |
Reimplemented in oofem::CylindricalALM, oofem::NRSolver, oofem::SparseNonLinearSystemNM, oofem::StaggeredSolver, oofem::FETISolver, oofem::IMLSolver, oofem::SpoolesSolver, oofem::LineSearchNM, oofem::SuperLUSolver, and oofem::DynamicRelaxationSolver.
Definition at line 101 of file nummet.h.
References oofem::IRRT_OK.
Referenced by oofem::NRSolver::initializeFrom(), oofem::CylindricalALM::initializeFrom(), and oofem::EngngModel::updateAttributes().
|
inlinevirtual |
Reinitializes the receiver.
This is used, when topology of problem has changed (for example after adaptive refinement or load transfer in parallel applications). This is necessary for numerical methods, that cache some data between solution steps and that may depend on domain or problem topology. The caching of data by receiver is intended only for speeding up the calculation, but numerical method must be always able to generate this data again. This method clears receiver cached data dependent on topology, when it changes.
Reimplemented in oofem::CylindricalALM, and oofem::NRSolver.
Definition at line 112 of file nummet.h.
Referenced by oofem::AdaptiveNonLinearStatic::adaptiveRemap(), oofem::NonLinearStatic::unpackMigratingData(), and oofem::SUPG::updateDomainLinks().
|
inlinevirtual |
Reimplemented in oofem::CylindricalALM.
Definition at line 117 of file nummet.h.
References oofem::CIO_OK.
Referenced by oofem::EngngModel::restoreContext().
|
inlinevirtual |
Reimplemented in oofem::CylindricalALM.
Definition at line 116 of file nummet.h.
References oofem::CIO_OK.
Referenced by oofem::EngngModel::saveContext().
|
inlinevirtual |
Reimplemented in oofem::CylindricalALM, and oofem::NRSolver.
Definition at line 114 of file nummet.h.
Referenced by oofem::StationaryTransportProblem::updateDomainLinks(), oofem::LinearStatic::updateDomainLinks(), oofem::FreeWarping::updateDomainLinks(), oofem::StaticStructural::updateDomainLinks(), oofem::TransientTransportProblem::updateDomainLinks(), oofem::NonLinearDynamic::updateDomainLinks(), oofem::NonStationaryTransportProblem::updateDomainLinks(), oofem::NonLinearStatic::updateDomainLinks(), and oofem::CBS::updateDomainLinks().
|
protected |
Pointer to domain.
Definition at line 84 of file nummet.h.
Referenced by oofem::NRSolver::checkConvergence(), oofem::CylindricalALM::checkConvergence(), oofem::CylindricalALM::convertHPCMap(), oofem::SparseNonLinearSystemNM::convertPertMap(), oofem::CylindricalALM::do_lineSearch(), oofem::FETISolver::estimateMaxPackSize(), oofem::NRSolver::giveLinearSolver(), oofem::CylindricalALM::giveLinearSolver(), oofem::NRSolver::giveLineSearchSolver(), oofem::NRSolver::initPrescribedEqs(), oofem::FETISolver::masterMapDirectionVector(), oofem::FETISolver::masterMapPPVector(), oofem::FETISolver::masterMapRBM(), oofem::FETISolver::masterMapResiduals(), oofem::FETISolver::masterMapSolution(), oofem::FETISolver::packPPVector(), oofem::FETISolver::packRBM(), oofem::FETISolver::packResiduals(), oofem::FETISolver::setUpCommunicationMaps(), oofem::DynamicRelaxationSolver::solve(), oofem::LineSearchNM::solve(), oofem::InverseIteration::solve(), oofem::SubspaceIteration::solve(), oofem::FETISolver::solve(), oofem::NRSolver::solve(), oofem::CylindricalALM::solve(), oofem::FETISolver::unpackDirectionVector(), and oofem::FETISolver::unpackSolution().
|
protected |
Pointer to engineering model.
Definition at line 86 of file nummet.h.
Referenced by oofem::NRSolver::applyConstraintsToLoadIncrement(), oofem::NRSolver::checkConvergence(), oofem::CylindricalALM::do_lineSearch(), oofem::NRSolver::giveLinearSolver(), oofem::CylindricalALM::giveLinearSolver(), oofem::NRSolver::giveLineSearchSolver(), oofem::NRSolver::initPrescribedEqs(), oofem::PetscSolver::petsc_solve(), oofem::SLEPcSolver::solve(), oofem::DynamicRelaxationSolver::solve(), oofem::LineSearchNM::solve(), oofem::InverseIteration::solve(), oofem::SubspaceIteration::solve(), oofem::FETISolver::solve(), oofem::NRSolver::solve(), oofem::CylindricalALM::solve(), and oofem::FETISolver::~FETISolver().