Browse Source

Add makefiles + fix blitz for xios

Pierre-Yves Barriat 5 months ago
parent
commit
12bd00d72a

+ 20 - 0
.gitignore

@@ -0,0 +1,20 @@
+sources/oasis3-mct/ecconf/
+sources/xios-2.5/.cache/
+sources/xios-2.5/.void_file
+sources/xios-2.5/Makefile
+sources/xios-2.5/arch.env
+sources/xios-2.5/arch.fcm
+sources/xios-2.5/arch.path
+sources/xios-2.5/bld_dir.cfg
+sources/xios-2.5/cfg/
+sources/xios-2.5/config.fcm
+sources/xios-2.5/done/
+sources/xios-2.5/extern/blitz/
+sources/xios-2.5/extern/boost/
+sources/xios-2.5/extern/netcdf4
+sources/xios-2.5/extern/rapidxml/
+sources/xios-2.5/flags/
+sources/xios-2.5/inc/
+sources/xios-2.5/obj/
+sources/xios-2.5/ppsrc/
+sources/xios-2.5/tools/FCM/

+ 51 - 0
sources/amip-forcing/src/Makefile

@@ -0,0 +1,51 @@
+executable = ../bin/amip-forcing.exe
+
+FC      = mpif90
+FFLAGS  = -O2 -fp-model precise -march=core-avx2 -r8
+
+LD      = mpif90
+LDFLAGS = -O2 -fp-model precise -march=core-avx2
+
+OASIS_BASE_DIR = ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf
+OASIS_MOD_DIR  = $(OASIS_BASE_DIR)/build/lib/psmile.MPI1
+OASIS_INC_DIR  = $(OASIS_BASE_DIR)/lib/psmile/include
+OASIS_LIB_DIR  = $(OASIS_BASE_DIR)/lib
+OASIS_LIBS     = -lpsmile.MPI1 -lmct -lmpeu -lscrip
+
+MPI_BASE_DIR            := ${EBROOTOPENMPI}
+ifneq ($(strip $(MPI_BASE_DIR)),)
+MPI_INC_DIR             := $(MPI_BASE_DIR)$(addprefix /,include)
+MPI_LIB_DIR             := $(MPI_BASE_DIR)$(addprefix /,lib)
+endif
+MPI_LIBS                := mpi mpi_mpifh
+
+ifneq ($(strip ${EBROOTNETCDFMINFORTRAN}),)
+NETCDF_LIB_DIR          := ${EBROOTNETCDFMINFORTRAN}/lib
+NETCDF_INC_DIR          := ${EBROOTNETCDFMINFORTRAN}/include
+endif
+NETCDF_LIBS             := netcdff netcdf
+
+VPATH = cplng
+
+cplng_srcs = \
+    cplng_data_mod.F90 \
+    cplng_init_mod.F90 \
+    cplng_config_mod.F90 \
+    cplng_exchange_mod.F90 \
+    cplng_finalize_mod.F90 \
+    cplng_mod.F90
+
+amipforc_srcs = amip_forcing_mod.F90 amip_forcing.F90
+
+$(executable): config_mod.o $(cplng_srcs:.F90=.o) $(amipforc_srcs:.F90=.o)
+	$(LD) $(LDFLAGS) -o $@ $^ -L$(OASIS_LIB_DIR) $(OASIS_LIBS) \
+	    $(addprefix -L,$(NETCDF_LIB_DIR))  $(addprefix -l,$(NETCDF_LIBS))  \
+	    $(addprefix -L,$(MPI_LIB_DIR))     $(addprefix -l,$(MPI_LIBS))
+
+
+%.o: %.F90
+	$(FC) $(FFLAGS) -c -I$(OASIS_MOD_DIR) $(addprefix -I,$(NETCDF_INC_DIR)) $(addprefix -I,$(MPI_INC_DIR)) $<
+
+.PHONY: clean
+clean:
+	@rm -f *.o *.mod

+ 65 - 0
sources/ifs-36r4/Makefile.d/Makefile.config.ecconf

@@ -0,0 +1,65 @@
+$(info --> Reading $(lastword $(MAKEFILE_LIST)))
+
+comma := ,
+
+ECEARTH_SRC_DIR         := ${HOME}/models/ecearth_3.3.4.2/sources
+
+MPI_BASE_DIR            := ${EBROOTOPENMPI}
+ifneq ($(strip $(MPI_BASE_DIR)),)
+MPI_INC_DIR             := $(MPI_BASE_DIR)$(addprefix /,include)
+MPI_LIB_DIR             := $(MPI_BASE_DIR)$(addprefix /,lib)
+endif
+MPI_LIBS                := mpi mpi_mpifh
+
+OASIS_BASE_DIR          := $(ECEARTH_SRC_DIR)/oasis3-mct
+OASIS_ARCH              := ecconf
+OASIS_MPI_CHAN          := MPI1
+OASIS_MOD_DIR           := $(OASIS_BASE_DIR)/$(OASIS_ARCH)/build/lib/psmile.$(OASIS_MPI_CHAN)
+OASIS_LIB_DIR           := $(OASIS_BASE_DIR)/$(OASIS_ARCH)/lib
+OASIS_LIBS              := psmile.MPI1 mct mpeu scrip
+
+ifneq ($(strip ${EBROOTNETCDFMINFORTRAN}),)
+NETCDF_LIB_DIR          := ${EBROOTNETCDFMINFORTRAN}/lib
+NETCDF_INC_DIR          := ${EBROOTNETCDFMINFORTRAN}/include
+endif
+NETCDF_LIBS             := netcdff netcdf
+
+LAPACK_BASE_DIR         := ${EBROOTIMKL}/mkl/latest
+ifneq ($(strip $(LAPACK_BASE_DIR)),)
+LAPACK_LIB_DIR          := $(LAPACK_BASE_DIR)$(addprefix /,lib/intel64)
+endif
+LAPACK_LIBS             := mkl_intel_lp64 mkl_core mkl_sequential
+
+ifneq ($(strip ${EBROOTECCODES}),)
+GRIBAPI_INC_DIR         := ${EBROOTECCODES}/include
+GRIBAPI_LIB_DIR         := ${EBROOTECCODES}/lib
+endif
+GRIBAPI_LIBS            := eccodes_f90 eccodes
+
+ifneq ($(strip /gpfs/projects/acad/ecearth/softs/gribex/iompi-2023a/lib),)
+GRIBEX_LIB_DIR          := /gpfs/projects/acad/ecearth/softs/gribex/iompi-2023a/lib/
+endif
+GRIBEX_LIBS             := gribexR64
+
+MAKEDEPF90              := ${ECEARTH_SRC_DIR}/util/makedepf90/bin/makedepf90
+
+F90                     := mpif90
+F90FLAGS                := -free -O2 -fp-model precise -march=core-avx2 -r8
+
+IFSAUX_ADD_F90FLAGS     := 
+
+FC                      := mpif90
+FFLAGS                  := -fixed -O2 -fp-model precise -march=core-avx2 -r8
+
+FPPDEFS                 := $(addprefix -D,linux LINUX LITTLE LITTLE_ENDIAN POINTER_64 BLAS ECCODES)
+
+CC                      := mpicc
+CFLAGS                  := -O2 -fp-model precise -march=core-avx2
+CPPDEFS                 := $(addprefix -D,linux LINUX LITTLE LITTLE_ENDIAN POINTER_64 BLAS ECCODES)
+
+LD                      := $(F90)
+LDFLAGS                 := -O2 -fp-model precise -march=core-avx2
+
+AR                      := ar
+ARFLAGS                 := curv
+ARFLAGS_EXTRACT         := p

