{ "cells": [ { "cell_type": "markdown", "id": "57743d2f-6103-4822-b127-d06ced808234", "metadata": {}, "source": [ "# Appendix E: Changelog" ] }, { "cell_type": "markdown", "id": "baa0df4a-2f2c-4869-80c9-804705b502ed", "metadata": {}, "source": [ "This is a list of changes made to `DustPy` since version `v1.0.0` including discussions of their influence on the simulations." ] }, { "cell_type": "markdown", "id": "c55eb9b1-9d81-443d-b044-36a936fadfe6", "metadata": {}, "source": [ "### **v1.0.8**\n", "**Release date: 7th March 2025**\n", "\n", "#### Bugfix to backward compatibility\n", "\n", "Bugfix to the modified `SimpleNamespace` class to make `DustPy` usable for Python versions before `3.13`." ] }, { "cell_type": "markdown", "id": "896bf869-3e6d-4ee0-91dc-5e28803b0cca", "metadata": {}, "source": [ "### **v1.0.7**\n", "**Release date: 26th February 2025**\n", "\n", "#### Fix to installation issues\n", "\n", "When using the latest `NumPy` version the Fortran modules could not be found. This is now fixed.\n", "\n", "#### Removing adiabatic sound speed\n", "\n", "`DustPy` used to store the adiabatic sound speed in `Simulation.gas.cs` while employing the heat capacity ration `Simulation.gas.gamma`. But all methods implemented in `DustPy` have been using the isothermal sound speed. \n", "Since this caused confusion the heat capacity ratio `Simulation.gas.gamma` has been removed and `DustPy` is now always storing the isothermal sound speed in `Simulation.gas.cs`.\n", "\n", "#### Implementation of gas torque\n", "\n", "`DustPy` has now the possibility of adding a torque on the gas surface density. This can be used for ecample to open gaps instead of using the method of changing the gas viscosity. \n", "The angular momentum injection rate can be accessed at `Simulation.gas.torque.Lambda`. The additional velocity component imposed on the gas by the torque is stored in `Simulation.gas.torque.v`.\n", "\n", "#### Bugfix to plotting script\n", "\n", "The default plotting script was not working anymore with the latest `Matplotlib` version. This has been fixed.\n", "\n", "#### Implementation of helper funtion to extract simulation data\n", "\n", "The function `utils.data.read_data` either takes a `Simulation` object or the path to a `DustPy` data directory and returns all the data including the growth limits that are required to prepare the standard plots.\n", "\n", "#### Change of variable name in initial conditions object\n", "\n", "For consistency reasons the default fragmentation velocity in the initial conditions is called `Simulation.ini.dust.vFrag`.\n", "\n", "#### Do not allow the addition of new attributes to initial conditions object\n", "\n", "It is now not possible anymore to add new attributes to `Simulation.ini`. This is to prevent mistakes from adressing attributes while having typos.\n", "\n", "#### Fixing compiler warnings and out-of-bounds errors\n", "\n", "The Fortran modules produced a couple of compiler warnings and out-of-bounds error, which had not effect on the simulations. This has been fixed regardless." ] }, { "cell_type": "markdown", "id": "dd85e2b7-f40a-42a4-aed0-5c20ae3e08c8", "metadata": {}, "source": [ "### **v1.0.6**\n", "**Release date: 30th June 2024**\n", "\n", "#### Simframe compatibility\n", "\n", "The necessary modifications have been made to make `DustPy` compatible to the latest `Simframe v1.0.5`. \n", "`Simframe` has to be updated to at least version `1.0.5`.\n", "\n", "Due to the changes in `Simframe`, the snapshots stored in `sim.t.snapshots` now need to additionally contain the time, at which the initial conditions are written. By default this is for `t=0`. Furthermore, 0-dimensional Fields exist now, such as `sim.grid.Nr` or `sim.grid.Nm`.\n", "\n", "#### Bugfix to initial fluxes and source terms\n", "\n", "A bug was writing false gas and dust fluxes and source terms into the output files. The results of previous simulations were not affected by this issue.\n", "\n", "#### Bugfix to implicit fluxes and source terms\n", "\n", "When using implicit integration, the gas and dust fluxes and source terms are computed after the integration step from the new surface density. A bug in referencing to the old values of the surface densities caused fluxes and source terms to be computed incorrectly. The simulations are not affected, since these quantities are only computed for convenience and post-simulation analysis, but values written to the output files may have been incorrect.\n", "\n", "#### Modification to initial dust distribution\n", "\n", "If `sim.ini.dust.allowDriftingParticle` is `False` (default) particles above a critical Stokes number are removed from the initial dust size distribution. There was an error in the computation of the Stokes number, which has been fixed in this version. However, the critical Stokes number has been adjusted, such that the initial conditions are almost identical to previous versions.\n", "\n", "#### Modification to total dust flux function\n", "\n", "The default function to compute the total dust flux has been modified to be downstream compatible to other software packages using `DustPy`. Simulations that are not customizing this function are not affected by this change." ] }, { "cell_type": "markdown", "id": "880736d6-e6d8-489d-b262-96d88faffc5d", "metadata": {}, "source": [ "### **v1.0.5**\n", "**Release date: 3rd December 2023**\n", "\n", "#### Using Meson as build system\n", "\n", "Due to the deprecation of `numpy.distutils`, `DustPy` is now using Meson as build system.\n", "\n", "#### Bugfix to velocity distribution\n", "\n", "For zero relative collision velocities a not-a-number error could have been triggered.\n", "\n", "#### Bugfix to plotting script\n", "\n", "A bug in the plotting script has been fixed causing lines not to be updated. May not be fixed for all Matplotlib version. Please use the most recent one.\n", "\n", "#### Preparation for the addition of multiple gas species\n", "\n", "In order to add multiple gas species in future versions, the Jacobian of the gas surface density has been modified. All previous models that have not specifically customized the gas Jacobian should be compatible with this version." ] }, { "cell_type": "markdown", "id": "9395dfc3-8a57-4382-a997-6aedc776963c", "metadata": {}, "source": [ "### **v1.0.4**\n", "**Release date: 17th June 2023**\n", "\n", "#### Bugfix to boundary conditions\n", "\n", "A bug prevented the boundaries to be set correctly for the boundary conditions `\"val\"`, `\"grad\"`, and `\"pow\"`. The boundary conditions `\"const_val\"`, `\"const_grad\"`, and `\"const_pow\"` were not affected by this bug." ] }, { "cell_type": "markdown", "id": "c28673a5-03a9-4865-8d86-092a4cfca918", "metadata": {}, "source": [ "### **v1.0.3**\n", "**Release date: 7th February 2023**\n", "\n", "#### Correction to inital particle size distribution\n", "\n", "If the parameter `Simulation.ini.dust.allowDriftingParticles` is set to `False` before `Simulation.initialize()`, `DustPy` is removing particles in the outer disk that are initially close to the drift barrier. An error has been corrected in the conversion of Stokes number to particles size, in which the particle bulk density `Simulation.dust.rhos` has been in the numerator instead of the denominator. The effect of this correction on simulations is negligible, since `Simulation.dust.rhos ~ 1`.\n", "\n", "#### Removal of non-ASCII characters\n", "\n", "Due to potential incompabilities all non-ASCII character have been removed from the docstrings in the Fortran files." ] }, { "cell_type": "markdown", "id": "2fdb3439-67b5-4661-9886-e66495dcbab3", "metadata": {}, "source": [ "### **v1.0.2**\n", "**Release date: 18th November 2022**\n", "\n", "#### Change in default temperature profile\n", "\n", "A factor of $\\frac{1}{2}$ was added to the luminosisty in the standard update function of the gas temperature `Simulation.gas.T`, when calculating the midplane equilibrium temperature in accordance with e.g. [Chiang & Goldreich (1997)](https://doi.org/10.1086/304869) or [Dullemond et al. (2001)](https://doi.org/10.1086/323057):\n", "\n", "$T\\left( r \\right) = \\sqrt[4]{\\frac{1}{2}\\frac{0.05\\,L_*}{4\\,\\pi\\,r^2\\,\\sigma_\\mathrm{SB}}}$\n", "\n", "Compared to previous versions the midplane temperature is therefore reduced by a factor of $\\sqrt[4]{\\frac{1}{2}}\\approx0.84$. For a comparison with radiative transfer calculation with `RADMC-3D` please have a look at [this example](https://dustpylib.readthedocs.io/en/latest/radmc3d.html#Thermal-Monte-Carlo-run) in the [dustpylib documentation](https://dustpylib.rtfd.io/)." ] }, { "cell_type": "markdown", "id": "1e5fd8e4-2fdb-4671-bbee-c677ec1e99f8", "metadata": {}, "source": [ "### **v1.0.1**\n", "**Release date: 21st July 2022** \n", "This version has been used in the code paper ([Stammler & Birnstiel, 2022](https://doi.org/10.3847/1538-4357/ac7d58)).\n", "\n", "#### Change to Collision Kernel\n", "\n", "A factor was added to the standard update function of `Simulation.dust.kernel`, that reduces the collision rates of equal size collisions by a factor of $\\frac{1}{2}$:\n", "\n", "$K_{ij} = \\frac{1}{1+\\delta_{ij}} \\frac{\\pi\\left( a_i + a_j \\right)^2}{\\sqrt{2\\pi\\left( H_i^2 + H_j^2 \\right)}} v_\\mathrm{rel}$\n", "\n", "Collisions between particles of two separate reservoirs $i$ and $j$ occur at a rate $\\propto N_i N_j$, since every particle in one reservoir can collide with every particle in the other reservoir. Collisions of particles in the same reservoir occur at reduces rates: the first particle can collide with $N_i-1$ other particles, the second particle with $N_i-2$ particles, and so on, to avoid double counting of collisions. In that case the collision rates are $\\propto \\frac{1}{2}N_i\\left(N_i-1\\right)$, which is $\\frac{1}{2}N_i^2$ in the limit of large $N_i$.\n", "\n", "This change has no noticable effect on simulations performed with previous versions, since it is only reducing the collision rate for a single type of collisions." ] }, { "cell_type": "markdown", "id": "68bac048-ff88-48e0-ab87-1a217cae3f1d", "metadata": {}, "source": [ "### **v1.0.0**\n", "**Release date: 3rd July 2022**" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }