diff --git a/Makefile b/Makefile index 7154c63b1..63cfb0ee0 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,6 @@ SWIFTEST_MODULES = swiftest_globals.f90 \ rmvs_classes.f90 \ helio_classes.f90 \ symba_classes.f90 \ - module_nrutil.f90 \ lambda_function.f90\ swiftest.f90 diff --git a/examples/symba_swifter_comparison/1pl_1tp_encounter/init_cond.py b/examples/symba_swifter_comparison/1pl_1tp_encounter/init_cond.py index b292ed42f..86c13a50e 100755 --- a/examples/symba_swifter_comparison/1pl_1tp_encounter/init_cond.py +++ b/examples/symba_swifter_comparison/1pl_1tp_encounter/init_cond.py @@ -55,7 +55,7 @@ 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 * 0.0100447248332378922085 +Rhill = np.double(apl * 0.0100447248332378922085) #Make Swifter files plfile = open(swifter_pl, 'w') @@ -126,6 +126,7 @@ plfile.write_record(v_pl[1]) plfile.write_record(v_pl[2]) plfile.write_record(mass) +plfile.write_record(Rhill) plfile.write_record(radius) plfile.close() tpfile = FortranFile(swiftest_tp, 'w') @@ -171,7 +172,8 @@ print(f'MU2KG {MU2KG}') print(f'DU2M {DU2M}') print(f'TU2S {TU2S}') - +print(f'RHILL_PRESENT yes') +print(f'MTINY 1e-12') diff --git a/examples/symba_swifter_comparison/1pl_1tp_encounter/param.swiftest.in b/examples/symba_swifter_comparison/1pl_1tp_encounter/param.swiftest.in index 36937896f..f2a1422d1 100644 --- a/examples/symba_swifter_comparison/1pl_1tp_encounter/param.swiftest.in +++ b/examples/symba_swifter_comparison/1pl_1tp_encounter/param.swiftest.in @@ -27,3 +27,4 @@ GR no MU2KG 1.988409870698051e+30 DU2M 149597870700.0 TU2S 31557600.0 +RHILL_PRESENT yes diff --git a/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swifter.in b/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swifter.in index 95513c9fd..17d461561 100644 --- a/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swifter.in +++ b/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swifter.in @@ -2,7 +2,7 @@ 1 39.476926408897625196 0.0 0.0 0.0 0.0 0.0 0.0 -2 0.00012002693582795244940133 0.010044724833237891545 +2 0.00012002693582795244940133 0.010044724833237892 4.25875607065041e-05 1.0 0.0 0.0 0.0 6.283185307179586 0.0 diff --git a/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in b/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in index 6f4bc1337..c94c6ae61 100644 Binary files a/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in and b/examples/symba_swifter_comparison/1pl_1tp_encounter/pl.swiftest.in differ diff --git a/examples/symba_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb b/examples/symba_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb index f1f15c4cb..71a2c4da6 100644 --- a/examples/symba_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb +++ b/examples/symba_swifter_comparison/1pl_1tp_encounter/swiftest_vs_swifter.ipynb @@ -21,9 +21,9 @@ "output_type": "stream", "text": [ "Reading Swifter file param.swifter.in\n", - "Reading in time 1.355e-01\n", + "Reading in time 1.348e-01\n", "Creating Dataset\n", - "Successfully converted 199 output frames.\n", + "Successfully converted 198 output frames.\n", "Swifter simulation data stored as xarray DataSet .ds\n" ] } @@ -75,23 +75,23 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[,\n", - " ]" + "[,\n", + " ]" ] }, - "execution_count": 6, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEGCAYAAABCa2PoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAArOklEQVR4nO3deXhV5bn+8e9DwqTMkwIBQQgIOCCmgNbZYgEHHKqCA6CeIrV0sLWWHs9p6zmnp7TaX504WFQUbBVnRKXigFNVlIAjIBIRJYDMIMiU4fn9sRYaY0h2kr322ju5P9e1rz2s91373iE7D+8a3mXujoiISG01iDuAiIjUDSooIiKSFCooIiKSFCooIiKSFCooIiKSFNlxB0iFdu3aebdu3eKOISKSURYuXLjR3dsn2r5eFJRu3bqRn58fdwwRkYxiZp9Wp702eYmISFKooIiISFKooIiISFJEug/FzIYCtwBZwF3uPqnccguXDwd2AmPdfVG4bBpwJrDe3Q8v1+8nwASgGHja3a+rbraioiIKCwvZvXt39T9YGmvSpAk5OTk0bNgw7igiUs9EVlDMLAuYDAwBCoEFZjbb3ZeUaTYMyA1vg4Ap4T3AvcDtwIxy6z0FGAEc6e57zKxDTfIVFhbSvHlzunXrRlDXMp+7s2nTJgoLC+nevXvccUSknolyk9dAoMDdV7j7XmAmQSEoawQwwwPzgVZm1hHA3V8BNlew3h8Bk9x9T9hufU3C7d69m7Zt29aZYgJgZrRt27bOjbpEJDNEWVA6A6vKPC8MX6tum/J6ASeY2Ztm9rKZfaeiRmY2zszyzSx/w4YNFa6oLhWTferiZxKRzBBlQanoL1v5ufITaVNeNtAaGAz8CnjIKvgr6u5T3T3P3fPat0/4vBwRkcy3aAa8OzPlbxtlQSkEupR5ngOsqUGbitb7WLiZ7C2gFGhXy6xJd9xxx1X4+tixY3nkkUdSnEZE6g13ePUvsPjxlL91lAVlAZBrZt3NrBEwEphdrs1sYLQFBgPb3H1tFeudBZwKYGa9gEbAxqQmT4LXX3897ggiUh9tKoAtKyF3SMrfOrKjvNy92MwmAHMJDhue5u6LzWx8uPwOYA7BIcMFBIcNX76vv5k9AJwMtDOzQuB37n43MA2YZmYfAHuBMZ6Gl51s1qwZO3bswN35yU9+wrx58+jevTtpGFVE6pLlzwX3PetQQQFw9zkERaPsa3eUeezAj/fTd9R+Xt8LXJrEmJF6/PHHWbZsGe+//z7r1q2jb9++XHHFFXHHEpG6avmz0K43tD4k5W+tM+Uj9sorrzBq1CiysrLo1KkTp556atyRRKSu2rMDPn0tls1doIKSEjqUV0RSYsWLULJXBaWuOvHEE5k5cyYlJSWsXbuWF198Me5IIlJXvf8IHNAODjk+lrevF9dDidO5557LvHnzOOKII+jVqxcnnXRS3JFEpC7a/QV89AwMGA1Z8fxpV0GJyI4dO4Bgc9ftt98ecxoRqfOWPgnFu+GIC2OLoE1eIiJ1wfsPQetukJMXWwQVFBGRTLdlJax4GY4cCTEeBKSCIiKS6RZODwrJgNGxxlBBERHJZCVF8PbfIff70LKqydqjpYIiIpLJPnwKvlwPeZdX3TZiKigiIpnKHV6/HVp3h57fizuNCkqcVq1axSmnnEKfPn3o168ft9xyS9yRRCSTfPYGrM6HY38MDbLiTqPzUOKUnZ3NX/7yFwYMGMD27ds55phjGDJkCH379o07mohkgtdvg6ZtoP8lcScBNEKJVceOHRkwYAAAzZs3p0+fPqxevTrmVCKSETZ8BMvmwMAfQqMD4k4DaIQCwA1PLmbJmi+Sus6+nVrwu7P6Jdx+5cqVvP322wwaNCipOUSkjnrjNshuAt/5YdxJvqIRShrYsWMH559/PjfffDMtWrSIO46IpLvt64Jrxh81Cpq1jzvNVyIdoZjZUOAWgis23uXuk8ott3D5cIIrNo5190XhsmnAmcB6dz+8gnVfC9wItHf3Wl0CuDojiWQrKiri/PPP55JLLuG8886LLYeIZJD5k4PzT46dEHeSb4hshGJmWcBkYBjQFxhlZuX3Ng8DcsPbOGBKmWX3AkP3s+4uwBDgs+SmTi1358orr6RPnz784he/iDuOiGSC7evgzalwxAXQrmfcab4hyk1eA4ECd18RXrZ3JjCiXJsRwAwPzAdamVlHAHd/Bdi8n3X/FbgOyOgLtL/22mvcd999zJs3j/79+9O/f3/mzJlTdUcRqb/+9dfgIlonT4w7ybdEucmrM7CqzPNCoPwe54radAbW7m+lZnY2sNrd363sSohmNo5g1EPXrl2rFTxVjj/+eNwzuiaKSCptK4T8u6H/xdC2R9xpviXKEUpFf+3L//VMpM3Xjc0OAK4HflvVm7v7VHfPc/e89u3TZ6eViEiNvXJTcHb8SdfFnaRCURaUQqBLmec5wJoatCmrB9AdeNfMVobtF5nZwbVOKyKSzrashLfvg2PGQKv03OoSZUFZAOSaWXczawSMBGaXazMbGG2BwcA2d9/v5i53f9/dO7h7N3fvRlCQBrj75xF9BhGR9DDvD9AgG074ZdxJ9iuyguLuxcAEYC6wFHjI3Reb2XgzGx82mwOsAAqAO4Gr9/U3sweAN4DeZlZoZldGlVVEJK0VLgyuyHjsj6FFp7jT7Fek56G4+xyColH2tTvKPHbgx/vpOyqB9XerZUQRkfTmDnP/HQ7sAMdfE3eaSmnqFRGRdLZkFqyaD2fdCo2bx52mUpp6JUZXXHEFHTp04PDDv54IYPPmzQwZMoTc3FyGDBnCli1bvlr2xz/+kZ49e9K7d2/mzp0bR2QRSaWi3fDc76BDPzj60rjTVEkFJUZjx47lmWee+cZrkyZN4rTTTmP58uWcdtppTJoUzFazZMkSZs6cyeLFi3nmmWe4+uqrKSkpiSO2iKTKm1Ng66fw/T+kxfVOqqKCEqMTTzyRNm3afOO1J554gjFjxgAwZswYZs2a9dXrI0eOpHHjxnTv3p2ePXvy1ltvpTqyiKTKtkJ4+c/Qaxj0OCXuNAnRPhSAf06Ez99P7joPPgKGTaq6XTnr1q2jY8eOQHC9lPXr1wOwevVqBg8e/FW7nJwcXTtFpC575jfBDvka/B2Ji0YoGaKiKVoqm3pGRDJYwfOwdDac+Eto3S3uNAnTCAXS6n8ABx10EGvXrqVjx46sXbuWDh06AMGIZNWqr6c9KywspFOn9D0eXURqqGg3zPkVtO0Jx/007jTVohFKmjn77LOZPn06ANOnT2fEiBFfvT5z5kz27NnDJ598wvLlyxk4cGCcUUUkCvP/DzavgOE3QnbjuNNUi0YoMRo1ahQvvfQSGzduJCcnhxtuuIGJEydy4YUXcvfdd9O1a1cefvhhAPr168eFF15I3759yc7OZvLkyWRlpf9RHyJSTStfDfbB9jg17iTVpoISowceeKDC11944YUKX7/++uu5/vrro4wkInHb/jm07h53ihrRJi8RkXSyfS00z8wJ1FVQRETSRdFu2LUFWnSMO0mN1OuCUhevllgXP5NIvbEjvBJHcxWUjNKkSRM2bdpUp/4AuzubNm2iSZMmcUcRkZr4IrwcVIZu8qq3O+VzcnIoLCxkw4YNcUdJqiZNmpCTkxN3DBGpie37CkpmjlDqbUFp2LAh3btn5pEUIlJHbdcmr/0ys6FmtszMCsxsYgXLzcxuDZe/Z2YDyiybZmbrzeyDcn1uNLMPw/aPm1mrKD+DiEjKbF8LWY2haeu4k9RIZAXFzLKAycAwoC8wysz6lms2DMgNb+OAKWWW3QsMrWDVzwGHu/uRwEfAb5KbXEQkJts/D/afZOg8fVGOUAYCBe6+wt33AjOBEeXajABmeGA+0MrMOgK4+yvA5vIrdfdnw+vVA8wHtMNAROqG7WszdnMXRFtQOgOryjwvDF+rbpvKXAH8s6IFZjbOzPLNLL+u7XgXkToqg09qhGgLSkVjtvLH6CbSpuKVm10PFAP/qGi5u0919zx3z2vfvn0iqxQRidf2z6FF5s4iHuVRXoVAlzLPc4A1NWjzLWY2BjgTOM3r0okkIlJ/7dkOe3dohLIfC4BcM+tuZo2AkcDscm1mA6PDo70GA9vcfW1lKzWzocCvgbPdfWcUwUVEUm5bYXCvfSjfFu44nwDMBZYCD7n7YjMbb2bjw2ZzgBVAAXAncPW+/mb2APAG0NvMCs3synDR7UBz4Dkze8fM7ojqM4iIpMxLk6BBQ+h8TNxJaizSExvdfQ5B0Sj72h1lHjvw4/30HbWf13smM6OISOwWPw5LZsFpv4W2PeJOU2P1di4vEZG08MUaeOoa6DQAjvtZ3GlqRQVFRCQupaUw60dQvAfOuxOyMns2rMxOLyKSyd6cAitegjNvhnaZvzVfIxQRkTh8/gE8/3vofQYcMzbuNEmhgiIikmpFu+GxHwaTQJ59a8bO3VWeNnmJiKTa87+H9UvgkkfhwHZxp0kajVBERFJp+XPBvpOBV0Hu9+JOk1QqKCIiqbKtEB4bBx36wZAb4k6TdCooIiKpULwXHh4LJUVw4Qxo2DTuREmnfSgiIqnwwg1QuAB+cE+dOES4IhqhiIhEbemT8MbtMHAcHH5e3Gkio4IiIhKlzZ/ArB8HU6uc/j9xp4mUCoqISFSKdsHDY4JLCV5wL2Q3jjtRpLQPRUQkCu7w5M9g7Xswaia0PiTuRJHTCEVEJApvTIb3HoRTrofeQ+NOkxIqKCIiyfbxPHjuP6HPWXDCL+NOkzKRFhQzG2pmy8yswMwmVrDczOzWcPl7ZjagzLJpZrbezD4o16eNmT1nZsvD+9ZRfgYRkWrZvAIevhzaHwbn3AEN6s//2yP7pGaWBUwGhgF9gVFm1rdcs2FAbngbB0wps+xeoKJx4kTgBXfPBV4In4uIxG/PDph5SfB45D+gcbN486RYlKVzIFDg7ivcfS8wExhRrs0IYIYH5gOtzKwjgLu/AmyuYL0jgOnh4+nAOVGEFxGpltISePwq2PAhXHAPtDk07kQpF2VB6QysKvO8MHytum3KO8jd1wKE9x0qamRm48ws38zyN2zYUK3gIiLV9txv4cOn4Pt/hB6nxp0mFlEWlIom+PcatKkRd5/q7nnunte+fftkrFJEpGL5074+E37w+LjTxCbKglIIdCnzPAdYU4M25a3bt1ksvF9fy5wiIjVX8AI8fS30HBKMTuqxKAvKAiDXzLqbWSNgJDC7XJvZwOjwaK/BwLZ9m7MqMRsYEz4eAzyRzNAiIglbtySYQbj9YcF+k6z6fa54ZAXF3YuBCcBcYCnwkLsvNrPxZrZvTDgHWAEUAHcCV+/rb2YPAG8Avc2s0MyuDBdNAoaY2XJgSPhcRCS1tn8O918UTEN/8YPQuHnciWJn7knZZZHW8vLyPD8/P+4YIlJX7N4G95wBmz+GsU9D5wFV98lAZrbQ3fMSbV+/x2ciItVVtDs412TDUhj1YJ0tJjWhgiIikqjSEnh8HKx8Fc6dWueuCV9b9WdOABGR2nCHf14HS56A0/8AR10Ud6K0o4IiIpKIV26EBXfBcT+F4ybEnSYtqaCIiFRl4b3w4h/gqFHwvRviTpO2VFBERCqz5Al46prgxMWzb6tXswdXl34yIiL789FceOQKyPkOXDgdshrGnSitqaCIiFTk4xfhwcvg4CPgkoeh0YFxJ0p7KigiIuWtfA0eGAXtcuHSx6BJy7gTZQQVFBGRsgrz4f4LoVUXuGwWHNAm7kQZQwVFRGSfte/C38+DA9vD6NnQTJe+qA4VFBERgPVL4b5zoXELGDMbWnSMO1HGUUEREfn8A7j3DGjQEEY/Aa26xp0oI6mgiEj9tvZdmH4mZDeBy+dA2x5xJ8pYKigiUn+tXgTTz4JGzYJp6FVMakWzDYtI/VSYD/edB01bwpinoPUhcSfKeJGOUMxsqJktM7MCM5tYwXIzs1vD5e+Z2YCq+ppZfzObb2bvmFm+mQ2M8jOISB302Zsw45zgkOCxc1RMkiShglLm8rv7nmeZ2e+q6JMFTAaGAX2BUWbWt1yzYUBueBsHTEmg75+BG9y9P/Db8LmISGJWvhYcGtysQ7DPpFWXuBPVGYmOUE4zszlm1tHMDgfmA1VdQHkgUODuK9x9LzATGFGuzQhghgfmA63MrGMVfR1oET5uCaxJ8DOISH330bNBMWnRKSgmLTrFnahOSWgfirtfbGYXAe8DO4FR7v5aFd06A6vKPC8EBiXQpnMVfX8OzDWzmwgK4nEVvbmZjSMY9dC1qw4BFKn33n8EHr8KDuoXTKdyYLu4E9U5iW7yygV+BjwKrAQuM7MDqupWwWueYJvK+v4IuMbduwDXAHdX9ObuPtXd89w9r317ne0qUq8tuAse/TfoMjjYAa9iEolEN3k9Cfynu18FnAR8BCyook8hUHbjZA7f3jy1vzaV9R0DPBY+fphg85iIyLe5wys3wdO/hF5D4dJHoEmLqvtJjSRaUAYCR5nZY8AjBKOFkVX0WQDkmll3M2sUtp9drs1sYHR4tNdgYJu7r62i7xqCogZwKrA8wc8gIvWJOzz3nzDvv+HIi+Ci+6Bh07hT1WmJnodyF7AduC18Pgo4Frhwfx3cvdjMJgBzgSxgmrsvNrPx4fI7gDnAcKCAYN/M5ZX1DVf9Q+AWM8sGdhPuJxER+UpJETz5c3jn7zBwHAz9k660mALmXn63RgWNzN5196Oqei1d5eXleX5+ftwxRCQV9uyAh8dAwfNw0kQ4eSJYRbtlpSpmttDd8xJtn+gI5W0zGxwe2ouZDQKqOspLRCS1tq+D+y8IJns86xY4ZmzcieqVRAvKIIJ9HZ+Fz7sCS83sfcDd/chI0omIJGrj8uAcky83wqgHoNf3405U7yRaUIZGmkJEpDY+exMeuAgsC8Y+BZ2PiTtRvZToiY2fRh1ERKRGlj4ZnGPSonNwWHCbQ+NOVG/psAcRyUzu8Nqt8OBlcNDhcOWzKiYx0/T1IpJ5ivfC07+At++DvufAOVOgUVWTd0jUVFBEJLPs3AwPjYaVr8KJ18HJv9E5JmlCBUVEMsfGArj/Qti2Cs67E47c77nVEgMVFBHJDCtehocugwYNYcyT0HVw3ImkHI0TRSS9ucObfwvOMWneCX44T8UkTWmEIiLpq2g3PHUNvHs/9B4O5/5NswWnMRUUEUlP2wrhwUthzdvBjvcTr9PO9zSngiIi6Wflv+ChMVC8B0Y+AIcNjzuRJEAFRUTShzu8dSfM/Q207g4j74f2veJOJQlSQRGR9FC0OzhZ8Z1/hPtL7oAmLeNOJdWggiIi8dv8CTw8Fta+o/0lGSzSfzEzG2pmy8yswMwmVrDczOzWcPl7ZjYgkb5m9pNw2WIz+3OUn0FEIrb0KfjbSbDlk2B/yckTVUwyVGQjFDPLAiYDQ4BCYIGZzXb3JWWaDQNyw9sgYAowqLK+ZnYKMAI40t33mFmHqD6DiESopAie/z28cTt0GgAX3AOtu8WdSmohyk1eA4ECd18BYGYzCQpB2YIyApjhwXWI55tZKzPrCHSrpO+PgEnuvgfA3ddH+BlEJApbV8Ejl0PhAhh4FZz+35DdOO5UUktRjis7A6vKPC8MX0ukTWV9ewEnmNmbZvaymX2nojc3s3Fmlm9m+Rs2bKjFxxCRpProWfjbCbD+Q7jgXhj+ZxWTOiLKgmIVvOYJtqmsbzbQGhgM/Ap4yMy+1d7dp7p7nrvntW/fPvHUIhKNkuJgE9f9F0CLHLjqZeh3btypJImi3ORVCHQp8zwHWJNgm0aV9C0EHgs3k71lZqVAO0DDEJF0tWUlPDYOVr0Jx4yFoZOgYdO4U0mSRTlCWQDkmll3M2sEjARml2szGxgdHu01GNjm7mur6DsLOBXAzHoRFJ+NEX4OEamN9x6GO06A9Uvh/LvhrFtUTOqoyEYo7l5sZhOAuUAWMM3dF5vZ+HD5HcAcYDhQAOwELq+sb7jqacA0M/sA2AuMCUcrIpJOdn8Bc66F9x6ELoPhvKnQ+pC4U0mErD78Lc7Ly/P8/Py4Y4jUH6vegkf/LbgQ1km/hhOuhSydR51pzGyhu+cl2l7/wiKSPKUl8Opf4KVJ0LIzXP4MdB0UdypJERUUEUmOzZ/ArB/BZ2/AERfCGTdpLq56RgVFRGrHHRbeA3P/AxpkwblT4aiL4k4lMVBBEZGa27YaZk+Aj+fBoSfD2bdDqy5VdpO6SQVFRKrPHd6dCf/8NZQWwfCbIO9KTepYz6mgiEj17FgPT/4clj0NXY+FEZOhbY+4U0kaUEERkcS4w5JZ8NQvYO+XcPr/wOCrg/0mIqigiEgivlgDT18bjEo69odz/wYdDos7laQZFRQR2b/SUlg0HZ77LZTshe/dAMdO0EmKUiH9VohIxTYWwJM/g0//Bd1OCObg0r4SqYQKioh8U0kRvH5bcLZ7dhM4+zY4+jL49lUiRL5BBUVEvrZ6ETz5U/j8fehzNgy/EZofHHcqyRAqKCICu7bCvP+GBXdDs4Pgor9Dn7PiTiUZRgVFpD5zD6aXf/Y/YOcmGHQVnPLvmoNLakQFRaS+Wv8hPP3LYKd75zy49FHoeFTcqSSDqaCI1Dd7v4SX/wxv3A6NmgVHbx09WtOmSK1F+htkZkPNbJmZFZjZxAqWm5ndGi5/z8wGVKPvtWbmZtYuys8gUme4w+LHYfIgeO1mOHIk/GRhcI13FRNJgshGKGaWBUwGhgCFwAIzm+3uS8o0GwbkhrdBwBRgUFV9zaxLuOyzqPKL1Clr34NnJsKnr8FBh8N5d8Ihx8adSuqYKDd5DQQK3H0FgJnNBEYAZQvKCGBGeE34+WbWysw6At2q6PtX4DrgiQjzi2S+LzcGR28tnA5NW8OZf4UBYzT/lkQiyoLSGVhV5nkhwSikqjadK+trZmcDq939XavkRCszGweMA+jatWvNPoFIpireCwvuhJf+BEVfwuAfwUnXBUVFJCJRFpSK/tp7gm0qfN3MDgCuB06v6s3dfSowFSAvL6/8+4rUTe5Q8Dw88xvYtBx6nAZD/wjte8edTOqBKAtKIVD20m05wJoE2zTaz+s9gO7AvtFJDrDIzAa6++dJTS+Sada8E0zi+MnL0OZQGPUg9Pq+pkyRlImyoCwAcs2sO7AaGAlcXK7NbGBCuI9kELDN3dea2YaK+rr7YqDDvs5mthLIc/eNEX4OkfS29TOY9z/BCYpN28DQP0HeFZDdKO5kUs9EVlDcvdjMJgBzgSxgmrsvNrPx4fI7gDnAcKAA2AlcXlnfqLKKZKRdW+DV/wdv/i0YhRx/TXDTWe4SEwsOsKrb8vLyPD8/P+4YIslRvAfeuhNeuRF2b4P+FwfTpbTMiTuZ1DFmttDd8xJtrzPlRTJFSTG8e39wlvu2VdDze8EFrw4+PO5kIoAKikj6Ky2FDx6Fl/4XNq+AzscE1yjpcUrcyUS+QQVFJF25w4dPw4t/gPVLgjPcRz4AvYfpyC1JSyooIunGHT6eFxy5tWYRtO0J598N/c7TnFuS1lRQRNKFOxS8AC//CQrfgpZd4Ozb4ahRkKWvqqQ//ZaKxM0dPpobFJI1i6BFDgy/CQaMhuzGcacTSZgKikhcSkth2dPBUVufvwetDoGzbg1GJDopUTKQCopIqpWWwJIn4JWbYP3iYJqUc6bAERdAVsO404nUmAqKSKoU7YJ37ofXb4Mtn0C7XsF1Sfqdp30kUifot1gkaru2wIK74c074MsNwXkkQ/4LDjtD1yWROkUFRSQq21bD/P+DhffC3h3Bme3f/Tl0O17nkUidpIIikmxr3glGI+8/Al4Kh58P3/2ZpkiROk8FRSQZSoqDI7bmT4HP3oBGzYIp5I/9MbQ+JO50IimhgiJSG7u2wKL74K2pwYSNrQ6B7/8vHH2pppGXekcFRaQmNi4PNmu9cz8U7YRDjoehk4J5trSjXeopFRSRRJUUw0fPQP40+PgFyGoUnDsyaDx0PDLudCKxi7SgmNlQ4BaCqy7e5e6Tyi23cPlwgis2jnX3RZX1NbMbgbOAvcDHwOXuvjXKzyH13LZCWDQj2LS1fQ007wgn/zvkXQ7NOlTdX6SeiKygmFkWMBkYAhQCC8xstrsvKdNsGJAb3gYBU4BBVfR9DvhNeJngPwG/AX4d1eeQeqq0JJioceE9wajEHXqeBmfcBLnf14mIIhWI8lsxEChw9xUAZjYTGAGULSgjgBkeXId4vpm1MrOOQLf99XX3Z8v0nw/8IMLPIPXN9s/h7ftg4QzY9hkc2CE4d+SYMdC6W9zpRNJalAWlM7CqzPNCglFIVW06J9gX4ArgwYre3MzGAeMAunbtWp3cUt8U7wlGIe/cD8ufAy+B7ifB6f8Fvc/QRI0iCYqyoFR0KrAn2KbKvmZ2PVAM/KOiN3f3qcBUgLy8vPLvK/WdO6x9Jygi7z8cHP7bvCMcNwGOHg3tesadUCTjRFlQCoEuZZ7nAGsSbNOosr5mNgY4Ezgt3Fwmkpjt6+C9B4NCsmEpZDWGPmdC/4vh0FN0yK9ILURZUBYAuWbWHVgNjAQuLtdmNjAh3EcyCNjm7mvNbMP++oZHf/0aOMndd0aYX+qKPTtg2T+DkUjB88EmrZyBcOZfg5l+m7aKO6FInRBZQQmPwpoAzCU49Heauy82s/Hh8juAOQSHDBcQHDZ8eWV9w1XfDjQGnguOOma+u4+P6nNIhiraDQXPwQePwrJnoHgXtOgczKnV/2Jolxt3QpE6x+rDFqO8vDzPz8+PO4ZEraQIVrwcFJEPn4I9X8AB7aDfOXD4D6DLIGjQIO6UIhnDzBa6e16i7XUwvWS2kiL49HVYMiu4CuLOTdC4JfQ5G444H7qdqHNGRFJE3zTJPHt3wsfzglHIsn/C7q3Q8ADoPTyYKr7naZDdOO6UIvWOCopkhp2b4aO5QREpeCHYJ9KkVTAZ42FnQo9TodEBcacUqddUUCR9bfo4OCrrw6dh5b+Co7Oadwqmhu9zJhzyXchqGHdKEQmpoEj6KNoNn/4rOFt9+XOw+ePg9ba58N2fwmFnQaejtWNdBHB39hSXBreiEnYXlbKnOLjfXVzC7qIS9hSV0r9rK9o1S80mYBUUideWlV8XkE9eCTZlZTeBbifAoKuC67C37RF3SpGUeWHpOh54axV7ioOCsLvM/e4yhWNPcSmJHKR7z+Xf4ZTeqZkVWwVFUmvnZlj5alA8VrwMm5YHr7fuBgMug9zTodvx0LBprDFF4nLv6ytZ9OkWeh3cnMbZDWhzYCOaZGfRpGEDGof3TRpm0Ti7AY0bZtGkYbll2cFrjcPH3dqlbt+iCopEa892+PQN+OTl4Pb5B4BDwwPhkOOC667nnh6MQqyiKdxE6pfVW3dxYq/2TLn0mLijVJsKiiTX7m2wagF89kYwClm9MNiZntUoOLHwlOuh+4nQeYB2qIuU4+6s2bqLU1O0iSrZVFCk5txh66fw2Zuwan5wv34J4GBZQdE4/udBAekySJuxRKqw+cu97C4qpXPrzPyuqKBI4vbuhHUfQGH+1wVkx+fBskbNoct3oO8I6DoIOudB42bx5hXJMKu37gKgUysVFKlLinbDusWwZhGseQfWvA0bPgw2XwG07BLsPO86OBh9HNRPU7+L1NLqLUFB6ayCIhlr52ZYvzTYXPX5e0EBWb8ESouD5Qe0Dc7/OGx4cN/paGjRKdbIInXRvhFKjjZ5SdrbuxM2LoN1S4KCsX5JUEi2r/26TdPWQcE47qdfF4+WOToCSyQFVm/dxQGNsmjZNDMPWFFBqWtKS2DrZ8FZ5pvC2+aPYVMBbPmUr66knN0E2veGQ0+GDn2D20F9g8vgqniIxGLN1l10btUUy9DvoApKpnGHLzfCtlWwrfDr2+YVYdFYCaVFX7dv1BzaHgqdBsCRI4Oi0aEftOmufR4iaWb11l0Ze4QXRFxQwsv13kJw1cW73H1SueUWLh9OcMXGse6+qLK+ZtYGeBDoBqwELnT3LVF+jpRwD87h+HJDcNux/uv7L1aXKSCroWTPN/s2PABad4cOfYJJE9v0CE4UbNMDmnXQiEMkQ6zesosjc1rFHaPGIisoZpYFTAaGAIXAAjOb7e5LyjQbBuSGt0HAFGBQFX0nAi+4+yQzmxg+/3VUnyMh7lCyF4p2BbfiXcFRUkW7YM+2oFB8dfvi68e7tsCX64MRx5cbgnV8iwWboVrmQMf+wVTtLbsEz/fdmrZW0RDJcDv3FrNlZ1HGHuEF0Y5QBgIF7r4CwMxmAiOAsgVlBDDDg+sQzzezVmbWkWD0sb++I4CTw/7TgZeIqKDMv+fXdFr1FA0opYGXkkVJ8Di8ZVFKQy+iEXvJojShdZbQgC/tQHZwIDusGVsatGKrHcbWrEFsyW7FVmsZvhY83mYtKLFs+ILgtqrs2raENxHJdMWlwf7NTD3CC6ItKJ355p+/QoJRSFVtOlfR9yB3Xwvg7mvNrMI5CsxsHDAOoGvXrjX6AA1aHMyGA3oE5cOyKCULt7CchPfF1oi9DRpTZI3Za40pahDeW2P2NmjMrgbN2NXgwOA+qxl7rElCo4ksoG14E5H64eiurTi+Z7u4Y9RYlAWlor+a5Sdb3l+bRPpWyt2nAlMB8vLyqtV3n4HnXwNcU5OuIiL1TpRXKioEupR5ngOsSbBNZX3XhZvFCO/XJzGziIjUUJQFZQGQa2bdzawRMBKYXa7NbGC0BQYD28LNWZX1nQ2MCR+PAZ6I8DOIiEiCItvk5e7FZjYBmEuwS2Cauy82s/Hh8juAOQSHDBcQHDZ8eWV9w1VPAh4ysyuBz4ALovoMIiKSOPNEriGZ4fLy8jw/Pz/uGCIiGcXMFrp7XqLto9zkJSIi9YgKioiIJIUKioiIJIUKioiIJEW92ClvZhuAT2vYvR2wMYlxUkGZU0OZU0OZU6OizIe4e/tEV1AvCkptmFl+dY5ySAfKnBrKnBrKnBrJyKxNXiIikhQqKCIikhQqKFWbGneAGlDm1FDm1FDm1Kh1Zu1DERGRpNAIRUREkkIFRUREkqJeFxQzG2pmy8ysILw+ffnlZma3hsvfM7MBifZNt8xm1sXMXjSzpWa22Mx+ls55yyzPMrO3zeypVOStbebwMtaPmNmH4c/62AzIfE34O/GBmT1gZk3SJPNhZvaGme0xs2ur0zfdMsf1/atN5jLLE/8Ounu9vBFMi/8xcCjQCHgX6FuuzXDgnwRXkBwMvJlo3zTM3BEYED5uDnwUdeba5C2z/BfA/cBT6f57ES6bDvxb+LgR0CqdMxNcbvsToGn4/CFgbJpk7gB8B/gDcG11+qZh5pR//2qbuczyhL+D9XmEMhAocPcV7r4XmAmMKNdmBDDDA/OBVhZcJTKRvmmV2d3XuvsiAHffDiwl+GOSlnkBzCwHOAO4K+KcSclsZi2AE4G7Adx9r7tvTefM4bJsoKmZZQMH8O0rq8aS2d3Xu/sCoKi6fdMtc0zfv1plhup/B+tzQekMrCrzvJBv/wPvr00ifaNQm8xfMbNuwNHAm8mPWL0sVbS5GbgOKI0oX0Vqk/lQYANwT7iJ4C4zOzDKsFXkqbKNu68GbiK4WN1agqumPhth1krzpKBvbSTlfVP4/YPaZ76ZanwH63NBsQpeK38M9f7aJNI3CrXJHCw0awY8Cvzc3b9IYraK1DivmZ0JrHf3hcmPVana/IyzgQHAFHc/GvgSSMX2/dr8nFsT/I+1O9AJONDMLk1yvorU5juUzt+/yleQ2u8f1CJzTb6D9bmgFAJdyjzP4dtD/f21SaRvFGqTGTNrSPDL/A93fyzCnFVmSaDNd4GzzWwlwTD9VDP7e3RRq8yTSJtCoNDd9/3P8xGCAhO12mT+HvCJu29w9yLgMeC4CLNWlSfqvrVRq/eN4fsHtctc/e9g1DuF0vVG8L/JFQT/M9u3s6pfuTZn8M0dmW8l2jcNMxswA7g5E37G5dqcTOp2ytcqM/Aq0Dt8/HvgxnTODAwCFhPsOzGCgwp+kg6Zy7T9Pd/cwZ22379KMqf8+1fbzOWWJfQdTNkHS8cbwZEvHxEcBXF9+Np4YHyZX4LJ4fL3gbzK+qZzZuB4gqHue8A74W14uuYtt46EfpnTITPQH8gPf86zgNYZkPkG4EPgA+A+oHGaZD6Y4H/YXwBbw8ct9tc3nTPH9f2r7c+5zDoS+g5q6hUREUmK+rwPRUREkkgFRUREkkIFRUREkkIFRUREkkIFRUREkkIFRaSawhmFry7zvJOZPRLRe51jZr+tos1NZnZqFO8vUh06bFikmsK5mJ5y98NT8F6vA2e7+8ZK2hwC3Onup0edR6QyGqGIVN8koIeZvWNmN5pZNzP7AMDMxprZLDN70sw+MbMJZvaLcLLI+WbWJmzXw8yeMbOFZvaqmR1W/k3MrBewx903mlnzcH0Nw2UtzGylmTV090+BtmZ2cAp/BiLfooIiUn0TgY/dvb+7/6qC5YcDFxNMHf4HYKcHk0W+AYwO20wlmOLkGOBa4P8qWM93gbJTnr9EMIUKwEjgUQ/m3yJs991afi6RWsmOO4BIHfRiWAC2m9k24Mnw9feBI8MZZ48DHjb7ajLYxhWspyPBdPj73EUwlfgs4HLgh2WWrSeYLVgkNiooIsm3p8zj0jLPSwm+cw2Are7ev4r17AJa7nvi7q+Fm9dOArLc/YMybZuE7UVio01eItW3neAyrjXiwXUwPjGzC+Cr670fVUHTpUDPcq/NAB4A7in3ei+CyR1FYqOCIlJN7r4JeM3MPjCzG2u4mkuAK83sXYLp4yu6hO0rwNFWZrsY8A+gNUFRAb66zkZPglmORWKjw4ZF0piZ3QI86e7Ph89/AIxw98vKtDkXGODu/xlTTBFA+1BE0t3/ElwECzO7DRhGcH2LsrKBv6Q4l8i3aIQiIiJJoX0oIiKSFCooIiKSFCooIiKSFCooIiKSFCooIiKSFP8ffWT0GwAcU/wAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -103,12 +103,12 @@ } ], "source": [ - "swiftdiff['px'].plot.line(x=\"time (y)\")" + "swiftdiff['vx'].plot.line(x=\"time (y)\")" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -465,91 +465,33 @@ " stroke: currentColor;\n", " fill: currentColor;\n", "}\n", - "
<xarray.DataArray 'px' (time (y): 199)>\n",
-       "array([ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "...\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
-       "        0.00000000e+00,  3.33066907e-16,  4.44089210e-16,  1.11022302e-16,\n",
-       "        1.11022302e-16,  1.11022302e-16,  3.33066907e-16, -1.11022302e-16,\n",
-       "       -3.33066907e-16, -4.44089210e-16, -2.22044605e-16, -5.55111512e-16,\n",
-       "       -3.33066907e-16, -4.44089210e-16, -5.55111512e-16, -4.44089210e-16,\n",
-       "       -7.77156117e-16, -4.44089210e-16,  0.00000000e+00,  0.00000000e+00,\n",
-       "       -1.11022302e-16,  0.00000000e+00,  3.33066907e-16,  1.11022302e-16,\n",
-       "        1.11022302e-16, -2.22044605e-16,  0.00000000e+00, -5.55111512e-16,\n",
-       "       -3.33066907e-16, -1.11022302e-16, -4.44089210e-16, -4.44089210e-16,\n",
-       "       -3.33066907e-16,  2.22044605e-16,  0.00000000e+00,  0.00000000e+00,\n",
-       "        2.22044605e-16,  1.11022302e-16,  2.22044605e-16, -1.11022302e-16,\n",
-       "        3.33066907e-16,  6.66133815e-16,  8.88178420e-16,  1.22124533e-15,\n",
-       "        3.88578059e-15,  4.10782519e-15,  1.02750769e-03,  1.03179676e-03,\n",
-       "        1.03606675e-03,  1.04031758e-03,  1.04454916e-03,  1.04876143e-03,\n",
-       "        1.05295429e-03,  1.05712769e-03,  1.06128153e-03,  1.06541574e-03,\n",
-       "        1.06953025e-03,  1.07362498e-03,  1.07769985e-03])\n",
+       "
<xarray.DataArray 'vx' (time (y): 198)>\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.])\n",
        "Coordinates:\n",
