From 140adcef96c9082ee61b0c4f38334a1823cc7b8b Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 2 Jan 2023 16:53:15 -0500 Subject: [PATCH 01/15] Took swiftest_kick out of the fp=fast category --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ef6b91f5e..c9d206d89 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -65,7 +65,6 @@ SET(FAST_MATH_FILES ${SRC}/swiftest/swiftest_drift.f90 ${SRC}/swiftest/swiftest_gr.f90 ${SRC}/swiftest/swiftest_io.f90 - ${SRC}/swiftest/swiftest_kick.f90 ${SRC}/swiftest/swiftest_obl.f90 ${SRC}/swiftest/swiftest_orbel.f90 ${SRC}/swiftest/swiftest_util.f90 From 71bb215831622c17de0a96935a802a4fae67e614 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 2 Jan 2023 20:04:49 -0500 Subject: [PATCH 02/15] Fixed bugs related to opening and closing NetCDF files --- src/CMakeLists.txt | 1 - src/swiftest/swiftest_io.f90 | 10 ++++++---- src/swiftest/swiftest_util.f90 | 6 ++++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c9d206d89..09545baf6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -84,7 +84,6 @@ SET(FAST_MATH_FILES ${SRC}/swiftest/swiftest_driver.f90 ) - set(SWIFTEST_src ${FAST_MATH_FILES} ${STRICT_MATH_FILES}) # Define the executable in terms of the source files diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index 6522f0997..d31be7417 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -2838,12 +2838,14 @@ module subroutine swiftest_io_write_discard(self, param) class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters ! Internals - associate(pl => self%pl, npl => self%pl%nbody, pl_adds => self%pl_adds) - - if (self%tp_discards%nbody > 0) call self%tp_discards%write_info(param%system_history%nc, param) + associate(pl => self%pl, npl => self%pl%nbody, pl_adds => self%pl_adds, nc => param%system_history%nc) + + call nc%open(param) + if (self%tp_discards%nbody > 0) call self%tp_discards%write_info(nc, param) if (self%pl_discards%nbody == 0) return - call self%pl_discards%write_info(param%system_history%nc, param) + call self%pl_discards%write_info(nc, param) + call nc%close() end associate return diff --git a/src/swiftest/swiftest_util.f90 b/src/swiftest/swiftest_util.f90 index 8fc118479..1bccb6bc7 100644 --- a/src/swiftest/swiftest_util.f90 +++ b/src/swiftest/swiftest_util.f90 @@ -1664,7 +1664,7 @@ module subroutine swiftest_util_rearray_pl(self, nbody_system, param) class(encounter_list), allocatable :: plplenc_old logical :: lencounter - associate(pl => self, tp => nbody_system%tp, pl_adds => nbody_system%pl_adds) + associate(pl => self, tp => nbody_system%tp, pl_adds => nbody_system%pl_adds, nc => param%system_history%nc) npl = pl%nbody nadd = pl_adds%nbody @@ -1724,7 +1724,9 @@ module subroutine swiftest_util_rearray_pl(self, nbody_system, param) end where end if - call pl%write_info(param%system_history%nc, param) + call nc%open(param) + call pl%write_info(nc, param) + call nc%close() deallocate(ldump_mask) ! Reindex the new list of bodies From bd4676222473675b465a97fb9933708106ee5516 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 2 Jan 2023 20:40:27 -0500 Subject: [PATCH 03/15] Fixed bug that was preventing closest approach values from being saved --- src/swiftest/swiftest_io.f90 | 75 ++++++++++++++---------------------- 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index d31be7417..d594a89bc 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -1353,64 +1353,47 @@ module subroutine swiftest_io_netcdf_read_particle_info_system(self, nc, param, status = nf90_inq_varid(nc%id, nc%collision_id_varname, nc%collision_id_varid) if (status == nf90_noerr) then call netcdf_io_check( nf90_get_var(nc%id, nc%collision_id_varid, itemp), "netcdf_io_read_particle_info_system nf90_getvar collision_id_varid" ) - else - itemp = 0 - end if - - do i = 1, npl - call pl%info(i)%set_value(collision_id=itemp(plind(i))) - end do - do i = 1, ntp - call tp%info(i)%set_value(collision_id=itemp(tpind(i))) - end do + do i = 1, npl + call pl%info(i)%set_value(collision_id=itemp(plind(i))) + end do + do i = 1, ntp + call tp%info(i)%set_value(collision_id=itemp(tpind(i))) + end do + end if status = nf90_inq_varid(nc%id, nc%discard_time_varname, nc%discard_time_varid) if (status == nf90_noerr) then call netcdf_io_check( nf90_get_var(nc%id, nc%discard_time_varid, rtemp), "netcdf_io_read_particle_info_system nf90_getvar discard_time_varid" ) - else - select case (param%out_type) - case("netcdf_io_FLOAT") - rtemp(:) = huge(0.0_SP) - case("netcdf_io_DOUBLE") - rtemp(:) = huge(0.0_DP) - end select - end if - - call cb%info%set_value(discard_time=rtemp(1)) - do i = 1, npl - call pl%info(i)%set_value(discard_time=rtemp(plind(i))) - end do - do i = 1, ntp - call tp%info(i)%set_value(discard_time=rtemp(tpind(i))) - end do + call cb%info%set_value(discard_time=rtemp(1)) + do i = 1, npl + call pl%info(i)%set_value(discard_time=rtemp(plind(i))) + end do + do i = 1, ntp + call tp%info(i)%set_value(discard_time=rtemp(tpind(i))) + end do + end if status = nf90_inq_varid(nc%id, nc%discard_rh_varname, nc%discard_rh_varid) if (status == nf90_noerr) then call netcdf_io_check( nf90_get_var(nc%id, nc%discard_rh_varid, vectemp(:,:)), "netcdf_io_read_particle_info_system nf90_getvar discard_rh_varid" ) - else - vectemp(:,:) = 0.0_DP - end if - - do i = 1, npl - call pl%info(i)%set_value(discard_rh=vectemp(:,plind(i))) - end do - do i = 1, ntp - call tp%info(i)%set_value(discard_rh=vectemp(:,tpind(i))) - end do + do i = 1, npl + call pl%info(i)%set_value(discard_rh=vectemp(:,plind(i))) + end do + do i = 1, ntp + call tp%info(i)%set_value(discard_rh=vectemp(:,tpind(i))) + end do + end if status = nf90_inq_varid(nc%id, nc%discard_vh_varname, nc%discard_vh_varid) if (status == nf90_noerr) then call netcdf_io_check( nf90_get_var(nc%id, nc%discard_vh_varid, vectemp(:,:)), "netcdf_io_read_particle_info_system nf90_getvar discard_vh_varid" ) - else - vectemp(:,:) = 0.0_DP - end if - - do i = 1, npl - call pl%info(i)%set_value(discard_vh=vectemp(:,plind(i))) - end do - do i = 1, ntp - call tp%info(i)%set_value(discard_vh=vectemp(:,tpind(i))) - end do + do i = 1, npl + call pl%info(i)%set_value(discard_vh=vectemp(:,plind(i))) + end do + do i = 1, ntp + call tp%info(i)%set_value(discard_vh=vectemp(:,tpind(i))) + end do + end if end if end associate From 589cb0ee2298bcd729c4f86bdac50df073cfd642 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 2 Jan 2023 20:57:52 -0500 Subject: [PATCH 04/15] Fixed problem that was preventing encounter data from being read in --- python/swiftest/swiftest/simulation_class.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/swiftest/swiftest/simulation_class.py b/python/swiftest/swiftest/simulation_class.py index 612aeb4b0..cfe88f26f 100644 --- a/python/swiftest/swiftest/simulation_class.py +++ b/python/swiftest/swiftest/simulation_class.py @@ -2792,7 +2792,7 @@ 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, coords=["collision"], join="inner", preprocess=partial_func,mask_and_scale=True) + self.collisions = xr.open_mfdataset(col_files,parallel=True, combine="nested", concat_dim="collision", preprocess=partial_func,mask_and_scale=True) self.collisions = io.process_netcdf_input(self.collisions, self.param) return From 0fc24debde4f67ab21f51384017b4f01a8b67312 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 2 Jan 2023 23:51:55 -0500 Subject: [PATCH 05/15] Fixed it so if this is a restart run, the swiftest.log file gets appended instead of replaced --- src/swiftest/swiftest_io.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index d594a89bc..21b52b714 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -2769,7 +2769,7 @@ module subroutine swiftest_io_set_display_param(self, display_style) self%display_unit = OUTPUT_UNIT !! stdout from iso_fortran_env self%log_output = .false. case ('COMPACT', 'PROGRESS') - open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status='replace', err = 667, iomsg = errmsg) + open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status=self%out_stat, err = 667, iomsg = errmsg) self%display_unit = SWIFTEST_LOG_OUT self%log_output = .true. case default From eb4438e49a4819e51c4a887f576881a20bbec168 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 07:06:46 -0500 Subject: [PATCH 06/15] Ditto on the last commit message --- src/swiftest/swiftest_io.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index 21b52b714..d88402be2 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -2769,7 +2769,11 @@ module subroutine swiftest_io_set_display_param(self, display_style) self%display_unit = OUTPUT_UNIT !! stdout from iso_fortran_env self%log_output = .false. case ('COMPACT', 'PROGRESS') - open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status=self%out_stat, err = 667, iomsg = errmsg) + if (self%lrestart) then + open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status="OLD", position="APPEND", err = 667, iomsg = errmsg) + else + open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status="REPLACE", err = 667, iomsg = errmsg) + end if self%display_unit = SWIFTEST_LOG_OUT self%log_output = .true. case default From 2edaf5981f7e4a18b025603a433286a422590d64 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 09:45:56 -0500 Subject: [PATCH 07/15] Fixed calcululation of density that was incorrect --- src/collision/collision_resolve.f90 | 10 +++++++--- src/swiftest/swiftest_util.f90 | 10 +--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/collision/collision_resolve.f90 b/src/collision/collision_resolve.f90 index 0036a8a00..acec15b5f 100644 --- a/src/collision/collision_resolve.f90 +++ b/src/collision/collision_resolve.f90 @@ -321,13 +321,14 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) class(swiftest_pl), allocatable :: plnew, plsub character(*), parameter :: FRAGFMT = '("Newbody",I0.7)' character(len=NAMELEN) :: newname, origin_type + real(DP) :: volume select type(nbody_system) class is (swiftest_nbody_system) select type(param) class is (swiftest_parameters) associate(pl => nbody_system%pl, pl_discards => nbody_system%pl_discards, info => nbody_system%pl%info, pl_adds => nbody_system%pl_adds, cb => nbody_system%cb, npl => pl%nbody, & - collision_basic => nbody_system%collider, impactors => nbody_system%collider%impactors,fragments => nbody_system%collider%fragments) + collider => nbody_system%collider, impactors => nbody_system%collider%impactors,fragments => nbody_system%collider%fragments) ! Add the impactors%id bodies to the subtraction list nimpactors = impactors%ncoll @@ -351,7 +352,10 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) plnew%mass(1:nfrag) = fragments%mass(1:nfrag) plnew%Gmass(1:nfrag) = param%GU * fragments%mass(1:nfrag) plnew%radius(1:nfrag) = fragments%radius(1:nfrag) - plnew%density(1:nfrag) = fragments%mass(1:nfrag) / fragments%radius(1:nfrag) + do concurrent(i = 1:nfrag) + volume = 4.0_DP/3.0_DP * PI * plnew%radius(i)**3 + plnew%density(i) = fragments%mass(i) / volume + end do call plnew%set_rhill(cb) select case(status) @@ -437,7 +441,7 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) end where ! Log the properties of the new bodies - select type(after => collision_basic%after) + select type(after => collider%after) class is (swiftest_nbody_system) allocate(after%pl, source=plnew) end select diff --git a/src/swiftest/swiftest_util.f90 b/src/swiftest/swiftest_util.f90 index 1bccb6bc7..9d34b1af5 100644 --- a/src/swiftest/swiftest_util.f90 +++ b/src/swiftest/swiftest_util.f90 @@ -1660,7 +1660,7 @@ module subroutine swiftest_util_rearray_pl(self, nbody_system, param) ! Internals class(swiftest_pl), allocatable :: tmp !! The discarded body list. integer(I4B) :: i, k, npl, nadd, nencmin, nenc_old, idnew1, idnew2, idold1, idold2 - logical, dimension(:), allocatable :: lmask, ldump_mask + logical, dimension(:), allocatable :: lmask class(encounter_list), allocatable :: plplenc_old logical :: lencounter @@ -1696,14 +1696,7 @@ module subroutine swiftest_util_rearray_pl(self, nbody_system, param) if (nadd > 0) then ! Append the adds to the main pl object call pl%append(pl_adds, lsource_mask=[(.true., i=1, nadd)]) - - allocate(ldump_mask(npl+nadd)) ! This mask is used only to append the original Fortran binary particle.dat file with new bodies. This is ignored for NetCDF output - ldump_mask(1:npl) = .false. - ldump_mask(npl+1:npl+nadd) = pl%status(npl+1:npl+nadd) == NEW_PARTICLE npl = pl%nbody - else - allocate(ldump_mask(npl)) - ldump_mask(:) = .false. end if ! Reset all of the status flags for this body @@ -1727,7 +1720,6 @@ module subroutine swiftest_util_rearray_pl(self, nbody_system, param) call nc%open(param) call pl%write_info(nc, param) call nc%close() - deallocate(ldump_mask) ! Reindex the new list of bodies call pl%sort("mass", ascending=.false.) From ec4d44b28a3a8fae3315c82cb654b7f0d34da6c9 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 10:42:56 -0500 Subject: [PATCH 08/15] Fixed issue that was preventing discard information from being written to NetCDF --- src/swiftest/swiftest_discard.f90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/swiftest/swiftest_discard.f90 b/src/swiftest/swiftest_discard.f90 index c9c6df340..bc78f8454 100644 --- a/src/swiftest/swiftest_discard.f90 +++ b/src/swiftest/swiftest_discard.f90 @@ -25,7 +25,7 @@ module subroutine swiftest_discard_system(self, param) lpl_check = allocated(self%pl_discards) ltp_check = allocated(self%tp_discards) - associate(nbody_system => self, tp => self%tp, pl => self%pl, tp_discards => self%tp_discards, pl_discards => self%pl_discards) + associate(nbody_system => self, tp => self%tp, pl => self%pl, tp_discards => self%tp_discards, pl_discards => self%pl_discards, nc => param%system_history%nc) lpl_discards = .false. ltp_discards = .false. if (lpl_check) then @@ -37,9 +37,11 @@ module subroutine swiftest_discard_system(self, param) call tp%discard(nbody_system, param) ltp_discards = (tp_discards%nbody > 0) end if + call nc%open(param) if (ltp_discards) call tp_discards%write_info(param%system_history%nc, param) if (lpl_discards) call pl_discards%write_info(param%system_history%nc, param) if (lpl_discards .and. param%lenergy) call self%conservation_report(param, lterminal=.false.) + call nc%close() if (lpl_check) call pl_discards%setup(0,param) if (ltp_check) call tp_discards%setup(0,param) From af547856e8462459c9ff677c58ceb907212c2053 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 14:19:42 -0500 Subject: [PATCH 09/15] Fixed typo that was preventing the "after" stage to be saved to file (instead it was putting the "before" stage in twice) --- src/collision/collision_io.f90 | 2 +- src/collision/collision_resolve.f90 | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/collision/collision_io.f90 b/src/collision/collision_io.f90 index a798004d1..820f69af1 100644 --- a/src/collision/collision_io.f90 +++ b/src/collision/collision_io.f90 @@ -303,7 +303,7 @@ module subroutine collision_io_netcdf_write_frame_snapshot(self, history, param) select type(before =>self%collider%before) class is (swiftest_nbody_system) - select type(after =>self%collider%before) + select type(after =>self%collider%after) class is (swiftest_nbody_system) do stage = 1,2 if (allocated(pl)) deallocate(pl) diff --git a/src/collision/collision_resolve.f90 b/src/collision/collision_resolve.f90 index acec15b5f..0044fe33c 100644 --- a/src/collision/collision_resolve.f90 +++ b/src/collision/collision_resolve.f90 @@ -316,7 +316,7 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) real(DP), intent(in) :: t !! Time of collision integer(I4B), intent(in) :: status !! Status flag to assign to adds ! Internals - integer(I4B) :: i, ibiggest, ismallest, iother, nstart, nend, nimpactors, nfrag + integer(I4B) :: i, ibiggest, ismallest, iother, nimpactors, nfrag logical, dimension(:), allocatable :: lmask class(swiftest_pl), allocatable :: plnew, plsub character(*), parameter :: FRAGFMT = '("Newbody",I0.7)' @@ -447,8 +447,6 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) end select ! Append the new merged body to the list - nstart = pl_adds%nbody + 1 - nend = pl_adds%nbody + nfrag call pl_adds%append(plnew, lsource_mask=[(.true., i=1, nfrag)]) ! Add the discarded bodies to the discard list @@ -465,8 +463,6 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) allocate(plsub, mold=pl) call pl%spill(plsub, lmask, ldestructive=.false.) - nstart = pl_discards%nbody + 1 - nend = pl_discards%nbody + nimpactors call pl_discards%append(plsub, lsource_mask=[(.true., i = 1, nimpactors)]) call plsub%setup(0, param) From 95868fba6666883d9acee029ebdf1d4753b468d4 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 15:56:59 -0500 Subject: [PATCH 10/15] Fixed issues that were causing fragmentation velocities to go haywire when compiler optimizations were turned on --- src/CMakeLists.txt | 10 +++++----- src/fraggle/fraggle_generate.f90 | 3 ++- src/fraggle/fraggle_util.f90 | 7 ++----- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 09545baf6..4fd3a1cce 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,15 +19,18 @@ SET(STRICT_MATH_FILES ${SRC}/symba/symba_kick.f90 ${SRC}/whm/whm_kick.f90 ${SRC}/swiftest/swiftest_user.f90 + ${SRC}/fraggle/fraggle_generate.f90 + ${SRC}/fraggle/fraggle_util.f90 + ${SRC}/fraggle/fraggle_module.f90 + ${SRC}/misc/lambda_function_module.f90 + ${SRC}/misc/solver_module.f90 ) SET(FAST_MATH_FILES ${SRC}/globals/globals_module.f90 ${SRC}/base/base_module.f90 ${SRC}/netcdf_io/netcdf_io_module.f90 - ${SRC}/misc/lambda_function_module.f90 ${SRC}/misc/io_progress_bar_module.f90 - ${SRC}/misc/solver_module.f90 ${SRC}/encounter/encounter_module.f90 ${SRC}/collision/collision_module.f90 ${SRC}/operator/operator_module.f90 @@ -37,7 +40,6 @@ SET(FAST_MATH_FILES ${SRC}/rmvs/rmvs_module.f90 ${SRC}/helio/helio_module.f90 ${SRC}/symba/symba_module.f90 - ${SRC}/fraggle/fraggle_module.f90 ${SRC}/collision/collision_check.f90 ${SRC}/collision/collision_generate.f90 ${SRC}/collision/collision_io.f90 @@ -47,8 +49,6 @@ SET(FAST_MATH_FILES ${SRC}/encounter/encounter_check.f90 ${SRC}/encounter/encounter_io.f90 ${SRC}/encounter/encounter_util.f90 - ${SRC}/fraggle/fraggle_generate.f90 - ${SRC}/fraggle/fraggle_util.f90 ${SRC}/helio/helio_drift.f90 ${SRC}/helio/helio_gr.f90 ${SRC}/helio/helio_step.f90 diff --git a/src/fraggle/fraggle_generate.f90 b/src/fraggle/fraggle_generate.f90 index cce8f2af1..f9edee2f8 100644 --- a/src/fraggle/fraggle_generate.f90 +++ b/src/fraggle/fraggle_generate.f90 @@ -51,7 +51,6 @@ module subroutine fraggle_generate(self, nbody_system, param, t) call self%set_mass_dist(param) call self%disrupt(nbody_system, param, t) - associate (fragments => self%fragments) ! Populate the list of new bodies nfrag = fragments%nbody @@ -96,6 +95,7 @@ module subroutine fraggle_generate_disrupt(self, nbody_system, param, t, lfailur logical :: lk_plpl, lfailure_local logical, dimension(size(IEEE_ALL)) :: fpe_halting_modes, fpe_quiet_modes real(DP) :: dE, dL + integer(I4B) :: i character(len=STRMAX) :: message real(DP), parameter :: fail_scale_initial = 1.001_DP @@ -135,6 +135,7 @@ module subroutine fraggle_generate_disrupt(self, nbody_system, param, t, lfailur call fraggle_generate_vel_vec(self,lfailure_local) call self%get_energy_and_momentum(nbody_system, param, lbefore=.false.) call self%set_original_scale() + dE = self%Etot(2) - self%Etot(1) dL = .mag.(self%Ltot(:,2) - self%Ltot(:,1)) diff --git a/src/fraggle/fraggle_util.f90 b/src/fraggle/fraggle_util.f90 index 057dfe2b7..a7452882b 100644 --- a/src/fraggle/fraggle_util.f90 +++ b/src/fraggle/fraggle_util.f90 @@ -322,11 +322,8 @@ module subroutine fraggle_util_set_original_scale_factors(self) fragments%rot(:,:) = fragments%rot(:,:) / collider%tscale fragments%rc(:,:) = fragments%rc(:,:) * collider%dscale fragments%vc(:,:) = fragments%vc(:,:) * collider%vscale - - do i = 1, fragments%nbody - fragments%rb(:, i) = fragments%rc(:, i) + impactors%rbcom(:) - fragments%vb(:, i) = fragments%vc(:, i) + impactors%vbcom(:) - end do + fragments%rb(:,:) = fragments%rb(:,:) * collider%dscale + fragments%vc(:,:) = fragments%vb(:,:) * collider%vscale impactors%Qloss = impactors%Qloss * collider%Escale From c351cab536024e9d5c9586b1d2a426486c1d541b Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 16:12:23 -0500 Subject: [PATCH 11/15] Fixed bugs that were preventing the barycentric velocity of fragments from being computed properly --- src/fraggle/fraggle_generate.f90 | 6 +++--- src/fraggle/fraggle_util.f90 | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fraggle/fraggle_generate.f90 b/src/fraggle/fraggle_generate.f90 index f9edee2f8..d8dbeb0de 100644 --- a/src/fraggle/fraggle_generate.f90 +++ b/src/fraggle/fraggle_generate.f90 @@ -515,14 +515,14 @@ module subroutine fraggle_generate_vel_vec(collider, lfailure) lfailure = E_residual < 0.0_DP do concurrent(i = 1:nfrag) - fragments%vb(:,i) = fragments%vc(:,i) + impactors%vbcom(:) + collider%fragments%vb(:,i) = collider%fragments%vc(:,i) + impactors%vbcom(:) end do impactors%vbcom(:) = 0.0_DP do concurrent(i = 1:nfrag) - impactors%vbcom(:) = impactors%vbcom(:) + fragments%mass(i) * fragments%vb(:,i) + impactors%vbcom(:) = impactors%vbcom(:) + collider%fragments%mass(i) * collider%fragments%vb(:,i) end do - impactors%vbcom(:) = impactors%vbcom(:) / fragments%mtot + impactors%vbcom(:) = impactors%vbcom(:) / collider%fragments%mtot end associate return diff --git a/src/fraggle/fraggle_util.f90 b/src/fraggle/fraggle_util.f90 index a7452882b..b69a7aea3 100644 --- a/src/fraggle/fraggle_util.f90 +++ b/src/fraggle/fraggle_util.f90 @@ -188,7 +188,7 @@ module subroutine fraggle_util_set_mass_dist(self, param) fragments%density(istart:nfrag) = fragments%mtot / sum(volume(:)) fragments%radius(istart:nfrag) = (3 * fragments%mass(istart:nfrag) / (4 * PI * fragments%density(istart:nfrag)))**(1.0_DP / 3.0_DP) - do i = istart, nfrag + do concurrent(i = istart:nfrag) fragments%Ip(:, i) = Ip_avg(:) end do @@ -263,7 +263,7 @@ module subroutine fraggle_util_set_natural_scale_factors(self) impactors%Lspin(:,:) = impactors%Lspin(:,:) / collider%Lscale impactors%Lorbit(:,:) = impactors%Lorbit(:,:) / collider%Lscale - do i = 1, 2 + do concurrent(i = 1:2) impactors%rot(:,i) = impactors%Lspin(:,i) / (impactors%mass(i) * impactors%radius(i)**2 * impactors%Ip(3,i)) end do @@ -311,7 +311,7 @@ module subroutine fraggle_util_set_original_scale_factors(self) impactors%vc = impactors%vc * collider%vscale impactors%Lspin = impactors%Lspin * collider%Lscale impactors%Lorbit = impactors%Lorbit * collider%Lscale - do i = 1, 2 + do concurrent(i = 1:2) impactors%rot(:,i) = impactors%Lspin(:,i) * (impactors%mass(i) * impactors%radius(i)**2 * impactors%Ip(3,i)) end do @@ -323,7 +323,7 @@ module subroutine fraggle_util_set_original_scale_factors(self) fragments%rc(:,:) = fragments%rc(:,:) * collider%dscale fragments%vc(:,:) = fragments%vc(:,:) * collider%vscale fragments%rb(:,:) = fragments%rb(:,:) * collider%dscale - fragments%vc(:,:) = fragments%vb(:,:) * collider%vscale + fragments%vb(:,:) = fragments%vb(:,:) * collider%vscale impactors%Qloss = impactors%Qloss * collider%Escale From d745a162ec4c40e8f20a105d4bb34272e68530d5 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Tue, 3 Jan 2023 18:24:14 -0500 Subject: [PATCH 12/15] Fixed typo that prevented Ip from having the correct shape when it is not explicitly passed by the user --- python/swiftest/swiftest/init_cond.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/swiftest/swiftest/init_cond.py b/python/swiftest/swiftest/init_cond.py index 02ff6f8e1..6f513b274 100644 --- a/python/swiftest/swiftest/init_cond.py +++ b/python/swiftest/swiftest/init_cond.py @@ -286,7 +286,7 @@ def vec2xr(param: Dict, **kwargs: Any): if "rot" not in kwargs and "Gmass" in kwargs: kwargs['rot'] = np.zeros((len(kwargs['Gmass']),3)) if "Ip" not in kwargs and "Gmass" in kwargs: - kwargs['Ip'] = np.full_like(kwargs['Gmass'], 0.4) + kwargs['Ip'] = np.full((len(kwargs['Gmass']),3), 0.4) if "time" not in kwargs: kwargs["time"] = np.array([0.0]) From 583e8cacec7c7925a28364953b833d404cf4ce28 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Wed, 4 Jan 2023 16:24:54 -0500 Subject: [PATCH 13/15] Fixed the discard routine so that it is not constantly opening and closing the NetCDF file every single step, but instead only when there is a discard to record. --- src/swiftest/swiftest_discard.f90 | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/swiftest/swiftest_discard.f90 b/src/swiftest/swiftest_discard.f90 index bc78f8454..eafb53452 100644 --- a/src/swiftest/swiftest_discard.f90 +++ b/src/swiftest/swiftest_discard.f90 @@ -37,13 +37,20 @@ module subroutine swiftest_discard_system(self, param) call tp%discard(nbody_system, param) ltp_discards = (tp_discards%nbody > 0) end if - call nc%open(param) - if (ltp_discards) call tp_discards%write_info(param%system_history%nc, param) - if (lpl_discards) call pl_discards%write_info(param%system_history%nc, param) - if (lpl_discards .and. param%lenergy) call self%conservation_report(param, lterminal=.false.) - call nc%close() - if (lpl_check) call pl_discards%setup(0,param) - if (ltp_check) call tp_discards%setup(0,param) + + if (ltp_discards.or.lpl_discards) then + call nc%open(param) + if (lpl_discards) then + call pl_discards%write_info(param%system_history%nc, param) + if (param%lenergy) call self%conservation_report(param, lterminal=.false.) + call pl_discards%setup(0,param) + end if + if (ltp_discards) then + call tp_discards%write_info(param%system_history%nc, param) + call tp_discards%setup(0,param) + end if + call nc%close() + end if end associate From 794a1d00a4601326a3fd2d2f3e4af50fe95b3e29 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Wed, 4 Jan 2023 17:05:55 -0500 Subject: [PATCH 14/15] Fixed typo in origin_type text --- src/collision/collision_resolve.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collision/collision_resolve.f90 b/src/collision/collision_resolve.f90 index 0044fe33c..a745f7b3e 100644 --- a/src/collision/collision_resolve.f90 +++ b/src/collision/collision_resolve.f90 @@ -381,7 +381,7 @@ module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status) if (status == DISRUPTED) then write(origin_type,*) "Disruption" else if (status == HIT_AND_RUN_DISRUPT) then - write(origin_type,*) "Hit and run fragmention" + write(origin_type,*) "Hit and run fragmentation" end if call plnew%info(1)%copy(pl%info(ibiggest)) plnew%status(1) = OLD_PARTICLE From 08bbfcc753bed61cc36671d54f3029cc8b7a63fc Mon Sep 17 00:00:00 2001 From: David A Minton Date: Wed, 4 Jan 2023 22:13:14 -0500 Subject: [PATCH 15/15] Allow the swiftest log file to be appended on a restart --- src/base/base_module.f90 | 2 +- src/swiftest/swiftest_driver.f90 | 2 +- src/swiftest/swiftest_io.f90 | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/base/base_module.f90 b/src/base/base_module.f90 index 732045594..fe2f0710b 100644 --- a/src/base/base_module.f90 +++ b/src/base/base_module.f90 @@ -20,7 +20,7 @@ module base !> User defined parameters that are read in from the parameters input file. !> Each paramter is initialized to a default values. type, abstract :: base_parameters - character(len=:), allocatable :: integrator !! Symbolic name of the nbody integrator used + character(len=:), allocatable :: integrator !! Name of the nbody integrator used character(len=:), allocatable :: param_file_name !! The name of the parameter file integer(I4B) :: maxid = -1 !! The current maximum particle id number integer(I4B) :: maxid_collision = 0 !! The current maximum collision id number diff --git a/src/swiftest/swiftest_driver.f90 b/src/swiftest/swiftest_driver.f90 index 4d8279326..b82a7bd37 100644 --- a/src/swiftest/swiftest_driver.f90 +++ b/src/swiftest/swiftest_driver.f90 @@ -46,7 +46,7 @@ program swiftest_driver !> Read in the user-defined parameters file and the initial conditions of the nbody_system allocate(swiftest_parameters :: param) param%integrator = trim(adjustl(integrator)) - call param%set_display(display_style) + param%display_style = trim(adjustl(display_style)) call param%read_in(param_file_name) associate(t0 => param%t0, & diff --git a/src/swiftest/swiftest_io.f90 b/src/swiftest/swiftest_io.f90 index d88402be2..ba53fde8f 100644 --- a/src/swiftest/swiftest_io.f90 +++ b/src/swiftest/swiftest_io.f90 @@ -2163,6 +2163,8 @@ module subroutine swiftest_io_param_reader(self, unit, iotype, v_list, iostat, i end select iostat = 0 + + call param%set_display(param%display_style) ! Print the contents of the parameter file to standard output call param%writer(unit = param%display_unit, iotype = "none", v_list = [0], iostat = iostat, iomsg = iomsg) @@ -2737,7 +2739,6 @@ module subroutine swiftest_io_read_in_param(self, param_file_name) ! Read in name of parameter file self%param_file_name = trim(adjustl(param_file_name)) - write(self%display_unit, *) 'Parameter input file is ' // self%param_file_name !! todo: Currently this procedure does not work in user-defined derived-type input mode !! as the newline characters are ignored in the input file when compiled in ifort. @@ -2762,14 +2763,16 @@ module subroutine swiftest_io_set_display_param(self, display_style) class(swiftest_parameters), intent(inout) :: self !! Current run configuration parameters character(*), intent(in) :: display_style !! Style of the output display ! Internals - character(STRMAX) :: errmsg + character(STRMAX) :: errmsg + logical :: fileExists select case(display_style) case ('STANDARD') self%display_unit = OUTPUT_UNIT !! stdout from iso_fortran_env self%log_output = .false. case ('COMPACT', 'PROGRESS') - if (self%lrestart) then + inquire(SWIFTEST_LOG_FILE, exist=fileExists) + if (self%lrestart.and.fileExists) then open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status="OLD", position="APPEND", err = 667, iomsg = errmsg) else open(unit=SWIFTEST_LOG_OUT, file=SWIFTEST_LOG_FILE, status="REPLACE", err = 667, iomsg = errmsg)