16 const auto f = [](
double x) {
return x <= 0 ? 0 : exp(-1. /
x); };
17 const auto g = [&
f](
double x) {
return f(
x) / (
f(
x) +
f(1. -
x)); };
18 const auto h = [&
g](
double x) {
return g(
x - 1); };
19 const auto k = [&h](
double x) {
return h(
x *
x); };
32 if (params.find(
"time_dependent") != params.end())
40 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
52 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
57 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
59 for (
long i = 0; i < pts.rows(); ++i)
81 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
86 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
91 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
93 for (
int i = 0; i < pts.rows(); ++i)
97 const double r1 = sqrt((pts(i, 0) - 0.04) * (pts(i, 0) - 0.04) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2));
98 const double r2 = sqrt((pts(i, 0) - 0.16) * (pts(i, 0) - 0.16) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2));
100 val(i, 0) = 0.05 * bump(r1 * 70) - 0.05 * bump(r2 * 70);
104 const double r1 = sqrt((pts(i, 0) - 0.04) * (pts(i, 0) - 0.04) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2) + (pts(i, 2) - 0.2) * (pts(i, 2) - 0.2));
105 const double r2 = sqrt((pts(i, 0) - 0.16) * (pts(i, 0) - 0.16) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2) + (pts(i, 2) - 0.2) * (pts(i, 2) - 0.2));
107 val(i, 0) = 0.05 * bump(r1 * 70) - 0.05 * bump(r2 * 70);
114 val = Eigen::MatrixXd::Zero(pts.rows(), 1);
115 for (
int i = 0; i < pts.rows(); ++i)
117 const double x = pts(i, 0);
118 const double y = pts(i, 1);
122 const double r1 = sqrt((pts(i, 0) - 0.04) * (pts(i, 0) - 0.04) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2));
123 const double r2 = sqrt((pts(i, 0) - 0.16) * (pts(i, 0) - 0.16) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2));
125 val(i, 0) = bump(r1 * 70) + bump(r2 * 70);
129 const double r1 = sqrt((pts(i, 0) - 0.04) * (pts(i, 0) - 0.04) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2) + (pts(i, 2) - 0.2) * (pts(i, 2) - 0.2));
130 const double r2 = sqrt((pts(i, 0) - 0.16) * (pts(i, 0) - 0.16) + (pts(i, 1) - 0.2) * (pts(i, 1) - 0.2) + (pts(i, 2) - 0.2) * (pts(i, 2) - 0.2));
132 val(i, 0) = bump(r1 * 70) + bump(r2 * 70);
145 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
150 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
152 for (
long i = 0; i < pts.rows(); ++i)
164 val *= sin(M_PI * t / 2);
176 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
181 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
183 for (
long i = 0; i < pts.rows(); ++i)
189 const double x = pts(i, 0);
190 val(i, 0) = 4 *
x * (1 -
x);
199 val *= sin(M_PI * t / 2);
211 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
216 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
218 for (
long i = 0; i < pts.rows(); ++i)
224 const double x = pts(i, 0);
225 if (x < 0.02 || x > 1 - 0.02)
228 val(i, 0) = 50 * exp(1. / ((
x - 0.5) * (
x - 0.5) - 0.25));
237 val *= sin(M_PI * t / 2);
255 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
258 void Flow::dirichlet_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const
260 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
262 for (
long i = 0; i < pts.rows(); ++i)
271 val *= (1 - exp(-5 * t));
278 if (params.find(
"inflow") != params.end())
283 if (params.find(
"outflow") != params.end())
288 if (params.find(
"inflow_amout") != params.end())
293 if (params.find(
"outflow_amout") != params.end())
298 if (params.find(
"direction") != params.end())
305 if (params.find(
"obstacle") != params.end())
307 const auto obstacle = params[
"obstacle"];
308 if (obstacle.is_array())
310 for (
size_t k = 0; k < obstacle.size(); ++k)
312 const auto tmp = obstacle[k];
315 const std::string tmps = tmp;
317 assert(endings.size() == 2);
318 const int start = atoi(endings[0].c_str());
319 const int end = atoi(endings[1].c_str());
321 for (
int i = start; i <= end; ++i)
351 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
356 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
358 for (
long i = 0; i < pts.rows(); ++i)
364 const double y = pts(i, 1);
365 val(i, 0) =
U_ * 4 *
y * (0.41 -
y) / (0.41 * 0.41);
372 const double y = pts(i, 1);
373 const double z = pts(i, 2);
374 val(i, 0) =
U_ * 4 *
y * (0.41 -
y) / (0.41 * 0.41) * 4 *
z * (0.41 -
z) / (0.41 * 0.41);
380 val *= (1 - exp(-5 * t));
387 if (params.find(
"U") != params.end())
407 if (params.count(
"viscosity"))
411 if (params.find(
"time_dependent") != params.end())
419 val.resize(pts.rows(), pts.cols());
421 for (
int i = 0; i < pts.rows(); ++i)
423 const double x = pts(i, 0);
424 const double y = pts(i, 1);
428 val(i, 0) = 1 - exp(a *
x) * cos(2 * M_PI *
y);
429 val(i, 1) = a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
433 val(i, 0) = 1 - exp(a *
x) * cos(2 * M_PI *
y);
434 val(i, 1) = a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
442 val.resize(pts.rows(), pts.cols() * pts.cols());
444 for (
int i = 0; i < pts.rows(); ++i)
446 const double x = pts(i, 0);
447 const double y = pts(i, 1);
449 val(i, 0) = -a * exp(a *
x) * cos(2 * M_PI *
y);
450 val(i, 1) = 2 * M_PI * exp(a *
x) * sin(2 * M_PI *
y);
451 val(i, 2) = a * a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
452 val(i, 3) = a * exp(a *
x) * cos(2 * M_PI *
y);
458 val.resize(pts.rows(), pts.cols());
477 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
482 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
484 for (
long i = 0; i < pts.rows(); ++i)
488 const double x = pts(i, 0);
489 const double y = pts(i, 1);
490 val(i, 1) =
U_ * 4 *
x * (0.5 -
x) / 0.5 / 0.5;
496 val *= (1 - exp(-5 * t));
503 if (params.find(
"U") != params.end())
507 if (params.find(
"time_dependent") != params.end())
523 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
526 void Lshape::dirichlet_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const
528 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
530 for (
long i = 0; i < pts.rows(); ++i)
534 const double x = pts(i, 0);
535 const double y = pts(i, 1);
542 val *= (1 - exp(-5 * t));
549 if (params.find(
"U") != params.end())
553 if (params.find(
"time_dependent") != params.end())
570 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
575 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
577 for (
long i = 0; i < pts.rows(); ++i)
583 const double u = pts(i, (
dir_ + 1) % 3);
584 const double v = pts(i, (
dir_ + 2) % 3);
585 val(i,
dir_) =
U_ * 24 * (1 - u) * u * (1 - v) * v;
589 const double v = pts(i, (
dir_ + 1) % 2);
596 val *= (1 - exp(-5 * t));
603 if (params.find(
"U") != params.end())
608 if (params.find(
"inflow_id") != params.end())
613 if (params.find(
"direction") != params.end())
615 dir_ = params[
"direction"];
618 if (params.find(
"no_slip") != params.end())
622 const auto no_slip = params[
"no_slip"];
623 if (no_slip.is_array())
625 for (
size_t k = 0; k < no_slip.size(); ++k)
627 const auto tmp = no_slip[k];
630 const std::string tmps = tmp;
632 assert(endings.size() == 2);
633 const int start = atoi(endings[0].c_str());
634 const int end = atoi(endings[1].c_str());
636 for (
int i = start; i <= end; ++i)
656 :
Problem(name), viscosity_(1e2), radius(0.5)
669 if (params.count(
"viscosity"))
673 if (params.count(
"radius"))
675 radius = params[
"radius"];
677 if (params.find(
"time_dependent") != params.end())
685 val.resize(pts.rows(), pts.cols());
687 for (
int i = 0; i < pts.rows(); ++i)
689 const double x = pts(i, 0);
690 const double y = pts(i, 1);
698 const double z = pts(i, 2);
699 const double norm = sqrt(
x *
x +
y *
y +
z *
z);
700 const double tmp1 = 3 * (
x +
y +
z) / pow(norm, 5);
701 const double tmp2 = (
x +
y +
z) / pow(norm, 3);
702 val(i, 0) = pow(
radius, 3) / 4 * (tmp1 *
x - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
x);
703 val(i, 1) = pow(
radius, 3) / 4 * (tmp1 *
y - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
y);
704 val(i, 2) = pow(
radius, 3) / 4 * (tmp1 *
z - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
z);
711 val.resize(pts.rows(), pts.cols() * pts.cols());
717 val.resize(pts.rows(), pts.cols());
723 val.resize(pts.rows(), pts.cols());
725 for (
int i = 0; i < pts.rows(); ++i)
727 const double x = pts(i, 0);
728 const double y = pts(i, 1);
739 const double z = pts(i, 2);
740 const double norm = sqrt(
x *
x +
y *
y +
z *
z);
741 const double tmp1 = 3 * (
x +
y +
z) / pow(norm, 5);
742 const double tmp2 = (
x +
y +
z) / pow(norm, 3);
743 val(i, 0) = pow(
radius, 3) / 4 * (tmp1 *
x - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
x);
744 val(i, 1) = pow(
radius, 3) / 4 * (tmp1 *
y - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
y);
745 val(i, 2) = pow(
radius, 3) / 4 * (tmp1 *
z - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
z);
764 if (params.find(
"time_dependent") != params.end())
772 val.resize(pts.rows(), pts.cols());
774 for (
int i = 0; i < pts.rows(); ++i)
776 const double x = pts(i, 0);
777 const double y = pts(i, 1);
783 val *= (1 - exp(-5 * t));
788 val.resize(pts.rows(), pts.cols() * pts.cols());
794 val.resize(pts.rows(), pts.cols());
798 void Airfoil::dirichlet_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const
800 val.resize(pts.rows(), pts.cols());
802 for (
int i = 0; i < pts.rows(); ++i)
804 const double x = pts(i, 0);
805 const double y = pts(i, 1);
813 val *= (1 - exp(-5 * t));
829 if (params.count(
"viscosity"))
837 val.resize(pts.rows(), pts.cols());
838 const double T = 6.283185307179586;
839 for (
int i = 0; i < pts.rows(); ++i)
841 const double x = pts(i, 0);
842 const double y = pts(i, 1);
846 const double time_scaling = exp(-2 *
viscosity_ * T * T * t);
847 val(i, 0) = cos(T *
x) * sin(T *
y) * time_scaling;
848 val(i, 1) = -sin(T *
x) * cos(T *
y) * time_scaling;
852 const double z = pts(i, 2);
853 const double time_scaling = -exp(-
viscosity_ * t);
854 val(i, 0) = (exp(
x) * sin(
y +
z) + exp(
z) * cos(
x +
y)) * time_scaling;
855 val(i, 1) = (exp(
y) * sin(
z +
x) + exp(
x) * cos(
y +
z)) * time_scaling;
856 val(i, 2) = (exp(
z) * sin(
x +
y) + exp(
y) * cos(
z +
x)) * time_scaling;
863 val.resize(pts.rows(), pts.cols() * pts.cols());
864 const double T = 6.283185307179586;
865 for (
int i = 0; i < pts.rows(); ++i)
867 const double x = pts(i, 0);
868 const double y = pts(i, 1);
872 const double time_scaling = exp(-2 *
viscosity_ * T * T * t);
873 val(i, 0) = -T * sin(T *
x) * sin(T *
y) * time_scaling;
874 val(i, 1) = T * cos(T *
x) * cos(T *
y) * time_scaling;
875 val(i, 2) = -T * cos(T *
x) * cos(T *
y) * time_scaling;
876 val(i, 3) = T * sin(T *
x) * sin(T *
y) * time_scaling;
880 const double z = pts(i, 2);
881 const double time_scaling = exp(-
viscosity_ * t);
882 val(i, 0) = time_scaling * (exp(
z) * sin(
x +
y) - exp(
x) * sin(
y +
z));
883 val(i, 1) = time_scaling * (exp(
z) * sin(
y +
x) - exp(
x) * cos(
z +
y));
884 val(i, 2) = -time_scaling * (exp(
z) * cos(
x +
y) + exp(
x) * cos(
y +
z));
885 val(i, 3) = -time_scaling * (exp(
y) * cos(
x +
z) + exp(
x) * cos(
y +
z));
886 val(i, 4) = time_scaling * (exp(
x) * sin(
z +
y) - exp(
y) * sin(
x +
z));
887 val(i, 5) = time_scaling * (exp(
x) * sin(
z +
y) - exp(
y) * cos(
x +
z));
888 val(i, 6) = time_scaling * (exp(
y) * sin(
x +
z) - exp(
z) * cos(
y +
x));
889 val(i, 7) = -time_scaling * (exp(
z) * cos(
x +
y) + exp(
y) * cos(
x +
z));
890 val(i, 8) = time_scaling * (exp(
y) * sin(
x +
z) - exp(
z) * sin(
y +
x));
897 val.resize(pts.rows(), pts.cols());
906 template <
typename T>
909 Eigen::Matrix<T, 2, 1> res;
917 template <
typename T>
920 Eigen::Matrix<T, 3, 1> res;
929 template <
typename T>
932 Eigen::Matrix<T, 2, 1> res;
935 res(1) = -
x -
y / 2.;
940 template <
typename T>
943 Eigen::Matrix<T, 3, 1> res;
946 res(1) = -
x -
y / 2.;
952 template <
typename T>
955 Eigen::Matrix<T, 2, 1> res;
957 res(0) =
x *
x *
x / 3. +
x *
y *
y;
958 res(1) = -
x *
x *
y -
y *
y *
y / 3.;
963 template <
typename T>
966 Eigen::Matrix<T, 3, 1> res;
968 res(0) =
x *
x *
x / 3. +
x *
y *
y;
969 res(1) = -
x *
x *
y -
y *
y *
y / 3.;
975 template <
typename T>
978 Eigen::Matrix<T, 2, 1> res;
980 res(0) =
x *
x / 2. +
x *
y;
981 res(1) = -
x *
y -
y *
y / 2.;
986 template <
typename T>
989 Eigen::Matrix<T, 3, 1> res;
991 res(0) =
x *
x / 2. +
x *
y;
992 res(1) = -
x *
y -
y *
y / 2.;
998 template <
typename T>
1001 Eigen::Matrix<T, 2, 1> res;
1003 res(0) = cos(
x) * sin(
y);
1004 res(1) = -sin(
x) * cos(
y);
1009 template <
typename T>
1012 Eigen::Matrix<T, 3, 1> res;
1014 res(0) = cos(
x) * sin(
y);
1015 res(1) = -sin(
x) * cos(
y);
1029 if (params.find(
"func") != params.end())
1031 func_ = params[
"func"];
1053 else if (pt.size() == 3)
1092 else if (pt.size() == 3)
1131 else if (pt.size() == 3)
1161 else if (pt.size() == 3)
1172 else if (pt.size() == 3)
1183 else if (pt.size() == 3)
1191 :
Problem(name), func_(0), viscosity_(1)
1202 if (params.count(
"viscosity"))
1207 if (params.find(
"func") != params.end())
1209 func_ = params[
"func"];
1215 val.resize(pts.rows(), pts.cols());
1216 for (
int i = 0; i < pts.rows(); ++i)
1218 const double x = pts(i, 0);
1219 const double y = pts(i, 1);
1221 if (pts.cols() == 2)
1223 val(i, 0) = -t +
x *
x / 2 +
x *
y;
1224 val(i, 1) = t -
x *
y -
y *
y / 2;
1228 const double z = pts(i, 2);
1231 val(i, 2) = -2 *
z * (
x +
y);
1245 val.resize(pts.rows(), pts.cols() * pts.cols());
1261 val.resize(pts.rows(), pts.cols());
1263 for (
int i = 0; i < pts.rows(); ++i)
1265 const double x = pts(i, 0);
1266 const double y = pts(i, 1);
1267 if (pts.cols() == 2)
1274 const double z = pts(i, 2);
1275 val(i, 0) = 2 * (
x *
x *
x - 1);
1276 val(i, 1) = 2 * (
y *
y *
y - 1);
1277 val(i, 2) = 2 *
z * (
x *
x + 4 *
x *
y +
y *
y);
std::vector< int > pressure_boundary_ids_
std::vector< int > boundary_ids_
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
virtual int get_boundary_id(const int primitive) const
Get the boundary selection of an element (face in 3d, edge in 2d)
void set_parameters(const json ¶ms) override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
Airfoil(const std::string &name)
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
ConstantVelocity(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
CornerFlow(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
DrivenCavityC0(const std::string &name)
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
DrivenCavity(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
DrivenCavitySmooth(const std::string &name)
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
Flow(const std::string &name)
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
FlowWithObstacle(const std::string &name)
void set_parameters(const json ¶ms) override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
Kovnaszy(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
Lshape(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
VectorNd eval_fun(const VectorNd &pt, const double t) const override
SimpleStokeProblemExact(const std::string &name)
void set_parameters(const json ¶ms) override
SineStokeProblemExact(const std::string &name)
VectorNd eval_fun(const VectorNd &pt, const double t) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
StokesLawProblem(const std::string &name)
void set_parameters(const json ¶ms) override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
TaylorGreenVortexProblem(const std::string &name)
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
virtual void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
virtual void set_parameters(const json ¶ms) override
TimeDepentendStokesProblem(const std::string &name)
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
TransientStokeProblemExact(const std::string &name)
void set_parameters(const json ¶ms) override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
TwoSpheres(const std::string &name)
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void initial_density(const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
void set_parameters(const json ¶ms) override
UnitFlowWithObstacle(const std::string &name)
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
Eigen::Matrix< T, 2, 1 > sine_function(T x, T y, const double t)
Eigen::Matrix< T, 2, 1 > simple_function_const(T x, T y, const double t)
Eigen::Matrix< T, 2, 1 > simple_function_lin(T x, T y, const double t)
Eigen::Matrix< T, 2, 1 > simple_function_cub(T x, T y, const double t)
Eigen::Matrix< T, 2, 1 > simple_function_quad(T x, T y, const double t)
std::vector< std::string > split(const std::string &str, const std::string &delimiters=" ")
Eigen::Matrix< AutodiffScalarHessian, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffHessianPt
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 3, 1 > VectorNd
Eigen::Matrix< AutodiffScalarGrad, Eigen::Dynamic, 1, 0, 3, 1 > AutodiffGradPt