Tatooine
sujudi_haimes.h
Go to the documentation of this file.
1#ifndef TATOOINE_FIELDS_DETAIL_VORTEX_CORE_LINE_EXTRACTION_SUJUDI_HAIMES_H
2#define TATOOINE_FIELDS_DETAIL_VORTEX_CORE_LINE_EXTRACTION_SUJUDI_HAIMES_H
3//==============================================================================
7//==============================================================================
9//==============================================================================
10template <typename Field, typename Real, typename DomainX, typename DomainY,
11 typename DomainZ>
13 vectorfield<Field, Real, 3> const& v, integral auto const t,
15 auto J = diff(v);
16 auto const filter_imaginary_eigenvalues = [&](auto const& x) {
17 auto jxt = J(x, t);
18 auto const lambdas = eigenvalues(jxt);
19 for (auto const lambda : lambdas) {
20 if (abs(lambda.imag()) > 1e-10) {
21 return true;
22 }
23 }
24 return false;
25 };
26 return parallel_vectors(v, J * v, g, t, execution_policy::parallel,
27 filter_imaginary_eigenvalues);
28}
29//==============================================================================
30template <typename Grid, typename Real, bool HasNonConstReference>
32 Grid, vec<Real, 3>, HasNonConstReference> const& v) {
33 auto J = diff(v);
34 // auto const filter_imaginary_eigenvalues = [&](auto const& x) {
35 // auto jxt = J(x, t);
36 // auto const lambdas = eigenvalues(jxt);
37 // for (auto const lambda : lambdas) {
38 // if (abs(lambda.imag()) > 1e-10) {
39 // return true;
40 // }
41 // }
42 // return false;
43 // };
44 return detail::calc_parallel_vectors<Real>(
45 // get vf data by evaluating V field
46 [&](auto const ix, auto const iy, auto const iz, auto const& /*p*/) {
47 return v(ix, iy, iz);
48 },
49 // get wf data by evaluating W field
50 [&](auto const ix, auto const iy, auto const iz, auto const& /*p*/) {
51 return J(ix, iy, iz) * v(ix, iy, iz);
52 },
54}
55//==============================================================================
56template <typename Grid, typename Real, bool HasNonConstReference>
58 Grid, Vec3<Real>, HasNonConstReference> const& v,
60 Grid, Mat3<Real>, HasNonConstReference> const& J) {
61 auto J_sampler = J.linear_sampler();
62 auto const filter_imaginary_eigenvalues = [&](auto const& x) {
63 auto jxt = J_sampler(x);
64 auto const lambdas = eigenvalues(jxt);
65 if (jxt.isnan()) {
66 std::cout << "==========\n";
67 std::cout << x << '\n';
68 std::cout << jxt << '\n';
69 std::cout << lambdas << '\n';
70 }
71 for (auto const lambda : lambdas) {
72 if (abs(lambda.imag()) > 1e-10) {
73 return true;
74 }
75 }
76 return false;
77 };
78 return detail::calc_parallel_vectors<Real>(
79 // get vf data by evaluating V field
80 [&](auto const ix, auto const iy, auto const iz, auto const& /*p*/) {
81 return v(ix, iy, iz);
82 },
83 // get wf data by evaluating W field
84 [&](auto const ix, auto const iy, auto const iz, auto const& /*p*/) {
85 return J(ix, iy, iz) * v(ix, iy, iz);
86 },
87 v.grid(), execution_policy::parallel, filter_imaginary_eigenvalues);
88}
89//==============================================================================
90} // namespace tatooine::detail::vortex_core_lines
91//==============================================================================
92#endif
Definition: rectilinear_grid.h:38
Definition: concepts.h:21
auto parallel_vectors(polymorphic::vectorfield< VReal, 3 > const &vf, polymorphic::vectorfield< WReal, 3 > const &wf, rectilinear_grid< XDomain, YDomain, ZDomain > const &g, TReal const t, execution_policy_tag auto const policy, Preds &&... preds)
This is an implementation of .
Definition: parallel_vectors.h:1043
Definition: sujudi_haimes.h:8
auto sujudi_haimes(vectorfield< Field, Real, 3 > const &v, integral auto const t, tatooine::rectilinear_grid< DomainX, DomainY, DomainZ > const &g)
Definition: sujudi_haimes.h:12
static constexpr parallel_t parallel
Definition: tags.h:60
constexpr auto abs(arithmetic auto const x)
Definition: math.h:26
constexpr auto eigenvalues(Mat &&A)
Definition: eigenvalues.h:85
constexpr auto diff(polynomial< Real, Degree > const &f)
Definition: polynomial.h:179
Definition: field.h:134
Definition: mat.h:14
Definition: vec.h:12