97 if (type == MassMatrix) {
99 answer.
resize(sdofs,sdofs);
102 }
else if (type == StiffnessMatrix) {
104 answer.
resize(sdofs,sdofs);
108 }
else if (type == InternalFluxVector) {
129 OOFEM_ERROR(
"Unsupported boundary condition type");
133 OOFEM_ERROR(
"Unsupported boundary condition type");
199 if (type == InternalFluxVector) {
228 int nnodes =
N.giveSize();
235 for (
int k=1;k<=nnodes;k++) {
239 answer.
assemble(contrib, rows, cols);
242 for (
int k=1;k<=nnodes;k++) {
247 answer.
assemble(contrib, rows, cols);
253 for (
int k=1;k<=nnodes;k++) {
257 answer.
assemble(contrib, rows, cols);
259 for (
int k=1;k<=nnodes;k++) {
264 answer.
assemble(contrib, rows, cols);
268 }
else if ((type == MassMatrix) || (type == StiffnessMatrix)) {
355#define _IFT_SADGBLine1_Name "sadgbline1"
368 const static Variable scalarVariable;
371 SADGTriangle1(
int n,
Domain* d):
375 numberOfGaussPoints = 4;
376 this->computeGaussPoints();
392 void giveDofManDofIDMask(
int inode,
IntArray &answer)
const override {
396 int giveNumberOfDofs()
override {
return 3; }
397 const char *giveInputRecordName()
const override {
return "sadgtriangle1";}
398 const char *giveClassName()
const override {
return "SADGTriangle1"; }
401 const FEInterpolation* getGeometryInterpolation()
const override {
return &this->scalarInterpol;}
404 return EGT_triangle_1;
406 int getNumberOfSurfaceDOFs()
const override {
return 0;}
407 int getNumberOfEdgeDOFs()
const override {
return 2;}
417 virtual int giveNumberOfSDofs()
const override {
return 3;}
418 virtual const Variable* getScalarVariable()
const override {
return &scalarVariable;}
419 void computeGaussPoints()
override {
420 if ( integrationRulesArray.size() == 0 ) {
421 integrationRulesArray.resize( 1 );
422 integrationRulesArray [ 0 ] = std::make_unique<GaussIntegrationRule>(1,
this);
423 integrationRulesArray [ 0 ]->SetUpPointsOnTriangle(numberOfGaussPoints, _Unknown);
428const FEI2dTrLin SADGTriangle1::scalarInterpol = FEI2dTrLin(1,2);
429const Variable SADGTriangle1::scalarVariable(&SADGTriangle1::scalarInterpol, Variable::VariableQuantity::VolumeFraction, Variable::VariableType::scalar, 1, NULL, {DofIDItem::C_1});
431#define _IFT_SADGTriangle1_Name "sadgtria1"
443 const static Variable scalarVariable;
446 SADGBrick1(
int n,
Domain* d):
450 numberOfGaussPoints = 8;
451 this->computeGaussPoints();
466 void giveDofManDofIDMask(
int inode,
IntArray &answer)
const override {
470 int giveNumberOfDofs()
override {
return 8; }
471 const char *giveInputRecordName()
const override {
return "sadgbrick1";}
472 const char *giveClassName()
const override {
return "SADGBrick1"; }
475 const FEInterpolation* getGeometryInterpolation()
const override {
return &this->scalarInterpol;}
480 int getNumberOfSurfaceDOFs()
const override {
return 4;}
481 int getNumberOfEdgeDOFs()
const override {
return 2;}
491 virtual int giveNumberOfSDofs()
const override {
return 8;}
492 virtual const Variable* getScalarVariable()
const override {
return &scalarVariable;}
493 void computeGaussPoints()
override {
494 if ( integrationRulesArray.size() == 0 ) {
495 integrationRulesArray.resize( 1 );
496 integrationRulesArray [ 0 ] = std::make_unique<GaussIntegrationRule>(1,
this);
497 integrationRulesArray [ 0 ]->SetUpPointsOnCube(numberOfGaussPoints, _Unknown);
502const FEI3dHexaLin SADGBrick1::scalarInterpol = FEI3dHexaLin();
503const Variable SADGBrick1::scalarVariable(&SADGBrick1::scalarInterpol, Variable::VariableQuantity::VolumeFraction, Variable::VariableType::scalar, 1, NULL, {DofIDItem::C_1});
505#define _IFT_SADGBrick1_Name "sadgbrick1"
513 const static Variable scalarVariable;
517 SADGBQuad1(
int n,
Domain* d):
519 this->numberOfGaussPoints = 8;
522 void initializeFrom(
InputRecord &ir,
int priority)
override {
524 this->numberOfDofMans = this->dofManArray.giveSize();
525 if (!((numberOfDofMans == 4) || (numberOfDofMans == 8))) {
528 this->computeGaussPoints();
532 void giveDofManDofIDMask(
int inode,
IntArray &answer)
const override {
536 int giveNumberOfDofs()
override {
return numberOfDofMans; }
537 const char *giveInputRecordName()
const override {
return "sadgbquad1";}
538 const char *giveClassName()
const override {
return "SADGBQuad1"; }
541 const FEInterpolation* getGeometryInterpolation()
const override {
return &this->interpol;}
546 int getNumberOfSurfaceDOFs()
const override {
return 0;}
547 int getNumberOfEdgeDOFs()
const override {
return 0;}
555 int giveNumberOfSDofs()
const override {
return 8;}
556 int giveNumberOfSharedElements()
const override {
return this->numberOfDofMans/4;}
561 virtual const Variable* getScalarVariable()
const override {
return &scalarVariable;}
562 void computeGaussPoints()
override {
563 if ( integrationRulesArray.size() == 0 ) {
564 integrationRulesArray.resize( 1 );
565 integrationRulesArray [ 0 ] = std::make_unique<GaussIntegrationRule>(1,
this);
566 integrationRulesArray [ 0 ]->SetUpPointsOnSquare(numberOfGaussPoints, _Unknown);
571const FEI3dQuadLin SADGBQuad1::interpol = FEI3dQuadLin();
572const Variable SADGBQuad1::scalarVariable(&SADGBQuad1::interpol, Variable::VariableQuantity::VolumeFraction, Variable::VariableType::scalar, 1, NULL, {DofIDItem::C_1});
574#define _IFT_SADGBQuad1_Name "sadgbquad1"
#define REGISTER_Element(class)
EngngModel * giveEngngModel()
IntArray dofManArray
Array containing dofmanager numbers.
void initializeFrom(InputRecord &ir, int priority) override
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
virtual int giveNumberOfDofManagers() const
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
virtual Element_Geometry_Type giveGeometryType() const =0
virtual FieldPtr giveField(FieldType key, TimeStep *)
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual int giveNsd(const Element_Geometry_Type) const =0
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
Domain * giveDomain() const
double dotProduct(const FloatArray &x) const
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void zero()
Zeroes all coefficient of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
void assemble(const FloatMatrix &src, const IntArray &loc)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
double giveWeight()
Returns integration weight of receiver.
int giveNumberOfIntegrationPoints() const
GaussPoint * getIntegrationPoint(int n)
FEInterpolation * giveInterpolation() const override
MPElement(int n, Domain *aDomain)
void integrateTerm_dw(FloatMatrix &answer, const Term &term, IntegrationRule *iRule, TimeStep *tstep)
Advection problem mass matrix $S=(N)^T N$.
1D Line linear Element for Discontinuous Galerkin scalar advection
const char * giveInputRecordName() const override
void initializeFrom(InputRecord &ir, int priority) override
void getEdgeLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
int getNumberOfEdgeDOFs() const override
void giveDofManDofIDMask(int inode, IntArray &answer) const override
static const Variable scalarVariable
virtual const Variable * getScalarVariable() const override
SADGBLine1(int n, Domain *d)
int giveNumberOfDofs() override
static const FEI2dLineLin interpol
int getNumberOfSurfaceDOFs() const override
int giveNumberOfSharedElements() const override
Element_Geometry_Type giveGeometryType() const override
void getSurfaceLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q) const override
const char * giveClassName() const override
void computeGaussPoints() override
Interface * giveInterface(InterfaceType it) override
int giveNumberOfSDofs() const override
const FEInterpolation * getGeometryInterpolation() const override
void giveCharacteristicMatrixFromBC(FloatMatrix &answer, CharType type, TimeStep *tStep, GeneralBoundaryCondition *bc, int boundaryID) override
virtual int giveNumberOfSharedElements() const =0
void giveCharacteristicVector(FloatArray &answer, CharType type, ValueModeType mode, TimeStep *tStep) override
void giveCharacteristicMatrix(FloatMatrix &answer, CharType type, TimeStep *tStep) override
Base class for Discontinuous Galerkin scalar advection elements.
virtual int giveNumberOfSDofs() const =0
SADGElement(int n, Domain *d)
void computeBoundaryEdgeLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global=true) override
void giveCharacteristicVector(FloatArray &answer, CharType type, ValueModeType mode, TimeStep *tStep) override
virtual const Variable * getScalarVariable() const =0
int computeFluxLBToLRotationMatrix(FloatMatrix &answer, int iSurf, const FloatArray &lc, const Variable::VariableQuantity q, char btype) override
std ::vector< ElementDofManager * > internalDofManagers
void getDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
void giveCharacteristicMatrixFromBC(FloatMatrix &answer, CharType type, TimeStep *tStep, GeneralBoundaryCondition *bc, int boundaryID) override
virtual void giveCharacteristicVectorFromBC(FloatArray &answer, CharType type, ValueModeType mode, TimeStep *tStep, GeneralBoundaryCondition *bc, int boundaryID) override
void getInternalDofManLocalCodeNumbers(IntArray &answer, const Variable::VariableQuantity q, int num) const override
void computeLoadVector(FloatArray &answer, BodyLoad *load, CharType type, ValueModeType mode, TimeStep *tStep) override
void computeBoundarySurfaceLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global=true) override
void giveCharacteristicMatrix(FloatMatrix &answer, CharType type, TimeStep *tStep) override
oofem::VariableQuantity VariableQuantity
const IntArray & getDofManDofIDs() const
Returns DodIF mask in node; need generalization (which dofMan).
A advection equation term $T=(\grad N)^T N$.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]