47 if ( ( mode == _2dHeMo ) || ( mode == _3dHeMo ) ) {
79 OOFEM_ERROR(
"initializeFrom: isothermType must be equal to 0, 1, 2");
89 OOFEM_ERROR(
"initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
94 OOFEM_ERROR(
"initializeFrom: perm_h must be in the range <0; 1>");
102 OOFEM_ERROR(
"initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
107 OOFEM_ERROR(
"initializeFrom: perm_wv must be in the range <0; 1>");
113 OOFEM_ERROR(
"initializeFrom: permeabilityType must be equal to 0, 1 or 2");
161 double h = field.
at(2);
162 double t = field.
at(1);
167 for (
int i = 1; i <= size; ++i ) {
168 grad_h.at(i) = grad.
at(i);
170 for (
int i = 1; i <= 2; ++i ) {
171 grad_m.
at(i) = grad.
at(i+size);
197 if ( ( mode == Conductivity_ww ) || ( mode == Conductivity_hh ) || ( mode == Conductivity_hw ) || ( mode == Conductivity_wh ) ) {
219 this->
matcond2d(answer, gp, mode, atTime);
223 this->
matcond3d(answer, gp, mode, atTime);
235 double k = 0.0, h = 0.0, t = 0.0;
248 if ( mode == Conductivity_ww ) {
250 }
else if ( mode == Conductivity_wh ) {
252 }
else if ( mode == Conductivity_hw ) {
254 }
else if ( mode == Conductivity_hh ) {
267 double k = 0.0, h = 0.0, t = 0.0;
283 if ( mode == Conductivity_ww ) {
285 }
else if ( mode == Conductivity_wh ) {
287 }
else if ( mode == Conductivity_hw ) {
289 }
else if ( mode == Conductivity_hh ) {
305 double k = 0.0, h = 0.0, t = 0.0;
319 if ( mode == Conductivity_ww ) {
321 }
else if ( mode == Conductivity_wh ) {
323 }
else if ( mode == Conductivity_hw ) {
325 }
else if ( mode == Conductivity_hh ) {
350 if ( mode == Capacity_ww ) {
359 OOFEM_ERROR(
"computeCapacityCoeff: undefined state vector");
369 }
else if ( mode == Capacity_wh ) {
371 }
else if ( mode == Capacity_hw ) {
373 }
else if ( mode == Capacity_hh ) {
377 double dHs_dT, dHw_dT;
382 OOFEM_ERROR(
"computeCapacityCoeff: undefined state vector");
389 dHs_dT =
cs *
give(
'd', NULL);
392 return ( dHs_dT + dHw_dT );
408 if ( ( h < 0.0 ) || ( h > 1.00 ) ) {
409 OOFEM_ERROR(
"HeMoKunzelMaterial :: sorptionIsotherm : Relative humidity %.3f is out of range", h);
428 if ( ( h < 0.0 ) || ( h > 1.00 ) ) {
429 OOFEM_ERROR(
"HeMoKunzelMaterial :: sorptionIsothermDerivative : Relative humidity %.3f is out of range", h);
451 delta = 2.0 * 1.e-7 * pow(T, 0.81) /
PL;
462 double T_C = T - 273.15;
472 p_sat = 611. * exp( a * T_C / ( T0 + T_C ) );
482 double T_C = T - 273.15;
492 dpsat_dT = 611. *a *T0 *exp( a *T_C / ( T0 + T_C ) ) / ( ( T0 + T_C ) * ( T0 + T_C ) );
525 OOFEM_ERROR(
"initializeFrom: permeabilityType must be equal to 0, 1 or 2");
543 double deltap, p_sat;
552 k_mm = Dw * dw_dh + deltap * p_sat;
567 double delta_p, dpsat_dT;
572 k_mh = delta_p * h * dpsat_dT;
586 double deltap, p_sat;
591 k_hm =
hv * deltap * p_sat;
605 double lambda, deltap, dpsat_dT, w;
612 k_hh = lambda +
hv * deltap * h * dpsat_dT;
622 if ( ( mode == Conductivity_ww ) || ( mode == Conductivity_hh ) || ( mode == Conductivity_hw ) || ( mode == Conductivity_wh ) ) {
635 if ( type == IST_Humidity ) {
655 if ( mode == VM_Total ) {
656 return tempState.
at(2);
657 }
else if ( mode == VM_Incremental ) {
658 return tempState.
at(2) - state.
at(2);
659 }
else if ( mode == VM_Velocity ) {
#define _IFT_HeMoKunzelMaterial_lambda0
double sorptionIsotherm(double h)
returns water content (in kg/m^3)
FloatArray perm_h
values of the multilinear permeability
#define _IFT_HeMoKunzelMaterial_rhoh2o
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
const FloatArray & giveTempField()
Return last field.
enum oofem::HeMoKunzelMaterial::permeabilityType Permeability
double computeCapacityCoeff(MatResponseMode mode, GaussPoint *gp, TimeStep *atTime)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
double sorptionIsothermDerivative(double h)
computes derivative of the moisture storage function (sorption isotherm) with respect to relative hum...
virtual double giveHumidity(GaussPoint *gp, ValueModeType mode)
Returns positive value of humidity if implemented and enabled in derived material, -1 otherwise.
void computeConductivityMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *atTime)
virtual void giveFluxVector(FloatArray &answer, GaussPoint *gp, const FloatArray &grad, const FloatArray &field, TimeStep *tStep)
Returns the flux for the field and its gradient.
void matcond3d(FloatMatrix &d, GaussPoint *gp, MatResponseMode mode, TimeStep *atTime)
double iso_a
Parameter of Hansen's isotherm.
double iso_wh
Parameter of Hansen's/Kunzel's isotherm - max. adsorbed water content [kg/m^3].
double b
thermal conductivity supplement [-]
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
double PL
ambient atmospheric pressure [Pa]
double A
water absorption coefficient [kg m^-2 s^-0.5]
#define _IFT_HeMoKunzelMaterial_b
const char * __MatResponseModeToString(MatResponseMode _value)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
double perm_mm(double h, double T)
This class implements a transport material status information.
MaterialMode
Type representing material mode of integration point.
double lambda0
thermal conductivity [W m^-1 K^-1]
MatResponseMode
Describes the character of characteristic material matrix.
enum oofem::HeMoKunzelMaterial::isothermType Isotherm
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *atTime)
Returns the integration point corresponding value in Reduced form.
double cw
specific heat capacity of liquid water [J kg^-1 K^-1]
void matcond1d(FloatMatrix &d, GaussPoint *gp, MatResponseMode mode, TimeStep *atTime)
#define _IFT_HeMoKunzelMaterial_perm_dwh
#define _IFT_HeMoKunzelMaterial_perm_dwwv
#define _IFT_HeMoKunzelMaterial_perm_h
double cs
specific heat capacity of the building material [J kg^-1 K^-1]
#define _IFT_HeMoKunzelMaterial_perm_wv
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
#define _IFT_HeMoKunzelMaterial_permeability_type
#define _IFT_HeMoKunzelMaterial_iso_n
#define _IFT_HeMoKunzelMaterial_pl
const FloatArray & giveField()
Return last field.
double computeSatVaporPressureDerivative(double T)
virtual void giveCharacteristicMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *atTime)
Computes characteristic matrix of receiver in given integration point.
#define _IFT_HeMoKunzelMaterial_a
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode rMode)
Returns true if stiffness matrix of receiver is symmetric Default implementation returns true...
double computeDw(double h)
void addSubVector(const FloatArray &src, int si)
Adds the given vector as sub-vector to receiver.
double perm_hm(double h, double T)
void setTempField(FloatArray newField)
Set field.
double iso_n
Parameter of Hansen's isotherm - exponent.
bool isEmpty() const
Returns true if receiver is empty.
double at(int i, int j) const
Coefficient access function.
#define _IFT_HeMoKunzelMaterial_iso_a
virtual double giveCharacteristicValue(MatResponseMode mode, GaussPoint *gp, TimeStep *atTime)
Computes the characteristic value of receiver in given integration point, respecting its history...
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
void setTempGradient(FloatArray grad)
Set gradient.
double hv
latent heat of phase change/evaporation enthalpy of pure water [J/kg]
double computeSatVaporPressure(double T)
#define _IFT_HeMoKunzelMaterial_mu
Class representing vector of real numbers.
double perm_mh(double h, double T)
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
#define _IFT_HeMoKunzelMaterial_iso_b
#define _IFT_HeMoKunzelMaterial_iso_wh
double perm_hh(double h, double T)
void setTempFlux(FloatArray w)
Set flux.
#define _IFT_HeMoKunzelMaterial_cs
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
double computeWaterVaporPerm(double T)
void zero()
Zeroes all coefficients of receiver.
double iso_b
Parameter of Kunzel's isotherm.
void matcond2d(FloatMatrix &d, GaussPoint *gp, MatResponseMode mode, TimeStep *atTime)
#define _IFT_HeMoKunzelMaterial_cw
REGISTER_Material(DummyMaterial)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
double rhoH2O
water density [kg m^-3]
double mu
water vapor diffusion resistance [-]
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing integration point in finite element program.
#define _IFT_HeMoKunzelMaterial_iso_type
#define _IFT_HeMoKunzelMaterial_hv
Class representing solution step.
void add(const FloatArray &src)
Adds array src to receiver.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
void resize(int s)
Resizes receiver towards requested size.