ORcompDCAO DCAO

De Wikicima
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Creación página de compilación en sala compus DCAO)
 
(Installation steps using modipsl)
Línea 29: Línea 29:
 
** IOIPSL: 3379
 
** IOIPSL: 3379
 
** XIOS: 1043
 
** XIOS: 1043
* Preparing compilation environment for <code>hydra</code>. One need to add into <code>AA_make.gdef</code> specifications for <code>hydra</code> (at the end of file):
+
* Preparing compilation environment for <code>hydra</code>. One need to add into <code>AA_make.gdef</code> specifications for <code>DCAO_gfortran</code> (at the end of file):
 
<pre>
 
<pre>
#-Q- ifort_hydra #- Global definitions for hydra, ifort
+
#-Q- DCAO_gfortran #- Global definitions for DCAO, mpi gfortran
#-Q- ifort_hydra LIB_MPI = MPI1
+
#-Q- DCAO_gfortran LIB_MPI = MPI1
#-Q- ifort_hydra LIB_MPI_BIS = MPI1
+
#-Q- DCAO_gfortran LIB_MPI_BIS = MPI1
#-Q- ifort_hydra FCM_ARCH = ifort_hydra
+
#-Q- DCAO_gfortran FCM_ARCH = DCAO_gfortran
#-Q- ifort_hydra M_K = make
+
#-Q- DCAO_gfortran M_K = make
#-Q- ifort_hydra P_C = cpp
+
#-Q- DCAO_gfortran P_C = cpp
#-Q- ifort_hydra P_O = -P -C -traditional $(P_P)
+
#-Q- DCAO_gfortran P_O = -fpreprocessed -P -C -traditional $(P_P)
#-Q- ifort_hydra F_C = /usr/local/bin/mpif90 -c -cpp
+
#-Q- DCAO_gfortran F_C = gfortran -c -cpp
#-Q- ifort_hydra #-D- MD F_D = -g
+
#-Q- DCAO_gfortran #-D- MD F_D = -g -Wall -fbounds-check -pedantic -finit-real=nan
#-Q- ifort_hydra #-D- MN F_D =
+
#-Q- DCAO_gfortran #-D- MN F_D =
#-Q- ifort_hydra #-P- I4R4 F_P = -i4
+
#-Q- DCAO_gfortran #-P- I4R4 F_P =
#-Q- ifort_hydra #-P- I4R8 F_P = -i4 -r8
+
#-Q- DCAO_gfortran #-P- I4R8 F_P = -fdefault-real-8
#-Q- ifort_hydra #-P- I8R8 F_P = -i8 -r8
+
#-Q- DCAO_gfortran #-P- I8R8 F_P = -fdefault-integer-8 -fdefault-real-8
#-Q- ifort_hydra F_O = -DCPP_PARA -O3 $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR) -fp-model precise
+
#-Q- DCAO_gfortran w_w = -O3 -funroll-all-loops $(F_D) $(F_P) -I$(MODDIR)
#-Q- ifort_hydra F_L = /usr/local/bin/mpif90
+
#-Q- DCAO_gfortran F_O = $(w_w) -J$(MODDIR)
#-Q- ifort_hydra M_M = 0
+
#-Q- DCAO_gfortran F_L = gfortran
#-Q- ifort_hydra L_X = 0
+
#-Q- DCAO_gfortran M_M = 0
#-Q- ifort_hydra L_O =
+
#-Q- DCAO_gfortran L_X = 0
#-Q- ifort_hydra A_C = ar -rs
+
#-Q- DCAO_gfortran L_O =
#-Q- ifort_hydra A_G = ar -x
+
#-Q- DCAO_gfortran A_C = ar -rs
#-Q- ifort_hydra C_C = cc -c
+
#-Q- DCAO_gfortran A_G = ar -x
#-Q- ifort_hydra C_O =
+
#-Q- DCAO_gfortran C_C = cc -c
#-Q- ifort_hydra C_L = cc
+
#-Q- DCAO_gfortran C_O =
#-Q- ifort_hydra #-
+
#-Q- DCAO_gfortran C_L = cc
#-Q- ifort_hydra NCDF_INC = /usr/local/include
+
#-Q- DCAO_gfortran #-
#-Q- ifort_hydra NCDF_LIB = -L/usr/local/lib -lnetcdf -lnetcdff
+
#-Q- DCAO_gfortran NCDF_INC = /usr/include
#-Q- ifort_hydra #-
+
#-Q- DCAO_gfortran NCDF_LIB = -L/usr/lib/x86_64-linux-gnu -lnetcdf
  +
