50#define _IFT_StationaryMPMSProblem_Name "mpmsymbolicstationaryproblem"
70 std::unique_ptr<SparseNonLinearSystemNM>
nMethod;
87 unknownsField = std::make_unique<PrimaryField>(
this, 1, FT_Unknown, 0);
93 for (
const auto& i: integralList) {
120 if ( this->keepTangent ) {
121 this->effectiveMatrix->zero();
124 Integral* integral = this->integralList[i-1].get();
133 Integral* integral = this->integralList[i-1].get();
144 int currentIterations;
145 this->nMethod->solve(*this->effectiveMatrix,
153 SparseNonLinearSystemNM :: rlm_total,
161 this->residualVector.
zero();
163 eNorm.resize(maxdofids);
166 Integral* integral = this->integralList[i-1].get();
172 if ( !this->keepTangent ) {
174 this->effectiveMatrix->zero();
177 Integral* integral = this->integralList[i-1].get();
198 counter =
currentStep->giveSolutionStateCounter() + 1;
202 currentStep = std::make_unique<TimeStep>(istep,
this, 1, (
double ) istep, 0., counter);
211 return nMethod.get();
219 int eq = dof->__giveEquationNumber();
225 if (mode == VM_TotalIntrinsic) mode = VM_Total;
230 const char *
giveClassName()
const override {
return "StationaryMPMSProblem"; }
void buildSharedBoundaryEntities(Domain *d)
ConnectivityTable * giveConnectivityTable()
virtual int forceEquationNumbering()
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
EngngModel(int i, EngngModel *_master=NULL)
std ::unique_ptr< TimeStep > previousStep
Previous time step.
MetaStep * giveCurrentMetaStep()
Returns current meta step.
int ndomains
Number of receiver domains.
Domain * giveDomain(int n)
std ::unique_ptr< TimeStep > currentStep
Current time step.
@ InternalForcesExchangeTag
virtual void postInitialize()
virtual void initializeFrom(InputRecord &ir)
virtual int giveNumberOfFirstStep(bool force=false)
int updateSharedDofManagers(FloatArray &answer, const UnknownNumberingScheme &s, int ExchangeTag)
void zero()
Zeroes all coefficients of receiver.
Class representing weak form integral.
void assemble_lhs(SparseMtrx &dest, const UnknownNumberingScheme &s, TimeStep *tStep) const
void assemble_rhs(FloatArray &dest, const UnknownNumberingScheme &s, TimeStep *tstep, FloatArray *eNorms=NULL) const
fMode giveFormulation() override
void updateSolution(FloatArray &solutionVector, TimeStep *tStep, Domain *d) override
StationaryMPMSProblem(int i, EngngModel *_master)
FloatArray solutionVector
void postInitialize() override
void updateComponent(TimeStep *tStep, NumericalCmpn cmpn, Domain *d) override
TimeStep * giveNextStep() override
Returns next time step (next to current step) of receiver.
NumericalMethod * giveNumericalMethod(MetaStep *mStep) override
Returns reference to receiver's numerical method.
const char * giveClassName() const override
Returns class name of the receiver.
FloatArray residualVector
std ::unique_ptr< PrimaryField > unknownsField
This field stores solution vector. For fixed size of problem, the PrimaryField is used,...
SparseMtrxType sparseMtrxType
std::unique_ptr< SparseNonLinearSystemNM > nMethod
Numerical method used to solve the problem.
void initializeFrom(InputRecord &ir) override
double giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof) override
const char * giveInputRecordName() const
LinSystSolverType solverType
void solveYourselfAt(TimeStep *tStep) override
std ::unique_ptr< SparseMtrx > effectiveMatrix
int giveNumber()
Returns receiver's number.
#define OOFEM_LOG_INFO(...)
#define _IFT_StationaryMPMSProblem_Name
long StateCounterType
StateCounterType type used to indicate solution state.
@ SMT_Skyline
Symmetric skyline.
ClassFactory & classFactory