OOFEM 3.0
Loading...
Searching...
No Matches
mpmproblem.h
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef mpmproblem_h
36#define mpmproblem_h
37
38#include "engngm.h"
39#include "sparselinsystemnm.h"
41#include "sparsemtrx.h"
42#include "primaryfield.h"
43#include "function.h"
45
47
48#define _IFT_MPMProblem_Name "mpmproblem"
49#define _IFT_MPMProblem_initt "initt"
50#define _IFT_MPMProblem_deltat "deltat"
51#define _IFT_MPMProblem_deltatfunction "deltatfunction"
52#define _IFT_MPMProblem_prescribedtimes "prescribedtimes"
53#define _IFT_MPMProblem_alpha "alpha"
54#define _IFT_MPMProblem_keepTangent "keeptangent"
55#define _IFT_MPMProblem_exportFields "exportfields"
56#define _IFT_MPMProblem_problemType "ptype"
58
59namespace oofem {
60
66{
67protected:
68 double alpha;
69 double deltaT;
70
71public:
72 UPLhsAssembler(double alpha, double deltaT);
73 void matrixFromElement(FloatMatrix &mat, Element &element, TimeStep *tStep) const override;
74};
75
80{
81 protected:
82 double alpha;
83 double deltaT;
84public:
86 void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const override;
87};
88
94{
95protected:
96 double alpha;
97 double deltaT;
98
99public:
100 TMLhsAssembler(double alpha, double deltaT);
101 void matrixFromElement(FloatMatrix &mat, Element &element, TimeStep *tStep) const override;
102};
103
108{
109 protected:
110 double alpha;
111 double deltaT;
112public:
114 void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const override;
115};
116
117
118
127class MPMProblem : public EngngModel
128{
129protected:
131 std :: unique_ptr< DofDistributedPrimaryField > field;
132
133 std :: unique_ptr< SparseMtrx > effectiveMatrix;
134
138
140 std :: unique_ptr< SparseNonLinearSystemNM > nMethod;
141
143 double initT = 0.;
145 double deltaT = 0.;
146 double alpha = 0.;
148 int dtFunction = 0;
151 bool keepTangent = false, hasTangent = false;
154 std::string problemType;
155
156public:
157 MPMProblem(int i, EngngModel * _master);
158
159
160 void solveYourselfAt(TimeStep *tStep) override;
161 void updateComponent(TimeStep *tStep, NumericalCmpn cmpn, Domain *d) override;
162 bool newDofHandling() override { return true; }
163 void updateSolution(FloatArray &solutionVector, TimeStep *tStep, Domain *d) override;
164 void updateInternalRHS(FloatArray &answer, TimeStep *tStep, Domain *d, FloatArray *eNorm) override;
165 void updateMatrix(SparseMtrx &mat, TimeStep *tStep, Domain *d) override;
166 double giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof) override;
167 void saveContext(DataStream &stream, ContextMode mode) override;
168 void restoreContext(DataStream &stream, ContextMode mode) override;
169
170 virtual void applyIC();
171
173 int giveUnknownDictHashIndx(ValueModeType mode, TimeStep *tStep) override;
174 void updateDomainLinks() override;
175
177 double giveDeltaT(int n);
178 double giveDiscreteTime(int iStep);
179
180 TimeStep *giveNextStep() override;
181 TimeStep *giveSolutionStepWhenIcApply(bool force = false) override;
183
184 void initializeFrom(InputRecord &ir) override;
185
186 bool requiresEquationRenumbering(TimeStep *tStep) override;
187 int forceEquationNumbering() override;
188
189 void printOutputAt(FILE *file, TimeStep *tStep) override;
190
191 void updateYourself(TimeStep *tStep) override;
192
193 int checkConsistency() override;
194 FieldPtr giveField (FieldType key, TimeStep *tStep) override;
195 // identification
196 const char *giveInputRecordName() const { return _IFT_MPMProblem_Name; }
197 const char *giveClassName() const override { return "MPMProblem"; }
198 fMode giveFormulation() override { return TL; }
199
202 double giveFinalTime() override
203 {
204 if(prescribedTimes.giveSize()) {
205 return prescribedTimes.at(prescribedTimes.giveSize());
206 } else {
207 return deltaT * numberOfSteps;
208 }
209 }
210
211};
212
213 /*
214 TimeStep* giveNextStep() override;
215 void solveYourselfAt(TimeStep *tStep) override;
216 void updateYourself(TimeStep *tStep) override;
217 double giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof) override;
218
219 void initializeFrom(InputRecord &ir) override;
220
221 // identification
222 const char *giveInputRecordName() const { return _IFT_MPMProblem_Name; }
223 const char *giveClassName() const override { return "MPMProblem"; }
224 fMode giveFormulation() override { return nonLinFormulation; }
225 int giveUnknownDictHashIndx(ValueModeType mode, TimeStep *tStep) override;
226 void updateDofUnknownsDictionary(DofManager *dman, TimeStep *tStep) override;
227
228 int giveCurrentNumberOfIterations() override { return currentIterations; }
229 TimeStep *giveSolutionStepWhenIcApply(bool force = false) override;
230 NumericalMethod *giveNumericalMethod(MetaStep *mStep) override;
231
232
233protected:
234 void updateInternalState(TimeStep *tStep) ;
235 void applyIC(TimeStep *tStep) ;
236 void createPreviousSolutionInDofUnknownsDictionary(TimeStep *tStep);
237 double giveDeltaT(int n);
238 virtual void copyUnknownsInDictionary(ValueModeType mode, TimeStep *fromTime, TimeStep *toTime);
239 Function * giveDtFunction();
240 double giveDiscreteTime(int n);
241};
242*/
243} // end namespace oofem
244#endif // mpmproblem_h
double giveDeltaT()
Returns time step size from the time step controlelr.
Definition engngm.h:424
EngngModel(int i, EngngModel *_master=NULL)
Definition engngm.C:99
int numberOfSteps
Total number of time steps.
Definition engngm.h:219
fMode giveFormulation() override
Definition mpmproblem.h:198
const char * giveInputRecordName() const
Definition mpmproblem.h:196
double deltaT
Length of time step.
Definition mpmproblem.h:145
void updateDomainLinks() override
Definition mpmproblem.C:683
FloatArray prescribedTimes
Specified times where the problem is solved.
Definition mpmproblem.h:150
double giveFinalTime() override
Definition mpmproblem.h:202
int checkConsistency() override
Definition mpmproblem.C:676
std::string problemType
identifies what problem to solve (UP, UPV, etc)
Definition mpmproblem.h:154
virtual void applyIC()
Definition mpmproblem.C:508
int dtFunction
Associated time function for time step increment.
Definition mpmproblem.h:148
int forceEquationNumbering() override
Definition mpmproblem.C:549
SparseMtrxType sparseMtrxType
Definition mpmproblem.h:130
void updateYourself(TimeStep *tStep) override
Definition mpmproblem.C:641
bool newDofHandling() override
Definition mpmproblem.h:162
void updateInternalRHS(FloatArray &answer, TimeStep *tStep, Domain *d, FloatArray *eNorm) override
Definition mpmproblem.C:422
bool requiresEquationRenumbering(TimeStep *tStep) override
Definition mpmproblem.C:526
std ::unique_ptr< SparseNonLinearSystemNM > nMethod
Numerical method used to solve the problem.
Definition mpmproblem.h:140
void updateMatrix(SparseMtrx &mat, TimeStep *tStep, Domain *d) override
Definition mpmproblem.C:438
void solveYourselfAt(TimeStep *tStep) override
Definition mpmproblem.C:359
FloatArray eNorm
Definition mpmproblem.h:137
FieldPtr giveField(FieldType key, TimeStep *tStep) override
Definition mpmproblem.C:690
int requiresUnknownsDictionaryUpdate() override
Definition mpmproblem.C:670
std ::unique_ptr< SparseMtrx > effectiveMatrix
Definition mpmproblem.h:133
TimeStep * giveNextStep() override
Returns next time step (next to current step) of receiver.
Definition mpmproblem.C:328
NumericalMethod * giveNumericalMethod(MetaStep *mStep) override
Returns reference to receiver's numerical method.
Definition mpmproblem.C:235
std ::unique_ptr< DofDistributedPrimaryField > field
Definition mpmproblem.h:131
int giveUnknownDictHashIndx(ValueModeType mode, TimeStep *tStep) override
Definition mpmproblem.C:663
double initT
Initial time from which the computation runs. Default is zero.
Definition mpmproblem.h:143
double giveDiscreteTime(int iStep)
Definition mpmproblem.C:315
IntArray exportFields
Definition mpmproblem.h:152
void updateComponent(TimeStep *tStep, NumericalCmpn cmpn, Domain *d) override
Definition mpmproblem.C:463
void initializeFrom(InputRecord &ir) override
Definition mpmproblem.C:246
void updateSolution(FloatArray &solutionVector, TimeStep *tStep, Domain *d) override
Definition mpmproblem.C:411
Function * giveDtFunction()
void saveContext(DataStream &stream, ContextMode mode) override
Definition mpmproblem.C:647
const char * giveClassName() const override
Returns class name of the receiver.
Definition mpmproblem.h:197
FloatArray internalForces
Definition mpmproblem.h:136
void printOutputAt(FILE *file, TimeStep *tStep) override
Definition mpmproblem.C:557
FloatArray solution
Definition mpmproblem.h:135
double giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof) override
Definition mpmproblem.C:296
void restoreContext(DataStream &stream, ContextMode mode) override
Definition mpmproblem.C:655
TimeStep * giveSolutionStepWhenIcApply(bool force=false) override
Definition mpmproblem.C:343
MPMProblem(int i, EngngModel *_master)
Definition mpmproblem.C:230
TMLhsAssembler(double alpha, double deltaT)
Definition mpmproblem.C:126
void matrixFromElement(FloatMatrix &mat, Element &element, TimeStep *tStep) const override
Definition mpmproblem.C:131
TMResidualAssembler(double alpha, double deltaT)
Definition mpmproblem.h:113
void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const override
Definition mpmproblem.C:186
void matrixFromElement(FloatMatrix &mat, Element &element, TimeStep *tStep) const override
Definition mpmproblem.C:64
UPLhsAssembler(double alpha, double deltaT)
Definition mpmproblem.C:59
UPResidualAssembler(double alpha, double deltaT)
Definition mpmproblem.h:85
void vectorFromElement(FloatArray &vec, Element &element, TimeStep *tStep, ValueModeType mode) const override
Definition mpmproblem.C:94
#define _IFT_MPMProblem_Name
Definition mpmproblem.h:48
long ContextMode
Definition contextmode.h:43
fMode
Definition fmode.h:42
@ TL
Total Lagrange.
Definition fmode.h:44
FieldType
Physical type of field.
Definition field.h:64
@ SMT_Skyline
Symmetric skyline.
std::shared_ptr< Field > FieldPtr
Definition field.h:78

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011