@@ -11,9 +11,13 @@ std::vector<arma_cube> calc_gradient_vector(arma_cube value_scgc, Grid grid) {
11
11
12
12
std::vector<arma_cube> gradient_vcgc;
13
13
14
- gradient_vcgc.push_back (calc_gradient_lon (value_scgc, grid));
15
- gradient_vcgc.push_back (calc_gradient_lat (value_scgc, grid));
16
- gradient_vcgc.push_back (calc_gradient_alt (value_scgc, grid));
14
+ if (input.get_is_cubesphere ()) {
15
+ gradient_vcgc = calc_gradient_cubesphere (value_scgc, grid);
16
+ } else {
17
+ gradient_vcgc.push_back (calc_gradient_lon (value_scgc, grid));
18
+ gradient_vcgc.push_back (calc_gradient_lat (value_scgc, grid));
19
+ gradient_vcgc.push_back (calc_gradient_alt (value_scgc, grid));
20
+ }
17
21
return gradient_vcgc;
18
22
}
19
23
@@ -211,7 +215,6 @@ std::vector<arma_cube> calc_gradient_cubesphere(arma_cube value, Grid grid) {
211
215
}
212
216
}
213
217
}
214
-
215
218
// We then use A transformation matrices to convert grad_xy to grad_latlon
216
219
// Ref -> Physical, we use A matrix
217
220
grad_lon.slice (iAlt) = grad_x_curr % grid.A11_inv_scgc .slice (
@@ -224,6 +227,7 @@ std::vector<arma_cube> calc_gradient_cubesphere(arma_cube value, Grid grid) {
224
227
std::vector<arma_cube> gradient;
225
228
gradient.push_back (grad_lon);
226
229
gradient.push_back (grad_lat);
230
+ gradient.push_back (calc_gradient_alt (value, grid));
227
231
228
232
return gradient;
229
233
}
0 commit comments