diff --git a/Makefile b/Makefile index a49f80756..0e2b361e6 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,6 @@ SWIFTEST_MODULES = swiftest_globals.f90 \ rmvs_classes.f90 \ helio_classes.f90 \ symba_classes.f90 \ - util.f90 \ module_nrutil.f90 \ swiftest.f90 diff --git a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in index 2e8d49f62..81c636655 100644 --- a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in +++ b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in @@ -1,5 +1,5 @@ 0 0.00029591220819207774 0.004650467260962157 -0.0 -0.0 +4.7535806948127355e-12 +-2.2473967953572827e-18 diff --git a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/param.swifter.in b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/param.swifter.in index 627edf452..ab8bf65ca 100644 --- a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/param.swifter.in +++ b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/param.swifter.in @@ -21,6 +21,6 @@ CHK_QMIN_RANGE 0.004650467260962157 1000.0 EXTRA_FORCE NO BIG_DISCARD NO CHK_CLOSE YES -J2 0.0 -J4 0.0 +J2 4.7535806948127355e-12 +J4 -2.2473967953572827e-18 RHILL_PRESENT YES diff --git a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb index 69f51f7d5..e8d0dbc26 100644 --- a/examples/rmvs_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb +++ b/examples/rmvs_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb @@ -100,391 +100,7 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'id' (id: 24)>\n",
-       "array([  1,   2,   3,   4,   5,   6,   7,   8, 101, 102, 103, 104, 105, 106,\n",
-       "       107, 108, 109, 110, 111, 112, 113, 114, 115, 116])\n",
-       "Coordinates:\n",
-       "  * id       (id) int64 1 2 3 4 5 6 7 8 101 ... 109 110 111 112 113 114 115 116
" - ], - "text/plain": [ - "\n", - "array([ 1, 2, 3, 4, 5, 6, 7, 8, 101, 102, 103, 104, 105, 106,\n", - " 107, 108, 109, 110, 111, 112, 113, 114, 115, 116])\n", - "Coordinates:\n", - " * id (id) int64 1 2 3 4 5 6 7 8 101 ... 109 110 111 112 113 114 115 116" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "swiftdiff.id" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -845,28 +461,28 @@ "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n", "Coordinates:\n", - " id int64 4\n", - " * time (d) (time (d)) float64 0.0 11.0 22.0 33.0 ... 330.0 341.0 352.0 363.0
  • " ], "text/plain": [ "\n", "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n", "Coordinates:\n", - " id int64 4\n", + " id int64 101\n", " * time (d) (time (d)) float64 0.0 11.0 22.0 33.0 ... 330.0 341.0 352.0 363.0" ] }, - "execution_count": 9, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "swiftdiff['px'].sel(id=4)" + "swiftdiff['px'].sel(id=102)" ] }, { @@ -935,7 +551,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -970,7 +586,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] diff --git a/src/discard/discard.f90 b/src/discard/discard.f90 index 1a1aecea6..f82826fac 100644 --- a/src/discard/discard.f90 +++ b/src/discard/discard.f90 @@ -129,35 +129,29 @@ subroutine discard_peri_tp(tp, system, param) real(DP) :: r2 real(DP), dimension(NDIM) :: dx - associate(cb => system%cb, ntp => tp%nbody, pl => system%pl, npl => system%pl%nbody, qmin_coord => param%qmin_coord, t => param%t, msys => system%msys) - if (lfirst) then - call util_hills(npl, pl) - call util_peri(lfirst, ntp, tp, cb%Gmass, msys, param%qmin_coord) - lfirst = .false. - else - call util_peri(lfirst, ntp, tp, cb%Gmass, msys, param%qmin_coord) - do i = 1, ntp - if (tp%status(i) == ACTIVE) then - if (tp%isperi(i) == 0) then - ih = 1 - do j = 1, npl - dx(:) = tp%xh(:, i) - pl%xh(:, j) - r2 = dot_product(dx(:), dx(:)) - if (r2 <= (pl%rhill(j))**2) ih = 0 - end do - if (ih == 1) then - if ((tp%atp(i) >= param%qmin_alo) .and. & - (tp%atp(i) <= param%qmin_ahi) .and. & - (tp%peri(i) <= param%qmin)) then - tp%status(i) = DISCARDED_PERI - write(*, *) "Particle ", tp%id(i), " perihelion distance too small at t = ", t - tp%ldiscard(i) = .true. - end if + associate(cb => system%cb, ntp => tp%nbody, pl => system%pl, npl => system%pl%nbody, t => param%t) + call tp%get_peri(system, param) + do i = 1, ntp + if (tp%status(i) == ACTIVE) then + if (tp%isperi(i) == 0) then + ih = 1 + do j = 1, npl + dx(:) = tp%xh(:, i) - pl%xh(:, j) + r2 = dot_product(dx(:), dx(:)) + if (r2 <= (pl%rhill(j))**2) ih = 0 + end do + if (ih == 1) then + if ((tp%atp(i) >= param%qmin_alo) .and. & + (tp%atp(i) <= param%qmin_ahi) .and. & + (tp%peri(i) <= param%qmin)) then + tp%status(i) = DISCARDED_PERI + write(*, *) "Particle ", tp%id(i), " perihelion distance too small at t = ", t + tp%ldiscard(i) = .true. end if end if end if - end do - end if + end if + end do end associate return diff --git a/src/io/io.f90 b/src/io/io.f90 index 8e8643ac0..d04e10466 100644 --- a/src/io/io.f90 +++ b/src/io/io.f90 @@ -41,7 +41,7 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) ! Read the pair of tokens. The first one is the parameter name, the second is the value. param_name = io_get_token(line_trim, ifirst, ilast, iostat) if (param_name == '') cycle ! No parameter name (usually because this line is commented out) - call util_toupper(param_name) + call io_toupper(param_name) ifirst = ilast + 1 param_value = io_get_token(line_trim, ifirst, ilast, iostat) select case (param_name) @@ -61,25 +61,25 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) case ("TP_IN") self%intpfile = param_value case ("IN_TYPE") - call util_toupper(param_value) + call io_toupper(param_value) self%in_type = param_value case ("ISTEP_OUT") read(param_value, *) self%istep_out case ("BIN_OUT") self%outfile = param_value case ("OUT_TYPE") - call util_toupper(param_value) + call io_toupper(param_value) self%out_type = param_value case ("OUT_FORM") - call util_toupper(param_value) + call io_toupper(param_value) self%out_form = param_value case ("OUT_STAT") - call util_toupper(param_value) + call io_toupper(param_value) self%out_stat = param_value case ("ISTEP_DUMP") read(param_value, *) self%istep_dump case ("CHK_CLOSE") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%lclose = .true. case ("CHK_RMIN") read(param_value, *) self%rmin @@ -90,7 +90,7 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) case ("CHK_QMIN") read(param_value, *) self%qmin case ("CHK_QMIN_COORD") - call util_toupper(param_value) + call io_toupper(param_value) self%qmin_coord = param_value case ("CHK_QMIN_RANGE") read(param_value, *) self%qmin_alo @@ -100,13 +100,13 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) case ("ENC_OUT") self%encounter_file = param_value case ("EXTRA_FORCE") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%lextra_force = .true. case ("BIG_DISCARD") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T' ) self%lbig_discard = .true. case ("RHILL_PRESENT") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T' ) self%lrhill_present = .true. case ("MU2KG") read(param_value, *) self%MU2KG @@ -115,10 +115,10 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) case ("DU2M") read(param_value, *) self%DU2M case ("ENERGY") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%lenergy = .true. case ("GR") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%lgr = .true. case ("NPLMAX", "NTPMAX", "MTINY", "PARTICLE_FILE", "ROTATION", "TIDES", "FRAGMENTATION", "SEED", "YARKOVSKY", "YORP") ! Ignore SyMBA-specific, not-yet-implemented, or obsolete input parameters case default @@ -470,7 +470,7 @@ module function io_get_args(integrator, param_file_name) result(ierr) call get_command_argument(2, arg2, status = ierr_arg2) if ((ierr_arg1 == 0) .and. (ierr_arg2 == 0)) then ierr = 0 - call util_toupper(arg1) + call io_toupper(arg1) select case(arg1) case('BS') integrator = BS @@ -952,6 +952,31 @@ module subroutine io_read_initialize_system(self, param) end subroutine io_read_initialize_system + module subroutine io_toupper(string) + !! author: David A. Minton + !! + !! Convert string to uppercase + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_toupper.f90 + implicit none + ! Arguments + character(*), intent(inout) :: string !! String to make upper case + ! Internals + integer(I4B) :: i, length, idx + + length = len(string) + do i = 1, length + idx = iachar(string(i:i)) + if ((idx >= lowercase_begin) .and. (idx <= lowercase_end)) then + idx = idx + uppercase_offset + string(i:i) = achar(idx) + end if + end do + + return + + end subroutine io_toupper + module subroutine io_write_discard(self, param) !! author: David A. Minton !! diff --git a/src/modules/swiftest.f90 b/src/modules/swiftest.f90 index dcc8dc875..fd8ffaf1b 100644 --- a/src/modules/swiftest.f90 +++ b/src/modules/swiftest.f90 @@ -10,7 +10,6 @@ module swiftest use rmvs_classes use helio_classes use symba_classes - use util use module_nrutil !use advisor_annotate !$ use omp_lib diff --git a/src/modules/swiftest_classes.f90 b/src/modules/swiftest_classes.f90 index e4d967d19..a5885255c 100644 --- a/src/modules/swiftest_classes.f90 +++ b/src/modules/swiftest_classes.f90 @@ -12,15 +12,15 @@ module swiftest_classes public :: gr_getaccb_ns_body, gr_p4_pos_kick, gr_pseudovel2vel, gr_vel2pseudovel public :: io_dump_param, io_dump_swiftest, io_dump_system, io_get_args, io_get_token, io_param_reader, io_param_writer, io_read_body_in, & io_read_cb_in, io_read_param_in, io_read_frame_body, io_read_frame_cb, io_read_frame_system, io_read_initialize_system, & - io_write_discard, io_write_encounter, io_write_frame_body, io_write_frame_cb, io_write_frame_system + io_toupper, io_write_discard, io_write_encounter, io_write_frame_body, io_write_frame_cb, io_write_frame_system public :: kickvh_body public :: obl_acc_body, obl_acc_pl, obl_acc_tp public :: orbel_el2xv_vec, orbel_xv2el_vec, orbel_scget, orbel_xv2aeq, orbel_xv2aqt public :: setup_body, setup_construct_system, setup_pl, setup_tp public :: user_getacch_body - public :: util_coord_b2h_pl, util_coord_b2h_tp, util_coord_h2b_pl, util_coord_h2b_tp, util_fill_body, util_fill_pl, util_fill_tp, & - util_reverse_status, util_set_beg_end_cb, util_set_beg_end_pl, util_set_ir3h, util_set_msys, util_set_mu_pl, & - util_set_mu_tp, util_set_rhill, util_spill_body, util_spill_pl, util_spill_tp + public :: util_coord_b2h_pl, util_coord_b2h_tp, util_coord_h2b_pl, util_coord_h2b_tp, util_exit, util_fill_body, util_fill_pl, util_fill_tp, & + util_index, util_peri_tp, util_reverse_status, util_set_beg_end_cb, util_set_beg_end_pl, util_set_ir3h, util_set_msys, util_set_mu_pl, & + util_set_mu_tp, util_set_rhill, util_sort, util_spill_body, util_spill_pl, util_spill_tp, util_valid, util_version !******************************************************************************************************************************** ! swiftest_parameters class definitions @@ -236,6 +236,7 @@ module swiftest_classes procedure, public :: h2b => util_coord_h2b_tp !! Convert test particles from heliocentric to barycentric coordinates (position and velocity) procedure, public :: b2h => util_coord_b2h_tp !! Convert test particles from barycentric to heliocentric coordinates (position and velocity) procedure, public :: fill => util_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure, public :: get_peri => util_peri_tp !! Determine system pericenter passages for test particles procedure, public :: spill => util_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type swiftest_tp @@ -546,6 +547,11 @@ module subroutine io_write_discard(self, param) class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine io_write_discard + module subroutine io_toupper(string) + implicit none + character(*), intent(inout) :: string !! String to make upper case + end subroutine io_toupper + module subroutine io_write_encounter(t, name1, name2, mass1, mass2, radius1, radius2, & xh1, xh2, vh1, vh2, encounter_file, out_type) implicit none @@ -650,34 +656,6 @@ module subroutine setup_pl(self,n) integer, intent(in) :: n !! Number of massive bodies to allocate space for end subroutine setup_pl - module subroutine util_set_ir3h(self) - implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest body object - end subroutine util_set_ir3h - - module subroutine util_set_msys(self) - implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object - end subroutine util_set_msys - - module subroutine util_set_mu_pl(self, cb) - implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object - end subroutine util_set_mu_pl - - module subroutine util_set_mu_tp(self, cb) - implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object - end subroutine util_set_mu_tp - - module subroutine util_set_rhill(self,cb) - implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest massive body object - end subroutine util_set_rhill - module subroutine setup_tp(self, n) implicit none class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object @@ -717,6 +695,11 @@ module subroutine util_coord_h2b_tp(self, cb) class(swiftest_cb), intent(in) :: cb !! Swiftest central body object end subroutine util_coord_h2b_tp + module subroutine util_exit(code) + implicit none + integer(I4B), intent(in) :: code !! Failure exit code + end subroutine util_exit + module subroutine util_fill_body(self, inserts, lfill_list) implicit none class(swiftest_body), intent(inout) :: self !! Swiftest body object @@ -738,6 +721,19 @@ module subroutine util_fill_tp(self, inserts, lfill_list) logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_tp + module subroutine util_index(arr, index) + implicit none + integer(I4B), dimension(:), intent(out) :: index + real(DP), dimension(:), intent(in) :: arr + end subroutine util_index + + module subroutine util_peri_tp(self, system, param) + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + end subroutine util_peri_tp + module subroutine util_reverse_status(self) implicit none class(swiftest_body), intent(inout) :: self !! Swiftest body object @@ -758,6 +754,53 @@ module subroutine util_set_beg_end_pl(self, xbeg, xend, vbeg) real(DP), dimension(:,:), intent(in), optional :: vbeg !! vbeg is an unused variable to keep this method forward compatible with RMVS end subroutine util_set_beg_end_pl + module subroutine util_set_ir3h(self) + implicit none + class(swiftest_body), intent(inout) :: self !! Swiftest body object + end subroutine util_set_ir3h + + module subroutine util_set_msys(self) + implicit none + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object + end subroutine util_set_msys + + module subroutine util_set_mu_pl(self, cb) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + end subroutine util_set_mu_pl + + module subroutine util_set_mu_tp(self, cb) + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + end subroutine util_set_mu_tp + + module subroutine util_set_rhill(self,cb) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest massive body object + end subroutine util_set_rhill + end interface + + interface util_sort + module subroutine util_sort_i4b(arr) + implicit none + integer(I4B), dimension(:), intent(inout) :: arr + end subroutine util_sort_i4b + + module subroutine util_sort_sp(arr) + implicit none + real(SP), dimension(:), intent(inout) :: arr + end subroutine util_sort_sp + + module subroutine util_sort_dp(arr) + implicit none + real(DP), dimension(:), intent(inout) :: arr + end subroutine util_sort_dp + end interface + + interface module subroutine util_spill_body(self, discards, lspill_list) implicit none class(swiftest_body), intent(inout) :: self !! Swiftest body object @@ -779,6 +822,15 @@ module subroutine util_spill_tp(self, discards, lspill_list) logical, dimension(:), intent(in) :: lspill_list !! Logical array of bodies to spill into the discards end subroutine util_spill_tp + module subroutine util_valid(pl, tp) + implicit none + class(swiftest_pl), intent(in) :: pl + class(swiftest_tp), intent(in) :: tp + end subroutine util_valid + + module subroutine util_version() + implicit none + end subroutine util_version end interface end module swiftest_classes diff --git a/src/modules/util.f90 b/src/modules/util.f90 deleted file mode 100644 index 874d20789..000000000 --- a/src/modules/util.f90 +++ /dev/null @@ -1,96 +0,0 @@ -module util - use swiftest_globals - use swiftest_classes - implicit none - interface - - module subroutine util_exit(code) - implicit none - integer(I4B), intent(in) :: code - end subroutine util_exit - - module subroutine util_get_energy_and_momentum(self) - implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object - end subroutine util_get_energy_and_momentum - - module subroutine util_hills(npl, swiftest_plA) - implicit none - integer(I4B), intent(in) :: npl - class(swiftest_pl), intent(inout) :: swiftest_plA - end subroutine util_hills - - module subroutine util_index(arr, index) - implicit none - integer(I4B), dimension(:), intent(out) :: index - real(DP), dimension(:), intent(in) :: arr - end subroutine util_index - - module subroutine util_peri(lfirst, ntp, tp, mu, msys, qmin_coord) - logical, intent(in) :: lfirst !! Logical flag indicating whether current invocation is the first - integer(I4B), intent(in) :: ntp !! Number of active test particles - class(swiftest_tp), intent(inout) :: tp !! Swiftest test particle class - real(DP), intent(in) :: mu !! G * (m1 + m2) = mass of the Sun in this routine - real(DP), intent(in) :: msys !! Total system masse - character(len=*), intent(in) :: qmin_coord !! Coordinate frame for qmin (see swiftest_globals for symbolic definitions) - end subroutine util_peri - - module subroutine util_toupper(string) - implicit none - character(*), intent(inout) :: string - end subroutine util_toupper - - module subroutine util_valid(pl, tp) - implicit none - class(swiftest_pl), intent(in) :: pl - class(swiftest_tp), intent(in) :: tp - end subroutine util_valid - - module subroutine util_version - implicit none - end subroutine util_version - - end interface - - interface util_sort - module subroutine util_sort_i4b(arr) - implicit none - integer(I4B), dimension(:), intent(inout) :: arr - end subroutine util_sort_i4b - - module subroutine util_sort_sp(arr) - implicit none - real(SP), dimension(:), intent(inout) :: arr - end subroutine util_sort_sp - - module subroutine util_sort_dp(arr) - implicit none - real(DP), dimension(:), intent(inout) :: arr - end subroutine util_sort_dp - end interface - - interface - module function calc_qrd_pstar(mtarg,mp,alpha) result(ans) - implicit none - real(DP),intent(in) :: mtarg, mp, alpha - real(DP) :: ans - end function calc_qrd_pstar - - module function calc_qrd_rev(mp,mtarg,mint,den1,den2, vimp) result(ans) - implicit none - real(DP),intent(in) :: mp, mtarg, mint, den1, den2, vimp - real(DP) :: ans - end function calc_qrd_rev - - module function calc_b(mp_pos, mp_vel, mp_r, mtarg_pos, mtarg_vel, mtarg_r) result(b) - implicit none - real(DP), intent(in), dimension(3) :: mp_pos, mp_vel, mtarg_pos, mtarg_vel - real(DP), intent(in) :: mp_r, mtarg_r - real(DP) :: b - end function calc_b - - end interface - - - -end module util diff --git a/src/rmvs/rmvs_setup.f90 b/src/rmvs/rmvs_setup.f90 index 83dd51106..4607bfbb0 100644 --- a/src/rmvs/rmvs_setup.f90 +++ b/src/rmvs/rmvs_setup.f90 @@ -12,7 +12,7 @@ module subroutine rmvs_setup_pl(self,n) class(rmvs_pl), intent(inout) :: self !! RMVS test particle object integer(I4B), intent(in) :: n !! Number of massive bodies to allocate ! Internals - integer(I4B) :: i,j + integer(I4B) :: i,j !> Call allocation method for parent class associate(pl => self) diff --git a/src/rmvs/rmvs_step.f90 b/src/rmvs/rmvs_step.f90 index 82f3a4101..bb6c0d843 100644 --- a/src/rmvs/rmvs_step.f90 +++ b/src/rmvs/rmvs_step.f90 @@ -449,7 +449,6 @@ subroutine rmvs_make_planetocentric(cb, pl, tp) return end subroutine rmvs_make_planetocentric - subroutine rmvs_peri_tp(tp, pl, t, dt, lfirst, inner_index, ipleP, param) !! author: David A. Minton !! diff --git a/src/symba/symba_io.f90 b/src/symba/symba_io.f90 index 8fd9bc6bc..67c5f979d 100644 --- a/src/symba/symba_io.f90 +++ b/src/symba/symba_io.f90 @@ -60,18 +60,18 @@ module subroutine symba_io_param_reader(self, unit, iotype, v_list, iostat, ioms ! Read the pair of tokens. The first one is the parameter name, the second is the value. param_name = io_get_token(line_trim, ifirst, ilast, iostat) if (param_name == '') cycle ! No parameter name (usually because this line is commented out) - call util_toupper(param_name) + call io_toupper(param_name) ifirst = ilast + 1 param_value = io_get_token(line_trim, ifirst, ilast, iostat) select case (param_name) case ("FRAGMENTATION") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == "T") self%lfragmentation = .true. case ("ROTATION") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%lrotation = .true. case ("TIDES") - call util_toupper(param_value) + call io_toupper(param_value) if (param_value == "YES" .or. param_value == 'T') self%ltides = .true. case ("MTINY") read(param_value, *) param%mtiny diff --git a/src/util/util_exit.f90 b/src/util/util_exit.f90 index ecf8d096d..4413bd9b3 100644 --- a/src/util/util_exit.f90 +++ b/src/util/util_exit.f90 @@ -1,29 +1,33 @@ -submodule (util) s_util_exit +submodule (swiftest_classes) s_util_exit use swiftest contains - module procedure util_exit - !! author: David A. Minton - !! - !! Print termination message and exit program - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_exit.f90 - !! Adapted from Hal Levison's Swift routine util_exit.f - character(*), parameter :: BAR = '("------------------------------------------------")' + module subroutine util_exit(code) + !! author: David A. Minton + !! + !! Print termination message and exit program + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_exit.f90 + !! Adapted from Hal Levison's Swift routine util_exit.f + implicit none + ! Arguments + integer(I4B), intent(in) :: code + ! Internals + character(*), parameter :: BAR = '("------------------------------------------------")' - select case(code) - case(SUCCESS) - write(*, SUCCESS_MSG) VERSION_NUMBER - write(*, BAR) - case(USAGE) - write(*, USAGE_MSG) - case(HELP) - write(*, HELP_MSG) - case default - write(*, FAIL_MSG) VERSION_NUMBER - write(*, BAR) - end select + select case(code) + case(SUCCESS) + write(*, SUCCESS_MSG) VERSION_NUMBER + write(*, BAR) + case(USAGE) + write(*, USAGE_MSG) + case(HELP) + write(*, HELP_MSG) + case default + write(*, FAIL_MSG) VERSION_NUMBER + write(*, BAR) + end select - stop + stop - end procedure util_exit + end subroutine util_exit end submodule s_util_exit diff --git a/src/util/util_get.f90 b/src/util/util_get.f90 deleted file mode 100644 index 2bb1c5f2d..000000000 --- a/src/util/util_get.f90 +++ /dev/null @@ -1,77 +0,0 @@ -! submodule (swiftest_classes) s_util_get_energy_and_momentum -! contains -! module procedure util_get_energy_and_momentum -! !! author: David A. Minton -! !! -! !! Compute total system angular momentum vector and kinetic, potential and total system energy -! !! -! !! Adapted from David E. Kaufmann's Swifter routine: symba_energy.f90 -! !! Adapted from Martin Duncan's Swift routine anal_energy.f -! use swiftest -! implicit none - -! integer(I4B) :: i, j -! real(DP) :: mass, msys, r2, v2, oblpot, ke, pe -! real(DP), dimension(NDIM) :: h, x, v, dx, htot -! real(DP), dimension(:), allocatable :: irh - -! select type(pl => self%pl) -! class is (swiftest_pl) -! call pl%h2b(self%cb) -! htot(:) = 0.0_DP -! ke = 0.0_DP -! pe = 0.0_DP - -! !!$omp parallel do default(private) & -! !!$omp shared (self) & -! !!$omp reduction (+:ke, pe, htot) -! do i = 1, pl%nbody -! x(:) = pl%xb(:, i) -! v(:) = pl%vb(:, i) -! mass = pl%Gmass(i) -! h(:) = x(:) .cross. v(:) -! htot(:) = htot(:) + mass * h(:) -! v2 = dot_product(v(:), v(:)) -! ke = ke + 0.5_DP * mass * v2 -! do j = i + 1, pl%nbody -! dx(:) = pl%xb(:, j) - x(:) -! r2 = dot_product(dx(:), dx(:)) -! if (r2 /= 0) then -! pe = pe - mass * pl%Gmass(j) / sqrt(r2) -! end if -! end do -! end do -! !!$omp end parallel do -! end select - -! select type(cb => self%cb) -! class is (swiftest_cb) -! ! Add in the central body -! x(:) = cb%xb(:) -! v(:) = cb%vb(:) -! mass = cb%Gmass -! h(:) = x(:) .cross. v(:) -! htot(:) = htot(:) + mass * h(:) -! v2 = dot_product(v(:), v(:)) -! ke = ke + 0.5_DP * mass * v2 -! if (cb%j2rp2 /= 0.0_DP) then -! allocate(irh(self%pl%nbody)) -! do i = 1, self%pl%nbody -! r2 = dot_product(self%pl%xh(:, i), self%pl%xh(:, i)) -! irh(i) = 1.0_DP / sqrt(r2) -! end do -! oblpot = self%pl%obl_pot(cb, irh) -! deallocate(irh) -! pe = pe + oblpot -! end if -! end select - -! self%pe = pe -! self%ke = ke -! self%te = ke + pe -! self%htot(:) = htot(:) - -! return - -! end procedure util_get_energy_and_momentum -! end submodule s_util_get_energy_and_momentum diff --git a/src/util/util_hills.f90 b/src/util/util_hills.f90 deleted file mode 100644 index b743e1f31..000000000 --- a/src/util/util_hills.f90 +++ /dev/null @@ -1,32 +0,0 @@ -submodule (util) s_util_hills - use swiftest -contains - module procedure util_hills - !! author: David A. Minton - !! - !! Compute Hill sphere radii of planets - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_hills.f90 - !! Adapted from Hal Levison's Swift routine util_hills.f - integer(I4B) :: i - real(DP) :: msun, mp, mu, energy, ap, r, v2 - - msun = swiftest_plA%mass(1) - do i = 2, npl - mp = swiftest_plA%mass(i) - if (mp > 0.0_DP) then - mu = msun + mp - r = norm2(swiftest_plA%xh(:, i)) - v2 = dot_product(swiftest_plA%vh(:, i), swiftest_plA%vh(:, i)) - energy = 0.5_DP*v2 - mu/r - ap = -0.5_DP*mu/energy - swiftest_plA%rhill(i) = ap*(((mp/mu)/3.0_DP)**(1.0_DP/3.0_DP)) - else - swiftest_plA%rhill(i) = 0.0_DP - end if - end do - - return - - end procedure util_hills -end submodule s_util_hills diff --git a/src/util/util_index.f90 b/src/util/util_index.f90 index 4bc760ec2..fcece8809 100644 --- a/src/util/util_index.f90 +++ b/src/util/util_index.f90 @@ -1,73 +1,78 @@ -submodule (util) s_util_index +submodule (swiftest_classes) s_util_index use swiftest contains - module procedure util_index - !! author: David A. Minton - !! - !! Index input real array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_index.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1173-4 - integer(I4B), parameter :: nn = 15, nstack = 50 - integer(I4B) :: n, k, i, j, indext, jstack, l, r, dum - integer(I4B), dimension(nstack) :: istack - real(DP) :: a + module subroutine util_index(arr, index) + !! author: David A. Minton + !! + !! Index input real array into ascending numerical order using Quicksort algorithm + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_index.f90 + !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, + !! Vetterling, and Flannery, 2nd ed., pp. 1173-4 + implicit none + ! Arguments + integer(I4B), dimension(:), intent(out) :: index + real(DP), dimension(:), intent(in) :: arr + ! Internals + integer(I4B), parameter :: nn = 15, nstack = 50 + integer(I4B) :: n, k, i, j, indext, jstack, l, r, dum + integer(I4B), dimension(nstack) :: istack + real(DP) :: a - n = size(arr) - if (n /= size(index)) then - write(*, *) "Swiftest Error:" - write(*, *) " array size mismatch in util_index" - call util_exit(FAILURE) - end if - index = arth(1, 1, n) - jstack = 0 - ! l is the counter ie 'the one we are at' - l = 1 - ! r is the length of the array ie 'the total number of particles' - r = n - do - if ((r - l) < nn) then - do j = l + 1, r - indext = index(j) - a = arr(indext) - do i = j - 1, l, -1 - if (arr(index(i)) <= a) exit - index(i+1) = index(i) - end do - index(i+1) = indext - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = index(k); index(k) = index(l+1); index(l+1) = dum - ! if the mass of the particle we are at in our counting is greater than the mass of the last particle then put the particle we are at above the last one - if (arr(index(l)) > arr(index(r))) then - dum = index(l); index(l) = index(r); index(r) = dum - end if - ! if the mass of the particle above the one we are at in our counting is greater than the last particle then put that particle above the last one - if (arr(index(l+1)) > arr(index(r))) then - dum = index(l+1); index(l+1) = index(r); index(r) = dum - end if - ! if the mass of teh particle we are at in our counting is greater than the one above it, then put it above the one above it - if (arr(index(l)) > arr(index(l+1))) then - dum = index(l); index(l) = index(l+1); index(l+1) = dum - end if - i = l + 1 - j = r - indext = index(l+1) - a = arr(indext) - do - do - i = i + 1 - if (arr(index(i)) >= a) exit + n = size(arr) + if (n /= size(index)) then + write(*, *) "Swiftest Error:" + write(*, *) " array size mismatch in util_index" + call util_exit(FAILURE) + end if + index = arth(1, 1, n) + jstack = 0 + ! l is the counter ie 'the one we are at' + l = 1 + ! r is the length of the array ie 'the total number of particles' + r = n + do + if ((r - l) < nn) then + do j = l + 1, r + indext = index(j) + a = arr(indext) + do i = j - 1, l, -1 + if (arr(index(i)) <= a) exit + index(i+1) = index(i) + end do + index(i+1) = indext end do + if (jstack == 0) return + r = istack(jstack) + l = istack(jstack-1) + jstack = jstack - 2 + else + k = (l + r)/2 + dum = index(k); index(k) = index(l+1); index(l+1) = dum + ! if the mass of the particle we are at in our counting is greater than the mass of the last particle then put the particle we are at above the last one + if (arr(index(l)) > arr(index(r))) then + dum = index(l); index(l) = index(r); index(r) = dum + end if + ! if the mass of the particle above the one we are at in our counting is greater than the last particle then put that particle above the last one + if (arr(index(l+1)) > arr(index(r))) then + dum = index(l+1); index(l+1) = index(r); index(r) = dum + end if + ! if the mass of teh particle we are at in our counting is greater than the one above it, then put it above the one above it + if (arr(index(l)) > arr(index(l+1))) then + dum = index(l); index(l) = index(l+1); index(l+1) = dum + end if + i = l + 1 + j = r + indext = index(l+1) + a = arr(indext) do - j = j - 1 - if (arr(index(j)) <= a) exit + do + i = i + 1 + if (arr(index(i)) >= a) exit + end do + do + j = j - 1 + if (arr(index(j)) <= a) exit end do if (j < i) exit dum = index(i); index(i) = index(j); index(j) = dum @@ -94,5 +99,5 @@ return - end procedure util_index + end subroutine util_index end submodule s_util_index diff --git a/src/util/util_peri.f90 b/src/util/util_peri.f90 index bcface016..6cde4cc45 100644 --- a/src/util/util_peri.f90 +++ b/src/util/util_peri.f90 @@ -1,80 +1,79 @@ -submodule (util) s_util_peri +submodule (swiftest_classes) s_util_peri use swiftest contains - module procedure util_peri - !! author: David A. Minton - !! - !! Determine system pericenter passages for test particles - !! Note: If the coordinate system used is barycentric, then this routine assumes that the barycentric coordinates in the - !! test particle structures are up-to-date and are not recomputed - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_peri.f90 - !! Adapted from Hal Levison's Swift routine util_peri.f - implicit none - - integer(I4B) :: i - real(DP) :: e - real(DP), dimension(:), allocatable, save :: vdotr + module subroutine util_peri_tp(self, system, param) + !! author: David A. Minton + !! + !! Determine system pericenter passages for test particles + !! Note: If the coordinate system used is barycentric, then this routine assumes that the barycentric coordinates in the + !! test particle structures are up-to-date and are not recomputed + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_peri.f90 + !! Adapted from Hal Levison's Swift routine util_peri.f + implicit none + ! Arguments + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + ! Internals + integer(I4B) :: i + real(DP) :: e + real(DP), dimension(:), allocatable, save :: vdotr - associate(ntp => tp%nbody, xht => tp%xh, vht => tp%vh, status => tp%status, isperi => tp%isperi, & - xbt => tp%xb, vbt => tp%vb, atp => tp%atp, peri => tp%peri) - if (lfirst) then - if (.not. allocated(vdotr)) allocate(vdotr(ntp)) - if (qmin_coord == "HELIO") then - !do concurrent(i = 1:ntp, status(i) == ACTIVE) - do i = 1, ntp - vdotr(i) = dot_product(xht(:, i), vht(:, i)) - end do + associate(tp => self, ntp => self%nbody) + if (tp%lfirst) then + if (.not. allocated(vdotr)) allocate(vdotr(ntp)) + if (param%qmin_coord == "HELIO") then + do i = 1, ntp + vdotr(i) = dot_product(tp%xh(:, i), tp%vh(:, i)) + end do + else + do i = 1, ntp + vdotr(i) = dot_product(tp%xb(:, i), tp%vb(:, i)) + end do + end if + where(vdotr(1:ntp) > 0.0_DP) + tp%isperi(1:ntp) = 1 + elsewhere + tp%isperi = -1 + end where else - !do concurrent(i = 1:ntp, status(i) == ACTIVE) - do i = 1, ntp - vdotr(i) = dot_product(xbt(:, i), vbt(:, i)) - end do - end if - where(vdotr(1:ntp) > 0.0_DP) - isperi(1:ntp) = 1 - elsewhere - isperi = -1 - end where - else - if (qmin_coord == "HELIO") then - !do concurrent (i = 1:ntp, status(i) == ACTIVE) - do i = 1, ntp - vdotr(i) = dot_product(xht(:, i), vht(:, i)) - if (isperi(i) == -1) then - if (vdotr(i) >= 0.0_DP) then - isperi(i) = 0 - call orbel_xv2aeq(mu, xht(:, i), vht(:, i), atp(i), e, peri(i)) - end if - else - if (vdotr(i) > 0.0_DP) then - isperi(i) = 1 + if (param%qmin_coord == "HELIO") then + do i = 1, ntp + vdotr(i) = dot_product(tp%xh(:, i), tp%vh(:, i)) + if (tp%isperi(i) == -1) then + if (vdotr(i) >= 0.0_DP) then + tp%isperi(i) = 0 + call orbel_xv2aeq(tp%mu(i), tp%xh(:, i), tp%vh(:, i), tp%atp(i), e, tp%peri(i)) + end if else - isperi(i) = -1 - end if - end if - end do - else - !do concurrent (i = 1:ntp, status(i) == ACTIVE) - do i = 1, ntp - vdotr(i) = dot_product(xbt(:, i), vbt(:, i)) - if (isperi(i) == -1) then - if (vdotr(i) >= 0.0_DP) then - isperi(i) = 0 - call orbel_xv2aeq(msys, xbt(:, i), vbt(:, i), atp(i), e, peri(i)) + if (vdotr(i) > 0.0_DP) then + tp%isperi(i) = 1 + else + tp%isperi(i) = -1 + end if end if - else - if (vdotr(i) > 0.0_DP) then - isperi(i) = 1 + end do + else + do i = 1, ntp + vdotr(i) = dot_product(tp%xb(:, i), tp%vb(:, i)) + if (tp%isperi(i) == -1) then + if (vdotr(i) >= 0.0_DP) then + tp%isperi(i) = 0 + call orbel_xv2aeq(system%msys, tp%xb(:, i), tp%vb(:, i), tp%atp(i), e, tp%peri(i)) + end if else - isperi(i) = -1 + if (vdotr(i) > 0.0_DP) then + tp%isperi(i) = 1 + else + tp%isperi(i) = -1 + end if end if - end if - end do + end do + end if end if - end if - end associate - return + end associate + return - end procedure util_peri + end subroutine util_peri_tp end submodule s_util_peri diff --git a/src/util/util_reverse_status.f90 b/src/util/util_reverse_status.f90 index 253d10fde..5fc0d0f22 100644 --- a/src/util/util_reverse_status.f90 +++ b/src/util/util_reverse_status.f90 @@ -1,16 +1,18 @@ submodule (swiftest_classes) s_util_reverse_status use swiftest contains - module procedure util_reverse_status + module subroutine util_reverse_status(self) !! author: David A. Minton !! !! Reverses the active/inactive status of all particles in a structure implicit none + ! Arguments + class(swiftest_body), intent(inout) :: self !! Swiftest body object where (self%status(:) == ACTIVE) self%status(:) = INACTIVE elsewhere (self%status(:) == INACTIVE) self%status(:) = ACTIVE end where - end procedure util_reverse_status + end subroutine util_reverse_status end submodule s_util_reverse_status \ No newline at end of file diff --git a/src/util/util_sort.f90 b/src/util/util_sort.f90 new file mode 100644 index 000000000..126f4f12d --- /dev/null +++ b/src/util/util_sort.f90 @@ -0,0 +1,263 @@ +submodule (swiftest_classes) s_util_sort + use swiftest +contains + module subroutine util_sort_dp(arr) + !! author: David A. Minton + !! + !! Sort input double precision array into ascending numerical order using Quicksort algorithm + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_sort_dp.f90 + !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, + !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 + implicit none + ! Arguments + real(DP), dimension(:), intent(inout) :: arr + ! Internals + integer(I4B), parameter :: NN = 15, NSTACK = 50 + real(DP) :: a, dum + integer(I4B) :: n, k, i, j, jstack, l, r + integer(I4B), dimension(NSTACK) :: istack + + ! executable code + n = size(arr) + jstack = 0 + l = 1 + r = n + do + if ((r - l) < NN) then + do j = l + 1, r + a = arr(j) + do i = j - 1, l, -1 + if (arr(i) <= a) exit + arr(i+1) = arr(i) + end do + arr(i+1) = a + end do + if (jstack == 0) return + r = istack(jstack) + l = istack(jstack-1) + jstack = jstack - 2 + else + k = (l + r)/2 + dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum + if (arr(l) > arr(r)) then + dum = arr(l); arr(l) = arr(r); arr(r) = dum + end if + if (arr(l+1) > arr(r)) then + dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum + end if + if (arr(l) > arr(l+1)) then + dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum + end if + i = l + 1 + j = r + a = arr(l+1) + do + do + i = i + 1 + if (arr(i) >= a) exit + end do + do + j = j - 1 + if (arr(j) <= a) exit + end do + if (j < i) exit + dum = arr(i); arr(i) = arr(j); arr(j) = dum + end do + arr(l+1) = arr(j) + arr(j) = a + jstack = jstack + 2 + if (jstack > NSTACK) then + write(*, *) "Swiftest Error:" + write(*, *) " NSTACK too small in util_sort_I4B" + call util_exit(FAILURE) + end if + if ((r - i + 1) >= (j - l)) then + istack(jstack) = r + istack(jstack-1) = i + r = j - 1 + else + istack(jstack) = j - 1 + istack(jstack-1) = l + l = i + end if + end if + end do + + return + + end subroutine util_sort_dp + + module subroutine util_sort_i4b(arr) + !! author: David A. Minton + !! + !! Sort input double precision array into ascending numerical order using Quicksort algorithm + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_sort_i4b.f90 + !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, + !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 + implicit none + ! Arguments + integer(I4B), dimension(:), intent(inout) :: arr + ! Internals + integer(I4B), parameter :: NN = 15, NSTACK = 50 + integer(I4B) :: a, n, k, i, j, jstack, l, r, dum + integer(I4B), dimension(NSTACK) :: istack + + ! executable code + n = size(arr) + jstack = 0 + l = 1 + r = n + do + if ((r - l) < NN) then + do j = l + 1, r + a = arr(j) + do i = j - 1, l, -1 + if (arr(i) <= a) exit + arr(i+1) = arr(i) + end do + arr(i+1) = a + end do + if (jstack == 0) return + r = istack(jstack) + l = istack(jstack-1) + jstack = jstack - 2 + else + k = (l + r)/2 + dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum + if (arr(l) > arr(r)) then + dum = arr(l); arr(l) = arr(r); arr(r) = dum + end if + if (arr(l+1) > arr(r)) then + dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum + end if + if (arr(l) > arr(l+1)) then + dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum + end if + i = l + 1 + j = r + a = arr(l+1) + do + do + i = i + 1 + if (arr(i) >= a) exit + end do + do + j = j - 1 + if (arr(j) <= a) exit + end do + if (j < i) exit + dum = arr(i); arr(i) = arr(j); arr(j) = dum + end do + arr(l+1) = arr(j) + arr(j) = a + jstack = jstack + 2 + if (jstack > NSTACK) then + write(*, *) "Swiftest Error:" + write(*, *) " NSTACK too small in util_sort_i4b" + call util_exit(FAILURE) + end if + if ((r - i + 1) >= (j - l)) then + istack(jstack) = r + istack(jstack-1) = i + r = j - 1 + else + istack(jstack) = j - 1 + istack(jstack-1) = l + l = i + end if + end if + end do + + return + + end subroutine util_sort_i4b + + module subroutine util_sort_sp(arr) + !! author: David A. Minton + !! + !! Sort input single precision array into ascending numerical order using Quicksort algorithm + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_sort_DP.f90 + !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, + !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 + implicit none + ! Arguments + real(SP), dimension(:), intent(inout) :: arr + ! Internals + integer(I4B), parameter :: NN = 15, NSTACK = 50 + real(SP) :: a, dum + integer(I4B) :: n, k, i, j, jstack, l, r + integer(I4B), dimension(NSTACK) :: istack + + ! executable code + n = size(arr) + jstack = 0 + l = 1 + r = n + do + if ((r - l) < NN) then + do j = l + 1, r + a = arr(j) + do i = j - 1, l, -1 + if (arr(i) <= a) exit + arr(i+1) = arr(i) + end do + arr(i+1) = a + end do + if (jstack == 0) return + r = istack(jstack) + l = istack(jstack-1) + jstack = jstack - 2 + else + k = (l + r)/2 + dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum + if (arr(l) > arr(r)) then + dum = arr(l); arr(l) = arr(r); arr(r) = dum + end if + if (arr(l+1) > arr(r)) then + dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum + end if + if (arr(l) > arr(l+1)) then + dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum + end if + i = l + 1 + j = r + a = arr(l+1) + do + do + i = i + 1 + if (arr(i) >= a) exit + end do + do + j = j - 1 + if (arr(j) <= a) exit + end do + if (j < i) exit + dum = arr(i); arr(i) = arr(j); arr(j) = dum + end do + arr(l+1) = arr(j) + arr(j) = a + jstack = jstack + 2 + if (jstack > NSTACK) then + write(*, *) "Swiftest Error:" + write(*, *) " NSTACK too small in util_sort_I4B" + call util_exit(FAILURE) + end if + if ((r - i + 1) >= (j - l)) then + istack(jstack) = r + istack(jstack-1) = i + r = j - 1 + else + istack(jstack) = j - 1 + istack(jstack-1) = l + l = i + end if + end if + end do + + return + + end subroutine util_sort_sp +end submodule s_util_sort diff --git a/src/util/util_sort_dp.f90 b/src/util/util_sort_dp.f90 deleted file mode 100644 index 5d02a82c1..000000000 --- a/src/util/util_sort_dp.f90 +++ /dev/null @@ -1,86 +0,0 @@ -submodule (util) s_util_sort_dp - use swiftest -contains - module procedure util_sort_dp - !! author: David A. Minton - !! - !! Sort input double precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_dp.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 - integer(I4B), parameter :: NN = 15, NSTACK = 50 - real(DP) :: a, dum - integer(I4B) :: n, k, i, j, jstack, l, r - integer(I4B), dimension(NSTACK) :: istack - -! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum - end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum - end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum - end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_I4B" - call util_exit(FAILURE) - end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 - else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i - end if - end if - end do - - return - - end procedure util_sort_dp -end submodule s_util_sort_dp diff --git a/src/util/util_sort_i4b.f90 b/src/util/util_sort_i4b.f90 deleted file mode 100644 index 7c1e0d08b..000000000 --- a/src/util/util_sort_i4b.f90 +++ /dev/null @@ -1,85 +0,0 @@ -submodule (util) s_util_sort_i4b - use swiftest -contains - module procedure util_sort_i4b - !! author: David A. Minton - !! - !! Sort input double precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_i4b.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 - integer(I4B), parameter :: NN = 15, NSTACK = 50 - integer(I4B) :: a, n, k, i, j, jstack, l, r, dum - integer(I4B), dimension(NSTACK) :: istack - -! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum - end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum - end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum - end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_i4b" - call util_exit(FAILURE) - end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 - else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i - end if - end if - end do - - return - - end procedure util_sort_i4b -end submodule s_util_sort_i4b diff --git a/src/util/util_sort_sp.f90 b/src/util/util_sort_sp.f90 deleted file mode 100644 index baa82e941..000000000 --- a/src/util/util_sort_sp.f90 +++ /dev/null @@ -1,86 +0,0 @@ -submodule (util) s_util_sort_sp - use swiftest -contains - module procedure util_sort_sp - !! author: David A. Minton - !! - !! Sort input single precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_DP.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 - integer(I4B), parameter :: NN = 15, NSTACK = 50 - real(SP) :: a, dum - integer(I4B) :: n, k, i, j, jstack, l, r - integer(I4B), dimension(NSTACK) :: istack - -! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum - end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum - end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum - end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_I4B" - call util_exit(FAILURE) - end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 - else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i - end if - end if - end do - - return - - end procedure util_sort_sp -end submodule s_util_sort_sp diff --git a/src/util/util_toupper.f90 b/src/util/util_toupper.f90 deleted file mode 100644 index f5bf8b979..000000000 --- a/src/util/util_toupper.f90 +++ /dev/null @@ -1,24 +0,0 @@ -submodule (util) s_util_toupper - use swiftest -contains - module procedure util_toupper - !! author: David A. Minton - !! - !! Convert string to uppercase - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_toupper.f90 - integer(I4B) :: i, length, idx - - length = len(string) - do i = 1, length - idx = iachar(string(i:i)) - if ((idx >= lowercase_begin) .and. (idx <= lowercase_end)) then - idx = idx + uppercase_offset - string(i:i) = achar(idx) - end if - end do - - return - - end procedure util_toupper -end submodule s_util_toupper diff --git a/src/util/util_valid.f90 b/src/util/util_valid.f90 index ec1110025..ac81673ca 100644 --- a/src/util/util_valid.f90 +++ b/src/util/util_valid.f90 @@ -1,37 +1,41 @@ -submodule (util) s_util_valid +submodule (swiftest_classes) s_util_valid use swiftest contains - module procedure util_valid - !! author: David A. Minton - !! - !! Validate massive body and test particle ids - !! Subroutine causes program to exit with error if any ids are not unique - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_valid.f90 - integer(I4B) :: i - integer(I4B), dimension(:), allocatable :: idarr + module subroutine util_valid(pl, tp) + !! author: David A. Minton + !! + !! Validate massive body and test particle ids + !! Subroutine causes program to exit with error if any ids are not unique + !! + !! Adapted from David E. Kaufmann's Swifter routine: util_valid.f90 + implicit none + ! Arguments + class(swiftest_pl), intent(in) :: pl + class(swiftest_tp), intent(in) :: tp + ! Internals + integer(I4B) :: i + integer(I4B), dimension(:), allocatable :: idarr -! executable code - associate(npl => pl%nbody, ntp => tp%nbody) - allocate(idarr(npl+ntp)) - do i = 1, npl - idarr(i) = pl%id(i) - end do - do i = 1, ntp - idarr(npl+i) = tp%id(i) - end do - call util_sort(idarr) - do i = 1, npl + ntp - 1 - if (idarr(i) == idarr(i+1)) then - write(*, *) "Swiftest error:" - write(*, *) " more than one body/particle has id = ", idarr(i) - call util_exit(FAILURE) - end if - end do - deallocate(idarr) - end associate + associate(npl => pl%nbody, ntp => tp%nbody) + allocate(idarr(npl+ntp)) + do i = 1, npl + idarr(i) = pl%id(i) + end do + do i = 1, ntp + idarr(npl+i) = tp%id(i) + end do + call util_sort(idarr) + do i = 1, npl + ntp - 1 + if (idarr(i) == idarr(i+1)) then + write(*, *) "Swiftest error:" + write(*, *) " more than one body/particle has id = ", idarr(i) + call util_exit(FAILURE) + end if + end do + deallocate(idarr) + end associate - return + return - end procedure util_valid + end subroutine util_valid end submodule s_util_valid diff --git a/src/util/util_version.f90 b/src/util/util_version.f90 index 0c0888f21..2b2c351be 100644 --- a/src/util/util_version.f90 +++ b/src/util/util_version.f90 @@ -1,7 +1,7 @@ -submodule (util) s_util_version +submodule (swiftest_classes) s_util_version use swiftest contains - module procedure util_version + module subroutine util_version() !! author: David A. Minton !! !! Print program version information to terminale @@ -47,6 +47,6 @@ "************************************************", /) return - end procedure util_version + end subroutine util_version end submodule s_util_version diff --git a/src/whm/whm_setup.f90 b/src/whm/whm_setup.f90 index f9a28478f..9f0f9b1b7 100644 --- a/src/whm/whm_setup.f90 +++ b/src/whm/whm_setup.f90 @@ -78,7 +78,7 @@ module subroutine whm_setup_system(self, param) !! implicit none ! Arguments - class(whm_nbody_system), intent(inout) :: self !! Swiftest system object + class(whm_nbody_system), intent(inout) :: self !! Swiftest system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters of on parameters call io_read_initialize_system(self, param) diff --git a/src/whm/whm_step.f90 b/src/whm/whm_step.f90 index 55e7611b1..ce00b86b1 100644 --- a/src/whm/whm_step.f90 +++ b/src/whm/whm_step.f90 @@ -17,7 +17,6 @@ module subroutine whm_step_system(self, param, t, dt) real(DP), intent(in) :: dt !! Current stepsize associate(system => self, cb => self%cb, pl => self%pl, tp => self%tp) - call pl%set_rhill(cb) call pl%step(system, param, t, dt) call tp%step(system, param, t, dt) end associate