#-Q- DCAO_gfortran #-
 
</pre>
 
</pre>
 
* Creation of the configuration \verb+arch+ files for the compilation of each component
 
* Creation of the configuration \verb+arch+ files for the compilation of each component
Línea 63: Línea 63:
 
** going there:
 
** going there:
 
<pre>$ cd ../modeles/XIOS/arch</pre>
 
<pre>$ cd ../modeles/XIOS/arch</pre>
** Using CICLAD's ifort compilation as reference
+
** Using generic gcc compilation as reference
<pre>$ cp arch-ifort_CICLAD.fcm arch-ifort_hydra.fcm</pre>
+
<pre>$ cp arch-GCC_LINUX.fcm arch-DCAO_gfortran.fcm</pre>
** Adapting values (following ifort bug issue for version 12.0.3, [https://software.intel.com/en-us/forums/intel-c-compiler/topic/289446 ifort bug]):
+
<pre>################################################################################
<pre>%CCOMPILER /usr/local/bin/mpicc
+
################### Projet XIOS ###################
%FCOMPILER /usr/local/bin/mpif90
+
################################################################################
%LINKER /usr/local/bin/mpif90 -nofor-main
 
   
%BASE_CFLAGS -std=c++0x
+
%CCOMPILER /usr/bin/mpicc
%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS
+
%FCOMPILER /usr/bin/mpif90
%DEV_CFLAGS -g -traceback
+
%LINKER /usr/bin/mpif90 -nofor-main
%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline
 
   
%BASE_FFLAGS -D__NONE__
+
%BASE_CFLAGS -ansi -w
%PROD_FFLAGS -O3
+
%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS
%DEV_FFLAGS -g -O2 -traceback
+
%DEV_CFLAGS -g -O2
%DEBUG_FFLAGS -g -traceback
+
%DEBUG_CFLAGS -g
  +
  +
%BASE_FFLAGS -D__NONE__ -ffree-line-length-none
  +
%PROD_FFLAGS -O3
  +
%DEV_FFLAGS -g -O2
  +
%DEBUG_FFLAGS -g
   
 
%BASE_INC -D__NONE__
 
%BASE_INC -D__NONE__
%BASE_LD -lstdc++
+
%BASE_LD -lstdc++
   
%CPP /usr/local/bin/mpicc -EP
+
%CPP cpp
%FPP cpp -P
+
%FPP cpp -P
 
%MAKE gmake</pre>
 
%MAKE gmake</pre>
 
** Getting paths:
 
** Getting paths:
<pre>$ cp arch-ifort_CICLAD.path arch-ifort_hydra.path</pre>
+
<pre>$ cp arch-GCC_LINUX.path arch-DCAO_gfortran.path</pre>
 
** Adapting values:
 
** Adapting values:
<pre>NETCDF_INCDIR="-I/usr/local/include"
+
<pre>NETCDF_INCDIR="-I $NETCDF_INC_DIR"
NETCDF_LIBDIR="-L/usr/local/lib"
+
NETCDF_LIBDIR="-L $NETCDF_LIB_DIR"
NETCDF_LIB="-lnetcdf -lnetcdff"
+
NETCDF_LIB="-lnetcdff -lnetcdf"
MPI_INCDIR=""
+
MPI_LIBDIR=""
+
MPI_INCDIR=""
MPI_LIB=""
+
MPI_LIBDIR=""
HDF5_INCDIR=""
+
MPI_LIB="-lcurl"
HDF5_LIBDIR=""
+
HDF5_LIB=""</pre>
+
HDF5_INCDIR="-I $HDF5_INC_DIR"
  +
HDF5_LIBDIR="-L $HDF5_LIB_DIR"
  +
HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz"
  +
  +
#OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
  +
#OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
  +
#OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu"</pre>
  +
  +
** Getting environment:
  +
<pre>$ cp arch-GCC_LINUX.env arch-DCAO_gfortran.env</pre>
  +
  +
** Adapting values:
  +
<pre>export HDF5_INC_DIR=/usr/include
  +
export HDF5_LIB_DIR=/usr/lib/x86_64-linux-gnu
  +
  +
export NETCDF_INC_DIR=/usr/include
  +
export NETCDF_LIB_DIR=/usr/lib/x86_64-linux-gnu</pre>
  +
 
* ORCHIDEE
 
* ORCHIDEE
 
** Going there
 
** Going there
 
<pre>$ cd ../../ORCHIDEE/arch</pre>
 
<pre>$ cd ../../ORCHIDEE/arch</pre>
** Using CICLAD's ifort compilation as reference
+
** Using gfotran compilation as reference
<pre>$ cp arch-ifort_CICLAD.fcm arch-ifort_hydra.fcm</pre>
+
<pre>$ cp arch-gfortran.fcm arch-DCAO_gfortran.fcm</pre>
 
** Adapting values:
 
** Adapting values:
<pre>%COMPILER /usr/local/bin/mpif90
+
<pre>%COMPILER /usr/bin/mpicc
%LINK /usr/local/bin/mpif90
+
%LINK /usr/bin/mpif90
%AR ar
+
%AR ar
%MAKE gmake
+
%MAKE make
%FPP_FLAGS -P -traditional
+
%FPP_FLAGS -P -C -traditional -nostdinc
 
%FPP_DEF
 
%FPP_DEF
%BASE_FFLAGS -i4 -r8 -fp-model precise
+
%BASE_FFLAGS -fdefault-real-8
%PROD_FFLAGS -O3
+
%PROD_FFLAGS -O3 -funroll-all-loops
%DEV_FFLAGS -g -O2 -traceback -fp-stack-check -ftrapuv -check bounds
+
%DEV_FFLAGS -O
%DEBUG_FFLAGS -fpe0 -O0 -g -traceback -fp-stack-check -ftrapuv -check bounds -check all
+
%DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all
%MPI_FFLAGS
+
%MPI_FFLAGS
 
%OMP_FFLAGS -openmp -openmp-threadprivate compat
 
%OMP_FFLAGS -openmp -openmp-threadprivate compat
%BASE_LD -i4 -r8
+
%BASE_LD
%MPI_LD
+
%MPI_LD
 
%OMP_LD -openmp</pre>
 
%OMP_LD -openmp</pre>
 
** getting paths
 
** getting paths
<pre>$ cp arch-ifort_CICLAD.path arch-ifort_hydra.path</pre>
+
<pre>$ cp arch-gfortran.path arch-DCAO_gfortran.path</pre>
 
** Adapting values:
 
** Adapting values:
<pre>NETCDF_LIBDIR="/usr/local/lib -lnetcdf -lnetcdff -lstdc++"
+
<pre>NETCDF_INCDIR="-I/usr/include"
NETCDF_INCDIR=/usr/local/include
+
NETCDF_LIBDIR="-L/usr/lib/x86_64-linux-gnu"
IOIPSL_INCDIR=../../../lib
+
NETCDF_LIB="-lnetcdf -lnetcdff"
IOIPSL_LIBDIR=../../../lib
+
XIOS_INCDIR=${ORCHDIR}/../XIOS/inc
+
IOIPSL_INCDIR="-I${ORCHDIR}/../../lib -I${ORCHDIR}/../IOIPSL/inc"
XIOS_LIBDIR="${ORCHDIR}/../XIOS/lib -lxios"</pre>
+
IOIPSL_LIBDIR="-L${ORCHDIR}/../../lib -L${ORCHDIR}/../IOIPSL/lib"
  +
IOIPSL_LIB="-lioipsl"
  +
  +
XIOS_INCDIR="-I${ORCHDIR}/../XIOS/inc"
  +
XIOS_LIBDIR="-L${ORCHDIR}/../XIOS/lib"
  +
XIOS_LIB="-lxios"</pre>
  +
 
** Going back to <code>util</code> to proceed
 
** Going back to <code>util</code> to proceed
 
<pre>$ cd ../../../util</pre>
 
<pre>$ cd ../../../util</pre>
 
** Installing the code:
 
** Installing the code:
<pre>$ ./ins_make -t ifort_hydra >& run_ins_make.log</pre>
+
<pre>$ ./ins_make -t DCAO_gfortran >& run_ins_make.log</pre>
 
** Going there:
 
** Going there:
 
<pre>$ cd ../config/ORCHIDEE_OL</pre>
 
<pre>$ cd ../config/ORCHIDEE_OL</pre>
Línea 137: Línea 137:
 
** Compiling:
 
** Compiling:
 
<pre>$ gmake >& run_gmake.log</pre>
 
<pre>$ gmake >& run_gmake.log</pre>
  +
<pre>$ gmake without_xios >& run_gmake.log</pre>
 
** Checking if everything went fine:
 
** Checking if everything went fine:
 
<pre>$ cat -n run_gmake.log | grep Error
 
<pre>$ cat -n run_gmake.log | grep Error

Revisión de 11:16 28 jun 2019

Compilation at DCAO's computational classroom

Installation steps using modipsl

  • Go to the installation directory [INSTALLDIR] (for hydra [INSTALLDIR]=/share)
$ cd [INSTALLDIR]
  • Getting the IPSL-models suite
$ svn co https://forge.ipsl.jussieu.fr/igcmg/svn/modipsl/trunk modipsl
  • Going to the util folder:
$ cd modipsl/util
  • Getting the off-line version of ORCHIDEE
$ ./model ORCHIDEE_trunk >& run_get_model.log
  • We got some issues with the ports, thus, it needs to be manually done:
$ cd ../modeles
  • Getting IOIPSL:
$ mkdir -p IOIPSL/src 
$ svn co https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/tags/v2_2_2/src IOIPSL/src
  • Getting XIOS library
$ svn co -r 1043 https://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS
  • By the end one should have:
$ ls
IOIPSL  ORCHIDEE  XIOS
  • Going back to util to proceed
$ cd ../util
  • These are the final versions of the codes
    • ORCHIDEE: 4622
    • ORCHIDEE_OL: 4622
    • IOIPSL: 3379
    • XIOS: 1043
  • Preparing compilation environment for hydra. One need to add into AA_make.gdef specifications for DCAO_gfortran (at the end of file):
#-Q- DCAO_gfortran  #- Global definitions for DCAO, mpi gfortran
#-Q- DCAO_gfortran  LIB_MPI = MPI1
#-Q- DCAO_gfortran  LIB_MPI_BIS = MPI1
#-Q- DCAO_gfortran  FCM_ARCH = DCAO_gfortran 
#-Q- DCAO_gfortran  M_K = make
#-Q- DCAO_gfortran  P_C = cpp
#-Q- DCAO_gfortran  P_O = -fpreprocessed -P -C -traditional $(P_P)
#-Q- DCAO_gfortran  F_C = gfortran -c -cpp
#-Q- DCAO_gfortran  #-D- MD    F_D = -g -Wall -fbounds-check -pedantic -finit-real=nan
#-Q- DCAO_gfortran  #-D- MN    F_D =
#-Q- DCAO_gfortran  #-P- I4R4  F_P =
#-Q- DCAO_gfortran  #-P- I4R8  F_P = -fdefault-real-8
#-Q- DCAO_gfortran  #-P- I8R8  F_P = -fdefault-integer-8 -fdefault-real-8
#-Q- DCAO_gfortran  w_w = -O3 -funroll-all-loops $(F_D) $(F_P) -I$(MODDIR)
#-Q- DCAO_gfortran  F_O = $(w_w) -J$(MODDIR)
#-Q- DCAO_gfortran  F_L = gfortran
#-Q- DCAO_gfortran  M_M = 0
#-Q- DCAO_gfortran  L_X = 0
#-Q- DCAO_gfortran  L_O =
#-Q- DCAO_gfortran  A_C = ar -rs
#-Q- DCAO_gfortran  A_G = ar -x
#-Q- DCAO_gfortran  C_C = cc -c
#-Q- DCAO_gfortran  C_O =
#-Q- DCAO_gfortran  C_L = cc
#-Q- DCAO_gfortran  #-
#-Q- DCAO_gfortran  NCDF_INC = /usr/include
#-Q- DCAO_gfortran  NCDF_LIB = -L/usr/lib/x86_64-linux-gnu -lnetcdf
#-Q- DCAO_gfortran  #-
  • Creation of the configuration \verb+arch+ files for the compilation of each component
  • XIOS
    • going there:
$ cd ../modeles/XIOS/arch
    • Using generic gcc compilation as reference
$ cp arch-GCC_LINUX.fcm arch-DCAO_gfortran.fcm
################################################################################
###################                Projet XIOS               ###################
################################################################################

%CCOMPILER      /usr/bin/mpicc
%FCOMPILER      /usr/bin/mpif90
%LINKER         /usr/bin/mpif90 -nofor-main

%BASE_CFLAGS    -ansi -w
%PROD_CFLAGS    -O3 -DBOOST_DISABLE_ASSERTS
%DEV_CFLAGS     -g -O2
%DEBUG_CFLAGS   -g

%BASE_FFLAGS    -D__NONE__ -ffree-line-length-none
%PROD_FFLAGS    -O3
%DEV_FFLAGS     -g -O2
%DEBUG_FFLAGS   -g

%BASE_INC       -D__NONE__
%BASE_LD        -lstdc++

%CPP            cpp
%FPP            cpp -P
%MAKE           gmake
    • Getting paths:
$ cp arch-GCC_LINUX.path arch-DCAO_gfortran.path
    • Adapting values:
NETCDF_INCDIR="-I $NETCDF_INC_DIR"
NETCDF_LIBDIR="-L $NETCDF_LIB_DIR"
NETCDF_LIB="-lnetcdff -lnetcdf"

MPI_INCDIR=""
MPI_LIBDIR=""
MPI_LIB="-lcurl"

HDF5_INCDIR="-I $HDF5_INC_DIR"
HDF5_LIBDIR="-L $HDF5_LIB_DIR"
HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz"

#OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
#OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
#OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu"
    • Getting environment:
$ cp arch-GCC_LINUX.env arch-DCAO_gfortran.env
    • Adapting values:
export HDF5_INC_DIR=/usr/include
export HDF5_LIB_DIR=/usr/lib/x86_64-linux-gnu

export NETCDF_INC_DIR=/usr/include
export NETCDF_LIB_DIR=/usr/lib/x86_64-linux-gnu
  • ORCHIDEE
    • Going there
$ cd ../../ORCHIDEE/arch
    • Using gfotran compilation as reference
$ cp arch-gfortran.fcm arch-DCAO_gfortran.fcm
    • Adapting values:
%COMPILER            /usr/bin/mpicc
%LINK                /usr/bin/mpif90
%AR                  ar
%MAKE                make
%FPP_FLAGS           -P -C -traditional -nostdinc
%FPP_DEF
%BASE_FFLAGS         -fdefault-real-8
%PROD_FFLAGS         -O3 -funroll-all-loops
%DEV_FFLAGS          -O
%DEBUG_FFLAGS        -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all
%MPI_FFLAGS
%OMP_FFLAGS          -openmp -openmp-threadprivate compat
%BASE_LD
%MPI_LD
%OMP_LD              -openmp
    • getting paths
$ cp arch-gfortran.path arch-DCAO_gfortran.path
    • Adapting values:
NETCDF_INCDIR="-I/usr/include"
NETCDF_LIBDIR="-L/usr/lib/x86_64-linux-gnu"
NETCDF_LIB="-lnetcdf -lnetcdff"

IOIPSL_INCDIR="-I${ORCHDIR}/../../lib -I${ORCHDIR}/../IOIPSL/inc"
IOIPSL_LIBDIR="-L${ORCHDIR}/../../lib -L${ORCHDIR}/../IOIPSL/lib"
IOIPSL_LIB="-lioipsl"

XIOS_INCDIR="-I${ORCHDIR}/../XIOS/inc"
XIOS_LIBDIR="-L${ORCHDIR}/../XIOS/lib"
XIOS_LIB="-lxios"
    • Going back to util to proceed
$ cd ../../../util
    • Installing the code:
$ ./ins_make -t DCAO_gfortran >& run_ins_make.log
    • Going there:
$ cd ../config/ORCHIDEE_OL
    • No need to loading the right environment since in hydra its by default
    • Compiling XIOS in sequential (in Makefile, adding no-parallel compilation):
./make_xios --netcdf_lib netcdf4_seq (...)
    • Compiling:
$ gmake >& run_gmake.log
$ gmake without_xios >& run_gmake.log
    • Checking if everything went fine:
$ cat -n run_gmake.log | grep Error
$ cat -n run_gmake.log | grep undefined
$ ls ../../bin/ 
orchidee_ol  xios_server.exe
Herramientas personales