31#define _IFT_TestProblem_Name "test"
164 if (egt == EGT_line_1) {
167 internalDofManOffset = 0;
169 }
else if (
order == 2) {
171 internalDofManOffset = 0;
174 }
else if (egt==EGT_quad_1) {
177 internalDofManOffset = 0;
179 }
else if (
order == 2) {
181 internalDofManOffset = 0;
185 OOFEM_ERROR(
"Unsupported element geometry type (%d) and interpolation order (%d)", egt,
order);
198 if (egt == EGT_quad_1)
return _Square;
199 else if (egt == EGT_line_1)
return _Line;
210 if (egt == EGT_quad_1)
return 2;
211 else if (egt == EGT_line_1)
return 1;
226 if ((egt == EGT_quad_2) || (egt == EGT_quad_1)) {
228 std::unique_ptr<DofManager> dm = std::make_unique<DofManager>(1, d);
232 OOFEM_ERROR (
"Unsupported element geometry type (%d)", egt);
245 if (egt == EGT_quad_1)
return _Square;
246 else if (egt == EGT_line_1)
return _Line;
257 if (egt == EGT_quad_1)
return 2;
258 else if (egt == EGT_line_1)
return 1;
278 if ((egt == EGT_quad_1) || (egt==EGT_quad_2))
return _Square;
279 else if ((egt == EGT_line_1) || (egt == EGT_line_2))
return _Line;
290 if ((egt == EGT_quad_1)||(egt==EGT_quad_2))
return 2;
291 else if ((egt == EGT_line_1)||(egt==EGT_line_2))
return 1;
296 if ((egt==EGT_quad_1)||(egt==EGT_quad_2))
return &
fei2dQuadQuad;
297 else if ((egt == EGT_line_1)||(egt==EGT_line_2))
return &
fei2dLineQuad;
306 if ((egt == EGT_quad_2) || (egt == EGT_line_2)) {
308 }
else if (egt == EGT_line_1) {
312 std::unique_ptr<DofManager> dm = std::make_unique<DofManager>(ndm, d);
317 }
else if (egt == EGT_quad_1) {
321 for (
int i = 1; i<= 4; i++) {
324 std::unique_ptr<DofManager> dm= std::make_unique<DofManager>(ndm, d);
333 int dofManOffset, internalDofManOffset;
341 OOFEM_ERROR (
"Unsupported element geometry type (%d)", egt);
347 if (egt == EGT_line_1) {
353 }
if (egt == EGT_quad_1) {
360 for (
int i=1; i<=nnodes; i++) {
361 enodes.
at(i) = nodes.
at(i);
373 MatResponseMode
lhsmatmode = MatResponseMode::TangentStiffness;
450 if ((mmode == _3dUP) || (mmode == _3dUPV) || (
mode==_3dMat)) {
452 answer.
resize(6, nnodes*ndofs);
453 for (
int i = 0; i< nnodes; i++) {
454 answer(0, i*ndofs+0) = dndx(i, 0);
455 answer(1, i*ndofs+1) = dndx(i, 1);
456 answer(2, i*ndofs+2) = dndx(i, 2);
458 answer(3, i*ndofs+1) = dndx(i, 2);
459 answer(3, i*ndofs+2) = dndx(i, 1);
461 answer(4, i*ndofs+0) = dndx(i, 2);
462 answer(4, i*ndofs+2) = dndx(i, 0);
464 answer(5, i*ndofs+0) = dndx(i, 1);
465 answer(5, i*ndofs+1) = dndx(i, 0);
467 }
else if ((mmode == _2dUP) || (mmode == _2dUPV)) {
468 answer.
resize(6, nnodes*ndofs);
469 for (
int i = 0; i< nnodes; i++) {
470 answer(0, i*ndofs+0) = dndx(i, 0);
471 answer(1, i*ndofs+1) = dndx(i, 1);
473 answer(5, i*ndofs+0) = dndx(i, 1);
474 answer(5, i*ndofs+1) = dndx(i, 0);
476 }
else if ((mmode == _PlaneStress)) {
477 answer.
resize(3, nnodes*ndofs);
478 for (
int i = 0; i< nnodes; i++) {
479 answer(0, i*ndofs+0) = dndx(i, 0);
480 answer(1, i*ndofs+1) = dndx(i, 1);
482 answer(2, i*ndofs+0) = dndx(i, 1);
483 answer(2, i*ndofs+1) = dndx(i, 0);
485 }
else if (mmode == _PlaneStrain) {
486 answer.
resize(4, nnodes*ndofs);
487 for (
int i = 0; i< nnodes; i++) {
488 answer(0, i*ndofs+0) = dndx(i, 0);
489 answer(1, i*ndofs+1) = dndx(i, 1);
491 answer(3, i*ndofs+0) = dndx(i, 1);
492 answer(3, i*ndofs+1) = dndx(i, 0);
495 OOFEM_ERROR(
"Unsupported material mode %d", mmode);
500 #define _IFT_BTSigmaTerm2_Name "BTSigmaTerm"
536 #define _IFT_NTfTerm_Name "NTfTerm"
543 std :: unique_ptr< DofDistributedPrimaryField >
field;
552 std :: unique_ptr< SparseLinearSystemNM >
nMethod;
570 for (
const auto& i: integralList) {
598 for (
auto &n: this->
giveDomain(1)->dofManagerList) {
599 printf(
"Node %3d, code numbers: %4d %4d\n", n->giveNumber(), n->giveDofWithID(D_u)->__giveEquationNumber(), n->giveDofWithID(D_v)->__giveEquationNumber());
602 for (
auto& e: this->
giveDomain(1)->elementList) {
603 printf(
"Element %4d, nodes ", e->giveNumber());
604 IntArray nodes = e->giveDofManArray();
605 for (
auto n: nodes) {
618 Integral* integral = this->integralList[i-1].get();
626 Integral* integral = this->integralList[i-1].get();
670 int eq = dof->__giveEquationNumber();
691 OOFEM_ERROR(
"Unknown is of undefined type for this problem");
727 return this->internalDofManagers.at(i-1).get();
730 if (num > (
int)this->internalDofManagers.size()) {
731 this->internalDofManagers.resize(num);
733 this->internalDofManagers[num-1] = std::move(dm);
740 if (includeHierarchical && nnodes > 4) {
742 int nbaseenodes = answer.
giveSize();
743 int offset = 3+boundary;
746 for (
int i=1; i<=nhiernodes; i++) {
747 answer.
at(nbaseenodes+i) = i+offset;
750 OOFEM_ERROR(
"Unsupported hierarchical node scheme (nnodes=%d)", nnodes);
756 #define _IFT_Q1Element_Name "q1"
768 return &this->gInterpol;
783 #define _IFT_L1Element_Name "l1"
void grad(FloatMatrix &answer, const Variable *v, const FEInterpolation *interpol, const MPElement &cell, const FloatArray &coords, const MaterialMode mmode) const
Evaluates B matrix; i.e. $LN$ where $L$ is operator matrix and $N$ is interpolation matrix of unknown...
MatResponseMode lhsmatmode
void getDimensions(Element &cell) const override
MatResponseMode rhsmatmode
void evaluate_lin(FloatMatrix &answer, MPElement &e, GaussPoint *gp, TimeStep *tstep) const override
Evaluates the linearization of $B^T\sigma(u)$, i.e. $B^TDBu$.
void evaluate(FloatArray &answer, MPElement &cell, GaussPoint *gp, TimeStep *tstep) const override
Evaluates Internal forces vector, i.e. $b^T\sigma(u)$.
BTSigmaTerm2(const Variable *testField, const Variable *unknownField, MaterialMode m)
void initializeFrom(InputRecord &ir, EngngModel *problem) override
void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
const FloatArray * giveKnotVector() const override
std::unique_ptr< IntegrationRule > giveIntegrationRule(int _order, Element_Geometry_Type egt) const override
void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
virtual int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const override
integrationDomain giveBoundaryEdgeIntegrationDomain(int boundary, Element_Geometry_Type egt) const override
Returns boundary integration domain.
std::unique_ptr< IntegrationRule > giveBoundaryEdgeIntegrationRule(int _order, int boundary, Element_Geometry_Type egt) const override
double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int _order, int boundary, Element_Geometry_Type egt) const override
IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type gt) const override
double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
integrationDomain giveBoundaryIntegrationDomain(int boundary, Element_Geometry_Type egt) const override
Returns boundary integration domain.
CellTypeUnifiedInterpolation(int o)
int giveNumberOfKnotSpanBasisFunctions(const IntArray &knotSpan) const override
double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
virtual void giveCellDofManNumberingOffsets(Element_Geometry_Type egt, int order, int &dofManOffset, int &internalDofManOffset) const
double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
std::unique_ptr< IntegrationRule > giveBoundarySurfaceIntegrationRule(int _order, int boundary, const Element_Geometry_Type egt) const override
virtual void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type gt, bool includeHierarchical=false) const override
void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void giveCellDofMans(IntArray &nodes, IntArray &internalDofMans, Element *elem) const override
Returns list of element nodes (and list of internal dof managers) (including on edges and surfaces) d...
integrationDomain giveBoundarySurfaceIntegrationDomain(int boundary, const Element_Geometry_Type egt) const override
Returns boundary integration domain.
const IntArray * giveKnotMultiplicity(int dim) const override
double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
int giveKnotSpanBasisFuncMask(const IntArray &knotSpan, IntArray &mask) const override
double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
IntArray boundaryEdgeGiveNodes(int boundary, Element_Geometry_Type gt, bool includeHierarchical=false) const override
bool hasSubPatchFormulation() const override
virtual const FEInterpolation * getCellInterpolation(Element_Geometry_Type egt) const =0
int giveNumberOfKnotSpans(int dim) const override
const FloatArray * giveKnotValues(int dim) const override
void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
int giveNumberOfNodes(Element_Geometry_Type gt) const override
int giveNumberOfEdges(Element_Geometry_Type gt) const override
void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
SharedBoundaryEntity * giveBoundaryEntity(int id)
void buildSharedBoundaryEntities(Domain *d)
virtual const Element_Geometry_Type giveGeometryType() const override
const FEInterpolation * getCellInterpolation(Element_Geometry_Type egt) const override
virtual const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override
FEI2dQuadConst fei2dQuadConst
FEI2dLineConst fei2dLineConst
virtual integrationDomain giveIntegrationDomain(const Element_Geometry_Type egt) const override
void initializeCell(Element *e) const override
int giveNsd(const Element_Geometry_Type egt) const override
virtual Material * giveMaterial(IntegrationPoint *ip) const =0
hidden by virtual oofem::Material* TransportCrossSection::giveMaterial() const
void resizeDofManagers(int _newSize)
Resizes the internal data structure to accommodate space for _newSize dofManagers.
ConnectivityTable * giveConnectivityTable()
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
Element * giveElement(int n)
void setDofManager(int i, std::unique_ptr< DofManager > obj)
Sets i-th component. The component will be further managed and maintained by domain object.
void setDofManager(int id, int dm)
void setNumberOfDofManagers(int i)
Sets number of element dof managers.
IntArray dofManArray
Array containing dofmanager numbers.
const IntArray & giveDofManArray() const
virtual int giveNumberOfInternalDofManagers() const
const IntArray * giveSharedEdgeIDs() const
virtual void setInternalDofManager(int num, std::unique_ptr< DofManager > dm)
void setDofManagers(const IntArray &dmans)
int numberOfDofMans
Number of dofmanagers.
virtual int giveNumberOfDofManagers() const
CrossSection * giveCrossSection()
int giveDofManagerNumber(int i) const
virtual Element_Geometry_Type giveGeometryType() const =0
int giveNumberOfTimeStepWhenIcApply()
Returns the time step number, when initial conditions should apply.
virtual int forceEquationNumbering()
virtual TimeStep * giveCurrentStep(bool force=false)
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
EngngModel(int i, EngngModel *_master=NULL)
std ::unique_ptr< TimeStep > previousStep
Previous time step.
int ndomains
Number of receiver domains.
Domain * giveDomain(int n)
std ::unique_ptr< TimeStep > currentStep
Current time step.
virtual void postInitialize()
virtual void initializeFrom(InputRecord &ir)
bool isParallel() const
Returns true if receiver in parallel mode.
virtual const Element_Geometry_Type giveGeometryType() const =0
virtual std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
virtual std::unique_ptr< IntegrationRule > giveBoundaryEdgeIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
virtual integrationDomain giveBoundarySurfaceIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const =0
virtual void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const =0
virtual int giveNumberOfNodes(const Element_Geometry_Type) const
virtual double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual integrationDomain giveBoundaryIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual int giveNumberOfEdges(const Element_Geometry_Type) const
virtual double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
virtual void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const =0
virtual integrationDomain giveBoundaryEdgeIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
virtual void giveCellDofMans(IntArray &nodes, IntArray &internalDofMans, Element *elem) const
Returns list of element nodes (and list of internal dof managers) (including on edges and surfaces) d...
virtual std::unique_ptr< IntegrationRule > giveBoundarySurfaceIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
virtual double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual std::unique_ptr< IntegrationRule > giveIntegrationRule(int order, const Element_Geometry_Type) const
virtual void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
Domain * giveDomain() const
Index giveSize() const
Returns the size of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void resize(Index rows, Index cols)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
void resizeWithValues(int n, int allocChunk=0)
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
L1Element(int n, Domain *d)
static const FEInterpolation & gInterpol
const FEInterpolation * getGeometryInterpolation() const override
int getNumberOfSurfaceDOFs() const override
const char * giveInputRecordName() const override
const char * giveClassName() const override
void getDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
void getEdgeLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
void getSurfaceLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
int getNumberOfEdgeDOFs() const override
Element_Geometry_Type giveGeometryType() const override
void getInternalDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
virtual const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override
void initializeCell(Element *e) const override
virtual const Element_Geometry_Type giveGeometryType() const override
virtual integrationDomain giveIntegrationDomain(const Element_Geometry_Type egt) const override
int giveNsd(const Element_Geometry_Type egt) const override
FEI2dQuadLin fei2dQuadLin
FEI2dLineLin fei2dLineLin
const FEInterpolation * getCellInterpolation(Element_Geometry_Type egt) const override
Base class for elements based on mp (multi-physics) concept.
IntArray giveBoundaryEdgeNodes(int boundary, bool includeHierarchical=false) const override
MPElement(int n, Domain *aDomain)
virtual const void getUnknownVector(FloatArray &answer, const Variable *field, ValueModeType mode, TimeStep *tstep)
Returns vector of nodal unknowns for given Variable.
void initializeFrom(InputRecord &ir, EngngModel *problem) override
virtual void giveCharacteristicVector(FloatArray &answer, FloatArray &flux, MatResponseMode type, GaussPoint *gp, TimeStep *tStep) const
Returns characteristic vector of the receiver.
virtual void giveCharacteristicMatrix(FloatMatrix &answer, MatResponseMode type, GaussPoint *gp, TimeStep *tStep) const
Returns characteristic matrix of the receiver.
NTfTerm(const Variable *testField, const Variable *unknownField, MaterialMode m)
void getDimensions(Element &cell) const override
NTfTerm(const Variable *testField, const Variable *unknownField, MaterialMode m, const FloatArray *f)
void evaluate(FloatArray &answer, MPElement &e, GaussPoint *gp, TimeStep *tstep) const override
Evaluates the residual contribution (rhs).
void evaluate_lin(FloatMatrix &answer, MPElement &e, GaussPoint *gp, TimeStep *tstep) const override
void initializeFrom(InputRecord &ir, EngngModel *problem) override
void getDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
IntArray giveBoundaryEdgeNodes(int boundary, bool includeHierarchical=false) const override
int giveNumberOfInternalDofManagers() const override
void setInternalDofManager(int num, std::unique_ptr< DofManager > dm) override
Element_Geometry_Type giveGeometryType() const override
const char * giveInputRecordName() const override
const char * giveClassName() const override
Q1Element(int n, Domain *d)
int getNumberOfSurfaceDOFs() const override
const FEInterpolation * getGeometryInterpolation() const override
static const FEInterpolation & gInterpol
int getNumberOfEdgeDOFs() const override
void getEdgeLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
std::vector< std::shared_ptr< DofManager > > internalDofManagers
DofManager * giveInternalDofManager(int i) const override
void getSurfaceLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
void getInternalDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
FEI2dLineQuad fei2dLineQuad
void initializeCell(Element *e) const override
virtual const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override
virtual integrationDomain giveIntegrationDomain(const Element_Geometry_Type egt) const override
FEI2dQuadQuad fei2dQuadQuad
int giveNsd(const Element_Geometry_Type egt) const override
void allocateDofMans(Element *e) const
virtual const Element_Geometry_Type giveGeometryType() const override
const FEInterpolation * getCellInterpolation(Element_Geometry_Type egt) const override
std::list< elementRec > elements
const Variable * testField
const char * giveInputRecordName() const
SparseMtrxType sparseMtrxType
std ::unique_ptr< SparseLinearSystemNM > nMethod
Numerical method used to solve the problem.
std ::unique_ptr< SparseMtrx > effectiveMatrix
fMode giveFormulation() override
LinSystSolverType solverType
std ::unique_ptr< DofDistributedPrimaryField > field
void initializeFrom(InputRecord &ir) override
void solveYourselfAt(TimeStep *tStep) override
NumericalMethod * giveNumericalMethod(MetaStep *mStep) override
Returns reference to receiver's numerical method.
FloatArray internalForces
TimeStep * giveNextStep() override
Returns next time step (next to current step) of receiver.
const char * giveClassName() const override
Returns class name of the receiver.
TestProblem(int i, EngngModel *_master)
void postInitialize() override
double giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof) override
oofem::VariableQuantity VariableQuantity
#define OOFEM_LOG_INFO(...)
@ _UnknownIntegrationDomain
@ SMT_Skyline
Symmetric skyline.
ClassFactory & classFactory
FloatMatrixF< N, N > inv(const FloatMatrixF< N, N > &mat, double zeropiv=1e-24)
Computes the inverse.
#define _IFT_TestProblem_Name