NuTo
Numerics Tool
MoistureTransport_ConstitutiveOutputTest.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include "nuto/base/Timer.h"
5 #include "nuto/base/Exception.h"
6 #include "nuto/mechanics/constitutive/ConstitutiveBase.h"
7 #include "nuto/mechanics/constitutive/inputoutput/ConstitutiveIOBase.h"
8 #include "nuto/mechanics/constitutive/inputoutput/ConstitutiveIOMap.h"
9 #include "nuto/mechanics/constitutive/inputoutput/ConstitutiveScalar.h"
10 #include "nuto/mechanics/constitutive/inputoutput/ConstitutiveVector.h"
11 #include "nuto/mechanics/constitutive/staticData/DataMoistureTransport.h"
12 #include "nuto/mechanics/elements/ElementOutputBlockVectorDouble.h"
13 #include "nuto/mechanics/elements/ElementOutputBlockMatrixDouble.h"
14 #include "nuto/mechanics/structures/unstructured/Structure.h"
16 
18 {
19 
20  rMT.AdsorptionCoeffs = Eigen::MatrixXd::Constant(4, 1, 0.0);
21  rMT.AdsorptionCoeffs(1) = 0.5;
22  rMT.DesorptionCoeffs = Eigen::MatrixXd::Constant(4, 1, 0.0);
23  rMT.DesorptionCoeffs(1) = 0.5;
24 
25 
26  rMT.InitialRelativeHumidity = 1.0;
27  rMT.MassExchangeRate = 1e-7;
28  rMT.PoreVolumeFraction = 0.25;
29  rMT.DiffusionCoefficientRH = 1e-12;
30  rMT.DiffusionExponentRH = 1.0;
32  rMT.DensityWater = 1000.0;
33  rMT.DiffusionCoefficientWV = 1e-7;
34  rMT.DiffusionExponentWV = 2.0;
35  rMT.BoundaryEnvironmentalRH = 0.4;
38 
40 }
41 
42 
44 {
45  for (int i = 0; i < rS.GetNumNodes(); i++)
46  {
47 
48  NuTo::NodeBase& node = *rS.NodeGetNodePtr(i);
49 
50  double factor = (node.Get(NuTo::Node::eDof::COORDINATES)[0] < 0) ? 0.5 : 1.0;
51 
52  if (node.GetNum(NuTo::Node::eDof::RELATIVEHUMIDITY) != 0)
53  {
54  node.Set(NuTo::Node::eDof::RELATIVEHUMIDITY, 0, rMT.InitialRelativeHumidity * factor);
55  node.Set(NuTo::Node::eDof::RELATIVEHUMIDITY, 1, rMT.InitialRelativeHumidity * factor * 0.01);
56  }
57  if (node.GetNum(NuTo::Node::eDof::WATERVOLUMEFRACTION) != 0)
58  {
59  node.Set(NuTo::Node::eDof::WATERVOLUMEFRACTION, 0, rMT.InitialWaterVolumeFraction * factor);
60  node.Set(NuTo::Node::eDof::WATERVOLUMEFRACTION, 1, rMT.InitialWaterVolumeFraction * factor * 0.01);
61  }
62  }
63 }
64 
65 template <int TDim>
67 {
68  using namespace NuTo::Constitutive;
69  NuTo::ConstitutiveInputMap constitutiveInputMap;
70  std::vector<NuTo::Constitutive::eInput> inputs{
71  eInput::RELATIVE_HUMIDITY, eInput::RELATIVE_HUMIDITY_DT1, eInput::RELATIVE_HUMIDITY_GRADIENT,
72  eInput::WATER_VOLUME_FRACTION, eInput::WATER_VOLUME_FRACTION_DT1, eInput::WATER_VOLUME_FRACTION_GRADIENT};
73 
74  for (auto input : inputs)
75  {
76  constitutiveInputMap[input] = NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(input);
77  }
78 
79  (*constitutiveInputMap.at(eInput::RELATIVE_HUMIDITY))[0] = 1.0;
80  (*constitutiveInputMap.at(eInput::RELATIVE_HUMIDITY_DT1))[0] = 0.1;
81  for (unsigned int i = 0; i < TDim; ++i)
82  {
83  (*constitutiveInputMap.at(eInput::RELATIVE_HUMIDITY_GRADIENT))[i] = 0.2;
84  }
85  (*constitutiveInputMap.at(eInput::WATER_VOLUME_FRACTION))[0] = 1.0;
86  (*constitutiveInputMap.at(eInput::WATER_VOLUME_FRACTION_DT1))[0] = 0.1;
87  for (unsigned int i = 0; i < TDim; ++i)
88  {
89  (*constitutiveInputMap.at(eInput::WATER_VOLUME_FRACTION_GRADIENT))[i] = 0.2;
90  }
91  return constitutiveInputMap;
92 }
93 
94 template <int TDim>
96 {
97  using namespace NuTo::Constitutive;
98  NuTo::ConstitutiveOutputMap constitutiveOutputMap;
99  std::vector<eOutput> outputs{
100  eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_B, eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_N,
101  eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_B, eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_N,
102  eOutput::D_INTERNAL_GRADIENT_RH_D_RH_BB_H0, eOutput::D_INTERNAL_GRADIENT_RH_D_RH_NN_H0,
103  eOutput::D_INTERNAL_GRADIENT_RH_D_WV_BN_H0, eOutput::D_INTERNAL_GRADIENT_RH_D_WV_NN_H0,
104  eOutput::D_INTERNAL_GRADIENT_WV_D_RH_NN_H0, eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BB_H0,
105  eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BN_H0, eOutput::D_INTERNAL_GRADIENT_WV_D_WV_NN_H0,
106  eOutput::D_INTERNAL_GRADIENT_RH_D_RH_NN_H1, eOutput::D_INTERNAL_GRADIENT_RH_D_WV_NN_H1,
107  eOutput::D_INTERNAL_GRADIENT_WV_D_WV_NN_H1};
108 
109  for (auto output : outputs)
110  {
111  constitutiveOutputMap[output] = NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(output);
112  }
113 
114  return constitutiveOutputMap;
115 }
116 
117 
118 bool CheckResultInRelTolerance(std::string rResultName, double rCalcValue, double rTgtValue, double rTol = 1e-6)
119 {
120  // VHIRTHAMTODO Output formattierung für double setzen und wieder rückgängig
121  double quotient = rCalcValue / rTgtValue;
122  if (quotient < 1.0 - rTol || quotient > 1.0 + rTol)
123  {
124  std::cout << rResultName << " - Target Value: " << rTgtValue << " - Calculated Value: " << rCalcValue
125  << " - WRONG" << std::endl;
126  return false;
127  }
128  else
129  {
130  std::cout << rResultName << " - Target Value: " << rTgtValue << " - Calculated Value: " << rCalcValue
131  << " - CORRECT" << std::endl;
132  return true;
133  }
134 }
135 
136 template <int TDim>
137 void ConstitutiveOutputTest_CheckAndPrintResults(const NuTo::ConstitutiveOutputMap& outputMap)
138 {
139  using namespace NuTo::Constitutive;
140  bool ValuesCorrect = true;
141 
142  // Internal Gradient
143  // %%%%%%%%%%%%%%%%%
144  for (unsigned int i = 0; i < TDim; ++i)
145  {
146  ValuesCorrect =
147  CheckResultInRelTolerance("InternalGradientRH_B [" + std::to_string(i) + "]",
148  (*outputMap.at(eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_B))[i], -6e-13) &&
149  ValuesCorrect;
150  }
151  ValuesCorrect = CheckResultInRelTolerance("InternalGradientRH_N",
152  (*outputMap.at(eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_N))[0],
153  -0.03500005) &&
154  ValuesCorrect;
155  for (unsigned int i = 0; i < TDim; ++i)
156  {
157  ValuesCorrect = CheckResultInRelTolerance(
158  "InternalGradientWV_B [" + std::to_string(i) + "]",
159  (*outputMap.at(eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_B))[i], 3.2e-7) &&
160  ValuesCorrect;
161  }
162  ValuesCorrect = CheckResultInRelTolerance("InternalGradientWV_N",
163  (*outputMap.at(eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_N))[0],
164  100.00000005) &&
165  ValuesCorrect;
166 
167  // Hessian 0
168  // %%%%%%%%%
169  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientRH_dRH_BB_H0",
170  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_RH_BB_H0))[0], -3e-12) &&
171  ValuesCorrect;
172  ValuesCorrect =
173  CheckResultInRelTolerance("mInternalGradientRH_dRH_NN_H0",
174  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_RH_NN_H0))[0], -0.01999995) &&
175  ValuesCorrect;
176  for (unsigned int i = 0; i < TDim; ++i)
177  {
178  ValuesCorrect =
179  CheckResultInRelTolerance("mInternalGradientRH_dWV_BN_H0 [" + std::to_string(i) + "]",
180  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_WV_BN_H0))[i], 8e-13) &&
181  ValuesCorrect;
182  }
183  ValuesCorrect =
184  CheckResultInRelTolerance("mInternalGradientRH_dWV_NN_H0",
185  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_WV_NN_H0))[0], 0.0199999) &&
186  ValuesCorrect;
187  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientWV_dRH_NN_H0",
188  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_RH_NN_H0))[0], -5e-8) &&
189  ValuesCorrect;
190  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientWV_dWV_BB_H0",
191  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BB_H0))[0], 1.6e-6) &&
192  ValuesCorrect;
193  for (unsigned int i = 0; i < TDim; ++i)
194  {
195  ValuesCorrect =
196  CheckResultInRelTolerance("mInternalGradientWV_dWV_BN_H0 [" + std::to_string(i) + "]",
197  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BN_H0))[i], 6.4e-7) &&
198  ValuesCorrect;
199  }
200  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientWV_dWV_NN_H0",
201  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_NN_H0))[0], 1e-7) &&
202  ValuesCorrect;
203 
204  // Hessian 1
205  // %%%%%%%%%
206  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientRH_dRH_NN_H1",
207  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_RH_NN_H1))[0], -0.15) &&
208  ValuesCorrect;
209  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientRH_dWV_NN_H1",
210  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_WV_NN_H1))[0], -0.2) &&
211  ValuesCorrect;
212  ValuesCorrect = CheckResultInRelTolerance("mInternalGradientWV_dWV_NN_H1",
213  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_NN_H1))[0], 1000.0) &&
214  ValuesCorrect;
215 
216  if (!ValuesCorrect)
217  {
218  throw NuTo::Exception(__PRETTY_FUNCTION__, "One or more constitutive output values not correct");
219  }
220 }
221 
222 template <int TDim>
224 {
225  using namespace NuTo::Constitutive;
226  NuTo::ConstitutiveInputMap constitutiveInputMap;
227  constitutiveInputMap[eInput::RELATIVE_HUMIDITY] =
228  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eInput::RELATIVE_HUMIDITY);
229  constitutiveInputMap[eInput::RELATIVE_HUMIDITY_BOUNDARY] =
230  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eInput::RELATIVE_HUMIDITY_BOUNDARY);
231  constitutiveInputMap[eInput::WATER_VOLUME_FRACTION] =
232  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eInput::WATER_VOLUME_FRACTION);
233 
234  (*constitutiveInputMap.at(eInput::RELATIVE_HUMIDITY))[0] = 1.0;
235  (*constitutiveInputMap.at(eInput::RELATIVE_HUMIDITY_BOUNDARY))[0] = 0.4;
236  (*constitutiveInputMap.at(eInput::WATER_VOLUME_FRACTION))[0] = 1.0;
237 
238  return constitutiveInputMap;
239 }
240 
241 
242 template <int TDim>
244 {
245  using namespace NuTo::Constitutive;
246  NuTo::ConstitutiveOutputMap constitutiveOutputMap;
247  constitutiveOutputMap[eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_BOUNDARY_N] =
248  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_BOUNDARY_N);
249  constitutiveOutputMap[eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_BOUNDARY_N] =
250  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(
251  eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_BOUNDARY_N);
252 
253  constitutiveOutputMap[eOutput::D_INTERNAL_GRADIENT_RH_D_RH_BOUNDARY_NN_H0] =
254  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eOutput::D_INTERNAL_GRADIENT_RH_D_RH_BOUNDARY_NN_H0);
255  constitutiveOutputMap[eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BOUNDARY_NN_H0] =
256  NuTo::ConstitutiveIOBase::makeConstitutiveIO<TDim>(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BOUNDARY_NN_H0);
257  return constitutiveOutputMap;
258 }
259 
260 
261 template <int TDim>
262 void ConstitutiveOutputTest_CheckAndPrintResultsBoundary(const NuTo::ConstitutiveOutputMap& outputMap)
263 {
264  using namespace NuTo::Constitutive;
265  bool ValuesCorrect = true;
266 
267  ValuesCorrect = CheckResultInRelTolerance(
268  "mInternalGradientRH_Boundary_N",
269  (*outputMap.at(eOutput::INTERNAL_GRADIENT_RELATIVE_HUMIDITY_BOUNDARY_N))[0], 6e-4) &&
270  ValuesCorrect;
271  ValuesCorrect = CheckResultInRelTolerance(
272  "mInternalGradientWV_Boundary_N",
273  (*outputMap.at(eOutput::INTERNAL_GRADIENT_WATER_VOLUME_FRACTION_BOUNDARY_N))[0], 8e-10) &&
274  ValuesCorrect;
275 
276  ValuesCorrect =
277  CheckResultInRelTolerance("mInternalGradientRH_dRH_Boundary_NN_H0",
278  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_RH_D_RH_BOUNDARY_NN_H0))[0], 1e-3) &&
279  ValuesCorrect;
280  ValuesCorrect =
281  CheckResultInRelTolerance("mInternalGradientWV_dWV_Boundary_NN_H0",
282  (*outputMap.at(eOutput::D_INTERNAL_GRADIENT_WV_D_WV_BOUNDARY_NN_H0))[0], 1e-9) &&
283  ValuesCorrect;
284 
285 
286  if (!ValuesCorrect)
287  {
288  throw NuTo::Exception(__PRETTY_FUNCTION__,
289  "One or more constitutive output values for the BOUNDARY element not correct");
290  }
291 }
292 
293 
294 template <int TDim>
295 void ConstitutiveOutputTests(std::map<NuTo::Node::eDof, NuTo::Interpolation::eTypeOrder> rDofIPTMap)
296 {
297  NuTo::Structure S(TDim);
299 
300  std::string testName = std::string("ConstitutiveOutputTests") + std::to_string(TDim) + "D";
301 
302  std::cout << std::endl
303  << "-------------------------------------" << std::endl
304  << "Start test: " << testName << std::endl
305  << "-------------------------------------" << std::endl;
306 
308 
309  SetupStructure<TDim>(S, testName);
310  auto SEC = SetupSection<TDim>(S);
311 
312  std::pair<int, int> meshInfo;
313 
314  switch (TDim)
315  {
316  case 1:
317  meshInfo = NuTo::MeshGenerator::Grid(S, {1}, {1});
318  break;
319  case 2:
320  meshInfo = NuTo::MeshGenerator::Grid(S, {1, 1}, {1, 1});
321  break;
322  case 3:
323  meshInfo = NuTo::MeshGenerator::Grid(S, {1, 1, 1}, {1, 1, 1});
324  break;
325  default:
326  throw NuTo::Exception(__PRETTY_FUNCTION__, "invalid dimension");
327  }
328 
329 
330  for (auto& it : rDofIPTMap)
331  S.InterpolationTypeAdd(meshInfo.second, it.first, it.second);
332 
333  S.ElementGroupSetSection(meshInfo.first, SEC);
334  S.ElementGroupSetConstitutiveLaw(meshInfo.first, MT.ConstitutiveLawID);
335 
336  SetupIntegrationType<TDim>(S, meshInfo.first);
337 
338  S.ElementTotalConvertToInterpolationType();
340 
341 
342  MT.SetupStaticData();
343  S.NodeBuildGlobalDofs();
344 
345  NuTo::ElementBase& element = *S.ElementGetElementPtr(0);
346 
347  // %%%%%%%%%%%%%%%%%%%%%%%%
348  // Constitutive law outputs
349  // %%%%%%%%%%%%%%%%%%%%%%%%
350 
351 
352  NuTo::ConstitutiveInputMap constitutiveInputMap = ConstitutiveOutputTest_CreateConstitutiveInputMap<TDim>();
353  NuTo::ConstitutiveOutputMap constitutiveOutputMap = ConstitutiveOutputTest_CreateConstitutiveOutputMap<TDim>();
354 
355  NuTo::Constitutive::IPConstitutiveLawBase& ipLaw = element.GetIPData().GetIPConstitutiveLaw(0);
356  ipLaw.Evaluate<TDim>(constitutiveInputMap, constitutiveOutputMap);
357 
358  ConstitutiveOutputTest_CheckAndPrintResults<TDim>(constitutiveOutputMap);
359 
360 
361  // %%%%%%%%%%%%
362  // Test element
363  // %%%%%%%%%%%%
364 
365  // std::map<NuTo::Element::eOutput, std::shared_ptr<NuTo::ElementOutputBase>> elementOutputMap;
366 
367  // std::shared_ptr<NuTo::ElementOutputBase> internalGradient =
368  // std::make_shared<NuTo::ElementOutputBlockVectorDouble>(S.GetDofStatus());
369  // std::shared_ptr<NuTo::ElementOutputBase> hessian0 =
370  // std::make_shared<NuTo::ElementOutputBlockMatrixDouble>(S.GetDofStatus());
371  // std::shared_ptr<NuTo::ElementOutputBase> hessian1 =
372  // std::make_shared<NuTo::ElementOutputBlockMatrixDouble>(S.GetDofStatus());
373 
374  // elementOutputMap[NuTo::Element::eOutput::INTERNAL_GRADIENT] = internalGradient;
375  // elementOutputMap[NuTo::Element::eOutput::HESSIAN_0_TIME_DERIVATIVE] = hessian0;
376  // elementOutputMap[NuTo::Element::eOutput::HESSIAN_1_TIME_DERIVATIVE] = hessian1;
377  // element.Evaluate(NuTo::ConstitutiveInputMap(), elementOutputMap);
378 
379  // std::cout << std::endl << "internal Gradient:" << std::endl << internalGradient->GetBlockFullVectorDouble() <<
380  // std::endl;
381  // std::cout << std::endl << "Hessian 0:" << std::endl << hessian0->GetBlockFullMatrixDouble() << std::endl;
382  // std::cout << std::endl << "Hessian 1:" << std::endl << hessian1->GetBlockFullMatrixDouble() << std::endl;
383 
384  // S.ElementCheckHessian0(1e-10,1e-10);
385  // S.ElementGetElementPtr(0)
386 
387  // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
388  // Constitutive law outputs - boundary element
389  // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
390 
391  auto GetBoundaryNodesLambda = [](NuTo::NodeBase* rNodePtr) -> bool {
392  double Tol = 1.e-6;
393 
394  if (rNodePtr->GetNum(NuTo::Node::eDof::COORDINATES) > 0)
395  {
396  double x = rNodePtr->Get(NuTo::Node::eDof::COORDINATES)[0];
397 
398  if (x >= 0.0 - Tol && x <= 0.0 + Tol)
399  {
400  return true;
401  }
402  }
403  return false;
404  }; // GetBoundaryNodesLambda
405 
406  int nGrpBE = S.GroupCreate("NODES");
407  S.GroupAddNodeFunction(nGrpBE, GetBoundaryNodesLambda);
408 
409  int eGrpBE = S.GroupCreate("ELEMENTS");
410  S.GroupAddElementsFromNodes(eGrpBE, nGrpBE, false);
411 
412  int boundaryNodeID = S.NodeCreateDOFs("RELATIVEHUMIDITY");
413  NuTo::NodeBase* BEPtr = S.NodeGetNodePtr(boundaryNodeID);
414  BEPtr->Set(NuTo::Node::eDof::RELATIVEHUMIDITY, MT.BoundaryEnvironmentalRH);
415  // rS.BoundaryElementsCreate(eGrpBE,nGrpBE,rS.NodeGetNodePtr(boundaryNodeID));
416  S.BoundaryElementsCreate(eGrpBE, nGrpBE, BEPtr);
417 
418  NuTo::ElementBase& boundaryElement = *S.ElementGetElementPtr(1);
419 
420  NuTo::ConstitutiveInputMap constitutiveInputMapBoundary =
421  ConstitutiveOutputTest_CreateConstitutiveInputMapBoundary<TDim>();
422  NuTo::ConstitutiveOutputMap constitutiveOutputMapBoundary =
423  ConstitutiveOutputTest_CreateConstitutiveOutputMapBoundary<TDim>();
424 
425  MT.SetupStaticData(); // VHIRTHAMTODO Check static data Coeffs in contitutive law or somewhere else --- maybe
426  // assert!!!
427 
428  NuTo::Constitutive::IPConstitutiveLawBase& ipLawBoundary = boundaryElement.GetIPData().GetIPConstitutiveLaw(0);
429  ipLawBoundary.Evaluate<TDim>(constitutiveInputMapBoundary, constitutiveOutputMapBoundary);
430 
431  ConstitutiveOutputTest_CheckAndPrintResultsBoundary<TDim>(constitutiveOutputMapBoundary);
432 
433  // boundaryElement.Evaluate(NuTo::ConstitutiveInputMap(), elementOutputMap);
434 
435  // std::cout << std::endl << "internal Gradient (boundary element):" << std::endl <<
436  // internalGradient->GetBlockFullVectorDouble() << std::endl;
437  // std::cout << std::endl << "Hessian 0 (boundary element):" << std::endl <<
438  // hessian0->GetBlockFullMatrixDouble() << std::endl;
439 }
visualize water volume fraction
int ConstitutiveLawID
Definition: MoistureTransport_Setup.h:97
double DensityWater
Definition: MoistureTransport_Setup.h:80
double BoundaryEnvironmentalRH
Definition: MoistureTransport_Setup.h:85
NuTo::ConstitutiveOutputMap ConstitutiveOutputTest_CreateConstitutiveOutputMapBoundary()
Definition: MoistureTransport_ConstitutiveOutputTest.h:243
Base class for all exceptions thrown in NuTo.
Definition: Exception.h:9
NuTo::ConstitutiveOutputMap ConstitutiveOutputTest_CreateConstitutiveOutputMap()
Definition: MoistureTransport_ConstitutiveOutputTest.h:95
double BoundaryDiffusionCoefficientRH
Definition: MoistureTransport_Setup.h:86
void ConstitutiveOutputTests(std::map< NuTo::Node::eDof, NuTo::Interpolation::eTypeOrder > rDofIPTMap)
Definition: MoistureTransport_ConstitutiveOutputTest.h:295
NuTo::ConstitutiveInputMap ConstitutiveOutputTest_CreateConstitutiveInputMapBoundary()
Definition: MoistureTransport_ConstitutiveOutputTest.h:223
double InitialWaterVolumeFraction
Definition: MoistureTransport_Setup.h:74
visualize relative humidity
double PoreVolumeFraction
Definition: MoistureTransport_Setup.h:76
double BoundaryDiffusionCoefficientWV
Definition: MoistureTransport_Setup.h:87
void SetParametersConstitutiveLaw()
Definition: MoistureTransport_Setup.h:119
void ConstitutiveOutputTest_SetNodalValues(NuTo::Structure &rS, const MoistureTransportControl &rMT)
Definition: MoistureTransport_ConstitutiveOutputTest.h:43
double InitialRelativeHumidity
Definition: MoistureTransport_Setup.h:73
element
Definition: DamageBar.py:31
Definition: DamageLaw.h:5
NuTo::ConstitutiveInputMap ConstitutiveOutputTest_CreateConstitutiveInputMap()
Definition: MoistureTransport_ConstitutiveOutputTest.h:66
double DiffusionExponentWV
Definition: MoistureTransport_Setup.h:82
auto GetBoundaryNodesLambda
Definition: MultiPhysics2D.cpp:405
double DiffusionCoefficientWV
Definition: MoistureTransport_Setup.h:81
bool CheckResultInRelTolerance(std::string rResultName, double rCalcValue, double rTgtValue, double rTol=1e-6)
Definition: MoistureTransport_ConstitutiveOutputTest.h:118
void SetupStaticData()
Definition: MoistureTransport_Setup.h:176
node
Definition: Brick8NCoupling.py:104
Eigen::Vector4d DesorptionCoeffs
Definition: MoistureTransport_Setup.h:95
double DensitySaturatedWaterVapor
Definition: MoistureTransport_Setup.h:79
void ConstitutiveOutputTest_CheckAndPrintResultsBoundary(const NuTo::ConstitutiveOutputMap &outputMap)
Definition: MoistureTransport_ConstitutiveOutputTest.h:262
Definition: MoistureTransport_Setup.h:68
void ConstitutiveOutputTest_SetupMoistureTransport(MoistureTransportControl &rMT)
Definition: MoistureTransport_ConstitutiveOutputTest.h:17
void ConstitutiveOutputTest_CheckAndPrintResults(const NuTo::ConstitutiveOutputMap &outputMap)
Definition: MoistureTransport_ConstitutiveOutputTest.h:137
Eigen::Vector4d AdsorptionCoeffs
Definition: MoistureTransport_Setup.h:94
double MassExchangeRate
–> Calculated from relative humidity
Definition: MoistureTransport_Setup.h:75
double DiffusionExponentRH
Definition: MoistureTransport_Setup.h:78
double DiffusionCoefficientRH
Definition: MoistureTransport_Setup.h:77