Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
Now index by "name" instead of "id" on the Fortran side
Browse files Browse the repository at this point in the history
  • Loading branch information
daminton committed Dec 13, 2022
1 parent c12ec19 commit e9ee8cd
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 95 deletions.
2 changes: 1 addition & 1 deletion examples/Fragmentation/Fragmentation_Movie.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ def data_stream(self, frame=0):
# Set fragmentation parameters
minimum_fragment_gmass = 0.2 * body_Gmass[style][1] # Make the minimum fragment mass a fraction of the smallest body
gmtiny = 0.99 * body_Gmass[style][1] # Make GMTINY just smaller than the smallest original body. This will prevent runaway collisional cascades
sim.set_parameter(fragmentation=True, collision_save="TRAJECTORY", gmtiny=gmtiny, minimum_fragment_gmass=minimum_fragment_gmass, verbose=False)
sim.set_parameter(fragmentation=True, collision_save="TRAJECTORY", encounter_save="TRAJECTORY", gmtiny=gmtiny, minimum_fragment_gmass=minimum_fragment_gmass, verbose=False)
sim.run(dt=1e-4, tstop=1.0e-3, istep_out=1, dump_cadence=1)

print("Generating animation")
Expand Down
21 changes: 9 additions & 12 deletions python/swiftest/swiftest/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -817,18 +817,18 @@ def process_netcdf_input(ds, param):
ds : xarray dataset
"""
#
ds = ds.where(ds.id >=0,drop=True)
#ds = ds.where(ds.id >=0,drop=True)
if param['OUT_TYPE'] == "NETCDF_DOUBLE":
ds = fix_types(ds,ftype=np.float64)
elif param['OUT_TYPE'] == "NETCDF_FLOAT":
ds = fix_types(ds,ftype=np.float32)

# Check if the name variable contains unique values. If so, make name the dimension instead of id
if "id" in ds.dims:
if len(np.unique(ds['name'])) == len(ds['name']):
ds = ds.swap_dims({"id" : "name"})
if "id" in ds:
ds = ds.reset_coords("id")
# # Check if the name variable contains unique values. If so, make name the dimension instead of id
# if "id" in ds.dims:
# if len(np.unique(ds['name'])) == len(ds['name']):
# ds = ds.swap_dims({"id" : "name"})
# if "id" in ds:
# ds = ds.reset_coords("id")

return ds

Expand Down Expand Up @@ -1127,9 +1127,6 @@ def swiftest_xr2infile(ds, param, in_type="NETCDF_DOUBLE", infile_name=None,fram
param_tmp['OUT_FORM'] = param['IN_FORM']
frame = select_active_from_frame(ds, param_tmp, framenum)

if "name" in frame.dims:
frame = frame.swap_dims({"name" : "id"})
frame = frame.reset_coords("name")

if in_type == "NETCDF_DOUBLE" or in_type == "NETCDF_FLOAT":
# Convert strings back to byte form and save the NetCDF file
Expand All @@ -1146,8 +1143,8 @@ def swiftest_xr2infile(ds, param, in_type="NETCDF_DOUBLE", infile_name=None,fram
return frame

# All other file types need seperate files for each of the inputs
cb = frame.where(frame.id == 0, drop=True)
pl = frame.where(frame.id > 0, drop=True)
cb = frame.isel(name=0)
pl = frame.where(name != cb.name)
pl = pl.where(np.invert(np.isnan(pl['Gmass'])), drop=True).drop_vars(['j2rp2', 'j2rp2'],errors="ignore")
tp = frame.where(np.isnan(frame['Gmass']), drop=True).drop_vars(['Gmass', 'radius', 'j2rp2', 'j4rp4'],errors="ignore")

Expand Down
12 changes: 1 addition & 11 deletions python/swiftest/swiftest/simulation_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -2790,11 +2790,6 @@ def _preprocess(ds, param):
tgood,tid = np.unique(self.encounters.time,return_index=True)
self.encounters = self.encounters.isel(time=tid)

# Reduce the dimensionality of variables that got expanded in the combine process
self.encounters['loopnum'] = self.encounters['loopnum'].max(dim="name")
self.encounters['id'] = self.encounters['id'].max(dim="time")
self.encounters['particle_type'] = self.encounters['particle_type'].max(dim="time")

return


Expand All @@ -2809,14 +2804,9 @@ def _preprocess(ds, param):
return io.process_netcdf_input(ds,param)
partial_func = partial(_preprocess, param=self.param)

self.collisions = xr.open_mfdataset(col_files,parallel=True,combine="nested",concat_dim="collision",join="left",preprocess=partial_func,mask_and_scale=True)
self.collisions = xr.open_mfdataset(col_files,parallel=True, coords=["collision"], join="inner", preprocess=partial_func,mask_and_scale=True)
self.collisions = io.process_netcdf_input(self.collisions, self.param)

# # Reduce the dimensionality of variables that got expanded in the combine process
# self.encounters['loopnum'] = self.encounters['loopnum'].max(dim="name")
# self.encounters['id'] = self.encounters['id'].max(dim="time")
# self.encounters['particle_type'] = self.encounters['particle_type'].max(dim="time")

return


Expand Down
26 changes: 13 additions & 13 deletions src/encounter/encounter_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ module subroutine encounter_io_dump_collision(self, param)
nc%file_number = nc%file_number + 1
call self%make_index_map()
nc%event_dimsize = self%nt
nc%id_dimsize = self%nid
nc%name_dimsize = self%nid

write(nc%file_name, '("collision_",I0.6,".nc")') nc%file_number
call nc%initialize(param)
Expand Down Expand Up @@ -73,7 +73,7 @@ module subroutine encounter_io_dump_encounter(self, param)
nc%file_number = nc%file_number + 1
call self%make_index_map()
nc%time_dimsize = self%nt
nc%id_dimsize = self%nid
nc%name_dimsize = self%nid
write(nc%file_name, '("encounter_",I0.6,".nc")') nc%file_number
call nc%initialize(param)

Expand Down Expand Up @@ -138,28 +138,28 @@ module subroutine encounter_io_initialize(self, param)

! Dimensions
call check( nf90_def_dim(nc%id, nc%time_dimname, nc%time_dimsize, nc%time_dimid), "encounter_io_initialize nf90_def_dim time_dimid" ) ! Simulation time dimension
call check( nf90_def_dim(nc%id, nc%space_dimname, NDIM , nc%space_dimid), "encounter_io_initialize nf90_def_dim space_dimid" ) ! 3D space dimension
call check( nf90_def_dim(nc%id, nc%id_dimname, nc%id_dimsize, nc%id_dimid), "encounter_io_initialize nf90_def_dim id_dimid" ) ! dimension to store particle id numbers
call check( nf90_def_dim(nc%id, nc%space_dimname, NDIM, nc%space_dimid), "encounter_io_initialize nf90_def_dim space_dimid" ) ! 3D space dimension
call check( nf90_def_dim(nc%id, nc%name_dimname, nc%name_dimsize, nc%name_dimid), "encounter_io_initialize nf90_def_dim name_dimid" ) ! dimension to store particle id numbers
call check( nf90_def_dim(nc%id, nc%str_dimname, NAMELEN, nc%str_dimid), "encounter_io_initialize nf90_def_dim str_dimid" ) ! Dimension for string variables (aka character arrays)

! Dimension coordinates
call check( nf90_def_var(nc%id, nc%time_dimname, nc%out_type, nc%time_dimid, nc%time_varid), "encounter_io_initialize nf90_def_var time_varid" )
call check( nf90_def_var(nc%id, nc%space_dimname, NF90_CHAR, nc%space_dimid, nc%space_varid), "encounter_io_initialize nf90_def_var space_varid" )
call check( nf90_def_var(nc%id, nc%id_dimname, NF90_INT, nc%id_dimid, nc%id_varid), "encounter_io_initialize nf90_def_var id_varid" )
call check( nf90_def_var(nc%id, nc%name_dimname, NF90_CHAR, [nc%str_dimid, nc%name_dimid], nc%name_varid), "encounter_io_initialize nf90_def_var id_varid" )

! Variables
call check( nf90_def_var(nc%id, nc%name_varname, NF90_CHAR, [nc%str_dimid, nc%id_dimid], nc%name_varid), "encounter_io_initialize nf90_def_var name_varid" )
call check( nf90_def_var(nc%id, nc%ptype_varname, NF90_CHAR, [nc%str_dimid, nc%id_dimid], nc%ptype_varid), "encounter_io_initialize nf90_def_var ptype_varid" )
call check( nf90_def_var(nc%id, nc%rh_varname, nc%out_type, [nc%space_dimid, nc%id_dimid, nc%time_dimid], nc%rh_varid), "encounter_io_initialize nf90_def_var rh_varid" )
call check( nf90_def_var(nc%id, nc%vh_varname, nc%out_type, [nc%space_dimid, nc%id_dimid, nc%time_dimid], nc%vh_varid), "encounter_io_initialize nf90_def_var vh_varid" )
call check( nf90_def_var(nc%id, nc%Gmass_varname, nc%out_type, [nc%id_dimid, nc%time_dimid], nc%Gmass_varid), "encounter_io_initialize nf90_def_var Gmass_varid" )
call check( nf90_def_var(nc%id, nc%id_varname, NF90_INT, nc%name_dimid, nc%id_varid), "encounter_io_initialize nf90_def_var id_varid" )
call check( nf90_def_var(nc%id, nc%ptype_varname, NF90_CHAR, [nc%str_dimid, nc%name_dimid], nc%ptype_varid), "encounter_io_initialize nf90_def_var ptype_varid" )
call check( nf90_def_var(nc%id, nc%rh_varname, nc%out_type, [nc%space_dimid, nc%name_dimid, nc%time_dimid], nc%rh_varid), "encounter_io_initialize nf90_def_var rh_varid" )
call check( nf90_def_var(nc%id, nc%vh_varname, nc%out_type, [nc%space_dimid, nc%name_dimid, nc%time_dimid], nc%vh_varid), "encounter_io_initialize nf90_def_var vh_varid" )
call check( nf90_def_var(nc%id, nc%Gmass_varname, nc%out_type, [nc%name_dimid, nc%time_dimid], nc%Gmass_varid), "encounter_io_initialize nf90_def_var Gmass_varid" )
call check( nf90_def_var(nc%id, nc%loop_varname, NF90_INT, [nc%time_dimid], nc%loop_varid), "encounter_io_initialize nf90_def_var loop_varid" )
if (param%lclose) then
call check( nf90_def_var(nc%id, nc%radius_varname, nc%out_type, [nc%id_dimid, nc%time_dimid], nc%radius_varid), "encounter_io_initialize nf90_def_var radius_varid" )
call check( nf90_def_var(nc%id, nc%radius_varname, nc%out_type, [nc%name_dimid, nc%time_dimid], nc%radius_varid), "encounter_io_initialize nf90_def_var radius_varid" )
end if
if (param%lrotation) then
call check( nf90_def_var(nc%id, nc%Ip_varname, nc%out_type, [nc%space_dimid, nc%id_dimid, nc%time_dimid], nc%Ip_varid), "encounter_io_initialize nf90_def_var Ip_varid" )
call check( nf90_def_var(nc%id, nc%rot_varname, nc%out_type, [nc%space_dimid, nc%id_dimid, nc%time_dimid], nc%rot_varid), "encounter_io_initialize nf90_def_var rot_varid" )
call check( nf90_def_var(nc%id, nc%Ip_varname, nc%out_type, [nc%space_dimid, nc%name_dimid, nc%time_dimid], nc%Ip_varid), "encounter_io_initialize nf90_def_var Ip_varid" )
call check( nf90_def_var(nc%id, nc%rot_varname, nc%out_type, [nc%space_dimid, nc%name_dimid, nc%time_dimid], nc%rot_varid), "encounter_io_initialize nf90_def_var rot_varid" )
end if

call check( nf90_inquire(nc%id, nVariables=nvar), "encounter_io_initialize nf90_inquire nVariables" )
Expand Down
23 changes: 11 additions & 12 deletions src/fraggle/fraggle_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -55,49 +55,48 @@ module subroutine fraggle_io_initialize_output(self, param)
! Dimensions
call check( nf90_def_dim(nc%id, nc%event_dimname, nc%event_dimsize, nc%event_dimid), "fraggle_io_initialize nf90_def_dim event_dimid" ) ! Dimension to store individual collision events
call check( nf90_def_dim(nc%id, nc%space_dimname, NDIM, nc%space_dimid), "fraggle_io_initialize nf90_def_dim space_dimid" ) ! 3D space dimension
call check( nf90_def_dim(nc%id, nc%id_dimname, nc%id_dimsize, nc%id_dimid), "fraggle_io_initialize nf90_def_dim id_dimid" ) ! Dimension to store particle id numbers
call check( nf90_def_dim(nc%id, nc%name_dimname, nc%name_dimsize, nc%name_dimid), "fraggle_io_initialize nf90_def_dim name_dimid" ) ! Dimension to store particle id numbers
call check( nf90_def_dim(nc%id, nc%str_dimname, NAMELEN, nc%str_dimid), "fraggle_io_initialize nf90_def_dim str_dimid" ) ! Dimension for string variables (aka character arrays)
call check( nf90_def_dim(nc%id, nc%stage_dimname, 2, nc%stage_dimid), "fraggle_io_initialize nf90_def_dim stage_dimid" ) ! Dimension for stage variables (aka "before" vs. "after"

! Dimension coordinates
call check( nf90_def_var(nc%id, nc%space_dimname, NF90_CHAR, nc%space_dimid, nc%space_varid), "fraggle_io_initialize nf90_def_var space_varid" )
call check( nf90_def_var(nc%id, nc%id_dimname, NF90_INT, nc%id_dimid, nc%id_varid), "fraggle_io_initialize nf90_def_var id_varid" )
call check( nf90_def_var(nc%id, nc%stage_dimname, NF90_CHAR, [nc%str_dimid, nc%stage_dimid], nc%stage_varid), "fraggle_io_initialize nf90_def_var stage_varid" )
call check( nf90_def_var(nc%id, nc%name_dimname, NF90_CHAR, [nc%str_dimid, nc%name_dimid], nc%name_varid), "fraggle_io_initialize nf90_def_var name_varid")
call check( nf90_def_var(nc%id, nc%stage_dimname, NF90_CHAR, [nc%str_dimid, nc%stage_dimid], nc%stage_varid), "fraggle_io_initialize nf90_def_var stage_varid" )

! Variables
call check( nf90_def_var(nc%id, nc%id_varname, NF90_INT, nc%name_dimid, nc%id_varid), "fraggle_io_initialize nf90_def_var id_varid" )
call check( nf90_def_var(nc%id, nc%time_dimname, nc%out_type, &
nc%event_dimid, nc%time_varid), "fraggle_io_initialize nf90_def_var time_varid" )
call check( nf90_def_var(nc%id, nc%regime_varname, NF90_CHAR, &
[nc%str_dimid, nc%event_dimid], nc%regime_varid), "fraggle_io_initialize nf90_def_var regime_varid")
call check( nf90_def_var(nc%id, nc%Qloss_varname, nc%out_type, &
[ nc%event_dimid], nc%Qloss_varid), "fraggle_io_initialize nf90_def_var Qloss_varid")
call check( nf90_def_var(nc%id, nc%name_varname, NF90_CHAR, &
[nc%str_dimid, nc%id_dimid ], nc%name_varid), "fraggle_io_initialize nf90_def_var name_varid")

call check( nf90_def_var(nc%id, nc%ptype_varname, NF90_CHAR, &
[nc%str_dimid, nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%ptype_varid), "fraggle_io_initialize nf90_def_var ptype_varid")
[nc%str_dimid, nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%ptype_varid), "fraggle_io_initialize nf90_def_var ptype_varid")

call check( nf90_def_var(nc%id, nc%loop_varname, NF90_INT, &
[ nc%event_dimid], nc%loop_varid), "fraggle_io_initialize nf90_def_var loop_varid")

call check( nf90_def_var(nc%id, nc%rh_varname, nc%out_type,&
[ nc%space_dimid, nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%rh_varid), "fraggle_io_initialize nf90_def_var rh_varid")
[ nc%space_dimid, nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%rh_varid), "fraggle_io_initialize nf90_def_var rh_varid")

call check( nf90_def_var(nc%id, nc%vh_varname, nc%out_type,&
[ nc%space_dimid, nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%vh_varid), "fraggle_io_initialize nf90_def_var vh_varid")
[ nc%space_dimid, nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%vh_varid), "fraggle_io_initialize nf90_def_var vh_varid")

call check( nf90_def_var(nc%id, nc%Gmass_varname, nc%out_type,&
[ nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%Gmass_varid), "fraggle_io_initialize nf90_def_var Gmass_varid")
[ nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%Gmass_varid), "fraggle_io_initialize nf90_def_var Gmass_varid")


call check( nf90_def_var(nc%id, nc%radius_varname, nc%out_type,&
[ nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%radius_varid), "fraggle_io_initialize nf90_def_var radius_varid")
[ nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%radius_varid), "fraggle_io_initialize nf90_def_var radius_varid")

call check( nf90_def_var(nc%id, nc%Ip_varname, nc%out_type,&
[ nc%space_dimid, nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%Ip_varid), "fraggle_io_initialize nf90_def_var Ip_varid")
[ nc%space_dimid, nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%Ip_varid), "fraggle_io_initialize nf90_def_var Ip_varid")

call check( nf90_def_var(nc%id, nc%rot_varname, nc%out_type,&
[ nc%space_dimid, nc%id_dimid, nc%stage_dimid, nc%event_dimid], nc%rot_varid), "fraggle_io_initialize nf90_def_var rot_varid")
[ nc%space_dimid, nc%name_dimid, nc%stage_dimid, nc%event_dimid], nc%rot_varid), "fraggle_io_initialize nf90_def_var rot_varid")

call check( nf90_def_var(nc%id, nc%ke_orb_varname, nc%out_type,&
[ nc%stage_dimid, nc%event_dimid], nc%KE_orb_varid), "fraggle_io_initialize_output nf90_def_var KE_orb_varid")
Expand Down
2 changes: 1 addition & 1 deletion src/modules/encounter_classes.f90
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ module encounter_classes
character(NAMELEN) :: loop_varname = "loopnum" !! Loop number for encounter
integer(I4B) :: loop_varid !! ID for the recursion level variable
integer(I4B) :: time_dimsize = 0 !! Number of time values in snapshot
integer(I4B) :: id_dimsize = 0 !! Number of potential id values in snapshot
integer(I4B) :: name_dimsize = 0 !! Number of potential id values in snapshot
integer(I4B) :: file_number = 1 !! The number to append on the output file
contains
procedure :: initialize => encounter_io_initialize !! Initialize a set of parameters used to identify a NetCDF output object
Expand Down
10 changes: 5 additions & 5 deletions src/modules/swiftest_classes.f90
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ module swiftest_classes
character(NAMELEN) :: time_dimname = "time" !! name of the time dimension
integer(I4B) :: time_dimid !! ID for the time dimension
integer(I4B) :: time_varid !! ID for the time variable
character(NAMELEN) :: id_dimname = "id" !! name of the particle id dimension
integer(I4B) :: id_dimid !! ID for the particle id dimension
integer(I4B) :: id_varid !! ID for the particle name variable
character(NAMELEN) :: name_dimname = "name" !! name of the particle name dimension
integer(I4B) :: name_dimid !! ID for the particle name dimension
integer(I4B) :: name_varid !! ID for the particle name variable
character(NAMELEN) :: space_dimname = "space" !! name of the space dimension
integer(I4B) :: space_dimid !! ID for the space dimension
integer(I4B) :: space_varid !! ID for the space variable
Expand All @@ -45,8 +45,8 @@ module swiftest_classes
! Non-dimension ids and variable names
character(NAMELEN) :: ptype_varname = "particle_type" !! name of the particle type variable
integer(I4B) :: ptype_varid !! ID for the particle type variable
character(NAMELEN) :: name_varname = "name" !! name of the particle name variable
integer(I4B) :: name_varid !! ID for the name variable
character(NAMELEN) :: id_varname = "id" !! name of the particle id variable
integer(I4B) :: id_varid !! ID for the id variable
character(NAMELEN) :: npl_varname = "npl" !! name of the number of active massive bodies variable
integer(I4B) :: npl_varid !! ID for the number of active massive bodies variable
character(NAMELEN) :: ntp_varname = "ntp" !! name of the number of active test particles variable
Expand Down
Loading

0 comments on commit e9ee8cd

Please sign in to comment.