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 std::cerr <<
"[BCSinusoidalTemperature]: Couldn't find amplitude and/or period value in "
75 << this->m_face_indicator_prefix <<
"temperature_amplitude / "
76 << this->m_face_indicator_prefix <<
"period.";
77 throw BadInput(
static_cast<std::string
>(
"[BCSinusoidalTemperature]: Couldn't find "
78 "amplitude and/or period value in simulation "
80 + this->m_face_indicator_prefix
81 +
static_cast<std::string
>(
"temperature_amplitude / ")
82 + this->m_face_indicator_prefix +
static_cast<std::string
>(
"period."));
86 m_dt = this->m_sim->m_simulation_config.getDoubleParameters(
"time_delta");
90 std::cerr <<
"[BCSinusoidalTemperature]: " <<
e.what() <<
'\n';
91 throw BadInput(
static_cast<std::string
>(
"[BCSinusoidalTemperature]: ")
92 +
static_cast<std::string
>(
e.what()));
107 for (
int i{0};
i < this->m_boundary_points.
size();
i++)
111 for (
int j{0};
j < this->m_connected_points[
i].
size();
j++)
118 this->m_capacitance_matrix_elements.emplace_back(
temp_cap_mat);
121 this->m_forcing_vector_elements.emplace_back(
forcing_vector[this->m_boundary_points[
i]]);
122 m_capacitance_extra_val.emplace_back(
124 m_stiffness_extra_val.emplace_back(
126 m_forcing_extra_val.emplace_back(
forcing_vector[this->m_boundary_points[
i] + 1]);
136 for (
int i{0};
i < this->m_boundary_points.
size();
i++)
138 for (
auto&
val : this->m_capacitance_matrix_elements[
i])
142 for (
auto&
val : this->m_stiffness_matrix_elements[
i])
148 this->m_stiffness_matrix_elements[
i][0] += 1.0;
149 this->m_forcing_vector_elements[
i] *= 0.0;
152 m_stiffness_extra_val[
i] *= 0.0;
153 m_capacitance_extra_val[
i] *= 0.0;
158 - m_temperature_amplitude
159 * std::sin(2 * std::numbers::pi * (this->m_sim->time_step - 1) * m_dt
163 - m_temperature_amplitude
164 * 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:134
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:103
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:37
CsrSparseMatrix()
Constructor for an empty CsrSparseMatrix object. Leaves all storage arrays empty but sets the flag to...
Definition CsrMatrix.h:94
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:120