Version 29 (modified by snguyen, 5 years ago) (diff) |
---|
Preparing an IPSLCM6 model without PISCES and ORCHIDEE for compiling and simulation
For the sake of simplicity the Schwarz algorithm was only implemented and tested without PISCES for the ocean and without ORCHIDEE for the atmosphere.
As well, regarding resolution, the method was implemented on the ORCA2 grid for NEMO and a 96x95-39 grid for LMDZ.
The ice model retained was LIM3 which allows for greater control and is conservative.
The various steps to get a working IPSLCM6 model with these settings are now described.
IPSLCM6 model
Get the latest IPSLCM6 model from the forge repository.
In the workdir of your project, create a directory for your new IPSLCM6 installation, move into it and get modipsl by executing:
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/modipsl/trunk modipsl
Go in modipsl/util and execute:
./model -h
to get the list of downloadable models and configurations.
Choose the latest IPSLCM6 model, for instance IPSLCM6.1.9-LR. Download it by executing:
./model IPSLCM6.1.9-LR
Setting an ORCA2LIM3PISCES configuration in NEMOGCM/CONFIG
Go to the modeles/NEMOGCM/CONFIG directory and have a look at the available configurations with ls.
Since ORCA2_LIM3_PISCES is not a standard configuration of NEMO in the IPSLCM6 model it is necessary to create this configuration. In order to retain the latest changes to NEMO-LIM3 we use the ORCA1_LIM3_PISCES configuration as a template.
To do this execute the following lines:
./makenemo -n ORCA2_LIM3_PISCES -r ORCA1_LIM3_PISCES -m X64_IRENE -j0 ./makenemo -n ORCA2_LIM3_PISCES -m X64_IRENE clean
The first line creates a new directory ORCA2_LIM3_PISCES based on ORCA1_LIM3_PISCES retaining all changes to the sources in the MY_SRC directory. This will let you have the latest changes to NEMO-LIM3. As a side effect you also get PISCES changes which will anyway not be compiled since it is removed at compile time.
The second line cleans the ORCA2_LIM3_PISCES directory from temporary files that may have been imported from ORCA1_LIM3_PISCES.
Check the cfg.txt file. It should contain a line with ORCA2_LIM3_PISCES and the same list of components (to use for compilation) than ORCA1_LIM3_PISCES.
Preparing the IPSLCM6 Makefile to compile ORCA2_LIM3 + LMDZ96x96-L39 NOP (NO ORCHIDEE, NO PISCES)
Go in your configuration directory: modipsl/config/IPSLCM6.
Edit the file Makefile.
Add the following sections to it, (be carefull that indented sections must use a Tab character for the makefile to work):
IPSLCM6ALIM3-VLRNOP : $(M_K) ORCA2LIM3xLMD9695-L39-NOPISCES-NOORCH
ORCA2LIM3xLMD9695-L39-NOPISCES-NOORCH : libioipsl oasis3-mct xios orca2lim3nopisces lmdz96x95x39noorch verif echo "ORCA2LIM3xLMD9695-L39-NOPISCES-NOORCH" >.resol echo "RESOL_ATM_3D=96x95x39" >>.resol echo "$(LIB_MPI)" >.libmpi
lmdz96x95x39noorch: $(M_K) lmdznoorch RESOL_LMDZ=96x95x39
lmdznoorch: ../../modeles/LMDZ (cd ../../modeles/LMDZ ; ./makelmdz_fcm -d $(RESOL_LMDZ) -debug -mem -cosp true -v false -parallel mpi_omp -io xios -rrtm true -c OMCT -job 8 -arch $(FCM_ARCH) gcm ; mv bin/gcm_$(RESOL_LMDZ)_phylmd_para_mem_couple.e ../../bin/gcm.e ; )
orca2lim3nopisces: ../../modeles/NEMOGCM/CONFIG (cd ../../modeles/NEMOGCM/CONFIG; cp ../../../config/IPSLCM6/SOURCES/NEMO/arch-${FCM_ARCH}.fcm ../ARCH/. ; cp ../../../config/IPSLCM6/SOURCES/NEMO/*.cfg ../TOOLS/COMPILE/. ; ./makenemo -m ${FCM_ARCH} -n ORCA2_LIM3_PISCES -d "OPA_SRC LIM_SRC_3 NST_SRC TOP_SRC" -e "$(MYSRC_DIR)/SOURCES/NEMO" -j16 add_key "key_lim3 key_oasis3" del_key "key_lim2 key_nosignedzero key_top key_pisces key_age key_cfc" ; cp ORCA2_LIM3_PISCES/BLD/bin/nemo.exe ../../../bin/opa ; )
Now the model should compile with command:
gmake IPSLCM6ALIM3-VLRNOP
Setting an experiment directory
First install a new picontrol_TEST experiment in the config/IPSLCM6/ directory.
From this directory execute:
cp EXPERIMENTS/IPSLCM/piControl_TEST/config.card .
Edit config.card and set the name of your experiment, for instance:
JobName= IPSLCM6A-VLRNOP
Launch the ins_job script:
../../libIGCM/ins_job
Answer the questions and a new IPSLCM6A-VLRNOP will be created. Move into this directory.
Edit config.card and set the ORCA_version parameter to ORCA2.3.
We will now review the changes that need to be made to each component.card file in COMP and to the namelist and config files in PARAMETER.
lim3
- Edit the lim3.card file in the COMP directory.
Replace this line:
ListNonDel= (${R_IN}/OCE/IPSLCM6/${opa9_UserChoices_ORCA_version}/maskMFO_lim.nc , . )
by:
ListNonDel= ()
In the paragraph:
[ParametersFiles] List= (${MODIPSL}/modeles/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref , namelist_ice_ref ), \ (${MODIPSL}/modeles/NEMOGCM/CONFIG/ORCA1_LIM3_PISCES/EXP00/field_def_nemo-lim.xml, field_def_nemo-lim.xml ), \ (${SUBMIT_DIR}/PARAM/namelist_lim3_${RESOL_OCE}_cfg_${LMDZ_Physics} , namelist_ice_cfg ), \ (${SUBMIT_DIR}/PARAM/file_def_nemo-lim3.xml , file_def_nemo-lim.xml )
change namelist_lim3_${RESOL_OCE}_cfg_${LMDZ_Physics} to
namelist_lim3_${RESOL_OCE}_cfg
- Edit the namelist file in the PARAM directory.
In namelist_lim3_ORCA2_cfg add this line to the &namicerun section:
jpl = 1 ! number of ice categories
To work with a monocategory ice model.
In the &namiceitd section add this line:
rn_himax_bot = 99. ! max ice thickness in the last category jpl
forgetting to set this line will cause NEMO to crash with NANs in the ssh variable as this line may not be in namelist_ice_lim3_ref.
lmdz
- Edit lmdz.card in COMP.
Set LMDZ_Physics=NPv6.1 to LMDZ_Physics=AP.
Set read_climoz=1 to read_climoz=2.
You may (or may not) remove COSP outputs by setting LMDZ_COSP_OK=n.
In case you need initial start files change:
[InitialStateFiles] List= (${R_IN}/ATM/START/${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_XY}/start_${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_3D}_o2a_v3.nc , start.nc ), \ (${R_IN}/ATM/START/${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_XY}/startphy_${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_3D}_o2a_v3.nc, startphy.nc )
to
[InitialStateFiles] List= (${R_IN}/ATM/IPSLCM6/${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_XY}/start_${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_3D}_o2a_v3.nc , start.nc ), \ (${R_IN}/ATM/IPSLCM6/${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_XY}/startphy_${config_UserChoices_ORCA_version}xLMD${RESOL_ATM_3D}_o2a_v3.nc, startphy.nc )
In [BoundaryFiles] and ListNonDel section set:
ListNonDel= (${R_IN}/ATM/${RESOL_ATM}/AR5/HISTORIQUE/aerosols_11YearsClim_1855_v5.nc, aerosols.nat.nc),\ (${R_IN}/ATM/${RESOL_ATM}/AR5/HISTORIQUE/climoz_LMDZ_1855_v2.nc, climoz_LMDZ.nc),\ (${R_IN}/ATM/LIMIT/AMIP.v20170419/interpol/${RESOL_ATM_XY}_ORCA2.3_365d/limit_1870_1899_clim.nc, limit.nc),\ (${R_IN}/ATM/SOLAR/CMIP6/v3.1corr/Control/solarforcing_v3.1_pdControl_ave_6bands_365days.nc, solarforcing.nc)
- Edit LMDZ config files in PARAM.
You don't need to make any change in LMDZ *.def* files.
oasis
- Replace oasis.card in COMP.
Since you will be coupling an ORCA2 configuration with an LMDZ9695 use the oasis.card file from an IPSLCM5A2-VLR configuration.
Here is the complete file:
[Compatibility] libIGCM=1.0 [UserChoices] OutputMode=n FreqCoupling=86400 Lucia=n [InitialStateFiles] List= (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/flxat.nc, flxat.nc), \ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/sstoc.nc, sstoc.nc) [BoundaryFiles] List= () ListNonDel= (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/grids_v3.nc, grids.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/masks_v3.nc, masks.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/areas_v3.nc, areas.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/rmp_torc_to_tlmd_MOSAIC_v3.nc, rmp_torc_to_tlmd_MOSAIC.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/rmp_tlmd_to_torc_MOSAIC_v3.nc, rmp_tlmd_to_torc_MOSAIC.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/rmp_tlmd_to_torc_MOSAIC_calvin_v3.nc, rmp_tlmd_to_torc_MOSAIC_calvin.nc),\ (${R_IN}/CPL/IPSLCM6/${config_UserChoices_ORCA_version}x${RESOL_ATM}/rmp_tlmd_to_torc_MOSAIC_rivflu_v3.nc, rmp_tlmd_to_torc_MOSAIC_rivflu.nc) [SmoothFiles] List= () [ParametersFiles] List= (${SUBMIT_DIR}/PARAM/namcouple_${RESOL_CPL}, namcouple) [RestartFiles] List= (flxat.nc, flxat.nc, flxat.nc),\ (sstoc.nc, sstoc.nc, sstoc.nc) [OutputText] List= (namcouple, nout.000000, lucia, oasis_balance.eps) [OutputFiles] List= (SISUTESW_LMDZ_01.nc, ${R_OUT_CPL_O_M}/${PREFIX}_SISUTESW.nc, Post_ncks_cdo),\ (SIICECOV_LMDZ_02.nc, ${R_OUT_CPL_O_M}/${PREFIX}_SIICECOV.nc, Post_ncks_cdo),\ (SIICTEMW_LMDZ_03.nc, ${R_OUT_CPL_O_M}/${PREFIX}_SIICTEMW.nc, Post_ncks_cdo),\ (SIICEALW_LMDZ_04.nc, ${R_OUT_CPL_O_M}/${PREFIX}_SIICEALW.nc, Post_ncks_cdo),\ (CURRENTX_LMDZ_05.nc, ${R_OUT_CPL_O_M}/${PREFIX}_CURRENTX.nc, Post_ncks_cdo),\ (CURRENTY_LMDZ_06.nc, ${R_OUT_CPL_O_M}/${PREFIX}_CURRENTY.nc, Post_ncks_cdo),\ (CURRENTZ_LMDZ_07.nc, ${R_OUT_CPL_O_M}/${PREFIX}_CURRENTZ.nc, Post_ncks_cdo),\ (COTAUXXU_LMDZ_08.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUXXU.nc, Post_ncks_cdo),\ (COTAUYYU_LMDZ_09.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUYYU.nc, Post_ncks_cdo),\ (COTAUZZU_LMDZ_10.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUZZU.nc, Post_ncks_cdo),\ (COTAUXXV_LMDZ_11.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUXXV.nc, Post_ncks_cdo),\ (COTAUYYV_LMDZ_12.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUYYV.nc, Post_ncks_cdo),\ (COTAUZZV_LMDZ_13.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTAUZZV.nc, Post_ncks_cdo),\ (COWINDSP_LMDZ_14.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COWINDSP.nc, Post_ncks_cdo),\ (COTOTRAI_LMDZ_15.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTOTRAI.nc, Post_ncks_cdo),\ (COTOTSNO_LMDZ_16.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTOTSNO.nc, Post_ncks_cdo),\ (COTOTEVA_LMDZ_17.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COTOTEVA.nc, Post_ncks_cdo),\ (COICEVAP_LMDZ_18.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COICEVAP.nc, Post_ncks_cdo),\ (COQSRMIX_LMDZ_19.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COQSRMIX.nc, Post_ncks_cdo),\ (COQNSMIX_LMDZ_20.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COQNSMIX.nc, Post_ncks_cdo),\ (COSHFICE_LMDZ_21.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COSHFICE.nc, Post_ncks_cdo),\ (CONSFICE_LMDZ_22.nc, ${R_OUT_CPL_O_M}/${PREFIX}_CONSFICE.nc, Post_ncks_cdo),\ (CODFLXDT_LMDZ_23.nc, ${R_OUT_CPL_O_M}/${PREFIX}_CODFLXDT.nc, Post_ncks_cdo),\ (COCALVIN_LMDZ_24.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COCALVIN.nc, Post_ncks_cdo),\ (COLIQRUN_LMDZ_25.nc, ${R_OUT_CPL_O_M}/${PREFIX}_COLIQRUN.nc, Post_ncks_cdo),\ (O_SSTSST_oceanx_01.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_SSTSST.nc, Post_ncks_cdo),\ (OIceFrc_oceanx_02.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OIceFrac.nc, Post_ncks_cdo),\ (O_TepIce_oceanx_03.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_TepIce.nc, Post_ncks_cdo),\ (O_AlbIce_oceanx_04.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_AlbIce.nc, Post_ncks_cdo),\ (O_OCurx1_oceanx_05.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OCurx1.nc, Post_ncks_cdo),\ (O_OCury1_oceanx_06.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OCury1.nc, Post_ncks_cdo),\ (O_OCurz1_oceanx_07.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OCurz1.nc, Post_ncks_cdo),\ (O_OTaux1_oceanx_08.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTaux1.nc, Post_ncks_cdo),\ (O_OTauy1_oceanx_09.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTauy1.nc, Post_ncks_cdo),\ (O_OTauz1_oceanx_10.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTauz1.nc, Post_ncks_cdo),\ (O_OTaux2_oceanx_11.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTaux2.nc, Post_ncks_cdo),\ (O_OTauy2_oceanx_12.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTauy2.nc, Post_ncks_cdo),\ (O_OTauz2_oceanx_13.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_OTauz2.nc, Post_ncks_cdo),\ (O_Wind10_oceanx_14.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_Wind10.nc, Post_ncks_cdo),\ (OTotRain_oceanx_15.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OTotRain.nc, Post_ncks_cdo),\ (OTotSnow_oceanx_16.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OTotSnow.nc, Post_ncks_cdo),\ (OTotEvap_oceanx_17.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OTotEvap.nc, Post_ncks_cdo),\ (OIceEvap_oceanx_18.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OIceEvap.nc, Post_ncks_cdo),\ (O_QsrMix_oceanx_19.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_QsrMix.nc, Post_ncks_cdo),\ (O_QnsMix_oceanx_20.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_QnsMix.nc, Post_ncks_cdo),\ (O_QsrIce_oceanx_21.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_QsrIce.nc, Post_ncks_cdo),\ (O_QnsIce_oceanx_22.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_QnsIce.nc, Post_ncks_cdo),\ (O_dQnsdT_oceanx_23.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_dQnsdT.nc, Post_ncks_cdo),\ (OCalving_oceanx_24.nc, ${R_OUT_CPL_O_M}/${PREFIX}_OCalving.nc, Post_ncks_cdo),\ (O_Runoff_oceanx_25.nc, ${R_OUT_CPL_O_M}/${PREFIX}_O_Runoff.nc, Post_ncks_cdo),\ (TEMPO_1D_cpl_atm.nc, ${R_OUT_CPL_O_D}/${PREFIX}_1D_cpl_atm.nc , Post_1D_cpl_atm), \ (TEMPO_1D_cpl_oce.nc, ${R_OUT_CPL_O_D}/${PREFIX}_1D_cpl_oce.nc , Post_1D_cpl_oce), \ (TEMPO_1M_cpl_atm.nc, ${R_OUT_CPL_O_M}/${PREFIX}_1M_cpl_atm.nc , Post_1M_cpl_atm), \ (TEMPO_1M_cpl_oce.nc, ${R_OUT_CPL_O_M}/${PREFIX}_1M_cpl_oce.nc , Post_1M_cpl_oce) [Post_ncks_cdo] Patches = (Patch_20140801_ncks_cdo) GatherWithInternal = () TimeSeriesVars2D = () ChunckJob2D = NONE TimeSeriesVars3D = () ChunckJob3D = NONE Seasonal=OFF [Post_1D_cpl_atm] Patches = (Patch_20091119_put_out) GatherWithInternal = () TimeSeriesVars2D = () ChunckJob2D = NONE TimeSeriesVars3D = () ChunckJob3D = NONE Seasonal=OFF [Post_1D_cpl_oce] Patches = (Patch_20091119_put_out) GatherWithInternal = () TimeSeriesVars2D = () ChunckJob2D = NONE TimeSeriesVars3D = () ChunckJob3D = NONE Seasonal=OFF [Post_1M_cpl_atm] Patches = (Patch_20091119_put_out) GatherWithInternal = (lon, lat, time) TimeSeriesVars2D = (SIICEALW, SIICECOV, SISUTESW, COCALVIN, COICEVAP, COLIQRUN, CONSFICE, COQNSMIX, COQSRMIX, COSHFICE, COTOTEVA, COTOTRAI, COTOTSNO) ChunckJob2D = OFF TimeSeriesVars3D = () ChunckJob3D = NONE Seasonal=OFF [Post_1M_cpl_oce] Patches = (Patch_20091119_put_out) GatherWithInternal = (lon, lat, time) TimeSeriesVars2D = (OCalving, OIceEvap, OIceFrac, OTotEvap, OTotRain, OTotSnow, O_AlbIce, O_QnsIce, O_QnsMix, O_QsrIce, O_QsrMix, O_Runoff) ChunckJob2D = OFF TimeSeriesVars3D = () ChunckJob3D = NONE Seasonal=OFF
opa : NEMO
- Edit opa9.card in COMP