Changeset 4902
- Timestamp:
- 2014-11-27T17:13:38+01:00 (9 years ago)
- Location:
- branches/2014/dev_CNRS_2014
- Files:
-
- 90 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_CNRS_2014/DOC/TexFiles/Chapters/Chap_DYN.tex
r4560 r4902 795 795 %> > > > > > > > > > > > > > > > > > > > > > > > > > > > 796 796 \begin{figure}[!t] \begin{center} 797 \includegraphics[width=0.7\textwidth]{./TexFiles/Figures/Fig_ time_split.pdf}797 \includegraphics[width=0.7\textwidth]{./TexFiles/Figures/Fig_DYN_dynspg_ts.pdf} 798 798 \caption{ \label{Fig_DYN_dynspg_ts} 799 799 Schematic of the split-explicit time stepping scheme for the external -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-PW6_calypso.fcm
r4230 r4902 17 17 %NCDF_INC -I/usr/local/netcdf-3.6.3/include 18 18 %NCDF_LIB -L/usr/local/netcdf-3.6.3/lib -lnetcdf 19 %CPP cpp 19 20 %FC mpxlf90_r 20 21 %FCFLAGS -O3 -qsuffix=f=f90 -qstrict -qalias=intptr -qsuppress=1501-245 -qarch=pwr6 -q64 -qrealsize=8 -qtune=pwr6 -qextname -qlargepage -qmaxmem=-1 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-PW6_calypso_debug.fcm
r4230 r4902 17 17 %NCDF_INC -I/usr/local/netcdf-3.6.3/include 18 18 %NCDF_LIB -L/usr/local/netcdf-3.6.3/lib -lnetcdf 19 %CPP cpp 19 20 %FC mpxlf90_r 20 21 %FCFLAGS -g -qsuffix=f=f90 -qstrict -qalias=intptr -qsuppress=1501-245 -qarch=pwr6 -q64 -qrealsize=8 -qtune=pwr6 -qextname -qlargepage -qmaxmem=-1 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-PW6_calypso_tools.fcm
r4230 r4902 17 17 %NCDF_INC -I/usr/local/netcdf-3.6.3/include 18 18 %NCDF_LIB -L/usr/local/netcdf-3.6.3/lib -lnetcdf 19 %CPP cpp 19 20 %FC xlf90 20 21 %FCFLAGS -O3 -qsuffix=f=f90 -qstrict -qsuppress=1501-245 -qarch=pwr6 -q64 -qrealsize=8 -qtune=pwr6 -qextname -qlargepage -qmaxmem=-1 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-gfortran_athena_xios.fcm
r4274 r4902 44 44 %XIOS_LIB -L%XIOS_HOME/lib -lxios 45 45 46 %CPP cpp 46 47 %FC mpif90 47 48 %FCFLAGS -fdefault-real-8 -fno-second-underscore -Dgfortran -ffree-line-length-none -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-ifort_athena.fcm
r4230 r4902 17 17 %NCDF_INC -I$NETCDF/include 18 18 %NCDF_LIB -L$NETCDF/lib -lnetcdf -lnetcdff 19 %CPP cpp 19 20 %FC mpiifort 20 21 %FCFLAGS -r8 -O3 -xHost -fp-model source -traceback -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-ifort_athena_debug.fcm
r4230 r4902 17 17 %NCDF_INC -I$NETCDF/include 18 18 %NCDF_LIB -L$NETCDF/lib -lnetcdf -lnetcdff 19 %CPP cpp 19 20 %FC mpiifort 20 21 %FCFLAGS -fpe0 -g -r8 -O1 -xHost -fp-model source -traceback -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-ifort_athena_tools.fcm
r4230 r4902 17 17 %NCDF_INC -I$NETCDF/include 18 18 %NCDF_LIB -L$NETCDF/lib -lnetcdf -lnetcdff 19 %CPP cpp 19 20 %FC ifort 20 21 %FCFLAGS -r8 -O3 -xHost -fp-model source -traceback -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/CMCC/arch-ifort_athena_xios.fcm
r4494 r4902 41 41 %XIOS_INC -I/users/home/ans040/SOFTWARE/XIOS_athena/trunk/inc 42 42 %XIOS_LIB -L/users/home/ans040/SOFTWARE/XIOS_athena/trunk/lib -lxios 43 %CPP cpp 43 44 %FC mpiifort 44 45 %FCFLAGS -g -r8 -O3 -xHost -fp-model source -traceback -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/INGV/arch-IBM_EKMAN_INGV.fcm
r4277 r4902 20 20 %XIOS_ROOT /home/delrosso/XIOS_447/trunk 21 21 %MPI_INTEL -I/srv/intel/impi/4.1.0.024/include 22 %CPP cpp 22 23 %FC mpiifort 23 24 %FCFLAGS -r8 -O3 -g -traceback -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-ALTIX_NAUTILUS_MPT.fcm
r4901 r4902 42 42 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 43 43 44 %CPP cpp 44 45 %FC ifort 45 46 %FCFLAGS -r8 -O3 -fp-model precise -xT -ip -vec-report0 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-PW7_C2A_XIO.fcm
r4148 r4902 35 35 36 36 %XLF90_LIB -lxlf90_r 37 38 %CPP cpp 37 39 %FC mpxlf90_r 38 40 %FCFLAGS -qsuffix=f=f90 -qsuffix=cpp=F90 -qfree=f90 -O3 -qrealsize=8 -qarch=auto -qtune=auto -qinitauto -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-PW7_METO.fcm
r4377 r4902 21 21 %XIOS_INC -I/data/nwp/ofrd/share/NEMO/xios_lib/seq/xios_r451/inc 22 22 %XIOS_LIB -L/data/nwp/ofrd/share/NEMO/xios_lib/seq/xios_r451/lib -lxios 23 %CPP cpp 23 24 %FC mpxlf90_r 24 25 %FCFLAGS -qrealsize=8 -qextname -qsuffix=f=f90 -qarch=pwr7 -qtune=pwr7 -g -O2 -qstrict -qinitauto=7FBFFFFF 25 %FFLAGS -qrealsize=8 -qextname -q suffix=f=f90 -qarch=pwr7 -qtune=pwr7 -g -O2 -qstrict -qinitauto=7FBFFFFF26 %FFLAGS -qrealsize=8 -qextname -qarch=pwr7 -qtune=pwr7 -g -O2 -qstrict -qinitauto=7FBFFFFF -qfixed 26 27 %LD mpCC_r 27 28 %LDFLAGS -lxlf90 -L/projects/um1/lib -lsig -O2 -L MASS -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-X64_CURIE.fcm
r4153 r4902 41 41 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC mpif90 -c -cpp 44 45 # for Curie Fat Node -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-X64_MOBILIS.fcm
r4897 r4902 46 46 %OASIS_LIB 47 47 48 %CPP cpp 48 49 %FC mpif90 -c -cpp 49 50 %FCFLAGS -i4 -r8 -O3 -fp-model source -xAVX -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-X64_VAYU.fcm
r4148 r4902 41 41 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC mpif90 -c -cpp 44 45 %FCFLAGS -i4 -r8 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-X64_YELLOWSTONE.fcm
r4153 r4902 41 41 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC mpif90 -c -cpp 44 45 %FCFLAGS -i4 -r8 -O3 -fp-model precise -xAVX -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-XC_ARCHER.fcm
r4897 r4902 41 41 #OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC ftn 44 45 #FCFLAGS -em -s integer32 -s real64 -O3 -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-XC_ARCHER_INTEL.fcm
r4900 r4902 41 41 #OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC ftn 44 45 %FCFLAGS -integer-size 32 -real-size 64 -O3 -fp-model source -zero -fpp -warn all -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-macport_osx.fcm
r4148 r4902 50 50 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 51 51 52 %CPP cpp-mp-4.8 52 53 %FC mpif90 53 54 %FCFLAGS -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-openmpi_NAVITI_MERCATOR.fcm
r4524 r4902 19 19 %NCDF_LIB -L$NETCDF_LIB -lnetcdff -lnetcdf -L$HDF5_LIB -lhdf5_hl -lhdf5 -lz 20 20 21 %CPP cpp 21 22 %FC mpif90 22 23 %FCFLAGS -O2 -fp-model precise -traceback -r8 -convert big_endian -assume byterecl -
branches/2014/dev_CNRS_2014/NEMOGCM/ARCH/arch-x3750_ADA.fcm
r4148 r4902 41 41 %OASIS_LIB -L%OASIS_HOME/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip 42 42 43 %CPP cpp 43 44 %FC mpiifort -c -cpp 44 45 %FCFLAGS -DCPP_PARA -i4 -r8 -O3 -xAVX -fp-model precise -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/AMM12/EXP00/namelist_cfg
r4493 r4902 14 14 cn_ocerst_in = "amm12_restart_oce" ! suffix of ocean restart name (input) 15 15 cn_ocerst_out = "restart_oce_out" ! suffix of ocean restart name (input) 16 nn_istate = 1 ! output the initial state (1) or not (0)17 16 nn_stock = 1296 ! frequency of creation of a restart file (modulo referenced to 1) 18 17 nn_write = 144 ! frequency of write in the output file (modulo referenced to nit000) -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/README
r4394 r4902 24 24 25 25 26 27 26 #---------------------------------------------------------------------- 27 # HOW TO USE 28 #---------------------------------------------------------------------- 29 ./std_main.sh -plot -pdf 30 or 31 ./std_main.sh -ts -pdf 28 32 29 33 -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_IceFrac.pro
r4559 r4902 21 21 22 22 IF keyword_set(arc) THEN BEGIN 23 domdef, 20, 380, 50, 9023 domdef, 20, 380, 40, 90 24 24 map = [90, 0, 0] 25 25 ENDIF 26 26 IF keyword_set(ant) THEN BEGIN 27 domdef, 20, 380, -90, - 5027 domdef, 20, 380, -90, -40 28 28 map = [-90, 0, 0] 29 29 ENDIF -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_all.pro
r4559 r4902 172 172 Ithi_april_1 = {arr:1./float(cnt) * total(reform(Ithi_1.arr[*, *, temporary(april)],nxt,nyt,cnt), 3), unit:Ithi_1.unit} 173 173 jan = where(mm EQ 1, cnt) 174 Ithi_jan_1 = {arr:1./float(cnt) * total(reform(Ithi_1.arr[*, *, temporary(jan)],nxt,nyt,cnt), 3), unit:Ithi_1.unit} 174 175 sept = where(mm EQ 9, cnt) 175 Ithi_jan_1 = {arr:1./float(cnt) * total(reform(Ithi_1.arr[*, *, temporary(jan)],nxt,nyt,cnt), 3), unit:Ithi_1.unit}176 176 Ithi_sept_1 = {arr:1./float(cnt) * total(reform(Ithi_1.arr[*, *, temporary(sept)],nxt,nyt,cnt), 3), unit:Ithi_1.unit} 177 177 undefine, Ithi_1 … … 288 288 Isal_sept_2 = {arr:-1} 289 289 ENDELSE 290 ; 290 291 291 IvelU_1 = read_ncdf(getenv('VAR1_IvelU'), allrecords = allrec, filename = std_file1_I ) 292 292 IvelV_1 = read_ncdf(getenv('VAR1_IvelV'), allrecords = allrec, filename = std_file1_I ) … … 335 335 Ivelo_sept_2 = {arr:-1} 336 336 ENDELSE 337 ; 337 338 338 Iage_1 = read_ncdf(getenv('VAR1_Iage'), allrecords = allrec, filename = std_file1_I ) 339 339 caldat, time, mm … … 396 396 cnt = cnt+1 & blabla = 'Erp salinity damping term' 397 397 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_erp, ERP1, ERP2, _extra = ex 398 ; 398 ;; 399 399 cnt = cnt+1 & blabla = 'Evaporation - Precipitation - Runoff term' 400 400 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_emp, EMP1, EMP2, _extra = ex … … 439 439 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_mld, MLD1, MLD2, MLD, _extra = ex 440 440 ; 441 cnt = cnt+1 & blabla = 'Mixed layer depth ortho plan ARCTIC' 442 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_MLD_ortho, MLD1, MLD2, /ARC, _extra = ex 443 ;sf 444 cnt = cnt+1 & blabla = 'Mixed layer depth ortho plan ANTARTIC' 445 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_MLD_ortho, MLD1, MLD2, /ANT, _extra = ex 446 ;sf 441 447 cnt = cnt+1 & blabla = 'Zonal mean Mixed layer depth' 442 448 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_ZonMld, MLD1, MLD2, MLD, _extra = ex … … 564 570 cnt = cnt+1 & blabla = 'Antartic Ice Velocity: SEPT' 565 571 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_IceVel, IvelU_sept_1, IvelU_sept_2, IvelV_sept_1, IvelV_sept_2, Ivelo_sept_1, Ivelo_sept_2, /ANT, /SEPT, _extra = ex 566 ; 572 567 573 cnt = cnt+1 & blabla = 'Arctic Ice Age: MARCH' 568 574 IF doplot EQ cnt OR doplot EQ 0 THEN std_plot_IceAge, Iage_march_1, Iage_march_2, Ifra_march_1, Ifra_march_2, /ARC, /MARCH, _extra = ex -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_vardef.sh
r4562 r4902 21 21 #idl_command=idl71 22 22 # 23 PS_DIR=$( pwd )/ OR2LPv36_ps_plot24 PDF_DIR=$( pwd )/ OR2LPv36_pdf_plot23 PS_DIR=$( pwd )/p4H25a50-testht_ps_plot 24 PDF_DIR=$( pwd )/p4H25a50-testht_pdf_plot 25 25 HTML_DIR=$( pwd )/html_plot 26 26 SAXO_DIR=/Users/sflod/SAXO_DIR 27 27 # 28 DIR_DATA=/Users/sflod/idl_PLOTS/DATA_STORE/RUN_CLIMATO/ 500y_pisces# path of data in NetCDF format28 DIR_DATA=/Users/sflod/idl_PLOTS/DATA_STORE/RUN_CLIMATO/lim3_ada # path of data in NetCDF format 29 29 DIR_CLIMATO=/Users/sflod/idl_PLOTS/CLIMATOLOGIES # path of climatological data 30 30 DIR_MASK=/Users/sflod/idl_PLOTS/MASK # path of mask files (ex: subbasins) … … 54 54 # 55 55 #===================== EXP1 ===================== 56 # 23610101_2370123157 FILE1_T= OR2LPv36_23610101_23701231_1Y_grid_T.nc # exp1 grid T input file58 FILE1_U= OR2LPv36_23610101_23701231_1Y_grid_U.nc # exp1 grid U input file59 FILE1_V= OR2LPv36_23610101_23701231_1Y_grid_V.nc # exp1 grid V input file60 FILE1_I= OR2LPv36_23610101_23701231_1M_icemod.nc # exp1 ice input file56 # 57 FILE1_T=p4H25a50_20410101_20501231_1Y_grid_T.nc # exp1 grid T input file 58 FILE1_U=p4H25a50_20410101_20501231_1Y_grid_U.nc # exp1 grid U input file 59 FILE1_V=p4H25a50_20410101_20501231_1Y_grid_V.nc # exp1 grid V input file 60 FILE1_I=p4H25a50_20410101_20501231_1M_icemod.nc # exp1 ice input file 61 61 VAR1_T=thetao 62 62 VAR1_S=so 63 VAR1_QNET= tohfls64 VAR1_ERP= sowafldp63 VAR1_QNET=qt 64 VAR1_ERP=wfcorr 65 65 VAR1_EMP=wfo 66 66 VAR1_MLD=mldr10_1 67 67 VAR1_U=uocetr_eff 68 68 VAR1_V=vocetr_eff 69 VAR1_Ithick= iicethic70 VAR1_Ifrac=s oicecov71 VAR1_Isnow= isnowthi72 #VAR1_Isal=sisali73 #VAR1_Iage=siages74 VAR1_IvelU= iicevelu75 VAR1_IvelV= iicevelv76 #VAR1_Ivelo=sivelo69 VAR1_Ithick=sithic 70 VAR1_Ifrac=siconc 71 VAR1_Isnow=snvolu 72 VAR1_Isal=sisali 73 VAR1_Iage=siages 74 VAR1_IvelU=sivelu 75 VAR1_IvelV=sivelv 76 VAR1_Ivelo=sivelo 77 77 # 78 78 #===================== EXP2 ===================== 79 79 # 80 FILE2_T= OR2LPv36_23610101_23701231_1Y_grid_T.nc # exp1 grid T input file81 FILE2_U= OR2LPv36_23610101_23701231_1Y_grid_U.nc # exp1 grid U input file82 FILE2_V= OR2LPv36_23610101_23701231_1Y_grid_V.nc # exp1 grid V input file83 FILE2_I= OR2LPv36_23610101_23701231_1M_icemod.nc # exp1 ice input file80 FILE2_T=testht_20410101_20501231_1Y_grid_T.nc # exp1 grid T input file 81 FILE2_U=testht_20410101_20501231_1Y_grid_U.nc # exp1 grid U input file 82 FILE2_V=testht_20410101_20501231_1Y_grid_V.nc # exp1 grid V input file 83 FILE2_I=testht_20410101_20501231_1M_icemod.nc # exp1 ice input file 84 84 VAR2_T=thetao 85 85 VAR2_S=so 86 VAR2_QNET= tohfls87 VAR2_ERP= sowafldp86 VAR2_QNET=qt 87 VAR2_ERP=wfcorr 88 88 VAR2_EMP=wfo 89 89 VAR2_MLD=mldr10_1 90 90 VAR2_U=uocetr_eff 91 91 VAR2_V=vocetr_eff 92 VAR2_Ithick= iicethic93 VAR2_Ifrac=s oicecov94 VAR2_Isnow= isnowthi95 #VAR2_Isal=sisali96 #VAR2_Iage=siages97 VAR2_IvelU= iicevelu98 VAR2_IvelV= iicevelv99 #VAR2_Ivelo=sivelo92 VAR2_Ithick=sithic 93 VAR2_Ifrac=siconc 94 VAR2_Isnow=snvolu 95 VAR2_Isal=sisali 96 VAR2_Iage=siages 97 VAR2_IvelU=sivelu 98 VAR2_IvelV=sivelv 99 VAR2_Ivelo=sivelo 100 100 # 101 101 ######################### Export Variables ############################### -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_vardef.sh.old_names
r4559 r4902 74 74 VAR1_IvelU=iicevelu 75 75 VAR1_IvelV=iicevelv 76 VAR1_Ivelo=iicevelo76 #VAR1_Ivelo=iicevelo 77 77 # 78 78 #===================== EXP2 ===================== … … 99 99 VAR2_IvelU=iicevelu 100 100 VAR2_IvelV=iicevelv 101 VAR2_Ivelo=iicevelo101 #VAR2_Ivelo=iicevelo 102 102 # 103 103 ######################### Export Variables ############################### -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE.pro
r4497 r4902 88 88 ICE_S_15 = {arr:ICE_S_15 * 1.e-12, unit : '10^12 m^2'} 89 89 ; 90 title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) '+d1_d2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (CONTINUOUS) '+'!C'+ 'and Extend minus 15% (DASHED)' 90 ;;title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) '+d1_d2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (CONTINUOUS) '+'!C'+ 'and Extend minus 15% (DASHED)' 91 title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) '+d1_d2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (DASHED) '+'!C'+ 'and Extend minus 15% (CONTINUOUS)' 91 92 jpt=12 92 93 time=julday(1,15,1900)+30*lindgen(12) 93 pltt, ICE_N, 't', MIN = 4., MAX = 16., /REMPLI, /PORTRAIT, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $94 pltt, ICE_N, 't', MIN = 4., MAX = 16., /REMPLI, /PORTRAIT, LINESTYLE=2, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $ 94 95 , COLOR = 000 , small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 95 pltt, ICE_N_15, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ;;; dashed lines is LINESTYLE=2 $96 pltt, ICE_N_15, 't', /REMPLI, /PORTRAIT $ ;;; dashed lines is LINESTYLE=2 $ 96 97 , /ov1d, COLOR = 000, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 97 pltt, vICE_area_NH, 't', /REMPLI, /PORTRAIT $98 pltt, vICE_area_NH, 't', /REMPLI, /PORTRAIT, LINESTYLE=2 $ 98 99 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 99 pltt, vICE_ext_NH, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ;;; dashed lines is LINESTYLE=2 $100 pltt, vICE_ext_NH, 't', /REMPLI, /PORTRAIT $ ;;; dashed lines is LINESTYLE=2 $ 100 101 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 101 102 ; 102 title = 'Southern Hemisphere'+'!C'+prefix+' (BLACK) '+d1_d2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area ( CONTINUOUS) '+'!C'+ 'and Extend minus 15% (DASHED)'103 pltt, ICE_S, 't', MIN = 0., MAX = 20., /REMPLI, /NOERASE , XGRIDSTYLE = 1 , DATE_FORMAT = '%M' $103 title = 'Southern Hemisphere'+'!C'+prefix+' (BLACK) '+d1_d2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (DASHED) '+'!C'+ 'and Extend minus 15% (CONTINUOUS)' 104 pltt, ICE_S, 't', MIN = 0., MAX = 20., /REMPLI, LINESTYLE=2, /NOERASE , XGRIDSTYLE = 1 , DATE_FORMAT = '%M' $ 104 105 ,COLOR = 000, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 105 pltt, ICE_S_15, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$106 pltt, ICE_S_15, 't', /REMPLI, /PORTRAIT $ 106 107 , /ov1d, COLOR = 000, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 107 pltt, vICE_area_SH, 't', /REMPLI, /PORTRAIT $108 pltt, vICE_area_SH, 't', /REMPLI, /PORTRAIT, LINESTYLE=2 $ 108 109 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 109 pltt, vICE_ext_SH, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$110 pltt, vICE_ext_SH, 't', /REMPLI, /PORTRAIT $ 110 111 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 111 112 ; … … 159 160 160 161 161 title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (CONTINUOUS) '+'!C'+ 'and Extend minus 15% (DASHED)' 162 ;;title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (CONTINUOUS) '+'!C'+ 'and Extend minus 15% (DASHED)' 163 title = 'Northern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'OBSERVATION (light blue) '+'!C'+' Global Annual Mean Ice Area (DASHED) '+'!C'+ 'and Extend minus 15% (CONTINUOUS)' 162 164 jpt=12 163 165 time=julday(1,15,1900)+30*lindgen(12) 164 pltt, ICE_N, 't', MIN = 4, MAX = 16, /REMPLI, /PORTRAIT, XGRIDSTYLE = 1, window = 2, DATE_FORMAT = '%M' $166 pltt, ICE_N, 't', MIN = 4, MAX = 16, /REMPLI, /PORTRAIT, LINESTYLE=2, XGRIDSTYLE = 1, window = 2, DATE_FORMAT = '%M' $ 165 167 , COLOR = 000, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex ; BLACK 166 pltt, ICE_N2, 't', /REMPLI, /PORTRAIT $168 pltt, ICE_N2, 't', /REMPLI, /PORTRAIT , LINESTYLE=2 $ 167 169 , /ov1d, COLOR = 250, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex ; RED 168 pltt, ICE_N_15, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ; linee tratteggiate LINESTYLE=2 $170 pltt, ICE_N_15, 't', /REMPLI, /PORTRAIT $ ; linee tratteggiate LINESTYLE=2 $ 169 171 , /ov1d, COLOR = 000, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 170 pltt, ICE_N2_15, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ; linee tratteggiate LINESTYLE=2 $172 pltt, ICE_N2_15, 't', /REMPLI, /PORTRAIT $ ; linee tratteggiate LINESTYLE=2 $ 171 173 , /ov1d, COLOR = 250, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 172 pltt, vICE_area_NH, 't', /REMPLI, /PORTRAIT $174 pltt, vICE_area_NH, 't', /REMPLI, /PORTRAIT, LINESTYLE=2 $ 173 175 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex ; light blue 174 pltt, vICE_ext_NH, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$176 pltt, vICE_ext_NH, 't', /REMPLI, /PORTRAIT $ 175 177 , /ov1d, COLOR = 100, small = [1, 2, 1], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex ; blu scuro 176 178 ; 177 title ='Southern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'OBSERVATION (light blue) '+'!C'+'Global Annual Mean Ice Area ( CONTINUS)'+'!C'+ 'and Extend minus 15% (DASHED)'179 title ='Southern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'OBSERVATION (light blue) '+'!C'+'Global Annual Mean Ice Area (DASHED)'+'!C'+ 'and Extend minus 15% (CONTINUOUS)' 178 180 ; title ='Southern Hemisphere'+'!C' 179 pltt, ICE_S, 't', MIN = 0., MAX = 20., /REMPLI, /NOERASE, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $181 pltt, ICE_S, 't', MIN = 0., MAX = 20., /REMPLI, LINESTYLE=2, /NOERASE, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $ 180 182 , COLOR = 000, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 181 pltt, ICE_S2, 't', /REMPLI, /NOERASE $183 pltt, ICE_S2, 't', /REMPLI, /NOERASE, LINESTYLE=2 $ 182 184 , /ov1d, COLOR = 250, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 183 pltt, ICE_S_15 , 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ; linee tratteggiate LINESTYLE=2 $185 pltt, ICE_S_15 , 't', /REMPLI, /PORTRAIT $ ; linee tratteggiate LINESTYLE=2 $ 184 186 , /ov1d, COLOR = 000, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 185 pltt, ICE_S2_15, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$ ; linee tratteggiate LINESTYLE=2 $187 pltt, ICE_S2_15, 't', /REMPLI, /PORTRAIT $ ; linee tratteggiate LINESTYLE=2 $ 186 188 , /ov1d, COLOR = 250, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 187 pltt, vICE_area_SH, 't', /REMPLI, /PORTRAIT $189 pltt, vICE_area_SH, 't', /REMPLI, /PORTRAIT, LINESTYLE=2 $ 188 190 , /ov1d, COLOR = 100, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 189 pltt, vICE_ext_SH, 't', /REMPLI, /PORTRAIT , LINESTYLE=2$191 pltt, vICE_ext_SH, 't', /REMPLI, /PORTRAIT $ 190 192 , /ov1d, COLOR = 100, small = [1, 2, 2], YTITLE = '10^12 m^2 ', TITLE = title, _extra = ex 191 193 ; -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE_FRAM.pro
r4514 r4902 5 5 arr2d = arr2d[t1:t2] 6 6 arr2d = reform(arr2d,12,nyear) ; put in 2D array 7 arr2d = total(arr2d,2)/nyear ; total over 2th dimension (i.e.years) 7 ;arr2d = total(arr2d,2)/nyear ; total over 2th dimension (i.e.years) 8 arr2d = arr2d[*, nyear-1] ; select last year 8 9 9 10 return, arr2d … … 34 35 ; 35 36 d1_d2 = '('+strtrim(date1, 1)+' - '+strtrim(date2, 1)+')' 37 d2 = '('+strtrim(date2, 1)+')' 36 38 ; 37 39 iodir = std_iodir_data … … 74 76 ;; AREA 75 77 ICE_area_export = reform(ICE_area_export, 12, nyr) 76 ICE_area_export = total(ICE_area_export,2)/nyr 78 ;ICE_area_export = total(ICE_area_export,2)/nyr ; old version monthly mean average over all years 79 ICE_area_export = ICE_area_export[*,nyr-1] ; dim= 12, index 0-11; last year choosen 77 80 ; ICE_area_export = {arr:ICE_area_export * 1.e-12 * 86400 * 365 , unit : '10^6 Km^2/year'} ; annual mean 78 81 ICE_area_export = {arr:ICE_area_export * 1.e-12 * 86400 * 30 , unit : '10^6 Km^2/month'} ; monthly mean … … 80 83 ; 81 84 ICE_vol_export = reform(ICE_vol_export, 12, nyr) 82 ICE_vol_export = total(ICE_vol_export,2)/nyr 85 ;ICE_vol_export = total(ICE_vol_export,2)/nyr 86 ICE_vol_export = ICE_vol_export[*,nyr-1] 83 87 ; ICE_vol_export = {arr:ICE_vol_export * 1.e-9 * 86400 * 365 , unit : '10^3 Km^3/year'} ; annual mean 84 88 ICE_vol_export = {arr:ICE_vol_export * 1.e-9 * 86400 * 30 , unit : '10^3 Km^3/month'} ; monthly mean 85 89 86 90 ; 87 title = 'Fram Strait Areal Export'+'!C'+prefix+' '+d1_d2 91 ;title = 'Fram Strait Areal Export: LAST YEAR'+'!C'+prefix+' '+d1_d2 92 title = 'Fram Strait Areal Export: LAST YEAR'+'!C'+prefix+' '+d2 88 93 jpt=12 89 94 time=julday(1,15,1900)+30*lindgen(12) … … 99 104 xyouts, julday(7,15,1900), 0.41, 'Data from Kwok et al.(2004), 1979-2002 ', ALIGN = 0, CHARTHICK = 2, CHARSIZE=0.8, COLOR=2 100 105 ; 101 title = 'Fram Strait Volume Export'+'!C'+prefix+' '+d1_d2 106 ;title = 'Fram Strait Volume Export LAST YEAR'+'!C'+prefix+' '+d1_d2 107 title = 'Fram Strait Volume Export LAST YEAR'+'!C'+prefix+' '+d2 102 108 pltt, ICE_vol_export, 't', /REMPLI, MIN = 60., MAX = 500. , /NOERASE, XGRIDSTYLE = 1 $ 103 109 , small = [1, 2, 2], YTITLE = '10^3 Km^3/month', TITLE = title, DATE_FORMAT = '%M', _extra = ex … … 118 124 119 125 d1_d2_2 = '('+strtrim(date1_2, 1)+' - '+strtrim(date2_2, 1)+')' 126 d2_2 = '('+strtrim(date2_2, 1)+')' 120 127 tsave = time 121 128 domdef, indx1, indx2, indy1, indy2, /xindex, /yindex,/memeindices … … 140 147 ;; AREA 141 148 ICE_area_export_2 = reform(ICE_area_export_2, 12, nyr) 142 ICE_area_export_2 = total(ICE_area_export_2,2)/nyr 149 ;ICE_area_export_2 = total(ICE_area_export_2,2)/nyr 150 ICE_area_export_2 = ICE_area_export_2[*,nyr-1] 143 151 ; ICE_area_export_2 = {arr:ICE_area_export_2 * 1.e-12 * 86400 * 365 , unit : '10^6 Km^2/year'} ; annual mean 144 152 ICE_area_export_2 = {arr:ICE_area_export_2 * 1.e-12 * 86400 * 30 , unit : '10^6 Km^2/month'} ; monthly mean 145 153 ; 146 154 ICE_vol_export_2 = reform(ICE_vol_export_2, 12, nyr) 147 ICE_vol_export_2 = total(ICE_vol_export_2,2)/nyr 155 ;ICE_vol_export_2 = total(ICE_vol_export_2,2)/nyr 156 ICE_vol_export_2 = ICE_vol_export_2[*,nyr-1] 148 157 ; ICE_vol_export_2 = {arr:ICE_vol_export_2 * 1.e-12 * 86400 * 365 , unit : '10^3 Km^3/year'} ; annual mean 149 158 ICE_vol_export_2 = {arr:ICE_vol_export_2 * 1.e-9 * 86400 * 30 , unit : '10^3 Km^3/month'} ; monthly mean … … 152 161 if KEYWORD_SET(postscript) then openps, filename+'_2.ps', portrait = 1 153 162 154 title = 'Fram Strait Areal Export'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2 163 ;title = 'Fram Strait Areal Export'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2 164 title = 'Fram Strait Areal Export LAST YEAR'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d2_2 155 165 jpt=12 156 166 time=julday(1,15,1900)+30*lindgen(12) … … 170 180 xyouts, julday(7,15,1900), 0.41, 'Data from Kwok et al.(2004), 1979-2002 ', ALIGN = 0, CHARTHICK = 2, CHARSIZE=0.8, COLOR=2 171 181 ; 172 title = 'Fram Strait Volume Export'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2 182 ;title = 'Fram Strait Volume Export'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2 183 title = 'Fram Strait Volume Export LAST YEAR'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d2_2 173 184 pltt, ICE_vol_export, 't', /REMPLI, MIN = 60., MAX = 500., /NOERASE, XGRIDSTYLE = 1 $ 174 185 , small = [1, 2, 2], YTITLE = '10^3 Km^3/month', TITLE = title, DATE_FORMAT = '%M', _extra = ex -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE_Vol.pro
r4504 r4902 70 70 ; 71 71 title ='Southern Hemisphere' +'!C'+prefix+' '+d1_d2+' - '+'!C'+'Global Annual Mean Ice Volume (BLACK)' 72 pltt, ICE_vol_S, 't', MIN = 0., MAX = 1 1000., /REMPLI, /NOERASE, XGRIDSTYLE = 1 , DATE_FORMAT = '%M' $72 pltt, ICE_vol_S, 't', MIN = 0., MAX = 12000., /REMPLI, /NOERASE, XGRIDSTYLE = 1 , DATE_FORMAT = '%M' $ 73 73 , small = [1, 2, 2], YTITLE = '10^9 Km^3 ', TITLE = title, _extra = ex 74 74 ; … … 119 119 ; 120 120 title = 'Southern Hemisphere'+'!C'+prefix+' (BLACK) - '+prefix2+' (RED) '+d1_d2_2+'!C'+'Global Annual Mean Ice Volume' 121 pltt, ICE_vol_S, 't', MIN = 0., MAX = 1 1000., /REMPLI, /NOERASE, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $121 pltt, ICE_vol_S, 't', MIN = 0., MAX = 12000., /REMPLI, /NOERASE, XGRIDSTYLE = 1, DATE_FORMAT = '%M' $ 122 122 , small = [1, 2, 2], YTITLE = '10^9 Km^3 ', TITLE = title, _extra = ex 123 123 pltt, ICE_vol_S2, 't', /REMPLI, /NOERASE $ -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_all.pro
r4559 r4902 60 60 IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_SSH, masknp, POSTSCRIPT = postscript, _extra = ex 61 61 ; 62 cnt = cnt+1 & blabla = 'Global Mean Q net'63 IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_Q, masknp, POSTSCRIPT = postscript, _extra = ex62 ;;;; cnt = cnt+1 & blabla = 'Global Mean Q net' 63 ;;;; IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_Q, masknp, POSTSCRIPT = postscript, _extra = ex 64 64 ; 65 65 cnt = cnt+1 & blabla = 'Global Mean EMP' … … 77 77 cnt = cnt+1 & blabla = 'Sea-Ice Volume' 78 78 IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_ICE_Vol, masknp, POSTSCRIPT = postscript, _extra = ex 79 ; 80 cnt = cnt+1 & blabla = 'ICE Velocity '81 IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_ICE_Vel, masknp, POSTSCRIPT = postscript, _extra = ex82 ; 79 ;SF; and probably useless 80 ;SF cnt = cnt+1 & blabla = 'ICE Velocity ' 81 ;SF IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_ICE_Vel, masknp, POSTSCRIPT = postscript, _extra = ex 82 ;SF; 83 83 cnt = cnt+1 & blabla = 'Sea-Ice Volume Export at Fram Strait' 84 84 IF doplot EQ cnt OR doplot EQ 0 THEN std_ts_ICE_FRAM, masknp, POSTSCRIPT = postscript, _extra = ex -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_vardef.sh
r4559 r4902 18 18 idl_command=/Applications/itt/idl64/bin/idl 19 19 # 20 PS_DIR=$( pwd )/ts_ heatbug_ps21 PDF_DIR=$( pwd )/ts_ heatbug_pdf20 PS_DIR=$( pwd )/ts_p4H25a50-testht_ps 21 PDF_DIR=$( pwd )/ts_p4H25a50-testht_pdf 22 22 HTML_DIR=$( pwd )/html 23 23 SAXO_DIR=/Users/sflod/SAXO_DIR 24 24 # 25 DIR_DATA=/Users/sflod/idl_PLOTS/DATA_STORE/RUN_CLIMATO/lim3_ada 25 DIR_DATA=/Users/sflod/idl_PLOTS/DATA_STORE/RUN_CLIMATO/lim3_ada # path of data in NetCDF format 26 26 DIR_CLIMATO=/Users/sflod/idl_PLOTS/CLIMATOLOGIES # path of climatological data 27 27 DIR_MASK=/Users/sflod/idl_PLOTS/MASK # path of mask files (ex: subbasins) … … 52 52 READ_ONLY_FIRST_RECORD=0 # if 0 then read all records in files else read only the first reacord in each file 53 53 # 54 #DATE1=20010101 ; DATE2=25001231 55 DATE1=20310101 ; DATE2=20401231 56 #DATE1=00010101 ; DATE2=00101231 54 DATE1=20010101 ; DATE2=20501231 57 55 # 58 VAR1_T=thetao ; V1T_PREF=heatbug; V1T_SUFF=_1Y_grid_T.nc59 VAR1_S=so ; V1S_PREF=heatbug; V1S_SUFF=_1Y_grid_T.nc60 VAR1_SSH=zos ; V1SSH_PREF= heatbug; V1SSH_SUFF=_1Y_grid_T.nc61 VAR1_Q=tohfls ; V1Q_PREF=heatbug; V1Q_SUFF=_1Y_grid_T.nc62 VAR1_EMP=wfo ; V1EMP_PREF= heatbug; V1EMP_SUFF=_1Y_grid_T.nc63 VAR1_U=uocetr_eff ; V1U_PREF=heatbug; V1U_SUFF=_1Y_grid_U.nc64 VAR1_V=vocetr_eff ; V1V_PREF=heatbug; V1V_SUFF=_1Y_grid_V.nc65 VAR1_ICE=siconc ; V1ICE_PREF= heatbug; V1ICE_SUFF=_1M_icemod.nc66 VAR1_Ithick=sithic ; V1It_PREF=heatbug; V1It_SUFF=_1M_icemod.nc67 VAR1_SNOW=sn dept ; V1SNOW_PREF=heatbug; V1SNOW_SUFF=_1M_icemod.nc68 VAR1_IvelV=sivelv ; V1IvV_PREF= heatbug ; V1IvV_SUFF=_1M_icemod.nc69 VAR1_Ivel=sivelo ; V1Iv_PREF=heatbug; V1Iv_SUFF=_1M_icemod.nc56 VAR1_T=thetao ; V1T_PREF=p4H25a50 ; V1T_SUFF=_1Y_grid_T.nc 57 VAR1_S=so ; V1S_PREF=p4H25a50 ; V1S_SUFF=_1Y_grid_T.nc 58 VAR1_SSH=zos ; V1SSH_PREF=p4H25a50 ; V1SSH_SUFF=_1Y_grid_T.nc 59 ##VAR1_Q=qt ; V1Q_PREF=p4H25a50 ; V1Q_SUFF=_1Y_grid_T.nc 60 VAR1_EMP=wfo ; V1EMP_PREF=p4H25a50 ; V1EMP_SUFF=_1Y_grid_T.nc 61 VAR1_U=uocetr_eff ; V1U_PREF=p4H25a50 ; V1U_SUFF=_1Y_grid_U.nc 62 VAR1_V=vocetr_eff ; V1V_PREF=p4H25a50 ; V1V_SUFF=_1Y_grid_V.nc 63 VAR1_ICE=siconc ; V1ICE_PREF=p4H25a50 ; V1ICE_SUFF=_1M_icemod.nc 64 VAR1_Ithick=sithic ; V1It_PREF=p4H25a50 ; V1It_SUFF=_1M_icemod.nc 65 VAR1_SNOW=snthic ; V1SNOW_PREF=p4H25a50 ; V1SNOW_SUFF=_1M_icemod.nc 66 VAR1_IvelV=sivelv ; V1IvV_PREF=p4H25a50 ; V1IvV_SUFF=_1M_icemod.nc 67 VAR1_Ivel=sivelo ; V1Iv_PREF=p4H25a50 ; V1Iv_SUFF=_1M_icemod.nc 70 68 # 71 69 #===================== EXP2 ===================== 72 70 # 73 #DATE1_2=20010101 ; DATE2_2=20101231 74 DATE1_2=20310101 ; DATE2_2=20401231 75 #DATE1_2=20010101 ; DATE2_2=25001231 71 DATE1_2=20010101 ; DATE2_2=20501231 76 72 # 77 VAR2_T=thetao ; V2T_PREF=heatbug; V2T_SUFF=_1Y_grid_T.nc78 VAR2_S=so ; V2S_PREF=heatbug; V2S_SUFF=_1Y_grid_T.nc79 VAR2_SSH=zos ; V2SSH_PREF=heatbug; V2SSH_SUFF=_1Y_grid_T.nc80 VAR2_Q=tohfls ; V2Q_PREF=heatbug; V2Q_SUFF=_1Y_grid_T.nc81 VAR2_EMP=wfo ; V2EMP_PREF=heatbug; V2EMP_SUFF=_1Y_grid_T.nc82 VAR2_U=uocetr_eff ; V2U_PREF=heatbug; V2U_SUFF=_1Y_grid_U.nc83 VAR2_V=vocetr_eff ; V2V_PREF=heatbug; V2V_SUFF=_1Y_grid_V.nc84 VAR2_ICE=siconc ; V2ICE_PREF=heatbug; V2ICE_SUFF=_1M_icemod.nc85 VAR2_Ithick=sithic ; V2It_PREF=heatbug; V2It_SUFF=_1M_icemod.nc86 VAR2_SNOW=sn dept ; V2SNOW_PREF=heatbug; V2SNOW_SUFF=_1M_icemod.nc87 VAR2_IvelV=sivelv ; V2IvV_PREF=heatbug ; V2IvV_SUFF=_1M_icemod.nc88 VAR2_Ivel=sivelo ; V2Iv_PREF=heatbug ; V2Iv_SUFF=_1M_icemod.nc73 VAR2_T=thetao ; V2T_PREF=testht ; V2T_SUFF=_1Y_grid_T.nc 74 VAR2_S=so ; V2S_PREF=testht ; V2S_SUFF=_1Y_grid_T.nc 75 VAR2_SSH=zos ; V2SSH_PREF=testht ; V2SSH_SUFF=_1Y_grid_T.nc 76 ##VAR2_Q=qt ; V2Q_PREF=testht ; V2Q_SUFF=_1Y_grid_T.nc 77 VAR2_EMP=wfo ; V2EMP_PREF=testht ; V2EMP_SUFF=_1Y_grid_T.nc 78 VAR2_U=uocetr_eff ; V2U_PREF=testht ; V2U_SUFF=_1Y_grid_U.nc 79 VAR2_V=vocetr_eff ; V2V_PREF=testht ; V2V_SUFF=_1Y_grid_V.nc 80 VAR2_ICE=siconc ; V2ICE_PREF=testht ; V2ICE_SUFF=_1M_icemod.nc 81 VAR2_Ithick=sithic ; V2It_PREF=testht ; V2It_SUFF=_1M_icemod.nc 82 VAR2_SNOW=snthic ; V2SNOW_PREF=testht ; V2SNOW_SUFF=_1M_icemod.nc 83 VAR2_IvelV=sivelv ; V2IvV_PREF=testht ; V2IvV_SUFF=_1M_icemod.nc 84 VAR2_Ivel=sivelo ; V2IvV_PREF=testht ; V2IvV_SUFF=_1M_icemod.nc 89 85 # 90 86 ######################### Export Variables ############################### -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/SHARED/1_namelist_ref
r4900 r4902 31 31 nn_leapy = 0 ! Leap year calendar (1) or not (0) 32 32 ln_rstart = .false. ! start from rest (F) or from a restart file (T) 33 nn_euler = 1 ! = 0 : start with forward time step if ln_rstart=.true. 33 34 nn_rstctl = 0 ! restart control => activated only if ln_rstart = T 34 35 ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist … … 119 120 ! 120 121 rn_rdt = 5760. ! time step for the dynamics (and tracer if nn_acc=0) 121 nn_baro = 64 ! number of barotropic time step ("key_dynspg_ts")122 122 rn_atfp = 0.1 ! asselin time filter parameter 123 123 nn_acc = 0 ! acceleration of convergence : =1 used, rdt < rdttra(k) … … 152 152 / 153 153 !----------------------------------------------------------------------- 154 &namsplit ! time splitting parameters ("key_dynspg_ts") 155 !----------------------------------------------------------------------- 156 ln_bt_fw = .TRUE. ! Forward integration of barotropic equations 157 ln_bt_av = .TRUE. ! Time filtering of barotropic variables 158 ln_bt_nn_auto = .TRUE. ! Set nn_baro automatically to be just below 159 ! a user defined maximum courant number (rn_bt_cmax) 160 nn_baro = 30 ! Number of iterations of barotropic mode 161 ! during rn_rdt seconds. Only used if ln_bt_nn_auto=F 162 rn_bt_cmax = 0.8 ! Maximum courant number allowed if ln_bt_nn_auto=T 163 nn_bt_flt = 1 ! Time filter choice 164 ! = 0 None 165 ! = 1 Boxcar over nn_baro barotropic steps 166 ! = 2 Boxcar over 2*nn_baro " " 167 / 168 !----------------------------------------------------------------------- 154 169 &namcrs ! Grid coarsening for dynamics output and/or 155 170 ! passive tracer coarsened online simulations … … 168 183 / 169 184 !----------------------------------------------------------------------- 185 &namc1d ! 1D configuration options ("key_c1d") 186 !----------------------------------------------------------------------- 187 rn_lat1d = 50 ! Column latitude (default at PAPA station) 188 rn_lon1d = -145 ! Column longitude (default at PAPA station) 189 ln_c1d_locpt= .true. ! Localization of 1D config in a grid (T) or independant point (F) 190 / 191 !----------------------------------------------------------------------- 170 192 &namtsd ! data : Temperature & Salinity 171 193 !----------------------------------------------------------------------- … … 173 195 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 174 196 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 175 sn_tem = 'data_1m_potential_temperature_nomask', -1 ,'votemper' , .true. , .true. , 'yearly' , '' , '', ''176 sn_sal = 'data_1m_salinity_nomask' , -1 ,'vosaline' , .true. , .true. , 'yearly' , '' , '', ''197 sn_tem = 'data_1m_potential_temperature_nomask', -1 ,'votemper' , .true. , .true. , 'yearly' , '' , '' , '' 198 sn_sal = 'data_1m_salinity_nomask' , -1 ,'vosaline' , .true. , .true. , 'yearly' , '' , '' , '' 177 199 ! 178 200 cn_dir = './' ! root directory for the location of the runoff files 179 201 ln_tsd_init = .true. ! Initialisation of ocean T & S with T &S input data (T) or not (F) 180 ln_tsd_tradmp = . false. ! damping of ocean T & S toward T &S input data (T) or not (F)202 ln_tsd_tradmp = .true. ! damping of ocean T & S toward T &S input data (T) or not (F) 181 203 / 182 204 !!====================================================================== … … 270 292 &namsbc_core ! namsbc_core CORE bulk formulae 271 293 !----------------------------------------------------------------------- 272 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask !273 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename !274 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , ''275 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , ''294 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 295 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 296 sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Uwnd' , '' 297 sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bicubic.nc' , 'Vwnd' , '' 276 298 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' 277 299 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core2_agrif_bilinear.nc' , '' , '' … … 348 370 &namtra_qsr ! penetrative solar radiation 349 371 !----------------------------------------------------------------------- 350 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights 351 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename 352 sn_chl ='chlorophyll', -1 , 'CHLA' , .true. , .true. , 'yearly' , 'weights_bilin' 372 ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 373 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 374 sn_chl ='chlorophyll', -1 , 'CHLA' , .true. , .true. , 'yearly' , 'weights_bilin' , '' , '' 353 375 354 376 cn_dir = './' ! root directory for the location of the runoff files … … 546 568 nn_tra_dta = 0 ! = 0, bdy data are equal to the initial state 547 569 ! = 1, bdy data are read in 'bdydata .nc' files 570 cn_ice_lim = 'none' ! 571 nn_ice_lim_dta = 0 ! = 0, bdy data are equal to the initial state 572 ! = 1, bdy data are read in 'bdydata .nc' files 573 rn_ice_tem = 270. ! lim3 only: arbitrary temperature of incoming sea ice 574 rn_ice_sal = 10. ! lim3 only: -- salinity -- 575 rn_ice_age = 30. ! lim3 only: -- age -- 576 548 577 ln_tra_dmp =.false. ! open boudaries conditions for tracers 549 578 ln_dyn3d_dmp =.false. ! open boundary condition for baroclinic velocities … … 566 595 bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' , '' 567 596 bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' , '' 597 ! for lim2 598 ! bn_frld = 'amm12_bdyT_ice' , 24 , 'ileadfra' , .true. , .false. , 'daily' , '' , '' , '' 599 ! bn_hicif = 'amm12_bdyT_ice' , 24 , 'iicethic' , .true. , .false. , 'daily' , '' , '' , '' 600 ! bn_hsnif = 'amm12_bdyT_ice' , 24 , 'isnowthi' , .true. , .false. , 'daily' , '' , '' , '' 601 ! for lim3 602 ! bn_a_i = 'amm12_bdyT_ice' , 24 , 'ileadfra' , .true. , .false. , 'daily' , '' , '' , '' 603 ! bn_ht_i = 'amm12_bdyT_ice' , 24 , 'iicethic' , .true. , .false. , 'daily' , '' , '' , '' 604 ! bn_ht_s = 'amm12_bdyT_ice' , 24 , 'isnowthi' , .true. , .false. , 'daily' , '' , '' , '' 568 605 cn_dir = 'bdydta/' 569 606 ln_full_vel = .false. … … 590 627 ! = 2 : nonlinear friction 591 628 rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) 592 rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case) 629 rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case). Minimum coeft if ln_loglayer=T 630 rn_bfri2_max = 1.e-1 ! max. bottom drag coefficient (non linear case and ln_loglayer=T) 593 631 rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) 594 rn_bfrz0 = 3.e-3 ! bottom roughness for loglayer bfr coeff 632 rn_bfrz0 = 3.e-3 ! bottom roughness [m] if ln_loglayer=T 633 ln_loglayer = .false. ! logarithmic formulation (non linear case) 595 634 ln_bfr2d = .false. ! horizontal variation of the bottom friction coef (read a 2D mask file ) 596 635 rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) … … 726 765 ln_vvl_layer = .false. ! full layer vertical coordinate 727 766 ln_vvl_ztilde_as_zstar = .false. ! ztilde vertical coordinate emulating zstar 767 ln_vvl_zstar_at_eqtor = .false. ! ztilde near the equator 728 768 rn_ahe3 = 0.0e0 ! thickness diffusion coefficient 729 769 rn_rst_e3t = 30.e0 ! ztilde to zstar restoration timescale [days] … … 941 981 ! (no physical validity of the results) 942 982 nn_timing = 0 ! timing by routine activated (=1) creates timing.output file, or not (=0) 943 /944 !-----------------------------------------------------------------------945 &namc1d ! 1D configuration options ("key_c1d")946 !-----------------------------------------------------------------------947 rn_lat = 50 ! Column latitude948 rn_lon = -145 ! Column longitude949 983 / 950 984 !----------------------------------------------------------------------- -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/SHARED/field_def.xml
r4901 r4902 225 225 <field id="emp_x_sst" long_name="Concentration/Dilution term on SST" unit="kgC/m2/s" /> 226 226 <field id="emp_x_sss" long_name="Concentration/Dilution term on SSS" unit="kgPSU/m2/s" /> 227 228 227 229 228 <field id="iceconc" long_name="ice concentration" unit="%" /> 230 <field id="icebopr" long_name="daily bottom thermo ice prod." unit="km3/day" />231 <field id="icedypr" long_name="daily dynamic ice prod." unit="km3/day" />232 <field id="ioceflxb" long_name="Oceanic flux at the ice base" unit="W/m2" />233 229 <field id="uice_ipa" long_name="Ice velocity along i-axis at I-point (ice presence average)" unit="m/s" /> 234 230 <field id="vice_ipa" long_name="Ice velocity along j-axis at I-point (ice presence average)" unit="m/s" /> … … 238 234 <field id="qsr_oce" long_name="solar heat flux at ocean surface" unit="W/m2" /> 239 235 <field id="qns_oce" long_name="non-solar heat flux at ocean surface" unit="W/m2" /> 240 <field id="hfbri" long_name="heat flux due to brine release" unit="W/m2" /> 236 <field id="qt_ice" long_name="total flux at ice surface" unit="W/m2" /> 237 <field id="qsr_ice" long_name="solar heat flux at ice surface" unit="W/m2" /> 238 <field id="qns_ice" long_name="non-solar heat flux at ice surface" unit="W/m2" /> 239 <field id="qtr_ice" long_name="solar heat flux transmitted thru the ice" unit="W/m2" /> 241 240 <field id="utau_ice" long_name="Wind stress along i-axis over the ice at i-point" unit="N/m2" /> 242 241 <field id="vtau_ice" long_name="Wind stress along j-axis over the ice at i-point" unit="N/m2" /> 243 <field id="qsr_io" long_name="Ice-Oce downward solar heat flux" unit="W/m2" />244 <field id="qns_io" long_name="Ice-Oce downward non-solar heat flux" unit="W/m2" />245 242 <field id="micesalt" long_name="Mean ice salinity" unit="psu" /> 246 243 <field id="miceage" long_name="Mean ice age" unit="years" /> 247 <field id="icelapr" long_name="daily lateral thermo ice prod." unit="km3/day" /> 248 <field id="icesipr" long_name="daily snowice ice prod." unit="km3/day" /> 244 245 <field id="iceage_cat" long_name="Ice age for categories" unit="days" axis_ref="ncatice" /> 246 <field id="iceconc_cat" long_name="Ice concentration for categories" unit="%" axis_ref="ncatice" /> 247 <field id="icethic_cat" long_name="Ice thickness for categories" unit="m" axis_ref="ncatice" /> 248 <field id="snowthic_cat" long_name="Snow thicknessi for categories" unit="m" axis_ref="ncatice" /> 249 <field id="salinity_cat" long_name="Sea-Ice Bulk salinity for categories" unit="ppt" axis_ref="ncatice" /> 250 <field id="brinevol_cat" long_name="Brine volume for categories" unit="%" axis_ref="ncatice" /> 251 249 252 <field id="micet" long_name="Mean ice temperature" unit="degC" /> 250 <field id="icehc" long_name="ice total heat content" unit="10^9 253 <field id="icehc" long_name="ice total heat content" unit="10^9J" /> 251 254 <field id="isnowhc" long_name="snow total heat content" unit="10^9J" /> 252 255 <field id="icest" long_name="ice surface temperature" unit="degC" /> 253 <field id="sfxbri" long_name="brine salt flux" unit="psu*kg/m2/day" />254 <field id="sfxthd" long_name="equivalent FW salt flux" unit="psu*kg/m2/day" />255 256 <field id="ibrinv" long_name="brine volume" unit="%" /> 256 257 <field id="icecolf" long_name="frazil ice collection thickness" unit="m" /> 257 258 <field id="icestr" long_name="ice strength" unit="N/m" /> 258 259 <field id="icevel" long_name="ice velocity" unit="m/s" /> 259 <field id="isume" long_name="surface melt" unit="km3/day" />260 <field id="ibome" long_name="bottom melt" unit="km3/day" />261 260 <field id="idive" long_name="divergence" unit="10-8s-1" /> 262 261 <field id="ishear" long_name="shear" unit="10-8s-1" /> 263 <field id="icerepr" long_name="daily resultant ice prod./melting from limupdate" unit="km3/day" /> 264 <field id="icevolu" long_name="ice volume" unit="km3" /> 265 <field id="snowvol" long_name="snow volume" unit="km3" /> 266 <field id="sfxmec" long_name="salt flux from ridging rafting" unit="psu*kg/m2/day" /> 262 <field id="icevolu" long_name="ice volume" unit="m" /> 263 <field id="snowvol" long_name="snow volume" unit="m" /> 264 265 <field id="icetrp" long_name="ice volume transport" unit="m/day" /> 266 <field id="snwtrp" long_name="snw volume transport" unit="m/day" /> 267 <field id="deitrp" long_name="advected ice enhalpy" unit="W/m2" /> 268 <field id="destrp" long_name="advected snw enhalpy" unit="W/m2" /> 269 270 <field id="sfxbri" long_name="brine salt flux" unit="psu*kg/m2/day" /> 271 <field id="sfxdyn" long_name="salt flux from ridging rafting" unit="psu*kg/m2/day" /> 267 272 <field id="sfxres" long_name="salt flux from lipupdate (resultant)" unit="psu*kg/m2/day" /> 268 <field id="icetrp" long_name="ice volume transport" unit="km3/day" /> 269 270 273 <field id="sfxbog" long_name="salt flux from bot growth" unit="psu*kg/m2/day" /> 274 <field id="sfxbom" long_name="salt flux from bot melt" unit="psu*kg/m2/day" /> 275 <field id="sfxsum" long_name="salt flux from surf melt" unit="psu*kg/m2/day" /> 276 <field id="sfxsni" long_name="salt flux from snow-ice formation" unit="psu*kg/m2/day" /> 277 <field id="sfxopw" long_name="salt flux from open water ice formation" unit="psu*kg/m2/day" /> 278 <field id="sfx" long_name="salt flux total" unit="psu*kg/m2/day" /> 279 280 <field id="vfxbog" long_name="daily bottom thermo ice prod." unit="m/day" /> 281 <field id="vfxdyn" long_name="daily dynamic ice prod." unit="m/day" /> 282 <field id="vfxopw" long_name="daily lateral thermo ice prod." unit="m/day" /> 283 <field id="vfxsni" long_name="daily snowice ice prod." unit="m/day" /> 284 <field id="vfxsum" long_name="surface melt" unit="m/day" /> 285 <field id="vfxbom" long_name="bottom melt" unit="m/day" /> 286 <field id="vfxres" long_name="daily resultant ice prod./melting from limupdate" unit="m/day" /> 287 <field id="vfxice" long_name="ice melt/growth" unit="m/day" /> 288 <field id="vfxsnw" long_name="snw melt/growth" unit="m/day" /> 289 <field id="vfxsub" long_name="snw sublimation" unit="m/day" /> 290 <field id="vfxspr" long_name="snw precipitation on ice" unit="m/day" /> 291 292 <field id="hfxsum" long_name="heat fluxes causing surface ice melt" unit="W/m2" /> 293 <field id="hfxbom" long_name="heat fluxes causing bottom ice melt" unit="W/m2" /> 294 <field id="hfxbog" long_name="heat fluxes causing bottom ice growth" unit="W/m2" /> 295 <field id="hfxdif" long_name="heat fluxes causing ice temperature change" unit="W/m2" /> 296 <field id="hfxopw" long_name="heat fluxes causing open water ice formation" unit="W/m2" /> 297 <field id="hfxsnw" long_name="heat fluxes causing snow melt" unit="W/m2" /> 298 <field id="hfxerr" long_name="heat fluxes error after heat diffusion" unit="W/m2" /> 299 <field id="hfxerr_rem" long_name="heat fluxes error after remapping" unit="W/m2" /> 300 <field id="hfxout" long_name="total heat fluxes received by the ocean" unit="W/m2" /> 301 <field id="hfxin" long_name="total heat fluxes at the ice/ocean surface" unit="W/m2" /> 302 303 <!-- heat flux associated with mass exchange --> 304 <field id="hfxthd" long_name="heat fluxes from ice-ocean mass exchange during thermo" unit="W/m2" /> 305 <field id="hfxdyn" long_name="heat fluxes from ice-ocean mass exchange during dynamic" unit="W/m2" /> 306 <field id="hfxres" long_name="heat fluxes from ice-ocean mass exchange during resultant" unit="W/m2" /> 307 <field id="hfxsub" long_name="heat fluxes from ice-atm. mass exchange during sublimation" unit="W/m2" /> 308 <field id="hfxspr" long_name="heat fluxes from ice-atm. mass exchange during snow precip" unit="W/m2" /> 309 310 <!-- diags --> 311 <field id="hfxdhc" long_name="Heat content variation in snow and ice" unit="W/m2" /> 312 <field id="hfxtur" long_name="turbulent heat flux at the ice base" unit="W/m2" /> 313 314 271 315 </field_group> 272 316 -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r4900 r4902 52 52 ecc = 2.0 ! eccentricity of the elliptical yield curve 53 53 ahi0 = 350.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] 54 nevp = 300 ! number of iterations for subcycling in EVP, SB, 40055 telast =9600.0 ! timescale for elastic waves, SB, 720.054 nevp = 120 ! number of iterations for subcycling in EVP 55 relast = 0.333 ! ratio of elastic timescale over ice time step (1/3 if nevp=120 ; 1/9 if nevp=300) 56 56 alphaevp = 1.0 ! coefficient for the solution of internal ice stresses 57 57 hminrhg = 0.001 ! ice volume (a*h in m) below which ice velocity equal ocean velocity -
branches/2014/dev_CNRS_2014/NEMOGCM/CONFIG/SHARED/namelist_ref
r4901 r4902 244 244 ! =1 global mean of e-p-r set to zero at each time step 245 245 ! =2 annual global mean of e-p-r set to zero 246 ! =3 global emp set to zero and spread out over erp area247 246 ln_wave = .false. ! Activate coupling with wave (either Stokes Drift or Drag coefficient, or both) (T => fill namsbc_wave) 248 247 ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => fill namsbc_wave) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r4900 r4902 105 105 !! ** Global variables | 106 106 !!-------------|-------------|---------------------------------|-------| 107 !! a_i | a_i_ b| Ice concentration | |107 !! a_i | a_i_1d | Ice concentration | | 108 108 !! v_i | - | Ice volume per unit area | m | 109 109 !! v_s | - | Snow volume per unit area | m | … … 111 111 !! oa_i ! - ! Sea ice areal age content | day | 112 112 !! e_i ! - ! Ice enthalpy | 10^9 J| 113 !! - ! q_i_ b! Ice enthalpy per unit vol. | J/m3 |113 !! - ! q_i_1d ! Ice enthalpy per unit vol. | J/m3 | 114 114 !! e_s ! - ! Snow enthalpy | 10^9 J| 115 !! - ! q_s_ b! Snow enthalpy per unit vol. | J/m3 |115 !! - ! q_s_1d ! Snow enthalpy per unit vol. | J/m3 | 116 116 !! | 117 117 !!-------------|-------------|---------------------------------|-------| … … 120 120 !!-------------|-------------|---------------------------------|-------| 121 121 !! | 122 !! ht_i | ht_i_ b| Ice thickness | m |123 !! ht_s ! ht_s_ b| Snow depth | m |124 !! sm_i ! sm_i_ b| Sea ice bulk salinity ! ppt |125 !! s_i ! s_i_ b| Sea ice salinity profile ! ppt |122 !! ht_i | ht_i_1d | Ice thickness | m | 123 !! ht_s ! ht_s_1d | Snow depth | m | 124 !! sm_i ! sm_i_1d | Sea ice bulk salinity ! ppt | 125 !! s_i ! s_i_1d | Sea ice salinity profile ! ppt | 126 126 !! o_i ! - | Sea ice Age ! days | 127 !! t_i ! t_i_ b| Sea ice temperature ! K |128 !! t_s ! t_s_ b| Snow temperature ! K |129 !! t_su ! t_su_ b| Sea ice surface temperature ! K |127 !! t_i ! t_i_1d | Sea ice temperature ! K | 128 !! t_s ! t_s_1d | Snow temperature ! K | 129 !! t_su ! t_su_1d | Sea ice surface temperature ! K | 130 130 !! | 131 131 !! notes: the ice model only sees a bulk (i.e., vertically averaged) | … … 142 142 !! *** Category-summed state variables (diagnostic) *** | 143 143 !! ******************************************************************* | 144 !! at_i | at_i_ b| Total ice concentration | |144 !! at_i | at_i_1d | Total ice concentration | | 145 145 !! vt_i | - | Total ice vol. per unit area | m | 146 146 !! vt_s | - | Total snow vol. per unit ar. | m | … … 176 176 REAL(wp), PUBLIC :: ecc !: eccentricity of the elliptical yield curve 177 177 REAL(wp), PUBLIC :: ahi0 !: sea-ice hor. eddy diffusivity coeff. (m2/s) 178 REAL(wp), PUBLIC :: telast !: timescale for elastic waves (s) !SB 179 REAL(wp), PUBLIC :: alphaevp !: coeficient of the internal stresses !SB 178 REAL(wp), PUBLIC :: telast !: timescale for elastic waves (s) 179 REAL(wp), PUBLIC :: relast !: ratio => telast/rdt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 180 REAL(wp), PUBLIC :: alphaevp !: coeficient of the internal stresses 180 181 REAL(wp), PUBLIC :: unit_fac = 1.e+09_wp !: conversion factor for ice / snow enthalpy 181 182 REAL(wp), PUBLIC :: hminrhg !: ice volume (a*h, in m) below which ice velocity is set to ocean velocity … … 247 248 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhld !: heat flux from the lead used for bottom melting 248 249 249 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_snw !: Variation of snow mass over 1 time step [Kg/m2]250 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ ice !: Variation of ice mass over 1 time step [Kg/m2]251 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_sub !: Variation of snow mass over 1 time step due to sublimation [Kg/m2]252 253 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ sni !: snow ice growth254 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ opw !: lateral ice growth255 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ bog !: bottom ice growth256 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ dyn !: dynamical ice growth257 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ bom !: vertical bottom melt258 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ sum !: vertical surface melt259 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ res !: production (growth+melt) due to limupdate260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ spr !: snow precipitation on ice250 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_snw !: snow-ocean mass exchange over 1 time step [kg/m2] 251 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_spr !: snow precipitation on ice over 1 time step [kg/m2] 252 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_sub !: snow sublimation over 1 time step [kg/m2] 253 254 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_ice !: ice-ocean mass exchange over 1 time step [kg/m2] 255 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_sni !: snow ice growth component of wfx_ice [kg/m2] 256 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_opw !: lateral ice growth component of wfx_ice [kg/m2] 257 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_bog !: bottom ice growth component of wfx_ice [kg/m2] 258 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_dyn !: dynamical ice growth component of wfx_ice [kg/m2] 259 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_bom !: bottom melt component of wfx_ice [kg/m2] 260 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_sum !: surface melt component of wfx_ice [kg/m2] 261 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wfx_res !: residual component of wfx_ice [kg/m2] 261 262 262 263 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx_bog !: salt flux due to ice growth/melt [PSU/m2/s] … … 323 324 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: smt_i !: mean sea ice salinity averaged over all categories [PSU] 324 325 325 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: at_i_typ !: total area contained in each ice type [m^2]326 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vt_i_typ !: total volume contained in each ice type [m^3]327 328 326 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: t_s !: Snow temperatures [K] 329 327 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e_s !: Snow ... 330 331 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e_i_cat !: ! go to trash332 328 333 329 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: t_i !: ice temperatures [K] … … 350 346 !! * Old values of global variables 351 347 !!-------------------------------------------------------------------------- 352 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: old_v_s, old_v_i!: snow and ice volumes353 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: old_a_i, old_smv_i, old_oa_i !: ???354 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: old_e_s!: snow heat content355 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: old_e_i!: ice temperatures356 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: old_u_ice, old_v_ice !: ice velocity (gv6 and gv7)348 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: v_s_b, v_i_b !: snow and ice volumes 349 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i_b, smv_i_b, oa_i_b !: 350 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e_s_b !: snow heat content 351 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e_i_b !: ice temperatures 352 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice_b, v_ice_b !: ice velocity 357 353 358 354 … … 377 373 !! * Ice thickness distribution variables 378 374 !!-------------------------------------------------------------------------- 379 ! REMOVE380 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ice_types !: Vector connecting types and categories381 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ice_cat_bounds !: Matrix containing the integer upper and382 ! ! lower boundaries of ice thickness categories383 ! REMOVE384 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ice_ncat_types !: nb of thickness categories in each ice type385 375 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hi_max !: Boundary of ice thickness categories in thickness space 386 376 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hi_mean !: Mean ice thickness in catgories 387 ! REMOVE388 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hi_max_typ !: Boundary of ice thickness categories in thickness space389 377 390 378 !!-------------------------------------------------------------------------- … … 475 463 & bv_i (jpi,jpj) , smt_i(jpi,jpj) , STAT=ierr(ii) ) 476 464 ii = ii + 1 477 ALLOCATE( t_s(jpi,jpj,nlay_s,jpl) , at_i_typ(jpi,jpj,jpm) ,&478 & e_s(jpi,jpj,nlay_s,jpl) , vt_i_typ(jpi,jpj,jpm) , e_i_cat(jpi,jpj,jpl) ,STAT=ierr(ii) )479 ii = ii + 1 480 ALLOCATE( t_i(jpi,jpj, jkmax,jpl) , e_i(jpi,jpj,jkmax,jpl) , s_i(jpi,jpj,jkmax,jpl) , STAT=ierr(ii) )465 ALLOCATE( t_s(jpi,jpj,nlay_s,jpl) , & 466 & e_s(jpi,jpj,nlay_s,jpl) , STAT=ierr(ii) ) 467 ii = ii + 1 468 ALLOCATE( t_i(jpi,jpj,nlay_i+1,jpl) , e_i(jpi,jpj,nlay_i+1,jpl) , s_i(jpi,jpj,nlay_i+1,jpl) , STAT=ierr(ii) ) 481 469 482 470 ! * Moments for advection … … 494 482 & STAT=ierr(ii) ) 495 483 ii = ii + 1 496 ALLOCATE( sxe (jpi,jpj, jkmax,jpl) , sye (jpi,jpj,jkmax,jpl) , sxxe(jpi,jpj,jkmax,jpl) , &497 & syye(jpi,jpj, jkmax,jpl) , sxye(jpi,jpj,jkmax,jpl) , STAT=ierr(ii) )484 ALLOCATE( sxe (jpi,jpj,nlay_i+1,jpl) , sye (jpi,jpj,nlay_i+1,jpl) , sxxe(jpi,jpj,nlay_i+1,jpl) , & 485 & syye(jpi,jpj,nlay_i+1,jpl) , sxye(jpi,jpj,nlay_i+1,jpl) , STAT=ierr(ii) ) 498 486 499 487 ! * Old values of global variables 500 488 ii = ii + 1 501 ALLOCATE( old_v_s (jpi,jpj,jpl) , old_v_i (jpi,jpj,jpl) , old_e_s(jpi,jpj,nlay_s,jpl) , &502 & old_a_i (jpi,jpj,jpl) , old_smv_i(jpi,jpj,jpl) , old_e_i(jpi,jpj,jkmax,jpl) , &503 & o ld_oa_i(jpi,jpj,jpl) , &504 & old_u_ice(jpi,jpj) , old_v_ice(jpi,jpj) , STAT=ierr(ii) )489 ALLOCATE( v_s_b (jpi,jpj,jpl) , v_i_b (jpi,jpj,jpl) , e_s_b(jpi,jpj,nlay_s,jpl) , & 490 & a_i_b (jpi,jpj,jpl) , smv_i_b(jpi,jpj,jpl) , e_i_b(jpi,jpj,nlay_i+1 ,jpl) , & 491 & oa_i_b (jpi,jpj,jpl) , & 492 & u_ice_b(jpi,jpj) , v_ice_b(jpi,jpj) , STAT=ierr(ii) ) 505 493 506 494 ! * Increment of global variables … … 512 500 & STAT=ierr(ii) ) 513 501 ii = ii + 1 514 ALLOCATE( d_e_s_thd(jpi,jpj,nlay_s,jpl) , d_e_i_thd(jpi,jpj, jkmax,jpl) , d_u_ice_dyn(jpi,jpj) , &515 & d_e_s_trp(jpi,jpj,nlay_s,jpl) , d_e_i_trp(jpi,jpj, jkmax,jpl) , d_v_ice_dyn(jpi,jpj) , STAT=ierr(ii) )502 ALLOCATE( d_e_s_thd(jpi,jpj,nlay_s,jpl) , d_e_i_thd(jpi,jpj,nlay_i+1,jpl) , d_u_ice_dyn(jpi,jpj) , & 503 & d_e_s_trp(jpi,jpj,nlay_s,jpl) , d_e_i_trp(jpi,jpj,nlay_i+1,jpl) , d_v_ice_dyn(jpi,jpj) , STAT=ierr(ii) ) 516 504 517 505 ! * Ice thickness distribution variables 518 506 ii = ii + 1 519 ALLOCATE( ice_types(jpl) , ice_cat_bounds(jpm,2) , ice_ncat_types (jpm) , & 520 & hi_max (0:jpl) , hi_mean(jpl) , hi_max_typ(0:jpl,jpm) , STAT=ierr(ii) ) 507 ALLOCATE( hi_max(0:jpl), hi_mean(jpl), STAT=ierr(ii) ) 521 508 522 509 ! * Ice diagnostics 523 510 ii = ii + 1 524 ALLOCATE( dv_dt_thd(jpi,jpj,jpl) ,&525 & izero (jpi,jpj,jpl) , diag_trp_vi(jpi,jpj) , diag_trp_vs(jpi,jpj), diag_trp_ei(jpi,jpj), diag_trp_es(jpi,jpj),&526 & diag_ heat_dhc(jpi,jpj), STAT=ierr(ii) )511 ALLOCATE( dv_dt_thd(jpi,jpj,jpl), izero (jpi,jpj,jpl), & 512 & diag_trp_vi(jpi,jpj), diag_trp_vs (jpi,jpj), diag_trp_ei(jpi,jpj), & 513 & diag_trp_es(jpi,jpj), diag_heat_dhc(jpi,jpj), STAT=ierr(ii) ) 527 514 528 515 ice_alloc = MAXVAL( ierr(:) ) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r4901 r4902 66 66 ! 67 67 ! ! adequation jpk versus ice/snow layers/categories 68 IF( jpl > jpk .OR. jpm > jpk .OR.&69 jkmax > jpk .OR. nlay_s > jpk ) CALL ctl_stop( 'STOP',&68 IF( jpl > jpk .OR. (nlay_i+1) > jpk .OR. nlay_s > jpk ) & 69 & CALL ctl_stop( 'STOP', & 70 70 & 'ice_init: the 3rd dimension of workspace arrays is too small.', & 71 71 & 'use more ocean levels or less ice/snow layers/categories.' ) … … 174 174 !! limistate (only) and is changed to 99 m in ice_init 175 175 !!------------------------------------------------------------------ 176 INTEGER :: jl , jm! dummy loop index176 INTEGER :: jl ! dummy loop index 177 177 REAL(wp) :: zc1, zc2, zc3, zx1 ! local scalars 178 178 !!------------------------------------------------------------------ … … 185 185 ! 1) Ice thickness distribution parameters initialization 186 186 !------------------------------------------------------------------------------! 187 188 !- Types boundaries (integer)189 !----------------------------190 ice_cat_bounds(1,1) = 1191 ice_cat_bounds(1,2) = jpl192 193 !- Number of ice thickness categories in each ice type194 DO jm = 1, jpm195 ice_ncat_types(jm) = ice_cat_bounds(jm,2) - ice_cat_bounds(jm,1) + 1196 END DO197 198 !- Make the correspondence between thickness categories and ice types199 !---------------------------------------------------------------------200 DO jm = 1, jpm !over types201 DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) !over thickness categories202 ice_types(jl) = jm203 END DO204 END DO205 206 187 IF(lwp) THEN 207 WRITE(numout,*) ' Number of ice types jpm = ', jpm208 188 WRITE(numout,*) ' Number of ice categories jpl = ', jpl 209 DO jm = 1, jpm210 WRITE(numout,*) ' Ice type ', jm211 WRITE(numout,*) ' Number of thickness categories ', ice_ncat_types(jm)212 WRITE(numout,*) ' Thickness category boundaries ', ice_cat_bounds(jm,1:2)213 END DO214 WRITE(numout,*) 'Ice type vector', ice_types(1:jpl)215 WRITE(numout,*)216 189 ENDIF 217 190 … … 219 192 !---------------------------------- 220 193 hi_max(:) = 0._wp 221 hi_max_typ(:,:) = 0._wp 222 223 !- Type 1 - undeformed ice 224 zc1 = 3._wp / REAL( ice_cat_bounds(1,2) - ice_cat_bounds(1,1) + 1 , wp ) 194 195 zc1 = 3._wp / REAL( jpl, wp ) 225 196 zc2 = 10._wp * zc1 226 197 zc3 = 3._wp 227 198 228 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2)229 zx1 = REAL( jl-1 , wp ) / REAL( ice_cat_bounds(1,2) - ice_cat_bounds(1,1) + 1, wp )199 DO jl = 1, jpl 200 zx1 = REAL( jl-1, wp ) / REAL( jpl, wp ) 230 201 hi_max(jl) = hi_max(jl-1) + zc1 + zc2 * (1._wp + TANH( zc3 * (zx1 - 1._wp ) ) ) 231 202 END DO 232 203 233 !- Fill in the hi_max_typ vector, useful in other circumstances 234 ! Tricky trick: hi_max_typ is actually not used in the code and will be removed in a 235 ! next flyspray at this time, the tricky trick will also be removed (Martin, march 08) 236 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 237 hi_max_typ(jl,1) = hi_max(jl) 238 END DO 239 240 IF(lwp) WRITE(numout,*) ' Thickness category boundaries independently of ice type ' 204 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 241 205 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 242 206 243 IF(lwp) WRITE(numout,*) ' Thickness category boundaries inside ice types '244 IF(lwp) THEN245 DO jm = 1, jpm246 WRITE(numout,*) ' Type number ', jm247 WRITE(numout,*) ' hi_max_typ : ', hi_max_typ(0:ice_ncat_types(jm),jm)248 END DO249 ENDIF250 207 ! 251 208 DO jl = 1, jpl -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r4900 r4902 73 73 !! ** Method : Arithmetics 74 74 !!--------------------------------------------------------------------- 75 INTEGER , INTENT(in ) :: ksum !: number of categories76 INTEGER , INTENT(in ) :: klay !: number of vertical layers77 REAL(wp), DIMENSION(jpi,jpj, jkmax,jpl), INTENT(in ) :: pin !: input field78 REAL(wp), DIMENSION(jpi,jpj) , INTENT( out) :: pout !: output field75 INTEGER , INTENT(in ) :: ksum !: number of categories 76 INTEGER , INTENT(in ) :: klay !: number of vertical layers 77 REAL(wp), DIMENSION(jpi,jpj,nlay_i+1,jpl), INTENT(in ) :: pin !: input field 78 REAL(wp), DIMENSION(jpi,jpj) , INTENT( out) :: pout !: output field 79 79 ! 80 80 INTEGER :: jk, jl ! dummy loop indices … … 175 175 zei_b = glob_sum( SUM( e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) 176 176 zfw_b = glob_sum( - ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + & 177 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) ) * area(:,:) * tms(:,:) ) 177 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) & 178 & ) * area(:,:) * tms(:,:) ) 178 179 zfs_b = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 179 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 180 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) & 181 & ) * area(:,:) * tms(:,:) ) 180 182 zft_b = glob_sum( ( hfx_sum(:,:) + hfx_bom(:,:) + hfx_bog(:,:) + hfx_dif(:,:) + hfx_opw(:,:) + hfx_snw(:,:) & 181 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) 183 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) & 184 & ) * area(:,:) / unit_fac * tms(:,:) ) 182 185 183 186 ELSEIF( icount == 1 ) THEN 184 187 185 188 zfs = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + & 186 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zfs_b 189 & sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) & 190 & ) * area(:,:) * tms(:,:) ) - zfs_b 187 191 zfw = glob_sum( - ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + & 188 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) ) * area(:,:) * tms(:,:) ) - zfw_b 192 & wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) + wfx_sub(:,:) + wfx_spr(:,:) & 193 & ) * area(:,:) * tms(:,:) ) - zfw_b 189 194 zft = glob_sum( ( hfx_sum(:,:) + hfx_bom(:,:) + hfx_bog(:,:) + hfx_dif(:,:) + hfx_opw(:,:) + hfx_snw(:,:) & 190 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) - zft_b 195 & - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) - hfx_sub(:,:) - hfx_spr(:,:) & 196 & ) * area(:,:) / unit_fac * tms(:,:) ) - zft_b 191 197 192 198 zvi = ( glob_sum( SUM( v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) - zvi_b ) * r1_rdtice - zfw -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r4900 r4902 59 59 !! 60 60 REAL(dp) :: zbg_ivo, zbg_svo, zbg_are, zbg_sal ,zbg_tem ,zbg_ihc ,zbg_shc 61 REAL(dp) :: zbg_sfx, zbg_sfx_bri, zbg_sfx_bog, zbg_sfx_bom, zbg_sfx_sum, zbg_sfx_sni, zbg_sfx_opw, zbg_sfx_res, zbg_sfx_dyn 61 REAL(dp) :: zbg_sfx, zbg_sfx_bri, zbg_sfx_bog, zbg_sfx_bom, zbg_sfx_sum, zbg_sfx_sni, & 62 & zbg_sfx_opw, zbg_sfx_res, zbg_sfx_dyn 62 63 REAL(dp) :: zbg_vfx, zbg_vfx_bog, zbg_vfx_opw, zbg_vfx_sni, zbg_vfx_dyn 63 64 REAL(dp) :: zbg_vfx_bom, zbg_vfx_sum, zbg_vfx_res, zbg_vfx_spr, zbg_vfx_snw, zbg_vfx_sub -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r4900 r4902 83 83 IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limdyn', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 84 84 85 old_u_ice(:,:) = u_ice(:,:) * tmu(:,:)86 old_v_ice(:,:) = v_ice(:,:) * tmv(:,:)85 u_ice_b(:,:) = u_ice(:,:) * tmu(:,:) 86 v_ice_b(:,:) = v_ice(:,:) * tmv(:,:) 87 87 88 88 ! Rheology (ice dynamics) … … 243 243 NAMELIST/namicedyn/ epsd, om, cw, angvg, pstar, & 244 244 & c_rhg, creepl, ecc, ahi0, & 245 & nevp, telast, alphaevp, hminrhg245 & nevp, relast, alphaevp, hminrhg 246 246 !!------------------------------------------------------------------- 247 247 … … 269 269 WRITE(numout,*) ' horizontal diffusivity coeff. for sea-ice ahi0 = ', ahi0 270 270 WRITE(numout,*) ' number of iterations for subcycling nevp = ', nevp 271 WRITE(numout,*) ' timescale for elastic waves telast = ', telast271 WRITE(numout,*) ' ratio of elastic timescale over ice time step relast = ', relast 272 272 WRITE(numout,*) ' coefficient for the solution of int. stresses alphaevp = ', alphaevp 273 273 WRITE(numout,*) ' min ice thickness for rheology calculations hminrhg = ', hminrhg … … 287 287 pstarh = pstar * 0.5_wp 288 288 289 ! elastic damping 290 telast = relast * rdt_ice 291 289 292 ! Diffusion coefficients. 290 293 ahiu(:,:) = ahi0 * umask(:,:,1) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4901 r4902 128 128 DO jj = 1, jpj ! ice if sst <= t-freez + ttest 129 129 DO ji = 1, jpi 130 IF( ( tsn(ji,jj,1,jp_tem) - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >= thres_sst ) THEN ; zswitch(ji,jj) = 0._wp * tms(ji,jj) ! no ice 131 ELSE ; zswitch(ji,jj) = 1._wp * tms(ji,jj) ! ice 130 IF( ( tsn(ji,jj,1,jp_tem) - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >= thres_sst ) THEN 131 zswitch(ji,jj) = 0._wp * tms(ji,jj) ! no ice 132 ELSE 133 zswitch(ji,jj) = 1._wp * tms(ji,jj) ! ice 132 134 ENDIF 133 135 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r4901 r4902 692 692 693 693 IF( partfun_swi == 0 ) THEN !--- Linear formulation (Thorndike et al., 1975) 694 DO jl = 0, ice_cat_bounds(1,2) ! only undeformed ice participates694 DO jl = 0, jpl 695 695 DO jj = 1, jpj 696 696 DO ji = 1, jpi … … 715 715 Gsum(:,:,jl) = EXP( -Gsum(:,:,jl) * astari ) * zdummy 716 716 END DO !jl 717 DO jl = 0, ice_cat_bounds(1,2)717 DO jl = 0, jpl 718 718 athorn(:,:,jl) = Gsum(:,:,jl-1) - Gsum(:,:,jl) 719 719 END DO … … 897 897 CALL wrk_alloc( jpi, jpj, afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 898 898 CALL wrk_alloc( jpi, jpj, jpl, aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 899 CALL wrk_alloc( jpi, jpj, jkmax, eirft, erdg1, erdg2, ersw )900 CALL wrk_alloc( jpi, jpj, jkmax, jpl, eicen_init )899 CALL wrk_alloc( jpi, jpj, nlay_i+1, eirft, erdg1, erdg2, ersw ) 900 CALL wrk_alloc( jpi, jpj, nlay_i+1, jpl, eicen_init ) 901 901 902 902 ! Conservation check … … 1193 1193 !------------------------------------------------------------------------------- 1194 1194 ! jl1 looping 1-jpl 1195 DO jl2 = ice_cat_bounds(1,1), ice_cat_bounds(1,2)1195 DO jl2 = 1, jpl 1196 1196 ! over categories to which ridged ice is transferred 1197 1197 !CDIR NODEP … … 1238 1238 END DO ! jl2 (new ridges) 1239 1239 1240 DO jl2 = ice_cat_bounds(1,1), ice_cat_bounds(1,2)1240 DO jl2 = 1, jpl 1241 1241 1242 1242 !CDIR NODEP … … 1302 1302 CALL wrk_dealloc( jpi, jpj, afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 1303 1303 CALL wrk_dealloc( jpi, jpj, jpl, aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 1304 CALL wrk_dealloc( jpi, jpj, jkmax, eirft, erdg1, erdg2, ersw )1305 CALL wrk_dealloc( jpi, jpj, jkmax, jpl, eicen_init )1304 CALL wrk_dealloc( jpi, jpj, nlay_i+1, eirft, erdg1, erdg2, ersw ) 1305 CALL wrk_dealloc( jpi, jpj, nlay_i+1, jpl, eicen_init ) 1306 1306 ! 1307 1307 END SUBROUTINE lim_itd_me_ridgeshift -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r4900 r4902 6 6 !! History : - ! (W. H. Lipscomb and E.C. Hunke) CICE (c) original code 7 7 !! 3.0 ! 2005-12 (M. Vancoppenolle) adaptation to LIM-3 8 !! - ! 2006-06 (M. Vancoppenolle) adaptation to include salt, age and types8 !! - ! 2006-06 (M. Vancoppenolle) adaptation to include salt, age 9 9 !! - ! 2007-04 (M. Vancoppenolle) Mass conservation checked 10 10 !!---------------------------------------------------------------------- … … 66 66 INTEGER, INTENT(in) :: kt ! time step index 67 67 ! 68 INTEGER :: ji, jj, jk, jl, ja, jm, jbnd1, jbnd2 ! ice typesdummy loop index68 INTEGER :: ji, jj, jk, jl ! dummy loop index 69 69 ! 70 70 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b … … 86 86 ! Given thermodynamic growth rates, transport ice between 87 87 ! thickness categories. 88 DO jm = 1, jpm 89 jbnd1 = ice_cat_bounds(jm,1) 90 jbnd2 = ice_cat_bounds(jm,2) 91 IF( ice_ncat_types(jm) > 1 ) CALL lim_itd_th_rem( jbnd1, jbnd2, jm, kt ) 92 END DO 88 IF( jpl > 1 ) CALL lim_itd_th_rem( 1, jpl, kt ) 93 89 ! 94 90 CALL lim_var_glo2eqv ! only for info … … 123 119 CALL prt_ctl(tab2d_1=sm_i (:,:,jl) , clinfo1= ' lim_itd_th : sm_i : ') 124 120 CALL prt_ctl(tab2d_1=smv_i (:,:,jl) , clinfo1= ' lim_itd_th : smv_i : ') 125 DO j a= 1, nlay_i121 DO jk = 1, nlay_i 126 122 CALL prt_ctl_info(' ') 127 CALL prt_ctl_info(' - Layer : ', ivar1=j a)123 CALL prt_ctl_info(' - Layer : ', ivar1=jk) 128 124 CALL prt_ctl_info(' ~~~~~~~') 129 CALL prt_ctl(tab2d_1=t_i(:,:,j a,jl) , clinfo1= ' lim_itd_th : t_i : ')130 CALL prt_ctl(tab2d_1=e_i(:,:,j a,jl) , clinfo1= ' lim_itd_th : e_i : ')125 CALL prt_ctl(tab2d_1=t_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : t_i : ') 126 CALL prt_ctl(tab2d_1=e_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : e_i : ') 131 127 END DO 132 128 END DO … … 140 136 ! 141 137 142 SUBROUTINE lim_itd_th_rem( klbnd, kubnd, ntyp,kt )138 SUBROUTINE lim_itd_th_rem( klbnd, kubnd, kt ) 143 139 !!------------------------------------------------------------------ 144 140 !! *** ROUTINE lim_itd_th_rem *** … … 153 149 INTEGER , INTENT (in) :: klbnd ! Start thickness category index point 154 150 INTEGER , INTENT (in) :: kubnd ! End point on which the the computation is applied 155 INTEGER , INTENT (in) :: ntyp ! Number of the type used156 151 INTEGER , INTENT (in) :: kt ! Ocean time step 157 152 ! … … 171 166 REAL(wp), POINTER, DIMENSION(:,:,:) :: hL ! left boundary for the ITD for each thickness 172 167 REAL(wp), POINTER, DIMENSION(:,:,:) :: hR ! left boundary for the ITD for each thickness 173 REAL(wp), POINTER, DIMENSION(:,:,:) :: zht_i_ o! old ice thickness168 REAL(wp), POINTER, DIMENSION(:,:,:) :: zht_i_b ! old ice thickness 174 169 REAL(wp), POINTER, DIMENSION(:,:,:) :: dummy_es 175 170 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdaice, zdvice ! local increment of ice area and volume … … 189 184 CALL wrk_alloc( jpi,jpj, zremap_flag ) ! integer 190 185 CALL wrk_alloc( jpi,jpj,jpl-1, zdonor ) ! integer 191 CALL wrk_alloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_ o, dummy_es )186 CALL wrk_alloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_b, dummy_es ) 192 187 CALL wrk_alloc( jpi,jpj,jpl-1, zdaice, zdvice ) 193 188 CALL wrk_alloc( jpi,jpj,jpl+1, zhbnew, kkstart = 0 ) … … 218 213 WRITE(numout,*) ' klbnd : ', klbnd 219 214 WRITE(numout,*) ' kubnd : ', kubnd 220 WRITE(numout,*) ' ntyp : ', ntyp221 215 ENDIF 222 216 … … 227 221 zindb = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i(ji,jj,jl) + epsi10 ) ) !0 if no ice and 1 if yes 228 222 ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb 229 zindb = 1.0 - MAX( 0.0, SIGN( 1.0, - old_a_i(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes230 zht_i_ o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX( old_a_i(ji,jj,jl), epsi10 ) * zindb231 IF( a_i(ji,jj,jl) > epsi10 ) zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_ o(ji,jj,jl)223 zindb = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i_b(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 224 zht_i_b(ji,jj,jl) = v_i_b(ji,jj,jl) / MAX( a_i_b(ji,jj,jl), epsi10 ) * zindb 225 IF( a_i(ji,jj,jl) > epsi10 ) zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_b(ji,jj,jl) 232 226 END DO 233 227 END DO … … 274 268 ! 275 269 zhbnew(ii,ij,jl) = hi_max(jl) 276 IF ( old_a_i(ii,ij,jl) > epsi10 .AND. old_a_i(ii,ij,jl+1) > epsi10 ) THEN270 IF ( a_i_b(ii,ij,jl) > epsi10 .AND. a_i_b(ii,ij,jl+1) > epsi10 ) THEN 277 271 !interpolate between adjacent category growth rates 278 zslope = ( zdhice(ii,ij,jl+1) - zdhice(ii,ij,jl) ) / ( zht_i_ o(ii,ij,jl+1) - zht_i_o(ii,ij,jl) )279 zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) + zslope * ( hi_max(jl) - zht_i_ o(ii,ij,jl) )280 ELSEIF ( old_a_i(ii,ij,jl) > epsi10) THEN272 zslope = ( zdhice(ii,ij,jl+1) - zdhice(ii,ij,jl) ) / ( zht_i_b(ii,ij,jl+1) - zht_i_b(ii,ij,jl) ) 273 zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) + zslope * ( hi_max(jl) - zht_i_b(ii,ij,jl) ) 274 ELSEIF ( a_i_b(ii,ij,jl) > epsi10) THEN 281 275 zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) 282 ELSEIF ( old_a_i(ii,ij,jl+1) > epsi10) THEN276 ELSEIF ( a_i_b(ii,ij,jl+1) > epsi10) THEN 283 277 zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl+1) 284 278 ENDIF … … 321 315 DO jj = 1, jpj 322 316 DO ji = 1, jpi 323 zhb0(ji,jj) = hi_max _typ(0,ntyp) ! 0eme324 zhb1(ji,jj) = hi_max _typ(1,ntyp) ! 1er317 zhb0(ji,jj) = hi_max(0) ! 0eme 318 zhb1(ji,jj) = hi_max(1) ! 1er 325 319 326 320 zhbnew(ji,jj,klbnd-1) = 0._wp … … 343 337 !----------------------------------------------------------------------------------------------- 344 338 !- 7.1 g(h) for category 1 at start of time step 345 CALL lim_itd_fitline( klbnd, zhb0, zhb1, zht_i_ o(:,:,klbnd), &339 CALL lim_itd_fitline( klbnd, zhb0, zhb1, zht_i_b(:,:,klbnd), & 346 340 & g0(:,:,klbnd), g1(:,:,klbnd), hL(:,:,klbnd), & 347 341 & hR(:,:,klbnd), zremap_flag ) … … 368 362 ! Constrain new thickness <= ht_i 369 363 zdamax = a_i(ii,ij,klbnd) * & 370 (1.0 - ht_i(ii,ij,klbnd)/zht_i_ o(ii,ij,klbnd)) ! zdamax > 0364 (1.0 - ht_i(ii,ij,klbnd)/zht_i_b(ii,ij,klbnd)) ! zdamax > 0 371 365 !ice area lost due to melting of thin ice 372 366 zda0 = MIN(zda0, zdamax) … … 382 376 ELSE ! if ice accretion 383 377 ! ji, a_i > epsi10; zdh0 > 0 384 IF ( ntyp .EQ. 1 )zhbnew(ii,ij,klbnd-1) = MIN(zdh0,hi_max(klbnd))378 zhbnew(ii,ij,klbnd-1) = MIN(zdh0,hi_max(klbnd)) 385 379 ! zhbnew was 0, and is shifted to the right to account for thin ice 386 380 ! growth in openwater (F0 = f1) 387 IF ( ntyp .NE. 1 ) zhbnew(ii,ij,0) = 0388 ! in other types there is389 ! no open water growth (F0 = 0)390 381 ENDIF ! zdh0 391 382 … … 493 484 CALL wrk_dealloc( jpi,jpj, zremap_flag ) ! integer 494 485 CALL wrk_dealloc( jpi,jpj,jpl-1, zdonor ) ! integer 495 CALL wrk_dealloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_ o, dummy_es )486 CALL wrk_dealloc( jpi,jpj,jpl, zdhice, g0, g1, hL, hR, zht_i_b, dummy_es ) 496 487 CALL wrk_dealloc( jpi,jpj,jpl-1, zdaice, zdvice ) 497 488 CALL wrk_dealloc( jpi,jpj,jpl+1, zhbnew, kkstart = 0 ) … … 839 830 840 831 841 SUBROUTINE lim_itd_th_reb( klbnd, kubnd , ntyp)832 SUBROUTINE lim_itd_th_reb( klbnd, kubnd ) 842 833 !!------------------------------------------------------------------ 843 834 !! *** ROUTINE lim_itd_th_reb *** … … 849 840 INTEGER , INTENT (in) :: klbnd ! Start thickness category index point 850 841 INTEGER , INTENT (in) :: kubnd ! End point on which the the computation is applied 851 INTEGER , INTENT (in) :: ntyp ! number of the ice type involved in the rebinning process852 842 ! 853 843 INTEGER :: ji,jj, jl ! dummy loop indices … … 889 879 890 880 !------------------------------------------------------------------------------ 891 ! 2) Make sure thickness of cat klbnd is at least hi_max _typ(klbnd)881 ! 2) Make sure thickness of cat klbnd is at least hi_max(klbnd) 892 882 !------------------------------------------------------------------------------ 893 883 DO jj = 1, jpj 894 884 DO ji = 1, jpi 895 885 IF( a_i(ji,jj,klbnd) > epsi10 ) THEN 896 IF( ht_i(ji,jj,klbnd) <= hi_max _typ(0,ntyp) .AND. hi_max_typ(0,ntyp) > 0._wp ) THEN897 a_i(ji,jj,klbnd) = v_i(ji,jj,klbnd) / hi_max _typ(0,ntyp)898 ht_i(ji,jj,klbnd) = hi_max _typ(0,ntyp)886 IF( ht_i(ji,jj,klbnd) <= hi_max(0) .AND. hi_max(0) > 0._wp ) THEN 887 a_i(ji,jj,klbnd) = v_i(ji,jj,klbnd) / hi_max(0) 888 ht_i(ji,jj,klbnd) = hi_max(0) 899 889 ENDIF 900 890 ENDIF -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r4901 r4902 118 118 CALL iom_put( "qsr_oce" , qsr(:,:) * pfrld(:,:) ) ! solar flux at ocean surface 119 119 CALL iom_put( "qns_oce" , qns(:,:) * pfrld(:,:) ) ! non-solar flux at ocean surface 120 CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! solar flux at ice surface121 CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! non-solar flux at ice surface122 CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice120 CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux at ice surface 121 CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! non-solar flux at ice surface 122 CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice 123 123 CALL iom_put( "qt_oce" , ( qsr(:,:) + qns(:,:) ) * pfrld(:,:) ) 124 CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) * old_a_i(:,:,:), dim=3 ) )124 CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) * a_i_b(:,:,:), dim=3 ) ) 125 125 126 126 ! pfrld is the lead fraction at the previous time step (actually between TRP and THD) … … 139 139 zfcm1 = qsr_tot(ji,jj) 140 140 DO jl = 1, jpl 141 zfcm1 = zfcm1 + ( ftr_ice(ji,jj,jl) - qsr_ice(ji,jj,jl) ) * old_a_i(ji,jj,jl)141 zfcm1 = zfcm1 + ( ftr_ice(ji,jj,jl) - qsr_ice(ji,jj,jl) ) * a_i_b(ji,jj,jl) 142 142 END DO 143 143 ELSE … … 145 145 zfcm1 = pfrld(ji,jj) * qsr(ji,jj) 146 146 DO jl = 1, jpl 147 zfcm1 = zfcm1 + old_a_i(ji,jj,jl) * ftr_ice(ji,jj,jl)147 zfcm1 = zfcm1 + a_i_b(ji,jj,jl) * ftr_ice(ji,jj,jl) 148 148 END DO 149 149 ENDIF … … 181 181 182 182 ! mass flux from ice/ocean 183 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) 183 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) & 184 + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) 184 185 185 186 ! mass flux at the ocean/ice interface 186 187 fmmflx(ji,jj) = - wfx_ice(ji,jj) * rdt_ice ! F/M mass flux save at least for biogeochemical model 187 emp(ji,jj) = zemp - wfx_ice(ji,jj) - wfx_snw(ji,jj) - wfx_sub(ji,jj)! mass flux + F/M mass flux (always ice/ocean mass exchange)188 emp(ji,jj) = zemp - wfx_ice(ji,jj) - wfx_snw(ji,jj) ! mass flux + F/M mass flux (always ice/ocean mass exchange) 188 189 189 190 END DO … … 193 194 ! salt flux at the ocean surface ! 194 195 !------------------------------------------! 195 sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) 196 sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) & 197 & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) 196 198 197 199 !-------------------------------------------------------------! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r4901 r4902 22 22 USE phycst ! physical constants 23 23 USE dom_oce ! ocean space and time domain variables 24 USE oce , ONLY : fraqsr_1lev 24 USE oce , ONLY : fraqsr_1lev 25 25 USE ice ! LIM: sea-ice variables 26 26 USE par_ice ! LIM: sea-ice parameters … … 153 153 DO jj = 1, jpj 154 154 DO ji = 1, jpi 155 zqsr(ji,jj) = zqsr(ji,jj) - qsr_ice(ji,jj,jl) * old_a_i(ji,jj,jl)156 zqns(ji,jj) = zqns(ji,jj) - qns_ice(ji,jj,jl) * old_a_i(ji,jj,jl)155 zqsr(ji,jj) = zqsr(ji,jj) - qsr_ice(ji,jj,jl) * a_i_b(ji,jj,jl) 156 zqns(ji,jj) = zqns(ji,jj) - qns_ice(ji,jj,jl) * a_i_b(ji,jj,jl) 157 157 END DO 158 158 END DO … … 282 282 !------------------------- 283 283 284 CALL tab_2d_1d( nbpb, at_i_ b(1:nbpb), at_i , jpi, jpj, npb(1:nbpb) )285 CALL tab_2d_1d( nbpb, a_i_ b(1:nbpb), a_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )286 CALL tab_2d_1d( nbpb, ht_i_ b(1:nbpb), ht_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )287 CALL tab_2d_1d( nbpb, ht_s_ b(1:nbpb), ht_s(:,:,jl) , jpi, jpj, npb(1:nbpb) )288 289 CALL tab_2d_1d( nbpb, t_su_ b(1:nbpb), t_su(:,:,jl) , jpi, jpj, npb(1:nbpb) )290 CALL tab_2d_1d( nbpb, sm_i_ b(1:nbpb), sm_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )284 CALL tab_2d_1d( nbpb, at_i_1d (1:nbpb), at_i , jpi, jpj, npb(1:nbpb) ) 285 CALL tab_2d_1d( nbpb, a_i_1d (1:nbpb), a_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 286 CALL tab_2d_1d( nbpb, ht_i_1d (1:nbpb), ht_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 287 CALL tab_2d_1d( nbpb, ht_s_1d (1:nbpb), ht_s(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 288 289 CALL tab_2d_1d( nbpb, t_su_1d (1:nbpb), t_su(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 290 CALL tab_2d_1d( nbpb, sm_i_1d (1:nbpb), sm_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 291 291 DO jk = 1, nlay_s 292 CALL tab_2d_1d( nbpb, t_s_ b(1:nbpb,jk), t_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )293 CALL tab_2d_1d( nbpb, q_s_ b(1:nbpb,jk), e_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )292 CALL tab_2d_1d( nbpb, t_s_1d(1:nbpb,jk), t_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 293 CALL tab_2d_1d( nbpb, q_s_1d(1:nbpb,jk), e_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 294 294 END DO 295 295 DO jk = 1, nlay_i 296 CALL tab_2d_1d( nbpb, t_i_ b(1:nbpb,jk), t_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )297 CALL tab_2d_1d( nbpb, q_i_ b(1:nbpb,jk), e_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )298 CALL tab_2d_1d( nbpb, s_i_ b(1:nbpb,jk), s_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )296 CALL tab_2d_1d( nbpb, t_i_1d(1:nbpb,jk), t_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 297 CALL tab_2d_1d( nbpb, q_i_1d(1:nbpb,jk), e_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 298 CALL tab_2d_1d( nbpb, s_i_1d(1:nbpb,jk), s_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 299 299 END DO 300 300 … … 310 310 ENDIF 311 311 CALL tab_2d_1d( nbpb, dqns_ice_1d(1:nbpb), dqns_ice(:,:,jl), jpi, jpj, npb(1:nbpb) ) 312 CALL tab_2d_1d( nbpb, t_bo_ b(1:nbpb), t_bo , jpi, jpj, npb(1:nbpb) )312 CALL tab_2d_1d( nbpb, t_bo_1d (1:nbpb), t_bo , jpi, jpj, npb(1:nbpb) ) 313 313 CALL tab_2d_1d( nbpb, sprecip_1d (1:nbpb), sprecip , jpi, jpj, npb(1:nbpb) ) 314 314 CALL tab_2d_1d( nbpb, fhtur_1d (1:nbpb), fhtur , jpi, jpj, npb(1:nbpb) ) … … 361 361 362 362 ! --- Ice enthalpy remapping --- ! 363 CALL lim_thd_ent( 1, nbpb, q_i_ b(1:nbpb,:) )363 CALL lim_thd_ent( 1, nbpb, q_i_1d(1:nbpb,:) ) 364 364 365 365 !---------------------------------! … … 377 377 !-------------------------------- 378 378 379 CALL tab_1d_2d( nbpb, at_i , npb, at_i_ b(1:nbpb) , jpi, jpj )380 CALL tab_1d_2d( nbpb, ht_i(:,:,jl) , npb, ht_i_ b(1:nbpb) , jpi, jpj )381 CALL tab_1d_2d( nbpb, ht_s(:,:,jl) , npb, ht_s_ b(1:nbpb) , jpi, jpj )382 CALL tab_1d_2d( nbpb, a_i (:,:,jl) , npb, a_i_ b(1:nbpb) , jpi, jpj )383 CALL tab_1d_2d( nbpb, t_su(:,:,jl) , npb, t_su_ b(1:nbpb) , jpi, jpj )384 CALL tab_1d_2d( nbpb, sm_i(:,:,jl) , npb, sm_i_ b(1:nbpb) , jpi, jpj )379 CALL tab_1d_2d( nbpb, at_i , npb, at_i_1d (1:nbpb) , jpi, jpj ) 380 CALL tab_1d_2d( nbpb, ht_i(:,:,jl) , npb, ht_i_1d (1:nbpb) , jpi, jpj ) 381 CALL tab_1d_2d( nbpb, ht_s(:,:,jl) , npb, ht_s_1d (1:nbpb) , jpi, jpj ) 382 CALL tab_1d_2d( nbpb, a_i (:,:,jl) , npb, a_i_1d (1:nbpb) , jpi, jpj ) 383 CALL tab_1d_2d( nbpb, t_su(:,:,jl) , npb, t_su_1d (1:nbpb) , jpi, jpj ) 384 CALL tab_1d_2d( nbpb, sm_i(:,:,jl) , npb, sm_i_1d (1:nbpb) , jpi, jpj ) 385 385 DO jk = 1, nlay_s 386 CALL tab_1d_2d( nbpb, t_s(:,:,jk,jl), npb, t_s_ b(1:nbpb,jk), jpi, jpj)387 CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, q_s_ b(1:nbpb,jk), jpi, jpj)386 CALL tab_1d_2d( nbpb, t_s(:,:,jk,jl), npb, t_s_1d (1:nbpb,jk), jpi, jpj) 387 CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, q_s_1d (1:nbpb,jk), jpi, jpj) 388 388 END DO 389 389 DO jk = 1, nlay_i 390 CALL tab_1d_2d( nbpb, t_i(:,:,jk,jl), npb, t_i_ b(1:nbpb,jk), jpi, jpj)391 CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, q_i_ b(1:nbpb,jk), jpi, jpj)392 CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_ b(1:nbpb,jk), jpi, jpj)390 CALL tab_1d_2d( nbpb, t_i(:,:,jk,jl), npb, t_i_1d (1:nbpb,jk), jpi, jpj) 391 CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, q_i_1d (1:nbpb,jk), jpi, jpj) 392 CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_1d (1:nbpb,jk), jpi, jpj) 393 393 END DO 394 394 CALL tab_1d_2d( nbpb, qlead , npb, qlead_1d (1:nbpb) , jpi, jpj ) … … 532 532 DO jk = 1, nlay_i 533 533 DO ji = kideb, kiut 534 ztmelts = -tmut * s_i_ b(ji,jk) + rtt534 ztmelts = -tmut * s_i_1d(ji,jk) + rtt 535 535 ! Conversion q(S,T) -> T (second order equation) 536 536 zaaa = cpic 537 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + q_i_ b(ji,jk) / rhoic - lfus537 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + q_i_1d(ji,jk) / rhoic - lfus 538 538 zccc = lfus * ( ztmelts - rtt ) 539 539 zdiscrim = SQRT( MAX( zbbb * zbbb - 4._wp * zaaa * zccc, 0._wp ) ) 540 t_i_ b(ji,jk) = rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa )540 t_i_1d(ji,jk) = rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa ) 541 541 542 542 ! mask temperature 543 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_ b(ji) ) )544 t_i_ b(ji,jk) = zswitch * t_i_b(ji,jk) + ( 1._wp - zswitch ) * rtt543 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) ) 544 t_i_1d(ji,jk) = zswitch * t_i_1d(ji,jk) + ( 1._wp - zswitch ) * rtt 545 545 END DO 546 546 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r4901 r4902 129 129 CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 130 130 CALL wrk_alloc( jpij, zintermelt ) 131 CALL wrk_alloc( jpij, jkmax, zdeltah, zh_i )131 CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 132 132 CALL wrk_alloc( jpij, icount ) 133 133 … … 155 155 DO jk = 1, nlay_i 156 156 DO ji = kideb, kiut 157 h_i_old (ji,jk) = ht_i_ b(ji) / REAL( nlay_i )158 qh_i_old(ji,jk) = q_i_ b(ji,jk) * h_i_old(ji,jk)157 h_i_old (ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 158 qh_i_old(ji,jk) = q_i_1d(ji,jk) * h_i_old(ji,jk) 159 159 ENDDO 160 160 ENDDO … … 165 165 ! 166 166 DO ji = kideb, kiut 167 zinda = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_b(ji) ) )168 ztmelts = zinda * rtt + ( 1._wp - zinda ) * rtt167 zinda = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 168 ztmelts = zinda * rtt + ( 1._wp - zinda ) * rtt 169 169 170 170 zfdum = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji) 171 171 zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji) 172 172 173 zq_su (ji) = MAX( 0._wp, zfdum * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_ b(ji) - ztmelts ) )173 zq_su (ji) = MAX( 0._wp, zfdum * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - ztmelts ) ) 174 174 zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 175 175 END DO … … 181 181 !------------------------------------------------------------------------------! 182 182 DO ji = kideb, kiut 183 IF( t_s_ b(ji,1) > rtt ) THEN !!! Internal melting183 IF( t_s_1d(ji,1) > rtt ) THEN !!! Internal melting 184 184 ! Contribution to heat flux to the ocean [W.m-2], < 0 185 hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_ b(ji,1) * ht_s_b(ji) * a_i_b(ji) * r1_rdtice185 hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_1d(ji,1) * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 186 186 ! Contribution to mass flux 187 wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_ b(ji) * a_i_b(ji) * r1_rdtice187 wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 188 188 ! updates 189 ht_s_ b(ji) = 0._wp190 q_s_ b(ji,1) = 0._wp191 t_s_ b(ji,1) = rtt189 ht_s_1d(ji) = 0._wp 190 q_s_1d (ji,1) = 0._wp 191 t_s_1d (ji,1) = rtt 192 192 END IF 193 193 END DO … … 198 198 ! 199 199 DO ji = kideb, kiut 200 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )200 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 201 201 END DO 202 202 ! 203 203 DO jk = 1, nlay_s 204 204 DO ji = kideb, kiut 205 zqh_s(ji) = zqh_s(ji) + q_s_ b(ji,jk) * zh_s(ji)205 zqh_s(ji) = zqh_s(ji) + q_s_1d(ji,jk) * zh_s(ji) 206 206 END DO 207 207 END DO … … 209 209 DO jk = 1, nlay_i 210 210 DO ji = kideb, kiut 211 zh_i(ji,jk) = ht_i_ b(ji) / REAL( nlay_i )212 zqh_i(ji) = zqh_i(ji) + q_i_ b(ji,jk) * zh_i(ji,jk)211 zh_i(ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 212 zqh_i(ji) = zqh_i(ji) + q_i_1d(ji,jk) * zh_i(ji,jk) 213 213 END DO 214 214 END DO … … 237 237 !----------- 238 238 ! thickness change 239 zcoeff = ( 1._wp - ( 1._wp - at_i_ b(ji) )**betas ) / at_i_b(ji)239 zcoeff = ( 1._wp - ( 1._wp - at_i_1d(ji) )**betas ) / at_i_1d(ji) 240 240 zdh_s_pre(ji) = zcoeff * sprecip_1d(ji) * rdt_ice / rhosn 241 241 ! enthalpy of the precip (>0, J.m-3) (tatm_ice is now in K) … … 243 243 IF( sprecip_1d(ji) == 0._wp ) zqprec(ji) = 0._wp 244 244 ! heat flux from snow precip (>0, W.m-2) 245 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_ b(ji) * zqprec(ji) * r1_rdtice245 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 246 246 ! mass flux, <0 247 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_pre(ji) * r1_rdtice247 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_pre(ji) * r1_rdtice 248 248 ! update thickness 249 ht_s_ b (ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_pre(ji) )249 ht_s_1d (ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_pre(ji) ) 250 250 251 251 !--------------------- … … 258 258 zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting 259 259 ! heat used to melt snow (W.m-2, >0) 260 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_ b(ji) * zqprec(ji) * r1_rdtice260 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 261 261 ! snow melting only = water into the ocean (then without snow precip), >0 262 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_mel(ji) * r1_rdtice262 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_mel(ji) * r1_rdtice 263 263 264 264 ! updates available heat + thickness 265 265 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdh_s_mel(ji) * zqprec(ji) ) 266 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_mel(ji) )267 zh_s (ji) = ht_s_ b(ji) / REAL( nlay_s )266 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_mel(ji) ) 267 zh_s (ji) = ht_s_1d(ji) / REAL( nlay_s ) 268 268 269 269 ENDIF … … 275 275 DO ji = kideb, kiut 276 276 ! thickness change 277 zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_ b(ji) ) )278 zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_ b(ji,jk) + epsi20 ) )279 zdeltah (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_ b(ji,jk), epsi20 )277 zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) 278 zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) ) 279 zdeltah (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 280 280 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 281 281 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 282 282 ! heat used to melt snow(W.m-2, >0) 283 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_ b(ji) * q_s_b(ji,jk) * r1_rdtice283 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * q_s_1d(ji,jk) * r1_rdtice 284 284 ! snow melting only = water into the ocean (then without snow precip) 285 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice285 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 286 286 287 287 ! updates available heat + thickness 288 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_ b(ji,jk) )289 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdeltah(ji,jk) )288 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_1d(ji,jk) ) 289 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdeltah(ji,jk) ) 290 290 291 291 END DO … … 304 304 ! forced mode: snow thickness change due to sublimation 305 305 DO ji = kideb, kiut 306 zdh_s_sub(ji) = MAX( - ht_s_ b(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice )306 zdh_s_sub(ji) = MAX( - ht_s_1d(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 307 307 ! Heat flux by sublimation [W.m-2], < 0 308 308 ! sublimate first snow that had fallen, then pre-existing snow 309 309 zcoeff = ( MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) * zqprec(ji) + & 310 & ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_ b(ji,1) ) &311 & * a_i_ b(ji) * r1_rdtice310 & ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_1d(ji,1) ) & 311 & * a_i_1d(ji) * r1_rdtice 312 312 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zcoeff 313 313 ! Mass flux by sublimation 314 wfx_sub_1d(ji) = wfx_sub_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_sub(ji) * r1_rdtice314 wfx_sub_1d(ji) = wfx_sub_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_sub(ji) * r1_rdtice 315 315 ! new snow thickness 316 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_sub(ji) )316 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_sub(ji) ) 317 317 END DO 318 318 ENDIF … … 321 321 DO ji = kideb, kiut 322 322 dh_s_tot(ji) = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 323 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )323 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 324 324 END DO ! ji 325 325 … … 331 331 DO jk = 1, nlay_s 332 332 DO ji = kideb,kiut 333 zindh = MAX( 0._wp , SIGN( 1._wp, - ht_s_ b(ji) + epsi20 ) )334 q_s_ b(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_b(ji), epsi20 ) * &333 zindh = MAX( 0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 ) ) 334 q_s_1d(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_1d(ji), epsi20 ) * & 335 335 & ( ( MAX( 0._wp, dh_s_tot(ji) ) ) * zqprec(ji) + & 336 & ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_ b(ji) ) * rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) )337 zq_s(ji) = zq_s(ji) + q_s_ b(ji,jk)336 & ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) ) 337 zq_s(ji) = zq_s(ji) + q_s_1d(ji,jk) 338 338 END DO 339 339 END DO … … 345 345 DO jk = 1, nlay_i 346 346 DO ji = kideb, kiut 347 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of layer k [J/kg, <0]348 349 ztmelts = - tmut * s_i_ b(ji,jk) + rtt ! Melting point of layer k [K]347 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of layer k [J/kg, <0] 348 349 ztmelts = - tmut * s_i_1d(ji,jk) + rtt ! Melting point of layer k [K] 350 350 351 351 zEw = rcp * ( ztmelts - rt0 ) ! Specific enthalpy of resulting meltwater [J/kg, <0] … … 367 367 zQm = zfmdt * zEw ! Energy of the melt water sent to the ocean [J/m2, <0] 368 368 369 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)370 sfx_sum_1d(ji) = sfx_sum_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice369 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 370 sfx_sum_1d(ji) = sfx_sum_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 371 371 372 372 ! Contribution to heat flux [W.m-2], < 0 373 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice373 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 374 374 375 375 ! Total heat flux used in this process [W.m-2], > 0 376 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice376 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 377 377 378 378 ! Contribution to mass flux 379 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice379 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 380 380 381 381 ! record which layers have disappeared (for bottom melting) … … 387 387 388 388 ! update heat content (J.m-2) and layer thickness 389 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)389 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 390 390 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 391 391 END DO … … 393 393 ! update ice thickness 394 394 DO ji = kideb, kiut 395 ht_i_ b(ji) = MAX( 0._wp , ht_i_b(ji) + dh_i_surf(ji) )395 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_surf(ji) ) 396 396 END DO 397 397 … … 423 423 !clem debug. Just to be sure that enthalpy at nlay_i+1 is null 424 424 DO ji = kideb, kiut 425 q_i_ b(ji,nlay_i+1) = 0._wp425 q_i_1d(ji,nlay_i+1) = 0._wp 426 426 END DO 427 427 … … 445 445 446 446 s_i_new(ji) = zswitch_sal * zfracs * sss_m(ii,ij) & ! New ice salinity 447 + ( 1. - zswitch_sal ) * sm_i_ b(ji)447 + ( 1. - zswitch_sal ) * sm_i_1d(ji) 448 448 ! New ice growth 449 449 ztmelts = - tmut * s_i_new(ji) + rtt ! New ice melting point (K) 450 450 451 zt_i_new = zswitch_sal * t_bo_ b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i)451 zt_i_new = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 452 452 453 453 zEi = cpic * ( zt_i_new - ztmelts ) & ! Specific enthalpy of forming ice (J/kg, <0) … … 455 455 & + rcp * ( ztmelts-rtt ) 456 456 457 zEw = rcp * ( t_bo_ b(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0)457 zEw = rcp * ( t_bo_1d(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0) 458 458 459 459 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) … … 461 461 dh_i_bott(ji) = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 462 462 463 q_i_ b(ji,nlay_i+1) = -zEi * rhoic ! New ice energy of melting (J/m3, >0)463 q_i_1d(ji,nlay_i+1) = -zEi * rhoic ! New ice energy of melting (J/m3, >0) 464 464 465 465 ENDIF ! fc_bo_i … … 476 476 ztmelts = - tmut * s_i_new(ji) + rtt ! New ice melting point (K) 477 477 478 zt_i_new = zswitch_sal * t_bo_ b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i)478 zt_i_new = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 479 479 480 480 zEi = cpic * ( zt_i_new - ztmelts ) & ! Specific enthalpy of forming ice (J/kg, <0) … … 482 482 & + rcp * ( ztmelts-rtt ) 483 483 484 zEw = rcp * ( t_bo_ b(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0)484 zEw = rcp * ( t_bo_1d(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0) 485 485 486 486 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 487 487 488 488 ! Contribution to heat flux to the ocean [W.m-2], >0 489 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice489 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 490 490 491 491 ! Total heat flux used in this process [W.m-2], <0 492 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice492 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 493 493 494 494 ! Contribution to salt flux, <0 495 sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_ b(ji) * zfmdt * r1_rdtice495 sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_1d(ji) * zfmdt * r1_rdtice 496 496 497 497 ! Contribution to mass flux, <0 498 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_ b(ji) * dh_i_bott(ji) * r1_rdtice498 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bott(ji) * r1_rdtice 499 499 500 500 ! update heat content (J.m-2) and layer thickness 501 qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_ b(ji,nlay_i+1)501 qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_1d(ji,nlay_i+1) 502 502 h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bott(ji) 503 503 ENDIF … … 512 512 IF( zf_tt(ji) >= 0._wp .AND. jk > icount(ji) ) THEN ! do not calculate where layer has already disappeared from surface melting 513 513 514 ztmelts = - tmut * s_i_ b(ji,jk) + rtt ! Melting point of layer jk (K)515 516 IF( t_i_ b(ji,jk) >= ztmelts ) THEN !!! Internal melting514 ztmelts = - tmut * s_i_1d(ji,jk) + rtt ! Melting point of layer jk (K) 515 516 IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 517 517 zintermelt(ji) = 1._wp 518 518 519 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0)520 521 !!zEw = rcp * ( t_i_ b(ji,jk) - rtt ) ! Specific enthalpy of meltwater at T = t_i_b(J/kg, <0)519 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 520 521 !!zEw = rcp * ( t_i_1d(ji,jk) - rtt ) ! Specific enthalpy of meltwater at T = t_i_1d (J/kg, <0) 522 522 523 523 zdE = 0._wp ! Specific enthalpy difference (J/kg, <0) … … 532 532 533 533 ! Contribution to heat flux to the ocean [W.m-2], <0 (ice enthalpy zEi is "sent" to the ocean) 534 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_ b(ji) * zEi * r1_rdtice535 536 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)537 sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice534 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_rdtice 535 536 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 537 sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 538 538 539 539 ! Contribution to mass flux 540 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice540 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 541 541 542 542 ! update heat content (J.m-2) and layer thickness 543 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)543 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 544 544 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 545 545 546 546 ELSE !!! Basal melting 547 547 548 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0)548 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 549 549 550 550 zEw = rcp * ( ztmelts - rtt )! Specific enthalpy of meltwater (J/kg, <0) … … 567 567 568 568 ! Contribution to heat flux to the ocean [W.m-2], <0 569 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice570 571 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)572 sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice569 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 570 571 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 572 sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 573 573 574 574 ! Total heat flux used in this process [W.m-2], >0 575 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice575 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 576 576 577 577 ! Contribution to mass flux 578 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice578 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 579 579 580 580 ! update heat content (J.m-2) and layer thickness 581 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)581 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 582 582 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 583 583 ENDIF … … 602 602 ! 603 603 ! ! excessive energy is sent to lateral ablation 604 ! zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_ b(ji) - epsi20 ) )605 ! zq_1cat(ji) = zinda * rhoic * lfus * at_i_ b(ji) / MAX( 1._wp - at_i_b(ji) , epsi20 ) * zdvres ! J.m-2 >=0604 ! zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 605 ! zq_1cat(ji) = zinda * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 606 606 ! 607 607 ! ! correct salt and mass fluxes 608 ! sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdvres * rhoic * r1_rdtice ! this is only a raw approximation609 ! wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_ b(ji) * zdvres * r1_rdtice608 ! sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdvres * rhoic * r1_rdtice ! this is only a raw approximation 609 ! wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdvres * r1_rdtice 610 610 ! ENDIF 611 611 ! END DO … … 616 616 !------------------------------------------- 617 617 DO ji = kideb, kiut 618 ht_i_ b(ji) = MAX( 0._wp , ht_i_b(ji) + dh_i_bott(ji) )618 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_bott(ji) ) 619 619 END DO 620 620 … … 627 627 DO ji = kideb, kiut 628 628 zq_rema(ji) = zq_su(ji) + zq_bo(ji) 629 ! zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_ b(ji) ) ) ! =1 if snow629 ! zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) ! =1 if snow 630 630 ! zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - zq_s(ji) + epsi20 ) ) 631 631 ! zdeltah (ji,1) = - zindh * zindq * zq_rema(ji) / MAX( zq_s(ji), epsi20 ) 632 ! zdeltah (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_ b(ji) ) ) ! bound melting632 ! zdeltah (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_1d(ji) ) ) ! bound melting 633 633 ! zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,1) 634 634 ! dh_s_tot (ji) = dh_s_tot(ji) + zdeltah(ji,1) 635 ! ht_s_ b (ji) = ht_s_b(ji) + zdeltah(ji,1)635 ! ht_s_1d (ji) = ht_s_1d(ji) + zdeltah(ji,1) 636 636 ! 637 637 ! zq_rema(ji) = zq_rema(ji) + zdeltah(ji,1) * zq_s(ji) ! update available heat (J.m-2) 638 638 ! ! heat used to melt snow 639 ! hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_ b(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0)639 ! hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0) 640 640 ! ! Contribution to mass flux 641 ! wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdeltah(ji,1) * r1_rdtice641 ! wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 642 642 ! 643 643 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 644 644 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 645 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_ b(ji) ) * r1_rdtice645 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_1d(ji) ) * r1_rdtice 646 646 647 647 IF( ln_nicep .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) … … 656 656 DO ji = kideb, kiut 657 657 ! 658 dh_snowice(ji) = MAX( 0._wp , ( rhosn * ht_s_ b(ji) + (rhoic-rau0) * ht_i_b(ji) ) / ( rhosn+rau0-rhoic ) )659 660 ht_i_ b(ji) = ht_i_b(ji) + dh_snowice(ji)661 ht_s_ b(ji) = ht_s_b(ji) - dh_snowice(ji)658 dh_snowice(ji) = MAX( 0._wp , ( rhosn * ht_s_1d(ji) + (rhoic-rau0) * ht_i_1d(ji) ) / ( rhosn+rau0-rhoic ) ) 659 660 ht_i_1d(ji) = ht_i_1d(ji) + dh_snowice(ji) 661 ht_s_1d(ji) = ht_s_1d(ji) - dh_snowice(ji) 662 662 663 663 ! Salinity of snow ice 664 664 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 665 zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_ b(ji)665 zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_1d(ji) 666 666 667 667 ! entrapment during snow ice formation 668 668 ! new salinity difference stored (to be used in limthd_ent.F90) 669 669 IF ( num_sal == 2 ) THEN 670 zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_ b(ji) - epsi10 ) )670 zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi10 ) ) 671 671 ! salinity dif due to snow-ice formation 672 dsm_i_si_1d(ji) = ( zs_snic - sm_i_ b(ji) ) * dh_snowice(ji) / MAX( ht_i_b(ji), epsi10 ) * zswitch672 dsm_i_si_1d(ji) = ( zs_snic - sm_i_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 673 673 ! salinity dif due to bottom growth 674 674 IF ( zf_tt(ji) < 0._wp ) THEN 675 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_ b(ji) ) * dh_i_bott(ji) / MAX( ht_i_b(ji), epsi10 ) * zswitch675 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 676 676 ENDIF 677 677 ENDIF … … 685 685 686 686 ! Contribution to heat flux 687 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice687 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 688 688 689 689 ! Contribution to salt flux 690 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_ b(ji) * zfmdt * r1_rdtice690 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_1d(ji) * zfmdt * r1_rdtice 691 691 692 692 ! Contribution to mass flux 693 693 ! All snow is thrown in the ocean, and seawater is taken to replace the volume 694 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_ b(ji) * dh_snowice(ji) * rhoic * r1_rdtice695 wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_ b(ji) * dh_snowice(ji) * rhosn * r1_rdtice694 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoic * r1_rdtice 695 wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhosn * r1_rdtice 696 696 697 697 ! update heat content (J.m-2) and layer thickness 698 qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_ b(ji,1) + zfmdt * zEw698 qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_1d(ji,1) + zfmdt * zEw 699 699 h_i_old (ji,0) = h_i_old (ji,0) + dh_snowice(ji) 700 700 701 701 ! Total ablation (to debug) 702 IF( ht_i_ b(ji) <= 0._wp ) a_i_b(ji) = 0._wp702 IF( ht_i_1d(ji) <= 0._wp ) a_i_1d(ji) = 0._wp 703 703 704 704 END DO !ji … … 710 710 !clem bug: we should take snow into account here 711 711 DO ji = kideb, kiut 712 zindh = 1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_ b(ji) ) )713 t_su_ b(ji) = zindh * t_su_b(ji) + ( 1.0 - zindh ) * rtt712 zindh = 1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) ) 713 t_su_1d(ji) = zindh * t_su_1d(ji) + ( 1.0 - zindh ) * rtt 714 714 END DO ! ji 715 715 … … 717 717 DO ji = kideb,kiut 718 718 ! mask enthalpy 719 zinda = MAX( 0._wp , SIGN( 1._wp, - ht_s_ b(ji) ) )720 q_s_ b(ji,jk) = ( 1.0 - zinda ) * q_s_b(ji,jk)721 ! recalculate t_s_ b from q_s_b722 t_s_ b(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_b(ji,jk) / ( rhosn * cpic ) + lfus / cpic )719 zinda = MAX( 0._wp , SIGN( 1._wp, - ht_s_1d(ji) ) ) 720 q_s_1d(ji,jk) = ( 1.0 - zinda ) * q_s_1d(ji,jk) 721 ! recalculate t_s_1d from q_s_1d 722 t_s_1d(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 723 723 END DO 724 724 END DO … … 727 727 CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 728 728 CALL wrk_dealloc( jpij, zintermelt ) 729 CALL wrk_dealloc( jpij, jkmax, zdeltah, zh_i )729 CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 730 730 CALL wrk_dealloc( jpij, icount ) 731 731 ! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4901 r4902 75 75 !! 76 76 !! ** Inputs / Ouputs : (global commons) 77 !! surface temperature : t_su_ b78 !! ice/snow temperatures : t_i_ b, t_s_b79 !! ice salinities : s_i_ b77 !! surface temperature : t_su_1d 78 !! ice/snow temperatures : t_i_1d, t_s_1d 79 !! ice salinities : s_i_1d 80 80 !! number of layers in the ice/snow: nlay_i, nlay_s 81 81 !! profile of the ice/snow layers : z_i, z_s 82 !! total ice/snow thickness : ht_i_ b, ht_s_b82 !! total ice/snow thickness : ht_i_1d, ht_s_1d 83 83 !! 84 84 !! ** External : … … 98 98 INTEGER :: ii, ij ! temporary dummy loop index 99 99 INTEGER :: numeq ! current reference number of equation 100 INTEGER :: layer! vertical dummy loop index100 INTEGER :: jk ! vertical dummy loop index 101 101 INTEGER :: nconv ! number of iterations in iterative procedure 102 102 INTEGER :: minnumeqmin, maxnumeqmax … … 114 114 REAL(wp) :: zerritmax ! current maximal error on temperature 115 115 REAL(wp), POINTER, DIMENSION(:) :: ztfs ! ice melting point 116 REAL(wp), POINTER, DIMENSION(:) :: ztsu old! old surface temperature (before the iterative procedure )117 REAL(wp), POINTER, DIMENSION(:) :: ztsu oldit! surface temperature at previous iteration116 REAL(wp), POINTER, DIMENSION(:) :: ztsub ! old surface temperature (before the iterative procedure ) 117 REAL(wp), POINTER, DIMENSION(:) :: ztsubit ! surface temperature at previous iteration 118 118 REAL(wp), POINTER, DIMENSION(:) :: zh_i ! ice layer thickness 119 119 REAL(wp), POINTER, DIMENSION(:) :: zh_s ! snow layer thickness … … 129 129 REAL(wp), POINTER, DIMENSION(:,:) :: zradab_i ! Radiation absorbed in the ice 130 130 REAL(wp), POINTER, DIMENSION(:,:) :: zkappa_i ! Kappa factor in the ice 131 REAL(wp), POINTER, DIMENSION(:,:) :: zti old! Old temperature in the ice131 REAL(wp), POINTER, DIMENSION(:,:) :: ztib ! Old temperature in the ice 132 132 REAL(wp), POINTER, DIMENSION(:,:) :: zeta_i ! Eta factor in the ice 133 133 REAL(wp), POINTER, DIMENSION(:,:) :: ztitemp ! Temporary temperature in the ice to check the convergence … … 137 137 REAL(wp), POINTER, DIMENSION(:,:) :: zradab_s ! Radiation absorbed in the snow 138 138 REAL(wp), POINTER, DIMENSION(:,:) :: zkappa_s ! Kappa factor in the snow 139 REAL(wp), POINTER, DIMENSION(:,:) :: zeta_s 140 REAL(wp), POINTER, DIMENSION(:,:) :: ztstemp 141 REAL(wp), POINTER, DIMENSION(:,:) :: zts old! Temporary temperature in the snow142 REAL(wp), POINTER, DIMENSION(:,:) :: z_s 143 REAL(wp), POINTER, DIMENSION(:,:) :: zindterm ! Independent term144 REAL(wp), POINTER, DIMENSION(:,:) :: zindtbis ! temporary independent term139 REAL(wp), POINTER, DIMENSION(:,:) :: zeta_s ! Eta factor in the snow 140 REAL(wp), POINTER, DIMENSION(:,:) :: ztstemp ! Temporary temperature in the snow to check the convergence 141 REAL(wp), POINTER, DIMENSION(:,:) :: ztsb ! Temporary temperature in the snow 142 REAL(wp), POINTER, DIMENSION(:,:) :: z_s ! Vertical cotes of the layers in the snow 143 REAL(wp), POINTER, DIMENSION(:,:) :: zindterm ! Independent term 144 REAL(wp), POINTER, DIMENSION(:,:) :: zindtbis ! temporary independent term 145 145 REAL(wp), POINTER, DIMENSION(:,:) :: zdiagbis 146 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrid ! tridiagonal system terms146 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrid ! tridiagonal system terms 147 147 ! diag errors on heat 148 148 REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini, zhfx_err … … 150 150 ! 151 151 CALL wrk_alloc( jpij, numeqmin, numeqmax, isnow ) 152 CALL wrk_alloc( jpij, ztfs, ztsu old, ztsuoldit, zh_i, zh_s, zfsw )152 CALL wrk_alloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 153 153 CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 154 CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, zti old, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0)155 CALL wrk_alloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, zts old, zeta_s, ztstemp, z_s, kjstart=0)156 CALL wrk_alloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis )157 CALL wrk_alloc( jpij, jkmax+2, 3, ztrid )154 CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 155 CALL wrk_alloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 156 CALL wrk_alloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 157 CALL wrk_alloc( jpij, nlay_i+3, 3, ztrid ) 158 158 159 159 CALL wrk_alloc( jpij, zdq, zq_ini, zhfx_err ) … … 162 162 zdq(:) = 0._wp ; zq_ini(:) = 0._wp 163 163 DO ji = kideb, kiut 164 zq_ini(ji) = ( SUM( q_i_ b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + &165 & SUM( q_s_ b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )164 zq_ini(ji) = ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) + & 165 & SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) ) 166 166 END DO 167 167 … … 172 172 DO ji = kideb , kiut 173 173 ! is there snow or not 174 isnow(ji)= NINT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_ b(ji) ) ) )174 isnow(ji)= NINT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_1d(ji) ) ) ) 175 175 ! surface temperature of fusion 176 176 ztfs(ji) = REAL( isnow(ji) ) * rtt + REAL( 1 - isnow(ji) ) * rtt 177 177 ! layer thickness 178 zh_i(ji) = ht_i_ b(ji) / REAL( nlay_i )179 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )178 zh_i(ji) = ht_i_1d(ji) / REAL( nlay_i ) 179 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 180 180 END DO 181 181 … … 187 187 z_i(:,0) = 0._wp ! vert. coord. of the up. lim. of the 1st ice layer 188 188 189 DO layer= 1, nlay_s ! vert. coord of the up. lim. of the layer-th snow layer190 DO ji = kideb , kiut 191 z_s(ji, layer) = z_s(ji,layer-1) + ht_s_b(ji) / REAL( nlay_s )192 END DO 193 END DO 194 195 DO layer= 1, nlay_i ! vert. coord of the up. lim. of the layer-th ice layer196 DO ji = kideb , kiut 197 z_i(ji, layer) = z_i(ji,layer-1) + ht_i_b(ji) / REAL( nlay_i )189 DO jk = 1, nlay_s ! vert. coord of the up. lim. of the layer-th snow layer 190 DO ji = kideb , kiut 191 z_s(ji,jk) = z_s(ji,jk-1) + ht_s_1d(ji) / REAL( nlay_s ) 192 END DO 193 END DO 194 195 DO jk = 1, nlay_i ! vert. coord of the up. lim. of the layer-th ice layer 196 DO ji = kideb , kiut 197 z_i(ji,jk) = z_i(ji,jk-1) + ht_i_1d(ji) / REAL( nlay_i ) 198 198 END DO 199 199 END DO … … 216 216 DO ji = kideb , kiut 217 217 ! switches 218 isnow(ji) = NINT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_ b(ji) ) ) )218 isnow(ji) = NINT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) ) 219 219 ! hs > 0, isnow = 1 220 220 zhsu (ji) = hnzst ! threshold for the computation of i0 221 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_ b(ji) / zhsu(ji) ) )221 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_1d(ji) / zhsu(ji) ) ) 222 222 223 223 i0(ji) = REAL( 1 - isnow(ji) ) * ( fr1_i0_1d(ji) + zihic(ji) * fr2_i0_1d(ji) ) … … 226 226 ! a function of the cloud cover 227 227 ! 228 !i0(ji) = (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_ b(ji)+10.0)228 !i0(ji) = (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_1d(ji)+10.0) 229 229 !formula used in Cice 230 230 END DO … … 248 248 END DO 249 249 250 DO layer= 1, nlay_s ! Radiation through snow250 DO jk = 1, nlay_s ! Radiation through snow 251 251 DO ji = kideb, kiut 252 252 ! ! radiation transmitted below the layer-th snow layer 253 zradtr_s(ji, layer) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,layer) ) ) )253 zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,jk) ) ) ) 254 254 ! ! radiation absorbed by the layer-th snow layer 255 zradab_s(ji, layer) = zradtr_s(ji,layer-1) - zradtr_s(ji,layer)255 zradab_s(ji,jk) = zradtr_s(ji,jk-1) - zradtr_s(ji,jk) 256 256 END DO 257 257 END DO … … 261 261 END DO 262 262 263 DO layer= 1, nlay_i ! Radiation through ice263 DO jk = 1, nlay_i ! Radiation through ice 264 264 DO ji = kideb, kiut 265 265 ! ! radiation transmitted below the layer-th ice layer 266 zradtr_i(ji, layer) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,layer) ) ) )266 zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,jk) ) ) ) 267 267 ! ! radiation absorbed by the layer-th ice layer 268 zradab_i(ji, layer) = zradtr_i(ji,layer-1) - zradtr_i(ji,layer)268 zradab_i(ji,jk) = zradtr_i(ji,jk-1) - zradtr_i(ji,jk) 269 269 END DO 270 270 END DO … … 280 280 ! 281 281 DO ji = kideb, kiut ! Old surface temperature 282 ztsu old (ji) = t_su_b(ji) ! temperature at the beg of iter pr.283 ztsu oldit(ji) = t_su_b(ji) ! temperature at the previous iter284 t_su_ b (ji) = MIN( t_su_b(ji), ztfs(ji) - ztsu_err ) ! necessary282 ztsub (ji) = t_su_1d(ji) ! temperature at the beg of iter pr. 283 ztsubit(ji) = t_su_1d(ji) ! temperature at the previous iter 284 t_su_1d (ji) = MIN( t_su_1d(ji), ztfs(ji) - ztsu_err ) ! necessary 285 285 zerrit (ji) = 1000._wp ! initial value of error 286 286 END DO 287 287 288 DO layer= 1, nlay_s ! Old snow temperature289 DO ji = kideb , kiut 290 zts old(ji,layer) = t_s_b(ji,layer)291 END DO 292 END DO 293 294 DO layer= 1, nlay_i ! Old ice temperature295 DO ji = kideb , kiut 296 zti old(ji,layer) = t_i_b(ji,layer)288 DO jk = 1, nlay_s ! Old snow temperature 289 DO ji = kideb , kiut 290 ztsb(ji,jk) = t_s_1d(ji,jk) 291 END DO 292 END DO 293 294 DO jk = 1, nlay_i ! Old ice temperature 295 DO ji = kideb , kiut 296 ztib(ji,jk) = t_i_1d(ji,jk) 297 297 END DO 298 298 END DO … … 311 311 IF( thcon_i_swi == 0 ) THEN ! Untersteiner (1964) formula 312 312 DO ji = kideb , kiut 313 ztcond_i(ji,0) = rcdic + zbeta*s_i_ b(ji,1) / MIN(-epsi10,t_i_b(ji,1)-rtt)313 ztcond_i(ji,0) = rcdic + zbeta*s_i_1d(ji,1) / MIN(-epsi10,t_i_1d(ji,1)-rtt) 314 314 ztcond_i(ji,0) = MAX(ztcond_i(ji,0),zkimin) 315 315 END DO 316 DO layer= 1, nlay_i-1316 DO jk = 1, nlay_i-1 317 317 DO ji = kideb , kiut 318 ztcond_i(ji, layer) = rcdic + zbeta*( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) / &319 MIN(-2.0_wp * epsi10, t_i_ b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt)320 ztcond_i(ji, layer) = MAX(ztcond_i(ji,layer),zkimin)318 ztcond_i(ji,jk) = rcdic + zbeta*( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) / & 319 MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt) 320 ztcond_i(ji,jk) = MAX(ztcond_i(ji,jk),zkimin) 321 321 END DO 322 322 END DO … … 325 325 IF( thcon_i_swi == 1 ) THEN ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 326 326 DO ji = kideb , kiut 327 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_ b(ji,1) / MIN( -epsi10, t_i_b(ji,1)-rtt ) &328 & - 0.011_wp * ( t_i_ b(ji,1) - rtt )327 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1)-rtt ) & 328 & - 0.011_wp * ( t_i_1d(ji,1) - rtt ) 329 329 ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) 330 330 END DO 331 DO layer= 1, nlay_i-1331 DO jk = 1, nlay_i-1 332 332 DO ji = kideb , kiut 333 ztcond_i(ji,layer) = rcdic + 0.090_wp * ( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) & 334 & / MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) & 335 & - 0.0055_wp* ( t_i_b(ji,layer) + t_i_b(ji,layer+1) - 2.0*rtt ) 336 ztcond_i(ji,layer) = MAX( ztcond_i(ji,layer), zkimin ) 333 ztcond_i(ji,jk) = rcdic + & 334 & 0.090_wp * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) & 335 & / MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt) & 336 & - 0.0055_wp* ( t_i_1d(ji,jk) + t_i_1d(ji,jk+1) - 2.0*rtt ) 337 ztcond_i(ji,jk) = MAX( ztcond_i(ji,jk), zkimin ) 337 338 END DO 338 339 END DO 339 340 DO ji = kideb , kiut 340 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_ b(ji,nlay_i) / MIN(-epsi10,t_bo_b(ji)-rtt) &341 & - 0.011_wp * ( t_bo_ b(ji) - rtt )341 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_1d(ji,nlay_i) / MIN(-epsi10,t_bo_1d(ji)-rtt) & 342 & - 0.011_wp * ( t_bo_1d(ji) - rtt ) 342 343 ztcond_i(ji,nlay_i) = MAX( ztcond_i(ji,nlay_i), zkimin ) 343 344 END DO … … 355 356 END DO 356 357 357 DO layer= 1, nlay_s-1358 DO ji = kideb , kiut 359 zkappa_s(ji, layer) = 2.0 * rcdsn / &358 DO jk = 1, nlay_s-1 359 DO ji = kideb , kiut 360 zkappa_s(ji,jk) = 2.0 * rcdsn / & 360 361 MAX(epsi10,2.0*zh_s(ji)) 361 362 END DO 362 363 END DO 363 364 364 DO layer= 1, nlay_i-1365 DO jk = 1, nlay_i-1 365 366 DO ji = kideb , kiut 366 367 !-- Ice kappa factors 367 zkappa_i(ji, layer) = 2.0*ztcond_i(ji,layer)/ &368 zkappa_i(ji,jk) = 2.0*ztcond_i(ji,jk)/ & 368 369 MAX(epsi10,2.0*zh_i(ji)) 369 370 END DO … … 384 385 !------------------------------------------------------------------------------| 385 386 ! 386 DO layer= 1, nlay_i387 DO ji = kideb , kiut 388 ztitemp(ji, layer) = t_i_b(ji,layer)389 zspeche_i(ji, layer) = cpic + zgamma*s_i_b(ji,layer)/ &390 MAX((t_i_ b(ji,layer)-rtt)*(ztiold(ji,layer)-rtt),epsi10)391 zeta_i(ji, layer) = rdt_ice / MAX(rhoic*zspeche_i(ji,layer)*zh_i(ji), &387 DO jk = 1, nlay_i 388 DO ji = kideb , kiut 389 ztitemp(ji,jk) = t_i_1d(ji,jk) 390 zspeche_i(ji,jk) = cpic + zgamma*s_i_1d(ji,jk)/ & 391 MAX((t_i_1d(ji,jk)-rtt)*(ztib(ji,jk)-rtt),epsi10) 392 zeta_i(ji,jk) = rdt_ice / MAX(rhoic*zspeche_i(ji,jk)*zh_i(ji), & 392 393 epsi10) 393 394 END DO 394 395 END DO 395 396 396 DO layer= 1, nlay_s397 DO ji = kideb , kiut 398 ztstemp(ji, layer) = t_s_b(ji,layer)399 zeta_s(ji, layer) = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10)397 DO jk = 1, nlay_s 398 DO ji = kideb , kiut 399 ztstemp(ji,jk) = t_s_1d(ji,jk) 400 zeta_s(ji,jk) = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10) 400 401 END DO 401 402 END DO … … 408 409 DO ji = kideb , kiut 409 410 ! update of the non solar flux according to the update in T_su 410 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_ b(ji) - ztsuoldit(ji) )411 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsubit(ji) ) 411 412 END DO 412 413 ENDIF … … 432 433 !!ice interior terms (top equation has the same form as the others) 433 434 434 DO numeq=1, jkmax+2435 DO numeq=1,nlay_i+3 435 436 DO ji = kideb , kiut 436 437 ztrid(ji,numeq,1) = 0. … … 445 446 DO numeq = nlay_s + 2, nlay_s + nlay_i 446 447 DO ji = kideb , kiut 447 layer= numeq - nlay_s - 1448 ztrid(ji,numeq,1) = - zeta_i(ji, layer)*zkappa_i(ji,layer-1)449 ztrid(ji,numeq,2) = 1.0 + zeta_i(ji, layer)*(zkappa_i(ji,layer-1) + &450 zkappa_i(ji, layer))451 ztrid(ji,numeq,3) = - zeta_i(ji, layer)*zkappa_i(ji,layer)452 zindterm(ji,numeq) = zti old(ji,layer) + zeta_i(ji,layer)* &453 zradab_i(ji, layer)448 jk = numeq - nlay_s - 1 449 ztrid(ji,numeq,1) = - zeta_i(ji,jk)*zkappa_i(ji,jk-1) 450 ztrid(ji,numeq,2) = 1.0 + zeta_i(ji,jk)*(zkappa_i(ji,jk-1) + & 451 zkappa_i(ji,jk)) 452 ztrid(ji,numeq,3) = - zeta_i(ji,jk)*zkappa_i(ji,jk) 453 zindterm(ji,numeq) = ztib(ji,jk) + zeta_i(ji,jk)* & 454 zradab_i(ji,jk) 454 455 END DO 455 456 ENDDO … … 462 463 + zkappa_i(ji,nlay_i-1) ) 463 464 ztrid(ji,numeq,3) = 0.0 464 zindterm(ji,numeq) = zti old(ji,nlay_i) + zeta_i(ji,nlay_i)* &465 zindterm(ji,numeq) = ztib(ji,nlay_i) + zeta_i(ji,nlay_i)* & 465 466 ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i)*zg1 & 466 * t_bo_ b(ji) )467 * t_bo_1d(ji) ) 467 468 ENDDO 468 469 469 470 470 471 DO ji = kideb , kiut 471 IF ( ht_s_ b(ji).gt.0.0 ) THEN472 IF ( ht_s_1d(ji).gt.0.0 ) THEN 472 473 ! 473 474 !------------------------------------------------------------------------------| … … 477 478 !!snow interior terms (bottom equation has the same form as the others) 478 479 DO numeq = 3, nlay_s + 1 479 layer= numeq - 1480 ztrid(ji,numeq,1) = - zeta_s(ji, layer)*zkappa_s(ji,layer-1)481 ztrid(ji,numeq,2) = 1.0 + zeta_s(ji, layer)*( zkappa_s(ji,layer-1) + &482 zkappa_s(ji, layer) )483 ztrid(ji,numeq,3) = - zeta_s(ji, layer)*zkappa_s(ji,layer)484 zindterm(ji,numeq) = zts old(ji,layer) + zeta_s(ji,layer)* &485 zradab_s(ji, layer)480 jk = numeq - 1 481 ztrid(ji,numeq,1) = - zeta_s(ji,jk)*zkappa_s(ji,jk-1) 482 ztrid(ji,numeq,2) = 1.0 + zeta_s(ji,jk)*( zkappa_s(ji,jk-1) + & 483 zkappa_s(ji,jk) ) 484 ztrid(ji,numeq,3) = - zeta_s(ji,jk)*zkappa_s(ji,jk) 485 zindterm(ji,numeq) = ztsb(ji,jk) + zeta_s(ji,jk)* & 486 zradab_s(ji,jk) 486 487 END DO 487 488 … … 490 491 ztrid(ji,nlay_s+2,3) = 0.0 491 492 zindterm(ji,nlay_s+2) = zindterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 492 t_bo_ b(ji)493 t_bo_1d(ji) 493 494 ENDIF 494 495 495 IF ( t_su_ b(ji) .LT. rtt ) THEN496 IF ( t_su_1d(ji) .LT. rtt ) THEN 496 497 497 498 !------------------------------------------------------------------------------| … … 506 507 ztrid(ji,1,2) = dzf(ji) - zg1s*zkappa_s(ji,0) 507 508 ztrid(ji,1,3) = zg1s*zkappa_s(ji,0) 508 zindterm(ji,1) = dzf(ji)*t_su_ b(ji) - zf(ji)509 zindterm(ji,1) = dzf(ji)*t_su_1d(ji) - zf(ji) 509 510 510 511 !!first layer of snow equation … … 512 513 ztrid(ji,2,2) = 1.0 + zeta_s(ji,1)*(zkappa_s(ji,1) + zkappa_s(ji,0)*zg1s) 513 514 ztrid(ji,2,3) = - zeta_s(ji,1)* zkappa_s(ji,1) 514 zindterm(ji,2) = zts old(ji,1) + zeta_s(ji,1)*zradab_s(ji,1)515 zindterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 515 516 516 517 ELSE … … 529 530 zkappa_s(ji,0) * zg1s ) 530 531 ztrid(ji,2,3) = - zeta_s(ji,1)*zkappa_s(ji,1) 531 zindterm(ji,2) = zts old(ji,1) + zeta_s(ji,1) * &532 zindterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1) * & 532 533 ( zradab_s(ji,1) + & 533 zkappa_s(ji,0) * zg1s * t_su_ b(ji) )534 zkappa_s(ji,0) * zg1s * t_su_1d(ji) ) 534 535 ENDIF 535 536 ELSE … … 539 540 !------------------------------------------------------------------------------| 540 541 ! 541 IF (t_su_ b(ji) .LT. rtt) THEN542 IF (t_su_1d(ji) .LT. rtt) THEN 542 543 ! 543 544 !------------------------------------------------------------------------------| … … 553 554 ztrid(ji,numeqmin(ji),2) = dzf(ji) - zkappa_i(ji,0)*zg1 554 555 ztrid(ji,numeqmin(ji),3) = zkappa_i(ji,0)*zg1 555 zindterm(ji,numeqmin(ji)) = dzf(ji)*t_su_ b(ji) - zf(ji)556 zindterm(ji,numeqmin(ji)) = dzf(ji)*t_su_1d(ji) - zf(ji) 556 557 557 558 !!first layer of ice equation … … 560 561 + zkappa_i(ji,0) * zg1 ) 561 562 ztrid(ji,numeqmin(ji)+1,3) = - zeta_i(ji,1)*zkappa_i(ji,1) 562 zindterm(ji,numeqmin(ji)+1)= zti old(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)563 zindterm(ji,numeqmin(ji)+1)= ztib(ji,1) + zeta_i(ji,1)*zradab_i(ji,1) 563 564 564 565 !!case of only one layer in the ice (surface & ice equations are altered) … … 573 574 ztrid(ji,numeqmin(ji)+1,3) = 0.0 574 575 575 zindterm(ji,numeqmin(ji)+1) = zti old(ji,1) + zeta_i(ji,1)* &576 ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_ b(ji) )576 zindterm(ji,numeqmin(ji)+1) = ztib(ji,1) + zeta_i(ji,1)* & 577 ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji) ) 577 578 ENDIF 578 579 … … 593 594 zg1) 594 595 ztrid(ji,numeqmin(ji),3) = - zeta_i(ji,1) * zkappa_i(ji,1) 595 zindterm(ji,numeqmin(ji)) = zti old(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + &596 zkappa_i(ji,0) * zg1 * t_su_ b(ji) )596 zindterm(ji,numeqmin(ji)) = ztib(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 597 zkappa_i(ji,0) * zg1 * t_su_1d(ji) ) 597 598 598 599 !!case of only one layer in the ice (surface & ice equations are altered) … … 602 603 zkappa_i(ji,1)) 603 604 ztrid(ji,numeqmin(ji),3) = 0.0 604 zindterm(ji,numeqmin(ji)) = zti old(ji,1) + zeta_i(ji,1)* &605 (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_ b(ji)) &606 + t_su_ b(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0605 zindterm(ji,numeqmin(ji)) = ztib(ji,1) + zeta_i(ji,1)* & 606 (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji)) & 607 + t_su_1d(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0 607 608 ENDIF 608 609 … … 623 624 624 625 maxnumeqmax = 0 625 minnumeqmin = jkmax+4626 minnumeqmin = nlay_i+5 626 627 627 628 DO ji = kideb , kiut … … 632 633 END DO 633 634 634 DO layer= minnumeqmin+1, maxnumeqmax635 DO ji = kideb , kiut 636 numeq = min(max(numeqmin(ji)+1, layer),numeqmax(ji))635 DO jk = minnumeqmin+1, maxnumeqmax 636 DO ji = kideb , kiut 637 numeq = min(max(numeqmin(ji)+1,jk),numeqmax(ji)) 637 638 zdiagbis(ji,numeq) = ztrid(ji,numeq,2) - ztrid(ji,numeq,1)* & 638 639 ztrid(ji,numeq-1,3)/zdiagbis(ji,numeq-1) … … 644 645 DO ji = kideb , kiut 645 646 ! ice temperatures 646 t_i_ b(ji,nlay_i) = zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji))647 t_i_1d(ji,nlay_i) = zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 647 648 END DO 648 649 649 650 DO numeq = nlay_i + nlay_s + 1, nlay_s + 2, -1 650 651 DO ji = kideb , kiut 651 layer= numeq - nlay_s - 1652 t_i_ b(ji,layer) = (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* &653 t_i_ b(ji,layer+1))/zdiagbis(ji,numeq)652 jk = numeq - nlay_s - 1 653 t_i_1d(ji,jk) = (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* & 654 t_i_1d(ji,jk+1))/zdiagbis(ji,numeq) 654 655 END DO 655 656 END DO … … 657 658 DO ji = kideb , kiut 658 659 ! snow temperatures 659 IF (ht_s_ b(ji).GT.0._wp) &660 t_s_ b(ji,nlay_s) = (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) &661 * t_i_ b(ji,1))/zdiagbis(ji,nlay_s+1) &662 * MAX(0.0,SIGN(1.0,ht_s_ b(ji)))660 IF (ht_s_1d(ji).GT.0._wp) & 661 t_s_1d(ji,nlay_s) = (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 662 * t_i_1d(ji,1))/zdiagbis(ji,nlay_s+1) & 663 * MAX(0.0,SIGN(1.0,ht_s_1d(ji))) 663 664 664 665 ! surface temperature 665 isnow(ji) = NINT( 1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_ b(ji) ) ) )666 ztsu oldit(ji) = t_su_b(ji)667 IF( t_su_ b(ji) < ztfs(ji) ) &668 t_su_ b(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_b(ji,1) &669 & + REAL( 1 - isnow(ji) )*t_i_ b(ji,1) ) ) / zdiagbis(ji,numeqmin(ji))666 isnow(ji) = NINT( 1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_1d(ji) ) ) ) 667 ztsubit(ji) = t_su_1d(ji) 668 IF( t_su_1d(ji) < ztfs(ji) ) & 669 t_su_1d(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_1d(ji,1) & 670 & + REAL( 1 - isnow(ji) )*t_i_1d(ji,1) ) ) / zdiagbis(ji,numeqmin(ji)) 670 671 END DO 671 672 ! … … 677 678 ! zerrit(ji) is a measure of error, it has to be under maxer_i_thd 678 679 DO ji = kideb , kiut 679 t_su_ b(ji) = MAX( MIN( t_su_b(ji) , ztfs(ji) ) , 190._wp )680 zerrit(ji) = ABS( t_su_ b(ji) - ztsuoldit(ji) )681 END DO 682 683 DO layer= 1, nlay_s684 DO ji = kideb , kiut 685 t_s_ b(ji,layer) = MAX( MIN( t_s_b(ji,layer), rtt ), 190._wp )686 zerrit(ji) = MAX(zerrit(ji),ABS(t_s_ b(ji,layer) - ztstemp(ji,layer)))687 END DO 688 END DO 689 690 DO layer= 1, nlay_i691 DO ji = kideb , kiut 692 ztmelt_i = -tmut * s_i_ b(ji,layer) + rtt693 t_i_ b(ji,layer) = MAX(MIN(t_i_b(ji,layer),ztmelt_i), 190._wp)694 zerrit(ji) = MAX(zerrit(ji),ABS(t_i_ b(ji,layer) - ztitemp(ji,layer)))680 t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , ztfs(ji) ) , 190._wp ) 681 zerrit(ji) = ABS( t_su_1d(ji) - ztsubit(ji) ) 682 END DO 683 684 DO jk = 1, nlay_s 685 DO ji = kideb , kiut 686 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rtt ), 190._wp ) 687 zerrit(ji) = MAX(zerrit(ji),ABS(t_s_1d(ji,jk) - ztstemp(ji,jk))) 688 END DO 689 END DO 690 691 DO jk = 1, nlay_i 692 DO ji = kideb , kiut 693 ztmelt_i = -tmut * s_i_1d(ji,jk) + rtt 694 t_i_1d(ji,jk) = MAX(MIN(t_i_1d(ji,jk),ztmelt_i), 190._wp) 695 zerrit(ji) = MAX(zerrit(ji),ABS(t_i_1d(ji,jk) - ztitemp(ji,jk))) 695 696 END DO 696 697 END DO … … 717 718 DO ji = kideb, kiut 718 719 ! forced mode only : update of latent heat fluxes (sublimation) (always >=0, upward flux) 719 IF( .NOT. lk_cpl) qla_ice_1d (ji) = MAX( 0._wp, qla_ice_1d (ji) + dqla_ice_1d(ji) * ( t_su_ b(ji) - ztsuold(ji) ) )720 IF( .NOT. lk_cpl) qla_ice_1d (ji) = MAX( 0._wp, qla_ice_1d (ji) + dqla_ice_1d(ji) * ( t_su_1d(ji) - ztsub(ji) ) ) 720 721 ! ! surface ice conduction flux 721 isnow(ji) = NINT( 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_ b(ji) ) ) )722 fc_su(ji) = - REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_ b(ji,1) - t_su_b(ji)) &723 & - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1 * (t_i_ b(ji,1) - t_su_b(ji))722 isnow(ji) = NINT( 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_1d(ji) ) ) ) 723 fc_su(ji) = - REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_1d(ji,1) - t_su_1d(ji)) & 724 & - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1 * (t_i_1d(ji,1) - t_su_1d(ji)) 724 725 ! ! bottom ice conduction flux 725 fc_bo_i(ji) = - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_ b(ji) - t_i_b(ji,nlay_i)) )726 fc_bo_i(ji) = - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_1d(ji) - t_i_1d(ji,nlay_i)) ) 726 727 END DO 727 728 … … 730 731 !----------------------------------------- 731 732 DO ji = kideb, kiut 732 IF( t_su_b(ji) < rtt ) THEN ! case T_su < 0degC 733 hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 733 IF( t_su_1d(ji) < rtt ) THEN ! case T_su < 0degC 734 hfx_dif_1d(ji) = hfx_dif_1d(ji) + & 735 & ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 734 736 ELSE ! case T_su = 0degC 735 hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 737 hfx_dif_1d(ji) = hfx_dif_1d(ji) + & 738 & ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 736 739 ENDIF 737 740 END DO … … 742 745 ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 743 746 DO ji = kideb, kiut 744 zdq(ji) = - zq_ini(ji) + ( SUM( q_i_ b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + &745 & SUM( q_s_ b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )747 zdq(ji) = - zq_ini(ji) + ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) + & 748 & SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) ) 746 749 zhfx_err(ji) = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice ) 747 hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err(ji) * a_i_ b(ji)750 hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err(ji) * a_i_1d(ji) 748 751 END DO 749 752 … … 767 770 DO ji = kideb, kiut 768 771 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 769 hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_ b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) )772 hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_1d(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 770 773 END DO 771 774 772 775 ! 773 776 CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) 774 CALL wrk_dealloc( jpij, ztfs, ztsu old, ztsuoldit, zh_i, zh_s, zfsw )777 CALL wrk_dealloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 775 778 CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 776 CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztiold, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 777 CALL wrk_dealloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsold, zeta_s, ztstemp, z_s, kjstart = 0 ) 778 CALL wrk_dealloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 779 CALL wrk_dealloc( jpij, jkmax+2, 3, ztrid ) 779 CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, & 780 & ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 781 CALL wrk_dealloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 782 CALL wrk_dealloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 783 CALL wrk_dealloc( jpij, nlay_i+3, 3, ztrid ) 780 784 CALL wrk_dealloc( jpij, zdq, zq_ini, zhfx_err ) 781 785 … … 798 802 DO jk = 1, nlay_i ! Sea ice energy of melting 799 803 DO ji = kideb, kiut 800 ztmelts = - tmut * s_i_ b(ji,jk) + rtt801 zindb = MAX( 0._wp , SIGN( 1._wp , -(t_i_ b(ji,jk) - rtt) - epsi10 ) )802 q_i_ b(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_b(ji,jk) ) &803 & + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_ b(ji,jk)-rtt, -epsi10 ) ) &804 ztmelts = - tmut * s_i_1d(ji,jk) + rtt 805 zindb = MAX( 0._wp , SIGN( 1._wp , -(t_i_1d(ji,jk) - rtt) - epsi10 ) ) 806 q_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) ) & 807 & + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_1d(ji,jk)-rtt, -epsi10 ) ) & 804 808 & - rcp * ( ztmelts-rtt ) ) 805 809 END DO … … 807 811 DO jk = 1, nlay_s ! Snow energy of melting 808 812 DO ji = kideb, kiut 809 q_s_ b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus )813 q_s_1d(ji,jk) = rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) 810 814 END DO 811 815 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r4900 r4902 146 146 ! then we should not (* a_i) again but not important since this is just to check that remap error is ~0 147 147 DO ji = kideb, kiut 148 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_ b(ji) * r1_rdtice * &148 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_rdtice * & 149 149 & ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( qh_i_old(ji,0:nlay_i+1) ) ) 150 150 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r4901 r4902 72 72 !! - Computation of variation of ice volume and mass 73 73 !! - Computation of frldb after lateral accretion and 74 !! update ht_s_ b, ht_i_band tbif_1d(:,:)74 !! update ht_s_1d, ht_i_1d and tbif_1d(:,:) 75 75 !!------------------------------------------------------------------------ 76 INTEGER :: ji,jj,jk,jl ,jm! dummy loop indices77 INTEGER :: layer, nbpac! local integers78 INTEGER :: ii, ij, iter ! - -76 INTEGER :: ji,jj,jk,jl ! dummy loop indices 77 INTEGER :: nbpac ! local integers 78 INTEGER :: ii, ij, iter ! - - 79 79 REAL(wp) :: ztmelts, zdv, zfrazb, zweight, zindb, zinda, zde ! local scalars 80 80 REAL(wp) :: zgamafr, zvfrx, zvgx, ztaux, ztwogp, zf , zhicol_new ! - - … … 90 90 REAL(wp) :: zv_newfra 91 91 92 INTEGER , POINTER, DIMENSION(:) :: jcat ! indexes of categories where new ice grows92 INTEGER , POINTER, DIMENSION(:) :: jcat ! indexes of categories where new ice grows 93 93 REAL(wp), POINTER, DIMENSION(:) :: zswinew ! switch for new ice or not 94 94 … … 102 102 REAL(wp), POINTER, DIMENSION(:) :: zda_res ! residual area in case of excessive heat budget 103 103 REAL(wp), POINTER, DIMENSION(:) :: zat_i_1d ! total ice fraction 104 REAL(wp), POINTER, DIMENSION(:) :: zat_i_lev ! total ice fraction for level ice only (type 1) 105 REAL(wp), POINTER, DIMENSION(:) :: zv_frazb ! accretion of frazil ice at the ice bottom 104 REAL(wp), POINTER, DIMENSION(:) :: zv_frazb ! accretion of frazil ice at the ice bottom 106 105 REAL(wp), POINTER, DIMENSION(:) :: zvrel_1d ! relative ice / frazil velocity (1D vector) 107 106 108 REAL(wp), POINTER, DIMENSION(:,:) :: zv_ old! old volume of ice in category jl109 REAL(wp), POINTER, DIMENSION(:,:) :: za_ old! old area of ice in category jl110 REAL(wp), POINTER, DIMENSION(:,:) :: za_i_1d 111 REAL(wp), POINTER, DIMENSION(:,:) :: zv_i_1d 112 REAL(wp), POINTER, DIMENSION(:,:) :: zoa_i_1d 113 REAL(wp), POINTER, DIMENSION(:,:) :: zsmv_i_1d 114 115 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze_i_1d 107 REAL(wp), POINTER, DIMENSION(:,:) :: zv_b ! old volume of ice in category jl 108 REAL(wp), POINTER, DIMENSION(:,:) :: za_b ! old area of ice in category jl 109 REAL(wp), POINTER, DIMENSION(:,:) :: za_i_1d ! 1-D version of a_i 110 REAL(wp), POINTER, DIMENSION(:,:) :: zv_i_1d ! 1-D version of v_i 111 REAL(wp), POINTER, DIMENSION(:,:) :: zoa_i_1d ! 1-D version of oa_i 112 REAL(wp), POINTER, DIMENSION(:,:) :: zsmv_i_1d ! 1-D version of smv_i 113 114 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze_i_1d !: 1-D version of e_i 116 115 117 116 REAL(wp), POINTER, DIMENSION(:,:) :: zvrel ! relative ice / frazil velocity … … 120 119 CALL wrk_alloc( jpij, jcat ) ! integer 121 120 CALL wrk_alloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 122 CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_1d, z at_i_lev, zv_frazb, zvrel_1d )123 CALL wrk_alloc( jpij,jpl, zv_ old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d )124 CALL wrk_alloc( jpij, jkmax,jpl, ze_i_1d )121 CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_1d, zv_frazb, zvrel_1d ) 122 CALL wrk_alloc( jpij,jpl, zv_b, za_b, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d ) 123 CALL wrk_alloc( jpij,nlay_i+1,jpl, ze_i_1d ) 125 124 CALL wrk_alloc( jpi,jpj, zvrel ) 126 125 … … 303 302 304 303 CALL tab_2d_1d( nbpac, qlead_1d (1:nbpac) , qlead , jpi, jpj, npac(1:nbpac) ) 305 CALL tab_2d_1d( nbpac, t_bo_ b(1:nbpac) , t_bo , jpi, jpj, npac(1:nbpac) )304 CALL tab_2d_1d( nbpac, t_bo_1d (1:nbpac) , t_bo , jpi, jpj, npac(1:nbpac) ) 306 305 CALL tab_2d_1d( nbpac, sfx_opw_1d(1:nbpac) , sfx_opw, jpi, jpj, npac(1:nbpac) ) 307 306 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw, jpi, jpj, npac(1:nbpac) ) 308 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw, jpi, jpj, npac(1:nbpac) ) 309 CALL tab_2d_1d( nbpac, hicol_b (1:nbpac) , hicol , jpi, jpj, npac(1:nbpac) ) 307 CALL tab_2d_1d( nbpac, hicol_1d (1:nbpac) , hicol , jpi, jpj, npac(1:nbpac) ) 310 308 CALL tab_2d_1d( nbpac, zvrel_1d (1:nbpac) , zvrel , jpi, jpj, npac(1:nbpac) ) 311 309 … … 320 318 ! Keep old ice areas and volume in memory 321 319 !----------------------------------------- 322 zv_ old(1:nbpac,:) = zv_i_1d(1:nbpac,:)323 za_ old(1:nbpac,:) = za_i_1d(1:nbpac,:)320 zv_b(1:nbpac,:) = zv_i_1d(1:nbpac,:) 321 za_b(1:nbpac,:) = za_i_1d(1:nbpac,:) 324 322 !---------------------- 325 323 ! Thickness of new ice … … 328 326 zh_newice(ji) = hiccrit 329 327 END DO 330 IF( fraz_swi == 1 ) zh_newice(1:nbpac) = hicol_ b(1:nbpac)328 IF( fraz_swi == 1 ) zh_newice(1:nbpac) = hicol_1d(1:nbpac) 331 329 332 330 !---------------------- … … 352 350 DO ji = 1, nbpac 353 351 ztmelts = - tmut * zs_newice(ji) + rtt ! Melting point (K) 354 ze_newice(ji) = rhoic * ( cpic * ( ztmelts - t_bo_ b(ji) ) &355 & + lfus * ( 1.0 - ( ztmelts - rtt ) / MIN( t_bo_ b(ji) - rtt, -epsi10 ) ) &352 ze_newice(ji) = rhoic * ( cpic * ( ztmelts - t_bo_1d(ji) ) & 353 & + lfus * ( 1.0 - ( ztmelts - rtt ) / MIN( t_bo_1d(ji) - rtt, -epsi10 ) ) & 356 354 & - rcp * ( ztmelts - rtt ) ) 357 355 END DO ! ji … … 371 369 zEi = - ze_newice(ji) / rhoic ! specific enthalpy of forming ice [J/kg] 372 370 373 zEw = rcp * ( t_bo_ b(ji) - rt0 ) ! specific enthalpy of seawater at t_bo_b[J/kg]371 zEw = rcp * ( t_bo_1d(ji) - rt0 ) ! specific enthalpy of seawater at t_bo_1d [J/kg] 374 372 ! clem: we suppose we are already at the freezing point (condition qlead<0 is satisfyied) 375 373 … … 442 440 DO ji = 1, nbpac 443 441 jl = jcat(ji) ! categroy in which new ice is put 444 zswinew (ji) = MAX( 0._wp , SIGN( 1._wp , - za_ old(ji,jl) ) ) ! 0 if old ice442 zswinew (ji) = MAX( 0._wp , SIGN( 1._wp , - za_b(ji,jl) ) ) ! 0 if old ice 445 443 END DO 446 444 … … 450 448 zinda = MAX( 0._wp, SIGN( 1._wp , zv_i_1d(ji,jl) - epsi20 ) ) 451 449 ze_i_1d(ji,jk,jl) = zswinew(ji) * ze_newice(ji) + & 452 & ( 1.0 - zswinew(ji) ) * ( ze_newice(ji) * zv_newice(ji) + ze_i_1d(ji,jk,jl) * zv_ old(ji,jl) ) &450 & ( 1.0 - zswinew(ji) ) * ( ze_newice(ji) * zv_newice(ji) + ze_i_1d(ji,jk,jl) * zv_b(ji,jl) ) & 453 451 & * zinda / MAX( zv_i_1d(ji,jl), epsi20 ) 454 452 END DO … … 492 490 DO ji = 1, nbpac 493 491 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_1d(ji,jl) + epsi20 ) ) ! 0 if no ice and 1 if yes 494 zoa_i_1d(ji,jl) = za_ old(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb492 zoa_i_1d(ji,jl) = za_b(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb 495 493 END DO 496 494 END DO … … 501 499 DO jl = 1, jpl 502 500 DO ji = 1, nbpac 503 zdv = zv_i_1d(ji,jl) - zv_ old(ji,jl)501 zdv = zv_i_1d(ji,jl) - zv_b(ji,jl) 504 502 zsmv_i_1d(ji,jl) = zsmv_i_1d(ji,jl) + zdv * zs_newice(ji) 505 503 END DO … … 520 518 CALL tab_1d_2d( nbpac, sfx_opw, npac(1:nbpac), sfx_opw_1d(1:nbpac), jpi, jpj ) 521 519 CALL tab_1d_2d( nbpac, wfx_opw, npac(1:nbpac), wfx_opw_1d(1:nbpac), jpi, jpj ) 522 CALL tab_1d_2d( nbpac, wfx_opw, npac(1:nbpac), wfx_opw_1d(1:nbpac), jpi, jpj )523 520 524 521 CALL tab_1d_2d( nbpac, hfx_thd, npac(1:nbpac), hfx_thd_1d(1:nbpac), jpi, jpj ) … … 544 541 CALL wrk_dealloc( jpij, jcat ) ! integer 545 542 CALL wrk_dealloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 546 CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_1d, z at_i_lev, zv_frazb, zvrel_1d )547 CALL wrk_dealloc( jpij,jpl, zv_ old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d )548 CALL wrk_dealloc( jpij, jkmax,jpl, ze_i_1d )543 CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_1d, zv_frazb, zvrel_1d ) 544 CALL wrk_dealloc( jpij,jpl, zv_b, za_b, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d ) 545 CALL wrk_dealloc( jpij,nlay_i+1,jpl, ze_i_1d ) 549 546 CALL wrk_dealloc( jpi,jpj, zvrel ) 550 547 ! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r4900 r4902 60 60 !--------------------------------------------------------- 61 61 DO ji = kideb, kiut 62 sm_i_ b(ji) = sm_i_b(ji) + dsm_i_se_1d(ji) + dsm_i_si_1d(ji)62 sm_i_1d(ji) = sm_i_1d(ji) + dsm_i_se_1d(ji) + dsm_i_si_1d(ji) 63 63 END DO 64 64 … … 66 66 ! 1) Constant salinity, constant in time | 67 67 !------------------------------------------------------------------------------| 68 !!gm comment: if num_sal = 1 s_i_new, s_i_ b and sm_i_bcan be set to bulk_sal one for all in the initialisation phase !!68 !!gm comment: if num_sal = 1 s_i_new, s_i_1d and sm_i_1d can be set to bulk_sal one for all in the initialisation phase !! 69 69 !!gm ===>>> simplification of almost all test on num_sal value 70 70 IF( num_sal == 1 ) THEN 71 s_i_ b(kideb:kiut,1:nlay_i) = bulk_sal72 sm_i_ b(kideb:kiut) = bulk_sal71 s_i_1d (kideb:kiut,1:nlay_i) = bulk_sal 72 sm_i_1d(kideb:kiut) = bulk_sal 73 73 s_i_new(kideb:kiut) = bulk_sal 74 74 ENDIF … … 83 83 ! Switches 84 84 !---------- 85 iflush = MAX( 0._wp , SIGN( 1._wp , t_su_ b(ji) - rtt ) )! =1 if summer86 igravdr = MAX( 0._wp , SIGN( 1._wp , t_bo_ b(ji) - t_su_b(ji) ) ) ! =1 if t_su < t_bo85 iflush = MAX( 0._wp , SIGN( 1._wp , t_su_1d(ji) - rtt ) ) ! =1 if summer 86 igravdr = MAX( 0._wp , SIGN( 1._wp , t_bo_1d(ji) - t_su_1d(ji) ) ) ! =1 if t_su < t_bo 87 87 88 88 !--------------------- … … 90 90 !--------------------- 91 91 ! drainage by gravity drainage 92 dsm_i_gd_1d(ji) = - igravdr * MAX( sm_i_ b(ji) - sal_G , 0._wp ) / time_G * rdt_ice92 dsm_i_gd_1d(ji) = - igravdr * MAX( sm_i_1d(ji) - sal_G , 0._wp ) / time_G * rdt_ice 93 93 ! drainage by flushing 94 dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_ b(ji) - sal_F , 0._wp ) / time_F * rdt_ice94 dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_1d(ji) - sal_F , 0._wp ) / time_F * rdt_ice 95 95 96 96 !----------------- … … 99 99 ! only drainage terms ( gravity drainage and flushing ) 100 100 ! snow ice / bottom sources are added in lim_thd_ent to conserve energy 101 sm_i_ b(ji) = sm_i_b(ji) + dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji)101 sm_i_1d(ji) = sm_i_1d(ji) + dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji) 102 102 103 103 !---------------------------- 104 104 ! Salt flux - brine drainage 105 105 !---------------------------- 106 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoic * a_i_ b(ji) * ht_i_b(ji) * ( dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji) ) * r1_rdtice106 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoic * a_i_1d(ji) * ht_i_1d(ji) * ( dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji) ) * r1_rdtice 107 107 108 108 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r4900 r4902 63 63 INTEGER, INTENT(in) :: kt ! number of iteration 64 64 ! 65 INTEGER :: ji, jj, jk, jl, layer! dummy loop indices65 INTEGER :: ji, jj, jk, jl, jn ! dummy loop indices 66 66 INTEGER :: initad ! number of sub-timestep for the advection 67 67 INTEGER :: ierr ! error status … … 85 85 CALL wrk_alloc( jpi, jpj, zui_u, zvi_v, zsm, zs0at, zs0ow, zeiold, zesold ) 86 86 CALL wrk_alloc( jpi, jpj, jpl, zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi ) 87 CALL wrk_alloc( jpi, jpj, jkmax, jpl, zs0e )87 CALL wrk_alloc( jpi, jpj, nlay_i+1, jpl, zs0e ) 88 88 89 89 CALL wrk_alloc( jpi, jpj, jpl, zaiold, zhimax, zviold, zvsold ) ! clem … … 167 167 168 168 IF( MOD( ( kt - 1) / nn_fsbc , 2 ) == 0 ) THEN !== odd ice time step: adv_x then adv_y ==! 169 DO j k= 1,initad169 DO jn = 1,initad 170 170 CALL lim_adv_x( zusnit, u_ice, 1._wp , zsm, zs0ow (:,:), sxopw(:,:), & !--- ice open water area 171 171 & sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:) ) … … 197 197 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl), & 198 198 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 199 DO layer= 1, nlay_i !--- ice heat contents ---200 CALL lim_adv_x( zusnit, u_ice, 1._wp , zsm, zs0e(:,:, layer,jl), sxe (:,:,layer,jl), &201 & sxxe(:,:, layer,jl), sye (:,:,layer,jl), &202 & syye(:,:, layer,jl), sxye(:,:,layer,jl) )203 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, zs0e(:,:, layer,jl), sxe (:,:,layer,jl), &204 & sxxe(:,:, layer,jl), sye (:,:,layer,jl), &205 & syye(:,:, layer,jl), sxye(:,:,layer,jl) )199 DO jk = 1, nlay_i !--- ice heat contents --- 200 CALL lim_adv_x( zusnit, u_ice, 1._wp , zsm, zs0e(:,:,jk,jl), sxe (:,:,jk,jl), & 201 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 202 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 203 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, zs0e(:,:,jk,jl), sxe (:,:,jk,jl), & 204 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 205 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 206 206 END DO 207 207 END DO 208 208 END DO 209 209 ELSE 210 DO j k= 1, initad210 DO jn = 1, initad 211 211 CALL lim_adv_y( zusnit, v_ice, 1._wp , zsm, zs0ow (:,:), sxopw(:,:), & !--- ice open water area 212 212 & sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:) ) … … 239 239 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl), & 240 240 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 241 DO layer= 1, nlay_i !--- ice heat contents ---242 CALL lim_adv_y( zusnit, v_ice, 1._wp , zsm, zs0e(:,:, layer,jl), sxe (:,:,layer,jl), &243 & sxxe(:,:, layer,jl), sye (:,:,layer,jl), &244 & syye(:,:, layer,jl), sxye(:,:,layer,jl) )245 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, zs0e(:,:, layer,jl), sxe (:,:,layer,jl), &246 & sxxe(:,:, layer,jl), sye (:,:,layer,jl), &247 & syye(:,:, layer,jl), sxye(:,:,layer,jl) )241 DO jk = 1, nlay_i !--- ice heat contents --- 242 CALL lim_adv_y( zusnit, v_ice, 1._wp , zsm, zs0e(:,:,jk,jl), sxe (:,:,jk,jl), & 243 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 244 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 245 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, zs0e(:,:,jk,jl), sxe (:,:,jk,jl), & 246 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 247 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 248 248 END DO 249 249 END DO … … 506 506 CALL wrk_dealloc( jpi, jpj, zui_u, zvi_v, zsm, zs0at, zs0ow, zeiold, zesold ) 507 507 CALL wrk_dealloc( jpi, jpj, jpl, zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi ) 508 CALL wrk_dealloc( jpi, jpj, jkmax, jpl, zs0e )508 CALL wrk_dealloc( jpi, jpj, nlay_i+1, jpl, zs0e ) 509 509 510 510 CALL wrk_dealloc( jpi, jpj, jpl, zviold, zvsold, zaiold, zhimax ) ! clem -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r4900 r4902 69 69 !! 70 70 !!--------------------------------------------------------------------- 71 INTEGER :: ji, jj, jk, jl, jm ! dummy loop indices 72 INTEGER :: jbnd1, jbnd2 71 INTEGER :: ji, jj, jk, jl ! dummy loop indices 73 72 INTEGER :: i_ice_switch 74 73 REAL(wp) :: zsal … … 93 92 ! Rebin categories with thickness out of bounds 94 93 !---------------------------------------------------- 95 DO jm = 1, jpm 96 jbnd1 = ice_cat_bounds(jm,1) 97 jbnd2 = ice_cat_bounds(jm,2) 98 IF (ice_ncat_types(jm) .GT. 1 ) CALL lim_itd_th_reb(jbnd1, jbnd2, jm) 99 END DO 94 IF ( jpl > 1 ) CALL lim_itd_th_reb(1, jpl) 100 95 101 96 at_i(:,:) = 0._wp … … 126 121 ! Final thickness distribution rebinning 127 122 ! -------------------------------------- 128 DO jm = 1, jpm 129 jbnd1 = ice_cat_bounds(jm,1) 130 jbnd2 = ice_cat_bounds(jm,2) 131 IF (ice_ncat_types(jm) .GT. 1 ) CALL lim_itd_th_reb(jbnd1, jbnd2, jm) 132 IF (ice_ncat_types(jm) .EQ. 1 ) THEN 133 ENDIF 134 END DO 123 IF ( jpl > 1 ) CALL lim_itd_th_reb(1, jpl) 135 124 136 125 !----------------- … … 161 150 ! Diagnostics 162 151 ! ------------------------------------------------- 163 d_u_ice_dyn(:,:) = u_ice(:,:) - old_u_ice(:,:)164 d_v_ice_dyn(:,:) = v_ice(:,:) - old_v_ice(:,:)165 d_a_i_trp (:,:,:) = a_i (:,:,:) - old_a_i(:,:,:)166 d_v_s_trp (:,:,:) = v_s (:,:,:) - old_v_s(:,:,:)167 d_v_i_trp (:,:,:) = v_i (:,:,:) - old_v_i(:,:,:)168 d_e_s_trp (:,:,:,:) = e_s (:,:,:,:) - old_e_s(:,:,:,:)169 d_e_i_trp (:,:,1:nlay_i,:) = e_i (:,:,1:nlay_i,:) - old_e_i(:,:,1:nlay_i,:)170 d_oa_i_trp (:,:,:) = oa_i (:,:,:) - o ld_oa_i(:,:,:)152 d_u_ice_dyn(:,:) = u_ice(:,:) - u_ice_b(:,:) 153 d_v_ice_dyn(:,:) = v_ice(:,:) - v_ice_b(:,:) 154 d_a_i_trp (:,:,:) = a_i (:,:,:) - a_i_b (:,:,:) 155 d_v_s_trp (:,:,:) = v_s (:,:,:) - v_s_b (:,:,:) 156 d_v_i_trp (:,:,:) = v_i (:,:,:) - v_i_b (:,:,:) 157 d_e_s_trp (:,:,:,:) = e_s (:,:,:,:) - e_s_b (:,:,:,:) 158 d_e_i_trp (:,:,1:nlay_i,:) = e_i (:,:,1:nlay_i,:) - e_i_b(:,:,1:nlay_i,:) 159 d_oa_i_trp (:,:,:) = oa_i (:,:,:) - oa_i_b (:,:,:) 171 160 d_smv_i_trp(:,:,:) = 0._wp 172 IF( num_sal == 2 ) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:)161 IF( num_sal == 2 ) d_smv_i_trp(:,:,:) = smv_i(:,:,:) - smv_i_b(:,:,:) 173 162 174 163 ! conservation test … … 186 175 CALL prt_ctl(tab2d_1=u_ice , clinfo1=' lim_update1 : u_ice :', tab2d_2=v_ice , clinfo2=' v_ice :') 187 176 CALL prt_ctl(tab2d_1=d_u_ice_dyn, clinfo1=' lim_update1 : d_u_ice_dyn :', tab2d_2=d_v_ice_dyn, clinfo2=' d_v_ice_dyn :') 188 CALL prt_ctl(tab2d_1= old_u_ice , clinfo1=' lim_update1 : old_u_ice :', tab2d_2=old_v_ice , clinfo2=' old_v_ice:')177 CALL prt_ctl(tab2d_1=u_ice_b , clinfo1=' lim_update1 : u_ice_b :', tab2d_2=v_ice_b , clinfo2=' v_ice_b :') 189 178 190 179 DO jl = 1, jpl … … 199 188 CALL prt_ctl(tab2d_1=o_i (:,:,jl) , clinfo1= ' lim_update1 : o_i : ') 200 189 CALL prt_ctl(tab2d_1=a_i (:,:,jl) , clinfo1= ' lim_update1 : a_i : ') 201 CALL prt_ctl(tab2d_1= old_a_i (:,:,jl) , clinfo1= ' lim_update1 : old_a_i: ')190 CALL prt_ctl(tab2d_1=a_i_b (:,:,jl) , clinfo1= ' lim_update1 : a_i_b : ') 202 191 CALL prt_ctl(tab2d_1=d_a_i_trp (:,:,jl) , clinfo1= ' lim_update1 : d_a_i_trp : ') 203 192 CALL prt_ctl(tab2d_1=v_i (:,:,jl) , clinfo1= ' lim_update1 : v_i : ') 204 CALL prt_ctl(tab2d_1= old_v_i (:,:,jl) , clinfo1= ' lim_update1 : old_v_i: ')193 CALL prt_ctl(tab2d_1=v_i_b (:,:,jl) , clinfo1= ' lim_update1 : v_i_b : ') 205 194 CALL prt_ctl(tab2d_1=d_v_i_trp (:,:,jl) , clinfo1= ' lim_update1 : d_v_i_trp : ') 206 195 CALL prt_ctl(tab2d_1=v_s (:,:,jl) , clinfo1= ' lim_update1 : v_s : ') 207 CALL prt_ctl(tab2d_1= old_v_s (:,:,jl) , clinfo1= ' lim_update1 : old_v_s: ')196 CALL prt_ctl(tab2d_1=v_s_b (:,:,jl) , clinfo1= ' lim_update1 : v_s_b : ') 208 197 CALL prt_ctl(tab2d_1=d_v_s_trp (:,:,jl) , clinfo1= ' lim_update1 : d_v_s_trp : ') 209 198 CALL prt_ctl(tab2d_1=e_i (:,:,1,jl)/1.0e9, clinfo1= ' lim_update1 : e_i1 : ') 210 CALL prt_ctl(tab2d_1= old_e_i (:,:,1,jl)/1.0e9, clinfo1= ' lim_update1 : old_e_i1: ')199 CALL prt_ctl(tab2d_1=e_i_b (:,:,1,jl)/1.0e9, clinfo1= ' lim_update1 : e_i1_b : ') 211 200 CALL prt_ctl(tab2d_1=d_e_i_trp (:,:,1,jl)/1.0e9, clinfo1= ' lim_update1 : de_i1_trp : ') 212 201 CALL prt_ctl(tab2d_1=e_i (:,:,2,jl)/1.0e9, clinfo1= ' lim_update1 : e_i2 : ') 213 CALL prt_ctl(tab2d_1= old_e_i (:,:,2,jl)/1.0e9, clinfo1= ' lim_update1 : old_e_i2: ')202 CALL prt_ctl(tab2d_1=e_i_b (:,:,2,jl)/1.0e9, clinfo1= ' lim_update1 : e_i2_b : ') 214 203 CALL prt_ctl(tab2d_1=d_e_i_trp (:,:,2,jl)/1.0e9, clinfo1= ' lim_update1 : de_i2_trp : ') 215 204 CALL prt_ctl(tab2d_1=e_s (:,:,1,jl) , clinfo1= ' lim_update1 : e_snow : ') 216 CALL prt_ctl(tab2d_1= old_e_s (:,:,1,jl) , clinfo1= ' lim_update1 : old_e_snow: ')205 CALL prt_ctl(tab2d_1=e_s_b (:,:,1,jl) , clinfo1= ' lim_update1 : e_snow_b : ') 217 206 CALL prt_ctl(tab2d_1=d_e_s_trp (:,:,1,jl)/1.0e9, clinfo1= ' lim_update1 : d_e_s_trp : ') 218 207 CALL prt_ctl(tab2d_1=smv_i (:,:,jl) , clinfo1= ' lim_update1 : smv_i : ') 219 CALL prt_ctl(tab2d_1= old_smv_i (:,:,jl) , clinfo1= ' lim_update1 : old_smv_i: ')208 CALL prt_ctl(tab2d_1=smv_i_b (:,:,jl) , clinfo1= ' lim_update1 : smv_i_b : ') 220 209 CALL prt_ctl(tab2d_1=d_smv_i_trp(:,:,jl) , clinfo1= ' lim_update1 : d_smv_i_trp : ') 221 210 CALL prt_ctl(tab2d_1=oa_i (:,:,jl) , clinfo1= ' lim_update1 : oa_i : ') 222 CALL prt_ctl(tab2d_1=o ld_oa_i (:,:,jl) , clinfo1= ' lim_update1 : old_oa_i: ')211 CALL prt_ctl(tab2d_1=oa_i_b (:,:,jl) , clinfo1= ' lim_update1 : oa_i_b : ') 223 212 CALL prt_ctl(tab2d_1=d_oa_i_trp (:,:,jl) , clinfo1= ' lim_update1 : d_oa_i_trp : ') 224 213 -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r4900 r4902 67 67 !! 68 68 !!--------------------------------------------------------------------- 69 INTEGER :: ji, jj, jk, jl, jm ! dummy loop indices 70 INTEGER :: jbnd1, jbnd2 69 INTEGER :: ji, jj, jk, jl ! dummy loop indices 71 70 INTEGER :: i_ice_switch 72 71 REAL(wp) :: zh, zsal … … 89 88 ! Rebin categories with thickness out of bounds 90 89 !---------------------------------------------------- 91 DO jm = 1, jpm 92 jbnd1 = ice_cat_bounds(jm,1) 93 jbnd2 = ice_cat_bounds(jm,2) 94 IF (ice_ncat_types(jm) .GT. 1 ) CALL lim_itd_th_reb(jbnd1, jbnd2, jm) 95 END DO 90 IF ( jpl > 1 ) CALL lim_itd_th_reb(1, jpl) 96 91 97 92 !---------------------------------------------------------------------- 98 93 ! Constrain the thickness of the smallest category above hiclim 99 94 !---------------------------------------------------------------------- 100 DO jm = 1, jpm 101 DO jj = 1, jpj 102 DO ji = 1, jpi 103 jl = ice_cat_bounds(jm,1) 104 IF( v_i(ji,jj,jl) > 0._wp .AND. ht_i(ji,jj,jl) < hiclim ) THEN 105 zh = hiclim / ht_i(ji,jj,jl) 106 ht_s(ji,jj,jl) = ht_s(ji,jj,jl) * zh 107 ht_i(ji,jj,jl) = ht_i(ji,jj,jl) * zh 108 a_i (ji,jj,jl) = a_i(ji,jj,jl) / zh 109 ENDIF 110 END DO !ji 111 END DO !jj 112 END DO !jm 95 DO jj = 1, jpj 96 DO ji = 1, jpi 97 IF( v_i(ji,jj,1) > 0._wp .AND. ht_i(ji,jj,1) < hiclim ) THEN 98 zh = hiclim / ht_i(ji,jj,1) 99 ht_s(ji,jj,1) = ht_s(ji,jj,1) * zh 100 ht_i(ji,jj,1) = ht_i(ji,jj,1) * zh 101 a_i (ji,jj,1) = a_i(ji,jj,1) / zh 102 ENDIF 103 END DO 104 END DO 113 105 114 106 !----------------------------------------------------- … … 139 131 ! Final thickness distribution rebinning 140 132 ! -------------------------------------- 141 DO jm = 1, jpm 142 jbnd1 = ice_cat_bounds(jm,1) 143 jbnd2 = ice_cat_bounds(jm,2) 144 IF (ice_ncat_types(jm) .GT. 1 ) CALL lim_itd_th_reb(jbnd1, jbnd2, jm) 145 IF (ice_ncat_types(jm) .EQ. 1 ) THEN 146 ENDIF 147 END DO 133 IF ( jpl > 1 ) CALL lim_itd_th_reb( 1, jpl ) 148 134 149 135 !----------------- … … 196 182 ! Diagnostics 197 183 ! ------------------------------------------------- 198 d_a_i_thd(:,:,:) = a_i(:,:,:) - old_a_i(:,:,:)199 d_v_s_thd(:,:,:) = v_s(:,:,:) - old_v_s(:,:,:)200 d_v_i_thd(:,:,:) = v_i(:,:,:) - old_v_i(:,:,:)201 d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - old_e_s(:,:,:,:)202 d_e_i_thd(:,:,1:nlay_i,:) = e_i(:,:,1:nlay_i,:) - old_e_i(:,:,1:nlay_i,:)203 !?? d_oa_i_thd(:,:,:) = oa_i (:,:,:) - o ld_oa_i(:,:,:)184 d_a_i_thd(:,:,:) = a_i(:,:,:) - a_i_b(:,:,:) 185 d_v_s_thd(:,:,:) = v_s(:,:,:) - v_s_b(:,:,:) 186 d_v_i_thd(:,:,:) = v_i(:,:,:) - v_i_b(:,:,:) 187 d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - e_s_b(:,:,:,:) 188 d_e_i_thd(:,:,1:nlay_i,:) = e_i(:,:,1:nlay_i,:) - e_i_b(:,:,1:nlay_i,:) 189 !?? d_oa_i_thd(:,:,:) = oa_i (:,:,:) - oa_i_b (:,:,:) 204 190 d_smv_i_thd(:,:,:) = 0._wp 205 IF( num_sal == 2 ) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:)191 IF( num_sal == 2 ) d_smv_i_thd(:,:,:) = smv_i(:,:,:) - smv_i_b(:,:,:) 206 192 ! diag only (clem) 207 193 dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday … … 211 197 DO ji = 1, jpi 212 198 diag_heat_dhc(ji,jj) = ( SUM( d_e_i_trp(ji,jj,1:nlay_i,:) + d_e_i_thd(ji,jj,1:nlay_i,:) ) + & 213 & SUM( d_e_s_trp(ji,jj,1:nlay_s,:) + d_e_s_thd(ji,jj,1:nlay_s,:) ) ) * unit_fac * r1_rdtice / area(ji,jj) 199 & SUM( d_e_s_trp(ji,jj,1:nlay_s,:) + d_e_s_thd(ji,jj,1:nlay_s,:) ) & 200 & ) * unit_fac * r1_rdtice / area(ji,jj) 214 201 END DO 215 202 END DO … … 228 215 CALL prt_ctl(tab2d_1=strength , clinfo1=' lim_update2 : strength :') 229 216 CALL prt_ctl(tab2d_1=u_ice , clinfo1=' lim_update2 : u_ice :', tab2d_2=v_ice , clinfo2=' v_ice :') 230 CALL prt_ctl(tab2d_1= old_u_ice , clinfo1=' lim_update2 : old_u_ice :', tab2d_2=old_v_ice , clinfo2=' old_v_ice:')217 CALL prt_ctl(tab2d_1=u_ice_b , clinfo1=' lim_update2 : u_ice_b :', tab2d_2=v_ice_b , clinfo2=' v_ice_b :') 231 218 232 219 DO jl = 1, jpl … … 241 228 CALL prt_ctl(tab2d_1=o_i (:,:,jl) , clinfo1= ' lim_update2 : o_i : ') 242 229 CALL prt_ctl(tab2d_1=a_i (:,:,jl) , clinfo1= ' lim_update2 : a_i : ') 243 CALL prt_ctl(tab2d_1= old_a_i (:,:,jl) , clinfo1= ' lim_update2 : old_a_i: ')230 CALL prt_ctl(tab2d_1=a_i_b (:,:,jl) , clinfo1= ' lim_update2 : a_i_b : ') 244 231 CALL prt_ctl(tab2d_1=d_a_i_thd (:,:,jl) , clinfo1= ' lim_update2 : d_a_i_thd : ') 245 232 CALL prt_ctl(tab2d_1=v_i (:,:,jl) , clinfo1= ' lim_update2 : v_i : ') 246 CALL prt_ctl(tab2d_1= old_v_i (:,:,jl) , clinfo1= ' lim_update2 : old_v_i: ')233 CALL prt_ctl(tab2d_1=v_i_b (:,:,jl) , clinfo1= ' lim_update2 : v_i_b : ') 247 234 CALL prt_ctl(tab2d_1=d_v_i_thd (:,:,jl) , clinfo1= ' lim_update2 : d_v_i_thd : ') 248 235 CALL prt_ctl(tab2d_1=v_s (:,:,jl) , clinfo1= ' lim_update2 : v_s : ') 249 CALL prt_ctl(tab2d_1= old_v_s (:,:,jl) , clinfo1= ' lim_update2 : old_v_s: ')236 CALL prt_ctl(tab2d_1=v_s_b (:,:,jl) , clinfo1= ' lim_update2 : v_s_b : ') 250 237 CALL prt_ctl(tab2d_1=d_v_s_thd (:,:,jl) , clinfo1= ' lim_update2 : d_v_s_thd : ') 251 238 CALL prt_ctl(tab2d_1=e_i (:,:,1,jl)/1.0e9, clinfo1= ' lim_update2 : e_i1 : ') 252 CALL prt_ctl(tab2d_1= old_e_i (:,:,1,jl)/1.0e9, clinfo1= ' lim_update2 : old_e_i1: ')239 CALL prt_ctl(tab2d_1=e_i_b (:,:,1,jl)/1.0e9, clinfo1= ' lim_update2 : e_i1_b : ') 253 240 CALL prt_ctl(tab2d_1=d_e_i_thd (:,:,1,jl)/1.0e9, clinfo1= ' lim_update2 : de_i1_thd : ') 254 241 CALL prt_ctl(tab2d_1=e_i (:,:,2,jl)/1.0e9, clinfo1= ' lim_update2 : e_i2 : ') 255 CALL prt_ctl(tab2d_1= old_e_i (:,:,2,jl)/1.0e9, clinfo1= ' lim_update2 : old_e_i2: ')242 CALL prt_ctl(tab2d_1=e_i_b (:,:,2,jl)/1.0e9, clinfo1= ' lim_update2 : e_i2_b : ') 256 243 CALL prt_ctl(tab2d_1=d_e_i_thd (:,:,2,jl)/1.0e9, clinfo1= ' lim_update2 : de_i2_thd : ') 257 244 CALL prt_ctl(tab2d_1=e_s (:,:,1,jl) , clinfo1= ' lim_update2 : e_snow : ') 258 CALL prt_ctl(tab2d_1= old_e_s (:,:,1,jl) , clinfo1= ' lim_update2 : old_e_snow: ')245 CALL prt_ctl(tab2d_1=e_s_b (:,:,1,jl) , clinfo1= ' lim_update2 : e_snow_b : ') 259 246 CALL prt_ctl(tab2d_1=d_e_s_thd (:,:,1,jl)/1.0e9, clinfo1= ' lim_update2 : d_e_s_thd : ') 260 247 CALL prt_ctl(tab2d_1=smv_i (:,:,jl) , clinfo1= ' lim_update2 : smv_i : ') 261 CALL prt_ctl(tab2d_1= old_smv_i (:,:,jl) , clinfo1= ' lim_update2 : old_smv_i: ')248 CALL prt_ctl(tab2d_1=smv_i_b (:,:,jl) , clinfo1= ' lim_update2 : smv_i_b : ') 262 249 CALL prt_ctl(tab2d_1=d_smv_i_thd(:,:,jl) , clinfo1= ' lim_update2 : d_smv_i_thd : ') 263 250 CALL prt_ctl(tab2d_1=oa_i (:,:,jl) , clinfo1= ' lim_update2 : oa_i : ') 264 CALL prt_ctl(tab2d_1=o ld_oa_i (:,:,jl) , clinfo1= ' lim_update2 : old_oa_i: ')251 CALL prt_ctl(tab2d_1=oa_i_b (:,:,jl) , clinfo1= ' lim_update2 : oa_i_b : ') 265 252 CALL prt_ctl(tab2d_1=d_oa_i_thd (:,:,jl) , clinfo1= ' lim_update2 : d_oa_i_thd : ') 266 253 -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r4900 r4902 464 464 ! Vertically constant, constant in time 465 465 !--------------------------------------- 466 IF( num_sal == 1 ) s_i_ b(:,:) = bulk_sal466 IF( num_sal == 1 ) s_i_1d(:,:) = bulk_sal 467 467 468 468 !------------------------------------------------------ … … 473 473 ! 474 474 DO ji = kideb, kiut ! Slope of the linear profile zs_zero 475 z_slope_s(ji) = 2._wp * sm_i_ b(ji) / MAX( epsi10 , ht_i_b(ji) )475 z_slope_s(ji) = 2._wp * sm_i_1d(ji) / MAX( epsi10 , ht_i_1d(ji) ) 476 476 END DO 477 477 … … 489 489 ij = ( npb(ji) - 1 ) / jpi + 1 490 490 ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 491 zind0 = MAX( 0._wp , SIGN( 1._wp , s_i_0 - sm_i_ b(ji) ) )491 zind0 = MAX( 0._wp , SIGN( 1._wp , s_i_0 - sm_i_1d(ji) ) ) 492 492 ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws 493 zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_ b(ji) ) )493 zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_1d(ji) ) ) 494 494 ! if 2.sm_i GE sss_m then zindbal = 1 495 495 ! this is to force a constant salinity profile in the Baltic Sea 496 zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_ b(ji) - sss_m(ii,ij) ) )496 zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_1d(ji) - sss_m(ii,ij) ) ) 497 497 ! 498 zalpha = ( zind0 + zind01 * ( sm_i_ b(ji) * dummy_fac0 + dummy_fac1 ) ) * ( 1.0 - zindbal )498 zalpha = ( zind0 + zind01 * ( sm_i_1d(ji) * dummy_fac0 + dummy_fac1 ) ) * ( 1.0 - zindbal ) 499 499 ! 500 zs_zero = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * ht_i_ b(ji) * dummy_fac2500 zs_zero = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * ht_i_1d(ji) * dummy_fac2 501 501 ! weighting the profile 502 s_i_ b(ji,jk) = zalpha * zs_zero + ( 1._wp - zalpha ) * sm_i_b(ji)502 s_i_1d(ji,jk) = zalpha * zs_zero + ( 1._wp - zalpha ) * sm_i_1d(ji) 503 503 END DO ! ji 504 504 END DO ! jk … … 512 512 IF( num_sal == 3 ) THEN ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 513 513 ! 514 sm_i_ b(:) = 2.30_wp514 sm_i_1d(:) = 2.30_wp 515 515 ! 516 516 !CDIR NOVERRCHK … … 519 519 zsal = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) ) ) 520 520 DO ji = kideb, kiut 521 s_i_ b(ji,jk) = zsal521 s_i_1d(ji,jk) = zsal 522 522 END DO 523 523 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r4900 r4902 298 298 !!---------------------------------------------------------------------- 299 299 300 CALL histdef( kid, "iicethic", "Ice thickness" , "m" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 301 CALL histdef( kid, "iiceconc", "Ice concentration" , "%" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 302 CALL histdef( kid, "iicetemp", "Ice temperature" , "C" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 303 CALL histdef( kid, "iicevelu", "i-Ice speed (I-point)" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 304 CALL histdef( kid, "iicevelv", "j-Ice speed (I-point)" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 305 CALL histdef( kid, "iicestru", "i-Wind stress over ice (I-pt)", "Pa", jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 306 CALL histdef( kid, "iicestrv", "j-Wind stress over ice (I-pt)", "Pa", jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 307 CALL histdef( kid, "iicesflx", "Solar flux over ocean" , "w/m2" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 308 CALL histdef( kid, "iicenflx", "Non-solar flux over ocean" , "w/m2" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 309 CALL histdef( kid, "isnowpre", "Snow precipitation" , "kg/m2/s", jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 310 CALL histdef( kid, "iicesali", "Ice salinity" , "PSU" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 311 CALL histdef( kid, "iicevolu", "Ice volume" , "m" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 312 CALL histdef( kid, "iicedive", "Ice divergence" , "10-8s-1", jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 313 CALL histdef( kid, "iicebopr", "Ice bottom production" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 314 CALL histdef( kid, "iicedypr", "Ice dynamic production" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 315 CALL histdef( kid, "iicelapr", "Ice open water prod" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 316 CALL histdef( kid, "iicesipr", "Snow ice production " , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 317 CALL histdef( kid, "iicerepr", "Ice prod from limupdate" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 318 CALL histdef( kid, "iicebome", "Ice bottom melt" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 319 CALL histdef( kid, "iicesume", "Ice surface melt" , "m/s" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 320 CALL histdef( kid, "iisfxdyn", "Salt flux from dynmics" , "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 321 CALL histdef( kid, "iisfxres", "Salt flux from limupdate", "" , jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 300 CALL histdef( kid, "iicethic", "Ice thickness" , "m" , & 301 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 302 CALL histdef( kid, "iiceconc", "Ice concentration" , "%" , & 303 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 304 CALL histdef( kid, "iicetemp", "Ice temperature" , "C" , & 305 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 306 CALL histdef( kid, "iicevelu", "i-Ice speed (I-point)" , "m/s" , & 307 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 308 CALL histdef( kid, "iicevelv", "j-Ice speed (I-point)" , "m/s" , & 309 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 310 CALL histdef( kid, "iicestru", "i-Wind stress over ice (I-pt)", "Pa", & 311 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 312 CALL histdef( kid, "iicestrv", "j-Wind stress over ice (I-pt)", "Pa", & 313 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 314 CALL histdef( kid, "iicesflx", "Solar flux over ocean" , "w/m2" , & 315 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 316 CALL histdef( kid, "iicenflx", "Non-solar flux over ocean" , "w/m2" , & 317 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 318 CALL histdef( kid, "isnowpre", "Snow precipitation" , "kg/m2/s", & 319 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 320 CALL histdef( kid, "iicesali", "Ice salinity" , "PSU" , & 321 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 322 CALL histdef( kid, "iicevolu", "Ice volume" , "m" , & 323 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 324 CALL histdef( kid, "iicedive", "Ice divergence" , "10-8s-1", & 325 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 326 CALL histdef( kid, "iicebopr", "Ice bottom production" , "m/s" , & 327 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 328 CALL histdef( kid, "iicedypr", "Ice dynamic production" , "m/s" , & 329 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 330 CALL histdef( kid, "iicelapr", "Ice open water prod" , "m/s" , & 331 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 332 CALL histdef( kid, "iicesipr", "Snow ice production " , "m/s" , & 333 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 334 CALL histdef( kid, "iicerepr", "Ice prod from limupdate" , "m/s" , & 335 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 336 CALL histdef( kid, "iicebome", "Ice bottom melt" , "m/s" , & 337 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 338 CALL histdef( kid, "iicesume", "Ice surface melt" , "m/s" , & 339 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 340 CALL histdef( kid, "iisfxdyn", "Salt flux from dynmics" , "" , & 341 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 342 CALL histdef( kid, "iisfxres", "Salt flux from limupdate", "" , & 343 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 322 344 323 345 CALL histend( kid, snc4set ) ! end of the file definition -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/par_ice.F90
r4900 r4902 12 12 13 13 ! !!! ice thermodynamics 14 INTEGER, PUBLIC, PARAMETER :: jkmax = 6 !: maximum number of ice layers15 14 INTEGER, PUBLIC, PARAMETER :: nlay_i = 5 !: number of ice layers 16 15 INTEGER, PUBLIC, PARAMETER :: nlay_s = 1 !: number of snow layers … … 18 17 ! !!! ice mechanical redistribution 19 18 INTEGER, PUBLIC, PARAMETER :: jpl = 5 !: number of ice categories 20 INTEGER, PUBLIC, PARAMETER :: jpm = 1 !: number of ice types21 19 22 20 !!---------------------------------------------------------------------- -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r4901 r4902 34 34 !!----------------------------- 35 35 !: In ice thermodynamics, to spare memory, the vectors are folded 36 !: from 1D to 2D vectors. The following variables, with ending _1d (or _b)36 !: from 1D to 2D vectors. The following variables, with ending _1d 37 37 !: are the variables corresponding to 2d vectors 38 38 … … 40 40 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: npac !: correspondance between points (lateral accretion) 41 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qlead_1d !: <==> the 2D qlead43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ftr_ice_1d !: <==> the 2D ftr_ice44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qsr_ice_1d !: <==> the 2D qsr_ice45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fr1_i0_1d !: <==> the 2D fr1_i046 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fr2_i0_1d !: <==> the 2D fr2_i047 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qns_ice_1d !: <==> the 2D qns_ice48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_bo_ b !: <==> the 2D t_bo42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qlead_1d 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ftr_ice_1d 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qsr_ice_1d 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fr1_i0_1d 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fr2_i0_1d 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qns_ice_1d 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_bo_1d 49 49 50 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_sum_1d … … 65 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hfx_res_1d 66 66 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_ice_1d !: <==> the 2D wfx_ice 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_snw_1d !: <==> the 2D wfx_snw 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sub_1d !: <==> the 2D wfx_sub 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_snw_1d 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sub_1d 70 69 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_bog_1d !: <==> the 2D wfx_ice72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_bom_1d !: <==> the 2D wfx_ice73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sum_1d !: <==> the 2D wfx_ice74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sni_1d !: <==> the 2D wfx_ice75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_opw_1d !: <==> the 2D wfx_ice76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_res_1d !: <==> the 2D wfx_ice77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_spr_1d !: <==> the 2D wfx_ice70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_bog_1d 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_bom_1d 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sum_1d 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_sni_1d 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_opw_1d 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_res_1d 76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: wfx_spr_1d 78 77 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bri_1d !: <==> the 2D sfx_bri80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bog_1d !:81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bom_1d !:82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_sum_1d !:83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_sni_1d !:84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_opw_1d !:85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_res_1d !:78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bri_1d 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bog_1d 80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_bom_1d 81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_sum_1d 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_sni_1d 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_opw_1d 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sfx_res_1d 86 85 87 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sprecip_1d !: <==> the 2D sprecip 88 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: frld_1d !: <==> the 2D frld 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_ b!: <==> the 2D at_i90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhtur_1d 88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_1d !: <==> the 2D at_i 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhtur_1d !: <==> the 2D fhtur 91 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhld_1d !: <==> the 2D fhld 92 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dqns_ice_1d !: <==> the 2D dqns_ice … … 100 99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dsm_i_se_1d !: Ice salinity variations due to basal salt entrapment 101 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dsm_i_si_1d !: Ice salinity variations due to lateral accretion 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hicol_ b !: Ice collection thickness accumulated in fleads101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: hicol_1d !: Ice collection thickness accumulated in leads 103 102 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_su_ b!: <==> the 2D t_su105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_i_ b!: <==> the 2D a_i106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ht_i_ b!: <==> the 2D ht_s107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ht_s_ b!: <==> the 2D ht_i108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_su !: Surface Conduction flux109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_bo_i !: Bottom Conduction flux110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_s_tot !: Snow accretion/ablation [m]111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_surf !: Ice surface accretion/ablation [m]112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bott !: Ice bottom accretion/ablation [m]113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_snowice !: Snow ice formation [m of ice]114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sm_i_ b!: Ice bulk salinity [ppt]115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: s_i_new !: Salinity of new ice at the bottom103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: t_su_1d !: <==> the 2D t_su 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: a_i_1d !: <==> the 2D a_i 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ht_i_1d !: <==> the 2D ht_s 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ht_s_1d !: <==> the 2D ht_i 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_su !: Surface Conduction flux 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fc_bo_i !: Bottom Conduction flux 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_s_tot !: Snow accretion/ablation [m] 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_surf !: Ice surface accretion/ablation [m] 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bott !: Ice bottom accretion/ablation [m] 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_snowice !: Snow ice formation [m of ice] 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sm_i_1d !: Ice bulk salinity [ppt] 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: s_i_new !: Salinity of new ice at the bottom 116 115 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_s_ b!: corresponding to the 2D var t_s118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_i_ b!: corresponding to the 2D var t_i119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: s_i_ b!: profiled ice salinity120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_i_ b!: Ice enthalpy per unit volume121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_s_ b!: Snow enthalpy per unit volume116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_s_1d !: corresponding to the 2D var t_s 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_i_1d !: corresponding to the 2D var t_i 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: s_i_1d !: profiled ice salinity 119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_i_1d !: Ice enthalpy per unit volume 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_s_1d !: Snow enthalpy per unit volume 122 121 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qh_i_old 124 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_i_old 122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qh_i_old !: ice heat content (q*h, J.m-2) 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_i_old !: ice thickness layer (m) 125 124 126 125 INTEGER , PUBLIC :: jiindex_1d ! 1D index of debugging point … … 146 145 & qsr_ice_1d (jpij) , & 147 146 & fr1_i0_1d(jpij) , fr2_i0_1d(jpij) , qns_ice_1d(jpij) , & 148 & t_bo_b (jpij) , & 149 & hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) ,hfx_dif_1d(jpij) ,hfx_opw_1d(jpij) , & 147 & t_bo_1d (jpij) , & 148 & hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) , & 149 & hfx_dif_1d(jpij) ,hfx_opw_1d(jpij) , & 150 150 & hfx_thd_1d(jpij) , hfx_spr_1d(jpij) , & 151 & hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , hfx_res_1d(jpij) , hfx_err_rem_1d(jpij), STAT=ierr(1) ) 151 & hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , & 152 & hfx_res_1d(jpij) , hfx_err_rem_1d(jpij), STAT=ierr(1) ) 152 153 ! 153 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) , at_i_b (jpij) , & 154 & fhtur_1d (jpij) , wfx_ice_1d (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) , & 155 & fhld_1d (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d(jpij) , wfx_bom_1d(jpij) , wfx_sum_1d(jpij) , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) , wfx_res_1d (jpij) , & 154 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) , at_i_1d (jpij) , & 155 & fhtur_1d (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) , & 156 & fhld_1d (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d(jpij) , wfx_bom_1d(jpij) , & 157 & wfx_sum_1d(jpij) , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) , wfx_res_1d (jpij) , & 156 158 & dqns_ice_1d(jpij) , qla_ice_1d (jpij) , dqla_ice_1d(jpij) , & 157 159 & tatm_ice_1d(jpij) , & 158 160 & i0 (jpij) , & 159 & sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) ,sfx_sum_1d (jpij) ,sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) , & 161 & sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) ,sfx_sum_1d (jpij) , & 162 & sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) , & 160 163 & dsm_i_fl_1d(jpij) , dsm_i_gd_1d(jpij) , dsm_i_se_1d(jpij) , & 161 & dsm_i_si_1d(jpij) , hicol_ b(jpij) , STAT=ierr(2) )164 & dsm_i_si_1d(jpij) , hicol_1d (jpij) , STAT=ierr(2) ) 162 165 ! 163 ALLOCATE( t_su_ b (jpij) , a_i_b (jpij) , ht_i_b(jpij) , &164 & ht_s_ b(jpij) , fc_su (jpij) , fc_bo_i (jpij) , &166 ALLOCATE( t_su_1d (jpij) , a_i_1d (jpij) , ht_i_1d (jpij) , & 167 & ht_s_1d (jpij) , fc_su (jpij) , fc_bo_i (jpij) , & 165 168 & dh_s_tot (jpij) , dh_i_surf(jpij) , dh_i_bott(jpij) , & 166 & dh_snowice(jpij) , sm_i_ b(jpij) , s_i_new (jpij) , &167 & t_s_ b(jpij,nlay_s), &168 & t_i_ b(jpij,jkmax), s_i_b(jpij,jkmax) , &169 & q_i_ b(jpij,jkmax), q_s_b(jpij,jkmax) , &170 & qh_i_old(jpij,0: jkmax), h_i_old(jpij,0:jkmax) , STAT=ierr(3))169 & dh_snowice(jpij) , sm_i_1d (jpij) , s_i_new (jpij) , & 170 & t_s_1d(jpij,nlay_s), & 171 & t_i_1d(jpij,nlay_i+1), s_i_1d(jpij,nlay_i+1) , & 172 & q_i_1d(jpij,nlay_i+1), q_s_1d(jpij,nlay_i+1) , & 173 & qh_i_old(jpij,0:nlay_i+1), h_i_old(jpij,0:nlay_i+1) , STAT=ierr(3)) 171 174 ! 172 175 thd_ice_alloc = MAXVAL( ierr ) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
r4897 r4902 51 51 USE trcnam 52 52 USE trcrst 53 USE diaptr ! Need to initialise this as some variables are used in if statements later 53 54 54 55 IMPLICIT NONE … … 298 299 ! ! Passive tracers 299 300 CALL trc_init ! Passive tracers initialization 300 301 ! 302 ! Initialise diaptr as some variables are used in if statements later (in 303 ! various advection and diffusion routines. 304 CALL dia_ptr_init 305 ! 301 306 IF(lwp) WRITE(numout,cform_aaa) ! Flag AAAAAAA 302 307 ! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r4900 r4902 24 24 USE par_ice_2 25 25 USE ice_2 ! LIM_2 ice variables 26 USE dom_ice_2 ! sea-ice domain 26 27 #elif defined key_lim3 27 28 USE par_ice 28 29 USE ice ! LIM_3 ice variables 30 USE dom_ice ! sea-ice domain 29 31 #endif 30 32 USE par_oce ! ocean parameters 31 33 USE dom_oce ! ocean space and time domain variables 32 USE dom_ice ! sea-ice domain33 34 USE sbc_oce ! Surface boundary condition: ocean fields 34 35 USE bdy_oce ! ocean open boundary conditions -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r4897 r4902 418 418 DO ib_bdy = 1,nb_bdy 419 419 420 ! line below should be simplified (runoff case)421 !! CHANUT: TO BE SORTED OUT422 !! IF (( nn_dyn2d_dta(ib_bdy) .ge. 2 ).AND.(nn_tra(ib_bdy).NE.4)) THEN423 420 IF ( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN 424 421 … … 453 450 IF ( PRESENT(kit) ) THEN 454 451 IF ( lk_first_btstp ) THEN ! Save slow varying open boundary data: 455 dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy(ib_bdy)%ssh(1:ilen0(1))456 dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy(ib_bdy)%u2d(1:ilen0(2))457 dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy(ib_bdy)%v2d(1:ilen0(3))452 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy(ib_bdy)%ssh(1:ilen0(1)) 453 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy(ib_bdy)%u2d(1:ilen0(2)) 454 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy(ib_bdy)%v2d(1:ilen0(3)) 458 455 459 456 ELSE ! Initialize arrays from slow varying open boundary data: 460 dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1))461 dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2))462 dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3))457 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) 458 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) 459 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) 463 460 ENDIF 464 461 ENDIF … … 471 468 z_sist = zramp * SIN( z_sarg ) 472 469 ! 473 igrd=1 ! SSH on tracer grid 474 DO ib = 1, ilen0(igrd) 475 dta_bdy(ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + & 476 & ( tides(ib_bdy)%ssh(ib,itide,1)*z_cost + & 477 & tides(ib_bdy)%ssh(ib,itide,2)*z_sist ) 478 END DO 479 ! 480 igrd=2 ! U grid 481 DO ib = 1, ilen0(igrd) 482 dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) + & 483 & ( tides(ib_bdy)%u(ib,itide,1)*z_cost + & 484 & tides(ib_bdy)%u(ib,itide,2)*z_sist ) 485 END DO 486 ! 487 igrd=3 ! V grid 488 DO ib = 1, ilen0(igrd) 489 dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) + & 490 & ( tides(ib_bdy)%v(ib,itide,1)*z_cost + & 491 & tides(ib_bdy)%v(ib,itide,2)*z_sist ) 492 END DO 493 END DO 470 IF ( dta_bdy(ib_bdy)%ll_ssh ) THEN 471 igrd=1 ! SSH on tracer grid 472 DO ib = 1, ilen0(igrd) 473 dta_bdy(ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + & 474 & ( tides(ib_bdy)%ssh(ib,itide,1)*z_cost + & 475 & tides(ib_bdy)%ssh(ib,itide,2)*z_sist ) 476 END DO 477 ENDIF 478 ! 479 IF ( dta_bdy(ib_bdy)%ll_u2d ) THEN 480 igrd=2 ! U grid 481 DO ib = 1, ilen0(igrd) 482 dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) + & 483 & ( tides(ib_bdy)%u(ib,itide,1)*z_cost + & 484 & tides(ib_bdy)%u(ib,itide,2)*z_sist ) 485 END DO 486 ENDIF 487 ! 488 IF ( dta_bdy(ib_bdy)%ll_v2d ) THEN 489 igrd=3 ! V grid 490 DO ib = 1, ilen0(igrd) 491 dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) + & 492 & ( tides(ib_bdy)%v(ib,itide,1)*z_cost + & 493 & tides(ib_bdy)%v(ib,itide,2)*z_sist ) 494 END DO 495 ENDIF 496 END DO 494 497 END IF 495 498 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r4901 r4902 45 45 USE diadimg ! dimg direct access file format output 46 46 USE diaar5, ONLY : lk_diaar5 47 USE dynadv, ONLY : ln_dynadv_vec48 47 USE iom 49 48 USE ioipsl … … 129 128 REAL(wp) :: zztmp, zztmpx, zztmpy ! 130 129 !! 131 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 130 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 131 REAL(wp), POINTER, DIMENSION(:,:) :: z2ds ! 2D workspace 132 132 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d ! 3D workspace 133 133 !!---------------------------------------------------------------------- … … 135 135 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 136 136 ! 137 CALL wrk_alloc( jpi , jpj , z2d )137 CALL wrk_alloc( jpi , jpj , z2d , z2ds ) 138 138 CALL wrk_alloc( jpi , jpj, jpk , z3d ) 139 139 ! … … 192 192 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 193 193 194 ! clem: heat and salt content 195 z2d(:,:) = 0._wp 196 z2ds(:,:) = 0._wp 197 DO jk = 1, jpkm1 198 DO jj = 2, jpjm1 199 DO ji = fs_2, fs_jpim1 ! vector opt. 200 z2d(ji,jj) = z2d(ji,jj) + rau0 * rcp * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 201 z2ds(ji,jj) = z2ds(ji,jj) + rau0 * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 202 END DO 203 END DO 204 END DO 205 CALL lbc_lnk( z2d, 'T', 1. ) 206 CALL lbc_lnk( z2ds, 'T', 1. ) 207 CALL iom_put( "heatc", z2d ) ! vertically integrated heat content (J/m2) 208 CALL iom_put( "saltc", z2ds ) ! vertically integrated salt content (PSU*kg/m2) 209 210 ! 211 rke(:,:,jk) = 0._wp ! kinetic energy 212 DO jk = 1, jpkm1 213 DO jj = 2, jpjm1 214 DO ji = fs_2, fs_jpim1 ! vector opt. 215 zztmp = 1._wp / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 216 zztmpx = 0.5 * ( un(ji-1,jj,jk) * un(ji-1,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) & 217 & + un(ji ,jj,jk) * un(ji ,jj,jk) * e2u(ji ,jj) * fse3u(ji ,jj,jk) ) & 218 & * zztmp 219 ! 220 zztmpy = 0.5 * ( vn(ji,jj-1,jk) * vn(ji,jj-1,jk) * e1v(ji,jj-1) * fse3v(ji,jj-1,jk) & 221 & + vn(ji,jj ,jk) * vn(ji,jj ,jk) * e1v(ji,jj ) * fse3v(ji,jj ,jk) ) & 222 & * zztmp 223 ! 224 rke(ji,jj,jk) = 0.5_wp * ( zztmpx + zztmpy ) 225 ! 226 ENDDO 227 ENDDO 228 ENDDO 229 CALL lbc_lnk( rke, 'T', 1. ) 230 CALL iom_put( "eken", rke ) 231 194 232 IF( lk_diaar5 ) THEN 195 233 z3d(:,:,jpk) = 0.e0 196 234 DO jk = 1, jpkm1 197 z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) 235 z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 198 236 END DO 199 237 CALL iom_put( "u_masstr", z3d ) ! mass transport in i-direction 238 200 239 zztmp = 0.5 * rcp 201 240 z2d(:,:) = 0.e0 241 z2ds(:,:) = 0.e0 202 242 DO jk = 1, jpkm1 203 243 DO jj = 2, jpjm1 204 244 DO ji = fs_2, fs_jpim1 ! vector opt. 205 245 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 246 z2ds(ji,jj) = z2ds(ji,jj) + z3d(ji,jj,jk) * 0.5_wp * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 206 247 END DO 207 248 END DO 208 249 END DO 209 250 CALL lbc_lnk( z2d, 'U', -1. ) 251 CALL lbc_lnk( z2ds, 'U', -1. ) 210 252 CALL iom_put( "u_heattr", z2d ) ! heat transport in i-direction 253 CALL iom_put( "u_salttr", z2ds ) ! salt transport in i-direction 254 255 z3d(:,:,jpk) = 0.e0 211 256 DO jk = 1, jpkm1 212 z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) 257 z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) 213 258 END DO 214 259 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction 260 215 261 z2d(:,:) = 0.e0 262 z2ds(:,:) = 0.e0 216 263 DO jk = 1, jpkm1 217 264 DO jj = 2, jpjm1 218 265 DO ji = fs_2, fs_jpim1 ! vector opt. 219 266 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 267 z2ds(ji,jj) = z2ds(ji,jj) + z3d(ji,jj,jk) * 0.5_wp * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 220 268 END DO 221 269 END DO 222 270 END DO 223 271 CALL lbc_lnk( z2d, 'V', -1. ) 224 CALL iom_put( "v_heattr", z2d ) ! heat transport in i-direction 225 ENDIF 226 ! 227 CALL wrk_dealloc( jpi , jpj , z2d ) 272 CALL lbc_lnk( z2ds, 'V', -1. ) 273 CALL iom_put( "v_heattr", z2d ) ! heat transport in j-direction 274 CALL iom_put( "v_salttr", z2ds ) ! salt transport in j-direction 275 ENDIF 276 ! 277 CALL wrk_dealloc( jpi , jpj , z2d , z2ds ) 228 278 CALL wrk_dealloc( jpi , jpj, jpk , z3d ) 229 279 ! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r4897 r4902 808 808 id3 = iom_varid( numror, 'tilde_e3t_b', ldstop = .FALSE. ) 809 809 id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 810 id5 = iom_varid( numror, 'hdi f_lf', ldstop = .FALSE. )810 id5 = iom_varid( numror, 'hdiv_lf', ldstop = .FALSE. ) 811 811 ! ! --------- ! 812 812 ! ! all cases ! -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r4900 r4902 44 44 USE agrif_opa_interp ! agrif 45 45 #endif 46 46 #if defined key_asminc 47 USE asminc ! Assimilation increment 48 #endif 47 49 48 50 IMPLICIT NONE … … 455 457 ! ! ==================== ! 456 458 ! Initialize barotropic variables: 457 IF( kt==nit000 .AND. .NOT. ln_rstart )THEN459 IF( ll_init )THEN 458 460 sshbb_e(:,:) = 0._wp 459 461 ubb_e (:,:) = 0._wp -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r4897 r4902 2084 2084 IF (l_isend) THEN 2085 2085 DO jr = 1,nsndto 2086 IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 2086 IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN 2087 CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 2088 ENDIF 2087 2089 END DO 2088 2090 ENDIF -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r4897 r4902 208 208 !----------------------------------------------------------------------- 209 209 210 !Initalise all values in namelist arrays 211 enactfiles(:) = '' 212 coriofiles(:) = '' 213 profbfiles(:) = '' 214 slafilesact(:) = '' 215 slafilespas(:) = '' 216 slafbfiles(:) = '' 217 sstfiles(:) = '' 218 sstfbfiles(:) = '' 219 seaicefiles(:) = '' 210 220 velcurfiles(:) = '' 211 221 veladcpfiles(:) = '' 222 velavcurfiles(:) = '' 223 velhrcurfiles(:) = '' 224 velavadcpfiles(:) = '' 225 velhradcpfiles(:) = '' 226 velfbfiles(:) = '' 227 velcurfiles(:) = '' 228 veladcpfiles(:) = '' 229 endailyavtypes(:) = -1 230 endailyavtypes(1) = 820 231 ln_profb_ena(:) = .FALSE. 232 ln_profb_enatim(:) = .TRUE. 233 ln_velfb_av(:) = .FALSE. 234 ln_ignmis = .FALSE. 212 235 CALL ini_date( dobsini ) 213 236 CALL fin_date( dobsend ) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r4897 r4902 473 473 ! forcing record : 1 474 474 ! 475 ztmp = REAL( nday, wp ) / REAL( nyear_len(1), wp ) + 0.5 + REAL( it_offset, wp ) 475 ztmp = REAL( nsec_year, wp ) / ( REAL( nyear_len(1), wp ) * rday ) + 0.5 & 476 & + REAL( it_offset, wp ) / ( REAL( nyear_len(1), wp ) * rday ) 476 477 sdjf%nrec_a(1) = 1 + INT( ztmp ) - COUNT((/llbefore/)) 477 478 ! swap at the middle of the year 478 IF( llbefore ) THEN ; sdjf%nrec_a(2) = nsec1jan000 - NINT(0.5 * rday) * nyear_len(0) 479 ELSE ; sdjf%nrec_a(2) = nsec1jan000 + NINT(0.5 * rday) * nyear_len(1) 479 IF( llbefore ) THEN ; sdjf%nrec_a(2) = nsec1jan000 - (1 - INT(ztmp)) * NINT(0.5 * rday) * nyear_len(0) + & 480 & INT(ztmp) * NINT( 0.5 * rday) * nyear_len(1) 481 ELSE ; sdjf%nrec_a(2) = nsec1jan000 + (1 - INT(ztmp)) * NINT(0.5 * rday) * nyear_len(1) + & 482 & INT(ztmp) * INT(rday) * nyear_len(1) + INT(ztmp) * NINT( 0.5 * rday) * nyear_len(2) 480 483 ENDIF 481 484 ELSE ! no time interpolation … … 501 504 ! forcing record : nmonth 502 505 ! 503 ztmp = REAL( nday, wp ) / REAL( nmonth_len(nmonth), wp ) + 0.5 + REAL( it_offset, wp ) 506 ztmp = REAL( nsec_month, wp ) / ( REAL( nmonth_len(nmonth), wp ) * rday ) + 0.5 & 507 & + REAL( it_offset, wp ) / ( REAL( nmonth_len(nmonth), wp ) * rday ) 504 508 imth = nmonth + INT( ztmp ) - COUNT((/llbefore/)) 505 509 IF( sdjf%cltype == 'monthly' ) THEN ; sdjf%nrec_a(1) = 1 + INT( ztmp ) - COUNT((/llbefore/)) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r4900 r4902 160 160 IF( lk_cpl ) THEN 161 161 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) & 162 & CALL wrk_alloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 162 & CALL wrk_alloc( jpi, jpj, ztem_ice_all , zalb_ice_all , z_qsr_ice_all, z_qns_ice_all, & 163 & z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 163 164 ENDIF 164 165 … … 288 289 ! 289 290 ! ! Store previous ice values 290 !!gm : remark old_... should becomes ...b as tn versus tb 291 old_a_i (:,:,:) = a_i (:,:,:) ! ice area 292 old_e_i (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 293 old_v_i (:,:,:) = v_i (:,:,:) ! ice volume 294 old_v_s (:,:,:) = v_s (:,:,:) ! snow volume 295 old_e_s (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 296 old_smv_i(:,:,:) = smv_i(:,:,:) ! salt content 297 old_oa_i (:,:,:) = oa_i (:,:,:) ! areal age content 298 old_u_ice(:,:) = u_ice(:,:) 299 old_v_ice(:,:) = v_ice(:,:) 291 a_i_b (:,:,:) = a_i (:,:,:) ! ice area 292 e_i_b (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 293 v_i_b (:,:,:) = v_i (:,:,:) ! ice volume 294 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 295 e_s_b (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 296 smv_i_b(:,:,:) = smv_i(:,:,:) ! salt content 297 oa_i_b (:,:,:) = oa_i (:,:,:) ! areal age content 298 u_ice_b(:,:) = u_ice(:,:) 299 v_ice_b(:,:) = v_ice(:,:) 300 300 301 301 ! trends !!gm is it truly necessary ??? … … 311 311 ! salt, heat and mass fluxes 312 312 sfx (:,:) = 0._wp ; 313 sfx_bri(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp313 sfx_bri(:,:) = 0._wp ; 314 314 sfx_sni(:,:) = 0._wp ; sfx_opw(:,:) = 0._wp 315 315 sfx_bog(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp … … 370 370 ENDIF 371 371 ! !- Change old values for new values 372 old_u_ice(:,:) = u_ice(:,:)373 old_v_ice(:,:) = v_ice(:,:)374 old_a_i(:,:,:) = a_i(:,:,:)375 old_v_s(:,:,:) = v_s(:,:,:)376 old_v_i(:,:,:) = v_i(:,:,:)377 old_e_s(:,:,:,:) = e_s(:,:,:,:)378 old_e_i(:,:,:,:) = e_i(:,:,:,:)379 o ld_oa_i(:,:,:) = oa_i(:,:,:)380 old_smv_i(:,:,:) = smv_i(:,:,:)372 u_ice_b(:,:) = u_ice(:,:) 373 v_ice_b(:,:) = v_ice(:,:) 374 a_i_b (:,:,:) = a_i (:,:,:) 375 v_s_b (:,:,:) = v_s (:,:,:) 376 v_i_b (:,:,:) = v_i (:,:,:) 377 e_s_b (:,:,:,:) = e_s (:,:,:,:) 378 e_i_b (:,:,:,:) = e_i (:,:,:,:) 379 oa_i_b (:,:,:) = oa_i (:,:,:) 380 smv_i_b(:,:,:) = smv_i(:,:,:) 381 381 382 382 ! ---------------------------------------------- … … 434 434 IF( lk_cpl ) THEN 435 435 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) & 436 & CALL wrk_dealloc( jpi,jpj, ztem_ice_all, zalb_ice_all, z_qsr_ice_all, z_qns_ice_all, z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 436 & CALL wrk_dealloc( jpi, jpj, ztem_ice_all , zalb_ice_all , z_qsr_ice_all, z_qns_ice_all, & 437 & z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 437 438 ENDIF 438 439 ! … … 471 472 !WRITE(numout,*) ' at_i ', at_i(ji,jj) 472 473 !WRITE(numout,*) ' Point - category', ji, jj, jl 473 !WRITE(numout,*) ' a_i *** a_i_ old ', a_i (ji,jj,jl), old_a_i(ji,jj,jl)474 !WRITE(numout,*) ' v_i *** v_i_ old ', v_i (ji,jj,jl), old_v_i(ji,jj,jl)474 !WRITE(numout,*) ' a_i *** a_i_b ', a_i (ji,jj,jl), a_i_b (ji,jj,jl) 475 !WRITE(numout,*) ' v_i *** v_i_b ', v_i (ji,jj,jl), v_i_b (ji,jj,jl) 475 476 !WRITE(numout,*) ' d_a_i_thd/trp ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl) 476 477 !WRITE(numout,*) ' d_v_i_thd/trp ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl) … … 582 583 !DO jl = 1, jpl 583 584 !WRITE(numout,*) ' Category no: ', jl 584 !WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' old_a_i : ', old_a_i(ji,jj,jl)585 !WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' a_i_b : ', a_i_b (ji,jj,jl) 585 586 !WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 586 !WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' old_v_i : ', old_v_i(ji,jj,jl)587 !WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' v_i_b : ', v_i_b (ji,jj,jl) 587 588 !WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 588 589 !WRITE(numout,*) ' ' … … 760 761 WRITE(numout,*) ' strength : ', strength(ji,jj) 761 762 WRITE(numout,*) ' d_u_ice_dyn : ', d_u_ice_dyn(ji,jj), ' d_v_ice_dyn : ', d_v_ice_dyn(ji,jj) 762 WRITE(numout,*) ' old_u_ice : ', old_u_ice(ji,jj) , ' old_v_ice : ', old_v_ice(ji,jj)763 WRITE(numout,*) ' u_ice_b : ', u_ice_b(ji,jj) , ' v_ice_b : ', v_ice_b(ji,jj) 763 764 WRITE(numout,*) 764 765 … … 770 771 WRITE(numout,*) ' t_su : ', t_su(ji,jj,jl) , ' t_s : ', t_s(ji,jj,1,jl) 771 772 WRITE(numout,*) ' sm_i : ', sm_i(ji,jj,jl) , ' o_i : ', o_i(ji,jj,jl) 772 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' old_a_i : ', old_a_i(ji,jj,jl)773 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' a_i_b : ', a_i_b(ji,jj,jl) 773 774 WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 774 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' old_v_i : ', old_v_i(ji,jj,jl)775 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' v_i_b : ', v_i_b(ji,jj,jl) 775 776 WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 776 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' old_v_s : ', old_v_s(ji,jj,jl)777 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' v_s_b : ', v_s_b(ji,jj,jl) 777 778 WRITE(numout,*) ' d_v_s_trp : ', d_v_s_trp(ji,jj,jl) , ' d_v_s_thd : ', d_v_s_thd(ji,jj,jl) 778 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl)/1.0e9 , ' old_ei1 : ', old_e_i(ji,jj,1,jl)/1.0e9779 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl)/1.0e9 , ' ei1 : ', e_i_b(ji,jj,1,jl)/1.0e9 779 780 WRITE(numout,*) ' de_i1_trp : ', d_e_i_trp(ji,jj,1,jl)/1.0e9, ' de_i1_thd : ', d_e_i_thd(ji,jj,1,jl)/1.0e9 780 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl)/1.0e9 , ' old_ei2 : ', old_e_i(ji,jj,2,jl)/1.0e9781 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl)/1.0e9 , ' ei2_b : ', e_i_b(ji,jj,2,jl)/1.0e9 781 782 WRITE(numout,*) ' de_i2_trp : ', d_e_i_trp(ji,jj,2,jl)/1.0e9, ' de_i2_thd : ', d_e_i_thd(ji,jj,2,jl)/1.0e9 782 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' old_e_snow : ', old_e_s(ji,jj,1,jl)783 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' e_snow_b : ', e_s_b(ji,jj,1,jl) 783 784 WRITE(numout,*) ' d_e_s_trp : ', d_e_s_trp(ji,jj,1,jl) , ' d_e_s_thd : ', d_e_s_thd(ji,jj,1,jl) 784 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) , ' old_smv_i : ', old_smv_i(ji,jj,jl)785 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) , ' smv_i_b : ', smv_i_b(ji,jj,jl) 785 786 WRITE(numout,*) ' d_smv_i_trp: ', d_smv_i_trp(ji,jj,jl) , ' d_smv_i_thd: ', d_smv_i_thd(ji,jj,jl) 786 WRITE(numout,*) ' oa_i : ', oa_i(ji,jj,jl) , ' o ld_oa_i : ', old_oa_i(ji,jj,jl)787 WRITE(numout,*) ' oa_i : ', oa_i(ji,jj,jl) , ' oa_i_b : ', oa_i_b(ji,jj,jl) 787 788 WRITE(numout,*) ' d_oa_i_trp : ', d_oa_i_trp(ji,jj,jl) , ' d_oa_i_thd : ', d_oa_i_thd(ji,jj,jl) 788 789 END DO !jl … … 792 793 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 793 794 WRITE(numout,*) ' - Heat fluxes in and out the ice ***' 794 WRITE(numout,*) ' qsr_ini : ', pfrld(ji,jj) * qsr(ji,jj) + SUM( old_a_i(ji,jj,:) * qsr_ice(ji,jj,:) )795 WRITE(numout,*) ' qns_ini : ', pfrld(ji,jj) * qns(ji,jj) + SUM( old_a_i(ji,jj,:) * qns_ice(ji,jj,:) )795 WRITE(numout,*) ' qsr_ini : ', pfrld(ji,jj) * qsr(ji,jj) + SUM( a_i_b(ji,jj,:) * qsr_ice(ji,jj,:) ) 796 WRITE(numout,*) ' qns_ini : ', pfrld(ji,jj) * qns(ji,jj) + SUM( a_i_b(ji,jj,:) * qns_ice(ji,jj,:) ) 796 797 WRITE(numout,*) 797 798 WRITE(numout,*) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r4901 r4902 53 53 USE agrif_lim2_update 54 54 # endif 55 56 #if defined key_bdy 57 USE bdyice_lim ! unstructured open boundary data (bdy_ice_lim routine) 58 #endif 55 59 56 60 IMPLICIT NONE … … 217 221 CALL lim_trp_2 ( kt ) ! Ice transport ( Advection/diffusion ) 218 222 IF( ln_limdmp ) CALL lim_dmp_2 ( kt ) ! Ice damping 223 #if defined key_bdy 224 CALL bdy_ice_lim( kt ) ! bdy ice thermo 225 #endif 219 226 END IF 220 227 ! ! Ice surface fluxes in coupled mode -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4901 r4902 180 180 181 181 fmmflx(:,:) = 0.0_wp ! freezing-melting array initialisation 182 183 taum(:,:) = 0.0_wp ! Initialise taum for use in gls in case of reduced restart 182 184 183 185 ! ! restartability -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90
r4897 r4902 203 203 ! 204 204 ! !== structure function value at uw- and vw-points ==! 205 zhu(:,:) = 1._wp / zhu(:,:) ! hu --> 1/hu 206 zhv(:,:) = 1._wp / zhv(:,:) 205 DO jj = 1, jpjm1 206 DO ji = 1, fs_jpim1 ! vector opt. 207 zhu(ji,jj) = 1._wp / zhu(ji,jj) ! hu --> 1/hu 208 zhv(ji,jj) = 1._wp / zhv(ji,jj) 209 END DO 210 END DO 211 ! 207 212 zpsi_uw(:,:,:) = 0._wp 208 213 zpsi_vw(:,:,:) = 0._wp -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r4901 r4902 129 129 IF( kt == nit000 ) THEN ! Set the forcing field at nit000 - 1 130 130 ! ! ----------------------------------- 131 qsr_hc(:,:,:) = 0.e0 132 ! 131 133 IF( ln_rstart .AND. & ! Restart: read in restart file 132 134 & iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r4897 r4902 1258 1258 en (:,:,:) = rn_emin 1259 1259 mxln(:,:,:) = 0.001 1260 avt_k (:,:,:) = avt (:,:,:) 1261 avm_k (:,:,:) = avm (:,:,:) 1262 avmu_k(:,:,:) = avmu(:,:,:) 1263 avmv_k(:,:,:) = avmv(:,:,:) 1260 1264 DO jit = nit000 + 1, nit000 + 10 ; CALL zdf_gls( jit ) ; END DO 1261 1265 ENDIF -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/oce.F90
r4901 r4902 85 85 ALLOCATE(rhd (jpi,jpj,jpk) , & 86 86 & rhop(jpi,jpj,jpk) , & 87 & rke(jpi,jpj,jpk) , & 87 88 & sshb(jpi,jpj) , sshn(jpi,jpj) , ssha(jpi,jpj) , & 88 89 & ub_b(jpi,jpj) , un_b(jpi,jpj) , ua_b(jpi,jpj) , & -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/step.F90
r4901 r4902 307 307 IF( lk_diaobs ) CALL dia_obs( kstp ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 308 308 309 IF( lrst_oce .AND. ln_diahsb ) CALL dia_hsb_rst( kstp, 'WRITE' )310 309 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 311 310 ! Control and restarts -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r4897 r4902 244 244 ztrc = ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6 245 245 #endif 246 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust *rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s246 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 247 247 zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 248 248 zscave = zfeequi * zlam1b * zstep -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r4897 r4902 163 163 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 164 164 & * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) & 165 & * ( 0. 1 + 3.9* zratio2 / ( 1.**2 + zratio2 ) )165 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 166 166 zfracfe = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 167 167 -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r4897 r4902 137 137 ! Various remineralization and excretion terms 138 138 ! -------------------------------------------- 139 zgrasrat = zgraztotf/ ( zgraztot + rtrn )140 zgrasratn = zgraztotn/ ( zgraztot + rtrn )139 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztot + rtrn ) 140 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn ) 141 141 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 142 142 zepsherv = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) -
branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r4897 r4902 35 35 REAL(wp) :: ryyss !: number of seconds per year 36 36 REAL(wp) :: r1_ryyss !: inverse of ryyss 37 REAL(wp) :: rmtss !: number of seconds per month38 37 REAL(wp) :: r1_rday !: inverse of rday 39 38 … … 85 84 IF( kt == nittrc000 .AND. jnt == 1 ) THEN 86 85 ryyss = nyear_len(1) * rday ! number of seconds per year and per month 87 rmtss = ryyss / raamo88 86 r1_rday = 1. / rday 89 87 r1_ryyss = 1. / ryyss … … 99 97 zdenit2d(:,:) = 0.e0 100 98 zbureff (:,:) = 0.e0 99 zwork1 (:,:) = 0.e0 100 zwork2 (:,:) = 0.e0 101 zwork3 (:,:) = 0.e0 102 zwork4 (:,:) = 0.e0 101 103 102 104 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 132 134 ! ! Iron and Si deposition at the surface 133 135 IF( ln_solub ) THEN 134 zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss )+ 3.e-10 * r1_ryyss136 zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 135 137 ELSE 136 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss )+ 3.e-10 * r1_ryyss138 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 137 139 ENDIF 138 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 28.1 * rmtss )139 zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 31. * rmtss )/ po4r140 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 28.1 141 zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 31. / po4r 140 142 ! ! Iron solubilization of particles in the water column 141 143 ! ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/j … … 250 252 DO jj = 1, jpj 251 253 DO ji = 1, jpi 252 ikt = mbkt(ji,jj) 254 IF( tmask(ji,jj,1) == 1 ) THEN 255 ikt = mbkt(ji,jj) 253 256 # if defined key_kriest 254 zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwscal (ji,jj)255 zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)257 zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 258 zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 256 259 # else 257 zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj)258 zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)260 zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 261 zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 259 262 # endif 260 ! For calcite, burial efficiency is made a function of saturation 261 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 262 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 263 zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 263 ! For calcite, burial efficiency is made a function of saturation 264 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 265 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 266 zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 267 ENDIF 264 268 END DO 265 269 END DO -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/BATCH_TEMPLATE/batch-x3750_ADA
r4255 r4902 65 65 # 66 66 if [ MPI_FLAG == "yes" ]; then 67 echo "Running time ${MPIRUN} ./opa "68 time ${MPIRUN} ./opa 67 echo "Running time ${MPIRUN} ./opa -procs $OCEANCORES" 68 time ${MPIRUN} ./opa -procs $OCEANCORES 69 69 else 70 70 echo "Running time ./opa" -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/iodef_sette.xml
r4242 r4902 2 2 <simulation> 3 3 4 <context id="nemo" time_origin="19 00-01-01 00:00:00" >4 <context id="nemo" time_origin="1950-01-01 00:00:00" > 5 5 6 6 <!-- $id$ --> … … 21 21 --> 22 22 23 <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="1 d" min_digits="4">23 <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="10d" min_digits="4"> 24 24 25 <file_group id="1h" output_freq="1h" output_level="10" enabled=".FALSE."/> <!-- 1h files --> 26 <file_group id="2h" output_freq="2h" output_level="10" enabled=".FALSE."/> <!-- 2h files --> 27 <file_group id="3h" output_freq="3h" output_level="10" enabled=".FALSE."/> <!-- 3h files --> 28 <file_group id="4h" output_freq="4h" output_level="10" enabled=".FALSE."/> <!-- 4h files --> 29 <file_group id="6h" output_freq="6h" output_level="10" enabled=".FALSE."/> <!-- 6h files --> 30 31 <file_group id="1d" output_freq="1d" output_level="10" enabled=".FALSE."/> <!-- 1d files --> 25 <file_group id="1ts" output_freq="1ts" output_level="10" enabled=".TRUE."/> <!-- 1 time step files --> 26 <file_group id="1h" output_freq="1h" output_level="10" enabled=".TRUE."/> <!-- 1h files --> 27 <file_group id="2h" output_freq="2h" output_level="10" enabled=".TRUE."/> <!-- 2h files --> 28 <file_group id="3h" output_freq="3h" output_level="10" enabled=".TRUE."/> <!-- 3h files --> 29 <file_group id="4h" output_freq="4h" output_level="10" enabled=".TRUE."/> <!-- 4h files --> 30 <file_group id="6h" output_freq="6h" output_level="10" enabled=".TRUE."/> <!-- 6h files --> 31 <file_group id="1d" output_freq="1d" output_level="10" enabled=".TRUE."/> <!-- 1d files --> 32 <file_group id="3d" output_freq="3d" output_level="10" enabled=".TRUE."/> <!-- 3d files --> 33 <file_group id="5d" output_freq="5d" output_level="10" enabled=".TRUE."/> <!-- 5d files --> 34 <file_group id="1m" output_freq="1mo" output_level="10" enabled=".TRUE."/> <!-- real monthly files --> 35 <file_group id="2m" output_freq="2mo" output_level="10" enabled=".TRUE."/> <!-- real 2m files --> 36 <file_group id="3m" output_freq="3mo" output_level="10" enabled=".TRUE."/> <!-- real 3m files --> 37 <file_group id="4m" output_freq="4mo" output_level="10" enabled=".TRUE."/> <!-- real 4m files --> 38 <file_group id="6m" output_freq="6mo" output_level="10" enabled=".TRUE."/> <!-- real 6m files --> 32 39 33 <file_group id="3d" output_freq="3d" output_level="10" enabled=".FALSE."/> <!-- 3d files --> 34 <file_group id="5d" output_freq="5d" output_level="10" enabled=".FALSE."/> <!-- 5d files --> 35 36 <file_group id="1m" output_freq="1mo" output_level="10" enabled=".FALSE."/> <!-- real monthly files --> 37 <file_group id="2m" output_freq="2mo" output_level="10" enabled=".FALSE."/> <!-- real 2m files --> 38 <file_group id="3m" output_freq="3mo" output_level="10" enabled=".FALSE."/> <!-- real 3m files --> 39 <file_group id="4m" output_freq="4mo" output_level="10" enabled=".FALSE."/> <!-- real 4m files --> 40 <file_group id="6m" output_freq="6mo" output_level="10" enabled=".FALSE."/> <!-- real 6m files --> 41 42 <file_group id="1y" output_freq="1y" output_level="10" enabled=".FALSE."/> <!-- real yearly files --> 43 <file_group id="2y" output_freq="2y" output_level="10" enabled=".FALSE."/> <!-- real 2y files --> 44 <file_group id="5y" output_freq="5y" output_level="10" enabled=".FALSE."/> <!-- real 5y files --> 45 <file_group id="10y" output_freq="10y" output_level="10" enabled=".FALSE."/> <!-- real 10y files --> 40 <file_group id="1y" output_freq="1y" output_level="10" enabled=".TRUE."/> <!-- real yearly files --> 41 <file_group id="2y" output_freq="2y" output_level="10" enabled=".TRUE."/> <!-- real 2y files --> 42 <file_group id="5y" output_freq="5y" output_level="10" enabled=".TRUE."/> <!-- real 5y files --> 43 <file_group id="10y" output_freq="10y" output_level="10" enabled=".TRUE."/> <!-- real 10y files --> 46 44 47 45 </file_definition> … … 64 62 <domain_definition src="./domain_def.xml"/> 65 63 66 <grid_definition /> 67 64 <grid_definition> 65 <grid id="grid_T_2D" domain_ref="grid_T"/> 66 <grid id="grid_T_3D" domain_ref="grid_T" axis_ref="deptht"/> 67 <grid id="grid_U_2D" domain_ref="grid_U"/> 68 <grid id="grid_U_3D" domain_ref="grid_U" axis_ref="depthu"/> 69 <grid id="grid_V_2D" domain_ref="grid_V"/> 70 <grid id="grid_V_3D" domain_ref="grid_V" axis_ref="depthv"/> 71 <grid id="grid_W_2D" domain_ref="grid_W"/> 72 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 73 </grid_definition> 68 74 </context> 69 75 … … 86 92 ============================================================================================================ 87 93 --> 88 94 89 95 <file_definition type="multiple_file" name="@expname@_@freq@_@startdate@_@enddate@" sync_freq="10d" min_digits="4"> 90 96 91 <file_group id="1h" output_freq="1h" output_level="10" enabled=".FALSE."/> <!-- 1h files --> 92 <file_group id="2h" output_freq="2h" output_level="10" enabled=".FALSE."/> <!-- 2h files --> 93 <file_group id="3h" output_freq="3h" output_level="10" enabled=".FALSE."/> <!-- 3h files --> 94 <file_group id="4h" output_freq="4h" output_level="10" enabled=".FALSE."/> <!-- 4h files --> 95 <file_group id="6h" output_freq="6h" output_level="10" enabled=".FALSE."/> <!-- 6h files --> 96 97 <file_group id="1d" output_freq="1d" output_level="10" enabled=".FALSE."/> <!-- 1d files --> 97 <file_group id="1ts" output_freq="1ts" output_level="10" enabled=".TRUE."/> <!-- 1 time step files --> 98 <file_group id="1h" output_freq="1h" output_level="10" enabled=".TRUE."/> <!-- 1h files --> 99 <file_group id="2h" output_freq="2h" output_level="10" enabled=".TRUE."/> <!-- 2h files --> 100 <file_group id="3h" output_freq="3h" output_level="10" enabled=".TRUE."/> <!-- 3h files --> 101 <file_group id="4h" output_freq="4h" output_level="10" enabled=".TRUE."/> <!-- 4h files --> 102 <file_group id="6h" output_freq="6h" output_level="10" enabled=".TRUE."/> <!-- 6h files --> 103 <file_group id="1d" output_freq="1d" output_level="10" enabled=".TRUE."/> <!-- 1d files --> 104 <file_group id="3d" output_freq="3d" output_level="10" enabled=".TRUE."/> <!-- 3d files --> 105 <file_group id="5d" output_freq="5d" output_level="10" enabled=".TRUE."/> <!-- 5d files --> 106 <file_group id="1m" output_freq="1mo" output_level="10" enabled=".TRUE."/> <!-- real monthly files --> 107 <file_group id="2m" output_freq="2mo" output_level="10" enabled=".TRUE."/> <!-- real 2m files --> 108 <file_group id="3m" output_freq="3mo" output_level="10" enabled=".TRUE."/> <!-- real 3m files --> 109 <file_group id="4m" output_freq="4mo" output_level="10" enabled=".TRUE."/> <!-- real 4m files --> 110 <file_group id="6m" output_freq="6mo" output_level="10" enabled=".TRUE."/> <!-- real 6m files --> 98 111 99 <file_group id="3d" output_freq="3d" output_level="10" enabled=".FALSE."/> <!-- 3d files --> 100 <file_group id="5d" output_freq="5d" output_level="10" enabled=".FALSE."/> <!-- 5d files --> 112 <file_group id="1y" output_freq="1y" output_level="10" enabled=".TRUE."/> <!-- real yearly files --> 113 <file_group id="2y" output_freq="2y" output_level="10" enabled=".TRUE."/> <!-- real 2y files --> 114 <file_group id="5y" output_freq="5y" output_level="10" enabled=".TRUE."/> <!-- real 5y files --> 115 <file_group id="10y" output_freq="10y" output_level="10" enabled=".TRUE."/> <!-- real 10y files --> 101 116 102 <file_group id="1m" output_freq="1mo" output_level="10" enabled=".FALSE."/> <!-- real monthly files -->103 <file_group id="2m" output_freq="2mo" output_level="10" enabled=".FALSE."/> <!-- real 2m files -->104 <file_group id="3m" output_freq="3mo" output_level="10" enabled=".FALSE."/> <!-- real 3m files -->105 <file_group id="4m" output_freq="4mo" output_level="10" enabled=".FALSE."/> <!-- real 4m files -->106 <file_group id="6m" output_freq="6mo" output_level="10" enabled=".FALSE."/> <!-- real 6m files -->107 108 <file_group id="1y" output_freq="1y" output_level="10" enabled=".FALSE."/> <!-- real yearly files -->109 <file_group id="2y" output_freq="2y" output_level="10" enabled=".FALSE."/> <!-- real 2y files -->110 <file_group id="5y" output_freq="5y" output_level="10" enabled=".FALSE."/> <!-- real 5y files -->111 <file_group id="10y" output_freq="10y" output_level="10" enabled=".FALSE."/> <!-- real 10y files -->112 <file_group id="1h" output_freq="1h" output_level="10" enabled=".FALSE."/> <!-- 1h files -->113 <file_group id="2h" output_freq="2h" output_level="10" enabled=".FALSE."/> <!-- 2h files -->114 <file_group id="3h" output_freq="3h" output_level="10" enabled=".FALSE."/> <!-- 3h files -->115 <file_group id="4h" output_freq="4h" output_level="10" enabled=".FALSE."/> <!-- 4h files -->116 <file_group id="6h" output_freq="6h" output_level="10" enabled=".FALSE."/> <!-- 6h files -->117 118 117 </file_definition> 119 118 … … 130 129 <axis id="depthw" long_name="Vertical W levels" unit="m" positive="down" /> 131 130 <axis id="nfloat" long_name="Float number" unit="-" /> 131 <axis id="icbcla" long_name="Iceberg class" unit="-" /> 132 132 </axis_definition> 133 133 … … 146 146 </context> 147 147 148 149 148 <context id="xios"> 150 149 … … 154 153 We must have buffer_size > jpi*jpj*jpk*8 (with jpi and jpj the subdomain size) 155 154 --> 156 <variable id="buffer_size" type="integer">10 000000</variable>155 <variable id="buffer_size" type="integer">10155778</variable> 157 156 <variable id="buffer_server_factor_size" type="integer">2</variable> 158 157 <variable id="info_level" type="integer">0</variable> … … 164 163 165 164 </context> 166 167 165 </simulation> -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/prepare_exe_dir.sh
r4373 r4902 71 71 72 72 cp -r ${CONFIG_DIR}/${NEW_CONF}/EXP00/* ${EXE_DIR}/. 73 #cp -r ${SETTE_DIR}/iodef_sette.xml ${EXE_DIR}/iodef.xml73 cp -r ${SETTE_DIR}/iodef_sette.xml ${EXE_DIR}/iodef.xml 74 74 cd ${EXE_DIR} -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/prepare_job.sh
r4900 r4902 200 200 fi 201 201 ;; 202 XC_ARCHER_INTEL) 203 # ocean cores are packed 24 to a node 204 NB_REM=$( echo $NB_PROC | awk '{print ( $1 % 24 ) }') 205 if [ ${NB_REM} == 0 ] ; then 206 # number of processes required is an integer multiple of 24 207 # 208 NB_NODES=$( echo $NB_PROC $NXIO_PROC | awk '{print ($1) / 24}') 209 else 210 # 211 # number of processes required is not an integer multiple of 24 212 # round up the number of nodes required. 213 # 214 NB_NODES=$( echo $NB_PROC | awk '{printf("%d",($1) / 24 + 1 )}') 215 fi 216 # xios cores are sparsely packed at 4 to a node 217 # but can not share nodes with the ocean cores 218 NB_REM=$( echo $NXIO_PROC | awk '{print ( $2 % 4 ) }') 219 if [ ${NB_REM} == 0 ] ; then 220 # number of processes required is an integer multiple of 4 221 # 222 NB_NODES=$( echo $NB_NODES $NXIO_PROC | awk '{print ($1 + ( $2 / 4 ))}') 223 else 224 # 225 # number of processes required is not an integer multiple of 4 226 # round up the number of nodes required. 227 # 228 NB_NODES=$( echo $NB_NODES $NXIO_PROC | awk '{print ($1 + ( $2 / 4 ) + 1)}') 229 fi 230 ;; 202 231 ifort_MERCATOR_CLUSTER) 203 232 echo NB_PROCS ${NB_PROC} -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/sette.sh
r4379 r4902 136 136 # ORCA2_LIM_PISCES: 3 & 4 137 137 # ORCA2_OFF_PISCES: 5 & 6 138 # AMM12 : 7 & 8 139 # SAS : 9 & 10 140 # ORCA2_AGRIF_LIM: 11 141 for config in 1 2 3 4 5 6 7 8 9 10 11 138 # ORCA2_LIM3 : 7 & 8 139 # AMM12 : 9 & 10 140 # SAS :11 & 12 141 # ORCA2_AGRIF_LIM :13 142 for config in 1 2 3 4 5 6 7 8 9 10 11 12 13 142 143 143 144 do … … 629 630 fi 630 631 632 633 # TESTS FOR ORCA2_LIM3 CONFIGURATION 634 if [ ${config} -eq 7 ] ; then 635 ## Restartability tests for ORCA2_LIM3 636 export TEST_NAME="LONG" 637 cd ${CONFIG_DIR} 638 . ./makenemo -m ${CMP_NAM} -n ORCA2LIM3_LONG -r ORCA2_LIM3 -j 8 del_key ${DEL_KEYS} 639 cd ${SETTE_DIR} 640 . ./param.cfg 641 . ./all_functions.sh 642 . ./prepare_exe_dir.sh 643 JOB_FILE=${EXE_DIR}/run_job.sh 644 NPROC=4 645 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 646 cd ${EXE_DIR} 647 set_namelist namelist_cfg cn_exp \"O2L3_LONG\" 648 set_namelist namelist_cfg nn_it000 1 649 set_namelist namelist_cfg nn_itend 150 650 set_namelist namelist_cfg nn_stock 75 651 set_namelist namelist_cfg ln_clobber .true. 652 set_namelist namelist_cfg nn_fwb 0 653 set_namelist namelist_cfg jpni 2 654 set_namelist namelist_cfg jpnj 2 655 set_namelist namelist_cfg jpnij 4 656 set_namelist namelist_cfg nn_solv 2 657 if [ ${USING_MPMD} == "yes" ] ; then 658 set_xio_using_server iodef.xml true 659 else 660 set_xio_using_server iodef.xml false 661 fi 662 cd ${SETTE_DIR} 663 . ./prepare_job.sh input_ORCA2_LIM3.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 664 665 cd ${SETTE_DIR} 666 export TEST_NAME="SHORT" 667 . ./prepare_exe_dir.sh 668 cd ${EXE_DIR} 669 set_namelist namelist_cfg cn_exp \"O2L3_SHORT\" 670 set_namelist namelist_cfg nn_it000 76 671 set_namelist namelist_cfg nn_itend 150 672 set_namelist namelist_cfg nn_stock 75 673 set_namelist namelist_cfg ln_rstart .true. 674 set_namelist namelist_cfg nn_rstctl 2 675 set_namelist namelist_cfg ln_clobber .true. 676 set_namelist namelist_cfg nn_fwb 0 677 set_namelist namelist_cfg jpni 2 678 set_namelist namelist_cfg jpnj 2 679 set_namelist namelist_cfg jpnij 4 680 set_namelist namelist_cfg nn_solv 2 681 set_namelist namelist_cfg cn_ocerst_in \"O2L3_LONG_00000075_restart\" 682 set_namelist namelist_ice_cfg cn_icerst_in \"O2L3_LONG_00000075_restart_ice\" 683 for (( i=1; i<=$NPROC; i++)) ; do 684 L_NPROC=$(( $i - 1 )) 685 L_NPROC=`printf "%04d\n" ${L_NPROC}` 686 ln -sf ../LONG/O2L3_LONG_00000075_restart_${L_NPROC}.nc . 687 ln -sf ../LONG/O2L3_LONG_00000075_restart_ice_${L_NPROC}.nc . 688 done 689 if [ ${USING_MPMD} == "yes" ] ; then 690 set_xio_using_server iodef.xml true 691 else 692 set_xio_using_server iodef.xml false 693 fi 694 cd ${SETTE_DIR} 695 . ./prepare_job.sh input_ORCA2_LIM3.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 696 cd ${SETTE_DIR} 697 . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 698 fi 699 700 if [ ${config} -eq 8 ] ; then 701 ## Reproducibility tests for ORCA2_LIM3 702 export TEST_NAME="REPRO_4_4" 703 cd ${CONFIG_DIR} 704 . ./makenemo -m ${CMP_NAM} -n ORCA2LIM3_16 -r ORCA2_LIM3 -j 8 add_key "key_mpp_rep" del_key ${DEL_KEYS} 705 cd ${SETTE_DIR} 706 . ./param.cfg 707 . ./all_functions.sh 708 . ./prepare_exe_dir.sh 709 JOB_FILE=${EXE_DIR}/run_job.sh 710 NPROC=16 711 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 712 cd ${EXE_DIR} 713 set_namelist namelist_cfg nn_it000 1 714 set_namelist namelist_cfg nn_itend 75 715 set_namelist namelist_cfg nn_fwb 0 716 set_namelist namelist_cfg ln_ctl .false. 717 set_namelist namelist_cfg ln_clobber .true. 718 set_namelist namelist_cfg jpni 4 719 set_namelist namelist_cfg jpnj 4 720 set_namelist namelist_cfg jpnij 16 721 set_namelist namelist_cfg nn_solv 2 722 if [ ${USING_MPMD} == "yes" ] ; then 723 set_xio_using_server iodef.xml true 724 else 725 set_xio_using_server iodef.xml false 726 fi 727 cd ${SETTE_DIR} 728 . ./prepare_job.sh input_ORCA2_LIM3.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 729 cd ${SETTE_DIR} 730 . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 731 732 cd ${SETTE_DIR} 733 export TEST_NAME="REPRO_2_8" 734 . ./prepare_exe_dir.sh 735 JOB_FILE=${EXE_DIR}/run_job.sh 736 NPROC=16 737 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 738 cd ${EXE_DIR} 739 set_namelist namelist_cfg nn_it000 1 740 set_namelist namelist_cfg nn_itend 75 741 set_namelist namelist_cfg ln_clobber .true. 742 set_namelist namelist_cfg nn_fwb 0 743 set_namelist namelist_cfg jpni 2 744 set_namelist namelist_cfg jpnj 8 745 set_namelist namelist_cfg jpnij 16 746 set_namelist namelist_cfg nn_solv 2 747 if [ ${USING_MPMD} == "yes" ] ; then 748 set_xio_using_server iodef.xml true 749 else 750 set_xio_using_server iodef.xml false 751 fi 752 753 cd ${SETTE_DIR} 754 . ./prepare_job.sh input_ORCA2_LIM3.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 755 cd ${SETTE_DIR} 756 . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 757 fi 758 759 631 760 # TESTS FOR AMM12 CONFIGURATION 632 if [ ${config} -eq 7] ; then761 if [ ${config} -eq 9 ] ; then 633 762 ## Restartability tests for AMM12 634 763 export TEST_NAME="LONG" … … 692 821 fi 693 822 694 if [ ${config} -eq 8] ; then823 if [ ${config} -eq 10 ] ; then 695 824 ## Reproducibility tests for AMM12 696 825 export TEST_NAME="REPRO_8_4" … … 748 877 749 878 # TESTS FOR ORCA2_SAS_LIM CONFIGURATION 750 if [ ${config} -eq 9] ; then879 if [ ${config} -eq 11 ] ; then 751 880 ## Restartability tests for SAS 752 881 export TEST_NAME="LONG" … … 810 939 fi 811 940 812 if [ ${config} -eq 1 0] ; then941 if [ ${config} -eq 12 ] ; then 813 942 ## Reproducibility tests for ORCA2_SAS_LIM 814 943 export TEST_NAME="REPRO_8_4" … … 866 995 867 996 # TEST FOR ORCA2_LIM_AGRIF : simple test of running AGRIF (no restartability neither reproducibility tests) 868 if [ ${config} -eq 1 1] ; then997 if [ ${config} -eq 13 ] ; then 869 998 ## ORCA2_LIM with Agulhas AGRIF zoom in MPI 870 999 export TEST_NAME="SHORT" -
branches/2014/dev_CNRS_2014/NEMOGCM/SETTE/sette_beginner.sh
r4147 r4902 4 4 # Contact : sflod@locean-ipsl.upmc.fr 5 5 # 6 # sette .sh : principalscript of SET TEsts for NEMO (SETTE)6 # sette_beginner.sh : example of script of SET TEsts for NEMO (SETTE) 7 7 # ---------------------------------------------------------------------- 8 8 # NEMO/SETTE , NEMO Consortium (2010) … … 21 21 # =================== 22 22 # 23 # ---------------------------------------------- 24 # Set of tests for NEMO for beginners 25 # ---------------------------------------------- 23 # COMPILER : name of compiler as defined in NEMOGCM/ARCH directory 24 # BATCH_COMMAND_PAR : name of the command for submitting parallel batch jobs 25 # BATCH_COMMAND_SEQ : name of the command for submitting sequential batch jobs 26 # INTERACT_FLAG : flag to run in interactive mode "yes" 27 # to run in batch mode "no" 28 # MPIRUN_FLAG : flag to run in parallel (MPI) "yes" 29 # to run in sequential mode (NB_PROC = 1) "no" 30 # USING_XIOS : flag to control the activation of key_iomput 31 # "yes" to compile using key_iomput and link to the external XIOS library 32 # "no" to compile without key_iomput and link to the old IOIPSL library 33 # USING_MPMD : flag to control the use of stand-alone IO servers 34 # requires USING_XIOS="yes" 35 # "yes" to run in MPMD (detached) mode with stand-alone IO servers 36 # "no" to run in SPMD (attached) mode without separate IO servers 37 # NUM_XIOSERVERS : number of stand-alone IO servers to employ 38 # set to zero if USING_MPMD="no" 26 39 # 27 # SYNOPSIS 28 # ======== 40 # Principal script is sette.sh, that calls 29 41 # 30 # :: 42 # makenemo : to create successive exectuables in ${CONFIG_NAME}/BLD/bin/nemo.exe 43 # and links to opa in ${CONFIG_NAME}/EXP00) 31 44 # 32 # $ ./sette_beginner.sh45 # param.cfg : sets and loads following directories: 33 46 # 34 # DESCRIPTION 35 # =========== 36 # First simple example of how to use SETTE: create GYRE_SHORT configuration, compile it with 1 proc, and test it for a SHORT test: 5days 37 #- 47 # FORCING_DIR : is the directory for forcing files (tarfile) 48 # INPUT_DIR : is the directory for input files storing 49 # TMPDIR : is the temporary directory (if needed) 50 # NEMO_VALIDATION_DIR : is the validation directory 51 # 52 # (NOTE: this file is the same for all configrations to be tested with sette) 53 # 54 # all_functions.sh : loads functions used by sette (note: new functions can be added here) 55 # set_namelist : function declared in all_functions that sets namelist parameters 56 # post_test_tidyup : creates validation storage directory and copies required output files 57 # (solver.stat and ocean.output) in it after execution of test. 58 # 59 # VALIDATION tree is: 60 # 61 # NEMO_VALIDATION_DIR/WCONFIG_NAME/WCOMPILER_NAME/TEST_NAME/REVISION_NUMBER(or DATE) 62 # 63 # prepare_exe_dir.sh : defines and creates directory where the test is executed 64 # execution directory takes name of TEST_NAME defined for every test 65 # in sette.sh. (each test in executed in its own directory) 66 # 67 # prepare_job.sh : to generate the script run_job.sh 68 # 69 # fcm_job.sh : run in batch (INTERACT_FLAG="no") or interactive (INTERACT_FLAG="yes") 70 # see sette.sh and BATCH_TEMPLATE directory 71 # 72 # NOTE: jobs requiring initial or forcing data need to have an input_CONFIG.cfg in which 73 # can be found paths to the input tar file) 74 # NOTE: if job is not launched for any reason you have the executable ready in ${EXE_DIR} 75 # directory 76 # NOTE: the changed namelists are left in ${EXE_DIR} directory whereas original namelists 77 # remain in ${NEW_CONF}/EXP00 78 # 79 # NOTE: a log file, output.sette, is created in ${SETTE_DIR} with the echoes of 80 # executed commands 81 # 82 # NOTE: if sette.sh is stopped in output.sette there is written the last command 83 # executed by sette.sh 84 # 85 # example use: ./sette_beginner.sh 86 ######################################################################################### 38 87 # 39 88 # Compiler among those in NEMOGCM/ARCH 40 COMPILER= macport_osx89 COMPILER=x3750_ADA 41 90 export BATCH_COMMAND_PAR="llsubmit" 42 91 export BATCH_COMMAND_SEQ=$BATCH_COMMAND_PAR 43 92 export INTERACT_FLAG="yes" 44 93 export MPIRUN_FLAG="yes" 94 95 export DEL_KEYS="key_iomput" 96 if [ ${USING_XIOS} == "yes" ] 97 then 98 export DEL_KEYS="" 99 fi 100 101 # 102 # Settings which control the use of stand alone servers (only relevant if using xios) 103 # 104 export USING_MPMD="no" 105 export NUM_XIOSERVERS=4 106 export JOB_PREFIX=batch-mpmd 107 # 108 if [ ${USING_MPMD} == "no" ] 109 then 110 export NUM_XIOSERVERS=0 111 export JOB_PREFIX=batch 112 fi 113 # 114 # 115 if [ ${USING_MPMD} == "yes" ] && [ ${USING_XIOS} == "no"] 116 then 117 echo "Incompatible choices. MPMD mode requires the XIOS server" 118 exit 119 fi 120 # 45 121 46 122 # Directory to run the tests … … 54 130 # Copy job_batch_COMPILER file for specific compiler into job_batch_template 55 131 cd ${SETTE_DIR} 56 ##if [ ${INTERACT_FLAG} == no ] ; then 57 cp BATCH_TEMPLATE/batch-${COMPILER} job_batch_template || exit 58 ##fi 132 cp BATCH_TEMPLATE/batch-${COMPILER} job_batch_template || exit 59 133 60 134 # Run for GYRE CONFIG … … 63 137 export TEST_NAME="SHORT_TEST" 64 138 cd ${CONFIG_DIR} 65 . ./makenemo -m ${CMP_NAM} -n GYRE_SHORT -r GYRE -j 10 add_key "key_ mpp_mpi key_nosignedzero"139 . ./makenemo -m ${CMP_NAM} -n GYRE_SHORT -r GYRE -j 10 add_key "key_nosignedzero" del_key ${DEL_KEYS} 66 140 cd ${SETTE_DIR} 67 . param.cfg 68 . all_functions.sh 141 . ./param.cfg 142 . ./all_functions.sh 143 . ./prepare_exe_dir.sh 69 144 # creation of execution directory 70 . prepare_exe_dir.sh71 145 JOB_FILE=${EXE_DIR}/run_job.sh 146 # setting number of procs used 72 147 NPROC=4 73 \rm $JOB_FILE 148 if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 74 149 cd ${EXE_DIR} 75 150 # setting namelist parameters … … 82 157 # frequency of creation of a restart file 83 158 set_namelist namelist_cfg nn_stock 60 84 159 if [ ${USING_MPMD} == "yes" ] ; then 160 set_xio_using_server iodef.xml true 161 else 162 set_xio_using_server iodef.xml false 163 fi 85 164 cd ${SETTE_DIR} 86 . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} 165 . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 87 166 # run job, with 4 processors, test named SHORT (= 60 time steps) 88 167 cd ${SETTE_DIR} -
branches/2014/dev_CNRS_2014/NEMOGCM/TOOLS/COMPILE/bld.cfg
r4901 r4902 24 24 25 25 26 bld::tool::cpp %CPP 27 bld::tool::fpp %CPP 26 28 bld::tool::fc %FC 27 29 bld::tool::fflags %FCFLAGS %USER_INC -
branches/2014/dev_CNRS_2014/NEMOGCM/TOOLS/COMPILE/bld_preproagr.cfg
r4901 r4902 34 34 bld::pp::nemo 1 35 35 bld::pp::nemo/agrif2model 0 36 bld::tool::fpp cpp 36 bld::tool::cpp %CPP 37 bld::tool::fpp %CPP 37 38 bld::tool::fppflags::nemo %FPPFLAGS 38 39 -
branches/2014/dev_CNRS_2014/NEMOGCM/TOOLS/COMPILE/bld_tools.cfg
r2281 r4902 16 16 dir::root $NEMO_TDIR/$NEW_CONF/BLD 17 17 18 bld::tool::cpp %CPP 19 bld::tool::fpp %CPP 18 20 bld::tool::fc %FC 19 21 bld::tool::fflags %FCFLAGS %USER_INC -
branches/2014/dev_CNRS_2014/NEMOGCM/TOOLS/COMPILE/bldxag.cfg
r4901 r4902 23 23 24 24 25 bld::tool::cpp %CPP 26 bld::tool::fpp %CPP 25 27 bld::tool::fc %FC 26 28 bld::tool::fflags %FCFLAGS %USER_INC
Note: See TracChangeset
for help on using the changeset viewer.