OOFEM 3.0
Loading...
Searching...
No Matches
transportmaterial.h
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 - 2025 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 library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (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 GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef transportmaterial_h
36#define transportmaterial_h
37
38#include "material.h"
39#include "floatarray.h"
40#include "floatarrayf.h"
41#include "floatmatrix.h"
42#include "matconst.h"
43#include "matstatus.h"
45
46namespace oofem {
55{
56protected:
57 double field = 0.;
60
61 double temp_field = 0.;
64
65 double maturity = 0.;
66
67public:
69
70 void printOutputAt(FILE *file, TimeStep *tStep) const override;
71
72 void initTempStatus() override;
73 void updateYourself(TimeStep *tStep) override;
74
75 void saveContext(DataStream &stream, ContextMode mode) override;
76 void restoreContext(DataStream &stream, ContextMode mode) override;
77
78 const char *giveClassName() const override { return "TransportMaterialStatus"; }
79
81 void setTempGradient(const FloatArrayF<3> &newGradient) { temp_gradient = newGradient; }
83 void setTempField(double newField) { temp_field = newField; }
85 void setTempFlux(const FloatArrayF<3> &newFlux) { temp_flux = newFlux; }
86
88 const FloatArrayF<3> &giveGradient() const { return gradient; }
90 double giveField() const { return field; }
92 const FloatArrayF<3> &giveFlux() const { return flux; }
93
97 double giveTempField() const { return temp_field; }
99 const FloatArrayF<3> &giveTempFlux() const { return temp_flux; }
101 double giveMaturity() const { return maturity; }
102};
103
108{
109protected:
110 double temperature = 0.;
113
114 double humidity = 0.;
117
118 double temp_temperature = 0.;
121
122 double temp_humidity = 0.;
125
126public:
128
129 void printOutputAt(FILE *file, TimeStep *tStep) const override;
130
131 void initTempStatus() override;
132 void updateYourself(TimeStep *tStep) override;
133
134 void saveContext(DataStream &stream, ContextMode mode) override;
135 void restoreContext(DataStream &stream, ContextMode mode) override;
136
137 const char *giveClassName() const override { return "TransportMaterialStatus"; }
138
140 void setTempTemperatureGradient(const FloatArrayF<3> &newGradient) { temp_t_gradient = newGradient; }
142 void setTempTemperature(double newField) { temp_temperature = newField; }
144 void setTempHeatFlux(const FloatArrayF<3> &newFlux) { temp_t_flux = newFlux; }
145
149 double giveTemperature() const { return temperature; }
151 const FloatArrayF<3> &giveHeatFlux() const { return t_flux; }
152
156 double giveTempTemperature() const { return temp_temperature; }
158 const FloatArrayF<3> &giveTempHeatFlux() const { return temp_t_flux; }
159
160
162 void setTempHumidityGradient(const FloatArrayF<3> &newGradient) { temp_h_gradient = newGradient; }
164 void setTempHumidity(double newField) { temp_humidity = newField; }
166 void setTempHumidityFlux(const FloatArrayF<3> &newFlux) { temp_h_flux = newFlux; }
167
171 double giveHumidity() const { return humidity; }
173 const FloatArrayF<3> &giveHumidityFlux() const { return h_flux; }
174
178 double giveTempHumidity() const { return temp_humidity; }
181};
182
183
192{
193public:
199 TransportMaterial(int n, Domain * d) : Material(n, d) { }
200
211 virtual void giveFluxVector(FloatArray &answer, GaussPoint *gp, const FloatArray &grad, const FloatArray &field, TimeStep *tStep) const;
212 virtual FloatArrayF<3> computeFlux3D(const FloatArrayF<3> &grad, double field, GaussPoint *gp, TimeStep *tStep) const;
213 FloatArrayF<2> computeFlux2D(const FloatArrayF<2> &grad, double field, GaussPoint *gp, TimeStep *tStep) const;
214 FloatArrayF<1> computeFlux1D(const FloatArrayF<1> &grad, double field, GaussPoint *gp, TimeStep *tStep) const;
215
216 // HeMo:
217 virtual std::pair<FloatArrayF<3>, FloatArrayF<3>> computeHeMoFlux3D(const FloatArrayF<3> &grad_t, const FloatArrayF<3> &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const;
218 std::pair<FloatArrayF<2>, FloatArrayF<2>> computeHeMoFlux2D(const FloatArrayF<2> &grad_t, const FloatArrayF<2> &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const;
219 std::pair<FloatArrayF<1>, FloatArrayF<1>> computeHeMoFlux1D(const FloatArrayF<1> &grad_t, const FloatArrayF<1> &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const;
220
221 //virtual FloatMatrixF<3,3> computeHeMoTangent3D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
222 //virtual FloatMatrixF<2,2> computeHeMoTangent2D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
223 //virtual FloatMatrixF<1,1> computeHeMoTangent1D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
224
234 virtual void giveCharacteristicMatrix(FloatMatrix &answer,
235 MatResponseMode mode,
236 GaussPoint *gp,
237 TimeStep *tStep) const override;
238
239 virtual FloatMatrixF<3,3> computeTangent3D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const = 0;
240 FloatMatrixF<2,2> computeTangent2D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
241 FloatMatrixF<1,1> computeTangent1D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const;
242
251 virtual double giveCharacteristicValue(MatResponseMode mode,
252 GaussPoint *gp,
253 TimeStep *tStep) const override = 0;
254
261 virtual void updateInternalState(const FloatArray &state, GaussPoint *gp, TimeStep *tStep);
262
266 virtual bool hasInternalSource() const { return false; }
274 virtual void computeInternalSourceVector(FloatArray &val, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
275 { val.clear(); }
276
279 virtual double giveHumidity(GaussPoint *gp, ValueModeType mode) const { return -1.0; }
280
281 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
282
283 std::unique_ptr<MaterialStatus> CreateStatus(GaussPoint *gp) const override { return std::make_unique<TransportMaterialStatus>(gp); }
284};
285} // end namespace oofem
286#endif // transportmaterial_h
void restoreContext(DataStream &stream, ContextMode mode) override
void setTempTemperatureGradient(const FloatArrayF< 3 > &newGradient)
Set gradient.
FloatArrayF< 3 > h_gradient
Humidity gradient.
const FloatArrayF< 3 > & giveTempHumidityFlux() const
Returns last flux.
const FloatArrayF< 3 > & giveHumidityFlux() const
Returns last flux.
const char * giveClassName() const override
double giveTempHumidity() const
Return last field.
FloatArrayF< 3 > t_gradient
Temperature gradient.
FloatArrayF< 3 > t_flux
Heat flux.
const FloatArrayF< 3 > & giveTempHumidityGradient() const
Return last gradient.
FloatArrayF< 3 > temp_t_flux
Temp heat flux.
void saveContext(DataStream &stream, ContextMode mode) override
void setTempHumidityGradient(const FloatArrayF< 3 > &newGradient)
Set gradient.
FloatArrayF< 3 > temp_h_flux
Temp humidity flux.
const FloatArrayF< 3 > & giveHumidityGradient() const
Return last gradient.
const FloatArrayF< 3 > & giveHeatFlux() const
Returns last flux.
FloatArrayF< 3 > temp_h_gradient
Temp humidity gradient.
FloatArrayF< 3 > h_flux
Humidity flux.
void setTempHumidity(double newField)
Set field.
double giveTemperature() const
Return last field.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
const FloatArrayF< 3 > & giveTempTemperatureGradient() const
Return last gradient.
FloatArrayF< 3 > temp_t_gradient
Temp temperature gradient.
const FloatArrayF< 3 > & giveTempHeatFlux() const
Returns last flux.
void setTempTemperature(double newField)
Set field.
double giveHumidity() const
Return last field.
void updateYourself(TimeStep *tStep) override
void setTempHumidityFlux(const FloatArrayF< 3 > &newFlux)
Set flux.
const FloatArrayF< 3 > & giveTemperatureGradient() const
Return last gradient.
double giveTempTemperature() const
Return last field.
void setTempHeatFlux(const FloatArrayF< 3 > &newFlux)
Set flux.
double temp_temperature
Temp temperature.
MaterialStatus(GaussPoint *g)
Definition matstatus.h:91
Material(int n, Domain *d)
Definition material.C:46
double giveField() const
Return last field.
FloatArrayF< 3 > temp_gradient
Temp. Gradient.
void updateYourself(TimeStep *tStep) override
double giveTempField() const
Return last field.
double maturity
A scalar containing maturity (integration of temperature over time).
const char * giveClassName() const override
void setTempField(double newField)
Set field.
void setTempFlux(const FloatArrayF< 3 > &newFlux)
Set flux.
void restoreContext(DataStream &stream, ContextMode mode) override
void setTempGradient(const FloatArrayF< 3 > &newGradient)
Set gradient.
double field
General field (temperature, concentration, etc.).
const FloatArrayF< 3 > & giveGradient() const
Return last gradient.
const FloatArrayF< 3 > & giveFlux() const
Returns last flux.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
void saveContext(DataStream &stream, ContextMode mode) override
FloatArrayF< 3 > temp_flux
Vector containing the last computed flux.
FloatArrayF< 3 > gradient
General gradient.
FloatArrayF< 3 > flux
General flux (energy flux, mass flow, etc.).
const FloatArrayF< 3 > & giveTempFlux() const
Returns last flux.
const FloatArrayF< 3 > & giveTempGradient() const
Return last gradient.
double temp_field
Temp. Primary field.
double giveMaturity() const
Returns maturity.
virtual FloatArrayF< 3 > computeFlux3D(const FloatArrayF< 3 > &grad, double field, GaussPoint *gp, TimeStep *tStep) const
FloatMatrixF< 2, 2 > computeTangent2D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
virtual void updateInternalState(const FloatArray &state, GaussPoint *gp, TimeStep *tStep)
virtual double giveHumidity(GaussPoint *gp, ValueModeType mode) const
std::pair< FloatArrayF< 2 >, FloatArrayF< 2 > > computeHeMoFlux2D(const FloatArrayF< 2 > &grad_t, const FloatArrayF< 2 > &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
virtual std::pair< FloatArrayF< 3 >, FloatArrayF< 3 > > computeHeMoFlux3D(const FloatArrayF< 3 > &grad_t, const FloatArrayF< 3 > &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const
virtual void computeInternalSourceVector(FloatArray &val, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
virtual FloatMatrixF< 3, 3 > computeTangent3D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const =0
FloatMatrixF< 1, 1 > computeTangent1D(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
std::pair< FloatArrayF< 1 >, FloatArrayF< 1 > > computeHeMoFlux1D(const FloatArrayF< 1 > &grad_t, const FloatArrayF< 1 > &grad_w, double t, double h, GaussPoint *gp, TimeStep *tStep) const
virtual double giveCharacteristicValue(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override=0
TransportMaterial(int n, Domain *d)
virtual void giveCharacteristicMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
virtual void giveFluxVector(FloatArray &answer, GaussPoint *gp, const FloatArray &grad, const FloatArray &field, TimeStep *tStep) const
FloatArrayF< 1 > computeFlux1D(const FloatArrayF< 1 > &grad, double field, GaussPoint *gp, TimeStep *tStep) const
virtual bool hasInternalSource() const
FloatArrayF< 2 > computeFlux2D(const FloatArrayF< 2 > &grad, double field, GaussPoint *gp, TimeStep *tStep) const
long ContextMode
Definition contextmode.h:43

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011