mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-01-26 20:06:26 -06:00
fix cmake handling
- use imported target for linking - use separate damaris cmake script - handle HAVE_DAMARIS config variable in the usual way fixing issues when user does not provide an outputDir via a command_line avoid adding damaris's command lines when we dont have damaris
This commit is contained in:
parent
0a7f7e94b7
commit
ecc36f6ce8
@ -113,13 +113,6 @@ include(Findopm-tests)
|
||||
# with the find module
|
||||
include ("${project}-prereqs")
|
||||
|
||||
# Only add the HAVE_DAMARIS define to config.h if the build requested Damaris support
|
||||
if (USE_DAMARIS_LIB)
|
||||
if (Damaris_FOUND)
|
||||
set (opm-simulators_CONFIG_VAR ${opm-simulators_CONFIG_VAR} HAVE_DAMARIS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Make sure we are using the same compiler underneath
|
||||
# NVCC as for the rest. In the case that NVCC does not support
|
||||
# that compiler it will error out. Unfortunately this will only
|
||||
@ -304,7 +297,6 @@ if(OpenCL_FOUND)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# read the list of components from this file (in the project directory);
|
||||
# it should set various lists with the names of the files to include
|
||||
include (CMakeLists_files.cmake)
|
||||
@ -322,6 +314,8 @@ macro (config_hook)
|
||||
list(APPEND EXTRA_INCLUDES SYSTEM ${PROJECT_SOURCE_DIR}/external/fmtlib/include)
|
||||
endif()
|
||||
include_directories(${EXTRA_INCLUDES})
|
||||
|
||||
include(UseDamaris)
|
||||
endmacro (config_hook)
|
||||
|
||||
macro (prereqs_hook)
|
||||
@ -552,35 +546,8 @@ if(HAVE_FPGA)
|
||||
ExternalProject_Get_Property(FPGA_library binary_dir)
|
||||
target_link_libraries(opmsimulators PUBLIC ${binary_dir}/fpga_lib_alveo_u280.a)
|
||||
endif()
|
||||
if (USE_DAMARIS_LIB) # User requested Damaris support
|
||||
if (Damaris_FOUND)
|
||||
message(STATUS "The Damaris library was found: ${Damaris_VERSION} ${Damaris_DIR}")
|
||||
if (Damaris_HAS_HDF5)
|
||||
message(STATUS "The Damaris library has HDF5 support: ${HDF5_VERSION}")
|
||||
else()
|
||||
message(STATUS "The Damaris library does NOT have HDF5 support")
|
||||
endif()
|
||||
if (Damaris_HAS_VISIT)
|
||||
message(STATUS "The Damaris library has VisIt support: ${VisIt_VERSION}")
|
||||
else()
|
||||
message(STATUS "The Damaris library does NOT have VisIt support")
|
||||
endif()
|
||||
if (Damaris_HAS_CATALYST)
|
||||
message(STATUS "The Damaris library has Catalyst support: ${Catalyst_VERSION} ${Paraview_VERSION}")
|
||||
else()
|
||||
message(STATUS "The Damaris library does NOT have Catalyst support")
|
||||
endif()
|
||||
include_directories(${Damaris_INCLUDE_DIRS})
|
||||
target_link_libraries(opmsimulators PUBLIC ${Damaris_LIBRARIES})
|
||||
else()
|
||||
message(STATUS "The Damaris library was requested but NOT found")
|
||||
endif()
|
||||
else() # User did not request Damaris support
|
||||
if (Damaris_FOUND)
|
||||
message(STATUS "The Damaris library was NOT requested but was found: ${Damaris_VERSION} ${Damaris_DIR}")
|
||||
else()
|
||||
message(STATUS "The Damaris library was NOT requested and was NOT found")
|
||||
endif()
|
||||
if(Damaris_FOUND)
|
||||
target_link_libraries(opmsimulators PUBLIC damaris)
|
||||
endif()
|
||||
|
||||
install(DIRECTORY doc/man1 DESTINATION ${CMAKE_INSTALL_MANDIR}
|
||||
|
@ -431,7 +431,7 @@ template<class TypeTag>
|
||||
struct EnableEclOutput<TypeTag,TTag::EclBaseProblem> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
#ifdef HAVE_DAMARIS
|
||||
//! Enable the Damaris output by default
|
||||
template<class TypeTag>
|
||||
struct EnableDamarisOutput<TypeTag, TTag::EclBaseProblem> {
|
||||
@ -443,7 +443,7 @@ template<class TypeTag>
|
||||
struct EnableDamarisOutputCollective<TypeTag, TTag::EclBaseProblem> {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
#endif
|
||||
// If available, write the ECL output in a non-blocking manner
|
||||
template<class TypeTag>
|
||||
struct EnableAsyncEclOutput<TypeTag, TTag::EclBaseProblem> {
|
||||
@ -708,8 +708,10 @@ public:
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableEclOutput,
|
||||
"Write binary output which is compatible with the commercial "
|
||||
"Eclipse simulator");
|
||||
#ifdef HAVE_DAMARIS
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableDamarisOutput,
|
||||
"Write a specific variable using Damaris in a separate core");
|
||||
"Write a specific variable using Damaris in a separate core");
|
||||
#endif
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EclOutputDoublePrecision,
|
||||
"Tell the output writer to use double precision. Useful for 'perfect' restarts");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, unsigned, RestartWritingInterval,
|
||||
|
@ -62,6 +62,7 @@ template<class TypeTag, class MyTypeTag>
|
||||
struct EclOutputDoublePrecision {
|
||||
using type = UndefinedProperty;
|
||||
};
|
||||
#ifdef HAVE_DAMARIS
|
||||
template<class TypeTag, class MyTypeTag>
|
||||
struct EnableDamarisOutput {
|
||||
using type = UndefinedProperty;
|
||||
@ -70,6 +71,7 @@ template<class TypeTag, class MyTypeTag>
|
||||
struct EnableDamarisOutputCollective {
|
||||
using type = UndefinedProperty;
|
||||
};
|
||||
#endif
|
||||
template<class TypeTag, class MyTypeTag>
|
||||
struct EnableEsmry {
|
||||
using type = UndefinedProperty;
|
||||
@ -128,8 +130,10 @@ public:
|
||||
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableAsyncEclOutput,
|
||||
"Write the ECL-formated results in a non-blocking way (i.e., using a separate thread).");
|
||||
#ifdef HAVE_DAMARIS
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableDamarisOutputCollective,
|
||||
"Write output via Damaris using parallel HDF5 to get single file per timestep instead of one per Damaris core.");
|
||||
#endif
|
||||
EWOMS_REGISTER_PARAM(TypeTag, bool, EnableEsmry,
|
||||
"Write ESMRY file for fast loading of summary data.");
|
||||
}
|
||||
@ -459,10 +463,10 @@ public:
|
||||
private:
|
||||
static bool enableEclOutput_()
|
||||
{ return EWOMS_GET_PARAM(TypeTag, bool, EnableEclOutput); }
|
||||
|
||||
#ifdef HAVE_DAMARIS
|
||||
static bool enableDamarisOutput_()
|
||||
{ return EWOMS_GET_PARAM(TypeTag, bool, EnableDamarisOutput); }
|
||||
|
||||
#endif
|
||||
const EclipseState& eclState() const
|
||||
{ return simulator_.vanguard().eclState(); }
|
||||
|
||||
|
@ -18,6 +18,7 @@ set (opm-simulators_CONFIG_VAR
|
||||
DUNE_ISTL_VERSION_MINOR
|
||||
DUNE_ISTL_VERSION_REVISION
|
||||
HAVE_SUITESPARSE_UMFPACK
|
||||
HAVE_DAMARIS
|
||||
)
|
||||
|
||||
# dependencies
|
||||
|
@ -435,11 +435,13 @@ private:
|
||||
deckFilename = EWOMS_GET_PARAM(PreTypeTag, std::string, EclDeckFileName);
|
||||
outputDir = EWOMS_GET_PARAM(PreTypeTag, std::string, OutputDir);
|
||||
}
|
||||
ensureOutputDirExists(outputDir);
|
||||
|
||||
#if HAVE_DAMARIS
|
||||
enableDamarisOutput_ = EWOMS_GET_PARAM(PreTypeTag, bool, EnableDamarisOutput);
|
||||
if (enableDamarisOutput_) {
|
||||
if (!outputDir.empty()) {
|
||||
ensureOutputDirExists(outputDir);
|
||||
}
|
||||
// By default EnableDamarisOutputCollective is true so all simulation results will
|
||||
// be written into one single file for each iteration using Parallel HDF5.
|
||||
// It set to false, FilePerCore mode is used in Damaris, then simulation results in each
|
||||
@ -452,7 +454,7 @@ private:
|
||||
MPI_Comm new_comm;
|
||||
int err = damaris_start(&is_client);
|
||||
isSimulationRank_ = (is_client > 0);
|
||||
if (isSimulationRank_ && (err == DAMARIS_OK || err == DAMARIS_NO_SERVER)) {
|
||||
if (isSimulationRank_ && err == DAMARIS_OK) {
|
||||
damaris_client_comm_get(&new_comm);
|
||||
EclGenericVanguard::setCommunication(std::make_unique<Parallel::Communication>(new_comm));
|
||||
} else {
|
||||
@ -827,8 +829,9 @@ private:
|
||||
// To demonstrate run with non_world_comm
|
||||
bool test_split_comm_ = false;
|
||||
bool isSimulationRank_ = true;
|
||||
|
||||
#if HAVE_DAMARIS
|
||||
bool enableDamarisOutput_ = false;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace Opm
|
||||
|
@ -38,6 +38,9 @@ std::string initDamarisXmlFile(); // Defined in initDamarisXMLFile.cpp, to avoid
|
||||
void
|
||||
initializeDamaris(MPI_Comm comm, int mpiRank, std::string outputDir, bool enableDamarisOutputCollective)
|
||||
{
|
||||
if (outputDir.empty()) {
|
||||
outputDir = ".";
|
||||
}
|
||||
// Prepare the XML file
|
||||
std::string damaris_config_xml = initDamarisXmlFile();
|
||||
damaris::model::ModifyModel myMod = damaris::model::ModifyModel(damaris_config_xml);
|
||||
|
Loading…
Reference in New Issue
Block a user