52 Material :: initializeFrom(ir);
82 OOFEM_WARNING(
"thetaM cannot be smaller than thetaS. Choose thetaM=thetaS.");
109 status->setTempField(field);
112 auto flux = -c * grad;
113 status->setTempFlux(flux);
119LatticeTransportMaterial :: give(
int aProperty,
GaussPoint *gp)
const
121 if ( aProperty ==
'k' ) {
123 }
else if ( ( aProperty ==
HeatCapaCoeff ) || ( aProperty ==
'c' ) ) {
124 return ( this->
give(
'd', gp) );
127 return this->Material :: give(aProperty, gp);
132LatticeTransportMaterial :: giveCharacteristicValue(MatResponseMode mode,
139 if ( mode == Capacity ) {
141 }
else if ( mode == Conductivity ) {
152LatticeTransportMaterial :: computeConductivity(
double suction,
160 double relativePermeability = 0.;
161 double conductivity = 0.;
163 double saturation, partOne, partTwo, numerator, denominator;
166 relativePermeability = 1.;
168 partOne = pow(suction / this->
paramA, 1. / ( 1. - this->
paramM ) );
174 numerator = ( 1. - pow(1. - pow(partTwo * saturation, 1 / this->
paramM), this->
paramM) );
175 denominator = ( 1. - pow(1. - pow(partTwo, 1 / this->
paramM), this->
paramM) );
177 relativePermeability = sqrt(saturation) * pow( ( numerator ) / ( denominator ), 2.0 );
183 status->setMass(mass);
198 if (
domain->giveEngngModel()->giveMasterEngngModel() ) {
199 (
static_cast< StaggeredProblem *
>(
domain->giveEngngModel()->giveMasterEngngModel() ) )->giveCoupledModels(coupledModels);
202 if ( couplingFlag == 1 && coupledModels.
at(1) != 0 && !tStep->
isTheFirstStep() ) {
205 for (
int i = 1; i <= crackLengths.
giveSize(); i++ ) {
206 if ( couplingNumbers.
at(i) != 0 ) {
209 crackWidths.
at(i) = 0.;
216 if ( !
domain->giveEngngModel()->giveMasterEngngModel() ) {
220 double crackContribution = 0.;
222 for (
int i = 1; i <= crackLengths.
giveSize(); i++ ) {
223 if ( crackWidths.
at(i) < this->crackLimit || this->crackLimit < 0. ) {
224 crackContribution += pow(crackWidths.
at(i), 3.) / crackLengths.
at(i);
226 printf(
"Limit is activated\n");
227 crackContribution += pow(
crackLimit, 3.) / crackLengths.
at(i);
232 conductivity += crackContribution;
238LatticeTransportMaterial :: computeCapacity(
double suction,
GaussPoint *gp)
const
252 double partThree = pow(1. + pow(suction / this->
paramA, 1. / ( 1. - this->
paramM ) ), -this->
paramM - 1.);
253 cap = ( this->
thetaM - this->
thetaR ) * partOne * partTwo * partThree;
261std::unique_ptr<MaterialStatus>
262LatticeTransportMaterial :: CreateStatus(
GaussPoint *gp)
const
264 return std::make_unique<LatticeTransportMaterialStatus>(gp);
269LatticeTransportMaterialStatus :: printOutputAt(FILE *File,
TimeStep *tStep)
const
271 MaterialStatus :: printOutputAt(File, tStep);
273 fprintf(File,
" state %.4e",
field);
274 fprintf(File,
" mass %.8e",
mass);
279LatticeTransportMaterialStatus :: updateYourself(
TimeStep *tStep)
281 TransportMaterialStatus :: updateYourself(tStep);
286LatticeTransportMaterialStatus :: initTempStatus()
288 TransportMaterialStatus :: initTempStatus();
293LatticeTransportMaterialStatus :: LatticeTransportMaterialStatus(
GaussPoint *g) :
#define REGISTER_Material(class)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Index giveSize() const
Returns the size of receiver.
Element * giveElement()
Returns corresponding element to receiver.
virtual double giveCrackWidth()
virtual void giveCrackWidths(FloatArray &widths)
virtual void giveCrackLengths(FloatArray &lengths)
virtual void giveCouplingNumbers(IntArray &numbers)
double mass
Liquid mass in element.
double computeCapacity(double suction, GaussPoint *gp) const
double permeability
Intrinsic permeability of porous material.
double thetaR
Residual water content.
int conType
Type of conductivity and capcity laws.
double thetaS
Relative saturated water content.
double thetaM
Modified water content.
double suctionAirEntry
Suction air entry value.
double give(int, GaussPoint *gp) const override
double density
Density of fluid.
int capacity
Type of conductivity and capcity laws.
double paramM
Parameter of van Genuchten law.
double crackLimit
Crack limit.
double viscosity
Viscosity of fluid.
double paramA
Parameter of van Genuchten law.
double computeConductivity(double suction, GaussPoint *gp, TimeStep *tStep) const
double crackTortuosity
Crack tortuosity.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
double giveTempField() const
Return last field.
TransportMaterialStatus(GaussPoint *g)
void setTempGradient(const FloatArrayF< 3 > &newGradient)
Set gradient.
double field
General field (temperature, concentration, etc.).
#define OOFEM_WARNING(...)
#define _IFT_LatticeTransportMaterial_thetam
#define _IFT_LatticeTransportMaterial_thetar
#define _IFT_LatticeTransportMaterial_ctor
#define _IFT_LatticeTransportMaterial_contype
#define _IFT_LatticeTransportMaterial_paev
#define _IFT_LatticeTransportMaterial_thetas
#define _IFT_LatticeTransportMaterial_clim
#define _IFT_LatticeTransportMaterial_vis
#define _IFT_LatticeTransportMaterial_a
#define _IFT_LatticeTransportMaterial_c
#define _IFT_LatticeTransportMaterial_m
#define _IFT_LatticeTransportMaterial_k