+ 7 - 0
sources/ifs-36r4/src/surf/offline/fcm-inc.cfg

@@ -0,0 +1,7 @@
+$OSM_FC      = mpif90
+$OSM_FFLAGS  = -O2 -fp-model precise -march=core-avx2 -r8
+$OSM_LFLAGS  = -O2 -fp-model precise -march=core-avx2
+$OSM_INCLUDE_PATH = ${EBROOTNETCDFMINFORTRAN}/include ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf/build/lib/psmile.MPI1 ${EBROOTOPENMPI}/include
+$OSM_LIBS = netcdff netcdf psmile.MPI1 mct mpeu scrip mpi mpi_mpifh
+$OSM_LIB_PATHS = ${EBROOTNETCDFMINFORTRAN}/lib ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf/lib ${EBROOTOPENMPI}/lib
+$OSM_FOMP = -qopenmp

+ 232 - 0
sources/lpjg/CMakeLists.txt

@@ -0,0 +1,232 @@
+################################################################################
+# CMake configuration file for building LPJ-GUESS
+#
+# To build LPJ-GUESS with this build system cmake needs to be installed.
+# If it's not installed it can be downloaded for free from www.cmake.org.
+#
+
+cmake_minimum_required(VERSION 2.8)
+if (UNIX)
+        set(CMAKE_Fortran_COMPILER "mpif90")
+endif(UNIX)
+
+project(guess)
+
+#select grid resolution
+#set (GRID "T255" CACHE STRING "Grid <T159/T255>")
+set (GRID T255)
+if (GRID MATCHES "T255")
+   add_definitions(-DGRID_T255)
+elseif (GRID MATCHES "T159")
+   add_definitions(-DGRID_T159)
+else()
+   exit(-1)
+endif()
+
+
+# should we compress output?
+set(COMPRESS_OUTPUT true)
+if(COMPRESS_OUTPUT)
+   set(LIBS ${LIBS} z)
+   add_definitions(-DCOMPRESS_OUTPUT)
+   message(STATUS "Output compression has been enabled.")
+endif(COMPRESS_OUTPUT)
+
+# Compiler flags for building with Microsoft Visual C++
+if (MSVC)
+  # Disable warnings about using secure functions like sprintf_s instead of
+  # regular sprintf etc.
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _CRT_SECURE_NO_WARNINGS")
+endif()
+
+# The following are configuration variables for the build. 
+# Rather than editing them here, you should either edit them
+# in the graphical cmake tools (cmake-gui on Windows, ccmake
+# on Unix) or pass them in as parameters to cmake.
+
+if (UNIX)
+	enable_language(Fortran)
+endif(UNIX)
+
+# A variable controlling whether or not to include unit tests
+# Unit tests are disabled in old VS 6.0, since CATCH doesn't compile in such 
+# an old compiler.
+if (NOT MSVC_VERSION EQUAL "1200")
+  set(UNIT_TESTS "OFF" CACHE BOOL "Whether to include unit tests")
+endif()
+
+if (UNIX)
+  # Setup the SYSTEM variable, currently only used to choose which 
+  # submit.sh to generate (for submitting to job queue)
+  
+  # Figure out what value it should have initially, based on the
+  # environment variable ARCH if it's set.
+  if (NOT $ENV{ARCH} STREQUAL "")
+	set(DEFAULT_SYSTEM $ENV{ARCH})
+  else()
+	set(DEFAULT_SYSTEM "")
+  endif()
+
+  set(SYSTEM ${DEFAULT_SYSTEM} CACHE STRING "System to build for (empty (=simba), gimle, platon, alarik or multicore)")
+endif (UNIX)
+
+# Where to search for cmake modules
+# (used by cmake when the include() command is used in a cmake file)
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
+
+# NetCDF - look for libraries and include files, and use them if found
+find_package(NetCDF QUIET)
+
+# NB! Adding the following line to .bashrc helps cmake to find the netcdf files:
+# export CMAKE_PREFIX_PATH=/software/apps/netcdf/4.3.2/i1402-hdf5-1.8.14/
+
+if (NETCDF_FOUND)
+	# Windows version:
+	#  include_directories(${NETCDF_INCLUDE_DIRS})
+        # Unix version:
+        if (UNIX)
+                include_directories(${NETCDF_INCLUDE_DIRS}
+                ${guess_SOURCE_DIR}/../oasis3-mct/ecconf/build/lib/psmile.MPI1)
+        else()
+                include_directories(${NETCDF_INCLUDE_DIRS})
+        endif(UNIX)
+
+        set(LIBS ${LIBS} ${NETCDF_LIBRARIES})
+        add_definitions(-DHAVE_NETCDF)
+
+        # Unix only:
+        if (UNIX)
+                link_directories(${guess_SOURCE_DIR}/../oasis3-mct/ecconf/lib
+                ${NETCDF_INCLUDE_DIRS}/../lib)
+        set(LIBS ${LIBS} psmile.MPI1 mct mpeu scrip netcdf netcdff)
+        endif (UNIX)
+else()
+        include_directories(${EBROOTNETCDFMINFORTRAN}/include
+        ${guess_SOURCE_DIR}/../oasis3-mct/ecconf/build/lib/psmile.MPI1)
+
+        link_directories(${guess_SOURCE_DIR}/../oasis3-mct/ecconf/lib
+        ${EBROOTNETCDFMINFORTRAN}/lib
+        ${guess_SOURCE_DIR}/../oasis3-mct/ecconf/build/lib/psmile.MPI1)
+
+        add_definitions(-DHAVE_NETCDF)
+
+        set(LIBS ${LIBS} psmile.MPI1 mct mpeu scrip
+        netcdff netcdf)
+endif()
+
+
+# MPI - used if found (not needed on Windows)
+if (NOT CMAKE_HOST_WIN32)
+  find_package(MPI QUIET)
+endif()
+
+# These are deprecated according to documentation in the FindMPI module,
+# but for some reason not hidden. Let's not display them for the typical
+# LPJ-GUESS user who hasn't got MPI installed.
+mark_as_advanced(MPI_LIBRARY MPI_EXTRA_LIBRARY)
+
+if (MPI_FOUND)
+  include_directories(${MPI_INCLUDE_PATH})
+  set(LIBS ${LIBS} ${MPI_LIBRARIES})
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MPI_COMPILE_FLAGS}")
+
+  # The following is needed because the 3 lines above assume that, if
+  # MPI_FOUND, ${MPI_INCLUDE_PATH} and ${MPI_LIBRARIES} and
+  # ${MPI_COMPILE_FLAGS} are defined. This is not necessarily the case, for
+  # example on the CRAY at cca.
+  include_directories(${EBROOTOPENMPI}/include)
+  link_directories(${EBROOTOPENMPI}/lib)
+  set(LIBS ${LIBS} mpi mpi_mpifh)
+
+  add_definitions(-DHAVE_MPI)
+else()
+
+  include_directories(${EBROOTOPENMPI}/include)
+  link_directories(${EBROOTOPENMPI}/lib)
+  add_definitions(-DHAVE_MPI)
+  set(LIBS ${LIBS} mpi mpi_mpifh)
+
+endif()
+
+# Where the compiler should search for header files
+include_directories(${guess_SOURCE_DIR}/framework
+${guess_SOURCE_DIR}/libraries/gutil ${guess_SOURCE_DIR}/libraries/plib
+${guess_SOURCE_DIR}/libraries/guessnc ${guess_SOURCE_DIR}/modules ${guess_SOURCE_DIR}/cru/guessio)
+
+# The following directories contain source code and 
+# additional CMakeLists.txt files
+add_subdirectory(framework)
+add_subdirectory(modules)
+add_subdirectory(cru)
+add_subdirectory(libraries)
+
+if (UNIT_TESTS)
+  add_subdirectory(tests)
+endif()
+
+# Add the command line program's target
+if (GRID MATCHES "T255")
+  if (WIN32)
+    # Let the exe be called guesscmd so it doesn't collide with the dll target
+    set(guess_command_name "guesscmd_T255")
+  else()
+    # On Unix we don't have the dll so the command line binary can be called guess
+    set(guess_command_name "guess_T255")
+  endif()
+elseif(GRID MATCHES "T159")
+  if (WIN32)
+    # Let the exe be called guesscmd so it doesn't collide with the dll target
+    set(guess_command_name "guesscmd_T159")
+  else()
+    # On Unix we don't have the dll so the command line binary can be called guess
+    set(guess_command_name "guess_T159")
+  endif()
+endif()	
+# Specify the executable to build, and which sources to build it from
+add_executable(${guess_command_name} ${guess_sources} command_line_version/main.cpp)
+
+# Rule for building the unit test binary
+if (UNIT_TESTS)
+  add_executable(runtests ${guess_sources} ${test_sources})
+endif()
+
+# Specify libraries to link to the executable
+target_link_libraries(${guess_command_name} ${LIBS})
+
+if (WIN32)
+  # Create guess.dll (used with the graphical Windows shell)
+  add_library(guess SHARED ${guess_sources} windows_version/dllmain.cpp)
+
+  # Specify libraries to link to the dll
+  target_link_libraries(guess ${LIBS})
+endif (WIN32)
+
+# The custom build rule for generating the submit script from a template.
+# The submit script is generated each time the command line binary is built.
+# Removed in EC-Earth branch! 
+
+# Rule for running unit tests automatically
+if (UNIT_TESTS)
+  add_custom_command(TARGET runtests 
+    POST_BUILD 
+    COMMAND runtests 
+    COMMENT "Running tests")
+endif()
+
+if (UNIX)
+   # pgCC 6 doesn't seem to recognize -rdynamic, so remove it
+   # (we shouldn't need it anyway)
+   # It seems the CMake developers have fixed this in newer versions
+   # (sometime after 2.8)
+   SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+   SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
+endif(UNIX)
+
+if (UNIX)
+  # Set default build type to Release on Unix
+  if(NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE Release CACHE STRING
+      "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
+      FORCE)
+  endif(NOT CMAKE_BUILD_TYPE)
+endif(UNIX)

