13 #ifndef SIM_EXPLICIT_LMM_H_
14 #define SIM_EXPLICIT_LMM_H_
29 template<
class Solver>
39 const std::string& solField =
"") :
72 solver.getProcessAdm().cout <<
"\n step = "<< tp.
step <<
" time = "<< tp.
time.
t << std::endl;
82 const std::vector<std::vector<double>> AB_coefs =
85 {5.0/12.0, -16.0/12.0, 23.0/12.0},
86 {-9.0/24.0, 37.0/24, -59.0/24.0, 55.0/24.0},
87 {251.0/720.0, -1274.0/720.0, 2616.0/720.0, -2774.0/720.0, 1901.0/720.0}};
90 const std::vector<double>& AB_coef = AB_coefs[c_order];
91 solver.getRHSvector(0,
false)->mult(AB_coef.back() * tp.
time.
dt);
92 for (
size_t j = 0; j < AB_coef.size()-1; ++j)
99 solver.setMode(SIM::RHS_ONLY);
109 solver.getProblem()->getField1Name(1).c_str());
120 for (
int j = 2; j <=
order; ++j) {
121 std::stringstream str;
123 if (
solver.hasIC(str.str())) {
138 for (
int j =
order-2; j >= 0; --j)
141 return solver.advanceStep(tp);
145 bool saveModel(
char* fileName,
int& geoBlk,
int& nBlock)
147 return solver.saveModel(fileName, geoBlk, nBlock);
153 return solver.saveStep(tp, nBlock);
159 solver.registerFields(exporter);
166 return solver.serialize(data);
173 return solver.deSerialize(data);
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition: MatVec.h:37
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
Class for administration of MPI processes in IFEM library.
Definition: ProcessAdm.h:33
Base class for representing a system vector on different formats.
Definition: SystemMatrix.h:32
Explicit linear multistep time stepping for SIM classes.
Definition: SIMExplicitLMM.h:31
bool serialize(std::map< std::string, std::string > &data)
Serialize internal state for restarting purposes.
Definition: SIMExplicitLMM.h:164
bool hasICs
If true, start with full order.
Definition: SIMExplicitLMM.h:185
const ProcessAdm & getProcessAdm() const
Returns the parallel process administrator.
Definition: SIMExplicitLMM.h:66
bool saveStep(const TimeStep &tp, int &nBlock)
Saves the converged results of a given time step to VTF file.
Definition: SIMExplicitLMM.h:151
bool linear
If true, mass matrix is constant.
Definition: SIMExplicitLMM.h:186
bool solveStep(TimeStep &tp)
Computes the solution for the current time step.
Definition: SIMExplicitLMM.h:69
Solver & solver
Reference to simulator.
Definition: SIMExplicitLMM.h:180
std::vector< SystemVector * > loads
Unscaled load vectors.
Definition: SIMExplicitLMM.h:181
bool advanceStep(TimeStep &tp)
Advances the time step one step forward.
Definition: SIMExplicitLMM.h:115
const std::string fieldName
Name of primary solution fields (for ICs)
Definition: SIMExplicitLMM.h:184
bool alone
If true, this is a standalone solver.
Definition: SIMExplicitLMM.h:183
bool deSerialize(const std::map< std::string, std::string > &data)
Set internal state from a serialized state.
Definition: SIMExplicitLMM.h:171
bool saveModel(char *fileName, int &geoBlk, int &nBlock)
Opens a new VTF-file and writes the model geometry to it.
Definition: SIMExplicitLMM.h:145
~SIMExplicitLMM()
Destructor frees up the load vectors.
Definition: SIMExplicitLMM.h:59
int order
Order of method.
Definition: SIMExplicitLMM.h:182
SIMExplicitLMM(Solver &solv, Method type, bool standalone=true, const std::string &solField="")
Constructor.
Definition: SIMExplicitLMM.h:38
void setLinear(bool enable)
Mark operator as linear to avoid repeated assembly and factorization.
Definition: SIMExplicitLMM.h:177
void registerFields(DataExporter &exporter)
Registers fields for output to a data exporter.
Definition: SIMExplicitLMM.h:157
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
A vector class with some added algebraic operations.
Definition: matrix.h:64
Utilities for time integration.
Definition: BDF.h:21
Method
Enum defining various solution methods.
Definition: TimeIntUtils.h:28
@ AB2
Second order Adams-Bashforth, explicit.
Definition: TimeIntUtils.h:37
@ AB3
Third order Adams-Bashforth, explicit.
Definition: TimeIntUtils.h:38
@ AB4
Fourth order Adams-Bashforth, explicit.
Definition: TimeIntUtils.h:39
@ AB5
Fifth order Adams-Bashforth, explicit.
Definition: TimeIntUtils.h:40
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