diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/.idea/.gitignore b/examples/helio_swifter_comparison/.idea/.gitignore similarity index 100% rename from examples/helio_swifter_comparison/1pl_1tp_encounter/.idea/.gitignore rename to examples/helio_swifter_comparison/.idea/.gitignore diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/cb.swiftest.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/cb.swiftest.in deleted file mode 100644 index 2386b53c8..000000000 Binary files a/examples/helio_swifter_comparison/1pl_1tp_encounter/cb.swiftest.in and /dev/null differ diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/check_init_cond.ipynb b/examples/helio_swifter_comparison/1pl_1tp_encounter/check_init_cond.ipynb deleted file mode 100644 index b8794b9f0..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/check_init_cond.ipynb +++ /dev/null @@ -1,929 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import swiftestio as swio\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swifter file param.swifter.in\n" - ] - } - ], - "source": [ - "inparfile = 'param.swifter.in'\n", - "paramgr = swio.read_swifter_param(inparfile)\n", - "swifterdat = swio.swifter2xr(paramgr)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swifterdat.plot.scatter(x='px', y='py', hue='id', hue_style=\"discrete\", marker='.')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swiftest file param.swiftest.in\n" - ] - } - ], - "source": [ - "param_file_name = 'param.swiftest.in'\n", - "config = swio.read_swiftest_config(param_file_name)\n", - "swiftestdat = swio.swiftest2xr(config)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftestdat.plot.scatter(x='px', y='py', hue='id', hue_style=\"discrete\", marker='.')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:   (id: 2, time: 41)\n",
-       "Coordinates:\n",
-       "  * id        (id) int64 2 100\n",
-       "    time (y)  (time) float64 0.0 0.0006845 0.001369 ... 0.02601 0.02669 0.02738\n",
-       "Dimensions without coordinates: time\n",
-       "Data variables:\n",
-       "    Mass      (time, id) float64 0.0 nan 0.0 nan 0.0 nan ... nan 0.0 nan 0.0 nan\n",
-       "    Radius    (time, id) float64 0.0 nan 0.0 nan 0.0 nan ... nan 0.0 nan 0.0 nan\n",
-       "    delta x   (time, id) float64 0.0 0.0 0.0 0.0 ... -4.108e-15 0.0 -4.441e-15\n",
-       "    delta y   (time, id) float64 0.0 0.0 0.0 0.0 ... -3.886e-16 0.0 -3.886e-16\n",
-       "    pz        (time, id) float64 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0\n",
-       "    vx        (time, id) float64 0.0 0.0 0.0 ... -2.984e-13 0.0 -3.062e-13\n",
-       "    vy        (time, id) float64 0.0 0.0 0.0 0.0 ... -3.553e-14 0.0 -3.73e-14\n",
-       "    vz        (time, id) float64 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
" - ], - "text/plain": [ - "\n", - "Dimensions: (id: 2, time: 41)\n", - "Coordinates:\n", - " * id (id) int64 2 100\n", - " time (y) (time) float64 0.0 0.0006845 0.001369 ... 0.02601 0.02669 0.02738\n", - "Dimensions without coordinates: time\n", - "Data variables:\n", - " Mass (time, id) float64 0.0 nan 0.0 nan 0.0 nan ... nan 0.0 nan 0.0 nan\n", - " Radius (time, id) float64 0.0 nan 0.0 nan 0.0 nan ... nan 0.0 nan 0.0 nan\n", - " delta x (time, id) float64 0.0 0.0 0.0 0.0 ... -4.108e-15 0.0 -4.441e-15\n", - " delta y (time, id) float64 0.0 0.0 0.0 0.0 ... -3.886e-16 0.0 -3.886e-16\n", - " pz (time, id) float64 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0\n", - " vx (time, id) float64 0.0 0.0 0.0 ... -2.984e-13 0.0 -3.062e-13\n", - " vy (time, id) float64 0.0 0.0 0.0 0.0 ... -3.553e-14 0.0 -3.73e-14\n", - " vz (time, id) float64 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "swiftdiff = swiftestdat - swifterdat\n", - "swiftdiff = swiftdiff.rename_vars({'time' : 'time (y)','px' : 'delta x','py' : 'delta y'})\n", - "swiftdiff" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff.plot.scatter(x='delta x', y='delta y', hue='id', hue_style=\"discrete\", marker='.')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.savefig('rmvsdiff.png')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/init_cond.py b/examples/helio_swifter_comparison/1pl_1tp_encounter/init_cond.py deleted file mode 100644 index 5b5f5e76e..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/init_cond.py +++ /dev/null @@ -1,228 +0,0 @@ -""" -For testing RMVS, the code generates clones of test particles based on one that is fated to impact Mercury. -To use the script, modify the variables just after the "if __name__ == '__main__':" line -""" -import numpy as np -from astroquery.jplhorizons import Horizons -import astropy.constants as const -import swiftestio as swio -from scipy.io import FortranFile -import sys - -#Values from JPL Horizons -AU2M = np.longdouble(const.au.value) -GMSunSI = np.longdouble(const.GM_sun.value) -Rsun = np.longdouble(const.R_sun.value) -GC = np.longdouble(const.G.value) -JD = 86400 -year = np.longdouble(365.25 * JD) -c = np.longdouble(299792458.0) -MSun_over_Mpl = np.array([6023600.0, - 408523.71, - 328900.56, - 3098708., - 1047.3486, - 3497.898, - 22902.98, - 19412.24, - 1.35e8], dtype=np.longdouble) - -MU2KG = np.longdouble(GMSunSI / GC) #Conversion from mass unit to kg -DU2M = np.longdouble(AU2M) #Conversion from radius unit to centimeters -TU2S = np.longdouble(year) #Conversion from time unit to seconds -GU = np.longdouble(GC / (DU2M**3 / (MU2KG * TU2S**2))) -GMSun = np.longdouble(GMSunSI / (DU2M**3 / TU2S**2)) - -# Solar oblatenes values: From Mecheri et al. (2004), using Corbard (b) 2002 values (Table II) -J2 = np.longdouble(2.198e-7) * (Rsun / DU2M)**2 -J4 = np.longdouble(-4.805e-9) * (Rsun / DU2M)**4 - -#Planet Msun/M ratio -MSun_over_Mpl = { - 'mercury' : np.longdouble(6023600.0), - 'venus' : np.longdouble(408523.71), - 'earthmoon' : np.longdouble(328900.56), - 'mars' : np.longdouble(3098708.), - 'jupiter' : np.longdouble(1047.3486), - 'saturn' : np.longdouble(3497.898), - 'uranus' : np.longdouble(22902.98), - 'neptune' : np.longdouble(19412.24), - 'plutocharon' : np.longdouble(1.35e8) -} - -#Planet radii in meters -Rpl = { - 'mercury' : np.longdouble(2439.4e3), - 'venus' : np.longdouble(6051.8e3), - 'earthmoon' : np.longdouble(6371.0084e3), # Earth only for radius - 'mars' : np.longdouble(3389.50e3), - 'jupiter' : np.longdouble(69911e3), - 'saturn' : np.longdouble(58232.0e3), - 'uranus' : np.longdouble(25362.e3), - 'neptune' : np.longdouble(24622.e3), - 'plutocharon' : np.longdouble(1188.3e3) -} - -THIRDLONG = np.longdouble(1.0) / np.longdouble(3.0) - -swifter_input = "param.swifter.in" -swifter_pl = "pl.swifter.in" -swifter_tp = "tp.swifter.in" -swifter_bin = "bin.swifter.dat" -swifter_enc = "enc.swifter.dat" - -swiftest_input = "param.swiftest.in" -swiftest_pl = "pl.swiftest.in" -swiftest_tp = "tp.swiftest.in" -swiftest_cb = "cb.swiftest.in" -swiftest_bin = "bin.swiftest.dat" -swiftest_enc = "enc.swiftest.dat" - -# Simple initial conditions of a circular planet with one test particle in a close encounter state -# Simulation start, stop, and output cadence times -t_0 = 0 # simulation start time -deltaT = 0.25 * JD / TU2S # simulation step size -end_sim = year / TU2S #10 * JD / TU2S # simulation end time -t_print = deltaT #output interval to print results - -iout = int(np.ceil(t_print / deltaT)) -rmin = Rsun / DU2M -rmax = 1000.0 - -npl = 1 -plid = 2 -tpid = 100 - -radius = np.double(Rpl['earthmoon'] / DU2M) -mass = np.double(GMSun * MSun_over_Mpl['earthmoon']**-1) -apl = np.longdouble(1.0) -atp = np.longdouble(1.01) -vpl = np.longdouble(2 * np.pi) -vtp = np.longdouble(2 * np.pi / np.sqrt(atp)) - -p_pl = np.array([apl, 0.0, 0.0], dtype=np.double) -v_pl = np.array([0.0, vpl, 0.0], dtype=np.double) - -p_tp = np.array([atp, 0.0, 0.0], dtype=np.double) -v_tp = np.array([0.0, vtp, 0.0], dtype=np.double) - -Rhill = apl * ((3 * MSun_over_Mpl['earthmoon'])**(-THIRDLONG)) - -#Make Swifter files -plfile = open(swifter_pl, 'w') -print(npl+1, f'! Planet input file generated using init_cond.py',file=plfile) -print(1,GMSun,file=plfile) -print('0.0 0.0 0.0',file=plfile) -print('0.0 0.0 0.0',file=plfile) -print(plid,"{:.23g}".format(mass),Rhill, file=plfile) -print(radius, file=plfile) -print(*p_pl, file=plfile) -print(*v_pl, file=plfile) -plfile.close() - -tpfile = open(swifter_tp, 'w') -print(1,file=tpfile) -print(tpid, file=tpfile) -print(*p_tp, file=tpfile) -print(*v_tp, file=tpfile) -tpfile.close() - -sys.stdout = open(swifter_input, "w") -print(f'! Swifter input file generated using init_cond.py') -print(f'T0 {t_0} ') -print(f'TSTOP {end_sim}') -print(f'DT {deltaT}') -print(f'PL_IN {swifter_pl}') -print(f'TP_IN {swifter_tp}') -print(f'IN_TYPE ASCII') -print(f'ISTEP_OUT {iout:d}') -print(f'ISTEP_DUMP {iout:d}') -print(f'BIN_OUT {swifter_bin}') -print(f'OUT_TYPE REAL8') -print(f'OUT_FORM XV') -print(f'OUT_STAT NEW') -print(f'J2 {J2}') -print(f'J4 {J4}') -print(f'CHK_CLOSE yes') -print(f'CHK_RMIN {rmin}') -print(f'CHK_RMAX {rmax}') -print(f'CHK_EJECT {rmax}') -print(f'CHK_QMIN {rmin}') -print(f'CHK_QMIN_COORD HELIO') -print(f'CHK_QMIN_RANGE {rmin} {rmax}') -print(f'ENC_OUT {swifter_enc}') -print(f'EXTRA_FORCE no') -print(f'BIG_DISCARD no') -print(f'RHILL_PRESENT yes') -sys.stdout = sys.__stdout__ - -#Now make Swiftest files -cbfile = FortranFile(swiftest_cb, 'w') -Msun = np.double(1.0) -cbfile.write_record(np.double(GMSun)) -cbfile.write_record(np.double(rmin)) -cbfile.write_record(np.double(J2)) -cbfile.write_record(np.double(J4)) -cbfile.close() - -plfile = FortranFile(swiftest_pl, 'w') -plfile.write_record(npl) - -plfile.write_record(plid) -plfile.write_record(p_pl[0]) -plfile.write_record(p_pl[1]) -plfile.write_record(p_pl[2]) -plfile.write_record(v_pl[0]) -plfile.write_record(v_pl[1]) -plfile.write_record(v_pl[2]) -plfile.write_record(mass) -plfile.write_record(radius) -plfile.close() -tpfile = FortranFile(swiftest_tp, 'w') -ntp = 1 -tpfile.write_record(ntp) -tpfile.write_record(tpid) -tpfile.write_record(p_tp[0]) -tpfile.write_record(p_tp[1]) -tpfile.write_record(p_tp[2]) -tpfile.write_record(v_tp[0]) -tpfile.write_record(v_tp[1]) -tpfile.write_record(v_tp[2]) - -tpfile.close() - -sys.stdout = open(swiftest_input, "w") -print(f'! Swiftest input file generated using init_cond.py') -print(f'T0 {t_0} ') -print(f'TSTOP {end_sim}') -print(f'DT {deltaT}') -print(f'CB_IN {swiftest_cb}') -print(f'PL_IN {swiftest_pl}') -print(f'TP_IN {swiftest_tp}') -print(f'IN_TYPE REAL8') -print(f'ISTEP_OUT {iout:d}') -print(f'ISTEP_DUMP {iout:d}') -print(f'BIN_OUT {swiftest_bin}') -print(f'OUT_TYPE REAL8') -print(f'OUT_FORM XV') -print(f'OUT_STAT REPLACE') -print(f'CHK_CLOSE yes') -print(f'CHK_RMIN {rmin}') -print(f'CHK_RMAX {rmax}') -print(f'CHK_EJECT {rmax}') -print(f'CHK_QMIN {rmin}') -print(f'CHK_QMIN_COORD HELIO') -print(f'CHK_QMIN_RANGE {rmin} {rmax}') -print(f'ENC_OUT {swiftest_enc}') -print(f'EXTRA_FORCE no') -print(f'BIG_DISCARD no') -print(f'ROTATION no') -print(f'GR no') -print(f'MU2KG {MU2KG}') -print(f'DU2M {DU2M}') -print(f'TU2S {TU2S}') - - - - - diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swifter.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swifter.in deleted file mode 100644 index 40cedba41..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swifter.in +++ /dev/null @@ -1,26 +0,0 @@ -! Swifter input file generated using init_cond.py -T0 0 -TSTOP 0.2 -DT 0.00034223134839151266 -PL_IN pl.swifter.in -TP_IN tp.swifter.in -IN_TYPE ASCII -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swifter.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT UNKNOWN -J2 4.7535806948127355e-12 -J4 -2.2473967953572827e-18 -CHK_CLOSE yes -CHK_RMIN 0.004650467260962157 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.004650467260962157 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.004650467260962157 1000.0 -ENC_OUT enc.swifter.dat -EXTRA_FORCE no -BIG_DISCARD no -RHILL_PRESENT yes diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swiftest.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swiftest.in deleted file mode 100644 index 914af3324..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/param.swiftest.in +++ /dev/null @@ -1,29 +0,0 @@ -! Swiftest input file generated using init_cond.py -T0 0 -TSTOP 0.2 -DT 0.00034223134839151266 -CB_IN cb.swiftest.in -PL_IN pl.swiftest.in -TP_IN tp.swiftest.in -IN_TYPE REAL8 -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swiftest.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT REPLACE -CHK_CLOSE yes -CHK_RMIN 0.004650467260962157 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.004650467260962157 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.004650467260962157 1000.0 -ENC_OUT enc.swiftest.dat -EXTRA_FORCE no -BIG_DISCARD no -ROTATION no -GR no -MU2KG 1.988409870698051e+30 -DU2M 149597870700.0 -TU2S 31557600.0 diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swifter.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swifter.in deleted file mode 100644 index 6f91ef4c9..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swifter.in +++ /dev/null @@ -1,8 +0,0 @@ -2 ! Planet input file generated using init_cond.py -1 39.47692640889762629 -0.0 0.0 0.0 -0.0 0.0 0.0 -2 0.00012002693582795246295385 0.010044724833237895015 -4.25875607065041e-05 -1.0 0.0 0.0 -0.0 6.283185307179586 0.0 diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in deleted file mode 100644 index d3786c3df..000000000 Binary files a/examples/helio_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in and /dev/null differ diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb b/examples/helio_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb deleted file mode 100644 index 7c8fb177a..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb +++ /dev/null @@ -1,145 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import swiftest\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swifter file param.swifter.in\n", - "Reading in time 2.002e-01\n", - "Creating Dataset\n", - "Successfully converted 586 output frames.\n", - "Swifter simulation data stored as xarray DataSet .ds\n" - ] - } - ], - "source": [ - "swiftersim = swiftest.Simulation(param_file=\"param.swifter.in\", codename=\"Swifter\")\n", - "swiftersim.bin2xr()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swiftest file param.swiftest.in\n", - "Reading in time 2.002e-01\n", - "Creating Dataset\n", - "Successfully converted 586 output frames.\n", - "Swiftest simulation data stored as xarray DataSet .ds\n" - ] - } - ], - "source": [ - "swiftestsim = swiftest.Simulation(param_file=\"param.swiftest.in\")\n", - "swiftestsim.bin2xr()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftestsim.ds - swiftersim.ds" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftdiff.rename({'time' : 'time (y)'})\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['px'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "swiftestOOF", - "language": "python", - "name": "swiftestoof" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swifter.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swifter.in deleted file mode 100644 index 9c026369e..000000000 --- a/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swifter.in +++ /dev/null @@ -1,4 +0,0 @@ -1 -100 -1.01 0.0 0.0 -0.0 6.252003053624663 0.0 diff --git a/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swiftest.in b/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swiftest.in deleted file mode 100644 index e1506974a..000000000 Binary files a/examples/helio_swifter_comparison/1pl_1tp_encounter/tp.swiftest.in and /dev/null differ diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/.idea/.gitignore b/examples/helio_swifter_comparison/9pl_18tp_encounters/.idea/.gitignore deleted file mode 100644 index 26d33521a..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/init_cond.py b/examples/helio_swifter_comparison/9pl_18tp_encounters/init_cond.py deleted file mode 100644 index 314e59420..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/init_cond.py +++ /dev/null @@ -1,184 +0,0 @@ -import numpy as np -import swiftest.io as swio -import astropy.constants as const -import sys -import xarray as xr - -# Both codes use the same tp input file -tpin = "tp.in" - -swifter_input = "param.swifter.in" -swifter_pl = "pl.swifter.in" -swifter_bin = "bin.swifter.dat" -swifter_enc = "enc.swifter.dat" - -swiftest_input = "param.swiftest.in" -swiftest_pl = "pl.swiftest.in" -swiftest_cb = "cb.swiftest.in" -swiftest_bin = "bin.swiftest.dat" -swiftest_enc = "enc.swiftest.dat" - -#Values from JPL Horizons -AU2M = np.longdouble(const.au.value) -GMSunSI = np.longdouble(const.GM_sun.value) -Rsun = np.longdouble(const.R_sun.value) -GC = np.longdouble(const.G.value) -JD = 86400 -year = np.longdouble(365.25 * JD) -c = np.longdouble(299792458.0) - -MU2KG = np.longdouble(GMSunSI / GC) #Conversion from mass unit to kg -DU2M = np.longdouble(AU2M) #Conversion from radius unit to centimeters -TU2S = np.longdouble(JD) #Conversion from time unit to seconds -GU = np.longdouble(GC / (DU2M**3 / (MU2KG * TU2S**2))) -GMSun = np.longdouble(GMSunSI / (DU2M**3 / TU2S**2)) - -t_0 = 0 # simulation start time -deltaT = 1.00 * JD / TU2S # simulation step size -end_sim = year / TU2S # simulation end time -t_print = deltaT #output interval to print results - -iout = int(np.ceil(t_print / deltaT)) -rmin = Rsun / DU2M -rmax = 1000.0 - -sys.stdout = open(swiftest_input, "w") -print(f'! VERSION Swiftest input file generated using init_cond.py') -print(f'T0 {t_0} ') -print(f'TSTOP {end_sim}') -print(f'DT {deltaT}') -print(f'CB_IN {swiftest_cb}') -print(f'PL_IN {swiftest_pl}') -print(f'TP_IN {tpin}') -print(f'IN_TYPE ASCII') -print(f'ISTEP_OUT {iout:d}') -print(f'ISTEP_DUMP {iout:d}') -print(f'BIN_OUT {swiftest_bin}') -print(f'OUT_TYPE REAL8') -print(f'OUT_FORM XV') -print(f'OUT_STAT REPLACE') -print(f'CHK_CLOSE yes') -print(f'CHK_RMIN {rmin}') -print(f'CHK_RMAX {rmax}') -print(f'CHK_EJECT {rmax}') -print(f'CHK_QMIN {rmin}') -print(f'CHK_QMIN_COORD HELIO') -print(f'CHK_QMIN_RANGE {rmin} {rmax}') -print(f'ENC_OUT {swiftest_enc}') -print(f'EXTRA_FORCE no') -print(f'BIG_DISCARD no') -print(f'ROTATION no') -print(f'GR no') -print(f'MU2KG {MU2KG}') -print(f'DU2M {DU2M}') -print(f'TU2S {TU2S}') -sys.stdout = sys.__stdout__ -param = swio.read_swiftest_param(swiftest_input) - -# Dates to fetch planet ephemerides from JPL Horizons -tstart = '2021-06-15' -ds = swio.solar_system_pl(param, tstart) -cb = ds.sel(id=0) -pl = ds.where(ds.id > 0, drop=True) -npl = pl.id.size - -ntp = 18 -dims = ['time', 'id', 'vec'] -tp = [] -t = np.array([0.0]) -clab, plab, tlab = swio.make_swiftest_labels(param) - -# For each planet, we will initialize a pair of test particles. One on its way in, and one on its way out. We will also initialize two additional particles that don't encounter anything -tpnames = np.arange(101, 101 + ntp) -tpxv1 = np.empty((6)) -tpxv2 = np.empty((6)) - -p1 = [] -p2 = [] -p3 = [] -p4 = [] -p5 = [] -p6 = [] - -for i in pl.id: - pli = pl.sel(id=i) - rstart = 2 * np.double(pli['Radius']) # Start the test particles at a multiple of the planet radius away - vstart = 1.5 * np.sqrt(2 * np.double(pli['Mass']) / rstart) # Start the test particle velocities at a multiple of the escape speed - xvstart = np.array([rstart / np.sqrt(2.0), rstart / np.sqrt(2.0), 0.0, vstart, 0.0, 0.0]) - # The positions and velocities of each pair of test particles will be in reference to a planet - plvec = np.array([np.double(pli['px']), - np.double(pli['py']), - np.double(pli['pz']), - np.double(pli['vx']), - np.double(pli['vy']), - np.double(pli['vz'])]) - tpxv1 = plvec + xvstart - tpxv2 = plvec - xvstart - p1.append(tpxv1[0]) - p1.append(tpxv2[0]) - p2.append(tpxv1[1]) - p2.append(tpxv2[1]) - p3.append(tpxv1[2]) - p3.append(tpxv2[2]) - p4.append(tpxv1[3]) - p4.append(tpxv2[3]) - p5.append(tpxv1[4]) - p5.append(tpxv2[4]) - p6.append(tpxv1[5]) - p6.append(tpxv2[5]) - -tvec = np.vstack([p1, p2, p3, p4, p5, p6]) -tpframe = np.expand_dims(tvec.T, axis=0) -tpxr = xr.DataArray(tpframe, dims = dims, coords = {'time' : t, 'id' : tpnames, 'vec' : tlab}) - -tp = [tpxr] -tpda = xr.concat(tp,dim='time') -tpds = tpda.to_dataset(dim = 'vec') - -ds = xr.combine_by_coords([ds, tpds]) -swio.swiftest_xr2infile(ds, param) - -# Swifter PL file -plfile = open(swifter_pl, 'w') -print(npl + 1, file=plfile) -print(0,GMSun,file=plfile) -print('0.0 0.0 0.0',file=plfile) -print('0.0 0.0 0.0',file=plfile) -for i in pl.id: - pli = pl.sel(id=i) - print(f"{int(i)} {pli['Mass'].values[0]} {pli['Rhill'].values[0]}", file=plfile) - print(f"{pli['Radius'].values[0]}", file=plfile) - print(f"{pli['px'].values[0]} {pli['py'].values[0]} {pli['pz'].values[0]}", file=plfile) - print(f"{pli['vx'].values[0]} {pli['vy'].values[0]} {pli['vz'].values[0]}", file=plfile) -plfile.close() - -# Swifter parameter file -sys.stdout = open(swifter_input, "w") -print(f"! VERSION Swifter input file generated using init_cond.py") -print(f"T0 {t_0} ") -print(f"TSTOP {end_sim}") -print(f"DT {deltaT}") -print(f"PL_IN {swifter_pl}") -print(f"TP_IN {tpin}") -print(f"IN_TYPE ASCII") -print(f"ISTEP_OUT {iout:d}") -print(f"ISTEP_DUMP {iout:d}") -print(f"BIN_OUT {swifter_bin}") -print(f"OUT_TYPE REAL8") -print(f"OUT_FORM XV") -print(f"OUT_STAT UNKNOWN") -print(f"J2 {param['J2']}") -print(f"J4 {param['J4']}") -print(f"CHK_CLOSE yes") -print(f"CHK_RMIN {rmin}") -print(f"CHK_RMAX {rmax}") -print(f"CHK_EJECT {rmax}") -print(f"CHK_QMIN {rmin}") -print(f"CHK_QMIN_COORD HELIO") -print(f"CHK_QMIN_RANGE {rmin} {rmax}") -print(f"ENC_OUT {swifter_enc}") -print(f"EXTRA_FORCE no") -print(f"BIG_DISCARD no") -print(f"RHILL_PRESENT yes") -sys.stdout = sys.__stdout__ - diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swifter.in b/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swifter.in deleted file mode 100644 index ec31caa63..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swifter.in +++ /dev/null @@ -1,26 +0,0 @@ -! Swifter input file generated using init_cond.py -T0 0 -TSTOP 365.25 -DT 1.0 -PL_IN pl.swifter.in -TP_IN tp.in -IN_TYPE ASCII -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swifter.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT UNKNOWN -J2 4.7535806948127355e-12 -J4 -2.2473967953572827e-18 -CHK_CLOSE yes -CHK_RMIN 0.004650467260962157 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.004650467260962157 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.004650467260962157 1000.0 -ENC_OUT enc.swifter.dat -EXTRA_FORCE no -BIG_DISCARD no -RHILL_PRESENT yes diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swiftest.in b/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swiftest.in deleted file mode 100644 index fff05bacf..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/param.swiftest.in +++ /dev/null @@ -1,29 +0,0 @@ -! VERSION Swiftest input file generated using init_cond.py -T0 0 -TSTOP 365.25 -DT 1.0 -CB_IN cb.swiftest.in -PL_IN pl.swiftest.in -TP_IN tp.in -IN_TYPE ASCII -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swiftest.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT REPLACE -CHK_CLOSE yes -CHK_RMIN 0.004650467260962157 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.004650467260962157 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.004650467260962157 1000.0 -ENC_OUT enc.swiftest.dat -EXTRA_FORCE no -BIG_DISCARD no -ROTATION no -GR no -MU2KG 1.988409870698051e+30 -DU2M 149597870700.0 -TU2S 86400.0 diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swifter.in b/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swifter.in deleted file mode 100644 index f02f6bc6f..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swifter.in +++ /dev/null @@ -1,40 +0,0 @@ -10 -0 0.00029591220819207776388 -0.0 0.0 0.0 -0.0 0.0 0.0 -1 4.9125474498983625e-11 0.0014751258227142052 -1.6306381826061646e-05 -0.008059842448018334 -0.4616051037329109 -0.03846017738329229 -0.02248719132054853 0.001934639213990692 -0.001904656977422976 -2 7.243452483873647e-10 0.006759134232034941 -4.0453784346544176e-05 --0.5115875215389065 0.5030818749037324 0.03642547299277956 --0.01425515725454357 -0.01452868630179309 0.0006232072038298823 -3 8.997011382166019e-10 0.010044625087011915 -4.25875607065041e-05 --0.1090020607540907 -1.009893805009766 4.823302918632528e-05 -0.01682491922568941 -0.001910549762056979 3.992660742687128e-08 -4 9.549535102761465e-11 0.0072467897902424765 -2.2657408050928896e-05 --1.342897929331636 0.9778655112682739 0.05343398538723887 --0.007712315645393206 -0.01011917844182223 -2.287744801261131e-05 -5 2.825345908631355e-07 0.3552720805286442 -0.0004673261703049093 -3.923184193414315 -3.168419770483168 -0.0746147877972047 -0.004655552638985802 0.006232623300954468 -0.0001300429201057457 -6 8.459715183006416e-08 0.4376460836930155 -0.00038925687730393614 -6.185794462795267 -7.804174837804826 -0.110498432926239 -0.004066833203985018 0.003458637040736611 -0.0002219310939327014 -7 1.2920249163736674e-08 0.46946272948265794 -0.00016953449859497232 -14.9290976575471 12.92949673572929 -0.1454099139559955 --0.002599557960646664 0.002795888198858545 4.391864857782088e-05 -8 1.5243589003230834e-08 0.78119478483336 -0.00016458790412449367 -29.54416169025338 -4.716921603714237 -0.5838030174427992 -0.0004792636209523189 0.00312573757291745 -7.53264045199501e-05 -9 2.1919422829042796e-12 0.05379680851617536 -7.943294877391593e-06 -14.54448346259197 -31.05223519593471 -0.8828000265625595 -0.002923077617691739 0.0006625916902153526 -0.0009142553677224461 diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in b/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in deleted file mode 100644 index 0920f9b2e..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in +++ /dev/null @@ -1,37 +0,0 @@ -9 -1 4.9125474498983625056e-11 -1.6306381826061645943e-05 -0.008059842448018333591 -0.46160510373291091524 -0.038460177383292291908 -0.02248719132054852949 0.0019346392139906921279 -0.0019046569774229759606 -2 7.243452483873647106e-10 -4.0453784346544178454e-05 --0.51158752153890652004 0.5030818749037323512 0.036425472992779560355 --0.01425515725454356988 -0.014528686301793089943 0.00062320720382988232425 -3 8.997011382166018993e-10 -4.25875607065040958e-05 --0.109002060754090704386 -1.0098938050097661101 4.8233029186325282966e-05 -0.016824919225689409317 -0.0019105497620569790936 3.9926607426871282392e-08 -4 9.549535102761465872e-11 -2.265740805092889601e-05 --1.3428979293316360977 0.97786551126827392366 0.053433985387238869258 --0.007712315645393206092 -0.0101191784418222296525 -2.2877448012611311785e-05 -5 2.8253459086313549713e-07 -0.00046732617030490929307 -3.923184193414314791 -3.1684197704831680298 -0.07461478779720470689 -0.0046555526389858022113 0.006232623300954467766 -0.00013004292010574569365 -6 8.45971518300641563e-08 -0.00038925687730393611812 -6.1857944627952665684 -7.804174837804826126 -0.11049843292623899582 -0.0040668332039850179674 0.0034586370407366113193 -0.00022193109393270141328 -7 1.2920249163736673984e-08 -0.00016953449859497231466 -14.929097657547099942 12.9294967357292893695 -0.14540991395599550673 --0.0025995579606466640267 0.0027958881988585450113 4.391864857782088156e-05 -8 1.5243589003230834746e-08 -0.000164587904124493665 -29.544161690253378794 -4.7169216037142369657 -0.58380301744279916587 -0.00047926362095231893815 0.00312573757291745008 -7.532640451995010825e-05 -9 2.1919422829042797324e-12 -7.943294877391593783e-06 -14.544483462591969669 -31.052235195934709822 -0.88280002656255951443 -0.0029230776176917390448 0.0006625916902153525834 -0.0009142553677224461557 diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb b/examples/helio_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb deleted file mode 100644 index 0a95cb75e..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb +++ /dev/null @@ -1,697 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import xarray as xr\n", - "import swiftest\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swifter file param.swifter.in\n", - "Reading in time 3.660e+02\n", - "Creating Dataset\n", - "Successfully converted 367 output frames.\n", - "Swifter simulation data stored as xarray DataSet .ds\n" - ] - } - ], - "source": [ - "inparfile = 'param.swifter.in'\n", - "swiftersim = swiftest.Simulation(param_file=inparfile, codename=\"Swifter\")\n", - "swiftersim.bin2xr()\n", - "swifterdat = swiftersim.ds" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swiftest file param.swiftest.in\n", - "Reading in time 3.660e+02\n", - "Creating Dataset\n", - "Successfully converted 367 output frames.\n", - "Swiftest simulation data stored as xarray DataSet .ds\n" - ] - } - ], - "source": [ - "inparfile = 'param.swiftest.in'\n", - "swiftestsim = swiftest.Simulation(param_file=inparfile)\n", - "swiftestsim.bin2xr()\n", - "swiftestdat = swiftestsim.ds" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftestdat - swifterdat" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftdiff.rename({'time' : 'time (d)'})" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff['rmag'] = np.sqrt(swiftdiff['px']**2 + swiftdiff['py']**2 + swiftdiff['pz']**2)\n", - "swiftdiff['vmag'] = np.sqrt(swiftdiff['vx']**2 + swiftdiff['vy']**2 + swiftdiff['vz']**2)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "plidx = swiftdiff.id.values[swiftdiff.id.values < 10]\n", - "tpidx = swiftdiff.id.values[swiftdiff.id.values > 10]" - ] - }, - { - "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 'px' (time (d): 367)>\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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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",
-       "       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.])\n",
-       "Coordinates:\n",
-       "    id        int64 4\n",
-       "  * time (d)  (time (d)) float64 0.0 1.0 2.0 3.0 4.0 ... 363.0 364.0 365.0 366.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", - " 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", - " 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", - " 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", - " 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", - " 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", - " 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", - " 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", - " 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", - " 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", - " 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.])\n", - "Coordinates:\n", - " id int64 4\n", - " * time (d) (time (d)) float64 0.0 1.0 2.0 3.0 4.0 ... 363.0 364.0 365.0 366.0" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "swiftdiff['px'].sel(id=4)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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28LyI4HB6WMi8NsaxGRmGWtsQqr3pqQ8qVliiIhHgXdaWGUccF0kngR6S9q5NtGZWVbqvcaQR3nqfN4FWFDwvCGd9yGSJkqaIWnGkiVLahKcmbUPdz7nT54SQ6nztEp+UiLiyogYExFj+vTp085hmVl72tiU5BpDbuQpMTQA/Que9wMWZhSLmVndylNimAqcosQBwN8jYlHWQZlZ+3JTUv7ULDFIugl4AthTUoOkCZLOkHRGuso04FVgHnAV8K1axWZm2XFTUmW+9rWvscMOOzBixIeuAihbza5jiIjxm1gewLdrFI6Z5UTjGElODOU59dRTOfPMMznllFOqVmaempLMrI7V+yB65TrooIPYdtttq1qmh8Qws0xtrCl08ArDBXfM5sWFy6ta5rC+W/Ojzw+vapmt4RqDmWXKfQz54xqDmWWqs1z5nMUv+/biGoOZZcqnq+aPE4OZZcpNSZUZP348H//4x5k7dy79+vXj97//fcVluinJzKwDu+mmm6pepmsMZpYpD7udP04MZpapztL53Jk4MZhZptz5nD9ODGaWKXc+548Tg5llyk1J+ePEYGaZ2tiE5LyQG04MZpapxprCBjyIXlstWLCAQw89lKFDhzJ8+HAmT55clXJ9HYOZZcqnq5ava9eu/OpXv2LUqFGsWLGC0aNHc/jhhzNs2LCKynWNwcwy5T6G8u28886MGjUKgF69ejF06FDeeOONist1jcHMcqHDJ4a7z4U3X6humTvtBUde1KpVX3vtNZ577jn233//infrGoOZZcqdz5VbuXIlxx13HJdccglbb711xeW5xmBmmeo0TUmt/GVfbWvXruW4447jpJNO4thjj61Kma4xmFmmfOVz+SKCCRMmMHToUH7wgx9UrVwnBjPLlK98Lt/06dO5/vrreeihhxg5ciQjR45k2rRpFZfrpiQzy1SnaUrKwIEHHtguNS3XGMwsF9yUlB9ODGaWqQ3hK57zxonBzDLlPob8cWIws0z5rKT8cWIws0xtHETPTUq54cRgZtlyRSF3apoYJI2VNFfSPEnnlli+jaQ7JD0vabak02oZn5nVnk9XLd/q1avZb7/92GeffRg+fDg/+tGPqlJuza5jkNQFuAw4HGgAnpY0NSJeLFjt28CLEfF5SX2AuZJujIg1tYrTzGrLfQzl23zzzXnooYfo2bMna9eu5cADD+TI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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['rmag'].sel(id=plidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric position differences \\n Planets only\")\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-planets-rmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['vmag'].sel(id=plidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{v}_{swiftest} - \\mathbf{v}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric velocity differences \\n Planets only\")\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-planets-vmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No handles with labels found to put in legend.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['rmag'].sel(id=tpidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric position differences \\n Test Particles only\")\n", - "legend = ax.legend()\n", - "legend.remove()\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-testparticles-rmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No handles with labels found to put in legend.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['vmag'].sel(id=tpidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{v}_{swiftest} - \\mathbf{v}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric velocity differences \\n Test Particles only\")\n", - "legend = ax.legend()\n", - "legend.remove()\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-testparticles-vmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "swiftestOOF", - "language": "python", - "name": "swiftestoof" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/tp.in b/examples/helio_swifter_comparison/9pl_18tp_encounters/tp.in deleted file mode 100644 index 6ae12da23..000000000 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/tp.in +++ /dev/null @@ -1,55 +0,0 @@ -18 -101 -0.0080829031543499848395 -0.46158204302657929174 -0.038460177383292291908 -0.025090740792557679473 0.00193463921399069207 -0.0019046569774229759036 -102 -0.008036781741686682343 -0.46162816443924253873 -0.038460177383292291908 -0.01988364184853937816 0.00193463921399069207 -0.0019046569774229759036 -103 --0.51153031124843428845 0.50313908519420458276 0.036425472992779560355 --0.007907923549198175514 -0.014528686301793089508 0.0006232072038298823056 -104 --0.5116447318293787516 0.5030246646132601196 0.036425472992779560355 --0.020602390959888965127 -0.014528686301793089508 0.0006232072038298823056 -105 --0.10894183284815117663 -1.0098335771038264852 4.8233029186325282966e-05 -0.023719359459963285097 -0.0019105497620569790364 3.9926607426871281197e-08 -106 --0.109062288660030232146 -1.009954032915705735 4.8233029186325282966e-05 -0.00993047899141553253 -0.0019105497620569790364 3.9926607426871281197e-08 -107 --1.3428658869178822233 0.97789755368202779806 0.053433985387238869258 --0.0046328365471693128824 -0.01011917844182222935 -2.28774480126113111e-05 -108 --1.3429299717453899721 0.97783346885452004926 0.053433985387238869258 --0.0107917947436170988396 -0.01011917844182222935 -2.28774480126113111e-05 -109 -3.9238450924224119731 -3.1677588714750708476 -0.07461478779720470689 -0.041537769840633231855 0.0062326233009544675795 -0.00013004292010574568976 -110 -3.9225232944062176088 -3.169080669491265212 -0.07461478779720470689 --0.03222666456266162771 0.0062326233009544675795 -0.00013004292010574568976 -111 -6.1863449551503970625 -7.8036243454496956318 -0.11049843292623899582 -0.026180002087518607773 0.0034586370407366112158 -0.00022193109393270140663 -112 -6.1852439704401360743 -7.80472533015995662 -0.11049843292623899582 --0.018046335679548570347 0.0034586370407366112158 -0.00022193109393270140663 -113 -14.92933741553430238 12.9297364937164918075 -0.14540991395599550673 -0.010495205578015229936 0.0027958881988585449277 4.3918648577820880246e-05 -114 -14.928857899559897504 12.9292569777420869315 -0.14540991395599550673 --0.015694321499308556966 0.0027958881988585449277 4.3918648577820880246e-05 -115 -29.544394452699595632 -4.7166888412680219034 -0.58380301744279916587 -0.014914899434230450767 0.0031257375729174499863 -7.532640451995010599e-05 -116 -29.543928927807161955 -4.717154366160452028 -0.58380301744279916587 --0.013956372192325811402 0.0031257375729174499863 -7.532640451995010599e-05 -117 -14.544494696107316045 -31.052223962419365222 -0.88280002656255951443 -0.0037110399802695879026 0.00066259169021535256356 -0.0009142553677224461283 -118 -14.544472229076623293 -31.052246429450054421 -0.88280002656255951443 -0.002135115255113890012 0.00066259169021535256356 -0.0009142553677224461283 diff --git a/examples/helio_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in b/examples/helio_swifter_comparison/cb.swiftest.in similarity index 75% rename from examples/helio_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in rename to examples/helio_swifter_comparison/cb.swiftest.in index 689d47628..058975b81 100644 --- a/examples/helio_swifter_comparison/9pl_18tp_encounters/cb.swiftest.in +++ b/examples/helio_swifter_comparison/cb.swiftest.in @@ -1,4 +1,4 @@ -0.0002959122081920778 +39.476926408897626 0.004650467260962157 4.7535806948127355e-12 -2.2473967953572827e-18 diff --git a/examples/helio_swifter_comparison/init_cond.py b/examples/helio_swifter_comparison/init_cond.py new file mode 100644 index 000000000..7e45bb4bb --- /dev/null +++ b/examples/helio_swifter_comparison/init_cond.py @@ -0,0 +1,59 @@ +import swiftest +import numpy as np +import sys +from astroquery.jplhorizons import Horizons +import astropy.constants as const +from scipy.io import FortranFile + +sim = swiftest.Simulation() + +sim.param['MU2KG'] = swiftest.MSun +sim.param['TU2S'] = swiftest.YR2S +sim.param['DU2M'] = swiftest.AU2M +sim.param['T0'] = 0.0 +sim.param['TSTOP'] = 1.0 +sim.param['DT'] = 0.25 * swiftest.JD2S / swiftest.YR2S +sim.param['CHK_QMIN_COORD'] = "HELIO" +sim.param['CHK_QMIN'] = swiftest.RSun / swiftest.AU2M +sim.param['CHK_QMIN_RANGE'] = f"{swiftest.RSun / swiftest.AU2M} 1000.0" +sim.param['CHK_RMIN'] = swiftest.RSun / swiftest.AU2M +sim.param['CHK_RMAX'] = 1000.0 +sim.param['CHK_EJECT'] = 1000.0 +sim.param['ISTEP_OUT'] = 1 +sim.param['ISTEP_DUMP'] = 1 +sim.param['OUT_FORM'] = "XV" +sim.param['OUT_STAT'] = "UNKNOWN" +sim.param['GR'] = 'NO' + +bodyid = { + "Sun": 0, + "Mercury": 1, + "Venus": 2, + "Earth": 3, + "Mars": 4, + "Jupiter": 5, + "Saturn": 6, + "Uranus": 7, + "Neptune": 8, + "Ceres": 101, + "Pallas": 102, + "Juno": 103, + "Vesta": 104 +} + +for name, id in bodyid.items(): + sim.add(name, idval=id) + +sim.param['PL_IN'] = "pl.swiftest.in" +sim.param['TP_IN'] = "tp.swiftest.in" +sim.param['CB_IN'] = "cb.swiftest.in" +sim.param['BIN_OUT'] = "bin.swiftest.dat" +sim.param['ENC_OUT'] = "enc.swiftest.dat" +sim.save("param.swiftest.in") +sim.param['PL_IN'] = "pl.swifter.in" +sim.param['TP_IN'] = "tp.swifter.in" +sim.param['BIN_OUT'] = "bin.swifter.dat" +sim.param['ENC_OUT'] = "enc.swifter.dat" +sim.save("param.swifter.in", codename="Swifter") + + diff --git a/examples/helio_swifter_comparison/mars_ejecta/.idea/.gitignore b/examples/helio_swifter_comparison/mars_ejecta/.idea/.gitignore deleted file mode 100644 index 26d33521a..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/examples/helio_swifter_comparison/mars_ejecta/cb.swiftest.in b/examples/helio_swifter_comparison/mars_ejecta/cb.swiftest.in deleted file mode 100644 index 2aafc8408..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/cb.swiftest.in +++ /dev/null @@ -1,4 +0,0 @@ -0.00029591220828563 -0.004650467260962157 -0.0 -0.0 diff --git a/examples/helio_swifter_comparison/mars_ejecta/config.swiftest.in b/examples/helio_swifter_comparison/mars_ejecta/config.swiftest.in deleted file mode 100644 index 3f459514f..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/config.swiftest.in +++ /dev/null @@ -1,33 +0,0 @@ -! -! Parameter file for the CHO run of the 4 giant planets and Pluto. -! -!NPLMAX -1 ! not used -!NTPMAX -1 ! not used -T0 0.0e0 -TSTOP 6000.000 ! simulation length in days -DT 1e0 ! stepsize in days -ISTEP_OUT 1 ! output cadence -ISTEP_DUMP 1 ! system dump cadence -CB_IN cb.swiftest.in -PL_IN pl.swiftest.in -TP_IN tp.in -IN_TYPE ASCII -BIN_OUT bin.swiftest.dat -OUT_TYPE REAL8 ! double precision real output -OUT_FORM XV ! osculating element output -OUT_STAT REPLACE -CHK_CLOSE yes ! check for planetary close encounters -CHK_RMIN 0.005e0 ! check for close solar encounters -CHK_RMAX 10000.0e0 ! discard outside of -CHK_EJECT -1.0 ! ignore this check -CHK_QMIN -1.0 ! ignore this check -!CHK_QMIN_COORD HELIO ! commented out here -!CHK_QMIN_RANGE 1.0 1000.0 ! commented out here -ENC_OUT enc.swiftest.dat -EXTRA_FORCE no ! no extra user-defined forces -BIG_DISCARD yes ! output all planets if anything discarded -ROTATION no -GR no -MU2KG 1.988409870698051e+30 -DU2M 149597870700.0 -TU2S 86400.0000 diff --git a/examples/helio_swifter_comparison/mars_ejecta/param.swifter.in b/examples/helio_swifter_comparison/mars_ejecta/param.swifter.in deleted file mode 100644 index f4035c4c0..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/param.swifter.in +++ /dev/null @@ -1,30 +0,0 @@ -! -! Parameter file for the CHO run of the 4 giant planets and Pluto. -! -!NPLMAX -1 ! not used -!NTPMAX -1 ! not used -T0 0.0e0 -TSTOP 6000.000 ! simulation length in days -DT 1e0 ! stepsize in days -ISTEP_OUT 1 ! output cadence -ISTEP_DUMP 1 ! system dump cadence -PL_IN pl.swifter.in -TP_IN tp.in -IN_TYPE ASCII -BIN_OUT bin.swifter.dat -OUT_TYPE REAL8 ! double precision real output -OUT_FORM XV ! osculating element output -OUT_STAT NEW -J2 0.0 ! no J2 term -J4 0.0 ! no J4 term -CHK_CLOSE yes ! check for planetary close encounters -CHK_RMIN 0.005 ! check for close solar encounters -CHK_RMAX 10000.0 ! discard outside of -CHK_EJECT -1.0 ! ignore this check -CHK_QMIN -1.0 ! ignore this check -!CHK_QMIN_COORD HELIO ! commented out here -!CHK_QMIN_RANGE 1.0 1000.0 ! commented out here -ENC_OUT enc.swifter.dat -EXTRA_FORCE no ! no extra user-defined forces -BIG_DISCARD yes ! output all planets if anything discarded -RHILL_PRESENT yes ! Hill's sphere radii in input file diff --git a/examples/helio_swifter_comparison/mars_ejecta/pl.swifter.in b/examples/helio_swifter_comparison/mars_ejecta/pl.swifter.in deleted file mode 100644 index ab7f6ec08..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/pl.swifter.in +++ /dev/null @@ -1,36 +0,0 @@ - 9 ! Solar system. Taken from JPL Horizons on 10-31-2012 00:00 (JD 2456231.5) - 1 2.9591220828563E-04 - .0 .0 .0 - .0 .0 .0 - 2 4.912576812862670E-11 1.475E-03 ! Mercury / Mass (Msun) / Rhill (AU) - 1.63104E-05 ! Radius (AU) - 3.347381871776144E-01 -2.106110537919978E-01 -4.792146121659843E-02 - 9.457239437449661E-03 2.510612575783642E-02 1.183593414707043E-03 - 3 7.243495778974390E-10 6.758E-03 ! Venus - 4.04538E-05 - -4.641166544325086E-01 5.473160240817795E-01 3.428518329144122E-02 - -1.549753193570599E-02 -1.319081534035637E-02 7.136685719563098E-04 - 4 8.997065158526820E-10 1.004E-02 ! Earth + Moon - 4.2587571E-05 - 7.844742229036105E-01 6.083466458892074E-01 -1.996912082982283E-05 - -1.081828010368904E-02 1.352675083743791E-02 2.330162751015549E-07 - 5 9.549592181631700E-11 7.246E-03 ! Mars - 2.26601E-05 - 3.248808297463504E-01 -1.392041319192106E+00 -3.714224198825128E-02 - 1.415678377567019E-02 4.380992498628390E-03 -2.558013868476858E-04 - 6 2.825362796108150E-07 0.3553 ! Jupiter - 4.67326E-04 - 1.873343037544675E+00 4.683322528183729E+00 -6.137078942429344E-02 - -7.104028854569467E-03 3.164193073442964E-03 1.458211211387848E-04 - 7 8.459765747874750E-08 0.4356 ! Saturn - 3.89257E-04 - -8.251865479985982E+00 -5.225008639958182E+00 4.193935221241906E-01 - 2.677374423933877E-03 -4.723961471952217E-03 -2.458643348128228E-05 - 8 1.292032638982330E-08 0.4686 ! Uranus - 1.69534E-04 - 1.992234896320000E+01 2.342619564376139E+00 -2.493547557095487E-01 - -4.936420700174518E-04 3.724868172847281E-03 2.027439791557233E-05 - 9 1.524368011623570E-08 0.7757 ! Neptune - 1.64601E-04 - 2.647158936403647E+01 -1.409652133490650E+01 -3.196444184043846E-01 - 1.449117851099529E-03 2.791630281764020E-03 -9.063088654405710E-05 diff --git a/examples/helio_swifter_comparison/mars_ejecta/pl.swiftest.in b/examples/helio_swifter_comparison/mars_ejecta/pl.swiftest.in deleted file mode 100644 index e1931fc7f..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/pl.swiftest.in +++ /dev/null @@ -1,33 +0,0 @@ -8 -2 4.91257681286267e-11 -1.63104e-05 -0.3347381871776144 -0.2106110537919978 -0.04792146121659843 -0.00945723943744966 0.02510612575783642 0.001183593414707043 -3 7.24349577897439e-10 -4.04538e-05 --0.4641166544325086 0.5473160240817795 0.03428518329144122 --0.01549753193570599 -0.01319081534035637 0.0007136685719563098 -4 8.99706515852682e-10 -4.2587571e-05 -0.7844742229036105 0.6083466458892074 -1.996912082982283e-05 --0.01081828010368904 0.01352675083743791 2.330162751015549e-07 -5 9.5495921816317e-11 -2.26601e-05 -0.3248808297463504 -1.392041319192106 -0.03714224198825128 -0.01415678377567019 0.00438099249862839 -0.0002558013868476858 -6 2.82536279610815e-07 -0.000467326 -1.873343037544675 4.683322528183729 -0.06137078942429344 --0.007104028854569467 0.003164193073442964 0.0001458211211387848 -7 8.45976574787475e-08 -0.000389257 --8.251865479985982 -5.225008639958182 0.4193935221241906 -0.002677374423933877 -0.004723961471952217 -2.458643348128228e-05 -8 1.29203263898233e-08 -0.000169534 -19.9223489632 2.342619564376139 -0.2493547557095487 --0.0004936420700174518 0.003724868172847281 2.027439791557233e-05 -9 1.52436801162357e-08 -0.000164601 -26.47158936403647 -14.0965213349065 -0.3196444184043846 -0.001449117851099529 0.00279163028176402 -9.06308865440571e-05 diff --git a/examples/helio_swifter_comparison/mars_ejecta/profmaker.sh b/examples/helio_swifter_comparison/mars_ejecta/profmaker.sh deleted file mode 100755 index 9b1adcd8c..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/profmaker.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -gprof ./swiftest_driver | /home/daminton/git/gprof2dot/gprof2dot.py | dot -Tpng -o swiftest_profile.png diff --git a/examples/helio_swifter_comparison/mars_ejecta/profswifter.sh b/examples/helio_swifter_comparison/mars_ejecta/profswifter.sh deleted file mode 100755 index a03493f54..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/profswifter.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -gprof ./swifter_rmvs | /home/daminton/git/gprof2dot/gprof2dot.py | dot -Tpng -o swifter_profile.png diff --git a/examples/helio_swifter_comparison/mars_ejecta/start.in b/examples/helio_swifter_comparison/mars_ejecta/start.in deleted file mode 100644 index d6d7c3850..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/start.in +++ /dev/null @@ -1 +0,0 @@ -param.in diff --git a/examples/helio_swifter_comparison/mars_ejecta/swiftest_rmvs_vs_swifter_rmvs.ipynb b/examples/helio_swifter_comparison/mars_ejecta/swiftest_rmvs_vs_swifter_rmvs.ipynb deleted file mode 100644 index 2ef9e28a5..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/swiftest_rmvs_vs_swifter_rmvs.ipynb +++ /dev/null @@ -1,241 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import swiftestio as swio\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swifter file param.swifter.in\n" - ] - } - ], - "source": [ - "inparfile = 'param.swifter.in'\n", - "param = swio.read_swifter_param(inparfile)\n", - "swifterdat = swio.swifter2xr(param)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swiftest file param.swiftest.in\n" - ] - } - ], - "source": [ - "param_file_name = 'param.swiftest.in'\n", - "config = swio.read_swiftest_config(param_file_name)\n", - "swiftestdat = swio.swiftest2xr(config)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftestdat - swifterdat" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftdiff.rename({'time' : 'time (d)'})" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff['rmag'] = np.sqrt(swiftdiff['px']**2 + swiftdiff['py']**2 + swiftdiff['pz']**2)\n", - "swiftdiff['vmag'] = np.sqrt(swiftdiff['vx']**2 + swiftdiff['vy']**2 + swiftdiff['vz']**2)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "plidx = swiftdiff.id.values[swiftdiff.id.values < 10]\n", - "tpidx = swiftdiff.id.values[swiftdiff.id.values > 10]" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['rmag'].sel(id=plidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric position differences \\n Planets only\")\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-planets-rmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['vmag'].sel(id=plidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{v}_{swiftest} - \\mathbf{v}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric velocity differences \\n Planets only\")\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-planets-vmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No handles with labels found to put in legend.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['rmag'].sel(id=tpidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric position differences \\n Test Particles only\")\n", - "legend = ax.legend()\n", - "legend.remove()\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-testparticles-rmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No handles with labels found to put in legend.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "swiftdiff['vmag'].sel(id=tpidx).plot.line(ax=ax, x=\"time (d)\")\n", - "ax.set_ylabel(\"$|\\mathbf{v}_{swiftest} - \\mathbf{v}_{swifter}|$\")\n", - "ax.set_title(\"Heliocentric velocity differences \\n Test Particles only\")\n", - "legend = ax.legend()\n", - "legend.remove()\n", - "fig.savefig(\"rmvs_swifter_comparison-mars_ejecta-testparticles-vmag.png\", facecolor='white', transparent=False, dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/examples/helio_swifter_comparison/mars_ejecta/tp.in b/examples/helio_swifter_comparison/mars_ejecta/tp.in deleted file mode 100644 index d5eb0e3f8..000000000 --- a/examples/helio_swifter_comparison/mars_ejecta/tp.in +++ /dev/null @@ -1,601 +0,0 @@ - 200 - 6000200 - 0.321794727714005 -1.39371227734394 -3.555372224179648E-002 - 1.263074812292130E-002 3.554726326213714E-003 5.297001107625803E-004 - 6000201 - 0.327226184487893 -1.39016803345029 -3.472777857996821E-002 - 1.531652992677778E-002 5.307306923696688E-003 9.381180638637231E-004 - 6000202 - 0.327531202012097 -1.39478453402311 -3.768059236489047E-002 - 1.546735696093592E-002 3.024509922426058E-003 -5.220083559665117E-004 - 6000203 - 0.322202594471783 -1.39306474804903 -3.456946701305916E-002 - 1.283243270995610E-002 3.874920791552106E-003 1.016400989319078E-003 - 6000204 - 0.323275102327213 -1.39231827262319 -4.063286630727199E-002 - 1.336277331700188E-002 4.244042778378470E-003 -1.981867830972686E-003 - 6000205 - 0.325545380653237 -1.39090814848439 -3.352094137611809E-002 - 1.448539519756952E-002 4.941330064430509E-003 1.534882714168952E-003 - 6000206 - 0.322100032022230 -1.38941601200018 -3.760532734717235E-002 - 1.278171696789352E-002 5.679171344404378E-003 -4.847908241938090E-004 - 6000207 - 0.325337949472342 -1.39379280734375 -3.374182250017822E-002 - 1.438282328833895E-002 3.514905332112549E-003 1.425659990227191E-003 - 6000208 - 0.326082121124172 -1.39530189188417 -3.547938702480286E-002 - 1.475080609012429E-002 2.768683467912135E-003 5.664578686714714E-004 - 6000209 - 0.327275685332658 -1.39441408865592 -3.527833381550945E-002 - 1.534100742400883E-002 3.207690138697890E-003 6.658759573365761E-004 - 6000210 - 0.327855145958387 -1.39318452150569 -3.930697139978061E-002 - 1.562754285445135E-002 3.815694439606817E-003 -1.326230758891795E-003 - 6000211 - 0.328078710851062 -1.39251497560023 -3.504731288890989E-002 - 1.573809266562045E-002 4.146775820637334E-003 7.801126762871974E-004 - 6000212 - 0.321277816542297 -1.39195915492794 -3.578170284173104E-002 - 1.237514255024041E-002 4.421621614318133E-003 4.169667921656008E-004 - 6000213 - 0.324665498950826 -1.39490683098100 -3.970778222771389E-002 - 1.405030561400833E-002 2.964035733299919E-003 -1.524426284193035E-003 - 6000214 - 0.324929781829885 -1.39405065211182 -4.042853272331495E-002 - 1.418098991790633E-002 3.387404586890700E-003 -1.880827641470143E-003 - 6000215 - 0.327555988964697 -1.39432357646482 -3.871524764041770E-002 - 1.547961377324917E-002 3.252447191181946E-003 -1.033631374975754E-003 - 6000216 - 0.321438220244275 -1.39139099683337 -3.554066697282077E-002 - 1.245446000814854E-002 4.702568096196656E-003 5.361557644332466E-004 - 6000217 - 0.327269239795964 -1.39111145972877 -3.426641502936644E-002 - 1.533782019342066E-002 4.840795408002274E-003 1.166256090318398E-003 - 6000218 - 0.323989604933645 -1.39344910147082 -4.061548100580529E-002 - 1.371608517771453E-002 3.684863230669170E-003 -1.973271034886913E-003 - 6000219 - 0.321638711062574 -1.39087780679511 -3.541758920393877E-002 - 1.255360000208438E-002 4.956333618793669E-003 5.970160540173710E-004 - 6000220 - 0.322548442178556 -1.38969900689356 -3.516409557966647E-002 - 1.300344971633673E-002 5.539234202882858E-003 7.223652175672305E-004 - 6000221 - 0.326425905823290 -1.38912149826721 -3.516059934460978E-002 - 1.492080296716386E-002 5.824804396075300E-003 7.240940584451341E-004 - 6000222 - 0.325686803560988 -1.39394570042399 -4.039235894274407E-002 - 1.455532690983334E-002 3.439301774920795E-003 -1.862940196963350E-003 - 6000223 - 0.327419177059503 -1.39257520407836 -3.429421078579946E-002 - 1.541196213929194E-002 4.116993654016758E-003 1.152511465264746E-003 - 6000224 - 0.324490052620445 -1.39553030085443 -3.872774571953116E-002 - 1.396354978011187E-002 2.655738325987235E-003 -1.039811505806850E-003 - 6000225 - 0.321731345032329 -1.39031854790183 -3.853949894445081E-002 - 1.259940624537157E-002 5.232879566177696E-003 -9.467260253928260E-004 - 6000226 - 0.325601002353804 -1.39413056037783 -3.398693779254160E-002 - 1.451289937508628E-002 3.347891031734538E-003 1.304453798319087E-003 - 6000227 - 0.325825665573909 -1.38837078808078 -3.783072474317082E-002 - 1.462399229429218E-002 6.196020414654821E-003 -5.962467834347196E-004 - 6000228 - 0.328007765778950 -1.39171771880483 -3.491579285982123E-002 - 1.570301128843478E-002 4.541008506865058E-003 8.451475491903844E-004 - 6000229 - 0.326038941297358 -1.38837178473418 -3.696108906496336E-002 - 1.472945425064948E-002 6.195527583046642E-003 -1.662237200565085E-004 - 6000230 - 0.324865697509285 -1.38818972404806 -3.707510223923227E-002 - 1.414930108941243E-002 6.285554126260012E-003 -2.226016903873118E-004 - 6000231 - 0.326890450931510 -1.39246034816528 -3.388258567264032E-002 - 1.515051423076515E-002 4.173788347277624E-003 1.356054508127195E-003 - 6000232 - 0.325593633813168 -1.38828971482136 -3.764909195799739E-002 - 1.450925573155059E-002 6.236110043272472E-003 -5.064318314410409E-004 - 6000233 - 0.326626976582762 -1.39216397200456 -3.371070451979964E-002 - 1.502022973415419E-002 4.320342344240131E-003 1.441047410021331E-003 - 6000234 - 0.327898875134393 -1.39098636673654 -3.929119504411583E-002 - 1.564916633966053E-002 4.902652198234570E-003 -1.318429564711382E-003 - 6000235 - 0.325772175388830 -1.39276944665725 -4.081849758657961E-002 - 1.459754212231259E-002 4.020943329837438E-003 -2.073659984154833E-003 - 6000236 - 0.325970862049605 -1.39573308065969 -3.729140206480187E-002 - 1.469578998479103E-002 2.555466459007209E-003 -3.295590242806717E-004 - 6000237 - 0.323334466127931 -1.38903625723277 -3.899099401712434E-002 - 1.339212791235488E-002 5.866954932989258E-003 -1.169984223183693E-003 - 6000238 - 0.321058043138336 -1.39159433514890 -3.730357920900053E-002 - 1.226646757888280E-002 4.602020053452453E-003 -3.355804571435673E-004 - 6000239 - 0.321631711087942 -1.39236740484015 -3.509861335813708E-002 - 1.255013860944605E-002 4.219747562605665E-003 7.547452891357343E-004 - 6000240 - 0.321306936119327 -1.39062854909901 -3.740848791004924E-002 - 1.238954178664758E-002 5.079588173238877E-003 -3.874563887900095E-004 - 6000241 - 0.322359878582366 -1.39481226441940 -3.804012263745659E-002 - 1.291020757217519E-002 3.010797617075125E-003 -6.997912057971096E-004 - 6000242 - 0.323817379375385 -1.38838475633633 -3.772374286905647E-002 - 1.363092197200557E-002 6.189113301486290E-003 -5.433456957891204E-004 - 6000243 - 0.327623726544369 -1.39464240098381 -3.788413992758530E-002 - 1.551310908886966E-002 3.094792785121600E-003 -6.226598686018013E-004 - 6000244 - 0.322826324940355 -1.38886200520861 -3.642775302359531E-002 - 1.314085897803487E-002 5.953120198633154E-003 9.750372819152632E-005 - 6000245 - 0.322612433934003 -1.39373086883468 -3.975745217634516E-002 - 1.303509277261627E-002 3.545533085870808E-003 -1.548987400995745E-003 - 6000246 - 0.321924589943174 -1.39047906318775 -3.905523030161998E-002 - 1.269496323622005E-002 5.153506931519558E-003 -1.201748195765625E-003 - 6000247 - 0.325483402999438 -1.39432969787986 -3.410254622383869E-002 - 1.445474808727309E-002 3.249420234359466E-003 1.247286994996116E-003 - 6000248 - 0.324075789932299 -1.39390925319708 -3.387081182165206E-002 - 1.375870249214517E-002 3.457324434934150E-003 1.361876517960287E-003 - 6000249 - 0.325555351421543 -1.39061734515993 -3.362701221631959E-002 - 1.449032560743936E-002 5.085128369354139E-003 1.482432120453008E-003 - 6000250 - 0.326533132333845 -1.39533418173792 -3.601686458585766E-002 - 1.497382502421540E-002 2.752716572605950E-003 3.006824950365570E-004 - 6000251 - 0.328077463583129 -1.39411605620772 -3.770484336908437E-002 - 1.573747590852224E-002 3.355063147389858E-003 -5.340001490527292E-004 - 6000252 - 0.321651628711733 -1.39378675143995 -3.597380335900138E-002 - 1.255998760462024E-002 3.517899894512744E-003 3.219756884387962E-004 - 6000253 - 0.324493522176533 -1.38860008548191 -3.882967355197441E-002 - 1.396526542860112E-002 6.082635955702965E-003 -1.090213438304715E-003 - 6000254 - 0.324521711140188 -1.39586389310030 -3.745606427432058E-002 - 1.397920448930016E-002 2.490781479023323E-003 -4.109822564850102E-004 - 6000255 - 0.323857759005521 -1.39310641830337 -4.070010820644245E-002 - 1.365088915215276E-002 3.854315415219456E-003 -2.015118039299293E-003 - 6000256 - 0.324036458712472 -1.39214287853430 -4.089940117322854E-002 - 1.373925373669473E-002 4.330772779566417E-003 -2.113665711887594E-003 - 6000257 - 0.322090781783657 -1.39468966511415 -3.693872754859708E-002 - 1.277714285021657E-002 3.071421312874804E-003 -1.551662531073200E-004 - 6000258 - 0.328092592928615 -1.39374096057231 -3.586344633457473E-002 - 1.574495716493310E-002 3.540542858309311E-003 3.765457421963371E-004 - 6000259 - 0.324548049062538 -1.39233312653552 -3.331554270885758E-002 - 1.399222823514643E-002 4.236697719935751E-003 1.636449572938168E-003 - 6000260 - 0.324887975354043 -1.39268402922437 -4.094045138727274E-002 - 1.416031718188453E-002 4.063181093387097E-003 -2.133964486694073E-003 - 6000261 - 0.321944774836254 -1.39352845277138 -3.514035858345473E-002 - 1.270494439243692E-002 3.645625087381753E-003 7.341028406686787E-004 - 6000262 - 0.327218902932329 -1.38903404006224 -3.771600840082730E-002 - 1.531292929618219E-002 5.868051293781019E-003 -5.395211060156568E-004 - 6000263 - 0.325421465012036 -1.39138633273825 -4.089966505983452E-002 - 1.442412059147267E-002 4.704874428056443E-003 -2.113796200239817E-003 - 6000264 - 0.324143614425125 -1.39411979216184 -3.398376362544507E-002 - 1.379224078514325E-002 3.353215768678313E-003 1.306023380953205E-003 - 6000265 - 0.324251383572956 -1.39481065425279 -3.453953133960193E-002 - 1.384553116897805E-002 3.011593822657939E-003 1.031203774355344E-003 - 6000266 - 0.323082300628443 -1.39404098553295 -3.438431714855358E-002 - 1.326743548852136E-002 3.392184579203928E-003 1.107955089402535E-003 - 6000267 - 0.325299655987546 -1.39040136408079 -4.060268324575995E-002 - 1.436388767880525E-002 5.191928087451827E-003 -1.966942715894272E-003 - 6000268 - 0.328389849750416 -1.39205995084950 -3.873156679977102E-002 - 1.589194663687427E-002 4.371779396419775E-003 -1.041700978227703E-003 - 6000269 - 0.325793463819930 -1.38928905744628 -3.967831695053032E-002 - 1.460806896313280E-002 5.741948651668003E-003 -1.509856103742432E-003 - 6000270 - 0.326601355314686 -1.39233804164542 -4.057608377821496E-002 - 1.500756036413905E-002 4.234267264663880E-003 -1.953789639491635E-003 - 6000271 - 0.321827451960849 -1.39213071131237 -3.479524070321862E-002 - 1.264692981972560E-002 4.336789306004781E-003 9.047589577125814E-004 - 6000272 - 0.321663381504649 -1.39142897193463 -3.917019157646589E-002 - 1.256579920152172E-002 4.683789923007624E-003 -1.258594988989431E-003 - 6000273 - 0.324648930551282 -1.39538104296497 -3.904801998382525E-002 - 1.404211276485815E-002 2.729544330582880E-003 -1.198182791282209E-003 - 6000274 - 0.321223963022878 -1.39253230185508 -3.603509083528145E-002 - 1.234851271435078E-002 4.138208222307412E-003 2.916698615769088E-004 - 6000275 - 0.321349228011334 -1.39221979031449 -3.561402108543606E-002 - 1.241045455438754E-002 4.292740946056133E-003 4.998831493500657E-004 - 6000276 - 0.324379742702741 -1.38833977818834 -3.620042042538130E-002 - 1.390900301999063E-002 6.211354386424082E-003 2.099166187150847E-004 - 6000277 - 0.321457479810322 -1.39117525342277 -3.868176372657838E-002 - 1.246398360268161E-002 4.809250290424065E-003 -1.017074033132608E-003 - 6000278 - 0.325405274076550 -1.39361725382059 -3.366648162894059E-002 - 1.441611439318668E-002 3.601714171383542E-003 1.462915030537829E-003 - 6000279 - 0.321794234123648 -1.39021314640619 -3.573859188553418E-002 - 1.263050404917571E-002 5.284999178073548E-003 4.382845760531595E-004 - 6000280 - 0.326444232064343 -1.39553980455841 -3.753707767299938E-002 - 1.492986504512957E-002 2.651038873102111E-003 -4.510422847790933E-004 - 6000281 - 0.322277249464589 -1.39203923743843 -3.998141216047151E-002 - 1.286934859267273E-002 4.382021897621130E-003 -1.659732579536102E-003 - 6000282 - 0.328312462659902 -1.39188336185765 -3.539912210963739E-002 - 1.585367976884838E-002 4.459100260935347E-003 6.061477820066648E-004 - 6000283 - 0.325347229643059 -1.39100999963996 -4.082441159349795E-002 - 1.438741220705580E-002 4.890966047611239E-003 -2.076584380468826E-003 - 6000284 - 0.325755425615411 -1.38888217640230 -3.916570950307285E-002 - 1.458925958623789E-002 5.943145816580859E-003 -1.256378664407702E-003 - 6000285 - 0.325383104362951 -1.39054381044671 -4.065574588764872E-002 - 1.440515177010779E-002 5.121490288988412E-003 -1.993181473557695E-003 - 6000286 - 0.325529431096013 -1.39548980174177 -3.555264887114687E-002 - 1.447750835756422E-002 2.675764588624088E-003 5.302308780096619E-004 - 6000287 - 0.321386839414644 -1.39364212905941 -3.740484666220886E-002 - 1.242905288386607E-002 3.589413702731343E-003 -3.856558410548179E-004 - 6000288 - 0.325609144161828 -1.39058365051225 -3.365164289696592E-002 - 1.451692538887061E-002 5.101789916224030E-003 1.470252582503900E-003 - 6000289 - 0.325746594379357 -1.39018221747378 -3.388130434928219E-002 - 1.458489265963108E-002 5.300293116209953E-003 1.356688105171851E-003 - 6000290 - 0.328670099790430 -1.39148012214160 -3.754968804313675E-002 - 1.603052648558429E-002 4.658496838509829E-003 -4.572779420004985E-004 - 6000291 - 0.327050766991314 -1.39494919091028 -3.584795596588932E-002 - 1.522978835080585E-002 2.943089322051995E-003 3.842055196892361E-004 - 6000292 - 0.324537148578145 -1.39587795189979 -3.718291882528427E-002 - 1.398683809326467E-002 2.483829593105807E-003 -2.759155317796403E-004 - 6000293 - 0.325510509540737 -1.38957080345959 -3.425440936567027E-002 - 1.446815190477895E-002 5.602629064425047E-003 1.172192728395570E-003 - 6000294 - 0.325364297568245 -1.39459990856101 -3.430333353770083E-002 - 1.439585206486989E-002 3.115804712620871E-003 1.148000388020130E-003 - 6000295 - 0.323644249841663 -1.39514928477911 -3.905298580505075E-002 - 1.354531176267529E-002 2.844145614251118E-003 -1.200638322614567E-003 - 6000296 - 0.322252155329533 -1.39173521301220 -3.994150826731383E-002 - 1.285693988279573E-002 4.532357858282674E-003 -1.640000644880718E-003 - 6000297 - 0.326793296706268 -1.39091455480311 -4.029063745626598E-002 - 1.510247278236859E-002 4.938162226599772E-003 -1.812640299750235E-003 - 6000298 - 0.328394129335298 -1.39145794911307 -3.861054959678920E-002 - 1.589406283363007E-002 4.669461100775097E-003 -9.818596105701817E-004 - 6000299 - 0.325717727002889 -1.39559209734865 -3.590486599481333E-002 - 1.457061813298568E-002 2.625180796653218E-003 3.560642812509859E-004 - 6000300 - 0.321281416206461 -1.39340867720813 -3.702359920936095E-002 - 1.237692253541057E-002 3.704852481010806E-003 -1.971341397410737E-004 - 6000301 - 0.326826923545244 -1.39251344124293 -4.043303848440993E-002 - 1.511910079875579E-002 4.147534539539541E-003 -1.883055679299622E-003 - 6000302 - 0.325221626988922 -1.39387263555342 -3.377034941755341E-002 - 1.432530339591360E-002 3.475431363727050E-003 1.411553815991447E-003 - 6000303 - 0.322406645286088 -1.39162516754770 -4.006538258520391E-002 - 1.293333307369588E-002 4.586773849880030E-003 -1.701254817159826E-003 - 6000304 - 0.327187048763822 -1.39463651865951 -3.547316576113219E-002 - 1.529717784133024E-002 3.097701514809212E-003 5.695341992875920E-004 - 6000305 - 0.327480662501029 -1.39487649003504 -3.693682090078323E-002 - 1.544236585728670E-002 2.979038920099771E-003 -1.542234415895329E-004 - 6000306 - 0.328551533470727 -1.39151193343580 -3.818397457052056E-002 - 1.597189704651028E-002 4.642766584423178E-003 -7.709240381764704E-004 - 6000307 - 0.322630404860865 -1.38945264563622 -3.538899387690294E-002 - 1.304397915252749E-002 5.661056507596596E-003 6.111560559036752E-004 - 6000308 - 0.328374974048021 -1.39213603553404 -3.876134862395392E-002 - 1.588459080353605E-002 4.334156550504728E-003 -1.056427686881741E-003 - 6000309 - 0.324324666115425 -1.38831319086554 -3.634772132746308E-002 - 1.388176839359332E-002 6.224501457414479E-003 1.370783178738140E-004 - 6000310 - 0.327780384205777 -1.39040540380995 -3.520423097607128E-002 - 1.559057418045742E-002 5.189930496106032E-003 7.025188076919263E-004 - 6000311 - 0.326421010606110 -1.39541002836368 -3.608433683151303E-002 - 1.491838234857564E-002 2.715211443533721E-003 2.673183834932795E-004 - 6000312 - 0.324795021294935 -1.39575370968382 -3.816709106533256E-002 - 1.411435265874821E-002 2.545265686000613E-003 -7.625753735535234E-004 - 6000313 - 0.325813555169143 -1.39541693890006 -3.874684061627268E-002 - 1.461800386317468E-002 2.711794276901274E-003 -1.049253673599004E-003 - 6000314 - 0.322857896534282 -1.38930726976145 -3.533330948140715E-002 - 1.315647070358410E-002 5.732942908509505E-003 6.386912352132688E-004 - 6000315 - 0.326219515200231 -1.39471810186507 -3.471690125726086E-002 - 1.481874559968870E-002 3.057359724732503E-003 9.434967526056666E-004 - 6000316 - 0.321329945274699 -1.39230542391461 -3.567221135978340E-002 - 1.240091950231233E-002 4.250396290733629E-003 4.711088468913174E-004 - 6000317 - 0.324943199595914 -1.39100652024179 -4.085233942880207E-002 - 1.418762482145983E-002 4.892686562876645E-003 -2.090394316735189E-003 - 6000318 - 0.326617044426315 -1.39248593326675 -4.055213917054404E-002 - 1.501531841732557E-002 4.161136861160018E-003 -1.941949355335786E-003 - 6000319 - 0.322850100717639 -1.38930020663682 -3.535283888796843E-002 - 1.315261577785102E-002 5.736435527964740E-003 6.290342082008193E-004 - 6000320 - 0.327167129230231 -1.39467550377465 -3.550717986735132E-002 - 1.528732790178609E-002 3.078423903439586E-003 5.527146844942592E-004 - 6000321 - 0.326175366886518 -1.39179718675643 -3.352228413895547E-002 - 1.479691485656030E-002 4.501712681218141E-003 1.534218736134025E-003 - 6000322 - 0.323968917553573 -1.39007740521288 -3.395618173788408E-002 - 1.370585554848606E-002 5.352121359507512E-003 1.319662250746563E-003 - 6000323 - 0.323157023880416 -1.38871984144043 -3.622802058959314E-002 - 1.330438512447146E-002 6.023418256348253E-003 1.962687113654486E-004 - 6000324 - 0.322467171269080 -1.39052754228481 -3.454951097363686E-002 - 1.296326235244168E-002 5.129534674689875E-003 1.026268980502423E-003 - 6000325 - 0.328300367708115 -1.39034678218645 -3.766648081609209E-002 - 1.584769897901974E-002 5.218918094875141E-003 -5.150303862311877E-004 - 6000326 - 0.327360300143949 -1.39032093899113 -3.953640998478093E-002 - 1.538284830205775E-002 5.231697204908905E-003 -1.439685031354920E-003 - 6000327 - 0.326573187554760 -1.39309481142322 -4.043854310486605E-002 - 1.499363178839726E-002 3.860054860233954E-003 -1.885777639553315E-003 - 6000328 - 0.325274808255286 -1.39252110692220 -3.334038631599733E-002 - 1.435160081177285E-002 4.143743964976811E-003 1.624164745722223E-003 - 6000329 - 0.322448036910301 -1.39211775354247 -4.012807498610159E-002 - 1.295380067120641E-002 4.343196747700902E-003 -1.732255360214964E-003 - 6000330 - 0.326810673793556 -1.38893153269665 -3.834409546944328E-002 - 1.511106551665390E-002 5.918739797571082E-003 -8.501016538046097E-004 - 6000331 - 0.326775470290585 -1.38869840010547 -3.741564841183009E-002 - 1.509365786127752E-002 6.034020706053717E-003 -3.909971599293355E-004 - 6000332 - 0.326271250871605 -1.39390875709412 -4.021126897748652E-002 - 1.484432818840653E-002 3.457569751128591E-003 -1.773393662065399E-003 - 6000333 - 0.321666944784208 -1.39307414833960 -3.528651321326542E-002 - 1.256756119499773E-002 3.870272475198349E-003 6.618313559388317E-004 - 6000334 - 0.325766832048710 -1.39507466523029 -3.493921370497112E-002 - 1.459489991300033E-002 2.881043970394314E-003 8.335662585066534E-004 - 6000335 - 0.321552673105825 -1.39151724509758 -3.527455850230447E-002 - 1.251105539788419E-002 4.640140039617423E-003 6.677427985786109E-004 - 6000336 - 0.326440517111881 -1.39496814513121 -3.518250039097470E-002 - 1.492802805145723E-002 2.933716716541827E-003 7.132642876744128E-004 - 6000337 - 0.328149349552533 -1.39379829625323 -3.817632697865712E-002 - 1.577302254667368E-002 3.512191140723280E-003 -7.671424075890959E-004 - 6000338 - 0.324135308775169 -1.38971487157048 -3.416375884586458E-002 - 1.378813375374246E-002 5.531389335037621E-003 1.217018182548996E-003 - 6000339 - 0.324286880142571 -1.38901868791716 -3.482913889326955E-002 - 1.386308374183996E-002 5.875642721572888E-003 8.879967618943014E-004 - 6000340 - 0.328695490885568 -1.39186332148561 -3.764840312220126E-002 - 1.604308203819967E-002 4.469009953454875E-003 -5.060912114703549E-004 - 6000341 - 0.326127505166542 -1.39330528092113 -3.372351078671609E-002 - 1.477324788433473E-002 3.755980544394189E-003 1.434714884496157E-003 - 6000342 - 0.323411133267291 -1.38892035601416 -3.885662321348482E-002 - 1.343003877428764E-002 5.924266515672206E-003 -1.103539680879768E-003 - 6000343 - 0.323443535356482 -1.38878773000395 -3.566309895402712E-002 - 1.344606116849591E-002 5.989848281256044E-003 4.756148081073266E-004 - 6000344 - 0.326161896812670 -1.39219123381745 -4.077210626406107E-002 - 1.479025408749908E-002 4.306861747038268E-003 -2.050720103554825E-003 - 6000345 - 0.327496529611136 -1.39347379619798 -3.470387250659136E-002 - 1.545021192830949E-002 3.672652022584027E-003 9.499392933331112E-004 - 6000346 - 0.326907660359911 -1.39442320185806 -3.939126722457996E-002 - 1.515902406000240E-002 3.203183783680173E-003 -1.367913902440976E-003 - 6000347 - 0.327627930876646 -1.39427354730877 -3.562233577430311E-002 - 1.551518807423184E-002 3.277185931186497E-003 4.957716483304529E-004 - 6000348 - 0.325119576127018 -1.39376660753008 -3.370627018966749E-002 - 1.427484062701359E-002 3.527860785085645E-003 1.443240126207252E-003 - 6000349 - 0.321582888441476 -1.39198483014723 -3.515228871706261E-002 - 1.252599647208718E-002 4.408925566155315E-003 7.282035511970817E-004 - 6000350 - 0.328649590429548 -1.39230144150209 -3.789609952169283E-002 - 1.602038488443426E-002 4.252365539779506E-003 -6.285737258914244E-004 - 6000351 - 0.325091488310059 -1.39588396719579 -3.697135848001232E-002 - 1.426095158198591E-002 2.480855110709554E-003 -1.713018066956808E-004 - 6000352 - 0.323629747250521 -1.38958719080047 -3.983511560394539E-002 - 1.353814042779786E-002 5.594525746332192E-003 -1.587390913967920E-003 - 6000353 - 0.321678639713746 -1.38999980605140 -3.649592552125010E-002 - 1.257334417924268E-002 5.390493093753963E-003 6.379335151967012E-005 - 6000354 - 0.321979789899611 -1.39044531600697 -3.911106486620910E-002 - 1.272225886697657E-002 5.170194455300030E-003 -1.229357631657783E-003 - 6000355 - 0.325389900698438 -1.39279507601704 -4.088553189135913E-002 - 1.440851246594727E-002 4.008269958578387E-003 -2.106807539867057E-003 - 6000356 - 0.325843612080240 -1.38834809342622 -3.662007773836583E-002 - 1.463286659858156E-002 6.207242613925633E-003 2.401761837715437E-006 - 6000357 - 0.321369009956186 -1.39207775902686 -3.555942305231640E-002 - 1.242023645816423E-002 4.362973493929667E-003 5.268811371797942E-004 - 6000358 - 0.325504520827021 -1.39403046328794 -4.038166123959698E-002 - 1.446519056696509E-002 3.397387686834489E-003 -1.857650327660951E-003 - 6000359 - 0.321990553923499 -1.38951059135313 -3.685720838148137E-002 - 1.272758153098724E-002 5.632403135476837E-003 -1.148561291719788E-004 - 6000360 - 0.324610041911226 -1.38980909225812 -3.401440587559276E-002 - 1.402288285910944E-002 5.484798481249997E-003 1.290871203314320E-003 - 6000361 - 0.328509070048447 -1.39256561942476 -3.832567067658864E-002 - 1.595089945937337E-002 4.121733135395790E-003 -8.409908433077421E-004 - 6000362 - 0.324576175323637 -1.39320821636194 -4.080080161764887E-002 - 1.400613629028089E-002 3.803977654144154E-003 -2.064909567216185E-003 - 6000363 - 0.322653205268223 -1.39479071554500 -3.866475003855334E-002 - 1.305525364512712E-002 3.021453243581057E-003 -1.008660994860108E-003 - 6000364 - 0.325278470241920 -1.39300006526267 -4.085198724804461E-002 - 1.435341161456094E-002 3.906905553258331E-003 -2.090220168121022E-003 - 6000365 - 0.327882444238280 -1.39058964691285 -3.907161492253900E-002 - 1.564104148409440E-002 5.098824777354270E-003 -1.209850168875113E-003 - 6000366 - 0.327925534924085 -1.39112239948916 -3.496856334495498E-002 - 1.566234924454749E-002 4.835385844669870E-003 8.190532590849669E-004 - 6000367 - 0.327291588883165 -1.38906313116244 -3.674455074075982E-002 - 1.534887151431583E-002 5.853666138781197E-003 -5.914845181920610E-005 - 6000368 - 0.326403910822977 -1.39105116007004 -3.374528293181369E-002 - 1.490992673743835E-002 4.870612772465192E-003 1.423948853656114E-003 - 6000369 - 0.328034117962957 -1.39191633393057 -3.935146673723238E-002 - 1.571604208647744E-002 4.442796017492191E-003 -1.348233100558018E-003 - 6000370 - 0.323887294249176 -1.39308506929055 -3.356970859695257E-002 - 1.366549393007587E-002 3.864872212877050E-003 1.510767984034018E-003 - 6000371 - 0.324195814984085 -1.39153924083899 -4.089966051523319E-002 - 1.381805325447577E-002 4.629263443433466E-003 -2.113793952996017E-003 - 6000372 - 0.323696388851772 -1.38910872113090 -3.494303980046445E-002 - 1.357109379693476E-002 5.831122516909043E-003 8.316743061108993E-004 - 6000373 - 0.328595123870093 -1.39262055299375 -3.630079724885421E-002 - 1.599345190855066E-002 4.094569229621872E-003 1.602816391441369E-004 - 6000374 - 0.326120765455020 -1.39220930951942 -3.349891101613327E-002 - 1.476991518827874E-002 4.297923557253797E-003 1.545776428773127E-003 - 6000375 - 0.325484317791356 -1.39317547361155 -4.077391072541323E-002 - 1.445520043948558E-002 3.820168500697788E-003 -2.051612385251454E-003 - 6000376 - 0.325938226310969 -1.39515654081679 -3.513803924942247E-002 - 1.467965205409683E-002 2.840557601902009E-003 7.352497199315036E-004 - 6000377 - 0.321076313569735 -1.39158800158611 -3.754184390774611E-002 - 1.227550205973084E-002 4.605151914460645E-003 -4.533991233011673E-004 - 6000378 - 0.322061849593275 -1.38999211007948 -3.550101842230587E-002 - 1.276283627396840E-002 5.394298647622158E-003 5.557614356104747E-004 - 6000379 - 0.328448014596534 -1.39176878090750 -3.857068065062026E-002 - 1.592070836541795E-002 4.515758988744939E-003 -9.621449567273610E-004 - 6000380 - 0.327573537859497 -1.39067587171533 -3.953481342703309E-002 - 1.548829146402245E-002 5.056187780465731E-003 -1.438895555174500E-003 - 6000381 - 0.325341975557433 -1.39322163371681 -4.078006057193613E-002 - 1.438481413288207E-002 3.797342953904623E-003 -2.054653401055379E-003 - 6000382 - 0.326945407039128 -1.39080439717213 -3.413440781683218E-002 - 1.517768928158405E-002 4.992633682997575E-003 1.231531868836375E-003 - 6000383 - 0.326864905896984 -1.38950094451344 -3.503286762493725E-002 - 1.513788255720786E-002 5.637173367032906E-003 7.872556636559166E-004 - 6000384 - 0.321872038730314 -1.39444412969432 -3.725713409567794E-002 - 1.266897737328358E-002 3.192835252123807E-003 -3.126139777195664E-004 - 6000385 - 0.325656830678744 -1.38929012479731 -3.972454209455978E-002 - 1.454050572555626E-002 5.741420861043140E-003 -1.532713811330532E-003 - 6000386 - 0.321381796697484 -1.39297273615133 -3.582742182750125E-002 - 1.242655932853529E-002 3.920419428636525E-003 3.943593729806181E-004 - 6000387 - 0.325031722246969 -1.38871352884892 -3.520767103604314E-002 - 1.423139807333841E-002 6.026539747343834E-003 7.008177446325606E-004 - 6000388 - 0.321818492658012 -1.39053648944325 -3.893028585473215E-002 - 1.264249956582932E-002 5.125110426032039E-003 -1.139964859192371E-003 - 6000389 - 0.328229706719982 -1.39063530392342 -3.842585640223736E-002 - 1.581275807751381E-002 5.076248004065306E-003 -8.905313275931080E-004 - 6000390 - 0.327031282654416 -1.39046595458131 -3.436136073991577E-002 - 1.522015361013151E-002 5.159988959845626E-003 1.119306722521987E-003 - 6000391 - 0.326576412217448 -1.39384168926042 -3.418873736070407E-002 - 1.499522634041712E-002 3.490733886441843E-003 1.204666645302896E-003 - 6000392 - 0.322057300552805 -1.39399573472489 -3.539654307306134E-002 - 1.276058683507447E-002 3.414560490852700E-003 6.074230806596391E-004 - 6000393 - 0.327117831128816 -1.39014808504543 -3.464203976347065E-002 - 1.526295065839501E-002 5.317171139694695E-003 9.805147472618755E-004 - 6000394 - 0.323831937101924 -1.38978966102672 -4.008662335125708E-002 - 1.363812057058993E-002 5.494406961976909E-003 -1.711758088260099E-003 - 6000395 - 0.323291350089045 -1.39111881770597 -4.052780949033966E-002 - 1.337080761514683E-002 4.837156987941165E-003 -1.929918658028077E-003 - 6000396 - 0.322050969058998 -1.39140096523577 -3.967628168503533E-002 - 1.275745599714884E-002 4.697638856237326E-003 -1.508849692523487E-003 - 6000397 - 0.322065436123730 -1.39461505964254 -3.660470991700977E-002 - 1.276460976469764E-002 3.108312708032919E-003 1.000094133619592E-005 - 6000398 - 0.325123972979440 -1.39448560316462 -4.010971214210824E-002 - 1.427701481097967E-002 3.172327182835760E-003 -1.723175182590891E-003 - 6000399 - 0.327666613656848 -1.39046306711613 -3.928421544112214E-002 - 1.553431618507078E-002 5.161416772263869E-003 -1.314978245571975E-003 diff --git a/examples/helio_swifter_comparison/param.swifter.in b/examples/helio_swifter_comparison/param.swifter.in new file mode 100644 index 000000000..5cf0cb8b9 --- /dev/null +++ b/examples/helio_swifter_comparison/param.swifter.in @@ -0,0 +1,26 @@ +! VERSION Swifter parameter file converted from Swiftest +T0 0.0 +TSTOP 1.0 +DT 0.0006844626967830253 +ISTEP_OUT 1 +ISTEP_DUMP 1 +OUT_FORM XV +OUT_TYPE REAL8 +OUT_STAT UNKNOWN +IN_TYPE ASCII +PL_IN pl.swifter.in +TP_IN tp.swifter.in +BIN_OUT bin.swifter.dat +ENC_OUT enc.swifter.dat +CHK_QMIN 0.004650467260962157 +CHK_RMIN 0.004650467260962157 +CHK_RMAX 1000.0 +CHK_EJECT 1000.0 +CHK_QMIN_COORD HELIO +CHK_QMIN_RANGE 0.004650467260962157 1000.0 +EXTRA_FORCE NO +BIG_DISCARD NO +CHK_CLOSE YES +J2 4.7535806948127355e-12 +J4 -2.2473967953572827e-18 +RHILL_PRESENT YES diff --git a/examples/helio_swifter_comparison/param.swiftest.in b/examples/helio_swifter_comparison/param.swiftest.in new file mode 100644 index 000000000..73818e198 --- /dev/null +++ b/examples/helio_swifter_comparison/param.swiftest.in @@ -0,0 +1,35 @@ +! VERSION Swiftest parameter input +T0 0.0 +TSTOP 1.0 +DT 0.0006844626967830253 +ISTEP_OUT 1 +ISTEP_DUMP 1 +OUT_FORM XV +OUT_TYPE REAL8 +OUT_STAT UNKNOWN +IN_TYPE ASCII +PL_IN pl.swiftest.in +TP_IN tp.swiftest.in +CB_IN cb.swiftest.in +BIN_OUT bin.swiftest.dat +ENC_OUT enc.swiftest.dat +CHK_QMIN 0.004650467260962157 +CHK_RMIN 0.004650467260962157 +CHK_RMAX 1000.0 +CHK_EJECT 1000.0 +CHK_QMIN_COORD HELIO +CHK_QMIN_RANGE 0.004650467260962157 1000.0 +MU2KG 1.988409870698051e+30 +TU2S 31557600.0 +DU2M 149597870700.0 +EXTRA_FORCE NO +BIG_DISCARD NO +CHK_CLOSE YES +FRAGMENTATION NO +ROTATION NO +TIDES NO +ENERGY NO +GR NO +YARKOVSKY NO +YORP NO +MTINY 0.0 diff --git a/examples/helio_swifter_comparison/pl.swifter.in b/examples/helio_swifter_comparison/pl.swifter.in new file mode 100644 index 000000000..aba56d467 --- /dev/null +++ b/examples/helio_swifter_comparison/pl.swifter.in @@ -0,0 +1,36 @@ +9 +0 39.476926408897625196 +0.0 0.0 0.0 +0.0 0.0 0.0 +1 6.5537098095653139645e-06 0.0014751254963649625977 +1.6306381826061645943e-05 +0.359124056979876094 -0.1001978128323056938 -0.041130148620746292965 +0.7664364270424182397 10.3592906410849091145 0.7762248217818495593 +2 9.663313399581537916e-05 0.0067591139064765566703 +4.0453784346544178454e-05 +-0.709853246614207567 0.109615461427968005625 0.042466530791895232277 +-1.166834223638398553 -7.334297883841826485 -0.033323414543104576783 +3 0.000120026935827952453094 0.010044751446422198828 +4.25875607065040958e-05 +0.26014404284638581455 -0.9828537227999029069 4.5807148740206238052e-05 +5.9724418390973225248 1.5843954077771575533 -9.4205748659356694786e-05 +4 1.2739802010675941456e-05 0.0072467561525263839036 +2.265740805092889601e-05 +-1.4908630412685239808 0.7412277078494349247 0.052104480532706012874 +-2.084278892390818102 -4.1405652065758745757 -0.035644761583621103612 +5 0.037692251088985676735 0.35527141892920671874 +0.00046732617030490929307 +4.0233930071159198505 -3.029555621945668964 -0.077433472926114965684 +1.626590141045528945 2.3340622087669935288 -0.046085347207395002237 +6 0.011285899820091272997 0.43765136932522125042 +0.00038925687730393611812 +6.274810893232299236 -7.7275164380757708216 -0.115372736553069593635 +1.4703000143673246375 1.2821134193800077011 -0.08078666716402813097 +7 0.0017236589478267730203 0.469520070575212966 +0.00016953449859497231466 +14.871766666738729157 12.9908875920566391216 -0.14444232402201501175 +-0.9541590491729433116 1.0172543087941671172 0.016087073469786578863 +8 0.0020336100526728302319 0.78126715446178621345 +0.000164587904124493665 +29.554624389819270647 -4.648140925388063671 -0.5854586034520335991 +0.1723572655485145611 1.1421549698170996955 -0.027459964210413734165 diff --git a/examples/helio_swifter_comparison/pl.swiftest.in b/examples/helio_swifter_comparison/pl.swiftest.in new file mode 100644 index 000000000..27814f389 --- /dev/null +++ b/examples/helio_swifter_comparison/pl.swiftest.in @@ -0,0 +1,33 @@ +8 +1 6.5537098095653139645e-06 +1.6306381826061645943e-05 +0.359124056979876094 -0.1001978128323056938 -0.041130148620746292965 +0.7664364270424182397 10.3592906410849091145 0.7762248217818495593 +2 9.663313399581537916e-05 +4.0453784346544178454e-05 +-0.709853246614207567 0.109615461427968005625 0.042466530791895232277 +-1.166834223638398553 -7.334297883841826485 -0.033323414543104576783 +3 0.000120026935827952453094 +4.25875607065040958e-05 +0.26014404284638581455 -0.9828537227999029069 4.5807148740206238052e-05 +5.9724418390973225248 1.5843954077771575533 -9.4205748659356694786e-05 +4 1.2739802010675941456e-05 +2.265740805092889601e-05 +-1.4908630412685239808 0.7412277078494349247 0.052104480532706012874 +-2.084278892390818102 -4.1405652065758745757 -0.035644761583621103612 +5 0.037692251088985676735 +0.00046732617030490929307 +4.0233930071159198505 -3.029555621945668964 -0.077433472926114965684 +1.626590141045528945 2.3340622087669935288 -0.046085347207395002237 +6 0.011285899820091272997 +0.00038925687730393611812 +6.274810893232299236 -7.7275164380757708216 -0.115372736553069593635 +1.4703000143673246375 1.2821134193800077011 -0.08078666716402813097 +7 0.0017236589478267730203 +0.00016953449859497231466 +14.871766666738729157 12.9908875920566391216 -0.14444232402201501175 +-0.9541590491729433116 1.0172543087941671172 0.016087073469786578863 +8 0.0020336100526728302319 +0.000164587904124493665 +29.554624389819270647 -4.648140925388063671 -0.5854586034520335991 +0.1723572655485145611 1.1421549698170996955 -0.027459964210413734165 diff --git a/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb b/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb new file mode 100644 index 000000000..9a487a59c --- /dev/null +++ b/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb @@ -0,0 +1,230 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import swiftest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading Swifter file param.swifter.in\n", + "Reading in time 1.000e+00\n", + "Creating Dataset\n", + "Successfully converted 1462 output frames.\n", + "Swifter simulation data stored as xarray DataSet .ds\n" + ] + } + ], + "source": [ + "swiftersim = swiftest.Simulation(param_file=\"param.swifter.in\", codename=\"Swifter\")\n", + "swiftersim.bin2xr()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading Swiftest file param.swiftest.in\n", + "Reading in time 1.001e+00\n", + "Creating Dataset\n", + "Successfully converted 1463 output frames.\n", + "Swiftest simulation data stored as xarray DataSet .ds\n" + ] + } + ], + "source": [ + "swiftestsim = swiftest.Simulation(param_file=\"param.swiftest.in\")\n", + "swiftestsim.bin2xr()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff = swiftestsim.ds - swiftersim.ds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff = swiftdiff.rename({'time' : 'time (y)'})" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff['dr'] = np.sqrt(swiftdiff['px']**2 + swiftdiff['py']**2 + swiftdiff['pz']**2)\n", + "swiftdiff['dv'] = np.sqrt(swiftdiff['vx']**2 + swiftdiff['vy']**2 + swiftdiff['vz']**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "plidx = swiftdiff.id.values[swiftdiff.id.values < 10]\n", + "tpidx = swiftdiff.id.values[swiftdiff.id.values > 10]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "swiftdiff['dr'].sel(id=plidx).plot.line(x=\"time (y)\", ax=ax)\n", + "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", + "ax.set_title(\"Helio integrator \\n Planets only\")\n", + "#legend = ax.legend()\n", + "fig.savefig(\"helio_swifter_comparison-pl-rmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "swiftdiff['dr'].sel(id=tpidx).plot.line(x=\"time (y)\", ax=ax)\n", + "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", + "ax.set_title(\"Helio integrator \\n Test Particles only\")\n", + "fig.savefig(\"helio_swifter_comparison-tp-rmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "swiftdiff['dv'].sel(id=plidx).plot.line(x=\"time (y)\", ax=ax)\n", + "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", + "ax.set_title(\"Helio integrator \\n Planets only\")\n", + "fig.savefig(\"helio_swifter_comparison-pl-vmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "swiftdiff['dv'].sel(id=tpidx).plot.line(x=\"time (y)\", ax=ax)\n", + "ax.set_ylabel(\"$|\\mathbf{r}_{swiftest} - \\mathbf{r}_{swifter}|$\")\n", + "ax.set_title(\"Helio integrator \\n Test Particles only\")\n", + "fig.savefig(\"helio_swifter_comparison-tp-vmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "swiftestOOF", + "language": "python", + "name": "swiftestoof" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/helio_swifter_comparison/tp.swifter.in b/examples/helio_swifter_comparison/tp.swifter.in new file mode 100644 index 000000000..62acd79fc --- /dev/null +++ b/examples/helio_swifter_comparison/tp.swifter.in @@ -0,0 +1,13 @@ +4 +101 +2.3133253483335658451 1.6360857008750779862 -0.37450983998533471375 +-2.2458876465769251093 2.8378699270656317882 0.50346273267874514076 +102 +3.009555158239280992 -1.1130165423439479788 0.51172110509120705135 +0.70453633545041942506 2.5148434686651768256 -1.80152331908826862 +103 +-0.5218824163555056961 -3.1396467647675119217 0.7342355813480357929 +3.0582031698647593751 -0.12050283730110719834 -0.096945705299882042706 +104 +-2.075368356279947868 -0.76569201199778380573 0.27541025252901979448 +1.7615515330387480359 -3.9484151677488075983 -0.096278788580453326945 diff --git a/examples/helio_swifter_comparison/tp.swiftest.in b/examples/helio_swifter_comparison/tp.swiftest.in new file mode 100644 index 000000000..62acd79fc --- /dev/null +++ b/examples/helio_swifter_comparison/tp.swiftest.in @@ -0,0 +1,13 @@ +4 +101 +2.3133253483335658451 1.6360857008750779862 -0.37450983998533471375 +-2.2458876465769251093 2.8378699270656317882 0.50346273267874514076 +102 +3.009555158239280992 -1.1130165423439479788 0.51172110509120705135 +0.70453633545041942506 2.5148434686651768256 -1.80152331908826862 +103 +-0.5218824163555056961 -3.1396467647675119217 0.7342355813480357929 +3.0582031698647593751 -0.12050283730110719834 -0.096945705299882042706 +104 +-2.075368356279947868 -0.76569201199778380573 0.27541025252901979448 +1.7615515330387480359 -3.9484151677488075983 -0.096278788580453326945 diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/init_cond.py b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/init_cond.py old mode 100644 new mode 100755 index 5b5f5e76e..4c4ecb7da --- a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/init_cond.py +++ b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/init_cond.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 """ For testing RMVS, the code generates clones of test particles based on one that is fated to impact Mercury. To use the script, modify the variables just after the "if __name__ == '__main__':" line @@ -5,7 +6,7 @@ import numpy as np from astroquery.jplhorizons import Horizons import astropy.constants as const -import swiftestio as swio +import swiftest.io as swio from scipy.io import FortranFile import sys @@ -140,7 +141,7 @@ print(f'BIN_OUT {swifter_bin}') print(f'OUT_TYPE REAL8') print(f'OUT_FORM XV') -print(f'OUT_STAT NEW') +print(f'OUT_STAT UNKNOWN') print(f'J2 {J2}') print(f'J4 {J4}') print(f'CHK_CLOSE yes') diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swifter.in b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swifter.in index 40cedba41..9174b181a 100644 --- a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swifter.in +++ b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swifter.in @@ -1,7 +1,7 @@ ! Swifter input file generated using init_cond.py T0 0 -TSTOP 0.2 -DT 0.00034223134839151266 +TSTOP 1.0 +DT 0.0006844626967830253 PL_IN pl.swifter.in TP_IN tp.swifter.in IN_TYPE ASCII diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swiftest.in b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swiftest.in index 914af3324..d43b46d64 100644 --- a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swiftest.in +++ b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/param.swiftest.in @@ -1,7 +1,7 @@ ! Swiftest input file generated using init_cond.py T0 0 -TSTOP 0.2 -DT 0.00034223134839151266 +TSTOP 1.0 +DT 0.0006844626967830253 CB_IN cb.swiftest.in PL_IN pl.swiftest.in TP_IN tp.swiftest.in diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swifter.in b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swifter.in index 6f91ef4c9..a964c7824 100644 --- a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swifter.in +++ b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swifter.in @@ -1,8 +1,8 @@ 2 ! Planet input file generated using init_cond.py -1 39.47692640889762629 +1 39.476926408897625193 0.0 0.0 0.0 0.0 0.0 0.0 -2 0.00012002693582795246295385 0.010044724833237895015 +2 0.00012002693582795244940133 0.0100447248332378922085 4.25875607065041e-05 1.0 0.0 0.0 0.0 6.283185307179586 0.0 diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in index d3786c3df..6f4bc1337 100644 Binary files a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in and b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in differ diff --git a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb index 8232207e5..c6d739ace 100644 --- a/examples/rmvs_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb +++ b/examples/rmvs_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb @@ -23,7 +23,7 @@ "Reading Swifter file param.swifter.in\n", "Reading in time 1.355e-01\n", "Creating Dataset\n", - "Successfully converted 397 output frames.\n", + "Successfully converted 199 output frames.\n", "Swifter simulation data stored as xarray DataSet .ds\n" ] } @@ -43,9 +43,9 @@ "output_type": "stream", "text": [ "Reading Swiftest file param.swiftest.in\n", - "Reading in time 2.002e-01\n", + "Reading in time 1.001e+00\n", "Creating Dataset\n", - "Successfully converted 586 output frames.\n", + "Successfully converted 1463 output frames.\n", "Swiftest simulation data stored as xarray DataSet .ds\n" ] } @@ -81,8 +81,8 @@ { "data": { "text/plain": [ - "[,\n", - " ]" + "[,\n", + " ]" ] }, "execution_count": 6, @@ -91,7 +91,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] 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 0a95cb75e..f57828160 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 @@ -482,7 +482,7 @@ " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n", "Coordinates:\n", " id int64 4\n", - " * time (d) (time (d)) float64 0.0 1.0 2.0 3.0 4.0 ... 363.0 364.0 365.0 366.0
    • id
      ()
      int64
      4
      array(4)
    • time (d)
      (time (d))
      float64
      0.0 1.0 2.0 ... 364.0 365.0 366.0
      array([  0.,   1.,   2., ..., 364., 365., 366.])
  • " ], "text/plain": [ "\n", @@ -550,7 +550,7 @@ "outputs": [ { "data": { - "image/png": "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28LyI4HB6WMi8NsaxGRmGWtsQqr3pqQ8qVliiIhHgXdaWGUccF0kngR6S9q5NtGZWVbqvcaQR3nqfN4FWFDwvCGd9yGSJkqaIWnGkiVLahKcmbUPdz7nT54SQ6nztEp+UiLiyogYExFj+vTp085hmVl72tiU5BpDbuQpMTQA/Que9wMWZhSLmVndylNimAqcosQBwN8jYlHWQZlZ+3JTUv7ULDFIugl4AthTUoOkCZLOkHRGuso04FVgHnAV8K1axWZm2XFTUmW+9rWvscMOOzBixIeuAihbza5jiIjxm1gewLdrFI6Z5UTjGElODOU59dRTOfPMMznllFOqVmaempLMrI7V+yB65TrooIPYdtttq1qmh8Qws0xtrCl08ArDBXfM5sWFy6ta5rC+W/Ojzw+vapmt4RqDmWXKfQz54xqDmWWqs1z5nMUv+/biGoOZZcqnq+aPE4OZZcpNSZUZP348H//4x5k7dy79+vXj97//fcVluinJzKwDu+mmm6pepmsMZpYpD7udP04MZpapztL53Jk4MZhZptz5nD9ODGaWKXc+548Tg5llyk1J+ePEYGaZ2tiE5LyQG04MZpapxprCBjyIXlstWLCAQw89lKFDhzJ8+HAmT55clXJ9HYOZZcqnq5ava9eu/OpXv2LUqFGsWLGC0aNHc/jhhzNs2LCKynWNwcwy5T6G8u28886MGjUKgF69ejF06FDeeOONist1jcHMcqHDJ4a7z4U3X6humTvtBUde1KpVX3vtNZ577jn233//infrGoOZZcqdz5VbuXIlxx13HJdccglbb711xeW5xmBmmeo0TUmt/GVfbWvXruW4447jpJNO4thjj61Kma4xmFmmfOVz+SKCCRMmMHToUH7wgx9UrVwnBjPLlK98Lt/06dO5/vrreeihhxg5ciQjR45k2rRpFZfrpiQzy1SnaUrKwIEHHtguNS3XGMwsF9yUlB9ODGaWqQ3hK57zxonBzDLlPob8cWIws0z5rKT8cWIws0xtHETPTUq54cRgZtlyRSF3apoYJI2VNFfSPEnnlli+jaQ7JD0vabak02oZn5nVnk9XLd/q1avZb7/92GeffRg+fDg/+tGPqlJuza5jkNQFuAw4HGgAnpY0NSJeLFjt28CLEfF5SX2AuZJujIg1tYrTzGrLfQzl23zzzXnooYfo2bMna9eu5cADD+TII4/kgAMOqKjcWtYY9gPmRcSr6Rf9FGBc0ToB9JIkoCfwDrCuhjGaWY35rKTySaJnz55AMmbS2rVrSb4+K1PLK593ARYUPG8AiseHvRSYCiwEegFfjnCPlFln1lmakn7+1M956Z2XqlrmkG2HcM5+57S4zvr16xk9ejTz5s3j29/+docbdrtUGiv+JHwWmAn0BUYCl0r60BiykiZKmiFpxpIlS6odp5nVkO/gVpkuXbowc+ZMGhoaeOqpp5g1a1bFZdayxtAA9C943o+kZlDoNOCiSD4h8yTNB4YATxWuFBFXAlcCjBkzxp8mM8vcpn7Zt7fevXtzyCGHcM899zBixIiKyqpljeFpYLCkQZK6AyeQNBsVeh34NICkHYE9gVdrGKOZ1Zg7n8u3ZMkSli1bBsD777/PAw88wJAhQyout2Y1hohYJ+lM4F6gC3B1RMyWdEa6/ArgJ8C1kl4gaXo6JyLerlWMZlZ77nwu36JFi/jqV7/K+vXr2bBhA1/60pc4+uijKy63psNuR8Q0YFrRvCsKphcCR9QyJjPL1gaS80ucGNpu77335rnnnqt6ub7y2cyy1XjLZzcl5YYTg5llqrOcrtqZODGYWaZ8umr+ODGYWaZcY8gfJwYzy5RPV80fJwYzy5RPV80fJwYzsw5u/fr17LvvvlW5hgFacR2DpAGtLGtZRCyvMB4zqzNuSqrc5MmTGTp0KMuXV+cruDUXuP2B5EzjlsZyDeBa4LoqxGRmdcRNSZVpaGjgrrvu4vzzz+fiiy+uSpmbTAwRcWjxPEk7RcSbVYnAzOpaZzkr6c2f/Yx/zKnusNubDx3CTued1+I63//+9/nFL37BihUrqrbfcvsYTqlaBGZW13wdQ/nuvPNOdthhB0aPHl3VcssdK2mcpFXA/RExt5oBmVl96Sw1hk39sm8P06dPZ+rUqUybNo3Vq1ezfPlyTj75ZG644YaKyi23xnAsMA84RtLvKorAzOqaawrlu/DCC2loaOC1115jypQpHHbYYRUnBSizxhARbwH3pA8zs7L5rKT8KavGIOkySdem0x4m28zK1lmakrJ2yCGHcOedd1alrHKbktbwwZ3VDqtKJGZWlxprChtiQ8aRWKNyE8MqYBtJ3YDWXgBnZtYs1xjyo9yzkt4B3gcuA6ZXLxwzqzcbE4LzQm60qcYgqbeka4Dj0lnXAWOqHpWZ1Q1f+Zw/baoxRMQySRcBA4G3gb2BW9ohLjOrE+58zp9ympImAPMj4l7gmSrHY2Z1xlc+5085ieFd4AxJewLPAzMj4rnqhmVm9cI1hsoMHDiQXr160aVLF7p27cqMGTMqLrPNiSEiLpT0IPAyMBI4CHBiMLOKuMZQvocffpjtt9++auW1OTFI+jHQBZhJUlt4pGrRmFnd8fUL+VNOjeGHknYE9gWOk7R7RHy9+qGZWT3oLE1Jj/3pZd5esLKqZW7fvyef+tIeLa4jiSOOOAJJfOMb32DixIkV77fc6xi+AfxnRHisJDOriDufKzN9+nT69u3L4sWLOfzwwxkyZAgHHXRQRWWWmxiuBr4paSvgxoiYWVEUZla3OkuNYVO/7NtL3759Adhhhx045phjeOqppypODOUOifFdkqTSFfhNRRGYWX3beOFzx04MWXjvvfc23rntvffe47777mPEiBEVl1tujeEVYDBwe0T8c8VRmFnd8rDb5Xvrrbc45phjAFi3bh0nnngiY8eOrbjcchPDbGABMEHSLyPiY63ZSNJYYDLJWU2/i4iLSqxzCHAJ0A14OyIOLjNGM+sAnBjKt9tuu/H8889XvdxyE8MewBLgSpIL3jZJUheSQfcOBxqApyVNjYgXC9bpDVwOjI2I1yXtUGZ8ZtZBeKyk/Cm3j2EIyUVtZwGtPTdqP2BeRLwaEWuAKcC4onVOBG6JiNcBImJxmfGZWQfRWTqfO5NyE0Nv4BzgbGB1K7fZhaT5qVFDOq/QHsBHJD0i6RlJp5QqSNJESTMkzViyZEnbIjezXHJTUn6U25T0Y2BIRMyV1NrLFlViXvEnoSswGvg0sAXwhKQnI+LlJhtFXEnSjMWYMWP8aTLrwJwQ8qdVNQZJXSQtknQ6QEQ0RMQD6fS5rdxXA9C/4Hk/YGGJde6JiPci4m3gUWCfVpZvZh2Qm5Lyp1WJISLWA7OA3SvY19PAYEmDJHUHTgCmFq1zO/ApSV0lbQnsD8ypYJ9mlnONYyW55pAfbelj2BI4O23bn5o+bm/txhGxDjgTuJfky/5PETFb0hmSzkjXmQPcA/wFeIrklNZZbYjRzDoY1xgqs2zZMo4//niGDBnC0KFDeeKJJyousy19DB9P/45KH9DGu7RGxDRgWtG8K4qe/xL4ZVvKNbMOrPHKZ9cYyvK9732PsWPHcvPNN7NmzRpWrVpVcZltSQyDKt6bmVkR1xjKt3z5ch599FGuvfZaALp370737t0rLrfViSEi/lbx3szMinSWhPDwtVey+G+vVrXMHXbdjUNPbf5SsVdffZU+ffpw2mmn8fzzzzN69GgmT57MVlttVdF+y72OwcysKjzsdvnWrVvHs88+yze/+U2ee+45ttpqKy666EMjDbVZudcxmJlVRWONYQMd+05uLf2yby/9+vWjX79+7L///gAcf/zxVUkMba4xSPp8xXs1M0t5EL3y7bTTTvTv35+5c+cC8OCDDzJs2LCKyy2nxvBT4I6K92xmBm08t9GK/cd//AcnnXQSa9asYbfdduOaa66puMxyEkOpoS3MzMris5IqM3LkSGbMmFHVMsvpfPa7Z2ZV487n/PFZSWaWKdcY8seJwcwy5c7n/CknMbxV9SjMrG75Dm750+bEEBGHt0cgZlafnBDyx01JZpYpdz7njxODmWXKnc/lmzt3LiNHjtz42HrrrbnkkksqLresITEk/SAiLk6n94yIuRVHYmZ1yX0M5dtzzz2ZOXMmAOvXr2eXXXbhmGOOqbjcNiUGSb2BXwNDJK0muaHOBOC0iiMxs7rmpqTKPPjgg+y+++7suuuuFZfVpsQQEcuA0yR9DngTOAK4peIozKxudZbTVZfd8QprFr5X1TK7992K3p9v3R2Vp0yZwvjx46uy33L7GA4mOW31AMBnKZlZ2dyUVLk1a9YwdepUvvjFL1alvHKH3e4NnAOcTdKUZGZWls7S+dzaX/bt4e6772bUqFHsuOOOVSmv3MTwY2BIRMyV1LEHUTezTHWWpqQs3XTTTVVrRoIym5IioiEiHkinz61aNGZWf6LxjxNDOVatWsX999/PscceW7Uyy0oMki6TdG06fUTVojGzuuOEUJktt9ySpUuXss0221StzHI7n9cAjXe9PqxKsZhZHdoQSWu0m5Lyo9zEsArYRlI3YEAV4zGzOtNZOp87k3I7n98B3gcuA6ZXLxwzqzceKyl/2lRjkNRb0jXAcems64AxVY/KzOqOawz50eYrnyVdBAwE3gb2xlc+m1kF3JSUP+U0JU0A5kfEvcAzVY7HzOrMxiYk54XcKKfz+V3gDEmXSDpN0r6t3VDSWElzJc2T1Oz1D5I+Jmm9pOPLiM/MOhDXGCrz61//muHDhzNixAjGjx/P6tWrKy6znDu4XQh8HZgEzAcOas12krqQdFYfCQwDxksa1sx6PwfubWtsZtbxNCaExtNWrfXeeOMNfvOb3zBjxgxmzZrF+vXrmTJlSsXltrkpSdKPgS7ATGBmRDzSyk33A+ZFxKtpOVOAccCLRet9B/gv4GNtjc3MOh4PoleZdevW8f7779OtWzdWrVpF3759Ky6zzYkhIn4o6YcktY3jJO0eEV9vxaa7AAsKnjcA+xeuIGkX4BiSi+aaTQySJgITAQYM8GUUZp1BR08Md999N2+++WZVy9xpp5048sgjm12+yy67cNZZZzFgwAC22GILjjjiCI44ovLBKMq9wO1qYCiwHXB5K7dRiXnFn4RLgHMiYn1LBUXElRExJiLG9OnTp5W7N7M8cudz+d59911uv/125s+fz8KFC3nvvfe44YYbKi633AvcvksyLEZXYDKt62doAPoXPO8HLCxaZwwwRRLA9sBRktZFxG1lxmlmOddZOp9b+mXfXh544AEGDRpE4w/kY489lscff5yTTz65onLLrTG8AvQAbo+IVnU+A08DgyUNktQdOAGYWrhCRAyKiIERMRC4GfiWk4JZ5+axkso3YMAAnnzySVatWkVE8OCDDzJ06NCKyy03McwGHgImSHq6NRtExDrgTJKzjeYAf4qI2ZLOkHRGmXGYWSfR0WsMWdh///05/vjjGTVqFHvttRcbNmxg4sSJFZdbblPS7iTXM1yZ/m2ViJgGTCuad0Uz655aZmxm1oF0lqakrFxwwQVccMEFVS2z3MSwICIekrQzsLiaAZlZfXHnc/6U25Q0VlI/4Arg11WMx8zqjGsM+VNuYugNnAOcDfyjatGYWd3xBW75U25T0o+BIRExV1KL1xyYmbVkY43BZyXlRqtqDJK6SFok6XSAiGiIiAfS6WYHwzMzay3XGPKjVYkhvRJ5FsnZSGZmVeM7uOVPW/oYtgTOljRD0tT0cXt7BWZm9cGdz5WZPHkyI0aMYPjw4VxyySVVKbMtfQwfT/+OSh/gE8zMrELuYyjfrFmzuOqqq3jqqafo3r07Y8eO5XOf+xyDBw+uqNy21BgGlXjsVtHezazu+ayk8s2ZM4cDDjiALbfckq5du3LwwQdz6623VlzuJmsMkhrHtS75rhUsXxYRyyuOyMzqSmdJDC+//BNWrJxT1TJ79RzKHnv8e7PLR4wYwfnnn8/SpUvZYostmDZtGmPGjKl4v61pSvoDSVIoNWx2owCuBa6rOCIzqysbE0LHzguZGDp0KOeccw6HH344PXv2ZJ999qFr13KvQvjAJkuIiEMr3ouZWTM6S+dzS7/s29OECROYMGECAOeddx79+vWruMzKU4uZWQV8umplFi9ezA477MDrr7/OLbfcwhNPPFFxmU4MZpapzlJjyMpxxx3H0qVL6datG5dddhkf+chHKi7TicHMcsGJoTyPPfZY1cssdxA9M7OqcFNS/jgxmFmmXFPIHycGM8tUR+9jyHtNp5z4nBjMLFMduSmpR48eLF26NLexRwRLly6lR48ebdrOnc9mlqnGmsIGNmQcSdv169ePhoYGlixZknUozerRo0ebr21wYjCzbDVe+JzTX90t6datG4MGDco6jKpzU5KZZaqj9i10Zk4MZpapDZE0IXXEGkNn5cRgZpnq6GcldUZODGaWC04M+eHEYGaZ6sinq3ZWTgxmlinXFPLHicHMMtVZ7uDWmdQ0MUgaK2mupHmSzi2x/CRJf0kfj0vap5bxmVntbex8dlNSbtQsMUjqAlwGHAkMA8ZLGla02nzg4IjYG/gJcGWt4jOzbPispPypZY1hP2BeRLwaEWuAKcC4whUi4vGIeDd9+iRQ+T3qzCzfOvCVz51VLRPDLsCCgucN6bzmTADubteIzCxzrjHkTy3HSlKJeSU/CZIOJUkMBzazfCIwEWDAgAHVis/MMuA+hvypZY2hAehf8LwfsLB4JUl7A78DxkXE0lIFRcSVETEmIsb06dOnXYI1s9rwWUn5U8vE8DQwWNIgSd2BE4CphStIGgDcAnwlIl6uYWxmlhE3JeVPzZqSImKdpDOBe4EuwNURMVvSGenyK4AfAtsBl0sCWBcRY2oVo5nVVmHzkZuS8qOm92OIiGnAtKJ5VxRMnw6cXsuYzCw7hbUE1xjyw1c+m1lmmtQSnBdyw4nBzDLjGkM+OTGYWWacGPLJicHMslPYkuTO59xwYjCzzLjGkE9ODGaWGSeDfHJiMLPM+DqGfHJiMLPMuCkpn5wYzCwzhbWEDbEhw0iskBODmWXGNYZ8cmIws8z4yud8cmIws8y4xpBPTgxmlhknhnxyYjCzzDQ2JQn5dNUccWIws8xtps1cY8gRJwYzy8zGGoNK3RLesuLEYGaZaawlbMZmbkrKEScGM8vMxsTgpqRccWIws8wUNiW5xpAfTgxmlpnGWkIXdXGNIUecGMwsc5KcGHLEicHMMtM4cN5mcudznjgxmFlmGpPBZrjzOU+cGMwsM43JwJ3P+eLEYGaZ8+mq+eLEYGaZKWxKsvzwu2FmmSlsSgLf9zkvnBjMLDOFVz4XPrdsOTGYWWY2NiU1JgbXGHKhpolB0lhJcyXNk3RuieWS9Jt0+V8kjaplfGZWWxubklCT55atmiUGSV2Ay4AjgWHAeEnDilY7EhicPiYCv61VfGaWgTQPdNmsS/rUiSEPutZwX/sB8yLiVQBJU4BxwIsF64wDroukPvmkpN6Sdo6IRdUO5parx9F1m6XVLtbM2uinPbeBDcug5zbcfeuhWYfToaz7+3Yc+7Xbq15uLZuSdgEWFDxvSOe1dR0kTZQ0Q9KMJUuWVD1QM7N6VssaQ6lbNBXXG1uzDhFxJXAlwJgxY8qqe7ZHljUz6wxqWWNoAPoXPO8HLCxjHTMza0e1TAxPA4MlDZLUHTgBmFq0zlTglPTspAOAv7dH/4KZmTWvZk1JEbFO0pnAvUAX4OqImC3pjHT5FcA04ChgHrAKOK1W8ZmZWaKWfQxExDSSL//CeVcUTAfw7VrGZGZmTfnKZzMza8KJwczMmnBiMDOzJpwYzMysCXX00QwlLQH+Vubm2wNvVzGc9uI4q6cjxAgdI86OECN0jDiziHHXiOhTakGHTwyVkDQjIsZkHcemOM7q6QgxQseIsyPECB0jzrzF6KYkMzNrwonBzMyaqPfEcGXWAbSS46yejhAjdIw4O0KM0DHizFWMdd3HYGZmH1bvNQYzMyvixGBmZk3UbWKQNFbSXEnzJJ2bdTyNJL0m6QVJMyXNSOdtK+l+SX9N/34kg7iulrRY0qyCec3GJelf02M7V9JnM45zkqQ30mM6U9JRWcYpqb+khyXNkTRb0vfS+bk6ni3EmZvjKamHpKckPZ/GeEE6P2/Hsrk4c3Msm4iIunuQDPv9CrAb0B14HhiWdVxpbK8B2xfN+wVwbjp9LvDzDOI6CBgFzNpUXMCw9JhuDgxKj3WXDOOcBJxVYt1M4gR2Bkal072Al9NYcnU8W4gzN8eT5K6PPdPpbsD/Agfk8Fg2F2dujmXho15rDPsB8yLi1YhYA0wBxmUcU0vGAX9Ip/8AfKHWAUTEo8A7RbObi2scMCUi/hER80nur7FfhnE2J5M4I2JRRDybTq8A5pDc2zxXx7OFOJtT8zgjsTJ92i19BPk7ls3F2ZzM/oegfpuSdgEWFDxvoOUPfC0FcJ+kZyRNTOftGOmd7NK/O2QWXVPNxZXH43umpL+kTU2NzQqZxylpILAvyS/I3B7PojghR8dTUhdJM4HFwP0Rkctj2UyckKNj2aheE4NKzMvLebufjIhRwJHAtyUdlHVAZcjb8f0tsDswElgE/Cqdn2mcknoC/wV8PyKWt7RqiXlZxpmr4xkR6yNiJMk94veTNKKF1TM7ls3Ematj2aheE0MD0L/geT9gYUaxNBERC9O/i4FbSaqPb0naGSD9uzi7CJtoLq5cHd+IeCv9p9wAXMUHVfLM4pTUjeTL9saIuCWdnbvjWSrOPB7PNK5lwCPAWHJ4LBsVxpnXY1mvieFpYLCkQZK6AycAUzOOCUlbSerVOA0cAcwiie2r6WpfBW7PJsIPaS6uqcAJkjaXNAgYDDyVQXzAxi+GRseQHFPIKE5JAn4PzImIiwsW5ep4Nhdnno6npD6SeqfTWwCfAV4if8eyZJx5OpZN1KqXO28P4CiSsyxeAc7POp40pt1IzkR4HpjdGBewHfAg8Nf077YZxHYTSVV3LcmvmQktxQWcnx7bucCRGcd5PfAC8BeSf7ids4wTOJCkWeAvwMz0cVTejmcLcebmeAJ7A8+lscwCfpjOz9uxbC7O3BzLwoeHxDAzsybqtSnJzMya4cRgZmZNODGYmVkTTgxmZtaEE4OZmTXhxGBWQFJvSd8qeN5X0s3ttK8vSPphM8tWpn/7SLqnPfZv1hwnBrOmegMbE0NELIyI49tpX2cDl7e0QkQsARZJ+mQ7xWD2IU4MZk1dBOyejo3/S0kDld7bQdKpkm6TdIek+ZLOlPQDSc9JelLStul6u0u6Jx0I8TFJQ4p3ImkP4B8R8Xb6fJCkJyQ9LeknRavfBpzUrq/arIATg1lT5wKvRMTIiPg/JZaPAE4kGdPmp8CqiNgXeAI4JV3nSuA7ETEaOIvStYJPAs8WPJ8M/DYiPga8WbTuDOBTZb4eszbrmnUAZh3Mw5Hcm2CFpL8Dd6TzXwD2Tkci/QTw52SoISC52UqxnYElBc8/CRyXTl8P/Lxg2WKgb3XCN9s0JwaztvlHwfSGgucbSP6fNgOWRTK8ckveB7Ypmtfc+DQ90vXNasJNSWZNrSC5jWVZIrlfwXxJX4RkhFJJ+5RYdQ7w0YLn00lG+YUP9yfswQejbpq1OycGswIRsRSYLmmWpF+WWcxJwARJjaPklrpt7KPAvvqgvel7JDdmepoP1yQOBe4qMxazNvPoqmYZkTQZuCMiHtjEeo8C4yLi3dpEZvXONQaz7PwM2LKlFST1AS52UrBaco3BzMyacI3BzMyacGIwM7MmnBjMzKwJJwYzM2vCicHMzJr4/8l25KTDby2HAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -609,7 +609,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -644,7 +644,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] diff --git a/examples/whm_swifter_comparison/Untitled.ipynb b/examples/whm_swifter_comparison/Untitled.ipynb deleted file mode 100644 index 7d5a299df..000000000 --- a/examples/whm_swifter_comparison/Untitled.ipynb +++ /dev/null @@ -1,169 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import astropy.constants as const" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6.6743e-11\n" - ] - } - ], - "source": [ - "AU2M = np.longdouble(const.au.value)\n", - "GMSunSI = np.longdouble(const.GM_sun.value)\n", - "print(const.G.value)\n", - "Rsun = np.longdouble(const.R_sun.value)\n", - "GC = np.longdouble(const.G.value)\n", - "JD = 86400\n", - "year = np.longdouble(365.25 * JD)\n", - "c = np.longdouble(299792458.0)\n", - "MSun_over_Mpl = np.array([6023600.0,\n", - " 408523.71,\n", - " 328900.56,\n", - " 3098708.,\n", - " 1047.3486,\n", - " 3497.898,\n", - " 22902.98,\n", - " 19412.24,\n", - " 1.35e8], dtype=np.longdouble)\n", - "\n", - "MU2KG = np.longdouble(GMSunSI / GC) #Conversion from mass unit to kg\n", - "DU2M = np.longdouble(AU2M) #Conversion from radius unit to centimeters\n", - "TU2S = np.longdouble(year) #Conversion from time unit to seconds\n", - "GU = np.longdouble(GC / (DU2M**3 / (MU2KG * TU2S**2)))\n", - "\n", - "GMSun = np.longdouble(GMSunSI / (DU2M**3 / TU2S**2))" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "int" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(JD)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([6.0236000000000000000e+06, 4.0852371000000002095e+05,\n", - " 3.2890055999999999767e+05, 3.0987080000000000000e+06,\n", - " 1.0473486000000000331e+03, 3.4978980000000001382e+03,\n", - " 2.2902979999999999563e+04, 1.9412240000000001601e+04,\n", - " 1.3500000000000000000e+08], dtype=float128)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "MSun_over_Mpl" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [], - "source": [ - "np.set_printoptions(threshold = np.inf, precision=23)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "39.476926408897626292\n" - ] - } - ], - "source": [ - "print(GU)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "39.47692640889762571987376\n" - ] - } - ], - "source": [ - "print(\"{:.23f}\".format(GU))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/examples/whm_swifter_comparison/cb.swiftest.in b/examples/whm_swifter_comparison/cb.swiftest.in index 2386b53c8..058975b81 100644 Binary files a/examples/whm_swifter_comparison/cb.swiftest.in and b/examples/whm_swifter_comparison/cb.swiftest.in differ diff --git a/examples/whm_swifter_comparison/init_cond.py b/examples/whm_swifter_comparison/init_cond.py old mode 100644 new mode 100755 index 289f14f75..aac82eed9 --- a/examples/whm_swifter_comparison/init_cond.py +++ b/examples/whm_swifter_comparison/init_cond.py @@ -1,323 +1,59 @@ +#!/usr/bin/env python3 +import swiftest import numpy as np import sys from astroquery.jplhorizons import Horizons import astropy.constants as const from scipy.io import FortranFile -#Values from JPL Horizons -AU2M = np.longdouble(const.au.value) -GMSunSI = np.longdouble(const.GM_sun.value) -Rsun = np.longdouble(const.R_sun.value) -GC = np.longdouble(const.G.value) -JD = 86400 -year = np.longdouble(365.25 * JD) -c = np.longdouble(299792458.0) -MSun_over_Mpl = np.array([6023600.0, - 408523.71, - 328900.56, - 3098708., - 1047.3486, - 3497.898, - 22902.98, - 19412.24, - 1.35e8], dtype=np.longdouble) - -MU2KG = np.longdouble(GMSunSI / GC) #Conversion from mass unit to kg -DU2M = np.longdouble(AU2M) #Conversion from radius unit to centimeters -TU2S = np.longdouble(year) #Conversion from time unit to seconds -GU = np.longdouble(GC / (DU2M**3 / (MU2KG * TU2S**2))) - -GMSun = np.longdouble(GMSunSI / (DU2M**3 / TU2S**2)) - -# Simulation start, stop, and output cadence times -t_0 = 0 # simulation start time -deltaT = 0.25 * JD / TU2S # simulation step size -end_sim = 1 * year / TU2S # simulation end time -t_print = deltaT #year / TU2S #output interval to print results - - -# Solar oblatenes values: From Mecheri et al. (2004), using Corbard (b) 2002 values (Table II) -J2 = 0.0 #np.longdouble(2.198e-7) * (Rsun / DU2M)**2 -J4 = 0.0 #np.longdouble(-4.805e-9) * (Rsun / DU2M)**4 - -tstart = '2021-01-28' -tend = '2021-01-29' -tstep = '1d' -planetid = { - 'mercury' : '1', - 'venus' : '2', - 'earthmoon' : '3', - 'mars' : '4', - 'jupiter' : '5', - 'saturn' : '6', - 'uranus' : '7', - 'neptune' : '8', - 'plutocharon' : '9' -} -npl = 9 - -#Planet Msun/M ratio -MSun_over_Mpl = { - 'mercury' : np.longdouble(6023600.0), - 'venus' : np.longdouble(408523.71), - 'earthmoon' : np.longdouble(328900.56), - 'mars' : np.longdouble(3098708.), - 'jupiter' : np.longdouble(1047.3486), - 'saturn' : np.longdouble(3497.898), - 'uranus' : np.longdouble(22902.98), - 'neptune' : np.longdouble(19412.24), - 'plutocharon' : np.longdouble(1.35e8) -} - -#Planet radii in meters -Rpl = { - 'mercury' : np.longdouble(2439.4e3), - 'venus' : np.longdouble(6051.8e3), - 'earthmoon' : np.longdouble(6371.0084e3), # Earth only for radius - 'mars' : np.longdouble(3389.50e3), - 'jupiter' : np.longdouble(69911e3), - 'saturn' : np.longdouble(58232.0e3), - 'uranus' : np.longdouble(25362.e3), - 'neptune' : np.longdouble(24622.e3), - 'plutocharon' : np.longdouble(1188.3e3) -} - -pdata = {} -plvec = {} -Rhill = {} -THIRDLONG = np.longdouble(1.0) / np.longdouble(3.0) - -for key,val in planetid.items(): - pdata[key] = Horizons(id=val, id_type='majorbody',location='@sun', - epochs={'start': tstart, 'stop': tend, - 'step': tstep}) - plvec[key] = np.array([pdata[key].vectors()['x'][0], - pdata[key].vectors()['y'][0], - pdata[key].vectors()['z'][0], - pdata[key].vectors()['vx'][0], - pdata[key].vectors()['vy'][0], - pdata[key].vectors()['vz'][0] - ]) - - Rhill[key] = np.longdouble(pdata[key].elements()['a'][0]) * (3 * MSun_over_Mpl[key])**(-THIRDLONG) - -asteroidid = { - '100001' : 'Ceres', - '100002' : 'Pallas', - '100003' : 'Juno', - '100004' : 'Vesta' +sim = swiftest.Simulation() + +sim.param['MU2KG'] = swiftest.MSun +sim.param['TU2S'] = swiftest.YR2S +sim.param['DU2M'] = swiftest.AU2M +sim.param['T0'] = 0.0 +sim.param['TSTOP'] = 1.0 +sim.param['DT'] = 0.25 * swiftest.JD2S / swiftest.YR2S +sim.param['CHK_QMIN_COORD'] = "HELIO" +sim.param['CHK_QMIN'] = swiftest.RSun / swiftest.AU2M +sim.param['CHK_QMIN_RANGE'] = f"{swiftest.RSun / swiftest.AU2M} 1000.0" +sim.param['CHK_RMIN'] = swiftest.RSun / swiftest.AU2M +sim.param['CHK_RMAX'] = 1000.0 +sim.param['CHK_EJECT'] = 1000.0 +sim.param['ISTEP_OUT'] = 1 +sim.param['ISTEP_DUMP'] = 1 +sim.param['OUT_FORM'] = "XV" +sim.param['OUT_STAT'] = "UNKNOWN" +sim.param['GR'] = 'NO' + +bodyid = { + "Sun": 0, + "Mercury": 1, + "Venus": 2, + "Earth": 3, + "Mars": 4, + "Jupiter": 5, + "Saturn": 6, + "Uranus": 7, + "Neptune": 8, + "Ceres": 101, + "Pallas": 102, + "Juno": 103, + "Vesta": 104 } -ntp = 4 -tdata = {} -tpvec = {} -for key,val in asteroidid.items(): - tdata[key] = Horizons(id=val, id_type='smallbody', location='@sun', - epochs={'start': tstart, 'stop': tend, - 'step': tstep}) - tpvec[key] = np.array([tdata[key].vectors()['x'][0], - tdata[key].vectors()['y'][0], - tdata[key].vectors()['z'][0], - tdata[key].vectors()['vx'][0], - tdata[key].vectors()['vy'][0], - tdata[key].vectors()['vz'][0] - ]) - - -if __name__ == '__main__': - # Convert from AU-day to AU-year just because I find it easier to keep track of the sim progress - for plid in plvec: - plvec[plid][3:] *= year / JD - - for tpid in tpvec: - tpvec[tpid][3:] *= year / JD - - # Names of all output files - swifter_input = "param.swifter.in" - swifter_pl = "pl.swifter.in" - swifter_tp = "tp.swifter.in" - swifter_bin = "bin.swifter.dat" - swifter_enc = "enc.swifter.dat" - - swiftest_input = "param.swiftest.in" - swiftest_pl = "pl.swiftest.in" - swiftest_tp = "tp.swiftest.in" - swiftest_cb = "cb.swiftest.in" - swiftest_bin = "bin.swiftest.dat" - swiftest_enc = "enc.swiftest.dat" - - iout = int(np.ceil(t_print / deltaT)) - rmin = Rsun / DU2M - rmax = np.longdouble(1000.0) - #Make Swifter files +for name, id in bodyid.items(): + sim.add(name, idval=id) - plfile = open(swifter_pl, 'w') - print(npl+1, f'! Planet input file generated using init_cond.py using JPL Horizons data for the major planets (and Pluto) for epoch {tstart}' ,file=plfile) - print(1,GMSun,file=plfile) - print('0.0 0.0 0.0',file=plfile) - print('0.0 0.0 0.0',file=plfile) - for i, plid in enumerate(plvec): - print(i + 2,"{:.23g}".format(GMSun * MSun_over_Mpl[plid]**-1),Rhill[plid], file=plfile) - print(Rpl[plid] / DU2M, file=plfile) - print(plvec[plid][0],plvec[plid][1],plvec[plid][2], file=plfile) - print(plvec[plid][3],plvec[plid][4],plvec[plid][5], file=plfile) - plfile.close() - - tpfile = open(swifter_tp, 'w') - print(ntp,file=tpfile) - for tpid, tp in tpvec.items(): - print(tpid, file=tpfile) - print(tp[0],tp[1],tp[2], file=tpfile) - print(tp[3],tp[4],tp[5], file=tpfile) - tpfile.close() - - sys.stdout = open(swifter_input, "w") - print('! Swifter input file generated using init_cond.py') - print('T0 ',t_0) - print('TSTOP ',end_sim) - print('DT ',deltaT) - print('PL_IN ',swifter_pl) - print('TP_IN ',swifter_tp) - print('IN_TYPE ASCII') - print('ISTEP_OUT ',iout) - print('ISTEP_DUMP ',iout) - print('BIN_OUT ',swifter_bin) - print('OUT_TYPE REAL8') - print('OUT_FORM XV') - print('OUT_STAT NEW') - print('J2 ',J2) - print('J4 ',J4) - print('CHK_CLOSE yes') - print('CHK_RMIN ',rmin) - print('CHK_RMAX ',rmax) - print('CHK_EJECT ',rmax) - print('CHK_QMIN ',rmin) - print('CHK_QMIN_COORD HELIO') - print('CHK_QMIN_RANGE ',rmin,rmax) - print('ENC_OUT ',swifter_enc) - print('EXTRA_FORCE no') - print('BIG_DISCARD no') - print('RHILL_PRESENT yes') - - sys.stdout = sys.__stdout__ - #Now make Swiftest files - #cbfile = open(swiftest_cb, 'w') - cbfile = FortranFile(swiftest_cb, 'w') - #print(1.0,file=cbfile) - #print(rmin,file=cbfile) - #print(J2,file=cbfile) - #print(J4,file=cbfile) - Msun = np.double(1.0) - cbfile.write_record(np.double(GMSun)) - cbfile.write_record(np.double(rmin)) - cbfile.write_record(np.double(J2)) - cbfile.write_record(np.double(J4)) - cbfile.close() - - #plfile = open(swiftest_pl, 'w') - plfile = FortranFile(swiftest_pl, 'w') - #print(npl,file=plfile) - plfile.write_record(npl) - - name = np.empty(npl, dtype=np.int32) - px = np.empty(npl, dtype=np.double) - py = np.empty(npl, dtype=np.double) - pz = np.empty(npl, dtype=np.double) - vx = np.empty(npl, dtype=np.double) - vy = np.empty(npl, dtype=np.double) - vz = np.empty(npl, dtype=np.double) - mass = np.empty(npl, dtype=np.double) - Gmass = np.empty(npl, dtype=np.double) - radius = np.empty(npl, dtype=np.double) - for i, plid in enumerate(plvec): - name[i] = i + 2 - px[i] = plvec[plid][0] - py[i] = plvec[plid][1] - pz[i] = plvec[plid][2] - vx[i] = plvec[plid][3] - vy[i] = plvec[plid][4] - vz[i] = plvec[plid][5] - Gmass[i] = GMSun * MSun_over_Mpl[plid]**-1 - radius[i] = Rpl[plid] / DU2M - plfile.write_record(name.T) - plfile.write_record(px.T) - plfile.write_record(py.T) - plfile.write_record(pz.T) - plfile.write_record(vx.T) - plfile.write_record(vy.T) - plfile.write_record(vz.T) - plfile.write_record(Gmass.T) - plfile.write_record(radius.T) - #for i, plid in enumerate(plvec): - # print(i + 2,"{:.23g}".format(np.longdouble(MSun_over_Mpl[plid]**-1)), file=plfile) - # print(Rpl[plid] / DU2M, file=plfile) - # print(plvec[plid][0], plvec[plid][1], plvec[plid][2], file=plfile) - # print(plvec[plid][3], plvec[plid][4], plvec[plid][5], file=plfile) - plfile.close() - #tpfile = open(swiftest_tp, 'w') - tpfile = FortranFile(swiftest_tp, 'w') - #print(ntp,file=tpfile) - tpfile.write_record(ntp) - #for tpid, tp in tpvec.items(): - # print(tpid, file=tpfile) - # print(tp[0],tp[1],tp[2], file=tpfile) - # print(tp[3],tp[4],tp[5], file=tpfile) - - name = np.empty(ntp, dtype=np.int32) - px = np.empty(ntp, dtype=np.double) - py = np.empty(ntp, dtype=np.double) - pz = np.empty(ntp, dtype=np.double) - vx = np.empty(ntp, dtype=np.double) - vy = np.empty(ntp, dtype=np.double) - vz = np.empty(ntp, dtype=np.double) - for i, tpid in enumerate(tpvec): - name[i] = int(tpid) - px[i] = tpvec[tpid][0] - py[i] = tpvec[tpid][1] - pz[i] = tpvec[tpid][2] - vx[i] = tpvec[tpid][3] - vy[i] = tpvec[tpid][4] - vz[i] = tpvec[tpid][5] - tpfile.write_record(name.T) - tpfile.write_record(px.T) - tpfile.write_record(py.T) - tpfile.write_record(pz.T) - tpfile.write_record(vx.T) - tpfile.write_record(vy.T) - tpfile.write_record(vz.T) - - tpfile.close() - - sys.stdout = open(swiftest_input, "w") - print('! Swiftest input file generated using init_cond.py') - print('T0 ',t_0) - print('TSTOP ',end_sim) - print('DT ',deltaT) - print('CB_IN ',swiftest_cb) - print('PL_IN ',swiftest_pl) - print('TP_IN ',swiftest_tp) - print('IN_TYPE REAL8') - print('ISTEP_OUT ',iout) - print('ISTEP_DUMP ',iout) - print('BIN_OUT ',swiftest_bin) - print('OUT_TYPE REAL8') - print('OUT_FORM XV') - print('OUT_STAT REPLACE') - print('CHK_CLOSE yes') - print('CHK_RMIN ',rmin) - print('CHK_RMAX ',rmax) - print('CHK_EJECT ',rmax) - print('CHK_QMIN ',rmin) - print('CHK_QMIN_COORD HELIO') - print('CHK_QMIN_RANGE ',rmin,rmax) - print('ENC_OUT ',swiftest_enc) - print('EXTRA_FORCE no') - print('BIG_DISCARD no') - print('ROTATION no') - print('GR no') - print('MU2KG ',MU2KG) - print('DU2M ',DU2M) - print('TU2S ',TU2S) - +sim.param['PL_IN'] = "pl.swiftest.in" +sim.param['TP_IN'] = "tp.swiftest.in" +sim.param['CB_IN'] = "cb.swiftest.in" +sim.param['BIN_OUT'] = "bin.swiftest.dat" +sim.param['ENC_OUT'] = "enc.swiftest.dat" +sim.save("param.swiftest.in") +sim.param['PL_IN'] = "pl.swifter.in" +sim.param['TP_IN'] = "tp.swifter.in" +sim.param['BIN_OUT'] = "bin.swifter.dat" +sim.param['ENC_OUT'] = "enc.swifter.dat" +sim.save("param.swifter.in", codename="Swifter") - sys.stdout = sys.__stdout__ diff --git a/examples/whm_swifter_comparison/param.swifter.in b/examples/whm_swifter_comparison/param.swifter.in index b092c2553..5cf0cb8b9 100644 --- a/examples/whm_swifter_comparison/param.swifter.in +++ b/examples/whm_swifter_comparison/param.swifter.in @@ -1,26 +1,26 @@ -! Swifter input file generated using init_cond.py -T0 0 -TSTOP 1.0 -DT 0.0006844626967830253251 -PL_IN pl.swifter.in -TP_IN tp.swifter.in -IN_TYPE ASCII -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swifter.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT NEW -J2 4.7535806948127356533e-12 -J4 -2.2473967953572827815e-18 -CHK_CLOSE yes -CHK_RMIN 0.0046504672609621575315 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.0046504672609621575315 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.0046504672609621575315 1000.0 -ENC_OUT enc.swifter.dat -EXTRA_FORCE no -BIG_DISCARD no -RHILL_PRESENT yes +! VERSION Swifter parameter file converted from Swiftest +T0 0.0 +TSTOP 1.0 +DT 0.0006844626967830253 +ISTEP_OUT 1 +ISTEP_DUMP 1 +OUT_FORM XV +OUT_TYPE REAL8 +OUT_STAT UNKNOWN +IN_TYPE ASCII +PL_IN pl.swifter.in +TP_IN tp.swifter.in +BIN_OUT bin.swifter.dat +ENC_OUT enc.swifter.dat +CHK_QMIN 0.004650467260962157 +CHK_RMIN 0.004650467260962157 +CHK_RMAX 1000.0 +CHK_EJECT 1000.0 +CHK_QMIN_COORD HELIO +CHK_QMIN_RANGE 0.004650467260962157 1000.0 +EXTRA_FORCE NO +BIG_DISCARD NO +CHK_CLOSE YES +J2 4.7535806948127355e-12 +J4 -2.2473967953572827e-18 +RHILL_PRESENT YES diff --git a/examples/whm_swifter_comparison/param.swiftest.in b/examples/whm_swifter_comparison/param.swiftest.in index c32a270f5..73818e198 100644 --- a/examples/whm_swifter_comparison/param.swiftest.in +++ b/examples/whm_swifter_comparison/param.swiftest.in @@ -1,29 +1,35 @@ -! Swiftest input file generated using init_cond.py -T0 0 -TSTOP 1.0 -DT 0.0006844626967830253251 -CB_IN cb.swiftest.in -PL_IN pl.swiftest.in -TP_IN tp.swiftest.in -IN_TYPE REAL8 -ISTEP_OUT 1 -ISTEP_DUMP 1 -BIN_OUT bin.swiftest.dat -OUT_TYPE REAL8 -OUT_FORM XV -OUT_STAT REPLACE -CHK_CLOSE yes -CHK_RMIN 0.0046504672609621575315 -CHK_RMAX 1000.0 -CHK_EJECT 1000.0 -CHK_QMIN 0.0046504672609621575315 -CHK_QMIN_COORD HELIO -CHK_QMIN_RANGE 0.0046504672609621575315 1000.0 -ENC_OUT enc.swiftest.dat -EXTRA_FORCE no -BIG_DISCARD no -ROTATION no -GR no -MU2KG 1.988409870698050917e+30 -DU2M 149597870700.0 -TU2S 31557600.0 +! VERSION Swiftest parameter input +T0 0.0 +TSTOP 1.0 +DT 0.0006844626967830253 +ISTEP_OUT 1 +ISTEP_DUMP 1 +OUT_FORM XV +OUT_TYPE REAL8 +OUT_STAT UNKNOWN +IN_TYPE ASCII +PL_IN pl.swiftest.in +TP_IN tp.swiftest.in +CB_IN cb.swiftest.in +BIN_OUT bin.swiftest.dat +ENC_OUT enc.swiftest.dat +CHK_QMIN 0.004650467260962157 +CHK_RMIN 0.004650467260962157 +CHK_RMAX 1000.0 +CHK_EJECT 1000.0 +CHK_QMIN_COORD HELIO +CHK_QMIN_RANGE 0.004650467260962157 1000.0 +MU2KG 1.988409870698051e+30 +TU2S 31557600.0 +DU2M 149597870700.0 +EXTRA_FORCE NO +BIG_DISCARD NO +CHK_CLOSE YES +FRAGMENTATION NO +ROTATION NO +TIDES NO +ENERGY NO +GR NO +YARKOVSKY NO +YORP NO +MTINY 0.0 diff --git a/examples/whm_swifter_comparison/pl.swifter.in b/examples/whm_swifter_comparison/pl.swifter.in index d0d4e7ff9..7412144e0 100644 --- a/examples/whm_swifter_comparison/pl.swifter.in +++ b/examples/whm_swifter_comparison/pl.swifter.in @@ -1,40 +1,36 @@ -10 ! Planet input file generated using init_cond.py using JPL Horizons data for the major planets (and Pluto) for epoch 2021-01-28 -1 39.47692640889762629 +9 +0 39.476926408897625196 0.0 0.0 0.0 0.0 0.0 0.0 -2 6.553709809565313959502e-06 0.0014751229680863789154 +1 6.5537098095653139645e-06 0.0014751253039664285066 1.6306381826061645943e-05 -0.1030256860922895 0.2897796047098886 0.01422904600374035 --11.74004209950937 3.8343124110162736 1.3902496665973592 -3 9.6633133995815387361564e-05 0.006759127649782299051 +0.36019833403308620934 -0.07157757063116521046 -0.038889932331457412185 +0.012062683987023428416 10.539199589223686515 0.86012493216791845955 +2 9.663313399581537916e-05 0.006759112363391176217 4.0453784346544178454e-05 -0.06110218027254217 -0.7245466901305982 -0.01346904300924688 -7.311995449678243 0.5941125721336201 -0.4137913843379075 -4 0.00012002693582795246295385 0.0100447565675466429165 +-0.71276554591539231787 0.0894943770131735733 0.042358444034962597358 +-0.96047232050779632014 -7.363179644470093107 -0.045627977257453471387 +3 0.000120026935827952453094 0.010044757472678654026 4.25875607065040958e-05 --0.6061796342297583 0.7761214554702035 -3.4750047790977e-05 --5.054824314301841 -3.891667468503358 0.00019720338148272726 -5 1.2739802010675942316241e-05 0.0072464490746299085006 +0.27645830888837641393 -0.97837771886398083865 4.5542715832163949185e-05 +5.9448497026859876977 1.6852493323830119935 -9.895818943662129852e-05 +4 1.2739802010675941456e-05 0.007246754169100752911 2.265740805092889601e-05 -0.2751944175855944 1.51937688993241 0.02508924593104206 --4.835983593209577 1.344855094041679 0.14681413000004515 -6 0.037692251088985682938581 0.3552852357486060849 +-1.4965217056830220077 0.729867855162097956 0.052005223740499352536 +-2.049353987860530548 -4.1577626275819368415 -0.03686191825212072444 +5 0.037692251088985676735 0.3552713962079929143 0.00046732617030490929307 -3.200135438345358 -3.953498213518368 -0.05517737289975112 -2.111393749129838 1.8660266890185446 -0.05498941067210089 -7 0.011285899820091272946487 0.43763064566943408597 +4.027841704615886087 -3.0231618001306270749 -0.077559557972985263 +1.6231826570873460391 2.3366237981055781438 -0.046019759896080974796 +6 0.011285899820091272997 0.43765160695836118215 0.00038925687730393611812 -5.607382165725712 -8.258649105608766 -0.07958445228024298 -1.5748468603228847 1.1414574661825514 -0.08250331331320372 -8 0.0017236589478267728883093 0.4690969274244374022 +6.2788354074558432316 -7.724005035333701308 -0.11559390097316769863 +1.4696075442034620881 1.282966226939726742 -0.08077393754283409384 +7 0.0017236589478267730203 0.4695227539643713788 0.00016953449859497231466 -15.28225422201768 12.53905314208462 -0.1514143582550325 --0.9198472198098231 1.0454390993472462 0.01574538863031621 -9 0.0020336100526728304385693 0.7807192056765467829 +14.869154031353570389 12.9936724365634095335 -0.1443982771709022006 +-0.95437109658589562686 1.0170745961532793757 0.016089151184688745742 +8 0.0020336100526728302319 0.78127049251990261927 0.000164587904124493665 -29.47483071169769 -5.147686530859088 -0.5733441819169969 -0.19191677740340274 1.1385110364087574 -0.027844325148353527 -10 2.9242167710294538257026e-07 0.05383468172776979939 -7.943294877391593783e-06 -14.14000920780611 -31.14141812522779 -0.7565722591093476 -1.073396108697069 0.23003123192799815 -0.33424529561177047 +29.55509611047864027 -4.6450138458072487424 -0.585533781429422695 +0.17223467348300621534 1.1421766618084267115 -0.027457548207218328868 diff --git a/examples/whm_swifter_comparison/pl.swiftest.in b/examples/whm_swifter_comparison/pl.swiftest.in index 7bdc4a619..e144eae8f 100644 Binary files a/examples/whm_swifter_comparison/pl.swiftest.in and b/examples/whm_swifter_comparison/pl.swiftest.in differ diff --git a/examples/whm_swifter_comparison/swiftest_vs_swifter.ipynb b/examples/whm_swifter_comparison/swiftest_vs_swifter.ipynb new file mode 100644 index 000000000..82bd3d63f --- /dev/null +++ b/examples/whm_swifter_comparison/swiftest_vs_swifter.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import swiftest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading Swifter file param.swifter.in\n", + "Reading in time 1.000e+00\n", + "Creating Dataset\n", + "Successfully converted 1462 output frames.\n", + "Swifter simulation data stored as xarray DataSet .ds\n" + ] + } + ], + "source": [ + "swiftersim = swiftest.Simulation(param_file=\"param.swifter.in\", codename=\"Swifter\")\n", + "swiftersim.bin2xr()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading Swiftest file param.swiftest.in\n", + "Reading in time 1.001e+00\n", + "Creating Dataset\n", + "Successfully converted 1463 output frames.\n", + "Swiftest simulation data stored as xarray DataSet .ds\n" + ] + } + ], + "source": [ + "swiftestsim = swiftest.Simulation(param_file=\"param.swiftest.in\")\n", + "swiftestsim.bin2xr()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff = swiftestsim.ds - swiftersim.ds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff = swiftdiff.rename({'time' : 'time (y)'})" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "swiftdiff['dr'] = np.sqrt(swiftdiff['px']**2 + swiftdiff['py']**2 + swiftdiff['pz']**2)\n", + "swiftdiff['dv'] = np.sqrt(swiftdiff['vx']**2 + swiftdiff['vy']**2 + swiftdiff['vz']**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "pldiff = swiftdiff.where(np.invert(np.isnan(swiftdiff['Mass'])), drop=True)\n", + "tpdiff = swiftdiff.where(np.isnan(swiftdiff['Mass']), drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEGCAYAAABLgMOSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAYbUlEQVR4nO3dfbRVdb3v8ff3bCBK8JAC8rBB0DBANAQOWJmhHbjgqQilhqilVpfqaMNux5ueGvd0HXecsjrd1OzkoCcrG3I79iAZagp67WIcJREfIorQcgsmcTIRJNjwvX+sZXez74a9mOup3Xq/xthjrznnb/7m9xe2Pvs351pzRmYiSdLh+qtmFyBJ6psMEElSIQaIJKkQA0SSVIgBIkkqpF+zC2ikoUOH5rhx45pdhiT1KT/96U9/l5nDuq9vqQAZN24ca9eubXYZktSnRMSve1rvKSxJUiEGiCSpEANEklRIS10DkaRm2Lt3Lx0dHezevbvZpRzSwIEDaW9vp3///hW1N0Akqc46OjoYPHgw48aNIyKaXU6PMpPt27fT0dHB+PHjK9rHU1iSVGe7d+/m6KOP/rMND4CI4Oijjz6sWZIBIkkN8OccHi853BoNEElSIQaIJPURr3vd63pcf9FFF3HLLbc0uBoDRJL6jPvvv7/ZJRzAT2FJUh8xaNAgXnjhBTKTD37wg6xatYrx48fTrCfLOgORpD7me9/7Hhs3buTRRx/lS1/6UtNmJgaIJPUx9913H4sXL6atrY1Ro0Zx5plnNqUOA0SS+qA/h48FGyCS1MecfvrpLFu2jH379rF161buueeeptThRXRJ6mMWLlzIqlWrOOmkkzjhhBN44xvf2JQ6DBBJ6iNeeOEFoHT66vrrr29yNZ7CkiQVZIBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklrEu9/9boYPH86UKVNq0p8BIkkt4qKLLuKOO+6oWX9NDZCImBcRGyNiU0Rc2cP2iIjrytsfiYhp3ba3RcS6iLitcVVLUt90+umnc9RRR9Wsv6Z9Ez0i2oAvAHOADuDBiFiemT/r0mw+MKH8Mwv4Yvn3Sy4DNgBHNqRoSarSVT94nJ9teb6mfU4edSQff8uJNe2zEs2cgcwENmXm5szcAywDFnRrswD4RpasAYZExEiAiGgH/g74ciOLliSVNPNeWKOBp7osd3Dg7OJgbUYDW4FrgI8Agw91kIhYAiwBGDt2bFUFS1K1mjFTqJdmzkB6upl99+cy9tgmIt4MPJuZP+3tIJm5NDNnZOaMYcOGFalTktSDZgZIBzCmy3I7sKXCNq8H3hoRT1I69XVmRNxUv1Ilqe9bvHgxr33ta9m4cSPt7e185Stfqaq/Zp7CehCYEBHjgaeBc4HzurVZDlwaEcsond76Q2ZuBf6x/ENEzAYuz8wLGlS3JPVJN998c037a1qAZGZnRFwK3Am0AV/NzMcj4v3l7TcAK4CzgE3ALuDiZtUrSTpQUx8olZkrKIVE13U3dHmdwCW99HEvcG8dypMkHYLfRJckFWKASJIKMUAkSYUYIJKkQgwQSWoBTz31FGeccQaTJk3ixBNP5Nprr626z6Z+CkuS1Bj9+vXjs5/9LNOmTWPHjh1Mnz6dOXPmMHny5MJ9OgORpBYwcuRIpk0rPRFj8ODBTJo0iaeffrqqPp2BSFIj3X4lPPNobfsccRLMv7ri5k8++STr1q1j1qzu9689PM5AJKmFvPDCC5xzzjlcc801HHlkdY9ScgYiSY10GDOFWtu7dy/nnHMO559/PmeffXbV/TkDkaQWkJm85z3vYdKkSXz4wx+uSZ8GiCS1gNWrV/PNb36TVatWMXXqVKZOncqKFSt63/EQPIUlSS3gtNNOo3R/2tpxBiJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCS1gN27dzNz5kxe85rXcOKJJ/Lxj3+86j79HogktYCXvexlrFq1ikGDBrF3715OO+005s+fz6mnnlq4T2cgktQCIoJBgwYBpXti7d27l4ioqk9nIJLUQJ964FP8/D9+XtM+Jx41kStmXtFru3379jF9+nQ2bdrEJZdc4u3cJUmVaWtr4+GHH6ajo4MHHniAxx57rKr+nIFIUgNVMlOotyFDhjB79mzuuOMOpkyZUrgfZyCS1AK2bdvGc889B8CLL77I3XffzcSJE6vq0xmIJLWArVu3cuGFF7Jv3z7279/PO97xDt785jdX1acBIkkt4OSTT2bdunU17dNTWJKkQgwQSVIhTQ2QiJgXERsjYlNEXNnD9oiI68rbH4mIaeX1YyLinojYEBGPR8Rlja9eklpb0wIkItqALwDzgcnA4oiY3K3ZfGBC+WcJ8MXy+k7gHzJzEnAqcEkP+0qS6qiZM5CZwKbM3JyZe4BlwIJubRYA38iSNcCQiBiZmVsz8yGAzNwBbABGN7J4SWp1zQyQ0cBTXZY7+P9DoNc2ETEOOAX499qXKEk6mGYGSE938crDaRMRg4DvAB/KzOd7PEjEkohYGxFrt23bVrhYSfpLsG/fPk455ZSqvwMCzQ2QDmBMl+V2YEulbSKiP6Xw+FZmfvdgB8nMpZk5IzNnDBs2rCaFS1Jfde211zJp0qSa9NXMAHkQmBAR4yNiAHAusLxbm+XAu8qfxjoV+ENmbo3SPYi/AmzIzP/Z2LIlqW/q6Ojghz/8Ie9973tr0l/TvomemZ0RcSlwJ9AGfDUzH4+I95e33wCsAM4CNgG7gIvLu78eeCfwaEQ8XF730cxc0cAhSNJhe+YTn+CPG2p7O/eXTZrIiI9+tNd2H/rQh/j0pz/Njh07anLcpt7KpPyGv6Lbuhu6vE7gkh72+z/0fH1EktSD2267jeHDhzN9+nTuvffemvTpvbAkqYEqmSnUw+rVq1m+fDkrVqxg9+7dPP/881xwwQXcdNNNhfv0ViaS1AI++clP0tHRwZNPPsmyZcs488wzqwoPMEAkSQV5CkuSWszs2bOZPXt21f04A5EkFWKASJIKMUAkSYUYIJKkQgwQSVIhBogkqRA/xitJLWLcuHEMHjyYtrY2+vXrx9q1a6vqzwCRpBZyzz33MHTo0Jr05SksSVIhzkAkqYF+/O1f8LunXqhpn0PHDOIN7zih13YRwdy5c4kI3ve+97FkyZKqjmuASFKLWL16NaNGjeLZZ59lzpw5TJw4kdNPP71wfwaIJDVQJTOFehk1ahQAw4cPZ+HChTzwwANVBYjXQCSpBezcufNPTyLcuXMnP/rRj5gyZUpVfToDkaQW8Nvf/paFCxcC0NnZyXnnnce8efOq6tMAkaQWcNxxx7F+/fqa9ukpLElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJKlFPPfccyxatIiJEycyadIkfvKTn1TVn98DkaQWcdlllzFv3jxuueUW9uzZw65du6rqzwCRpBbw/PPPc99993HjjTcCMGDAAAYMGFBVnwaIJDXQPTcu5dlfb65pn8OPPY4zLjr0rdk3b97MsGHDuPjii1m/fj3Tp0/n2muv5Ygjjih8XK+BSFIL6Ozs5KGHHuIDH/gA69at44gjjuDqq6+uqk9nIJLUQL3NFOqlvb2d9vZ2Zs2aBcCiRYuqDpBeZyAR0RYR/6Wqoxy873kRsTEiNkXElT1sj4i4rrz9kYiYVum+kqT/Z8SIEYwZM4aNGzcCsHLlSiZPnlxVn73OQDJzX0QsAD5X1ZG6iYg24AvAHKADeDAilmfmz7o0mw9MKP/MAr4IzKpwX0lSF5///Oc5//zz2bNnD8cddxxf+9rXquqv0lNYqyPieuB/ATtfWpmZD1Vx7JnApszcDBARy4AFQNcQWAB8IzMTWBMRQyJiJDCugn1r5sZ/+AQvDuhfj64ltYDpb3kDz3Y809Qa+rcFU6dOZe3atTXrs9IAeV3591Xl3wEkcGYVxx4NPNVluYPSLKO3NqMr3LdUaMQSYAnA2LFjCxW6P9p4sd++QvtKUgbsj2xuDftrf/xDBkhEfLj88jZKgRFd66ny2NHDuu59HqxNJfuWVmYuBZYCzJgxo1DN7/6XK4rsJkkAbNiwgRGjRza7jJrrbQYyuPz71cDfALdSevN+C3BflcfuAMZ0WW4HtlTYZkAF+0qS6uiQAZKZVwFExI+AaZm5o7z834F/q/LYDwITImI88DRwLnBetzbLgUvL1zhmAX/IzK0Rsa2CfSVJdVTpNZCxwJ4uy3soXcguLDM7I+JS4E6gDfhqZj4eEe8vb78BWAGcBWwCdgEXH2rfauqRJB2eSgPkm8ADEfE9StcaFgJfr/bgmbmCUkh0XXdDl9cJXFLpvpKkxqnoViaZ+c+U/vr/PfAccHFmfrKOdUmSamjjxo1MnTr1Tz9HHnkk11xzTVV9Vnwrk/J3Pqr53ockqUle/epX8/DDDwOwb98+Ro8ezcKFC6vq05spSlKLWblyJccffzzHHntsVf14M0VJaqDnfvAr9mzZ2XvDwzBg1BEMecvxFbdftmwZixcvrvq4zkAkqYXs2bOH5cuX8/a3v73qvpyBSFIDHc5MoR5uv/12pk2bxjHHHFN1X85AJKmF3HzzzTU5fQUGiCS1jF27dnHXXXdx9tln16Q/T2FJUot4xStewfbt22vWnzMQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKMUAkqUV87nOf48QTT2TKlCksXryY3bt3V9WfASJJLeDpp5/muuuuY+3atTz22GPs27ePZcuWVdWnASJJLaKzs5MXX3yRzs5Odu3axahRo6rqz2+iS1ID3X777TzzzDM17XPEiBHMnz//kG1Gjx7N5ZdfztixY3n5y1/O3LlzmTt3blXHdQYiSS3g97//PbfeeitPPPEEW7ZsYefOndx0001V9ekMRJIaqLeZQr3cfffdjB8/nmHDhgFw9tlnc//993PBBRcU7tMZiCS1gLFjx7JmzRp27dpFZrJy5UomTZpUVZ8GiCS1gFmzZrFo0SKmTZvGSSedxP79+1myZElVfXoKS5JaxFVXXcVVV11Vs/6cgUiSCjFAJEmFGCCS1ACZ2ewSenW4NRogklRnAwcOZPv27X/WIZKZbN++nYEDB1a8jxfRJanO2tvb6ejoYNu2bc0u5ZAGDhxIe3t7xe0NEEmqs/79+zN+/Phml1FzTTmFFRFHRcRdEfHL8u9XHqTdvIjYGBGbIuLKLus/ExE/j4hHIuJ7ETGkYcVLkoDmXQO5EliZmROAleXlA0REG/AFYD4wGVgcEZPLm+8CpmTmycAvgH9sSNWSpD9pVoAsAL5efv114G09tJkJbMrMzZm5B1hW3o/M/FFmdpbbrQEqP2knSaqJZgXIMZm5FaD8e3gPbUYDT3VZ7iiv6+7dwO01r1CSdEh1u4geEXcDI3rY9LFKu+hh3QGfgYuIjwGdwLcOUccSYAmUbiYmSaqNugVIZv7twbZFxG8jYmRmbo2IkcCzPTTrAMZ0WW4HtnTp40LgzcCb8hAfrs7MpcBSgBkzZvz5fghbkvqYZp3CWg5cWH59IXBrD20eBCZExPiIGACcW96PiJgHXAG8NTN3NaBeSVI3zQqQq4E5EfFLYE55mYgYFRErAMoXyS8F7gQ2AN/OzMfL+18PDAbuioiHI+KGRg9AklpdU75ImJnbgTf1sH4LcFaX5RXAih7avaquBUqSeuW9sCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQV0pQAiYijIuKuiPhl+fcrD9JuXkRsjIhNEXFlD9svj4iMiKH1r1qS1FWzZiBXAiszcwKwsrx8gIhoA74AzAcmA4sjYnKX7WOAOcBvGlKxJOkAzQqQBcDXy6+/DrythzYzgU2ZuTkz9wDLyvu95HPAR4CsY52SpINoVoAck5lbAcq/h/fQZjTwVJfljvI6IuKtwNOZub63A0XEkohYGxFrt23bVn3lkiQA+tWr44i4GxjRw6aPVdpFD+syIl5R7mNuJZ1k5lJgKcCMGTOcrUhSjdQtQDLzbw+2LSJ+GxEjM3NrRIwEnu2hWQcwpstyO7AFOB4YD6yPiJfWPxQRMzPzmZoNQJJ0SM06hbUcuLD8+kLg1h7aPAhMiIjxETEAOBdYnpmPZubwzByXmeMoBc00w0OSGqtZAXI1MCcifknpk1RXA0TEqIhYAZCZncClwJ3ABuDbmfl4k+qVJHVTt1NYh5KZ24E39bB+C3BWl+UVwIpe+hpX6/okSb3zm+iSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFRGY2u4aGiYhtwK8L7j4U+F0Ny+kLHHNrcMytoZoxH5uZw7qvbKkAqUZErM3MGc2uo5Ecc2twzK2hHmP2FJYkqRADRJJUiAFSuaXNLqAJHHNrcMytoeZj9hqIJKkQZyCSpEIMEElSIQZINxExLyI2RsSmiLiyh+0REdeVtz8SEdOaUWctVTDm88tjfSQi7o+I1zSjzlrqbcxd2v1NROyLiEWNrK/WKhlvRMyOiIcj4vGI+N+NrrHWKvjv+q8j4gcRsb485oubUWctRcRXI+LZiHjsINtr+/6Vmf6Uf4A24FfAccAAYD0wuVubs4DbgQBOBf692XU3YMyvA15Zfj2/Fcbcpd0qYAWwqNl11/nfeAjwM2BseXl4s+tuwJg/Cnyq/HoY8B/AgGbXXuW4TwemAY8dZHtN37+cgRxoJrApMzdn5h5gGbCgW5sFwDeyZA0wJCJGNrrQGup1zJl5f2b+vry4BmhvcI21Vsm/M8AHge8AzzayuDqoZLznAd/NzN8AZGYrjDmBwRERwCBKAdLZ2DJrKzPvozSOg6np+5cBcqDRwFNdljvK6w63TV9yuON5D6W/YPqyXsccEaOBhcANDayrXir5Nz4BeGVE3BsRP42IdzWsuvqoZMzXA5OALcCjwGWZub8x5TVNTd+/+lVdzl+W6GFd9885V9KmL6l4PBFxBqUAOa2uFdVfJWO+BrgiM/eV/kDt0yoZbz9gOvAm4OXATyJiTWb+ot7F1UklY/5PwMPAmcDxwF0R8ePMfL7OtTVTTd+/DJADdQBjuiy3U/rr5HDb9CUVjSciTga+DMzPzO0Nqq1eKhnzDGBZOTyGAmdFRGdmfr8hFdZWpf9d/y4zdwI7I+I+4DVAXw2QSsZ8MXB1li4ObIqIJ4CJwAONKbEpavr+5SmsAz0ITIiI8RExADgXWN6tzXLgXeVPM5wK/CEztza60BrqdcwRMRb4LvDOPvwXaVe9jjkzx2fmuMwcB9wC/H0fDQ+o7L/rW4E3RES/iHgFMAvY0OA6a6mSMf+G0oyLiDgGeDWwuaFVNl5N37+cgXSRmZ0RcSlwJ6VPcXw1Mx+PiPeXt99A6RM5ZwGbgF2U/orpsyoc8z8BRwP/Wv6LvDP78J1MKxzzX4xKxpuZGyLiDuARYD/w5czs8aOgfUGF/8b/A7gxIh6ldGrniszs07d4j4ibgdnA0IjoAD4O9If6vH95KxNJUiGewpIkFWKASJIKMUAkSYUYIJKkQgwQSVIhBohUUEQMiYi/77I8KiJuqdOx3hYR/9RLm3+JiDPrcXypJ36MVyooIsYBt2XmlAYc637grYf6nkJEHAt8KTPn1rseCZyBSNW4Gji+/AyNz0TEuJeewxARF0XE98vPm3giIi6NiA9HxLqIWBMRR5XbHR8Rd5RvYPjjiJjY/SARcQLwx8z8XUQMLvfXv7ztyIh4MiL6Z+avgaMjYkQD/zdQCzNApOKuBH6VmVMz87/2sH0KpdukzwT+GdiVmacAPwFeutvtUuCDmTkduBz41x76eT3wEEBm7gDuBf6uvO1c4DuZube8/FC5vVR33spEqp97ym/4OyLiD8APyusfBU6OiEGUHtb1b13u+PuyHvoZCWzrsvxl4CPA9yndiuI/d9n2LDCqVgOQDsUAkernj11e7++yvJ/S//f+CnguM6f20s+LwF+/tJCZq8uny94ItHW7Z9XAcnup7jyFJRW3AxhcdOfycyeeiIi3w5+eV93T8+Y3AK/qtu4bwM3A17qtPwHoszdBVN9igEgFlZ+LsjoiHouIzxTs5nzgPRGxHnicnh+tex9wShz4ZKtvAa+kFCIAlC+svwpYW7AW6bD4MV6pD4iIa4EfZObd5eVFwILMfGeXNguBaZn535pUplqM10CkvuETlB7yRER8HphP6bkOXfUDPtvgutTCnIFIkgrxGogkqRADRJJUiAEiSSrEAJEkFWKASJIK+b8y4UNa7aeHlAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pldiff['dr'].plot.line(x=\"time (y)\")\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "tpdiff['dr'].plot.line(x=\"time (y)\")\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEGCAYAAABLgMOSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAYj0lEQVR4nO3df7RXdZ3v8ed7DhAlOKSA/DjgQcMA0RC4YGVGNnDBqQilrqSlVpdqtGWr8abTrBnHNWvKaprUanLRLytbch37IRZqCnrtYqQk4o+IIrQ8gklMJoIE5/C+f5yv3cOZA+fL/v7q9H0+1jqL7977sz/7/RH8vs5nf/d378hMJEk6XH/R6AIkSf2TASJJKsQAkSQVYoBIkgoxQCRJhQxodAH1NHz48Gxra2t0GZLUr/zkJz/5bWaO6Lm+qQKkra2NdevWNboMSepXIuJXva33FJYkqRADRJJUiAEiSSqkqT4DkaRG2LdvH+3t7ezZs6fRpRzS4MGDaW1tZeDAgWW1N0Akqcba29sZOnQobW1tRESjy+lVZrJjxw7a29uZMGFCWft4CkuSamzPnj0cffTRf7LhARARHH300Yc1SzJAJKkO/pTD40WHW6MBIkkqxACRpH7iNa95Ta/rL7jgAm6++eY6V2OASFK/cd999zW6hAN4FZYk9RNDhgzh+eefJzP54Ac/yOrVq5kwYQKNerKsMxBJ6me+853vsGnTJh555BG++MUvNmxmYoBIUj9z7733smTJElpaWhgzZgxnnHFGQ+owQCSpH/pTuCzYAJGkfub0009n+fLldHZ2sm3bNu6+++6G1OGH6JLUzyxatIjVq1dz0kknccIJJ/D617++IXUYIJLUTzz//PNA1+mrz33ucw2uxlNYkqSCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIUpN497vfzciRI5k6dWpV+jNAJKlJXHDBBdx+++1V66+hARIR8yNiU0RsjojLe9keEXFtafvDETG9x/aWiFgfEd+rX9WS1D+dfvrpHHXUUVXrr2HfRI+IFuDzwFygHXggIlZk5k+7NVsATCz9zAa+UPrzRZcAG4Ej61K0JFXoylsf46dbn6tqn1PGHMkVbz6xqn2Wo5EzkFnA5szckpl7geXAwh5tFgJfzy5rgWERMRogIlqBvwa+VM+iJUldGnkvrLHAk92W2zlwdnGwNmOBbcDVwEeAoYc6SEQsBZYCjB8/vqKCJalSjZgp1EojZyC93cy+53MZe20TEW8CnsnMn/R1kMxclpkzM3PmiBEjitQpSepFIwOkHRjXbbkV2Fpmm9cCb4mIJ+g69XVGRNxQu1Ilqf9bsmQJr371q9m0aROtra18+ctfrqi/Rp7CegCYGBETgKeAc4B39GizArg4IpbTdXrr95m5Dfi70g8RMQe4NDPPq1PdktQv3XjjjVXtr2EBkpkdEXExcAfQAnwlMx+LiPeXtl8HrATOBDYDu4ELG1WvJOlADX2gVGaupCskuq+7rtvrBC7qo497gHtqUJ4k6RD8JrokqRADRJJUiAEiSSrEAJEkFWKASFITePLJJ3nDG97A5MmTOfHEE7nmmmsq7rOhV2FJkupjwIABfPrTn2b69Ons3LmTGTNmMHfuXKZMmVK4T2cgktQERo8ezfTpXU/EGDp0KJMnT+app56qqE9nIJJUT7ddDk8/Ut0+R50EC64qu/kTTzzB+vXrmT275/1rD48zEElqIs8//zxnn302V199NUceWdmjlJyBSFI9HcZModr27dvH2WefzbnnnstZZ51VcX/OQCSpCWQm73nPe5g8eTIf/vCHq9KnASJJTWDNmjV84xvfYPXq1UybNo1p06axcuXKvnc8BE9hSVITOO200+i6P231OAORJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSmsCePXuYNWsWr3rVqzjxxBO54oorKu7T74FIUhN4yUtewurVqxkyZAj79u3jtNNOY8GCBZx66qmF+3QGIklNICIYMmQI0HVPrH379hERFfXpDESS6ugT93+Cn/3nz6ra56SjJnHZrMv6bNfZ2cmMGTPYvHkzF110kbdzlySVp6WlhYceeoj29nbuv/9+Hn300Yr6cwYiSXVUzkyh1oYNG8acOXO4/fbbmTp1auF+nIFIUhPYvn07zz77LAAvvPACd911F5MmTaqoT2cgktQEtm3bxvnnn09nZyf79+/n7W9/O29605sq6tMAkaQmcPLJJ7N+/fqq9ukpLElSIQaIJKmQhgZIRMyPiE0RsTkiLu9le0TEtaXtD0fE9NL6cRFxd0RsjIjHIuKS+lcvSc2tYQESES3A54EFwBRgSURM6dFsATCx9LMU+EJpfQfwt5k5GTgVuKiXfSVJNdTIGcgsYHNmbsnMvcByYGGPNguBr2eXtcCwiBidmdsy80GAzNwJbATG1rN4SWp2jQyQscCT3Zbb+a8h0GebiGgDTgF+XP0SJUkH08gA6e0uXnk4bSJiCPAt4EOZ+VyvB4lYGhHrImLd9u3bCxcrSX8OOjs7OeWUUyr+Dgg0NkDagXHdlluBreW2iYiBdIXHNzPz2wc7SGYuy8yZmTlzxIgRVSlckvqra665hsmTJ1elr0YGyAPAxIiYEBGDgHOAFT3arADeVboa61Tg95m5LbruQfxlYGNm/lt9y5ak/qm9vZ3vf//7vPe9761Kfw37JnpmdkTExcAdQAvwlcx8LCLeX9p+HbASOBPYDOwGLizt/lrgncAjEfFQad1HM3NlHYcgSYft6Y99jD9srO7t3F8yeRKjPvrRPtt96EMf4pOf/CQ7d+6synEbeiuT0hv+yh7rruv2OoGLetnv/9L75yOSpF5873vfY+TIkcyYMYN77rmnKn16LyxJqqNyZgq1sGbNGlasWMHKlSvZs2cPzz33HOeddx433HBD4T69lYkkNYGPf/zjtLe388QTT7B8+XLOOOOMisIDDBBJUkGewpKkJjNnzhzmzJlTcT/OQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsTLeCWpSbS1tTF06FBaWloYMGAA69atq6g/A0SSmsjdd9/N8OHDq9KXp7AkSYU4A5GkOvrhTT/nt08+X9U+h48bwuvefkKf7SKCefPmERG8733vY+nSpRUd1wCRpCaxZs0axowZwzPPPMPcuXOZNGkSp59+euH+DBBJqqNyZgq1MmbMGABGjhzJokWLuP/++ysKED8DkaQmsGvXrj8+iXDXrl384Ac/YOrUqRX16QxEkprAb37zGxYtWgRAR0cH73jHO5g/f35FfRogktQEjjvuODZs2FDVPj2FJUkqxACRJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJDWJZ599lsWLFzNp0iQmT57Mj370o4r683sgktQkLrnkEubPn8/NN9/M3r172b17d0X9GSCS1ASee+457r33Xq6//noABg0axKBBgyrq0wCRpDq6+/plPPOrLVXtc+Sxx/GGCw59a/YtW7YwYsQILrzwQjZs2MCMGTO45pprOOKIIwof189AJKkJdHR08OCDD/KBD3yA9evXc8QRR3DVVVdV1KczEEmqo75mCrXS2tpKa2srs2fPBmDx4sUVB0hZM5CI2BARH42I4ys62n/td35EbIqIzRFxeS/bIyKuLW1/OCKml7uvJOn/GzVqFOPGjWPTpk0ArFq1iilTplTUZ7kzkLcA/wO4KSL2A/8buCkzf130wBHRAnwemAu0Aw9ExIrM/Gm3ZguAiaWf2cAXgNll7itJ6uazn/0s5557Lnv37uW4447jq1/9akX9lRUgmfkr4JPAJyNiIvAPwCeAlgqOPQvYnJlbACJiObAQ6B4CC4GvZ2YCayNiWESMBtrK2Ldqrv/bj/HCoIG16FpSE5jx5tfxTPvTDa1hYEswbdo01q1bV7U+y/4MJCLagLfTNRPpBD5S4bHHAk92W26na5bRV5uxZe4LQEQsBZYCjB8/vlCh+6OFFwZ0FtpXkjJgf2Rja9hf/eOXFSAR8WNgIHAT8LYXf/OvUPSyrucID9amnH27VmYuA5YBzJw5s9B/wXf/62VFdpMkADZu3MiosaMbXUbVHTJAIuLDpZe3Ai9+ZfGtEV3v35n5bxUcux0Y1225FdhaZptBZewrSaqhvq7CGlr6mQJ8ABhD1+mj95fWVeIBYGJETIiIQcA5wIoebVYA7ypdjXUq8PvM3FbmvpKkGjrkDCQzrwSIiB8A0zNzZ2n5n4D/qOTAmdkRERcDd9D1YfxXMvOxiHh/aft1wErgTGAzXTOgCw+1byX1SJIOT7kfoo8H9nZb3kvXlVAVycyVdIVE93XXdXudwEXl7itJqp9yb2XyDeD+iPiniLgC+DHwtdqVJUmqpk2bNjFt2rQ//hx55JFcffXVFfVZ7vdA/iUibgNeV1p1YWaur+jIkqS6eeUrX8lDDz0EQGdnJ2PHjmXRokUV9Vn290Ay80HgwYqOJklquFWrVnH88cdz7LHHVtSPN1OUpDp69tZfsnfrrqr2OWjMEQx7c/m3Kly+fDlLliyp+Ljezl2SmsjevXtZsWIFb3vb2yruyxmIJNXR4cwUauG2225j+vTpHHPMMRX35QxEkprIjTfeWJXTV2CASFLT2L17N3feeSdnnXVWVfrzFJYkNYmXvexl7Nixo2r9OQORJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSmsRnPvMZTjzxRKZOncqSJUvYs2dPRf0ZIJLUBJ566imuvfZa1q1bx6OPPkpnZyfLly+vqE8DRJKaREdHBy+88AIdHR3s3r2bMWPGVNSf30SXpDq67bbbePrpp6va56hRo1iwYMEh24wdO5ZLL72U8ePH89KXvpR58+Yxb968io7rDESSmsDvfvc7brnlFh5//HG2bt3Krl27uOGGGyrq0xmIJNVRXzOFWrnrrruYMGECI0aMAOCss87ivvvu47zzzivcpzMQSWoC48ePZ+3atezevZvMZNWqVUyePLmiPg0QSWoCs2fPZvHixUyfPp2TTjqJ/fv3s3Tp0or69BSWJDWJK6+8kiuvvLJq/TkDkSQVYoBIkgoxQCSpDjKz0SX06XBrNEAkqcYGDx7Mjh07/qRDJDPZsWMHgwcPLnsfP0SXpBprbW2lvb2d7du3N7qUQxo8eDCtra1ltzdAJKnGBg4cyIQJExpdRtU15BRWRBwVEXdGxC9Kf778IO3mR8SmiNgcEZd3W/+piPhZRDwcEd+JiGF1K16SBDTuM5DLgVWZORFYVVo+QES0AJ8HFgBTgCURMaW0+U5gamaeDPwc+Lu6VC1J+qNGBchC4Gul118D3tpLm1nA5szckpl7geWl/cjMH2RmR6ndWqD8k3aSpKpoVIAck5nbAEp/juylzVjgyW7L7aV1Pb0buK3qFUqSDqlmH6JHxF3AqF42/X25XfSy7oBr4CLi74EO4JuHqGMpsBS6biYmSaqOmgVIZv7VwbZFxG8iYnRmbouI0cAzvTRrB8Z1W24Ftnbr43zgTcAb8xAXV2fmMmAZwMyZM/90L8KWpH6mUaewVgDnl16fD9zSS5sHgIkRMSEiBgHnlPYjIuYDlwFvyczddahXktRDowLkKmBuRPwCmFtaJiLGRMRKgNKH5BcDdwAbgZsy87HS/p8DhgJ3RsRDEXFdvQcgSc2uIV8kzMwdwBt7Wb8VOLPb8kpgZS/tXlHTAiVJffJeWJKkQgwQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKMUAkSYUYIJKkQgwQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKMUAkSYUYIJKkQgwQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKMUAkSYUYIJKkQgwQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKaUiARMRREXFnRPyi9OfLD9JufkRsiojNEXF5L9svjYiMiOG1r1qS1F2jZiCXA6sycyKwqrR8gIhoAT4PLACmAEsiYkq37eOAucCv61KxJOkAjQqQhcDXSq+/Bry1lzazgM2ZuSUz9wLLS/u96DPAR4CsYZ2SpINoVIAck5nbAEp/juylzVjgyW7L7aV1RMRbgKcyc0NfB4qIpRGxLiLWbd++vfLKJUkADKhVxxFxFzCql01/X24XvazLiHhZqY955XSSmcuAZQAzZ850tiJJVVKzAMnMvzrYtoj4TUSMzsxtETEaeKaXZu3AuG7LrcBW4HhgArAhIl5c/2BEzMrMp6s2AEnSITXqFNYK4PzS6/OBW3pp8wAwMSImRMQg4BxgRWY+kpkjM7MtM9voCprphock1VejAuQqYG5E/IKuK6muAoiIMRGxEiAzO4CLgTuAjcBNmflYg+qVJPVQs1NYh5KZO4A39rJ+K3Bmt+WVwMo++mqrdn2SpL75TXRJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCIjMbXUPdRMR24FcFdx8O/LaK5fQHjrk5OObmUMmYj83MET1XNlWAVCIi1mXmzEbXUU+OuTk45uZQizF7CkuSVIgBIkkqxAAp37JGF9AAjrk5OObmUPUx+xmIJKkQZyCSpEIMEElSIQZIDxExPyI2RcTmiLi8l+0REdeWtj8cEdMbUWc1lTHmc0tjfTgi7ouIVzWizmrqa8zd2v23iOiMiMX1rK/ayhlvRMyJiIci4rGI+D/1rrHayvh3/ZcRcWtEbCiN+cJG1FlNEfGViHgmIh49yPbqvn9lpj+lH6AF+CVwHDAI2ABM6dHmTOA2IIBTgR83uu46jPk1wMtLrxc0w5i7tVsNrAQWN7ruGv8dDwN+CowvLY9sdN11GPNHgU+UXo8A/hMY1OjaKxz36cB04NGDbK/q+5czkAPNAjZn5pbM3AssBxb2aLMQ+Hp2WQsMi4jR9S60ivocc2bel5m/Ky2uBVrrXGO1lfP3DPBB4FvAM/UsrgbKGe87gG9n5q8BMrMZxpzA0IgIYAhdAdJR3zKrKzPvpWscB1PV9y8D5EBjgSe7LbeX1h1um/7kcMfzHrp+g+nP+hxzRIwFFgHX1bGuWinn7/gE4OURcU9E/CQi3lW36mqjnDF/DpgMbAUeAS7JzP31Ka9hqvr+NaDicv68RC/rel7nXE6b/qTs8UTEG+gKkNNqWlHtlTPmq4HLMrOz6xfUfq2c8Q4AZgBvBF4K/Cgi1mbmz2tdXI2UM+b/DjwEnAEcD9wZET/MzOdqXFsjVfX9ywA5UDswrttyK12/nRxum/6krPFExMnAl4AFmbmjTrXVSjljngksL4XHcODMiOjIzO/WpcLqKvff9W8zcxewKyLuBV4F9NcAKWfMFwJXZdeHA5sj4nFgEnB/fUpsiKq+f3kK60APABMjYkJEDALOAVb0aLMCeFfpaoZTgd9n5rZ6F1pFfY45IsYD3wbe2Y9/I+2uzzFn5oTMbMvMNuBm4G/6aXhAef+ubwFeFxEDIuJlwGxgY53rrKZyxvxrumZcRMQxwCuBLXWtsv6q+v7lDKSbzOyIiIuBO+i6iuMrmflYRLy/tP06uq7IORPYDOym67eYfqvMMf8jcDTw76XfyDuyH9/JtMwx/9koZ7yZuTEibgceBvYDX8rMXi8F7Q/K/Dv+Z+D6iHiErlM7l2Vmv77Fe0TcCMwBhkdEO3AFMBBq8/7lrUwkSYV4CkuSVIgBIkkqxACRJBVigEiSCjFAJEmFGCBSQRExLCL+ptvymIi4uUbHemtE/GMfbf41Is6oxfGl3ngZr1RQRLQB38vMqXU41n3AWw71PYWIOBb4YmbOq3U9EjgDkSpxFXB86Rkan4qIthefwxARF0TEd0vPm3g8Ii6OiA9HxPqIWBsRR5XaHR8Rt5duYPjDiJjU8yARcQLwh8z8bUQMLfU3sLTtyIh4IiIGZuavgKMjYlQd/xuoiRkgUnGXA7/MzGmZ+b962T6VrtukzwL+BdidmacAPwJevNvtMuCDmTkDuBT49176eS3wIEBm7gTuAf66tO0c4FuZua+0/GCpvVRz3spEqp27S2/4OyPi98CtpfWPACdHxBC6Htb1H93u+PuSXvoZDWzvtvwl4CPAd+m6FcX/7LbtGWBMtQYgHYoBItXOH7q93t9teT9d/+/9BfBsZk7ro58XgL98cSEz15ROl70eaOlxz6rBpfZSzXkKSypuJzC06M6l5048HhFvgz8+r7q3581vBF7RY93XgRuBr/ZYfwLQb2+CqP7FAJEKKj0XZU1EPBoRnyrYzbnAeyJiA/AYvT9a917glDjwyVbfBF5OV4gAUPpg/RXAuoK1SIfFy3ilfiAirgFuzcy7SsuLgYWZ+c5ubRYB0zPzHxpUppqMn4FI/cPH6HrIExHxWWABXc916G4A8Ok616Um5gxEklSIn4FIkgoxQCRJhRggkqRCDBBJUiEGiCSpkP8HsPNLWtpay0EAAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pldiff['dv'].plot.line(x=\"time (y)\")\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "tpdiff['dv'].plot.line(x=\"time (y)\")\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "swiftestOOF", + "language": "python", + "name": "swiftestoof" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/whm_swifter_comparison/tp.swifter.in b/examples/whm_swifter_comparison/tp.swifter.in index 4043c1929..a9fa06f46 100644 --- a/examples/whm_swifter_comparison/tp.swifter.in +++ b/examples/whm_swifter_comparison/tp.swifter.in @@ -1,13 +1,13 @@ 4 -100001 -2.894380502059049 0.2060633316227693 -0.5267473116107563 --0.36781773526648104 3.511709550412678 0.17870205470035164 -100002 -2.402157114026988 -2.063650689101573 1.221462187067896 -1.9929454155842872 1.7670860403833373 -1.3920313116840413 -100003 --1.76242073921186 -2.766072818539065 0.6998178789690445 -2.514640194836968 -1.5368452873925367 0.24681696899054972 -100004 --2.13688673996785 1.023684546777855 0.2293900047351895 --1.3918193851434775 -3.7994616097035703 0.2829665907639622 +101 +2.3071617894844269614 1.6438449758645010679 -0.37312906258436789875 +-2.256588666826445461 2.8302735208962828827 0.50519430783805206563 +102 +3.011471099377928784 -1.1061264985150089935 0.5067865823770466571 +0.69505215270382913404 2.5183263418638507098 -1.8031340524448678953 +103 +-0.51350730399144917104 -3.139963346661017951 0.7339670445581878422 +3.0598116277417892524 -0.1107568728194456082 -0.09922455469700767241 +104 +-2.070517783632789044 -0.7764919020604850175 0.27514297675486260042 +1.7817875607764876778 -3.94088558602991294 -0.09896621676031464546 diff --git a/examples/whm_swifter_comparison/tp.swiftest.in b/examples/whm_swifter_comparison/tp.swiftest.in index 01954c3d7..a9fa06f46 100644 Binary files a/examples/whm_swifter_comparison/tp.swiftest.in and b/examples/whm_swifter_comparison/tp.swiftest.in differ diff --git a/examples/whm_swifter_comparison/whm_swiftest_vs_swifter.ipynb b/examples/whm_swifter_comparison/whm_swiftest_vs_swifter.ipynb deleted file mode 100644 index 997defb80..000000000 --- a/examples/whm_swifter_comparison/whm_swiftest_vs_swifter.ipynb +++ /dev/null @@ -1,363 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import swiftestio as swio\n", - "from astroquery.jplhorizons import Horizons" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swifter file param.swifter.in\n" - ] - } - ], - "source": [ - "inparfile = 'param.swifter.in'\n", - "param = swio.read_swifter_param(inparfile)\n", - "swifterdat = swio.swifter2xr(param)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading Swiftest file param.swiftest.in\n" - ] - } - ], - "source": [ - "param_file_name = 'param.swiftest.in'\n", - "config = swio.read_swiftest_config(param_file_name)\n", - "swiftestdat = swio.swiftest2xr(config)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftestdat - swifterdat" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff = swiftdiff.rename({'time' : 'time (y)'})" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff['dr'] = np.sqrt(swiftdiff['px']**2 + swiftdiff['py']**2 + swiftdiff['pz']**2)\n", - "swiftdiff['dv'] = np.sqrt(swiftdiff['vx']**2 + swiftdiff['vy']**2 + swiftdiff['vz']**2)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['dr'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['dv'].sel(id=2).plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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INOAIWa2ERgSW8bMcsysBCD2Ivkk4GVgPfBnd18b2/8hoBmwwMxWm9mMsDsgIlJXY8aM4aKLLmLDhg3k5eXxxBNPMGXKFBYsWEDnzp1ZsGABU6b825tST1qRvIju7hXA4DjrtwGX1VguAUritOuU1gJFRNLgmWeeibt+4cKFIVeSGvokuoiIBKIAERGRQBQgIiISiAJEREQCUYCIiEggChAREQlEASIiEpK6Tud+77330qlTJ84//3xefvnlI+vffPNNevToQadOnfjRj37E4ck4vvzyS7797W/TqVMn+vfvz+bNm4/sM2zYMJo3b84VV1yRsv4oQEREQlKX6dzXrVtHcXExa9euZf78+fzwhz/k4MGDANx4443MnDmTjRs3snHjxiPHfOKJJzj77LMpLS3lxz/+MZMnTz5ynp/+9KfMnj07pf1RgIiIhKQu07nPnTuX0aNHc/rpp9O+fXs6derEihUrKC8vZ9euXVx00UWYGWPHjj1qn8PHGjlyJAsXLjwyOhk8eDDNmjVLaX+ims5dRCQyd20s493d+1J6zO5Nm/DzznW/NdGxpnPfunUrAwYMONIuLy+PrVu30rBhQ/Ly8v5t/eF92ratnoM2KyuLr3zlK1RUVNCyZcvA/ToejUBERE5C8SYZN7Njrj/ePumiEYiIZJwgI4V0OdZ07nl5eWzZ8v/vqVdWVkZOTg55eXmUlZX92/qa++Tl5VFVVcXnn3/+b5fMUkkjEBGRCB1rOvcrr7yS4uJivvzyS95//302btxIv379yM7OplmzZixfvhx358knnzxqn8PHmjNnDoMGDUrrCAR3z5hHnz59XEQy07p166IuwUePHu1t2rTxrKwsz83N9ccff9w/+eQTHzRokHfq1MkHDRrkFRUVR9rfc8893qFDB+/SpYuXlJQcWf/GG294YWGhd+jQwW+66SY/dOiQu7vv27fPR44c6R07dvSvfvWr/t577x3Z5+KLL/aWLVt648aNPTc31+fPnx+3xng/J2Clx3lONT/2zfxOOX379vWVK1dGXYaIRGD9+vUUFBREXcZJL97PyczedPe+tdvqEpaIiASiABERkUAUICIiEogCREREAlGAiIhIIAoQEREJRAEiIhKSqKZzX716NRdddBGFhYVccMEF/OlPf0pJfxQgIiIhiWo69zPOOIMnn3zyyLFuvfVWdu7cmXR/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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['pz'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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bw/AZZddxpIlS7j66qtDryVVNAIREQlBfn4+S5cuZffu3bg7CxYsoLCwaU+togAREQnBwIEDGT16NH379qV3797s37+fiROje7BVKugSlohISKZNm8a0adOiLiNlNAIREZFAFCAiIhKIAkRERAJRgIiISCAKEBERCUQBIiIigShARERCMmPGDIqLiykqKuKee+6JupykKUBEREKwevVqHnroIZYtW8aqVat47rnnWL9+fdRlJUUBIiISgrVr1zJo0CBOPvlksrKyuPDCC3n66aejLisp+ia6iGSc559/ng8++CClx+zYsSMlJSWH3V5cXMztt99OVVUVJ510EmVlZfTv3z+lNYRNASIiEoLCwkKmTJnCsGHDaNWqFeeccw5ZWU37LbhpVy8iEsCRRgrpNGHCBCZMmADAbbfdRl5eXiR1pIoCREQkJNu2baNDhw68//77PPXUU7z66qtRl5QUBYiISEguv/xyqqqqaN68Offddx+nnXZa1CUlRQEiIhKSRYsWRV1CSuljvCIiEogCREREAlGAiIhIIAoQEREJRAEiIiKBKEBERCSQSALEzNqa2XwzWx/7M+6Hoc1shJmtM7NyM5tab/3dZvYvM3vTzJ42szahFS8iEtC3v/1tOnToQHFx8cF1H3/8McOGDaN79+4MGzaMTz75JMIKGyeqEchUYIG7dwcWxJYPYWbNgPuAEqAXMNbMesU2zweK3f1s4N/AT0KpWkQkCddeey3z5s07ZN306dMZOnQo69evZ+jQoUyfPj2i6hovqgAZCcyK/TwL+EacNgOAcnff4O7VQGlsP9z9H+5eE2u3FGjaE8qISEa44IILaNu27SHr5syZw/jx4wEYP348zzzzTASVBRPVN9HPcPdKAHevNLMOcdrkApvqLVcAA+O0+zbw59SXKCLHq3//+2d8tnNtSo/ZulUhPXr8tNH7bd26lezsbACys7PZtm1bSutKp7QFiJm9CHSMs+n2RA8RZ503OMftQA3w+BHqmAhMBMjPz0/w1CIicjRpCxB3/8/DbTOzrWaWHRt9ZAPxIrcC6FRvOQ/YUu8Y44FLgKHu7hyGu88EZgL079//sO1EJHMEGSmkyxlnnEFlZSXZ2dlUVlbSoUO8CzLHpqjugcwFxsd+Hg/MidPmNaC7mXU2sxbAmNh+mNkIYApwqbvvDqFeEZG0uPTSS5k1q+6W8KxZsxg5cmTEFSUuqgCZDgwzs/XAsNgyZpZjZmUAsZvkk4EXgLXAX9x9TWz/3wOtgflmttLMHgy7AyIijTV27FjOO+881q1bR15eHo888ghTp05l/vz5dO/enfnz5zN16hc+lHrMiuQmurtXAUPjrN8CXFRvuQwoi9OuW1oLFBFJgyeeeCLu+gULFoRcSWrom+giIhKIAkRERAJRgIiISCAKEBERCUQBIiIigShAREQkEAWIiEhIGjud+1133UW3bt0466yzeOGFFw6uf/311+nduzfdunXj+9//Pgcm4/j888/55je/Sbdu3Rg4cCAbN248uM+IESNo06YNl1xyScr6owAREQlJY6Zzf/vttyktLWXNmjXMmzePG2+8kdraWgBuuOEGZs6cyfr161m/fv3BYz7yyCOcdtpplJeX84Mf/IApU6YcPM+PfvQjZs+endL+KEBERELSmOnc58yZw5gxYzjxxBPp3Lkz3bp1Y9myZVRWVrJjxw7OO+88zIxx48Ydss+BY40ePZoFCxYcHJ0MHTqU1q1bp7Q/UU3nLiISmZ+ur2D1zj0pPWZxq5P4WffGP5rocNO5b968mUGDBh1sl5eXx+bNm2nevDl5eXlfWH9gn06d6uagzcrK4ktf+hJVVVW0a9cucL+ORCMQEZFjULxJxs3ssOuPtE+6aAQiIhknyEghXQ43nXteXh6bNv3/Z+pVVFSQk5NDXl4eFRUVX1hff5+8vDxqamr49NNPv3DJLJU0AhERidDhpnO/9NJLKS0t5fPPP+fdd99l/fr1DBgwgOzsbFq3bs3SpUtxdx599NFD9jlwrCeffJIhQ4akdQSCu2fMq1+/fi4imentt9+OugQfM2aMd+zY0bOysjw3N9cffvhh/+ijj3zIkCHerVs3HzJkiFdVVR1sf+edd3qXLl28R48eXlZWdnD9a6+95kVFRd6lSxefNGmS79+/393d9+zZ46NHj/auXbv6l7/8ZX/nnXcO7nP++ed7u3btvGXLlp6bm+vz5s2LW2O8vydgucd5TzU//MP8jjv9+/f35cuXR12GiERg7dq1FBYWRl3GMS/e35OZve7u/Ru21SUsEREJRAEiIiKBKEBERCQQBYiIiASiABERkUAUICIiEogCREQkJFFN575y5UrOO+88ioqKOPvss/nzn/+ckv4oQEREQhLVdO4nn3wyjz766MFj3XzzzWzfvj3p/ihARERCEtV07j169KB79+4A5OTk0KFDBz788MOk+6PJFEUk40x7dg1vb9mR0mP2yjmVO75e1Oj9wp7OfdmyZVRXV9O1a9fGd7IBBYiIyDEo3jRTyU7nXllZyTXXXMOsWbM44YTkL0ApQEQk4wQZKaRLWNO579ixg4svvpg777zzkJFNMnQPREQkQmFM515dXc2oUaMYN24cV1xxReqKjzdF7/H60nTuIpkrk6dznz17tmdlZfk555xz8LVixYq4NWo698PQdO4imUvTuSdG07mLiEjaRRIgZtbWzOab2frYn6cdpt0IM1tnZuVmNjXO9lvNzM2sXbz9RUQkfaIagUwFFrh7d2BBbPkQZtYMuA8oAXoBY82sV73tnYBhwPuhVCwiIoeIKkBGArNiP88CvhGnzQCg3N03uHs1UBrb74DfAj8GMucmjojIMSSqADnD3SsBYn92iNMmF9hUb7kitg4zuxTY7O6rjnYiM5toZsvNbHkqvrovIiJ10vZFQjN7EegYZ9PtiR4izjo3s5NjxxieyEHcfSYwE+o+hZXguUVE5CjSNgJx9/909+I4rznAVjPLBoj9uS3OISqATvWW84AtQFegM7DKzDbG1r9hZvHCSkTkmBHVdO7vvfce/fr1o0+fPhQVFfHggw+mpD9RXcKaC4yP/TwemBOnzWtAdzPrbGYtgDHAXHd/y907uHuBuxdQFzR93f2DMAoXEQkqquncs7OzWbJkCStXruSf//wn06dPZ8uWLUn3J6oAmQ4MM7P11H2SajqAmeWYWRmAu9cAk4EXgLXAX9x9TUT1iogkLarp3Fu0aMGJJ54I1I1S9u/fn5L+RDKZortXAUPjrN8CXFRvuQwoO8qxClJdn4gc556fCh+8ldpjduwNJdMbvVtY07lv2rSJiy++mPLycu6+++6DEzAmQ99EFxE5BsWbZiqZ6dw7derEm2++SXl5ObNmzWLr1q1J16jp3EUk8wQYKaRLWNO5H5CTk0NRURGLFi1i9OjRSdWuEYiISITCmM69oqKCPXv2APDJJ5+wePFizjrrrKRr1whERCQkY8eO5eWXX+ajjz4iLy+PadOmMXXqVK688koeeeQR8vPz+etf/wpAUVERV155Jb169SIrK4v77ruPZs2aAfDAAw9w7bXXsmfPHkpKSigpKQFgwoQJXHPNNXTr1o22bdtSWloK1M2we8sttxy8BHbrrbfSu3fvpPuj6dxFJCNoOvfEaDp3ERFJOwWIiIgEogAREZFAFCAiIhKIAkRERAJRgIiISCAKEBGRkEQ1nfsBO3bsIDc3l8mTJ6ekPwoQEZGQRDWd+wE//elPufDCC1PWHwWIiEhIoprOHepGLVu3bmX48IQe5poQTWUiIhnnl8t+yb8+/ldKj9mzbU+mDJhy9IYNhDGde9u2bbnllluYPXs2CxYsCNzHhjQCERE5BqVyOvf777+fiy666GC4pIpGICKScYKMFNIljOncX331VRYtWsT999/Pzp07qa6uplWrVgfvtwSlEYiISITCmM798ccf5/3332fjxo38+te/Zty4cUmHB2gEIiISmqimc08XTecuIhlB07knRtO5i4hI2ilAREQkEAWIiGSMTLpkH0Rj/34UICKSEVq2bElVVZVC5DDcnaqqKlq2bJnwPhl1E93MPgTeC7h7O+CjFJbTFKjPmSEj+ty+ffusn//85wUFBQUnufsJJ5xwwv6oawrT/v37j9hnd2fjxo17br/99o0ffvhhTYPNZ7p7+4b7ZFSAJMPMlsf7FMLxTH3ODOpzZkhHn3UJS0REAlGAiIhIIAqQxM2MuoAIqM+ZQX3ODCnvs+6BiIhIIBqBiIhIIAoQEREJRAHSgJmNMLN1ZlZuZlPjbDczuze2/U0z6xtFnamUQJ+vivX1TTNbYmbnRFFnKh2tz/XafdnMas1sdJj1pVoi/TWzwWa20szWmNn/hF1jqiXw3/WXzOxZM1sV6/N1UdSZSmb2BzPbZmarD7M9te9f7q5X7AU0A94BugAtgFVArwZtLgKeBwwYBPwz6rpD6PNXgNNiP5dkQp/rtVsIlAGjo647zf/GbYC3gfzYcoeo6w6hz7cBv4z93B74GGgRde1J9vsCoC+w+jDbU/r+pRHIoQYA5e6+wd2rgVJgZIM2I4FHvc5SoI2ZZYddaAodtc/uvsTdP4ktLgXyaNoS+XcG+B7wN2BbmMWlQSL9/RbwlLu/D+DumdBnB1pb3fNgW1EXIA2/gd2kuPsr1PXjcFL6/qUAOVQusKneckVsXWPbNCWN7c8E6n6DacqO2mczywVGAQ+GWFe6JPJv3AM4zcxeNrPXzWxcaNWlRyJ9/j1QCGwB3gJucvfjfXqTlL5/6YmEh7I46xp+zjmRNk1Jwv0xs69RFyDnp7Wi9Eukz/cAU9y9tu4X1CYtkf5mAf2AocBJwKtmttTd/53u4tIkkT7/L2AlMAToCsw3s0XuviPNtUUppe9fCpBDVQCd6i3nUffbSWPbNCUJ9cfMzgYeBkrcvSqk2tIlkT73B0pj4dEOuMjMatz9mVAqTK1E/7v+yN13AbvM7BXgHKCpBkgifb4OmO51NwfKzexdoCewLJwSI5HS9y9dwjrUa0B3M+tsZi2AMcDcBm3mAuNin2YYBHzq7pVhF5pCR+2zmeUDTwHXNOHfSOs7ap/dvbO7F7h7AfAkcGMTDQ9I7L/rOcB/mFmWmZ0MDATWhlxnKiXS5/epG3FhZmcAZwEbQq0yfCl9/9IIpB53rzGzycAL1H2K4w/uvsbMro9tf5C6T+RcBJQDu6n7LabJSrDP/w2cDtwf+428xpvwTKYJ9vm4kUh/3X2tmc0D3gT2Aw+7e9yPgjYFCf4b/wz4k5m9Rd2lnSnu3qSntTezJ4DBQDszqwDuAJpDet6/NJWJiIgEoktYIiISiAJEREQCUYCIiEggChAREQlEASIiIoEoQEQCMrM2ZnZjveUcM3syTef6hpn991Ha/NrMhqTj/CLx6GO8IgGZWQHwnLsXh3CuJcClR/qegpmdCTzk7sPTXY8IaAQikozpQNfYMzTuNrOCA89hMLNrzeyZ2PMm3jWzyWb2QzNbYWZLzaxtrF1XM5sXm8BwkZn1bHgSM+sBfO7uH5lZ69jxmse2nWpmG82subu/B5xuZh1D/DuQDKYAEQluKvCOu/dx9x/F2V5M3TTpA4CfA7vd/VzgVeDAbLczge+5ez/gVuD+OMf5KvAGgLt/BrwMXBzbNgb4m7vviy2/EWsvknaaykQkfV6KveF/ZmafAs/G1r8FnG1mrah7WNdf6834e2Kc42QDH9Zbfhj4MfAMdVNR/Fe9bduAnFR1QORIFCAi6fN5vZ/311veT93/eycA2929z1GOswf40oEFd18cu1x2IdCswZxVLWPtRdJOl7BEgvsMaB1059hzJ941syvg4POq4z1vfi3QrcG6R4EngD82WN8DaLKTIErTogARCSj2XJTFZrbazO4OeJirgAlmtgpYQ/xH674CnGuHPtnqceA06kIEgNiN9W7A8oC1iDSKPsYr0gSY2QzgWXd/MbY8Ghjp7tfUazMK6OvuP42oTMkwugci0jT8grqHPGFmvwNKqHuuQ31ZwG9CrksymEYgIiISiO6BiIhIIAoQEREJRAEiIiKBKEBERCQQBYiIiATy/wCOFJSakoouPQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['vx'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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RxoppMsrr7xCp06daNu2LQCXXXYZixcv5uqrrw69llTRCEREJAQdO3ZkyZIl7N69G3entLSUgoLGPbWKAkREJAQDBw5k9OjR9O3bl969e7N//34mTozuwVapoEtYIiIhueuuu7jrrruiLiNlNAIREZFAFCAiIhKIAkRERAJRgIiISCAKEBERCUQBIiIigShARERCMn36dHr16kVhYSH33Xdf1OUkTQEiIhKCVatW8cgjj7B06VJWrlzJiy++yLp166IuKykKEBGREKxZs4ZBgwZx8sknk5WVxYUXXshzzz0XdVlJ0TfRRSTjvPTSS3z88ccpPWb79u0pKio67PZevXpxxx13UFlZyUknnURJSQn9+/dPaQ1hU4CIiISgoKCAKVOmMGzYMFq0aME555xDVlbjfgtu3NWLiARwpJFCOk2YMIEJEyYAcPvtt5OXlxdJHamiABERCcnWrVtp164dH330Ec8++yxvvPFG1CUlRQEiIhKSyy+/nMrKSpo2bcqDDz7IaaedFnVJSVGAiIiEZOHChVGXkFL6GK+IiASiABERkUAUICIiEogCREREAlGAiIhIIAoQEREJJJIAMbPWZjbfzNbF/oz7YWgzG2Fma82szMym1ll/r5n9w8zeMbPnzKxVaMWLiAR0/fXX065dO3r16nVw3WeffcawYcPo1q0bw4YN4/PPP4+wwoaJagQyFSh1925AaWz5EGbWBHgQKAJ6AmPNrGds83ygl7ufDfwT+M9QqhYRScK1117LvHnzDlk3bdo0hg4dyrp16xg6dCjTpk2LqLqGiypARgKzYj/PAr4Vp80AoMzd17t7FVAc2w93/5u7V8faLQEa94QyIpIRLrjgAlq3bn3Iujlz5jB+/HgAxo8fz/PPPx9BZcFE9U30M9y9AsDdK8ysXZw2ucDGOsvlwMA47a4H/pj6EkXkePXPf/6MHTvXpPSYLVsU0L37Txu835YtW8jOzgYgOzubrVu3prSudEpbgJjZK0D7OJvuSPQQcdZ5vXPcAVQDTx2hjonARICOHTsmeGoRETmatAWIu//74baZ2RYzy46NPrKBeJFbDnSos5wHbK5zjPHAJcBQd3cOw91nAjMB+vfvf9h2IpI5gowU0uWMM86goqKC7OxsKioqaNcu3gWZY1NU90DmAuNjP48H5sRp8ybQzcw6mVkzYExsP8xsBDAFuNTdd4dQr4hIWlx66aXMmlV7S3jWrFmMHDky4ooSF1WATAOGmdk6YFhsGTPLMbMSgNhN8snAy8Aa4E/uvjq2/++AlsB8M1thZjPC7oCISEONHTuW8847j7Vr15KXl8djjz3G1KlTmT9/Pt26dWP+/PlMnfovH0o9ZkVyE93dK4GhcdZvBi6qs1wClMRp1zWtBYqIpMHTTz8dd31paWnIlaSGvokuIiKBKEBERCQQBYiIiASiABERkUAUICIiEogCREREAlGAiIiEpKHTud9zzz107dqVs846i5dffvng+rfeeovevXvTtWtXfvCDH3BgMo4vv/ySb3/723Tt2pWBAweyYcOGg/uMGDGCVq1acckll6SsPwoQEZGQNGQ69/fee4/i4mJWr17NvHnzuOmmm6ipqQHgxhtvZObMmaxbt45169YdPOZjjz3GaaedRllZGT/84Q+ZMmXKwfP8+Mc/Zvbs2SntjwJERCQkDZnOfc6cOYwZM4YTTzyRTp060bVrV5YuXUpFRQXbt2/nvPPOw8wYN27cIfscONbo0aMpLS09ODoZOnQoLVu2TGl/oprOXUQkMj9dV86qnXtSesxeLU7iZ90a/miiw03nvmnTJgYNGnSwXV5eHps2baJp06bk5eX9y/oD+3ToUDsHbVZWFl/5yleorKykTZs2gft1JBqBiIgcg+JNMm5mh11/pH3SRSMQEck4QUYK6XK46dzz8vLYuPH/P1OvvLycnJwc8vLyKC8v/5f1dffJy8ujurqaL7744l8umaWSRiAiIhE63HTul156KcXFxXz55Zd88MEHrFu3jgEDBpCdnU3Lli1ZsmQJ7s4TTzxxyD4HjvXMM88wZMiQtI5AcPeMefXr189FJDO99957UZfgY8aM8fbt23tWVpbn5ub6o48+6p9++qkPGTLEu3bt6kOGDPHKysqD7e+++27v3Lmzd+/e3UtKSg6uf/PNN72wsNA7d+7skyZN8v3797u7+549e3z06NHepUsX/+pXv+rvv//+wX3OP/98b9OmjTdv3txzc3N93rx5cWuM9/cELPM476nmh3+Y33Gnf//+vmzZsqjLEJEIrFmzhoKCgqjLOObF+3sys7fcvX/9trqEJSIigShAREQkEAWIiIgEogAREZFAFCAiIhKIAkRERAJRgIiIhCSq6dxXrFjBeeedR2FhIWeffTZ//OMfU9If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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['vy'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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EYiISAgKCgpYunQpu3fvxt1ZsGABRUVNe2oVBYiISAgGDhzI6NGj6du3L71792b//v1MnBjdg61SQZewRERCcuedd3LnnXdGXUbKaAQiIiKBKEBERCQQBYiIiASiABERkUAUICIiEogCREREAlGAiIiEZNq0afTq1Yvi4mLuvffeqMtJmgJERCQEq1ev5qGHHmLZsmWsWrWK5557jvXr10ddVlIUICIiIVi7di2DBg3i5JNPJisri4suuoinn3466rKSom+ii0jGef755/nggw9SeswOHTpQUlJy2O29evXi9ttvp6qqipNOOomysjL69++f0hrCpgAREQlBUVERkydPZtiwYbRq1Ypzzz2XrKym/RbctKsXEQngSCOFdJowYQITJkwA4LbbbiM/Pz+SOlJFASIiEpJt27aRnZ3N+++/z1NPPcWrr74adUlJUYCIiITkiiuuoKqqiubNm3P//fdz+umnR11SUhQgIiIhWbRoUdQlpJQ+xisiIoEoQEREJBAFiIiIBKIAERGRQBQgIiISiAJEREQCiSRAzKytmc03s/WxP+N+GNrMRpjZOjMrN7Mp9dbfY2b/MLM3zexpM2sTWvEiIgF9/etfJzs7m169eh1c9/HHHzNs2DC6devGsGHD+OSTTyKssHGiGoFMARa4ezdgQWz5EGbWDLgfKAF6AmPNrGds83ygl7ufA/wT+O9QqhYRScJ1113HvHnzDlk3depUhg4dyvr16xk6dChTp06NqLrGiypARgIzYz/PBL4Sp80AoNzdN7h7NVAa2w93/6u718TaLQWa9oQyIpIRLrzwQtq2bXvIujlz5jB+/HgAxo8fzzPPPBNBZcFE9U30M929EsDdK80sO06bPGBTveUKYGCcdl8H/pD6EkXkePXPf/6Ez3auTekxW7cqonv3HzV6v61bt5KTkwNATk4O27ZtS2ld6ZS2ADGzF4EOcTbdnugh4qzzBue4HagBnjhCHROBiQAFBQUJnlpERI4mbQHi7v9xuG1mttXMcmKjjxwgXuRWAB3rLecDW+odYzxwKTDU3Z3DcPcZwAyA/v37H7adiGSOICOFdDnzzDOprKwkJyeHyspKsrPjXZA5NkV1D2QuMD7283hgTpw2rwHdzKyTmbUAxsT2w8xGAJOBy9x9dwj1ioikxWWXXcbMmXW3hGfOnMnIkSMjrihxUQXIVGCY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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "swiftdiff['vz'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/python/swiftest/swiftest/init_cond.py b/python/swiftest/swiftest/init_cond.py index e9b32bda0..6e5048c0f 100644 --- a/python/swiftest/swiftest/init_cond.py +++ b/python/swiftest/swiftest/init_cond.py @@ -5,7 +5,7 @@ from datetime import date import xarray as xr -def solar_system_horizons(plname, param, ephemerides_start_date, ds): +def solar_system_horizons(plname, idval, param, ephemerides_start_date, ds): """ Initializes a Swiftest dataset containing the major planets of the Solar System at a particular data from JPL/Horizons @@ -36,10 +36,15 @@ def solar_system_horizons(plname, param, ephemerides_start_date, ds): 'Pluto': '9' } - if plname not in planetid: - print(f"{plname} not found or not yet supported") - print("Valid inputs are: ".join(f"{key}" for key, value in planetid.items())) - return + if plname in planetid: + ispl = True + else: + ispl = False + print(f"\nMassive body {plname} not found or not yet supported") + print("This will be created as a massless test particle") + if idval is None: + print("ID value required for this input type") + return # Planet MSun/M ratio MSun_over_Mpl = { @@ -97,6 +102,12 @@ def solar_system_horizons(plname, param, ephemerides_start_date, ds): plab.append('capom') plab.append('omega') plab.append('capm') + tlab.append('a') + tlab.append('e') + tlab.append('inc') + tlab.append('capom') + tlab.append('omega') + tlab.append('capm') elif param['OUT_FORM'] == 'EL': plab.append('px') plab.append('py') @@ -104,20 +115,31 @@ def solar_system_horizons(plname, param, ephemerides_start_date, ds): plab.append('vx') plab.append('vy') plab.append('vz') + tlab.append('px') + tlab.append('py') + tlab.append('pz') + tlab.append('vx') + tlab.append('vy') + tlab.append('vz') plab.append('Rhill') dims = ['time', 'id', 'vec'] t = np.array([0.0]) key = plname - val = planetid[key] + if ispl: + val = planetid[key] + else: + val = -1 if key == "Sun" : # Create central body + print("Creating the Sun as a central body") cb = [] cbframe = np.expand_dims(cvec.T, axis=0) cbxr = xr.DataArray(cbframe, dims=dims, coords={'time': t, 'id': cbid, 'vec': clab}) cbds = cbxr.to_dataset(dim='vec') ds = xr.combine_by_coords([ds, cbds]) else: # Fetch solar system ephemerides from Horizons + print(f"Fetching ephemerides data for {key} from JPL/Horizons") pl = [] p1 = [] p2 = [] @@ -136,9 +158,14 @@ def solar_system_horizons(plname, param, ephemerides_start_date, ds): GMpl = [] pldata = {} - pldata[key] = Horizons(id=val, id_type='majorbody', location='@sun', - epochs={'start': ephemerides_start_date, 'stop': ephemerides_end_date, - 'step': ephemerides_step}) + if ispl: + pldata[key] = Horizons(id=val, id_type='majorbody', location='@sun', + epochs={'start': ephemerides_start_date, 'stop': ephemerides_end_date, + 'step': ephemerides_step}) + else: + pldata[key] = Horizons(id=key, id_type='smallbody', location='@sun', + epochs={'start': ephemerides_start_date, 'stop': ephemerides_end_date, + 'step': ephemerides_step}) if param['OUT_FORM'] == 'XV': p1.append(pldata[key].vectors()['x'][0] * DCONV) p2.append(pldata[key].vectors()['y'][0] * DCONV) @@ -165,12 +192,20 @@ def solar_system_horizons(plname, param, ephemerides_start_date, ds): p10.append(pldata[key].vectors()['vx'][0] * VCONV) p11.append(pldata[key].vectors()['vy'][0] * VCONV) p12.append(pldata[key].vectors()['vz'][0] * VCONV) - Rhill.append(pldata[key].elements()['a'][0] * (3 * MSun_over_Mpl[key]) ** (-THIRDLONG)) - Rpl.append(planetradius[key] * DCONV) - GMpl.append(GMcb[0] / MSun_over_Mpl[key]) - # Generate planet value vectors - plid = np.array([planetid[key]], dtype=int) - pvec = np.vstack([p1, p2, p3, p4, p5, p6, GMpl, Rpl, p7, p8, p9, p10, p11, p12, Rhill]) + if ispl: + Rhill.append(pldata[key].elements()['a'][0] * (3 * MSun_over_Mpl[key]) ** (-THIRDLONG)) + Rpl.append(planetradius[key] * DCONV) + GMpl.append(GMcb[0] / MSun_over_Mpl[key]) + # Generate planet value vectors + pvec = np.vstack([p1, p2, p3, p4, p5, p6, GMpl, Rpl, p7, p8, p9, p10, p11, p12, Rhill]) + else: + pvec = np.vstack([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12]) + plab = tlab.copy() + + if idval is None: + plid = np.array([planetid[key]], dtype=int) + else: + plid = np.array([idval], dtype=int) # Prepare frames by adding an extra axis for the time coordinate plframe = np.expand_dims(pvec.T, axis=0) diff --git a/python/swiftest/swiftest/io.py b/python/swiftest/swiftest/io.py index 03c6506c4..a2eef84fd 100644 --- a/python/swiftest/swiftest/io.py +++ b/python/swiftest/swiftest/io.py @@ -5,6 +5,8 @@ import sys import tempfile +newfeaturelist = ("FRAGMENTATION", "ROTATION", "TIDES", "ENERGY", "GR", "YARKOVSKY", "YORP" ) + def real2float(realstr): """ Converts a Fortran-generated ASCII string of a real value into a numpy float type. Handles cases where double precision @@ -288,8 +290,8 @@ def write_labeled_param(param, param_file_name): ptmp = param.copy() # Print the list of key/value pairs in the preferred order for key in keylist: - val = ptmp.pop(key) - print(f"{key:<16} {val}", file=outfile) + val = ptmp.pop(key, None) + if val is not None: print(f"{key:<16} {val}", file=outfile) # Print the remaining key/value pairs in whatever order for key, val in ptmp.items(): print(f"{key:<16} {val}", file=outfile) @@ -636,7 +638,7 @@ def swiftest_xr2infile(ds, param, framenum=-1): framenum : int Time frame to use to generate the initial conditions. If this argument is not passed, the default is to use the last frame in the dataset. param : dict - Swiftest paramuration parameters. This method uses the names of the cb, pl, and tp files from the paramuration + Swiftest input parameters. This method uses the names of the cb, pl, and tp files from the input Returns ------- @@ -717,6 +719,69 @@ def swiftest_xr2infile(ds, param, framenum=-1): else: print(f"{param['IN_TYPE']} is an unknown file type") + +def swifter_xr2infile(ds, param, framenum=-1): + """ + Writes a set of Swifter input files from a single frame of a Swiftest xarray dataset + + Parameters + ---------- + ds : xarray dataset + Dataset containing Swifter n-body data in XV format + framenum : int + Time frame to use to generate the initial conditions. If this argument is not passed, the default is to use the last frame in the dataset. + param : dict + Swifter input parameters. This method uses the names of the pl and tp files from the input + + Returns + ------- + A set of input files for a Swifter run + """ + frame = ds.isel(time=framenum) + cb = frame.where(frame.id == 0, drop=True) + pl = frame.where(frame.id > 0, drop=True) + pl = pl.where(np.invert(np.isnan(pl['Mass'])), drop=True).drop_vars(['J_2', 'J_4']) + tp = frame.where(np.isnan(frame['Mass']), drop=True).drop_vars(['Mass', 'Radius', 'J_2', 'J_4']) + + GMSun = np.double(cb['Mass']) + RSun = np.double(cb['Radius']) + param['J2'] = np.double(cb['J_2']) + param['J4'] = np.double(cb['J_4']) + param['RHILL_PRESENT'] = "YES" + + if param['IN_TYPE'] == 'ASCII': + # Swiftest Central body file + plfile = open(param['PL_IN'], 'w') + print(pl.id.count().values + 1, file=plfile) + print(cb.id.values[0], cb['Mass'].values[0], file=plfile) + print('0.0 0.0 0.0', file=plfile) + print('0.0 0.0 0.0', file=plfile) + for i in pl.id: + pli = pl.sel(id=i) + if param['RHILL_PRESENT'] == "YES": + print(i.values, pli['Mass'].values, pli['Rhill'].values, file=plfile) + else: + print(i.values, pli['Mass'].values, file=plfile) + if param['CHK_CLOSE'] == "YES": + print(pli['Radius'].values, file=plfile) + print(pli['px'].values, pli['py'].values, pli['pz'].values, file=plfile) + print(pli['vx'].values, pli['vy'].values, pli['vz'].values, file=plfile) + plfile.close() + + # TP file + tpfile = open(param['TP_IN'], 'w') + print(tp.id.count().values, file=tpfile) + for i in tp.id: + tpi = tp.sel(id=i) + print(i.values, file=tpfile) + print(tpi['px'].values, tpi['py'].values, tpi['pz'].values, file=tpfile) + print(tpi['vx'].values, tpi['vy'].values, tpi['vz'].values, file=tpfile) + tpfile.close() + else: + # Now make Swiftest files + print(f"{param['IN_TYPE']} is an unknown input file type") + + def swift2swifter(swift_param, plname="", tpname="", conversion_questions={}): swifter_param = {} intxt = conversion_questions.get('RHILL', None) @@ -921,8 +986,8 @@ def swift2swifter(swift_param, plname="", tpname="", conversion_questions={}): def swifter2swiftest(swifter_param, plname="", tpname="", cbname="", conversion_questions={}): swiftest_param = swifter_param.copy() # Pull additional feature status from the conversion_questions dictionary - featurelist = ("FRAGMENTATION", "ROTATION", "TIDES", "ENERGY", "GR", "YARKOVSKY", "YORP" ) - for key in featurelist: + + for key in newfeaturelist: swiftest_param[key] = conversion_questions.get(key, "NO") # Convert the PL file if plname == '': @@ -989,6 +1054,7 @@ def swifter2swiftest(swifter_param, plname="", tpname="", cbname="", conversion_ tpnew = open(swiftest_param['TP_IN'], 'w') except IOError: print(f"Cannot write to file {swiftest_param['TP_IN']}") + return swifter_param print(f"Converting TP file: {swifter_param['TP_IN']} -> {swiftest_param['TP_IN']}") try: @@ -1110,6 +1176,7 @@ def swifter2swiftest(swifter_param, plname="", tpname="", cbname="", conversion_ cbnew.close() except IOError: print(f"Cannot write to file {swiftest_param['CB_IN']}") + return swifter_param MTINY = conversion_questions.get('MTINY', None) if not MTINY: @@ -1151,4 +1218,26 @@ def swift2swiftest(swift_param, plname="", tpname="", cbname="", conversion_ques swiftest_param = swifter2swiftest(swifter_param, plname, tpname, cbname, conversion_questions) swiftest_param['! VERSION'] = "Swiftest parameter file converted from Swift" return swiftest_param - \ No newline at end of file + +def swiftest2swifter_param(swiftest_param, J2=0.0, J4=0.0): + swifter_param = swiftest_param + CBIN = swifter_param.pop("CB_IN", None) + MTINY = swifter_param.pop("MTINY", None) + MU2KG = swifter_param.pop("MU2KG", 1.0) + DU2M = swifter_param.pop("DU2M", 1.0) + TU2S = swifter_param.pop("TU2S", 1.0) + GR = swifter_param.pop("GR", None) + if GR is not None: + if GR == 'YES': + swifter_param['C'] = swiftest.einsteinC * np.longdouble(TU2S) / np.longdouble(DU2M) + for key in newfeaturelist: + tmp = swifter_param.pop(key, None) + swifter_param['J2'] = J2 + swifter_param['J4'] = J4 + swifter_param['RHILL_PRESENT'] = "YES" + swifter_param['CHK_CLOSE'] = "YES" + if swifter_param['OUT_STAT'] == "REPLACE": + swifter_param['OUT_STAT'] = "UNKNOWN" + swifter_param['! VERSION'] = "Swifter parameter file converted from Swiftest" + + return swifter_param \ No newline at end of file diff --git a/python/swiftest/swiftest/simulation_class.py b/python/swiftest/swiftest/simulation_class.py index 41d6c345f..e20ef05f7 100644 --- a/python/swiftest/swiftest/simulation_class.py +++ b/python/swiftest/swiftest/simulation_class.py @@ -48,11 +48,12 @@ def __init__(self, codename="Swiftest", param_file=""): 'YORP': "NO", 'MTINY' : "0.0" } + self.codename = codename if param_file != "" : self.read_param(param_file, codename) return - def add(self, plname, date=date.today().isoformat()): + def add(self, plname, date=date.today().isoformat(), idval=None): """ Adds a solar system body to an existing simulation DataSet. @@ -66,7 +67,7 @@ def add(self, plname, date=date.today().isoformat()): ------- self.ds : xarray dataset """ - self.ds = init_cond.solar_system_horizons(plname, self.param, date, self.ds) + self.ds = init_cond.solar_system_horizons(plname, idval, self.param, date, self.ds) return def read_param(self, param_file, codename="Swiftest"): @@ -84,13 +85,15 @@ def read_param(self, param_file, codename="Swiftest"): self.codename = "Unknown" return - def write_param(self, param_file): + def write_param(self, param_file, param=None): + if param is None: + param = self.param # Check to see if the parameter type matches the output type. If not, we need to convert - codename = self.param['! VERSION'].split()[0] + codename = param['! VERSION'].split()[0] if codename == "Swifter" or codename == "Swiftest": - io.write_labeled_param(self.param, param_file) + io.write_labeled_param(param, param_file) elif codename == "Swift": - io.write_swift_param(self.param, param_file) + io.write_swift_param(param, param_file) else: print('Cannot process unknown code type. Call the read_param method with a valid code name. Valid options are "Swiftest", "Swifter", or "Swift".') return @@ -119,7 +122,9 @@ def convert(self, param_file, newcodename="Swiftest", plname="pl.swiftest.in", t self.param = io.swift2swiftest(self.param, plname, tpname, cbname, conversion_questions) else: goodconversion = False - + else: + goodconversion = False + if goodconversion: self.write_param(param_file) else: @@ -163,7 +168,18 @@ def follow(self, codestyle="Swifter"): print('follow.out written') return fol - def save(self, param_file, framenum=-1): - io.swiftest_xr2infile(self.ds, self.param, framenum) - self.write_param(param_file) + def save(self, param_file, framenum=-1, codename="Swiftest"): + if codename == "Swiftest": + io.swiftest_xr2infile(self.ds, self.param, framenum) + self.write_param(param_file) + elif codename == "Swifter": + if self.codename == "Swiftest": + swifter_param = io.swiftest2swifter_param(self.param) + else: + swifter_param = self.param + io.swifter_xr2infile(self.ds, swifter_param, framenum) + self.write_param(param_file, param=swifter_param) + else: + print(f'Saving to {codename} not supported') + return \ No newline at end of file diff --git a/src/drift/drift.f90 b/src/drift/drift.f90 index 31afa8c08..8bba1a273 100644 --- a/src/drift/drift.f90 +++ b/src/drift/drift.f90 @@ -18,10 +18,10 @@ module pure elemental subroutine drift_one(mu, px, py, pz, vx, vy, vz, dt, iflag !! Adapted from Hal Levison and Martin Duncan's Swift routine drift_one.f implicit none ! Arguments - real(DP), intent(in) :: mu !! G * (Mcb + m), G = gravitational constant, Mcb = mass of central body, m = mass of body to drift - real(DP), intent(inout) :: px, py, pz, vx, vy, vz !! Position and velocity of body to drift - real(DP), intent(in) :: dt !! Step size - integer(I4B), intent(out) :: iflag !! iflag : error status flag for Danby drift (0 = OK, nonzero = ERROR) + real(DP), intent(in) :: mu !! G * (Mcb + m), G = gravitational constant, Mcb = mass of central body, m = mass of body to drift + real(DP), intent(inout) :: px, py, pz, vx, vy, vz !! Position and velocity of body to drift + real(DP), intent(in) :: dt !! Step size + integer(I4B), intent(out) :: iflag !! iflag : error status flag for Danby drift (0 = OK, nonzero = ERROR) ! Internals integer(I4B) :: i real(DP) :: dttmp diff --git a/src/gr/gr.f90 b/src/gr/gr.f90 index 6afc9f5ed..a778e3db2 100644 --- a/src/gr/gr.f90 +++ b/src/gr/gr.f90 @@ -11,11 +11,11 @@ subroutine gr_getaccb_ns_body(self, cb, param, agr, agr0) !! Adapted from David A. Minton's Swifter routine routine gr_getaccb_ns.f90 implicit none ! Arguments - class(swiftest_body), intent(inout) :: self - class(swiftest_cb), intent(inout) :: cb + class(swiftest_body), intent(inout) :: self + class(swiftest_cb), intent(inout) :: cb class(swiftest_parameters), intent(in) :: param - real(DP), dimension(:, :), intent(inout) :: agr - real(DP), dimension(NDIM), intent(out) :: agr0 + real(DP), dimension(:, :), intent(inout) :: agr + real(DP), dimension(NDIM), intent(out) :: agr0 ! Internals real(DP), dimension(NDIM) :: xh, vh real(DP) :: rmag, rdotv, vmag2 diff --git a/src/helio/helio_drift.f90 b/src/helio/helio_drift.f90 index 59f828425..ce55797bf 100644 --- a/src/helio/helio_drift.f90 +++ b/src/helio/helio_drift.f90 @@ -20,14 +20,16 @@ module subroutine helio_drift_pl(self, system, param, dt) integer(I4B) :: i !! Loop counter real(DP) :: rmag, vmag2, energy integer(I4B), dimension(:),allocatable :: iflag !! Vectorized error code flag - real(DP), dimension(:), allocatable :: dtp + real(DP), dimension(:), allocatable :: dtp, mu - associate(pl => self, npl => self%nbody) + associate(pl => self, npl => self%nbody, cb => system%cb) if (npl == 0) return allocate(iflag(npl)) iflag(:) = 0 allocate(dtp(npl)) + allocate(mu(npl)) + mu = cb%Gmass if (param%lgr) then do i = 1,npl @@ -40,7 +42,7 @@ module subroutine helio_drift_pl(self, system, param, dt) dtp(:) = dt end if - call drift_one(pl%mu(1:npl), pl%xh(1,1:npl), pl%xh(2,1:npl), pl%xh(3,1:npl), & + call drift_one(mu(1:npl), pl%xh(1,1:npl), pl%xh(2,1:npl), pl%xh(3,1:npl), & pl%vb(1,1:npl), pl%vb(2,1:npl), pl%vb(3,1:npl), & dtp(1:npl), iflag(1:npl)) if (any(iflag(1:npl) /= 0)) then @@ -56,7 +58,7 @@ module subroutine helio_drift_pl(self, system, param, dt) return end subroutine helio_drift_pl - module subroutine helio_drift_linear_pl(self, cb, dt, pt) + module subroutine helio_drift_linear_pl(self, cb, dt, lbeg) !! author: David A. Minton !! !! Perform linear drift of massive bodies due to barycentric momentum of Sun @@ -65,29 +67,30 @@ module subroutine helio_drift_linear_pl(self, cb, dt, pt) !! Adapted from Hal Levison's Swift routine helio_lindrift.f implicit none ! Arguments - class(helio_pl), intent(inout) :: self !! Helio massive body object - class(swiftest_cb), intent(in) :: cb !! Helio central body object - real(DP), intent(in) :: dt !! Stepsize - real(DP), dimension(:), intent(out) :: pt !! negative barycentric velocity of the central body + class(helio_pl), intent(inout) :: self !! Helio massive body object + class(helio_cb), intent(inout) :: cb !! Helio central bod + real(DP), intent(in) :: dt !! Stepsize + logical, intent(in) :: lbeg !! Argument that determines whether or not this is the beginning or end of the step ! Internals - integer(I4B) :: i - real(DP),dimension(NDIM) :: pttmp !intent(out) variables don't play nicely - !with openmp's reduction for some reason - - associate(npl => self%nbody, xh => self%xh, vb => self%vb, GMpl => self%Gmass, GMcb => cb%Gmass) - pttmp(:) = 0.0_DP - do i = 2, npl - pttmp(:) = pttmp(:) + GMpl(i) * vb(:,i) - end do - pttmp(:) = pttmp(:) / GMcb - do i = 2, npl - xh(:,i) = xh(:,i) + pttmp(:) * dt - end do - pt(:) = pttmp(:) + real(DP), dimension(NDIM) :: pt !! negative barycentric velocity of the central body + + associate(pl => self, npl => self%nbody) + pt(1) = sum(pl%Gmass(1:npl) * pl%vb(1,1:npl)) + pt(2) = sum(pl%Gmass(1:npl) * pl%vb(2,1:npl)) + pt(3) = sum(pl%Gmass(1:npl) * pl%vb(3,1:npl)) + pt(:) = pt(:) / cb%Gmass + pl%xh(1,1:npl) = pl%xh(1,1:npl) + pt(1) * dt + pl%xh(2,1:npl) = pl%xh(2,1:npl) + pt(2) * dt + pl%xh(3,1:npl) = pl%xh(3,1:npl) + pt(3) * dt + + if (lbeg) then + cb%ptbeg = pt(:) + else + cb%ptend = pt(:) + end if end associate return - end subroutine helio_drift_linear_pl module subroutine helio_drift_tp(self, system, param, dt) @@ -100,23 +103,22 @@ module subroutine helio_drift_tp(self, system, param, dt) implicit none ! Arguments class(helio_tp), intent(inout) :: self !! Helio test particle object - class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of - real(DP), intent(in) :: dt !! Stepsiz + real(DP), intent(in) :: dt !! Stepsize ! Internals integer(I4B) :: i !! Loop counter real(DP) :: rmag, vmag2, energy - real(DP), dimension(:), allocatable :: dtp + real(DP), dimension(:), allocatable :: dtp, mu integer(I4B), dimension(:),allocatable :: iflag !! Vectorized error code flag - associate(tp => self, ntp => self%nbody) + associate(tp => self, ntp => self%nbody, cb => system%cb) if (ntp == 0) return allocate(iflag(ntp)) allocate(dtp(ntp)) iflag(:) = 0 - - iflag(:) = 0 - allocate(dtp(ntp)) + allocate(mu(ntp)) + mu = cb%Gmass if (param%lgr) then do i = 1,ntp @@ -128,9 +130,9 @@ module subroutine helio_drift_tp(self, system, param, dt) else dtp(:) = dt end if - call drift_one(tp%mu(1:ntp), tp%xh(1,1:ntp), tp%xh(2,1:ntp), tp%xh(3,1:ntp), & - tp%vh(1,1:ntp), tp%vh(2,1:ntp), tp%vh(3,1:ntp), & - dtp(1:ntp), iflag(1:ntp)) + call drift_one(mu(1:ntp), tp%xh(1,1:ntp), tp%xh(2,1:ntp), tp%xh(3,1:ntp), & + tp%vb(1,1:ntp), tp%vb(2,1:ntp), tp%vb(3,1:ntp), & + dtp(1:ntp), iflag(1:ntp)) if (any(iflag(1:ntp) /= 0)) then tp%status = DISCARDED_DRIFTERR do i = 1, ntp @@ -142,7 +144,7 @@ module subroutine helio_drift_tp(self, system, param, dt) return end subroutine helio_drift_tp - module subroutine helio_drift_linear_tp(self, dt, pt) + module subroutine helio_drift_linear_tp(self, cb, dt, lbeg) !! author: David A. Minton !! !! Perform linear drift of test particles due to barycentric momentum of Sun @@ -152,15 +154,23 @@ module subroutine helio_drift_linear_tp(self, dt, pt) !! Adapted from Hal Levison's Swift routine helio_lindrift_tp.f implicit none ! Arguments - class(helio_tp), intent(inout) :: self !! Helio test particle data structure - real(DP), intent(in) :: dt !! Stepsize - real(DP), dimension(:), intent(in) :: pt !! negative barycentric velocity of the Sun - - associate(ntp => self%nbody, xh => self%xh, status => self%status) - where (status(1:ntp) == ACTIVE) - xh(1:ntp, 1) = xh(1:ntp, 1) + pt(1) * dt - xh(1:ntp, 2) = xh(1:ntp, 2) + pt(2) * dt - xh(1:ntp, 3) = xh(1:ntp, 3) + pt(3) * dt + class(helio_tp), intent(inout) :: self !! Helio test particleb object + class(helio_cb), intent(in) :: cb !! Helio central body + real(DP), intent(in) :: dt !! Stepsize + logical, intent(in) :: lbeg !! Argument that determines whether or not this is the beginning or end of the step + ! Internals + real(DP), dimension(NDIM) :: pt !! negative barycentric velocity of the central body + + associate(tp => self, ntp => self%nbody) + if (lbeg) then + pt(:) = cb%ptbeg + else + pt(:) = cb%ptend + end if + where (tp%status(1:ntp) == ACTIVE) + tp%xh(1, 1:ntp) = tp%xh(1, 1:ntp) + pt(1) * dt + tp%xh(2, 1:ntp) = tp%xh(2, 1:ntp) + pt(2) * dt + tp%xh(3, 1:ntp) = tp%xh(3, 1:ntp) + pt(3) * dt end where end associate diff --git a/src/helio/helio_getacch.f90 b/src/helio/helio_getacch.f90 index af6ab9e4d..4b598f204 100644 --- a/src/helio/helio_getacch.f90 +++ b/src/helio/helio_getacch.f90 @@ -1,7 +1,7 @@ submodule (helio_classes) s_helio_getacch use swiftest contains - module subroutine helio_getacch_pl(self, system, param, t) + module subroutine helio_getacch_pl(self, system, param, t, lbeg) !! author: David A. Minton !! !! Compute heliocentric accelerations of massive bodies @@ -14,26 +14,23 @@ module subroutine helio_getacch_pl(self, system, param, t) class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current simulation time - ! Internals - logical, save :: lmalloc = .true. - integer(I4B) :: i - real(DP) :: r2 - real(DP), dimension(:), allocatable, save :: irh - real(DP), dimension(:, :), allocatable, save :: xh_loc, aobl + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step associate(cb => system%cb, pl => self, npl => self%nbody) - pl%ahi(:,2:npl) = 0.0_DP call helio_getacch_int_pl(pl, t) - pl%ah(:,:) = pl%ahi(:,:) - if (param%loblatecb) call pl%obl_acc(cb) - if (param%lextra_force) call pl%user_getacch(system, param, t) - if (param%lgr) call pl%gr_getacch(param) + if (param%loblatecb) then + cb%aoblbeg = cb%aobl + call pl%accel_obl(system) + cb%aoblend = cb%aobl + end if + if (param%lextra_force) call pl%accel_user(system, param, t) + !if (param%lgr) call pl%gr_accel(param) end associate return end subroutine helio_getacch_pl - module subroutine helio_getacch_tp(self, system, param, t, xhp) + module subroutine helio_getacch_tp(self, system, param, t, lbeg) !! author: David A. Minton !! !! Compute heliocentric accelerations of test particles @@ -46,23 +43,19 @@ module subroutine helio_getacch_tp(self, system, param, t, xhp) class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets at the current substep + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step ! Internals - logical, save :: lmalloc = .true. - integer(I4B) :: i - real(DP) :: r2, mu - real(DP), dimension(:), allocatable, save :: irh, irht + logical, save :: lmalloc = .true. + integer(I4B) :: i + real(DP) :: r2, mu + real(DP), dimension(:), allocatable, save :: irh, irht - associate(tp => self, ntp => self%nbody, cb => system%cb, pl => system%pl, npl => system%pl%nbody) - select type(pl => system%pl) - class is (helio_pl) - self%ahi(:,:) = 0.0_DP - call helio_getacch_int_tp(tp, pl, t, xhp) - tp%ah(:,:) = tp%ahi(:,:) - if (param%loblatecb) call tp%obl_acc(cb) - if (param%lextra_force) call tp%user_getacch(system, param, t) - if (param%lgr) call tp%gr_getacch(param) - end select + associate(tp => self, ntp => self%nbody, cb => system%cb, npl => system%pl%nbody) + if (present(lbeg)) system%lbeg = lbeg + call helio_getacch_int_tp(tp, system, param, t) + if (param%loblatecb) call tp%accel_obl(system) + if (param%lextra_force) call tp%accel_user(system, param, t) + !if (param%lgr) call tp%gr_accel(param) end associate return end subroutine helio_getacch_tp @@ -84,15 +77,16 @@ subroutine helio_getacch_int_pl(pl, t) real(DP), dimension(NDIM) :: dx associate(npl => pl%nbody) - do i = 2, npl - 1 + pl%ah(:,:) = 0.0_DP + do i = 1, npl - 1 do j = i + 1, npl dx(:) = pl%xh(:,j) - pl%xh(:,i) rji2 = dot_product(dx(:), dx(:)) irij3 = 1.0_DP / (rji2 * sqrt(rji2)) faci = pl%Gmass(i) * irij3 facj = pl%Gmass(j) * irij3 - pl%ahi(:,i) = pl%ahi(:,i) + facj * dx(:) - pl%ahi(:,i) = pl%ahi(:,j) - faci * dx(:) + pl%ah(:,i) = pl%ah(:,i) + facj * dx(:) + pl%ah(:,j) = pl%ah(:,j) - faci * dx(:) end do end do end associate @@ -100,7 +94,7 @@ subroutine helio_getacch_int_pl(pl, t) return end subroutine helio_getacch_int_pl - subroutine helio_getacch_int_tp(tp, pl, t, xhp) + subroutine helio_getacch_int_tp(tp, system, param, t) !! author: David A. Minton !! !! Compute direct cross term heliocentric accelerations of test particles @@ -109,23 +103,31 @@ subroutine helio_getacch_int_tp(tp, pl, t, xhp) !! Adapted from Hal Levison's Swift routine getacch_ah3_tp.f implicit none ! Arguments - class(helio_tp), intent(inout) :: tp !! Helio test particle data structure - class(swiftest_pl), intent(inout) :: pl !! Helio massive body particle data structure - real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets + class(helio_tp), intent(inout) :: tp !! Helio test particle object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of + real(DP), intent(in) :: t !! Current times ! Internals - integer(I4B) :: i, j - real(DP) :: r2, fac - real(DP), dimension(NDIM) :: dx + integer(I4B) :: i, j + real(DP) :: r2, fac + real(DP), dimension(NDIM) :: dx + real(DP), dimension(:, :), allocatable :: xhp + + associate(ntp => tp%nbody, pl => system%pl, npl => system%pl%nbody, lbeg => system%lbeg) + if (lbeg) then + allocate(xhp, source=pl%xbeg) + else + allocate(xhp, source=pl%xend) + end if - associate(ntp => tp%nbody, npl => pl%nbody) + tp%ah(:,:) = 0.0_DP do i = 1, ntp if (tp%status(i) == ACTIVE) then - do j = 2, npl + do j = 1, npl dx(:) = tp%xh(:,i) - xhp(:,j) r2 = dot_product(dx(:), dx(:)) fac = pl%Gmass(j) / (r2 * sqrt(r2)) - tp%ahi(:,i) = tp%ahi(:,i) - fac * dx(:) + tp%ah(:,i) = tp%ah(:,i) - fac * dx(:) end do end if end do diff --git a/src/helio/helio_kick.f90 b/src/helio/helio_kick.f90 new file mode 100644 index 000000000..9d5cea3a6 --- /dev/null +++ b/src/helio/helio_kick.f90 @@ -0,0 +1,53 @@ +submodule(helio_classes) s_helio_kick + use swiftest +contains + module subroutine helio_kickvb_pl(self, dt) + !! author: David A. Minton + !! + !! Kick barycentric velocities of bodies + !! + !! Adapted from Martin Duncan and Hal Levison's Swift routine kickvh.f + !! Adapted from David E. Kaufmann's Swifter routine helio_kickvb.f90 + implicit none + ! Arguments + class(helio_pl), intent(inout) :: self !! Swiftest generic body object + real(DP), intent(in) :: dt !! Stepsize + ! Internals + integer(I4B) :: i + + associate(pl => self, npl => self%nbody) + if (npl ==0) return + do concurrent(i = 1:npl, pl%status(i) == ACTIVE) + pl%vb(:, i) = pl%vb(:, i) + pl%ah(:, i) * dt + end do + end associate + + return + + end subroutine helio_kickvb_pl + + module subroutine helio_kickvb_tp(self, dt) + !! author: David A. Minton + !! + !! Kick barycentric velocities of bodies + !! + !! Adapted from Martin Duncan and Hal Levison's Swift routine kickvh_tp.f + !! Adapted from David E. Kaufmann's Swifter routine helio_kickvb_tp.f90 + implicit none + ! Arguments + class(helio_tp), intent(inout) :: self !! Swiftest generic body object + real(DP), intent(in) :: dt !! Stepsize + ! Internals + integer(I4B) :: i + + associate(tp => self, ntp => self%nbody) + if (ntp ==0) return + do concurrent(i = 1:ntp, tp%status(i) == ACTIVE) + tp%vb(:, i) = tp%vb(:, i) + tp%ah(:, i) * dt + end do + end associate + + return + + end subroutine helio_kickvb_tp +end submodule s_helio_kick \ No newline at end of file diff --git a/src/helio/helio_setup.f90 b/src/helio/helio_setup.f90 deleted file mode 100644 index b31b43b26..000000000 --- a/src/helio/helio_setup.f90 +++ /dev/null @@ -1,39 +0,0 @@ -submodule(helio_classes) s_helio_setup - use swiftest -contains - module procedure helio_setup_pl - !! author: David A. Minton & Carlisle A. Wishard - !! - !! Allocate Helio planet structure - !! - !! Equivalent in functionality to David E. Kaufmann's Swifter routine helio_setup.f90 - implicit none - - !> Call allocation method for great-grandparent class (we don't need Jacobi variables from WHM/RMVS) - call setup_pl(self, n) - if (n <= 0) return - - allocate(self%ahi(NDIM, n)) - self%ahi(:,:) = 0.0_DP - return - end procedure helio_setup_pl - - module procedure helio_setup_tp - !! author: David A. Minton & Carlisle A. Wishard - !! - !! Allocate Helio test particle structure - !! - !! Equivalent in functionality to David E. Kaufmann's Swifter routine helio_setup.f90 - implicit none - - !> Call allocation method for great-grandparent class - call setup_tp(self, n) - if (n <= 0) return - - allocate(self%ahi(NDIM, n)) - self%ahi(:,:) = 0.0_DP - - return - end procedure helio_setup_tp - -end submodule s_helio_setup \ No newline at end of file diff --git a/src/helio/helio_step.f90 b/src/helio/helio_step.f90 index 53052fc9e..8557477f7 100644 --- a/src/helio/helio_step.f90 +++ b/src/helio/helio_step.f90 @@ -15,25 +15,12 @@ module subroutine helio_step_system(self, param, t, dt) real(DP), intent(in) :: t !! Simulation time real(DP), intent(in) :: dt !! Current stepsize - select type(system => self) - class is (helio_nbody_system) - select type(cb => self%cb) - class is (helio_cb) - select type(pl => self%pl) - class is (helio_pl) - select type(tp => self%tp) - class is (helio_tp) - call pl%set_rhill(cb) - call system%set_beg_end(xbeg = pl%xh) - call pl%step(system, param, t, dt) - if (tp%nbody > 0) then - call system%set_beg_end(xend = pl%xh) - call tp%step(system, param, t, dt) - end if - end select - end select - end select - end select + associate(system => self, cb => self%cb, pl => self%pl, tp => self%tp) + tp%lfirst = pl%lfirst + call pl%set_rhill(cb) + call pl%step(system, param, t, dt) + call tp%step(system, param, t, dt) + end associate return end subroutine helio_step_system @@ -54,24 +41,27 @@ module subroutine helio_step_pl(self, system, param, t, dt) ! Internals integer(I4B) :: i real(DP) :: dth, msys - real(DP), dimension(NDIM) :: ptbeg, ptend !! TODO: Incorporate these into the tp structure - logical, save :: lfirst = .true. - - associate(pl => self, cb => system%cb) - dth = 0.5_DP * dt - if (lfirst) then - call pl%vh2vb(cb) - lfirst = .false. - end if - call pl%lindrift(cb, dth, ptbeg) - call pl%getacch(system, param, t) - call pl%kickvb(dth) - call pl%drift(system, param, dt) - call pl%getacch(system, param, t + dt) - call pl%kickvb(dth) - call pl%lindrift(cb, dth, ptend) - call pl%vb2vh(cb) + if (self%nbody == 0) return + associate(pl => self) + select type(cb => system%cb) + class is (helio_cb) + dth = 0.5_DP * dt + if (pl%lfirst) then + call pl%vh2vb(cb) + pl%lfirst = .false. + end if + call pl%lindrift(cb, dth, lbeg=.true.) + call pl%accel(system, param, t) + call pl%kick(dth) + call pl%set_beg_end(xbeg = pl%xh) + call pl%drift(system, param, dt) + call pl%set_beg_end(xend = pl%xh) + call pl%accel(system, param, t + dt) + call pl%kick(dth) + call pl%lindrift(cb, dth, lbeg=.false.) + call pl%vb2vh(cb) + end select end associate return @@ -94,27 +84,28 @@ module subroutine helio_step_tp(self, system, param, t, dt) real(DP), intent(in) :: t !! Current simulation time real(DP), intent(in) :: dt !! Stepsiz ! Internals - logical, save :: lfirst = .true. !! Flag to indicate that this is the first call real(DP) :: dth !! Half step size - select type(system) - class is (helio_nbody_system) - associate(tp => self, cb => system%cb, pl => system%pl, xbeg => system%xbeg, xend => system%xend) + if (self%nbody == 0) return + + associate(tp => self) + select type(cb => system%cb) + class is (helio_cb) dth = 0.5_DP * dt - if (lfirst) then - call tp%vh2vb(vbcb = -tp%ptbeg) - lfirst = .false. + if (tp%lfirst) then + call tp%vh2vb(vbcb = -cb%ptbeg) + tp%lfirst = .false. end if - call tp%lindrift(dth, tp%ptbeg) - call tp%getacch(system, param, t, xbeg) - call tp%kickvb(dth) + call tp%lindrift(cb, dth, lbeg=.true.) + call tp%accel(system, param, t, lbeg=.true.) + call tp%kick(dth) call tp%drift(system, param, dt) - call tp%getacch(system, param, t + dt, xend) - call tp%kickvb(dth) - call tp%lindrift(dth, tp%ptend) - call tp%vb2vh(vbcb = -tp%ptend) - end associate - end select + call tp%accel(system, param, t + dt, lbeg=.false.) + call tp%kick(dth) + call tp%lindrift(cb, dth, lbeg=.false.) + call tp%vb2vh(vbcb = -cb%ptend) + end select + end associate return diff --git a/src/io/io.f90 b/src/io/io.f90 index 326b4950c..55789417b 100644 --- a/src/io/io.f90 +++ b/src/io/io.f90 @@ -264,20 +264,17 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) end if else if (self%lfragmentation) then - write(iomsg,*) 'This integrator does not support fragmentation.' - iostat = -1 - return + write(iomsg,*) 'This integrator does not support fragmentation. This parameter will be ignored.' end if if (mtiny_set) then - write(iomsg,*) 'This integrator does not support MTINY' - iostat = -1 + write(iomsg,*) 'This integrator does not support MTINY. This parameter will be ignored.' return end if end if if ((integrator == SYMBA) .or. (integrator == RINGMOONS) .or. (integrator == RMVS)) then if (.not.self%lclose) then - write(iomsg,*) 'This integrator requires CHK_CLOSE to be enabled' + write(iomsg,*) 'This integrator requires CHK_CLOSE to be enabled.' iostat = -1 return end if @@ -295,11 +292,10 @@ module subroutine io_param_reader(self, unit, iotype, v_list, iostat, iomsg) ! Determine if the GR flag is set correctly for this integrator select case(integrator) - case(WHM) + case(WHM, RMVS) write(*,*) "GR = ", self%lgr case default - write(iomsg, *) 'GR is implemented compatible with this integrator' - iostat = -1 + write(iomsg, *) 'GR is implemented compatible with this integrator. This parameter will be ignored.' end select iostat = 0 @@ -1084,7 +1080,7 @@ module subroutine io_write_discard(self, param) if (param%lgr) then select type(discards) class is (whm_tp) - call discards%gr_pv2vh(param) + call discards%pv2vh(param) end select end if write(LUN, HDRFMT) t, nsp, param%lbig_discard @@ -1101,7 +1097,7 @@ module subroutine io_write_discard(self, param) allocate(pltemp, source = pl) select type(pltemp) class is (whm_pl) - call pltemp%gr_pv2vh(param) + call pltemp%pv2vh(param) allocate(vh, source = pltemp%vh) end select deallocate(pltemp) @@ -1320,11 +1316,11 @@ module subroutine io_write_frame_system(self, iu, param) associate(vh => pl%vh, vht => tp%vh) select type(pl) class is (whm_pl) - call pl%gr_pv2vh(param) + call pl%pv2vh(param) end select select type(tp) class is (whm_tp) - call tp%gr_pv2vh(param) + call tp%pv2vh(param) end select end associate end if diff --git a/src/kick/kick.f90 b/src/kick/kick.f90 index 97a2b2bab..a54677dcd 100644 --- a/src/kick/kick.f90 +++ b/src/kick/kick.f90 @@ -1,7 +1,7 @@ submodule(swiftest_classes) s_kick use swiftest contains - module subroutine kick_vh_body(self, dt) + module subroutine kickvh_body(self, dt) !! author: David A. Minton !! !! Kick heliocentric velocities of bodies @@ -23,30 +23,6 @@ module subroutine kick_vh_body(self, dt) end associate return - end subroutine kick_vh_body + end subroutine kickvh_body - module subroutine kick_vb_body(self, dt) - !! author: David A. Minton - !! - !! Kick barycentric velocities of bodies - !! - !! Adapted from Martin Duncan and Hal Levison's Swift routine kickvh.f and kickvh_tp.f - !! Adapted from David E. Kaufmann's Swifter routine helio_kickvb.f90 and helio_kickvb_tp.f90 - implicit none - ! Arguments - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - real(DP), intent(in) :: dt !! Stepsize - ! Internals - integer(I4B) :: i - - associate(n => self%nbody, vb => self%vb, ah => self%ah, status => self%status) - if (n ==0) return - do concurrent(i = 1:n, status(i) == ACTIVE) - vb(:, i) = vb(:, i) + ah(:, i) * dt - end do - end associate - - return - - end subroutine kick_vb_body end submodule s_kick diff --git a/src/main/swiftest_driver.f90 b/src/main/swiftest_driver.f90 index b2384757a..4ed7cf3fe 100644 --- a/src/main/swiftest_driver.f90 +++ b/src/main/swiftest_driver.f90 @@ -14,7 +14,6 @@ program swiftest_driver integer(I4B) :: integrator !! Integrator type code (see swiftest_globals for symbolic names) character(len=:),allocatable :: param_file_name !! Name of the file containing user-defined parameters integer(I4B) :: ierr !! I/O error code - logical :: lfirst !! Flag indicating that this is the first time through the main loop integer(I8B) :: iloop !! Loop counter integer(I8B) :: idump !! Dump cadence counter integer(I8B) :: iout !! Output cadence counter @@ -22,7 +21,6 @@ program swiftest_driver real(DP) :: start_wall_time !! Wall clock time at start of execution real(DP) :: finish_wall_time !! Wall clock time when execution has finished integer(I4B) :: iu !! Unit number of binary file - integer(I4B) :: ntp, npl character(*),parameter :: statusfmt = '("Time = ", ES12.5, "; fraction done = ", F6.3, "; ' // & 'Number of active pl, tp = ", I5, ", ", I5)' @@ -43,7 +41,6 @@ program swiftest_driver istep_out => param%istep_out, & istep_dump => param%istep_dump) call nbody_system%initialize(param) - lfirst = .true. t = t0 iloop = 0 iout = istep_out @@ -57,8 +54,6 @@ program swiftest_driver !$ write(*,'(a,i3,/)') ' Number of threads = ', nthreads write(*, *) " *************** Main Loop *************** " do iloop = 1, LOOPMAX - ntp = nbody_system%tp%nbody - npl = nbody_system%pl%nbody !> Step the system forward in time call nbody_system%step(param, t, dt) diff --git a/src/modules/helio_classes.f90 b/src/modules/helio_classes.f90 index ad10018a2..d97a1608c 100644 --- a/src/modules/helio_classes.f90 +++ b/src/modules/helio_classes.f90 @@ -4,24 +4,25 @@ module helio_classes !! Definition of classes and methods specific to the Democratic Heliocentric Method !! Adapted from David E. Kaufmann's Swifter routine: helio.f90 use swiftest_globals - use rmvs_classes, only : rmvs_cb, rmvs_pl, rmvs_tp, rmvs_nbody_system + use swiftest_classes, only : swiftest_cb, swiftest_pl, swiftest_tp + use whm_classes, only : whm_nbody_system implicit none !******************************************************************************************************************************** ! helio_nbody_system class definitions and method interfaces !******************************************************************************************************************************** - type, public, extends(rmvs_nbody_system) :: helio_nbody_system + type, public, extends(whm_nbody_system) :: helio_nbody_system contains - private - procedure, public :: step => helio_step_system end type helio_nbody_system !******************************************************************************************************************************** ! helio_cb class definitions and method interfaces !******************************************************************************************************************************* !> Helio central body particle class - type, public, extends(rmvs_cb) :: helio_cb + type, public, extends(swiftest_cb) :: helio_cb + real(DP), dimension(NDIM) :: ptbeg !! negative barycentric velocity of the central body at the beginning of time step + real(DP), dimension(NDIM) :: ptend !! negative barycentric velocity of the central body at the end of time step contains end type helio_cb @@ -30,16 +31,16 @@ module helio_classes !******************************************************************************************************************************* !! Helio massive body particle class - type, public, extends(rmvs_pl) :: helio_pl + type, public, extends(swiftest_pl) :: helio_pl real(DP), dimension(:,:), allocatable :: ahi !! heliocentric acceleration due to interactions contains - procedure, public :: vh2vb => helio_coord_vh2vb_pl !! Convert massive bodies from heliocentric to barycentric coordinates (velocity only) - procedure, public :: vb2vh => helio_coord_vb2vh_pl !! Convert massive bodies from barycentric to heliocentric coordinates (velocity only) - procedure, public :: drift => helio_drift_pl !! Method for Danby drift in Democratic Heliocentric coordinates - procedure, public :: lindrift => helio_drift_linear_pl !! Method for linear drift of massive bodies due to barycentric momentum of Sun - procedure, public :: getacch => helio_getacch_pl !! Compute heliocentric accelerations of massive bodies - procedure, public :: setup => helio_setup_pl !! Constructor method - Allocates space for number of particles - procedure, public :: step => helio_step_pl !! Steps the body forward one stepsize + procedure, public :: vh2vb => helio_coord_vh2vb_pl !! Convert massive bodies from heliocentric to barycentric coordinates (velocity only) + procedure, public :: vb2vh => helio_coord_vb2vh_pl !! Convert massive bodies from barycentric to heliocentric coordinates (velocity only) + procedure, public :: drift => helio_drift_pl !! Method for Danby drift in Democratic Heliocentric coordinates + procedure, public :: lindrift => helio_drift_linear_pl !! Method for linear drift of massive bodies due to barycentric momentum of Sun + procedure, public :: accel => helio_getacch_pl !! Compute heliocentric accelerations of massive bodies + procedure, public :: kick => helio_kickvb_pl !! Kicks the barycentric velocities + procedure, public :: step => helio_step_pl !! Steps the body forward one stepsize end type helio_pl !******************************************************************************************************************************** @@ -47,18 +48,15 @@ module helio_classes !******************************************************************************************************************************* !! Helio test particle class - type, public, extends(rmvs_tp) :: helio_tp - real(DP), dimension(:,:), allocatable :: ahi !! heliocentric acceleration due to interactions - real(DP), dimension(NDIM) :: ptbeg !! negative barycentric velocity of the Sun at beginning of time step - real(DP), dimension(NDIM) :: ptend !! negative barycentric velocity of the Sun at beginning of time step + type, public, extends(swiftest_tp) :: helio_tp contains - procedure, public :: vh2vb => helio_coord_vh2vb_tp !! Convert test particles from heliocentric to barycentric coordinates (velocity only) - procedure, public :: vb2vh => helio_coord_vb2vh_tp !! Convert test particles from barycentric to heliocentric coordinates (velocity only) - procedure, public :: drift => helio_drift_tp !! Method for Danby drift in Democratic Heliocentric coordinates - procedure, public :: lindrift => helio_drift_linear_tp !! Method for linear drift of massive bodies due to barycentric momentum of Sun - procedure, public :: getacch => helio_getacch_tp !! Compute heliocentric accelerations of massive bodies - procedure, public :: setup => helio_setup_tp !! Constructor method - Allocates space for number of particles - procedure, public :: step => helio_step_tp !! Steps the body forward one stepsize + procedure, public :: vh2vb => helio_coord_vh2vb_tp !! Convert test particles from heliocentric to barycentric coordinates (velocity only) + procedure, public :: vb2vh => helio_coord_vb2vh_tp !! Convert test particles from barycentric to heliocentric coordinates (velocity only) + procedure, public :: drift => helio_drift_tp !! Method for Danby drift in Democratic Heliocentric coordinates + procedure, public :: lindrift => helio_drift_linear_tp !! Method for linear drift of massive bodies due to barycentric momentum of Sun + procedure, public :: accel => helio_getacch_tp !! Compute heliocentric accelerations of massive bodies + procedure, public :: kick => helio_kickvb_tp !! Kicks the barycentric velocities + procedure, public :: step => helio_step_tp !! Steps the body forward one stepsize end type helio_tp interface @@ -92,7 +90,7 @@ module subroutine helio_drift_pl(self, system, param, dt) use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters implicit none class(helio_pl), intent(inout) :: self !! Helio massive body object - class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: dt !! Stepsize end subroutine helio_drift_pl @@ -101,57 +99,58 @@ module subroutine helio_drift_tp(self, system, param, dt) use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters implicit none class(helio_tp), intent(inout) :: self !! Helio test particle object - class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: dt !! Stepsize end subroutine helio_drift_tp - module subroutine helio_drift_linear_pl(self, cb, dt, pt) - use swiftest_classes, only : swiftest_cb + module subroutine helio_drift_linear_pl(self, cb, dt, lbeg) implicit none - class(helio_pl), intent(inout) :: self !! Helio test particle data structure - class(swiftest_cb), intent(in) :: cb !! Helio central body data structure - real(DP), intent(in) :: dt !! Stepsize - real(DP), dimension(:), intent(out) :: pt !! negative barycentric velocity of the central body + class(helio_pl), intent(inout) :: self !! Helio massive body object + class(helio_cb), intent(inout) :: cb !! Helio central body object + real(DP), intent(in) :: dt !! Stepsize + logical, intent(in) :: lbeg !! Argument that determines whether or not this is the beginning or end of the step end subroutine helio_drift_linear_pl - module subroutine helio_drift_linear_tp(self, dt, pt) + module subroutine helio_drift_linear_tp(self, cb, dt, lbeg) implicit none - class(helio_tp), intent(inout) :: self !! Helio test particle data structure - real(DP), intent(in) :: dt !! Stepsize - real(DP), dimension(:), intent(in) :: pt !! negative barycentric velocity of the Sun + class(helio_tp), intent(inout) :: self !! Helio test particle object + class(helio_cb), intent(in) :: cb !! Helio nbody system object + real(DP), intent(in) :: dt !! Stepsize + logical, intent(in) :: lbeg !! Argument that determines whether or not this is the beginning or end of the step end subroutine helio_drift_linear_tp - module subroutine helio_getacch_pl(self, system, param, t) + module subroutine helio_getacch_pl(self, system, param, t, lbeg) use swiftest_classes, only : swiftest_parameters, swiftest_nbody_system implicit none - class(helio_pl), intent(inout) :: self !! Helio massive body particle data structure - class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object + class(helio_pl), intent(inout) :: self !! Helio massive body object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current simulation time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine helio_getacch_pl - module subroutine helio_getacch_tp(self, system, param, t, xhp) + module subroutine helio_getacch_tp(self, system, param, t, lbeg) use swiftest_classes, only : swiftest_parameters, swiftest_nbody_system implicit none - class(helio_tp), intent(inout) :: self !! Helio test particle data structure - class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object + class(helio_tp), intent(inout) :: self !! Helio test particle object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine helio_getacch_tp - module subroutine helio_setup_pl(self, n) + module subroutine helio_kickvb_pl(self, dt) implicit none class(helio_pl), intent(inout) :: self !! Helio massive body object - integer, intent(in) :: n !! Number of test particles to allocate - end subroutine helio_setup_pl + real(DP), intent(in) :: dt !! Stepsize + end subroutine helio_kickvb_pl - module subroutine helio_setup_tp(self,n) + module subroutine helio_kickvb_tp(self, dt) implicit none class(helio_tp), intent(inout) :: self !! Helio test particle object - integer, intent(in) :: n !! Number of test particles to allocate - end subroutine helio_setup_tp + real(DP), intent(in) :: dt !! Stepsize + end subroutine helio_kickvb_tp module subroutine helio_step_system(self, param, t, dt) use swiftest_classes, only : swiftest_parameters @@ -165,7 +164,7 @@ end subroutine helio_step_system module subroutine helio_step_pl(self, system, param, t, dt) use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters implicit none - class(helio_pl), intent(inout) :: self !! Helio massive body particle data structure + class(helio_pl), intent(inout) :: self !! Helio massive body particle object class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nboody system class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! Current simulation time @@ -175,7 +174,7 @@ end subroutine helio_step_pl module subroutine helio_step_tp(self, system, param, t, dt) use swiftest_classes, only : swiftest_cb, swiftest_parameters implicit none - class(helio_tp), intent(inout) :: self !! Helio test particle data structure + class(helio_tp), intent(inout) :: self !! Helio test particle object class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! Current simulation time diff --git a/src/modules/rmvs_classes.f90 b/src/modules/rmvs_classes.f90 index e595af5fe..2baad04eb 100644 --- a/src/modules/rmvs_classes.f90 +++ b/src/modules/rmvs_classes.f90 @@ -8,7 +8,6 @@ module rmvs_classes implicit none public - integer(I4B), parameter :: NTENC = 10 integer(I4B), parameter :: NTPHENC = 3 integer(I4B), parameter :: NTPENC = NTENC * NTPHENC @@ -27,9 +26,8 @@ module rmvs_classes contains private !> Replace the abstract procedures with concrete ones - procedure, public :: initialize => rmvs_setup_system !! Performs RMVS-specific initilization steps, like calculating the Jacobi masses - procedure, public :: step => rmvs_step_system - procedure, public :: set_beg_end => rmvs_setup_set_beg_end !! Sets the beginning and ending values of planet positions. Also adds the end velocity for RMVS + procedure, public :: initialize => rmvs_setup_system !! Performs RMVS-specific initilization steps, including generating the close encounter planetocentric structures + procedure, public :: step => rmvs_step_system !! Advance the RMVS nbody system forward in time by one step end type rmvs_nbody_system type, private :: rmvs_interp @@ -68,13 +66,13 @@ module rmvs_classes integer(I4B) :: ipleP !! index value of encountering planet logical :: lplanetocentric = .false. !! Flag that indicates that the object is a planetocentric set of masive bodies used for close encounter calculations contains - procedure, public :: discard => rmvs_discard_tp !! Check to see if test particles should be discarded based on pericenter passage distances with respect to planets encountered - procedure, public :: encounter_check => rmvs_encounter_check_tp !! Checks if any test particles are undergoing a close encounter with a massive body - procedure, public :: fill => rmvs_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: getacch => rmvs_getacch_tp !! Calculates either the standard or modified version of the acceleration depending if the + procedure, public :: discard => rmvs_discard_tp !! Check to see if test particles should be discarded based on pericenter passage distances with respect to planets encountered + procedure, public :: encounter_check => rmvs_encounter_check_tp !! Checks if any test particles are undergoing a close encounter with a massive body + procedure, public :: fill => rmvs_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure, public :: accel => rmvs_getacch_tp !! Calculates either the standard or modified version of the acceleration depending if the !! if the test particle is undergoing a close encounter or not - procedure, public :: setup => rmvs_setup_tp !! Constructor method - Allocates space for number of particles - procedure, public :: spill => rmvs_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure, public :: setup => rmvs_setup_tp !! Constructor method - Allocates space for number of particles + procedure, public :: spill => rmvs_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type rmvs_tp !******************************************************************************************************************************** @@ -83,11 +81,11 @@ module rmvs_classes !> RMVS massive body particle class type, private, extends(whm_pl) :: rmvs_pl - integer(I4B), dimension(:), allocatable :: nenc !! number of test particles encountering planet this full rmvs time step - integer(I4B), dimension(:), allocatable :: tpenc1P !! index of first test particle encountering planet - integer(I4B), dimension(:), allocatable :: plind ! Connects the planetocentric indices back to the heliocentric planet list - type(rmvs_interp), dimension(:), allocatable :: outer !! interpolated heliocentric central body position for outer encounters - type(rmvs_interp), dimension(:), allocatable :: inner !! interpolated heliocentric central body position for inner encounters + integer(I4B), dimension(:), allocatable :: nenc !! number of test particles encountering planet this full rmvs time step + integer(I4B), dimension(:), allocatable :: tpenc1P !! index of first test particle encountering planet + integer(I4B), dimension(:), allocatable :: plind ! Connects the planetocentric indices back to the heliocentric planet list + type(rmvs_interp), dimension(:), allocatable :: outer !! interpolated heliocentric central body position for outer encounters + type(rmvs_interp), dimension(:), allocatable :: inner !! interpolated heliocentric central body position for inner encounters class(rmvs_nbody_system), dimension(:), allocatable :: planetocentric logical :: lplanetocentric = .false. !! Flag that indicates that the object is a planetocentric set of masive bodies used for close encounter calculations contains @@ -129,14 +127,14 @@ module subroutine rmvs_fill_tp(self, inserts, lfill_list) logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine rmvs_fill_tp - module subroutine rmvs_getacch_tp(self, system, param, t, xhp) + module subroutine rmvs_getacch_tp(self, system, param, t, lbeg) use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters implicit none class(rmvs_tp), intent(inout) :: self !! RMVS test particle data structure class(swiftest_nbody_system), intent(inout) :: system !! Swiftest central body particle data structuree class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets at current substep + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine rmvs_getacch_tp module subroutine rmvs_setup_pl(self,n) @@ -145,12 +143,6 @@ module subroutine rmvs_setup_pl(self,n) integer, intent(in) :: n !! Number of test particles to allocate end subroutine rmvs_setup_pl - module subroutine rmvs_setup_set_beg_end(self, xbeg, xend, vbeg) - implicit none - class(rmvs_nbody_system), intent(inout) :: self !! RMVS nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg - end subroutine rmvs_setup_set_beg_end - module subroutine rmvs_setup_system(self, param) use swiftest_classes, only : swiftest_parameters implicit none diff --git a/src/modules/swiftest_classes.f90 b/src/modules/swiftest_classes.f90 index ad0a17598..3d1cba23d 100644 --- a/src/modules/swiftest_classes.f90 +++ b/src/modules/swiftest_classes.f90 @@ -9,18 +9,18 @@ module swiftest_classes public :: discard_pl, discard_system, discard_tp public :: drift_one public :: eucl_dist_index_plpl, eucl_dist_index_pltp, eucl_irij3_plpl - public :: kick_vb_body, kick_vh_body public :: io_dump_param, io_dump_swiftest, io_dump_system, io_get_args, 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 - public :: obl_acc_body + 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_set_ir3h, setup_set_msys, setup_set_mu_pl, setup_set_mu_tp, & - setup_set_rhill, setup_tp + 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_copy_body, util_copy_cb, util_copy_pl, & - util_copy_tp, util_copy_system, util_fill_body, util_fill_pl, util_fill_tp, util_reverse_status, util_spill_body, & - util_spill_pl, util_spill_tp + util_copy_tp, util_copy_system, 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 !******************************************************************************************************************************** ! swiftest_parameters class definitions @@ -115,6 +115,8 @@ module swiftest_classes real(DP) :: j2rp2 = 0.0_DP !! J2*R^2 term for central body real(DP) :: j4rp4 = 0.0_DP !! J4*R^2 term for central body real(DP), dimension(NDIM) :: aobl = 0.0_DP !! Barycentric acceleration due to central body oblatenes + real(DP), dimension(NDIM) :: aoblbeg = 0.0_DP !! Barycentric acceleration due to central body oblatenes at beginning of step + real(DP), dimension(NDIM) :: aoblend = 0.0_DP !! Barycentric acceleration due to central body oblatenes at end of step real(DP), dimension(NDIM) :: xb = 0.0_DP !! Barycentric position (units DU) real(DP), dimension(NDIM) :: vb = 0.0_DP !! Barycentric velocity (units DU / TU) real(DP), dimension(NDIM) :: Ip = 0.0_DP !! Unitless principal moments of inertia (I1, I2, I3) / (MR**2). Principal axis rotation assumed. @@ -123,10 +125,11 @@ module swiftest_classes real(DP) :: Q = 0.0_DP !! Tidal quality factor contains private - procedure, public :: initialize => io_read_cb_in !! I/O routine for reading in central body data - procedure, public :: write_frame => io_write_frame_cb !! I/O routine for writing out a single frame of time-series data for the central body - procedure, public :: read_frame => io_read_frame_cb !! I/O routine for reading out a single frame of time-series data for the central body - procedure, public :: copy => util_copy_cb !! Copies elements of one object to another. + procedure, public :: initialize => io_read_cb_in !! I/O routine for reading in central body data + procedure, public :: write_frame => io_write_frame_cb !! I/O routine for writing out a single frame of time-series data for the central body + procedure, public :: read_frame => io_read_frame_cb !! I/O routine for reading out a single frame of time-series data for the central body + procedure, public :: copy => util_copy_cb !! Copies elements of one object to another. + procedure, public :: set_beg_end => util_set_beg_end_cb !! Sets the beginning and ending oblateness acceleration term end type swiftest_cb !******************************************************************************************************************************** @@ -135,6 +138,7 @@ module swiftest_classes !> An abstract class for a generic collection of Swiftest bodies type, abstract, public, extends(swiftest_base) :: swiftest_body !! Superclass that defines the generic elements of a Swiftest particle + logical :: lfirst = .true. !! Run the current step as a first integer(I4B) :: nbody = 0 !! Number of bodies integer(I4B), dimension(:), allocatable :: name !! External identifier integer(I4B), dimension(:), allocatable :: status !! An integrator-specific status indicator @@ -160,18 +164,18 @@ module swiftest_classes procedure(abstract_discard_body), public, deferred :: discard procedure(abstract_set_mu), public, deferred :: set_mu procedure(abstract_step_body), public, deferred :: step + procedure(abstract_accel), public, deferred :: accel ! These are concrete because the implementation is the same for all types of particles procedure, public :: initialize => io_read_body_in !! Read in body initial conditions from a file procedure, public :: read_frame => io_read_frame_body !! I/O routine for writing out a single frame of time-series data for the central body procedure, public :: write_frame => io_write_frame_body !! I/O routine for writing out a single frame of time-series data for the central body - procedure, public :: kickvb => kick_vb_body !! Kicks the barycentric velocities - procedure, public :: kickvh => kick_vh_body !! Kicks the heliocentric velocities - procedure, public :: obl_acc => obl_acc_body !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure, public :: kick => kickvh_body !! Kicks the heliocentric velocities + procedure, public :: accel_obl => obl_acc_body !! Compute the barycentric accelerations of bodies due to the oblateness of the central body procedure, public :: el2xv => orbel_el2xv_vec !! Convert orbital elements to position and velocity vectors procedure, public :: xv2el => orbel_xv2el_vec !! Convert position and velocity vectors to orbital elements - procedure, public :: set_ir3 => setup_set_ir3h !! Sets the inverse heliocentric radius term (1/rh**3) + procedure, public :: set_ir3 => util_set_ir3h !! Sets the inverse heliocentric radius term (1/rh**3) procedure, public :: setup => setup_body !! A constructor that sets the number of bodies and allocates all allocatable arrays - procedure, public :: user_getacch => user_getacch_body !! Base user-defined acceleration subroutine + procedure, public :: accel_user => user_getacch_body !! Add user-supplied heliocentric accelerations to planets procedure, public :: copy => util_copy_body !! Copies elements of one object to another. procedure, public :: fill => util_fill_body !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) procedure, public :: spill => util_spill_body !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) @@ -198,23 +202,28 @@ module swiftest_classes integer(I4B), dimension(:,:), allocatable :: k_eucl !! Index array that converts i, j array indices into k index for use in !! the Euclidean distance matrix real(DP), dimension(:), allocatable :: irij3 !! 1.0_DP / (rji2 * sqrt(rji2)) where rji2 is the square of the Euclidean distance + real(DP), dimension(:,:), allocatable :: xbeg !! Position at beginning of step + real(DP), dimension(:,:), allocatable :: xend !! Position at end of step + real(DP), dimension(:,:), allocatable :: vbeg !! Velocity at beginning of step !! Note to developers: If you add components to this class, be sure to update methods and subroutines that traverse the !! component list, such as setup_pl and util_spill_pl contains private ! Massive body-specific concrete methods ! These are concrete because they are the same implemenation for all integrators - procedure, public :: discard => discard_pl !! Placeholder method for discarding massive bodies - procedure, public :: eucl_index => eucl_dist_index_plpl !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix - procedure, public :: eucl_irij3 => eucl_irij3_plpl !! Parallelized single loop blocking for Euclidean distance matrix calcualtion - procedure, public :: setup => setup_pl !! A base constructor that sets the number of bodies and allocates and initializes all arrays - procedure, public :: set_mu => setup_set_mu_pl !! Method used to construct the vectorized form of the central body mass - procedure, public :: set_rhill => setup_set_rhill !! Calculates the Hill's radii for each body - procedure, public :: h2b => util_coord_h2b_pl !! Convert massive bodies from heliocentric to barycentric coordinates (position and velocity) - procedure, public :: b2h => util_coord_b2h_pl !! Convert massive bodies from barycentric to heliocentric coordinates (position and velocity) - procedure, public :: copy => util_copy_pl !! Copies elements of one object to another. - procedure, public :: fill => util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: spill => util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure, public :: discard => discard_pl !! Placeholder method for discarding massive bodies + procedure, public :: eucl_index => eucl_dist_index_plpl !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix + procedure, public :: eucl_irij3 => eucl_irij3_plpl !! Parallelized single loop blocking for Euclidean distance matrix calcualtion + procedure, public :: accel_obl => obl_acc_pl !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure, public :: setup => setup_pl !! A base constructor that sets the number of bodies and allocates and initializes all arrays + procedure, public :: set_mu => util_set_mu_pl !! Method used to construct the vectorized form of the central body mass + procedure, public :: set_rhill => util_set_rhill !! Calculates the Hill's radii for each body + procedure, public :: h2b => util_coord_h2b_pl !! Convert massive bodies from heliocentric to barycentric coordinates (position and velocity) + procedure, public :: b2h => util_coord_b2h_pl !! Convert massive bodies from barycentric to heliocentric coordinates (position and velocity) + procedure, public :: copy => util_copy_pl !! Copies elements of one object to another. + procedure, public :: fill => util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure, public :: set_beg_end => util_set_beg_end_pl !! Sets the beginning and ending positions and velocities of planets. + procedure, public :: spill => util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type swiftest_pl !******************************************************************************************************************************** @@ -233,15 +242,16 @@ module swiftest_classes private ! Test particle-specific concrete methods ! These are concrete because they are the same implemenation for all integrators - procedure, public :: discard => discard_tp !! Check to see if test particles should be discarded based on their positions relative to the massive bodies - procedure, public :: eucl_index => eucl_dist_index_pltp !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix - procedure, public :: setup => setup_tp !! A base constructor that sets the number of bodies and - procedure, public :: set_mu => setup_set_mu_tp !! Method used to construct the vectorized form of the central body mass - 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 :: copy => util_copy_tp !! Copies elements of one object to another. - 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 :: spill => util_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure, public :: discard => discard_tp !! Check to see if test particles should be discarded based on their positions relative to the massive bodies + procedure, public :: eucl_index => eucl_dist_index_pltp !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix + procedure, public :: accel_obl => obl_acc_tp !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure, public :: setup => setup_tp !! A base constructor that sets the number of bodies and + procedure, public :: set_mu => util_set_mu_tp !! Method used to construct the vectorized form of the central body mass + 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 :: copy => util_copy_tp !! Copies elements of one object to another. + 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 :: 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 !******************************************************************************************************************************** @@ -250,15 +260,18 @@ module swiftest_classes !> An abstract class for a basic Swiftest nbody system type, abstract, public, extends(swiftest_base) :: swiftest_nbody_system !! This superclass contains a minimial system of a set of test particles (tp), massive bodies (pl), and a central body (cb) - class(swiftest_cb), allocatable :: cb !! Central body data structure - class(swiftest_pl), allocatable :: pl !! Massive body data structure - class(swiftest_tp), allocatable :: tp !! Test particle data structure - class(swiftest_tp), allocatable :: tp_discards !! Discarded test particle data structure - real(DP) :: msys = 0.0_DP !! Total system mass - used for barycentric coordinate conversion - real(DP) :: ke = 0.0_DP !! System kinetic energy - real(DP) :: pe = 0.0_DP !! System potential energy - real(DP) :: te = 0.0_DP !! System total energy - real(DP), dimension(NDIM) :: htot = 0.0_DP !! System angular momentum vector + class(swiftest_cb), allocatable :: cb !! Central body data structure + class(swiftest_pl), allocatable :: pl !! Massive body data structure + class(swiftest_tp), allocatable :: tp !! Test particle data structure + class(swiftest_tp), allocatable :: tp_discards !! Discarded test particle data structure + real(DP) :: msys = 0.0_DP !! Total system mass - used for barycentric coordinate conversion + real(DP) :: ke = 0.0_DP !! System kinetic energy + real(DP) :: pe = 0.0_DP !! System potential energy + real(DP) :: te = 0.0_DP !! System total energy + real(DP), dimension(NDIM) :: htot = 0.0_DP !! System angular momentum vector + logical :: lbeg !! True if this is the beginning of a step. This is used so that test particle steps can be calculated + !! separately from massive bodies. Massive body variables are saved at half steps, and passed to + !! the test particles contains private !> Each integrator will have its own version of the step @@ -269,7 +282,7 @@ module swiftest_classes procedure, public :: dump => io_dump_system !! Dump the state of the system to a file procedure, public :: initialize => io_read_initialize_system !! Initialize the system from an input file procedure, public :: read_frame => io_read_frame_system !! Append a frame of output data to file - procedure, public :: set_msys => setup_set_msys !! Sets the value of msys from the masses of system bodies. + procedure, public :: set_msys => util_set_msys !! Sets the value of msys from the masses of system bodies. procedure, public :: write_discard => io_write_discard !! Append a frame of output data to file procedure, public :: write_frame => io_write_frame_system !! Append a frame of output data to file procedure, public :: copy => util_copy_system !! Copies elements of one object to another. @@ -285,39 +298,48 @@ end subroutine abstract_copy subroutine abstract_discard_body(self, system, param) import swiftest_body, swiftest_nbody_system, swiftest_parameters - class(swiftest_body), intent(inout) :: self !! Swiftest particle object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine abstract_discard_body + subroutine abstract_accel(self, system, param, t, lbeg) + import swiftest_body, swiftest_nbody_system, swiftest_parameters, DP + class(swiftest_body), intent(inout) :: self !! Swiftest body data structure + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of + real(DP), intent(in) :: t !! Current simulation time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step + end subroutine abstract_accel + subroutine abstract_initialize(self, param) import swiftest_base, swiftest_parameters class(swiftest_base), intent(inout) :: self !! Swiftest base object - class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters + class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters end subroutine abstract_initialize subroutine abstract_read_frame(self, iu, param, form, ierr) import DP, I4B, swiftest_base, swiftest_parameters - class(swiftest_base), intent(inout) :: self !! Swiftest base object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to - class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - character(*), intent(in) :: form !! Input format code ("XV" or "EL") - integer(I4B), intent(out) :: ierr !! Error code + class(swiftest_base), intent(inout) :: self !! Swiftest base object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters + character(*), intent(in) :: form !! Input format code ("XV" or "EL") + integer(I4B), intent(out) :: ierr !! Error code end subroutine abstract_read_frame subroutine abstract_set_mu(self, cb) import swiftest_body, swiftest_cb - class(swiftest_body), intent(inout) :: self !! Swiftest particle object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine abstract_set_mu subroutine abstract_step_body(self, system, param, t, dt) import DP, swiftest_body, swiftest_nbody_system, swiftest_parameters implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest particle object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_nbody_system), intent(inout) :: system !! Swiftest system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - real(DP), intent(in) :: t !! Simulation time + real(DP), intent(in) :: t !! Simulation time real(DP), intent(in) :: dt !! Current stepsize end subroutine abstract_step_body @@ -383,18 +405,6 @@ module subroutine eucl_irij3_plpl(self) class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object end subroutine eucl_irij3_plpl - module subroutine kick_vb_body(self, dt) - implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - real(DP), intent(in) :: dt !! Stepsize - end subroutine kick_vb_body - - module subroutine kick_vh_body(self, dt) - implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - real(DP), intent(in) :: dt !! Stepsize - end subroutine kick_vh_body - module subroutine io_dump_param(self, param_file_name) implicit none class(swiftest_parameters),intent(in) :: self !! Output collection of parameters @@ -446,7 +456,7 @@ end subroutine io_param_writer module subroutine io_read_body_in(self, param) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest particle object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters end subroutine io_read_body_in @@ -458,48 +468,47 @@ end subroutine io_read_cb_in module subroutine io_read_param_in(self, param_file_name) implicit none - class(swiftest_parameters), intent(out) :: self !! Current run configuration parameters + class(swiftest_parameters), intent(out) :: self !! Current run configuration parameters character(len=*), intent(in) :: param_file_name !! Parameter input file name (i.e. param.in) end subroutine io_read_param_in module subroutine io_read_frame_body(self, iu, param, form, ierr) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest particle object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_body), intent(inout) :: self !! Swiftest body object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - character(*), intent(in) :: form !! Input format code ("XV" or "EL") - integer(I4B), intent(out) :: ierr !! Error code + character(*), intent(in) :: form !! Input format code ("XV" or "EL") + integer(I4B), intent(out) :: ierr !! Error code end subroutine io_read_frame_body module subroutine io_read_frame_cb(self, iu, param, form, ierr) implicit none - class(swiftest_cb), intent(inout) :: self !! Swiftest central body object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_cb), intent(inout) :: self !! Swiftest central body object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - character(*), intent(in) :: form !! Input format code ("XV" or "EL") - integer(I4B), intent(out) :: ierr !! Error code + character(*), intent(in) :: form !! Input format code ("XV" or "EL") + integer(I4B), intent(out) :: ierr !! Error code end subroutine io_read_frame_cb module subroutine io_read_frame_system(self, iu, param, form, ierr) implicit none - class(swiftest_nbody_system),intent(inout) :: self !! Swiftest system object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_nbody_system),intent(inout) :: self !! Swiftest system object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - character(*), intent(in) :: form !! Input format code ("XV" or "EL") - integer(I4B), intent(out) :: ierr !! Error code + character(*), intent(in) :: form !! Input format code ("XV" or "EL") + integer(I4B), intent(out) :: ierr !! Error code end subroutine io_read_frame_system module subroutine io_read_initialize_system(self, param) implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object - class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object + class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters end subroutine io_read_initialize_system module subroutine io_write_discard(self, param) implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object - class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters - !class(swiftest_body), intent(inout) :: discards !! Swiftest discard object + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine io_write_discard module subroutine io_write_encounter(t, name1, name2, mass1, mass2, radius1, radius2, & @@ -513,34 +522,52 @@ end subroutine io_write_encounter module subroutine io_write_frame_body(self, iu, param) implicit none - class(swiftest_body), intent(in) :: self !! Swiftest particle object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_body), intent(in) :: self !! Swiftest body object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine io_write_frame_body module subroutine io_write_frame_cb(self, iu, param) implicit none - class(swiftest_cb), intent(in) :: self !! Swiftest central body object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_cb), intent(in) :: self !! Swiftest central body object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine io_write_frame_cb module subroutine io_write_frame_system(self, iu, param) implicit none - class(swiftest_nbody_system), intent(in) :: self !! Swiftest system object - integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to + class(swiftest_nbody_system), intent(in) :: self !! Swiftest system object + integer(I4B), intent(inout) :: iu !! Unit number for the output file to write frame to class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine io_write_frame_system - module subroutine obl_acc_body(self, cb) + module subroutine kickvh_body(self, dt) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + class(swiftest_body), intent(inout) :: self !! Swiftest body object + real(DP), intent(in) :: dt !! Stepsize + end subroutine kickvh_body + + module subroutine obl_acc_body(self, system) + implicit none + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object end subroutine obl_acc_body + module subroutine obl_acc_pl(self, system) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + end subroutine obl_acc_pl + + module subroutine obl_acc_tp(self, system) + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + end subroutine obl_acc_tp + module subroutine orbel_el2xv_vec(self, cb) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine orbel_el2xv_vec @@ -566,174 +593,190 @@ end subroutine orbel_xv2aqt module subroutine orbel_xv2el_vec(self, cb) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine orbel_xv2el_vec module subroutine setup_body(self,n) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - integer, intent(in) :: n !! Number of particles to allocate space for + class(swiftest_body), intent(inout) :: self !! Swiftest body object + integer, intent(in) :: n !! Number of particles to allocate space for end subroutine setup_body module subroutine setup_construct_system(system, param) implicit none - class(swiftest_nbody_system), allocatable, intent(inout) :: system !! Swiftest system object - type(swiftest_parameters), intent(in) :: param !! Swiftest parameters + class(swiftest_nbody_system), allocatable, intent(inout) :: system !! Swiftest system object + type(swiftest_parameters), intent(in) :: param !! Swiftest parameters end subroutine setup_construct_system module subroutine setup_pl(self,n) implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - integer, intent(in) :: n !! Number of massive bodies to allocate space for + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + integer, intent(in) :: n !! Number of massive bodies to allocate space for end subroutine setup_pl - module subroutine setup_set_ir3h(self) + module subroutine util_set_ir3h(self) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - end subroutine setup_set_ir3h + class(swiftest_body), intent(inout) :: self !! Swiftest body object + end subroutine util_set_ir3h - module subroutine setup_set_msys(self) + module subroutine util_set_msys(self) implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object - end subroutine setup_set_msys + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system object + end subroutine util_set_msys - module subroutine setup_set_mu_pl(self, cb) + 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 setup_set_mu_pl + 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 setup_set_mu_tp(self, cb) + 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 setup_set_mu_tp + 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 setup_set_rhill(self,cb) + 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 setup_set_rhill + 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 - integer, intent(in) :: n !! Number of bodies to allocate space for + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + integer, intent(in) :: n !! Number of bodies to allocate space for end subroutine setup_tp - module subroutine user_getacch_body(self, system, param, t) + module subroutine user_getacch_body(self, system, param, t, lbeg) implicit none class(swiftest_body), intent(inout) :: self !! Swiftest massive body particle data structure - class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nobody system object - class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody_system_object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of user parameters real(DP), intent(in) :: t !! Current time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine user_getacch_body module subroutine util_coord_b2h_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 + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine util_coord_b2h_pl module subroutine util_coord_b2h_tp(self, cb) implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_cb), intent(in) :: cb !! Swiftest central body object + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_cb), intent(in) :: cb !! Swiftest central body object end subroutine util_coord_b2h_tp module subroutine util_coord_h2b_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 + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine util_coord_h2b_pl module subroutine util_coord_h2b_tp(self, cb) implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_cb), intent(in) :: cb !! Swiftest central body object + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_cb), intent(in) :: cb !! Swiftest central body object end subroutine util_coord_h2b_tp module subroutine util_copy_body(self, src, mask) implicit none - class(swiftest_body), intent(inout) :: self - class(swiftest_base), intent(in) :: src - logical, dimension(:), intent(in) :: mask + class(swiftest_body), intent(inout) :: self !! Swiftest body object to copy into + class(swiftest_base), intent(in) :: src !! Swiftest base object to copy from + logical, dimension(:), intent(in) :: mask !! Mask of elements in src object to copy into self end subroutine util_copy_body module subroutine util_copy_cb(self, src, mask) implicit none - class(swiftest_cb), intent(inout) :: self - class(swiftest_base), intent(in) :: src - logical, dimension(:), intent(in) :: mask + class(swiftest_cb), intent(inout) :: self !! Swiftest central body object to copy into + class(swiftest_base), intent(in) :: src !! Swiftest base object to copy from + logical, dimension(:), intent(in) :: mask !! Mask of elements in src object to copy into selfk end subroutine util_copy_cb module subroutine util_copy_pl(self, src, mask) implicit none - class(swiftest_pl), intent(inout) :: self - class(swiftest_base), intent(in) :: src - logical, dimension(:), intent(in) :: mask + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object to copy into + class(swiftest_base), intent(in) :: src !! Swiftest base object to copy from + logical, dimension(:), intent(in) :: mask !! Mask of elements in src object to copy into self end subroutine util_copy_pl module subroutine util_copy_tp(self, src, mask) implicit none - class(swiftest_tp), intent(inout) :: self - class(swiftest_base), intent(in) :: src - logical, dimension(:), intent(in) :: mask + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object to copy into + class(swiftest_base), intent(in) :: src !! Swiftest base object to copy from + logical, dimension(:), intent(in) :: mask !! Mask of elements in src object to copy into self end subroutine util_copy_tp module subroutine util_copy_system(self, src, mask) implicit none - class(swiftest_nbody_system), intent(inout) :: self - class(swiftest_base), intent(in) :: src - logical, dimension(:), intent(in) :: mask + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest nbody system object to copy into + class(swiftest_base), intent(in) :: src !! Swiftest base object to copy from + logical, dimension(:), intent(in) :: mask !! Mask of elements in src object to copy into self end subroutine util_copy_system module subroutine util_fill_body(self, inserts, lfill_list) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - class(swiftest_body), intent(inout) :: inserts !! Insertted object - logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_body), intent(inout) :: inserts !! Swiftest body object to be inserted + logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_body module subroutine util_fill_pl(self, inserts, lfill_list) implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - class(swiftest_body), intent(inout) :: inserts !! Inserted object + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_body), intent(inout) :: inserts !! Swiftest body object to be inserted logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_pl module subroutine util_fill_tp(self, inserts, lfill_list) implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_body), intent(inout) :: inserts !! Inserted object + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_body), intent(inout) :: inserts !! Swiftest body object to be inserted logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_tp module subroutine util_reverse_status(self) implicit none - class(swiftest_body), intent(inout) :: self + class(swiftest_body), intent(inout) :: self !! Swiftest body object end subroutine util_reverse_status + module subroutine util_set_beg_end_cb(self, aoblbeg, aoblend) + implicit none + class(swiftest_cb), intent(inout) :: self !! Swiftest central body object + real(DP), dimension(:), intent(in), optional :: aoblbeg !! Oblateness acceleration term at beginning of step + real(DP), dimension(:), intent(in), optional :: aoblend !! Oblateness acceleration term at end of step + end subroutine util_set_beg_end_cb + + module subroutine util_set_beg_end_pl(self, xbeg, xend, vbeg) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + real(DP), dimension(:,:), intent(in), optional :: xbeg !! Position vectors at beginning of step + real(DP), dimension(:,:), intent(in), optional :: xend !! Positions vectors at end of step + 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_spill_body(self, discards, lspill_list) implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object + class(swiftest_body), intent(inout) :: self !! Swiftest body object class(swiftest_body), intent(inout) :: discards !! Discarded object logical, dimension(:), intent(in) :: lspill_list !! Logical array of bodies to spill into the discards end subroutine util_spill_body module subroutine util_spill_pl(self, discards, lspill_list) implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body body object + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object class(swiftest_body), intent(inout) :: discards !! Discarded object logical, dimension(:), intent(in) :: lspill_list !! Logical array of bodies to spill into the discards end subroutine util_spill_pl module subroutine util_spill_tp(self, discards, lspill_list) implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_body), intent(inout) :: discards !! Discarded object - logical, dimension(:), intent(in) :: lspill_list !! Logical array of bodies to spill into the discards + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_body), intent(inout) :: discards !! Discarded object + logical, dimension(:), intent(in) :: lspill_list !! Logical array of bodies to spill into the discards end subroutine util_spill_tp end interface diff --git a/src/modules/symba.f90 b/src/modules/symba.f90 index 82ff837a1..209322ee1 100644 --- a/src/modules/symba.f90 +++ b/src/modules/symba.f90 @@ -527,14 +527,14 @@ module subroutine symba_step_helio(lfirst, lextra_force, t, npl, nplm, param%npl end subroutine symba_step_helio module subroutine symba_step_helio_pl(lfirst, lextra_force, t, npl, nplm, param%nplmax, helio_plA, param%j2rp2, param%j4rp4, dt, xbeg, xend, & - ptb, pte) + ptbeg, ptend) implicit none logical , intent(in) :: lextra_force logical , intent(inout) :: lfirst integer(I4B), intent(in) :: npl, nplm, param%nplmax real(DP), intent(in) :: t, param%j2rp2, param%j4rp4, dt real(DP), dimension(npl, NDIMm), intent(out) :: xbeg, xend - real(DP), dimension(NDIM), intent(out) :: ptb, pte + real(DP), dimension(NDIM), intent(out) :: ptbeg, ptend type(helio_pl), intent(inout) :: helio_plA end subroutine symba_step_helio_pl diff --git a/src/modules/whm_classes.f90 b/src/modules/whm_classes.f90 index 1707ef875..b0f176a0a 100644 --- a/src/modules/whm_classes.f90 +++ b/src/modules/whm_classes.f90 @@ -5,11 +5,9 @@ module whm_classes !! Partially adapted from David E. Kaufmann's Swifter module: module_whm.f90 use swiftest_globals use swiftest_classes, only : swiftest_cb, swiftest_pl, swiftest_tp, swiftest_nbody_system - implicit none public - !******************************************************************************************************************************** ! whm_cb class definitions and method interfaces !******************************************************************************************************************************* @@ -31,23 +29,22 @@ module whm_classes real(DP), dimension(:), allocatable :: ir3j !! Third term of heliocentric acceleration !! Note to developers: If you add componenets to this class, be sure to update methods and subroutines that traverse the !! component list, such as whm_setup_pl and whm_spill_pl - logical :: lfirst = .true. contains - procedure, public :: h2j => whm_coord_h2j_pl !! Convert position and velcoity vectors from heliocentric to Jacobi coordinates - procedure, public :: j2h => whm_coord_j2h_pl !! Convert position and velcoity vectors from Jacobi to helliocentric coordinates - procedure, public :: vh2vj => whm_coord_vh2vj_pl !! Convert velocity vectors from heliocentric to Jacobi coordinates - procedure, public :: drift => whm_drift_pl !! Loop through massive bodies and call Danby drift routine - procedure, public :: getacch => whm_getacch_pl !! Compute heliocentric accelerations of massive bodies - procedure, public :: fill => whm_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: gr_getacch => whm_gr_getacch_pl !! Acceleration term arising from the post-Newtonian correction - procedure, public :: gr_p4 => whm_gr_p4_pl !! Position kick due to p**4 term in the post-Newtonian correction - procedure, public :: gr_vh2pv => whm_gr_vh2pv_pl !! Converts from heliocentric velocity to psudeovelocity for GR calculations - procedure, public :: gr_pv2vh => whm_gr_pv2vh_pl !! Converts from psudeovelocity to heliocentric velocity for GR calculations - procedure, public :: setup => whm_setup_pl !! Constructor method - Allocates space for number of particles - procedure, public :: set_mu => whm_setup_set_mu_eta_pl !! Sets the Jacobi mass value for all massive bodies. - procedure, public :: set_ir3 => whm_setup_set_ir3j !! Sets both the heliocentric and jacobi inverse radius terms (1/rj**3 and 1/rh**3) - procedure, public :: step => whm_step_pl !! Steps the body forward one stepsize - procedure, public :: spill => whm_spill_pl !!"Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure, public :: h2j => whm_coord_h2j_pl !! Convert position and velcoity vectors from heliocentric to Jacobi coordinates + procedure, public :: j2h => whm_coord_j2h_pl !! Convert position and velcoity vectors from Jacobi to helliocentric coordinates + procedure, public :: vh2vj => whm_coord_vh2vj_pl !! Convert velocity vectors from heliocentric to Jacobi coordinates + procedure, public :: drift => whm_drift_pl !! Loop through massive bodies and call Danby drift routine + procedure, public :: fill => whm_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure, public :: accel => whm_getacch_pl !! Compute heliocentric accelerations of massive bodies + procedure, public :: accel_gr => whm_gr_getacch_pl !! Acceleration term arising from the post-Newtonian correction + procedure, public :: p4 => whm_gr_p4_pl !! Position kick due to p**4 term in the post-Newtonian correction + procedure, public :: vh2pv => whm_gr_vh2pv_pl !! Converts from heliocentric velocity to psudeovelocity for GR calculations + procedure, public :: pv2vh => whm_gr_pv2vh_pl !! Converts from psudeovelocity to heliocentric velocity for GR calculations + procedure, public :: setup => whm_setup_pl !! Constructor method - Allocates space for number of particles + procedure, public :: set_mu => whm_util_set_mu_eta_pl !! Sets the Jacobi mass value for all massive bodies. + procedure, public :: set_ir3 => whm_setup_set_ir3j !! Sets both the heliocentric and jacobi inverse radius terms (1/rj**3 and 1/rh**3) + procedure, public :: step => whm_step_pl !! Steps the body forward one stepsize + procedure, public :: spill => whm_spill_pl !!"Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type whm_pl !******************************************************************************************************************************** @@ -58,17 +55,16 @@ module whm_classes type, public, extends(swiftest_tp) :: whm_tp !! Note to developers: If you add componenets to this class, be sure to update methods and subroutines that traverse the !! component list, such as whm_setup_tp and whm_spill_tp - logical :: lfirst = .true. contains private - procedure, public :: drift => whm_drift_tp !! Loop through test particles and call Danby drift routine - procedure, public :: getacch => whm_getacch_tp !! Compute heliocentric accelerations of test particles - procedure, public :: gr_getacch => whm_gr_getacch_tp !! Acceleration term arising from the post-Newtonian correction - procedure, public :: gr_p4 => whm_gr_p4_tp !! Position kick due to p**4 term in the post-Newtonian correction - procedure, public :: gr_vh2pv => whm_gr_vh2pv_tp !! Converts from heliocentric velocity to psudeovelocity for GR calculations - procedure, public :: gr_pv2vh => whm_gr_pv2vh_tp !! Converts from psudeovelocity to heliocentric velocity for GR calculations - procedure, public :: setup => whm_setup_tp !! Allocates new components of the whm class and recursively calls parent allocations - procedure, public :: step => whm_step_tp !! Steps the particle forward one stepsize + procedure, public :: drift => whm_drift_tp !! Loop through test particles and call Danby drift routine + procedure, public :: accel => whm_getacch_tp !! Compute heliocentric accelerations of test particles + procedure, public :: accel_gr => whm_gr_getacch_tp !! Acceleration term arising from the post-Newtonian correction + procedure, public :: p4 => whm_gr_p4_tp !! Position kick due to p**4 term in the post-Newtonian correction + procedure, public :: vh2pv => whm_gr_vh2pv_tp !! Converts from heliocentric velocity to psudeovelocity for GR calculations + procedure, public :: pv2vh => whm_gr_pv2vh_tp !! Converts from psudeovelocity to heliocentric velocity for GR calculations + procedure, public :: setup => whm_setup_tp !! Allocates new components of the whm class and recursively calls parent allocations + procedure, public :: step => whm_step_tp !! Steps the particle forward one stepsize end type whm_tp !******************************************************************************************************************************** @@ -76,14 +72,11 @@ module whm_classes !******************************************************************************************************************************** !> An abstract class for the WHM integrator nbody system type, public, extends(swiftest_nbody_system) :: whm_nbody_system - !> In the WHM integrator, only test particles are discarded - real(DP), dimension(:,:), allocatable :: xbeg, xend !! Positions of massive bodies at beginning and end of a step. Required in order to separate the test particle step from the massive body step contains private !> Replace the abstract procedures with concrete ones - procedure, public :: initialize => whm_setup_system !! Performs WHM-specific initilization steps, like calculating the Jacobi masses - procedure, public :: step => whm_step_system - procedure, public :: set_beg_end => whm_setup_set_beg_end !! Sets the beginning and ending positions of planets. + procedure, public :: initialize => whm_setup_system !! Performs WHM-specific initilization steps, like calculating the Jacobi masses + procedure, public :: step => whm_step_system !! Advance the WHM nbody system forward in time by one step end type whm_nbody_system interface @@ -135,24 +128,25 @@ module subroutine whm_fill_pl(self, inserts, lfill_list) end subroutine whm_fill_pl !> Get heliocentric accelration of massive bodies - module subroutine whm_getacch_pl(self, system, param, t) + module subroutine whm_getacch_pl(self, system, param, t, lbeg) use swiftest_classes, only : swiftest_cb, swiftest_parameters implicit none class(whm_pl), intent(inout) :: self !! WHM massive body particle data structure class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current simulation time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine whm_getacch_pl !> Get heliocentric accelration of the test particle - module subroutine whm_getacch_tp(self, system, param, t, xhp) + module subroutine whm_getacch_tp(self, system, param, t, lbeg) use swiftest_classes, only : swiftest_cb, swiftest_parameters implicit none class(whm_tp), intent(inout) :: self !! WHM test particle data structure class(swiftest_nbody_system), intent(inout) :: system !! WHM nbody system object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets at the current substep + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step end subroutine whm_getacch_tp module subroutine whm_gr_getacch_pl(self, param) @@ -213,7 +207,6 @@ module pure subroutine whm_gr_vh2pv_tp(self, param) class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of on parameters end subroutine whm_gr_vh2pv_tp - !> Reads WHM massive body object in from file module subroutine whm_setup_pl(self,n) implicit none @@ -221,24 +214,17 @@ module subroutine whm_setup_pl(self,n) integer(I4B), intent(in) :: n !! Number of test particles to allocate end subroutine whm_setup_pl - module subroutine whm_setup_set_beg_end(self, xbeg, xend, vbeg) - implicit none - class(whm_nbody_system), intent(inout) :: self !! WHM nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend - real(DP), dimension(:,:), intent(in), optional :: vbeg ! vbeg is an unused variable to keep this method forward compatible with RMVS - end subroutine whm_setup_set_beg_end - module subroutine whm_setup_set_ir3j(self) implicit none class(whm_pl), intent(inout) :: self !! WHM massive body object end subroutine whm_setup_set_ir3j - module subroutine whm_setup_set_mu_eta_pl(self, cb) + module subroutine whm_util_set_mu_eta_pl(self, cb) use swiftest_classes, only : swiftest_cb implicit none class(whm_pl), intent(inout) :: self !! WHM massive body object class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object - end subroutine whm_setup_set_mu_eta_pl + end subroutine whm_util_set_mu_eta_pl module subroutine whm_setup_system(self, param) use swiftest_classes, only : swiftest_parameters diff --git a/src/obl/obl.f90 b/src/obl/obl.f90 index 1192189df..8792f2399 100644 --- a/src/obl/obl.f90 +++ b/src/obl/obl.f90 @@ -1,23 +1,24 @@ submodule (swiftest_classes) s_obl use swiftest contains - module subroutine obl_acc_body(self, cb) + module subroutine obl_acc_body(self, system) !! author: David A. Minton !! !! Compute the barycentric accelerations of bodies due to the oblateness of the central body !! Returned values do not include monopole term or terms higher than J4 - + !! !! Adapted from David E. Kaufmann's Swifter routine: obl_acc.f90 and obl_acc_tp.f90 !! Adapted from Hal Levison's Swift routine obl_acc.f and obl_acc_tp.f implicit none ! Arguments - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object ! Internals integer(I4B) :: i real(DP) :: r2, irh, rinv2, t0, t1, t2, t3, fac1, fac2 - associate(n => self%nbody, xh => self%xh, vh => self%vh, ah => self%ah) + associate(n => self%nbody, cb => system%cb) + self%aobl(:,:) = 0.0_DP do i = 1, n r2 = dot_product(self%xh(:, i), self%xh(:, i)) irh = 1.0_DP / sqrt(r2) @@ -31,19 +32,71 @@ module subroutine obl_acc_body(self, cb) self%aobl(:, i) = fac1 * self%xh(:, i) self%aobl(3, i) = fac2 * self%xh(3, i) + self%aobl(3, i) end do - select type(self) - class is (swiftest_pl) - do i = 1, NDIM - cb%aobl(i) = -sum(self%Gmass(1:n) * self%aobl(i, 1:n)) / cb%Gmass - end do - end select + end associate + return + + end subroutine obl_acc_body + + module subroutine obl_acc_pl(self, system) + !! author: David A. Minton + !! + !! Compute the barycentric accelerations of massive bodies due to the oblateness of the central body + !! + !! Adapted from David E. Kaufmann's Swifter routine: obl_acc.f90 and obl_acc_tp.f90 + !! Adapted from Hal Levison's Swift routine obl_acc.f and obl_acc_tp.f + implicit none + ! Arguments + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object + ! Internals + integer(I4B) :: i + + associate(pl => self, npl => self%nbody, cb => system%cb) + call obl_acc_body(pl, system) + do i = 1, NDIM + cb%aobl(i) = -sum(pl%Gmass(1:npl) * pl%aobl(i, 1:npl)) / cb%Gmass + end do + + do i = 1, NDIM + pl%ah(i, 1:npl) = pl%ah(i, 1:npl) + pl%aobl(i, 1:npl) - cb%aobl(i) + end do + end associate + + return + + end subroutine obl_acc_pl + + module subroutine obl_acc_tp(self, system) + !! author: David A. Minton + !! + !! Compute the barycentric accelerations of massive bodies due to the oblateness of the central body + !! + !! Adapted from David E. Kaufmann's Swifter routine: obl_acc.f90 and obl_acc_tp.f90 + !! Adapted from Hal Levison's Swift routine obl_acc.f and obl_acc_tp.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 + ! Internals + real(DP), dimension(NDIM) :: aoblcb + integer(I4B) :: i + + associate(tp => self, ntp => self%nbody, cb => system%cb) + call obl_acc_body(tp, system) + if (system%lbeg) then + aoblcb = cb%aoblbeg + else + aoblcb = cb%aoblend + end if do i = 1, NDIM - self%ah(i, 1:n) = self%ah(i, 1:n) + self%aobl(i, 1:n) - cb%aobl(i) + tp%ah(i, 1:ntp) = tp%ah(i, 1:ntp) + tp%aobl(i, 1:ntp) - aoblcb(i) end do + end associate return - end subroutine obl_acc_body + end subroutine obl_acc_tp + end submodule s_obl diff --git a/src/rmvs/rmvs_encounter_check.f90 b/src/rmvs/rmvs_encounter_check.f90 index 9719567a9..bead4c21b 100644 --- a/src/rmvs/rmvs_encounter_check.f90 +++ b/src/rmvs/rmvs_encounter_check.f90 @@ -24,14 +24,14 @@ module function rmvs_encounter_check_tp(self, system, dt) result(lencounter) select type(pl => system%pl) class is (rmvs_pl) - associate(tp => self, ntp => self%nbody, npl => pl%nbody, xbeg => system%xbeg, vbeg => system%vbeg, rts => system%rts) + associate(tp => self, ntp => self%nbody, npl => pl%nbody, rts => system%rts) r2crit(:) = (rts * pl%rhill(:))**2 tp%plencP(:) = 0 do j = 1, npl do i = 1, ntp if ((tp%status(i) /= ACTIVE).or.(tp%plencP(i) /= 0)) cycle - xr(:) = tp%xh(:, i) - xbeg(:, j) - vr(:) = tp%vh(:, i) - vbeg(:, j) + xr(:) = tp%xh(:, i) - pl%xbeg(:, j) + vr(:) = tp%vh(:, i) - pl%vbeg(:, j) r2 = dot_product(xr(:), xr(:)) v2 = dot_product(vr(:), vr(:)) vdotr = dot_product(vr(:), xr(:)) diff --git a/src/rmvs/rmvs_getacch.f90 b/src/rmvs/rmvs_getacch.f90 index dcbf5aff9..0ede99ab5 100644 --- a/src/rmvs/rmvs_getacch.f90 +++ b/src/rmvs/rmvs_getacch.f90 @@ -1,7 +1,7 @@ submodule(rmvs_classes) s_rmvs_getacch use swiftest contains - module subroutine rmvs_getacch_tp(self, system, param, t, xhp) + module subroutine rmvs_getacch_tp(self, system, param, t, lbeg) !! author: David A. Minton !! @@ -15,63 +15,66 @@ module subroutine rmvs_getacch_tp(self, system, param, t, xhp) class(swiftest_nbody_system), intent(inout) :: system !! Swiftest central body particle data structuree class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets at current substep + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step ! Internals type(swiftest_parameters) :: param_planetocen - real(DP), dimension(:, :), allocatable :: xh_original - integer(I4B) :: i + real(DP), dimension(:, :), allocatable :: xh_original + real(DP) :: GMcb_original + integer(I4B) :: i + real(DP), dimension(:, :), allocatable :: xhp - - associate(tp => self, ntp => self%nbody, ipleP => self%ipleP, inner_index => self%index, cb_heliocentric => self%cb_heliocentric) + associate(tp => self, ntp => self%nbody, ipleP => self%ipleP, inner_index => self%index) select type(system) class is (rmvs_nbody_system) if (system%lplanetocentric) then ! This is a close encounter step, so any accelerations requiring heliocentric position values - ! must be handeled outside the normal WHM method call + ! must be handeled outside the normal WHM method call select type(pl => system%pl) class is (rmvs_pl) - select type (cb => system%cb) - class is (rmvs_cb) - associate(xpc => pl%xh, xpct => self%xh, apct => self%ah) - allocate(xh_original, source=tp%xh) - param_planetocen = param - ! Temporarily turn off the heliocentric-dependent acceleration terms during an inner encounter - param_planetocen%loblatecb = .false. - param_planetocen%lextra_force = .false. - param_planetocen%lgr = .false. - ! Now compute the planetocentric values of acceleration - call whm_getacch_tp(tp, system, param_planetocen, t, xhp) + select type (cb => system%cb) + class is (rmvs_cb) + associate(xpc => pl%xh, xpct => self%xh, apct => self%ah, system_planetocen => system) - ! Now compute any heliocentric values of acceleration - if (tp%lfirst) then - do i = 1, ntp - tp%xheliocentric(:,i) = tp%xh(:,i) + cb%inner(inner_index - 1)%x(:,1) - end do - else - do i = 1, ntp - tp%xheliocentric(:,i) = tp%xh(:,i) + cb%inner(inner_index )%x(:,1) - end do - end if - ! Swap the planetocentric and heliocentric position vectors - tp%xh(:,:) = tp%xheliocentric(:,:) - if (param%loblatecb) then - ! Put in the current encountering planet's oblateness acceleration as the central body's - if (tp%lfirst) then - cb_heliocentric%aobl(:) = cb%inner(inner_index - 1)%aobl(:,1) + if (present(lbeg)) system_planetocen%lbeg = lbeg + + if (system_planetocen%lbeg) then + allocate(xhp, source=pl%xbeg) else - cb_heliocentric%aobl(:) = cb%inner(inner_index )%aobl(:,1) + allocate(xhp, source=pl%xend) end if - call tp%obl_acc(cb_heliocentric) - end if + + allocate(xh_original, source=tp%xh) + param_planetocen = param + ! Temporarily turn off the heliocentric-dependent acceleration terms during an inner encounter + param_planetocen%loblatecb = .false. + param_planetocen%lextra_force = .false. + param_planetocen%lgr = .false. + ! Now compute the planetocentric values of acceleration + call whm_getacch_tp(tp, system_planetocen, param_planetocen, t) - if (param%lextra_force) call tp%user_getacch(system, param, t) - if (param%lgr) call tp%gr_getacch(param) - - tp%xh(:,:) = xh_original(:,:) - end associate - end select + ! Now compute any heliocentric values of acceleration + if (tp%lfirst) then + do i = 1, ntp + tp%xheliocentric(:,i) = tp%xh(:,i) + cb%inner(inner_index - 1)%x(:,1) + end do + else + do i = 1, ntp + tp%xheliocentric(:,i) = tp%xh(:,i) + cb%inner(inner_index )%x(:,1) + end do + end if + ! Swap the planetocentric and heliocentric position vectors and central body masses + tp%xh(:,:) = tp%xheliocentric(:,:) + GMcb_original = cb%Gmass + cb%Gmass = tp%cb_heliocentric%Gmass + if (param%loblatecb) call tp%accel_obl(system_planetocen) + if (param%lextra_force) call tp%accel_user(system_planetocen, param, t) + if (param%lgr) call tp%accel_gr(param) + tp%xh(:,:) = xh_original(:,:) + cb%Gmass = GMcb_original + end associate + end select end select else ! Not a close encounter, so just proceded with the standard WHM method - call whm_getacch_tp(tp, system, param, t, xhp) + call whm_getacch_tp(tp, system, param, t, lbeg) end if end select diff --git a/src/rmvs/rmvs_setup.f90 b/src/rmvs/rmvs_setup.f90 index 9d5916f56..4c0c27ff1 100644 --- a/src/rmvs/rmvs_setup.f90 +++ b/src/rmvs/rmvs_setup.f90 @@ -46,37 +46,10 @@ module subroutine rmvs_setup_pl(self,n) return end subroutine rmvs_setup_pl - module subroutine rmvs_setup_tp(self,n) - !! author: David A. Minton - !! - !! Allocate WHM test particle structure - !! - !! Equivalent in functionality to David E. Kaufmann's Swifter routine whm_setup.f90 - implicit none - ! Arguments - class(rmvs_tp), intent(inout) :: self !! RMVS test particle object - integer, intent(in) :: n !! Number of test particles to allocate - - !> Call allocation method for parent class - call whm_setup_tp(self, n) - if (n <= 0) return - - allocate(self%lperi(n)) - allocate(self%plperP(n)) - allocate(self%plencP(n)) - if (self%lplanetocentric) then - allocate(self%xheliocentric(NDIM, n)) - end if - - self%lperi(:) = .false. - - return - end subroutine rmvs_setup_tp - module subroutine rmvs_setup_system(self, param) !! author: David A. Minton !! - !! Wrapper method to initialize a basic Swiftest nbody system from files. + !! nitialize an RMVS nbody system from files and sets up the planetocentric structures. !! !! We currently rearrange the pl order to keep it consistent with the way Swifter does it !! In Swifter, the central body occupies the first position in the pl list, and during @@ -144,31 +117,32 @@ module subroutine rmvs_setup_system(self, param) end select end subroutine rmvs_setup_system - - module subroutine rmvs_setup_set_beg_end(self, xbeg, xend, vbeg) + + module subroutine rmvs_setup_tp(self,n) !! author: David A. Minton - !! - !! Sets one or more of the values of xbeg, xend, and vbeg + !! + !! Allocate WHM test particle structure + !! + !! Equivalent in functionality to David E. Kaufmann's Swifter routine whm_setup.f90 implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: self !! RMVS test particle object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg + class(rmvs_tp), intent(inout) :: self !! RMVS test particle object + integer, intent(in) :: n !! Number of test particles to allocate - if (present(xbeg)) then - if (allocated(self%xbeg)) deallocate(self%xbeg) - allocate(self%xbeg, source=xbeg) - end if - if (present(xend)) then - if (allocated(self%xend)) deallocate(self%xend) - allocate(self%xend, source=xend) - end if - if (present(vbeg)) then - if (allocated(self%vbeg)) deallocate(self%vbeg) - allocate(self%vbeg, source=vbeg) + !> Call allocation method for parent class + call whm_setup_tp(self, n) + if (n <= 0) return + + allocate(self%lperi(n)) + allocate(self%plperP(n)) + allocate(self%plencP(n)) + if (self%lplanetocentric) then + allocate(self%xheliocentric(NDIM, n)) end if - return + self%lperi(:) = .false. - end subroutine rmvs_setup_set_beg_end + return + end subroutine rmvs_setup_tp end submodule s_rmvs_setup diff --git a/src/rmvs/rmvs_step.f90 b/src/rmvs/rmvs_step.f90 index bad3c1b1f..71091f6dd 100644 --- a/src/rmvs/rmvs_step.f90 +++ b/src/rmvs/rmvs_step.f90 @@ -30,7 +30,7 @@ module subroutine rmvs_step_system(self, param, t, dt) allocate(xbeg, source=pl%xh) allocate(vbeg, source=pl%vh) call pl%set_rhill(cb) - call system%set_beg_end(xbeg = xbeg, vbeg = vbeg) + call pl%set_beg_end(xbeg = xbeg, vbeg = vbeg) ! ****** Check for close encounters ***** ! system%rts = RHSCALE lencounter = tp%encounter_check(system, dt) @@ -42,18 +42,17 @@ module subroutine rmvs_step_system(self, param, t, dt) call pl%step(system, param, t, dt) pl%outer(NTENC)%x(:,:) = pl%xh(:,:) pl%outer(NTENC)%v(:,:) = pl%vh(:,:) - call system%set_beg_end(xend = pl%xh) - call rmvs_interp_out(system, param, dt) - call rmvs_step_out(system, param, t, dt) + call rmvs_interp_out(cb, pl, dt) + call rmvs_step_out(cb, pl, tp, system, param, t, dt) call tp%reverse_status() - call system%set_beg_end(xbeg = xbeg, xend = xend) + call pl%set_beg_end(xbeg = xbeg, xend = xend) tp%lfirst = .true. call tp%step(system, param, t, dt) where (tp%status(:) == INACTIVE) tp%status(:) = ACTIVE pl%lfirst = lfirstpl tp%lfirst = lfirsttp else - call whm_step_system(self, param, t, dt) + call whm_step_system(system, param, t, dt) end if end associate end select @@ -63,133 +62,144 @@ module subroutine rmvs_step_system(self, param, t, dt) end subroutine rmvs_step_system - subroutine rmvs_step_out(system, param, t, dt) + subroutine rmvs_interp_out(cb, pl, dt) !! author: David A. Minton !! - !! Step ACTIVE test particles ahead in the outer encounter region, setting up and calling the inner region - !! integration if necessar - !! - !! Adapted from Hal Levison's Swift routines rmvs3_step_out.f and rmvs3_step_out2.f - !! Adapted from David E. Kaufmann's Swifter routines rmvs_step_out.f90 and rmvs_step_out2.f90 + !! Interpolate planet positions between two Keplerian orbits in outer encounter region + !! + !! Adapted from David E. Kaufmann's Swifter routine rmvs_interp_out.f90 + !! + !! Adapted from Hal Levison's Swift routine rmvs3_interp.f implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! Swiftest system object - class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - real(DP), intent(in) :: t !! Current simulation time - real(DP), intent(in) :: dt !! Current stepsiz + class(rmvs_cb), intent(inout) :: cb !! RMVS central body object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + real(DP), intent(in) :: dt !! Step size ! Internals - integer(I4B) :: outer_index, j, k - real(DP) :: dto, outer_time, rts - logical :: lencounter, lfirsttp + integer(I4B) :: i, outer_index + real(DP) :: frac, dntenc + real(DP), dimension(:,:), allocatable :: xtmp, vtmp + real(DP), dimension(:), allocatable :: GMcb, dto + integer(I4B), dimension(:), allocatable :: iflag - select type(pl => system%pl) - class is (rmvs_pl) - select type(tp => system%tp) - class is (rmvs_tp) - associate(cb => system%cb, npl => pl%nbody, ntp => tp%nbody) - dto = dt / NTENC - where(tp%plencP(:) == 0) - tp%status(:) = INACTIVE - elsewhere - tp%lperi(:) = .false. - end where - do outer_index = 1, NTENC - outer_time = t + (outer_index - 1) * dto - call system%set_beg_end(xbeg = pl%outer(outer_index - 1)%x(:, :), & - vbeg = pl%outer(outer_index - 1)%v(:, :), & - xend = pl%outer(outer_index )%x(:, :)) - system%rts = RHPSCALE - lencounter = tp%encounter_check(system, dt) - if (lencounter) then - ! Interpolate planets in inner encounter region - call rmvs_interp_in(system, param, dto, outer_index) - ! Step through the inner region - call rmvs_step_in(system, param, outer_time, dto) - lfirsttp = tp%lfirst - tp%lfirst = .true. - call tp%step(system, param, outer_time, dto) - tp%lfirst = lfirsttp - else - call tp%step(system, param, outer_time, dto) + dntenc = real(NTENC, kind=DP) + associate (npl => pl%nbody) + allocate(xtmp, mold = pl%xh) + allocate(vtmp, mold = pl%vh) + allocate(GMcb(npl)) + allocate(dto(npl)) + allocate(iflag(npl)) + dto(:) = dt / dntenc + GMcb(:) = cb%Gmass + xtmp(:,:) = pl%outer(0)%x(:, :) + vtmp(:,:) = pl%outer(0)%v(:, :) + do outer_index = 1, NTENC - 1 + call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & + vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & + dto(1:npl), iflag(1:npl)) + if (any(iflag(1:npl) /= 0)) then + do i = 1, npl + if (iflag(i) /= 0) then + write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" + write(*, *) GMcb(i), dto(i) + write(*, *) xtmp(:,i) + write(*, *) vtmp(:,i) + write(*, *) " STOPPING " + call util_exit(FAILURE) end if - do j = 1, npl - if (pl%nenc(j) == 0) cycle - where((tp%plencP(:) == j) .and. (tp%status(:) == INACTIVE)) tp%status(:) = ACTIVE - end do end do - end associate - end select - end select + end if + frac = 1.0_DP - outer_index / dntenc + pl%outer(outer_index)%x(:, :) = frac * xtmp(:,:) + pl%outer(outer_index)%v(:, :) = frac * vtmp(:,:) + end do + xtmp(:,:) = pl%outer(NTENC)%x(:, :) + vtmp(:,:) = pl%outer(NTENC)%v(:, :) + do outer_index = NTENC - 1, 1, -1 + call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & + vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & + -dto(1:npl), iflag(1:npl)) + if (any(iflag(1:npl) /= 0)) then + do i = 1, npl + if (iflag(i) /= 0) then + write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" + write(*, *) GMcb(i), -dto(i) + write(*, *) xtmp(:,i) + write(*, *) vtmp(:,i) + write(*, *) " STOPPING " + call util_exit(FAILURE) + end if + end do + end if + frac = outer_index / dntenc + pl%outer(outer_index)%x(:, :) = pl%outer(outer_index)%x(:, :) + frac * xtmp(:,:) + pl%outer(outer_index)%v(:, :) = pl%outer(outer_index)%v(:, :) + frac * vtmp(:,:) + end do + end associate + return - end subroutine rmvs_step_out + end subroutine rmvs_interp_out - subroutine rmvs_step_in(system, param, outer_time, dto) + subroutine rmvs_step_out(cb, pl, tp, system, param, t, dt) !! author: David A. Minton !! - !! Step active test particles ahead in the inner encounter region + !! Step ACTIVE test particles ahead in the outer encounter region, setting up and calling the inner region + !! integration if necessar !! - !! Adapted from Hal Levison's Swift routine rmvs3_step_in.f - !! Adapted from David E. Kaufmann's Swifter routine rmvs_step_in.f90 + !! Adapted from Hal Levison's Swift routines rmvs3_step_out.f and rmvs3_step_out2.f + !! Adapted from David E. Kaufmann's Swifter routines rmvs_step_out.f90 and rmvs_step_out2.f90 implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object - class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - real(DP), intent(in) :: outer_time !! Current time - real(DP), intent(in) :: dto !! Outer step size + class(rmvs_cb), intent(inout) :: cb !! RMVS central body object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + class(rmvs_tp), intent(inout) :: tp !! RMVS test particle object + class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object + class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters + real(DP), intent(in) :: t !! Current simulation time + real(DP), intent(in) :: dt !! Current stepsiz ! Internals - logical :: lfirsttp - integer(I4B) :: i, j, ipleP - real(DP) :: dti, inner_time + integer(I4B) :: outer_index, j, k + real(DP) :: dto, outer_time, rts + logical :: lencounter, lfirsttp - select type(pl => system%pl) - class is (rmvs_pl) - select type (tp => system%tp) - class is (rmvs_tp) - associate(npl => pl%nbody, cb => system%cb) - dti = dto / NTPHENC - if (param%loblatecb) call pl%obl_acc(cb) - call rmvs_make_planetocentric(system, param) - do i = 1, npl - if (pl%nenc(i) == 0) cycle - select type(planetocen_system => pl%planetocentric(i)) - class is (rmvs_nbody_system) - select type(plenci => planetocen_system%pl) - class is (rmvs_pl) - select type(tpenci => planetocen_system%tp) - class is (rmvs_tp) - associate(inner_index => tpenci%index) - ! There are inner encounters with this planet...switch to planetocentric coordinates to proceed - tpenci%lfirst = .true. - inner_time = outer_time - call rmvs_peri_tp(tpenci, pl, inner_time, dti, .true., 0, i, param) - ! now step the encountering test particles fully through the inner encounter - lfirsttp = .true. - do inner_index = 1, NTPHENC ! Integrate over the encounter region, using the "substitute" planetocentric systems at each level - plenci%xh(:,:) = plenci%inner(inner_index - 1)%x(:,:) - call planetocen_system%set_beg_end(xbeg = plenci%inner(inner_index - 1)%x, & - xend = plenci%inner(inner_index)%x) - call tpenci%step(planetocen_system, param, inner_time, dti) - do j = 1, pl%nenc(i) - tpenci%xheliocentric(:, j) = tpenci%xh(:, j) + pl%inner(inner_index)%x(:,i) - end do - inner_time = outer_time + j * dti - call rmvs_peri_tp(tpenci, pl, inner_time, dti, .false., inner_index, i, param) - end do - where(tpenci%status(:) == ACTIVE) tpenci%status(:) = INACTIVE - end associate - end select - end select - end select - end do - call rmvs_end_planetocentric(system) - end associate - end select - end select + associate(npl => pl%nbody, ntp => tp%nbody) + dto = dt / NTENC + where(tp%plencP(:) == 0) + tp%status(:) = INACTIVE + elsewhere + tp%lperi(:) = .false. + end where + do outer_index = 1, NTENC + outer_time = t + (outer_index - 1) * dto + call pl%set_beg_end(xbeg = pl%outer(outer_index - 1)%x(:, :), & + vbeg = pl%outer(outer_index - 1)%v(:, :), & + xend = pl%outer(outer_index )%x(:, :)) + system%rts = RHPSCALE + lencounter = tp%encounter_check(system, dt) + if (lencounter) then + ! Interpolate planets in inner encounter region + call rmvs_interp_in(cb, pl, system, param, dto, outer_index) + ! Step through the inner region + call rmvs_step_in(cb, pl, tp, param, outer_time, dto) + lfirsttp = tp%lfirst + tp%lfirst = .true. + call tp%step(system, param, outer_time, dto) + tp%lfirst = lfirsttp + else + call tp%step(system, param, outer_time, dto) + end if + do j = 1, npl + if (pl%nenc(j) == 0) cycle + where((tp%plencP(:) == j) .and. (tp%status(:) == INACTIVE)) tp%status(:) = ACTIVE + end do + end do + end associate return - end subroutine rmvs_step_in - subroutine rmvs_interp_in(system, param, dt, outer_index) + end subroutine rmvs_step_out + + subroutine rmvs_interp_in(cb, pl, system, param, dt, outer_index) !! author: David A. Minton !! !! Interpolate planet positions between two Keplerian orbits in inner encounter regio @@ -199,7 +209,9 @@ subroutine rmvs_interp_in(system, param, dt, outer_index) !! Adapted from Hal Levison's Swift routine rmvs3_interp.f implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! RMVS test particle object + class(rmvs_cb), intent(inout) :: cb !! RMVS cenral body object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object class(swiftest_parameters), intent(in) :: param !! Swiftest parameters file real(DP), intent(in) :: dt !! Step size integer(I4B), intent(in) :: outer_index !! Outer substep number within current set @@ -210,179 +222,234 @@ subroutine rmvs_interp_in(system, param, dt, outer_index) real(DP), dimension(:), allocatable :: GMcb, dti integer(I4B), dimension(:), allocatable :: iflag - associate (cb => system%cb, npl => system%pl%nbody) - select type(pl => system%pl) - class is (rmvs_pl) - dntphenc = real(NTPHENC, kind=DP) + associate (npl => system%pl%nbody) + dntphenc = real(NTPHENC, kind=DP) - ! Set the endpoints of the inner region from the outer region values in the current outer step index - pl%inner(0)%x(:,:) = pl%outer(outer_index - 1)%x(:, :) - pl%inner(0)%v(:,:) = pl%outer(outer_index - 1)%v(:, :) - pl%inner(NTPHENC)%x(:,:) = pl%outer(outer_index)%x(:, :) - pl%inner(NTPHENC)%v(:,:) = pl%outer(outer_index)%v(:, :) - - allocate(xtmp,mold=pl%xh) - allocate(vtmp,mold=pl%vh) - allocate(GMcb(npl)) - allocate(dti(npl)) - allocate(iflag(npl)) - dti(:) = dt / dntphenc - GMcb(:) = cb%Gmass - xtmp(:, :) = pl%inner(0)%x(:, :) - vtmp(:, :) = pl%inner(0)%v(:, :) - if (param%loblatecb) then - allocate(xh_original,source=pl%xh) - pl%xh(:, :) = xtmp(:, :) ! Temporarily replace heliocentric position with inner substep values to calculate the oblateness terms - call pl%obl_acc(cb) - pl%inner(0)%aobl(:, :) = pl%aobl(:, :) ! Save the oblateness acceleration on the planet for this substep + ! Set the endpoints of the inner region from the outer region values in the current outer step index + pl%inner(0)%x(:,:) = pl%outer(outer_index - 1)%x(:, :) + pl%inner(0)%v(:,:) = pl%outer(outer_index - 1)%v(:, :) + pl%inner(NTPHENC)%x(:,:) = pl%outer(outer_index)%x(:, :) + pl%inner(NTPHENC)%v(:,:) = pl%outer(outer_index)%v(:, :) + + allocate(xtmp,mold=pl%xh) + allocate(vtmp,mold=pl%vh) + allocate(GMcb(npl)) + allocate(dti(npl)) + allocate(iflag(npl)) + dti(:) = dt / dntphenc + GMcb(:) = cb%Gmass + xtmp(:, :) = pl%inner(0)%x(:, :) + vtmp(:, :) = pl%inner(0)%v(:, :) + if (param%loblatecb) then + allocate(xh_original,source=pl%xh) + pl%xh(:, :) = xtmp(:, :) ! Temporarily replace heliocentric position with inner substep values to calculate the oblateness terms + call pl%accel_obl(system) + pl%inner(0)%aobl(:, :) = pl%aobl(:, :) ! Save the oblateness acceleration on the planet for this substep + end if + + do inner_index = 1, NTPHENC - 1 + call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & + vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & + dti(1:npl), iflag(1:npl)) + if (any(iflag(1:npl) /= 0)) then + do i = 1, npl + if (iflag(i) /=0) then + write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" + write(*, *) GMcb(i), dti(i) + write(*, *) xtmp(:,i) + write(*, *) vtmp(:,i) + write(*, *) " STOPPING " + call util_exit(failure) + end if + end do end if - - do inner_index = 1, NTPHENC - 1 - call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & - vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & - dti(1:npl), iflag(1:npl)) - if (any(iflag(1:npl) /= 0)) then - do i = 1, npl - if (iflag(i) /=0) then - write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), dti(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " - call util_exit(failure) - end if - end do - end if - frac = 1.0_DP - inner_index / dntphenc - pl%inner(inner_index)%x(:, :) = frac * xtmp(:,:) - pl%inner(inner_index)%v(:, :) = frac * vtmp(:,:) - end do - - xtmp(:,:) = pl%inner(NTPHENC)%x(:, :) - vtmp(:,:) = pl%inner(NTPHENC)%v(:, :) - - do inner_index = NTPHENC - 1, 1, -1 - call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & - vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & - -dti(1:npl), iflag(1:npl)) - if (any(iflag(1:npl) /= 0)) then - do i = 1, npl - if (iflag(i) /=0) then - write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), -dti(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " - call util_exit(failure) - end if - end do - end if - frac = inner_index / dntphenc - pl%inner(inner_index)%x(:, :) = pl%inner(inner_index)%x(:, :) + frac * xtmp(:, :) - pl%inner(inner_index)%v(:, :) = pl%inner(inner_index)%v(:, :) + frac * vtmp(:, :) - - if (param%loblatecb) then - pl%xh(:,:) = pl%inner(inner_index)%x(:, :) - call pl%obl_acc(cb) - pl%inner(inner_index)%aobl(:, :) = pl%aobl(:, :) - end if - end do + frac = 1.0_DP - inner_index / dntphenc + pl%inner(inner_index)%x(:, :) = frac * xtmp(:,:) + pl%inner(inner_index)%v(:, :) = frac * vtmp(:,:) + end do + + xtmp(:,:) = pl%inner(NTPHENC)%x(:, :) + vtmp(:,:) = pl%inner(NTPHENC)%v(:, :) + + do inner_index = NTPHENC - 1, 1, -1 + call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & + vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & + -dti(1:npl), iflag(1:npl)) + if (any(iflag(1:npl) /= 0)) then + do i = 1, npl + if (iflag(i) /=0) then + write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" + write(*, *) GMcb(i), -dti(i) + write(*, *) xtmp(:,i) + write(*, *) vtmp(:,i) + write(*, *) " STOPPING " + call util_exit(failure) + end if + end do + end if + frac = inner_index / dntphenc + pl%inner(inner_index)%x(:, :) = pl%inner(inner_index)%x(:, :) + frac * xtmp(:, :) + pl%inner(inner_index)%v(:, :) = pl%inner(inner_index)%v(:, :) + frac * vtmp(:, :) + if (param%loblatecb) then - ! Calculate the final value of oblateness accelerations at the final inner substep - pl%xh(:,:) = pl%inner(NTPHENC)%x(:, :) - call pl%obl_acc(cb) - pl%inner(NTPHENC)%aobl(:, :) = pl%aobl(:, :) - ! Put the planet positions back into place - call move_alloc(xh_original, pl%xh) + pl%xh(:,:) = pl%inner(inner_index)%x(:, :) + call pl%accel_obl(system) + pl%inner(inner_index)%aobl(:, :) = pl%aobl(:, :) end if - end select + end do + if (param%loblatecb) then + ! Calculate the final value of oblateness accelerations at the final inner substep + pl%xh(:,:) = pl%inner(NTPHENC)%x(:, :) + call pl%accel_obl(system) + pl%inner(NTPHENC)%aobl(:, :) = pl%aobl(:, :) + ! Put the planet positions back into place + call move_alloc(xh_original, pl%xh) + end if end associate return end subroutine rmvs_interp_in - subroutine rmvs_interp_out(system, param, dt) + subroutine rmvs_step_in(cb, pl, tp, param, outer_time, dto) !! author: David A. Minton !! - !! Interpolate planet positions between two Keplerian orbits in outer encounter region + !! Step active test particles ahead in the inner encounter region + !! + !! Adapted from Hal Levison's Swift routine rmvs3_step_in.f + !! Adapted from David E. Kaufmann's Swifter routine rmvs_step_in.f90 + implicit none + ! Arguments + class(rmvs_cb), intent(inout) :: cb !! RMVS central body object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + class(rmvs_tp), intent(inout) :: tp !! RMVS test particle object + class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters + real(DP), intent(in) :: outer_time !! Current time + real(DP), intent(in) :: dto !! Outer step size + ! Internals + logical :: lfirsttp + integer(I4B) :: i, j, ipleP + real(DP) :: dti, inner_time + + associate(npl => pl%nbody) + dti = dto / NTPHENC + call rmvs_make_planetocentric(cb, pl, tp) + do i = 1, npl + if (pl%nenc(i) == 0) cycle + select type(planetocen_system => pl%planetocentric(i)) + class is (rmvs_nbody_system) + select type(cbenci => planetocen_system%cb) + class is (rmvs_cb) + select type(plenci => planetocen_system%pl) + class is (rmvs_pl) + select type(tpenci => planetocen_system%tp) + class is (rmvs_tp) + associate(inner_index => tpenci%index) + ! There are inner encounters with this planet...switch to planetocentric coordinates to proceed + tpenci%lfirst = .true. + inner_time = outer_time + call rmvs_peri_tp(tpenci, pl, inner_time, dti, .true., 0, i, param) + ! now step the encountering test particles fully through the inner encounter + lfirsttp = .true. + do inner_index = 1, NTPHENC ! Integrate over the encounter region, using the "substitute" planetocentric systems at each level + plenci%xh(:,:) = plenci%inner(inner_index - 1)%x(:,:) + call plenci%set_beg_end(xbeg = plenci%inner(inner_index - 1)%x, & + xend = plenci%inner(inner_index)%x) + call cbenci%set_beg_end(aoblbeg = cbenci%inner(inner_index - 1)%aobl(:, 1), & + aoblend = cbenci%inner(inner_index )%aobl(:, 1)) + call tpenci%step(planetocen_system, param, inner_time, dti) + do j = 1, pl%nenc(i) + tpenci%xheliocentric(:, j) = tpenci%xh(:, j) + pl%inner(inner_index)%x(:,i) + end do + inner_time = outer_time + j * dti + call rmvs_peri_tp(tpenci, pl, inner_time, dti, .false., inner_index, i, param) + end do + where(tpenci%status(:) == ACTIVE) tpenci%status(:) = INACTIVE + end associate + end select + end select + end select + end select + end do + call rmvs_end_planetocentric(pl, tp) + end associate + return + end subroutine rmvs_step_in + + subroutine rmvs_make_planetocentric(cb, pl, tp) + !! author: David A. Minton !! - !! Adapted from David E. Kaufmann's Swifter routine rmvs_interp_out.f90 + !! When encounters are detected, this method will call the interpolation methods for the planets and + !! creates a Swiftest test particle structure for each planet's encountering test particles to simplify the + !! planetocentric calculations. This subroutine is not based on an existing one from Swift and Swifter !! - !! Adapted from Hal Levison's Swift routine rmvs3_interp.f implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object - class(swiftest_parameters), intent(in) :: param !! Swiftest parameters file - real(DP), intent(in) :: dt !! Step size - ! Internals - integer(I4B) :: i, outer_index - real(DP) :: frac, dntenc - real(DP), dimension(:,:), allocatable :: xtmp, vtmp - real(DP), dimension(:), allocatable :: GMcb, dto - integer(I4B), dimension(:), allocatable :: iflag + class(rmvs_cb), intent(inout) :: cb !! RMVS central body object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + class(rmvs_tp), intent(inout) :: tp !! RMVS test particle object - dntenc = real(NTENC, kind=DP) - associate (cb => system%cb, pl => system%pl, npl => system%pl%nbody) - select type(pl => system%pl) - class is (rmvs_pl) - allocate(xtmp, mold = pl%xh) - allocate(vtmp, mold = pl%vh) - allocate(GMcb(npl)) - allocate(dto(npl)) - allocate(iflag(npl)) - dto(:) = dt / dntenc - GMcb(:) = cb%Gmass - xtmp(:,:) = pl%outer(0)%x(:, :) - vtmp(:,:) = pl%outer(0)%v(:, :) - do outer_index = 1, NTENC - 1 - call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & - vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & - dto(1:npl), iflag(1:npl)) + ! Internals + integer(I4B) :: i, j, inner_index, ipc2hc + logical, dimension(:), allocatable :: encmask - if (any(iflag(1:npl) /= 0)) then - do i = 1, npl - if (iflag(i) /= 0) then - write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), dto(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " - call util_exit(FAILURE) - end if - end do - end if - frac = 1.0_DP - outer_index / dntenc - pl%outer(outer_index)%x(:, :) = frac * xtmp(:,:) - pl%outer(outer_index)%v(:, :) = frac * vtmp(:,:) - end do - xtmp(:,:) = pl%outer(NTENC)%x(:, :) - vtmp(:,:) = pl%outer(NTENC)%v(:, :) - do outer_index = NTENC - 1, 1, -1 - call drift_one(GMcb(1:npl), xtmp(1,1:npl), xtmp(2,1:npl), xtmp(3,1:npl), & - vtmp(1,1:npl), vtmp(2,1:npl), vtmp(3,1:npl), & - -dto(1:npl), iflag(1:npl)) - if (any(iflag(1:npl) /= 0)) then - do i = 1, npl - if (iflag(i) /= 0) then - write(*, *) " Planet ", pl%name(i), " is lost!!!!!!!!!!" - write(*, *) GMcb(i), -dto(i) - write(*, *) xtmp(:,i) - write(*, *) vtmp(:,i) - write(*, *) " STOPPING " - call util_exit(FAILURE) - end if - end do - end if - frac = outer_index / dntenc - pl%outer(outer_index)%x(:, :) = pl%outer(outer_index)%x(:, :) + frac * xtmp(:,:) - pl%outer(outer_index)%v(:, :) = pl%outer(outer_index)%v(:, :) + frac * vtmp(:,:) - end do - end select + associate (npl => pl%nbody, ntp => tp%nbody) + do i = 1, npl + if (pl%nenc(i) == 0) cycle + ! There are inner encounters with this planet + if (allocated(encmask)) deallocate(encmask) + allocate(encmask(ntp)) + encmask(:) = tp%plencP(:) == i + allocate(rmvs_tp :: pl%planetocentric(i)%tp) + ! Create encountering test particle structure + select type(cbenci => pl%planetocentric(i)%cb) + class is (rmvs_cb) + select type(plenci => pl%planetocentric(i)%pl) + class is (rmvs_pl) + select type(tpenci => pl%planetocentric(i)%tp) + class is (rmvs_tp) + tpenci%lplanetocentric = .true. + call tpenci%setup(pl%nenc(i)) + tpenci%cb_heliocentric = cb + tpenci%ipleP = i + tpenci%status(:) = ACTIVE + ! Grab all the encountering test particles and convert them to a planetocentric frame + tpenci%name(:) = pack(tp%name(:), encmask(:)) + do j = 1, NDIM + tpenci%xheliocentric(j, :) = pack(tp%xh(j,:), encmask(:)) + tpenci%xh(j, :) = tpenci%xheliocentric(j, :) - pl%inner(0)%x(j, i) + tpenci%vh(j, :) = pack(tp%vh(j,:), encmask(:)) - pl%inner(0)%v(j, i) + end do + tpenci%lperi(:) = pack(tp%lperi(:), encmask(:)) + tpenci%plperP(:) = pack(tp%plperP(:), encmask(:)) + ! Make sure that the test particles get the planetocentric value of mu + allocate(cbenci%inner(0:NTPHENC)) + do inner_index = 0, NTPHENC + allocate(plenci%inner(inner_index)%x, mold=pl%inner(inner_index)%x) + allocate(plenci%inner(inner_index)%v, mold=pl%inner(inner_index)%x) + allocate(plenci%inner(inner_index)%aobl, mold=pl%inner(inner_index)%aobl) + allocate(cbenci%inner(inner_index)%x(NDIM,1)) + allocate(cbenci%inner(inner_index)%v(NDIM,1)) + allocate(cbenci%inner(inner_index)%aobl(NDIM,1)) + cbenci%inner(inner_index)%x(:,1) = pl%inner(inner_index)%x(:, i) + cbenci%inner(inner_index)%v(:,1) = pl%inner(inner_index)%v(:, i) + cbenci%inner(inner_index)%aobl(:,1) = pl%inner(inner_index)%aobl(:, i) + plenci%inner(inner_index)%x(:,1) = -cbenci%inner(inner_index)%x(:,1) + plenci%inner(inner_index)%v(:,1) = -cbenci%inner(inner_index)%v(:,1) + do j = 2, npl + ipc2hc = plenci%plind(j) + plenci%inner(inner_index)%x(:,j) = pl%inner(inner_index)%x(:, ipc2hc) - cbenci%inner(inner_index)%x(:,1) + plenci%inner(inner_index)%v(:,j) = pl%inner(inner_index)%v(:, ipc2hc) - cbenci%inner(inner_index)%v(:,1) + end do + end do + call tpenci%set_mu(cbenci) + end select + end select + end select + end do end associate - return + end subroutine rmvs_make_planetocentric - end subroutine rmvs_interp_out subroutine rmvs_peri_tp(tp, pl, t, dt, lfirst, inner_index, ipleP, param) !! author: David A. Minton @@ -467,148 +534,57 @@ subroutine rmvs_peri_tp(tp, pl, t, dt, lfirst, inner_index, ipleP, param) end subroutine rmvs_peri_tp - subroutine rmvs_make_planetocentric(system, param) - !! author: David A. Minton - !! - !! When encounters are detected, this method will call the interpolation methods for the planets and - !! creates a Swiftest test particle structure for each planet's encountering test particles to simplify the - !! planetocentric calculations. This subroutine is not based on an existing one from Swift and Swifter - !! - implicit none - ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object - class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters - - ! Internals - integer(I4B) :: i, j, inner_index, ipc2hc - logical, dimension(:), allocatable :: encmask - - select type(cb => system%cb) - class is (rmvs_cb) - select type(pl => system%pl) - class is (rmvs_pl) - select type (tp => system%tp) - class is (rmvs_tp) - associate (npl => pl%nbody, ntp => tp%nbody) - do i = 1, npl - if (pl%nenc(i) == 0) cycle - ! There are inner encounters with this planet - if (allocated(encmask)) deallocate(encmask) - allocate(encmask(ntp)) - encmask(:) = tp%plencP(:) == i - allocate(rmvs_tp :: pl%planetocentric(i)%tp) - ! Create encountering test particle structure - select type(cbenci => pl%planetocentric(i)%cb) - class is (rmvs_cb) - select type(plenci => pl%planetocentric(i)%pl) - class is (rmvs_pl) - select type(tpenci => pl%planetocentric(i)%tp) - class is (rmvs_tp) - tpenci%lplanetocentric = .true. - call tpenci%setup(pl%nenc(i)) - tpenci%cb_heliocentric = cb - tpenci%ipleP = i - tpenci%status(:) = ACTIVE - ! Grab all the encountering test particles and convert them to a planetocentric frame - tpenci%name(:) = pack(tp%name(:), encmask(:)) - do j = 1, NDIM - tpenci%xheliocentric(j, :) = pack(tp%xh(j,:), encmask(:)) - tpenci%xh(j, :) = tpenci%xheliocentric(j, :) - pl%inner(0)%x(j, i) - tpenci%vh(j, :) = pack(tp%vh(j,:), encmask(:)) - pl%inner(0)%v(j, i) - end do - tpenci%lperi(:) = pack(tp%lperi(:), encmask(:)) - tpenci%plperP(:) = pack(tp%plperP(:), encmask(:)) - ! Make sure that the test particles get the planetocentric value of mu - allocate(cbenci%inner(0:NTPHENC)) - do inner_index = 0, NTPHENC - allocate(plenci%inner(inner_index)%x, mold=pl%inner(inner_index)%x) - allocate(plenci%inner(inner_index)%v, mold=pl%inner(inner_index)%x) - allocate(plenci%inner(inner_index)%aobl, mold=pl%inner(inner_index)%aobl) - allocate(cbenci%inner(inner_index)%x(NDIM,1)) - allocate(cbenci%inner(inner_index)%v(NDIM,1)) - allocate(cbenci%inner(inner_index)%aobl(NDIM,1)) - cbenci%inner(inner_index)%x(:,1) = pl%inner(inner_index)%x(:, i) - cbenci%inner(inner_index)%v(:,1) = pl%inner(inner_index)%v(:, i) - cbenci%inner(inner_index)%aobl(:,1) = pl%inner(inner_index)%aobl(:, i) - plenci%inner(inner_index)%x(:,1) = -cbenci%inner(inner_index)%x(:,1) - plenci%inner(inner_index)%v(:,1) = -cbenci%inner(inner_index)%v(:,1) - do j = 2, npl - ipc2hc = plenci%plind(j) - plenci%inner(inner_index)%x(:,j) = pl%inner(inner_index)%x(:, ipc2hc) - cbenci%inner(inner_index)%x(:,1) - plenci%inner(inner_index)%v(:,j) = pl%inner(inner_index)%v(:, ipc2hc) - cbenci%inner(inner_index)%v(:,1) - end do - end do - call tpenci%set_mu(cbenci) - end select - end select - end select - end do - end associate - end select - end select - end select - return - end subroutine rmvs_make_planetocentric - - subroutine rmvs_end_planetocentric(system) + subroutine rmvs_end_planetocentric(pl, tp) !! author: David A. Minton !! !! Deallocates all of the encountering particle data structures for next time !! implicit none ! Arguments - class(rmvs_nbody_system), intent(inout) :: system !! RMVS nbody system object + class(rmvs_pl), intent(inout) :: pl !! RMVS massive body object + class(rmvs_tp), intent(inout) :: tp !! RMVS test particle objec ! Internals integer(I4B) :: i, j, inner_index integer(I4B), dimension(:), allocatable :: tpind logical, dimension(:), allocatable :: encmask - select type(cb => system%cb) - class is (rmvs_cb) - select type(pl => system%pl) - class is (rmvs_pl) - select type (tp => system%tp) - class is (rmvs_tp) - associate (npl => pl%nbody, ntp => tp%nbody) - do i = 1, npl - if (pl%nenc(i) == 0) cycle - select type(cbenci => pl%planetocentric(i)%cb) - class is (rmvs_cb) - select type(plenci => pl%planetocentric(i)%pl) - class is (rmvs_pl) - select type(tpenci => pl%planetocentric(i)%tp) - class is (rmvs_tp) - if (allocated(tpind)) deallocate(tpind) - allocate(tpind(pl%nenc(i))) - ! Index array of encountering test particles - if (allocated(encmask)) deallocate(encmask) - allocate(encmask(ntp)) - encmask(:) = tp%plencP(:) == i - tpind(:) = pack([(j,j=1,ntp)], encmask(:)) - - ! Copy the results of the integration back over and shift back to heliocentric reference - tp%status(tpind(1:pl%nenc(i))) = tpenci%status(1:pl%nenc(i)) - do j = 1, NDIM - tp%xh(j, tpind(1:pl%nenc(i))) = tpenci%xh(j,1:pl%nenc(i)) + pl%inner(NTPHENC)%x(j, i) - tp%vh(j, tpind(1:pl%nenc(i))) = tpenci%vh(j,1:pl%nenc(i)) + pl%inner(NTPHENC)%v(j, i) - end do - tp%lperi(tpind(1:pl%nenc(i))) = tpenci%lperi(tpind(1:pl%nenc(i))) - tp%plperP(tpind(1:pl%nenc(i))) = tpenci%plperP(tpind(1:pl%nenc(i))) - deallocate(pl%planetocentric(i)%tp) - deallocate(cbenci%inner) - do inner_index = 0, NTPHENC - deallocate(plenci%inner(inner_index)%x) - deallocate(plenci%inner(inner_index)%v) - deallocate(plenci%inner(inner_index)%aobl) - end do - end select - end select - end select - end do - end associate + associate (npl => pl%nbody, ntp => tp%nbody) + do i = 1, npl + if (pl%nenc(i) == 0) cycle + select type(cbenci => pl%planetocentric(i)%cb) + class is (rmvs_cb) + select type(plenci => pl%planetocentric(i)%pl) + class is (rmvs_pl) + select type(tpenci => pl%planetocentric(i)%tp) + class is (rmvs_tp) + if (allocated(tpind)) deallocate(tpind) + allocate(tpind(pl%nenc(i))) + ! Index array of encountering test particles + if (allocated(encmask)) deallocate(encmask) + allocate(encmask(ntp)) + encmask(:) = tp%plencP(:) == i + tpind(:) = pack([(j,j=1,ntp)], encmask(:)) + + ! Copy the results of the integration back over and shift back to heliocentric reference + tp%status(tpind(1:pl%nenc(i))) = tpenci%status(1:pl%nenc(i)) + do j = 1, NDIM + tp%xh(j, tpind(1:pl%nenc(i))) = tpenci%xh(j,1:pl%nenc(i)) + pl%inner(NTPHENC)%x(j, i) + tp%vh(j, tpind(1:pl%nenc(i))) = tpenci%vh(j,1:pl%nenc(i)) + pl%inner(NTPHENC)%v(j, i) + end do + tp%lperi(tpind(1:pl%nenc(i))) = tpenci%lperi(1:pl%nenc(i)) + tp%plperP(tpind(1:pl%nenc(i))) = tpenci%plperP(1:pl%nenc(i)) + deallocate(pl%planetocentric(i)%tp) + deallocate(cbenci%inner) + do inner_index = 0, NTPHENC + deallocate(plenci%inner(inner_index)%x) + deallocate(plenci%inner(inner_index)%v) + deallocate(plenci%inner(inner_index)%aobl) + end do + end select + end select end select - end select - end select + end do + end associate return end subroutine rmvs_end_planetocentric diff --git a/src/setup/setup.f90 b/src/setup/setup.f90 index 03fd6f0f0..0f16e7c5b 100644 --- a/src/setup/setup.f90 +++ b/src/setup/setup.f90 @@ -15,7 +15,6 @@ module subroutine setup_construct_system(system, param) case (BS) write(*,*) 'Bulirsch-Stoer integrator not yet enabled' case (HELIO) - write(*,*) 'Democratic Heliocentric integrator not yet enabled' allocate(helio_nbody_system :: system) select type(system) class is (helio_nbody_system) @@ -70,6 +69,7 @@ module subroutine setup_body(self,n) self%nbody = n if (n <= 0) return + self%lfirst = .true. !write(*,*) 'Allocating the basic Swiftest particle' allocate(self%name(n)) @@ -174,79 +174,4 @@ module subroutine setup_tp(self, n) return end subroutine setup_tp - module subroutine setup_set_msys(self) - !! author: David A. Minton - !! - !! Sets the value of msys and the vector mass quantities based on the total mass of the system - implicit none - class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system objec - self%msys = self%cb%mass + sum(self%pl%mass(1:self%pl%nbody)) - - return - end subroutine setup_set_msys - - module subroutine setup_set_mu_pl(self, cb) - !! author: David A. Minton - !! - !! Computes G * (M + m) for each massive body - implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object - - if (self%nbody > 0) self%mu(:) = cb%Gmass + self%Gmass(:) - - return - end subroutine setup_set_mu_pl - - module subroutine setup_set_mu_tp(self, cb) - !! author: David A. Minton - !! - !! Converts certain scalar values to arrays so that they can be used in elemental functions - implicit none - class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object - class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object - - if (self%nbody > 0) self%mu(:) = cb%Gmass - - return - end subroutine setup_set_mu_tp - - module subroutine setup_set_rhill(self,cb) - !! author: David A. Minton - !! - !! Sets the value of the Hill's radius - implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object - class(swiftest_cb), intent(inout) :: cb !! Swiftest massive body object - - if (self%nbody > 0) then - call self%xv2el(cb) - self%rhill(:) = self%a(:) * (self%Gmass(:) / cb%Gmass / 3)**THIRD - end if - - return - end subroutine setup_set_rhill - - module subroutine setup_set_ir3h(self) - !! author: David A. Minton - !! - !! Sets the inverse heliocentric radius term (1/rh**3) for all bodies in a structure - implicit none - class(swiftest_body), intent(inout) :: self !! Swiftest generic body object - - integer(I4B) :: i - real(DP) :: r2, irh - - if (self%nbody > 0) then - - do i = 1, self%nbody - r2 = dot_product(self%xh(:, i), self%xh(:, i)) - irh = 1.0_DP / sqrt(r2) - self%ir3h(i) = irh / r2 - end do - end if - - return - end subroutine setup_set_ir3h - end submodule s_setup diff --git a/src/symba/symba_helio_getacch.f90 b/src/symba/symba_helio_getacch.f90 index 65d2171f8..6d69de2b9 100644 --- a/src/symba/symba_helio_getacch.f90 +++ b/src/symba/symba_helio_getacch.f90 @@ -19,7 +19,7 @@ ! executable code if (lflag) then do i = 2, npl - helio_plA%ahi(:,i) = (/ 0.0_DP, 0.0_DP, 0.0_DP /) + helio_plA%ah(:,i) = (/ 0.0_DP, 0.0_DP, 0.0_DP /) end do call symba_helio_getacch_int(npl, nplm, helio_plA) end if @@ -35,11 +35,11 @@ end do call obl_acc(helio_plA, param%j2rp2, param%j4rp4, xh, irh, aobl) do i = 2, npl - helio_plA%ah(:,i) = helio_plA%ahi(:,i) + aobl(:, i) - aobl(:, 1) + helio_plA%ah(:,i) = helio_plA%ah(:,i) + aobl(:, i) - aobl(:, 1) end do else do i = 2, npl - helio_plA%ah(:,i) = helio_plA%ahi(:,i) + helio_plA%ah(:,i) = helio_plA%ah(:,i) end do end if if (lextra_force) call helio_user_getacch(t, npl, helio_plA) diff --git a/src/symba/symba_helio_getacch_int.f90 b/src/symba/symba_helio_getacch_int.f90 index 718f4b189..8093c48d7 100644 --- a/src/symba/symba_helio_getacch_int.f90 +++ b/src/symba/symba_helio_getacch_int.f90 @@ -21,8 +21,8 @@ irij3 = 1.0_DP/(rji2*sqrt(rji2)) faci = helio_plA%swiftest%mass(i)*irij3 facj = helio_plA%swiftest%mass(j)*irij3 - helio_plA%ahi(:,i) = helio_plA%ahi(:,i) + facj*dx(:) - helio_plA%ahi(:,j) = helio_plA%ahi(:,j) - faci*dx(:) + helio_plA%ah(:,i) = helio_plA%ah(:,i) + facj*dx(:) + helio_plA%ah(:,j) = helio_plA%ah(:,j) - faci*dx(:) end do end do return diff --git a/src/symba/symba_step_helio.f90 b/src/symba/symba_step_helio.f90 index 54803c97e..3d3284c0a 100644 --- a/src/symba/symba_step_helio.f90 +++ b/src/symba/symba_step_helio.f90 @@ -9,14 +9,14 @@ use swiftest implicit none logical :: lfirsttp - real(DP), dimension(NDIM) :: ptb, pte + real(DP), dimension(NDIM) :: ptbeg, ptend real(DP), dimension(npl, NDIMm) :: xbeg, xend ! executable code lfirsttp = lfirst - call symba_step_helio_pl(lfirst, lextra_force, t, npl, nplm, param%nplmax, helio_plA, param%j2rp2, param%j4rp4, dt, xbeg, xend, ptb, pte) + call symba_step_helio_pl(lfirst, lextra_force, t, npl, nplm, param%nplmax, helio_plA, param%j2rp2, param%j4rp4, dt, xbeg, xend, ptbeg, ptend) if (ntp > 0) call helio_step_tp(lfirsttp, lextra_force, t, nplm, param%nplmax, ntp, param%ntpmax, helio_plA, helio_tpA, param%j2rp2, param%j4rp4, & - dt, xbeg, xend, ptb, pte) + dt, xbeg, xend, ptbeg, ptend) return diff --git a/src/symba/symba_step_helio_pl.f90 b/src/symba/symba_step_helio_pl.f90 index bf6dd412f..bcf2cfc40 100644 --- a/src/symba/symba_step_helio_pl.f90 +++ b/src/symba/symba_step_helio_pl.f90 @@ -23,7 +23,7 @@ lfirst = .false. end if - call helio_lindrift(npl, helio_plA%swiftest, dth, ptb) + call helio_lindrift(npl, helio_plA%swiftest, dth, ptbeg) call symba_helio_getacch(lflag, lextra_force, t, npl, nplm, param%nplmax, helio_plA, param%j2rp2, param%j4rp4) lflag = .true. @@ -42,7 +42,7 @@ call helio_kickvb(npl, helio_plA, dth) - call helio_lindrift(npl, helio_plA%swiftest, dth, pte) + call helio_lindrift(npl, helio_plA%swiftest, dth, ptend) call coord_vb2vh(npl, helio_plA%swiftest) diff --git a/src/symba/symba_step_interp.f90 b/src/symba/symba_step_interp.f90 index b9832ab53..7ec056ec8 100644 --- a/src/symba/symba_step_interp.f90 +++ b/src/symba/symba_step_interp.f90 @@ -13,7 +13,7 @@ logical , save :: lmalloc = .true. integer( I4B) :: i, irec real(DP) :: dth, msys - real(DP), dimension(NDIM) :: ptb, pte + real(DP), dimension(NDIM) :: ptbeg, ptend real(DP), dimension(:, :), allocatable, save :: xbeg, xend ! executable code @@ -26,10 +26,10 @@ call coord_vh2vb(npl, symba_plA, msys) - call helio_lindrift(npl, symba_plA, dth, ptb) + call helio_lindrift(npl, symba_plA, dth, ptbeg) if (ntp > 0) then - call coord_vh2vb_tp(ntp, symba_tpA, -ptb) - call helio_lindrift_tp(ntp, symba_tpA, dth, ptb) + call coord_vh2vb_tp(ntp, symba_tpA, -ptbeg) + call helio_lindrift_tp(ntp, symba_tpA, dth, ptbeg) do i = 2, npl xbeg(:, i) = symba_plA%xh(:,i) end do @@ -61,10 +61,10 @@ call helio_kickvb(npl, symba_plA, dth) if (ntp > 0) call helio_kickvb_tp(ntp, symba_tpA, dth) call coord_vb2vh(npl, symba_plA) - call helio_lindrift(npl, symba_plA, dth, pte) + call helio_lindrift(npl, symba_plA, dth, ptend) if (ntp > 0) then - call coord_vb2vh_tp(ntp, symba_tpA, -pte) - call helio_lindrift_tp(ntp, symba_tpA, dth, pte) + call coord_vb2vh_tp(ntp, symba_tpA, -ptend) + call helio_lindrift_tp(ntp, symba_tpA, dth, ptend) end if return diff --git a/src/symba/symba_step_interp_eucl.f90 b/src/symba/symba_step_interp_eucl.f90 index 9250e87f2..2036ae9aa 100644 --- a/src/symba/symba_step_interp_eucl.f90 +++ b/src/symba/symba_step_interp_eucl.f90 @@ -12,7 +12,7 @@ logical , save :: lmalloc = .true. integer(I4B) :: i, irec real(DP) :: dth, msys - real(DP), dimension(NDIM) :: ptb, pte + real(DP), dimension(NDIM) :: ptbeg, ptend real(DP), dimension(:, :), allocatable, save :: xbeg, xend ! executable code @@ -25,10 +25,10 @@ call coord_vh2vb(npl, symba_plA, msys) - call helio_lindrift(npl, symba_plA, dth, ptb) + call helio_lindrift(npl, symba_plA, dth, ptbeg) if (ntp > 0) then - call coord_vh2vb_tp(ntp, symba_tpA, -ptb) - call helio_lindrift_tp(ntp, symba_tpA, dth, ptb) + call coord_vh2vb_tp(ntp, symba_tpA, -ptbeg) + call helio_lindrift_tp(ntp, symba_tpA, dth, ptbeg) do i = 2, npl xbeg(:, i) = symba_plA%xh(:,i) end do @@ -61,10 +61,10 @@ call helio_kickvb(npl, symba_plA, dth) if (ntp > 0) call helio_kickvb_tp(ntp, symba_tpA, dth) call coord_vb2vh(npl, symba_plA) - call helio_lindrift(npl, symba_plA, dth, pte) + call helio_lindrift(npl, symba_plA, dth, ptend) if (ntp > 0) then - call coord_vb2vh_tp(ntp, symba_tpA, -pte) - call helio_lindrift_tp(ntp, symba_tpA, dth, pte) + call coord_vb2vh_tp(ntp, symba_tpA, -ptend) + call helio_lindrift_tp(ntp, symba_tpA, dth, ptend) end if return diff --git a/src/user/user_getacch.f90 b/src/user/user_getacch.f90 index da3d00578..c54c21693 100644 --- a/src/user/user_getacch.f90 +++ b/src/user/user_getacch.f90 @@ -1,10 +1,10 @@ submodule(swiftest_classes) s_user_getacch use swiftest contains - module subroutine user_getacch_body(self, system, param, t) + module subroutine user_getacch_body(self, system, param, t, lbeg) !! author: David A. Minton !! - !! Add user-supplied heliocentric accelerations to planets + !! Add user-supplied heliocentric accelerations to planets. !! !! Adapted from David E. Kaufmann's Swifter routine whm_user_getacch.f90 implicit none @@ -13,6 +13,7 @@ module subroutine user_getacch_body(self, system, param, t) class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody_system_object class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of user parameters real(DP), intent(in) :: t !! Current time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the ste return end subroutine user_getacch_body diff --git a/src/util/util_coord.f90 b/src/util/util_coord.f90 index f1c39b203..387fc8f6b 100644 --- a/src/util/util_coord.f90 +++ b/src/util/util_coord.f90 @@ -15,16 +15,22 @@ module subroutine util_coord_h2b_pl(self, cb) ! Internals integer(I4B) :: i real(DP) :: msys + real(DP), dimension(NDIM) :: xtmp, vtmp - associate(npl => self%nbody, xbcb => cb%xb, vbcb => cb%vb, Mcb => cb%Gmass, & - xb => self%xb, xh => self%xh, vb => self%vb, vh => self%vh, Mpl => self%Gmass) - - msys = Mcb + sum(Mpl(1:npl)) - do i = 1, NDIM - xbcb(i) = -sum(Mpl(1:npl) * xh(i, 1:npl)) / Mcb - vbcb(i) = -sum(Mpl(1:npl) * vh(i, 1:npl)) / Mcb - xb(i, 1:npl) = xh(i, 1:npl) + xbcb(i) - vb(i, 1:npl) = vh(i, 1:npl) + vbcb(i) + associate(pl => self, npl => self%nbody) + msys = cb%Gmass + xtmp(:) = 0.0_DP + vtmp(:) = 0.0_DP + do i = 1, npl + msys = msys + pl%Gmass(i) + xtmp(:) = xtmp(:) + pl%Gmass(i) * pl%xh(:,i) + vtmp(:) = vtmp(:) + pl%Gmass(i) * pl%vh(:,i) + end do + cb%xb(:) = -xtmp(:) / msys + cb%vb(:) = -vtmp(:) / msys + do i = 1, npl + pl%xb(:,i) = pl%xh(:,i) + cb%xb(:) + pl%vb(:,i) = pl%vh(:,i) + cb%vb(:) end do end associate diff --git a/src/util/util_get_energy_and_momentum.f90 b/src/util/util_get.f90 similarity index 100% rename from src/util/util_get_energy_and_momentum.f90 rename to src/util/util_get.f90 diff --git a/src/util/util_set.f90 b/src/util/util_set.f90 new file mode 100644 index 000000000..b77579de1 --- /dev/null +++ b/src/util/util_set.f90 @@ -0,0 +1,123 @@ +submodule(swiftest_classes) s_util_set + !! author: David A. Minton + !! This submodule contains a collection of setter method implementations + use swiftest +contains + + module subroutine util_set_beg_end_cb(self, aoblbeg, aoblend) + !! author: David A. Minton + !! + !! Sets one or more of the values of aoblbeg and aoblend + implicit none + ! Arguments + class(swiftest_cb), intent(inout) :: self !! Swiftest central body object + real(DP), dimension(:), intent(in), optional :: aoblbeg !! Oblateness acceleration term at beginning of step + real(DP), dimension(:), intent(in), optional :: aoblend !! Oblateness acceleration term at end of step + + if (present(aoblbeg)) self%aoblbeg = aoblbeg + if (present(aoblend)) self%aoblend = aoblend + return + + end subroutine util_set_beg_end_cb + + module subroutine util_set_beg_end_pl(self, xbeg, xend, vbeg) + !! author: David A. Minton + !! + !! Sets one or more of the values of xbeg, xend, and vbeg + implicit none + ! Arguments + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg + + if (present(xbeg)) then + if (allocated(self%xbeg)) deallocate(self%xbeg) + allocate(self%xbeg, source=xbeg) + end if + if (present(xend)) then + if (allocated(self%xend)) deallocate(self%xend) + allocate(self%xend, source=xend) + end if + if (present(vbeg)) then + if (allocated(self%vbeg)) deallocate(self%vbeg) + allocate(self%vbeg, source=vbeg) + end if + + return + + end subroutine util_set_beg_end_pl + + module subroutine util_set_msys(self) + !! author: David A. Minton + !! + !! Sets the value of msys and the vector mass quantities based on the total mass of the system + implicit none + class(swiftest_nbody_system), intent(inout) :: self !! Swiftest system objec + self%msys = self%cb%mass + sum(self%pl%mass(1:self%pl%nbody)) + + return + end subroutine util_set_msys + + module subroutine util_set_mu_pl(self, cb) + !! author: David A. Minton + !! + !! Computes G * (M + m) for each massive body + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + + if (self%nbody > 0) self%mu(:) = cb%Gmass + self%Gmass(:) + + return + end subroutine util_set_mu_pl + + module subroutine util_set_mu_tp(self, cb) + !! author: David A. Minton + !! + !! Converts certain scalar values to arrays so that they can be used in elemental functions + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + + if (self%nbody > 0) self%mu(:) = cb%Gmass + + return + end subroutine util_set_mu_tp + + module subroutine util_set_rhill(self,cb) + !! author: David A. Minton + !! + !! Sets the value of the Hill's radius + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest massive body object + + if (self%nbody > 0) then + call self%xv2el(cb) + self%rhill(:) = self%a(:) * (self%Gmass(:) / cb%Gmass / 3)**THIRD + end if + + return + end subroutine util_set_rhill + + module subroutine util_set_ir3h(self) + !! author: David A. Minton + !! + !! Sets the inverse heliocentric radius term (1/rh**3) for all bodies in a structure + implicit none + class(swiftest_body), intent(inout) :: self !! Swiftest generic body object + + integer(I4B) :: i + real(DP) :: r2, irh + + if (self%nbody > 0) then + + do i = 1, self%nbody + r2 = dot_product(self%xh(:, i), self%xh(:, i)) + irh = 1.0_DP / sqrt(r2) + self%ir3h(i) = irh / r2 + end do + end if + + return + end subroutine util_set_ir3h +end submodule s_util_set \ No newline at end of file diff --git a/src/whm/whm_getacch.f90 b/src/whm/whm_getacch.f90 index 67ecc7487..26a3acb19 100644 --- a/src/whm/whm_getacch.f90 +++ b/src/whm/whm_getacch.f90 @@ -1,7 +1,7 @@ submodule(whm_classes) s_whm_getacch use swiftest contains - module subroutine whm_getacch_pl(self, system, param, t) + module subroutine whm_getacch_pl(self, system, param, t, lbeg) !! author: David A. Minton !! !! Compute heliocentric accelerations of planets @@ -14,6 +14,7 @@ module subroutine whm_getacch_pl(self, system, param, t) class(swiftest_nbody_system), intent(inout) :: system !! Swiftest central body particle data structure class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current time + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step ! Internals integer(I4B) :: i real(DP), dimension(NDIM) :: ah0 @@ -31,15 +32,19 @@ module subroutine whm_getacch_pl(self, system, param, t) call whm_getacch_ah2(cb, pl) call whm_getacch_ah3(pl) - if (param%loblatecb) call pl%obl_acc(cb) - if (param%lextra_force) call pl%user_getacch(system, param, t) - if (param%lgr) call pl%gr_getacch(param) + if (param%loblatecb) then + cb%aoblbeg = cb%aobl + call pl%accel_obl(system) + cb%aoblend = cb%aobl + end if + if (param%lextra_force) call pl%accel_user(system, param, t) + if (param%lgr) call pl%accel_gr(param) end associate return end subroutine whm_getacch_pl - module subroutine whm_getacch_tp(self, system, param, t, xhp) + module subroutine whm_getacch_tp(self, system, param, t, lbeg) !! author: David A. Minton !! !! Compute heliocentric accelerations of test particles @@ -52,22 +57,30 @@ module subroutine whm_getacch_tp(self, system, param, t, xhp) class(swiftest_nbody_system), intent(inout) :: system !! Swiftest central body particle data structure class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters of real(DP), intent(in) :: t !! Current time - real(DP), dimension(:,:), intent(in) :: xhp !! Heliocentric positions of planets at the current substep + logical, optional, intent(in) :: lbeg !! Optional argument that determines whether or not this is the beginning or end of the step ! Internals integer(I4B) :: i real(DP), dimension(NDIM) :: ah0 + real(DP), dimension(:,:), allocatable :: xhp associate(tp => self, ntp => self%nbody, pl => system%pl, cb => system%cb, npl => system%pl%nbody) if (ntp == 0 .or. npl == 0) return + if (present(lbeg)) system%lbeg = lbeg + + if (system%lbeg) then + allocate(xhp, source=pl%xbeg) + else + allocate(xhp, source=pl%xend) + end if ah0(:) = whm_getacch_ah0(pl%Gmass(:), xhp(:,:), npl) do i = 1, ntp tp%ah(:, i) = ah0(:) end do call whm_getacch_ah3_tp(system, xhp) - if (param%loblatecb) call tp%obl_acc(cb) - if (param%lextra_force) call tp%user_getacch(system, param, t) - if (param%lgr) call tp%gr_getacch(param) + if (param%loblatecb) call tp%accel_obl(system) + if (param%lextra_force) call tp%accel_user(system, param, t) + if (param%lgr) call tp%accel_gr(param) end associate return end subroutine whm_getacch_tp diff --git a/src/whm/whm_setup.f90 b/src/whm/whm_setup.f90 index e0812d00d..9598b61ea 100644 --- a/src/whm/whm_setup.f90 +++ b/src/whm/whm_setup.f90 @@ -47,7 +47,7 @@ module subroutine whm_setup_tp(self,n) return end subroutine whm_setup_tp - module subroutine whm_setup_set_mu_eta_pl(self, cb) + module subroutine whm_util_set_mu_eta_pl(self, cb) !! author: David A. Minton !! !! Sets the Jacobi mass value eta for all massive bodies @@ -61,7 +61,7 @@ module subroutine whm_setup_set_mu_eta_pl(self, cb) associate(pl => self, npl => self%nbody, GMpl => self%Gmass, muj => self%muj, & eta => self%eta, GMcb => cb%Gmass) if (npl == 0) return - call setup_set_mu_pl(pl, cb) + call util_set_mu_pl(pl, cb) eta(1) = GMcb + GMpl(1) muj(1) = eta(1) do i = 2, npl @@ -70,12 +70,12 @@ module subroutine whm_setup_set_mu_eta_pl(self, cb) end do end associate - end subroutine whm_setup_set_mu_eta_pl + end subroutine whm_util_set_mu_eta_pl module subroutine whm_setup_system(self, param) !! author: David A. Minton !! - !! Wrapper method to initialize a basic Swiftest nbody system from files + !! Initialize a WHM nbody system from files !! implicit none ! Arguments @@ -89,7 +89,7 @@ module subroutine whm_setup_system(self, param) select type(pl => self%pl) class is (whm_pl) call pl%set_mu(self%cb) - if (param%lgr) call pl%gr_vh2pv(param) + if (param%lgr) call pl%vh2pv(param) !call pl%eucl_index() end select end if @@ -98,7 +98,7 @@ module subroutine whm_setup_system(self, param) select type(tp => self%tp) class is (whm_tp) call tp%set_mu(self%cb) - if (param%lgr) call tp%gr_vh2pv(param) + if (param%lgr) call tp%vh2pv(param) end select end if @@ -127,27 +127,4 @@ module subroutine whm_setup_set_ir3j(self) end if end subroutine whm_setup_set_ir3j - module subroutine whm_setup_set_beg_end(self, xbeg, xend, vbeg) - !! author: David A. Minton - !! - !! Sets one or more of the values of xbeg and xend - implicit none - ! Arguments - class(whm_nbody_system), intent(inout) :: self !! WHM nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend - real(DP), dimension(:,:), intent(in), optional :: vbeg ! vbeg is an unused variable to keep this method forward compatible with RMVS - - if (present(xbeg)) then - if (allocated(self%xbeg)) deallocate(self%xbeg) - allocate(self%xbeg, source=xbeg) - end if - if (present(xend)) then - if (allocated(self%xend)) deallocate(self%xend) - allocate(self%xend, source=xend) - end if - - return - - end subroutine whm_setup_set_beg_end - end submodule s_whm_setup \ No newline at end of file diff --git a/src/whm/whm_step.f90 b/src/whm/whm_step.f90 index 8e87796ea..fb84fe49e 100644 --- a/src/whm/whm_step.f90 +++ b/src/whm/whm_step.f90 @@ -16,14 +16,10 @@ module subroutine whm_step_system(self, param, t, dt) real(DP), intent(in) :: t !! Current simulation time real(DP), intent(in) :: dt !! Current stepsize - associate(system => self, cb => self%cb, pl => self%pl, tp => self%tp, ntp => self%tp%nbody, npl => self%pl%nbody) + associate(system => self, cb => self%cb, pl => self%pl, tp => self%tp, ntp => self%tp%nbody) call pl%set_rhill(cb) - call self%set_beg_end(xbeg = pl%xh) call pl%step(system, param, t, dt) - if (ntp > 0) then - call self%set_beg_end(xend = pl%xh) - call tp%step(system, param, t, dt) - end if + call tp%step(system, param, t, dt) end associate return end subroutine whm_step_system @@ -46,22 +42,25 @@ module subroutine whm_step_pl(self, system, param, t, dt) ! Internals real(DP) :: dth + if (self%nbody == 0) return + associate(pl => self, cb => system%cb) dth = 0.5_DP * dt if (pl%lfirst) then call pl%h2j(cb) - call pl%getacch(system, param, t) + call pl%accel(system, param, t) pl%lfirst = .false. end if - call pl%kickvh(dth) + call pl%set_beg_end(xbeg = pl%xh) + call pl%kick(dth) call pl%vh2vj(cb) - !If GR enabled, calculate the p4 term before and after each drift - if (param%lgr) call pl%gr_p4(param, dth) + if (param%lgr) call pl%p4(param, dth) call pl%drift(system, param, dt) - if (param%lgr) call pl%gr_p4(param, dth) + if (param%lgr) call pl%p4(param, dth) call pl%j2h(cb) - call pl%getacch(system, param, t + dt) - call pl%kickvh(dth) + call pl%accel(system, param, t + dt) + call pl%kick(dth) + call pl%set_beg_end(xend = pl%xh) end associate return end subroutine whm_step_pl @@ -83,21 +82,22 @@ module subroutine whm_step_tp(self, system, param, t, dt) ! Internals real(DP) :: dth + if (self%nbody == 0) return + select type(system) class is (whm_nbody_system) - associate(tp => self, cb => system%cb, pl => system%pl, xbeg => system%xbeg, xend => system%xend) + associate(tp => self, cb => system%cb, pl => system%pl) dth = 0.5_DP * dt if (tp%lfirst) then - call tp%getacch(system, param, t, xbeg) + call tp%accel(system, param, t, lbeg=.true.) tp%lfirst = .false. end if - call tp%kickvh(dth) - !If GR enabled, calculate the p4 term before and after each drift - if (param%lgr) call tp%gr_p4(param, dth) + call tp%kick(dth) + if (param%lgr) call tp%p4(param, dth) call tp%drift(system, param, dt) - if (param%lgr) call tp%gr_p4(param, dth) - call tp%getacch(system, param, t + dt, xend) - call tp%kickvh(dth) + if (param%lgr) call tp%p4(param, dth) + call tp%accel(system, param, t + dt, lbeg=.false.) + call tp%kick(dth) end associate end select return