+ 58 - 0
sources/lpjg/offline/Makefile

@@ -0,0 +1,58 @@
+#adapted from runoff-mapper Makefile template
+
+FC      = mpif90
+FFLAGS  = -O2 -fp-model precise -march=core-avx2 -r8
+
+LD      = mpif90
+LDFLAGS = -O2 -fp-model precise -march=core-avx2
+
+FPP     = fpp
+FFLAGS_FPP_PREFIX = -D
+
+OASIS_BASE_DIR = ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf
+OASIS_MOD_DIR  = $(OASIS_BASE_DIR)/build/lib/psmile.MPI1
+OASIS_INC_DIR  = $(OASIS_BASE_DIR)/lib/psmile/include
+OASIS_LIB_DIR  = $(OASIS_BASE_DIR)/lib
+OASIS_LIBS     = -lpsmile.MPI1 -lmct -lmpeu -lscrip
+
+MPI_BASE_DIR            := ${EBROOTOPENMPI}
+ifneq ($(strip $(MPI_BASE_DIR)),)
+MPI_INC_DIR             := $(MPI_BASE_DIR)$(addprefix /,include)
+MPI_LIB_DIR             := $(MPI_BASE_DIR)$(addprefix /,lib)
+endif
+MPI_LIBS                := mpi mpi_mpifh
+
+ifneq ($(strip ${EBROOTNETCDFMINFORTRAN}),)
+NETCDF_LIB_DIR          := ${EBROOTNETCDFMINFORTRAN}/lib
+NETCDF_INC_DIR          := ${EBROOTNETCDFMINFORTRAN}/include
+endif
+NETCDF_LIBS             := netcdff netcdf
+
+all: lpjg_forcing ccycle_coupling
+
+# add any new lpjg_forcing_xxx here, currently only IFS forcing implemented
+
+lpjg_forcing: lpjg_forcing_ifs_T159 lpjg_forcing_ifs_T255
+
+lpjg_forcing_ifs_T%: lpjg_forcing_ifs_T%.o
+	$(LD) $(LDFLAGS) -o $@ $^ -L$(OASIS_LIB_DIR) $(OASIS_LIBS) \
+	    $(addprefix -L,$(NETCDF_LIB_DIR))  $(addprefix -l,$(NETCDF_LIBS))  \
+	    $(addprefix -L,$(MPI_LIB_DIR))     $(addprefix -l,$(MPI_LIBS))
+
+lpjg_forcing_ifs_T159.f90:
+	$(FPP) $(FFLAGS_FPP_PREFIX)IFS_RES_T159 lpjg_forcing_ifs.F90 > $@
+
+lpjg_forcing_ifs_T255.f90:
+	$(FPP) $(FFLAGS_FPP_PREFIX)IFS_RES_T255 lpjg_forcing_ifs.F90 > $@
+
+ccycle_coupling: ccycle_coupling.o
+	$(LD) $(LDFLAGS) -o $@ $^ -L$(OASIS_LIB_DIR) $(OASIS_LIBS) \
+	    $(addprefix -L,$(NETCDF_LIB_DIR))  $(addprefix -l,$(NETCDF_LIBS))  \
+	    $(addprefix -L,$(MPI_LIB_DIR))     $(addprefix -l,$(MPI_LIBS))
+
+%.o: %.f90
+	$(FC) $(FFLAGS) -c -I$(OASIS_MOD_DIR) $(addprefix -I,$(NETCDF_INC_DIR)) $(addprefix -I,$(MPI_INC_DIR)) $<
+
+.PHONY: clean
+clean:
+	@rm -f *.o *.mod  lpjg_forcing_ifs_T*.f90 lpjg_forcing_ifs_T159 lpjg_forcing_ifs_T255 ccycle_coupling

