7#include <dirac_operator_experiment.h>
9using lf::uscalfe::operator-;
10using complex = std::complex<double>;
16int main(
int argc,
char *argv[]) {
17 if (argc != 4 && argc != 5) {
18 std::cerr <<
"Usage: " << argv[0]
19 <<
" max_refinement_level min_k max_k step=0.1 " << std::endl;
26 const unsigned refinement_level = atoi(argv[1]);
27 sscanf(argv[2],
"%lf", &min_k);
28 sscanf(argv[3],
"%lf", &max_k);
29 if (argc == 5) sscanf(argv[4],
"%lf", &step);
30 std::cout <<
"max_refinement_level : " << refinement_level << std::endl;
31 std::cout <<
"min_k : " << min_k <<
", max_k = " << max_k
32 <<
" step = " << step << std::endl;
37 std::vector<unsigned> refinement_levels(refinement_level + 1);
38 for (
int i = 0; i < refinement_level + 1; i++) {
39 refinement_levels[i] = i;
42 std::vector<double> ks;
43 for (
double i = min_k; i <= max_k; i += step) {
48 auto f_zero = [&](
const Eigen::Vector3d &x_vec) -> complex {
49 return complex(0, k * 5.2);
53 auto f_one = [&](
const Eigen::Vector3d &x_vec) -> Eigen::VectorXcd {
54 Eigen::Vector3d x_ = x_vec / x_vec.norm();
59 ret << complex(0, -k * y), complex(0, k * x), 0;
63 auto Power = [](
double a,
double b) ->
double {
return pow(a, b); };
64 auto Sqrt = [](
double a) ->
double {
return sqrt(a); };
65 auto Complex = [](
double a,
double b) -> complex {
return complex(a, b); };
68 auto f_two = [&](
const Eigen::Vector3d &x_vec) -> complex {
69 Eigen::Vector3d x_ = x_vec / x_vec.norm();
73 return Complex(0., 5.2) * k -
74 (2 * z) / Sqrt(Power(x, 2) + Power(y, 2) + Power(z, 2));
78 auto u_zero = [&](
const Eigen::Vector3d x_vec) -> complex {
return 5.2; };
79 auto u_two = [&](
const Eigen::Vector3d x_vec) -> complex {
return 5.2; };
82 auto u_one = [&](
const Eigen::Vector3d x_vec) -> Eigen::Vector3cd {
83 Eigen::Vector3d x_ = x_vec / x_vec.norm();
93 u_zero, u_one, u_two, f_zero, f_one, f_two, k,
"constant");
95 experiment.Compute(refinement_levels, ks);
Creates and solves the discretised Dirac Operator source problems for a given list of levels and valu...