General Reacting Incompressible Navier-Stokes (GRINS) was initiated
to house common modeling work centered around using the incompressible and variable-density (low-Mach) Navier-Stokes equations utilizing the libMesh finite element library, including both MPI and MPI+threads parallelism, as provided by libMesh. GRINS has now become a tool for rapidly developing formulations and algorithms for the solution of complex multiphysics applications. GRINS originally lived within the PECOS center at the Institute for Computational Engineering and Sciences (ICES) at The University of Texas at Austin.
We encourage pull requests for new features, bug fixes, etc. For questions regarding development, we have a grins-devel Google group setup. For user related questions, please use the grins-users group.
In addition to a modern C++ compiler, GRINS requires an up-to-date installation of the libMesh finite element library. If your C++ compiler does not support smart pointers, than the Boost C++ library is also required (header only).
GRINS development both drives and is driven by libMesh development. Thus, the required minimum master hash of libMesh may change in GRINS master. The current required libMesh master hash is 8be0a4e, as of GRINS PR #499. GRINS release 0.5.0 can use libMesh versions as old as 0.9.4. Subsequent to the 0.5.0 release requires at least libMesh 1.0.0.
The current required minimum hash for using Antioch is libantioch/antioch@ad78595 (libantioch/antioch#240).
GRINS uses an Autotools build system, so typical GNU build commands are used.
- ./bootstrap (generate configure script)
- ./configure --prefix=/path/to/install --with-libmesh=/path/to/libMesh --with-boost=/path/to/boost (for more options, do ./configure --help)
- make (note parallel builds are supported)
- make check (note parallel-tests are supported)
- make install
If you've compiled libMesh with PETSc or other external libraries and have compiled GRINS with Antioch, Cantera, or other external libraries, you will need to add them to your LD_LIBRARY_PATH as we do not use -rpath when linking to the libraries.
By default, GRINS leverages the METHOD environment variable
(described here) in order to
retrieve the CXXFLAGS variable from the libMesh
installation (if METHOD is not present, the default is "opt"). Note that unlike libMesh,
GRINS currently only supports building one METHOD at a time. Hence, we use
METHODS. For example
The user can define their own CXXFLAGS variable by passing
--disable-libmesh-flags CXXFLAGS="your flags here"
make install, there are several examples in the
/path/to/install/examples directory. Each example can be run with the local
run.sh script. You may set the environment variable
GRINS_RUN to run with more than one processor, e.g.
export GRINS_RUN="mpiexec -np 4". Additionally, you can set the environment variable
GRINS_SOLVER_OPTIONS to pass solver options, e.g. to use MUMPS through PETSc (if you built libMesh with PETSc and built PETSc with MUMPS),
export GRINS_SOLVER_OPTIONS="-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps".