8#include <hodge_laplacian_experiment.h>
19int main(
int argc,
char *argv[]) {
20 if (argc != 4 && argc != 5) {
21 std::cerr <<
"Usage: " << argv[0]
22 <<
" max_refinement_level min_k max_k step=0.1 " << std::endl;
29 const unsigned refinement_level = atoi(argv[1]);
30 sscanf(argv[2],
"%lf", &min_k);
31 sscanf(argv[3],
"%lf", &max_k);
32 if (argc == 5) sscanf(argv[4],
"%lf", &step);
33 std::cout <<
"max_refinement_level : " << refinement_level << std::endl;
34 std::cout <<
"min_k : " << min_k <<
", max_k = " << max_k
35 <<
" step = " << step << std::endl;
40 std::vector<unsigned> refinement_levels(refinement_level + 1);
41 for (
int i = 0; i < refinement_level + 1; i++) {
42 refinement_levels[i] = i;
45 std::vector<double> ks;
46 for (
double i = min_k; i <= max_k; i += step) {
52 auto Sin = [](
double a) ->
double {
return std::sin(a); };
53 auto Cos = [](
double a) ->
double {
return std::cos(a); };
54 auto Sqrt = [](
double a) ->
double {
return std::sqrt(a); };
55 auto Power = [](
double a,
double b) ->
double {
return std::pow(a, b); };
60 auto f_zero = [&](
const Eigen::Vector3d &x_vec) ->
double {
65 auto f_one = [&](
const Eigen::Vector3d &x_vec) -> Eigen::VectorXd {
67 Eigen::Vector3d x_ = x_vec / x_vec.norm();
72 Eigen::VectorXd ret(3);
74 ret << -(Power(k, 2) * y) -
75 (2 * y) / (Power(x, 2) + Power(y, 2) + Power(z, 2)),
76 x * (Power(k, 2) + 2 / (Power(x, 2) + Power(y, 2) + Power(z, 2))), 0;
81 auto u_zero = [&](
const Eigen::Vector3d x_vec) ->
double {
return 5.2; };
84 auto u_one = [&](
const Eigen::Vector3d x_vec) -> Eigen::Vector3d {
86 Eigen::Vector3d x_ = x_vec / x_vec.norm();
91 Eigen::VectorXd ret(3);
99 experiment(u_zero, u_one, u_zero, f_zero, f_one, f_zero, k,
"constant");
101 experiment.Compute(refinement_levels, ks);
Creates and solves the discretised Hodge Laplacian source problems for a given list of levels and val...