Skip to content

Commit d51e249

Browse files
revive indata tests
1 parent 854ba1d commit d51e249

3 files changed

Lines changed: 148 additions & 0 deletions

File tree

common/vmec_indata/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ cc_test(
1414
"//vmecpp/test_data:cth_like_free_bdy",
1515
"//vmecpp_large_cpp_tests/test_data:solovev",
1616
"//vmecpp_large_cpp_tests/test_data:solovev_analytical",
17+
"//vmecpp_large_cpp_tests/test_data:solovev_free_bdy",
1718
"//vmecpp_large_cpp_tests/test_data:solovev_no_axis",
1819
"//vmecpp_large_cpp_tests/test_data:cth_like_fixed_bdy",
1920
"//vmecpp_large_cpp_tests/test_data:cth_like_fixed_bdy_nzeta_37",

common/vmec_indata/vmec_indata_test.cc

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,125 @@ TEST(TestVmecINDATA, CheckParsingSolovevAnalytical) {
267267
}
268268
} // CheckParsingSolovevAnalytical
269269

270+
271+
TEST(TestVmecINDATA, CheckParsingSolovevFreeBdy) {
272+
absl::StatusOr<std::string> indata_json =
273+
ReadFile("vmecpp_large_cpp_tests/test_data/solovev_free_bdy.json");
274+
ASSERT_TRUE(indata_json.ok()) << indata_json.status().message();
275+
276+
const absl::StatusOr<VmecINDATA> vmec_indata =
277+
VmecINDATA::FromJson(*indata_json);
278+
ASSERT_TRUE(vmec_indata.ok());
279+
280+
// numerical resolution, symmetry assumption
281+
EXPECT_EQ(vmec_indata->lasym, false);
282+
EXPECT_EQ(vmec_indata->nfp, 1);
283+
EXPECT_EQ(vmec_indata->mpol, 6);
284+
EXPECT_EQ(vmec_indata->ntor, 0);
285+
EXPECT_EQ(vmec_indata->ntheta, 0);
286+
EXPECT_EQ(vmec_indata->nzeta, 0);
287+
288+
// multi-grid steps
289+
EXPECT_THAT(vmec_indata->ns_array, ElementsAre(5, 11, 55));
290+
EXPECT_THAT(vmec_indata->ftol_array, ElementsAre(1.0e-12, 1.0e-12, 1.0e-12));
291+
EXPECT_THAT(vmec_indata->niter_array, ElementsAre(1000, 2000, 2000));
292+
293+
// global physics parameters
294+
EXPECT_EQ(vmec_indata->phiedge, 1.0);
295+
EXPECT_EQ(vmec_indata->ncurr, 0);
296+
297+
// mass / pressure profile
298+
EXPECT_EQ(vmec_indata->pmass_type, "power_series");
299+
EXPECT_THAT(vmec_indata->am, ElementsAre(0.125, -0.125));
300+
EXPECT_EQ(vmec_indata->am_aux_s.size(), 0);
301+
EXPECT_EQ(vmec_indata->am_aux_f.size(), 0);
302+
EXPECT_EQ(vmec_indata->pres_scale, 1.0);
303+
EXPECT_EQ(vmec_indata->gamma, 0.0);
304+
EXPECT_EQ(vmec_indata->spres_ped, 1.0);
305+
306+
// (initial guess for) iota profile
307+
EXPECT_EQ(vmec_indata->piota_type, "power_series");
308+
EXPECT_THAT(vmec_indata->ai, ElementsAre(1.0));
309+
EXPECT_EQ(vmec_indata->ai_aux_s.size(), 0);
310+
EXPECT_EQ(vmec_indata->ai_aux_f.size(), 0);
311+
312+
// enclosed toroidal current profile
313+
EXPECT_EQ(vmec_indata->pcurr_type, "power_series");
314+
EXPECT_EQ(vmec_indata->ac.size(), 0);
315+
EXPECT_EQ(vmec_indata->ac_aux_s.size(), 0);
316+
EXPECT_EQ(vmec_indata->ac_aux_f.size(), 0);
317+
EXPECT_EQ(vmec_indata->curtor, 0.0);
318+
EXPECT_EQ(vmec_indata->bloat, 1.0);
319+
320+
// free-boundary parameters
321+
EXPECT_EQ(vmec_indata->lfreeb, true);
322+
EXPECT_EQ(vmec_indata->mgrid_file, "vmecpp_large_cpp_tests/mgrid_solovev.nc");
323+
EXPECT_THAT(vmec_indata->extcur, ElementsAre(3884526.409876309,
324+
-293557.7123737952,
325+
-17348.51853677043,
326+
60021.3701697316,
327+
60025.40940490887,
328+
-17349.93103183817,
329+
-293553.153630851,
330+
-356063.9108717275,
331+
-65884.34719283084,
332+
-11543.87774712987,
333+
-11535.46510755219,
334+
-65883.00858364606,
335+
-356058.9388468855));
336+
EXPECT_EQ(vmec_indata->nvacskip, 6);
337+
338+
// tweaking parameters
339+
EXPECT_EQ(vmec_indata->nstep, 250);
340+
EXPECT_THAT(vmec_indata->aphi, ElementsAre(1.0));
341+
EXPECT_EQ(vmec_indata->delt, 0.9);
342+
EXPECT_EQ(vmec_indata->tcon0, 1.0);
343+
EXPECT_EQ(vmec_indata->lforbal, false);
344+
345+
// initial guess for magnetic axis
346+
absl::StatusOr<std::string> axis_coefficients_csv =
347+
ReadFile("vmecpp_large_cpp_tests/test_data/axis_coefficients_solovev_free_bdy.csv");
348+
ASSERT_TRUE(axis_coefficients_csv.ok());
349+
350+
absl::StatusOr<CurveRZFourier> axis_coefficients =
351+
CurveRZFourierFromCsv(*axis_coefficients_csv);
352+
ASSERT_TRUE(axis_coefficients.ok());
353+
EXPECT_THAT(vmec_indata->raxis_c,
354+
ElementsAreArray(*CoefficientsRCos(*axis_coefficients)));
355+
EXPECT_THAT(vmec_indata->zaxis_s,
356+
ElementsAreArray(*CoefficientsZSin(*axis_coefficients)));
357+
if (vmec_indata->lasym) {
358+
EXPECT_THAT(*vmec_indata->raxis_s,
359+
ElementsAreArray(*CoefficientsRSin(*axis_coefficients)));
360+
EXPECT_THAT(*vmec_indata->zaxis_c,
361+
ElementsAreArray(*CoefficientsZCos(*axis_coefficients)));
362+
} else {
363+
EXPECT_FALSE(vmec_indata->raxis_s.has_value());
364+
EXPECT_FALSE(vmec_indata->zaxis_c.has_value());
365+
}
366+
367+
// (initial guess for) boundary shape
368+
absl::StatusOr<std::string> boundary_coefficients_csv =
369+
ReadFile("vmecpp_large_cpp_tests/test_data/boundary_coefficients_solovev_free_bdy.csv");
370+
ASSERT_TRUE(boundary_coefficients_csv.ok());
371+
absl::StatusOr<SurfaceRZFourier> boundary_coefficients =
372+
SurfaceRZFourierFromCsv(*boundary_coefficients_csv);
373+
ASSERT_TRUE(boundary_coefficients.ok());
374+
EXPECT_THAT(vmec_indata->rbc.transpose().reshaped(),
375+
ElementsAreArray(*CoefficientsRCos(*boundary_coefficients)));
376+
EXPECT_THAT(vmec_indata->zbs.transpose().reshaped(),
377+
ElementsAreArray(*CoefficientsZSin(*boundary_coefficients)));
378+
if (vmec_indata->lasym) {
379+
EXPECT_THAT(vmec_indata->rbs->transpose().reshaped(),
380+
ElementsAreArray(*CoefficientsRSin(*boundary_coefficients)));
381+
EXPECT_THAT(vmec_indata->zbc->transpose().reshaped(),
382+
ElementsAreArray(*CoefficientsZCos(*boundary_coefficients)));
383+
} else {
384+
EXPECT_FALSE(vmec_indata->rbs.has_value());
385+
EXPECT_FALSE(vmec_indata->zbc.has_value());
386+
}
387+
} // CheckParsingSolovevFreeBdy
388+
270389
TEST(TestVmecINDATA, CheckParsingSolovevNoAxis) {
271390
absl::StatusOr<std::string> indata_json =
272391
ReadFile("vmecpp/test_data/solovev_no_axis.json");

test_data/BUILD.bazel

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ filegroup(
55
name = "solovev",
66
visibility = ["//visibility:public"],
77
srcs = [
8+
"input.solovev",
9+
"solovev.json",
810
"axis_coefficients_solovev.csv",
911
"boundary_coefficients_solovev.csv",
1012
"jxbout_solovev.nc",
1113
"mercier.solovev",
1214
"threed1.solovev",
15+
"wout_solovev.nc",
1316
"solovev.out.h5",
1417
] + glob(["solovev/**/*.json"]),
1518
)
@@ -18,47 +21,59 @@ filegroup(
1821
name = "solovev_analytical",
1922
visibility = ["//visibility:public"],
2023
srcs = [
24+
"input.solovev_analytical",
25+
"solovev_analytical.json",
2126
"axis_coefficients_solovev_analytical.csv",
2227
"boundary_coefficients_solovev_analytical.csv",
2328
"jxbout_solovev_analytical.nc",
2429
"mercier.solovev_analytical",
2530
"threed1.solovev_analytical",
31+
"wout_solovev_analytical.nc",
2632
] + glob(["solovev_analytical/**/*.json"]),
2733
)
2834

2935
filegroup(
3036
name = "solovev_free_bdy",
3137
visibility = ["//visibility:public"],
3238
srcs = [
39+
"input.solovev_free_bdy",
40+
"solovev_free_bdy.json",
3341
"axis_coefficients_solovev_free_bdy.csv",
3442
"boundary_coefficients_solovev_free_bdy.csv",
3543
"jxbout_solovev_free_bdy.nc",
3644
"mercier.solovev_free_bdy",
3745
"threed1.solovev_free_bdy",
46+
"wout_solovev_free_bdy.nc",
3847
] + glob(["solovev_free_bdy/**/*.json"]),
3948
)
4049

4150
filegroup(
4251
name = "solovev_no_axis",
4352
visibility = ["//visibility:public"],
4453
srcs = [
54+
"input.solovev_no_axis",
55+
"solovev_no_axis.json",
4556
"axis_coefficients_solovev_no_axis.csv",
4657
"boundary_coefficients_solovev_no_axis.csv",
4758
"jxbout_solovev_no_axis.nc",
4859
"mercier.solovev_no_axis",
4960
"threed1.solovev_no_axis",
61+
"wout_solovev_no_axis.nc",
5062
] + glob(["solovev_no_axis/**/*.json"]),
5163
)
5264

5365
filegroup(
5466
name = "cth_like_fixed_bdy",
5567
visibility = ["//visibility:public"],
5668
srcs = [
69+
"input.cth_like_fixed_bdy",
70+
"cth_like_fixed_bdy.json",
5771
"axis_coefficients_cth_like_fixed_bdy.csv",
5872
"boundary_coefficients_cth_like_fixed_bdy.csv",
5973
"jxbout_cth_like_fixed_bdy.nc",
6074
"mercier.cth_like_fixed_bdy",
6175
"threed1.cth_like_fixed_bdy",
76+
"wout_cth_like_fixed_bdy.nc",
6277
"cth_like_fixed_bdy.out.h5",
6378
] + glob(["cth_like_fixed_bdy/**/*.json"]),
6479
)
@@ -67,34 +82,47 @@ filegroup(
6782
name = "cth_like_fixed_bdy_nzeta_37",
6883
visibility = ["//visibility:public"],
6984
srcs = [
85+
"input.cth_like_fixed_bdy_nzeta_37",
86+
"cth_like_fixed_bdy_nzeta_37.json",
7087
"axis_coefficients_cth_like_fixed_bdy_nzeta_37.csv",
7188
"boundary_coefficients_cth_like_fixed_bdy_nzeta_37.csv",
7289
"jxbout_cth_like_fixed_bdy_nzeta_37.nc",
7390
"mercier.cth_like_fixed_bdy_nzeta_37",
7491
"threed1.cth_like_fixed_bdy_nzeta_37",
92+
"wout_cth_like_fixed_bdy_nzeta_37.nc",
7593
] + glob(["cth_like_fixed_bdy_nzeta_37/**/*.json"]),
7694
)
7795

7896
filegroup(
7997
name = "cma",
8098
visibility = ["//visibility:public"],
8199
srcs = [
100+
"input.cma",
101+
"cma.json",
82102
"axis_coefficients_cma.csv",
83103
"boundary_coefficients_cma.csv",
104+
"jxbout_cma.nc",
84105
"mercier.cma",
85106
"threed1.cma",
107+
"wout_cma.nc",
86108
] + glob(["cma/**/*.json"]),
87109
)
88110

89111
filegroup(
90112
name = "cth_like_free_bdy",
91113
visibility = ["//visibility:public"],
92114
srcs = [
115+
"coils.cth_like",
116+
"makegrid_parameters_cth_like.json",
117+
"mgrid_cth_like.nc",
118+
"input.cth_like_free_bdy",
119+
"cth_like_free_bdy.json",
93120
"axis_coefficients_cth_like_free_bdy.csv",
94121
"boundary_coefficients_cth_like_free_bdy.csv",
95122
"jxbout_cth_like_free_bdy.nc",
96123
"mercier.cth_like_free_bdy",
97124
"threed1.cth_like_free_bdy",
125+
"wout_cth_like_free_bdy.nc",
98126
] + glob(["cth_like_free_bdy/**/*.json"]),
99127
)
100128

0 commit comments

Comments
 (0)