-       "    id        int64 2\n",
-       "  * time (y)  (time (y)) float64 0.0 0.0006845 0.001369 ... 0.1342 0.1348 0.1355
  • " ], "text/plain": [ - "\n", - "array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - "...\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 3.33066907e-16, 4.44089210e-16, 1.11022302e-16,\n", - " 1.11022302e-16, 1.11022302e-16, 3.33066907e-16, -1.11022302e-16,\n", - " -3.33066907e-16, -4.44089210e-16, -2.22044605e-16, -5.55111512e-16,\n", - " -3.33066907e-16, -4.44089210e-16, -5.55111512e-16, -4.44089210e-16,\n", - " -7.77156117e-16, -4.44089210e-16, 0.00000000e+00, 0.00000000e+00,\n", - " -1.11022302e-16, 0.00000000e+00, 3.33066907e-16, 1.11022302e-16,\n", - " 1.11022302e-16, -2.22044605e-16, 0.00000000e+00, -5.55111512e-16,\n", - " -3.33066907e-16, -1.11022302e-16, -4.44089210e-16, -4.44089210e-16,\n", - " -3.33066907e-16, 2.22044605e-16, 0.00000000e+00, 0.00000000e+00,\n", - " 2.22044605e-16, 1.11022302e-16, 2.22044605e-16, -1.11022302e-16,\n", - " 3.33066907e-16, 6.66133815e-16, 8.88178420e-16, 1.22124533e-15,\n", - " 3.88578059e-15, 4.10782519e-15, 1.02750769e-03, 1.03179676e-03,\n", - " 1.03606675e-03, 1.04031758e-03, 1.04454916e-03, 1.04876143e-03,\n", - " 1.05295429e-03, 1.05712769e-03, 1.06128153e-03, 1.06541574e-03,\n", - " 1.06953025e-03, 1.07362498e-03, 1.07769985e-03])\n", + "\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.])\n", "Coordinates:\n", - " id int64 2\n", - " * time (y) (time (y)) float64 0.0 0.0006845 0.001369 ... 0.1342 0.1348 0.1355" + " id float64 100.0\n", + " * time (y) (time (y)) float64 0.0 0.0006845 0.001369 ... 0.1335 0.1342 0.1348" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "swiftdiff['px'].sel(id=2)" + "swiftdiff['vx'].sel(id=100)" ] }, { diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/init_cond.py b/examples/symba_swifter_comparison/9pl_18tp_encounters/init_cond.py index 321c79932..18ef4ce48 100755 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/init_cond.py +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/init_cond.py @@ -37,6 +37,8 @@ sim.param['OUT_STAT'] = "UNKNOWN" sim.param['GR'] = 'NO' sim.param['CHK_CLOSE'] = 'YES' +sim.param['RHILL_PRESENT'] = 'YES' +sim.param['MTINY'] = 1.0e-12 sim.param['MU2KG'] = swiftest.MSun sim.param['TU2S'] = swiftest.JD2S diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swifter.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swifter.in index aa33eeaa4..d87472e35 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swifter.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swifter.in @@ -21,6 +21,6 @@ CHK_QMIN_RANGE 0.004650467260962157 1000.0 EXTRA_FORCE NO BIG_DISCARD NO CHK_CLOSE YES +RHILL_PRESENT YES J2 4.7535806948127355e-12 J4 -2.2473967953572827e-18 -RHILL_PRESENT YES diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swiftest.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swiftest.in index 6504c9637..e9ed6376c 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swiftest.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/param.swiftest.in @@ -25,6 +25,7 @@ DU2M 149597870700.0 EXTRA_FORCE NO BIG_DISCARD NO CHK_CLOSE YES +RHILL_PRESENT YES FRAGMENTATION NO ROTATION NO TIDES NO @@ -32,4 +33,4 @@ ENERGY NO GR NO YARKOVSKY NO YORP NO -MTINY 0.0 +MTINY 1e-12 diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.in index bd980fc4b..fea43297f 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.in @@ -1,33 +1,33 @@ 8 -1 4.9125474498983623693e-11 +1 4.9125474498983623693e-11 0.0014751238438755500459 1.6306381826061645943e-05 -0.33206272695596028566 0.07436707001147663254 -0.02438290851908785084 --0.0115920916602103591525 0.028710618792657981169 0.0034094833969203438596 -2 7.243452483873646905e-10 +-0.065841771551149230746 0.30388831943526661838 0.030872485461978960153 +-0.033141166233939436947 -0.0049297226604189817514 0.0026371811668407158825 +2 7.243452483873646905e-10 0.006759080797928606587 4.0453784346544178454e-05 --0.7188115337296047125 -0.0118554711069603201795 0.041316403191083782287 -0.00021427347881133320621 -0.020313576971905909774 -0.00029114855617710840843 -3 8.9970113821660187435e-10 +-0.65269716062695148917 -0.3065765656441301057 0.033456491497379246824 +0.008459831335658639026 -0.0184014319837384685 -0.0007407193515014080928 +3 8.9970113821660187435e-10 0.010044868190633438806 4.25875607065040958e-05 -0.35677088372527121507 -0.95189300879814897627 4.4027442504036787155e-05 -0.015830039028334789986 0.0059737936889703449964 -3.3484113013969089573e-07 -4 9.549535102761465607e-11 +0.58046286084934750615 -0.8332000042504307258 3.7646553415201541957e-05 +0.013836557832279990782 0.009770187318278569788 -5.1179589633921335467e-07 +4 9.549535102761465607e-11 0.0072467082986392815006 2.265740805092889601e-05 --1.5233712071242269115 0.6723825347339112968 0.051459143378398922164 --0.0051275613251079554117 -0.011607719813367209372 -0.000117479966462153095864 -5 2.825345908631354893e-07 +-1.5891417403740180081 0.4938480736359250889 0.049330990309104823244 +-0.0036308073545784510204 -0.012168467501132099878 -0.00016594932370266260858 +5 2.825345908631354893e-07 0.3552707649709459117 0.00046732617030490929307 -4.049944927347420176 -2.9910878677758190314 -0.078187280837353656526 -0.0043972077687938898594 0.006432188574295680597 -0.00012509257442073270106 -6 8.459715183006415395e-08 +4.1148395833578952363 -2.8938323061728068453 -0.080043092204059404504 +0.0042549773877191511204 0.006534697671907701254 -0.00012233719535540690457 +6 8.459715183006415395e-08 0.43765596788571493287 0.00038925687730393611812 -6.298929503477405767 -7.706413024510769816 -0.11669919842191249504 -0.0040140666547768266703 0.0035242303011843410798 -0.00022097170940726839814 -7 1.2920249163736673626e-08 +6.3589256477393849565 -7.653288021415167286 -0.12000977499446359442 +0.003985370599203661747 0.0035590677039893160206 -0.00022043610541731448703 +7 1.2920249163736673626e-08 0.46957663585116591335 0.00016953449859497231466 -14.856082147529010129 13.007589275314199284 -0.14417795763685259391 --0.0026158276515510360365 0.0027821364817078499815 4.40781085949555924e-05 -8 1.5243589003230834323e-08 +14.816779495279050138 13.049265812461410263 -0.14351615042000470668 +-0.0026245225263081049631 0.002774730265364384104 4.416262654344997005e-05 +8 1.5243589003230834323e-08 0.7813355837717117843 0.000164587904124493665 -29.55744967800954015 -4.629377558152945049 -0.58590957207831262377 -0.00046987400245862169295 0.0031274056019462009859 -7.51415892482447254e-05 +29.564459991843019537 -4.5824598513731222837 -0.5870359532621901577 +0.0004648344125208179762 0.0031282868879460171488 -7.5042704502708602616e-05 diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swifter.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swifter.in index 701e9a14f..79614abb4 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swifter.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swifter.in @@ -2,35 +2,35 @@ 0 0.00029591220819207775568 0.0 0.0 0.0 0.0 0.0 0.0 -1 4.9125474498983623693e-11 0.0014751243077781048702 +1 4.9125474498983623693e-11 0.0014751238438755500459 1.6306381826061645943e-05 -0.33206272695596028566 0.07436707001147663254 -0.02438290851908785084 --0.0115920916602103591525 0.028710618792657981169 0.0034094833969203438596 -2 7.243452483873646905e-10 0.006759104275397271956 +-0.065841771551149230746 0.30388831943526661838 0.030872485461978960153 +-0.033141166233939436947 -0.0049297226604189817514 0.0026371811668407158825 +2 7.243452483873646905e-10 0.006759080797928606587 4.0453784346544178454e-05 --0.7188115337296047125 -0.0118554711069603201795 0.041316403191083782287 -0.00021427347881133320621 -0.020313576971905909774 -0.00029114855617710840843 -3 8.9970113821660187435e-10 0.010044787321379672528 +-0.65269716062695148917 -0.3065765656441301057 0.033456491497379246824 +0.008459831335658639026 -0.0184014319837384685 -0.0007407193515014080928 +3 8.9970113821660187435e-10 0.010044868190633438806 4.25875607065040958e-05 -0.35677088372527121507 -0.95189300879814897627 4.4027442504036787155e-05 -0.015830039028334789986 0.0059737936889703449964 -3.3484113013969089573e-07 -4 9.549535102761465607e-11 0.007246743835971885302 +0.58046286084934750615 -0.8332000042504307258 3.7646553415201541957e-05 +0.013836557832279990782 0.009770187318278569788 -5.1179589633921335467e-07 +4 9.549535102761465607e-11 0.0072467082986392815006 2.265740805092889601e-05 --1.5233712071242269115 0.6723825347339112968 0.051459143378398922164 --0.0051275613251079554117 -0.011607719813367209372 -0.000117479966462153095864 -5 2.825345908631354893e-07 0.35527126534549128905 +-1.5891417403740180081 0.4938480736359250889 0.049330990309104823244 +-0.0036308073545784510204 -0.012168467501132099878 -0.00016594932370266260858 +5 2.825345908631354893e-07 0.3552707649709459117 0.00046732617030490929307 -4.049944927347420176 -2.9910878677758190314 -0.078187280837353656526 -0.0043972077687938898594 0.006432188574295680597 -0.00012509257442073270106 -6 8.459715183006415395e-08 0.4376527512949726007 +4.1148395833578952363 -2.8938323061728068453 -0.080043092204059404504 +0.0042549773877191511204 0.006534697671907701254 -0.00012233719535540690457 +6 8.459715183006415395e-08 0.43765596788571493287 0.00038925687730393611812 -6.298929503477405767 -7.706413024510769816 -0.11669919842191249504 -0.0040140666547768266703 0.0035242303011843410798 -0.00022097170940726839814 -7 1.2920249163736673626e-08 0.4695362423191493196 +6.3589256477393849565 -7.653288021415167286 -0.12000977499446359442 +0.003985370599203661747 0.0035590677039893160206 -0.00022043610541731448703 +7 1.2920249163736673626e-08 0.46957663585116591335 0.00016953449859497231466 -14.856082147529010129 13.007589275314199284 -0.14417795763685259391 --0.0026158276515510360365 0.0027821364817078499815 4.40781085949555924e-05 -8 1.5243589003230834323e-08 0.7812870996943599397 +14.816779495279050138 13.049265812461410263 -0.14351615042000470668 +-0.0026245225263081049631 0.002774730265364384104 4.416262654344997005e-05 +8 1.5243589003230834323e-08 0.7813355837717117843 0.000164587904124493665 -29.55744967800954015 -4.629377558152945049 -0.58590957207831262377 -0.00046987400245862169295 0.0031274056019462009859 -7.51415892482447254e-05 +29.564459991843019537 -4.5824598513731222837 -0.5870359532621901577 +0.0004648344125208179762 0.0031282868879460171488 -7.5042704502708602616e-05 diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in index bd980fc4b..fea43297f 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/pl.swiftest.in @@ -1,33 +1,33 @@ 8 -1 4.9125474498983623693e-11 +1 4.9125474498983623693e-11 0.0014751238438755500459 1.6306381826061645943e-05 -0.33206272695596028566 0.07436707001147663254 -0.02438290851908785084 --0.0115920916602103591525 0.028710618792657981169 0.0034094833969203438596 -2 7.243452483873646905e-10 +-0.065841771551149230746 0.30388831943526661838 0.030872485461978960153 +-0.033141166233939436947 -0.0049297226604189817514 0.0026371811668407158825 +2 7.243452483873646905e-10 0.006759080797928606587 4.0453784346544178454e-05 --0.7188115337296047125 -0.0118554711069603201795 0.041316403191083782287 -0.00021427347881133320621 -0.020313576971905909774 -0.00029114855617710840843 -3 8.9970113821660187435e-10 +-0.65269716062695148917 -0.3065765656441301057 0.033456491497379246824 +0.008459831335658639026 -0.0184014319837384685 -0.0007407193515014080928 +3 8.9970113821660187435e-10 0.010044868190633438806 4.25875607065040958e-05 -0.35677088372527121507 -0.95189300879814897627 4.4027442504036787155e-05 -0.015830039028334789986 0.0059737936889703449964 -3.3484113013969089573e-07 -4 9.549535102761465607e-11 +0.58046286084934750615 -0.8332000042504307258 3.7646553415201541957e-05 +0.013836557832279990782 0.009770187318278569788 -5.1179589633921335467e-07 +4 9.549535102761465607e-11 0.0072467082986392815006 2.265740805092889601e-05 --1.5233712071242269115 0.6723825347339112968 0.051459143378398922164 --0.0051275613251079554117 -0.011607719813367209372 -0.000117479966462153095864 -5 2.825345908631354893e-07 +-1.5891417403740180081 0.4938480736359250889 0.049330990309104823244 +-0.0036308073545784510204 -0.012168467501132099878 -0.00016594932370266260858 +5 2.825345908631354893e-07 0.3552707649709459117 0.00046732617030490929307 -4.049944927347420176 -2.9910878677758190314 -0.078187280837353656526 -0.0043972077687938898594 0.006432188574295680597 -0.00012509257442073270106 -6 8.459715183006415395e-08 +4.1148395833578952363 -2.8938323061728068453 -0.080043092204059404504 +0.0042549773877191511204 0.006534697671907701254 -0.00012233719535540690457 +6 8.459715183006415395e-08 0.43765596788571493287 0.00038925687730393611812 -6.298929503477405767 -7.706413024510769816 -0.11669919842191249504 -0.0040140666547768266703 0.0035242303011843410798 -0.00022097170940726839814 -7 1.2920249163736673626e-08 +6.3589256477393849565 -7.653288021415167286 -0.12000977499446359442 +0.003985370599203661747 0.0035590677039893160206 -0.00022043610541731448703 +7 1.2920249163736673626e-08 0.46957663585116591335 0.00016953449859497231466 -14.856082147529010129 13.007589275314199284 -0.14417795763685259391 --0.0026158276515510360365 0.0027821364817078499815 4.40781085949555924e-05 -8 1.5243589003230834323e-08 +14.816779495279050138 13.049265812461410263 -0.14351615042000470668 +-0.0026245225263081049631 0.002774730265364384104 4.416262654344997005e-05 +8 1.5243589003230834323e-08 0.7813355837717117843 0.000164587904124493665 -29.55744967800954015 -4.629377558152945049 -0.58590957207831262377 -0.00046987400245862169295 0.0031274056019462009859 -7.51415892482447254e-05 +29.564459991843019537 -4.5824598513731222837 -0.5870359532621901577 +0.0004648344125208179762 0.0031282868879460171488 -7.5042704502708602616e-05 diff --git a/examples/symba_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb b/examples/symba_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb deleted file mode 100644 index d0d223ce7..000000000 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/swiftest_rmvs_vs_swifter_rmvs.ipynb +++ /dev/null @@ -1,753 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import swiftest\n", - "import numpy as np\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.652e+03\n", - "Creating Dataset\n", - "Successfully converted 333 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.652e+03\n", - "Creating Dataset\n", - "Successfully converted 333 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": { - "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": 10, - "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": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No handles with labels found to put in legend.\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAElCAYAAADgCEWlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAriklEQVR4nO3deZxcdZ3v/9e7qzvpTrqzhy0JJGwicoGBgHhxAUdGYMYfOi6DOoqKIuPoeH9uMDP+HJfxqtfRmfHnwmW4iKgjDx03HBFcccGNBMISMpEshDQB0mRfupPuqs/945xOqitVne6iqk519fv5eNSjz/I9pz59urs+/f1+z/l+FRGYmZkNa8s6ADMzay5ODGZmNoITg5mZjeDEYGZmIzgxmJnZCE4MZmY2ghODlSXpg5K+ki4fK2m3pFzWcY1G0vMkrW7we4akE5/mOVZKuqA2ER1y7oo/R0lHSvqFpF2SPqXEFyVtk/T7esRjE4MTQ4uS9IikF5Vse4OkX433XBHxaER0R0S+dhGOz1g+gCPilxHxjEbFVCsR8ayIuBNGfpDX4X1Kf45XAU8BMyLi3cBzgYuAhRFxbj1isInBicFagqT2rGOYgI4DHoqDT7keBzwSEXvGeyJf/9bixDCJSTpG0jcl9UlaL+lvKpRbnP7H3l503K2StkpaI+ktRWVzkv5O0tq0iWK5pEXpvlMk/Sg9brWkVxUdd5Okz0n6fnrc7ySdkO77RVrsvrQp5C8kXSCpV9I1kp4Avji8reiciyR9K/3+tkj6bIVr0C9pTtG2P5L0lKSOdP1NklalTSx3SDquwnWaKenm9P02SHq/pLai/W9Jz7NL0kOSzkq3PyLpRZIuBv4O+Iv0+7xP0islLS95n3dL+k6FGJZI+nn6Hj8C5pX7OUq6CbgCeF/6Xm8FbgCek65/KD3mzyStkLRd0q8lnV50vkfS638/sCc973lpue1p/BcUlb9T0kck3ZXG90NJxfE9t+jYjZLekG6fKumfJD0q6UlJ10nqSvfNk/Sf6TFbJf2y+JpblSLCrxZ8AY8ALyrZ9gbgV+lyG7Ac+AAwBTgeWAe8ON3/QeAr6fJiIID2dP3nwOeBTuBMoA/443Tfe4EHgGcAAs4A5gLTgY3AG4F24CySZoxnpcfdBGwFzk33fxW4pSj2AE4sWr8AGAI+AUwFutJtven+HHAf8M/pe3cCz61wrX4KvKVo/ZPAdenyS4E1wDPTuN4P/LpcXMDNwHeBnvSa/QG4Mt33SuAx4Jz0upwIHFf6syq+7un61PS6PLNo273Ayyt8L78BPp0e93xg1yg/x5uAfyz3+5GunwVsBp6dXs8r0linFsW9AliUXv8FwBbgUpLfr4vS9flp+TuBtcDJafk7gY+n+45NY3010EHyO3Nmuu9fgFuBOem1/R7wsXTfx4Dr0mM6gOcByvrvb6K/Mg/Arzr9YJM/2t3A9qLXXg4mhmcDj5Yc87fAF9PlAx9QxR8o6YdAHugpOu5jwE3p8mrgsjLx/AXwy5Jt/xv4h3T5JuCGon2XAv9VtF4uMewHOku2DSeG55AkrPYxXKs3Az9Nl0WSwJ6frv+A9MM9XW9Lr+NxxXGRfHDuA04tKvtW4M50+Q7gnaP8rMomhnTbF4CPpsvPAraRfjiXlDuWJFlOL9r27+V+jkXXfLTE8AXgIyXvsRp4QVHcbyradw3w5ZLydwBXpMt3Au8v2vc24Pai371vl/meBOwBTija9hxgfbr8YZJkfGLpsX5V/3KVq7W9NCJmDb9I/hCHHQcck1bBt0vaTtKMceRhznkMsDUidhVt20Dy3yIkiWNtmeOOA55d8n6vBY4qKvNE0fJeoPswsfRFxECFfYuADRExdJhzAPwHSRPKMST/ZQfwy6K4/7Uo5q0kH1YLSs4xj6TmtaFo21iuy1h8CXiNJAGvA74eEfvKlDsG2BYj+wg2lCk3VscB7y75mS1K32fYxpLyrywp/1zg6KIylX7Gla7PfGAasLzonLen2yGp3a0BfihpnaRrx/9tWil3GE1eG0n+6zppnMdtAuZI6ilKDseSNJMMn/cE4MEy7/fziLio2oDLGG1o4I3AsZLaD5ccImK7pB8CryJpMvpapP+Opuf5aER89TCxPAUMknboptvKXZfDOeR7iojfStpP0kzymvRVzuPAbEnTi5LDseXOOUbD3/tHxxjvRpIaw1sqFT7Me5W7E+opoJ+kyfGx0p3p7+C7SRLYs4CfSbo7In5SRQyWco1h8vo9sDPtPOxS0ml8mqRzRjsoIjYCvwY+Jqkz7Yy8kqRPAJIOzI9IOkmJ0yXNBf4TOFnS6yR1pK9zJD1zjPE+SdIPMp7v73Hg45Kmp7GeP0r5fwdeD7w8XR52HfC36YfOcAfzK0sPjuQW0K8DH5XUo6SD+l3A8K2nNwDvkXR2el1OVPlO7CeBxWU6UG8GPgsMRUTZW44jYgOwDPiQpCmSngu8ZJTv+XD+Dbha0rPTmKdL+lNJPRXKfwV4iaQXp79PnUpuCFg4hvf6KvAiSa9KO7HnSjozIgppHP8s6QgASQskvThd/rP0WgrYSdLMmdlt1a3CiWGSSj/IXkLSebye5D+zG4CZYzj81STt1ZuAb5P0E/wo3fdpkg/IH5L8of4foCv9z+5PgMvT457gYMfxWHwQ+FLanPCqwxUu+v5OBB4Fekn6OSq5FTgJeDIi7is6z7fTOG+RtJOkJnRJhXO8g6Q9fB3wK5IEc2N6nm8AH0237QK+Q9KZWuob6dctku4p2v5l4LT062heQ9J/tBX4B5KEUpWIWAa8hSQhbSNpsnnDKOU3ApeRNEn2kdQC3ssYPmci4lGSfqV3p7GvILlxAZK+izXAb9OfwY9Jbm6A5Gf2Y5L+tN8An4/0mRCrng7WmM2sWaW3Z24GzoqIh7OOx1qbawxmE8NfAXc7KVgjuPPZrMlJeoTkTqiXZhuJTRZuSjIzsxHclGRmZiM4MZjVkaTXps9IHK5c3UZVrYaSsav+Mes4LBtODNY0dHC+gOFXSNpTtP68Ks55yPDjJfsvkFRIz79LyeB+b6wy/hGDDQJExFcj4k+qOZ9ZVtz5bE0jvZf9wDAYkgI4IyLW1PmtN0XEwvQhqcuA/5D0u4h46HAHDpOHnbYW4hqDTQiqYuhlSV8mGRLie2mN4H2jvUckvkPyMNep6VO+90raqWQY6A8WxTNcO7hS0qMkI7QODw++PX2/56hkciRJz9LBoceflPR3Fb7f0YavfoOScYF2KRku/bWjXLN/kbQpff2LpKnpvuFhy98tabOkxyvVlCQ9KOklResdSoYlP3O062kTlxODTRSfIBmu+UySp5kXkAwZDsnTsr0kA6sdSfLkbUTE60ieen5JJDOX/a/R3iBNJi8DZpEMHb6HZJiMWcCfAn8l6aUlh72AZHylF5MMwAcwK32/35Scv4fkKd3bSQaiOxE4ZEwfSQuA7wP/SPJ09HuAb0qaL2k68BngkojoAf47yVPC5fw9cB7JNTuDZCyi9xftP4rkSfcFJMOafE7S7DLnuRn4y6L1S4HHI6LS+9oE1xKJQdKN6X89pQO3VXOuC5VMTDL8GijzYWANlDbxvAX4fyNieGTX/0kyvAYkg9cdTTIU9mAkU3yO5z7sY5SM2vkUyTASr4uI1RFxZ0Q8EBGFiLgf+BpJIij2wYjYExH9Y3ifPwOeiIhPRcRAROyKiN+VKfeXwG0RcVv63j8iGQPp0nR/AThNUldEPB4RKyu832uBD0fE5ojoAz5EMjrrsMF0/2BE3EYyrES5qVG/AlwqaUa6/joOPzSHTWAtkRhIxpW/uBYnioifRcSZEXEm8EKSoYEPe1eJ1VW9h17elA5NPif92d8CoGTwuJ8pmZFtB3A1RTOipTYecrbKxjr0dsXhq9NRU/8ijeVxJTPenVLhPMdw6DDgxUNmbykZebbsUOcRsQm4C3i5pFkkY0UdbrRZm8BaIjFExC9IBt46QNIJkm5XMrXkL0f54xnNK4AfRMTemgRq1Soeenl4fomZEdENydDLEfHuiDieZOC8d0n64/TYp/ME57+TDK63KCJmkoy0qpIyUWG5nLEOvT08fPWsotf0iPg4QETckQ5ffjTwXySjj5aziSTJDDs23VaNL5HUZF4J/KbcENjWOloiMVRwPfCOiDibpI3281Wc43KS5gPL0NMcenm8w3UX6yGZlGhA0rlUngdhWB9JM0+l9/tP4ChJ/yPtGO6R9Owy5SoOXy3pSEn/T9rXsI+k+afSMNNfA96f9k3MI+mTqfZZie+QTPX5Tp7GiK02MbRkYpDUTdIp9w1JK0imkDw63ffn6V0Wpa87Ss5xNPDfSKYmtOxVO/Tyx0g+HLdLes843/NtwIcl7SL5UP36aIXTmuVHgbvS9zuvZP8uknmQX0Iy7PjDwIVlzjPa8NVtJJ3tm0hqyS9g5Mx8xf6RpG/ifpLO9HvSbeOW9qF8E1gCfKuac9jE0TJjJUlaDPxnRJyWdpKtjoijD3PYaOd7J0nTxVW1itFsIpP0AeDkiPjLwxa2Ca0lawwRsRNYr3SmLSXOOMxhpV6Nm5HMAJA0h+SW1uuzjsXqryUSg6SvkTQhPCN9aOdKklv1rpR0H7CSpGo+1vMtJrmD5Od1CNdsQpH0FpLmrB+kN3pYi2uZpiQzM6uNlqgxmJlZ7Uz4gb/mzZsXixcvzjoMM7MJZfny5U9FxPxy+yZ8Yli8eDHLli3LOgwzswlF0oZK+9yUZGZmIzgxmJnZCE4MZmY2ghODmZmN4MRgZmYjODGYmdkITgxmZjaCE4OZWRPYfddd7Fu3PuswgBZ4wM3MrBVsvPLNADzzv1ZlHIlrDGZmmYtCIesQRnBiMDPLWGHXrgPLQ1u2ZBhJwonBzCxj+W3bDiwPrFyZYSQJJwYzs4wNbXViMDOzIvntBxPDUN9TGUaSaFhikHSjpM2SHqywX5I+I2mNpPslndWo2MzMsnSgKUkiv3vX6IUboJE1hpuAi0fZfwlwUvq6CvhCA2IyM8vccGLoOHYRhV27M46mgYkhnUR86yhFLgNujsRvgVmSjm5MdGZm2Rnatg1NnUrH/CNG3KGUlWbqY1gAbCxa7023HULSVZKWSVrW19fXkODMzOolv207udmzaevpIb97EtUYxkBltkW5ghFxfUQsjYil8+eXnbLUzGzCyG/dSm7ObNp6ul1jKNELLCpaXwhsyigWM7OGyW/bRvusWeS6XWModSvw+vTupPOAHRHxeNZBmZnVW2HvHtq6e2jr6aGwezcRZRtLGqZhg+hJ+hpwATBPUi/wD0AHQERcB9wGXAqsAfYCb2xUbGZmWSr0D9DW1UmupxvyeWLvXjR9embxNCwxRMSrD7M/gL9uUDhmZk2jMDCAOrto6+4BIL97N20ZJoZmakoyM5uUor+fts5O2nq6ATLvgHZiMDPLUEQkNYauTnIzZgCQd2IwM5vEBgchn09qDN1pjSHjO5OcGMzMMlTYtw8AdXaS60n6GNyUZGY2iRX6+wFo6+yiLU0M+YzHS3JiMDPLUAwMACS3qx5oSnKNwcxs0ir0J4lBnV1o2jSQKOzZk2lMTgxmZhmKgbQpqasTSbRNm+bEYGY2mR2sMXQC0DZ9OnknBjOzyatwoMbQlXzt7qaw24nBzGzSOtD5XFRjcFOSmdkkVq4pyYnBzGwSi32uMZiZWZEDNYa0jyHXPd1DYpiZTWYHbledOjX56hqDmdnkVugfgI4O1NEBODGYmU16hYH+A/0LkCSGGByksH9/ZjE5MZiZZSj6B0oSQzpeUoa1BicGM7MMJZP0dB1YH57S04nBzGySioH+Ax3P4MRgZjbpFfpdYzAzsyKlnc+57jQxZPgsgxODmVmGYmAf6hp5VxK4xmBmNmklNYaipqR0Frd8hvM+OzGYmWXokNtVe2YAUMhw3mcnBjOzDCW3qxY3JU2Dtjbyh5n3Ob9zJ5HP1yUmJwYzswxF/8imJEm09fRQ2Dl6Ynj4BRew+Z8+VZeYnBjMzDISEUmNoXPqiO25nh7yu3ZWPK6wfz/R309u5sy6xOXEYGaWkRgchEJhRI0BoG3G6DWGwo4dAORmzqhLXA1NDJIulrRa0hpJ15bZP1PS9yTdJ2mlpDc2Mj4zs0aK/uH5njtHbM/1zBi1jyF/IDFM8BqDpBzwOeAS4FTg1ZJOLSn218BDEXEGcAHwKUlTGhWjmVkjFQaGp/UsqTH0dI9aYxhODG0zJnhiAM4F1kTEuojYD9wCXFZSJoAeSQK6ga3AUANjNDNrmEgTQ9kawyjPMeR3JP0PE77GACwANhat96bbin0WeCawCXgAeGdEFEpPJOkqScskLevr66tXvGZmdXWwxlCSGGb0UBg1MaRNSbMmfmJQmW1Rsv5iYAVwDHAm8FlJh/SuRMT1EbE0IpbOnz+/1nGamTXEwT6Gkqak7h4Ku3dXfE4hv2M7ALkZE7/zuRdYVLS+kKRmUOyNwLcisQZYD5zSoPjMzBpquMbQVqbGAJUH0ivs3Anp8w710MjEcDdwkqQlaYfy5cCtJWUeBf4YQNKRwDOAdQ2M0cysYQppjaG0KWl4WIxK/Qz57TvIzZiB2urzEd5el7OWERFDkt4O3AHkgBsjYqWkq9P91wEfAW6S9ABJ09M1EfFUo2I0M2ukqFBjaOtJp/eslBh27KCtTh3P0MDEABARtwG3lWy7rmh5E/AnjYzJzCwrhf6087mkjyE3XGPYUf7p5/zOnXW7Iwn85LOZWWYKA2nnc2kfw+xZwMG7j0rld+yoW8czODGYmWUm+ss/4JabPRuA/NYtZY/L79juGoOZWSsq7BvuYxg5iF57mhiGtmwte1x+67YDyaMenBjMzDIS/QOoowO1j+zuVUcHuZkzy9YYCgMDFHbtor2Oz3A5MZiZZSSZpKer7L7c3LkMbd12yPahp5IbNZ0YzMxaUAz00zZ1atl9uTmzyW85tMYwtDkZBqj9iPolhsPerirp2DGea3tEVJ5ZwszMRij0V64xtM+Zy761aw/ZPpSOD9c+b17d4hrLcwxfIhnTqNxYR8MCuAm4uQYxmZlNCoX+/kPGSRqWmzuH/O9/f8j2oafSxFDHpqTDJoaIuLB0m6SjIuKJ+oRkZjY5RP/eQ55hGNY+Zy75HTuIoaERndNDfX2QyzXlXUmvr2kUZmaTUKF/AE2rUGOYMxsiyG/fPmL7UF8f7XPmoFyubnFVmxguk/R2Sc+oaTRmZpNI0pQ0rey+9rlzARgq6YAeeuqpujYjQfWJ4c+BNcDLJN1Qw3jMzCaN6O+v2JTUcdRRAAxuGjk7wdDmvronhqoG0YuIJ4Hb05eZmVWh0N9fsSmpY+FCAAZ7HzuwLSIY3LCBaUuX1jWuqmoMkj4n6aZ02aOhmplVYbSmpNzcuairi8He3gPb8lu2UNi7lynHjvUpgupU25S0n4MT6LywRrGYmU0qhYGBik1JkuhYcAz7HzuYGPZv2ADAlMXH1TWuahPDXmCmpA6gvqnLzKwFxeAgDA7SVqEpCWDKgoUjmpL2b3g02d6kNYatwFrgc8BdtQvHzGxyODCtZ4UH3CDpZxjs7SUigLTGkMvRccwxdY1tXIlB0ixJXwRenm66GahvL4iZWQsanr2trXP0xFDYvfvAswz7N2ygY+EC1NFR19jGlRgiYjvwceBDwO+Ak4Bv1T4sM7PWFv17AUZtSup8xskADKx8KPn6wAN0nnxy3WOr5nbVK4H1EXEHsLzG8ZiZTQqFgfLzPRfrPP0MyOXov2c5U49fwuBjjzHnivoPPFFNYtgGXJ0+9XwfsCIi7q1tWGZmra2wd3i+58qJIdc9nc5TTmHv8nuYsmQJANPOOafusY07MUTExyT9BPgDcCbwfMCJwcxsHApjaEoC6DrrLLZ/4xuovZ22nh6mNqApadx3JUn6MHAZcBHwWET8a82jMjNrcZE2JVUadnvY7Fe9EiLYc9ddzHnDFXUdPG/YuBNDRHwA2Jce+3JJ/1bzqMzMWtxwU5JGaUoCmHrSSRzzT59k9mtezby3vrURoVU3VhJwI/BmYDrw+dqFY2Y2OYy1KQlgxkUXMeOii+od0gHVPuD2NyRJpR1wU5KZ2TiNtSkpC9UmhrVAJ/DdiHh+DeMxM5sUDjQltVBiWAn8FLhS0t01jMfMbFIoDPRDLlf3p5irUW0fwwkkzzNcn341M7NxKOzdS1tXF5KyDuUQ1dYYNkbErSSzuK0a60GSLpa0WtIaSddWKHOBpBWSVkr6eZXxmZk1tcKePbRNn551GGVVW2O4WNIfSEZX3UDSGT0qSbm0/EVAL3C3pFsj4qGiMrNI7nK6OCIelXRElfGZmTW1wp69TZsYqq0xzAKuAd5H8kzDWJwLrImIdRGxH7iF5EG5Yq8BvhURjwJExOYq4zMza2rNXGOoNjF8mOSOpNVAfozHLAA2Fq33ptuKnQzMlnSnpOWSyo4WJekqScskLevr6xtv7GZmmWuJxCDpjOHliOiNiB+ny2X7Csqdosy2KFlvB84G/hR4MfD/STpkYJCIuD4ilkbE0vnz54/x7c3Mmkdhzx7auid4YgDulXS/pPdJWlTFe/UCxcctBDaVKXN7ROyJiKeAXwBnYGbWYgq7d5Ob6DUG4FMkQ2B8HFgv6WeS3jSO4+8GTpK0RNIU4HLg1pIy3wWeJ6ld0jTg2Yzjriczs4miJZqSIuK9EXECyVSeN5AMt339OI4fAt4O3EHyYf/1iFgp6WpJV6dlVgG3A/cDvwduiIgHx/oeZmYTRTMnhjHfrippLvAy4BXAhSR9Bo+O580i4jbgtpJt15WsfxL45HjOa2Y2kcT+/cTg4MRPDMATJDWMbcAXga9ExK/qEpWZWQvL79kDQNu0iZ8Yvg18BfhBRAzWKR4zs5ZX2JMOud3dnXEk5Y05MUTEq+oZiJnZZFHYsxugaZuSqn3AzczMqlQYbkpqlcQg6SX1CMTMbLI4mBimZRxJedXUGD5a8yjMzCaRlqsxUH5oCzMzG6PhxNAKTz4PKx3fyMzMxuFAjaFJ70py57OZWYPld+0CWqspyczMnobCzl20TZuG2qudK62+qkkMT9Y8CjOzSSS/cydtM2dmHUZF404MEXFRPQIxM5ss8rt2kuvpyTqMityUZGbWYIUdO8nNmJF1GBU5MZiZNVh+1y7aWi0xSHpX0fIzaheOmVnry+/c0dQ1hnF1iUuaBfwzcIqkAZIJda4E3lj70MzMWlNhx07aZjRvH8O4EkNEbAfeKOnFwFPA6cC36hCXmVlLiqEhCnv2kJvRvHclVXsT7WBELJe0Cdhcy4DMzFrZ8MNtzdyUVG3n88WSFgLXkTQtmZnZGBSGn3pu4qakahPDLOAa4H3AvppFY2bW4vI7dgK0ZFPSh4FnRMRqSflaBmRm1sryO3cAkGviGkO1ieFvgenAT4Cf1S4cM7PWdrApqfX6GPYD69LlC2sUi5lZy8tvH64xtF5i2AvMlNQBHFvDeMzMWlp+21YAcnPmZBxJZdUmhn8A1gKfA75au3DMzFrb0NZttHV30zZlStahVFRtH8PfRMSnwUNimJmNR37r1qauLUB1Q2J8ATguHRLjPuDNeEgMM7MxyW/bSvvs2VmHMapxD4khqRf4BfA74Aw8JIaZ2ZgNbd1Gx9FHZx3GqKrpY9gCXA28Pl3vHeuBki6WtFrSGknXjlLuHEl5Sa+oIj4zs6aVNCW1UI0BICI+LumnwB+AM4HnAfce7jhJOZLO6otIksndkm6NiIfKlPsEcMd4YzMza2YRwdC2bbS3Uh8DgKQPAzlgBbAiIu4c46HnAmsiYl16nluAy4CHSsq9A/gmcM54YzMza2aFXbtgcJDc7OZODNXM+fwB4DPALuDlkv5tjIcuADYWrfem2w6QtAB4GcngfBVJukrSMknL+vr6xhy7mVmW8luHn2Fosaak1FuB/x0Rt4/jGJXZFiXr/wJcExF5qVzx9KCI64HrAZYuXVp6DjOzpjS0dRtA6zUlpW4E/krSdOCrEbFiDMf0AouK1hcCm0rKLAVuSZPCPOBSSUMR8Z0q4zQzaxr5rVsAWq8pKfU3JEmlnaRZaSzuBk6StETSFOBy4NbiAhGxJCIWR8Ri4D+AtzkpmFmrGEqbvtuPOCLjSEZXbWJYC3QC342I54/lgIgYAt5OcrfRKuDrEbFS0tWSrq4yDjOzCWPwySchl6N93tysQxlVtU1JK0k6kq+U9MmIGNMdRBFxG3BbybayHc0R8YYqYzMza0pDm/tonzcP5XJZhzKqahPDCcA2kg7gbbULx8ysdQ09+WTTNyNB9YlhY0T8VNLRwOZaBmRm1qqGNm+m47jmn6mg2j6GiyUtJHne4J9rGI+ZWcsa3LyZjglQY6g2McwCrgHeB+yrWTRmZi2qMDBAYccO2o84MutQDmvMiUHSGUWrHya5I2k1kK95VGZmLWZoc9Lq3n5kCyUG4F5J90t6H6CI+DFARFQcJdXMzBKDTzwBQMeRrdWU9ClgOvBxYL2kn0l6U33CMjNrLYO9jwHQsXBhxpEc3pgTQ0S8NyJOIBm24gbg+aTjFZmZ2egGe3uhra3pJ+mBcdyuKmkuycinrwAuJBkU79E6xWVm1lIGH+ul/agjUUdH1qEc1nieY3iCpIaxDfgi8JWI+FVdojIzazH7N/YyZUHzNyPB+BLDt4GvAD+IiME6xWNm1pIGe3uZfv75WYcxJodNDJKGH9N7T/r16ApzJWyPiJ21CszMrFUU9u1LnnpeuODwhZvAWGoMX+LghDqVZs8J4Cbg5hrEZGbWUgYfS+5ImjIB7kiCMSSGiLiwEYGYmbWqfWvXAjDl+OMzjmRsqh0Sw8zMxmj/2nUATFnixGBmZsD+9etoP+ooct3Tsw5lTJwYzMzqbN/adUydIM1I4MRgZlZXEcH+desmTP8CODGYmdXV4GObKOzdy9QTT8w6lDFzYjAzq6OBVQ8B0HnqMzOOZOycGMzM6mjfqlWQyzH15JOzDmXMnBjMzOpo4KFVTD1+CW2dnVmHMmZODGZmdTSwahVTnzlxmpHAicHMrG4GH3+coSefpOu0/5Z1KOPixGBmVid7l98DwLSlZ2ccyfg4MZiZ1Un/Pctpmz59QnU8gxODmVnd7F22nK4zz0Tt45n6JntODGZmdZDfsYN9Dz9M19lnZR3KuDkxmJnVQf+KFRDBtLOXZh3KuDU0MUi6WNJqSWskXVtm/2sl3Z++fi3pjEbGZ2ZWK3uXLYf2drpOn1h3JEEDE4OkHPA54BLgVODVkk4tKbYeeEFEnA58BLi+UfGZmdXS3nvuofPUU2nr6so6lHFrZI3hXGBNRKyLiP3ALcBlxQUi4tcRsS1d/S0wMebBMzMrUti3j4H772fa0onXjASNTQwLgI1F673ptkquBH5QboekqyQtk7Ssr6+vhiGamT19A/ffTwwOOjGMgcpsi7IFpQtJEsM15fZHxPURsTQils6fP7+GIZqZPX17ly0DiWkT8I4kgEbeXNsLLCpaXwhsKi0k6XTgBuCSiNjSoNjMzGpm793LmHryyeRmzsw6lKo0ssZwN3CSpCWSpgCXA7cWF5B0LPAt4HUR8YcGxmZmVhMxOMjeFSsmbDMSNLDGEBFDkt4O3AHkgBsjYqWkq9P91wEfAOYCn5cEMBQRE/fqmtmkM7BqFbF374QbH6lYQ5/TjojbgNtKtl1XtPxm4M2NjMnMrJb2LlsOQNfZEzcx+MlnM7Ma6r/3HjqOPZaOI47IOpSqOTGYmdXQwMqH6DrttKzDeFqcGMzMamRo2zYGN22i81mlgzpMLE4MZmY1sm/VKgA6T3ViMDMzYOChhwDonGBzPJdyYjAzq5F9Dz9M+5FHkps1K+tQnhYnBjOzGtm3bj1TTzg+6zCeNicGM7MaiAj2r1/PlMVLsg7laXNiMDOrgaG+Pgq7dzPleNcYzMwM2L/+EQCmLFmcaRy14MRgZlYD+9evA2CqawxmZgawf/161NVF+5FHZh3K0+bEYGZWA/vWrWfKksWobeJ/rE7878DMrMFicJCBhx4i9u8/sG3/+vVMbYE7ksCJwcxsXPb87veseeEfs/7PX07vu95F5PMUBgYYfOyxlrgjCZwYzMzG5fH3vx91dTHniivY/eOfsOO7t7J/w6MQ0RJ3JIETg5nZuAxt2ULPC1/IEddeQ8eiRey87Tb2r1sLtMYdSdDgGdzMzCayyOeJvXtp6+5GEjMuvpgtN95IbuZM1NXFlBNOyDrEmnCNwcxsjAp79gCQ6+kGYMafXgr5PDu//32mnXsObVOmZBlezTgxmJmNUWH3bgDaupPE0HnKKUw77zwAus8/P7O4as2JwcxsjPK70sQwvfvAtnlv+ytys2fT/cIXZhVWzbmPwcxsjAp7RtYYAKafey4n/+bXWYVUF64xmJmN0XBTUq57esaR1JcTg5nZGJX2MbQqJwYzszE60MfQ05NxJPXlxGBmNkYHagzTXWMwMzPSzmeJtmldWYdSV04MZmZjlN+9m7bp01tiaO3RtPZ3Z2ZWQ4Vdu1u+4xkanBgkXSxptaQ1kq4ts1+SPpPuv1/SWY2Mz8xsNIXduw8Mh9HKGpYYJOWAzwGXAKcCr5Z0akmxS4CT0tdVwBcaFZ+Z2eEU9uxu+Y5naOyTz+cCayJiHYCkW4DLgIeKylwG3BwRAfxW0ixJR0fE47UO5v9/zZvIF/K1Pq2ZtbwpcPkVWQcBQK4txzv+/caan7eRTUkLgI1F673ptvGWQdJVkpZJWtbX11fzQM3MJrNG1hhUZltUUYaIuB64HmDp0qWH7B+LemRZM7NW0MgaQy+wqGh9IbCpijJmZlZHjUwMdwMnSVoiaQpwOXBrSZlbgdendyedB+yoR/+CmZlV1rCmpIgYkvR24A4gB9wYESslXZ3uvw64DbgUWAPsBd7YqPjMzCzR0PkYIuI2kg//4m3XFS0H8NeNjMnMzEbyk89mZjaCE4OZmY3gxGBmZiM4MZiZ2QhK+nsnLkl9wIYqD58HPFXDcOrFcdbORIgRHGctTYQYofFxHhcR88vtmPCJ4emQtCwilmYdx+E4ztqZCDGC46yliRAjNFecbkoyM7MRnBjMzGyEyZ4Yrs86gDFynLUzEWIEx1lLEyFGaKI4J3Ufg5mZHWqy1xjMzKyEE4OZmY0waRODpIslrZa0RtK1GcfyiKQHJK2QtCzdNkfSjyQ9nH6dXVT+b9O4V0t6cR3julHSZkkPFm0bd1ySzk6/vzWSPiOp3IRMtY7zg5IeS6/pCkmXZhmnpEWSfiZplaSVkt6Zbm+q6zlKnE1zPSV1Svq9pPvSGD+Ubm+2a1kpzqa5lhVFxKR7kQz7vRY4HpgC3AecmmE8jwDzSrb9L+DadPla4BPp8qlpvFOBJen3katTXM8HzgIefDpxAb8HnkMyQ98PgEsaEOcHgfeUKZtJnMDRwFnpcg/whzSWprqeo8TZNNczPV93utwB/A44rwmvZaU4m+ZaVnpN1hrDucCaiFgXEfuBW4DLMo6p1GXAl9LlLwEvLdp+S0Tsi4j1JHNXnFuPACLiF8DWpxOXpKOBGRHxm0h+w28uOqaecVaSSZwR8XhE3JMu7wJWkcxn3lTXc5Q4K2l4nJHYna52pK+g+a5lpTgryexvqNRkTQwLgI1F672M/stfbwH8UNJySVel246MdPa69OsR6fasYx9vXAvS5dLtjfB2SfenTU3DzQqZxylpMfBHJP9BNu31LIkTmuh6SspJWgFsBn4UEU15LSvECU10LcuZrImhXPtclvftnh8RZwGXAH8t6fmjlG222IdViiureL8AnACcCTwOfCrdnmmckrqBbwL/IyJ2jla0QjxZxdlU1zMi8hFxJsm88OdKOm2U4pldywpxNtW1LGeyJoZeYFHR+kJgU0axEBGb0q+bgW+TNA09mVYhSb9uTotnHft44+pNl0u311VEPJn+URaAf+Ngc1tmcUrqIPmw/WpEfCvd3HTXs1yczXg907i2A3cCF9OE17JcnM16LYtN1sRwN3CSpCWSpgCXA7dmEYik6ZJ6hpeBPwEeTOO5Ii12BfDddPlW4HJJUyUtAU4i6ZhqlHHFlVbpd0k6L72T4vVFx9TN8AdE6mUk1zSzONNz/h9gVUR8umhXU13PSnE20/WUNF/SrHS5C3gR8F8037UsG2czXcuK6tmz3cwv4FKSOy7WAn+fYRzHk9yJcB+wcjgWYC7wE+Dh9OucomP+Po17NXW8OwH4GklVd5Dkv5Yrq4kLWEryy78W+CzpE/d1jvPLwAPA/SR/cEdnGSfwXJLq//3AivR1abNdz1HibJrrCZwO3JvG8iDwgWr/Zup8LSvF2TTXstLLQ2KYmdkIk7UpyczMKnBiMDOzEZwYzMxsBCcGMzMbwYnBzMxGcGIwKyJplqS3Fa0fI+k/6vReL5X0gQr7dqdf50u6vR7vb1aJE4PZSLOAA4khIjZFxCvq9F7vAz4/WoGI6AMel3R+nWIwO4QTg9lIHwdOSMfJ/6SkxUrneZD0BknfkfQ9SeslvV3SuyTdK+m3kuak5U6QdHs6KOIvJZ1S+iaSTgb2RcRT6foSSb+RdLekj5QU/w7w2rp+12ZFnBjMRroWWBsRZ0bEe8vsPw14Dcn4Nh8F9kbEHwG/IRmqAJJJ3d8REWcD76F8reB84J6i9X8FvhAR5wBPlJRdBjyvyu/HbNzasw7AbIL5WSTzFOyStAP4Xrr9AeD0dFTS/w58o2iSrallznM00Fe0fj7w8nT5y8AnivZtBo6pTfhmh+fEYDY++4qWC0XrBZK/pzZgeyRDLY+mH5hZsq3S+DSdaXmzhnBTktlIu0imtKxKJHMXrJf0SkhGK5V0Rpmiq4ATi9bvIhnlFw7tTziZgyNwmtWdE4NZkYjYAtwl6UFJn6zyNK8FrpQ0PGJuuWljfwH8kQ62N72TZJKmuzm0JnEh8P0qYzEbN4+uapYRSf8KfC8ifnyYcr8ALouIbY2JzCY71xjMsvM/gWmjFZA0H/i0k4I1kmsMZmY2gmsMZmY2ghODmZmN4MRgZmYjODGYmdkITgxmZjbC/wWUDs+mQLA8xQAAAABJRU5ErkJggg==\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": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    <xarray.DataArray 'rmag' (time (d): 333)>\n",
    -       "array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "...\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
    -       "       0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 2.13180114e-12,\n",
    -       "       6.30252092e-12, 1.12657932e-11, 1.70947866e-11, 2.35410127e-11,\n",
    -       "       3.01486367e-11, 3.63634702e-11, 4.16224366e-11, 4.54289913e-11,\n",
    -       "       4.74142910e-11, 4.73824194e-11, 4.53327404e-11, 4.14594589e-11,\n",
    -       "       3.61300773e-11, 2.98446324e-11, 2.31845539e-11, 1.67548923e-11,\n",
    -       "       1.11262399e-11, 6.78147816e-12, 4.07218435e-12, 3.25977426e-12,\n",
    -       "       4.52137637e-12, 7.66342713e-12, 1.23344633e-11, 1.81013732e-11,\n",
    -       "       2.44264806e-11, 3.07065663e-11, 3.63320360e-11, 4.07478190e-11,\n",
    -       "       4.35128453e-11, 4.43475549e-11, 4.31649567e-11, 4.00801554e-11,\n",
    -       "       3.53984592e-11, 2.95862328e-11, 2.32329074e-11, 1.70175537e-11,\n",
    -       "       1.17040422e-11])\n",
    -       "Coordinates:\n",
    -       "    id        int64 2\n",
    -       "  * time (d)  (time (d)) float64 0.0 11.0 22.0 ... 3.63e+03 3.641e+03 3.652e+03
    " - ], - "text/plain": [ - "\n", - "array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - "...\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", - " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 2.13180114e-12,\n", - " 6.30252092e-12, 1.12657932e-11, 1.70947866e-11, 2.35410127e-11,\n", - " 3.01486367e-11, 3.63634702e-11, 4.16224366e-11, 4.54289913e-11,\n", - " 4.74142910e-11, 4.73824194e-11, 4.53327404e-11, 4.14594589e-11,\n", - " 3.61300773e-11, 2.98446324e-11, 2.31845539e-11, 1.67548923e-11,\n", - " 1.11262399e-11, 6.78147816e-12, 4.07218435e-12, 3.25977426e-12,\n", - " 4.52137637e-12, 7.66342713e-12, 1.23344633e-11, 1.81013732e-11,\n", - " 2.44264806e-11, 3.07065663e-11, 3.63320360e-11, 4.07478190e-11,\n", - " 4.35128453e-11, 4.43475549e-11, 4.31649567e-11, 4.00801554e-11,\n", - " 3.53984592e-11, 2.95862328e-11, 2.32329074e-11, 1.70175537e-11,\n", - " 1.17040422e-11])\n", - "Coordinates:\n", - " id int64 2\n", - " * time (d) (time (d)) float64 0.0 11.0 22.0 ... 3.63e+03 3.641e+03 3.652e+03" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "swiftdiff['rmag'].sel(id=2)" - ] - }, - { - "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/symba_swifter_comparison/9pl_18tp_encounters/swiftest_symba_vs_swifter_symba.ipynb b/examples/symba_swifter_comparison/9pl_18tp_encounters/swiftest_symba_vs_swifter_symba.ipynb new file mode 100644 index 000000000..b3b31d703 --- /dev/null +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/swiftest_symba_vs_swifter_symba.ipynb @@ -0,0 +1,753 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import swiftest\n", + "import numpy as np\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.652e+03\n", + "Creating Dataset\n", + "Successfully converted 333 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.652e+03\n", + "Creating Dataset\n", + "Successfully converted 333 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": { + "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(\"symba_swifter_comparison-9pl-18tp-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(\"symba_swifter_comparison-9pl-18tp-planets-vmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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(\"symba_swifter_comparison-9pl-18tp-testparticles-rmag.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['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(\"symba_swifter_comparison-9pl-18tp-testparticles-vmag.png\", facecolor='white', transparent=False, dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    <xarray.DataArray 'rmag' (time (d): 333)>\n",
    +       "array([0.00000000e+00, 2.81661760e-10, 1.96588167e-01, 3.41033868e-01,\n",
    +       "       3.66560841e-01, 3.66301948e-01, 3.66249335e-01, 3.66396298e-01,\n",
    +       "       3.66718394e-01, 3.67175496e-01, 3.67715021e-01, 3.68275152e-01,\n",
    +       "       3.68790522e-01, 3.69199134e-01, 3.69448202e-01, 3.69499736e-01,\n",
    +       "       3.69335058e-01, 3.68957123e-01, 3.68389904e-01, 3.67675715e-01,\n",
    +       "       3.66870691e-01, 3.66038894e-01, 3.65245879e-01, 3.64552504e-01,\n",
    +       "       3.64009490e-01, 3.63653178e-01, 3.63502759e-01, 3.63558964e-01,\n",
    +       "       3.63804172e-01, 3.64203926e-01, 3.64709715e-01, 3.65262866e-01,\n",
    +       "       3.65799451e-01, 3.66256038e-01, 3.66575758e-01, 3.66714174e-01,\n",
    +       "       3.66644175e-01, 3.66359092e-01, 3.65873566e-01, 3.65221944e-01,\n",
    +       "       3.64454472e-01, 3.63631943e-01, 3.62819516e-01, 3.62080376e-01,\n",
    +       "       3.61469889e-01, 3.61030854e-01, 3.60790163e-01, 3.60756788e-01,\n",
    +       "       3.60921178e-01, 3.61256029e-01, 3.61718521e-01, 3.62253903e-01,\n",
    +       "       3.62800136e-01, 3.63293324e-01, 3.63673632e-01, 3.63891182e-01,\n",
    +       "       3.63911357e-01, 3.63718679e-01, 3.63318627e-01, 3.62737123e-01,\n",
    +       "       3.62017697e-01, 3.61216780e-01, 3.60397813e-01, 3.59624972e-01,\n",
    +       "       3.58957128e-01, 3.58442669e-01, 3.58115556e-01, 3.57992626e-01,\n",
    +       "       3.58072312e-01, 3.58335003e-01, 3.58744642e-01, 3.59251395e-01,\n",
    +       "       3.59795862e-01, 3.60314438e-01, 4.12957901e-01, 5.53838132e-01,\n",
    +       "       6.88620712e-01, 8.15487973e-01, 8.20298524e-01, 8.52242029e-01,\n",
    +       "...\n",
    +       "       1.18537517e+00, 1.18611657e+00, 1.18648245e+00, 1.18644060e+00,\n",
    +       "       1.18599627e+00, 1.18519174e+00, 1.18410280e+00, 1.18283210e+00,\n",
    +       "       1.18150005e+00, 1.18023365e+00, 1.17915442e+00, 1.17836658e+00,\n",
    +       "       1.17794674e+00, 1.17793651e+00, 1.17833843e+00, 1.17911578e+00,\n",
    +       "       1.18019630e+00, 1.18147927e+00, 1.18284532e+00, 1.18416783e+00,\n",
    +       "       1.18532462e+00, 1.18620895e+00, 1.18673960e+00, 1.18686887e+00,\n",
    +       "       1.18658701e+00, 1.18592279e+00, 1.18494010e+00, 1.18373170e+00,\n",
    +       "       1.18241136e+00, 1.18110396e+00, 1.25299579e+00, 1.25223986e+00,\n",
    +       "       1.25181471e+00, 1.25176461e+00, 1.25209741e+00, 1.25278376e+00,\n",
    +       "       1.25376011e+00, 1.25493534e+00, 1.25620005e+00, 1.25743745e+00,\n",
    +       "       1.25853473e+00, 1.25939339e+00, 1.25993785e+00, 1.26012176e+00,\n",
    +       "       1.25993167e+00, 1.25938790e+00, 1.25854278e+00, 1.25747625e+00,\n",
    +       "       1.25628915e+00, 1.25509455e+00, 1.25400756e+00, 1.25313436e+00,\n",
    +       "       1.25256181e+00, 1.25234851e+00, 1.25251854e+00, 1.25305873e+00,\n",
    +       "       1.25391995e+00, 1.25502210e+00, 1.25626238e+00, 1.25752571e+00,\n",
    +       "       1.25869602e+00, 1.25966725e+00, 1.26035290e+00, 1.26069342e+00,\n",
    +       "       1.26066111e+00, 1.26026226e+00, 1.25953643e+00, 1.25855297e+00,\n",
    +       "       1.25740517e+00, 1.25620218e+00, 1.25505935e+00, 1.25408756e+00,\n",
    +       "       1.25338232e+00, 1.25301396e+00, 1.25302049e+00, 1.25340406e+00,\n",
    +       "       1.25413096e+00])\n",
    +       "Coordinates:\n",
    +       "    id        int64 2\n",
    +       "  * time (d)  (time (d)) float64 0.0 11.0 22.0 ... 3.63e+03 3.641e+03 3.652e+03
    " + ], + "text/plain": [ + "\n", + "array([0.00000000e+00, 2.81661760e-10, 1.96588167e-01, 3.41033868e-01,\n", + " 3.66560841e-01, 3.66301948e-01, 3.66249335e-01, 3.66396298e-01,\n", + " 3.66718394e-01, 3.67175496e-01, 3.67715021e-01, 3.68275152e-01,\n", + " 3.68790522e-01, 3.69199134e-01, 3.69448202e-01, 3.69499736e-01,\n", + " 3.69335058e-01, 3.68957123e-01, 3.68389904e-01, 3.67675715e-01,\n", + " 3.66870691e-01, 3.66038894e-01, 3.65245879e-01, 3.64552504e-01,\n", + " 3.64009490e-01, 3.63653178e-01, 3.63502759e-01, 3.63558964e-01,\n", + " 3.63804172e-01, 3.64203926e-01, 3.64709715e-01, 3.65262866e-01,\n", + " 3.65799451e-01, 3.66256038e-01, 3.66575758e-01, 3.66714174e-01,\n", + " 3.66644175e-01, 3.66359092e-01, 3.65873566e-01, 3.65221944e-01,\n", + " 3.64454472e-01, 3.63631943e-01, 3.62819516e-01, 3.62080376e-01,\n", + " 3.61469889e-01, 3.61030854e-01, 3.60790163e-01, 3.60756788e-01,\n", + " 3.60921178e-01, 3.61256029e-01, 3.61718521e-01, 3.62253903e-01,\n", + " 3.62800136e-01, 3.63293324e-01, 3.63673632e-01, 3.63891182e-01,\n", + " 3.63911357e-01, 3.63718679e-01, 3.63318627e-01, 3.62737123e-01,\n", + " 3.62017697e-01, 3.61216780e-01, 3.60397813e-01, 3.59624972e-01,\n", + " 3.58957128e-01, 3.58442669e-01, 3.58115556e-01, 3.57992626e-01,\n", + " 3.58072312e-01, 3.58335003e-01, 3.58744642e-01, 3.59251395e-01,\n", + " 3.59795862e-01, 3.60314438e-01, 4.12957901e-01, 5.53838132e-01,\n", + " 6.88620712e-01, 8.15487973e-01, 8.20298524e-01, 8.52242029e-01,\n", + "...\n", + " 1.18537517e+00, 1.18611657e+00, 1.18648245e+00, 1.18644060e+00,\n", + " 1.18599627e+00, 1.18519174e+00, 1.18410280e+00, 1.18283210e+00,\n", + " 1.18150005e+00, 1.18023365e+00, 1.17915442e+00, 1.17836658e+00,\n", + " 1.17794674e+00, 1.17793651e+00, 1.17833843e+00, 1.17911578e+00,\n", + " 1.18019630e+00, 1.18147927e+00, 1.18284532e+00, 1.18416783e+00,\n", + " 1.18532462e+00, 1.18620895e+00, 1.18673960e+00, 1.18686887e+00,\n", + " 1.18658701e+00, 1.18592279e+00, 1.18494010e+00, 1.18373170e+00,\n", + " 1.18241136e+00, 1.18110396e+00, 1.25299579e+00, 1.25223986e+00,\n", + " 1.25181471e+00, 1.25176461e+00, 1.25209741e+00, 1.25278376e+00,\n", + " 1.25376011e+00, 1.25493534e+00, 1.25620005e+00, 1.25743745e+00,\n", + " 1.25853473e+00, 1.25939339e+00, 1.25993785e+00, 1.26012176e+00,\n", + " 1.25993167e+00, 1.25938790e+00, 1.25854278e+00, 1.25747625e+00,\n", + " 1.25628915e+00, 1.25509455e+00, 1.25400756e+00, 1.25313436e+00,\n", + " 1.25256181e+00, 1.25234851e+00, 1.25251854e+00, 1.25305873e+00,\n", + " 1.25391995e+00, 1.25502210e+00, 1.25626238e+00, 1.25752571e+00,\n", + " 1.25869602e+00, 1.25966725e+00, 1.26035290e+00, 1.26069342e+00,\n", + " 1.26066111e+00, 1.26026226e+00, 1.25953643e+00, 1.25855297e+00,\n", + " 1.25740517e+00, 1.25620218e+00, 1.25505935e+00, 1.25408756e+00,\n", + " 1.25338232e+00, 1.25301396e+00, 1.25302049e+00, 1.25340406e+00,\n", + " 1.25413096e+00])\n", + "Coordinates:\n", + " id int64 2\n", + " * time (d) (time (d)) float64 0.0 11.0 22.0 ... 3.63e+03 3.641e+03 3.652e+03" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "swiftdiff['rmag'].sel(id=2)" + ] + }, + { + "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/symba_swifter_comparison/9pl_18tp_encounters/tp.in b/examples/symba_swifter_comparison/9pl_18tp_encounters/tp.in index c7cf002d6..7c1b15bd6 100644 --- a/examples/symba_swifter_comparison/9pl_18tp_encounters/tp.in +++ b/examples/symba_swifter_comparison/9pl_18tp_encounters/tp.in @@ -1,49 +1,49 @@ 16 101 -0.33208578766229190915 0.07439013071780828379 -0.02438290851908785084 --0.008988542188201206762 0.028710618792657981169 0.0034094833969203438596 +-0.0658187108448175795 0.30391138014159824188 0.030872485461978960153 +-0.030537616761930286291 -0.0049297226604189817514 0.0026371811668407158825 102 -0.33203966624962866216 0.07434400930514498129 -0.02438290851908785084 --0.014195641132219511543 0.028710618792657981169 0.0034094833969203438596 +-0.065864832257480881994 0.3038652587289349949 0.030872485461978960153 +-0.035744715705948587603 -0.0049297226604189817514 0.0026371811668407158825 103 --0.7187543234391324809 -0.011798260816488121555 0.041316403191083782287 -0.0065615071841567274707 -0.020313576971905909774 -0.00029114855617710840843 +-0.6526399503364792576 -0.30651935535365792962 0.033456491497379246824 +0.014807065041004032965 -0.0184014319837384685 -0.0007407193515014080928 104 --0.71886874402007694407 -0.011912681397432518804 0.041316403191083782287 --0.006132960226534060408 -0.020313576971905909774 -0.00029114855617710840843 +-0.65275437091742372075 -0.30663377593460228177 0.033456491497379246824 +0.0021125976303132450868 -0.0184014319837384685 -0.0007407193515014080928 105 -0.35683111163121072895 -0.9518327808922094624 4.4027442504036787155e-05 -0.022724479262608666269 0.0059737936889703449964 -3.3484113013969089573e-07 +0.58052308875528702004 -0.8331397763444912119 3.7646553415201541957e-05 +0.020730998066553867065 0.009770187318278569788 -5.1179589633921335467e-07 106 -0.3567106558193317012 -0.95195323670408849015 4.4027442504036787155e-05 -0.008935598794060913702 0.0059737936889703449964 -3.3484113013969089573e-07 +0.58040263294340799227 -0.83326023215637023966 3.7646553415201541957e-05 +0.0069421175980061153657 0.009770187318278569788 -5.1179589633921335467e-07 107 --1.5233391647104730371 0.6724145771476651712 0.051459143378398922164 --0.0020480822268840624331 -0.011607719813367209372 -0.000117479966462153095864 +-1.5891096979602641337 0.49388011604967890777 0.049330990309104823244 +-0.00055132825635455804184 -0.012168467501132099878 -0.00016594932370266260858 108 --1.5234032495379807859 0.6723504923201574224 0.051459143378398922164 --0.008207040423331847523 -0.011607719813367209372 -0.000117479966462153095864 +-1.5891737827877718825 0.49381603122217127 0.049330990309104823244 +-0.0067102864528023435653 -0.012168467501132099878 -0.00016594932370266260858 109 -4.050605826355517358 -2.9904269687677218492 -0.078187280837353656526 -0.041279424970441319642 0.006432188574295680597 -0.00012509257442073270106 +4.1155004823659924185 -2.893171407164709663 -0.080043092204059404504 +0.0411371945893665783 0.006534697671907701254 -0.00012233719535540690457 110 -4.049284028339322994 -2.9917487667839162135 -0.078187280837353656526 --0.032485009432853539924 0.006432188574295680597 -0.00012509257442073270106 +4.114178684349798054 -2.8944932051809040274 -0.080043092204059404504 +-0.032627239813928281265 0.006534697671907701254 -0.00012233719535540690457 111 -6.299479995832536261 -7.7058625321556393217 -0.11669919842191249504 -0.02612723553831041573 0.0035242303011843410798 -0.00022097170940726839814 +6.3594761400945154506 -7.652737529060036792 -0.12000977499446359442 +0.02609853948273724994 0.0035590677039893160206 -0.00022043610541731448703 112 -6.2983790111222752728 -7.70696351686590031 -0.11669919842191249504 --0.01809910222875676239 0.0035242303011843410798 -0.00022097170940726839814 +6.3583751553842544624 -7.65383851377029778 -0.12000977499446359442 +-0.01812779828432992818 0.0035590677039893160206 -0.00022043610541731448703 113 -14.856321905516212567 13.007829033301401722 -0.14417795763685259391 -0.010478935887110856981 0.0027821364817078499815 4.40781085949555924e-05 +14.817019253266252576 13.049505570448612701 -0.14351615042000470668 +0.010470241012353788054 0.002774730265364384104 4.416262654344997005e-05 114 -14.855842389541807691 13.007349517326996846 -0.14417795763685259391 --0.015710591190212928187 0.0027821364817078499815 4.40781085949555924e-05 +14.8165397372918477 13.049026054474207825 -0.14351615042000470668 +-0.015719286064969997113 0.002774730265364384104 4.416262654344997005e-05 115 -29.55768244045575699 -4.6291447957067299868 -0.58590957207831262377 -0.014905509815736753265 0.0031274056019462009859 -7.51415892482447254e-05 +29.564692754289236376 -4.5822270889269072214 -0.5870359532621901577 +0.014900470225798949711 0.0031282868879460171488 -7.5042704502708602616e-05 116 -29.557216915563323312 -4.6296103205991601115 -0.58590957207831262377 --0.0139657618108195089035 0.0031274056019462009859 -7.51415892482447254e-05 +29.564227229396802699 -4.582692613819337346 -0.5870359532621901577 +-0.013970801400757312458 0.0031282868879460171488 -7.5042704502708602616e-05 diff --git a/python/swiftest/swiftest/init_cond.py b/python/swiftest/swiftest/init_cond.py index 6e5048c0f..f9a7378c0 100644 --- a/python/swiftest/swiftest/init_cond.py +++ b/python/swiftest/swiftest/init_cond.py @@ -121,7 +121,6 @@ def solar_system_horizons(plname, idval, param, ephemerides_start_date, ds): tlab.append('vx') tlab.append('vy') tlab.append('vz') - plab.append('Rhill') dims = ['time', 'id', 'vec'] t = np.array([0.0]) @@ -193,11 +192,14 @@ def solar_system_horizons(plname, idval, param, ephemerides_start_date, ds): p11.append(pldata[key].vectors()['vy'][0] * VCONV) p12.append(pldata[key].vectors()['vz'][0] * VCONV) 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]) + if (param['RHILL_PRESENT'] == 'YES'): + Rhill.append(pldata[key].elements()['a'][0] * DCONV * (3 * MSun_over_Mpl[key]) ** (-THIRDLONG)) + pvec = np.vstack([p1, p2, p3, p4, p5, p6, GMpl, Rpl, Rhill, p7, p8, p9, p10, p11, p12]) + else: + pvec = np.vstack([p1, p2, p3, p4, p5, p6, GMpl, Rpl, p7, p8, p9, p10, p11, p12]) else: pvec = np.vstack([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12]) plab = tlab.copy() diff --git a/python/swiftest/swiftest/io.py b/python/swiftest/swiftest/io.py index ceab9a74f..2dd4ef7b3 100644 --- a/python/swiftest/swiftest/io.py +++ b/python/swiftest/swiftest/io.py @@ -71,6 +71,7 @@ def read_swiftest_param(param_file_name, param): param['EXTRA_FORCE'] = param['EXTRA_FORCE'].upper() param['BIG_DISCARD'] = param['BIG_DISCARD'].upper() param['CHK_CLOSE'] = param['CHK_CLOSE'].upper() + param['RHILL_PRESENT'] = param['RHILL_PRESENT'].upper() param['FRAGMENTATION'] = param['FRAGMENTATION'].upper() param['ROTATION'] = param['ROTATION'].upper() param['TIDES'] = param['TIDES'].upper() @@ -401,6 +402,8 @@ def make_swiftest_labels(param): plab = tlab.copy() plab.append('Mass') plab.append('Radius') + if param['RHILL_PRESENT'] == 'YES': + plab.append('Rhill') clab = ['Mass', 'Radius', 'J_2', 'J_4'] if param['ROTATION'] == 'YES': clab.append('Ip_x') @@ -491,6 +494,8 @@ def swiftest_stream(f, param): p6 = f.read_reals(np.float64) Mpl = f.read_reals(np.float64) Rpl = f.read_reals(np.float64) + if param['RHILL_PRESENT'] == 'YES': + Rhill = f.read_reals(np.float64) if param['ROTATION'] == 'YES': Ipplx = f.read_reals(np.float64) Ipply = f.read_reals(np.float64) @@ -523,6 +528,9 @@ def swiftest_stream(f, param): tvec = np.empty((6, 0)) tpid = np.empty(0) cvec = np.array([Mcb, Rcb, J2cb, J4cb]) + if param['RHILL_PRESENT'] == 'YES': + if npl > 0: + pvec = np.vstack([pvec, Rhill]) if param['ROTATION'] == 'YES': cvec = np.vstack([cvec, Ipcbx, Ipcby, Ipcbz, rotcbx, rotcby, rotcbz]) if npl > 0: @@ -670,7 +678,10 @@ def swiftest_xr2infile(ds, param, framenum=-1): print(pl.id.count().values, file=plfile) for i in pl.id: pli = pl.sel(id=i) - print(i.values, pli['Mass'].values, file=plfile) + 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) 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) @@ -689,36 +700,55 @@ def swiftest_xr2infile(ds, param, framenum=-1): # Now make Swiftest files cbfile = FortranFile(param['CB_IN'], 'w') cbfile.write_record(cbid) - MSun = np.double(1.0) cbfile.write_record(np.double(GMSun)) - cbfile.write_record(np.double(rmin)) + cbfile.write_record(np.double(RSun)) cbfile.write_record(np.double(J2)) cbfile.write_record(np.double(J4)) cbfile.close() plfile = FortranFile(param['PL_IN'], 'w') - plfile.write_record(npl) + npl = pl.id.count().values + plid = pl.id.values + px = pl['px'].values + py = pl['py'].values + pz = pl['pz'].values + vx = pl['vx'].values + vy = pl['vy'].values + vz = pl['vz'].values + mass = pl['Mass'].values + radius = pl['Radius'].values + 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(px) + plfile.write_record(py) + plfile.write_record(pz) + plfile.write_record(vx) + plfile.write_record(vy) + plfile.write_record(vz) plfile.write_record(mass) + if param['RHILL_PRESENT'] == 'YES': + rhill = pl['Rhill'].values + plfile.write_record(rhill) plfile.write_record(radius) plfile.close() tpfile = FortranFile(param['TP_IN'], 'w') - ntp = 1 + ntp = tp.id.count().values + tpid = tp.id.values + px = tp['px'].values + py = tp['py'].values + pz = tp['pz'].values + vx = tp['vx'].values + vy = tp['vy'].values + vz = tp['vz'].values 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.write_record(px) + tpfile.write_record(py) + tpfile.write_record(pz) + tpfile.write_record(vx) + tpfile.write_record(vy) + tpfile.write_record(vz) else: print(f"{param['IN_TYPE']} is an unknown file type") @@ -1021,9 +1051,13 @@ def swifter2swiftest(swifter_param, plname="", tpname="", cbname="", conversion_ for n in range(1, npl): # Loop over planets line = plold.readline() i_list = [i for i in line.split(" ") if i.strip()] - name = int(i_list[0]) + idnum = int(i_list[0]) GMpl = real2float(i_list[1]) - print(name, GMpl, file=plnew) + if swifter_param['RHILL_PRESENT'] == 'YES': + Rhill = real2float(i_list[2]) + print(idnum, GMpl, Rhill, file=plnew) + else: + print(idnum, GMpl, file=plnew) if swifter_param['CHK_CLOSE'] == 'YES': line = plold.readline() i_list = [i for i in line.split(" ") if i.strip()] @@ -1237,7 +1271,6 @@ def swiftest2swifter_param(swiftest_param, J2=0.0, J4=0.0): 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" diff --git a/python/swiftest/swiftest/simulation_class.py b/python/swiftest/swiftest/simulation_class.py index e20ef05f7..670b72a60 100644 --- a/python/swiftest/swiftest/simulation_class.py +++ b/python/swiftest/swiftest/simulation_class.py @@ -39,6 +39,7 @@ def __init__(self, codename="Swiftest", param_file=""): 'EXTRA_FORCE': "NO", 'BIG_DISCARD': "NO", 'CHK_CLOSE': "YES", + 'RHILL_PRESENT': "YES", 'FRAGMENTATION': "NO", 'ROTATION': "NO", 'TIDES': "NO", diff --git a/src/io/io.f90 b/src/io/io.f90 index cf4772a8f..7c50242cb 100644 --- a/src/io/io.f90 +++ b/src/io/io.f90 @@ -259,10 +259,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, RMVS) + case(WHM, RMVS, SYMBA) write(*,*) "GR = ", self%lgr case default - write(iomsg, *) 'GR is not yet implemented for this integrator. This parameter will be ignored.' + if (self%lgr) write(iomsg, *) 'GR is not yet implemented for this integrator. This parameter will be ignored.' end select end associate @@ -612,41 +612,33 @@ module subroutine io_read_body_in(self, param) do i = 1, nbody select type(self) class is (swiftest_pl) - read(iu, *, iostat = ierr) self%id(i), val - self%Gmass(i) = real(val, kind=DP) - self%mass(i) = real(val / param%GU, kind=DP) - - if (param%lclose) then - if (param%lrhill_present) then - read(iu, *, iostat = ierr) self%radius(i), self%rhill(i) - else - read(iu, *, iostat = ierr) self%radius(i) - end if - if (ierr /= 0 ) exit + if (param%lrhill_present) then + read(iu, *, iostat=ierr, err=100) self%id(i), val, self%rhill(i) else - self%radius(i) = 0.0_DP + read(iu, *, iostat=ierr, err=100) self%id(i), val end if + self%Gmass(i) = real(val, kind=DP) + self%mass(i) = real(val / param%GU, kind=DP) + if (param%lclose) read(iu, *, iostat=ierr, err=100) self%radius(i) if (param%lrotation) then - read(iu, iostat = ierr) self%Ip(:, i) - read(iu, iostat = ierr) self%rot(:, i) + read(iu, iostat=ierr, err=100) self%Ip(:, i) + read(iu, iostat=ierr, err=100) self%rot(:, i) end if if (param%ltides) then - read(iu, iostat = ierr) self%k2(i) - read(iu, iostat = ierr) self%Q(i) + read(iu, iostat=ierr, err=100) self%k2(i) + read(iu, iostat=ierr, err=100) self%Q(i) end if class is (swiftest_tp) - read(iu, *, iostat = ierr) self%id(i) + read(iu, *, iostat=ierr, err=100) self%id(i) end select - if (ierr /= 0 ) exit - read(iu, *, iostat = ierr) self%xh(1, i), self%xh(2, i), self%xh(3, i) - read(iu, *, iostat = ierr) self%vh(1, i), self%vh(2, i), self%vh(3, i) - if (ierr /= 0 ) exit + read(iu, *, iostat=ierr, err=100) self%xh(1, i), self%xh(2, i), self%xh(3, i) + read(iu, *, iostat=ierr, err=100) self%vh(1, i), self%vh(2, i), self%vh(3, i) self%status(i) = ACTIVE end do end if case (REAL4_TYPE, REAL8_TYPE) !, SWIFTER_REAL4_TYPE, SWIFTER_REAL8_TYPE) - open(unit = iu, file = infile, status = 'old', form = 'UNFORMATTED', iostat = ierr) - read(iu, iostat = ierr) nbody + open(unit=iu, file=infile, status='old', form='UNFORMATTED', iostat=ierr) + read(iu, iostat=ierr, err=100) nbody call self%setup(nbody) if (nbody > 0) then call self%read_frame(iu, param, XV, ierr) @@ -658,7 +650,7 @@ module subroutine io_read_body_in(self, param) end select close(iu) - if (ierr /= 0 ) then + 100 if (ierr /= 0 ) then write(*,*) 'Error reading in initial conditions from ',trim(adjustl(infile)) call util_exit(FAILURE) end if @@ -817,45 +809,46 @@ module subroutine io_read_frame_body(self, iu, param, form, ierr) integer(I4B), intent(out) :: ierr !! Error code associate(n => self%nbody) - read(iu, iostat = ierr) self%id(1:n) - !read(iu, iostat = ierr) self%name(1:n) + read(iu, iostat=ierr, err=100) self%id(1:n) + !read(iu, iostat=ierr, err=100) self%name(1:n) select case (form) case (EL) - read(iu, iostat = ierr) self%a(1:n) - read(iu, iostat = ierr) self%e(1:n) - read(iu, iostat = ierr) self%inc(1:n) - read(iu, iostat = ierr) self%capom(:) - read(iu, iostat = ierr) self%omega(:) - read(iu, iostat = ierr) self%capm(:) + read(iu, iostat=ierr, err=100) self%a(1:n) + read(iu, iostat=ierr, err=100) self%e(1:n) + read(iu, iostat=ierr, err=100) self%inc(1:n) + read(iu, iostat=ierr, err=100) self%capom(:) + read(iu, iostat=ierr, err=100) self%omega(:) + read(iu, iostat=ierr, err=100) self%capm(:) case (XV) - read(iu, iostat = ierr) self%xh(1, 1:n) - read(iu, iostat = ierr) self%xh(2, 1:n) - read(iu, iostat = ierr) self%xh(3, 1:n) - read(iu, iostat = ierr) self%vh(1, 1:n) - read(iu, iostat = ierr) self%vh(2, 1:n) - read(iu, iostat = ierr) self%vh(3, 1:n) + read(iu, iostat=ierr, err=100) self%xh(1, 1:n) + read(iu, iostat=ierr, err=100) self%xh(2, 1:n) + read(iu, iostat=ierr, err=100) self%xh(3, 1:n) + read(iu, iostat=ierr, err=100) self%vh(1, 1:n) + read(iu, iostat=ierr, err=100) self%vh(2, 1:n) + read(iu, iostat=ierr, err=100) self%vh(3, 1:n) end select select type(pl => self) class is (swiftest_pl) ! Additional output if the passed polymorphic object is a massive body - read(iu, iostat = ierr) pl%Gmass(1:n) + read(iu, iostat=ierr, err=100) pl%Gmass(1:n) pl%mass(1:n) = pl%Gmass / param%GU - read(iu, iostat = ierr) pl%radius(1:n) + if (param%lrhill_present) read(iu, iostat=ierr, err=100) pl%rhill(1:n) + read(iu, iostat=ierr, err=100) pl%radius(1:n) if (param%lrotation) then - read(iu, iostat = ierr) pl%rot(1, 1:n) - read(iu, iostat = ierr) pl%rot(2, 1:n) - read(iu, iostat = ierr) pl%rot(3, 1:n) - read(iu, iostat = ierr) pl%Ip(1, 1:n) - read(iu, iostat = ierr) pl%Ip(2, 1:n) - read(iu, iostat = ierr) pl%Ip(3, 1:n) + read(iu, iostat=ierr, err=100) pl%rot(1, 1:n) + read(iu, iostat=ierr, err=100) pl%rot(2, 1:n) + read(iu, iostat=ierr, err=100) pl%rot(3, 1:n) + read(iu, iostat=ierr, err=100) pl%Ip(1, 1:n) + read(iu, iostat=ierr, err=100) pl%Ip(2, 1:n) + read(iu, iostat=ierr, err=100) pl%Ip(3, 1:n) end if if (param%ltides) then - read(iu, iostat = ierr) pl%k2(1:n) - read(iu, iostat = ierr) pl%Q(1:n) + read(iu, iostat=ierr, err=100) pl%k2(1:n) + read(iu, iostat=ierr, err=100) pl%Q(1:n) end if end select end associate - if (ierr /=0) then + 100 if (ierr /=0) then write(*,*) 'Error reading Swiftest body data' call util_exit(FAILURE) end if @@ -878,22 +871,22 @@ module subroutine io_read_frame_cb(self, iu, param, form, ierr) character(*), intent(in) :: form !! Input format code ("XV" or "EL") integer(I4B), intent(out) :: ierr !! Error cod - read(iu, iostat = ierr) self%id - !read(iu, iostat = ierr) self%name - read(iu, iostat = ierr) self%Gmass + read(iu, iostat=ierr, err=100) self%id + !read(iu, iostat=ierr, err=100) self%name + read(iu, iostat=ierr, err=100) self%Gmass self%mass = self%Gmass / param%GU - read(iu, iostat = ierr) self%radius - read(iu, iostat = ierr) self%j2rp2 - read(iu, iostat = ierr) self%j4rp4 + read(iu, iostat=ierr, err=100) self%radius + read(iu, iostat=ierr, err=100) self%j2rp2 + read(iu, iostat=ierr, err=100) self%j4rp4 if (param%lrotation) then - read(iu, iostat = ierr) self%Ip(:) - read(iu, iostat = ierr) self%rot(:) + read(iu, iostat=ierr, err=100) self%Ip(:) + read(iu, iostat=ierr, err=100) self%rot(:) end if if (param%ltides) then - read(iu, iostat = ierr) self%k2 - read(iu, iostat = ierr) self%Q + read(iu, iostat=ierr, err=100) self%k2 + read(iu, iostat=ierr, err=100) self%Q end if - if (ierr /=0) then + 100 if (ierr /=0) then write(*,*) 'Error reading central body data' call util_exit(FAILURE) end if @@ -1160,6 +1153,7 @@ module subroutine io_write_frame_body(self, iu, param) select type(pl => self) class is (swiftest_pl) ! Additional output if the passed polymorphic object is a massive body write(iu) pl%Gmass(1:n) + write(iu) pl%rhill(1:n) write(iu) pl%radius(1:n) if (param%lrotation) then write(iu) pl%rot(1, 1:n) diff --git a/src/main/swiftest_driver.f90 b/src/main/swiftest_driver.f90 index 4ed7cf3fe..4c6bccc72 100644 --- a/src/main/swiftest_driver.f90 +++ b/src/main/swiftest_driver.f90 @@ -10,9 +10,9 @@ program swiftest_driver implicit none class(swiftest_nbody_system), allocatable :: nbody_system !! Polymorphic object containing the nbody system to be integrated - type(swiftest_parameters) :: param + class(swiftest_parameters), allocatable :: param !! Run configuration parameters 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 + character(len=:),allocatable :: param_file_name !! Name of the file containing user-defined parameters integer(I4B) :: ierr !! I/O error code integer(I8B) :: iloop !! Loop counter integer(I8B) :: idump !! Dump cadence counter @@ -31,6 +31,12 @@ program swiftest_driver end if !$ start_wall_time = omp_get_wtime() !> Read in the user-defined parameters file and the initial conditions of the system + select case(integrator) + case(symba) + allocate(symba_parameters :: param) + case default + allocate(swiftest_parameters :: param) + end select param%integrator = integrator call setup_construct_system(nbody_system, param) call param%read_from_file(param_file_name) diff --git a/src/modules/helio_classes.f90 b/src/modules/helio_classes.f90 index 2f8a52808..d03466676 100644 --- a/src/modules/helio_classes.f90 +++ b/src/modules/helio_classes.f90 @@ -7,21 +7,22 @@ module helio_classes use swiftest_classes, only : swiftest_cb, swiftest_pl, swiftest_tp, swiftest_nbody_system use whm_classes, only : whm_nbody_system implicit none + public !******************************************************************************************************************************** ! helio_nbody_system class definitions and method interfaces !******************************************************************************************************************************** - type, public, extends(whm_nbody_system) :: helio_nbody_system + type, extends(whm_nbody_system) :: helio_nbody_system contains - procedure, public :: step => helio_step_system !! Advance the Helio nbody system forward in time by one step + procedure :: step => helio_step_system !! Advance the Helio nbody system forward in time by one step end type helio_nbody_system !******************************************************************************************************************************** ! helio_cb class definitions and method interfaces !******************************************************************************************************************************* !> Helio central body particle class - type, public, extends(swiftest_cb) :: helio_cb + type, 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 @@ -32,15 +33,15 @@ module helio_classes !******************************************************************************************************************************* !! Helio massive body particle class - type, public, extends(swiftest_pl) :: helio_pl + type, extends(swiftest_pl) :: helio_pl 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 :: accel => helio_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies - procedure, public :: kick => helio_kick_vb_pl !! Kicks the barycentric velocities - procedure, public :: step => helio_step_pl !! Steps the body forward one stepsize + procedure :: vh2vb => helio_coord_vh2vb_pl !! Convert massive bodies from heliocentric to barycentric coordinates (velocity only) + procedure :: vb2vh => helio_coord_vb2vh_pl !! Convert massive bodies from barycentric to heliocentric coordinates (velocity only) + procedure :: drift => helio_drift_pl !! Method for Danby drift in Democratic Heliocentric coordinates + procedure :: lindrift => helio_drift_linear_pl !! Method for linear drift of massive bodies due to barycentric momentum of Sun + procedure :: accel => helio_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies + procedure :: kick => helio_kick_vb_pl !! Kicks the barycentric velocities + procedure :: step => helio_step_pl !! Steps the body forward one stepsize end type helio_pl !******************************************************************************************************************************** @@ -48,15 +49,15 @@ module helio_classes !******************************************************************************************************************************* !! Helio test particle class - type, public, extends(swiftest_tp) :: helio_tp + type, 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 :: lindrift => helio_drift_linear_tp !! Method for linear drift of massive bodies due to barycentric momentum of Sun - procedure, public :: drift => helio_drift_tp !! Method for Danby drift in Democratic Heliocentric coordinates - procedure, public :: accel => helio_kick_getacch_tp !! Compute heliocentric accelerations of massive bodies - procedure, public :: kick => helio_kick_vb_tp !! Kicks the barycentric velocities - procedure, public :: step => helio_step_tp !! Steps the body forward one stepsize + procedure :: vh2vb => helio_coord_vh2vb_tp !! Convert test particles from heliocentric to barycentric coordinates (velocity only) + procedure :: vb2vh => helio_coord_vb2vh_tp !! Convert test particles from barycentric to heliocentric coordinates (velocity only) + procedure :: lindrift => helio_drift_linear_tp !! Method for linear drift of massive bodies due to barycentric momentum of Sun + procedure :: drift => helio_drift_tp !! Method for Danby drift in Democratic Heliocentric coordinates + procedure :: accel => helio_kick_getacch_tp !! Compute heliocentric accelerations of massive bodies + procedure :: kick => helio_kick_vb_tp !! Kicks the barycentric velocities + procedure :: step => helio_step_tp !! Steps the body forward one stepsize end type helio_tp interface diff --git a/src/modules/module_nrutil.f90 b/src/modules/module_nrutil.f90 deleted file mode 100644 index ce8eeabbc..000000000 --- a/src/modules/module_nrutil.f90 +++ /dev/null @@ -1,189 +0,0 @@ -!********************************************************************************************************************************** -! -! Unit Name : module_nrutil -! Unit Type : module -! Project : SWIFTEST -! Package : module -! Language : Fortran 90/95 -! -! Description : Definition of data and utility functions taken from Numerical Recipes in Fortran 90 -! -! Input -! Arguments : N/A -! Terminal : N/A -! File : N/A -! -! Output -! Arguments : N/A -! Terminal : N/A -! File : N/A -! -! Invocation : N/A -! -! Notes : Reference: Press, W. H., Teukolsky, S. A., Vetterling, W. T. & Flannery B. P. 1996. Numerical Recipes in -! Fortran 90, The Art of Scientific Computing, 2nd Edition, Vol. 2 of Fortran Numerical Recipes, -! (Cambridge University Press). -! -!********************************************************************************************************************************** -MODULE module_nrutil - - USE swiftest_globals - IMPLICIT NONE - - INTEGER(I4B), PARAMETER :: NPAR_ARTH = 16 - INTEGER(I4B), PARAMETER :: NPAR2_ARTH = 8 - INTEGER(I4B), PARAMETER :: NPAR_CUMSUM = 16 - - INTERFACE arth - MODULE PROCEDURE arth_d, arth_i - END INTERFACE - - INTERFACE cumsum - MODULE PROCEDURE cumsum_i - END INTERFACE - - INTERFACE outerdiff - MODULE PROCEDURE outerdiff_d, outerdiff_i - END INTERFACE - - INTERFACE outerprod - MODULE PROCEDURE outerprod_d - END INTERFACE - -CONTAINS - - FUNCTION arth_d(first, increment, n) - INTEGER(I4B), INTENT(IN) :: n - REAL(DP), INTENT(IN) :: first, increment - REAL(DP), DIMENSION(n) :: arth_d - INTEGER(I4B) :: k, k2 - REAL(DP) :: temp - IF (n > 0) arth_d(1) = first - IF (n <= NPAR_ARTH) THEN - DO k = 2, n - arth_d(k) = arth_d(k-1) + increment - END DO - ELSE - DO k = 2, NPAR2_ARTH - arth_d(k) = arth_d(k-1) + increment - END DO - temp = increment*NPAR2_ARTH - k = NPAR2_ARTH - DO - IF (k >= n) EXIT - k2 = k + k - arth_d(k+1:MIN(k2, n)) = temp + arth_d(1:MIN(k, n-k)) - temp = temp + temp - k = k2 - END DO - END IF - RETURN - END FUNCTION arth_d - - FUNCTION arth_i(first, increment, n) - INTEGER(I4B), INTENT(IN) :: first, increment, n - INTEGER(I4B), DIMENSION(n) :: arth_i - INTEGER(I4B) :: k, k2, temp - IF (n > 0) arth_i(1) = first - IF (n <= NPAR_ARTH) THEN - DO k = 2, n - arth_i(k) = arth_i(k-1) + increment - END DO - ELSE - DO k = 2, NPAR2_ARTH - arth_i(k) = arth_i(k-1) + increment - END DO - temp = increment*NPAR2_ARTH - k = NPAR2_ARTH - DO - IF (k >= n) EXIT - k2 = k + k - arth_i(k+1:MIN(k2, n)) = temp + arth_i(1:MIN(k, n-k)) - temp = temp + temp - k = k2 - END DO - END IF - RETURN - END FUNCTION arth_i - - RECURSIVE FUNCTION cumsum_i(arr, seed) RESULT(ans) - INTEGER(I4B), DIMENSION(:), INTENT(IN) :: arr - INTEGER(I4B), OPTIONAL, INTENT(IN) :: seed - INTEGER(I4B), DIMENSION(SIZE(arr)) :: ans - INTEGER(I4B) :: n, j, sd - n = SIZE(arr) - IF (n == 0_I4B) RETURN - sd = 0_I4B - IF (PRESENT(seed)) sd = seed - ans(1) = arr(1) + sd - IF (n < NPAR_CUMSUM) THEN - DO j = 2, n - ans(j) = ans(j-1) + arr(j) - END DO - ELSE - ans(2:n:2) = cumsum_i(arr(2:n:2) + arr(1:n-1:2), sd) - ans(3:n:2) = ans(2:n-1:2) + arr(3:n:2) - END IF - RETURN - END FUNCTION cumsum_i - - FUNCTION iminloc(arr) - REAL(DP), DIMENSION(:), INTENT(IN) :: arr - INTEGER(I4B), DIMENSION(1) :: imin - INTEGER(I4B) :: iminloc - imin = MINLOC(arr(:)) - iminloc = imin(1) - RETURN - END FUNCTION iminloc - - FUNCTION outerdiff_d(a, b) - REAL(DP), DIMENSION(:), INTENT(IN) :: a, b - REAL(DP), DIMENSION(SIZE(a), SIZE(b)) :: outerdiff_d - outerdiff_d = SPREAD(a, DIM = 2, NCOPIES = SIZE(b)) - SPREAD(b, DIM = 1, NCOPIES = SIZE(a)) - RETURN - END FUNCTION outerdiff_d - - FUNCTION outerdiff_i(a, b) - INTEGER(I4B), DIMENSION(:), INTENT(IN) :: a, b - INTEGER(I4B), DIMENSION(SIZE(a), SIZE(b)) :: outerdiff_i - outerdiff_i = SPREAD(a, DIM = 2, NCOPIES = SIZE(b)) - SPREAD(b, DIM = 1, NCOPIES = SIZE(a)) - RETURN - END FUNCTION outerdiff_i - - FUNCTION outerprod_d(a, b) - REAL(DP), DIMENSION(:), INTENT(IN) :: a, b - REAL(DP), DIMENSION(SIZE(a), SIZE(b)) :: outerprod_d - outerprod_d = SPREAD(a, DIM = 2, NCOPIES = SIZE(b))*SPREAD(b, DIM = 1, NCOPIES = SIZE(a)) - RETURN - END FUNCTION outerprod_d - - FUNCTION upper_triangle(j, k, extra) - INTEGER(I4B), INTENT(IN) :: j, k - INTEGER(I4B), OPTIONAL, INTENT(IN) :: extra - LOGICAL , DIMENSION(j, k) :: upper_triangle - INTEGER(I4B) :: n - n = 0 - IF (PRESENT(extra)) n = extra - upper_triangle = (outerdiff(arth_i(1, 1, j), arth_i(1, 1, k)) < n) - RETURN - END FUNCTION upper_triangle - -END MODULE module_nrutil -!********************************************************************************************************************************** -! -! Author(s) : David E. Kaufmann -! -! Revision Control System (RCS) Information -! -! Source File : $RCSfile$ -! Full Path : $Source$ -! Revision : $Revision$ -! Date : $Date$ -! Programmer : $Author$ -! Locked By : $Locker$ -! State : $State$ -! -! Modification History: -! -! $Log$ -!********************************************************************************************************************************** diff --git a/src/modules/rmvs_classes.f90 b/src/modules/rmvs_classes.f90 index 8b0ad2c2f..37a88993c 100644 --- a/src/modules/rmvs_classes.f90 +++ b/src/modules/rmvs_classes.f90 @@ -6,28 +6,27 @@ module rmvs_classes use swiftest_globals use whm_classes, only : whm_cb, whm_pl, whm_tp, whm_nbody_system implicit none - public + integer(I4B), private, parameter :: NTENC = 10 integer(I4B), private, parameter :: NTPHENC = 3 integer(I4B), private, parameter :: NTPENC = NTENC * NTPHENC - real(DP), private, parameter :: RHSCALE = 3.5_DP - real(DP), private, parameter :: RHPSCALE = 1.0_DP - real(DP), private, parameter :: FACQDT = 2.0_DP + real(DP), private, parameter :: RHSCALE = 3.5_DP + real(DP), private, parameter :: RHPSCALE = 1.0_DP + real(DP), private, parameter :: FACQDT = 2.0_DP !******************************************************************************************************************************** ! rmvs_nbody_system class definitions and method interfaces !******************************************************************************************************************************** - type, public, extends(whm_nbody_system) :: rmvs_nbody_system + type, extends(whm_nbody_system) :: rmvs_nbody_system !> In the RMVS integrator, only test particles are discarded logical :: lplanetocentric = .false. !! Flag that indicates that the object is a planetocentric set of masive bodies used for close encounter calculations real(DP) :: rts !! fraction of Hill's sphere radius to use as radius of encounter region real(DP), dimension(:,:), allocatable :: vbeg !! Planet velocities at beginning ot step contains - private !> Replace the abstract procedures with concrete ones - 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 + procedure :: initialize => rmvs_setup_initialize_system !! Performs RMVS-specific initilization steps, including generating the close encounter planetocentric structures + procedure :: step => rmvs_step_system !! Advance the RMVS nbody system forward in time by one step end type rmvs_nbody_system type, private :: rmvs_interp @@ -41,7 +40,7 @@ module rmvs_classes ! rmvs_cb class definitions and method interfaces !******************************************************************************************************************************* !> RMVS central body particle class - type, public, extends(whm_cb) :: rmvs_cb + type, extends(whm_cb) :: rmvs_cb 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 logical :: lplanetocentric = .false. !! Flag that indicates that the object is a planetocentric set of masive bodies used for close encounter calculations @@ -52,7 +51,7 @@ module rmvs_classes !******************************************************************************************************************************* !! RMVS test particle class - type, public, extends(whm_tp) :: rmvs_tp + type, extends(whm_tp) :: rmvs_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 rmvs_setup_tp and rmvs_util_spill_tp ! encounter steps) @@ -67,14 +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 - private - 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_util_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: accel => rmvs_kick_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_util_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure :: discard => rmvs_discard_tp !! Check to see if test particles should be discarded based on pericenter passage distances with respect to planets encountered + procedure :: encounter_check => rmvs_encounter_check_tp !! Checks if any test particles are undergoing a close encounter with a massive body + procedure :: fill => rmvs_util_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: accel => rmvs_kick_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 :: setup => rmvs_setup_tp !! Constructor method - Allocates space for number of particles + procedure :: spill => rmvs_util_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type rmvs_tp !******************************************************************************************************************************** @@ -82,19 +80,18 @@ module rmvs_classes !******************************************************************************************************************************* !> RMVS massive body particle class - type, public, 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 - 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 + type, 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 + class(rmvs_nbody_system), dimension(:), allocatable :: planetocentric !! Planetocentric version of the massive body objects (one for each massive body) + logical :: lplanetocentric = .false. !! Flag that indicates that the object is a planetocentric set of masive bodies used for close encounter calculations contains - private - procedure, public :: fill => rmvs_util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: setup => rmvs_setup_pl !! Constructor method - Allocates space for number of particles - procedure, public :: spill => rmvs_util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure :: fill => rmvs_util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: setup => rmvs_setup_pl !! Constructor method - Allocates space for number of particles + procedure :: spill => rmvs_util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type rmvs_pl interface @@ -152,12 +149,12 @@ 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_system(self, param) + module subroutine rmvs_setup_initialize_system(self, param) use swiftest_classes, only : swiftest_parameters implicit none class(rmvs_nbody_system), intent(inout) :: self !! RMVS system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - end subroutine rmvs_setup_system + end subroutine rmvs_setup_initialize_system module subroutine rmvs_setup_tp(self,n) implicit none diff --git a/src/modules/swiftest.f90 b/src/modules/swiftest.f90 index 2ab44a9d5..10578c5b6 100644 --- a/src/modules/swiftest.f90 +++ b/src/modules/swiftest.f90 @@ -10,7 +10,6 @@ module swiftest use rmvs_classes use helio_classes use symba_classes - use module_nrutil use lambda_function !use advisor_annotate !$ use omp_lib diff --git a/src/modules/swiftest_classes.f90 b/src/modules/swiftest_classes.f90 index 417138122..eff9f4077 100644 --- a/src/modules/swiftest_classes.f90 +++ b/src/modules/swiftest_classes.f90 @@ -5,23 +5,7 @@ module swiftest_classes !! Adapted from David E. Kaufmann's Swifter routine: module_swifter.f90 use swiftest_globals implicit none - private - public :: discard_pl, discard_system, discard_tp - public :: drift_all, drift_body, drift_one - public :: eucl_dist_index_plpl - public :: gr_kick_getaccb_ns_body, gr_p4_pos_kick, gr_pseudovel2vel, gr_vel2pseudovel - public :: io_dump_param, io_dump_swiftest, io_dump_system, io_get_args, io_get_token, io_param_reader, io_param_writer, io_read_body_in, & - io_read_cb_in, io_read_param_in, io_read_frame_body, io_read_frame_cb, io_read_frame_system, & - io_toupper, io_write_discard, io_write_encounter, io_write_frame_body, io_write_frame_cb, io_write_frame_system - public :: kick_getacch_int_pl - 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_initialize_system, setup_pl, setup_tp - public :: tides_kick_getacch_pl, tides_step_spin_system - public :: user_kick_getacch_body - public :: util_coord_b2h_pl, util_coord_b2h_tp, util_coord_h2b_pl, util_coord_h2b_tp, util_exit, util_fill_body, util_fill_pl, util_fill_tp, & - util_index, util_peri_tp, util_reverse_status, util_set_beg_end_pl, util_set_ir3h, util_set_msys, util_set_mu_pl, & - util_set_mu_tp, util_set_rhill, util_set_rhill_approximate, util_sort, util_spill_body, util_spill_pl, util_spill_tp, util_valid, util_version + public !******************************************************************************************************************************** ! swiftest_parameters class definitions @@ -29,7 +13,7 @@ module swiftest_classes !> User defined parameters that are read in from the parameters input file. !> Each paramter is initialized to a default values. - type, public :: swiftest_parameters + type :: swiftest_parameters integer(I4B) :: integrator = UNKNOWN_INTEGRATOR !! Symbolic name of the nbody integrator used integer(I4B) :: nplmax = -1 !! Maximum allowed number of massive bodies integer(I4B) :: ntpmax = -1 !! Maximum allowed number of test particles @@ -76,33 +60,31 @@ module swiftest_classes logical :: lyarkovsky = .false. !! Turn on Yarkovsky effect logical :: lyorp = .false. !! Turn on YORP effect contains - private - procedure, public :: reader => io_param_reader - procedure, public :: writer => io_param_writer - procedure, public :: dump => io_dump_param - procedure, public :: read_from_file => io_read_param_in + procedure :: reader => io_param_reader + procedure :: writer => io_param_writer + procedure :: dump => io_dump_param + procedure :: read_from_file => io_read_param_in end type swiftest_parameters !******************************************************************************************************************************** ! swiftest_base class definitions and methods !******************************************************************************************************************************** - type, abstract, public :: swiftest_base + type, abstract :: swiftest_base !! An superclass for a generic Swiftest object logical :: lintegrate = .false. !! Flag indicating that this object should be integrated in the current step contains !! The minimal methods that all systems must have - private procedure :: dump => io_dump_swiftest - procedure(abstract_initialize), public, deferred :: initialize - procedure(abstract_read_frame), public, deferred :: read_frame - procedure(abstract_write_frame), public, deferred :: write_frame + procedure(abstract_initialize), deferred :: initialize + procedure(abstract_read_frame), deferred :: read_frame + procedure(abstract_write_frame), deferred :: write_frame end type swiftest_base !******************************************************************************************************************************** ! swiftest_cb class definitions and methods !******************************************************************************************************************************** !> A concrete lass for the central body in a Swiftest simulation - type, abstract, public, extends(swiftest_base) :: swiftest_cb + type, abstract, extends(swiftest_base) :: swiftest_cb character(len=STRMAX) :: name !! Non-unique name integer(I4B) :: id = 0 !! External identifier (unique) real(DP) :: mass = 0.0_DP !! Central body mass (units MU) @@ -128,17 +110,16 @@ module swiftest_classes real(DP), dimension(NDIM) :: L0 = 0.0_DP !! Initial angular momentum of the central body real(DP), dimension(NDIM) :: dL = 0.0_DP !! Change in angular momentum of the central body 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 :: initialize => io_read_cb_in !! I/O routine for reading in central body data + procedure :: read_frame => io_read_frame_cb !! I/O routine for reading out a single frame of time-series data for the central body + procedure :: write_frame => io_write_frame_cb !! I/O routine for writing out a single frame of time-series data for the central body end type swiftest_cb !******************************************************************************************************************************** ! swiftest_body definitions and methods !******************************************************************************************************************************** !> An abstract class for a generic collection of Swiftest bodies - type, abstract, public, extends(swiftest_base) :: swiftest_body + type, abstract, 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 @@ -165,35 +146,36 @@ module swiftest_classes !! 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_body and util_spill contains - private - procedure(abstract_discard_body), public, deferred :: discard - procedure(abstract_kick_body), public, deferred :: kick - procedure(abstract_set_mu), public, deferred :: set_mu - procedure(abstract_step_body), public, deferred :: step - procedure(abstract_accel), public, deferred :: accel + procedure(abstract_discard_body), deferred :: discard + procedure(abstract_kick_body), deferred :: kick + procedure(abstract_set_mu), deferred :: set_mu + procedure(abstract_step_body), deferred :: step + procedure(abstract_accel), deferred :: accel ! These are concrete because the implementation is the same for all types of particles - procedure, public :: drift => drift_body !! Loop through bodies and call Danby drift routine on heliocentric variables - procedure, public :: v2pv => gr_vh2pv_body !! Converts from velocity to psudeovelocity for GR calculations using symplectic integrators - procedure, public :: pv2v => gr_pv2vh_body !! Converts from psudeovelocity to velocity for GR calculations using symplectic integrators - 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 :: 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 => 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 :: accel_user => user_kick_getacch_body !! Add user-supplied heliocentric accelerations to planets - 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) - procedure, public :: reverse_status => util_reverse_status !! Reverses the active/inactive status of all particles in a structure + procedure :: drift => drift_body !! Loop through bodies and call Danby drift routine on heliocentric variables + procedure :: v2pv => gr_vh2pv_body !! Converts from velocity to psudeovelocity for GR calculations using symplectic integrators + procedure :: pv2v => gr_pv2vh_body !! Converts from psudeovelocity to velocity for GR calculations using symplectic integrators + procedure :: initialize => io_read_body_in !! Read in body initial conditions from a file + procedure :: read_frame => io_read_frame_body !! I/O routine for writing out a single frame of time-series data for the central body + procedure :: write_frame => io_write_frame_body !! I/O routine for writing out a single frame of time-series data for the central body + procedure :: accel_obl => obl_acc_body !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure :: el2xv => orbel_el2xv_vec !! Convert orbital elements to position and velocity vectors + procedure :: xv2el => orbel_xv2el_vec !! Convert position and velocity vectors to orbital elements + procedure :: setup => setup_body !! A constructor that sets the number of bodies and allocates all allocatable arrays + procedure :: accel_user => user_kick_getacch_body !! Add user-supplied heliocentric accelerations to planets + procedure :: fill => util_fill_body !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: reverse_status => util_reverse_status !! Reverses the active/inactive status of all particles in a structure + procedure :: set_ir3 => util_set_ir3h !! Sets the inverse heliocentric radius term (1/rh**3) + procedure :: sort => util_sort_body !! Sorts body arrays by a sortable componen + procedure :: rearrange => util_sort_rearrange_body !! Rearranges the order of array elements of body based on an input index array. Used in sorting methods + procedure :: spill => util_spill_body !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type swiftest_body !******************************************************************************************************************************** ! swiftest_pl definitions and methods !******************************************************************************************************************************** !> An abstract class for a generic collection of Swiftest massive bodies - type, abstract, public, extends(swiftest_body) :: swiftest_pl + type, abstract, extends(swiftest_body) :: swiftest_pl !! Superclass that defines the generic elements of a Swiftest particle real(DP), dimension(:), allocatable :: mass !! Body mass (units MU) real(DP), dimension(:), allocatable :: Gmass !! Mass gravitational term G * mass (units GU * MU) @@ -213,29 +195,30 @@ module swiftest_classes !! 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 :: accel_int => kick_getacch_int_pl !! Compute direct cross (third) term heliocentric accelerations of massive bodies - 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 :: accel_tides => tides_kick_getacch_pl !! Compute the accelerations of bodies due to tidal interactions with the central body - 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 :: 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) + procedure :: discard => discard_pl !! Placeholder method for discarding massive bodies + procedure :: eucl_index => eucl_dist_index_plpl !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix + procedure :: accel_int => kick_getacch_int_pl !! Compute direct cross (third) term heliocentric accelerations of massive bodies + procedure :: accel_obl => obl_acc_pl !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure :: setup => setup_pl !! A base constructor that sets the number of bodies and allocates and initializes all arrays + procedure :: accel_tides => tides_kick_getacch_pl !! Compute the accelerations of bodies due to tidal interactions with the central body + procedure :: h2b => util_coord_h2b_pl !! Convert massive bodies from heliocentric to barycentric coordinates (position and velocity) + procedure :: b2h => util_coord_b2h_pl !! Convert massive bodies from barycentric to heliocentric coordinates (position and velocity) + procedure :: fill => util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: set_beg_end => util_set_beg_end_pl !! Sets the beginning and ending positions and velocities of planets. + procedure :: set_mu => util_set_mu_pl !! Method used to construct the vectorized form of the central body mass + procedure :: set_rhill => util_set_rhill !! Calculates the Hill's radii for each body + procedure :: sort => util_sort_pl !! Sorts body arrays by a sortable component + procedure :: rearrange => util_sort_rearrange_pl !! Rearranges the order of array elements of body based on an input index array. Used in sorting methods + procedure :: 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 !******************************************************************************************************************************** ! swiftest_tp definitions and methods !******************************************************************************************************************************** !> An abstract class for a generic collection of Swiftest test particles - type, abstract, public, extends(swiftest_body) :: swiftest_tp + type, abstract, extends(swiftest_body) :: swiftest_tp !! Superclass that defines the generic elements of a Swiftest test particle integer(I4B), dimension(:), allocatable :: isperi !! Perihelion passage flag real(DP), dimension(:), allocatable :: peri !! Perihelion distance @@ -243,26 +226,27 @@ module swiftest_classes !! 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_tp and util_spill_tp contains - 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 :: accel_int => kick_getacch_int_tp !! Compute direct cross (third) term heliocentric accelerations of test particles by massive bodies - 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 :: fill => util_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: get_peri => util_peri_tp !! Determine system pericenter passages for test particles - procedure, public :: spill => util_spill_tp !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure :: discard => discard_tp !! Check to see if test particles should be discarded based on their positions relative to the massive bodies + procedure :: accel_int => kick_getacch_int_tp !! Compute direct cross (third) term heliocentric accelerations of test particles by massive bodies + procedure :: accel_obl => obl_acc_tp !! Compute the barycentric accelerations of bodies due to the oblateness of the central body + procedure :: setup => setup_tp !! A base constructor that sets the number of bodies and + procedure :: h2b => util_coord_h2b_tp !! Convert test particles from heliocentric to barycentric coordinates (position and velocity) + procedure :: b2h => util_coord_b2h_tp !! Convert test particles from barycentric to heliocentric coordinates (position and velocity) + procedure :: fill => util_fill_tp !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: get_peri => util_peri_tp !! Determine system pericenter passages for test particles + procedure :: set_mu => util_set_mu_tp !! Method used to construct the vectorized form of the central body mass + procedure :: sort => util_sort_tp !! Sorts body arrays by a sortable component + procedure :: rearrange => util_sort_rearrange_tp !! Rearranges the order of array elements of body based on an input index array. Used in sorting methods + procedure :: 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 !******************************************************************************************************************************** ! swiftest_nbody_system class definitions and methods !******************************************************************************************************************************** !> An abstract class for a basic Swiftest nbody system - type, abstract, public, extends(swiftest_base) :: swiftest_nbody_system + type, abstract, 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 @@ -281,19 +265,18 @@ module swiftest_classes !! 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 - procedure(abstract_step_system), public, deferred :: step + procedure(abstract_step_system), deferred :: step ! Concrete classes that are common to the basic integrator (only test particles considered for discard) - procedure, public :: discard => discard_system !! Perform a discard step on the system - procedure, public :: dump => io_dump_system !! Dump the state of the system to a file - procedure, public :: initialize => setup_initialize_system !! Initialize the system from input files - procedure, public :: read_frame => io_read_frame_system !! Append a frame of output data to file - 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 :: step_spin => tides_step_spin_system !! Steps the spins of the massive & central bodies due to tides. - procedure, public :: set_msys => util_set_msys !! Sets the value of msys from the masses of system bodies. + procedure :: discard => discard_system !! Perform a discard step on the system + procedure :: dump => io_dump_system !! Dump the state of the system to a file + procedure :: read_frame => io_read_frame_system !! Append a frame of output data to file + procedure :: write_discard => io_write_discard !! Append a frame of output data to file + procedure :: write_frame => io_write_frame_system !! Append a frame of output data to file + procedure :: initialize => setup_initialize_system !! Initialize the system from input files + procedure :: step_spin => tides_step_spin_system !! Steps the spins of the massive & central bodies due to tides. + procedure :: set_msys => util_set_msys !! Sets the value of msys from the masses of system bodies. end type swiftest_nbody_system abstract interface @@ -661,16 +644,23 @@ end subroutine orbel_scget module pure subroutine orbel_xv2aeq(mu, x, v, a, e, q) implicit none - real(DP), intent(in) :: mu - real(DP), dimension(:), intent(in) :: x, v - real(DP), intent(out) :: a, e, q + real(DP), intent(in) :: mu !! Gravitational constant + real(DP), dimension(:), intent(in) :: x !! Position vector + real(DP), dimension(:), intent(in) :: v !! Velocity vector + real(DP), intent(out) :: a !! semimajor axis + real(DP), intent(out) :: e !! eccentricity + real(DP), intent(out) :: q !! periapsis end subroutine orbel_xv2aeq module pure subroutine orbel_xv2aqt(mu, x, v, a, q, capm, tperi) implicit none - real(DP), intent(in) :: mu - real(DP), dimension(:), intent(in) :: x, v - real(DP), intent(out) :: a, q, capm, tperi + real(DP), intent(in) :: mu !! Gravitational constant + real(DP), dimension(:), intent(in) :: x !! Position vector + real(DP), dimension(:), intent(in) :: v !! Velocity vector + real(DP), intent(out) :: a !! semimajor axis + real(DP), intent(out) :: q !! periapsis + real(DP), intent(out) :: capm !! mean anomaly + real(DP), intent(out) :: tperi !! time of pericenter passage end subroutine orbel_xv2aqt module subroutine orbel_xv2el_vec(self, cb) @@ -782,12 +772,6 @@ module subroutine util_fill_tp(self, inserts, lfill_list) logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_tp - module subroutine util_index(arr, index) - implicit none - integer(I4B), dimension(:), intent(out) :: index - real(DP), dimension(:), intent(in) :: arr - end subroutine util_index - module subroutine util_peri_tp(self, system, param) implicit none class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object @@ -849,23 +833,80 @@ module subroutine util_sort_i4b(arr) integer(I4B), dimension(:), intent(inout) :: arr end subroutine util_sort_i4b + module subroutine util_sort_index_i4b(arr,ind) + implicit none + integer(I4B), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + end subroutine util_sort_index_i4b + module subroutine util_sort_sp(arr) implicit none real(SP), dimension(:), intent(inout) :: arr end subroutine util_sort_sp + module subroutine util_sort_index_sp(arr,ind) + implicit none + real(SP), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + end subroutine util_sort_index_sp + module subroutine util_sort_dp(arr) implicit none real(DP), dimension(:), intent(inout) :: arr end subroutine util_sort_dp - end interface + + module subroutine util_sort_index_dp(arr,ind) + implicit none + real(DP), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + end subroutine util_sort_index_dp + end interface util_sort interface + module subroutine util_sort_rearrange_body(self, ind) + implicit none + class(swiftest_body), intent(inout) :: self !! Swiftest body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + end subroutine util_sort_rearrange_body + + module subroutine util_sort_rearrange_pl(self, ind) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + end subroutine util_sort_rearrange_pl + + module subroutine util_sort_rearrange_tp(self, ind) + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + end subroutine util_sort_rearrange_tp + + module subroutine util_sort_body(self, sortby, ascending) + implicit none + class(swiftest_body), intent(inout) :: self !! Swiftest body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + end subroutine util_sort_body + + module subroutine util_sort_pl(self, sortby, ascending) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + end subroutine util_sort_pl + + module subroutine util_sort_tp(self, sortby, ascending) + implicit none + class(swiftest_tp), intent(inout) :: self !! Swiftest body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + end subroutine util_sort_tp + module subroutine util_spill_body(self, discards, lspill_list) implicit none - 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 + 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) diff --git a/src/modules/swiftest_globals.f90 b/src/modules/swiftest_globals.f90 index a1f0d7511..5ec55f6c6 100644 --- a/src/modules/swiftest_globals.f90 +++ b/src/modules/swiftest_globals.f90 @@ -86,6 +86,7 @@ module swiftest_globals integer(I4B), parameter :: SUPERCATASTROPHIC = -10 integer(I4B), parameter :: GRAZE_AND_MERGE = -11 integer(I4B), parameter :: HIT_AND_RUN = -12 + integer(I4B), parameter :: COLLISION = -13 !>Symbolic names for collisional outcomes from collresolve_resolve: integer(I4B), parameter :: COLLRESOLVE_REGIME_MERGE = 1 diff --git a/src/modules/symba_classes.f90 b/src/modules/symba_classes.f90 index 72fb06ae7..fc3520079 100644 --- a/src/modules/symba_classes.f90 +++ b/src/modules/symba_classes.f90 @@ -8,6 +8,7 @@ module symba_classes use helio_classes, only : helio_cb, helio_pl, helio_tp, helio_nbody_system use rmvs_classes, only : rmvs_chk_ind implicit none + public integer(I4B), private, parameter :: NENMAX = 32767 integer(I4B), private, parameter :: NTENC = 3 @@ -16,28 +17,26 @@ module symba_classes character(*), parameter :: PARTICLE_OUTFILE = 'particle.dat' integer(I4B), parameter :: PARTICLEUNIT = 44 !! File unit number for the binary particle info output file - type, public, extends(swiftest_parameters) :: symba_parameters + type, extends(swiftest_parameters) :: symba_parameters character(STRMAX) :: particle_file = PARTICLE_OUTFILE !! Name of output particle information file real(DP) :: MTINY = -1.0_DP !! Smallest mass that is fully gravitating integer(I4B), dimension(:), allocatable :: seed !! Random seeds logical :: lfragmentation = .false. !! Do fragmentation modeling instead of simple merger. contains - private - procedure, public :: reader => symba_io_param_reader - procedure, public :: writer => symba_io_param_writer + procedure :: reader => symba_io_param_reader + procedure :: writer => symba_io_param_writer end type symba_parameters !******************************************************************************************************************************** ! symba_cb class definitions and method interfaces !******************************************************************************************************************************* !> SyMBA central body particle class - type, public, extends(helio_cb) :: symba_cb + type, extends(helio_cb) :: symba_cb real(DP) :: M0 = 0.0_DP !! Initial mass of the central body real(DP) :: dM = 0.0_DP !! Change in mass of the central body real(DP) :: R0 = 0.0_DP !! Initial radius of the central body real(DP) :: dR = 0.0_DP !! Change in the radius of the central body contains - private end type symba_cb !******************************************************************************************************************************** @@ -45,17 +44,16 @@ module symba_classes !******************************************************************************************************************************* !> Class definition for the particle origin information object. This object is used to track time, location, and collisional regime !> of fragments produced in collisional events. - type, public, extends(swiftest_base) :: symba_particle_info + type, extends(swiftest_base) :: symba_particle_info character(len=32) :: origin_type !! String containing a description of the origin of the particle (e.g. Initial Conditions, Supercatastrophic, Disruption, etc.) real(DP) :: origin_time !! The time of the particle's formation real(DP), dimension(NDIM) :: origin_xh !! The heliocentric distance vector at the time of the particle's formation real(DP), dimension(NDIM) :: origin_vh !! The heliocentric velocity vector at the time of the particle's formation contains - private - procedure, public :: dump => symba_io_dump_particle_info !! I/O routine for dumping particle info to file - procedure, public :: initialize => symba_io_initialize_particle_info !! I/O routine for reading in particle info data - procedure, public :: read_frame => symba_io_read_frame_info !! I/O routine for reading in a single frame of particle info - procedure, public :: write_frame => symba_io_write_frame_info !! I/O routine for writing out a single frame of particle info + procedure :: dump => symba_io_dump_particle_info !! I/O routine for dumping particle info to file + procedure :: initialize => symba_io_initialize_particle_info !! I/O routine for reading in particle info data + procedure :: read_frame => symba_io_read_frame_info !! I/O routine for reading in a single frame of particle info + procedure :: write_frame => symba_io_write_frame_info !! I/O routine for writing out a single frame of particle info end type symba_particle_info !******************************************************************************************************************************** @@ -72,7 +70,7 @@ module symba_classes ! symba_pl class definitions and method interfaces !******************************************************************************************************************************* !> SyMBA massive body class - type, public, extends(helio_pl) :: symba_pl + type, extends(helio_pl) :: symba_pl logical, dimension(:), allocatable :: lcollision !! flag indicating whether body has merged with another this time step logical, dimension(:), allocatable :: lencounter !! flag indicating whether body is part of an encounter this time step logical, dimension(:), allocatable :: lmtiny !! flag indicating whether this body is below the MTINY cutoff value @@ -88,34 +86,35 @@ module symba_classes type(symba_kinship), dimension(:), allocatable :: kin !! Array of merger relationship structures that can account for multiple pairwise mergers in a single step type(symba_particle_info), dimension(:), allocatable :: info contains - private - procedure, public :: discard => symba_discard_pl !! Process massive body discards - procedure, public :: encounter_check => symba_encounter_check_pl !! Checks if massive bodies are going through close encounters with each other - procedure, public :: accel => symba_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies - procedure, public :: setup => symba_setup_pl !! Constructor method - Allocates space for number of particle + procedure :: discard => symba_discard_pl !! Process massive body discards + procedure :: encounter_check => symba_encounter_check_pl !! Checks if massive bodies are going through close encounters with each other + procedure :: accel => symba_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies + procedure :: setup => symba_setup_pl !! Constructor method - Allocates space for number of particle + procedure :: sort => symba_util_sort_pl !! Sorts body arrays by a sortable componen + procedure :: rearrange => symba_util_sort_rearrange_pl !! Rearranges the order of array elements of body based on an input index array. Used in sorting methods end type symba_pl !******************************************************************************************************************************** ! symba_tp class definitions and method interfaces !******************************************************************************************************************************* !> SyMBA test particle class - type, public, extends(helio_tp) :: symba_tp + type, extends(helio_tp) :: symba_tp integer(I4B), dimension(:), allocatable :: nplenc !! number of encounters with planets this time step integer(I4B), dimension(:), allocatable :: levelg !! level at which this particle should be moved integer(I4B), dimension(:), allocatable :: levelm !! deepest encounter level achieved this time step contains - private - procedure, public :: discard => symba_discard_tp !! process test particle discards - procedure, public :: encounter_check => symba_encounter_check_tp !! Checks if any test particles are undergoing a close encounter with a massive body - procedure, public :: accel => symba_kick_getacch_tp !! Compute heliocentric accelerations of test particles - procedure, public :: setup => symba_setup_tp !! Constructor method - Allocates space for number of particle + procedure :: encounter_check => symba_encounter_check_tp !! Checks if any test particles are undergoing a close encounter with a massive body + procedure :: accel => symba_kick_getacch_tp !! Compute heliocentric accelerations of test particles + procedure :: setup => symba_setup_tp !! Constructor method - Allocates space for number of particle + procedure :: sort => symba_util_sort_tp !! Sorts body arrays by a sortable componen + procedure :: rearrange => symba_util_sort_rearrange_tp !! Rearranges the order of array elements of body based on an input index array. Used in sorting methods end type symba_tp !******************************************************************************************************************************** ! symba_pltpenc class definitions and method interfaces !******************************************************************************************************************************* !> SyMBA class for tracking pl-tp close encounters in a step - type, public :: symba_pltpenc + type :: symba_pltpenc integer(I4B) :: nenc !! Total number of encounters logical, dimension(:), allocatable :: lvdotr !! relative vdotr flag integer(I4B), dimension(:), allocatable :: status !! status of the interaction @@ -123,46 +122,67 @@ module symba_classes integer(I4B), dimension(:), allocatable :: index1 !! position of the planet in encounter integer(I4B), dimension(:), allocatable :: index2 !! position of the test particle in encounter contains - procedure, public :: encounter_check => symba_encounter_check_pltpenc !! Checks if massive bodies are going through close encounters with each other - procedure, public :: kick => symba_kick_pltpenc !! Kick barycentric velocities of active test particles within SyMBA recursion - procedure, public :: setup => symba_setup_pltpenc !! A constructor that sets the number of encounters and allocates and initializes all arrays - procedure, public :: copy => symba_util_copy_pltpenc !! Copies all elements of one pltpenc list to another - procedure, public :: resize => symba_util_resize_pltpenc !! Checks the current size of the pltpenc_list against the required size and extends it by a factor of 2 more than requested if it is too small + procedure :: collision_check => symba_collision_check_pltpenc !! Checks if a test particle is going to collide with a massive body + procedure :: encounter_check => symba_encounter_check_pltpenc !! Checks if massive bodies are going through close encounters with each other + procedure :: kick => symba_kick_pltpenc !! Kick barycentric velocities of active test particles within SyMBA recursion + procedure :: setup => symba_setup_pltpenc !! A constructor that sets the number of encounters and allocates and initializes all arrays + procedure :: copy => symba_util_copy_pltpenc !! Copies all elements of one pltpenc list to another + procedure :: resize => symba_util_resize_pltpenc !! Checks the current size of the pltpenc_list against the required size and extends it by a factor of 2 more than requested if it is too small end type symba_pltpenc !******************************************************************************************************************************** ! symba_plplenc class definitions and method interfaces !******************************************************************************************************************************* !> SyMBA class for tracking pl-pl close encounters in a step - type, public, extends(symba_pltpenc) :: symba_plplenc - real(DP), dimension(:,:), allocatable :: xh1 !! the heliocentric position of parent 1 in encounter - real(DP), dimension(:,:), allocatable :: xh2 !! the heliocentric position of parent 2 in encounter - real(DP), dimension(:,:), allocatable :: vb1 !! the barycentric velocity of parent 1 in encounter - real(DP), dimension(:,:), allocatable :: vb2 !! the barycentric velocity of parent 2 in encounter + type, extends(symba_pltpenc) :: symba_plplenc + real(DP), dimension(:,:), allocatable :: xh1 !! the heliocentric position of parent 1 in encounter + real(DP), dimension(:,:), allocatable :: xh2 !! the heliocentric position of parent 2 in encounter + real(DP), dimension(:,:), allocatable :: vb1 !! the barycentric velocity of parent 1 in encounter + real(DP), dimension(:,:), allocatable :: vb2 !! the barycentric velocity of parent 2 in encounter contains - procedure, public :: setup => symba_setup_plplenc !! A constructor that sets the number of encounters and allocates and initializes all arrays - procedure, public :: copy => symba_util_copy_plplenc !! Copies all elements of one plplenc list to another + procedure :: collision_check => symba_collision_check_plplenc !! Checks if two massive bodies are going to collide + procedure :: setup => symba_setup_plplenc !! A constructor that sets the number of encounters and allocates and initializes all arrays + procedure :: copy => symba_util_copy_plplenc !! Copies all elements of one plplenc list to another end type symba_plplenc !******************************************************************************************************************************** ! symba_nbody_system class definitions and method interfaces !******************************************************************************************************************************** - type, public, extends(helio_nbody_system) :: symba_nbody_system + type, extends(helio_nbody_system) :: symba_nbody_system class(symba_pl), allocatable :: mergeadd_list !! List of added bodies in mergers or collisions class(symba_pl), allocatable :: mergesub_list !! List of subtracted bodies in mergers or collisions class(symba_pltpenc), allocatable :: pltpenc_list !! List of massive body-test particle encounters in a single step class(symba_plplenc), allocatable :: plplenc_list !! List of massive body-massive body encounters in a single step class(symba_pl), allocatable :: pl_discards !! Discarded test particle data structure contains - private - procedure, public :: initialize => symba_setup_system !! Performs SyMBA-specific initilization steps - procedure, public :: step => symba_step_system !! Advance the SyMBA nbody system forward in time by one step - procedure, public :: interp => symba_step_interp_system !! Perform an interpolation step on the SymBA nbody system - procedure, public :: recursive_step => symba_step_recur_system !! Step interacting planets and active test particles ahead in democratic heliocentric coordinates at the current recursion level, if applicable, and descend to the next deeper level if necessary - procedure, public :: reset => symba_step_reset_system !! Resets pl, tp,and encounter structures at the start of a new step + procedure :: initialize => symba_setup_initialize_system !! Performs SyMBA-specific initilization steps + procedure :: step => symba_step_system !! Advance the SyMBA nbody system forward in time by one step + procedure :: interp => symba_step_interp_system !! Perform an interpolation step on the SymBA nbody system + procedure :: recursive_step => symba_step_recur_system !! Step interacting planets and active test particles ahead in democratic heliocentric coordinates at the current recursion level, if applicable, and descend to the next deeper level if necessary + procedure :: reset => symba_step_reset_system !! Resets pl, tp,and encounter structures at the start of a new step end type symba_nbody_system interface + module subroutine symba_collision_check_pltpenc(self, system, param, t, dt, irec) + implicit none + class(symba_pltpenc), intent(inout) :: self !! SyMBA pl-tp encounter list object + class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + real(DP), intent(in) :: t !! current time + real(DP), intent(in) :: dt !! step size + integer(I4B), intent(in) :: irec !! Current recursion level + end subroutine symba_collision_check_pltpenc + + module subroutine symba_collision_check_plplenc(self, system, param, t, dt, irec) + implicit none + class(symba_plplenc), intent(inout) :: self !! SyMBA pl-tp encounter list object + class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + real(DP), intent(in) :: t !! current time + real(DP), intent(in) :: dt !! step size + integer(I4B), intent(in) :: irec !! Current recursion level + end subroutine symba_collision_check_plplenc + module subroutine symba_discard_pl(self, system, param) use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters implicit none @@ -171,14 +191,6 @@ module subroutine symba_discard_pl(self, system, param) class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters end subroutine symba_discard_pl - module subroutine symba_discard_tp(self, system, param) - use swiftest_classes, only : swiftest_nbody_system, swiftest_parameters - implicit none - class(symba_tp), intent(inout) :: self !! SyMBA test particle object - class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object - class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters - end subroutine symba_discard_tp - module pure elemental subroutine symba_encounter_check_one(xr, yr, zr, vxr, vyr, vzr, rhill1, rhill2, dt, irec, lencounter, lvdotr) implicit none real(DP), intent(in) :: xr, yr, zr, vxr, vyr, vzr @@ -314,12 +326,12 @@ module subroutine symba_setup_plplenc(self,n) integer, intent(in) :: n !! Number of encounters to allocate space for end subroutine symba_setup_plplenc - module subroutine symba_setup_system(self, param) + module subroutine symba_setup_initialize_system(self, param) use swiftest_classes, only : swiftest_parameters implicit none class(symba_nbody_system), intent(inout) :: self !! SyMBA system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - end subroutine symba_setup_system + end subroutine symba_setup_initialize_system module subroutine symba_setup_tp(self,n) implicit none @@ -345,11 +357,12 @@ module subroutine symba_step_interp_system(self, param, t, dt) real(DP), intent(in) :: dt !! Current stepsize end subroutine symba_step_interp_system - module recursive subroutine symba_step_recur_system(self, param, ireci) + module recursive subroutine symba_step_recur_system(self, param, t, ireci) implicit none class(symba_nbody_system), intent(inout) :: self !! SyMBA nbody system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - integer(I4B), value, intent(in) :: ireci !! input recursion level + real(DP), value :: t + integer(I4B), value :: ireci !! input recursion level end subroutine symba_step_recur_system module subroutine symba_step_reset_system(self) @@ -375,5 +388,32 @@ module subroutine symba_util_resize_pltpenc(self, nrequested) integer(I4B), intent(in) :: nrequested !! New size of list needed end subroutine symba_util_resize_pltpenc + module subroutine symba_util_sort_pl(self, sortby, ascending) + implicit none + class(symba_pl), intent(inout) :: self !! Symba massive body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + end subroutine symba_util_sort_pl + + module subroutine symba_util_sort_tp(self, sortby, ascending) + implicit none + class(symba_tp), intent(inout) :: self !! Swiftest test particle object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + end subroutine symba_util_sort_tp + + module subroutine symba_util_sort_rearrange_pl(self, ind) + implicit none + class(symba_pl), intent(inout) :: self !! Symba massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + end subroutine symba_util_sort_rearrange_pl + + module subroutine symba_util_sort_rearrange_tp(self, ind) + implicit none + class(symba_tp), intent(inout) :: self !! Symba massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + end subroutine symba_util_sort_rearrange_tp + + end interface end module symba_classes \ No newline at end of file diff --git a/src/modules/whm_classes.f90 b/src/modules/whm_classes.f90 index 46a4e3743..a6ab59958 100644 --- a/src/modules/whm_classes.f90 +++ b/src/modules/whm_classes.f90 @@ -12,7 +12,7 @@ module whm_classes ! whm_cb class definitions and method interfaces !******************************************************************************************************************************* !> Swiftest central body particle class - type, public, extends(swiftest_cb) :: whm_cb + type, extends(swiftest_cb) :: whm_cb contains end type whm_cb @@ -21,7 +21,7 @@ module whm_classes !******************************************************************************************************************************* !> WHM massive body particle class - type, public, extends(swiftest_pl) :: whm_pl + type, extends(swiftest_pl) :: whm_pl real(DP), dimension(:), allocatable :: eta !! Jacobi mass real(DP), dimension(:,:), allocatable :: xj !! Jacobi position real(DP), dimension(:,:), allocatable :: vj !! Jacobi velocity @@ -30,20 +30,20 @@ module whm_classes !! 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_util_spill_pl 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 to jacobi coordinates - procedure, public :: fill => whm_util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: accel => whm_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies - procedure, public :: kick => whm_kick_vh_pl !! Kick heliocentric velocities of massive bodies - procedure, public :: accel_gr => whm_gr_kick_getacch_pl !! Acceleration term arising from the post-Newtonian correction - procedure, public :: gr_pos_kick => whm_gr_p4_pl !! Position kick due to p**4 term in the post-Newtonian correction - 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_util_spill_pl !!"Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure :: h2j => whm_coord_h2j_pl !! Convert position and velcoity vectors from heliocentric to Jacobi coordinates + procedure :: j2h => whm_coord_j2h_pl !! Convert position and velcoity vectors from Jacobi to helliocentric coordinates + procedure :: vh2vj => whm_coord_vh2vj_pl !! Convert velocity vectors from heliocentric to Jacobi coordinates + procedure :: drift => whm_drift_pl !! Loop through massive bodies and call Danby drift routine to jacobi coordinates + procedure :: fill => whm_util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure :: accel => whm_kick_getacch_pl !! Compute heliocentric accelerations of massive bodies + procedure :: kick => whm_kick_vh_pl !! Kick heliocentric velocities of massive bodies + procedure :: accel_gr => whm_gr_kick_getacch_pl !! Acceleration term arising from the post-Newtonian correction + procedure :: gr_pos_kick => whm_gr_p4_pl !! Position kick due to p**4 term in the post-Newtonian correction + procedure :: setup => whm_setup_pl !! Constructor method - Allocates space for number of particles + procedure :: set_mu => whm_util_set_mu_eta_pl !! Sets the Jacobi mass value for all massive bodies. + procedure :: set_ir3 => whm_util_set_ir3j !! Sets both the heliocentric and jacobi inverse radius terms (1/rj**3 and 1/rh**3) + procedure :: step => whm_step_pl !! Steps the body forward one stepsize + procedure :: spill => whm_util_spill_pl !!"Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type whm_pl !******************************************************************************************************************************** @@ -51,29 +51,27 @@ module whm_classes !******************************************************************************************************************************* !! WHM test particle class - type, public, extends(swiftest_tp) :: whm_tp + type, 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_util_spill_tp contains - private - procedure, public :: accel => whm_kick_getacch_tp !! Compute heliocentric accelerations of test particles - procedure, public :: kick => whm_kick_vh_tp !! Kick heliocentric velocities of test particles - procedure, public :: accel_gr => whm_gr_kick_getacch_tp !! Acceleration term arising from the post-Newtonian correction - procedure, public :: gr_pos_kick => whm_gr_p4_tp !! Position kick due to p**4 term in the post-Newtonian correction - 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 :: accel => whm_kick_getacch_tp !! Compute heliocentric accelerations of test particles + procedure :: kick => whm_kick_vh_tp !! Kick heliocentric velocities of test particles + procedure :: accel_gr => whm_gr_kick_getacch_tp !! Acceleration term arising from the post-Newtonian correction + procedure :: gr_pos_kick => whm_gr_p4_tp !! Position kick due to p**4 term in the post-Newtonian correction + procedure :: setup => whm_setup_tp !! Allocates new components of the whm class and recursively calls parent allocations + procedure :: step => whm_step_tp !! Steps the particle forward one stepsize end type whm_tp !******************************************************************************************************************************** ! whm_nbody_system class definitions and method interfaces !******************************************************************************************************************************** !> An abstract class for the WHM integrator nbody system - type, public, extends(swiftest_nbody_system) :: whm_nbody_system + type, extends(swiftest_nbody_system) :: whm_nbody_system 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 !! Advance the WHM nbody system forward in time by one step + procedure :: initialize => whm_setup_initialize_system !! Performs WHM-specific initilization steps, like calculating the Jacobi masses + procedure :: step => whm_step_system !! Advance the WHM nbody system forward in time by one step end type whm_nbody_system interface @@ -199,10 +197,10 @@ 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_ir3j(self) + module subroutine whm_util_set_ir3j(self) implicit none class(whm_pl), intent(inout) :: self !! WHM massive body object - end subroutine whm_setup_set_ir3j + end subroutine whm_util_set_ir3j module subroutine whm_util_set_mu_eta_pl(self, cb) use swiftest_classes, only : swiftest_cb @@ -211,12 +209,12 @@ module subroutine whm_util_set_mu_eta_pl(self, cb) class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine whm_util_set_mu_eta_pl - module subroutine whm_setup_system(self, param) + module subroutine whm_setup_initialize_system(self, param) use swiftest_classes, only : swiftest_parameters implicit none class(whm_nbody_system), intent(inout) :: self !! WHM nbody system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - end subroutine whm_setup_system + end subroutine whm_setup_initialize_system !> Reads WHM test particle object in from file module subroutine whm_setup_tp(self,n) diff --git a/src/orbel/orbel_el2xv.f90 b/src/orbel/orbel.f90 similarity index 65% rename from src/orbel/orbel_el2xv.f90 rename to src/orbel/orbel.f90 index 3f1a81fe9..850b643f1 100644 --- a/src/orbel/orbel_el2xv.f90 +++ b/src/orbel/orbel.f90 @@ -1,11 +1,15 @@ -submodule (swiftest_classes) s_orbel_el2xv +submodule (swiftest_classes) s_orbel use swiftest contains - module procedure orbel_el2xv_vec + module subroutine orbel_el2xv_vec(self, cb) !! author: David A. Minton !! !! A wrapper method that converts all of the cartesian position and velocity vectors of a Swiftest body object to orbital elements. implicit none + ! Arguments + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body objec + ! Internals integer(I4B) :: i if (self%nbody == 0) return @@ -15,7 +19,7 @@ call orbel_el2xv(self%mu(i), self%a(i), self%e(i), self%inc(i), self%capom(i), & self%omega(i), self%capm(i), self%xh(:, i), self%vh(:, i)) end do - end procedure orbel_el2xv_vec + end subroutine orbel_el2xv_vec pure subroutine orbel_el2xv(mu, a, ie, inc, capom, omega, capm, x, v) !! author: David A. Minton @@ -118,6 +122,33 @@ pure subroutine orbel_el2xv(mu, a, ie, inc, capom, omega, capm, x, v) return end subroutine orbel_el2xv + module pure subroutine orbel_scget(angle, sx, cx) + !! author: David A. Minton + !! + !! Efficiently compute the sine and cosine of an input angle + !! Input angle must be in radians + !! + !! Adapted from David E. Kaufmann's Swifter routine: orbel_scget.f90 + !! Adapted from Hal Levison's Swift routine orbel_scget.f + implicit none + ! Arguments + real(DP), intent(in) :: angle + real(DP), intent(out) :: sx, cx + ! Internals + integer(I4B) :: nper + real(DP) :: x + + nper = angle / TWOPI + x = angle - nper * TWOPI + if (x < 0.0_DP) x = x + TWOPI + sx = sin(x) + cx = sqrt(1.0_DP - sx**2) + if ((x > PIBY2) .and. (x < PI3BY2)) cx = -cx + + return + + end subroutine orbel_scget + !********************************************************************** ! Code converted to Modern Fortran by David A. Minton ! Date: 2020-06-29 @@ -207,8 +238,6 @@ real(DP) pure function orbel_flon(e,icapn) ! set iflag nonzero if capn < 0., in which case solve for -capn ! and change the sign of the final answer for f. ! Begin with a reasonable guess based on solving the cubic for small F - - a = 6 * ( e - 1.d0) / e b = -6 * capn / e sq = SQRT(0.25_DP * b**2 + a**3 / 27._DP) @@ -657,5 +686,311 @@ real(DP) pure function orbel_fhybrid(e,n) return end function orbel_fhybrid + module pure subroutine orbel_xv2aeq(mu, x, v, a, e, q) + !! author: David A. Minton + !! + !! Compute semimajor axis, eccentricity, and pericentric distance from relative Cartesian position and velocity + !! + !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2aeq.f90 + !! Adapted from Luke Dones' Swift routine orbel_xv2aeq.f + implicit none + !! Arguments + real(DP), intent(in) :: mu + real(DP), dimension(:), intent(in) :: x, v + real(DP), intent(out) :: a, e, q + integer(I4B) :: iorbit_type + real(DP) :: r, v2, h2, energy, fac + real(DP), dimension(NDIM) :: hvec + + a = 0.0_DP + e = 0.0_DP + q = 0.0_DP + r = sqrt(dot_product(x(:), x(:))) + v2 = dot_product(v(:), v(:)) + hvec(:) = x(:) .cross. v(:) + h2 = dot_product(hvec(:), hvec(:)) + if (h2 == 0.0_DP) return + energy = 0.5_DP * v2 - mu / r + if (abs(energy * r / mu) < sqrt(VSMALL)) then + iorbit_type = PARABOLA + else + a = -0.5_DP * mu / energy + if (a < 0.0_DP) then + fac = -h2 / (mu * a) + if (fac > VSMALL) then + iorbit_type = HYPERBOLA + else + iorbit_type = PARABOLA + end if + else + iorbit_type = ELLIPSE + end if + end if + select case (iorbit_type) + case (ELLIPSE) + fac = 1.0_DP - h2 / (mu * a) + if (fac > VSMALL) e = sqrt(fac) + q = a * (1.0_DP - e) + case (PARABOLA) + a = 0.5_DP * h2 / mu + e = 1.0_DP + q = a + case (HYPERBOLA) + e = sqrt(1.0_DP + fac) + q = a * (1.0_DP - e) + end select + + return + + end subroutine orbel_xv2aeq + + module pure subroutine orbel_xv2aqt(mu, x, v, a, q, capm, tperi) + !! author: David A. Minton + !! + !! Compute semimajor axis, pericentric distance, mean anomaly, and time to nearest pericenter passage from + !! relative Cartesian position and velocity + !! tperi > 0 means nearest pericenter passage is in the future + !! tperi < 0 means nearest pericenter passage is in the past + !! + !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2aqt.f90 + implicit none + ! Arguments + real(DP), intent(in) :: mu !! Gravitational constant + real(DP), dimension(:), intent(in) :: x !! Position vector + real(DP), dimension(:), intent(in) :: v !! Velocity vector + real(DP), intent(out) :: a !! semimajor axis + real(DP), intent(out) :: q !! periapsis + real(DP), intent(out) :: capm !! mean anomaly + real(DP), intent(out) :: tperi !! time of pericenter passage + ! Internals + integer(I4B) :: iorbit_type + real(DP) :: r, v2, h2, rdotv, energy, fac, w, face, cape, e, tmpf, capf, mm + real(DP), dimension(NDIM) :: hvec + + a = 0.0_DP + q = 0.0_DP + capm = 0.0_DP + tperi = 0.0_DP + r = sqrt(dot_product(x(:), x(:))) + v2 = dot_product(v(:), v(:)) + hvec(:) = x(:) .cross. v(:) + h2 = dot_product(hvec(:), hvec(:)) + if (h2 == 0.0_DP) return + rdotv = dot_product(x(:), v(:)) + energy = 0.5_DP * v2 - mu / r + if (abs(energy * r / mu) < sqrt(VSMALL)) then + iorbit_type = PARABOLA + else + a = -0.5_DP * mu / energy + if (a < 0.0_DP) then + fac = -h2 / (mu * a) + if (fac > VSMALL) then + iorbit_type = HYPERBOLA + else + iorbit_type = PARABOLA + end if + else + iorbit_type = ELLIPSE + end if + end if + select case (iorbit_type) + case (ELLIPSE) + fac = 1.0_DP - h2 / (mu * a) + if (fac > VSMALL) then + e = sqrt(fac) + cape = 0.0_DP + face = (a - r) / (a * e) + if (face < -1.0_DP) then + cape = PI + else if (face < 1.0_DP) then + cape = acos(face) + end if + if (rdotv < 0.0_DP) cape = TWOPI - cape + else + e = 0.0_DP + cape = 0.0_DP + end if + capm = cape - e * sin(cape) + q = a * (1.0_DP - e) + mm = sqrt(mu / a**3) + if (capm < PI) then + tperi = -1.0_DP * capm / mm + else + tperi = -1.0_DP * (capm - TWOPI) / mm + end if + case (PARABOLA) + a = 0.5_DP * h2 / mu + e = 1.0_DP + w = 0.0_DP + fac = 2 * a / r - 1.0_DP + if (fac < -1.0_DP) then + w = PI + else if (fac < 1.0_DP) then + w = acos(fac) + end if + if (rdotv < 0.0_DP) w = TWOPI - w + tmpf = tan(0.5_DP * w) + capm = tmpf*(1.0_DP + tmpf * tmpf / 3.0_DP) + q = a + mm = sqrt(0.5_DP * mu / q**3) + tperi = -1.0_DP * capm / mm + case (HYPERBOLA) + e = sqrt(1.0_DP + fac) + tmpf = (a - r) / (a * e) + if (tmpf < 1.0_DP) tmpf = 1.0_DP + capf = log(tmpf + sqrt(tmpf * tmpf - 1.0_DP)) + if (rdotv < 0.0_DP) capf = -capf + capm = e * sinh(capf) - capf + q = a * (1.0_DP - e) + mm = sqrt(-mu / a**3) + tperi = -1.0_DP * capm / mm + end select + + return + + end subroutine orbel_xv2aqt + + + module subroutine orbel_xv2el_vec(self, cb) + !! author: David A. Minton + !! + !! A wrapper method that converts all of the cartesian position and velocity vectors of a Swiftest body object to orbital elements. + implicit none + ! Arguments + class(swiftest_body), intent(inout) :: self !! Swiftest body object + class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object + ! internals + integer(I4B) :: i + + if (self%nbody == 0) return + call self%set_mu(cb) + !do concurrent (i = 1:self%nbody) + do i = 1, self%nbody + call orbel_xv2el(self%mu(i), self%xh(:, i), self%vh(:, i), self%a(i), self%e(i), self%inc(i), & + self%capom(i), self%omega(i), self%capm(i)) + end do + end subroutine orbel_xv2el_vec + + pure subroutine orbel_xv2el(mu, x, v, a, e, inc, capom, omega, capm) + !! author: David A. Minton + !! + !! Compute osculating orbital elements from relative Cartesian position and velocity + !! All angular measures are returned in radians + !! If inclination < TINY, longitude of the ascending node is arbitrarily set to 0 + !! + !! If eccentricity < sqrt(TINY), argument of pericenter is arbitrarily set to 0 + !! + !! References: Danby, J. M. A. 1988. Fundamentals of Celestial Mechanics, (Willmann-Bell, Inc.), 201 - 206. + !! Fitzpatrick, P. M. 1970. Principles of Celestial Mechanics, (Academic Press), 69 - 73. + !! Roy, A. E. 1982. Orbital Motion, (Adam Hilger, Ltd.), 75 - 95 + !! + !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2el.f90 + !! Adapted from Martin Duncan's Swift routine orbel_xv2el.f + implicit none + real(DP), intent(in) :: mu + real(DP), dimension(:), intent(in) :: x, v + real(DP), intent(out) :: a, e, inc, capom, omega, capm + integer(I4B) :: iorbit_type + real(DP) :: r, v2, h2, h, rdotv, energy, fac, u, w, cw, sw, face, cape, tmpf, capf + real(DP), dimension(NDIM) :: hvec + + a = 0.0_DP + e = 0.0_DP + inc = 0.0_DP + capom = 0.0_DP + omega = 0.0_DP + capm = 0.0_DP + r = sqrt(dot_product(x(:), x(:))) + v2 = dot_product(v(:), v(:)) + hvec = x(:) .cross. v(:) + h2 = dot_product(hvec(:), hvec(:)) + h = sqrt(h2) + if (h2 == 0.0_DP) return + rdotv = dot_product(x(:), v(:)) + energy = 0.5_DP * v2 - mu / r + fac = hvec(3) / h + if (fac < -1.0_DP) then + inc = PI + else if (fac < 1.0_DP) then + inc = acos(fac) + end if + fac = sqrt(hvec(1)**2 + hvec(2)**2) / h + if (fac**2 < VSMALL) then + u = atan2(x(2), x(1)) + if (hvec(3) < 0.0_DP) u = -u + else + capom = atan2(hvec(1), -hvec(2)) + u = atan2(x(3) / sin(inc), x(1) * cos(capom) + x(2) * sin(capom)) + end if + if (capom < 0.0_DP) capom = capom + TWOPI + if (u < 0.0_DP) u = u + TWOPI + if (abs(energy * r / mu) < sqrt(VSMALL)) then + iorbit_type = parabola + else + a = -0.5_DP * mu / energy + if (a < 0.0_DP) then + fac = -h2 / (mu * a) + if (fac > VSMALL) then + iorbit_type = HYPERBOLA + else + iorbit_type = PARABOLA + end if + else + iorbit_type = ELLIPSE + end if + end if + select case (iorbit_type) + case (ELLIPSE) + fac = 1.0_DP - h2 / (mu * a) + if (fac > VSMALL) then + e = sqrt(fac) + cape = 0.0_DP + face = (a - r) / (a * e) + if (face < -1.0_DP) then + cape = PI + else if (face < 1.0_DP) then + cape = acos(face) + end if + if (rdotv < 0.0_DP) cape = TWOPI - cape + fac = 1.0_DP - e * cos(cape) + cw = (cos(cape) - e) / fac + sw = sqrt(1.0_DP - e**2) * sin(cape) / fac + w = atan2(sw, cw) + if (w < 0.0_DP) w = w + TWOPI + else + cape = u + w = u + end if + capm = cape - e * sin(cape) + case (PARABOLA) + a = 0.5_DP * h2 / mu + e = 1.0_DP + w = 0.0_DP + fac = 2 * a / r - 1.0_DP + if (fac < -1.0_DP) then + w = PI + else if (fac < 1.0_DP) then + w = acos(fac) + end if + if (rdotv < 0.0_DP) w = TWOPI - w + tmpf = tan(0.5_DP * w) + capm = tmpf * (1.0_DP + tmpf * tmpf / 3.0_DP) + case (HYPERBOLA) + e = sqrt(1.0_DP + fac) + tmpf = max((a - r) / (a * e), 1.0_DP) + capf = log(tmpf + sqrt(tmpf**2 - 1.0_DP)) + if (rdotv < 0.0_DP) capf = -capf + fac = e * cosh(capf) - 1.0_DP + cw = (e - cosh(capf)) / fac + sw = sqrt(e * e - 1.0_DP) * sinh(capf) / fac + w = atan2(sw, cw) + if (w < 0.0_DP) w = w + TWOPI + capm = e * sinh(capf) - capf + end select + omega = u - w + if (omega < 0.0_DP) omega = omega + TWOPI + + return + end subroutine orbel_xv2el -end submodule s_orbel_el2xv +end submodule s_orbel diff --git a/src/orbel/orbel_scget.f90 b/src/orbel/orbel_scget.f90 deleted file mode 100644 index 0cdb67c72..000000000 --- a/src/orbel/orbel_scget.f90 +++ /dev/null @@ -1,27 +0,0 @@ -submodule (swiftest_classes) s_orbel_scget - use swiftest -contains - module procedure orbel_scget - !! author: David A. Minton - !! - !! Efficiently compute the sine and cosine of an input angle - !! Input angle must be in radians - !! - !! Adapted from David E. Kaufmann's Swifter routine: orbel_scget.f90 - !! Adapted from Hal Levison's Swift routine orbel_scget.f - implicit none - integer(I4B) :: nper - real(DP) :: x - - ! executable code - nper = angle / TWOPI - x = angle - nper * TWOPI - if (x < 0.0_DP) x = x + TWOPI - sx = sin(x) - cx = sqrt(1.0_DP - sx**2) - if ((x > PIBY2) .and. (x < PI3BY2)) cx = -cx - - return - - end procedure orbel_scget -end submodule s_orbel_scget diff --git a/src/orbel/orbel_xv2aeq.f90 b/src/orbel/orbel_xv2aeq.f90 deleted file mode 100644 index 8338d6559..000000000 --- a/src/orbel/orbel_xv2aeq.f90 +++ /dev/null @@ -1,57 +0,0 @@ -submodule (swiftest_classes) s_orbel_xv2aeq - use swiftest -contains - module procedure orbel_xv2aeq - !! author: David A. Minton - !! - !! Compute semimajor axis, eccentricity, and pericentric distance from relative Cartesian position and velocity - !! - !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2aeq.f90 - !! Adapted from Luke Dones' Swift routine orbel_xv2aeq.f - implicit none - integer(I4B) :: iorbit_type - real(DP) :: r, v2, h2, energy, fac - real(DP), dimension(NDIM) :: hvec - - a = 0.0_DP - e = 0.0_DP - q = 0.0_DP - r = sqrt(dot_product(x(:), x(:))) - v2 = dot_product(v(:), v(:)) - hvec(:) = x(:) .cross. v(:) - h2 = dot_product(hvec(:), hvec(:)) - if (h2 == 0.0_DP) return - energy = 0.5_DP * v2 - mu / r - if (abs(energy * r / mu) < sqrt(VSMALL)) then - iorbit_type = PARABOLA - else - a = -0.5_DP * mu / energy - if (a < 0.0_DP) then - fac = -h2 / (mu * a) - if (fac > VSMALL) then - iorbit_type = HYPERBOLA - else - iorbit_type = PARABOLA - end if - else - iorbit_type = ELLIPSE - end if - end if - select case (iorbit_type) - case (ELLIPSE) - fac = 1.0_DP - h2 / (mu * a) - if (fac > VSMALL) e = sqrt(fac) - q = a * (1.0_DP - e) - case (PARABOLA) - a = 0.5_DP * h2 / mu - e = 1.0_DP - q = a - case (HYPERBOLA) - e = sqrt(1.0_DP + fac) - q = a * (1.0_DP - e) - end select - - return - - end procedure orbel_xv2aeq -end submodule s_orbel_xv2aeq diff --git a/src/orbel/orbel_xv2aqt.f90 b/src/orbel/orbel_xv2aqt.f90 deleted file mode 100644 index 3c8bf3f3e..000000000 --- a/src/orbel/orbel_xv2aqt.f90 +++ /dev/null @@ -1,100 +0,0 @@ -submodule (swiftest_classes) s_orbel_xv2aqt - use swiftest -contains - module procedure orbel_xv2aqt ! (mu, px, py, pz, vx, vy, vz, a, q, capm, tperi - !! author: David A. Minton - !! - !! Compute semimajor axis, pericentric distance, mean anomaly, and time to nearest pericenter passage from - !! relative Cartesian position and velocity - !! tperi > 0 means nearest pericenter passage is in the future - !! tperi < 0 means nearest pericenter passage is in the past - !! - !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2aqt.f90 - implicit none - integer(I4B) :: iorbit_type - real(DP) :: r, v2, h2, rdotv, energy, fac, w, face, cape, e, tmpf, capf, mm - real(DP), dimension(NDIM) :: hvec - - a = 0.0_DP - q = 0.0_DP - capm = 0.0_DP - tperi = 0.0_DP - r = sqrt(dot_product(x(:), x(:))) - v2 = dot_product(v(:), v(:)) - hvec(:) = x(:) .cross. v(:) - h2 = dot_product(hvec(:), hvec(:)) - if (h2 == 0.0_DP) return - rdotv = dot_product(x(:), v(:)) - energy = 0.5_DP * v2 - mu / r - if (abs(energy * r / mu) < sqrt(VSMALL)) then - iorbit_type = PARABOLA - else - a = -0.5_DP * mu / energy - if (a < 0.0_DP) then - fac = -h2 / (mu * a) - if (fac > VSMALL) then - iorbit_type = HYPERBOLA - else - iorbit_type = PARABOLA - end if - else - iorbit_type = ELLIPSE - end if - end if - select case (iorbit_type) - case (ELLIPSE) - fac = 1.0_DP - h2 / (mu * a) - if (fac > VSMALL) then - e = sqrt(fac) - cape = 0.0_DP - face = (a - r) / (a * e) - if (face < -1.0_DP) then - cape = PI - else if (face < 1.0_DP) then - cape = acos(face) - end if - if (rdotv < 0.0_DP) cape = TWOPI - cape - else - e = 0.0_DP - cape = 0.0_DP - end if - capm = cape - e * sin(cape) - q = a * (1.0_DP - e) - mm = sqrt(mu / a**3) - if (capm < PI) then - tperi = -1.0_DP * capm / mm - else - tperi = -1.0_DP * (capm - TWOPI) / mm - end if - case (PARABOLA) - a = 0.5_DP * h2 / mu - e = 1.0_DP - w = 0.0_DP - fac = 2 * a / r - 1.0_DP - if (fac < -1.0_DP) then - w = PI - else if (fac < 1.0_DP) then - w = acos(fac) - end if - if (rdotv < 0.0_DP) w = TWOPI - w - tmpf = tan(0.5_DP * w) - capm = tmpf*(1.0_DP + tmpf * tmpf / 3.0_DP) - q = a - mm = sqrt(0.5_DP * mu / q**3) - tperi = -1.0_DP * capm / mm - case (HYPERBOLA) - e = sqrt(1.0_DP + fac) - tmpf = (a - r) / (a * e) - if (tmpf < 1.0_DP) tmpf = 1.0_DP - capf = log(tmpf + sqrt(tmpf * tmpf - 1.0_DP)) - if (rdotv < 0.0_DP) capf = -capf - capm = e * sinh(capf) - capf - q = a * (1.0_DP - e) - mm = sqrt(-mu / a**3) - tperi = -1.0_DP * capm / mm - end select - - return - - end procedure orbel_xv2aqt -end submodule s_orbel_xv2aqt diff --git a/src/orbel/orbel_xv2el.f90 b/src/orbel/orbel_xv2el.f90 deleted file mode 100644 index 434925c7d..000000000 --- a/src/orbel/orbel_xv2el.f90 +++ /dev/null @@ -1,142 +0,0 @@ -submodule (swiftest_classes) s_orbel_xv2el - use swiftest -contains - - module procedure orbel_xv2el_vec - !! author: David A. Minton - !! - !! A wrapper method that converts all of the cartesian position and velocity vectors of a Swiftest body object to orbital elements. - implicit none - integer(I4B) :: i - - if (self%nbody == 0) return - call self%set_mu(cb) - !do concurrent (i = 1:self%nbody) - do i = 1, self%nbody - call orbel_xv2el(self%mu(i), self%xh(:, i), self%vh(:, i), self%a(i), self%e(i), self%inc(i), & - self%capom(i), self%omega(i), self%capm(i)) - end do - end procedure orbel_xv2el_vec - - pure subroutine orbel_xv2el(mu, x, v, a, e, inc, capom, omega, capm) - !! author: David A. Minton - !! - !! Compute osculating orbital elements from relative Cartesian position and velocity - !! All angular measures are returned in radians - !! If inclination < TINY, longitude of the ascending node is arbitrarily set to 0 - !! - !! If eccentricity < sqrt(TINY), argument of pericenter is arbitrarily set to 0 - !! - !! References: Danby, J. M. A. 1988. Fundamentals of Celestial Mechanics, (Willmann-Bell, Inc.), 201 - 206. - !! Fitzpatrick, P. M. 1970. Principles of Celestial Mechanics, (Academic Press), 69 - 73. - !! Roy, A. E. 1982. Orbital Motion, (Adam Hilger, Ltd.), 75 - 95 - !! - !! Adapted from David E. Kaufmann's Swifter routine: orbel_xv2el.f90 - !! Adapted from Martin Duncan's Swift routine orbel_xv2el.f - implicit none - real(DP), intent(in) :: mu - real(DP), dimension(:), intent(in) :: x, v - real(DP), intent(out) :: a, e, inc, capom, omega, capm - integer(I4B) :: iorbit_type - real(DP) :: r, v2, h2, h, rdotv, energy, fac, u, w, cw, sw, face, cape, tmpf, capf - real(DP), dimension(NDIM) :: hvec - - a = 0.0_DP - e = 0.0_DP - inc = 0.0_DP - capom = 0.0_DP - omega = 0.0_DP - capm = 0.0_DP - r = sqrt(dot_product(x(:), x(:))) - v2 = dot_product(v(:), v(:)) - hvec = x(:) .cross. v(:) - h2 = dot_product(hvec(:), hvec(:)) - h = sqrt(h2) - if (h2 == 0.0_DP) return - rdotv = dot_product(x(:), v(:)) - energy = 0.5_DP * v2 - mu / r - fac = hvec(3) / h - if (fac < -1.0_DP) then - inc = PI - else if (fac < 1.0_DP) then - inc = acos(fac) - end if - fac = sqrt(hvec(1)**2 + hvec(2)**2) / h - if (fac**2 < VSMALL) then - u = atan2(x(2), x(1)) - if (hvec(3) < 0.0_DP) u = -u - else - capom = atan2(hvec(1), -hvec(2)) - u = atan2(x(3) / sin(inc), x(1) * cos(capom) + x(2) * sin(capom)) - end if - if (capom < 0.0_DP) capom = capom + TWOPI - if (u < 0.0_DP) u = u + TWOPI - if (abs(energy * r / mu) < sqrt(VSMALL)) then - iorbit_type = parabola - else - a = -0.5_DP * mu / energy - if (a < 0.0_DP) then - fac = -h2 / (mu * a) - if (fac > VSMALL) then - iorbit_type = HYPERBOLA - else - iorbit_type = PARABOLA - end if - else - iorbit_type = ELLIPSE - end if - end if - select case (iorbit_type) - case (ELLIPSE) - fac = 1.0_DP - h2 / (mu * a) - if (fac > VSMALL) then - e = sqrt(fac) - cape = 0.0_DP - face = (a - r) / (a * e) - if (face < -1.0_DP) then - cape = PI - else if (face < 1.0_DP) then - cape = acos(face) - end if - if (rdotv < 0.0_DP) cape = TWOPI - cape - fac = 1.0_DP - e * cos(cape) - cw = (cos(cape) - e) / fac - sw = sqrt(1.0_DP - e**2) * sin(cape) / fac - w = atan2(sw, cw) - if (w < 0.0_DP) w = w + TWOPI - else - cape = u - w = u - end if - capm = cape - e * sin(cape) - case (PARABOLA) - a = 0.5_DP * h2 / mu - e = 1.0_DP - w = 0.0_DP - fac = 2 * a / r - 1.0_DP - if (fac < -1.0_DP) then - w = PI - else if (fac < 1.0_DP) then - w = acos(fac) - end if - if (rdotv < 0.0_DP) w = TWOPI - w - tmpf = tan(0.5_DP * w) - capm = tmpf * (1.0_DP + tmpf * tmpf / 3.0_DP) - case (HYPERBOLA) - e = sqrt(1.0_DP + fac) - tmpf = max((a - r) / (a * e), 1.0_DP) - capf = log(tmpf + sqrt(tmpf**2 - 1.0_DP)) - if (rdotv < 0.0_DP) capf = -capf - fac = e * cosh(capf) - 1.0_DP - cw = (e - cosh(capf)) / fac - sw = sqrt(e * e - 1.0_DP) * sinh(capf) / fac - w = atan2(sw, cw) - if (w < 0.0_DP) w = w + TWOPI - capm = e * sinh(capf) - capf - end select - omega = u - w - if (omega < 0.0_DP) omega = omega + TWOPI - - return - end subroutine orbel_xv2el -end submodule s_orbel_xv2el diff --git a/src/rmvs/rmvs_setup.f90 b/src/rmvs/rmvs_setup.f90 index 4cda7bd6f..58002401e 100644 --- a/src/rmvs/rmvs_setup.f90 +++ b/src/rmvs/rmvs_setup.f90 @@ -46,7 +46,7 @@ module subroutine rmvs_setup_pl(self,n) return end subroutine rmvs_setup_pl - module subroutine rmvs_setup_system(self, param) + module subroutine rmvs_setup_initialize_system(self, param) !! author: David A. Minton !! !! Initialize an RMVS nbody system from files and sets up the planetocentric structures. @@ -64,7 +64,7 @@ module subroutine rmvs_setup_system(self, param) integer(I4B) :: i, j ! Call parent method - call whm_setup_system(self, param) + call whm_setup_initialize_system(self, param) ! Set up the pl-tp planetocentric encounter structures for pl and cb. The planetocentric tp structures are ! generated as necessary during close encounter steps. @@ -116,7 +116,7 @@ module subroutine rmvs_setup_system(self, param) end select end select - end subroutine rmvs_setup_system + end subroutine rmvs_setup_initialize_system module subroutine rmvs_setup_tp(self,n) !! author: David A. Minton diff --git a/src/setup/setup.f90 b/src/setup/setup.f90 index e85f9754a..cbd7aabfe 100644 --- a/src/setup/setup.f90 +++ b/src/setup/setup.f90 @@ -69,7 +69,6 @@ module subroutine setup_construct_system(system, param) return end subroutine setup_construct_system - module subroutine setup_initialize_system(self, param) !! author: David A. Minton !! @@ -82,12 +81,13 @@ module subroutine setup_initialize_system(self, param) call self%cb%initialize(param) call self%pl%initialize(param) - if (.not.param%lrhill_present) call self%pl%set_rhill(self%cb) call self%tp%initialize(param) + call util_valid(self%pl, self%tp) call self%set_msys() call self%pl%set_mu(self%cb) call self%tp%set_mu(self%cb) call self%pl%eucl_index() + if (.not.param%lrhill_present) call self%pl%set_rhill(self%cb) return end subroutine setup_initialize_system @@ -177,7 +177,7 @@ module subroutine setup_pl(self,n) self%Gmass(:) = 0.0_DP self%rhill(:) = 0.0_DP self%radius(:) = 0.0_DP - self%density(:) = 0.0_DP + self%density(:) = 1.0_DP self%rot(:,:) = 0.0_DP self%Ip(:,:) = 0.0_DP self%k2(:) = 0.0_DP diff --git a/src/symba/symba_collision.f90 b/src/symba/symba_collision.f90 new file mode 100644 index 000000000..b8060829c --- /dev/null +++ b/src/symba/symba_collision.f90 @@ -0,0 +1,119 @@ +submodule (symba_classes) s_symba_collision + use swiftest +contains + module subroutine symba_collision_check_plplenc(self, system, param, t, dt, irec) + !! author: Jennifer L.L. Pouplin, Carlisle A. wishard, and David A. Minton + !! + !! Check for merger between massive bodies in SyMBA. If the user has turned on the FRAGMENTATION feature, it will call the + !! symba_regime subroutine to determine what kind of collision will occur. + !! + !! Adapted from David E. Kaufmann's Swifter routine symba_merge_pl.f90 + !! + !! Adapted from Hal Levison's Swift routine symba5_merge.f + implicit none + ! Arguments + class(symba_plplenc), intent(inout) :: self !! SyMBA pl-tp encounter list object + class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + real(DP), intent(in) :: t !! current time + real(DP), intent(in) :: dt !! step size + integer(I4B), intent(in) :: irec !! Current recursion level + end subroutine symba_collision_check_plplenc + + module subroutine symba_collision_check_pltpenc(self, system, param, t, dt, irec) + !! author: David A. Minton + !! + !! Check for merger between massive bodies and test particles in SyMBA + !! + !! Adapted from David E. Kaufmann's Swifter routine symba_merge_tp.f90 + !! + !! Adapted from Hal Levison's Swift routine symba5_merge.f + implicit none + ! Arguments + class(symba_pltpenc), intent(inout) :: self !! SyMBA pl-tp encounter list object + class(symba_nbody_system), intent(inout) :: system !! SyMBA nbody system object + class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters + real(DP), intent(in) :: t !! current time + real(DP), intent(in) :: dt !! step size + integer(I4B), intent(in) :: irec !! Current recursion level + ! Internals + logical, dimension(:), allocatable :: lcollision, mask + real(DP), dimension(NDIM) :: xr, vr + integer(I4B) :: k + + select type(pl => system%pl) + class is (symba_pl) + select type(tp => system%tp) + class is (symba_tp) + associate(pltpenc_list => self, npltpenc => self%nenc, plind => self%index1(1:self%nenc), tpind => self%index2(1:self%nenc)) + allocate(lcollision(npltpenc), mask(npltpenc)) + mask(:) = ((pltpenc_list%status(1:npltpenc) == ACTIVE) .and. (pl%levelg(plind) >= irec) .and. (tp%levelg(tpind) >= irec)) + lcollision(:) = .false. + do concurrent(k = 1:npltpenc, mask(k)) + associate(i => plind(k), j => tpind(k)) + xr(:) = pl%xh(:, i) - tp%xh(:, j) + vr(:) = pl%vb(:, i) - tp%vb(:, j) + lcollision(k) = symba_collision_check_one(xr(1), xr(2), xr(3), vr(1), vr(2), vr(3), pl%Gmass(i), pl%radius(i), dt, pltpenc_list%lvdotr(k)) + end associate + end do + + if (any(lcollision(:))) then + where(lcollision(1:npltpenc)) + pltpenc_list%status(1:npltpenc) = COLLISION + tp%status(tpind(1:npltpenc)) = DISCARDED_PLR + tp%ldiscard(tpind(1:npltpenc)) = .true. + end where + do k = 1, npltpenc + if (pltpenc_list%status(k) /= COLLISION) cycle + write(*,*) 'Test particle ',tp%id(tpind(k)), ' collided with massive body ',pl%id(plind(k)), ' at time ',t + end do + end if + end associate + end select + end select + return + end subroutine symba_collision_check_pltpenc + + pure elemental function symba_collision_check_one(xr, yr, zr, vxr, vyr, vzr, Gmtot, rlim, dt, lvdotr) result(lcollision) + !! author: David A. Minton + !! + !! Check for a merger between a single pair of particles + !! + !! Adapted from David E. Kaufmann's Swifter routines symba_merge_tp.f90 and symba_merge_pl.f90 + !! + !! Adapted from Hal Levison's Swift routine symba5_merge.f + implicit none + ! Arguments + real(DP), intent(in) :: xr, yr, zr !! Relative position vector components + real(DP), intent(in) :: vxr, vyr, vzr !! Relative velocity vector components + real(DP), intent(in) :: Gmtot !! Sum of G*mass of colliding bodies + real(DP), intent(in) :: rlim !! Collision limit - Typically the sum of the radii of colliding bodies + real(DP), intent(in) :: dt !! Step size + logical, intent(in) :: lvdotr !! Logical flag indicating that these two bodies are approaching in the current substep + ! Result + logical :: lcollision !! Logical flag indicating whether these two bodies will collide or not + ! Internals + real(DP) :: r2, rlim2, a, e, q, vdotr, tcr2, dt2 + + r2 = xr**2 + yr**2 + zr**2 + rlim2 = rlim**2 + + if (r2 <= rlim2) then ! checks if bodies are actively colliding in this time step + lcollision = .true. + else ! if they are not actively colliding in this time step, checks if they are going to collide next time step based on velocities and q + lcollision = .false. + vdotr = xr * vxr + yr * vyr + zr * vzr + if (lvdotr .and. (vdotr > 0.0_DP)) then + tcr2 = r2 / (vxr**2 + vyr**2 + vzr**2) + dt2 = dt**2 + if (tcr2 <= dt2) then + call orbel_xv2aeq(Gmtot, [xr, yr, zr], [vxr, vyr, vzr], a, e, q) + lcollision = (q < rlim) + end if + end if + end if + return + end function symba_collision_check_one + + +end submodule s_symba_collision \ No newline at end of file diff --git a/src/symba/symba_discard.f90 b/src/symba/symba_discard.f90 index 8bafdb2b5..3f8ada6fe 100644 --- a/src/symba/symba_discard.f90 +++ b/src/symba/symba_discard.f90 @@ -12,14 +12,4 @@ module subroutine symba_discard_pl(self, system, param) return end subroutine symba_discard_pl - module subroutine symba_discard_tp(self, system, param) - implicit none - ! Arguments - class(symba_tp), intent(inout) :: self !! SyMBA test particle object - class(swiftest_nbody_system), intent(inout) :: system !! Swiftest nbody system object - class(swiftest_parameters), intent(in) :: param !! Current run configuration parameters - - return - end subroutine symba_discard_tp - end submodule s_symba_discard \ No newline at end of file diff --git a/src/symba/symba_encounter_check.f90 b/src/symba/symba_encounter_check.f90 index 17383f9c0..796df5d4a 100644 --- a/src/symba/symba_encounter_check.f90 +++ b/src/symba/symba_encounter_check.f90 @@ -82,7 +82,7 @@ module function symba_encounter_check_pltpenc(self, system, dt, irec) result(lan class is (symba_pl) select type(tp => system%tp) class is (symba_tp) - do i = 1, self%nenc + do concurrent(i = 1:self%nenc, self%status(i) == ACTIVE .and. self%level(i) == irec - 1) associate(index_i => self%index1(i), index_j => self%index2(i)) if (isplpl) then xr(:) = pl%xh(:,index_j) - pl%xh(:,index_i) diff --git a/src/symba/symba_io.f90 b/src/symba/symba_io.f90 index bebb225b5..acc3aabf9 100644 --- a/src/symba/symba_io.f90 +++ b/src/symba/symba_io.f90 @@ -51,6 +51,7 @@ module subroutine symba_io_param_reader(self, unit, iotype, v_list, iostat, ioms call random_seed(size = nseeds) if (allocated(param%seed)) deallocate(param%seed) allocate(param%seed(nseeds)) + rewind(unit) do read(unit = unit, fmt = linefmt, iostat = iostat, end = 1) line line_trim = trim(adjustl(line)) @@ -121,8 +122,10 @@ module subroutine symba_io_param_reader(self, unit, iotype, v_list, iostat, ioms return end if end associate - return + iostat = 0 + + return end subroutine symba_io_param_reader module subroutine symba_io_param_writer(self, unit, iotype, v_list, iostat, iomsg) diff --git a/src/symba/symba_kick.f90 b/src/symba/symba_kick.f90 index 4da46f5a6..140eb0072 100644 --- a/src/symba/symba_kick.f90 +++ b/src/symba/symba_kick.f90 @@ -29,14 +29,14 @@ module subroutine symba_kick_getacch_pl(self, system, param, t, lbeg) associate(i => plplenc_list%index1(k), j => plplenc_list%index2(k)) dx(:) = pl%xh(:, j) - pl%xh(:, i) rji2 = dot_product(dx(:), dx(:)) - rlim2 = (pl%radius(i) + pl%radius(j))**2 - if (rji2 > rlim2) then + !rlim2 = (pl%radius(i) + pl%radius(j))**2 + !if (rji2 > rlim2) then irij3 = 1.0_DP / (rji2 * sqrt(rji2)) faci = pl%Gmass(i) * irij3 facj = pl%Gmass(j) * irij3 pl%ah(:, i) = pl%ah(:, i) - facj * dx(:) pl%ah(:, j) = pl%ah(:, j) + faci * dx(:) - end if + !end if end associate end do call helio_kick_getacch_pl(pl, system, param, t, lbeg) @@ -72,13 +72,17 @@ module subroutine symba_kick_getacch_tp(self, system, param, t, lbeg) do k = 1, npltpenc associate(i => pltpenc_list%index1(k), j => pltpenc_list%index2(k)) if (tp%status(j) == ACTIVE) THEN - dx(:) = tp%xh(:,j) - pl%xh(:,i) + if (lbeg) then + dx(:) = tp%xh(:,j) - pl%xbeg(:,i) + else + dx(:) = tp%xh(:,j) - pl%xend(:,i) + end if rji2 = dot_product(dx(:), dx(:)) - rlim2 = (pl%radius(i))**2 - if (rji2 > rlim2) then + !rlim2 = (pl%radius(i))**2 + !if (rji2 > rlim2) then fac = pl%Gmass(i) / (rji2 * sqrt(rji2)) tp%ah(:,j) = tp%ah(:,j) + fac * dx(:) - end if + !end if end IF end associate end do @@ -160,9 +164,9 @@ module subroutine symba_kick_pltpenc(self, system, dt, irec, sgn) ir3 = 1.0_DP / (r2 * sqrt(r2)) fac = ir3 end if - faci = fac * pl%mass(i) + faci = fac * pl%Gmass(i) if (isplpl) then - facj = fac * pl%mass(j) + facj = fac * pl%Gmass(j) pl%ah(:,i) = pl%ah(:,i) + facj*dx(:) pl%ah(:,j) = pl%ah(:,j) - faci*dx(:) else diff --git a/src/symba/symba_setup.f90 b/src/symba/symba_setup.f90 index 5ac26c220..51aaf69ba 100644 --- a/src/symba/symba_setup.f90 +++ b/src/symba/symba_setup.f90 @@ -100,10 +100,11 @@ module subroutine symba_setup_plplenc(self,n) return end subroutine symba_setup_plplenc - module subroutine symba_setup_system(self, param) + module subroutine symba_setup_initialize_system(self, param) !! author: David A. Minton !! !! Initialize an SyMBA nbody system from files and sets up the planetocentric structures. + !! This subroutine will also sort the massive bodies in descending order by mass !! implicit none ! Arguments @@ -114,13 +115,14 @@ module subroutine symba_setup_system(self, param) ! Call parent method associate(system => self) - call whm_setup_system(system, param) + call whm_setup_initialize_system(system, param) call system%mergeadd_list%setup(1) call system%mergesub_list%setup(1) call system%pltpenc_list%setup(1) call system%plplenc_list%setup(1) select type(pl => system%pl) class is (symba_pl) + call pl%sort("mass", ascending=.false.) select type(param) class is (symba_parameters) pl%lmtiny(:) = pl%Gmass(:) > param%MTINY @@ -129,7 +131,7 @@ module subroutine symba_setup_system(self, param) end select end associate return - end subroutine symba_setup_system + end subroutine symba_setup_initialize_system module subroutine symba_setup_tp(self,n) !! author: David A. Minton diff --git a/src/symba/symba_step.f90 b/src/symba/symba_step.f90 index 896af6ab4..4e7082c4b 100644 --- a/src/symba/symba_step.f90 +++ b/src/symba/symba_step.f90 @@ -52,7 +52,6 @@ module subroutine symba_step_interp_system(self, param, t, dt) real(DP), intent(in) :: dt !! Current stepsize ! Internals real(DP) :: dth !! Half step size - integer(I4B) :: irec !! Recursion level dth = 0.5_DP * dt associate(system => self) @@ -62,25 +61,23 @@ module subroutine symba_step_interp_system(self, param, t, dt) class is (symba_tp) select type(cb => system%cb) class is (symba_cb) - irec = -1 call pl%vh2vb(cb) call pl%lindrift(cb, dth, mask=(pl%status(:) == ACTIVE), lbeg=.true.) call pl%kick(system, param, t, dth, mask=(pl%status(:) == ACTIVE), lbeg=.true.) - call pl%drift(system, param, dt, mask=(pl%status(:) == ACTIVE .and. pl%levelg(:) == irec)) + call pl%drift(system, param, dt, mask=(pl%status(:) == ACTIVE .and. pl%levelg(:) == -1)) call tp%vh2vb(vbcb = -cb%ptbeg) call tp%lindrift(cb, dth, mask=(tp%status(:) == ACTIVE), lbeg=.true.) call tp%kick(system, param, t, dth, mask=(tp%status(:) == ACTIVE), lbeg=.true.) - call tp%drift(system, param, dt, mask=(tp%status(:) == ACTIVE .and. tp%levelg(:) == irec)) + call tp%drift(system, param, dt, mask=(tp%status(:) == ACTIVE .and. tp%levelg(:) == -1)) - irec = 0 - call system%recursive_step(param, irec) + call system%recursive_step(param, t, 0) call pl%kick(system, param, t, dth, mask=(pl%status(:) == ACTIVE), lbeg=.false.) call pl%vb2vh(cb) call pl%lindrift(cb, dth, mask=(pl%status(:) == ACTIVE), lbeg=.false.) - call tp%kick(system, param, t, dth, mask=(tp%status(:) == ACTIVE), lbeg=.true.) + call tp%kick(system, param, t, dth, mask=(tp%status(:) == ACTIVE), lbeg=.false.) call tp%vb2vh(vbcb = -cb%ptend) call tp%lindrift(cb, dth, mask=(tp%status(:) == ACTIVE), lbeg=.false.) end select @@ -90,7 +87,7 @@ module subroutine symba_step_interp_system(self, param, t, dt) return end subroutine symba_step_interp_system - module recursive subroutine symba_step_recur_system(self, param, ireci) + module recursive subroutine symba_step_recur_system(self, param, t, ireci) !! author: David A. Minton !! !! Step interacting planets and active test particles ahead in democratic heliocentric coordinates at the current @@ -102,9 +99,10 @@ module recursive subroutine symba_step_recur_system(self, param, ireci) ! Arguments class(symba_nbody_system), intent(inout) :: self !! SyMBA nbody system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - integer(I4B), value, intent(in) :: ireci !! input recursion level + real(DP), value :: t + integer(I4B), value :: ireci !! input recursion level ! Internals - integer(I4B) :: i, j, irecp, nloops, sgn + integer(I4B) :: i, j, irecp, nloops real(DP) :: dtl, dth real(DP), dimension(NDIM) :: xr, vr logical :: lencounter @@ -130,29 +128,37 @@ module recursive subroutine symba_step_recur_system(self, param, ireci) end if do j = 1, nloops lencounter = plplenc_list%encounter_check(system, dtl, irecp) .or. pltpenc_list%encounter_check(system, dtl, irecp) - sgn = 1 - call plplenc_list%kick(system, dth, irecp, sgn) - call pltpenc_list%kick(system, dth, irecp, sgn) + call plplenc_list%kick(system, dth, irecp, 1) + call pltpenc_list%kick(system, dth, irecp, 1) if (ireci /= 0) then - sgn = -1 - call plplenc_list%kick(system, dth, irecp, sgn) - call pltpenc_list%kick(system, dth, irecp, sgn) + call plplenc_list%kick(system, dth, irecp, -1) + call pltpenc_list%kick(system, dth, irecp, -1) end if call pl%drift(system, param, dtl, mask=(pl%status(:) == ACTIVE .and. pl%levelg(:) == ireci)) call tp%drift(system, param, dtl, mask=(tp%status(:) == ACTIVE .and. tp%levelg(:) == ireci)) - if (lencounter) call system%recursive_step(param, irecp) + if (lencounter) call system%recursive_step(param, t+dth,irecp) - sgn = 1 - call plplenc_list%kick(system, dth, irecp, sgn) - call pltpenc_list%kick(system, dth, irecp, sgn) + call plplenc_list%kick(system, dth, irecp, 1) + call pltpenc_list%kick(system, dth, irecp, 1) if (ireci /= 0) then - sgn = -1 - call plplenc_list%kick(system, dth, irecp, sgn) - call pltpenc_list%kick(system, dth, irecp, sgn) + call plplenc_list%kick(system, dth, irecp, -1) + call pltpenc_list%kick(system, dth, irecp, -1) end if - + if (param%lclose) then + call plplenc_list%collision_check(system, param, t+dtl, dtl, ireci) + call pltpenc_list%collision_check(system, param, t+dtl, dtl, ireci) + end if + associate (plind1 => plplenc_list%index1(1:plplenc_list%nenc), & + plind2 => plplenc_list%index2(1:plplenc_list%nenc), & + plind3 => pltpenc_list%index1(1:pltpenc_list%nenc), & + tpind => pltpenc_list%index2(1:pltpenc_list%nenc)) + where(pl%levelg([plind1,plind2,plind3]) == irecp) pl%levelg(:) = ireci + where(tp%levelg(tpind) == irecp) tp%levelg(:) = ireci + end associate + where(plplenc_list%level(1:plplenc_list%nenc) == irecp) plplenc_list%level(:) = ireci + where(pltpenc_list%level(1:pltpenc_list%nenc) == irecp) pltpenc_list%level(:) = ireci end do end select end select diff --git a/src/symba/symba_util.f90 b/src/symba/symba_util.f90 index 031ae4ae5..a89da7b6a 100644 --- a/src/symba/symba_util.f90 +++ b/src/symba/symba_util.f90 @@ -65,5 +65,166 @@ module subroutine symba_util_resize_pltpenc(self, nrequested) return end subroutine symba_util_resize_pltpenc + module subroutine symba_util_sort_pl(self, sortby, ascending) + !! author: David A. Minton + !! + !! Sort a Swiftest test particle object in-place. + !! sortby is a string indicating which array component to sort. + implicit none + ! Arguments + class(symba_pl), intent(inout) :: self !! Symba massive body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + ! Internals + integer(I4B), dimension(self%nbody) :: ind + + associate(pl => self, npl => self%nbody) + select case(sortby) + case("nplenc") + if (ascending) then + call util_sort(pl%nplenc(1:npl), ind(1:npl)) + else + call util_sort(-pl%nplenc(1:npl), ind(1:npl)) + end if + case("ntpenc") + if (ascending) then + call util_sort(pl%ntpenc(1:npl), ind(1:npl)) + else + call util_sort(-pl%ntpenc(1:npl), ind(1:npl)) + end if + case("levelg") + if (ascending) then + call util_sort(pl%levelg(1:npl), ind(1:npl)) + else + call util_sort(-pl%levelg(1:npl), ind(1:npl)) + end if + case("levelm") + if (ascending) then + call util_sort(pl%levelm(1:npl), ind(1:npl)) + else + call util_sort(-pl%levelm(1:npl), ind(1:npl)) + end if + case("peri") + if (ascending) then + call util_sort(pl%peri(1:npl), ind(1:npl)) + else + call util_sort(-pl%peri(1:npl), ind(1:npl)) + end if + case("atp") + if (ascending) then + call util_sort(pl%atp(1:npl), ind(1:npl)) + else + call util_sort(-pl%atp(1:npl), ind(1:npl)) + end if + case default + call util_sort_pl(pl, sortby, ascending) + return + end select + call pl%rearrange(ind) + end associate + return + end subroutine symba_util_sort_pl + + module subroutine symba_util_sort_tp(self, sortby, ascending) + !! author: David A. Minton + !! + !! Sort a Swiftest test particle object in-place. + !! sortby is a string indicating which array component to sort. + implicit none + ! Arguments + class(symba_tp), intent(inout) :: self !! Swiftest test particle object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + ! Internals + integer(I4B), dimension(self%nbody) :: ind + + associate(tp => self, ntp => self%nbody) + select case(sortby) + case("nplenc") + if (ascending) then + call util_sort(tp%nplenc(1:ntp), ind(1:ntp)) + else + call util_sort(-tp%nplenc(1:ntp), ind(1:ntp)) + end if + case("levelg") + if (ascending) then + call util_sort(tp%levelg(1:ntp), ind(1:ntp)) + else + call util_sort(-tp%levelg(1:ntp), ind(1:ntp)) + end if + case("levelm") + if (ascending) then + call util_sort(tp%levelm(1:ntp), ind(1:ntp)) + else + call util_sort(-tp%levelm(1:ntp), ind(1:ntp)) + end if + case default + call util_sort_tp(tp, sortby, ascending) + return + end select + call tp%rearrange(ind) + end associate + return + end subroutine symba_util_sort_tp + + module subroutine symba_util_sort_rearrange_pl(self, ind) + !! author: David A. Minton + !! + !! Rearrange SyMBA massive body structure in-place from an index list. + !! This is a helper utility used to make polymorphic sorting work on Swiftest structures. + implicit none + ! Arguments + class(symba_pl), intent(inout) :: self !! Symba massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + ! Internals + class(symba_pl), allocatable :: pl_sorted !! Temporary holder for sorted body + integer(I4B) :: i, j + + associate(pl => self, npl => self%nbody) + call util_sort_rearrange_pl(pl,ind) + allocate(pl_sorted, source=self) + pl%lcollision(1:npl) = pl_sorted%lcollision(ind(1:npl)) + pl%lencounter(1:npl) = pl_sorted%lencounter(ind(1:npl)) + pl%nplenc(1:npl) = pl_sorted%nplenc(ind(1:npl)) + pl%ntpenc(1:npl) = pl_sorted%ntpenc(ind(1:npl)) + pl%levelg(1:npl) = pl_sorted%levelg(ind(1:npl)) + pl%levelm(1:npl) = pl_sorted%levelm(ind(1:npl)) + pl%isperi(1:npl) = pl_sorted%isperi(ind(1:npl)) + pl%peri(1:npl) = pl_sorted%peri(ind(1:npl)) + pl%atp(1:npl) = pl_sorted%atp(ind(1:npl)) + pl%info(1:npl) = pl_sorted%info(ind(1:npl)) + pl%kin(1:npl) = pl_sorted%kin(ind(1:npl)) + do i = 1, npl + do j = 1, pl%kin(i)%nchild + pl%kin(i)%child(j) = ind(pl%kin(i)%child(j)) + end do + end do + deallocate(pl_sorted) + end associate + return + end subroutine symba_util_sort_rearrange_pl + + module subroutine symba_util_sort_rearrange_tp(self, ind) + !! author: David A. Minton + !! + !! Rearrange SyMBA test particle object in-place from an index list. + !! This is a helper utility used to make polymorphic sorting work on Swiftest structures. + implicit none + ! Arguments + class(symba_tp), intent(inout) :: self !! Symba massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + ! Internals + class(symba_tp), allocatable :: tp_sorted !! Temporary holder for sorted body + + associate(tp => self, ntp => self%nbody) + call util_sort_rearrange_tp(tp,ind) + allocate(tp_sorted, source=self) + tp%nplenc(1:ntp) = tp_sorted%nplenc(ind(1:ntp)) + tp%levelg(1:ntp) = tp_sorted%levelg(ind(1:ntp)) + tp%levelm(1:ntp) = tp_sorted%levelm(ind(1:ntp)) + deallocate(tp_sorted) + end associate + return + end subroutine symba_util_sort_rearrange_tp end submodule s_symba_util \ No newline at end of file diff --git a/src/util/util_index.f90 b/src/util/util_index.f90 deleted file mode 100644 index fcece8809..000000000 --- a/src/util/util_index.f90 +++ /dev/null @@ -1,103 +0,0 @@ -submodule (swiftest_classes) s_util_index - use swiftest -contains - module subroutine util_index(arr, index) - !! author: David A. Minton - !! - !! Index input real array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_index.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1173-4 - implicit none - ! Arguments - integer(I4B), dimension(:), intent(out) :: index - real(DP), dimension(:), intent(in) :: arr - ! Internals - integer(I4B), parameter :: nn = 15, nstack = 50 - integer(I4B) :: n, k, i, j, indext, jstack, l, r, dum - integer(I4B), dimension(nstack) :: istack - real(DP) :: a - - n = size(arr) - if (n /= size(index)) then - write(*, *) "Swiftest Error:" - write(*, *) " array size mismatch in util_index" - call util_exit(FAILURE) - end if - index = arth(1, 1, n) - jstack = 0 - ! l is the counter ie 'the one we are at' - l = 1 - ! r is the length of the array ie 'the total number of particles' - r = n - do - if ((r - l) < nn) then - do j = l + 1, r - indext = index(j) - a = arr(indext) - do i = j - 1, l, -1 - if (arr(index(i)) <= a) exit - index(i+1) = index(i) - end do - index(i+1) = indext - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = index(k); index(k) = index(l+1); index(l+1) = dum - ! if the mass of the particle we are at in our counting is greater than the mass of the last particle then put the particle we are at above the last one - if (arr(index(l)) > arr(index(r))) then - dum = index(l); index(l) = index(r); index(r) = dum - end if - ! if the mass of the particle above the one we are at in our counting is greater than the last particle then put that particle above the last one - if (arr(index(l+1)) > arr(index(r))) then - dum = index(l+1); index(l+1) = index(r); index(r) = dum - end if - ! if the mass of teh particle we are at in our counting is greater than the one above it, then put it above the one above it - if (arr(index(l)) > arr(index(l+1))) then - dum = index(l); index(l) = index(l+1); index(l+1) = dum - end if - i = l + 1 - j = r - indext = index(l+1) - a = arr(indext) - do - do - i = i + 1 - if (arr(index(i)) >= a) exit - end do - do - j = j - 1 - if (arr(index(j)) <= a) exit - end do - if (j < i) exit - dum = index(i); index(i) = index(j); index(j) = dum - end do - index(l+1) = index(j) - index(j) = indext - jstack = jstack + 2 - if (jstack > nstack) then - write(*, *) "Swiftest Error:" - write(*, *) " nstack too small in util_sort" - call util_exit(FAILURE) - end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 - else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i - end if - end if - end do - - return - - end subroutine util_index -end submodule s_util_index diff --git a/src/util/util_sort.f90 b/src/util/util_sort.f90 index 126f4f12d..34fe600ed 100644 --- a/src/util/util_sort.f90 +++ b/src/util/util_sort.f90 @@ -1,263 +1,419 @@ submodule (swiftest_classes) s_util_sort use swiftest contains - module subroutine util_sort_dp(arr) + module subroutine util_sort_body(self, sortby, ascending) !! author: David A. Minton !! - !! Sort input double precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_dp.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 + !! Sort a Swiftest body structure in-place. + !! sortby is a string indicating which array component to sort. implicit none ! Arguments - real(DP), dimension(:), intent(inout) :: arr + class(swiftest_body), intent(inout) :: self !! Swiftest body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order ! Internals - integer(I4B), parameter :: NN = 15, NSTACK = 50 - real(DP) :: a, dum - integer(I4B) :: n, k, i, j, jstack, l, r - integer(I4B), dimension(NSTACK) :: istack + integer(I4B), dimension(self%nbody) :: ind - ! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum + associate(body => self, n => self%nbody) + select case(sortby) + case("id") + if (ascending) then + call util_sort(body%id(1:n), ind(1:n)) + else + call util_sort(-body%id(1:n), ind(1:n)) end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum + case("a") + if (ascending) then + call util_sort(body%a(1:n), ind(1:n)) + else + call util_sort(-body%a(1:n), ind(1:n)) end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum + case("e") + if (ascending) then + call util_sort(body%e(1:n), ind(1:n)) + else + call util_sort(-body%e(1:n), ind(1:n)) end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_I4B" - call util_exit(FAILURE) + case("inc") + if (ascending) then + call util_sort(body%inc(1:n), ind(1:n)) + else + call util_sort(-body%inc(1:n), ind(1:n)) end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 + case("capom") + if (ascending) then + call util_sort(body%capom(1:n), ind(1:n)) else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i + call util_sort(-body%capom(1:n), ind(1:n)) end if - end if - end do + case("mu") + if (ascending) then + call util_sort(body%mu(1:n), ind(1:n)) + else + call util_sort(-body%mu(1:n), ind(1:n)) + end if + case default + write(*,*) 'Cannot sort structure by component '//trim(adjustl(sortby)) + return + end select + call body%rearrange(ind) + end associate return + end subroutine util_sort_body - end subroutine util_sort_dp - - module subroutine util_sort_i4b(arr) + module subroutine util_sort_pl(self, sortby, ascending) !! author: David A. Minton !! - !! Sort input double precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_i4b.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 + !! Sort a Swiftest massive body object in-place. + !! sortby is a string indicating which array component to sort. implicit none ! Arguments - integer(I4B), dimension(:), intent(inout) :: arr + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order ! Internals - integer(I4B), parameter :: NN = 15, NSTACK = 50 - integer(I4B) :: a, n, k, i, j, jstack, l, r, dum - integer(I4B), dimension(NSTACK) :: istack - - ! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 - else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum + integer(I4B), dimension(self%nbody) :: ind + + associate(pl => self, npl => self%nbody) + select case(sortby) + case("Gmass","mass") + if (ascending) then + call util_sort(pl%Gmass(1:npl), ind(1:npl)) + else + call util_sort(-pl%Gmass(1:npl), ind(1:npl)) end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum + case("rhill") + if (ascending) then + call util_sort(pl%rhill(1:npl), ind(1:npl)) + else + call util_sort(-pl%rhill(1:npl), ind(1:npl)) end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum + case("radius") + if (ascending) then + call util_sort(pl%radius(1:npl), ind(1:npl)) + else + call util_sort(-pl%radius(1:npl), ind(1:npl)) end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_i4b" - call util_exit(FAILURE) + case("density") + if (ascending) then + call util_sort(pl%density(1:npl), ind(1:npl)) + else + call util_sort(-pl%density(1:npl), ind(1:npl)) end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 + case("k2") + if (ascending) then + call util_sort(pl%k2(1:npl), ind(1:npl)) else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i + call util_sort(-pl%k2(1:npl), ind(1:npl)) end if - end if - end do - + case("Q") + if (ascending) then + call util_sort(pl%Q(1:npl), ind(1:npl)) + else + call util_sort(-pl%Q(1:npl), ind(1:npl)) + end if + case("tlag") + if (ascending) then + call util_sort(pl%tlag(1:npl), ind(1:npl)) + else + call util_sort(-pl%tlag(1:npl), ind(1:npl)) + end if + case default + call util_sort_body(pl, sortby, ascending) + return + end select + call pl%rearrange(ind) + end associate + return - - end subroutine util_sort_i4b + end subroutine util_sort_pl + + module subroutine util_sort_tp(self, sortby, ascending) + !! author: David A. Minton + !! + !! Sort a Swiftest test particle object in-place. + !! sortby is a string indicating which array component to sort. + implicit none + ! Arguments + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + character(*), intent(in) :: sortby !! Sorting attribute + logical, intent(in) :: ascending !! Logical flag indicating whether or not the sorting should be in ascending or descending order + ! Internals + integer(I4B), dimension(self%nbody) :: ind - module subroutine util_sort_sp(arr) - !! author: David A. Minton - !! - !! Sort input single precision array into ascending numerical order using Quicksort algorithm - !! - !! Adapted from David E. Kaufmann's Swifter routine: util_sort_DP.f90 - !! Adapted from Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing, by Press, Teukolsky, - !! Vetterling, and Flannery, 2nd ed., pp. 1169-70 - implicit none - ! Arguments - real(SP), dimension(:), intent(inout) :: arr - ! Internals - integer(I4B), parameter :: NN = 15, NSTACK = 50 - real(SP) :: a, dum - integer(I4B) :: n, k, i, j, jstack, l, r - integer(I4B), dimension(NSTACK) :: istack - - ! executable code - n = size(arr) - jstack = 0 - l = 1 - r = n - do - if ((r - l) < NN) then - do j = l + 1, r - a = arr(j) - do i = j - 1, l, -1 - if (arr(i) <= a) exit - arr(i+1) = arr(i) - end do - arr(i+1) = a - end do - if (jstack == 0) return - r = istack(jstack) - l = istack(jstack-1) - jstack = jstack - 2 + associate(tp => self, ntp => self%nbody) + select case(sortby) + case("peri") + if (ascending) then + call util_sort(tp%peri(1:ntp), ind(1:ntp)) else - k = (l + r)/2 - dum = arr(k); arr(k) = arr(l+1); arr(l+1) = dum - if (arr(l) > arr(r)) then - dum = arr(l); arr(l) = arr(r); arr(r) = dum - end if - if (arr(l+1) > arr(r)) then - dum = arr(l+1); arr(l+1) = arr(r); arr(r) = dum - end if - if (arr(l) > arr(l+1)) then - dum = arr(l); arr(l) = arr(l+1); arr(l+1) = dum - end if - i = l + 1 - j = r - a = arr(l+1) - do - do - i = i + 1 - if (arr(i) >= a) exit - end do - do - j = j - 1 - if (arr(j) <= a) exit - end do - if (j < i) exit - dum = arr(i); arr(i) = arr(j); arr(j) = dum - end do - arr(l+1) = arr(j) - arr(j) = a - jstack = jstack + 2 - if (jstack > NSTACK) then - write(*, *) "Swiftest Error:" - write(*, *) " NSTACK too small in util_sort_I4B" - call util_exit(FAILURE) - end if - if ((r - i + 1) >= (j - l)) then - istack(jstack) = r - istack(jstack-1) = i - r = j - 1 - else - istack(jstack) = j - 1 - istack(jstack-1) = l - l = i - end if + call util_sort(-tp%peri(1:ntp), ind(1:ntp)) end if + case("atp") + if (ascending) then + call util_sort(tp%atp(1:ntp), ind(1:ntp)) + else + call util_sort(-tp%atp(1:ntp), ind(1:ntp)) + end if + case default + call util_sort_body(tp, sortby, ascending) + return + end select + + call tp%rearrange(ind) + end associate + + return + end subroutine util_sort_tp + + module subroutine util_sort_rearrange_body(self, ind) + !! author: David A. Minton + !! + !! Rearrange Swiftest body structure in-place from an index list. + !! This is a helper utility used to make polymorphic sorting work on Swiftest structures. + implicit none + ! Arguments + class(swiftest_body), intent(inout) :: self !! Swiftest body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + ! Internals + class(swiftest_body), allocatable :: body_sorted !! Temporary holder for sorted body + + associate(n => self%nbody) + allocate(body_sorted, source=self) + self%id(1:n) = body_sorted%id(ind(1:n)) + self%name(1:n) = body_sorted%name(ind(1:n)) + self%status(1:n) = body_sorted%status(ind(1:n)) + self%ldiscard(1:n) = body_sorted%ldiscard(ind(1:n)) + self%xh(:,1:n) = body_sorted%xh(:,ind(1:n)) + self%vh(:,1:n) = body_sorted%vh(:,ind(1:n)) + self%xb(:,1:n) = body_sorted%xb(:,ind(1:n)) + self%vb(:,1:n) = body_sorted%vb(:,ind(1:n)) + self%ah(:,1:n) = body_sorted%ah(:,ind(1:n)) + self%aobl(:,1:n) = body_sorted%aobl(:,ind(1:n)) + self%atide(:,1:n) = body_sorted%atide(:,ind(1:n)) + self%agr(:,1:n) = body_sorted%agr(:,ind(1:n)) + self%ir3h(1:n) = body_sorted%ir3h(ind(1:n)) + self%a(1:n) = body_sorted%a(ind(1:n)) + self%e(1:n) = body_sorted%e(ind(1:n)) + self%inc(1:n) = body_sorted%inc(ind(1:n)) + self%capom(1:n) = body_sorted%capom(ind(1:n)) + self%omega(1:n) = body_sorted%omega(ind(1:n)) + self%capm(1:n) = body_sorted%capm(ind(1:n)) + self%mu(1:n) = body_sorted%mu(ind(1:n)) + deallocate(body_sorted) + end associate + return + end subroutine util_sort_rearrange_body + + module subroutine util_sort_rearrange_pl(self, ind) + !! author: David A. Minton + !! + !! Rearrange Swiftest massive body structure in-place from an index list. + !! This is a helper utility used to make polymorphic sorting work on Swiftest structures. + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + ! Internals + class(swiftest_pl), allocatable :: pl_sorted !! Temporary holder for sorted body + + associate(pl => self, npl => self%nbody) + call util_sort_rearrange_body(pl,ind) + allocate(pl_sorted, source=self) + pl%mass(1:npl) = pl_sorted%mass(ind(1:npl)) + pl%Gmass(1:npl) = pl_sorted%Gmass(ind(1:npl)) + pl%rhill(1:npl) = pl_sorted%rhill(ind(1:npl)) + pl%radius(1:npl) = pl_sorted%radius(ind(1:npl)) + pl%xbeg(:,1:npl) = pl_sorted%xbeg(:,ind(1:npl)) + pl%xend(:,1:npl) = pl_sorted%xend(:,ind(1:npl)) + pl%vbeg(:,1:npl) = pl_sorted%vbeg(:,ind(1:npl)) + pl%density(1:npl) = pl_sorted%density(ind(1:npl)) + pl%Ip(:,1:npl) = pl_sorted%Ip(:,ind(1:npl)) + pl%rot(:,1:npl) = pl_sorted%rot(:,ind(1:npl)) + pl%k2(1:npl) = pl_sorted%k2(ind(1:npl)) + pl%Q(1:npl) = pl_sorted%Q(ind(1:npl)) + pl%tlag(1:npl) = pl_sorted%tlag(ind(1:npl)) + deallocate(pl_sorted) + end associate + return + end subroutine util_sort_rearrange_pl + + module subroutine util_sort_rearrange_tp(self, ind) + !! author: David A. Minton + !! + !! Rearrange Swiftest massive body structure in-place from an index list. + !! This is a helper utility used to make polymorphic sorting work on Swiftest structures. + implicit none + ! Arguments + class(swiftest_tp), intent(inout) :: self !! Swiftest test particle object + integer(I4B), dimension(:), intent(in) :: ind !! Index array used to restructure the body (should contain all 1:n index values in the desired order) + ! Internals + class(swiftest_tp), allocatable :: tp_sorted !! Temporary holder for sorted body + + associate(tp => self, ntp => self%nbody) + call util_sort_rearrange_body(tp,ind) + allocate(tp_sorted, source=self) + tp%isperi(1:ntp) = tp_sorted%isperi(ind(1:ntp)) + tp%peri(1:ntp) = tp_sorted%peri(ind(1:ntp)) + tp%atp(1:ntp) = tp_sorted%atp(ind(1:ntp)) + deallocate(tp_sorted) + end associate + return + end subroutine util_sort_rearrange_tp + + module subroutine util_sort_dp(arr) + !! author: David A. Minton + !! + !! Sort input double precision array in place into ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + !! + implicit none + ! Arguments + real(DP), dimension(:), intent(inout) :: arr + ! Internals + real(DP) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + do i = 2, n + tmp = arr(i) + do j = i - 1, 1, -1 + if (arr(j) <= tmp) exit + arr(j + 1) = arr(j) + end do + arr(j + 1) = tmp + end do + return + end subroutine util_sort_dp + + module subroutine util_sort_index_dp(arr, ind) + !! author: David A. Minton + !! + !! Sort input double precision array by index in ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + !! + implicit none + ! Arguments + real(DP), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + ! Internals + real(DP) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + ind = [(i, i=1, n)] + do i = 2, n + tmp = arr(ind(i)) + do j = i - 1, 1, -1 + if (arr(ind(j)) <= tmp) exit + ind(j + 1) = ind(j) + end do + ind(j + 1) = i + end do + return + end subroutine util_sort_index_dp + + module subroutine util_sort_i4b(arr) + !! author: David A. Minton + !! + !! Sort input integer array in place into ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + !! + implicit none + ! Arguments + integer(I4B), dimension(:), intent(inout) :: arr + ! Internals + integer(I4B) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + do i = 2, n + tmp = arr(i) + do j = i - 1, 1, -1 + if (arr(j) <= tmp) exit + arr(j + 1) = arr(j) + end do + arr(j + 1) = tmp + end do + return + end subroutine util_sort_i4b + + module subroutine util_sort_index_i4b(arr, ind) + !! author: David A. Minton + !! + !! Sort input integer array by index in ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + !! + implicit none + ! Arguments + integer(I4B), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + ! Internals + integer(I4B) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + ind = [(i, i=1, n)] + do i = 2, n + tmp = arr(ind(i)) + do j = i - 1, 1, -1 + if (arr(ind(j)) <= tmp) exit + ind(j + 1) = ind(j) + end do + ind(j + 1) = i + end do + return + end subroutine util_sort_index_i4b + + module subroutine util_sort_sp(arr) + !! author: David A. Minton + !! + !! Sort input single precision array in place into ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + ! + implicit none + ! Arguments + real(SP), dimension(:), intent(inout) :: arr + ! Internals + real(SP) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + do i = 2, n + tmp = arr(i) + do j = i - 1, 1, -1 + if (arr(j) <= tmp) exit + arr(j + 1) = arr(j) end do - - return - - end subroutine util_sort_sp + arr(j + 1) = tmp + end do + return + end subroutine util_sort_sp + + module subroutine util_sort_index_sp(arr, ind) + !! author: David A. Minton + !! + !! Sort input single precision array by index in ascending numerical order using insertion sort. + !! This algorithm works well for partially sorted arrays (which is usually the case here) + !! + implicit none + ! Arguments + real(SP), dimension(:), intent(in) :: arr + integer(I4B), dimension(:), intent(out) :: ind + ! Internals + real(SP) :: tmp + integer(I4B) :: n, i, j + + n = size(arr) + ind = [(i, i=1, n)] + do i = 2, n + tmp = arr(ind(i)) + do j = i - 1, 1, -1 + if (arr(ind(j)) <= tmp) exit + ind(j + 1) = ind(j) + end do + ind(j + 1) = i + end do + return + end subroutine util_sort_index_sp end submodule s_util_sort diff --git a/src/util/util_valid.f90 b/src/util/util_valid.f90 index ac81673ca..ac9cc2fad 100644 --- a/src/util/util_valid.f90 +++ b/src/util/util_valid.f90 @@ -32,7 +32,6 @@ module subroutine util_valid(pl, tp) call util_exit(FAILURE) end if end do - deallocate(idarr) end associate return diff --git a/src/whm/whm_setup.f90 b/src/whm/whm_setup.f90 index 1f098df26..940ba0b26 100644 --- a/src/whm/whm_setup.f90 +++ b/src/whm/whm_setup.f90 @@ -71,7 +71,7 @@ module subroutine whm_util_set_mu_eta_pl(self, cb) end subroutine whm_util_set_mu_eta_pl - module subroutine whm_setup_system(self, param) + module subroutine whm_setup_initialize_system(self, param) !! author: David A. Minton !! !! Initialize a WHM nbody system from files @@ -91,29 +91,6 @@ module subroutine whm_setup_system(self, param) call self%tp%v2pv(param) end if - end subroutine whm_setup_system - - module subroutine whm_setup_set_ir3j(self) - !! author: David A. Minton - !! - !! Sets the inverse Jacobi and heliocentric radii cubed (1/rj**3 and 1/rh**3) - implicit none - ! Arguments - class(whm_pl), intent(inout) :: self !! WHM massive body object - ! Internals - integer(I4B) :: i - real(DP) :: r2, ir - - if (self%nbody > 0) then - do i = 1, self%nbody - r2 = dot_product(self%xh(:, i), self%xh(:, i)) - ir = 1.0_DP / sqrt(r2) - self%ir3h(i) = ir / r2 - r2 = dot_product(self%xj(:, i), self%xj(:, i)) - ir = 1.0_DP / sqrt(r2) - self%ir3j(i) = ir / r2 - end do - end if - end subroutine whm_setup_set_ir3j + end subroutine whm_setup_initialize_system end submodule s_whm_setup \ No newline at end of file diff --git a/src/whm/whm_util.f90 b/src/whm/whm_util.f90 index 275130df9..67c7ef4a1 100644 --- a/src/whm/whm_util.f90 +++ b/src/whm/whm_util.f90 @@ -89,4 +89,27 @@ module subroutine whm_util_fill_pl(self, inserts, lfill_list) end subroutine whm_util_fill_pl + module subroutine whm_util_set_ir3j(self) + !! author: David A. Minton + !! + !! Sets the inverse Jacobi and heliocentric radii cubed (1/rj**3 and 1/rh**3) + implicit none + ! Arguments + class(whm_pl), intent(inout) :: self !! WHM massive body object + ! Internals + integer(I4B) :: i + real(DP) :: r2, ir + + if (self%nbody > 0) then + do i = 1, self%nbody + r2 = dot_product(self%xh(:, i), self%xh(:, i)) + ir = 1.0_DP / sqrt(r2) + self%ir3h(i) = ir / r2 + r2 = dot_product(self%xj(:, i), self%xj(:, i)) + ir = 1.0_DP / sqrt(r2) + self%ir3j(i) = ir / r2 + end do + end if + end subroutine whm_util_set_ir3j + end submodule s_whm_util