+ 68 - 0
sources/nemo-3.6/ARCH/arch-ecconf.fcm

@@ -0,0 +1,68 @@
+# EC-EARTH3 ec-conf-based configuration
+#
+# NCDF_HOME   root directory containing lib and include subdirectories for netcdf4
+# HDF5_HOME   root directory containing lib and include subdirectories for HDF5
+# XIOS_HOME   root directory containing lib for XIOS
+# OASIS_HOME  root directory containing lib for OASIS
+#
+# NCDF_INC    netcdf4 include file
+# NCDF_LIB    netcdf4 library
+# XIOS_INC    xios include file    (taken into accound only if key_iomput is activated)
+# XIOS_LIB    xios library         (taken into accound only if key_iomput is activated)
+# OASIS_INC   oasis include file   (taken into accound only if key_oasis3 is activated)
+# OASIS_LIB   oasis library        (taken into accound only if key_oasis3 is activated)
+#
+# FC          Fortran compiler command
+# FCFLAGS     Fortran compiler flags
+# FFLAGS      Fortran 77 compiler flags
+# LD          linker
+# LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries
+# FPPFLAGS    pre-processing flags
+# AR          assembler
+# ARFLAGS     assembler flags
+# MK          make
+# USER_INC    complete list of include files
+# USER_LIB    complete list of libraries to pass to the linker
+#
+# Note that:
+#  - unix variables "$..." are accpeted and will be evaluated before calling fcm.
+#  - fcm variables are starting with a % (and not a $)
+
+%HDF5_HOME           $(HDF5_DIR)
+%HDF5_LIB            $(addprefix -L,$(addsuffix /,$(HDF5_DIR))lib) \
+                     $(addprefix -l,hdf5_hl hdf5 z)
+
+%NCDF_INC            $(addprefix -I,$(addsuffix /,${EBROOTNETCDFMINFORTRAN})include)
+%NCDF_LIB            $(addprefix -L,$(addsuffix /,${EBROOTNETCDFMINFORTRAN})lib) \
+                     $(addprefix -l,netcdff netcdf)
+
+%MPI_INC             $(addprefix -I,${EBROOTOPENMPI}/include)
+%MPI_LIB             $(addprefix -L,$(addsuffix /,${EBROOTOPENMPI})lib) \
+                     $(addprefix -l,mpi mpi_mpifh)
+
+%XIOS_HOME           ${HOME}/models/ecearth_3.3.4.2/sources/xios-2.5
+%XIOS_INC            -I%XIOS_HOME/inc
+%XIOS_LIB            -L%XIOS_HOME/lib -lxios
+
+%OASIS_HOME          ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf
+%OASIS_INC           -I%OASIS_HOME/build/lib/psmile.MPI1
+%OASIS_LIB           -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
+
+%CPP                 fpp
+
+%FC                  mpif90
+%FCFLAGS             -O2 -fp-model precise -march=core-avx2 -r8 
+%FFLAGS              %FCFLAGS
+
+%FPPFLAGS            -P -C
+
+%LD                  mpif90
+%LDFLAGS             -O2 -fp-model precise -march=core-avx2 -lstdc++
+
+%AR                  ar
+%ARFLAGS             curv
+
+%MK                  make
+
+%USER_INC            %XIOS_INC %OASIS_INC %NCDF_INC %MPI_INC
+%USER_LIB            %XIOS_LIB %OASIS_LIB %NCDF_LIB %MPI_LIB

