40 using namespace Input::Type;
54 .name(
"bc_temperature")
55 .description(
"Boundary value of temperature.")
59 *
this+=init_temperature
60 .name(
"init_temperature")
61 .description(
"Initial temperature.")
62 .input_default(
"0.0");
66 .description(
"Porosity.")
68 .flags_add(in_main_matrix & in_time_term);
71 .name(
"fluid_density")
72 .description(
"Density of fluid.")
73 .flags_add(in_main_matrix & in_time_term);
75 *
this+=fluid_heat_capacity
76 .name(
"fluid_heat_capacity")
77 .description(
"Heat capacity of fluid.")
78 .flags_add(in_main_matrix & in_time_term);
80 *
this+=fluid_heat_conductivity
81 .name(
"fluid_heat_conductivity")
82 .description(
"Heat conductivity of fluid.")
83 .flags_add(in_main_matrix);
87 .name(
"solid_density")
88 .description(
"Density of solid (rock).")
89 .flags_add(in_time_term);
91 *
this+=solid_heat_capacity
92 .name(
"solid_heat_capacity")
93 .description(
"Heat capacity of solid (rock).")
94 .flags_add(in_time_term);
96 *
this+=solid_heat_conductivity
97 .name(
"solid_heat_conductivity")
98 .description(
"Heat conductivity of solid (rock).")
99 .flags_add(in_main_matrix);
103 .description(
"Longitudal heat dispersivity in fluid.")
104 .input_default(
"0.0")
105 .flags_add(in_main_matrix);
109 .description(
"Transversal heat dispersivity in fluid.")
110 .input_default(
"0.0")
111 .flags_add(in_main_matrix);
113 *
this+=fluid_thermal_source
114 .name(
"fluid_thermal_source")
115 .description(
"Thermal source density in fluid.")
116 .input_default(
"0.0")
119 *
this+=solid_thermal_source
120 .name(
"solid_thermal_source")
121 .description(
"Thermal source density in solid.")
122 .input_default(
"0.0")
125 *
this+=fluid_heat_exchange_rate
126 .name(
"fluid_heat_exchange_rate")
127 .description(
"Heat exchange rate in fluid.")
128 .input_default(
"0.0")
131 *
this+=solid_heat_exchange_rate
132 .name(
"solid_heat_exchange_rate")
133 .description(
"Heat exchange rate of source in solid.")
134 .input_default(
"0.0")
137 *
this+=fluid_ref_temperature
138 .name(
"fluid_ref_temperature")
139 .description(
"Reference temperature of source in fluid.")
140 .input_default(
"0.0")
143 *
this+=solid_ref_temperature
144 .name(
"solid_ref_temperature")
145 .description(
"Reference temperature in solid.")
146 .input_default(
"0.0")
150 .name(
"cross_section")
151 .flags(input_copy & in_time_term & in_main_matrix);
156 .flags(equation_result);
162 static IT::Record input_type =
IT::Record(ModelEqData::name() +
"_" + implementation, description +
" for heat transfer.")
172 static IT::Selection input_type =
IT::Selection(ModelEqData::name() +
"_" + implementation +
"_Output",
"Selection for output fields of " + description +
" for heat transfer.");
195 por(point_list.size()),
196 f_rho(point_list.size()),
197 s_rho(point_list.size()),
198 f_c(point_list.size()),
199 s_c(point_list.size());
208 for (
unsigned int i=0; i<point_list.size(); i++)
209 mm_coef[i] = elem_csec[i]*(por[i]*f_rho[i]*f_c[i] + (1.-por[i])*s_rho[i]*s_c[i]);
219 const unsigned int qsize = point_list.size();
221 s_cond(qsize), por(qsize), csection(qsize), disp_l(qsize), disp_t(qsize);
232 for (
unsigned int k=0; k<qsize; k++) {
233 ad_coef[0][k] = velocity[k]*f_rho[k]*f_cap[k];
238 double vnorm = arma::norm(velocity[k], 2);
240 for (
int i=0; i<3; i++)
241 for (
int j=0; j<3; j++)
242 dif_coef[0][k](i,j) = (velocity[k][i]*velocity[k][j]/(vnorm*vnorm)*(disp_l[k]-disp_t[k]) + disp_t[k]*(i==j?1:0))
243 *vnorm*f_rho[k]*f_cond[k];
245 dif_coef[0][k].zeros();
248 dif_coef[0][k] += csection[k]*(por[k]*f_cond[k] + (1.-por[k])*s_cond[k])*arma::eye(3,3);
259 for (
unsigned int i=0; i<point_list.size(); i++)
260 init_values[i] = init_value[i];
270 for (
unsigned int i=0; i<point_list.size(); i++)
271 bc_values[i] = bc_value[i];
281 const unsigned int qsize = point_list.size();
282 std::vector<double> por(qsize), csection(qsize), f_rho(qsize), s_rho(qsize), f_cap(qsize), s_cap(qsize),
283 f_source(qsize), s_source(qsize), f_sigma(qsize), s_sigma(qsize), f_temp(qsize), s_temp(qsize);
297 for (
unsigned int k=0; k<point_list.size(); k++)
299 sources_density[k].resize(1);
300 sources_sigma[k].resize(1);
301 sources_value[k].resize(1);
303 sources_density[k][0] = csection[k]*(por[k]*f_source[k] + (1.-por[k])*s_source[k]);
304 sources_sigma[k][0] = csection[k]*(por[k]*f_rho[k]*f_cap[k]*f_sigma[k] + (1.-por[k])*s_rho[k]*s_cap[k]*s_sigma[k]);
306 sources_value[k][0] = csection[k]*(por[k]*f_rho[k]*f_cap[k]*f_sigma[k]*f_temp[k]
307 + (1.-por[k])*s_rho[k]*s_cap[k]*s_sigma[k]*s_temp[k])/sources_sigma[k][0];
309 sources_value[k][0] = 0;
318 const unsigned int qsize = point_list.size();
319 std::vector<double> por(qsize), csection(qsize), f_rho(qsize), s_rho(qsize), f_cap(qsize), s_cap(qsize),
320 f_source(qsize), s_source(qsize), f_sigma(qsize), s_sigma(qsize), f_temp(qsize), s_temp(qsize);
329 for (
unsigned int k=0; k<point_list.size(); k++)
331 sources_sigma[k].resize(1);
332 sources_sigma[k][0] = csection[k]*(por[k]*f_rho[k]*f_cap[k]*f_sigma[k] + (1.-por[k])*s_rho[k]*s_cap[k]*s_sigma[k]);
Field< 3, FieldValue< 3 >::Scalar > solid_heat_capacity
Heat capacity of solid.
void compute_sources_sigma(const std::vector< arma::vec3 > &point_list, const ElementAccessor< 3 > &ele_acc, std::vector< arma::vec > &sources_sigma) override
Field< 3, FieldValue< 3 >::Scalar > fluid_density
Density of fluid.
BCField< 3, FieldValue< 3 >::Scalar > bc_temperature
Dirichlet boundary condition for temperature.
static Input::Type::AbstractRecord input_type
Common specification of the input record for secondary equations.
Field< 3, FieldValue< 3 >::Scalar > disp_t
Transversal heat dispersivity.
Field< 3, FieldValue< 3 >::Scalar > cross_section
Pointer to DarcyFlow field cross_section.
Field< 3, FieldValue< 3 >::Scalar > fluid_heat_exchange_rate
Heat exchange rate in fluid.
Field< 3, FieldValue< 3 >::Scalar > solid_heat_exchange_rate
Heat exchange rate in solid.
void compute_init_cond(const std::vector< arma::vec3 > &point_list, const ElementAccessor< 3 > &ele_acc, std::vector< arma::vec > &init_values) override
Field< 3, FieldValue< 3 >::Scalar > fluid_heat_capacity
Heat capacity of fluid.
virtual void value_list(const std::vector< Point > &point_list, const ElementAccessor< spacedim > &elm, std::vector< typename Value::return_type > &value_list) const
Field< 3, FieldValue< 3 >::Scalar > porosity
Porosity of solid.
Field< 3, FieldValue< 3 >::Scalar > fluid_thermal_source
Thermal source in fluid.
Field< 3, FieldValue< 3 >::Scalar > fluid_heat_conductivity
Heat conductivity of fluid.
Field< 3, FieldValue< 3 >::Scalar > fluid_ref_temperature
Reference temperature in fluid.
void set_component_names(std::vector< string > &names, const Input::Record &in_rec) override
Read or set names of solution components.
Field< 3, FieldValue< 3 >::Scalar > init_temperature
Initial temperature.
Field< 3, FieldValue< 3 >::Scalar > solid_thermal_source
Thermal source in solid.
void compute_mass_matrix_coefficient(const std::vector< arma::vec3 > &point_list, const ElementAccessor< 3 > &ele_acc, std::vector< double > &mm_coef) override
void compute_dirichlet_bc(const std::vector< arma::vec3 > &point_list, const ElementAccessor< 3 > &ele_acc, std::vector< arma::vec > &bc_values) override
Field< 3, FieldValue< 3 >::Scalar > solid_heat_conductivity
Heat conductivity of solid.
Field< 3, FieldValue< 3 >::Scalar > solid_ref_temperature
Reference temperature in solid.
static IT::Selection & get_output_selection_input_type(const string &implementation, const string &description)
virtual ModelEqData & data()=0
Derived class should implement getter for ModelEqData instance.
void compute_advection_diffusion_coefficients(const std::vector< arma::vec3 > &point_list, const std::vector< arma::vec3 > &velocity, const ElementAccessor< 3 > &ele_acc, std::vector< std::vector< arma::vec3 > > &ad_coef, std::vector< std::vector< arma::mat33 > > &dif_coef) override
~HeatTransferModel() override
Field< 3, FieldValue< 3 >::Scalar > solid_density
Density of solid.
Discontinuous Galerkin method for equation of transport with dispersion.
mixed-hybrid model of linear Darcy flow, possibly unsteady.
void compute_source_coefficients(const std::vector< arma::vec3 > &point_list, const ElementAccessor< 3 > &ele_acc, std::vector< arma::vec > &sources_conc, std::vector< arma::vec > &sources_density, std::vector< arma::vec > &sources_sigma) override
static IT::Record & get_input_type(const string &implementation, const string &description)
Field< 3, FieldValue< 3 >::Scalar > disp_l
Longitudal heat dispersivity.