IRResultType StationaryTransportProblem :: initializeFrom(InputRecord *ir) { const char *__proc = "initializeFrom"; // Required by IR_GIVE_FIELD macro IRResultType result; // Required by IR_GIVE_FIELD macro EngngModel :: initializeFrom(ir); int val = SMT_Skyline; IR_GIVE_OPTIONAL_FIELD(ir, val, _IFT_EngngModel_smtype); this->sparseMtrxType = ( SparseMtrxType ) val; ///@todo Combine this option with structural problems, where it is possible to keep the secant tangent elastic tangent (or generally, the initial tangent) etc. One option should fit all common needs here. this->keepTangent = ir->hasField(_IFT_StationaryTransportProblem_keepTangent); // read field export flag IntArray exportFields; exportFields.resize(0); IR_GIVE_OPTIONAL_FIELD(ir, exportFields, _IFT_StationaryTransportProblem_exportfields); if ( exportFields.giveSize() ) { IntArray mask(1); FieldManager *fm = this->giveContext()->giveFieldManager(); for ( int i = 1; i <= exportFields.giveSize(); i++ ) { if ( exportFields.at(i) == FT_Temperature ) { mask.at(1) = T_f; #ifdef FIELDMANAGER_USE_SHARED_PTR //std::tr1::shared_ptr<Field> _temperatureField = make_shared<MaskedPrimaryField>(FT_Temperature, this->UnknownsField, mask); std::tr1::shared_ptr<Field> _temperatureField (new MaskedPrimaryField(FT_Temperature, this->UnknownsField, mask)); fm->registerField(_temperatureField, ( FieldType ) exportFields.at(i)); #else MaskedPrimaryField *_temperatureField = new MaskedPrimaryField(FT_Temperature, this->UnknownsField, mask); fm->registerField(_temperatureField, ( FieldType ) exportFields.at(i), true); #endif } else if ( exportFields.at(i) == FT_HumidityConcentration ) { mask.at(1) = C_1; #ifdef FIELDMANAGER_USE_SHARED_PTR //std::tr1::shared_ptr<Field> _temperatureField = make_shared<MaskedPrimaryField>(FT_Temperature, this->UnknownsField, mask); std::tr1::shared_ptr<Field> _concentrationField (new MaskedPrimaryField(FT_HumidityConcentration, this->UnknownsField, mask)); fm->registerField(_concentrationField, ( FieldType ) exportFields.at(i)); #else MaskedPrimaryField *_concentrationField = new MaskedPrimaryField(FT_HumidityConcentration, this->UnknownsField, mask); fm->registerField(_concentrationField, ( FieldType ) exportFields.at(i), true); #endif } } } if( UnknownsField == NULL ){ // can exist from nonstationary transport problem UnknownsField = new PrimaryField(this, 1, FT_TransportProblemUnknowns, EID_ConservationEquation, 0); } return IRRT_OK; }
IRResultType TransientTransportProblem :: initializeFrom(InputRecord *ir) { IRResultType result; // Required by IR_GIVE_FIELD macro int val = SMT_Skyline; IR_GIVE_OPTIONAL_FIELD(ir, val, _IFT_EngngModel_smtype); this->sparseMtrxType = ( SparseMtrxType ) val; IR_GIVE_FIELD(ir, this->alpha, _IFT_TransientTransportProblem_alpha); prescribedTimes.clear(); dtFunction = 0; if ( ir->hasField(_IFT_TransientTransportProblem_dtFunction) ) { IR_GIVE_FIELD(ir, this->dtFunction, _IFT_TransientTransportProblem_dtFunction); } else if ( ir->hasField(_IFT_TransientTransportProblem_prescribedTimes) ) { IR_GIVE_FIELD(ir, this->prescribedTimes, _IFT_TransientTransportProblem_prescribedTimes); } else { IR_GIVE_FIELD(ir, this->deltaT, _IFT_TransientTransportProblem_deltaT); } this->keepTangent = ir->hasField(_IFT_TransientTransportProblem_keepTangent); this->lumped = ir->hasField(_IFT_TransientTransportProblem_lumped); field.reset( new DofDistributedPrimaryField(this, 1, FT_TransportProblemUnknowns, 0) ); // read field export flag exportFields.clear(); IR_GIVE_OPTIONAL_FIELD(ir, exportFields, _IFT_TransientTransportProblem_exportFields); if ( exportFields.giveSize() ) { FieldManager *fm = this->giveContext()->giveFieldManager(); for ( int i = 1; i <= exportFields.giveSize(); i++ ) { if ( exportFields.at(i) == FT_Temperature ) { FM_FieldPtr _temperatureField( new MaskedPrimaryField ( ( FieldType ) exportFields.at(i), this->field.get(), {T_f} ) ); fm->registerField( _temperatureField, ( FieldType ) exportFields.at(i) ); } else if ( exportFields.at(i) == FT_HumidityConcentration ) { FM_FieldPtr _concentrationField( new MaskedPrimaryField ( ( FieldType ) exportFields.at(i), this->field.get(), {C_1} ) ); fm->registerField( _concentrationField, ( FieldType ) exportFields.at(i) ); } } } return EngngModel :: initializeFrom(ir); }