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));
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 {
…}
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)
348 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
353 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
355 for (
long i = 0; i < pts.rows(); ++i)
361 const double y = pts(i, 1);
362 val(i, 0) =
U_ * 4 *
y * (0.41 -
y) / (0.41 * 0.41);
369 const double y = pts(i, 1);
370 const double z = pts(i, 2);
371 val(i, 0) =
U_ * 4 *
y * (0.41 -
y) / (0.41 * 0.41) * 4 *
z * (0.41 -
z) / (0.41 * 0.41);
377 val *= (1 - exp(-5 * t));
384 if (params.find(
"U") != params.end())
404 if (params.count(
"viscosity"))
408 if (params.find(
"time_dependent") != params.end())
416 val.resize(pts.rows(), pts.cols());
418 for (
int i = 0; i < pts.rows(); ++i)
420 const double x = pts(i, 0);
421 const double y = pts(i, 1);
425 val(i, 0) = 1 - exp(a *
x) * cos(2 * M_PI *
y);
426 val(i, 1) = a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
430 val(i, 0) = 1 - exp(a *
x) * cos(2 * M_PI *
y);
431 val(i, 1) = a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
439 val.resize(pts.rows(), pts.cols() * pts.cols());
441 for (
int i = 0; i < pts.rows(); ++i)
443 const double x = pts(i, 0);
444 const double y = pts(i, 1);
446 val(i, 0) = -a * exp(a *
x) * cos(2 * M_PI *
y);
447 val(i, 1) = 2 * M_PI * exp(a *
x) * sin(2 * M_PI *
y);
448 val(i, 2) = a * a * exp(a *
x) * sin(2 * M_PI *
y) / (2 * M_PI);
449 val(i, 3) = a * exp(a *
x) * cos(2 * M_PI *
y);
455 val.resize(pts.rows(), pts.cols());
474 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
479 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
481 for (
long i = 0; i < pts.rows(); ++i)
485 const double x = pts(i, 0);
486 const double y = pts(i, 1);
487 val(i, 1) =
U_ * 4 *
x * (0.5 -
x) / 0.5 / 0.5;
493 val *= (1 - exp(-5 * t));
500 if (params.find(
"U") != params.end())
504 if (params.find(
"time_dependent") != params.end())
520 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
523 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
525 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
527 for (
long i = 0; i < pts.rows(); ++i)
531 const double x = pts(i, 0);
532 const double y = pts(i, 1);
539 val *= (1 - exp(-5 * t));
523 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 {
…}
546 if (params.find(
"U") != params.end())
550 if (params.find(
"time_dependent") != params.end())
567 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
572 val = Eigen::MatrixXd::Zero(pts.rows(), pts.cols());
574 for (
long i = 0; i < pts.rows(); ++i)
580 const double u = pts(i, (
dir_ + 1) % 3);
581 const double v = pts(i, (
dir_ + 2) % 3);
582 val(i,
dir_) =
U_ * 24 * (1 - u) * u * (1 - v) * v;
586 const double v = pts(i, (
dir_ + 1) % 2);
593 val *= (1 - exp(-5 * t));
600 if (params.find(
"U") != params.end())
605 if (params.find(
"inflow_id") != params.end())
610 if (params.find(
"direction") != params.end())
612 dir_ = params[
"direction"];
615 if (params.find(
"no_slip") != params.end())
619 const auto no_slip = params[
"no_slip"];
620 if (no_slip.is_array())
622 for (
size_t k = 0; k < no_slip.size(); ++k)
624 const auto tmp = no_slip[k];
627 const std::string tmps = tmp;
629 assert(endings.size() == 2);
630 const int start = atoi(endings[0].c_str());
631 const int end = atoi(endings[1].c_str());
633 for (
int i = start; i <= end; ++i)
650 :
Problem(name), viscosity_(1e2), radius(0.5)
663 if (params.count(
"viscosity"))
667 if (params.count(
"radius"))
669 radius = params[
"radius"];
671 if (params.find(
"time_dependent") != params.end())
679 val.resize(pts.rows(), pts.cols());
681 for (
int i = 0; i < pts.rows(); ++i)
683 const double x = pts(i, 0);
684 const double y = pts(i, 1);
692 const double z = pts(i, 2);
693 const double norm = sqrt(
x *
x +
y *
y +
z *
z);
694 const double tmp1 = 3 * (
x +
y +
z) / pow(norm, 5);
695 const double tmp2 = (
x +
y +
z) / pow(norm, 3);
696 val(i, 0) = pow(
radius, 3) / 4 * (tmp1 *
x - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
x);
697 val(i, 1) = pow(
radius, 3) / 4 * (tmp1 *
y - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
y);
698 val(i, 2) = pow(
radius, 3) / 4 * (tmp1 *
z - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
z);
705 val.resize(pts.rows(), pts.cols() * pts.cols());
711 val.resize(pts.rows(), pts.cols());
717 val.resize(pts.rows(), pts.cols());
719 for (
int i = 0; i < pts.rows(); ++i)
721 const double x = pts(i, 0);
722 const double y = pts(i, 1);
733 const double z = pts(i, 2);
734 const double norm = sqrt(
x *
x +
y *
y +
z *
z);
735 const double tmp1 = 3 * (
x +
y +
z) / pow(norm, 5);
736 const double tmp2 = (
x +
y +
z) / pow(norm, 3);
737 val(i, 0) = pow(
radius, 3) / 4 * (tmp1 *
x - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
x);
738 val(i, 1) = pow(
radius, 3) / 4 * (tmp1 *
y - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
y);
739 val(i, 2) = pow(
radius, 3) / 4 * (tmp1 *
z - 1 / pow(norm, 3)) + 1 - 3 *
radius / 4 * (1 / norm + tmp2 *
z);
758 if (params.find(
"time_dependent") != params.end())
766 val.resize(pts.rows(), pts.cols());
768 for (
int i = 0; i < pts.rows(); ++i)
770 const double x = pts(i, 0);
771 const double y = pts(i, 1);
777 val *= (1 - exp(-5 * t));
782 val.resize(pts.rows(), pts.cols() * pts.cols());
788 val.resize(pts.rows(), pts.cols());
792 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
794 val.resize(pts.rows(), pts.cols());
796 for (
int i = 0; i < pts.rows(); ++i)
798 const double x = pts(i, 0);
799 const double y = pts(i, 1);
807 val *= (1 - exp(-5 * t));
792 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 {
…}
823 if (params.count(
"viscosity"))
831 val.resize(pts.rows(), pts.cols());
832 const double T = 6.283185307179586;
833 for (
int i = 0; i < pts.rows(); ++i)
835 const double x = pts(i, 0);
836 const double y = pts(i, 1);
840 const double time_scaling = exp(-2 *
viscosity_ * T * T * t);
841 val(i, 0) = cos(T *
x) * sin(T *
y) * time_scaling;
842 val(i, 1) = -sin(T *
x) * cos(T *
y) * time_scaling;
846 const double z = pts(i, 2);
847 const double time_scaling = -exp(-
viscosity_ * t);
848 val(i, 0) = (exp(
x) * sin(
y +
z) + exp(
z) * cos(
x +
y)) * time_scaling;
849 val(i, 1) = (exp(
y) * sin(
z +
x) + exp(
x) * cos(
y +
z)) * time_scaling;
850 val(i, 2) = (exp(
z) * sin(
x +
y) + exp(
y) * cos(
z +
x)) * time_scaling;
857 val.resize(pts.rows(), pts.cols() * pts.cols());
858 const double T = 6.283185307179586;
859 for (
int i = 0; i < pts.rows(); ++i)
861 const double x = pts(i, 0);
862 const double y = pts(i, 1);
866 const double time_scaling = exp(-2 *
viscosity_ * T * T * t);
867 val(i, 0) = -T * sin(T *
x) * sin(T *
y) * time_scaling;
868 val(i, 1) = T * cos(T *
x) * cos(T *
y) * time_scaling;
869 val(i, 2) = -T * cos(T *
x) * cos(T *
y) * time_scaling;
870 val(i, 3) = T * sin(T *
x) * sin(T *
y) * time_scaling;
874 const double z = pts(i, 2);
875 const double time_scaling = exp(-
viscosity_ * t);
876 val(i, 0) = time_scaling * (exp(
z) * sin(
x +
y) - exp(
x) * sin(
y +
z));
877 val(i, 1) = time_scaling * (exp(
z) * sin(
y +
x) - exp(
x) * cos(
z +
y));
878 val(i, 2) = -time_scaling * (exp(
z) * cos(
x +
y) + exp(
x) * cos(
y +
z));
879 val(i, 3) = -time_scaling * (exp(
y) * cos(
x +
z) + exp(
x) * cos(
y +
z));
880 val(i, 4) = time_scaling * (exp(
x) * sin(
z +
y) - exp(
y) * sin(
x +
z));
881 val(i, 5) = time_scaling * (exp(
x) * sin(
z +
y) - exp(
y) * cos(
x +
z));
882 val(i, 6) = time_scaling * (exp(
y) * sin(
x +
z) - exp(
z) * cos(
y +
x));
883 val(i, 7) = -time_scaling * (exp(
z) * cos(
x +
y) + exp(
y) * cos(
x +
z));
884 val(i, 8) = time_scaling * (exp(
y) * sin(
x +
z) - exp(
z) * sin(
y +
x));
891 val.resize(pts.rows(), pts.cols());
900 template <
typename T>
903 Eigen::Matrix<T, 2, 1> res;
911 template <
typename T>
914 Eigen::Matrix<T, 3, 1> res;
923 template <
typename T>
926 Eigen::Matrix<T, 2, 1> res;
929 res(1) = -
x -
y / 2.;
934 template <
typename T>
937 Eigen::Matrix<T, 3, 1> res;
940 res(1) = -
x -
y / 2.;
946 template <
typename T>
949 Eigen::Matrix<T, 2, 1> res;
951 res(0) =
x *
x *
x / 3. +
x *
y *
y;
952 res(1) = -
x *
x *
y -
y *
y *
y / 3.;
957 template <
typename T>
960 Eigen::Matrix<T, 3, 1> res;
962 res(0) =
x *
x *
x / 3. +
x *
y *
y;
963 res(1) = -
x *
x *
y -
y *
y *
y / 3.;
969 template <
typename T>
972 Eigen::Matrix<T, 2, 1> res;
974 res(0) =
x *
x / 2. +
x *
y;
975 res(1) = -
x *
y -
y *
y / 2.;
980 template <
typename T>
983 Eigen::Matrix<T, 3, 1> res;
985 res(0) =
x *
x / 2. +
x *
y;
986 res(1) = -
x *
y -
y *
y / 2.;
992 template <
typename T>
995 Eigen::Matrix<T, 2, 1> res;
997 res(0) = cos(
x) * sin(
y);
998 res(1) = -sin(
x) * cos(
y);
1003 template <
typename T>
1006 Eigen::Matrix<T, 3, 1> res;
1008 res(0) = cos(
x) * sin(
y);
1009 res(1) = -sin(
x) * cos(
y);
1023 if (params.find(
"func") != params.end())
1025 func_ = params[
"func"];
1047 else if (pt.size() == 3)
1086 else if (pt.size() == 3)
1125 else if (pt.size() == 3)
1155 else if (pt.size() == 3)
1166 else if (pt.size() == 3)
1177 else if (pt.size() == 3)
1185 :
Problem(name), func_(0), viscosity_(1)
1196 if (params.count(
"viscosity"))
1201 if (params.find(
"func") != params.end())
1203 func_ = params[
"func"];
1209 val.resize(pts.rows(), pts.cols());
1210 for (
int i = 0; i < pts.rows(); ++i)
1212 const double x = pts(i, 0);
1213 const double y = pts(i, 1);
1215 if (pts.cols() == 2)
1217 val(i, 0) = -t +
x *
x / 2 +
x *
y;
1218 val(i, 1) = t -
x *
y -
y *
y / 2;
1222 const double z = pts(i, 2);
1225 val(i, 2) = -2 *
z * (
x +
y);
1239 val.resize(pts.rows(), pts.cols() * pts.cols());
1255 val.resize(pts.rows(), pts.cols());
1257 for (
int i = 0; i < pts.rows(); ++i)
1259 const double x = pts(i, 0);
1260 const double y = pts(i, 1);
1261 if (pts.cols() == 2)
1268 const double z = pts(i, 2);
1269 val(i, 0) = 2 * (
x *
x *
x - 1);
1270 val(i, 1) = 2 * (
y *
y *
y - 1);
1271 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