45HeMoKunzelMaterial :: hasMaterialModeCapability(MaterialMode mode)
const
47 return mode == _2dHeMo || mode == _3dHeMo;
54 Material :: initializeFrom(ir);
75 OOFEM_ERROR(
"initializeFrom: isothermType must be equal to 0, 1, 2");
85 OOFEM_ERROR(
"initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
88 for (
int i = 1; i <
perm_h.giveSize(); i++ ) {
90 OOFEM_ERROR(
"initializeFrom: perm_h must be in the range <0; 1>");
98 OOFEM_ERROR(
"initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
101 for (
int i = 1; i <
perm_wV.giveSize(); i++ ) {
103 OOFEM_ERROR(
"initializeFrom: perm_wv must be in the range <0; 1>");
109 OOFEM_ERROR(
"initializeFrom: permeabilityType must be equal to 0, 1 or 2");
134HeMoKunzelMaterial :: give(
int aProperty,
GaussPoint *gp)
const
136 return Material :: give(aProperty, gp);
146 ms->setTempHumidity(h);
148 ms->setTempTemperatureGradient(grad_t);
149 ms->setTempHumidityGradient(grad_w);
154 ms->setTempHeatFlux(ans_t);
155 ms->setTempHumidityFlux(ans_w);
157 return {ans_t, ans_w};
167 double h = status->giveTempHumidity();
170 if ( mode == Conductivity_ww ) {
172 }
else if ( mode == Conductivity_wh ) {
174 }
else if ( mode == Conductivity_hw ) {
176 }
else if ( mode == Conductivity_hh ) {
187HeMoKunzelMaterial :: giveCharacteristicValue(MatResponseMode mode,
195double HeMoKunzelMaterial :: computeCapacityCoeff(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
200 if ( mode == Capacity_ww ) {
205 }
else if ( mode == Capacity_wh ) {
207 }
else if ( mode == Capacity_hw ) {
209 }
else if ( mode == Capacity_hh ) {
215 double dHs_dT =
cs *
give(
'd',
nullptr);
216 double dHw_dT =
cw * w;
218 return dHs_dT + dHw_dT;
230HeMoKunzelMaterial :: giveMoistureContent(
double h)
const
232 if ( h < 0.0 || h > 1.00 ) {
233 OOFEM_ERROR(
"HeMoKunzelMaterial :: giveMoistureContent : Relative humidity %.3f is out of range", h);
246HeMoKunzelMaterial :: giveMoistureContentDerivative(
double h)
const
248 if ( h < 0.0 || h > 1.00 ) {
249 OOFEM_ERROR(
"HeMoKunzelMaterial :: giveMoistureContentDerivative : Relative humidity %.3f is out of range", h);
263HeMoKunzelMaterial :: computeWaterVaporPerm(
double T)
const
266 double delta = 2.0 * 1.e-7 * pow(T, 0.81) /
PL;
271HeMoKunzelMaterial :: computeSatVaporPressure(
double T)
const
273 double T_C = T - 273.15;
284 return 611. * exp( a * T_C / ( T0 + T_C ) );
288HeMoKunzelMaterial :: computeSatVaporPressureDerivative(
double T)
const
290 double T_C = T - 273.15;
301 return 611. *a *T0 *exp( a *T_C / ( T0 + T_C ) ) / ( ( T0 + T_C ) * ( T0 + T_C ) );
306HeMoKunzelMaterial :: computeDw(
double h)
const
310 for (
int i = 1; i <=
perm_h.giveSize(); i++ ) {
311 if ( ( h -
perm_h.at(i) ) < tol ) {
318 for (
int i = 1; i <=
perm_wV.giveSize(); i++ ) {
319 if ( ( wV -
perm_wV.at(i) ) < tol ) {
328 OOFEM_ERROR(
"initializeFrom: permeabilityType must be equal to 0, 1 or 2");
336HeMoKunzelMaterial :: perm_mm(
double h,
double T)
const
351 return Dw * dw_dh + deltap * p_sat;
355HeMoKunzelMaterial :: perm_mh(
double h,
double T)
const
363 return delta_p * h * dpsat_dT;
368HeMoKunzelMaterial :: perm_hm(
double h,
double T)
const
373 return hv * deltap * p_sat;
377HeMoKunzelMaterial :: perm_hh(
double h,
double T)
const
382 double lambda =
lambda0 * ( 1. +
b * w /
give(
'd',
nullptr) );
386 return lambda +
hv * deltap * h * dpsat_dT;
390HeMoKunzelMaterial :: isCharacteristicMtrxSymmetric(MatResponseMode mode)
const
392 if ( mode == Conductivity_ww || mode == Conductivity_hh || mode == Conductivity_hw || mode == Conductivity_wh ) {
395 OOFEM_ERROR(
"isCharacteristicMtrxSymmetric : unknown mode (%s)", __MatResponseModeToString(mode) );
406 if ( type == IST_Humidity ) {
408 answer.
at(1) = humidity;
410 }
else if ( type == IST_MoistureContent ) {
415 return TransportMaterial :: giveIPValue(answer, gp, type, tStep);
#define REGISTER_Material(class)
double computeWaterVaporPerm(double T) const
double perm_mh(double h, double T) const
double iso_a
Parameter of Hansen's isotherm.
double hv
latent heat of phase change/evaporation enthalpy of pure water [J/kg]
double giveMoistureContent(double h) const
returns water content (in kg/m^3)
double computeCapacityCoeff(MatResponseMode mode, GaussPoint *gp, TimeStep *atTime) const
double computeDw(double h) const
double b
thermal conductivity supplement [-]
enum oofem::HeMoKunzelMaterial::permeabilityType Permeability
double cw
specific heat capacity of liquid water [J kg^-1 K^-1]
double perm_mm(double h, double T) const
double mu
water vapor diffusion resistance [-]
double iso_b
Parameter of Kunzel's isotherm.
double iso_wh
Parameter of Hansen's/Kunzel's isotherm - max. adsorbed water content [kg/m^3].
double iso_n
Parameter of Hansen's isotherm - exponent.
double perm_hm(double h, double T) const
enum oofem::HeMoKunzelMaterial::isothermType Isotherm
double giveMoistureContentDerivative(double h) const
computes derivative of the moisture storage function (sorption isotherm) with respect to relative hum...
double computeSatVaporPressure(double T) const
double perm_hh(double h, double T) const
double give(int aProperty, GaussPoint *gp) const override
FloatArray perm_h
values of the multilinear permeability
double rhoH2O
water density [kg m^-3]
double lambda0
thermal conductivity [W m^-1 K^-1]
double cs
specific heat capacity of the building material [J kg^-1 K^-1]
double A
water absorption coefficient [kg m^-2 s^-0.5]
double PL
ambient atmospheric pressure [Pa]
double computeSatVaporPressureDerivative(double T) const
double giveTempHumidity() const
Return last field.
void setTempTemperature(double newField)
Set field.
double giveTempTemperature() const
Return last field.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual double giveHumidity(GaussPoint *gp, ValueModeType mode) const
#define _IFT_HeMoKunzelMaterial_a
#define _IFT_HeMoKunzelMaterial_iso_b
#define _IFT_HeMoKunzelMaterial_rhoh2o
#define _IFT_HeMoKunzelMaterial_perm_h
#define _IFT_HeMoKunzelMaterial_permeability_type
#define _IFT_HeMoKunzelMaterial_perm_dwwv
#define _IFT_HeMoKunzelMaterial_cs
#define _IFT_HeMoKunzelMaterial_iso_type
#define _IFT_HeMoKunzelMaterial_pl
#define _IFT_HeMoKunzelMaterial_perm_dwh
#define _IFT_HeMoKunzelMaterial_perm_wv
#define _IFT_HeMoKunzelMaterial_hv
#define _IFT_HeMoKunzelMaterial_iso_a
#define _IFT_HeMoKunzelMaterial_iso_wh
#define _IFT_HeMoKunzelMaterial_cw
#define _IFT_HeMoKunzelMaterial_lambda0
#define _IFT_HeMoKunzelMaterial_b
#define _IFT_HeMoKunzelMaterial_iso_n
#define _IFT_HeMoKunzelMaterial_mu
FloatMatrixF< N, N > eye()
Constructs an identity matrix.