Getting Started ======================================== To build TDycores, you need * `CMake ` version 3.10+ * GNU Make * Decent C, C++, and Fortran compilers * `PETSc `, release 3.14 (tagged ``v3.14``), installed as described below, with `PETSC_DIR` and `PETSC_ARCH` environment variables set accordingly. * ``autoconf`` and ``automake`` for Pnetcdf. On Mac you can use Homebrew to get these. For the purpose of illustration, let's assume you're using the ``gcc``, ``g++``, and ``gfortran`` compilers. Installing PETSc and Dependencies --------------------------------- TDycore relies on PETSc to provide several required libraries. Here's how you can properly configure and install PETSc on your system. 1. Clone the PETSc repo somewhere in your workspace.:: git clone https://gitlab.com/petsc/petsc.git 2. Set the repo to the correct revision.:: cd petsc git checkout v3.14 3. Set ``PETSC_DIR`` and ``PETSC_ARCH``, and then run PETSc's ``configure`` script. The value of ``PETSC_ARCH`` doesn't matter--it's just a name for your build configuration. It might be good to name it ``debug`` or ``opt``, for example, depending on how you're configuring it.:: export PETSC_DIR=$PWD # (e.g. if you're using bash) export PETSC_ARCH=debug # (for debug config) ./configure \ --with-cc=mpicc \ --with-cxx=mpicxx \ --with-fc=mpif90 \ --CFLAGS='-g -O0' --CXXFLAGS='-g -O0' --FFLAGS='-g -O0 -Wno-unused-function' \ --with-clanguage=c \ --with-debug=1 \ --with-shared-libraries=0 \ --download-hdf5 \ --download-metis \ --download-parmetis \ --download-exodusii \ --download-netcdf \ --download-pnetcdf \ --download-zlib \ --download-fblaslapack 4. Build PETSc.:: make all 5. Run PETSc's tests to make sure it's properly built.:: make test Above, we build PETSc in a "debug" configuration, for use in development. To build a "production" version of PETSc for performant simulations, run ``configure`` with ``--with-debug=0`` instead. Troubleshooting --------------- If you get errors about undefined symbols during the configuration/build process, you can try to fix it using the ``--LIBS`` flag to pass arguments to the linker. For example, you might need ``--LIBS='-ldl -lz'`` to get some of the I/O libraries to install properly. On some systems, it may be easier to use shared libraries instead of static libraries (``--with-shared-libraries=1``). `Look here ` for more information on getting PETSc to build successfully in various configurations. Building TDycore ---------------- When you've successully installed PETSc, you can build TDycore with ``make`` from the top-level source directory::: make -j V=1 Here, ``V=1`` isn't strictly needed--it just provides verbose reporting of compiler and linker activity, for those of us who like to know that things are happening. Running the Regression Tests ---------------------------- You can run TDycore's regression test suite with ``make`` from the top-level source directory:: make test