1#ifndef BOUNDARY_CONDITION_SINUSOIDAL_TEMPERATURE_H
2#define BOUNDARY_CONDITION_SINUSOIDAL_TEMPERATURE_H
21 T m_temperature_amplitude{};
22 T m_base_temperature{};
25 int m_numerical_layer{};
26 std::vector<std::reference_wrapper<T>> m_capacitance_extra_val{};
27 std::vector<std::reference_wrapper<T>> m_stiffness_extra_val{};
28 std::vector<std::reference_wrapper<T>> m_forcing_extra_val{};
34 std::valarray<T>& forcing_vector)
override;
37 std::vector<std::vector<int>> connected_points,
int facet_nr,
38 T area, std::string face_prefix);
55 std::vector<int> boundary_points,
56 std::vector<std::vector<int>> connected_points,
57 int facet_nr, T area, std::string face_prefix)
60 this->m_sim->m_simulation_config.getDoubleParameters(
"initial_temperature")),
61 m_numerical_layer(this->m_sim->m_simulation_config.getIntParameters(
"numerical_layers"))
66 this->m_face_indicator_prefix +
"temperature_amplitude");
67 m_period = this->m_sim->m_simulation_config.getDoubleParameters(
68 this->m_face_indicator_prefix +
"period");
72 throw std::runtime_error(
73 "[BCSinusoidalTemperature] Couldn't find amplitude and/or period value in simulation "
75 + this->m_face_indicator_prefix +
"temperature_amplitude / "
76 + this->m_face_indicator_prefix +
"period.");
78 m_dt = this->m_sim->m_simulation_config.getDoubleParameters(
"time_delta");
90 std::valarray<T>& forcing_vector)
92 for (
int i{0}; i < this->m_boundary_points.size(); i++)
94 std::vector<std::reference_wrapper<T>> temp_cap_mat{};
95 std::vector<std::reference_wrapper<T>> temp_stiff_mat{};
96 for (
int j{0}; j < this->m_connected_points[i].size(); j++)
98 temp_cap_mat.emplace_back(
99 capacitance_matrix(this->m_boundary_points[i], this->m_connected_points[i][j]));
100 temp_stiff_mat.emplace_back(
101 stiffness_matrix(this->m_boundary_points[i], this->m_connected_points[i][j]));
103 this->m_capacitance_matrix_elements.emplace_back(temp_cap_mat);
104 this->m_stiffness_matrix_elements.emplace_back(temp_stiff_mat);
106 this->m_forcing_vector_elements.emplace_back(forcing_vector[this->m_boundary_points[i]]);
107 m_capacitance_extra_val.emplace_back(
108 capacitance_matrix(this->m_boundary_points[i] + 1, this->m_boundary_points[i]));
109 m_stiffness_extra_val.emplace_back(
110 stiffness_matrix(this->m_boundary_points[i] + 1, this->m_boundary_points[i]));
111 m_forcing_extra_val.emplace_back(forcing_vector[this->m_boundary_points[i] + 1]);
121 for (
int i{0}; i < this->m_boundary_points.size(); i++)
123 for (
auto& val : this->m_capacitance_matrix_elements[i])
127 for (
auto& val : this->m_stiffness_matrix_elements[i])
133 this->m_stiffness_matrix_elements[i][0] += 1.0;
134 this->m_forcing_vector_elements[i] *= 0.0;
135 T st_mat_val{m_stiffness_extra_val[i]};
136 T ca_mat_val{m_capacitance_extra_val[i]};
137 m_stiffness_extra_val[i] *= 0.0;
138 m_capacitance_extra_val[i] *= 0.0;
141 T temperature_previous_ts{
143 - m_temperature_amplitude
144 * std::sin(2 * std::numbers::pi * (this->m_sim->time_step - 1) * m_dt
148 - m_temperature_amplitude
149 * std::sin(2 * std::numbers::pi * (this->m_sim->time_step * m_dt) / m_period)};
150 this->m_forcing_vector_elements[i] += temperature;
151 m_forcing_extra_val[i] -= (st_mat_val * temperature + ca_mat_val * temperature / m_dt
152 - ca_mat_val * temperature_previous_ts / m_dt);
Concrete implementation of a sinusoidally varying temperature boundary condition in 1D.
Definition BCSinusoidalTemperature.h:19
void writeBoundaryCondition() override
Actual implementation of the boundary condition.
Definition BCSinusoidalTemperature.h:119
void getReferenceToElements(GenericMatrix< T > &capacitance_matrix, GenericMatrix< T > &stiffness_matrix, std::valarray< T > &forcing_vector) override
Sets up a referrence_wrapper vector to the elements within the matrix object. This adds a bit of pre-...
Definition BCSinusoidalTemperature.h:88
BCSinusoidalTemperature(SimulationClassBase< T > *sim, std::vector< int > boundary_points, std::vector< std::vector< int > > connected_points, int facet_nr, T area, std::string face_prefix)
Constructor for a BCSinusoidalTemperature object.
Definition BCSinusoidalTemperature.h:54
~BCSinusoidalTemperature() override=default
Boundary condition abstract base class for the finite element method. All boundary condition implemen...
Definition GenericBoundaryCondition.h:18
Template generalized Matrix object that should be the base for all further implementations of a matri...
Definition GenericMatrix.h:19
Definition SimulationClassBase.h:15
InputManager m_simulation_config
Definition SimulationClassBase.h:24