NEMO model
Quick Start Guide
The following sequence of command should result in a complete and functionnal installation.
Define the following alias to use SVN
alias svn_ano='svn co http://forge.ipsl.jussieu.fr/igcmg/svn/modipsl/trunk modipsl'
Create and go to the working directory
mkdir TRY ; cd TRY
Extract modipsl
svn_ano
Extract NEMO
cd modipsl/util
./model NEMO
Choose a configuration
../modeles/UTIL/fait_config "CONFIG_NAME" with "CONFIG_NAME"=ORCA2_LIM (or GYRE)
Install the makefiles
ins_make [ -t "target host" ]
Compile
cd ../config/ORCA2_LIM [or GYRE]
gmake
Create a script
../../util/ins_script [-t "target host" ]
Your executable should be in ../../bin and us called opa. Your script should be in the"CONFIG_NAME"/EXP00 directory and is called Job_LO1. You can run your first try with NEMO
cd EXP00 ; qsub Job_LO1
Compiling NEMO on Darwin 9.7.0: GYRE experiment
Hereafter is my workflow to get running the GYRE experiment as a starter.
After downloading the code (svn_ano), I go under modipsl/util and run:
./model NEMO
without any troubles, and
../modeles/UTIL/fait_config GYRE
again without troubles.
Then I type gmake under config/GYRE/ and here starts the list of issues listed hereafter.
Note: the compiler I use is gfortran:
>> gfortran -v
Using built-in specs.
Target: i386-apple-darwin9.5.0
Configured with: ../gcc-4.4-20081219/configure --enable-languages=fortran : (reconfigured) ../gcc-4.4-20081219/configure --enable-languages=c,c++,fortran
Thread model: posix
gcc version 4.4.0 20081219 (experimental) (GCC)
My first problem was that I didn't have the netcdf.mod file.
This comes from the fact that, when I compiled my netcdf distrib I didn't include the option '--enable-shared' to build shared libraries and then I didn't have the netcdf.mod file.
I thus recompilated netcdf to have it.
And then, I created an install subdirectory under /usr as root and linked the include and lib folders from netcdf:
cd /usr
sudo mkdir install
cd install
sudo ln -s ~/bin/netcdf/include include
sudo ln -s ~/bin/netcdf/lib lib
sudo vi readme
these are for NEMO
Then the original keys into the Makefile (generated from the util/AA_make.gdef):
NCDF_INC = /usr/install/include
NCDF_LIB = -L/usr/install/lib -lnetcdf
found what they wanted.
Another solution is to modify in the Darwin lines of the util/AA_make.gdef the NCDF_INC and NCDF_LIB to point to the correct location where you installed netcdf. These are the lines I have now:
#-Q- Darwin NCDF_INC = /Users/gmaze/bin/netcdf/include
#-Q- Darwin NCDF_LIB = -L/Users/gmaze/bin/netcdf/lib -lnetcdf
Note that I installed netcdf under my home directory and pointed include and lib toward it. More instructions about that can be found on this webpage under the section "Netcdf config for NEMO under Darwin 9.7.0".
After retyping gmake, libraries are being created.
(cd ../../modeles/IOIPSL/src; make ;)
will creates lib/libioipsl.a and be terminated by IOIPSL is OK
(cd ../../modeles/NEMO/WORK; make ;)
(cd ../../IOIPSL/src ; make -f Makefile )
IOIPSL is OK
Another problem was about the CPP keys.
I then had a bunch of errors like:
gfortran: key_trabbl_dif: No such file or directory
Using ins_make, the Makefile created didn't get the line prefix=-D, ie prefix to indicate cpp keys was absent, producing the error.
A fix is to modify the BB_make.ldef to manually transform the line:
#-Q- gfortran prefix = -D
into:
prefix = -D
But this is not satisfactory.
Instead, one should notice that by default util/ins_make identify the platform as Darwin but this one is not in the list congif/GYRE/scripts/BB_make.ldef !
Therefore, one solution is to use ins_make with the -t gfortran option or another solution is to add a line (my favorite) into the BB_make.ldef like:
#-Q- Darwin prefix = -D
This last option allows the use of ins_make without any options.
Next problem was a syntax error.
I had the following message:
dynspg.F90:74.9:
; CALL dyn_spg_exp ( kt )
1
Error: Semicolon at (1) needs to be preceded by statement
I don't know where does this one come from, put a simple fix is to add some & where it is appropriate. In fact, in the subroutine dynspg.F90 under modele/OPA_SRC/DYN
I replaced the select case (commented here):
!! SELECT CASE ( nspg ) ! compute surf. pressure gradient trend and add it to the general trend
!! !
!! CASE ( 0 ) ; CALL dyn_spg_exp ( kt ) ! explicit
!! CASE ( 1 ) ; CALL dyn_spg_ts ( kt ) ! time-splitting
!! CASE ( 2 ) ; CALL dyn_spg_flt ( kt, kindic ) ! filtered
!! CASE ( 3 ) ; CALL dyn_spg_rl ( kt, kindic ) ! rigid lid
!! !
!! CASE ( -1 ) ! esopa: test all possibility with control print
!! ; CALL dyn_spg_exp ( kt )
!! ; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, &
!! & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )
!! ; CALL dyn_spg_ts ( kt )
!! ; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, &
!! & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )
!! ; CALL dyn_spg_flt ( kt, kindic )
!! ; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, &
!! & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )
!! END SELECT
by this one (I highlighted the & I added):
SELECT CASE ( nspg ) ! compute surf. pressure gradient trend and add it to the general trend
!
CASE ( 0 ) ; CALL dyn_spg_exp ( kt ) ! explicit
CASE ( 1 ) ; CALL dyn_spg_ts ( kt ) ! time-splitting
CASE ( 2 ) ; CALL dyn_spg_flt ( kt, kindic ) ! filtered
CASE ( 3 ) ; CALL dyn_spg_rl ( kt, kindic ) ! rigid lid
!
CASE ( -1 ) & ! esopa: test all possibility with control print
; CALL dyn_spg_exp ( kt )&
; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, &
& tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )&
; CALL dyn_spg_ts ( kt )&
; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, &
& tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )&
; CALL dyn_spg_flt ( kt, kindic )&
; CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, &
& tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )
END SELECT
which solved the compiling error.
I know this is not satisfactory to modify a core routine of the code, but right now this is the only fix I found.
Last error was about some undefined symbols all related to the netcdf library.
I had some stuff like:
Undefined symbols:
"___netcdf_MOD_nf90_inq_varid", referenced from:
___iom_nf90_MOD_iom_nf90_varid in libopa.a(iom_nf90.o)
I eventually found the error here.
When I compiled netcdf I enabled the shared library option (see netcdf install on this page). This causes to create a libnetcdf.a AND a libnetcdff.a (note the double f for Fortran). This one has to be included in the compilation options. It can be done by modyfing the util/AA_make.gdef file line about the Netcdf library as:
#-Q- Darwin NCDF_LIB = -L/Users/gmaze/bin/netcdf/lib -lnetcdf -lnetcdff
And this solved the error, and gmake gave me:
OPA model is OK
Victory !
Running the config GYRE
Now that I have the executable opa, it is useless to run the util/ins_job because there's no queuing system on my macbook.
I simply duplicate the config/GYRE/EXP00 into config/GYRE/EXP0:
cd config/GYRE/
mkdir EXP01
cp EXP00/* EXP01
then I go into it and copy the executable:
cd EXP01
cp ../../../bin/opa .
You eventually simply run the model !
time ./opa
314.552u 3.885s 5:38.38 94.1% 0+0k 0+44io 0pf+0w
Meaning with my 2HGz Intel core 2 duo (2GB 1067 Mhz DDR3) the classic config takes 5 mins 38 sec to run...
Recap config for Darwin 9.7.0 and netcdf 4.0.1
To recap, here are the files I modified and tuned to be able to run NEMO, GYRE config on my macbook:
util/AA_make.gdef
congif/GYRE/scripts/BB_make.ldef
modele/OPA_SRC/DYN/dynspg.F90
You can get them at the bottom of this page.
The workflow is thus as follow, from the modipsl folder:
cd util
./model NEMO
../modeles/UTIL/fait_config GYRE
./ins_make ; # (the prog should recognize the Platform as Darwin)
cd ../config/GYRE
gmake
ls -l ../../bin/*
the executable opa is located under ../../bin/opa
Tricks
When running the util/model NEMO command, the default svn user is nemo_user, inducing a bunch of return key pressing and typing your username and password for each components ....
To avoid this, simply replace nemo_user into the util/mod.def file by your username at line:
#-S- 7 svn --username nemo_user http://forge.ipsl.jussieu.fr/nemo/svn
And you're all set to update your code in a sec !
Detailled Guide
Rq: you can find the the Nemo book v3 at the bottom of this page.
Flow chart of the model
Docs PDF
Nemo book v3: pdf
Vorticity diagnostics documentation
trdvor.pdf 784.63 kB
Coding rules
coding_rules_OPA9.pdf 227.88 kB
The LOBSTER biogeochemical model documentation
doc_lobster_co2.pdf 153.64 kB
The PISCES biogeochemical model equations
equation_pisces.pdf 178.53 kB
The 1D vertical option documentation
Technical_report_NEMO_1D.pdf 1.39 MB
The control print option documentation
prtctl_NEMO_doc_v2.pdf 300.65 kB
The IOM package
iom_v2.2.pdf 189.07 kB
The grid degradation for speed-up passive tracers simulation
CEthe_NEMO_um_2006.pdf 1,000.18 kB
The SOR solver with extra outer halo
extra_halo.pdf 993.67 kB
The free surface and variable volume in the NEMO code
NEMO_vvl_report.pdf 640.47 kB
Netcdf config for NEMO under Darwin 9.7.0
After downloading the netcdf 4.0.1 source files at UCAR, I untar the package under ~/bin/netcdf-4.0.1
The reason why I want to install netcdf under my home directory is that when moving to a linux machine from my lab's network I want to be able to install it on my own without having to rely on share folders I'll never know where they're located...
then I create a build subfolder:
cd ~/bin/netcdf-4.0.1
mkdir build
and launch the configure script as:
./configure --prefix=/Users/gmaze/bin/netcdf-4.0.1/build --enable-docs-install --enable-shared
I finished by:
make
and
make install
Then under my ~/bin I create a dynamic link to the build folder:
cd ~/bin
ln -s netcdf-4.0.1/build netcdf
and the command:
ls ~/bin/netcdf/*
give me:
/Users/gmaze/bin/netcdf/bin:
nc-config ncdump ncgen
/Users/gmaze/bin/netcdf/include:
NETCDF.mod TYPESIZES.mod ncvalues.h netcdf.h netcdf.hh netcdf.inc netcdfcpp.h
/Users/gmaze/bin/netcdf/lib:
libnetcdf.4.dylib libnetcdf.dylib libnetcdf_c++.4.dylib libnetcdf_c++.dylib libnetcdff.4.dylib libnetcdff.dylib pkgconfig
libnetcdf.a libnetcdf.la libnetcdf_c++.a libnetcdf_c++.la libnetcdff.a libnetcdff.la
/Users/gmaze/bin/netcdf/share:
doc info man
which is all I need to run NEMO