diff --git a/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb b/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb index 6e6f73783..5538aa1c6 100644 --- a/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb +++ b/examples/helio_swifter_comparison/swiftest_vs_swifter.ipynb @@ -20,26 +20,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Reading Swifter file param.swifter.in\n" - ] - }, - { - "ename": "ValueError", - "evalue": "must supply at least one object to concatenate", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mStopIteration\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m~/.conda/envs/cent7/2020.02-py37/swiftestOOF/lib/python3.7/site-packages/xarray/core/concat.py\u001b[0m in \u001b[0;36mconcat\u001b[0;34m(objs, dim, data_vars, coords, compat, positions, fill_value, join, combine_attrs)\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 220\u001b[0;31m \u001b[0mfirst_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobjs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpeek_at\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobjs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 221\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/cent7/2020.02-py37/swiftestOOF/lib/python3.7/site-packages/xarray/core/utils.py\u001b[0m in \u001b[0;36mpeek_at\u001b[0;34m(iterable)\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[0mgen\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 193\u001b[0;31m \u001b[0mpeek\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 194\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mpeek\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mitertools\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpeek\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mStopIteration\u001b[0m: ", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mswiftersim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mswiftest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSimulation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparam_file\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"param.swifter.in\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcodename\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Swifter\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mswiftersim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin2xr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/git/swiftest/python/swiftest/swiftest/simulation_class.py\u001b[0m in \u001b[0;36mbin2xr\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Swiftest simulation data stored as xarray DataSet .ds'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcodename\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"Swifter\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 139\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswifter2xr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparam\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 140\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Swifter simulation data stored as xarray DataSet .ds'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcodename\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"Swift\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/git/swiftest/python/swiftest/swiftest/io.py\u001b[0m in \u001b[0;36mswifter2xr\u001b[0;34m(param)\u001b[0m\n\u001b[1;32m 568\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstdout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 569\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 570\u001b[0;31m \u001b[0mplda\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mxr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 571\u001b[0m \u001b[0mtpda\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mxr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 572\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.conda/envs/cent7/2020.02-py37/swiftestOOF/lib/python3.7/site-packages/xarray/core/concat.py\u001b[0m in \u001b[0;36mconcat\u001b[0;34m(objs, dim, data_vars, coords, compat, positions, fill_value, join, combine_attrs)\u001b[0m\n\u001b[1;32m 220\u001b[0m \u001b[0mfirst_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobjs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpeek_at\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobjs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 221\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 222\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"must supply at least one object to concatenate\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 223\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 224\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcompat\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0m_VALID_COMPAT\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: must supply at least one object to concatenate" + "Reading Swifter file param.swifter.in\n", + "Reading in time 1.000e+00\n", + "Creating Dataset\n", + "Successfully converted 1462 output frames.\n", + "Swifter simulation data stored as xarray DataSet .ds\n" ] } ], @@ -50,9 +35,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading Swiftest file param.swiftest.in\n", + "Reading in time 1.001e+00\n", + "Creating Dataset\n", + "Successfully converted 1463 output frames.\n", + "Swiftest simulation data stored as xarray DataSet .ds\n" + ] + } + ], "source": [ "swiftestsim = swiftest.Simulation(param_file=\"param.swiftest.in\")\n", "swiftestsim.bin2xr()" @@ -60,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -78,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -88,56 +85,132 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "swiftdiff['dr'].plot.line(x=\"time (y)\")" + "pldiff = swiftdiff.where(np.invert(np.isnan(swiftdiff['Mass'])), drop=True)\n", + "tpdiff = swiftdiff.where(np.isnan(swiftdiff['Mass']), drop=True)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEGCAYAAABLgMOSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAYbUlEQVR4nO3dfbRVdb3v8ff3bCBK8JAC8rBB0DBANAQOWJmhHbjgqQilhqilVpfqaMNux5ueGvd0HXecsjrd1OzkoCcrG3I79iAZagp67WIcJREfIorQcgsmcTIRJNjwvX+sZXez74a9mOup3Xq/xthjrznnb/7m9xe2Pvs351pzRmYiSdLh+qtmFyBJ6psMEElSIQaIJKkQA0SSVIgBIkkqpF+zC2ikoUOH5rhx45pdhiT1KT/96U9/l5nDuq9vqQAZN24ca9eubXYZktSnRMSve1rvKSxJUiEGiCSpEANEklRIS10DkaRm2Lt3Lx0dHezevbvZpRzSwIEDaW9vp3///hW1N0Akqc46OjoYPHgw48aNIyKaXU6PMpPt27fT0dHB+PHjK9rHU1iSVGe7d+/m6KOP/rMND4CI4Oijjz6sWZIBIkkN8OccHi853BoNEElSIQaIJPURr3vd63pcf9FFF3HLLbc0uBoDRJL6jPvvv7/ZJRzAT2FJUh8xaNAgXnjhBTKTD37wg6xatYrx48fTrCfLOgORpD7me9/7Hhs3buTRRx/lS1/6UtNmJgaIJPUx9913H4sXL6atrY1Ro0Zx5plnNqUOA0SS+qA/h48FGyCS1MecfvrpLFu2jH379rF161buueeeptThRXRJ6mMWLlzIqlWrOOmkkzjhhBN44xvf2JQ6DBBJ6iNeeOEFoHT66vrrr29yNZ7CkiQVZIBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklrEu9/9boYPH86UKVNq0p8BIkkt4qKLLuKOO+6oWX9NDZCImBcRGyNiU0Rc2cP2iIjrytsfiYhp3ba3RcS6iLitcVVLUt90+umnc9RRR9Wsv6Z9Ez0i2oAvAHOADuDBiFiemT/r0mw+MKH8Mwv4Yvn3Sy4DNgBHNqRoSarSVT94nJ9teb6mfU4edSQff8uJNe2zEs2cgcwENmXm5szcAywDFnRrswD4RpasAYZExEiAiGgH/g74ciOLliSVNPNeWKOBp7osd3Dg7OJgbUYDW4FrgI8Agw91kIhYAiwBGDt2bFUFS1K1mjFTqJdmzkB6upl99+cy9tgmIt4MPJuZP+3tIJm5NDNnZOaMYcOGFalTktSDZgZIBzCmy3I7sKXCNq8H3hoRT1I69XVmRNxUv1Ilqe9bvHgxr33ta9m4cSPt7e185Stfqaq/Zp7CehCYEBHjgaeBc4HzurVZDlwaEcsond76Q2ZuBf6x/ENEzAYuz8wLGlS3JPVJN998c037a1qAZGZnRFwK3Am0AV/NzMcj4v3l7TcAK4CzgE3ALuDiZtUrSTpQUx8olZkrKIVE13U3dHmdwCW99HEvcG8dypMkHYLfRJckFWKASJIKMUAkSYUYIJKkQgwQSWoBTz31FGeccQaTJk3ixBNP5Nprr626z6Z+CkuS1Bj9+vXjs5/9LNOmTWPHjh1Mnz6dOXPmMHny5MJ9OgORpBYwcuRIpk0rPRFj8ODBTJo0iaeffrqqPp2BSFIj3X4lPPNobfsccRLMv7ri5k8++STr1q1j1qzu9689PM5AJKmFvPDCC5xzzjlcc801HHlkdY9ScgYiSY10GDOFWtu7dy/nnHMO559/PmeffXbV/TkDkaQWkJm85z3vYdKkSXz4wx+uSZ8GiCS1gNWrV/PNb36TVatWMXXqVKZOncqKFSt63/EQPIUlSS3gtNNOo3R/2tpxBiJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCS1gN27dzNz5kxe85rXcOKJJ/Lxj3+86j79HogktYCXvexlrFq1ikGDBrF3715OO+005s+fz6mnnlq4T2cgktQCIoJBgwYBpXti7d27l4ioqk9nIJLUQJ964FP8/D9+XtM+Jx41kStmXtFru3379jF9+nQ2bdrEJZdc4u3cJUmVaWtr4+GHH6ajo4MHHniAxx57rKr+nIFIUgNVMlOotyFDhjB79mzuuOMOpkyZUrgfZyCS1AK2bdvGc889B8CLL77I3XffzcSJE6vq0xmIJLWArVu3cuGFF7Jv3z7279/PO97xDt785jdX1acBIkkt4OSTT2bdunU17dNTWJKkQgwQSVIhTQ2QiJgXERsjYlNEXNnD9oiI68rbH4mIaeX1YyLinojYEBGPR8Rlja9eklpb0wIkItqALwDzgcnA4oiY3K3ZfGBC+WcJ8MXy+k7gHzJzEnAqcEkP+0qS6qiZM5CZwKbM3JyZe4BlwIJubRYA38iSNcCQiBiZmVsz8yGAzNwBbABGN7J4SWp1zQyQ0cBTXZY7+P9DoNc2ETEOOAX499qXKEk6mGYGSE938crDaRMRg4DvAB/KzOd7PEjEkohYGxFrt23bVrhYSfpLsG/fPk455ZSqvwMCzQ2QDmBMl+V2YEulbSKiP6Xw+FZmfvdgB8nMpZk5IzNnDBs2rCaFS1Jfde211zJp0qSa9NXMAHkQmBAR4yNiAHAusLxbm+XAu8qfxjoV+ENmbo3SPYi/AmzIzP/Z2LIlqW/q6Ojghz/8Ie9973tr0l/TvomemZ0RcSlwJ9AGfDUzH4+I95e33wCsAM4CNgG7gIvLu78eeCfwaEQ8XF730cxc0cAhSNJhe+YTn+CPG2p7O/eXTZrIiI9+tNd2H/rQh/j0pz/Njh07anLcpt7KpPyGv6Lbuhu6vE7gkh72+z/0fH1EktSD2267jeHDhzN9+nTuvffemvTpvbAkqYEqmSnUw+rVq1m+fDkrVqxg9+7dPP/881xwwQXcdNNNhfv0ViaS1AI++clP0tHRwZNPPsmyZcs488wzqwoPMEAkSQV5CkuSWszs2bOZPXt21f04A5EkFWKASJIKMUAkSYUYIJKkQgwQSVIhBogkqRA/xitJLWLcuHEMHjyYtrY2+vXrx9q1a6vqzwCRpBZyzz33MHTo0Jr05SksSVIhzkAkqYF+/O1f8LunXqhpn0PHDOIN7zih13YRwdy5c4kI3ve+97FkyZKqjmuASFKLWL16NaNGjeLZZ59lzpw5TJw4kdNPP71wfwaIJDVQJTOFehk1ahQAw4cPZ+HChTzwwANVBYjXQCSpBezcufNPTyLcuXMnP/rRj5gyZUpVfToDkaQW8Nvf/paFCxcC0NnZyXnnnce8efOq6tMAkaQWcNxxx7F+/fqa9ukpLElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJKlFPPfccyxatIiJEycyadIkfvKTn1TVn98DkaQWcdlllzFv3jxuueUW9uzZw65du6rqzwCRpBbw/PPPc99993HjjTcCMGDAAAYMGFBVnwaIJDXQPTcu5dlfb65pn8OPPY4zLjr0rdk3b97MsGHDuPjii1m/fj3Tp0/n2muv5Ygjjih8XK+BSFIL6Ozs5KGHHuIDH/gA69at44gjjuDqq6+uqk9nIJLUQL3NFOqlvb2d9vZ2Zs2aBcCiRYuqDpBeZyAR0RYR/6Wqoxy873kRsTEiNkXElT1sj4i4rrz9kYiYVum+kqT/Z8SIEYwZM4aNGzcCsHLlSiZPnlxVn73OQDJzX0QsAD5X1ZG6iYg24AvAHKADeDAilmfmz7o0mw9MKP/MAr4IzKpwX0lSF5///Oc5//zz2bNnD8cddxxf+9rXquqv0lNYqyPieuB/ATtfWpmZD1Vx7JnApszcDBARy4AFQNcQWAB8IzMTWBMRQyJiJDCugn1r5sZ/+AQvDuhfj64ltYDpb3kDz3Y809Qa+rcFU6dOZe3atTXrs9IAeV3591Xl3wEkcGYVxx4NPNVluYPSLKO3NqMr3LdUaMQSYAnA2LFjCxW6P9p4sd++QvtKUgbsj2xuDftrf/xDBkhEfLj88jZKgRFd66ny2NHDuu59HqxNJfuWVmYuBZYCzJgxo1DN7/6XK4rsJkkAbNiwgRGjRza7jJrrbQYyuPz71cDfALdSevN+C3BflcfuAMZ0WW4HtlTYZkAF+0qS6uiQAZKZVwFExI+AaZm5o7z834F/q/LYDwITImI88DRwLnBetzbLgUvL1zhmAX/IzK0Rsa2CfSVJdVTpNZCxwJ4uy3soXcguLDM7I+JS4E6gDfhqZj4eEe8vb78BWAGcBWwCdgEXH2rfauqRJB2eSgPkm8ADEfE9StcaFgJfr/bgmbmCUkh0XXdDl9cJXFLpvpKkxqnoViaZ+c+U/vr/PfAccHFmfrKOdUmSamjjxo1MnTr1Tz9HHnkk11xzTVV9Vnwrk/J3Pqr53ockqUle/epX8/DDDwOwb98+Ro8ezcKFC6vq05spSlKLWblyJccffzzHHntsVf14M0VJaqDnfvAr9mzZ2XvDwzBg1BEMecvxFbdftmwZixcvrvq4zkAkqYXs2bOH5cuX8/a3v73qvpyBSFIDHc5MoR5uv/12pk2bxjHHHFN1X85AJKmF3HzzzTU5fQUGiCS1jF27dnHXXXdx9tln16Q/T2FJUot4xStewfbt22vWnzMQSVIhBogkqRADRJJUiAEiSSrEAJEkFWKASJIKMUAkqUV87nOf48QTT2TKlCksXryY3bt3V9WfASJJLeDpp5/muuuuY+3atTz22GPs27ePZcuWVdWnASJJLaKzs5MXX3yRzs5Odu3axahRo6rqz2+iS1ID3X777TzzzDM17XPEiBHMnz//kG1Gjx7N5ZdfztixY3n5y1/O3LlzmTt3blXHdQYiSS3g97//PbfeeitPPPEEW7ZsYefOndx0001V9ekMRJIaqLeZQr3cfffdjB8/nmHDhgFw9tlnc//993PBBRcU7tMZiCS1gLFjx7JmzRp27dpFZrJy5UomTZpUVZ8GiCS1gFmzZrFo0SKmTZvGSSedxP79+1myZElVfXoKS5JaxFVXXcVVV11Vs/6cgUiSCjFAJEmFGCCS1ACZ2ewSenW4NRogklRnAwcOZPv27X/WIZKZbN++nYEDB1a8jxfRJanO2tvb6ejoYNu2bc0u5ZAGDhxIe3t7xe0NEEmqs/79+zN+/Phml1FzTTmFFRFHRcRdEfHL8u9XHqTdvIjYGBGbIuLKLus/ExE/j4hHIuJ7ETGkYcVLkoDmXQO5EliZmROAleXlA0REG/AFYD4wGVgcEZPLm+8CpmTmycAvgH9sSNWSpD9pVoAsAL5efv114G09tJkJbMrMzZm5B1hW3o/M/FFmdpbbrQEqP2knSaqJZgXIMZm5FaD8e3gPbUYDT3VZ7iiv6+7dwO01r1CSdEh1u4geEXcDI3rY9LFKu+hh3QGfgYuIjwGdwLcOUccSYAmUbiYmSaqNugVIZv7twbZFxG8jYmRmbo2IkcCzPTTrAMZ0WW4HtnTp40LgzcCb8hAfrs7MpcBSgBkzZvz5fghbkvqYZp3CWg5cWH59IXBrD20eBCZExPiIGACcW96PiJgHXAG8NTN3NaBeSVI3zQqQq4E5EfFLYE55mYgYFRErAMoXyS8F7gQ2AN/OzMfL+18PDAbuioiHI+KGRg9AklpdU75ImJnbgTf1sH4LcFaX5RXAih7avaquBUqSeuW9sCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQVYoBIkgoxQCRJhRggkqRCDBBJUiEGiCSpEANEklSIASJJKsQAkSQV0pQAiYijIuKuiPhl+fcrD9JuXkRsjIhNEXFlD9svj4iMiKH1r1qS1FWzZiBXAiszcwKwsrx8gIhoA74AzAcmA4sjYnKX7WOAOcBvGlKxJOkAzQqQBcDXy6+/DrythzYzgU2ZuTkz9wDLyvu95HPAR4CsY52SpINoVoAck5lbAcq/h/fQZjTwVJfljvI6IuKtwNOZub63A0XEkohYGxFrt23bVn3lkiQA+tWr44i4GxjRw6aPVdpFD+syIl5R7mNuJZ1k5lJgKcCMGTOcrUhSjdQtQDLzbw+2LSJ+GxEjM3NrRIwEnu2hWQcwpstyO7AFOB4YD6yPiJfWPxQRMzPzmZoNQJJ0SM06hbUcuLD8+kLg1h7aPAhMiIjxETEAOBdYnpmPZubwzByXmeMoBc00w0OSGqtZAXI1MCcifknpk1RXA0TEqIhYAZCZncClwJ3ABuDbmfl4k+qVJHVTt1NYh5KZ24E39bB+C3BWl+UVwIpe+hpX6/okSb3zm+iSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFGCCSpEIMEElSIQaIJKkQA0SSVIgBIkkqxACRJBVigEiSCjFAJEmFRGY2u4aGiYhtwK8L7j4U+F0Ny+kLHHNrcMytoZoxH5uZw7qvbKkAqUZErM3MGc2uo5Ecc2twzK2hHmP2FJYkqRADRJJUiAFSuaXNLqAJHHNrcMytoeZj9hqIJKkQZyCSpEIMEElSIQZINxExLyI2RsSmiLiyh+0REdeVtz8SEdOaUWctVTDm88tjfSQi7o+I1zSjzlrqbcxd2v1NROyLiEWNrK/WKhlvRMyOiIcj4vGI+N+NrrHWKvjv+q8j4gcRsb485oubUWctRcRXI+LZiHjsINtr+/6Vmf6Uf4A24FfAccAAYD0wuVubs4DbgQBOBf692XU3YMyvA15Zfj2/Fcbcpd0qYAWwqNl11/nfeAjwM2BseXl4s+tuwJg/Cnyq/HoY8B/AgGbXXuW4TwemAY8dZHtN37+cgRxoJrApMzdn5h5gGbCgW5sFwDeyZA0wJCJGNrrQGup1zJl5f2b+vry4BmhvcI21Vsm/M8AHge8AzzayuDqoZLznAd/NzN8AZGYrjDmBwRERwCBKAdLZ2DJrKzPvozSOg6np+5cBcqDRwFNdljvK6w63TV9yuON5D6W/YPqyXsccEaOBhcANDayrXir5Nz4BeGVE3BsRP42IdzWsuvqoZMzXA5OALcCjwGWZub8x5TVNTd+/+lVdzl+W6GFd9885V9KmL6l4PBFxBqUAOa2uFdVfJWO+BrgiM/eV/kDt0yoZbz9gOvAm4OXATyJiTWb+ot7F1UklY/5PwMPAmcDxwF0R8ePMfL7OtTVTTd+/DJADdQBjuiy3U/rr5HDb9CUVjSciTga+DMzPzO0Nqq1eKhnzDGBZOTyGAmdFRGdmfr8hFdZWpf9d/y4zdwI7I+I+4DVAXw2QSsZ8MXB1li4ObIqIJ4CJwAONKbEpavr+5SmsAz0ITIiI8RExADgXWN6tzXLgXeVPM5wK/CEztza60BrqdcwRMRb4LvDOPvwXaVe9jjkzx2fmuMwcB9wC/H0fDQ+o7L/rW4E3RES/iHgFMAvY0OA6a6mSMf+G0oyLiDgGeDWwuaFVNl5N37+cgXSRmZ0RcSlwJ6VPcXw1Mx+PiPeXt99A6RM5ZwGbgF2U/orpsyoc8z8BRwP/Wv6LvDP78J1MKxzzX4xKxpuZGyLiDuARYD/w5czs8aOgfUGF/8b/A7gxIh6ldGrniszs07d4j4ibgdnA0IjoAD4O9If6vH95KxNJUiGewpIkFWKASJIKMUAkSYUYIJKkQgwQSVIhBohUUEQMiYi/77I8KiJuqdOx3hYR/9RLm3+JiDPrcXypJ36MVyooIsYBt2XmlAYc637grYf6nkJEHAt8KTPn1rseCZyBSNW4Gji+/AyNz0TEuJeewxARF0XE98vPm3giIi6NiA9HxLqIWBMRR5XbHR8Rd5RvYPjjiJjY/SARcQLwx8z8XUQMLvfXv7ztyIh4MiL6Z+avgaMjYkQD/zdQCzNApOKuBH6VmVMz87/2sH0KpdukzwT+GdiVmacAPwFeutvtUuCDmTkduBz41x76eT3wEEBm7gDuBf6uvO1c4DuZube8/FC5vVR33spEqp97ym/4OyLiD8APyusfBU6OiEGUHtb1b13u+PuyHvoZCWzrsvxl4CPA9yndiuI/d9n2LDCqVgOQDsUAkernj11e7++yvJ/S//f+CnguM6f20s+LwF+/tJCZq8uny94ItHW7Z9XAcnup7jyFJRW3AxhcdOfycyeeiIi3w5+eV93T8+Y3AK/qtu4bwM3A17qtPwHoszdBVN9igEgFlZ+LsjoiHouIzxTs5nzgPRGxHnicnh+tex9wShz4ZKtvAa+kFCIAlC+svwpYW7AW6bD4MV6pD4iIa4EfZObd5eVFwILMfGeXNguBaZn535pUplqM10CkvuETlB7yRER8HphP6bkOXfUDPtvgutTCnIFIkgrxGogkqRADRJJUiAEiSSrEAJEkFWKASJIK+b8y4UNa7aeHlAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "swiftdiff['dv'].sel(id=2).plot.line(x=\"time (y)\")" + "pldiff['dr'].plot.line(x=\"time (y)\")\n", + "print()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], - "source": [ - "swiftdiff['pz'].plot.line(x=\"time (y)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "swiftdiff['vx'].plot.line(x=\"time (y)\")" + "tpdiff['dr'].plot.line(x=\"time (y)\")\n", + "print()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "swiftdiff['vy'].plot.line(x=\"time (y)\")" + "pldiff['dv'].plot.line(x=\"time (y)\")\n", + "print()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "swiftdiff['vz'].plot.line(x=\"time (y)\")" + "tpdiff['dv'].plot.line(x=\"time (y)\")\n", + "print()" ] }, { diff --git a/src/helio/helio_step.f90 b/src/helio/helio_step.f90 index 6c8da9d54..59997afeb 100644 --- a/src/helio/helio_step.f90 +++ b/src/helio/helio_step.f90 @@ -53,9 +53,9 @@ module subroutine helio_step_pl(self, system, param, t, dt) call pl%lindrift(system, dth, ptb) call pl%get_accel(system, param, t) call pl%kick(dth) - call system%set_beg_end(xbeg = pl%xh) + call pl%set_beg_end(xbeg = pl%xh) call pl%drift(system, param, dt) - call system%set_beg_end(xend = pl%xh) + call pl%set_beg_end(xend = pl%xh) call pl%get_accel(system, param, t + dt) call pl%kick(dth) call pl%lindrift(system, dth, pte) @@ -87,17 +87,17 @@ module subroutine helio_step_tp(self, system, param, t, dt) select type(system) class is (helio_nbody_system) - associate(tp => self, cb => system%cb, pl => system%pl, xbeg => system%xbeg, xend => system%xend, ptb => system%ptb, pte => system%pte) + associate(tp => self, cb => system%cb, pl => system%pl, ptb => system%ptb, pte => system%pte) dth = 0.5_DP * dt if (tp%lfirst) then call tp%vh2vb(vbcb = -ptb) tp%lfirst = .false. end if call tp%lindrift(system, dth, ptb) - call tp%get_accel(system, param, t, xbeg) + call tp%get_accel(system, param, t, pl%xbeg) call tp%kick(dth) call tp%drift(system, param, dt) - call tp%get_accel(system, param, t + dt, xend) + call tp%get_accel(system, param, t + dt, pl%xend) call tp%kick(dth) call tp%lindrift(system, dth, pte) call tp%vb2vh(vbcb = -pte) diff --git a/src/modules/rmvs_classes.f90 b/src/modules/rmvs_classes.f90 index 136bd3f37..905092892 100644 --- a/src/modules/rmvs_classes.f90 +++ b/src/modules/rmvs_classes.f90 @@ -29,7 +29,6 @@ module rmvs_classes !> 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, public :: set_beg_end => rmvs_setup_set_beg_end !! Sets the beginning and ending values of planet positions. Also adds the end velocity for RMVS. end type rmvs_nbody_system type, private :: rmvs_interp @@ -145,12 +144,6 @@ module subroutine rmvs_setup_pl(self,n) integer, intent(in) :: n !! Number of test particles to allocate end subroutine rmvs_setup_pl - module subroutine rmvs_setup_set_beg_end(self, xbeg, xend, vbeg) - implicit none - class(rmvs_nbody_system), intent(inout) :: self !! RMVS nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg - end subroutine rmvs_setup_set_beg_end - module subroutine rmvs_setup_system(self, param) use swiftest_classes, only : swiftest_parameters implicit none diff --git a/src/modules/swiftest_classes.f90 b/src/modules/swiftest_classes.f90 index a1d4d4f78..0094782fd 100644 --- a/src/modules/swiftest_classes.f90 +++ b/src/modules/swiftest_classes.f90 @@ -19,8 +19,8 @@ module swiftest_classes setup_set_rhill, setup_tp public :: user_getacch_body public :: util_coord_b2h_pl, util_coord_b2h_tp, util_coord_h2b_pl, util_coord_h2b_tp, util_copy_body, util_copy_cb, util_copy_pl, & - util_copy_tp, util_copy_system, util_fill_body, util_fill_pl, util_fill_tp, util_reverse_status, util_spill_body, & - util_spill_pl, util_spill_tp + util_copy_tp, util_copy_system, util_fill_body, util_fill_pl, util_fill_tp, util_reverse_status, util_set_beg_end, & + util_spill_body, util_spill_pl, util_spill_tp !******************************************************************************************************************************** ! swiftest_parameters class definitions @@ -198,23 +198,27 @@ module swiftest_classes integer(I4B), dimension(:,:), allocatable :: k_eucl !! Index array that converts i, j array indices into k index for use in !! the Euclidean distance matrix real(DP), dimension(:), allocatable :: irij3 !! 1.0_DP / (rji2 * sqrt(rji2)) where rji2 is the square of the Euclidean distance + real(DP), dimension(:,:), allocatable :: xbeg !! Position at beginning of step + real(DP), dimension(:,:), allocatable :: xend !! Position at end of step + real(DP), dimension(:,:), allocatable :: vbeg !! Velocity at beginning of step !! Note to developers: If you add components to this class, be sure to update methods and subroutines that traverse the !! component list, such as setup_pl and util_spill_pl contains private ! Massive body-specific concrete methods ! These are concrete because they are the same implemenation for all integrators - procedure, public :: discard => discard_pl !! Placeholder method for discarding massive bodies - procedure, public :: eucl_index => eucl_dist_index_plpl !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix - procedure, public :: eucl_irij3 => eucl_irij3_plpl !! Parallelized single loop blocking for Euclidean distance matrix calcualtion - procedure, public :: setup => setup_pl !! A base constructor that sets the number of bodies and allocates and initializes all arrays - procedure, public :: set_mu => setup_set_mu_pl !! Method used to construct the vectorized form of the central body mass - procedure, public :: set_rhill => setup_set_rhill !! Calculates the Hill's radii for each body - procedure, public :: h2b => util_coord_h2b_pl !! Convert massive bodies from heliocentric to barycentric coordinates (position and velocity) - procedure, public :: b2h => util_coord_b2h_pl !! Convert massive bodies from barycentric to heliocentric coordinates (position and velocity) - procedure, public :: copy => util_copy_pl !! Copies elements of one object to another. - procedure, public :: fill => util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) - procedure, public :: spill => util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) + procedure, public :: discard => discard_pl !! Placeholder method for discarding massive bodies + procedure, public :: eucl_index => eucl_dist_index_plpl !! Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix + procedure, public :: eucl_irij3 => eucl_irij3_plpl !! Parallelized single loop blocking for Euclidean distance matrix calcualtion + procedure, public :: setup => setup_pl !! A base constructor that sets the number of bodies and allocates and initializes all arrays + procedure, public :: set_mu => setup_set_mu_pl !! Method used to construct the vectorized form of the central body mass + procedure, public :: set_rhill => setup_set_rhill !! Calculates the Hill's radii for each body + procedure, public :: h2b => util_coord_h2b_pl !! Convert massive bodies from heliocentric to barycentric coordinates (position and velocity) + procedure, public :: b2h => util_coord_b2h_pl !! Convert massive bodies from barycentric to heliocentric coordinates (position and velocity) + procedure, public :: copy => util_copy_pl !! Copies elements of one object to another. + procedure, public :: fill => util_fill_pl !! "Fills" bodies from one object into another depending on the results of a mask (uses the MERGE intrinsic) + procedure, public :: set_beg_end => util_set_beg_end !! Sets the beginning and ending positions of planets. + procedure, public :: spill => util_spill_pl !! "Spills" bodies from one object to another depending on the results of a mask (uses the PACK intrinsic) end type swiftest_pl !******************************************************************************************************************************** @@ -263,7 +267,6 @@ module swiftest_classes private !> Each integrator will have its own version of the step procedure(abstract_step_system), public, deferred :: step - procedure(abstract_setup_set_beg_end), public, deferred :: set_beg_end !! Sets the beginning and ending positions of planets. ! 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 @@ -312,20 +315,13 @@ subroutine abstract_set_mu(self, cb) class(swiftest_cb), intent(inout) :: cb !! Swiftest central body object end subroutine abstract_set_mu - subroutine abstract_setup_set_beg_end(self, xbeg, xend, vbeg) - import swiftest_nbody_system, DP - class(swiftest_nbody_system), intent(inout) :: self !! WHM nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend - real(DP), dimension(:,:), intent(in), optional :: vbeg ! vbeg is an unused variable to keep this method forward compatible with RMVS - end subroutine abstract_setup_set_beg_end - subroutine abstract_step_body(self, system, param, t, dt) import DP, swiftest_body, swiftest_nbody_system, swiftest_parameters implicit none class(swiftest_body), intent(inout) :: self !! Swiftest particle object class(swiftest_nbody_system), intent(inout) :: system !! Swiftest system object class(swiftest_parameters), intent(inout) :: param !! Current run configuration parameters - real(DP), intent(in) :: t !! Simulation time + real(DP), intent(in) :: t !! Simulation time real(DP), intent(in) :: dt !! Current stepsize end subroutine abstract_step_body @@ -700,7 +696,7 @@ end subroutine util_fill_body module subroutine util_fill_pl(self, inserts, lfill_list) implicit none - class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object class(swiftest_body), intent(inout) :: inserts !! Inserted object logical, dimension(:), intent(in) :: lfill_list !! Logical array of bodies to merge into the keeps end subroutine util_fill_pl @@ -717,6 +713,13 @@ module subroutine util_reverse_status(self) class(swiftest_body), intent(inout) :: self end subroutine util_reverse_status + module subroutine util_set_beg_end(self, xbeg, xend, vbeg) + implicit none + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + real(DP), dimension(:,:), intent(in), optional :: xbeg, xend !! Positions at beginning and end of step + real(DP), dimension(:,:), intent(in), optional :: vbeg !! vbeg is an unused variable to keep this method forward compatible with RMVS + end subroutine util_set_beg_end + module subroutine util_spill_body(self, discards, lspill_list) implicit none class(swiftest_body), intent(inout) :: self !! Swiftest generic body object diff --git a/src/modules/whm_classes.f90 b/src/modules/whm_classes.f90 index 502fa9be3..e15e6d9c7 100644 --- a/src/modules/whm_classes.f90 +++ b/src/modules/whm_classes.f90 @@ -72,14 +72,11 @@ module whm_classes !******************************************************************************************************************************** !> An abstract class for the WHM integrator nbody system type, public, extends(swiftest_nbody_system) :: whm_nbody_system - !> In the WHM integrator, only test particles are discarded - real(DP), dimension(:,:), allocatable :: xbeg, xend !! Positions of massive bodies at beginning and end of a step. Required in order to separate the test particle step from the massive body step contains private !> Replace the abstract procedures with concrete ones procedure, public :: initialize => whm_setup_system !! Performs WHM-specific initilization steps, like calculating the Jacobi masses procedure, public :: step => whm_step_system !! Advance the WHM nbody system forward in time by one step - procedure, public :: set_beg_end => whm_setup_set_beg_end !! Sets the beginning and ending positions of planets. end type whm_nbody_system interface @@ -216,13 +213,6 @@ module subroutine whm_setup_pl(self,n) integer(I4B), intent(in) :: n !! Number of test particles to allocate end subroutine whm_setup_pl - module subroutine whm_setup_set_beg_end(self, xbeg, xend, vbeg) - implicit none - class(whm_nbody_system), intent(inout) :: self !! WHM nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend - real(DP), dimension(:,:), intent(in), optional :: vbeg ! vbeg is an unused variable to keep this method forward compatible with RMVS - end subroutine whm_setup_set_beg_end - module subroutine whm_setup_set_ir3j(self) implicit none class(whm_pl), intent(inout) :: self !! WHM massive body object diff --git a/src/rmvs/rmvs_encounter_check.f90 b/src/rmvs/rmvs_encounter_check.f90 index 9719567a9..bead4c21b 100644 --- a/src/rmvs/rmvs_encounter_check.f90 +++ b/src/rmvs/rmvs_encounter_check.f90 @@ -24,14 +24,14 @@ module function rmvs_encounter_check_tp(self, system, dt) result(lencounter) select type(pl => system%pl) class is (rmvs_pl) - associate(tp => self, ntp => self%nbody, npl => pl%nbody, xbeg => system%xbeg, vbeg => system%vbeg, rts => system%rts) + associate(tp => self, ntp => self%nbody, npl => pl%nbody, rts => system%rts) r2crit(:) = (rts * pl%rhill(:))**2 tp%plencP(:) = 0 do j = 1, npl do i = 1, ntp if ((tp%status(i) /= ACTIVE).or.(tp%plencP(i) /= 0)) cycle - xr(:) = tp%xh(:, i) - xbeg(:, j) - vr(:) = tp%vh(:, i) - vbeg(:, j) + xr(:) = tp%xh(:, i) - pl%xbeg(:, j) + vr(:) = tp%vh(:, i) - pl%vbeg(:, j) r2 = dot_product(xr(:), xr(:)) v2 = dot_product(vr(:), vr(:)) vdotr = dot_product(vr(:), xr(:)) diff --git a/src/rmvs/rmvs_setup.f90 b/src/rmvs/rmvs_setup.f90 index c5e126a74..4c0c27ff1 100644 --- a/src/rmvs/rmvs_setup.f90 +++ b/src/rmvs/rmvs_setup.f90 @@ -145,32 +145,4 @@ module subroutine rmvs_setup_tp(self,n) return end subroutine rmvs_setup_tp - - - module subroutine rmvs_setup_set_beg_end(self, xbeg, xend, vbeg) - !! author: David A. Minton - !! - !! Sets one or more of the values of xbeg, xend, and vbeg - implicit none - ! Arguments - class(rmvs_nbody_system), intent(inout) :: self !! RMVS test particle object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg - - if (present(xbeg)) then - if (allocated(self%xbeg)) deallocate(self%xbeg) - allocate(self%xbeg, source=xbeg) - end if - if (present(xend)) then - if (allocated(self%xend)) deallocate(self%xend) - allocate(self%xend, source=xend) - end if - if (present(vbeg)) then - if (allocated(self%vbeg)) deallocate(self%vbeg) - allocate(self%vbeg, source=vbeg) - end if - - return - - end subroutine rmvs_setup_set_beg_end - end submodule s_rmvs_setup diff --git a/src/rmvs/rmvs_step.f90 b/src/rmvs/rmvs_step.f90 index bad3c1b1f..c4535d884 100644 --- a/src/rmvs/rmvs_step.f90 +++ b/src/rmvs/rmvs_step.f90 @@ -30,7 +30,7 @@ module subroutine rmvs_step_system(self, param, t, dt) allocate(xbeg, source=pl%xh) allocate(vbeg, source=pl%vh) call pl%set_rhill(cb) - call system%set_beg_end(xbeg = xbeg, vbeg = vbeg) + call pl%set_beg_end(xbeg = xbeg, vbeg = vbeg) ! ****** Check for close encounters ***** ! system%rts = RHSCALE lencounter = tp%encounter_check(system, dt) @@ -42,11 +42,11 @@ module subroutine rmvs_step_system(self, param, t, dt) call pl%step(system, param, t, dt) pl%outer(NTENC)%x(:,:) = pl%xh(:,:) pl%outer(NTENC)%v(:,:) = pl%vh(:,:) - call system%set_beg_end(xend = pl%xh) + call pl%set_beg_end(xend = pl%xh) call rmvs_interp_out(system, param, dt) call rmvs_step_out(system, param, t, dt) call tp%reverse_status() - call system%set_beg_end(xbeg = xbeg, xend = xend) + call pl%set_beg_end(xbeg = xbeg, xend = xend) tp%lfirst = .true. call tp%step(system, param, t, dt) where (tp%status(:) == INACTIVE) tp%status(:) = ACTIVE @@ -95,7 +95,7 @@ subroutine rmvs_step_out(system, param, t, dt) end where do outer_index = 1, NTENC outer_time = t + (outer_index - 1) * dto - call system%set_beg_end(xbeg = pl%outer(outer_index - 1)%x(:, :), & + call pl%set_beg_end(xbeg = pl%outer(outer_index - 1)%x(:, :), & vbeg = pl%outer(outer_index - 1)%v(:, :), & xend = pl%outer(outer_index )%x(:, :)) system%rts = RHPSCALE @@ -167,8 +167,8 @@ subroutine rmvs_step_in(system, param, outer_time, dto) lfirsttp = .true. do inner_index = 1, NTPHENC ! Integrate over the encounter region, using the "substitute" planetocentric systems at each level plenci%xh(:,:) = plenci%inner(inner_index - 1)%x(:,:) - call planetocen_system%set_beg_end(xbeg = plenci%inner(inner_index - 1)%x, & - xend = plenci%inner(inner_index)%x) + call plenci%set_beg_end(xbeg = plenci%inner(inner_index - 1)%x, & + xend = plenci%inner(inner_index)%x) call tpenci%step(planetocen_system, param, inner_time, dti) do j = 1, pl%nenc(i) tpenci%xheliocentric(:, j) = tpenci%xh(:, j) + pl%inner(inner_index)%x(:,i) diff --git a/src/util/util_coord.f90 b/src/util/util_coord.f90 index f1c39b203..387fc8f6b 100644 --- a/src/util/util_coord.f90 +++ b/src/util/util_coord.f90 @@ -15,16 +15,22 @@ module subroutine util_coord_h2b_pl(self, cb) ! Internals integer(I4B) :: i real(DP) :: msys + real(DP), dimension(NDIM) :: xtmp, vtmp - associate(npl => self%nbody, xbcb => cb%xb, vbcb => cb%vb, Mcb => cb%Gmass, & - xb => self%xb, xh => self%xh, vb => self%vb, vh => self%vh, Mpl => self%Gmass) - - msys = Mcb + sum(Mpl(1:npl)) - do i = 1, NDIM - xbcb(i) = -sum(Mpl(1:npl) * xh(i, 1:npl)) / Mcb - vbcb(i) = -sum(Mpl(1:npl) * vh(i, 1:npl)) / Mcb - xb(i, 1:npl) = xh(i, 1:npl) + xbcb(i) - vb(i, 1:npl) = vh(i, 1:npl) + vbcb(i) + associate(pl => self, npl => self%nbody) + msys = cb%Gmass + xtmp(:) = 0.0_DP + vtmp(:) = 0.0_DP + do i = 1, npl + msys = msys + pl%Gmass(i) + xtmp(:) = xtmp(:) + pl%Gmass(i) * pl%xh(:,i) + vtmp(:) = vtmp(:) + pl%Gmass(i) * pl%vh(:,i) + end do + cb%xb(:) = -xtmp(:) / msys + cb%vb(:) = -vtmp(:) / msys + do i = 1, npl + pl%xb(:,i) = pl%xh(:,i) + cb%xb(:) + pl%vb(:,i) = pl%vh(:,i) + cb%vb(:) end do end associate diff --git a/src/util/util_set_beg_end.f90 b/src/util/util_set_beg_end.f90 new file mode 100644 index 000000000..67edfb549 --- /dev/null +++ b/src/util/util_set_beg_end.f90 @@ -0,0 +1,30 @@ +submodule(swiftest_classes) s_util_set_beg_end + use swiftest +contains + + module subroutine util_set_beg_end(self, xbeg, xend, vbeg) + !! author: David A. Minton + !! + !! Sets one or more of the values of xbeg, xend, and vbeg + implicit none + ! Arguments + class(swiftest_pl), intent(inout) :: self !! Swiftest massive body object + real(DP), dimension(:,:), intent(in), optional :: xbeg, xend, vbeg + + if (present(xbeg)) then + if (allocated(self%xbeg)) deallocate(self%xbeg) + allocate(self%xbeg, source=xbeg) + end if + if (present(xend)) then + if (allocated(self%xend)) deallocate(self%xend) + allocate(self%xend, source=xend) + end if + if (present(vbeg)) then + if (allocated(self%vbeg)) deallocate(self%vbeg) + allocate(self%vbeg, source=vbeg) + end if + + return + + end subroutine util_set_beg_end +end submodule s_util_set_beg_end \ No newline at end of file diff --git a/src/whm/whm_setup.f90 b/src/whm/whm_setup.f90 index 80c0e81c9..feba7cc51 100644 --- a/src/whm/whm_setup.f90 +++ b/src/whm/whm_setup.f90 @@ -127,27 +127,4 @@ module subroutine whm_setup_set_ir3j(self) end if end subroutine whm_setup_set_ir3j - module subroutine whm_setup_set_beg_end(self, xbeg, xend, vbeg) - !! author: David A. Minton - !! - !! Sets one or more of the values of xbeg and xend - implicit none - ! Arguments - class(whm_nbody_system), intent(inout) :: self !! WHM nbody system object - real(DP), dimension(:,:), intent(in), optional :: xbeg, xend - real(DP), dimension(:,:), intent(in), optional :: vbeg ! vbeg is an unused variable to keep this method forward compatible with RMVS - - if (present(xbeg)) then - if (allocated(self%xbeg)) deallocate(self%xbeg) - allocate(self%xbeg, source=xbeg) - end if - if (present(xend)) then - if (allocated(self%xend)) deallocate(self%xend) - allocate(self%xend, source=xend) - end if - - return - - end subroutine whm_setup_set_beg_end - end submodule s_whm_setup \ No newline at end of file diff --git a/src/whm/whm_step.f90 b/src/whm/whm_step.f90 index 2a9de28b8..74c0a9290 100644 --- a/src/whm/whm_step.f90 +++ b/src/whm/whm_step.f90 @@ -18,10 +18,10 @@ module subroutine whm_step_system(self, param, t, dt) associate(system => self, cb => self%cb, pl => self%pl, tp => self%tp, ntp => self%tp%nbody) call pl%set_rhill(cb) - call self%set_beg_end(xbeg = pl%xh) + call pl%set_beg_end(xbeg = pl%xh) call pl%step(system, param, t, dt) if (ntp > 0) then - call self%set_beg_end(xend = pl%xh) + call pl%set_beg_end(xend = pl%xh) call tp%step(system, param, t, dt) end if end associate @@ -85,18 +85,17 @@ module subroutine whm_step_tp(self, system, param, t, dt) select type(system) class is (whm_nbody_system) - associate(tp => self, cb => system%cb, pl => system%pl, xbeg => system%xbeg, xend => system%xend) + associate(tp => self, cb => system%cb, pl => system%pl) dth = 0.5_DP * dt if (tp%lfirst) then - call tp%get_accel(system, param, t, xbeg) + call tp%get_accel(system, param, t, pl%xbeg) tp%lfirst = .false. end if call tp%kick(dth) - !If GR enabled, calculate the p4 term before and after each drift if (param%lgr) call tp%gr_p4(param, dth) call tp%drift(system, param, dt) if (param%lgr) call tp%gr_p4(param, dth) - call tp%get_accel(system, param, t + dt, xend) + call tp%get_accel(system, param, t + dt, pl%xend) call tp%kick(dth) end associate end select