Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (230)
Showing
with 1126 additions and 129 deletions
#### Context
_Please provide informations on how to reproduce the bug:_
- [x] Branches impacted: current release and/or main
- [x] Reference configuration/test case (chosen or used as template) ~AMM ~gyre ~orca ~papa or engines involved ~ABL ~NST ~OFF ~TOP ~SAO ~SAS ~"SI³" ~SWE
- [x] Computing architecture: compiler, MPI & NetCDF libs (name and version)
- [x] Dependencies: ~AGRIF ~BFM ~CICE ~OASIS ~XIOS (with known branch and hash/revision/version), ...
- [ ] _Any other relevant information_
#### Analysis
_Please give your thoughts on the issue._
#### Fix
_Please share your proven solution or your recommendation on how to proceed._
---
_You can_
- :clipboard: _Copy code blocks_ (\`\`\`fortran ...\`\`\`) _or diff outputs_ (\`\`\`diff ...\`\`\`)
- :paperclip: _Include files_
- :link: _Add external links._
:warning: _Please remove all unnecessary lines in this description, like the one you are reading in italic, before creating the issue._ :warning:
#### Context
_Please provide informations on how to set the modelling environment_
- [ ] Reference configuration/test case (to add, chosen or used as template)
- [x] Modifications of versioned files: Fortran routines (`*.[Ffh]90`), namelists (`namelist\_*cfg`), outputs settings (`*.xml`), ...
- [ ] Additional dependencies
- [ ] New datasets
- [ ] _Any other relevant information_
#### Proposal
_Please share your ideas or your wishes about modelling improvements for the NEMO model._
_In particular, express if you are willing to contribute personally to the implementation of this feature in NEMO._
---
_You can_
- :clipboard: _Copy code blocks_ (\`\`\`fortran ...\`\`\`) _or diff outputs_ (\`\`\`diff ...\`\`\`)
- :paperclip: _Include files_
- :link: _Add external links._
:warning: _Please remove all unnecessary lines in this description, like the one you are reading in italic, before creating the issue._ :warning:
#### Development description
_Describe the goal and the methodology._
_Add reference documents or publications if relevant._
#### Code implementation
_Describe flow chart of the changes in the code._
_List the Fortran modules and subroutines to be created/edited/deleted._
_Detailed list of new variables to be defined (including namelists), give for each the chosen name and description wrt coding rules._
#### Documentation updates
_Using previous parts, define the main changes to be done in the ~doc (manuals, guide, web pages, ...)._
#### Tests
Once the development is done, the PI should complete the tests section below and after ask the reviewers to start their review.
This part should contain the detailed results of ~SETTE tests (restartability and reproducibility for each of the reference configuration) and detailed results of restartability and reproducibility when the option is activated on specified configurations used for this test.
**Regular checks**
- [ ] Can this change be shown to produce expected impact (option activated)?
- [ ] Can this change be shown to have a null impact (option not activated)?
- [ ] Results of the required bit comparability tests been run: are there no differences when activating the development?
- [ ] If some differences appear, is reason for the change valid/understood?
- [ ] If some differences appear, is the impact as expected on model configurations?
- [ ] Is this change expected to preserve all diagnostics?
- [ ] If no, is reason for the change valid/understood?
- [ ] Are there significant changes in run time/memory?
#### Review
A successful review is needed to schedule the merge of this development into the future NEMO release during next Merge Party (usually in November).
**Assessments**
- [ ] Is the proposed methodology now implemented?
- [ ] Are the code changes in agreement with the flowchart defined at preview step?
- [ ] Are the code changes in agreement with list of routines and variables as proposed at preview step?
- [ ] If, not, are the discrepancies acceptable?
- [ ] Is the in-line documentation accurate and sufficient?
- [ ] Do the code changes comply with NEMO coding standards?
- [ ] Is the development documented with sufficient details for others to understand the impact of the change?
- [ ] Is the project ~doc (manual, guide, web, ...) now updated or completed following the proposed summary in preview section?
**Contents**
NEMO
====
.. contents::
:local:
.. _`Former web platform forge`: https://forge.ipsl.jussieu.fr/nemo
.. _`NEMO users' guide`: https://sites.nemo-ocean.io/user-guide
.. _`Migration Guide`: https://sites.nemo-ocean.io/user-guide/migration.html
.. _`Change list`: https://sites.nemo-ocean.io/user-guide/changes.html
.. _`Test case repository`: https://github.com/NEMO-ocean/NEMO-examples
.. _`How to cite`: https://www.nemo-ocean.eu/bibliography/how-to-cite/
.. _`NEMO forums`: https://nemo-ocean.discourse.group
.. _`NEMO newsletter`: https://listes.ipsl.fr/sympa/subscribe/nemo-newsletter
.. _`NEMO publications`: https://www.nemo-ocean.eu/bibliography/publications/add
.. _`NEMO projects`: https://www.nemo-ocean.eu/projects/add
.. _`Special Issue`: https://gmd.copernicus.org/articles/special_issue40.html
.. _`NEMO System Team wiki`: https://forge.nemo-ocean.eu/developers/home/-/wikis/Home
.. _`NEMO ocean engine`: https://zenodo.org/record/1464816
.. _`NEMO Tracers engine` : https://zenodo.org/record/1471700
.. _`NEMO Sea Ice engine`: https://zenodo.org/record/1471689
**Welcome to NEMO home page!**
NEMO (*Nucleus for European Modelling of the Ocean*) is a state-of-the-art modelling
*Nucleus for European Modelling of the Ocean* (NEMO) is a state-of-the-art modelling
framework for research activities and forecasting services in ocean and climate sciences,
developed in a sustainable way by the NEMO European consortium since 2008.
This page intends to help you to get started using the NEMO platform and to introduce you
to the different levels of information available. It starts here with NEMO release 4.2.0.
Reminder: Our `Former web platform forge`_ (SVN+Trac) contains the previous documentation
and releases made available from the beginning of the project up to of NEMO 4.0.
Getting started
===============
Getting your hands on NEMO: the first steps are described in detail in the
`NEMO users' guide`_ . This explains how to download the code, build the environment,
create the executable, and perform a first integration.
If you are already using a previous release of NEMO, please refer to the
`Migration Guide`_ which aims to help you to make the move to 4.2.0.
The above users guides cover in detail what is available from gitlab and supported by NEMO
System Team. Aside from this web platform, a set of test cases is also available from the
`Test case repository`_ . These test cases can be useful for students, outreach, and
exploring specific aspects of NEMO with light configurations. The web page also allows you
to submit test cases you have developed and want to share with the community. Feel free to
contribute!
Project documentation
=====================
Reference manuals fully describing NEMO for the three main component
* |OCE| models the ocean {thermo}dynamics and solves the primitive equations (`./src/OCE <./src/OCE>`_)
* |ICE| simulates sea-ice {thermo}dynamics, brine inclusions and subgrid-scale thickness
variations (`./src/ICE <./src/ICE>`_)
* |MBG| models the {on,off}line oceanic tracers transport and biogeochemical processes
(`./src/TOP <./src/TOP>`_)
are available from Zenodo:
============ ======================== =====
Component Reference Manual DOI
============ ======================== =====
|NEMO-OCE| `NEMO ocean engine`_ .. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.6334656.svg
:target: https://doi.org/10.5281/zenodo.6334656
|NEMO-ICE| `NEMO Sea Ice engine`_ *not yet available*
|NEMO-MBG| `NEMO Tracers engine`_ .. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1471700.svg
:target: https://doi.org/10.5281/zenodo.1471700
============ ======================== =====
These reference manuals are the publications that should be cited in your own
publications. Please visit `How to cite`_? for details.
New features of 4.2.0 release are described in the `Change list`_ section of the `NEMO users' guide`_
Asking questions, and exchanging information
============================================
- Register once for all and use the `NEMO forums`_ on discourse to share and discuss with the NEMO community.
- Register once for all and receive by mail the `NEMO newsletter`_ : recommended for all
users to receive the major announcements from the project (new releases, open meetings and
main informations). Low traffic: about ten messages a year.
Contributing to NEMO visibility: projects and publications
==========================================================
Please help us justifying the NEMO development efforts by
- Adding your publications using NEMO and its outputs to the `NEMO publications`_ page
- Describing your project using NEMO on the `NEMO projects`_ page
NEMO also has a `Special Issue`_ in the open-access journal
Geoscientific Model Development (GMD) from the European Geosciences Union
The main scope is to collect relevant manuscripts covering various topics and
to provide a single portal to assess the model potential and evolution.
Contributing to NEMO development
================================
For all information please refer to the `NEMO wiki <https://forge.nemo-ocean.eu/nemo/nemo/-/wikis/home>`_
NEMO strives to be written in a way which allows the easy incorporation of developments.
You are welcome to contribute to the development of the NEMO Shared reference. NEMO
development is driven by NEMO Consortium planning and producing NEMO's sustainable
development in order to keep a reliable evolving framework. Development is organised and
scheduled through a five years development strategy, Working groups and the activities of
the development team (named NEMO System Team) in a yearly workplan. More information is
available on the `NEMO System Team wiki`_
How to cite
===========
To acknowledge the sustainable development efforts of the NEMO Consortium, please quote `these references <https://www.nemo-ocean.eu/bibliography/how-to-cite/>`_ in your publications and presentations using NEMO.
Disclaimer
==========
......
module purge
module load intel-2021.6.0/cmake/3.25.1-7wfsx
module load oneapi-2022.1.0/compiler-rt/2022.1.0
module load intel-2021.6.0/2021.6.0
module load impi-2021.6.0/2021.6.0
module load intel-2021.6.0/impi-2021.6.0/hdf5-threadsafe/1.13.3-zbgha
module load intel-2021.6.0/impi-2021.6.0/netcdf-c-threadsafe/4.9.0-wpe4t
module load intel-2021.6.0/impi-2021.6.0/netcdf-fortran-threadsafe/4.6.0-75oow
module load intel-2021.6.0/impi-2021.6.0/parallel-netcdf/1.12.3-eshb5
module load intel-2021.6.0/perl/5.36.0-jj4hw
module load intel-2021.6.0/perl-uri/1.72-6at2i
module load intel-2021.6.0/impi-2021.6.0/xios/2.5-36kwn
# set linker path to 64-bit libraries
export LD_LIBRARY_PATH="/lib64/":$LD_LIBRARY_PATH
# mpi ifort compiler options for ZEUS cluster + XIOS
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios is activated)
#
# CPP Pre-processor
# FC Fortran compiler command
# FCFLAGS Fortran compiler flags
# FFLAGS Fortran 77 compiler flags
# LD linker
# FPPFLAGS pre-processing flags
# LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries
# AR assembler
# ARFLAGS assembler flags
# MK make (usually GNU make)
# USER_INC complete list of include files
# USER_LIB complete list of libraries to pass to the linker
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
# Environment variables are set automatically when loading modules on JUNO cluster (see arch-X64_JUNO.env)
%NCDF_INC -I${NETCDF_FORTRAN}/include -I${NETCDF_C}/include -I${PARALLEL_NETCDF}/include
%NCDF_LIB -L${NETCDF_FORTRAN}/lib -lnetcdff -L${NETCDF_C}/lib -lnetcdf -L${PARALLEL_NETCDF}/lib -lpnetcdf
%HDF5_INC -I${HDF5}/include
%HDF5_LIB -L${HDF5}/lib -lhdf5_hl -lhdf5
%XIOS_INC -I${XIOS}/inc
%XIOS_LIB -L${XIOS}/lib -lxios
%USER_INC %XIOS_INC %NCDF_INC %HDF5_INC
%USER_LIB %XIOS_LIB %NCDF_LIB %HDF5_LIB
%FC mpiifort
%FCFLAGS -r8 -O3 -fp-model source -traceback -qmkl=cluster -march=icelake-client -mtune=icelake-client -qopt-zmm-usage=low -no-fma
%FFLAGS %FCFLAGS
%CC mpiicc
%CFLAGS -O0
%LD mpiifort
%LDFLAGS -lstdc++ -lgpfs
%AR ar
%ARFLAGS -r
%CPP icc
%FPPFLAGS -E -P -traditional
%MK gmake
arch-X64_JUNO.env
\ No newline at end of file
# mpi ifort compiler options for ZEUS cluster + XIOS
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios is activated)
#
# CPP Pre-processor
# FC Fortran compiler command
# FCFLAGS Fortran compiler flags
# FFLAGS Fortran 77 compiler flags
# LD linker
# FPPFLAGS pre-processing flags
# LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries
# AR assembler
# ARFLAGS assembler flags
# MK make (usually GNU make)
# USER_INC complete list of include files
# USER_LIB complete list of libraries to pass to the linker
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
# Environment variables are set automatically when loading modules on JUNO cluster (see arch-X64_JUNO.env)
%NCDF_INC -I${NETCDF_FORTRAN}/include -I${NETCDF_C}/include -I${PARALLEL_NETCDF}/include
%NCDF_LIB -L${NETCDF_FORTRAN}/lib -lnetcdff -L${NETCDF_C}/lib -lnetcdf -L${PARALLEL_NETCDF}/lib -lpnetcdf
%HDF5_INC -I${HDF5}/include
%HDF5_LIB -L${HDF5}/lib -lhdf5_hl -lhdf5
%XIOS_INC -I${XIOS}/inc
%XIOS_LIB -L${XIOS}/lib -lxios
%USER_INC %XIOS_INC %NCDF_INC %HDF5_INC
%USER_LIB %XIOS_LIB %NCDF_LIB %HDF5_LIB
%FC mpiifort
%FCFLAGS -r8 -g -O0 -check all -fp-model source -traceback -qmkl=cluster -march=icelake-client -mtune=icelake-client -qopt-zmm-usage=low -no-fma
%FFLAGS %FCFLAGS
%CC mpiicc
%CFLAGS -O0
%LD mpiifort
%LDFLAGS -lstdc++ -lgpfs
%AR ar
%ARFLAGS -r
%CPP icc
%FPPFLAGS -E -P -traditional
%MK gmake
......@@ -54,5 +54,5 @@
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC cc
%CC icc
%CFLAGS -O0
......@@ -54,5 +54,5 @@
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC cc
%CC icc
%CFLAGS -O0
# compiler options for AA (using GCC compiler)
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios 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
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
# All NETCDF and HDF paths are empty as they are automatically defined through environment
# variables by the load of modules
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
#
#
%NCDF_INC ${NETCDF4_INCLUDE}
%NCDF_LIB -L${NETCDF4_DIR}/lib -lnetcdff -lnetcdf -L${HDF5_DIR}/lib -lhdf5_hl -lm
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/build/lib/mct -I${OASIS_DIR}/build/lib/psmile.MPI1
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp -Dkey_nosignedzero
%FC mpif90 -c -cpp
# O3 breaks reproduci/restartabi-lity with gcc/12.2.0
%FCFLAGS -fdefault-real-8 -O2 -funroll-all-loops -fcray-pointer -ffree-line-length-none -fallow-argument-mismatch -Wno-missing-include-dirs
%FFLAGS %FCFLAGS
%LD mpif90
%LDFLAGS -Wl,-rpath,${HDF5_DIR}/lib -Wl,-rpath=${NETCDF4_DIR}/lib -Wl,-rpath=${XIOS_DIR}/lib
%FPPFLAGS -P -traditional
%AR ar
%ARFLAGS rs
%MK make
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC gcc
%CFLAGS -O0 -fcommon
# compiler options for AA (using GCC compiler)
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios 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
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
# All NETCDF and HDF paths are empty as they are automatically defined through environment
# variables by the load of modules
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
#
#
%NCDF_INC ${NETCDF4_INCLUDE}
%NCDF_LIB -L${NETCDF4_DIR}/lib -lnetcdff -lnetcdf -L${HDF5_DIR}/lib -lhdf5_hl -lm
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/build/lib/mct -I${OASIS_DIR}/build/lib/psmile.MPI1
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp -Dkey_nosignedzero
%FC mpif90 -c -cpp
%FCFLAGS -fdefault-real-8 -Og -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all,no-array-temps -finit-real=nan -ffpe-trap=invalid,zero,overflow -ffpe-summary=invalid,zero,overflow -fallow-argument-mismatch -Wno-missing-include-dirs
%FFLAGS %FCFLAGS
%LD mpif90
%LDFLAGS -Wl,-rpath,${HDF5_DIR}/lib -Wl,-rpath=${NETCDF4_DIR}/lib -Wl,-rpath=${XIOS_DIR}/lib
%FPPFLAGS -P -traditional
%AR ar
%ARFLAGS rs
%MK make
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC gcc
%CFLAGS -O0 -fcommon
# compiler options for AA (using INTEL compiler & OpenMPI)
#
# module purge
# module use /home/ar0s/modules
# module load prgenv/intel intel/2021.4.0 openmpi/4.1.1.1 hdf5-parallel/1.10.6 netcdf4-parallel/4.7.4 xios/trunk/rev2320-nmpi
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios 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
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
# All NETCDF and HDF paths are empty as they are automatically defined through environment
# variables by the load of modules
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
#
#
%NCDF_INC ${NETCDF4_INCLUDE}
%NCDF_LIB ${NETCDF4_LIB} -L${HDF5_DIR}/lib -Wl,-rpath,${HDF5_DIR}/lib -lhdf5_hl -lhdf5 -lz
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/include
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp
%FC mpifort -c -cpp
%FCFLAGS -march=core-avx2 -i4 -r8 -O3 -fp-model strict -fno-alias -align array64byte
%FFLAGS %FCFLAGS
%LD mpifort
%LDFLAGS
%FPPFLAGS -P -traditional
%AR ar
%ARFLAGS rs
%MK gmake
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC mpicc
%CFLAGS -O0
# compiler options for AA (using INTEL compiler & OpenMPI)
#
# module purge
# module use /home/ar0s/modules
# module load prgenv/intel intel/2021.4.0 openmpi/4.1.1.1 hdf5-parallel/1.10.6 netcdf4-parallel/4.7.4 xios/trunk/rev2320-nmpi
#
#
# NCDF_INC netcdf4 include file
# NCDF_LIB netcdf4 library
# XIOS_INC xios include file (taken into accound only if key_xios is activated)
# XIOS_LIB xios library (taken into accound only if key_xios 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
# CC C compiler used to compile conv for AGRIF
# CFLAGS compiler flags used with CC
#
# Note that:
# - unix variables "$..." are accpeted and will be evaluated before calling fcm.
# - fcm variables are starting with a % (and not a $)
#
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
# All NETCDF and HDF paths are empty as they are automatically defined through environment
# variables by the load of modules
#---------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------
#
#
%NCDF_INC ${NETCDF4_INCLUDE}
%NCDF_LIB ${NETCDF4_LIB} -L${HDF5_DIR}/lib -Wl,-rpath,${HDF5_DIR}/lib -lhdf5_hl -lhdf5 -lz
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/include
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp
%FC mpifort -c -cpp
%FCFLAGS -march=core-avx2 -i4 -r8 -g -O0 -debug all -traceback -fp-model strict -ftrapuv -check all,noarg_temp_created -fpe-all0 -ftz -init=arrays,snan,huge
%FFLAGS %FCFLAGS
%LD mpifort
%LDFLAGS
%FPPFLAGS -P -traditional
%AR ar
%ARFLAGS rs
%MK gmake
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC mpicc
%CFLAGS -O0
# compiler options for BELENOS/TARANIS (using INTEL compiler)
# compiler options for BELENOS/TARANIS (using INTEL compiler + INTEL MPI)
#
# INTEL_IMPI (XIOS-2.5)
# intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios-2.5_rev1903
# --------------------------------
# INTEL_IMPI (NEMO 4.0 + XIOS-2.5)
# --------------------------------
# module use /home/ext/mr/smer/samsong/modules
# module load intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios/2.5/rev1903
#
# INTEL_IMPI (XIOS-TRUNK must be compiled)
# gcc/9.2.0 intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2
# ----------------------------------
# INTEL_IMPI (NEMO 4.2 + XIOS-TRUNK)
# ----------------------------------
# module use /home/ext/mr/smer/samsong/modules
# module load gcc/9.2.0 intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios/trunk/rev2134
#
#
# NCDF_INC netcdf4 include file
......@@ -44,7 +50,7 @@
%NCDF_LIB -L${NETCDF_LIB} -lnetcdff -lnetcdf -L${PHDF5_LIB_DIR} -lhdf5_hl -lhdf5
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/build/lib/mct -I${OASIS_DIR}/build/lib/psmile.MPI1
%OASIS_INC -I${OASIS_DIR}/include
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp
......
# compiler options for BELENOS/TARANIS (using INTEL compiler)
# compiler options for BELENOS/TARANIS (using INTEL compiler + INTEL MPI)
#
# INTEL_IMPI (XIOS-2.5)
# intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios-2.5_rev1903
# --------------------------------
# INTEL_IMPI (NEMO 4.0 + XIOS-2.5)
# --------------------------------
# module use /home/ext/mr/smer/samsong/modules
# module load intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios/2.5/rev1903
#
# INTEL_IMPI (XIOS-TRUNK must be compiled)
# gcc/9.2.0 intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2
# ----------------------------------
# INTEL_IMPI (NEMO 4.2 + XIOS-TRUNK)
# ----------------------------------
# module use /home/ext/mr/smer/samsong/modules
# module load gcc/9.2.0 intel/2018.5.274 intelmpi/2018.5.274 phdf5/1.8.18 netcdf_par/4.7.1_V2 xios/trunk/rev2134
#
#
# NCDF_INC netcdf4 include file
......@@ -44,7 +50,7 @@
%NCDF_LIB -L${NETCDF_LIB} -lnetcdff -lnetcdf -L${PHDF5_LIB_DIR} -lhdf5_hl -lhdf5
%XIOS_INC -I${XIOS_INC}
%XIOS_LIB -L${XIOS_LIB} -lxios -lstdc++
%OASIS_INC -I${OASIS_DIR}/build/lib/mct -I${OASIS_DIR}/build/lib/psmile.MPI1
%OASIS_INC -I${OASIS_DIR}/include
%OASIS_LIB -L${OASIS_DIR}/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip
%CPP cpp
......
......@@ -35,7 +35,7 @@
%CPP cpp -Dkey_nosignedzero
%FC mpif90
%FCFLAGS -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -ffree-line-length-none
%FCFLAGS -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -ffree-line-length-none -fallow-argument-mismatch
%FFLAGS %FCFLAGS
%LD %FC
%LDFLAGS
......
#!/bin/bash
#
set -u
#
#- Choice of the options ---
#
while [ $# -gt 0 ]
do
case $( echo $1 | tr '[:upper:]' '[:lower:]' ) in
-h|--help) cat <<'EOF'
Usage:
------
./build_arch-auto.sh
build_arch-auto.sh should automatically find all necessary information by itself...
However the following environment variables or their corresponding optional arguments can be used
to force the default and automatic definition of the variables used by build_arch-auto.sh
Environment variables that can be defined
-----------------------------------------
NETCDF_C_prefix : prefix of the NetCDF-C library ($NCDF_F_PREFIX/lib) and include ($NCDF_C_PREFIX/include)
- set it to "no" if you don't want to use NetCDF library
- if not defined : we use "nc-config --prefix"
Can also be specified with the optional argument --NETCDF_C_prefix
NETCDF_F_prefix : prefix of the NetCDF-Fortran library ($NCDF_F_PREFIX/lib) and include ($NCDF_F_PREFIX/include)
- if not defined : we use "nf-config --prefix"
- if nf-config not found : we use "nc-config --flibs" to find it
- not used if NETCDF_C_prefix="no"
Can also be specified with the optional argument --NETCDF_F_prefix
HDF5_prefix : prefix of the HFD5 library ($HDF5_PREFIX/lib)
- if not defined : we use "nc-config --cflags" and "h5pcc -showconfig" to find it
- not used if NETCDF_C_prefix="no"
Can also be specified with the optional argument --HDF5_prefix
XIOS_prefix : prefix of the XIOS library ($XIOS_PREFIX/lib) and include ($XIOS_PREFIX/inc)
Can also be specified with the optional argument --XIOS_prefix
OASIS_prefix : prefix of the OASIS library ($OASIS_PREFIX/lib) and
include ($OASIS_PREFIX/build/lib/mct and $OASIS_PREFIX/build/lib/psmile.MPI1)
Can also be specified with the optional argument --OASIS_prefix
LIBMpath : path of the m library (standard C library of basic mathematical functions)
Can also be specified with the optional argument --LIBMpath
CURLpath : path of the curl library
Can also be specified with the optional argument --CURLpath
ZLIBpath : path of the z library
Can also be specified with the optional argument --ZLIBpath
FCnemo : fortran compiler
Can also be specified with the optional argument --FCnemo
CCnemo : C compiler (used only for AGRIF conv)
Can also be specified with the optional argument --CCnemo
CPPnemo : cpp compiler
Can also be specified with the optional argument --CPPnemo
MKnemo : make
Can also be specified with the optional argument --MKnemo
ARnemo : archiver
Can also be specified with the optional argument --ARnemo
EOF
exit 0 ;;
--netcdf_c_prefix) NETCDF_C_prefix=${2} ; shift ;;
--netcdf_f_prefix) NETCDF_F_prefix=${2} ; shift ;;
--hdf5_prefix) HDF5_prefix=${2} ; shift ;;
--xios_prefix) XIOS_prefix=${2} ; shift ;;
--oasis_prefix) OASIS_prefix=${2} ; shift ;;
--libmpath) LIBMpath=${2} ; shift ;;
--curlpath) CURLpath=${2} ; shift ;;
--zlibpath) ZLIBpath=${2} ; shift ;;
--fcnemo) FCnemo=${2} ; shift ;;
--ccnemo) CCnemo=${2} ; shift ;;
--cppnemo) CPPnemo=${2} ; shift ;;
--mknemo) MKnemo=${2} ; shift ;;
--arnemo) ARnemo=${2} ; shift ;;
*) echo -e "\033[0;31m\nERROR: \"$1\" BAD OPTION\033[0m\n"
exit 2 ;;
esac
shift
done
#
#-----------------------------------------------------
#
echo_red () {
echo
while [ $# -gt 0 ] ; do echo -e "\033[0;31m$1\033[0m" ; shift ; done
}
echo_green () {
echo
while [ $# -gt 0 ] ; do echo -e "\033[0;32m$1\033[0m" ; shift ; done
}
#
echo_orange () {
echo
while [ $# -gt 0 ] ; do echo -e "\033[0;33m$1\033[0m" ; shift ; done
}
#
# check the exit status of which
err_which () { which ${1} > /dev/null 2>&1 ; echo $? ; }
#
# call err_which and print and error message
chk_which () {
if [ $( err_which ${!1} ) -ne 0 ]
then
echo_red "ERROR: ${2^} ${!1} not found." \
" please define your ${2,} path with 'export $1=...'"
exit 1
fi
}
#
# find fortran wrapper
find_fortran_wrapper () {
if [ $( err_which mpiifort ) -eq 0 ] ; then FCnemo=mpiifort
elif [ $( err_which mpif90 ) -eq 0 ] ; then FCnemo=mpif90
elif [ $( err_which ftn ) -eq 0 ] ; then FCnemo=ftn
else
echo_red "ERROR: we found neither \"mpiifort\" nor \"mpif90\" nor \"ftn\"." \
" please define your fortran compiler path with 'export FCnemo=...'"
exit 1
fi
}
# find the fortran compiler associated with the fortran wrapper $FCnemo
find_fortran_compiler () {
if [ $( $FCnemo --version | head -n 1 | grep -ci "\(gcc\|gnu\)" ) -eq 1 ] ; then ftncomp="gnu"
elif [ $( $FCnemo --version | head -n 1 | grep -ci "ifort" ) -eq 1 ] ; then ftncomp="intel"
elif [ $( $FCnemo --version | head -n 1 | grep -ci "Cray Fortran" ) -eq 1 ] ; then ftncomp="cray"
else
echo_red "ERROR: the fortran wrapper $FCnemo does not correspond to the gnu, the intel or the cray compiler" \
" please use one of these compilers or add your compiler in $0"
exit 1
fi
}
#
#-----------------------------------------------------
# NetCDF
#-----------------------------------------------------
#
NETCDF_C_prefix=${NETCDF_C_prefix:-notdef}
NETCDF_F_prefix=${NETCDF_F_prefix:-notdef}
if [ "$NETCDF_C_prefix" == "no" ]
then
echo_orange "WARNING: You chose to compile without any NetCDF Library" \
" 1) You must use --nonetcdf when calling makenemo" \
" 2) You won't be able to read/write any input/output file when running nemo" \
" -> You can run only the BENCH test" \
" 3) You can neither use XIOS nor OASIS" \
NETCDF_F_prefix=no
HDF5_prefix=no
XIOS_prefix=no
OASIS_prefix=no
NCDF_INC=""
NCDF_LIB=""
XIOS_INC=""
XIOS_LIB=""
OASIS_INC=""
OASIS_LIB=""
else
# find NETCDF_C_prefix and NC_CONFIG
if [ "$NETCDF_C_prefix" == "notdef" ] # use nc-config to define NETCDF_C_prefix
then
if [ $( err_which nc-config ) -ne 0 ] # nc-config not found in $PATH
then
echo_red "ERROR: nc-config not found." \
" please define either your path to the NetCDF-C library with 'export NETCDF_C_prefix=...'" \
" or specify you don't want to use NetCDF with 'export NETCDF_C_prefix=no'" \
exit 2
fi
NC_CONFIG=nc-config
NETCDF_C_prefix=$( $NC_CONFIG --prefix )
else # use NETCDF_C_prefix to define NC_CONFIG
NC_CONFIG=$NETCDF_C_prefix/bin/nc-config # assume that nc-config is in $NETCDF_C_prefix/bin
nbok=$( ls $NC_CONFIG 2>/dev/null | wc -l ) # check if we have nc-config
if [ $nbok -eq 0 ]
then
echo_red "ERROR: nc-config not found in $NETCDF_C_prefix/bin" ; exit 2
fi
fi
# find NETCDF_F_prefix and NF_CONFIG
if [ "$NETCDF_F_prefix" == "notdef" ] # use nf-config to define NETCDF_F_prefix
then
if [ $( err_which nf-config ) -ne 0 ] # nf-config not found in $PATH
then
NF_CONFIG=${NC_CONFIG/nc-config/nf-config} # try to find nf-config at the same place than nc-config
if [ $( err_which $NF_CONFIG ) -ne 0 ] # nf-config not located at the same place than nc-config
then
if [ "$( $NC_CONFIG --all | grep -c "has-fortran" )" -gt 0 ] # we can use nc-config instead of nf-config?
then
# do we have NetCDF-Fortran?
if [ "$( $NC_CONFIG --has-fortran )" != "yes" ]
then
echo_red "ERROR: no netcdf-fortran " ; exit 2
fi
NF_CONFIG=$NC_CONFIG # use nc-config instead of nf-config
# define NETCDF_F_prefix with nc-config
NETCDF_F_prefix=$( $NF_CONFIG --flibs | sed -e "s/.*\(-L\|-rpath,\)\([^ ]*\)\/lib *-lnetcdff.*/\2/" )
[ -z $NETCDF_F_prefix ] && NETCDF_F_prefix=$NETCDF_C_prefix # empty -> we try NETCDF_C_prefix
else
echo_red "ERROR: nf-config not found." \
" please define either your path to the NetCDF-Fortran library with 'export NETCDF_F_prefix=...'" \
" or specify you don't want to use NetCDF with 'export NETCDF_C_prefix=no'" \
exit 2
fi
else
NETCDF_F_prefix=$( $NF_CONFIG --prefix ) # use nf-config to define NETCDF_F_prefix
fi
else
NF_CONFIG=nf-config
NETCDF_F_prefix=$( $NF_CONFIG --prefix ) # use nf-config to define NETCDF_F_prefix
fi
else
NF_CONFIG=$NETCDF_F_prefix/bin/nf-config # assume that nf-config is in $NETCDF_F_prefix/bin
nbok=$( ls $NF_CONFIG 2>/dev/null | wc -l ) # check if we have nf-config
if [ $nbok -eq 0 ]
then
echo_red "ERROR: nf-config not found in $NETCDF_F_prefix/bin" ; exit 2
fi
fi
# do we have the proper path to the netcdf library?
nbok=$( ls $NETCDF_C_prefix/lib/libnetcdf* 2>/dev/null | wc -l )
if [ $nbok -eq 0 ]
then
echo_red "ERROR: netcdf library not found in $NETCDF_C_prefix/lib" ; exit 2
else
echo_green "NETCDF_C_prefix=$NETCDF_C_prefix"
fi
# do we have NetCDF-F90 interface?
if [ "$( $NF_CONFIG --has-f03 )" != "yes" ]
then
if [ "$( $NF_CONFIG --has-f90 )" != "yes" ]
then
echo_red "ERROR: no netcdf-fortran F90 interface" ; exit 2
fi
fi
# do we have the proper path to the netcdff library?
nbok=$( ls $NETCDF_F_prefix/lib/libnetcdff* 2>/dev/null | wc -l )
if [ $nbok -eq 0 ]
then
echo_red "ERROR: netcdff library not found in $NETCDF_F_prefix/lib" ; exit 2
else
echo_green "NETCDF_F_prefix=$NETCDF_F_prefix"
fi
# do we have nc4?
if [ "$( $NC_CONFIG --has-nc4 )" != "yes" ]
then
echo_red "ERROR: no nc4 interface in your netcdf library" ; exit 2
fi
# do we have hdf5?
if [ "$( $NC_CONFIG --has-hdf5 )" != "yes" ]
then
echo_red "ERROR: no hdf5 interface in your netcdf library" ; exit 2
fi
HDF5_prefix=${HDF5_prefix:-notdef}
if [ "$HDF5_prefix" == "notdef" ]
then
# look for libhdf5 in the paths found in nc-config --cflags
for dd in $( $NC_CONFIG --cflags | sed -e "s/-I//g" )
do
nbok=$( ls $dd/../lib/libhdf5* 2>/dev/null | wc -l )
[ $nbok -gt 0 ] && HDF5_prefix=$( dirname $dd )
done
fi
if [ "$HDF5_prefix" == "notdef" ] # not found any libhdf5 file... try "h5pcc -showconfig"
then
if [ $( err_which h5pcc ) -eq 0 ] # do we have h5pcc?
then
HDF5_prefix=$( h5pcc -showconfig | grep "Installation point" | sed -e "s/.*: //" )
[ -z $HDF5_prefix ] && HDF5_prefix=notdef # empty -> back to "notdef"
fi
fi
if [ "$HDF5_prefix" == "notdef" ] # still not found any libhdf5 file... try $NETCDF_C_prefix
then
nbok=$( ls $NETCDF_C_prefix/lib/libhdf5* 2>/dev/null | wc -l )
[ $nbok -gt 0 ] && HDF5_prefix=$NETCDF_C_prefix
fi
if [ "$HDF5_prefix" == "notdef" ] # still not found any libhdf5 file...
then
echo_red "ERROR: HDF5_prefix not found." \
" please define it with 'export HDF5_prefix=...'" ; exit 2
fi
# do we have the proper path to the hdf5 library?
nbok=$( ls $HDF5_prefix/lib/libhdf5* 2>/dev/null | wc -l )
if [ $nbok -eq 0 ]
then
echo_red "ERROR: hdf5 library not found in $HDF5_prefix/lib" ; exit 2
else
echo_green "HDF5_prefix=$HDF5_prefix"
fi
# do we have netcdf parallel?
if [ "$( $NC_CONFIG --has-parallel )" != "yes" ]
then
echo_orange "WARNING: your netcdf library cannot write in parallel" \
" you can use only 'the one_file' mode in XOS"
fi
if [ $( err_which h5pcc ) -eq 0 ]
then
if [ $( h5pcc -showconfig | grep "Parallel HDF5" | grep -c yes ) -ne 1 ]
then
echo_orange "WARNING: your hdf5 library was configured without --enable-parallel" \
" you cannot use only the 'one_file' mode in XOS"
fi
fi
# curl
CURLpath=${CURLpath:-notdef}
if [ "$( $NC_CONFIG --dap )" == "yes" ]
then
if [ "$CURLpath" == "notdef" ]
then
if [ $( err_which curl ) -eq 0 ]
then
CURLpath="-L$( dirname $( ls -1 $( dirname $( dirname $( which curl ) ) )/*/libcurl* | head -n 1 ) )"
echo_green "CURLpath=$CURLpath"
else
CURLpath=""
fi
fi
CURLlib="${CURLpath:-""} -lcurl"
else
CURLlib=""
fi
# Zlib: compression library
Zlib="${ZLIBpath:-""} -lz"
# libM: standard C library of basic mathematical functions
libM="${LIBMpath:-""} -lm"
# NCDF_INC and NCDF_LIB
NCDF_INC="-I%NCDF_F_PREFIX/include -I%NCDF_C_PREFIX/include"
#NCDF_LIB="-L%NCDF_F_PREFIX/lib -lnetcdff -L%NCDF_C_PREFIX/lib -lnetcdf -Wl,-rpath=%NCDF_F_PREFIX/lib -L%HDF5_PREFIX/lib -lhdf5_hl -lhdf5 $CURLlib $Zlib $libM -Wl,-rpath=%HDF5_PREFIX/lib"
NCDF_LIB="-L%NCDF_F_PREFIX/lib -lnetcdff -L%NCDF_C_PREFIX/lib -lnetcdf -L%HDF5_PREFIX/lib -lhdf5_hl -lhdf5 $CURLlib $Zlib $libM"
fi
#
#-----------------------------------------------------
# fortran Compileur
#-----------------------------------------------------
#
nompi=0 # default
FCnemo=${FCnemo:-notdef}
if [ "$FCnemo" == "notdef" ]
then
if [ "$NETCDF_C_prefix" == "no" ]
then
find_fortran_wrapper
else
FCnemo=$( $NC_CONFIG --fc ) # use nc-config to find the fortran compiler
[ -z $FCnemo ] && find_fortran_wrapper # if $FCnemo is empty try to find it...
chk_which FCnemo "fortran compiler"
# does the fortran compiler start with the 3 letters mpi or ftn
ismpi=$( basename $FCnemo | cut -c 1-3 | grep -Ec 'mpi|ftn' )
if [ $ismpi -eq 0 ]
then
echo_orange "WARNING: the fortran compiler provided by $( basename $NF_CONFIG ), \"$FCnemo\", is not starting with \"mpi\" or \"ftn\"." \
" we look for mpiifort, mpif90 or ftn..."
FCnemo_org=$FCnemo
find_fortran_compiler
ftncomp_org=$ftncomp
find_fortran_wrapper
find_fortran_compiler
if [ "$ftncomp" != "$ftncomp_org" ]
then
echo_red "ERROR: \"$FCnemo\" and \"$FCnemo_org\" are refering to different compilers: \"$ftncomp\" and \"$ftncomp_org\"" \
" please define your fortran compiler path with 'export FCnemo=...'"
exit 1
fi
fi
fi
else
ismpi=$( basename $FCnemo | cut -c 1-3 | grep -Ec 'mpi|ftn' ) # the fortran compiler does not start with mpi or ftn...
if [ $ismpi -eq 0 ]
then
echo_orange "WARNING: the fortran compiler you provided does not start with mpi or ftn." \
" you must compile nemo with key_mpi_off and you cannot run nemo in parallel"
nompi=1
fi
fi
echo_green "FCnemo=$FCnemo"
find_fortran_compiler
#
#-----------------------------------------------------
# C Compileur (not critical, needed only for the conv of AGRIF)
#-----------------------------------------------------
#
# first guess
case "$ftncomp" in
intel) guess=${CCnemo:-icc} ;;
gnu) guess=${CCnemo:-gcc} ;;
cray) guess=${CCnemo:-cc} ;;
*) guess=${CCnemo:-""} ;;
esac
listcc="$guess gcc cc icc" # try $guess and other usuals C compilers...
CCnemo="notfound"
for ii in $listcc
do
[ $( err_which $ii ) -eq 0 ] && [ "$CCnemo" == "notfound" ] && CCnemo=$ii
done
if [ "$CCnemo" == "notfound" ]
then
echo_red "ERROR: we found neither \"gcc\" nor \"icc\" nor \"cc\"." \
" please define your C compiler with 'export CCnemo=...'"
exit 1
fi
#
#-----------------------------------------------------
# CPP
#-----------------------------------------------------
#
CPPnemo=${CPPnemo:-cpp}
chk_which CPPnemo "pre-compiler"
echo_green "CPPnemo=$CPPnemo"
[ "$ftncomp" == "gnu" ] || [ "$ftncomp" == "cray" ] && CPPnemo="$CPPnemo -Dkey_nosignedzero"
[ $nompi -eq 1 ] && CPPnemo="$CPPnemo -Dkey_mpi_off"
#
#-----------------------------------------------------
# FCFLAGS
#-----------------------------------------------------
#
case "$ftncomp" in
intel)
PROD_FCFLAGS="-i4 -r8 -O3 -fp-model strict -xHost -fno-alias"
DEBUG_FCFLAGS="-i4 -r8 -g -O0 -debug all -traceback -fp-model strict -ftrapuv -check all,noarg_temp_created -fpe-all0 -ftz -init=arrays,snan,huge"
echo_orange "WARNING: We assume you will execute NEMO on the same machine you compiled it. " \
" If it is not the case, replace -xHost by the appropiate option in PROD_FCFLAGS"
;;
gnu)
PROD_FCFLAGS="-fdefault-real-8 -O3 -march=native -funroll-all-loops -fcray-pointer -ffree-line-length-none"
DEBUG_FCFLAGS="-fdefault-real-8 -Og -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan -ffpe-trap=invalid,zero,overflow -ffpe-summary=invalid,zero,overflow"
rev=$( $FCnemo --version | head -n 1 | sed -e "s/.* \([0-9]*\).*/\1/" )
# if gfortran version >= 10 : add -fallow-argument-mismatch
if [ $rev -ge 10 ]
then
PROD_FCFLAGS="$PROD_FCFLAGS -fallow-argument-mismatch"
DEBUG_FCFLAGS="$DEBUG_FCFLAGS -fallow-argument-mismatch"
fi
echo_orange "WARNING: We assume you will execute NEMO on the same machine you compiled it. " \
" If it is not the case, replace -march=native by the appropiate option in PROD_FCFLAGS"
;;
cray)
PROD_FCFLAGS="-s real64 -s integer32 -O2 -hflex_mp=intolerant"
DEBUG_FCFLAGS="-s real64 -s integer32 -Ovector0 -hfp0 -O0 -hflex_mp=intolerant -e mCI -G0 -m2 -rl -Rcdsp -N1023"
;;
*)
echo_red "ERROR: compilation options for $ftncomp are not defined..."
exit 1
;;
esac
#
#-----------------------------------------------------
# CFLAGS
#-----------------------------------------------------
#
case "${ftncomp}" in
gnu)
PROD_CFLAGS="-O0 -fcommon"
;;
*)
PROD_CFLAGS="-O0"
;;
esac
#
#-----------------------------------------------------
# XIOS and OASIS
#-----------------------------------------------------
#
if [ "$NETCDF_C_prefix" != "no" ]
then
# XIOS
XIOS_prefix=${XIOS_prefix:-notdef}
if [ "$XIOS_prefix" == "notdef" ]
then
echo_orange "WARNING: XIOS_prefix not specified" \
" either define it with 'export XIOS_prefix=...'" \
" or don't use key_xios when compiling nemo (-> you will not be able to use XIOS)."
XIOS_INC=""
XIOS_LIB=""
else
XIOS_INC="-I%XIOS_PREFIX/inc"
#XIOS_LIB="-L%XIOS_PREFIX/lib -lxios -lstdc++ -Wl,-rpath=%XIOS_PREFIX/lib"
XIOS_LIB="-L%XIOS_PREFIX/lib -lxios -lstdc++"
fi
# OASIS
OASIS_prefix=${OASIS_prefix:-notdef}
if [ "$OASIS_prefix" == "notdef" ]
then
echo_orange "WARNING: OASIS_prefix not specified" \
" either define it with 'export OASIS_prefix=...'" \
" or don't use key_oasis3 when compiling nemo (-> you will not be able to run coupled simulations)."
OASIS_INC=""
OASIS_LIB=""
else
OASIS_INC="-I%OASIS_PREFIX/build/lib/mct -I%OASIS_PREFIX/build/lib/psmile.MPI1"
OASIS_LIB="-L%OASIS_PREFIX/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip"
fi
fi
#
#-----------------------------------------------------
# make
#-----------------------------------------------------
#
MKnemo=${MKnemo:-make}
mkerr=$( err_which make )
gmkerr=$( err_which gmake )
if [ $( err_which $MKnemo ) -ne 0 ] # no make found
then
if [ $mkerr -eq 0 ] # make found
then
echo_orange "WARNING: $MKnemo not found, we switch to make"
MKnemo=make
else
if [ $gmkerr -ne 0 ] # gmake found
then
echo_orange "WARNING: $MKnemo not found, we switch to gmake"
MKnemo=gmake
else
echo_red "ERROR: gnu make not found, please define its path with 'export MKnemo=...'"
exit 1
fi
fi
fi
#
isgnu=$( $MKnemo --version | head -n 1 | grep -ic gnu ) # make is gmake
if [ $isgnu -ne 1 ]
then
if [ $gmkerr -ne 0 ] # gmake found
then
echo_orange "WARNING: $MKnemo is not gnu make, we switch to gmake"
MKnemo=gmake
else
echo_red "ERROR: $MKnemo is not gnu make and gmake not found." \
" please define gnu make path with 'export MKnemo=...'"
exit 1
fi
fi
echo_green "MKnemo=$MKnemo"
#
#-----------------------------------------------------
# ar command
#-----------------------------------------------------
#
ARnemo=${ARnemo:-ar}
chk_which ARnemo "archiver"
echo_green "ARnemo=$ARnemo"
#
#
#-----------------------------------------------------
#-----------------------------------------------------
# write arch file
#-----------------------------------------------------
#-----------------------------------------------------
#
#
archname=arch-auto.fcm
cat > $archname << EOF
#
# This arch file was automatically created by $0
# $( date )
#
%NCDF_C_PREFIX $NETCDF_C_prefix
%NCDF_F_PREFIX $NETCDF_F_prefix
%HDF5_PREFIX $HDF5_prefix
%XIOS_PREFIX $XIOS_prefix
%OASIS_PREFIX $OASIS_prefix
%NCDF_INC $NCDF_INC
%NCDF_LIB $NCDF_LIB
%XIOS_INC $XIOS_INC
%XIOS_LIB $XIOS_LIB
%OASIS_INC $OASIS_INC
%OASIS_LIB $OASIS_LIB
%CPP $CPPnemo
%FC $FCnemo
%FCFLAGS $PROD_FCFLAGS
### comment out the following line if you want to use the debugging compilation options
#%FCFLAGS $DEBUG_FCFLAGS
%FFLAGS %FCFLAGS
%LD %FC
%LDFLAGS -Wl,-rpath=%HDF5_PREFIX/lib -Wl,-rpath=%NCDF_F_PREFIX/lib -Wl,-rpath=%XIOS_PREFIX/lib
%FPPFLAGS -P -traditional
%AR $ARnemo
%ARFLAGS rs
%MK $MKnemo
%USER_INC %XIOS_INC %OASIS_INC %NCDF_INC
%USER_LIB %XIOS_LIB %OASIS_LIB %NCDF_LIB
%CC $CCnemo
%CFLAGS $PROD_CFLAGS
EOF
#
# Additional module search command for Cray Fortran to enable successful parallel builds
if [ $ftncomp == "cray" ] ; then
echo "bld::tool::fc_modsearch -J" >> $archname
fi
#
echo
echo "Content of the created $archname:"
echo "-------------------------------------"
echo
cat $archname
echo