+ 63 - 0
sources/oasis3-mct/util/make_dir/Makefile.d/Makefile.config.ecconf

@@ -0,0 +1,63 @@
+
+$(info --> Reading configuration from $(lastword $(MAKEFILE_LIST)))
+
+# ============================================================================
+# *** Configuration for gimle-intel-scampi
+# ============================================================================
+
+COUPLE := ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct
+
+# CHAN : MPI1/MPI2
+CHAN   := MPI1
+
+# MPI library
+MPIDIR      := ${EBROOTOPENMPI}
+ifneq ($(strip $(MPIDIR)),)
+MPIBIN      := $(MPIDIR)/bin
+MPI_INCLUDE := $(MPIDIR)$(addprefix /,include)
+MPILIB      := -L$(MPIDIR)$(addprefix /,lib)
+endif
+MPILIB      += $(addprefix -l,mpi mpi_mpifh)
+
+# NETCDF library
+NETCDF_DIR      := ${EBROOTNETCDFMINFORTRAN}
+NETCDF_INCLUDE  := $(addprefix $(addsuffix /,$(NETCDF_DIR)),include)
+NETCDF_LIBRARY  := $(addprefix -L,$(addprefix $(addsuffix /,$(NETCDF_DIR)),lib))
+NETCDF_LIBRARY  += $(addprefix -l,netcdff netcdf)
+
+# Compiling and other commands
+MAKE    := make
+F90     := mpif90 -free
+F       := mpif90 -fixed
+f90     := $(F90)
+f       := $(F)
+CC      := mpicc
+LD      := mpif90
+AR      := ar
+ARFLAGS := curv
+
+# CPP/FPP macros
+MACROS   := use_libMPI use_comm_$(CHAN) use_netCDF TREAT_OVERLAY
+MACROS   += 
+
+# Compiler options
+F90FLAGS := -O2 -fp-model precise -march=core-avx2 -r8
+F90FLAGS += -132 -check pointers -check uninit
+F90FLAGS += $(addprefix -D,$(MACROS))
+F90FLAGS += $(addprefix -I,$(MPI_INCLUDE))
+F90FLAGS += $(addprefix -I,$(NETCDF_INCLUDE))
+
+f90FLAGS := $(F90FLAGS)
+FFLAGS   := $(F90FLAGS)
+fFLAGS   := $(F90FLAGS)
+
+CCFLAGS  := -O2 -fp-model precise -march=core-avx2
+CCFLAGS  += $(addprefix -D,$(MACROS))
+CCFLAGS  := $(addprefix -I,$(MPI_INCLUDE))
+CCFLAGS  += $(addprefix -I,$(NETCDF_INCLUDE))
+
+LDFLAGS  := -O2 -fp-model precise -march=core-avx2
+LDFLAGS  += 
+
+# MPP_IOOPT needed for compiling mpp_io
+MPP_IOOPT :=

+ 50 - 0
sources/runoff-mapper/src/Makefile

@@ -0,0 +1,50 @@
+executable = ../bin/runoff-mapper.exe
+
+FC      = mpif90
+FFLAGS  = -O2 -fp-model precise -march=core-avx2 -r8
+
+LD      = mpif90
+LDFLAGS = -O2 -fp-model precise -march=core-avx2
+
+OASIS_BASE_DIR = ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf
+OASIS_MOD_DIR  = $(OASIS_BASE_DIR)/build/lib/psmile.MPI1
+OASIS_INC_DIR  = $(OASIS_BASE_DIR)/lib/psmile/include
+OASIS_LIB_DIR  = $(OASIS_BASE_DIR)/lib
+OASIS_LIBS     = -lpsmile.MPI1 -lmct -lmpeu -lscrip
+
+MPI_BASE_DIR            := ${EBROOTOPENMPI}
+ifneq ($(strip $(MPI_BASE_DIR)),)
+MPI_INC_DIR             := $(MPI_BASE_DIR)$(addprefix /,include)
+MPI_LIB_DIR             := $(MPI_BASE_DIR)$(addprefix /,lib)
+endif
+MPI_LIBS                := mpi mpi_mpifh
+
+ifneq ($(strip ${EBROOTNETCDFMINFORTRAN}),)
+NETCDF_LIB_DIR          := ${EBROOTNETCDFMINFORTRAN}/lib
+NETCDF_INC_DIR          := ${EBROOTNETCDFMINFORTRAN}/include
+endif
+NETCDF_LIBS             := netcdff netcdf
+
+VPATH = cplng
+
+cplng_srcs = \
+    cplng_data_mod.F90 \
+    cplng_init_mod.F90 \
+    cplng_config_mod.F90 \
+    cplng_exchange_mod.F90 \
+    cplng_finalize_mod.F90 \
+    cplng_mod.F90
+
+rnfmap_srcs = runoff_mapper_mod.F90 runoff_mapper.F90
+
+$(executable): config_mod.o $(cplng_srcs:.F90=.o) $(rnfmap_srcs:.F90=.o)
+	$(LD) $(LDFLAGS) -o $@ $^ -L$(OASIS_LIB_DIR) $(OASIS_LIBS) \
+	    $(addprefix -L,$(NETCDF_LIB_DIR))  $(addprefix -l,$(NETCDF_LIBS))  \
+	    $(addprefix -L,$(MPI_LIB_DIR))     $(addprefix -l,$(MPI_LIBS))
+
+%.o: %.F90
+	$(FC) $(FFLAGS) -c -I$(OASIS_MOD_DIR) $(addprefix -I,$(NETCDF_INC_DIR)) $(addprefix -I,$(MPI_INC_DIR)) $<
+
+.PHONY: clean
+clean:
+	@rm -f *.o *.mod

