diff --git a/src/BTCSDiffusion.cpp b/src/BTCSDiffusion.cpp index 919a1e5..9a92418 100644 --- a/src/BTCSDiffusion.cpp +++ b/src/BTCSDiffusion.cpp @@ -19,17 +19,28 @@ const BCSide BTCSDiffusion::LEFT = 0; const BCSide BTCSDiffusion::RIGHT = 1; -BTCSDiffusion::BTCSDiffusion(int x) : dim_x(x) { this->grid_dim = 1; } +BTCSDiffusion::BTCSDiffusion(int x) : dim_x(x) { + this->grid_dim = 1; + this->bc.reserve(2); +} BTCSDiffusion::BTCSDiffusion(int x, int y) : dim_x(x), dim_y(y) { this->grid_dim = 2; + this->bc.reserve(x * 2 + y * 2); } BTCSDiffusion::BTCSDiffusion(int x, int y, int z) : dim_x(x), dim_y(y), dim_z(z) { this->grid_dim = 3; + //TODO: reserve memory for boundary conditions } +void BTCSDiffusion::setBoundaryCondition(std::vector input, + BCSide side) { + if (this->grid_dim == 1) { + bc[side] = input[0]; + } +} void BTCSDiffusion::simulate(std::vector &c, std::vector &alpha, double timestep) { double dx = 1. / this->dim_x; diff --git a/src/test_class.cpp b/src/test_class.cpp new file mode 100644 index 0000000..48d8b14 --- /dev/null +++ b/src/test_class.cpp @@ -0,0 +1,33 @@ +#include "BTCSDiffusion.hpp" +#include "diffusion.hpp" +#include +#include +#include + +using namespace std; + +int main(int argc, char *argv[]) { + + int x = 20; + + std::vector alpha(x, 1 * pow(10, -1)); + std::vector input(x, 1 * std::pow(10, -6)); + std::vector bc_left, bc_right; + + bc_left.push_back(5. * std::pow(10, -6)); + bc_right.push_back(1. * std::pow(10, -6)); + // input[x + 2] = 5.5556554 * std::pow(10, -6); + // input[x + 3] = 5.234564213 * std::pow(10, -6); + + BTCSDiffusion diffu(x); + + diffu.setBoundaryCondition(bc_left, BTCSDiffusion::LEFT); + diffu.setBoundaryCondition(bc_right, BTCSDiffusion::RIGHT); + + for (int i = 0; i < 100; i++) { + diffu.simulate(input, alpha, 1.); + // BTCS1D(x, input, alpha, 1., bc); + } + + return 0; +}