13 #ifndef SIM_IMPLICIT_LMM_H_
14 #define SIM_IMPLICIT_LMM_H_
30 template<
class Solver>
39 const std::string& solField =
"") :
69 const std::vector<std::vector<double>> AM_coefs =
72 {-1.0/12.0, 2.0/3.0, 5.0/12.0},
73 {1.0/24.0, -5.0/24, 19.0/24.0, 9.0/24.0},
74 {-19.0/720.0, 106.0/720.0, -264.0/720.0, 646.0/720.0, 251.0/720.0}};
82 solver.setTimeScale(AM_coefs[c_order].back()*tp.
time.
dt);
88 solver.setMode(SIM::RHS_ONLY);
105 if (std::string fName =
fieldName + std::to_string(j);
119 for (
int j =
order-2; j >= 0; --j)
122 return solver.advanceStep(tp);
126 bool saveModel(
char* fileName,
int& geoBlk,
int& nBlock)
128 return solver.saveModel(fileName, geoBlk, nBlock);
134 return solver.saveStep(tp, nBlock);
140 solver.registerFields(exporter);
147 return solver.serialize(data);
154 return solver.deSerialize(data);
178 bool newLHSmatrix =
true,
bool poorConvg =
false)
183 for (
size_t i = 0; i <
coefs.size()-1; ++i)
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition: MatVec.h:37
Nonlinear solution driver for isogeometric FEM simulators.
General representation of system matrices and vectors.
Various helpers for time integration.
Class for encapsulation of general time stepping parameters.
Administer and write data using DataWriters.
Definition: DataExporter.h:38
virtual void initSol(size_t nSol=1, size_t nDof=0)
Initializes the primary solution vectors.
Definition: MultiStepSIM.C:83
SIMoutput & model
The isogeometric FE model.
Definition: MultiStepSIM.h:210
Nonlinear quasi-static solution driver for isogeometric FEM simulators.
Definition: NonLinSIM.h:28
virtual SIM::ConvStatus solveStep(TimeStep ¶m, SIM::SolutionMode mode=SIM::STATIC, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Solves the nonlinear equations by Newton-Raphson iterations.
Definition: NonLinSIM.C:208
Class for administration of MPI processes in IFEM library.
Definition: ProcessAdm.h:33
Base class for NURBS-based FEM simulators.
Definition: SIMbase.h:72
void addToRHSvector(size_t idx, const SystemVector &vec, double scale=1.0)
Adds a system vector to the given right-hand-side vector.
Definition: SIMbase.C:1713
virtual bool assembleSystem(const TimeDomain &time, const Vectors &prevSol, bool newLHSmatrix=true, bool poorConvg=false)
Administers assembly of the linear equation system.
Definition: SIMbase.C:1168
virtual Vectors & theSolutions()
Returns a reference to the solution vectors (for assignment).
Definition: SIMsolution.h:70
virtual const Vector & getSolution(int ix=0) const
Returns a const reference to current solution vector.
Definition: SIMsolution.h:73
Base class for representing a system vector on different formats.
Definition: SystemMatrix.h:32
Specialized nonlinear solver for implicit LMM methods.
Definition: SIMImplicitLMM.h:160
std::vector< SystemVector * > & loads
Reference to load vectors.
Definition: SIMImplicitLMM.h:190
bool assembleSystem(const TimeDomain &time, const Vectors &pSol, bool newLHSmatrix=true, bool poorConvg=false)
Administers assembly of the linear equation system.
Definition: SIMImplicitLMM.h:177
LMMNonLinSIM(SIMbase &sim, std::vector< SystemVector * > &load)
The constructor initializes default solution parameters.
Definition: SIMImplicitLMM.h:165
void setCoefs(const std::vector< double > &coef)
Set scaling coefficients.
Definition: SIMImplicitLMM.h:169
std::vector< double > coefs
Time integration coefficients.
Definition: SIMImplicitLMM.h:191
Implicit multi-step time integration for SIM classes.
Definition: SIMImplicitLMM.h:32
void registerFields(DataExporter &exporter)
Registers fields for output to a data exporter.
Definition: SIMImplicitLMM.h:138
const std::string fieldName
Name of primary solution fields (for ICs)
Definition: SIMImplicitLMM.h:198
const ProcessAdm & getProcessAdm() const
Returns the parallel process administrator.
Definition: SIMImplicitLMM.h:64
int order
Order of method.
Definition: SIMImplicitLMM.h:197
bool saveModel(char *fileName, int &geoBlk, int &nBlock)
Opens a new VTF-file and writes the model geometry to it.
Definition: SIMImplicitLMM.h:126
bool serialize(std::map< std::string, std::string > &data)
Serialize internal state for restarting purposes.
Definition: SIMImplicitLMM.h:145
std::vector< SystemVector * > loads
Unscaled load vectors.
Definition: SIMImplicitLMM.h:196
Solver & solver
Reference to simulator.
Definition: SIMImplicitLMM.h:194
SIMImplicitLMM(Solver &solv, Method type, bool=false, const std::string &solField="")
Constructor.
Definition: SIMImplicitLMM.h:38
LMMNonLinSIM nSim
Nonlinear solver.
Definition: SIMImplicitLMM.h:195
bool saveStep(const TimeStep &tp, int &nBlock)
Saves the converged results of a given time step to VTF file.
Definition: SIMImplicitLMM.h:132
bool deSerialize(const std::map< std::string, std::string > &data)
Set internal state from a serialized state.
Definition: SIMImplicitLMM.h:152
bool hasICs
If true, start with full order.
Definition: SIMImplicitLMM.h:199
bool solveStep(TimeStep &tp)
Computes the solution for the current time step.
Definition: SIMImplicitLMM.h:67
~SIMImplicitLMM()
Destructor frees up the load vectors.
Definition: SIMImplicitLMM.h:57
bool advanceStep(TimeStep &tp)
Advances the time step one step forward.
Definition: SIMImplicitLMM.h:99
Class for encapsulation of general time stepping parameters.
Definition: TimeStep.h:31
int step
Time step counter.
Definition: TimeStep.h:72
TimeDomain time
Time domain data.
Definition: TimeStep.h:74
Utilities for time integration.
Definition: BDF.h:21
Method
Enum defining various solution methods.
Definition: TimeIntUtils.h:28
@ AM2
Second order Adams-Moulton, implicit.
Definition: TimeIntUtils.h:44
@ AM4
Fourth order Adams-Moulton, implicit.
Definition: TimeIntUtils.h:46
@ AM3
Third order Adams-Moulton, implicit.
Definition: TimeIntUtils.h:45
Struct representing the time domain.
Definition: TimeDomain.h:23
double dt
Current timestep (or load parameter) increment.
Definition: TimeDomain.h:25
double t
Current time (or pseudo time, load parameter)
Definition: TimeDomain.h:24