Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

These instructions assume you have already ported E3SM to your machine (you have it defined in config_machines.xml and can build and run cases.)

There are several option dependencies that are in general optional for MOAB that but are required for MOAB-in-E3SM. Features and tools needed within MOAB get automatically built and enabled based on the dependencies when configuring the MOAB library.

  • MPI: MOAB supports both MPICH- and OpenMPI-based libraries configured externally to enable scalable mesh manipulation algorithms. Needed for MOAB-coupler. HDF5: To manage the data dependencies and to natively support parallel I/O, MOAB uses a native HDF5-based file format to represent the entire MOAB data model. If MPI is enabled, HDF5 should be built with parallel support. This is required because TempestRemap (below) needs it. It also allows you to output MOAB h5m files which are useful in debugging.NetCDF: MOAB library optionally depends on the NetCDF libraries (C) to compile the ExodusII reader/writer. If MPI is enabled, then the underlying HDF5 dependency for NetCDF should have parallel support i.e., serial HDF5 dependency will not pass configuration checks. If you built it for E3SM, use that oneyou were to build without MPI, a serial version of MOAB would result. Use the same library you use for E3SM.

  • Parallel-NetCDF: MOAB library optionally depends on the uses parallel-NetCDF (pnetcdf) libraries to compile the support for parallel reader and writer library directly for parallel read of NetCDF meshes and linear map weight files . This is a required dependency to enable parallel I/O of MPAS, SCRIP, ESMF, and Exodus meshes(the r2o map. The rest are calculated online). Use the same one you built for E3SM.

  • Zoltan: Support for online partitioning through Zoltan (and its dependencies on Scotch, ParMetis etc) can be utilized through the partitioner tool and at runtime with appropriate file read options (PARTITION_METHOD=RCBZOLTAN;). This dynamic rebalancing is important to achieve good scalability when reading nc files. If reading parallel h5m files, we recommend using the offline partitioning tool with mbpart with -z RCB to use the Recursive Bisection geometric partitioner implementation in Zoltan. This is required for E3SM’s moab coupler.Currently you have to download and build Zoltan on your own but we are fixing that.

  • TempestRemap: Provides support for online remapping of Climate field data on unstructured spherical meshes. RequiredMOAB’s build will download and build TempestRemap if you have not done it separately.

  • Eigen3: A substitute for BLAS/LAPACK interfaces. Required when calculating weights with TempestRemap as we store the SparseMatrix internally on every task using the Eigen3 data-structures. Requiredstructures and apply the map with those structures. MOAB’s build will download and build Eigne3 if you have not done it separately.

Optional dependencies (not needed to run the default moab coupler)

  • Metis/ParMetis: MOAB can optionally use the Metis or ParMetis library for partitioning mesh files in an offline form through the MOAB’s mbpart tool. This may be useful to pre-partition the mesh apriori in offline remapping workflows.

  • HDF5: MOAB uses a native HDF5-based file format to represent the entire MOAB data model and this is the original input/output format for MOAB. If MPI is enabled, HDF5 should be built with parallel support. HDF support allows you to output any E3SM state maintained by MOAB in MOAB h5m files which are useful in debugging as they can be visualized with Visit (on a sphere and with the exact mesh). If you built HDF5 for E3SM, use that one in the MOAB configure.

  • NetCDF: MOAB library optionally depends on the NetCDF libraries (C) to compile the ExodusII reader/writer. If MPI is enabled, then the underlying HDF5 dependency for NetCDF should have parallel support i.e., serial HDF5 dependency will not pass configuration checks. If you built it for E3SM, use that one in the MOAB configure.

Configuring and building MOAB from source

...

  • Override default compilers with environment variables or configure-time options with the compilers you use for E3SM: CC, CXX, FC, F77

  • For the MPI installed for E3SM, use --with-mpi=$MPI_DIR

  • For the HDF5, NetCDF, PNetCDF installed, use --with-hdf5pnetcdf=$HDF5$PNETCDF_DIR (if you built NetCDF4 and HDF5, add --with-netcdfhdf5=$NETCDF$HDF5_DIR --with-pnetcdfnetcdf=$PNETCDF$NETCDF_DIR to specify these external dependencies.)

  • Zoltan must currently be installed separately. use --with-zoltan=$ZOLTAN_DIR

  • For TempestRemap, if you pre-installed it, then use --with-tempestremap=$TEMPESTREMAP_DIR during configuration, or you can use the auto-download option to let MOAB automatically build the dependency with the configure option --download-tempestremap(to download the latest release) OR --download-tempestremap=master (to build from TempestRemap git repository, master branch).

  • For Eigen3….

  • Now execute the configure script with desired configuration options either in-source or out-of-source (recommended) directory. A typical MOAB configuration command with all TPLs enabled for E3SM might look like the one shown below, where $PACKAGE_DIR indicates the location of the installation prefix for the particular TPL.

    Code Block
    $MOAB_SRC/configure CC=mpicc CXX=mpicxx FC=mpif90 F77=mpif77 \
                        --prefix=$MOAB_INSTALL_DIR \
                        --enable-debug --enable-optimize \
                        --with-mpi=$MPI_DIR \
                        --with-eigen3=$EIGEN3_INCLUDE_DIR \
                        --with-hdf5=$HDF5_DIR \
                        --with-netcdf=$NETCDF_DIR \
                        --with-pnetcdf=$PNETCDF_DIR \
                        --with-tempestremap=$TEMPESTREMAP_DIR \
                        --with-zoltan=$ZOLTAN_DIR 

...

  • Compile MOAB and supported tools: make -j4

  • Verify configuration and build setup: make check (Some checks won’t pass without HDF5. Ignore those).

Next to install the compiled libraries, headers, and tools, run: make install

...