7 virtual Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &) = 0;
8 virtual Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &) = 0;
9 virtual Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &) = 0;
10 virtual Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &) = 0;
11 virtual Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &) = 0;
19 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
21 const double X = x[0], Y = x[1];
22 const double ct = std::cos(
_t), st = std::sin(
_t);
24 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct + X*X + Y*Y + 1 - 2*X*st};
26 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct - X*X - Y*Y - 1 + 2*X*st};
29 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
31 const double X = x[0], Y = x[1];
32 const double ct = std::cos(
_t), st = std::sin(
_t);
34 return Eigen::Vector<double,2>{
35 Y*(-2*X*ct + (-X*X - Y*Y + 2)*st)/4,
36 X*(X*X + Y*Y - 2)*st/4 + (3*X*X + Y*Y - 3)*ct/4
39 return Eigen::Vector<double,2>{
40 Y*(2*X*ct + (-X*X - Y*Y + 2)*st)/4,
41 X*(X*X + Y*Y - 2)*st/4 - (3*X*X + Y*Y - 3)*ct/4
45 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
47 const double X = x[0], Y = x[1];
48 const double ct = std::cos(
_t), st = std::sin(
_t);
50 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*st + 2*X*ct};
52 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*st - 2*X*ct};
55 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
57 return Eigen::Vector<double,1>{0.};
59 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
61 const double X = x[0], Y = x[1];
62 const double ct = std::cos(
_t), st = std::sin(
_t);
64 double tmpJN = 3*(std::pow(X*X + Y*Y,2)/2. + X*X + Y*Y + 0.5)
65 + (1.5*std::pow(X*X + Y*Y,2) + 1.25*(X*X + Y*Y) - 1)*ct;
66 return Eigen::Vector<double,2>{
67 Y*tmpJN - X*Y*(2*X*X + 2*Y*Y + 2.5)*st,
68 -X*tmpJN + (10*std::pow(X,4) + 12*X*X*Y*Y + 15*X*X + 2*std::pow(Y,4) + 5*Y*Y - 1)*st/4.
71 double tmpJS = 3*(std::pow(X*X + Y*Y,2)/2. + X*X + Y*Y + 0.5)
72 - (1.5*std::pow(X*X + Y*Y,2) + 1.25*(X*X + Y*Y) - 1)*ct;
73 return Eigen::Vector<double,2>{
74 -Y*tmpJS + X*Y*(2*X*X + 2*Y*Y + 2.5)*st,
75 X*tmpJS - (10*std::pow(X,4) + 12*X*X*Y*Y + 15*X*X + 2*std::pow(Y,4) + 5*Y*Y - 1)*st/4.
83 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
85 const double X = x[0], Y = x[1];
86 const double ct = std::cos(
_t), st = std::sin(
_t);
88 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct + X*X + Y*Y + 1 - 2*X*st}
89 *std::pow(2./(1.+X*X+Y*Y),3);
91 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct - X*X - Y*Y - 1 + 2*X*st}
92 *std::pow(2./(1.+X*X+Y*Y),3);
95 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
97 return Eigen::Vector<double,2>{0.,0.};
99 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
101 return Eigen::Vector<double,1>{0.};
103 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
105 return Eigen::Vector<double,1>{0.};
107 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
109 return Eigen::Vector<double,2>{0.,0.};
115 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
117 const double X = x[0], Y = x[1];
118 const double ct = std::cos(
_t), st = std::sin(
_t);
120 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct + X*X + Y*Y + 1 - 2*X*st}
121 *std::pow(2./(1.+X*X+Y*Y),3);
123 return Eigen::Vector<double,1>{(X*X + Y*Y - 1)*ct - X*X - Y*Y - 1 + 2*X*st}
124 *std::pow(2./(1.+X*X+Y*Y),3);
127 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
130 return Eigen::Vector<double,2>{1.,0.};
132 return Eigen::Vector<double,2>{1.,0.};
135 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
137 return Eigen::Vector<double,1>{0.};
139 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
141 return Eigen::Vector<double,1>{0.};
143 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
145 return Eigen::Vector<double,2>{0.,0.};
151 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
153 return Eigen::Vector<double,1>{0.};
156 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
158 return Eigen::Vector<double,2>{0.,0.};
160 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
162 return Eigen::Vector<double,1>{0.};
164 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
166 const double X = x[0], Y = x[1];
167 constexpr
double t_0 = 0.8;
168 double ct = std::cos(t_0), st = std::sin(t_0);
169 double r2 = X*X + Y*Y;
171 double val = 2.*(1. - (2.*X*st + (1. - r2)*ct)/(1. + r2));
172 return Eigen::Vector<double,1>{(val > 3.8)? val : 0.};
174 double val = 2.*(1. - (2.*X*st - (1. - r2)*ct)/(1. + r2));
175 return Eigen::Vector<double,1>{(val > 3.8)? val : 0.};
178 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
180 return Eigen::Vector<double,2>{0.,0.};
185 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
187 return Eigen::Vector<double,1>{0.};
189 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
191 return Eigen::Vector<double,2>{0.,0.};
193 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
195 return Eigen::Vector<double,1>{0.};
197 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
199 const double sqrt2 = std::sqrt(2);
200 const double X = x[0], r = x[0]*x[0]+x[1]*x[1];
202 const double Da = (r*(sqrt2 + 2) - sqrt2*(1 + 2*X) + 2)/(r + 1);
204 constexpr
double tau = 100.;
205 const double t = (
_t < 1./tau)? tau*10.*
_t : 0.;
206 return Eigen::Vector<double,1>{t*std::exp(-1./(0.5-Da))};
209 return Eigen::Vector<double,1>{0.};
211 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
213 return Eigen::Vector<double,2>{0.,0.};
218 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
220 const double sqrt2 = std::sqrt(2);
221 const double X = x[0], r = x[0]*x[0]+x[1]*x[1];
223 const double Da = (r*(sqrt2 + 2) - sqrt2*(1 + 2*X) + 2)/(r + 1);
225 return Eigen::Vector<double,1>{20*std::exp(-1./(0.5-Da))};
228 return Eigen::Vector<double,1>{0.};
230 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
232 return Eigen::Vector<double,2>{0.,0.};
234 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
236 return Eigen::Vector<double,1>{0.};
238 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
240 return Eigen::Vector<double,1>{0.};
242 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
244 return Eigen::Vector<double,2>{0.,0.};
250 Eigen::Vector<double,1>
B (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
252 const double X2 = x[0]*x[0], Y2 = x[1]*x[1];
255 const double tmp = std::cos(std::numbers::sqrt2*
_t)*(1-X2-Y2)/(1+X2+Y2)*4/std::pow(1+X2+Y2,2);
256 return Eigen::Vector<double,1>{tmp};
258 Eigen::Vector<double,2>
E (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
260 const double X2 = x[0]*x[0], Y2 = x[1]*x[1];
261 const double tmp = std::sin(std::numbers::sqrt2*
_t)/std::numbers::sqrt2*4./(1+X2+Y2)/(1+X2+Y2);
262 return Eigen::Vector<double,2>{-x[1],x[0]}*tmp;
264 Eigen::Vector<double,1>
dE (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
266 const double X2 = x[0]*x[0], Y2 = x[1]*x[1];
269 const double tmp = std::numbers::sqrt2*std::sin(std::numbers::sqrt2*
_t)*(1-X2-Y2)/(1+X2+Y2)*4/std::pow(1+X2+Y2,2);
270 return Eigen::Vector<double,1>{tmp};
272 Eigen::Vector<double,1>
rho (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
274 return Eigen::Vector<double,1>{0.};
276 Eigen::Vector<double,2>
J (
size_t map_id,
const Eigen::Vector<double,2> &x)
override
278 return Eigen::Vector<double,2>{0.,0.};
Definition: sphere_ref.hpp:18
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:45
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:59
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:19
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:29
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:55
Definition: sphere_ref.hpp:81
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:83
Solution1()
Definition: sphere_ref.hpp:82
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:103
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:99
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:107
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:95
Definition: sphere_ref.hpp:113
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:115
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:135
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:127
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:139
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:143
Solution2()
Definition: sphere_ref.hpp:114
Definition: sphere_ref.hpp:149
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:156
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:178
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:160
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:164
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:151
Solution3()
Definition: sphere_ref.hpp:150
Definition: sphere_ref.hpp:184
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:185
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:197
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:193
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:189
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:211
Definition: sphere_ref.hpp:217
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:242
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:230
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:234
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:238
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:218
Definition: sphere_ref.hpp:248
Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:250
Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:272
Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:258
Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:276
Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &x) override
Definition: sphere_ref.hpp:264
SolutionL1()
Definition: sphere_ref.hpp:249
Definition: sphere_ref.hpp:6
virtual Eigen::Vector< double, 2 > J(size_t map_id, const Eigen::Vector< double, 2 > &)=0
virtual Eigen::Vector< double, 1 > rho(size_t map_id, const Eigen::Vector< double, 2 > &)=0
virtual Eigen::Vector< double, 2 > E(size_t map_id, const Eigen::Vector< double, 2 > &)=0
double _t
Definition: sphere_ref.hpp:12
virtual ~Solution()
Definition: sphere_ref.hpp:15
Solution(bool Jz)
Definition: sphere_ref.hpp:14
virtual Eigen::Vector< double, 1 > dE(size_t map_id, const Eigen::Vector< double, 2 > &)=0
bool _JZero
Definition: sphere_ref.hpp:13
virtual Eigen::Vector< double, 1 > B(size_t map_id, const Eigen::Vector< double, 2 > &)=0