refactor: rename BoundaryCondition class
This commit is contained in:
parent
bdd56bec82
commit
1822bcd98d
@ -100,7 +100,7 @@ public:
|
|||||||
* \return Time in seconds [s] used to simulate one iteration.
|
* \return Time in seconds [s] used to simulate one iteration.
|
||||||
*/
|
*/
|
||||||
auto simulate(double *c, double *alpha,
|
auto simulate(double *c, double *alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc)
|
const tug::boundary_condition::BoundaryCondition &bc)
|
||||||
-> double;
|
-> double;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -125,15 +125,15 @@ private:
|
|||||||
|
|
||||||
void simulate1D(Eigen::Map<DVectorRowMajor> &c,
|
void simulate1D(Eigen::Map<DVectorRowMajor> &c,
|
||||||
Eigen::Map<const DVectorRowMajor> &alpha,
|
Eigen::Map<const DVectorRowMajor> &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc);
|
const tug::boundary_condition::BoundaryCondition &bc);
|
||||||
|
|
||||||
void simulate2D(Eigen::Map<DMatrixRowMajor> &c,
|
void simulate2D(Eigen::Map<DMatrixRowMajor> &c,
|
||||||
Eigen::Map<const DMatrixRowMajor> &alpha,
|
Eigen::Map<const DMatrixRowMajor> &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc);
|
const tug::boundary_condition::BoundaryCondition &bc);
|
||||||
|
|
||||||
static auto
|
static auto
|
||||||
calc_d_ortho(const DMatrixRowMajor &c, const DMatrixRowMajor &alpha,
|
calc_d_ortho(const DMatrixRowMajor &c, const DMatrixRowMajor &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc,
|
const tug::boundary_condition::BoundaryCondition &bc,
|
||||||
bool transposed, double time_step, double dx) -> DMatrixRowMajor;
|
bool transposed, double time_step, double dx) -> DMatrixRowMajor;
|
||||||
|
|
||||||
static void fillMatrixFromRow(Eigen::SparseMatrix<double> &A_matrix,
|
static void fillMatrixFromRow(Eigen::SparseMatrix<double> &A_matrix,
|
||||||
|
|||||||
@ -49,7 +49,7 @@ typedef std::vector<boundary_condition> bc_vec;
|
|||||||
/**
|
/**
|
||||||
* Class to define the boundary condition of a grid.
|
* Class to define the boundary condition of a grid.
|
||||||
*/
|
*/
|
||||||
class BTCSBoundaryCondition {
|
class BoundaryCondition {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a new instance with two elements. Used when defining boundary
|
* Creates a new instance with two elements. Used when defining boundary
|
||||||
@ -57,7 +57,7 @@ public:
|
|||||||
*
|
*
|
||||||
* \param x Number of grid cells in x-direction
|
* \param x Number of grid cells in x-direction
|
||||||
*/
|
*/
|
||||||
BTCSBoundaryCondition(int x);
|
BoundaryCondition(int x);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance with 4 * max(x,y) elements. Used to describe the
|
* Creates a new instance with 4 * max(x,y) elements. Used to describe the
|
||||||
@ -69,7 +69,7 @@ public:
|
|||||||
* \param y Number of grid cells in y-direction
|
* \param y Number of grid cells in y-direction
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BTCSBoundaryCondition(int x, int y);
|
BoundaryCondition(int x, int y);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the boundary condition for a specific side of the grid.
|
* Sets the boundary condition for a specific side of the grid.
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
constexpr uint8_t DIM_1D = 2;
|
constexpr uint8_t DIM_1D = 2;
|
||||||
constexpr uint8_t DIM_2D = 4;
|
constexpr uint8_t DIM_2D = 4;
|
||||||
|
|
||||||
tug::boundary_condition::BTCSBoundaryCondition::BTCSBoundaryCondition(int x) {
|
tug::boundary_condition::BoundaryCondition::BoundaryCondition(int x) {
|
||||||
this->bc_internal.resize(DIM_1D, {0, 0});
|
this->bc_internal.resize(DIM_1D, {0, 0});
|
||||||
this->special_cells.resize(x, {BC_UNSET, 0});
|
this->special_cells.resize(x, {BC_UNSET, 0});
|
||||||
this->dim = 1;
|
this->dim = 1;
|
||||||
@ -21,7 +21,7 @@ tug::boundary_condition::BTCSBoundaryCondition::BTCSBoundaryCondition(int x) {
|
|||||||
this->maxindex = x - 1;
|
this->maxindex = x - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tug::boundary_condition::BTCSBoundaryCondition::BTCSBoundaryCondition(int x,
|
tug::boundary_condition::BoundaryCondition::BoundaryCondition(int x,
|
||||||
int y) {
|
int y) {
|
||||||
this->maxsize = (x >= y ? x : y);
|
this->maxsize = (x >= y ? x : y);
|
||||||
this->bc_internal.resize(DIM_2D * maxsize, {0, 0});
|
this->bc_internal.resize(DIM_2D * maxsize, {0, 0});
|
||||||
@ -34,7 +34,7 @@ tug::boundary_condition::BTCSBoundaryCondition::BTCSBoundaryCondition(int x,
|
|||||||
this->maxindex = (x * y) - 1;
|
this->maxindex = (x * y) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tug::boundary_condition::BTCSBoundaryCondition::setSide(
|
void tug::boundary_condition::BoundaryCondition::setSide(
|
||||||
uint8_t side, tug::boundary_condition::boundary_condition &input_bc) {
|
uint8_t side, tug::boundary_condition::boundary_condition &input_bc) {
|
||||||
if (this->dim == 1) {
|
if (this->dim == 1) {
|
||||||
throw_invalid_argument("setSide requires at least a 2D grid");
|
throw_invalid_argument("setSide requires at least a 2D grid");
|
||||||
@ -53,7 +53,7 @@ void tug::boundary_condition::BTCSBoundaryCondition::setSide(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tug::boundary_condition::BTCSBoundaryCondition::setSide(
|
void tug::boundary_condition::BoundaryCondition::setSide(
|
||||||
uint8_t side,
|
uint8_t side,
|
||||||
std::vector<tug::boundary_condition::boundary_condition> &input_bc) {
|
std::vector<tug::boundary_condition::boundary_condition> &input_bc) {
|
||||||
if (this->dim == 1) {
|
if (this->dim == 1) {
|
||||||
@ -77,7 +77,7 @@ void tug::boundary_condition::BTCSBoundaryCondition::setSide(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tug::boundary_condition::BTCSBoundaryCondition::getSide(uint8_t side)
|
auto tug::boundary_condition::BoundaryCondition::getSide(uint8_t side)
|
||||||
-> std::vector<tug::boundary_condition::boundary_condition> {
|
-> std::vector<tug::boundary_condition::boundary_condition> {
|
||||||
if (this->dim == 1) {
|
if (this->dim == 1) {
|
||||||
throw_invalid_argument("getSide requires at least a 2D grid");
|
throw_invalid_argument("getSide requires at least a 2D grid");
|
||||||
@ -100,7 +100,7 @@ auto tug::boundary_condition::BTCSBoundaryCondition::getSide(uint8_t side)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tug::boundary_condition::BTCSBoundaryCondition::col_boundary(
|
auto tug::boundary_condition::BoundaryCondition::col_boundary(
|
||||||
uint32_t i) const -> tug::boundary_condition::bc_tuple {
|
uint32_t i) const -> tug::boundary_condition::bc_tuple {
|
||||||
if (this->dim == 1) {
|
if (this->dim == 1) {
|
||||||
throw_invalid_argument("Access of column requires at least 2D grid");
|
throw_invalid_argument("Access of column requires at least 2D grid");
|
||||||
@ -113,7 +113,7 @@ auto tug::boundary_condition::BTCSBoundaryCondition::col_boundary(
|
|||||||
this->bc_internal[BC_SIDE_BOTTOM * this->maxsize + i]};
|
this->bc_internal[BC_SIDE_BOTTOM * this->maxsize + i]};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tug::boundary_condition::BTCSBoundaryCondition::row_boundary(
|
auto tug::boundary_condition::BoundaryCondition::row_boundary(
|
||||||
uint32_t i) const -> tug::boundary_condition::bc_tuple {
|
uint32_t i) const -> tug::boundary_condition::bc_tuple {
|
||||||
if (i >= this->sizes[X_DIM]) {
|
if (i >= this->sizes[X_DIM]) {
|
||||||
throw_out_of_range("Index out of range");
|
throw_out_of_range("Index out of range");
|
||||||
@ -123,7 +123,7 @@ auto tug::boundary_condition::BTCSBoundaryCondition::row_boundary(
|
|||||||
this->bc_internal[BC_SIDE_RIGHT * this->maxsize + i]};
|
this->bc_internal[BC_SIDE_RIGHT * this->maxsize + i]};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tug::boundary_condition::BTCSBoundaryCondition::getInnerRow(
|
auto tug::boundary_condition::BoundaryCondition::getInnerRow(
|
||||||
uint32_t i) const -> bc_vec {
|
uint32_t i) const -> bc_vec {
|
||||||
if (i >= this->sizes[X_DIM]) {
|
if (i >= this->sizes[X_DIM]) {
|
||||||
throw_out_of_range("Index is out of range");
|
throw_out_of_range("Index is out of range");
|
||||||
@ -137,7 +137,7 @@ auto tug::boundary_condition::BTCSBoundaryCondition::getInnerRow(
|
|||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tug::boundary_condition::BTCSBoundaryCondition::getInnerCol(
|
auto tug::boundary_condition::BoundaryCondition::getInnerCol(
|
||||||
uint32_t i) const -> bc_vec {
|
uint32_t i) const -> bc_vec {
|
||||||
if (this->dim != 2) {
|
if (this->dim != 2) {
|
||||||
throw_invalid_argument("getInnerCol is only applicable for 2D grids");
|
throw_invalid_argument("getInnerCol is only applicable for 2D grids");
|
||||||
|
|||||||
@ -122,7 +122,7 @@ void tug::diffusion::BTCSDiffusion::simulate_base(
|
|||||||
|
|
||||||
void tug::diffusion::BTCSDiffusion::simulate1D(
|
void tug::diffusion::BTCSDiffusion::simulate1D(
|
||||||
Eigen::Map<DVectorRowMajor> &c, Eigen::Map<const DVectorRowMajor> &alpha,
|
Eigen::Map<DVectorRowMajor> &c, Eigen::Map<const DVectorRowMajor> &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc) {
|
const tug::boundary_condition::BoundaryCondition &bc) {
|
||||||
|
|
||||||
int size = this->grid_cells[0];
|
int size = this->grid_cells[0];
|
||||||
double dx = this->deltas[0];
|
double dx = this->deltas[0];
|
||||||
@ -138,7 +138,7 @@ void tug::diffusion::BTCSDiffusion::simulate1D(
|
|||||||
|
|
||||||
void tug::diffusion::BTCSDiffusion::simulate2D(
|
void tug::diffusion::BTCSDiffusion::simulate2D(
|
||||||
Eigen::Map<DMatrixRowMajor> &c, Eigen::Map<const DMatrixRowMajor> &alpha,
|
Eigen::Map<DMatrixRowMajor> &c, Eigen::Map<const DMatrixRowMajor> &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc) {
|
const tug::boundary_condition::BoundaryCondition &bc) {
|
||||||
|
|
||||||
int n_rows = this->grid_cells[1];
|
int n_rows = this->grid_cells[1];
|
||||||
int n_cols = this->grid_cells[0];
|
int n_cols = this->grid_cells[0];
|
||||||
@ -172,7 +172,7 @@ void tug::diffusion::BTCSDiffusion::simulate2D(
|
|||||||
|
|
||||||
auto tug::diffusion::BTCSDiffusion::calc_d_ortho(
|
auto tug::diffusion::BTCSDiffusion::calc_d_ortho(
|
||||||
const DMatrixRowMajor &c, const DMatrixRowMajor &alpha,
|
const DMatrixRowMajor &c, const DMatrixRowMajor &alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc, bool transposed,
|
const tug::boundary_condition::BoundaryCondition &bc, bool transposed,
|
||||||
double time_step, double dx) -> DMatrixRowMajor {
|
double time_step, double dx) -> DMatrixRowMajor {
|
||||||
|
|
||||||
uint8_t upper = (transposed ? tug::boundary_condition::BC_SIDE_LEFT
|
uint8_t upper = (transposed ? tug::boundary_condition::BC_SIDE_LEFT
|
||||||
@ -332,7 +332,7 @@ void tug::diffusion::BTCSDiffusion::setTimestep(double time_step) {
|
|||||||
|
|
||||||
auto tug::diffusion::BTCSDiffusion::simulate(
|
auto tug::diffusion::BTCSDiffusion::simulate(
|
||||||
double *c, double *alpha,
|
double *c, double *alpha,
|
||||||
const tug::boundary_condition::BTCSBoundaryCondition &bc) -> double {
|
const tug::boundary_condition::BoundaryCondition &bc) -> double {
|
||||||
|
|
||||||
std::chrono::high_resolution_clock::time_point start =
|
std::chrono::high_resolution_clock::time_point start =
|
||||||
std::chrono::high_resolution_clock::now();
|
std::chrono::high_resolution_clock::now();
|
||||||
|
|||||||
@ -7,7 +7,7 @@ using namespace tug::boundary_condition;
|
|||||||
|
|
||||||
TEST_CASE("1D Boundary Condition") {
|
TEST_CASE("1D Boundary Condition") {
|
||||||
|
|
||||||
BTCSBoundaryCondition bc(5);
|
BoundaryCondition bc(5);
|
||||||
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
||||||
|
|
||||||
SUBCASE("valid get") { CHECK_EQ(bc(BC_SIDE_LEFT).value, 0); }
|
SUBCASE("valid get") { CHECK_EQ(bc(BC_SIDE_LEFT).value, 0); }
|
||||||
@ -44,7 +44,7 @@ TEST_CASE("1D Boundary Condition") {
|
|||||||
|
|
||||||
TEST_CASE("2D Boundary Condition") {
|
TEST_CASE("2D Boundary Condition") {
|
||||||
|
|
||||||
BTCSBoundaryCondition bc(5, 5);
|
BoundaryCondition bc(5, 5);
|
||||||
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
||||||
|
|
||||||
SUBCASE("valid get") { CHECK_EQ(bc(BC_SIDE_LEFT, 0).value, 0); }
|
SUBCASE("valid get") { CHECK_EQ(bc(BC_SIDE_LEFT, 0).value, 0); }
|
||||||
@ -87,7 +87,7 @@ TEST_CASE("Boundary Condition helpers") {
|
|||||||
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
||||||
|
|
||||||
SUBCASE("return boundary condition skeleton") {
|
SUBCASE("return boundary condition skeleton") {
|
||||||
boundary_condition bc_test = BTCSBoundaryCondition::returnBoundaryCondition(
|
boundary_condition bc_test = BoundaryCondition::returnBoundaryCondition(
|
||||||
bc_set.type, bc_set.value);
|
bc_set.type, bc_set.value);
|
||||||
CHECK_EQ(bc_test.value, bc_set.value);
|
CHECK_EQ(bc_test.value, bc_set.value);
|
||||||
CHECK_EQ(bc_test.type, bc_set.type);
|
CHECK_EQ(bc_test.type, bc_set.type);
|
||||||
@ -95,7 +95,7 @@ TEST_CASE("Boundary Condition helpers") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("1D special inner grid cells") {
|
TEST_CASE("1D special inner grid cells") {
|
||||||
BTCSBoundaryCondition bc(5);
|
BoundaryCondition bc(5);
|
||||||
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
||||||
|
|
||||||
SUBCASE("valid set") {
|
SUBCASE("valid set") {
|
||||||
@ -136,7 +136,7 @@ TEST_CASE("1D special inner grid cells") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("2D special inner grid cells") {
|
TEST_CASE("2D special inner grid cells") {
|
||||||
BTCSBoundaryCondition bc(5,5);
|
BoundaryCondition bc(5,5);
|
||||||
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
boundary_condition bc_set = {BC_TYPE_CONSTANT, BC_CONST_VALUE};
|
||||||
|
|
||||||
SUBCASE("valid set") {
|
SUBCASE("valid set") {
|
||||||
|
|||||||
@ -31,7 +31,7 @@ TEST_CASE("closed boundaries - 1 concentration to 1 - rest 0") {
|
|||||||
field[MID] = 1;
|
field[MID] = 1;
|
||||||
|
|
||||||
BTCSDiffusion diffu = setupDiffu(N, M);
|
BTCSDiffusion diffu = setupDiffu(N, M);
|
||||||
BTCSBoundaryCondition bc(N, M);
|
BoundaryCondition bc(N, M);
|
||||||
|
|
||||||
uint32_t iterations = 1000;
|
uint32_t iterations = 1000;
|
||||||
double sum = 0;
|
double sum = 0;
|
||||||
@ -60,7 +60,7 @@ TEST_CASE("constant boundaries (0) - 1 concentration to 1 - rest 0") {
|
|||||||
field[MID] = 1;
|
field[MID] = 1;
|
||||||
|
|
||||||
BTCSDiffusion diffu = setupDiffu(N, M);
|
BTCSDiffusion diffu = setupDiffu(N, M);
|
||||||
BTCSBoundaryCondition bc(N, M);
|
BoundaryCondition bc(N, M);
|
||||||
|
|
||||||
boundary_condition input = {BC_TYPE_CONSTANT, 0};
|
boundary_condition input = {BC_TYPE_CONSTANT, 0};
|
||||||
|
|
||||||
@ -96,12 +96,12 @@ TEST_CASE(
|
|||||||
std::vector<double> field(N * M, 0);
|
std::vector<double> field(N * M, 0);
|
||||||
|
|
||||||
BTCSDiffusion diffu = setupDiffu(N, M);
|
BTCSDiffusion diffu = setupDiffu(N, M);
|
||||||
BTCSBoundaryCondition bc(N, M);
|
BoundaryCondition bc(N, M);
|
||||||
|
|
||||||
boundary_condition top =
|
boundary_condition top =
|
||||||
BTCSBoundaryCondition::returnBoundaryCondition(BC_TYPE_CONSTANT, 1);
|
BoundaryCondition::returnBoundaryCondition(BC_TYPE_CONSTANT, 1);
|
||||||
boundary_condition bottom =
|
boundary_condition bottom =
|
||||||
BTCSBoundaryCondition::returnBoundaryCondition(BC_TYPE_CONSTANT, 0);
|
BoundaryCondition::returnBoundaryCondition(BC_TYPE_CONSTANT, 0);
|
||||||
|
|
||||||
bc.setSide(BC_SIDE_TOP, top);
|
bc.setSide(BC_SIDE_TOP, top);
|
||||||
bc.setSide(BC_SIDE_BOTTOM, bottom);
|
bc.setSide(BC_SIDE_BOTTOM, bottom);
|
||||||
@ -130,7 +130,7 @@ TEST_CASE("2D closed boundaries, 1 constant cell in the middle") {
|
|||||||
double val = 1e-2;
|
double val = 1e-2;
|
||||||
|
|
||||||
BTCSDiffusion diffu = setupDiffu(N, M);
|
BTCSDiffusion diffu = setupDiffu(N, M);
|
||||||
BTCSBoundaryCondition bc(N, M);
|
BoundaryCondition bc(N, M);
|
||||||
|
|
||||||
field[MID] = val;
|
field[MID] = val;
|
||||||
bc(BC_INNER, MID) = {BC_TYPE_CONSTANT, val};
|
bc(BC_INNER, MID) = {BC_TYPE_CONSTANT, val};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user