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

Commit

Permalink
Fixed lots of netcdf bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
daminton committed Dec 10, 2022
1 parent 7553ca4 commit 850f3ad
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 33 deletions.
23 changes: 12 additions & 11 deletions src/fraggle/fraggle_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ module subroutine fraggle_io_initialize_output(self, param)
call check( nf90_create(nc%file_name, NF90_NETCDF4, nc%id), "fraggle_io_initialize nf90_create" )

! Dimensions
call check( nf90_def_dim(nc%id, nc%event_dimname, NF90_UNLIMITED, 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, param%maxid+1, 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%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"
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, param%maxid+1, 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%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" )
Expand All @@ -68,8 +68,8 @@ module subroutine fraggle_io_initialize_output(self, param)
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, NF90_CHAR, &
[ 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")

Expand Down Expand Up @@ -175,6 +175,7 @@ module subroutine fraggle_io_write_frame(self, nc, param)

charstring = trim(adjustl(REGIME_NAMES(fragments%regime)))
call check( nf90_put_var(nc%id, nc%regime_varid, charstring, start=[1, eslot], count=[len(charstring), 1]), "fraggle_io_write_frame nf90_put_var regime_varid" )
call check( nf90_put_var(nc%id, nc%Qloss_varid, fragments%Qloss, start=[eslot] ), "fraggle_io_write_frame nf90_put_var Qloss_varid" )

do stage = 1,2
if (allocated(pl)) deallocate(pl)
Expand Down Expand Up @@ -204,10 +205,10 @@ module subroutine fraggle_io_write_frame(self, nc, param)
call check( nf90_put_var(nc%id, nc%ke_orb_varid, fragments%ke_orbit_after, start=[ 2, eslot]), "fraggle_io_write_frame nf90_put_var ke_orb_varid after" )
call check( nf90_put_var(nc%id, nc%pe_varid, fragments%pe_before, start=[ 1, eslot]), "fraggle_io_write_frame nf90_put_var pe_varid before" )
call check( nf90_put_var(nc%id, nc%pe_varid, fragments%pe_after, start=[ 2, eslot]), "fraggle_io_write_frame nf90_put_var pe_varid after" )
call check( nf90_put_var(nc%id, nc%L_orb_varid, fragments%Lorbit_before(:), start=[1, 1, eslot], count=[NDIM, 1, eslot]), "fraggle_io_write_frame nf90_put_var L_orb_varid before" )
call check( nf90_put_var(nc%id, nc%L_orb_varid, fragments%Lorbit_after(:), start=[1, 2, eslot], count=[NDIM, 1, eslot]), "fraggle_io_write_frame nf90_put_var L_orb_varid after" )
call check( nf90_put_var(nc%id, nc%L_spin_varid, fragments%Lspin_before(:), start=[1, 1, eslot], count=[NDIM, 1, eslot]), "fraggle_io_write_frame nf90_put_var L_spin_varid before" )
call check( nf90_put_var(nc%id, nc%L_spin_varid, fragments%Lspin_after(:), start=[1, 2, eslot], count=[NDIM, 1, eslot]), "fraggle_io_write_frame nf90_put_var L_spin_varid after" )
call check( nf90_put_var(nc%id, nc%L_orb_varid, fragments%Lorbit_before(:), start=[1, 1, eslot], count=[NDIM, 1, 1]), "fraggle_io_write_frame nf90_put_var L_orb_varid before" )
call check( nf90_put_var(nc%id, nc%L_orb_varid, fragments%Lorbit_after(:), start=[1, 2, eslot], count=[NDIM, 1, 1]), "fraggle_io_write_frame nf90_put_var L_orb_varid after" )
call check( nf90_put_var(nc%id, nc%L_spin_varid, fragments%Lspin_before(:), start=[1, 1, eslot], count=[NDIM, 1, 1]), "fraggle_io_write_frame nf90_put_var L_spin_varid before" )
call check( nf90_put_var(nc%id, nc%L_spin_varid, fragments%Lspin_after(:), start=[1, 2, eslot], count=[NDIM, 1, 1]), "fraggle_io_write_frame nf90_put_var L_spin_varid after" )

call check( nf90_set_fill(nc%id, old_mode, old_mode) )
end select
Expand Down
1 change: 1 addition & 0 deletions src/modules/fraggle_classes.f90
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ module fraggle_classes
character(NAMELEN) :: event_dimname = "collision" !! Name of collision event dimension
integer(I4B) :: event_dimid !! ID for the collision event dimension
integer(I4B) :: event_varid !! ID for the collision event variable
integer(I4B) :: event_dimsize = 0 !! Number of events

character(NAMELEN) :: Qloss_varname = "Qloss" !! name of the energy loss variable
integer(I4B) :: Qloss_varid !! ID for the energy loss variable
Expand Down
50 changes: 28 additions & 22 deletions src/symba/symba_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -22,29 +22,35 @@ module subroutine symba_io_dump_encounter(self, param)
class(symba_parameters), intent(inout) :: param !! Current run configuration parameters


associate(encounter_history => self%encounter_history, nce => self%encounter_history%nc, eframe => self%encounter_history%iframe,&
collision_history => self%collision_history, ncc => self%collision_history%nc, cframe => self%collision_history%iframe)

if (encounter_history%iframe > 0) then
! Create and save the output files for this encounter and fragmentation
nce%file_number = nce%file_number + 1
nce%time_dimsize = maxval(encounter_history%tslot(:))
write(nce%file_name, '("encounter_",I0.6,".nc")') nce%file_number
call nce%initialize(param)
call encounter_history%dump(param)
call nce%close()
call encounter_history%reset()
end if
associate(encounter_history => self%encounter_history, num_enc_frames => self%encounter_history%iframe,&
collision_history => self%collision_history, num_coll_frames => self%collision_history%iframe)

select type(nce => self%encounter_history%nc)
class is (encounter_io_parameters)
if (num_enc_frames > 0) then
! Create and save the output files for this encounter and fragmentation
nce%file_number = nce%file_number + 1
nce%time_dimsize = maxval(encounter_history%tslot(:))
write(nce%file_name, '("encounter_",I0.6,".nc")') nce%file_number
call nce%initialize(param)
call encounter_history%dump(param)
call nce%close()
call encounter_history%reset()
end if
end select

if (collision_history%iframe > 0) then
ncc%file_number = ncc%file_number + 1
write(ncc%file_name, '("collision_",I0.6,".nc")') ncc%file_number
ncc%time_dimsize = maxval(collision_history%tslot(:))
call ncc%initialize(param)
call collision_history%dump(param)
call ncc%close()
call collision_history%reset()
end if
select type(ncc => self%collision_history%nc)
class is (fraggle_io_parameters)
if (num_coll_frames > 0) then
ncc%file_number = ncc%file_number + 1
ncc%event_dimsize = num_coll_frames
write(ncc%file_name, '("collision_",I0.6,".nc")') ncc%file_number
call ncc%initialize(param)
call collision_history%dump(param)
call ncc%close()
call collision_history%reset()
end if
end select
end associate

return
Expand Down

0 comments on commit 850f3ad

Please sign in to comment.