13#ifndef SIM_IMPLICIT_LMM_H_
14#define SIM_IMPLICIT_LMM_H_
40 const std::string& solField =
"") :
70 const std::vector<std::vector<double>> AM_coefs =
73 {-1.0/12.0, 2.0/3.0, 5.0/12.0},
74 {1.0/24.0, -5.0/24, 19.0/24.0, 9.0/24.0},
75 {-19.0/720.0, 106.0/720.0, -264.0/720.0, 646.0/720.0, 251.0/720.0}};
83 solver.setTimeScale(AM_coefs[c_order].back()*tp.
time.
dt);
89 solver.setMode(SIM::RHS_ONLY);
106 if (std::string fName =
fieldName + std::to_string(j);
120 for (
int j =
order-2; j >= 0; --j)
123 return solver.advanceStep(tp);
127 bool saveModel(
char* fileName,
int& geoBlk,
int& nBlock)
129 return solver.saveModel(fileName, geoBlk, nBlock);
135 return solver.saveStep(tp, nBlock);
141 solver.registerFields(exporter);
148 return solver.serialize(data);
155 return solver.deSerialize(data);
179 bool newLHSmatrix =
true,
bool poorConvg =
false)
184 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.
Sub-class with functionality for result output to VTF and terminal.
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:204
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:1774
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:1229
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:161
std::vector< SystemVector * > & loads
Reference to load vectors.
Definition SIMImplicitLMM.h:191
bool assembleSystem(const TimeDomain &time, const Vectors &pSol, bool newLHSmatrix=true, bool poorConvg=false)
Administers assembly of the linear equation system.
Definition SIMImplicitLMM.h:178
LMMNonLinSIM(SIMbase &sim, std::vector< SystemVector * > &load)
The constructor initializes default solution parameters.
Definition SIMImplicitLMM.h:166
void setCoefs(const std::vector< double > &coef)
Set scaling coefficients.
Definition SIMImplicitLMM.h:170
std::vector< double > coefs
Time integration coefficients.
Definition SIMImplicitLMM.h:192
Implicit multi-step time integration for SIM classes.
Definition SIMImplicitLMM.h:33
void registerFields(DataExporter &exporter)
Registers fields for output to a data exporter.
Definition SIMImplicitLMM.h:139
const ProcessAdm & getProcessAdm() const
Returns the parallel process administrator.
Definition SIMImplicitLMM.h:65
const std::string fieldName
Name of primary solution fields (for ICs)
Definition SIMImplicitLMM.h:199
int order
Order of method.
Definition SIMImplicitLMM.h:198
bool saveModel(char *fileName, int &geoBlk, int &nBlock)
Opens a new VTF-file and writes the model geometry to it.
Definition SIMImplicitLMM.h:127
bool serialize(std::map< std::string, std::string > &data)
Serialize internal state for restarting purposes.
Definition SIMImplicitLMM.h:146
std::vector< SystemVector * > loads
Unscaled load vectors.
Definition SIMImplicitLMM.h:197
Solver & solver
Reference to simulator.
Definition SIMImplicitLMM.h:195
SIMImplicitLMM(Solver &solv, Method type, bool=false, const std::string &solField="")
Constructor.
Definition SIMImplicitLMM.h:39
LMMNonLinSIM nSim
Nonlinear solver.
Definition SIMImplicitLMM.h:196
bool saveStep(const TimeStep &tp, int &nBlock)
Saves the converged results of a given time step to VTF file.
Definition SIMImplicitLMM.h:133
bool deSerialize(const std::map< std::string, std::string > &data)
Set internal state from a serialized state.
Definition SIMImplicitLMM.h:153
bool hasICs
If true, start with full order.
Definition SIMImplicitLMM.h:200
bool solveStep(TimeStep &tp)
Computes the solution for the current time step.
Definition SIMImplicitLMM.h:68
~SIMImplicitLMM()
Destructor frees up the load vectors.
Definition SIMImplicitLMM.h:58
bool advanceStep(TimeStep &tp)
Advances the time step one step forward.
Definition SIMImplicitLMM.h:100
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