From 81514ea535dad92811e1578ae589d2db483d37fd Mon Sep 17 00:00:00 2001 From: Carlisle Wishard Date: Mon, 25 Oct 2021 15:46:57 -0400 Subject: [PATCH 1/4] fixed bug in netcdf_get_old_f_final_system updated so that it pulls in info from the last timeslot, not from the first. seems to fix Ltot_orig = 0 problem, but angular momentum still isn't conserved. --- src/netcdf/netcdf.f90 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/netcdf/netcdf.f90 b/src/netcdf/netcdf.f90 index 27eab5f33..fec4bbc38 100644 --- a/src/netcdf/netcdf.f90 +++ b/src/netcdf/netcdf.f90 @@ -77,29 +77,29 @@ module function netcdf_get_old_t_final_system(self, param) result(old_t_final) old_t_final = val(1) if (param%lenergy) then - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[itmax], count=[1]) ) KE_orb_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[itmax], count=[1]) ) KE_spin_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[itmax], count=[1]) ) PE_orig = val(1) self%Eorbit_orig = KE_orb_orig + KE_spin_orig + PE_orig - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[itmax], count=[1]) ) self%Lorbit_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[itmax], count=[1]) ) self%Lorbit_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[itmax], count=[1]) ) self%Lorbit_orig(3) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[itmax], count=[1]) ) self%Lspin_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[itmax], count=[1]) ) self%Lspin_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[1], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[itmax], count=[1]) ) self%Lspin_orig(3) = val(1) self%Ltot_orig(:) = self%Lorbit_orig(:) + self%Lspin_orig(:) From c7960b205478874c7d3b26a516d425bbbe2284a7 Mon Sep 17 00:00:00 2001 From: Carlisle Wishard Date: Mon, 25 Oct 2021 16:57:11 -0400 Subject: [PATCH 2/4] undid last commit to netcdf_get_old_t_final_system switched back to index 1 instead of index itmax --- src/netcdf/netcdf.f90 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/netcdf/netcdf.f90 b/src/netcdf/netcdf.f90 index fec4bbc38..27eab5f33 100644 --- a/src/netcdf/netcdf.f90 +++ b/src/netcdf/netcdf.f90 @@ -77,29 +77,29 @@ module function netcdf_get_old_t_final_system(self, param) result(old_t_final) old_t_final = val(1) if (param%lenergy) then - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[1], count=[1]) ) KE_orb_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[1], count=[1]) ) KE_spin_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[1], count=[1]) ) PE_orig = val(1) self%Eorbit_orig = KE_orb_orig + KE_spin_orig + PE_orig - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(3) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[1], count=[1]) ) self%Lspin_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[1], count=[1]) ) self%Lspin_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[1], count=[1]) ) self%Lspin_orig(3) = val(1) self%Ltot_orig(:) = self%Lorbit_orig(:) + self%Lspin_orig(:) From a99dc62fca8c2e2e9c90a36eeaec7bc723180f3b Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 25 Oct 2021 16:59:26 -0400 Subject: [PATCH 3/4] Fixed restart issues. bin.nc is now opened read-only when determining the final output time --- src/netcdf/netcdf.f90 | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/netcdf/netcdf.f90 b/src/netcdf/netcdf.f90 index fec4bbc38..a4ee55c8c 100644 --- a/src/netcdf/netcdf.f90 +++ b/src/netcdf/netcdf.f90 @@ -68,38 +68,38 @@ module function netcdf_get_old_t_final_system(self, param) result(old_t_final) real(DP), dimension(1) :: val real(DP) :: KE_orb_orig, KE_spin_orig, PE_orig, Ltmp - call param%nciu%open(param) + call param%nciu%open(param, readonly=.true.) call check( nf90_inquire_dimension(param%nciu%ncid, param%nciu%time_dimid, len=itmax) ) call check( nf90_inquire_dimension(param%nciu%ncid, param%nciu%id_dimid, len=idmax) ) allocate(vals(idmax)) - call check( nf90_get_var(param%nciu%ncid, param%nciu%time_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%time_varid, val, start=[1], count=[1]) ) old_t_final = val(1) if (param%lenergy) then - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_orb_varid, val, start=[1], count=[1]) ) KE_orb_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%KE_spin_varid, val, start=[1], count=[1]) ) KE_spin_orig = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%PE_varid, val, start=[1], count=[1]) ) PE_orig = val(1) self%Eorbit_orig = KE_orb_orig + KE_spin_orig + PE_orig - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbx_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orby_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_orbz_varid, val, start=[1], count=[1]) ) self%Lorbit_orig(3) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinx_varid, val, start=[1], count=[1]) ) self%Lspin_orig(1) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spiny_varid, val, start=[1], count=[1]) ) self%Lspin_orig(2) = val(1) - call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[itmax], count=[1]) ) + call check( nf90_get_var(param%nciu%ncid, param%nciu%L_spinz_varid, val, start=[1], count=[1]) ) self%Lspin_orig(3) = val(1) self%Ltot_orig(:) = self%Lorbit_orig(:) + self%Lspin_orig(:) @@ -110,6 +110,7 @@ module function netcdf_get_old_t_final_system(self, param) result(old_t_final) end if deallocate(vals) + call param%nciu%close() return end function netcdf_get_old_t_final_system @@ -350,7 +351,7 @@ module subroutine netcdf_open(self, param, readonly) if (readonly) mode = NF90_NOWRITE end if - call check( nf90_open(param%outfile, NF90_WRITE, self%ncid) ) + call check( nf90_open(param%outfile, mode, self%ncid) ) call check( nf90_inq_dimid(self%ncid, TIME_DIMNAME, self%time_dimid) ) call check( nf90_inq_dimid(self%ncid, ID_DIMNAME, self%id_dimid) ) From 7f95561bfce6ff79f89443cdd28875e574363219 Mon Sep 17 00:00:00 2001 From: David A Minton Date: Mon, 25 Oct 2021 19:02:11 -0400 Subject: [PATCH 4/4] Added fix for condition when the narrow phase returns no true encounters --- src/encounter/encounter_check.f90 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/encounter/encounter_check.f90 b/src/encounter/encounter_check.f90 index e8bd7987e..bbfa98ba3 100644 --- a/src/encounter/encounter_check.f90 +++ b/src/encounter/encounter_check.f90 @@ -289,6 +289,12 @@ subroutine encounter_check_reduce_broadphase(n, nenc, index1, index2, lencounter logical, dimension(:), allocatable :: ltmp nenc = count(lencounter(:)) ! Count the true number of encounters + if (nenc == 0) then + if (allocated(index1)) deallocate(index1) + if (allocated(index2)) deallocate(index2) + if (allocated(lvdotr)) deallocate(lvdotr) + return + end if allocate(itmp(nenc)) itmp(:) = pack(index1(:), lencounter(:))