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{};
60 this->m_sim->m_simulation_config.getDoubleParameters(
"initial_temperature")),
61 m_numerical_layer(this->m_sim->m_simulation_config.getIntParameters(
"numerical_layers"))
65 m_temperature_amplitude = this->m_sim->m_simulation_config.getDoubleParameters(
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");
92 for (
int i{0};
i < this->m_boundary_points.
size();
i++)
96 for (
int j{0};
j < this->m_connected_points[
i].
size();
j++)
103 this->m_capacitance_matrix_elements.emplace_back(
temp_cap_mat);
106 this->m_forcing_vector_elements.emplace_back(
forcing_vector[this->m_boundary_points[
i]]);
107 m_capacitance_extra_val.emplace_back(
109 m_stiffness_extra_val.emplace_back(
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;
137 m_stiffness_extra_val[
i] *= 0.0;
138 m_capacitance_extra_val[
i] *= 0.0;
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)};
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
Concrete implementation of a matrix class representing a Compressed Sparse Rows (CSR) matrix....
Definition CsrMatrix.h:35
CsrSparseMatrix()
Constructor for an empty CsrSparseMatrix object. Leaves all storage arrays empty but sets the flag to...
Definition CsrMatrix.h:92
Boundary condition abstract base class for the finite element method. All boundary condition implemen...
Definition GenericBoundaryCondition.h:18
std::pair< int, int > size() const
Function that returns the size of the matrix as a pair in (rows, columns) format.
Definition GenericMatrix.h:118