53StationaryTransportProblem :: StationaryTransportProblem(
int i,
EngngModel *_master =
nullptr) :
EngngModel(i, _master),
72 EngngModel :: initializeFrom(ir);
86 for (
int i = 1; i <= exportFields.
giveSize(); i++ ) {
87 if ( exportFields.
at(i) == FT_Temperature ) {
90 }
else if ( exportFields.
at(i) == FT_HumidityConcentration ) {
99 UnknownsField = std::make_unique<PrimaryField>(
this, 1, FT_TransportProblemUnknowns, 0);
105double StationaryTransportProblem :: giveUnknownComponent(ValueModeType mode,
TimeStep *tStep,
Domain *d,
Dof *dof)
112 if (mode == VM_TotalIntrinsic) mode = VM_Total;
124 OOFEM_ERROR(
"Unable to return field representation for non-current time step");
126 if ( key == FT_Temperature ) {
129 }
else if ( key == FT_HumidityConcentration ) {
139TimeStep *StationaryTransportProblem :: giveNextStep()
146 counter =
currentStep->giveSolutionStateCounter() + 1;
150 currentStep = std::make_unique<TimeStep>(istep,
this, 1, (
double ) istep, 0., counter);
155void StationaryTransportProblem :: solveYourselfAt(
TimeStep *tStep)
169 solutionVector->
resize(neq);
170 solutionVector->
zero();
201 externalForces.
zero();
213 int currentIterations;
219 this->internalForces,
222 SparseNonLinearSystemNM :: rlm_total,
281 EngngModel :: saveContext(stream, mode);
289 EngngModel :: restoreContext(stream, mode);
295StationaryTransportProblem :: checkConsistency()
302 OOFEM_WARNING(
"Element %d has no TransportElement base", elem->giveLabel());
307 return EngngModel :: checkConsistency();
312StationaryTransportProblem :: updateDomainLinks()
314 EngngModel :: updateDomainLinks();
#define REGISTER_EngngModel(class)
virtual int __giveEquationNumber() const =0
std ::vector< std ::unique_ptr< Element > > & giveElements()
virtual void updateYourself(TimeStep *tStep)
virtual TimeStep * giveCurrentStep(bool force=false)
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
EngngModelContext * giveContext()
Context requesting service.
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 int giveNumberOfFirstStep(bool force=false)
int updateSharedDofManagers(FloatArray &answer, const UnknownNumberingScheme &s, int ExchangeTag)
void assembleVector(FloatArray &answer, TimeStep *tStep, const VectorAssembler &va, ValueModeType mode, const UnknownNumberingScheme &s, Domain *domain, FloatArray *eNorms=NULL)
void registerField(FieldPtr eField, FieldType key)
void zero()
Zeroes all coefficients of receiver.
virtual void zero()=0
Zeroes the receiver.
std::unique_ptr< SparseNonLinearSystemNM > nMethod
Numerical method used to solve the problem.
NumericalMethod * giveNumericalMethod(MetaStep *mStep) override
Returns reference to receiver's numerical method.
SparseMtrxType sparseMtrxType
FloatArray internalForces
FieldPtr giveField(FieldType key, TimeStep *) override
std ::unique_ptr< PrimaryField > UnknownsField
This field stores solution vector. For fixed size of problem, the PrimaryField is used,...
std ::unique_ptr< SparseMtrx > conductivityMatrix
int giveNumber()
Returns receiver's number.
void updateInternalState(TimeStep *tStep) override
#define _IFT_EngngModel_smtype
#define OOFEM_WARNING(...)
#define OOFEM_LOG_INFO(...)
FieldType
Physical type of field.
FloatArrayF< N > assemble(const FloatArrayF< M > &x, int const (&c)[M])
Assemble components into zero matrix.
long StateCounterType
StateCounterType type used to indicate solution state.
@ SMT_Skyline
Symmetric skyline.
ClassFactory & classFactory
std::shared_ptr< Field > FieldPtr
#define _IFT_StationaryTransportProblem_exportfields
#define _IFT_StationaryTransportProblem_keepTangent