6#include "ultraweak_dpg.h"
11 std::cout <<
"Convergence study 1: Primal DPG method, smooth solution \n";
12 std::cout <<
"Exact solution: u(x,y) = sin(pi*x)sin(pi*y), homogenous "
14 std::cout <<
"BVP 1: epsilon_1=1.0, beta_1=[0.0,0.0] \n";
15 std::cout <<
"BVP 2: epsilon_2=1.0, beta_2=[2.0,1.0] \n ";
16 std::cout <<
"p = {1,2}, enrichement delta_p = {1,2} \n";
21 auto u_exact = [PI](
const Eigen::Vector2d& x) ->
double {
22 return std::sin(PI * x[0]) * std::sin(PI * x[1]);
24 auto u_grad = [PI](
const Eigen::Vector2d& x) -> Eigen::Vector2d {
25 return (Eigen::VectorXd(2)
26 << PI * std::cos(PI * x[0]) * std::sin(PI * x[1]),
27 PI * std::sin(PI * x[0]) * std::cos(PI * x[1]))
32 auto epsilon_1 = [](
const Eigen::Vector2d & ) ->
double {
return 1.0; };
33 auto beta_1 = [](
const Eigen::Vector2d & ) -> Eigen::Vector2d {
34 return (Eigen::VectorXd(2) << 0.0, 0.0).finished();
36 auto f_1 = [PI](
const Eigen::Vector2d& x) ->
double {
37 return 2.0 * PI * PI * std::sin(PI * x[0]) * std::sin(PI * x[1]);
39 auto g_1 = [](
const Eigen::Vector2d & ) ->
double {
return 0.0; };
42 auto epsilon_2 = [](
const Eigen::Vector2d & ) ->
double {
return 1.0; };
43 auto beta_2 = [PI](
const Eigen::Vector2d & ) -> Eigen::Vector2d {
44 return (Eigen::VectorXd(2) << 2.0, 1.0).finished();
46 auto f_2 = [PI](
const Eigen::Vector2d& x) ->
double {
47 return 2.0 * PI * PI * std::sin(PI * x[0]) * std::sin(PI * x[1]) +
48 PI * (2.0 * std::cos(PI * x[0]) * std::sin(PI * x[1]) +
49 std::sin(PI * x[0]) * std::cos(PI * x[1]));
51 auto g_2 = [](
const Eigen::Vector2d & ) ->
double {
return 0.0; };
58 std::cout <<
"Running convergence tests for BVP 1 on a triangular mesh.\n";
59 for (
int deg_p = 1; deg_p <= 2; deg_p++) {
60 for (
int delta_p = 1; delta_p <= 3 - deg_p; delta_p++) {
63 reflev, u_exact, u_grad, epsilon_1, beta_1, f_1, g_1, deg_p,
67 std::string file_name =
"cs1/triangular/bvp1_" + std::to_string(deg_p) +
68 "_" + std::to_string(delta_p);
69 std::ofstream file(file_name);
70 for (
auto [dofs, h1error, estimator] : errors) {
71 file << dofs <<
", " << h1error <<
", " << estimator << std::endl;
77 std::cout <<
"Running convergence tests for BVP 2 on a triangular mesh\n";
78 for (
int deg_p = 1; deg_p <= 2; deg_p++) {
79 for (
int delta_p = 1; delta_p <= 3 - deg_p; delta_p++) {
82 reflev, u_exact, u_grad, epsilon_2, beta_2, f_2, g_2, deg_p,
84 std::string file_name =
"cs1/triangular/bvp2_" + std::to_string(deg_p) +
85 "_" + std::to_string(delta_p);
86 std::ofstream file(file_name);
87 for (
auto [dofs, h1error, estimator] : errors) {
88 file << dofs <<
", " << h1error <<
", " << estimator << std::endl;
97 std::cout <<
"Running convergence tests for BVP 1 on a quadrilateral mesh\n";
98 for (
int deg_p = 1; deg_p <= 2; deg_p++) {
99 for (
int delta_p = 1; delta_p <= 3 - deg_p; delta_p++) {
102 reflev, u_exact, u_grad, epsilon_1, beta_1, f_1, g_1, deg_p,
106 std::string file_name =
"cs1/quadrilateral/bvp1_" +
107 std::to_string(deg_p) +
"_" +
108 std::to_string(delta_p);
109 std::ofstream file(file_name);
110 for (
auto [dofs, h1error, estimator] : errors) {
111 file << dofs <<
", " << h1error <<
", " << estimator << std::endl;
117 std::cout <<
"Running convergence tests for BVP 2 on a quadrilateral mesh \n";
118 for (
int deg_p = 1; deg_p <= 2; deg_p++) {
119 for (
int delta_p = 1; delta_p <= 3 - deg_p; delta_p++) {
122 reflev, u_exact, u_grad, epsilon_2, beta_2, f_2, g_2, deg_p,
124 std::string file_name =
"cs1/quadrilateral/bvp2_" +
125 std::to_string(deg_p) +
"_" +
126 std::to_string(delta_p);
127 std::ofstream file(file_name);
128 for (
auto [dofs, h1error, estimator] : errors) {
129 file << dofs <<
", " << h1error <<
", " << estimator << std::endl;
static constexpr RefEl kTria()
Returns the reference triangle.
static constexpr RefEl kQuad()
Returns the reference quadrilateral.
energy_vector TestConververgencePrimalDPGConvectionDiffusionDirichletBVP(size_type reflevels, SOLFUNC solution, SOLGRAD sol_grad, ALPHAFUNC alpha, BETAFUNC beta, FFUNC f, GFUNC g, int degree_p, int enrichement, lf::base::RefEl ref_el)
Examines the convergence behaviour of the primal DPG method for a pure Dirichlet convection-diffusion...