@@ -49,12 +49,11 @@ void Naive::init(std::string_view equilibriumName) {
49
49
moments_K (kx, ky, A_PAR) = aParEq_K (kx, ky);
50
50
ueKPar_K (kx, ky) = -kPerp2 (kx, ky) * moments_K (kx, ky, A_PAR);
51
51
});
52
- derivatives (phi_K, dPhi);
53
- derivatives (ueKPar_K, dUEKPar);
52
+ br. derivatives (phi_K, dPhi);
53
+ br. derivatives (ueKPar_K, dUEKPar);
54
54
for (int m = 0 ; m < g.M ; ++m) {
55
- derivatives (momentK (m), Grid::sliceXY (dGM, m));
55
+ br. derivatives (momentK (m), Grid::sliceXY (dGM, m));
56
56
}
57
-
58
57
}
59
58
60
59
void Naive::run (Dim N, Dim saveInterval) {
@@ -92,8 +91,8 @@ void Naive::run(Dim N, Dim saveInterval) {
92
91
auto GM_K_Star = g.cBufMXY (), GM_Nonlinear_K = g.cBufMXY ();
93
92
94
93
// Compute N
95
- auto bracketPhiNE_K = halfBracket (dPhi, Grid::sliceXY (dGM, N_E));
96
- auto bracketAParUEKPar_K = halfBracket (Grid::sliceXY (dGM, A_PAR), dUEKPar);
94
+ auto bracketPhiNE_K = br. halfBracket (dPhi, Grid::sliceXY (dGM, N_E));
95
+ auto bracketAParUEKPar_K = br. halfBracket (Grid::sliceXY (dGM, A_PAR), dUEKPar);
97
96
98
97
// Compute A
99
98
auto dPhiNeG2 = g.dBufXY ();
@@ -111,8 +110,8 @@ void Naive::run(Dim N, Dim saveInterval) {
111
110
});
112
111
}
113
112
114
- auto bracketAParPhiG2Ne_K = halfBracket (Grid::sliceXY (dGM, A_PAR), dPhiNeG2);
115
- auto bracketUEParPhi_K = halfBracket (dUEKPar, dPhi);
113
+ auto bracketAParPhiG2Ne_K = br. halfBracket (Grid::sliceXY (dGM, A_PAR), dPhiNeG2);
114
+ auto bracketUEParPhi_K = br. halfBracket (dUEKPar, dPhi);
116
115
117
116
g.for_each_kxky ([&](Dim kx, Dim ky) {
118
117
GM_Nonlinear_K (kx, ky, N_E) =
@@ -131,21 +130,22 @@ void Naive::run(Dim N, Dim saveInterval) {
131
130
132
131
if (g.M > 2 ) {
133
132
// Compute G2
134
- auto bracketPhiG2_K = halfBracket (dPhi, Grid::sliceXY (dGM, G_MIN));
135
- auto bracketAParG3_K = halfBracket (Grid::sliceXY (dGM, A_PAR), Grid::sliceXY (dGM, G_MIN + 1 ));
133
+ auto bracketPhiG2_K = br.halfBracket (dPhi, Grid::sliceXY (dGM, G_MIN));
134
+ auto bracketAParG3_K =
135
+ br.halfBracket (Grid::sliceXY (dGM, A_PAR), Grid::sliceXY (dGM, G_MIN + 1 ));
136
136
137
137
// Compute G_{M-1}
138
- auto bracketPhiGLast_K = halfBracket (dPhi, Grid::sliceXY (dGM, LAST));
139
- auto bracketAParGLast_K = halfBracket (Grid::sliceXY (dGM, A_PAR), Grid::sliceXY (dGM, LAST));
138
+ auto bracketPhiGLast_K = br. halfBracket (dPhi, Grid::sliceXY (dGM, LAST));
139
+ auto bracketAParGLast_K = br. halfBracket (Grid::sliceXY (dGM, A_PAR), Grid::sliceXY (dGM, LAST));
140
140
g.for_each_kxky ([&](Dim kx, Dim ky) {
141
141
bracketAParGLast_K (kx, ky) *= nonlinear::GLastBracketFactor (g.M , kPerp2 (kx, ky), hyper);
142
142
bracketAParGLast_K (kx, ky) += rhoS / de * std::sqrt (LAST) * moments_K (kx, ky, LAST - 1 );
143
143
// TODO Viriato adds this after the derivative
144
144
});
145
145
146
146
auto dBrLast = g.dBufXY ();
147
- derivatives (bracketAParGLast_K, dBrLast);
148
- auto bracketTotalGLast_K = halfBracket (Grid::sliceXY (dGM, A_PAR), dBrLast);
147
+ br. derivatives (bracketAParGLast_K, dBrLast);
148
+ auto bracketTotalGLast_K = br. halfBracket (Grid::sliceXY (dGM, A_PAR), dBrLast);
149
149
150
150
g.for_each_kxky ([&](Dim kx, Dim ky) {
151
151
GM_Nonlinear_K (kx, ky, G_MIN) = nonlinear::G2 (
@@ -172,8 +172,8 @@ void Naive::run(Dim N, Dim saveInterval) {
172
172
std::sqrt (m) * dGM.DY (x, y, m - 1 ) + std::sqrt (m + 1 ) * dGM.DY (x, y, m + 1 );
173
173
});
174
174
175
- auto bracketAParGMMinusPlus_K = halfBracket (Grid::sliceXY (dGM, A_PAR), dGMinusPlus);
176
- auto bracketPhiGM_K = halfBracket (dPhi, Grid::sliceXY (dGM, m));
175
+ auto bracketAParGMMinusPlus_K = br. halfBracket (Grid::sliceXY (dGM, A_PAR), dGMinusPlus);
176
+ auto bracketPhiGM_K = br. halfBracket (dPhi, Grid::sliceXY (dGM, m));
177
177
178
178
g.for_each_kxky ([&](Dim kx, Dim ky) {
179
179
GM_Nonlinear_K (kx, ky, m) =
@@ -198,12 +198,12 @@ void Naive::run(Dim N, Dim saveInterval) {
198
198
199
199
auto dPhi_Loop = g.dBufXY (), dUEKPar_Loop = g.dBufXY ();
200
200
auto dGM_Loop = g.dBufMXY ();
201
- derivatives (phi_K_New, dPhi_Loop);
202
- derivatives (ueKPar_K_New, dUEKPar_Loop);
201
+ br. derivatives (phi_K_New, dPhi_Loop);
202
+ br. derivatives (ueKPar_K_New, dUEKPar_Loop);
203
203
204
204
for (int m = 0 ; m < g.M ; ++m) {
205
205
// TODO(OPT) not necessary if we bail (only up to G_MIN)
206
- derivatives (Grid::sliceXY (GM_K_Star, m), Grid::sliceXY (dGM_Loop, m));
206
+ br. derivatives (Grid::sliceXY (GM_K_Star, m), Grid::sliceXY (dGM_Loop, m));
207
207
}
208
208
209
209
// Corrector loop
@@ -221,7 +221,7 @@ void Naive::run(Dim N, Dim saveInterval) {
221
221
222
222
for (int p = 0 ; p <= MaxP; ++p) {
223
223
auto DerivateNewMoment = [&](Dim m) {
224
- derivatives (Grid::sliceXY (momentsNew_K, m), Grid::sliceXY (dGM_Loop, m));
224
+ br. derivatives (Grid::sliceXY (momentsNew_K, m), Grid::sliceXY (dGM_Loop, m));
225
225
};
226
226
227
227
// First, compute A_par
@@ -240,8 +240,9 @@ void Naive::run(Dim N, Dim saveInterval) {
240
240
}
241
241
});
242
242
243
- auto bracketAParPhiG2Ne_K_Loop = halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dPhiNeG2_Loop);
244
- auto bracketUEParPhi_K_Loop = halfBracket (dUEKPar_Loop, dPhi_Loop);
243
+ auto bracketAParPhiG2Ne_K_Loop =
244
+ br.halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dPhiNeG2_Loop);
245
+ auto bracketUEParPhi_K_Loop = br.halfBracket (dUEKPar_Loop, dPhi_Loop);
245
246
246
247
// / f_pred from Viriato
247
248
auto GM_Nonlinear_K_Loop = g.cBufMXY ();
@@ -275,10 +276,10 @@ void Naive::run(Dim N, Dim saveInterval) {
275
276
// TODO(OPT) bail if relative error is large
276
277
277
278
DerivateNewMoment (A_PAR);
278
- derivatives (ueKPar_K_New, dUEKPar_Loop);
279
+ br. derivatives (ueKPar_K_New, dUEKPar_Loop);
279
280
280
- auto bracketPhiNE_K_Loop = halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, N_E));
281
- auto bracketAParUEKPar_K_Loop = halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dUEKPar_Loop);
281
+ auto bracketPhiNE_K_Loop = br. halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, N_E));
282
+ auto bracketAParUEKPar_K_Loop = br. halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dUEKPar_Loop);
282
283
283
284
g.for_each_kxky ([&](Dim kx, Dim ky) {
284
285
GM_Nonlinear_K_Loop (kx, ky, N_E) =
@@ -293,13 +294,13 @@ void Naive::run(Dim N, Dim saveInterval) {
293
294
(kx | ky) == 0 ? 0 : nonlinear::phi (momentsNew_K (kx, ky, N_E), kPerp2 (kx, ky));
294
295
});
295
296
296
- derivatives (phi_K_New, dPhi_Loop);
297
+ br. derivatives (phi_K_New, dPhi_Loop);
297
298
DerivateNewMoment (N_E);
298
299
if (g.M > 2 ) {
299
300
// Compute G2
300
- auto bracketPhiG2_K_Loop = halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, G_MIN));
301
+ auto bracketPhiG2_K_Loop = br. halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, G_MIN));
301
302
auto bracketAParG3_K_Loop =
302
- halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), Grid::sliceXY (dGM_Loop, G_MIN + 1 ));
303
+ br. halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), Grid::sliceXY (dGM_Loop, G_MIN + 1 ));
303
304
304
305
g.for_each_kxky ([&](Dim kx, Dim ky) {
305
306
GM_Nonlinear_K_Loop (kx, ky, G_MIN) =
@@ -323,8 +324,8 @@ void Naive::run(Dim N, Dim saveInterval) {
323
324
});
324
325
325
326
auto bracketAParGMMinusPlus_K_Loop =
326
- halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dGMinusPlus_Loop);
327
- auto bracketPhiGM_K_Loop = halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, m));
327
+ br. halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dGMinusPlus_Loop);
328
+ auto bracketPhiGM_K_Loop = br. halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, m));
328
329
329
330
g.for_each_kxky ([&](Dim kx, Dim ky) {
330
331
GM_Nonlinear_K_Loop (kx, ky, m) = nonlinear::GM (m, bracketPhiGM_K_Loop (kx, ky),
@@ -341,9 +342,9 @@ void Naive::run(Dim N, Dim saveInterval) {
341
342
}
342
343
343
344
// Compute G_{M-1}
344
- auto bracketPhiGLast_K_Loop = halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, LAST));
345
+ auto bracketPhiGLast_K_Loop = br. halfBracket (dPhi_Loop, Grid::sliceXY (dGM_Loop, LAST));
345
346
auto bracketAParGLast_K_Loop =
346
- halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), Grid::sliceXY (dGM_Loop, LAST));
347
+ br. halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), Grid::sliceXY (dGM_Loop, LAST));
347
348
g.for_each_kxky ([&](Dim kx, Dim ky) {
348
349
bracketAParGLast_K_Loop (kx, ky) *=
349
350
nonlinear::GLastBracketFactor (g.M , kPerp2 (kx, ky), hyper);
@@ -353,8 +354,9 @@ void Naive::run(Dim N, Dim saveInterval) {
353
354
});
354
355
355
356
DxDy<Buf::R_XY> dBrLast_Loop = g.dBufXY ();
356
- derivatives (bracketAParGLast_K_Loop, dBrLast_Loop);
357
- auto bracketTotalGLast_K_Loop = halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dBrLast_Loop);
357
+ br.derivatives (bracketAParGLast_K_Loop, dBrLast_Loop);
358
+ auto bracketTotalGLast_K_Loop =
359
+ br.halfBracket (Grid::sliceXY (dGM_Loop, A_PAR), dBrLast_Loop);
358
360
359
361
g.for_each_kxky ([&](Dim kx, Dim ky) {
360
362
GM_Nonlinear_K_Loop (kx, ky, LAST) =
@@ -404,7 +406,8 @@ void Naive::run(Dim N, Dim saveInterval) {
404
406
this ->elapsedT += dt;
405
407
406
408
// Update dt
407
- Real tempDt = getTimestep (dPhi_Loop, Grid::sliceXY (dGM_Loop, N_E), Grid::sliceXY (dGM_Loop, A_PAR));
409
+ Real tempDt =
410
+ getTimestep (dPhi_Loop, Grid::sliceXY (dGM_Loop, N_E), Grid::sliceXY (dGM_Loop, A_PAR));
408
411
dt = updateTimestep (dt, tempDt, noInc, relative_error);
409
412
hyper = HyperCoefficients::calculate (dt, g);
410
413
@@ -431,8 +434,9 @@ void Naive::run(Dim N, Dim saveInterval) {
431
434
// Log moment values when level is trace (most verbose)
432
435
433
436
for (Dim m = 0 ; m < g.M ; ++m) {
434
- spdlog::trace (" t={} m={}:\n {}" , t, m,
435
- fmt::streamed (ostream_tuple (std::setprecision (16 ), Grid::sliceXY (moments_K, m))));
437
+ spdlog::trace (
438
+ " t={} m={}:\n {}" , t, m,
439
+ fmt::streamed (ostream_tuple (std::setprecision (16 ), Grid::sliceXY (moments_K, m))));
436
440
}
437
441
}
438
442
@@ -475,31 +479,6 @@ Naive::Buf::R_XY Naive::getMoment(Dim m) const {
475
479
return out;
476
480
}
477
481
478
- [[nodiscard]] Naive::Buf::C_XY Naive::fullBracket (View::C_XY op1, View::C_XY op2) {
479
- auto derOp1 = g.dBufXY (), derOp2 = g.dBufXY ();
480
- derivatives (op1, derOp1);
481
- derivatives (op2, derOp2);
482
-
483
- return halfBracket (derOp1, derOp2);
484
- }
485
-
486
- void Naive::derivatives (const View::C_XY &op, Naive::DxDy<View::R_XY> output) {
487
- DxDy<Buf::C_XY> Der_K{g.KX , g.KY };
488
- prepareDXY_PH (op, Der_K.DX , Der_K.DY );
489
- tf.bfft (Der_K.DX .to_mdspan (), output.DX );
490
- tf.bfft (Der_K.DY .to_mdspan (), output.DY );
491
- }
492
-
493
- Naive::Buf::C_XY Naive::halfBracket (Naive::DxDy<View::R_XY> derOp1,
494
- Naive::DxDy<View::R_XY> derOp2) {
495
- Buf::R_XY br = g.rBufXY ();
496
- Buf::C_XY br_K = g.cBufXY ();
497
- bracket (derOp1, derOp2, br);
498
- fftHL (br.to_mdspan (), br_K.to_mdspan ());
499
- br_K (0 , 0 ) = 0 ;
500
- return br_K;
501
- }
502
-
503
482
Naive::Energies Naive::calculateEnergies () const {
504
483
Energies e{};
505
484
g.for_each_kxky ([&](Dim kx, Dim ky) {
0 commit comments