65 const ConservedVariablesType &u_liquid,
66 const ConservedVariablesType &u_gas,
67 const ConservedVariablesGradType &grad_u_liquid,
68 const ConservedVariablesGradType &grad_u_gas,
70 const number &m_dot_evap,
71 const number &laser_heat_source)
74 dealii::ExcNotImplemented(
75 "Currently, only dim=1 is enabled for "
76 "enforcing interface jump conditions with the penalty method."));
79 using Idx = std::conditional_t<
81 CompressibleFlow::Idx1D,
82 std::conditional_t<dim == 2,
83 CompressibleFlow::Idx2D,
84 std::conditional_t<dim == 3, CompressibleFlow::Idx3D, void>>>;
86 ConservedVariablesType total_flux_liquid;
87 ConservedVariablesType total_flux_gas;
90 const dealii::VectorizedArray<number> omega_mass_1 = 0.5;
91 const dealii::VectorizedArray<number> omega_mass_2 = 1. - omega_mass_1;
97 const dealii::VectorizedArray<number> interface_mass_flux_conservation_term =
98 (u_liquid[Idx::density] / u_gas[Idx::density] * u_gas[Idx::momentum_x] -
99 u_gas[Idx::density] / u_liquid[Idx::density] * u_liquid[Idx::momentum_x] +
100 (u_gas[Idx::density] * u_gas[Idx::density] -
101 u_liquid[Idx::density] * u_liquid[Idx::density]) /
102 (u_liquid[Idx::density] * u_gas[Idx::density]) * m_dot_evap);
104 total_flux_liquid[Idx::density] = omega_mass_1 * interface_mass_flux_conservation_term;
105 total_flux_gas[Idx::density] = omega_mass_2 * interface_mass_flux_conservation_term;
107 const dealii::VectorizedArray<number> weighted_average_momentum =
109 u_gas[Idx::momentum_x],
111 u_liquid[Idx::momentum_x]);
113 total_flux_liquid[Idx::density] += weighted_average_momentum;
114 total_flux_gas[Idx::density] -= weighted_average_momentum;
118 const dealii::VectorizedArray<number> penalty_gas_density =
119 multiphase_scratch_data.
phase_coupling.penalty.coefficients.density *
120 (u_gas[Idx::density] -
121 multiphase_scratch_data.
phase_coupling.penalty.target_values.density_gas_phase);
123 total_flux_gas[Idx::density] += penalty_gas_density;
130 const dealii::VectorizedArray<number> omega_mom_1_conv = 0.5;
131 const dealii::VectorizedArray<number> omega_mom_2_conv = 1. - omega_mom_1_conv;
133 const dealii::VectorizedArray<number> omega_mom_1_visc =
136 multiphase_scratch_data.
material_gas.data.dynamic_viscosity);
137 const dealii::VectorizedArray<number> omega_mom_2_visc = 1. - omega_mom_1_visc;
141 const auto grad_vel_liquid =
142 CompressibleFlow::calculate_grad_velocity<dim, number>(u_liquid, grad_u_liquid);
143 const auto grad_vel_gas =
144 CompressibleFlow::calculate_grad_velocity<dim, number>(u_gas, grad_u_gas);
146 const dealii::Tensor<2, dim, dealii::VectorizedArray<number>> viscous_stress_tensor_liquid =
147 CompressibleFlow::viscous_stress_tensor<dim, number>(
148 grad_vel_liquid, multiphase_scratch_data.
material_liquid.data.dynamic_viscosity);
149 const dealii::Tensor<2, dim, dealii::VectorizedArray<number>> viscous_stress_tensor_gas =
150 CompressibleFlow::viscous_stress_tensor<dim, number>(
151 grad_vel_gas, multiphase_scratch_data.
material_gas.data.dynamic_viscosity);
153 const dealii::VectorizedArray<number> stress_tensor_liquid =
154 multiphase_scratch_data.
material_liquid.eos_utils->calculate_stress_tensor(
155 u_liquid, viscous_stress_tensor_liquid)[0][0];
156 const dealii::VectorizedArray<number> stress_tensor_gas =
157 multiphase_scratch_data.
material_gas.eos_utils->calculate_stress_tensor(
158 u_gas, viscous_stress_tensor_gas)[0][0];
160 const dealii::VectorizedArray<number> jump_momentum_term_liquid =
161 u_liquid[Idx::momentum_x] * u_liquid[Idx::momentum_x] / u_liquid[Idx::density];
162 const dealii::VectorizedArray<number> jump_momentum_term_gas =
163 u_gas[Idx::momentum_x] * u_gas[Idx::momentum_x] / u_gas[Idx::density];
165 total_flux_liquid[Idx::momentum_x] +=
166 omega_mom_1_conv * (jump_momentum_term_liquid - jump_momentum_term_gas);
167 total_flux_gas[Idx::momentum_x] +=
168 omega_mom_2_conv * (jump_momentum_term_liquid - jump_momentum_term_gas);
170 const dealii::VectorizedArray<number> average_momentum_term_1 =
172 jump_momentum_term_liquid,
174 jump_momentum_term_gas);
176 total_flux_liquid[Idx::momentum_x] += average_momentum_term_1;
177 total_flux_gas[Idx::momentum_x] -= average_momentum_term_1;
179 const dealii::VectorizedArray<number> jump_momentum_term_2 =
180 -(u_liquid[Idx::momentum_x] / u_liquid[Idx::density] -
181 u_gas[Idx::momentum_x] / u_gas[Idx::density]) *
184 const dealii::VectorizedArray<number> average_momentum_term_2 =
186 -stress_tensor_liquid,
190 total_flux_liquid[Idx::momentum_x] +=
191 jump_momentum_term_2 * omega_mom_1_visc + average_momentum_term_2;
192 total_flux_gas[Idx::momentum_x] +=
193 jump_momentum_term_2 * omega_mom_2_visc - average_momentum_term_2;
200 const dealii::VectorizedArray<number> omega_energy_1_conv = 0.5;
201 const dealii::VectorizedArray<number> omega_energy_2_conv = 1. - omega_energy_1_conv;
203 const dealii::VectorizedArray<number> omega_energy_1_visc =
206 multiphase_scratch_data.
material_gas.data.dynamic_viscosity);
207 const dealii::VectorizedArray<number> omega_energy_2_visc = 1. - omega_energy_1_visc;
210 const dealii::VectorizedArray<number> vel_liquid =
211 MeltPoolDG::CompressibleFlow::calculate_velocity<dim, number>(u_liquid)[0];
212 const dealii::VectorizedArray<number> vel_gas =
213 MeltPoolDG::CompressibleFlow::calculate_velocity<dim, number>(u_gas)[0];
215 const dealii::VectorizedArray<number> jump_energy_term_1 =
216 (u_liquid[Idx::energy] * vel_liquid - u_gas[Idx::energy] * vel_gas);
218 const dealii::VectorizedArray<number> average_energy_term_1 =
220 u_liquid[Idx::energy] *
223 u_gas[Idx::energy] * vel_gas);
225 total_flux_liquid[Idx::energy] =
226 jump_energy_term_1 * omega_energy_1_conv + average_energy_term_1;
227 total_flux_gas[Idx::energy] = jump_energy_term_1 * omega_energy_2_conv - average_energy_term_1;
229 const dealii::VectorizedArray<number> jump_energy_term_2 =
230 -m_dot_evap * (u_liquid[Idx::energy] / u_liquid[Idx::density] -
231 u_gas[Idx::energy] / u_gas[Idx::density]) -
233 m_dot_evap * multiphase_scratch_data.
phase_change.liquid_gas.latent_heat_of_vaporization;
235 total_flux_liquid[Idx::energy] += jump_energy_term_2 * omega_energy_1_visc;
236 total_flux_gas[Idx::energy] += jump_energy_term_2 * omega_energy_2_visc;
238 const dealii::VectorizedArray<number> weighted_average_energy_term_liquid =
239 -stress_tensor_liquid * vel_liquid -
241 multiphase_scratch_data.
material_liquid.eos_utils->calculate_grad_T(u_liquid,
243 const dealii::VectorizedArray<number> weighted_average_energy_term_gas =
244 -stress_tensor_gas * vel_gas -
245 multiphase_scratch_data.
material_gas.data.thermal_conductivity *
246 multiphase_scratch_data.
material_gas.eos_utils->calculate_grad_T(u_gas, grad_u_gas)[0];
247 const dealii::VectorizedArray<number> weighted_average_energy_term =
250 weighted_average_energy_term_liquid,
252 weighted_average_energy_term_gas);
254 total_flux_liquid[Idx::energy] += weighted_average_energy_term;
255 total_flux_gas[Idx::energy] -= weighted_average_energy_term;
258 const dealii::VectorizedArray<number> temperature_gas =
259 multiphase_scratch_data.
material_gas.eos_utils->calculate_temperature(u_gas);
261 const dealii::VectorizedArray<number> penalty_gas_temperature =
262 multiphase_scratch_data.
phase_coupling.penalty.coefficients.temperature *
264 multiphase_scratch_data.
phase_coupling.penalty.target_values.temperature_gas_phase);
266 total_flux_gas[Idx::energy] += penalty_gas_temperature;
268 return {total_flux_liquid, total_flux_gas};
312 const ConservedVariablesType &u_liquid,
313 const ConservedVariablesType &u_gas,
314 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> &normal,
315 const ConvectiveKernel &convective_kernel_liquid,
316 const ConvectiveKernel &convective_kernel_gas,
318 const number &m_dot_evap)
324 constexpr int gas = 1;
327 using Idx = std::conditional_t<
329 CompressibleFlow::Idx1D,
330 std::conditional_t<dim == 2,
331 CompressibleFlow::Idx2D,
332 std::conditional_t<dim == 3, CompressibleFlow::Idx3D, void>>>;
336 std::array<ConservedVariablesType, 2> u = {{u_liquid, u_gas}};
337 std::array<dealii::Tensor<1, dim, dealii::VectorizedArray<number>>, 2> vel;
338 std::array<dealii::VectorizedArray<number>, 2> pressure;
339 std::array<dealii::VectorizedArray<number>, 2> rho;
340 std::array<dealii::VectorizedArray<number>, 2> rho_E;
341 std::array<dealii::VectorizedArray<number>, 2> speed_of_sound;
342 for (
unsigned int i : {0, 1})
344 vel[i] = CompressibleFlow::calculate_velocity<dim>(u[i]);
345 rho[i] = u[i][Idx::density];
346 rho_E[i] = u[i][Idx::energy];
349 multiphase_scratch_data.
material_liquid.eos_utils->calculate_thermodynamic_pressure(
352 multiphase_scratch_data.
material_gas.eos_utils->calculate_thermodynamic_pressure(u[
gas]);
355 speed_of_sound[
gas] =
356 multiphase_scratch_data.
material_gas.eos_utils->calculate_speed_of_sound(u[
gas]);
360 std::array<dealii::VectorizedArray<number>, 2> vel_n;
361 std::array<dealii::VectorizedArray<number>, 2> E_n;
362 for (
unsigned int i : {0, 1})
364 vel_n[i] = vel[i] * normal;
365 E_n[i] = rho_E[i] / rho[i] - 0.5 * (vel[i] * vel[i] - vel_n[i] * vel_n[i]);
370 std::array<dealii::VectorizedArray<number>, 2> shock_speed;
372 shock_speed[
gas] = vel_n[
gas] + speed_of_sound[
gas];
376 std::array<dealii::VectorizedArray<number>, 2> m_hat;
377 std::array<dealii::VectorizedArray<number>, 2> I_hat;
378 std::array<dealii::VectorizedArray<number>, 2> E_hat;
379 for (
unsigned int i : {0, 1})
381 m_hat[i] = rho[i] * (vel_n[i] - shock_speed[i]);
382 I_hat[i] = m_hat[i] * vel_n[i] + pressure[i];
383 E_hat[i] = m_hat[i] * E_n[i] + pressure[i] * vel_n[i];
389 const dealii::VectorizedArray<number> delta_p = 0.;
392 std::array<dealii::VectorizedArray<number>, 2> tmp_1;
393 std::array<dealii::VectorizedArray<number>, 2> tmp_2;
394 for (
unsigned int i : {0, 1})
396 tmp_1[i] = m_dot_evap / m_hat[i];
397 tmp_2[i] = m_dot_evap - m_hat[i];
400 std::array<dealii::VectorizedArray<number>, 2> numerator;
401 std::array<dealii::VectorizedArray<number>, 2> denominator;
414 std::array<dealii::VectorizedArray<number>, 2> vel_n_star;
415 for (
unsigned int i : {0, 1})
416 vel_n_star[i] = numerator[i] / denominator[i];
420 std::array<dealii::VectorizedArray<number>, 2> pressure_star;
421 for (
unsigned int i : {0, 1})
422 pressure_star[i] = I_hat[i] - m_hat[i] * vel_n_star[i];
426 std::array<dealii::Tensor<1, dim, dealii::VectorizedArray<number>>, 2> vel_star_cartesian;
428 std::vector<dealii::Tensor<1, dim, dealii::VectorizedArray<number>>> tangent;
429 tangent.resize(dim - 1);
432 if constexpr (dim == 2)
434 tangent[0][0] = normal[1];
435 tangent[0][1] = -normal[0];
437 else if constexpr (dim == 3)
439 dealii::Tensor<1, dim, dealii::VectorizedArray<number>> temp_vec;
443 dealii::VectorizedArray<number> tolerance = 1.e-10;
444 dealii::VectorizedArray<number> norm_diff = (temp_vec - normal).norm();
445 dealii::Tensor<1, dim, dealii::VectorizedArray<number>> temp_vec_y;
447 for (
int i = 0; i < 3; ++i)
449 temp_vec[i] = compare_and_apply_mask<dealii::SIMDComparison::less_than>(norm_diff,
454 tangent[0] = temp_vec - (temp_vec * normal) * normal;
455 tangent[1] = dealii::cross_product_3d(normal, tangent[0]);
458 for (
unsigned int i : {0, 1})
460 vel_star_cartesian[i] = vel_n_star[i] * normal;
461 for (
unsigned int j = 0; j < dim - 1; ++j)
462 vel_star_cartesian[i] += (vel[i] * tangent[j]) * tangent[j];
467 std::array<ConservedVariablesType, 2> u_star;
468 for (
unsigned int i : {0, 1})
470 u_star[i][Idx::density] = m_hat[i] / (vel_n_star[i] - shock_speed[i]);
471 for (
unsigned int j = 1; j < dim + 1; j++)
472 u_star[i][j] = u_star[i][Idx::density] * vel_star_cartesian[i][0][j - 1];
473 u_star[i][Idx::energy] =
474 (E_hat[i] - pressure_star[i] * vel_n_star[i]) / (vel_n_star[i] - shock_speed[i]) -
475 0.5 * u_star[i][Idx::density] * vel_n_star[i] * vel_n_star[i] +
476 0.5 * u_star[i][Idx::density] * vel_star_cartesian[i] * vel_star_cartesian[i];
481 dealii::VectorizedArray<number> numerator_normal_vel =
483 vel_n_star[
gas] * u_star[
gas][Idx::density];
484 dealii::VectorizedArray<number> denominator_normal_vel =
485 u_star[
liquid][Idx::density] - u_star[
gas][Idx::density];
487 dealii::VectorizedArray<number> normal_velocity_interface =
488 compare_and_apply_mask<dealii::SIMDComparison::greater_than>(std::abs(denominator_normal_vel),
490 numerator_normal_vel /
491 denominator_normal_vel,
496 std::array<ConservedVariablesGradType, 2> flux;
497 std::array<ConservedVariablesGradType, 2> conv_flux;
498 std::array<ConservedVariablesGradType, 2> shock_flux;
500 conv_flux[
liquid] = convective_kernel_liquid.flux(u[
liquid]);
501 conv_flux[
gas] = convective_kernel_gas.flux(u[
gas]);
503 for (
unsigned int i : {0, 1})
505 shock_flux[i] =
dyadic_product(shock_speed[i] * (u_star[i] - u[i]), normal);
506 flux[i] = conv_flux[i];
509 const auto zero_vec = dealii::make_vectorized_array(0.);
510 const auto one_vec = dealii::make_vectorized_array(1.);
513 shock_flux[
liquid] * compare_and_apply_mask<dealii::SIMDComparison::greater_than>(
514 shock_speed[
liquid], zero_vec, zero_vec, one_vec);
516 shock_flux[
gas] * compare_and_apply_mask<dealii::SIMDComparison::less_than_or_equal>(
517 shock_speed[
gas], zero_vec, zero_vec, one_vec);
519 return {flux[
liquid], flux[
gas], normal_velocity_interface};
643 const ConservedVariablesType &u_liquid,
644 const ConservedVariablesType &u_gas,
645 const ConservedVariablesGradType &grad_u_liquid,
646 const ConservedVariablesGradType &grad_u_gas,
647 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> &normal,
648 const number &visc_ave_weight_phase_liquid,
649 const number &visc_ave_weight_phase_gas,
651 const DiffusiveKernel &diffusive_kernel_liquid,
652 const DiffusiveKernel &diffusive_kernel_gas,
654 const number &cell_size,
655 const number &m_dot_evap,
656 const number &delta_T,
657 const number &laser_heat_source)
660 using Idx = std::conditional_t<
662 CompressibleFlow::Idx1D,
663 std::conditional_t<dim == 2,
664 CompressibleFlow::Idx2D,
665 std::conditional_t<dim == 3, CompressibleFlow::Idx3D, void>>>;
670 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> vel_liquid =
671 CompressibleFlow::calculate_velocity<dim>(u_liquid);
672 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> vel_gas =
673 CompressibleFlow::calculate_velocity<dim>(u_gas);
675 const dealii::VectorizedArray<number> vel_n_liquid = vel_liquid * normal;
676 const dealii::VectorizedArray<number> vel_n_gas = vel_gas * normal;
678 const auto pressure_liquid =
679 multiphase_scratch_data.
material_liquid.eos_utils->calculate_thermodynamic_pressure(u_liquid);
680 const auto pressure_gas =
681 multiphase_scratch_data.
material_gas.eos_utils->calculate_thermodynamic_pressure(u_gas);
685 ConservedVariablesType J_Rob;
689 (pressure_liquid * vel_n_liquid - pressure_gas * vel_n_gas) +
690 m_dot_evap * (u_liquid[Idx::energy] / u_liquid[Idx::density] -
691 u_gas[Idx::energy] / u_gas[Idx::density]) +
693 m_dot_evap * multiphase_scratch_data.
phase_change.liquid_gas.latent_heat_of_vaporization;
695 const ConservedVariablesGradType viscous_flux_liquid =
696 diffusive_kernel_liquid.flux(u_liquid, grad_u_liquid);
698 const ConservedVariablesGradType viscous_flux_gas =
699 diffusive_kernel_gas.flux(u_gas, grad_u_gas);
701 ConservedVariablesGradType total_flux_liquid =
dyadic_product(J_Rob, normal);
702 total_flux_liquid += viscous_flux_gas;
703 total_flux_liquid *= visc_ave_weight_phase_liquid;
704 total_flux_liquid += visc_ave_weight_phase_gas * viscous_flux_liquid;
706 ConservedVariablesGradType total_flux_gas =
708 total_flux_gas += viscous_flux_liquid;
709 total_flux_gas *= visc_ave_weight_phase_gas;
710 total_flux_gas += visc_ave_weight_phase_liquid * viscous_flux_gas;
714 const auto J_Dir_cons =
715 calculate_Dirichlet_jump_in_conservative_variables<dim, number, ConservedVariablesType>(
716 u_liquid, u_gas, multiphase_scratch_data, m_dot_evap, delta_T);
718 const number penalty_parameter =
719 std::min(multiphase_scratch_data.
material_liquid.data.dynamic_viscosity /
721 multiphase_scratch_data.
material_gas.data.dynamic_viscosity /
722 multiphase_scratch_data.
material_gas.data.reference_density) *
723 (multiphase_scratch_data.
flow_data.fe.degree + 1.) *
724 (multiphase_scratch_data.
flow_data.fe.degree + 1.) / cell_size * tau;
726 ConservedVariablesGradType penalty_flux_liquid;
727 const auto tmp_m = u_liquid - (u_gas + J_Dir_cons);
729 penalty_flux_liquid *= penalty_parameter;
731 ConservedVariablesGradType penalty_flux_gas;
732 const auto tmp_p = u_gas - (u_liquid - J_Dir_cons);
734 penalty_flux_gas *= penalty_parameter;
736 total_flux_liquid -= penalty_flux_liquid;
737 total_flux_gas -= penalty_flux_gas;
739 return {contract_tensor_with_vector<CompressibleFlow::n_conserved_variables<dim>, dim, number>(
740 total_flux_liquid, normal),
742 total_flux_gas, normal)};
783 const ConservedVariablesType &u_liquid,
784 const ConservedVariablesType &u_gas,
785 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> &normal,
786 const number &visc_ave_weight_phase_liquid,
787 const number &visc_ave_weight_phase_gas,
788 const DiffusiveKernel &diffusive_kernel_liquid,
789 const DiffusiveKernel &diffusive_kernel_gas,
791 const number &m_dot_evap,
792 const number &delta_T)
794 const auto J_Dir_cons =
795 calculate_Dirichlet_jump_in_conservative_variables<dim, number, ConservedVariablesType>(
796 u_liquid, u_gas, multiphase_scratch_data, m_dot_evap, delta_T);
799 visc_ave_weight_phase_gas, u_liquid, visc_ave_weight_phase_liquid, u_gas + J_Dir_cons);
801 visc_ave_weight_phase_liquid, u_gas, visc_ave_weight_phase_gas, u_liquid - J_Dir_cons);
803 auto tmp_liquid = u_liquid_star - u_liquid;
804 auto tmp_gas = u_gas_star - u_gas;
806 ConservedVariablesGradType arg_liquid =
dyadic_product(tmp_liquid, normal);
807 ConservedVariablesGradType arg_gas =
dyadic_product(tmp_gas, -normal);
809 const ConservedVariablesGradType flux_grad_liquid =
810 diffusive_kernel_liquid.flux(u_liquid, arg_liquid);
811 const ConservedVariablesGradType flux_grad_gas = diffusive_kernel_gas.flux(u_gas, arg_gas);
813 return {flux_grad_liquid, flux_grad_gas};
862 const ConservedVariablesType &u_liquid,
863 const ConservedVariablesType &u_gas,
864 const ConservedVariablesGradType &grad_u_liquid,
865 const ConservedVariablesGradType &grad_u_gas,
866 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> &normal,
867 const number &visc_ave_weight_phase_liquid,
868 const number &visc_ave_weight_phase_gas,
869 const DiffusiveKernel &diffusive_kernel_liquid,
870 const DiffusiveKernel &diffusive_kernel_gas,
872 const number &cell_size,
873 const number &m_dot_evap,
874 const number &delta_T,
875 const number &laser_heat_source)
878 using Idx = std::conditional_t<
880 CompressibleFlow::Idx1D,
881 std::conditional_t<dim == 2,
882 CompressibleFlow::Idx2D,
883 std::conditional_t<dim == 3, CompressibleFlow::Idx3D, void>>>;
885 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> vel_liquid =
886 CompressibleFlow::calculate_velocity<dim>(u_liquid);
887 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> vel_gas =
888 CompressibleFlow::calculate_velocity<dim>(u_gas);
890 const dealii::VectorizedArray<number> vel_n_liquid = vel_liquid * normal;
891 const dealii::VectorizedArray<number> vel_n_gas = vel_gas * normal;
893 const dealii::VectorizedArray<number> pressure_liquid =
894 multiphase_scratch_data.
material_liquid.eos_utils->calculate_thermodynamic_pressure(u_liquid);
895 const dealii::VectorizedArray<number> pressure_gas =
896 multiphase_scratch_data.
material_gas.eos_utils->calculate_thermodynamic_pressure(u_gas);
901 ConservedVariablesType J_Rob;
904 m_dot_evap * (u_liquid[Idx::energy] / u_liquid[Idx::density] -
905 u_gas[Idx::energy] / u_gas[Idx::density]) +
906 (pressure_liquid * vel_n_liquid - pressure_gas * vel_n_gas) + laser_heat_source -
907 m_dot_evap * multiphase_scratch_data.
phase_change.liquid_gas.latent_heat_of_vaporization;
909 const ConservedVariablesGradType viscous_flux_liquid =
910 diffusive_kernel_liquid.flux(u_liquid, grad_u_liquid);
912 const ConservedVariablesGradType viscous_flux_gas =
913 diffusive_kernel_gas.flux(u_gas, grad_u_gas);
915 ConservedVariablesType penalty_term_dT;
916 penalty_term_dT[Idx::energy] =
917 multiphase_scratch_data.
phase_coupling.hllp0_and_penalty.penalty_parameter_temperature_jump *
919 multiphase_scratch_data.
material_gas.data.thermal_conductivity) /
921 ((multiphase_scratch_data.
material_liquid.eos_utils->calculate_temperature(u_liquid) -
922 multiphase_scratch_data.
material_gas.eos_utils->calculate_temperature(u_gas)) -
925 const ConservedVariablesType weighted_viscous_flux =
927 visc_ave_weight_phase_gas,
929 viscous_flux_liquid, normal),
930 visc_ave_weight_phase_liquid,
932 viscous_flux_gas, normal));
934 const ConservedVariablesType total_viscous_flux_liquid =
935 -J_Rob * visc_ave_weight_phase_liquid - weighted_viscous_flux + penalty_term_dT;
937 const ConservedVariablesType total_viscous_flux_gas =
938 -J_Rob * visc_ave_weight_phase_gas + weighted_viscous_flux - penalty_term_dT;
940 return {total_viscous_flux_liquid, total_viscous_flux_gas};
990 const ConservedVariablesType &u_liquid,
991 const ConservedVariablesType &u_gas,
992 const dealii::Tensor<1, dim, dealii::VectorizedArray<number>> &normal,
996 number m_dot_evap = 0.;
999 if (evaporation_model_knight)
1001 const dealii::VectorizedArray<number> T_liquid =
1002 multiphase_scratch_data.
material_liquid.eos_utils->calculate_temperature(u_liquid);
1004 const dealii::VectorizedArray<number> vel_n_gas =
1005 CompressibleFlow::calculate_velocity<dim>(u_gas) * normal;
1007 const dealii::VectorizedArray<number> speed_of_sound_g =
1008 multiphase_scratch_data.
material_gas.eos_utils->calculate_speed_of_sound(u_gas);
1010 const dealii::VectorizedArray<number> Ma_g = vel_n_gas / speed_of_sound_g;
1013 evaporation_model_knight->reinit(T_liquid[0], Ma_g[0]);
1014 m_dot_evap = evaporation_model_knight->get_evaporative_mass_flux();
1015 delta_T = evaporation_model_knight->get_temperature_jump();
1017 else if (multiphase_scratch_data.
phase_coupling.evaporation_model ==
1018 EvaporationModelType::constant)
1024 case InterfaceNumericalMethod::HLLP0_and_SIPG:
1025 delta_T = multiphase_scratch_data.
phase_coupling.hllp0_and_sipg.delta_T;
1028 case InterfaceNumericalMethod::HLLP0_and_penalty:
1029 delta_T = multiphase_scratch_data.
phase_coupling.hllp0_and_penalty.delta_T;
1039 dealii::ExcNotImplemented(
"The given evaporation model is not implemented."));
1042 return {m_dot_evap, delta_T};