40 using namespace Input::Type;
52 ADD_FIELD(bc_temperature,
"Boundary value of temperature.",
"0.0");
54 ADD_FIELD(init_temperature,
"Initial temperature.",
"0.0");
56 ADD_FIELD(fluid_density,
"Density of fluid.");
57 ADD_FIELD(fluid_heat_capacity,
"Heat capacity of fluid.");
58 ADD_FIELD(fluid_heat_conductivity,
"Heat conductivity of fluid.");
59 ADD_FIELD(solid_density,
"Density of solid (rock).");
60 ADD_FIELD(solid_heat_capacity,
"Heat capacity of solid (rock).");
61 ADD_FIELD(solid_heat_conductivity,
"Heat conductivity of solid (rock).");
62 ADD_FIELD(disp_l,
"Longitudal heat dispersivity in fluid.",
"0.0" );
63 ADD_FIELD(disp_t,
"Transversal heat dispersivity in fluid.",
"0.0" );
64 ADD_FIELD(fluid_thermal_source,
"Thermal source density in fluid.",
"0.0");
65 ADD_FIELD(solid_thermal_source,
"Thermal source density in solid.",
"0.0");
66 ADD_FIELD(fluid_heat_exchange_rate,
"Heat exchange rate in fluid.",
"0.0");
67 ADD_FIELD(solid_heat_exchange_rate,
"Heat exchange rate in solid.",
"0.0");
68 ADD_FIELD(fluid_ref_temperature,
"Reference temperature in fluid.",
"0.0");
69 ADD_FIELD(solid_ref_temperature,
"Reference temperature in solid.",
"0.0");
71 *
this += cross_section.name(
"cross_section").just_copy();
72 output_fields += output_field.name(
"temperature").units(
"M/L^3");
78 static IT::Record input_type =
IT::Record(ModelEqData::name() +
"_" + implementation, description +
" for heat transfer.")
88 static IT::Selection input_type =
IT::Selection(ModelEqData::name() +
"_" + implementation +
"_Output",
"Selection for output fields of " + description +
" for heat transfer.");
158 por(point_list.size()),
159 f_rho(point_list.size()),
160 s_rho(point_list.size()),
161 f_c(point_list.size()),
162 s_c(point_list.size());
171 for (
unsigned int i=0; i<point_list.size(); i++)
172 mm_coef[i] = elem_csec[i]*(por[i]*f_rho[i]*f_c[i] + (1.-por[i])*s_rho[i]*s_c[i]);
182 const unsigned int qsize = point_list.size();
184 s_cond(qsize), por(qsize), csection(qsize), disp_l(qsize), disp_t(qsize);
195 for (
unsigned int k=0; k<qsize; k++) {
196 ad_coef[0][k] = velocity[k]*f_rho[k]*f_cap[k];
201 double vnorm = arma::norm(velocity[k], 2);
203 for (
int i=0; i<3; i++)
204 for (
int j=0; j<3; j++)
205 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))
206 *vnorm*f_rho[k]*f_cond[k];
208 dif_coef[0][k].zeros();
211 dif_coef[0][k] += csection[k]*(por[k]*f_cond[k] + (1.-por[k])*s_cond[k])*arma::eye(3,3);
222 for (
int i=0; i<point_list.size(); i++)
223 init_values[i] = init_value[i];
233 for (
int i=0; i<point_list.size(); i++)
234 bc_values[i] = bc_value[i];
244 const unsigned int qsize = point_list.size();
245 std::vector<double> por(qsize), csection(qsize), f_rho(qsize), s_rho(qsize), f_cap(qsize), s_cap(qsize),
246 f_source(qsize), s_source(qsize), f_sigma(qsize), s_sigma(qsize), f_temp(qsize), s_temp(qsize);
260 for (
int k=0; k<point_list.size(); k++)
262 sources_density[k].resize(1);
263 sources_sigma[k].resize(1);
264 sources_value[k].resize(1);
266 sources_density[k][0] = csection[k]*(por[k]*f_source[k] + (1.-por[k])*s_source[k]);
267 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]);
269 sources_value[k][0] = csection[k]*(por[k]*f_rho[k]*f_cap[k]*f_sigma[k]*f_temp[k]
270 + (1.-por[k])*s_rho[k]*s_cap[k]*s_sigma[k]*s_temp[k])/sources_sigma[k][0];
272 sources_value[k][0] = 0;
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);
292 for (
int k=0; k<point_list.size(); k++)
294 sources_sigma[k].resize(1);
295 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]);