include/meltpooldg/phase_change/recoil_pressure_operation.templates.hpp Source File

Developer Documentation: include/meltpooldg/phase_change/recoil_pressure_operation.templates.hpp Source File
Developer Documentation
recoil_pressure_operation.templates.hpp
Go to the documentation of this file.
1#pragma once
2
4//
5#include <deal.II/base/utilities.h>
6
8
9#include <cmath>
10
11
13{
14
15 template <typename number>
16 inline number
18 const number T,
19 const number m_dot,
20 const number delta_coefficient) const
21 {
22 return recoil_phenomenological.compute_recoil_pressure_coefficient(T) -
23 dealii::Utilities::fixed_power<2>(m_dot) * density_coeff * delta_coefficient;
24 }
25
26 template <typename number>
27 inline dealii::VectorizedArray<number>
29 const dealii::VectorizedArray<number> &T,
30 const dealii::VectorizedArray<number> &m_dot,
31 const dealii::VectorizedArray<number> &delta_coefficient) const
32 {
33 return recoil_phenomenological.compute_recoil_pressure_coefficient(T) -
34 dealii::Utilities::fixed_power<2>(m_dot) * density_coeff * delta_coefficient;
35 }
36
37 template <typename number>
38 inline dealii::VectorizedArray<number>
40 const dealii::VectorizedArray<number> &T) const
41 {
42 const number T_ac = recoil_data.activation_temperature;
43 const number T_v = boiling_temperature;
44
45 dealii::VectorizedArray<number> full_recoil_pressure =
46 recoil_data.pressure_coefficient *
48 T_v,
49 recoil_data.ambient_gas_pressure,
50 recoil_data.temperature_constant);
51
52 if (recoil_data.subtract_ambient_pressure)
53 full_recoil_pressure -= recoil_data.ambient_gas_pressure;
54
55 dealii::VectorizedArray<number> ramped_recoil_pressure =
56 activation_ramp_derivative * (T - T_ac);
57
58 dealii::VectorizedArray<number> recoil_pressure =
59 compare_and_apply_mask<dealii::SIMDComparison::greater_than_or_equal>(
60 T,
61 recoil_data.enable_linear_activation_ramp ? T_v : T_ac,
62 full_recoil_pressure,
63 recoil_data.enable_linear_activation_ramp ? ramped_recoil_pressure : 0.0);
64
65 // Recoil pressure is constrained to remain non-negative.
66 return compare_and_apply_mask<dealii::SIMDComparison::greater_than_or_equal>(recoil_pressure,
67 0.0,
68 recoil_pressure,
69 0.0);
70 }
71
72 template <typename number>
73 inline number
75 const number T) const
76 {
77 const number T_ac = recoil_data.activation_temperature;
78 const number T_v = boiling_temperature;
79
80 // Recoil pressure is inactive below the activation temperature.
81 if (T < T_ac)
82 return 0.0;
83
84 number recoil_pressure = 0;
85
86 if (T >= T_v or not recoil_data.enable_linear_activation_ramp)
87 {
88 // Above the boiling temperature, or when the activation ramp is disabled,
89 // compute the recoil pressure directly from the saturated gas pressure.
90 recoil_pressure = recoil_data.pressure_coefficient *
92 T_v,
93 recoil_data.ambient_gas_pressure,
94 recoil_data.temperature_constant);
95
96 // Optionally use the pressure relative to the ambient gas pressure.
97 if (recoil_data.subtract_ambient_pressure)
98 recoil_pressure -= recoil_data.ambient_gas_pressure;
99 }
100 else
101 {
102 // Between the activation and boiling temperatures, linearly ramp the
103 // recoil pressure from zero to its value at the boiling temperature.
104 recoil_pressure = activation_ramp_derivative * (T - T_ac);
105 }
106
107 return std::max(recoil_pressure, 0.0);
108 }
109
110
111
112 template <typename number>
113 inline number
115 const number T) const
116 {
117 if (T < boiling_temperature)
118 return 0.0;
119
120 else
121 {
122 number recoil_pressure = ambient_gas_pressure;
123 const number T_diff = T - boiling_temperature;
124
125 for (size_t i = 0; i < Kp.size(); ++i)
126 {
127 recoil_pressure += Kp[i] * std::pow(T_diff, i + 2);
128 }
129 return recoil_pressure;
130 }
131 }
132
133 template <typename number>
134 inline dealii::VectorizedArray<number>
136 const dealii::VectorizedArray<number> &T) const
137 {
138 const dealii::VectorizedArray<number> T_diff =
139 T - dealii::make_vectorized_array<number>(boiling_temperature);
140 dealii::VectorizedArray<number> recoil_pressure =
141 dealii::make_vectorized_array<number>(ambient_gas_pressure);
142
143 for (number i = 0; i < Kp.size(); ++i)
144 {
145 recoil_pressure += dealii::make_vectorized_array<number>(Kp[i]) * std::pow(T_diff, i + 2);
146 }
147 return dealii::compare_and_apply_mask<dealii::SIMDComparison::less_than>(T,
148 boiling_temperature,
149 0.0,
150 recoil_pressure);
151 }
152
153} // namespace MeltPoolDG::Evaporation
number compute_recoil_pressure_coefficient(const number T, const number m_dot, const number delta_coefficient) const final
Definition recoil_pressure_operation.templates.hpp:17
number compute_recoil_pressure_coefficient(const number T) const final
Compute recoil pressure coefficient as.
Definition recoil_pressure_operation.templates.hpp:114
number compute_recoil_pressure_coefficient(const number T) const final
Definition recoil_pressure_operation.templates.hpp:74
Definition evaporation_data.hpp:15
number_2 compute_saturated_gas_pressure(const number_2 &T_sat, const number boiling_temperature, const number ambient_gas_pressure, const number temperature_constant)
Calculate the saturated vapor pressure at a certain vapor temperature according to the Clausius-Clape...
Definition evaporation_tools.hpp:25