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

Commit

Permalink
Fixed issue in which the current bookkeeping variables were not being…
Browse files Browse the repository at this point in the history
… read in on a restart
  • Loading branch information
daminton committed Jan 8, 2023
1 parent 8b841fa commit 411efd5
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/fraggle/fraggle_generate.f90
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ module subroutine fraggle_generate_vel_vec(collider, nbody_system, param, lfailu
integer(I4B), dimension(collider%fragments%nbody) :: vsign
real(DP), dimension(collider%fragments%nbody) :: vscale, ke_rot_remove
real(DP), parameter :: vmin_initial_factor = 1.5_DP ! For the initial "guess" of fragment velocities, this is the maximum velocity relative to escape velocity that the fragments will have
real(DP), parameter :: vmax_initial_factor = 3.0_DP ! For the initial "guess" of fragment velocities, this is the maximum velocity relative to escape velocity that the fragments will have
real(DP), parameter :: vmax_initial_factor = 5.0_DP ! For the initial "guess" of fragment velocities, this is the maximum velocity relative to escape velocity that the fragments will have
integer(I4B), parameter :: MAXLOOP = 100
integer(I4B), parameter :: MAXTRY = 20
real(DP), parameter :: TOL = 1.0_DP
Expand Down
29 changes: 15 additions & 14 deletions src/swiftest/swiftest_io.f90
Original file line number Diff line number Diff line change
Expand Up @@ -566,15 +566,16 @@ module subroutine swiftest_io_netcdf_get_t0_values_system(self, param)
class(swiftest_nbody_system), intent(inout) :: self
class(swiftest_parameters), intent(inout) :: param
! Internals
integer(I4B) :: itmax, idmax
integer(I4B) :: itmax, idmax, tslot
real(DP), dimension(:), allocatable :: vals
real(DP), dimension(1) :: rtemp
real(DP), dimension(NDIM) :: rot0, Ip0, Lnow
real(DP), dimension(NDIM) :: rot0, Ip0
real(DP) :: KE_orb_orig, KE_spin_orig, PE_orig, BE_orig

associate (nc => param%system_history%nc, cb => self%cb, tslot => param%system_history%nc%tslot)
associate (nc => param%system_history%nc, cb => self%cb)
call nc%open(param, readonly=.true.)
call nc%find_tslot(param%t0)
tslot = nc%tslot
call netcdf_io_check( nf90_inquire_dimension(nc%id, nc%time_dimid, len=itmax), "netcdf_io_get_t0_values_system time_dimid" )
call netcdf_io_check( nf90_inquire_dimension(nc%id, nc%name_dimid, len=idmax), "netcdf_io_get_t0_values_system name_dimid" )
allocate(vals(idmax))
Expand All @@ -593,20 +594,15 @@ module subroutine swiftest_io_netcdf_get_t0_values_system(self, param)
call netcdf_io_check( nf90_get_var(nc%id, nc%BE_varid, rtemp, start=[tslot], count=[1]), "netcdf_io_get_t0_values_system BE_varid" )
BE_orig = rtemp(1)

call netcdf_io_check( nf90_get_var(nc%id, nc%E_collisions_varid, self%E_collisions, start=[tslot]), "netcdf_io_get_t0_values_system E_collisions_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%E_untracked_varid, self%E_untracked, start=[tslot]), "netcdf_io_get_t0_values_system E_untracked_varid" )

self%E_orbit_orig = KE_orb_orig + KE_spin_orig + PE_orig + BE_orig + self%E_collisions + self%E_untracked
self%E_orbit_orig = KE_orb_orig + KE_spin_orig + PE_orig + BE_orig

call netcdf_io_check( nf90_get_var(nc%id, nc%L_orbit_varid, self%L_orbit_orig(:), start=[1,tslot], count=[NDIM,1]), "netcdf_io_get_t0_values_system L_orbit_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%L_spin_varid, self%L_spin_orig(:), start=[1,tslot], count=[NDIM,1]), "netcdf_io_get_t0_values_system L_spin_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%L_escape_varid, self%L_escape(:), start=[1,tslot], count=[NDIM,1]), "netcdf_io_get_t0_values_system L_escape_varid" )

self%L_total_orig(:) = self%L_orbit_orig(:) + self%L_spin_orig(:) + self%L_escape(:)
self%L_total_orig(:) = self%L_orbit_orig(:) + self%L_spin_orig(:)

call netcdf_io_check( nf90_get_var(nc%id, nc%Gmass_varid, vals, start=[1,tslot], count=[idmax,1]), "netcdf_io_get_t0_values_system Gmass_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%GMescape_varid, self%GMescape, start=[tslot]), "netcdf_io_get_t0_values_system GMescape_varid" )
self%GMtot_orig = vals(1) + sum(vals(2:idmax), vals(2:idmax) == vals(2:idmax)) + self%GMescape
self%GMtot_orig = vals(1) + sum(vals(2:idmax), vals(2:idmax) == vals(2:idmax))

cb%GM0 = vals(1)
cb%dGM = cb%Gmass - cb%GM0
Expand All @@ -615,13 +611,19 @@ module subroutine swiftest_io_netcdf_get_t0_values_system(self, param)
cb%R0 = rtemp(1)

if (param%lrotation) then

call netcdf_io_check( nf90_get_var(nc%id, nc%rot_varid, rot0, start=[1,1,tslot], count=[NDIM,1,1]), "netcdf_io_get_t0_values_system rot_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%Ip_varid, Ip0, start=[1,1,tslot], count=[NDIM,1,1]), "netcdf_io_get_t0_values_system Ip_varid" )

cb%L0(:) = Ip0(3) * cb%GM0 * cb%R0**2 * rot0(:)
end if

! Retrieve the current bookkeeping variables
call nc%find_tslot(self%t)
tslot = nc%tslot
call netcdf_io_check( nf90_get_var(nc%id, nc%L_escape_varid, self%L_escape(:), start=[1,tslot], count=[NDIM,1]), "netcdf_io_get_t0_values_system L_escape_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%GMescape_varid, self%GMescape, start=[tslot]), "netcdf_io_get_t0_values_system GMescape_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%E_collisions_varid, self%E_collisions, start=[tslot]), "netcdf_io_get_t0_values_system E_collisions_varid" )
call netcdf_io_check( nf90_get_var(nc%id, nc%E_untracked_varid, self%E_untracked, start=[tslot]), "netcdf_io_get_t0_values_system E_untracked_varid" )

end if

deallocate(vals)
Expand Down Expand Up @@ -765,7 +767,6 @@ module subroutine swiftest_io_netcdf_initialize_output(self, param)
call netcdf_io_check( nf90_def_var(nc%id, nc%j2rp2_varname, nc%out_type, nc%time_dimid, nc%j2rp2_varid), "netcdf_io_initialize_output nf90_def_var j2rp2_varid" )
call netcdf_io_check( nf90_def_var(nc%id, nc%j4rp4_varname, nc%out_type, nc%time_dimid, nc%j4rp4_varid), "netcdf_io_initialize_output nf90_def_var j4rp4_varid" )


! Set fill mode to NaN for all variables
call netcdf_io_check( nf90_inquire(nc%id, nVariables=nvar), "netcdf_io_initialize_output nf90_inquire nVariables" )
do varid = 1, nvar
Expand Down
2 changes: 1 addition & 1 deletion src/swiftest/swiftest_module.f90
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ module swiftest
procedure :: conservation_report => swiftest_io_conservation_report !! Compute energy and momentum and print out the change with time
procedure :: display_run_information => swiftest_io_display_run_information !! Displays helpful information about the run
procedure :: dump => swiftest_io_dump_system !! Dump the state of the nbody_system to a file
procedure :: get_t0_values => swiftest_io_netcdf_get_t0_values_system !! Validates the dump file to check whether the dump file initial conditions duplicate the last frame of the netcdf output.
procedure :: get_t0_values => swiftest_io_netcdf_get_t0_values_system !! Validates the dump file to check whether the dump file initial conditions duplicate the last frame of the netcdf output.
procedure :: read_frame => swiftest_io_netcdf_read_frame_system !! Read in a frame of input data from file
procedure :: write_frame_netcdf => swiftest_io_netcdf_write_frame_system !! Write a frame of input data from file
procedure :: write_frame_system => swiftest_io_write_frame_system !! Write a frame of input data from file
Expand Down

0 comments on commit 411efd5

Please sign in to comment.