OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
hemokunzelmat.C
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This program is free software; you can redistribute it and/or modify
21  * it under the terms of the GNU General Public License as published by
22  * the Free Software Foundation; either version 2 of the License, or
23  * (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with this program; if not, write to the Free Software
32  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33  */
34 
35 #include "hemokunzelmat.h"
36 #include "floatmatrix.h"
37 #include "gausspoint.h"
38 #include "mathfem.h"
39 #include "classfactory.h"
40 
41 namespace oofem {
42 REGISTER_Material(HeMoKunzelMaterial);
43 
44 int
46 {
47  if ( ( mode == _2dHeMo ) || ( mode == _3dHeMo ) ) {
48  return 1;
49  }
50 
51  return 0;
52 }
53 
54 
57 {
58  IRResultType result; // Required by IR_GIVE_FIELD macro
59 
60  int type = 0;
62  this->Isotherm = ( isothermType ) type;
63 
64  if ( this->Isotherm == Hansen ) {
68  } else if ( this->Isotherm == Kunzeliso ) {
71  } else {
72  OOFEM_ERROR("Unknown Isotherm type");
73  }
74 
75 
77 
78  if ( type >= 3 ) {
79  OOFEM_ERROR("initializeFrom: isothermType must be equal to 0, 1, 2");
80  }
81 
82  this->Permeability = ( permeabilityType ) type;
83 
84  if ( this->Permeability == Multilin_h ) {
87 
88  if ( !( perm_h.giveSize() == perm_Dwh.giveSize() ) ) {
89  OOFEM_ERROR("initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
90  }
91 
92  for ( int i = 1; i < perm_h.giveSize(); i++ ) {
93  if ( ( perm_h.at(i) < 0. ) || ( perm_h.at(i) > 1. ) ) {
94  OOFEM_ERROR("initializeFrom: perm_h must be in the range <0; 1>");
95  }
96  }
97  } else if ( this->Permeability == Multilin_wV ) {
100 
101  if ( !( perm_wV.giveSize() == perm_DwwV.giveSize() ) ) {
102  OOFEM_ERROR("initializeFrom: the size of 'perm_h' and 'perm_dw(h)' must be the same");
103  }
104 
105  for ( int i = 1; i < perm_wV.giveSize(); i++ ) {
106  if ( ( perm_wV.at(i) < 0. ) || ( perm_wV.at(i) > 1. ) ) {
107  OOFEM_ERROR("initializeFrom: perm_wv must be in the range <0; 1>");
108  }
109  }
110  } else if ( this->Permeability == Kunzelperm ) {
112  } else {
113  OOFEM_ERROR("initializeFrom: permeabilityType must be equal to 0, 1 or 2");
114  }
115 
116 
117 
119 
120  PL = 101325.;
122 
123  rhoH2O = 1000.;
125 
129 
130  // cw = 4.1813e3;
131  cw = 4183.;
133 
134  hv = 2.5e6;
136 
137 
138  return Material :: initializeFrom(ir);
139 }
140 
141 
142 double
144 //
145 // Returns the value of the property aProperty (e.g. the Young's modulus
146 // 'E') of the receiver.
147 //
148 {
149  return Material :: give(aProperty, gp);
150 }
151 
152 
153 void
155 {
156  TransportMaterialStatus *ms = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
157 
158  ms->setTempField(field);
159  ms->setTempGradient(grad);
160 
161  double h = field.at(2);
162  double t = field.at(1);
163 
164  int size = grad.giveSize() / 2;
165  FloatArray ans_h, ans_m;
166  FloatArray grad_h(size), grad_m(size);
167  for ( int i = 1; i <= size; ++i ) {
168  grad_h.at(i) = grad.at(i);
169  }
170  for ( int i = 1; i <= 2; ++i ) {
171  grad_m.at(i) = grad.at(i+size);
172  }
173 
174  ans_m.add(-perm_mm(h, t), grad_m);
175  ans_m.add(-perm_mh(h, t), grad_h);
176  ans_h.add(-perm_hm(h, t), grad_m);
177  ans_h.add(-perm_hh(h, t), grad_h);
178 
179  answer.resize(size * 2);
180  answer.zero();
181  answer.addSubVector(ans_h, 1);
182  answer.addSubVector(ans_m, size + 1);
183 
184  ms->setTempFlux(answer);
185 }
186 
187 
188 void
190  MatResponseMode mode,
191  GaussPoint *gp,
192  TimeStep *atTime)
193 {
194  /*
195  * returns constitutive matrix of receiver
196  */
197  if ( ( mode == Conductivity_ww ) || ( mode == Conductivity_hh ) || ( mode == Conductivity_hw ) || ( mode == Conductivity_wh ) ) {
198  this->computeConductivityMtrx(answer, mode, gp, atTime);
199  } else {
200  OOFEM_ERROR( "giveCharacteristicMatrix : unknown mode (%s)", __MatResponseModeToString(mode) );
201  }
202 }
203 
204 
205 double
207  GaussPoint *gp,
208  TimeStep *atTime)
209 {
210  return this->computeCapacityCoeff(mode, gp, atTime);
211 }
212 
213 
215 {
216  MaterialMode mmode = gp->giveMaterialMode();
217  switch ( mmode ) {
218  case _2dHeMo:
219  this->matcond2d(answer, gp, mode, atTime);
220  return;
221 
222  case _3dHeMo:
223  this->matcond3d(answer, gp, mode, atTime);
224  return;
225 
226  default:
227  OOFEM_ERROR("Unsupported MaterialMode");
228  }
229 }
230 
231 
232 void
234 {
235  double k = 0.0, h = 0.0, t = 0.0;
236  TransportMaterialStatus *status = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
237  FloatArray s;
238 
239  // s = status->giveTempStateVector();
240  s = status->giveTempField();
241  if ( s.isEmpty() ) {
242  OOFEM_ERROR("matcond1d: undefined state vector");
243  }
244 
245  h = s.at(2);
246  t = s.at(1);
247 
248  if ( mode == Conductivity_ww ) {
249  k = perm_mm(h, t);
250  } else if ( mode == Conductivity_wh ) {
251  k = perm_mh(h, t);
252  } else if ( mode == Conductivity_hw ) {
253  k = perm_hm(h, t);
254  } else if ( mode == Conductivity_hh ) {
255  k = perm_hh(h, t);
256  } else {
257  OOFEM_ERROR("Unknown MatResponseMode");
258  }
259 
260  d.resize(1, 1);
261  d.at(1, 1) = k;
262 }
263 
264 void
266 {
267  double k = 0.0, h = 0.0, t = 0.0;
268  TransportMaterialStatus *status = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
269  FloatArray s;
270 
271  // s = status->giveTempStateVector();
272  s = status->giveTempField();
273  if ( s.isEmpty() ) {
274  OOFEM_ERROR("matcond2d: undefined state vector");
275  }
276 
277  h = s.at(2);
278  t = s.at(1);
279 
280  // if (gp->giveElement()->giveNumber() == 4)
281  // double bzzz = 20;
282 
283  if ( mode == Conductivity_ww ) {
284  k = perm_mm(h, t);
285  } else if ( mode == Conductivity_wh ) {
286  k = perm_mh(h, t);
287  } else if ( mode == Conductivity_hw ) {
288  k = perm_hm(h, t);
289  } else if ( mode == Conductivity_hh ) {
290  k = perm_hh(h, t);
291  } else {
292  OOFEM_ERROR("Unknown MatResponseMode");
293  }
294 
295  d.resize(2, 2);
296  d.at(1, 1) = k;
297  d.at(1, 2) = 0.0;
298  d.at(2, 1) = 0.0;
299  d.at(2, 2) = k;
300 }
301 
302 void
304 {
305  double k = 0.0, h = 0.0, t = 0.0;
306  TransportMaterialStatus *status = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
307  FloatArray s;
308 
309 
310  // s = status->giveTempStateVector();
311  s = status->giveTempField();
312  if ( s.isEmpty() ) {
313  OOFEM_ERROR("matcond3d: undefined state vector");
314  }
315 
316  h = s.at(2);
317  t = s.at(1);
318 
319  if ( mode == Conductivity_ww ) {
320  k = perm_mm(h, t);
321  } else if ( mode == Conductivity_wh ) {
322  k = perm_mh(h, t);
323  } else if ( mode == Conductivity_hw ) {
324  k = perm_hm(h, t);
325  } else if ( mode == Conductivity_hh ) {
326  k = perm_hh(h, t);
327  } else {
328  OOFEM_ERROR("Unknown MatResponseMode");
329  }
330 
331  d.resize(3, 3);
332  d.at(1, 1) = k;
333  d.at(1, 2) = 0.0;
334  d.at(1, 3) = 0.0;
335  d.at(2, 1) = 0.0;
336  d.at(2, 2) = k;
337  d.at(2, 3) = 0.0;
338  d.at(3, 1) = 0.0;
339  d.at(3, 2) = 0.0;
340  d.at(3, 3) = k;
341 }
342 
343 
345 {
346  // if (gp->giveElement()->giveNumber() == 4)
347  // double bzzz = 20;
348 
349 
350  if ( mode == Capacity_ww ) {
351  TransportMaterialStatus *status = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
352  FloatArray s;
353  double h;
354  double dw_dh;
355 
356  // s = status->giveTempStateVector();
357  s = status->giveTempField();
358  if ( s.isEmpty() ) {
359  OOFEM_ERROR("computeCapacityCoeff: undefined state vector");
360  }
361 
362  h = s.at(2);
363  dw_dh = this->sorptionIsothermDerivative(h);
364 
365  return dw_dh;
366 
367  // CONSTANT
368  //return 10.;
369  } else if ( mode == Capacity_wh ) {
370  return 0.0;
371  } else if ( mode == Capacity_hw ) {
372  return 0.0;
373  } else if ( mode == Capacity_hh ) {
374  TransportMaterialStatus *status = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
375  FloatArray s;
376  double h, w;
377  double dHs_dT, dHw_dT;
378 
379  //s = status->giveTempStateVector();
380  s = status->giveTempField();
381  if ( s.isEmpty() ) {
382  OOFEM_ERROR("computeCapacityCoeff: undefined state vector");
383  }
384 
385  h = s.at(2);
386 
387  w = this->sorptionIsotherm(h);
388 
389  dHs_dT = cs * give('d', NULL);
390  dHw_dT = cw * w;
391 
392  return ( dHs_dT + dHw_dT );
393 
394  // CONSTANT return 1.7e6;
395  } else {
396  OOFEM_ERROR("Unknown MatResponseMode");
397  }
398 
399  return 0.0; // to make compiler happy
400 }
401 
402 
403 double
405 {
406  double w = 0.;
407 
408  if ( ( h < 0.0 ) || ( h > 1.00 ) ) {
409  OOFEM_ERROR("HeMoKunzelMaterial :: sorptionIsotherm : Relative humidity %.3f is out of range", h);
410  }
411 
412  if ( this->Isotherm == Hansen ) {
413  w = iso_wh * pow( ( 1.0 - log(h) / iso_a ), ( -1.0 / iso_n ) );
414  } else if ( this->Isotherm == Kunzeliso ) {
415  w = iso_wh * ( iso_b - 1. ) * h / ( iso_b - h );
416  } else {
417  OOFEM_ERROR("Unknown Isotherm type");
418  }
419 
420  return ( w );
421 }
422 
423 double
425 {
426  double dw_dh = 0.;
427 
428  if ( ( h < 0.0 ) || ( h > 1.00 ) ) {
429  OOFEM_ERROR("HeMoKunzelMaterial :: sorptionIsothermDerivative : Relative humidity %.3f is out of range", h);
430  }
431 
432  if ( this->Isotherm == Hansen ) {
433  dw_dh = iso_wh / ( iso_n * iso_a * h ) * pow( ( 1.0 - log(h) / iso_a ), ( -( 1.0 + iso_n ) / iso_n ) );
434  } else if ( this->Isotherm == Kunzeliso ) {
435  dw_dh = iso_wh * ( iso_b - 1. ) * iso_b / ( ( iso_b - h ) * ( iso_b - h ) );
436  } else {
437  OOFEM_ERROR("Unknown Isotherm type");
438  }
439 
440  return ( dw_dh );
441 }
442 
443 
444 double
446 {
448  double delta;
449  double deltap;
450 
451  delta = 2.0 * 1.e-7 * pow(T, 0.81) / PL;
452  deltap = delta / mu;
453 
454  return ( deltap );
455 }
456 
457 double
459 {
460  double p_sat;
461  double T0, a;
462  double T_C = T - 273.15;
463 
464  if ( T_C < 0. ) {
465  a = 22.44;
466  T0 = 272.44;
467  } else {
468  a = 17.08;
469  T0 = 234.18;
470  }
471 
472  p_sat = 611. * exp( a * T_C / ( T0 + T_C ) );
473 
474  return p_sat;
475 }
476 
477 double
479 {
480  double dpsat_dT;
481  double T0, a;
482  double T_C = T - 273.15;
483 
484  if ( T_C < 0. ) {
485  a = 22.44;
486  T0 = 272.44;
487  } else {
488  a = 17.08;
489  T0 = 234.18;
490  }
491 
492  dpsat_dT = 611. *a *T0 *exp( a *T_C / ( T0 + T_C ) ) / ( ( T0 + T_C ) * ( T0 + T_C ) );
493 
494  return dpsat_dT;
495 }
496 
497 
498 double
500 {
501  double Dw = 0.;
502 
503  if ( this->Permeability == Multilin_h ) {
504  double tol = 1.e-10;
505  for ( int i = 1; i <= perm_h.giveSize(); i++ ) {
506  if ( ( h - perm_h.at(i) ) < tol ) {
507  Dw = perm_Dwh.at(i - 1) + ( perm_Dwh.at(i) - perm_Dwh.at(i - 1) ) * ( h - perm_h.at(i - 1) ) / ( perm_h.at(i) - perm_h.at(i - 1) );
508  break;
509  }
510  }
511  } else if ( this->Permeability == Multilin_wV ) {
512  double wV = this->sorptionIsotherm(h) / rhoH2O;
513  double tol = 1.e-10;
514  for ( int i = 1; i <= perm_wV.giveSize(); i++ ) {
515  if ( ( wV - perm_wV.at(i) ) < tol ) {
516  Dw = perm_DwwV.at(i - 1) + ( perm_DwwV.at(i) - perm_DwwV.at(i - 1) ) * ( wV - perm_wV.at(i - 1) ) / ( perm_wV.at(i) - perm_wV.at(i - 1) );
517  break;
518  }
519  }
520  } else if ( this->Permeability == Kunzelperm ) {
521  double w;
522  w = this->sorptionIsotherm(h);
523  Dw = 3.8 * ( A / iso_wh ) * ( A / iso_wh ) * pow(1000., w / iso_wh - 1.);
524  } else {
525  OOFEM_ERROR("initializeFrom: permeabilityType must be equal to 0, 1 or 2");
526  }
527 
528  return Dw;
529 }
530 
531 
532 double
533 HeMoKunzelMaterial :: perm_mm(double h, double T)
534 {
535  // Function calculates permability relative humidity - relative humidity (k_mm)
536  // h ... relative humidity
537  // Dw ... capillary transport coefficient [m^2/s]
538  // dw_dh ... derivative of moisture storage function [kg/m^3]
539  // p_sat ... saturation water vapor pressure
540 
541  double k_mm;
542  double dw_dh, Dw;
543  double deltap, p_sat;
544 
545  dw_dh = this->sorptionIsothermDerivative(h);
546 
547  Dw = this->computeDw(h);
548 
549  deltap = this->computeWaterVaporPerm(T);
550  p_sat = this->computeSatVaporPressure(T);
551 
552  k_mm = Dw * dw_dh + deltap * p_sat;
553 
554  return ( k_mm );
555 
556  //return 5.e-8;
557 }
558 
559 double
560 HeMoKunzelMaterial :: perm_mh(double h, double T)
561 {
562  // Function calculates permeability relative humidity-temperature (k_mh)
563  // deltap ... water vapor permeability
564  // dpsat_dt ... differentiation of saturation water vapor presssure with respect to temperature
565 
566  double k_mh;
567  double delta_p, dpsat_dT;
568 
569  delta_p = computeWaterVaporPerm(T);
570  dpsat_dT = computeSatVaporPressureDerivative(T);
571 
572  k_mh = delta_p * h * dpsat_dT;
573 
574  // return 2.e-7;
575 
576  return k_mh;
577 }
578 
579 
580 double
581 HeMoKunzelMaterial :: perm_hm(double h, double T)
582 {
583  // Function calculates permability temperature-relative humidity (k_hm)
584 
585  double k_hm;
586  double deltap, p_sat;
587 
588  deltap = this->computeWaterVaporPerm(T);
589  p_sat = this->computeSatVaporPressure(T);
590 
591  k_hm = hv * deltap * p_sat;
592 
593  return ( k_hm );
594 
595  // return 0.1;
596  // return 0.;
597 }
598 
599 double
600 HeMoKunzelMaterial :: perm_hh(double h, double T)
601 {
602  // Function calculates permability water temperature-temperature (k_hh)
603 
604  double k_hh;
605  double lambda, deltap, dpsat_dT, w;
606 
607  w = this->sorptionIsotherm(h);
608  lambda = lambda0 * ( 1. + b * w / give('d', NULL) );
609  deltap = this->computeWaterVaporPerm(T);
610  dpsat_dT = computeSatVaporPressureDerivative(T);
611 
612  k_hh = lambda + hv * deltap * h * dpsat_dT;
613 
614  return ( k_hh );
615 
616  // return 2.;
617 }
618 
619 bool
621 {
622  if ( ( mode == Conductivity_ww ) || ( mode == Conductivity_hh ) || ( mode == Conductivity_hw ) || ( mode == Conductivity_wh ) ) {
623  return false;
624  } else {
625  OOFEM_ERROR( "isCharacteristicMtrxSymmetric : unknown mode (%s)", __MatResponseModeToString(mode) );
626  }
627 
628  return false; // to make compiler happy
629 }
630 
631 int
633 // IST_Humidity overriden to use inverse_sorption_isotherm
634 {
635  if ( type == IST_Humidity ) {
636  answer.resize(1);
637  answer.at(1) = giveHumidity(gp, VM_Velocity); // VM_Previous = equilibrated value of humidity
638  return 1;
639  } else {
640  return TransportMaterial :: giveIPValue(answer, gp, type, atTime);
641  }
642 }
643 
644 double
646 {
647  TransportMaterialStatus *ms = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
648  const FloatArray &tempState = ms->giveTempField();
649  if ( tempState.giveSize() < 2 ) {
650  OOFEM_ERROR("Undefined moisture status");
651  }
652 
653  const FloatArray &state = ms->giveField();
654 
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 ) { // VM_Previous
660  return state.at(2);
661  } else {
662  OOFEM_ERROR("Undefined moisture mode");
663  }
664 
665  return 1.;
666 }
667 } // end namespace oofem
#define _IFT_HeMoKunzelMaterial_lambda0
Definition: hemokunzelmat.h:52
double sorptionIsotherm(double h)
returns water content (in kg/m^3)
FloatArray perm_h
values of the multilinear permeability
Definition: hemokunzelmat.h:75
#define _IFT_HeMoKunzelMaterial_rhoh2o
Definition: hemokunzelmat.h:54
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Definition: gausspoint.h:191
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.
Definition: material.C:244
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&#39;s isotherm.
Definition: hemokunzelmat.h:84
double iso_wh
Parameter of Hansen&#39;s/Kunzel&#39;s isotherm - max. adsorbed water content [kg/m^3].
Definition: hemokunzelmat.h:82
double b
thermal conductivity supplement [-]
Definition: hemokunzelmat.h:91
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
double PL
ambient atmospheric pressure [Pa]
Definition: hemokunzelmat.h:88
double A
water absorption coefficient [kg m^-2 s^-0.5]
Definition: hemokunzelmat.h:80
#define _IFT_HeMoKunzelMaterial_b
Definition: hemokunzelmat.h:53
const char * __MatResponseModeToString(MatResponseMode _value)
Definition: cltypes.C:326
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.
Definition: materialmode.h:89
double lambda0
thermal conductivity [W m^-1 K^-1]
Definition: hemokunzelmat.h:90
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]
Definition: hemokunzelmat.h:95
void matcond1d(FloatMatrix &d, GaussPoint *gp, MatResponseMode mode, TimeStep *atTime)
#define _IFT_HeMoKunzelMaterial_perm_dwh
Definition: hemokunzelmat.h:59
#define _IFT_HeMoKunzelMaterial_perm_dwwv
Definition: hemokunzelmat.h:61
#define _IFT_HeMoKunzelMaterial_perm_h
Definition: hemokunzelmat.h:58
double cs
specific heat capacity of the building material [J kg^-1 K^-1]
Definition: hemokunzelmat.h:94
#define _IFT_HeMoKunzelMaterial_perm_wv
Definition: hemokunzelmat.h:60
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
Definition: material.C:52
#define _IFT_HeMoKunzelMaterial_permeability_type
Definition: hemokunzelmat.h:44
#define _IFT_HeMoKunzelMaterial_iso_n
Definition: hemokunzelmat.h:46
#define _IFT_HeMoKunzelMaterial_pl
Definition: hemokunzelmat.h:50
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
Definition: hemokunzelmat.h:51
#define OOFEM_ERROR(...)
Definition: error.h:61
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.
Definition: floatarray.C:399
double perm_hm(double h, double T)
void setTempField(FloatArray newField)
Set field.
double iso_n
Parameter of Hansen&#39;s isotherm - exponent.
Definition: hemokunzelmat.h:83
bool isEmpty() const
Returns true if receiver is empty.
Definition: floatarray.h:222
double at(int i, int j) const
Coefficient access function.
Definition: floatmatrix.h:176
#define _IFT_HeMoKunzelMaterial_iso_a
Definition: hemokunzelmat.h:45
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.
Definition: hemokunzelmat.C:45
void setTempGradient(FloatArray grad)
Set gradient.
double hv
latent heat of phase change/evaporation enthalpy of pure water [J/kg]
Definition: hemokunzelmat.h:96
double computeSatVaporPressure(double T)
#define _IFT_HeMoKunzelMaterial_mu
Definition: hemokunzelmat.h:49
Class representing vector of real numbers.
Definition: floatarray.h:82
double perm_mh(double h, double T)
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
#define _IFT_HeMoKunzelMaterial_iso_b
Definition: hemokunzelmat.h:48
#define _IFT_HeMoKunzelMaterial_iso_wh
Definition: hemokunzelmat.h:47
double perm_hh(double h, double T)
void setTempFlux(FloatArray w)
Set flux.
#define _IFT_HeMoKunzelMaterial_cs
Definition: hemokunzelmat.h:55
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
Definition: floatmatrix.C:1358
double computeWaterVaporPerm(double T)
Class representing the general Input Record.
Definition: inputrecord.h:101
void zero()
Zeroes all coefficients of receiver.
Definition: floatarray.C:658
double iso_b
Parameter of Kunzel&#39;s isotherm.
Definition: hemokunzelmat.h:85
void matcond2d(FloatMatrix &d, GaussPoint *gp, MatResponseMode mode, TimeStep *atTime)
#define _IFT_HeMoKunzelMaterial_cw
Definition: hemokunzelmat.h:56
REGISTER_Material(DummyMaterial)
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: hemokunzelmat.C:56
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
the oofem namespace is to define a context or scope in which all oofem names are defined.
double rhoH2O
water density [kg m^-3]
Definition: hemokunzelmat.h:93
#define IR_GIVE_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:69
double mu
water vapor diffusion resistance [-]
Definition: hemokunzelmat.h:87
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: material.C:89
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define _IFT_HeMoKunzelMaterial_iso_type
Definition: hemokunzelmat.h:43
#define _IFT_HeMoKunzelMaterial_hv
Definition: hemokunzelmat.h:57
Class representing solution step.
Definition: timestep.h:80
void add(const FloatArray &src)
Adds array src to receiver.
Definition: floatarray.C:156
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property &#39;aProperty&#39;.
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011