+ 212 - 0
sources/tm5mp/ecconfig-ecearth3.rc

@@ -0,0 +1,212 @@
+!
+! This is a rcfile template for COMPILING TM5MP for ECEARTH 3
+!
+!=====================================================================!
+! Run main specifications
+!=====================================================================!
+! [id]  basename for executable, runtime rcfile
+my.basename     : tm5v4
+
+! timing
+timerange.start : 9999-99-99 99:99:99
+timerange.end   : 9999-99-99 99:99:99
+jobstep.length  : inf
+
+! autorun
+submit.auto     : False
+
+! main directories
+ECEARTH_SRC_DIR : ${HOME}/models/ecearth_3.3.4.2/sources
+my.project.dir  : ${HOME}/models/ecearth_3.3.4.2/sources/tm5mp
+my.run.dir      : 
+my.data.dir     :
+
+co2only  : True
+mkdepf90 : ${ECEARTH_SRC_DIR}/util/makedepf90/bin/makedepf90
+
+!=====================================================================!
+! Compiler, make, MPI/OpenMP switches
+!=====================================================================!
+
+coma:,
+compiler.fc            : mpif90
+mpi.compiler.fc        : mpif90
+mpi.compiler.fc.openmp : mpif90
+compiler.defineflag    : -WF,-D
+! All flags from ecconf = default + tm5_specific
+
+!cprepro: PLT:ACTIVE:FFLAGS_FPP_PREFIX  PLT:ACTIVE:TM5_PPDEFS
+
+compiler.flags.default.fflags  : -warn declarations -r8
+compiler.flags.default.ldflags : -warn declarations -r8
+
+compiler.flags.optim.fflags  : -O3 -fp-model strict
+compiler.flags.optim.ldflags : -O3 -fp-model strict
+
+! 'build.jobs' set in expert.rc, overwritten with script arg
+maker         :  make -j %{build.jobs}
+
+! parallelization
+par.mpi       : T
+
+! dummy nb of cores (pycasso looking for them to write par.ntasks)
+par.nx        : 1
+par.ny        : 45
+
+!=====================================================================!
+! Libraries
+!=====================================================================!
+
+! Z library (used for compression in HDF)
+compiler.lib.z.fflags     : 
+compiler.lib.z.libs       : -lz
+
+! JPEG library (used for compression in HDF)
+JPEG_LIB_DIR                : ${EBROOTLIBJPEGMINTURBO}
+compiler.lib.jpeg.fflags    : -I${JPEG_LIB_DIR}/
+compiler.lib.jpeg.lib_dir   : -L${JPEG_LIB_DIR}/lib
+compiler.lib.jpeg.libs_no_l : jpeg
+
+! SZ library (used for compression in HDF)
+SZIP_HOME                   : ${EBROOTSZIP}
+compiler.lib.sz.fflags      : -I${SZIP_HOME}/include
+compiler.lib.sz.lib_dir     : -L${SZIP_HOME}/lib
+compiler.lib.sz.libs_no_l   : sz
+
+! HDF4 library (without netcdf interface)
+HDF_HOME                    : $(HDF4_DIR)
+compiler.lib.hdf4.fflags    : -I${HDF_HOME}/include 
+compiler.lib.hdf4.lib_dir   : -L${HDF_HOME}/lib
+compiler.lib.hdf4.libs_no_l : mfhdf df
+
+! HDF5 library with parallel IO enabled
+HDF5_PAR_HOME                   : $(HDF5_DIR)
+compiler.lib.hdf5_par.fflags    : -I${HDF5_PAR_HOME}/include 
+compiler.lib.hdf5_par.lib_dir   : -L${HDF5_PAR_HOME}/lib
+compiler.lib.hdf5_par.libs_no_l : hdf5_hl hdf5 z
+ 
+! NetCDF4 library with parallel IO enabled
+NETCDF4_HOME                      : ${EBROOTNETCDFMINFORTRAN}
+compiler.lib.netcdf4_par.fflags   : -I${NETCDF4_HOME}/include
+compiler.lib.netcdf4_par.lib_dir  : -L${NETCDF4_HOME}/lib
+compiler.lib.netcdf4_par.libs_no_l: netcdff netcdf
+
+! OASIS3 library
+OASIS3_ARCH                     : ecconf
+OASIS3_MPIV                     : MPI1
+OASIS3_HOME                     : ${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/${OASIS3_ARCH}
+compiler.lib.oasis3.fflags      : -I${OASIS3_HOME}/build/lib/psmile.${OASIS3_MPIV}
+compiler.lib.oasis3.lib_dir     : -L${OASIS3_HOME}/lib
+compiler.lib.oasis3.libs_no_l   : psmile.MPI1 mct mpeu scrip
+! -lpsmile.${OASIS3_MPIV} -lmpp_io
+
+! MPI library
+compiler.lib.mpi.fflags  : -I${EBROOTOPENMPI}/include
+compiler.lib.mpi.lib_dir : -L${EBROOTOPENMPI}/lib
+compiler.lib.mpi.libs_no_l: mpi mpi_mpifh
+
+! Lapack library:
+!   -lessl               -lblacs           # serial
+!   -lesslsmp            -lblacssmp        # parallel with OpenMP
+!   -lessl    -lpessl    -lblacs           # parallel with MPI
+!   -lesslsmp -lpesslsmp -lblacssmp        # parallel with MPI and OpenMP
+!
+#if "${par.openmp}" in ["T","True"] :
+my.essl.ext   :  smp
+#else
+my.essl.ext   :  
+#endif
+#if "${par.mpi}" in ["T","True"] :
+my.pessl      :  -lpessl${my.essl.ext}
+#else
+my.pessl      :  
+#endif
+!
+compiler.lib.lapack.fflags    : 
+compiler.lib.lapack.libs      :  -lessl${my.essl.ext} ${my.pessl} -lblacs${my.essl.ext}
+
+!=====================================================================!
+! Grids & Levels
+!=====================================================================!
+#if "${my.meteo.class}" == 'ifs91'
+my.levs       : tropo34
+#elif "${my.meteo.class}" == 'ifs62'
+my.levs       : tropo31
+#else
+my.levs       : all 
+#endif
+! regions name
+my.region1                  :  glb300x200
+! grid names for meteo input (allows on the flight regridding):
+my.region1m                 :  glb100x100
+
+!=====================================================================!
+! Source code (list of proj)
+!=====================================================================!
+#if "${co2only}" in  ["T","True"] :
+my.source.proj : proj/output proj/co2 proj/ecearth
+#else
+my.source.proj : proj/output proj/budget10 proj/cb05 proj/ecearth
+#endif
+
+!=====================================================================!
+! C-preprocessors: DF, TMM, TM5
+!=====================================================================!
+#if "${par.mpi}" in ["T","True"] :
+my.df.define   :  with_hdf5_par with_netcdf4_par
+#else
+my.df.define   :  with_hdf5 with_netcdf4
+#endif
+
+! macro's for meteo input:
+my.tmm.define  : with_tmm_tm5 with_tmm_convec_ec
+
+! process to skip
+#if "${co2only}" in  ["T","True"] :
+! if without_wet_dep is not used then CP (at least) should be added to the met fields received from ifs 
+my.without    :  without_wet_deposition without_chemistry without_dry_deposition
+#else
+my.without    :  
+#endif
+
+my.def_advec  : slopes
+
+#if "${co2only}" in  ["T","True"] :
+my.defs_emis  : 
+my.defs_chem  : 
+#else
+my.defs_emis  : with_ch4_emis
+my.defs_chem  : with_m7 with_optics with_ecearth_optics
+#endif
+
+my.defs_misc  : with_budgets
+my.defs_cpl   : with_prism oasis3 parallel_cplng
+
+my.tm5.define : ${my.without} ${my.def_advec} ${my.defs_misc} ${my.defs_chem} ${my.defs_emis} ${my.defs_cpl} 
+
+!=====================================================================!
+! METEO SETTINGS
+!=====================================================================!
+my.meteo.class       : ifs10
+my.meteo.resol       : glb100x100
+my.meteo.format      : tm5-nc
+time.fc              : F
+time.fc.day0         : 
+my.tmm.setup.apply   : T
+! dummy IFS coupling frequency
+cpl.ifs.period  : 6
+! dummy datadir
+ini_data_dir: dummy
+
+#include ${my.project.dir}/rc/meteo-tm5-ecearth3.rc
+
+!=====================================================================!
+! Extra ressources
+!=====================================================================!
+#if "${my.region1}" == "glb100x100"
+#include ${my.project.dir}/rc/regions-glb100x100-chem.rc
+#else
+#include ${my.project.dir}/rc/regions-${my.region1}.rc
+#endif
+
+#include ${my.project.dir}/rc/expert-ecearth3-build.rc

+ 13 - 0
sources/util/ELPiN/Makefile

@@ -0,0 +1,13 @@
+
+FC=mpif90
+FLAGS= -O2 -fp-model precise -march=core-avx2 -r8
+
+NETCDF_INC_DIR = $(addsuffix /,${EBROOTNETCDFMINFORTRAN})include
+NETCDF_LIB_DIR = $(addsuffix /,${EBROOTNETCDFMINFORTRAN})lib
+NETCDF_LIBS    = $(addprefix -l,netcdff netcdf)
+
+all:
+	mkdir -p bin
+	$(FC) src/mpp_domain_decomposition.f90 -o bin/mpp_domain_decomposition.exe $(FLAGS) -I$(NETCDF_INC_DIR) -L$(NETCDF_LIB_DIR) $(NETCDF_LIBS)
+clean:
+	rm -f bin/mpp_domain_decomposition.exe

+ 125 - 0
sources/util/grib_table_126/define_table_126.sh

@@ -0,0 +1,125 @@
+#!/bin/bash
+
+# This script defines grib table 126 for EC-Earth usage.
+# The new grib definitions are put in the source dir of EC-Earth 3.
+
+set -e
+
+# --- Path to "grib_api/definitions"
+
+GRIBAPI_BASE_DIR=${EBROOTECCODES}
+
+errmess="*ERROR*: Could not find the path to grib_info or codes_info
+commands. Please set GRIBAPI_BASE_DIR manually, or load the
+GRIB_API or ECCODES module if you rely on module to set your
+env, and run this script again."
+
+if [ -z "${GRIBAPI_BASE_DIR}" ]
+then
+    echo Your GRIBAPI_BASE_DIR is empty
+    echo Trying to retrieve '<your-grib_api-root-dir>/share/[grib_api|eccodes]/definitions'
+    echo   from environment instead... 
+    echo Note that if both grib_info and codes_info are found in your path,
+    echo   GRIB_API takes precedence over ECCODES
+
+    info=($(which grib_info codes_info 2>/dev/null || true))
+    if [ -x "${info[0]}" ]
+    then
+        grib_def_dir=$(${info[0]} | sed -n "s|Default definition files path is used: ||p")
+    else
+        echo "$errmess"
+        exit 1
+    fi
+    if [ -z "${grib_def_dir}" ]
+    then
+        echo "$errmess"
+        exit 1
+    else
+        echo Found it.
+    fi
+elif [ -e ${GRIBAPI_BASE_DIR}/share/grib_api/definitions ]
+then
+    grib_def_dir=${GRIBAPI_BASE_DIR}/share/grib_api/definitions
+
+elif [ -e ${GRIBAPI_BASE_DIR}/share/eccodes/definitions ]
+then
+    grib_def_dir=${GRIBAPI_BASE_DIR}/share/eccodes/definitions
+else
+    echo "ERROR: Path ${GRIBAPI_BASE_DIR}/share/[grib_api|eccodes]/definitions does not exist"
+    exit 1
+fi
+
+# --- Create target and populate
+
+target_dir=${HOME}/models/ecearth_3.3.4.2/sources/util/grib_table_126/grib1/localConcepts/ecmf
+mkdir -p ${target_dir}
+cp ${grib_def_dir}/grib1/localConcepts/ecmf/* ${target_dir}
+
+# --- additions to grib definitions for EC-Earth table 126
+
+cd $target_dir
+
+for ((i=1;i<=255;i++))
+do
+#cfVarname
+    cat >> cfVarName.def <<EOF
+
+# EC-Earth product $i
+'ece${i}.126' = {
+               table2Version = 126 ;
+               indicatorOfParameter = $i ;
+             }
+EOF
+
+# paramId
+    str=126${i}
+    lim=100
+    if [ $i -lt $lim ]; then
+	str=1260${i}
+    fi
+    lim=10
+    if [ $i -lt $lim ]; then
+	str=12600${i}
+    fi
+
+    cat >> paramId.def <<EOF
+
+# EC-Earth product $i
+'${str}' = {
+            table2Version = 126 ;
+            indicatorOfParameter = $i ;
+          }
+EOF
+
+#name
+    cat >> name.def <<EOF
+
+# EC-Earth product $i
+'EC-Earth product $i' = {
+                         table2Version = 126 ;
+                         indicatorOfParameter = $i ;
+                       }
+EOF
+
+#shortName
+    cat >> shortName.def <<EOF
+
+# EC-Earth product $i
+'~' = {
+       table2Version = 126 ;
+       indicatorOfParameter = $i ;
+     }
+EOF
+
+#units
+    cat >> units.def <<EOF
+
+# EC-Earth product $i
+'~' = {
+       table2Version = 126 ;
+       indicatorOfParameter = $i ;
+     }
+EOF
+
+done
+

+ 1 - 0
sources/xios-2.5/arch/arch-ecconf.env

@@ -0,0 +1 @@
+# FILE NOT IN USE

+ 24 - 0
sources/xios-2.5/arch/arch-ecconf.fcm

@@ -0,0 +1,24 @@
+################################################################################
+###################                Projet XIOS               ###################
+################################################################################
+
+%CCOMPILER      mpicc
+%FCOMPILER      mpif90
+%LINKER         mpif90
+
+%BASE_CFLAGS    -ansi -w
+%PROD_CFLAGS    -O2 -fp-model precise -march=core-avx2 -DBOOST_DISABLE_ASSERTS
+%DEV_CFLAGS     -g -O2 -fp-model precise -march=core-avx2
+%DEBUG_CFLAGS   -g 
+
+%BASE_FFLAGS    -D__NONE__ 
+%PROD_FFLAGS    -O2 -fp-model precise -march=core-avx2 -r8
+%DEV_FFLAGS     -g -O2 -fp-model precise -march=core-avx2 -r8
+%DEBUG_FFLAGS   -g 
+
+%BASE_INC       -D__NONE__
+%BASE_LD        -lstdc++
+
+%CPP            fpp
+%FPP            fpp
+%MAKE           make

+ 15 - 0
sources/xios-2.5/arch/arch-ecconf.path

@@ -0,0 +1,15 @@
+NETCDF_INCDIR='$(addprefix -I,$(addsuffix /,${EBROOTNETCDFMINFORTRAN})include)'
+NETCDF_LIBDIR='$(addprefix -L,$(addsuffix /,${EBROOTNETCDFMINFORTRAN})lib)'
+NETCDF_LIB='$(addprefix -l,netcdff netcdf)'
+
+MPI_INCDIR='$(addprefix -I,$(addsuffix /,${EBROOTOPENMPI})include)'
+MPI_LIBDIR='$(addprefix -L,$(addsuffix /,${EBROOTOPENMPI})lib)'
+MPI_LIB='$(addprefix -l,mpi mpi_mpifh)'
+
+HDF5_INCDIR='$(addprefix -I,$(addsuffix /,$(HDF5_DIR))include)'
+HDF5_LIBDIR='$(addprefix -L,$(addsuffix /,$(HDF5_DIR))lib)'
+HDF5_LIB='$(addprefix -l,hdf5_hl hdf5 z)'
+
+OASIS_INCDIR='$(addprefix -I,${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf/build/lib/psmile.MPI1)'
+OASIS_LIBDIR='$(addprefix -L,${HOME}/models/ecearth_3.3.4.2/sources/oasis3-mct/ecconf/lib)'
+OASIS_LIB='$(addprefix -l,psmile.MPI1 mct mpeu scrip)'

BIN
sources/xios-2.5/tools/archive/blitz.tar.gz