diff --git a/.gitignore b/.gitignore index f196a680c..46c4c21df 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ _* m3dc1_meshgen.log plot_geo unstructured/templates/*/*/*.txt + +# Ignore cmake build files +CMakeCache.txt +CMakeFiles diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..48d957449 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,96 @@ +cmake_minimum_required(VERSION 3.8) +project(m3dc1 LANGUAGES Fortran C CXX) + +macro(checkSetParam varName isRequired) + if("${${varName}}" STREQUAL "") # if varName is empty + set(${varName} $ENV{${varName}}) + if(("${${varName}}" STREQUAL "") AND ${isRequired}) # if ENV{varName} is empty also + message(FATAL_ERROR + "${varName} is not defined or in the environment, please specify ${varName}") + endif() + endif() +endmacro(checkSetParam varName) + +cmake_host_system_information(RESULT HOST QUERY HOSTNAME) +message(STATUS "Configuring to build on: ${HOST}") + +# rhel/centos place x86-64 libs in lib64 instead of lib +# this *shouldn't* effect searching the lib directory +# first on other distros where the default install location +# is lib instead of lib64 (like debian derivatives) +set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE) + +# prefer static libraries unless we explicitly specify no to +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") +if(BUILD_SHARED_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") +endif() + +# set the build type logically + # default is Debug if .git directory exists + # otherwise default is Release +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(BuildType) + +# add C++ compiler flags +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Cray") + # todo : set cray-specific cxx flags + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "XL") + # todo : check for regular xl vs bg/q xl compiler + # currently assuming bg/q + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qflag=w -glanglvl=extended0x") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") + # todo : set intel-specific cxx flags + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # todo : version checks to see which c++ standards are available + # and warn/error if the version is incompatible + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -Wextra") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # todo : version checks to see which c++ standards are available + # and warn/error if the version is incompatible + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z -Wall -Wextra") +endif() + +# add C compiler flags +if("${CMAKE_C_COMPILER_ID}" STREQUAL "Cray") + # todo : set cray-specific c flags + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "XL") + # todo : set xl-specific c flags + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") + # todo : set intel-specific c flags + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + # todo : version checks to see which c standards are available + # and warn/error if the version is incompatible + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # todo : version checks to see which c++ standards are available + # and warn/error if the version is incompatible + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra") +endif() + +# add Fortran compiler flags +if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Cray") + # todo : set cray-specific fortran flags + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") +elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "XL") + # todo : set xl-specific fortran flags + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}") +elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Intel") + # todo : set intel-specific fortran flags + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g noarg_temp_created") +elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-real-8 -Wall -cpp") +elseif("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-real-8 -Wall -cpp") +endif() + +message(STATUS "Configuring m3dc1_scorec") +add_subdirectory(m3dc1_scorec) +message(STATUS "Configuring unstructured") +add_subdirectory(unstructured) + diff --git a/build/config.sh b/build/config.sh new file mode 100755 index 000000000..b248f5e04 --- /dev/null +++ b/build/config.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +CC=$(which mpicc) +CXX=$(which mpicxx) +FORT=$(which mpif90) + +cmake \ + -DCMAKE_C_COMPILER=$CC \ + -DCMAKE_CXX_COMPILER=$CXX \ + -DCMAKE_Fortran_COMPILER=$FORT \ + -DCMAKE_INSTALL_PREFIX=$DEVROOT/install/m3dc1 \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=1 \ + -DUSE3D=1 \ + -DUSESCOREC=1 \ + -DM3DC1_ARCH=scorec \ + -DSCOREC_LIB_DIR=$DEVROOT/install/core/lib \ + -DSCOREC_INCLUDE_DIR=$DEVROOT/install/core/include \ + -DPETSC_DIR=$PETSC_DIR \ + -DPETSC_ARCH=$PETSC_ARCH \ + -DENABLE_TESTING=1 \ + .. diff --git a/cmake/BuildType.cmake b/cmake/BuildType.cmake new file mode 100644 index 000000000..08904fa26 --- /dev/null +++ b/cmake/BuildType.cmake @@ -0,0 +1,14 @@ +# Set a default build type if none was specified +set(default_build_type "Release") +if(EXISTS "${CMAKE_SOURCE_DIR}/.git") + set(default_build_type "Debug") +endif() + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake new file mode 100644 index 000000000..b9af648e3 --- /dev/null +++ b/cmake/FindFFTW.cmake @@ -0,0 +1,8 @@ +find_library(FFTW_LIB fftw3) +find_library(FFTW_THREADS_LIB fftw3_threads) + +set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTW_THREADS_LIB}) +#message(STATUS "FFTW Libraries : ${FFTW_LIBRARIES}") +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_LIBRARIES) +mark_as_advanced(FFTW_LIBRARIES) diff --git a/cmake/FindGSL.cmake b/cmake/FindGSL.cmake new file mode 100644 index 000000000..71141b624 --- /dev/null +++ b/cmake/FindGSL.cmake @@ -0,0 +1,8 @@ +find_library(GSL_LIB gsl) +find_library(GSL_CBLAS_LIB gslcblas) + +set(GSL_LIBRARIES ${GSL_LIB} ${GSL_CBLAS_LIB}) +#message(STATUS "GSL Libraries : ${GSL_LIBRARIES}") +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GSL DEFAULT_MSG GSL_LIBRARIES) +mark_as_advanced(GSL_LIBRARIES) diff --git a/cmake/FindPARMETIS.cmake b/cmake/FindPARMETIS.cmake new file mode 100644 index 000000000..f6139429e --- /dev/null +++ b/cmake/FindPARMETIS.cmake @@ -0,0 +1,17 @@ +if(NOT PARMETIS_FOUND) + find_library(PARMETIS_LIBRARY parmetis) + find_library(METIS_LIBRARY metis) + if(PARMETIS_FIND_REQUIRED) + if(NOT PARMETIS_LIBRARY) + message(FATAL_ERROR "Required library Parmetis not found!") + elseif(NOT METIS_LIBRARY) + message(FATAL_ERROR "Required library Metis not found!") + endif() + endif() + set(PARMETIS_LIBRARIES ${PARMETIS_LIBRARY} ${METIS_LIBRARY}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PARMETIS DEFAULT_MSG PARMETIS_LIBRARIES) +mark_as_advanced(PARMETIS_LIBRARIES) + diff --git a/cmake/FindPETSc.cmake b/cmake/FindPETSc.cmake new file mode 100644 index 000000000..ea34d6c2a --- /dev/null +++ b/cmake/FindPETSc.cmake @@ -0,0 +1,53 @@ +find_package(PkgConfig REQUIRED QUIET) + +checkSetParam(PETSC_DIR REQUIRED) +checkSetParam(PETSC_ARCH REQUIRED) +list(APPEND CMAKE_PREFIX_PATH "${PETSC_DIR}/${PETSC_ARCH}") +set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH true) + +if(PETSC_FIND_REQUIRED) + set(_PETSC_OPTS "REQUIRED") +endif() +if(PETSC_FIND_QUIETLY) + set(_PETSC_OPTS "QUIET") +endif() +if(PETSC_FIND_REQUIRED AND PETSC_FIND_QUIETLY) + set(_PETSC_OPTS "REQUIRED QUIET") +endif() + +pkg_check_modules(PETSC ${_PETSC_OPTS} PETSc) + +#TODO : set the below XXX_LIBRARIES and XXX_INCLUDE_DIRS for petsc external libs +if(PETSC_FOUND) + # todo : finding the external packages as PETSc dependencies currently relies on this *.cmake file + # it would be preferable for this functionality to be included in the relavent FindXXX.cmake files + # for each package + include(${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/PETScBuildInternal.cmake) + set(PETSC_INCLUDE_DIRS "${PETSC_STATIC_INCLUDE_DIRS}") + set(PETSC_LIBRARIES "${PETSC_STATIC_LDFLAGS};${PETSC_STATIC_LIBRARIES}") + if(PETSC_ZOLTAN_LIB) + message(STATUS "Found Zoltan library as PETSc dependency.") + set(ZOLTAN_FOUND true) + set(ZOLTAN_LIBRARIES ${PETSC_ZOLTAN_LIB} ${PETSC_PTSCOTCH_LIB} ${PETSC_PTSCOTCH_LIB} ${PETSC_SCOTCH_LIB} ${PETSC_SCOTCHERR_LIB}) + set(ZOLTAN_INCLUDE_DIRS ) + endif() + if(PETSC_PARMETIS_LIB) + message(STATUS "Found Metis/Parmetis library as PETSc dependency.") + set(PARMETIS_FOUND true) + set(METIS_FOUND true) + set(PARMETIS_LIBRARIES ${PETSC_PARMETIS_LIB} ${PETSC_METIS_LIB}) + set(METIS_LIBRARIES ${PETSC_METIS_LIB}) + set(PARMETIS_INCLUDE_DIRS ) + set(METIS_INCLUDE_DIRS ) + endif() + if(PETSC_HDF5_LIB) + message(STATUS "Found HDF5 library as PETSc dependency.") + set(HDF5_FOUND true) + set(HDF5_LIBRARIES ${PETSC_NDF5HL_FORTRAN_LIB} ${PETSC_HDF5_FORTRAN_LIB} ${PETSC_HDF5_HL_LIB} ${PETSC_HDF5_LIB}) + set(HDF5_INCLUDE_DIRS ) + endif() +endif(PETSC_FOUND) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PETSC DEFAULT_MSG PETSC_LIBRARIES PETSC_INCLUDE_DIRS) +mark_as_advanced(PETSC_LIBRARIES PETSC_INCLUDE_DIRS) diff --git a/cmake/FindScorec.cmake b/cmake/FindScorec.cmake new file mode 100644 index 000000000..8ef6d7361 --- /dev/null +++ b/cmake/FindScorec.cmake @@ -0,0 +1,111 @@ +# - Try to find SCOREC PUMI libraries +# Once done this will define +# SCOREC_FOUND - System has SCOREC +# SCOREC_INCLUDE_DIRS - The SCOREC include directories +# SCOREC_LIBRARIES - The libraries needed to use SCOREC +# SCOREC_DEFINITIONS - Compiler switches required for using SCOREC +# +# This implementation assumes a SCOREC install has the following structure +# VERSION/ +# include/*.h +# lib/*.a + +macro(scorecLibCheck libs isRequired) + foreach(lib ${libs}) + unset(scoreclib CACHE) + find_library(scoreclib "${lib}" PATHS ${SCOREC_LIB_DIR}) + if(scoreclib MATCHES "^scoreclib-NOTFOUND$") + if(${isRequired}) + message(FATAL_ERROR "SCOREC library ${lib} not found in ${SCOREC_LIB_DIR}") + else() + message("SCOREC library ${lib} not found in ${SCOREC_LIB_DIR}") + endif() + else() + set("SCOREC_${lib}_FOUND" TRUE CACHE INTERNAL "SCOREC library present") + set(SCOREC_LIBS ${SCOREC_LIBS} ${scoreclib}) + endif() + endforeach() +endmacro(scorecLibCheck) + +find_package(ZOLTAN REQUIRED) +find_package(PARMETIS REQUIRED) + +set(SCOREC_LIBS "") +if(ENABLE_SIMMETRIX) +set(SCOREC_LIB_NAMES + pumi + ma + mds + apf + apf_sim + apf_zoltan + parma + dsp + gmi + gmi_sim + mth + pcu + sam + spr + crv + lion + ph + size + ) +else() +set(SCOREC_LIB_NAMES +pumi +ma +crv +ph +sam +spr +apf_zoltan +parma +mds +apf +lion +gmi +mth +pcu + ) +endif() +scorecLibCheck("${SCOREC_LIB_NAMES}" TRUE) + +find_path(SCOREC_INCLUDE_DIR + NAMES apf.h PCU.h ma.h + PATHS ${SCOREC_INCLUDE_DIR}) +if(NOT EXISTS "${SCOREC_INCLUDE_DIR}") + message(FATAL_ERROR "SCOREC include dir not found") +endif() + +string(REGEX REPLACE + "/include$" "" + SCOREC_INSTALL_DIR + "${SCOREC_INCLUDE_DIR}") + +set(SCOREC_LIBRARIES ${SCOREC_LIBS} ${ZOLTAN_LIBRARIES} ${PARMETIS_LIBRARIES}) +set(SCOREC_INCLUDE_DIRS ${SCOREC_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments +find_package_handle_standard_args(SCOREC DEFAULT_MSG + SCOREC_LIBRARIES SCOREC_INCLUDE_DIR) + +mark_as_advanced(SCOREC_INCLUDE_DIR SCOREC_LIBRARIES) + +set(SCOREC_LINK_LIBS "") +foreach(lib ${SCOREC_LIB_NAMES}) + set(SCOREC_LINK_LIBS "${SCOREC_LINK_LIBS} -l${lib}") +endforeach() + +#pkgconfig +set(prefix "${SCOREC_INSTALL_DIR}") +set(includedir "${SCOREC_INCLUDE_DIR}") +configure_file( + "${CMAKE_SOURCE_DIR}/cmake/libScorec.pc.in" + "${CMAKE_BINARY_DIR}/libScorec.pc" + @ONLY) + +INSTALL(FILES "${CMAKE_BINARY_DIR}/libScorec.pc" DESTINATION lib/pkgconfig) + diff --git a/cmake/FindZOLTAN.cmake b/cmake/FindZOLTAN.cmake new file mode 100644 index 000000000..a649a9c80 --- /dev/null +++ b/cmake/FindZOLTAN.cmake @@ -0,0 +1,11 @@ +if(NOT ZOLTAN_FOUND) + find_library(ZOLTAN_LIBRARY zoltan) + if(ZOLTAN_FIND_REQUIRED AND NOT ZOLTAN_LIBRARY) + message(FATAL_ERROR "Require library Zoltan not found!") + endif() + set(ZOLTAN_LIBRARIES ${ZOLTAN_LIBRARY}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZOLTAN DEFAULT_MSG ZOLTAN_LIBRARIES) +mark_as_advanced(ZOLTAN_LIBRARIES) \ No newline at end of file diff --git a/cmake/libScorec.pc.in b/cmake/libScorec.pc.in new file mode 100644 index 000000000..67db48775 --- /dev/null +++ b/cmake/libScorec.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +libdir=@prefix@/lib +includedir=@includedir@ + +Name: SCOREC libraries +URL: http://www.scorec.rpi.edu +Description: SCOREC PUMI and MeshAdapt +Version: 1.0 +Libs: -L${libdir} @SCOREC_LINK_LIBS@ -lzoltan -lparmetis -lmetis -lstd++ +Cflags: -I${includedir} diff --git a/cmake/libSimmetrix.pc.in b/cmake/libSimmetrix.pc.in new file mode 100644 index 000000000..1d86005e0 --- /dev/null +++ b/cmake/libSimmetrix.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +libdir=@prefix@/lib +includedir=@includedir@ + +Name: SIMMETRIX libraries +URL: http://www.simmetrix.com +Description: SIMMETRIX +Version: 1.0 +Libs: -L${libdir} @SIMMETRIX_LINK_LIBS@ +Cflags: -I${includedir} diff --git a/cmake/petsc.cmake b/cmake/petsc.cmake new file mode 100644 index 000000000..6826f1581 --- /dev/null +++ b/cmake/petsc.cmake @@ -0,0 +1,21 @@ +function (petsc_get_version) + if (EXISTS "${PETSC_DIR}/include/petscversion.h") + file (STRINGS "${PETSC_DIR}/include/petscversion.h" vstrings REGEX "#define PETSC_VERSION_(RELEASE|MAJOR|MINOR|SUBMINOR|PATCH) ") + foreach (line ${vstrings}) + string (REGEX REPLACE " +" ";" fields ${line}) # break line into three fields (the first is always "#define") + list (GET fields 1 var) + list (GET fields 2 val) + set (${var} ${val} PARENT_SCOPE) + set (${var} ${val}) # Also in local scope so we have access below + endforeach () + if (PETSC_VERSION_RELEASE) + if ($(PETSC_VERSION_PATCH) GREATER 0) + set (PETSC_VERSION "${PETSC_VERSION_MAJOR}${PETSC_VERSION_MINOR}" PARENT_SCOPE) + else () + set (PETSC_VERSION "${PETSC_VERSION_MAJOR}${PETSC_VERSION_MINOR}" PARENT_SCOPE) + endif () + endif () + else () + message (SEND_ERROR "PETSC_DIR can not be used, ${PETSC_DIR}/include/petscversion.h does not exist") + endif () +endfunction () \ No newline at end of file diff --git a/m3dc1_scorec/CMakeLists.txt b/m3dc1_scorec/CMakeLists.txt index a16f066e1..ca913b034 100644 --- a/m3dc1_scorec/CMakeLists.txt +++ b/m3dc1_scorec/CMakeLists.txt @@ -1,63 +1,8 @@ -#This is the top M3DC1_SCOREC CMakeList File for the Build - -#Setting Version Number, Project Name -cmake_minimum_required (VERSION 2.8) -project (m3dc1_scorec) -enable_language (Fortran) - -# make sure that the default is a RELEASE -if (NOT CMAKE_BUILD_TYPE) - set (CMAKE_BUILD_TYPE RELEASE CACHE STRING - "Choose the type of build, options are: None Debug Release." - FORCE) -endif (NOT CMAKE_BUILD_TYPE) - -# default installation -#get_filename_component (default_prefix ".." ABSOLUTE) -#set (CMAKE_INSTALL_PREFIX ${default_prefix} CACHE STRING -# "Choose the installation directory; by default it installs in the NORMA directory." -# FORCE) - -# FFLAGS depend on the compiler -get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) -message (Fortran_COMPILER_NAME = ${Fortran_COMPILER_NAME}) - -#unless building shared libs, then select static libs -# if both static and shared libs are available -set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so") -if(BUILD_SHARED_LIBS) - set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") -endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -#Settings options for testing -enable_testing() -include(CTest) -#This will be set to ON by the CTest driver script (and only by that) -option(ENABLE_TESTING "Build for CTest" OFF) -set(MPIRUN "mpirun" - CACHE string - "the mpirun or srun executable") -set(MPIRUN_PROCFLAG "-np" - CACHE string - "the command line flag to give process count to MPIRUN") - -#Doxygen generation system -find_package(Doxygen) -if(DOXYGEN_FOUND) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in - ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) -add_custom_target(doc -${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile -WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -COMMENT "Generating API documentation with Doxygen" VERBATIM -) -endif(DOXYGEN_FOUND) - -configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/m3dc1_scorecConfig.cmake.in" - "${CMAKE_BINARY_DIR}/m3dc1_scorecConfig.cmake") - -#Source and header files +#TODO : only include petsc/trilinos-specific files +# if they are present (allows removal of +# #ifdefs around entire files) set(SOURCES api/m3dc1_scorec.cc src/BSpline.cc @@ -72,14 +17,15 @@ set(SOURCES src/m3dc1_model.cc src/m3dc1_slnTransfer.cc src/ReducedQuinticExplicit.cc - src/slntransferUtil.cc + src/slntransferUtil.cc fortran/c1_12_element.F90 fortran/explicit_element.F90 fortran/explicit_element_interface.F90) set(HEADERS api/name_convert.h - api/m3dc1_scorec.h + api/m3dc1_types.h + api/m3dc1_scorec.h include/BSpline.h include/m3dc1_field.h include/m3dc1_ls.h @@ -88,136 +34,154 @@ set(HEADERS include/m3dc1_slnTransfer.h include/PolyNomial.h include/ReducedQuinticImplicit.h - include/CMODGeoExpression.h + include/CMODGeoExpression.h include/m3dc1_matrix.h include/m3dc1_sizeField.h include/ReducedQuinticExplicit.h include/slntransferUtil.h include/Expression.h - include/ReducedQuintic.h) -set(CMAKE_MODULE_PATH - ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/api) -set(TARGET_LIB_NAME m3dc1_scorec) - -find_package(Scorec QUIET REQUIRED) -include_directories(${SCOREC_INCLUDE_DIRS}) -set(DEP_LIBS ${DEP_LIBS} ${SCOREC_LIBRARIES} ) - -if (ENABLE_SIMMETRIX) -set(ENABLE_PETSC "OFF") -set(ENABLE_TRILINOS "OFF") -find_package(Simmetrix QUIET REQUIRED) -include_directories(${SIMMETRIX_INCLUDE_DIRS}) -set(DEP_LIBS ${DEP_LIBS} ${SIMMETRIX_LIBRARIES} ) -set(TARGET_LIB_NAME ${TARGET_LIB_NAME}_simmetrix) -find_package(Lapack QUIET REQUIRED) -set(DEP_LIBS ${DEP_LIBS} ${LAPACK_LIBRARIES} ) - add_executable(m3dc1_meshgen test/meshgen/m3dc1_meshgen.cc) - target_link_libraries(m3dc1_meshgen ${DEP_LIBS}) - target_link_libraries(m3dc1_meshgen ${TARGET_LIB_NAME}) - INSTALL(TARGETS m3dc1_meshgen RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) - add_executable(convert_sim_sms test/meshgen/convert_sim_sms.cc) - target_link_libraries(convert_sim_sms ${DEP_LIBS}) - target_link_libraries(convert_sim_sms ${TARGET_LIB_NAME}) - INSTALL(TARGETS convert_sim_sms RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) - add_executable(convert_polar test/convert_polar/main.cc) - target_link_libraries(convert_polar ${DEP_LIBS}) - target_link_libraries(convert_polar ${TARGET_LIB_NAME}) - INSTALL(TARGETS convert_polar RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -elseif (ENABLE_TRILINOS) -find_package(Trilinos QUIET REQUIRED) -find_package(Boost QUIET REQUIRED) -include_directories(${TRILINOS_INCLUDE_DIRS}) -set(DEP_LIBS ${DEP_LIBS} ${TRILINOS_LIBRARIES}) -set(DEP_LIBS ${DEP_LIBS} ${BOOST_LIBRARIES}) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DM3DC1_TRILINOS") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DM3DC1_TRILINOS") -set(TARGET_LIB_NAME ${TARGET_LIB_NAME}_trilinos) +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/m3dc1_scorecConfig.cmake.in" + "${CMAKE_BINARY_DIR}/m3dc1_scorecConfig.cmake") + +set(SCOREC_LIB_NAME m3dc1_scorec) + +if(ENABLE_SIMMETRIX) + set(ENABLE_PETSC "OFF") + set(ENABLE_TRILINOS "OFF") + find_package(Simmetrix REQUIRED) + list(APPEND INCLUDE_DIRS ${SIMMETRIX_INCLUDE_DIRS}) + #set(LINK_LIBS ${LINK_LIBS} ${SIMMETRIX_LIBRARIES} ) + set(SCOREC_LIB_NAME ${SCOREC_LIB_NAME}_simmetrix) + find_package(Lapack REQUIRED) + #set(LINK_LIBS ${LINK_LIBS} ${LAPACK_LIBRARIES} ) +elseif(ENABLE_TRILINOS) + find_package(Trilinos REQUIRED) + find_package(Boost REQUIRED) + #include_directories(${TRILINOS_INCLUDE_DIRS}) + #set(LINK_LIBS ${LINK_LIBS} ${TRILINOS_LIBRARIES}) + #set(LINK_LIBS ${LINK_LIBS} ${BOOST_LIBRARIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DM3DC1_TRILINOS") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DM3DC1_TRILINOS") + set(SCOREC_LIB_NAME ${SCOREC_LIB_NAME}_trilinos) else() set(ENABLE_PETSC "ON") endif() -if (ENABLE_PETSC) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DM3DC1_PETSC") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DM3DC1_PETSC") -find_package(Hdf5 QUIET REQUIRED) -set(DEP_LIBS ${DEP_LIBS} ${HDF5_LIBRARIES} ) -find_package(Petsc QUIET REQUIRED) -include_directories(${PETSC_INCLUDE_DIRS}) -set(DEP_LIBS ${DEP_LIBS} ${PETSC_LIBRARIES} ) +if(ENABLE_PETSC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DM3DC1_PETSC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DM3DC1_PETSC") + find_package(PETSc REQUIRED) + find_package(Hdf5 REQUIRED) + list(APPEND LINK_LIBS ${PETSC_LIBRARIES} ) + list(APPEND INCLUDE_DIRS ${PETSC_INCLUDE_DIRS} ) endif() if(ENABLE_COMPLEX) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPETSC_USE_COMPLEX") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPETSC_USE_COMPLEX") -set(TARGET_LIB_NAME ${TARGET_LIB_NAME}_complex) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPETSC_USE_COMPLEX") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPETSC_USE_COMPLEX") + set(SCOREC_LIB_NAME ${SCOREC_LIB_NAME}_complex) endif() if(ENABLE_OPENMP) - if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") - elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopenmp") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp") - else() - message(WARNING "Unexpected compiler type ${CMAKE_CXX_COMPILER_ID}") - endif() - set(TARGET_LIB_NAME ${TARGET_LIB_NAME}_openmp) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopenmp") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp") + set(SCOREC_LIB_NAME ${SCOREC_LIB_NAME}_openmp) endif() -add_library(${TARGET_LIB_NAME} ${SOURCES}) -target_link_libraries(${TARGET_LIB_NAME} ${DEP_LIBS}) +find_package(Scorec REQUIRED) +list(APPEND LINK_LIBS ${SCOREC_LIBRARIES}) +list(APPEND INCLUDE_DIRS ${SCOREC_INCLUDE_DIRS}) + +add_library(${SCOREC_LIB_NAME} ${SOURCES}) +target_include_directories(${SCOREC_LIB_NAME} PUBLIC + $ + $ + $ + $ + ${INCLUDE_DIRS}) +target_link_libraries(${SCOREC_LIB_NAME} ${LINK_LIBS}) + +message(STATUS "Include directories : \n\t ${INCLUDE_DIRS}") +message(STATUS "Linking against : \n\t ${LINK_LIBS}") INSTALL(FILES ${HEADERS} DESTINATION include) -INSTALL(TARGETS ${TARGET_LIB_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) +INSTALL(TARGETS ${SCOREC_LIB_NAME} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) + +if(ENABLE_TESTING) + add_executable(fieldOps test/fieldOps/main.cc) + target_link_libraries(fieldOps ${LINK_LIBS} ${SCOREC_LIB_NAME}) + + if(NOT ENABLE_COMPLEX) + add_executable(aggOrdering test/aggOrdering/main.cc) + target_link_libraries(aggOrdering ${LINK_LIBS}) + target_link_libraries(aggOrdering ${SCOREC_LIB_NAME}) + endif() + + add_executable(field2vec2field test/f2v2f/main.cc) + target_link_libraries(field2vec2field ${LINK_LIBS} ${SCOREC_LIB_NAME}) + + add_executable(allocate test/allocate/main.cc) + target_link_libraries(allocate ${LINK_LIBS} ${SCOREC_LIB_NAME}) -if (ENABLE_TESTING) -if (ENABLE_PETSC) add_executable(solver test/solver/main.cc) - target_link_libraries(solver ${DEP_LIBS}) - target_link_libraries(solver ${TARGET_LIB_NAME}) + target_link_libraries(solver ${LINK_LIBS}) + target_link_libraries(solver ${SCOREC_LIB_NAME}) INSTALL(TARGETS solver RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -endif() -if (ENABLE_TRILINOS) - add_executable(epetra test/epetra/main.cc) - target_link_libraries(epetra ${DEP_LIBS}) - target_link_libraries(epetra ${TARGET_LIB_NAME}) - INSTALL(TARGETS epetra RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -endif() -add_executable(show_meshcount test/create_smb/show_meshcount.cc) -target_link_libraries(show_meshcount ${DEP_LIBS}) -target_link_libraries(show_meshcount ${TARGET_LIB_NAME}) -INSTALL(TARGETS show_meshcount RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + if(ENABLE_SIMMETRIX) + add_executable(m3dc1_meshgen test/meshgen/m3dc1_meshgen.cc) + target_link_libraries(m3dc1_meshgen ${LINK_LIBS}) + target_link_libraries(m3dc1_meshgen ${SCOREC_LIB_NAME}) + INSTALL(TARGETS m3dc1_meshgen RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + + add_executable(convert_polar test/convert_polar/main.cc) + target_link_libraries(convert_polar ${LINK_LIBS}) + target_link_libraries(convert_polar ${SCOREC_LIB_NAME}) + INSTALL(TARGETS convert_polar RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + endif() endif() #add_executable(ghosting_test test/ghosting/main.cc) -#target_link_libraries(ghosting_test ${DEP_LIBS}) -#target_link_libraries(ghosting_test ${TARGET_LIB_NAME}) +#target_link_libraries(ghosting_test ${LINK_LIBS}) +#target_link_libraries(ghosting_test ${SCOREC_LIB_NAME}) #INSTALL(TARGETS ghosting_test RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +add_executable(show_meshcount test/create_smb/show_meshcount.cc) +target_link_libraries(show_meshcount ${LINK_LIBS}) +target_link_libraries(show_meshcount ${SCOREC_LIB_NAME}) +INSTALL(TARGETS show_meshcount RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +endif() #enable_testing + #binary distribution package set(CPACK_GENERATOR "TGZ") set(CPACK_PACKAGE_VERSION "1.0.1") include(CPack) -message("ENV_FLAGS = $ENV{FFLAGS}") -message("CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}") -message("CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}") -message("CMAKE_Fortran_COMPILER_INIT = ${CMAKE_Fortran_COMPILER_INIT}") -message("CMAKE_Fortran_COMPILER_FULLPATH = -${CMAKE_Fortran_COMPILER_FULLPATH}") -message("CMAKE_Fortran_COMPILER = ${CMAKE_Fortran_COMPILER}") -message("CMAKE_Fortran_FLAGS = ${CMAKE_Fortran_FLAGS}") -message("CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") - +# Settings options for testing +enable_testing() +include(CTest) +# This will be set to ON by the CTest driver script (and only by that) +option(ENABLE_TESTING "Build for CTest" OFF) +set(MPIRUN "mpirun" + CACHE string + "the mpirun or srun executable") +set(MPIRUN_PROCFLAG "-np" + CACHE string + "the command line flag to give process count to MPIRUN") +#Doxygen generation system +find_package(Doxygen) +if(DOXYGEN_FOUND) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) + add_custom_target(doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" VERBATIM + ) +endif(DOXYGEN_FOUND) diff --git a/m3dc1_scorec/cmake/FindHdf5.cmake b/m3dc1_scorec/cmake/FindHdf5.cmake index b129e7e97..beae053c4 100644 --- a/m3dc1_scorec/cmake/FindHdf5.cmake +++ b/m3dc1_scorec/cmake/FindHdf5.cmake @@ -69,7 +69,7 @@ endforeach() set(prefix "${HDF5_INSTALL_DIR}") set(includedir "${HDF5_INCLUDE_DIR}") configure_file( - "${CMAKE_HOME_DIRECTORY}/cmake/libHdf5.pc.in" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libHdf5.pc.in" "${CMAKE_BINARY_DIR}/libHdf5.pc" @ONLY) diff --git a/unstructured/CMakeLists.txt b/unstructured/CMakeLists.txt new file mode 100644 index 000000000..a565438a0 --- /dev/null +++ b/unstructured/CMakeLists.txt @@ -0,0 +1,248 @@ +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +set(SOURCES + fftw_fortran.c + read_namelist.cpp + gsl_wrapper.c + random.c + spline.f90 + kprad.f90 + math.f90 + read_ascii.f90 + interpolate.f90 + control.f90 + iterdb.f90 + read_gyro.f90 + read_neo.f90 + region.f90 + radiation.f90 + element.f90 + field.f90 + nintegrate_mod.f90 + M3Dmodules.f90 + resistive_wall.f90 + m3dc1_nint.f90 + boundary.f90 + gyroviscosity.f90 + bootstrap.f90 + metricterms_new.f90 + two_fluid.f90 + harned_mikic.f90 + biharmonic.f90 + electric_field.f90 + pellet.f90 + parallel_heat_flux.f90 + temperature_plots.f90 + electrostatic_potential.f90 + newvar.f90 + runaway.f90 + diagnostics.f90 + read_schaffer_field.f90 + neutral_beam.f90 + coils.f90 + coil_sets.f90 + model.f90 + fit_magnetics.f90 + wall.f90 + init_common.f90 + gradshafranov.f90 + rmp.f90 + kprad_m3dc1.f90 + readgeqdsk.f90 + read_jsolver.f90 + read_dskbal.f90 + init_cyl.f90 + init_rwm.f90 + init_solovev.f90 + init_circle.f90 + init_basicj.f90 + init_tilt.f90 + init_taylor.f90 + init_force_free.f90 + init_gem.f90 + init_wave.f90 + init_gmode.f90 + init_strauss.f90 + init_mri.f90 + init_rotating_cylinder.f90 + init_eqdsk.f90 + init_dskbal.f90 + init_jsolver.f90 + init_3dwave.f90 + init_3ddiffusion.f90 + init_frs.f90 + init_ftz.f90 + init_eigen.f90 + init_intkink.f90 + init_lz.f90 + init_kstar.f90 + init_basicq.f90 + transport.f90 + auxiliary_fields.f90 + time_step_split.f90 + time_step_unsplit.f90 + hdf5_output.f90 + particle.f90 + time_step.f90 + output.f90 + restart_hdf5.f90 + error_estimate.f90 + adapt.f90 + input.f90 + ludef_t.f90 + restart.f90 + init_conds.f90 + get_pc_skip_count.f90 + ) +# newpar.f90 + +set(BIN_NAME m3dc1) + +find_package(PETSc) +if(PETSC_FOUND AND USEPETSC) + set(PETSC_SOURCES + basic_mesh.f90 + petsc_vector.f90 + petsc_matrix.f90) + set(SOURCES "${SOURCES};${PETSC_SOURCES}") + list(APPEND DEFS -DUSEPETSC -Dmesh_mod=basic_mesh_mod -Dvector_mod=petsc_vector_mod -Dmatrix_mod=petsc_matrix_mod) + set(POSTFIX "${POSTFIX}-petsc") +elseif(PETSC_FOUND) + include(${CMAKE_SOURCE_DIR}/cmake/petsc.cmake) + petsc_get_version() + message(STATUS "Petsc version detected as : ${PETSC_VERSION}") + list(APPEND DEFS -DPETSC_FORTRAN_PETSCTRUTH_INT -DPETSC_VERSION=${PETSC_VERSION}) +endif() + +#find_package(TRILINOS) +if(TRILINOS_FOUND AND USETRILINOS) + list(APPEND DEFS -DM3DC1_TRILINOS) + set(POSTFIX "${POSTFIX}-trilinos") +endif() + +find_package(Scorec) +if(SCOREC_FOUND AND USESCOREC) + if(TRILINOS_FOUND AND USETRILINOS) + set(SCOREC_SOURCES + scorec_mesh.f90 + scorec_vector.f90 + scorec_matrix.f90) + endif() + if(PETSC_FOUND AND USESCOREC) + set(SCOREC_SOURCES + scorec_mesh.f90 + scorec_vector.f90 + scorec_matrix.f90 + PETScInterface.cpp) + endif() + set(SOURCES "${SOURCES};${SCOREC_SOURCES}") + list(APPEND DEFS -DUSESCOREC -Dmesh_mod=scorec_mesh_mod -Dvector_mod=scorec_vector_mod -Dmatrix_mod=scorec_matrix_mod -Dmatrix_type=scorec_matrix -Dvector_type=scorec_vector) + if(USERW) + list(APPEND DEFS -DUSERW) + set(POSTFIX "${POSTFIX}-rw") + else() + list(APPEND DEFS -Dglobalinsertval=insertval -Dglobalentdofs=entdofs) + endif() +endif() + +if(MATRIX_DUMP) + list(APPEND DEFS -DMATRIX_DUMP) +endif() + +#find_package(ZOLTAN) +#find_package(PARMETIS) +#find_package(METIS) +#find_package(HDF5) +#find_package(ZLIB) +find_package(GSL REQUIRED) +find_package(FFTW REQUIRED) + +if(USE3D) + set(BIN_NAME "${BIN_NAME}_3d") + list(APPEND DEFS -DUSE3D -Dvectype=real -DMAX_PTS=125) + set(POSTFIX "${POSTFIX}-125") +else() + set(BIN_NAME "${BIN_NAME}_2d") + list(APPEND DEFS -DMAX_PTS=25) + set(POSTFIX "${POSTFIX}-25") + if(COM) + list(APPEND DEFS -Dvectype=complex -DUSECOMPLEX) + if(PAR) + set(POSTFIX "${POSTFIX}-pix") + else() + set(POSTFIX "${POSTFIX}-complex") + endif() + else() + list(APPEND DEFS -Dvectype=real) + endif() +endif() + +if(USEOMP) + set(POSTFIX "${POSTFIX}-omp") +endif() + +execute_process(COMMAND date OUTPUT_VARIABLE DATE) +string(REGEX REPLACE "\n$" "" DATE "${DATE}") +message(STATUS "Build date : ${DATE}") +execute_process(COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/release_version OUTPUT_VARIABLE VERSION) +string(REGEX REPLACE "\n$" "" VERSION "${VERSION}") +message(STATUS "Release version : ${VERSION}") +list(APPEND DEFS -DNOUSE -DDATE_BUILT='${DATE}' -DRELEASE_VERSION='${VERSION}') + +if(NOT ARCH) + if(M3DC1_ARCH) + set(ARCH ${M3DC1_ARCH}) + else() + set(ARCH ${HOST}) + endif() +endif() +set(POSTFIX "${ARCH}${POSTFIX}") + +include(cmake/${ARCH}.cmake) + +set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none") + +add_library(m3dc1 ${SOURCES}) +target_include_directories(m3dc1 PUBLIC + ${SCOREC_INCLUDE_DIRS} + ${PETSC_INCLUDE_DIRS}) +#todo detect m3cdc1_scorec name +target_link_libraries(m3dc1 + ${DEPS} + m3dc1_scorec + ${SCOREC_LIBRARIES} + ${PETSC_LIBRARIES}) +target_compile_definitions(m3dc1 PUBLIC ${DEFS}) + +#todo : build depency list as we go instead of adding all at the end (trilinos, etc) + +if(USETRILINOS) + set(BIN_NAME "${BIN_NAME}_trilinos") +endif() +if(COM) + set(BIN_NAME "${BIN_NAME}_complex") +endif() +if(OMP) + set(BIN_NAME "${BIN_NAME}_omp") +endif() + +add_executable(${BIN_NAME} newpar.f90) +target_include_directories(${BIN_NAME} PUBLIC + ${CMAKE_SOURCE_DIR}/m3dc1_scorec/api + ${SCOREC_INCLUDE_DIRS} + ${PETSC_INCLUDE_DIRS}) +target_link_libraries(${BIN_NAME} m3dc1 m3dc1_scorec ${SCOREC_LIBRARIES} ${PETSC_LIBRARIES} ${FFTW_LIBRARIES} ${GSL_LIBRARIES}) + + +#find_package(PSPLINE) +#add_executable(readgato polar.f90 readgato.f90) +#target_link_libraries(readgato ${PSPLINE_LIBRARIES}) + +#add_executable(read_jsolver polar.f90 read_jsolver_exec.f90) +#target_link_libraries(read_jsolver ${PSPLINE_LIBRARIES}) + +#add_executable(a2cc readaeqdsk.f90 a2cc.f90) +#target_link_libraries(a2cc ) +#target_compile_definitions(a2cc PUBLIC ${DEFS}) + +#add_executable(kprad kprad.f90 kprad_test.f90) diff --git a/unstructured/cmake/scorec.cmake b/unstructured/cmake/scorec.cmake new file mode 100644 index 000000000..c1ceb6453 --- /dev/null +++ b/unstructured/cmake/scorec.cmake @@ -0,0 +1 @@ +set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-real-8 -fdefault-double-8 -cpp -DKSPITS") diff --git a/unstructured/field.f90 b/unstructured/field.f90 index ae5f354a8..357e39c7a 100644 --- a/unstructured/field.f90 +++ b/unstructured/field.f90 @@ -1,5 +1,14 @@ module field - use vector_mod +#ifdef USESCOREC + use scorec_vector_mod + use scorec_matrix_mod +#elif USEPETSC + use petsc_vector_mod + use petsc_matrix_mod +#elif USETRILINOS + use trilinos_vector_mod + use trilinos_matrix_mod +#endif implicit none diff --git a/unstructured/scorec_matrix.f90 b/unstructured/scorec_matrix.f90 index 9eeefc3f5..27d3b306c 100644 --- a/unstructured/scorec_matrix.f90 +++ b/unstructured/scorec_matrix.f90 @@ -202,7 +202,7 @@ end subroutine scorec_matrix_destroy !==================================================================== subroutine scorec_matrix_matvecmult(mat,vin,vout) - use vector_mod + use scorec_vector_mod implicit none @@ -343,7 +343,7 @@ end subroutine scorec_matrix_insert_global_complex ! linear matrix solve with scorec data structures !==================================================================== subroutine scorec_matrix_solve(mat, v, ierr) - use vector_mod + use scorec_vector_mod #if PETSC_VERSION >= 38 use petsc @@ -435,7 +435,7 @@ end subroutine scorec_matrix_flush ! with field i !====================================================================== subroutine scorec_matrix_get_node_indices(mat, inode, irow, icol) - use vector_mod + use scorec_vector_mod implicit none type(scorec_matrix), intent(in) :: mat integer, intent(in) :: inode @@ -464,7 +464,7 @@ end subroutine scorec_matrix_get_node_indices ! with field i !====================================================================== subroutine scorec_matrix_get_global_node_indices(mat, inode, irow, icol) - use vector_mod + use scorec_vector_mod implicit none type(scorec_matrix), intent(in) :: mat integer, intent(in) :: inode @@ -493,7 +493,7 @@ end subroutine scorec_matrix_get_global_node_indices ! with field i !====================================================================== subroutine scorec_matrix_get_element_indices(mat, itri, irow, icol) - use vector_mod + use scorec_vector_mod implicit none type(scorec_matrix), intent(in) :: mat integer, intent(in) :: itri @@ -545,7 +545,7 @@ subroutine identity_row(mat, irow) end subroutine identity_row subroutine set_row_vals(mat, irow, ncols, icols, vals) - use vector_mod + use scorec_vector_mod type(scorec_matrix) :: mat integer, intent(in) :: irow, ncols diff --git a/unstructured/scorec_vector.f90 b/unstructured/scorec_vector.f90 index 6a039b655..d83f65068 100644 --- a/unstructured/scorec_vector.f90 +++ b/unstructured/scorec_vector.f90 @@ -216,7 +216,7 @@ end subroutine scorec_vector_get_global_node_indices ! adds v2 to v1. result is stored in v1 !====================================================================== subroutine scorec_vector_add(v1, v2) - use mesh_mod + use scorec_mesh_mod implicit none @@ -259,7 +259,7 @@ end subroutine scorec_vector_const_real subroutine scorec_vector_get_node_data_real(v, iplace, inode, data, rotate) - use mesh_mod + use scorec_mesh_mod implicit none type(scorec_vector), intent(in) :: v integer, intent(in) :: inode, iplace @@ -308,7 +308,7 @@ end subroutine scorec_vector_get_node_data_real #ifdef USECOMPLEX subroutine scorec_vector_get_node_data_complex(v, iplace, inode, data, & rotate) - use mesh_mod + use scorec_mesh_mod implicit none type(scorec_vector), intent(in) :: v integer, intent(in) :: inode, iplace @@ -351,7 +351,7 @@ end subroutine scorec_vector_get_node_data_complex #endif subroutine scorec_vector_set_node_data_real(v, iplace, inode, data, rotate) - use mesh_mod + use scorec_mesh_mod implicit none type(scorec_vector), intent(inout) :: v integer, intent(in) :: inode, iplace @@ -395,7 +395,7 @@ end subroutine scorec_vector_set_node_data_real #ifdef USECOMPLEX subroutine scorec_vector_set_node_data_complex(v, iplace, inode, data, rotate) - use mesh_mod + use scorec_mesh_mod implicit none type(scorec_vector), intent(inout) :: v integer, intent(in) :: inode, iplace @@ -444,7 +444,7 @@ end subroutine scorec_vector_set_node_data_complex ! copy data from vin to vout !====================================================================== subroutine scorec_vector_copy(vout,vin) - use mesh_mod + use scorec_mesh_mod implicit none @@ -535,7 +535,7 @@ subroutine scorec_vector_insert_block(v, itri, m, val, iop) end subroutine scorec_vector_insert_block subroutine scorec_vector_get_element_indices(isize, itri, ind) - use mesh_mod + use scorec_mesh_mod implicit none integer, intent(in) :: isize, itri integer, intent(out), dimension(isize,dofs_per_element) :: ind