@@ -604,14 +604,14 @@ def save(self, out_path: str | Path) -> None:
604
604
with netCDF4 .Dataset (out_path , "w" , format = "NETCDF3_CLASSIC" ) as fnc :
605
605
# scalar ints
606
606
for varname in [
607
- "ier_flag" ,
608
- "niter" ,
609
607
"nfp" ,
610
608
"ns" ,
611
609
"mpol" ,
612
610
"ntor" ,
613
611
"mnmax" ,
614
612
"mnmax_nyq" ,
613
+ "niter" ,
614
+ "ier_flag" ,
615
615
"signgs" ,
616
616
"nextcur" ,
617
617
]:
@@ -626,6 +626,7 @@ def save(self, out_path: str | Path) -> None:
626
626
for varname in [
627
627
"wb" ,
628
628
"wp" ,
629
+ "gamma" ,
629
630
"rmax_surf" ,
630
631
"rmin_surf" ,
631
632
"zmax_surf" ,
@@ -643,25 +644,40 @@ def save(self, out_path: str | Path) -> None:
643
644
"Aminor_p" ,
644
645
"Rmajor_p" ,
645
646
"volume_p" ,
647
+ "ftolv" ,
648
+ "fsql" ,
646
649
"fsqr" ,
647
650
"fsqz" ,
648
- "fsql" ,
649
- "ftolv" ,
650
- "gamma" ,
651
651
]:
652
652
fnc .createVariable (varname , np .float64 )
653
653
fnc [varname ][:] = getattr (self , varname )
654
654
655
- # create dimensions
655
+ # create dimensions (in the same order as VMEC2000)
656
+ # For the input extension
657
+ fnc .createDimension ("dim_00100" , 100 )
658
+ # dim_00200 = mgrid_file_max_string_length
659
+ fnc .createDimension ("dim_00200" , 200 )
660
+ # dim_00020 = profile_strings_max_len
661
+ fnc .createDimension ("dim_00020" , 20 )
662
+ if self .lfreeb :
663
+ assert self .nextcur > 0
664
+ fnc .createDimension ("ext_current" , self .nextcur )
665
+ # and a single character for mgrid_mode
666
+ fnc .createDimension ("dim_00001" , 1 )
656
667
fnc .createDimension ("mn_mode" , self .mnmax )
657
- fnc .createDimension ("radius" , self .ns )
658
- fnc .createDimension ("n_tor" , self .ntor + 1 ) # Fortran quirk
659
668
fnc .createDimension ("mn_mode_nyq" , self .mnmax_nyq )
669
+ fnc .createDimension ("n_tor" , self .ntor + 1 ) # Fortran quirk
660
670
fnc .createDimension ("preset" , _PRESET_DIM )
661
671
fnc .createDimension ("ndfmax" , _NDF_MAX_DIM )
662
- if self .lfreeb :
663
- assert self .nextcur > 0
664
- fnc .createDimension ("ext_current" , self .nextcur )
672
+ fnc .createDimension ("radius" , self .ns )
673
+
674
+ # Dimensions that are not in use yet
675
+ _TIME = 100
676
+ _MN_MAX_POT = 100 # TODO(jurasic) self.mnmaxpot
677
+ fnc .createDimension ("time" , _TIME )
678
+ fnc .createDimension ("mn_mode_pot" , _MN_MAX_POT )
679
+ fnc .createDimension ("current_label" , 30 )
680
+ fnc .createDimension ("dim_00006" , 6 )
665
681
666
682
# radial profiles
667
683
for varname in [
@@ -727,8 +743,8 @@ def save(self, out_path: str | Path) -> None:
727
743
fnc [varname ][:] = getattr (self , varname )[:]
728
744
729
745
for varname in [
730
- "bmnc" ,
731
746
"gmnc" ,
747
+ "bmnc" ,
732
748
"bsubumnc" ,
733
749
"bsubvmnc" ,
734
750
"bsubsmns" ,
@@ -763,12 +779,10 @@ def save(self, out_path: str | Path) -> None:
763
779
fnc ["version_" ][:] = self .version_
764
780
765
781
# strings
766
- # maximum length of the string, copied from wout_cma.nc
767
- max_string_length = 20
768
-
769
782
def create_string_variable (
770
- varname : str , max_string_length : int , dimension_name : str
783
+ varname : str , dimension_name : str
771
784
) -> netCDF4 .Variable :
785
+ max_string_length = fnc .dimensions [dimension_name ].size
772
786
string_variable = fnc .createVariable (varname , "S1" , (dimension_name ,))
773
787
774
788
# Put the string in the format netCDF3 requires. Don't know what to say.
@@ -782,23 +796,11 @@ def create_string_variable(
782
796
string_variable [:] = padded_value_as_netcdf3_compatible_chararray
783
797
return string_variable
784
798
785
- fnc .createDimension ("profile_strings_max_len" , max_string_length )
786
799
for varname in ["pcurr_type" , "pmass_type" , "piota_type" ]:
787
- create_string_variable (
788
- varname , max_string_length , "profile_strings_max_len"
789
- )
800
+ create_string_variable (varname , "dim_00020" )
790
801
791
- # now mgrid_file
792
- max_string_length = 200 # value copied from wout_cma.nc
793
- fnc .createDimension ("mgrid_file_max_string_length" , max_string_length )
794
- create_string_variable (
795
- "mgrid_file" , max_string_length , "mgrid_file_max_string_length"
796
- )
797
-
798
- # and a single character for mgrid_mode
799
- max_string_length = 1 # value copied from wout_cma.nc
800
- fnc .createDimension ("mgrid_mode_length" , max_string_length )
801
- create_string_variable ("mgrid_mode" , max_string_length , "mgrid_mode_length" )
802
+ create_string_variable ("mgrid_file" , "dim_00200" )
803
+ create_string_variable ("mgrid_mode" , "dim_00001" )
802
804
803
805
@staticmethod
804
806
def _from_cpp_wout (cpp_wout : _vmecpp .VmecppWOut ) -> VmecWOut :
0 commit comments