369 lines
17 KiB
ReStructuredText
369 lines
17 KiB
ReStructuredText
.. ExoPlaSim documentation master file, created by
|
|
sphinx-quickstart on Mon Dec 7 19:50:40 2020.
|
|
You can adapt this file completely to your liking, but it should at least
|
|
contain the root `toctree` directive.
|
|
|
|
==================================
|
|
ExoPlaSim Python API Documentation
|
|
==================================
|
|
|
|
.. figure:: ../mixplanets.png
|
|
:width: 100%
|
|
:alt: Two rows of planets, progressing from yellow to blue from top left to bottom right. The top row appears to represent tidally-locked planets, while the bottom row appears to represent Earth-like planets.
|
|
|
|
A range of planets modeled by ExoPlaSim, and postprocessed with SBDART. The top row consists of tidally-locked aquaplanets at T21 orbiting stars ranging from 2500 K to 4000 K, with orbital periods increasing with stellar mass. The bottom row consists of aquaplanets with 24-hour rotation at T42, orbiting stars ranging from 4000 K to 8000 K.
|
|
|
|
.. _tut: tutorial.html
|
|
__ tut_
|
|
|
|
|
|
.. _Aerosols: aeromod.html
|
|
|
|
* :ref:`genindex`
|
|
* `Tutorial`__
|
|
* `Aerosols`_
|
|
* `Postprocessor`__
|
|
* :ref:`search`
|
|
|
|
.. _post: postprocessor.html
|
|
__ post_
|
|
|
|
Contents
|
|
========
|
|
|
|
.. toctree::
|
|
:maxdepth: 3
|
|
|
|
tutorial.rst
|
|
aeromod.rst
|
|
postprocessor.rst
|
|
source/exoplasim
|
|
.. :caption: Contents:
|
|
|
|
|
|
Created by Adiv Paradise
|
|
|
|
.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.11542416.svg
|
|
:target: https://doi.org/10.5281/zenodo.11542416
|
|
|
|
Copyright 2020, Distributed under the `General Public License`__.
|
|
|
|
.. _GPL: LICENSE.html
|
|
|
|
__ GPL_
|
|
|
|
Requirements
|
|
------------
|
|
|
|
* Python 3.8+ (including development libraries, e.g. python-dev or python3.9-dev on Ubuntu--if using anaconda, these should already be included in your installation)
|
|
* numpy
|
|
* scipy (only needed for additional utilities, postprocessor)
|
|
* GNU C (gcc/g++) and Fortran (gfortran) compilers (development headers must be present)
|
|
* (optionally) Other compilers whose use you prefer for the model itself
|
|
* (optionally) MPI libraries for those compilers
|
|
|
|
Compatibility
|
|
*************
|
|
|
|
* Linux (tested on Ubuntu 22.04): **Yes**
|
|
* Google Colaboratory: Yes (note that OpenMPI support on Colaboratory is limited due to automatic root privileges; look up how to run OpenMPI executables with root permissions and note that this is not recommended)
|
|
* Windows 10: Yes, via Windows Subsystem for Linux
|
|
* Mac OS X: Yes, requires Xcode and developer tools, and `OpenMPI support requires that Fortran-compatible libraries be built. <https://www.open-mpi.org/faq/?category=osx#not-using-osx-bundled-ompi>`_ Tested on Mac OS X Catalina and Big Sur (with MacPorts, GCC10, OpenMPI, and Anaconda3), Apple M1 compatibility has not been tested.
|
|
|
|
Optional Requirements
|
|
---------------------
|
|
|
|
* netCDF4 (for netCDF support)
|
|
* h5py (for HDF5 support)
|
|
* matplotlib (for plotting and interactivity with ``makestellarspec`` and ``randomcontinents`` modules)
|
|
|
|
**Future Development Roadmap:**
|
|
---------------
|
|
|
|
New features to be included in ExoPlaSim in the future include (but are not limited to) the
|
|
following, in the order they are likely to appear:
|
|
|
|
* Coupling with N-body integrators (**confirmed for 4.0.0**)
|
|
* Support for an arbitrary number of light-sources in the sky, with individual temperatures and time-varying brightnesses, as well as single and compound eclipses/transits (**confirmed for 4.0.0**)
|
|
* Support for time-varying geothermal/tidal heat flux into the atmosphere/ocean from the lithosphere (likely 4.0.0 or 4.1.0)
|
|
* Coupling to the GENIE modeling framework to include a dynamic ocean and biogeochemistry
|
|
* Support for extended light sources such as giant planets and rings
|
|
* CO2 tracer transport and condensation
|
|
* Support for swapping in a different radiation model
|
|
|
|
**New in 3.4:**
|
|
---------------
|
|
|
|
This is the final 3.x maintenance release before 4.0.0 (coming soon!).
|
|
|
|
* Updated documentation
|
|
* Several bugfixes including to core model operations such as the physics filters
|
|
* Revamped ``pyfft`` compilation to eliminate thorny version dependencies--installation and compilation should be a **lot** smoother now.
|
|
* Modernized PlaSim source to be compliant with Fortran 2018 and MPI 4 (required for OpenMPI 5 and GCC 13)
|
|
* Added pass-throughs to the MPI executable to allow runtime flags related to e.g. hyperthreading
|
|
|
|
**New in 3.3:**
|
|
---------------
|
|
|
|
* New aerosol module for transport and gravitational settling of dust and photochemical hazes
|
|
|
|
**New in 3.2:**
|
|
---------------
|
|
|
|
* Experimental integration with petitRADTRANS to compute transit spectra and reflectance spectra, including maps and true-colour images (use at your own risk)
|
|
* Ability to specify general keplerian orbits, with high eccentricity, using a revamped orbit code for higher accuracy
|
|
* Orbital elements now included in standard output
|
|
* Numerous bugfixes
|
|
|
|
**New in 3.0:**
|
|
---------------
|
|
|
|
* ExoPlaSim no longer depends on X11 libraries for installation and compilation!
|
|
* Revamped `postprocessor <postprocessor.html>`_ no longer depends on NetCDF-C libraries, and supports additional output formats (including netCDF, HDF5, NumPy archives, and archives of CSV files).
|
|
* GCC and gfortran support through GCC 10.
|
|
* Improved cross-platform compatibility
|
|
* Numerous bugfixes
|
|
|
|
Installation
|
|
------------
|
|
|
|
::
|
|
|
|
pip install exoplasim
|
|
|
|
|
|
The first time you import the module and try to create a model
|
|
after either installing or updating, ExoPlaSim will run a
|
|
configuration script and compile the ``pyfft`` library.
|
|
|
|
.. burn7 NetCDF postprocessor. You must
|
|
.. have NetCDF libraries available in the path when this happens.
|
|
.. The burn7 compilation process will build and compile a patched
|
|
.. version of the NetCDF libraries necessary for burn7--burn7 makes
|
|
.. use of features anachronistic to a particular version of NetCDF
|
|
.. that no longer exists.
|
|
|
|
**NEW in 3.2.2, updated in 3.4.0:** If you need to re-run the configuration, because
|
|
for example the system libraries/compilers have changed, or the
|
|
configuration failed the first time (usually because OpenMPI
|
|
was not properly configured/visible), then you can call :py:mod:`sysconfigure() <exoplasim.sysconfigure>`
|
|
to rerun the configuration script.
|
|
|
|
You may also configure and compile the model manually if you wish
|
|
to not use the Python API, by entering the exoplasim/ directory
|
|
and running first configure.sh, then compile.sh (compilation flags
|
|
are shown by running ``./compile.sh -h``).
|
|
|
|
If there is a problem with gcc or gfortran being available, ``pyfft`` compilation may also fail
|
|
or need to be updated. To re-run the ``pyfft`` compilation, you can run :py:mod:`compile_pyfft()<exoplasim.compile_pyfft>`.
|
|
|
|
Both of these routines will be called the first time a ``Model`` is compiled, *if* they have not
|
|
ever been run before. You do not need to run these in order to start compiling and using the
|
|
model. They will also call each other if they detect that compiler detection has not yet been
|
|
completed and ``pyfft`` has not yet been compiled.
|
|
|
|
A clean install with conda:
|
|
------------------------------------
|
|
|
|
ExoPlaSim **requires** at minimum a C compiler, a C++ compiler, and a Fortran compiler.
|
|
For parallel execution, an MPI compiler is also required.
|
|
**It is heavily recommended that you use the GNU compilers and OpenMPI.**
|
|
On linux that means gcc, gfortran, g++, and openmpi. On OS X it may be possible to use
|
|
other C and C++ compilers. Intel Fortran will work with the ExoPlaSim source, but not
|
|
with ``pyfft`` compilation through numpy, which means the postprocessor will not work
|
|
properly with Intel Fortran. That may or may not be a dealbreaker for you.
|
|
|
|
One of the easiest and safest ways to ensure you have met the compilation dependencies
|
|
is to use something like conda. While ExoPlaSim itself does not (yet) have a compilation
|
|
recipe available through conda or conda-forge, there are versions of gcc, gxx, gfortran, and
|
|
openmpi that can be installed through conda via the `conda-forge <https://conda-forge.org/docs/user/introduction/#how-can-i-install-packages-from-conda-forge>`_ channel.
|
|
|
|
An ExoPlaSim installation (including compiler configuration and ``pyfft`` compilation) in a
|
|
conda environment would therefore look like:
|
|
|
|
::
|
|
|
|
conda install -c conda-forge gcc gxx gfortran "openmpi<5.0.1" python
|
|
pip install exoplasim
|
|
python -c "import exoplasim; exoplasim.sysconfigure()"
|
|
|
|
Note that at present, OpenMPI 5.0.1 onwards from conda-forge is affected by a `critical bug <https://github.com/conda-forge/openmpi-feedstock/issues/143>`_
|
|
related to linking against outdated C libraries on the conda-forge side; ExoPlaSim will fail
|
|
to compile with OpenMPI if using conda-forge OpenMPI later than 5.0.0.
|
|
|
|
.. **NOTE ON INSTALLING EXOPLASIM FOR MULTIPLE PYTHON 3 VERSIONS:**
|
|
..
|
|
.. ExoPlaSim needs to know where its Fortran source code is to compile the model,
|
|
.. along with the Python bindings for the ``pyfft`` Fortran library. It uses
|
|
.. a shell command with ``python3`` to query the module's absolute path
|
|
.. to do this. If you have installed ExoPlaSim for multiple versions of
|
|
.. Python 3, this means compilation will only happen in the directory
|
|
.. corresponding to the system's default version of Python 3. This can
|
|
.. lead to crashes. If you must do this, you can run ``./configure.sh``
|
|
.. manually in the ExoPlaSim package directory for the non-default version
|
|
.. of Python 3.
|
|
|
|
.. The postprocessor and its
|
|
.. libraries can be compiled by entering ``exoplasim/postprocessor/`` and
|
|
.. running ``./build_init.sh``.
|
|
|
|
Most Common Error Modes
|
|
-----------------------
|
|
|
|
There are 3 major ways in which ExoPlaSim can crash. One is related
|
|
to installation, one is related to model compilation/configuration,
|
|
and one is related to numerical stability.
|
|
|
|
If the most recent MOST_DIAG file appears to have run to completion
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. This can be one of **two** things: either the
|
|
.. netcdf libraries are not properly installed (the first time you tried
|
|
.. to create an ExoPlaSim model, this would have resulted in error output
|
|
.. when the burn7 postprocessor and its custom-patched netcdf library were
|
|
.. being built (the custom library depends on netcdf.h from a standard
|
|
.. netcdf library)), or you have output codes in the postprocessor namelist
|
|
.. that aren't supported. Check the codes first. If that's not it, you
|
|
.. can test whether or not it's a netcdf issue, by going to the run folder:
|
|
..
|
|
.. ::
|
|
..
|
|
.. ./burn7.x -n<example.nl>burnout MOST.00000 MOST.00000.nc
|
|
..
|
|
.. If the problem was with the netcdf libraries, you will get an error
|
|
.. complaining about a missing linked object. If this is the case,
|
|
.. install netcdf (or load the netcdf module if you're in a cluster environment),
|
|
.. and then rebuild the postprocessor as follows:::
|
|
..
|
|
.. burndir=$(python -c "import exoplasim; print(exoplasim.__path__)" | tail -c +3 | head -c -3)/postprocessor
|
|
.. cd $burndir
|
|
.. ./build_init.sh
|
|
..
|
|
.. This should (if it runs without errors) produce a new, functional ``burn7.x``.
|
|
.. You can test it by copying it to your run's working directory, and trying
|
|
.. the ``./burn7.x`` command given above once again.
|
|
|
|
|
|
If in the run folder, diagnostic files are produced that appear to have
|
|
made it all the way to the end of the year (there is a summary tag
|
|
giving time elapsed and that sort of thing), then the problem is likely
|
|
with the postprocessor. It is likely that the error output will be informative;
|
|
if it is not clear how to resolve, please let me (the developer) know.
|
|
|
|
If the postprocessor itself is *not* the problem, then it's likely you somehow passed
|
|
incorrect output codes to the postprocessor. This is the most common scenario for
|
|
postprocessor-related crashes. Check your inputs for any errors. In particular, note
|
|
that climatology outputs are not available if storm climatology was not enabled.
|
|
|
|
If ExoPlaSim crashed almost immediately without producing output
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. py:module:: exoplasim.makestellarspec
|
|
|
|
If things crashed and burned immediately, it's likely a configuration
|
|
problem. There are two kinds of configuration problems that can commonly
|
|
cause problems: a problem with how **system libraries** are configured,
|
|
or a problem with how **your model** is configured.
|
|
|
|
**If it appears that a file is missing or a command can't be found:**
|
|
|
|
This usually means a system library such as the Fortran compiler,
|
|
OpenMPI compiler, or numpy's ``f2py`` utility is either not installed,
|
|
incorrectly installed, or not visible to ExoPlaSim. To verify, you can
|
|
run :py:mod:`exoplasim.printsysconfig(ncpus=1) <exoplasim.printsysconfig>` and ``exoplasim.printsysconfig(ncpus=2)``.
|
|
These commands (**new in 3.2.2**) print the contents of the single-core
|
|
and parallel executation configuration files, and additionally return their
|
|
contents as a python dictionary. There should not be any empty settings.
|
|
|
|
If something appears missing such as an MPI or Fortran compiler, and you
|
|
believe it's installed, you can check by running e.g. ``mpifort --help``
|
|
or ``gfortran --help``. Additionally, for ``pyfft`` problems, verify that numpy's
|
|
``f2py`` utility is available by running ``python -c "import numpy.f2py"``. If any of these
|
|
fails but the library in question is installed, that suggests it is not in
|
|
the system path (the list of directories where programs may look for libraries
|
|
and executables). Ensure all libraries are properly installed, configured,
|
|
and on the path, then run :py:mod:`sysconfigure() <exoplasim.sysconfigure>` to reconfigure ExoPlaSim.
|
|
|
|
**If it appears that the model has actually crashed:**
|
|
|
|
Check to make sure you aren't using a restart file from a run
|
|
that used a different resolution, or stellar spectrum files that aren't
|
|
formatted correctly (use the :py:mod:`makestellarspec <exoplasim.makestellarspec>`
|
|
utility to format Phoenix spectra for ExoPlaSim), or boundary condition
|
|
``.sra`` files that aren't properly-formatted.
|
|
|
|
If ExoPlaSim ran for a while and then crashed
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If things were fine until they weren't, then it's likely ExoPlaSim encountered
|
|
a numerical instability of some kind. Some of these are physical (e.g. you ran
|
|
a model at a thousand times Earth's insolation, and the oceans boiled, or the model
|
|
was too cold and the physics broke), while some are not (something happened to
|
|
violate the CFL condition for the given timestep, or an unphysical oscillation
|
|
wasn't damped properly by the dynamical core and it grew exponentially). If this
|
|
happens, either try a model configuration that is more physically reasonable,
|
|
or if the problem appears not to have been physical, try reducing the timestep
|
|
or increasing hyperdiffusion. Sometimes it also works to slightly adjust a model
|
|
parameter such as surface pressure by a fraction of a percent or less--just enough
|
|
to nudge the model out of whatever chaotic local minimum it ran into, but not
|
|
enough to qualitatively change the resulting climate.
|
|
|
|
New in ExoPlaSim 3.0.0, there is a "crash-tolerant" run mode. With this mode enabled,
|
|
a runtime crash will result in rewinding 10 years and resuming. This deals with many
|
|
of the most frustrating problems related to numerical instability. However, due to
|
|
the potential for infinite loops, this is only recommended for advanced users.
|
|
|
|
PlaSim Documentation
|
|
--------------------
|
|
|
|
Original PlaSim documentation is available in the exoplasim/docs/
|
|
folder and `online <https://github.com/alphaparrot/ExoPlaSim/blob/master/exoplasim/plasim/doc/PS_ReferenceManual.pdf>`_.
|
|
|
|
Usage
|
|
-----
|
|
|
|
To use the ExoPlaSim Python API, you must import the module, create
|
|
a Model or one of its subclasses, call its configure method and/or
|
|
modify method, and then run it.
|
|
|
|
An IPython notebook is included with ExoPlaSim; which demonstrates
|
|
basic usage. It can be found in the ExoPlaSim installation directory,
|
|
or `viewed directly here. <https://github.com/alphaparrot/ExoPlaSim/blob/master/exoplasim/exoplasim_tutorial.ipynb>`_
|
|
|
|
Basic example:::
|
|
|
|
import exoplasim as exo
|
|
mymodel = exo.Model(workdir="mymodel_testrun",modelname="mymodel",resolution="T21",layers=10,ncpus=8)
|
|
mymodel.configure()
|
|
mymodel.exportcfg()
|
|
mymodel.run(years=100,crashifbroken=True)
|
|
mymodel.finalize("mymodel_output")
|
|
|
|
In this example, we initialize a model that will run in the directory
|
|
"mymodel_testrun", and has the name "mymodel", which will be used to
|
|
label output and error logs. The model has T21 resolution, or 32x64,
|
|
10 layers, and will run on 8 CPUs. By default, the compiler will use
|
|
8-byte precision. 4-byte may run slightly faster, but possibly at the
|
|
cost of reduced stability. If there are machine-specific optimization
|
|
flags you would like to use when compiling, you may specify them as a
|
|
string to the optimization argument, e.g. ``optimization='mavx'``. ExoPlaSim
|
|
will check to see if an appropriate executable has already been created,
|
|
and if not (or if flags indicating special compiler behavior such as
|
|
debug=True or an optimization flag are set) it will compile one. We then
|
|
configure the model with all the default parameter choices, which means
|
|
we will get a model of Earth. We then export the model configurations
|
|
to a ``.cfg`` file (named automatically after the model), which will allow
|
|
the model configuration to be recreated exactly by other users. We
|
|
run the model for 100 years, with error-handling enabled. Finally, we
|
|
tell the model to clean up after itself. It will take the most recent
|
|
output files and rename them after the model name we chose, and delete
|
|
all the intermediate output and configuration files.
|
|
|
|
|
|
A Note on NetCDF and the (deprecated) Burn7 Postprocessor
|
|
---------------------------------------------------------
|
|
|
|
As of ExoPlaSim 3.0.0, ``burn7`` is deprecated. It is only
|
|
available via the ``exoplasim-legacy`` package.
|
|
|