mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-20 11:48:25 -06:00
82 lines
2.5 KiB
CMake
82 lines
2.5 KiB
CMake
# - Recreate grid selection macros from DUNE
|
|
#
|
|
# If anyone requires Dune::GridSelector::GridType, they must call this
|
|
# macro in *their* project, to add this information to config.h. (In
|
|
# the autotools version, dunecontrol will automatically include m4
|
|
# scripts that does this).
|
|
#
|
|
# Example:
|
|
# opm_cornerpoint_grid (${CONFIG_H})
|
|
|
|
include (CMakeParseArguments)
|
|
function (opm_grid_type)
|
|
cmake_parse_arguments (a "" "FILENAME;SYMBOL;TYPE;CONDITION" "HEADERS" ${ARGN})
|
|
|
|
# write prelude of a condition to use this particular grid, an inclusion guard,
|
|
# and checks to see if the number of dimensions fits for this type of grid
|
|
file (APPEND ${a_FILENAME}
|
|
"/* add GRIDTYPE typedef for grid implementation ${a_TYPE}:
|
|
defining ${a_SYMBOL} during compilation typedefs this grid implementation as GridType
|
|
in namespace Dune::GridSelector;
|
|
also integer constants dimgrid and dimworld are set in this namespace.
|
|
The required headers for this grid implementation are also included.
|
|
*/
|
|
#if defined ${a_SYMBOL} && ! defined USED_${a_SYMBOL}_GRIDTYPE
|
|
/* someone else has already defined a gridtype */
|
|
#if HAVE_GRIDTYPE
|
|
#error \"Ambigious definition of GRIDTYPE\"
|
|
#endif
|
|
|
|
#ifndef WORLDDIM
|
|
#define WORLDDIM GRIDDIM
|
|
#endif
|
|
#if not (WORLDDIM >= GRIDDIM)
|
|
#error \"WORLDDIM < GRIDDIM does not make sense.\"
|
|
#endif
|
|
|
|
#if ! (${a_CONDITION})
|
|
#error \"Preprocessor assertion ${a_CONDITION} failed.\"
|
|
#endif
|
|
|
|
")
|
|
|
|
# write headers which are capable of defining the type. this should
|
|
# really just have consisted of a forward declaration, but the damage
|
|
# is done: clients expect to just pull in config.h and have the
|
|
# proper type available.
|
|
foreach (header IN LISTS a_HEADERS)
|
|
file (APPEND ${a_FILENAME}
|
|
"#include <${header}>\n"
|
|
)
|
|
endforeach (header)
|
|
|
|
# main part which does the typedef and then a postlude which marks
|
|
# the grid as "taken" and make sure that no one else does the same
|
|
file (APPEND ${a_FILENAME}
|
|
"
|
|
namespace Dune {
|
|
namespace GridSelector {
|
|
const int dimgrid = GRIDDIM;
|
|
const int worldgrid = WORLDDIM;
|
|
typedef ${a_TYPE} GridType;
|
|
}
|
|
}
|
|
|
|
#define HAVE_GRIDTYPE 1
|
|
#define USED_${a_SYMBOL}_GRIDTYPE 1
|
|
#endif
|
|
")
|
|
|
|
endfunction (opm_grid_type)
|
|
|
|
# write the grid type for dune-cornerpoint
|
|
function (opm_cornerpoint_grid config_h)
|
|
opm_grid_type (
|
|
FILENAME ${CONFIG_H}
|
|
SYMBOL CPGRID
|
|
HEADERS "dune/grid/CpGrid.hpp" "dune/grid/cpgrid/dgfparser.hh"
|
|
TYPE Dune::CpGrid
|
|
CONDITION "(GRIDDIM == 3) && (WORLDDIM == 3)"
|
|
)
|
|
endfunction (opm_cornerpoint_grid config_h)
|