Changeset 4899
- Timestamp:
- 2014-11-27T16:21:44+01:00 (10 years ago)
- Location:
- branches/2014/dev_r4743_NOC2_ZTS
- Files:
-
- 90 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4743_NOC2_ZTS/DOC/TexFiles/Chapters/Chap_DYN.tex
r4560 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-PW6_calypso.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-PW6_calypso_debug.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-PW6_calypso_tools.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-gfortran_athena_xios.fcm
r4274 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-ifort_athena.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-ifort_athena_debug.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-ifort_athena_tools.fcm
r4230 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/CMCC/arch-ifort_athena_xios.fcm
r4494 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/INGV/arch-IBM_EKMAN_INGV.fcm
r4277 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-ALTIX_NAUTILUS_MPT.fcm
r4306 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-PW7_C2A_XIO.fcm
r4148 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-PW7_METO.fcm
r4377 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-X64_CURIE.fcm
r4153 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-X64_MOBILIS.fcm
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-X64_VAYU.fcm
r4148 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-X64_YELLOWSTONE.fcm
r4153 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-XC_ARCHER.fcm
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-XC_ARCHER_INTEL.fcm
r4716 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-macport_osx.fcm
r4148 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-openmpi_NAVITI_MERCATOR.fcm
r4524 r4899 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_r4743_NOC2_ZTS/NEMOGCM/ARCH/arch-x3750_ADA.fcm
r4148 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/AMM12/EXP00/namelist_cfg
r4493 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/README
r4394 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_IceFrac.pro
r4559 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_all.pro
r4559 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_vardef.sh
r4562 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_plot_vardef.sh.old_names
r4559 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE.pro
r4497 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE_FRAM.pro
r4514 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_ICE_Vol.pro
r4504 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_all.pro
r4559 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_vardef.sh
r4559 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/iodef.xml
r4690 r4899 326 326 <variable id="buffer_server_factor_size" type="integer">2</variable> 327 327 <variable id="info_level" type="integer">0</variable> 328 <variable id="using_server" type="boolean"> true</variable>328 <variable id="using_server" type="boolean">false</variable> 329 329 <variable id="using_oasis" type="boolean">false</variable> 330 330 <variable id="oasis_codes_id" type="string" >oceanx</variable> -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/CONFIG/SHARED/1_namelist_ref
r4698 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/SHARED/field_def.xml
r4690 r4899 293 293 <field id="hfxerr" long_name="heat fluxes error after heat diffusion" unit="W/m2" /> 294 294 <field id="hfxerr_rem" long_name="heat fluxes error after remapping" unit="W/m2" /> 295 <field id="hfxout" long_name=" non solar heat fluxes received by the ocean"unit="W/m2" />296 <field id="hfxin" long_name="total heat fluxes at the ice surface"unit="W/m2" />295 <field id="hfxout" long_name="total heat fluxes received by the ocean" unit="W/m2" /> 296 <field id="hfxin" long_name="total heat fluxes at the ice/ocean surface" unit="W/m2" /> 297 297 298 298 <!-- heat flux associated with mass exchange --> -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r4690 r4899 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_r4743_NOC2_ZTS/NEMOGCM/CONFIG/SHARED/namelist_ref
r4736 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r4624 r4899 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.' ) … … 89 89 CALL lim_itd_ini ! ice thickness distribution initialization 90 90 ! 91 CALL lim_itd_me_init ! ice thickness distribution initialization 91 92 ! ! Initial sea-ice state 92 93 IF( .NOT. ln_rstart ) THEN ! start from rest … … 173 174 !! limistate (only) and is changed to 99 m in ice_init 174 175 !!------------------------------------------------------------------ 175 INTEGER :: jl , jm! dummy loop index176 INTEGER :: jl ! dummy loop index 176 177 REAL(wp) :: zc1, zc2, zc3, zx1 ! local scalars 177 178 !!------------------------------------------------------------------ … … 184 185 ! 1) Ice thickness distribution parameters initialization 185 186 !------------------------------------------------------------------------------! 186 187 !- Types boundaries (integer)188 !----------------------------189 ice_cat_bounds(1,1) = 1190 ice_cat_bounds(1,2) = jpl191 192 !- Number of ice thickness categories in each ice type193 DO jm = 1, jpm194 ice_ncat_types(jm) = ice_cat_bounds(jm,2) - ice_cat_bounds(jm,1) + 1195 END DO196 197 !- Make the correspondence between thickness categories and ice types198 !---------------------------------------------------------------------199 DO jm = 1, jpm !over types200 DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) !over thickness categories201 ice_types(jl) = jm202 END DO203 END DO204 205 187 IF(lwp) THEN 206 WRITE(numout,*) ' Number of ice types jpm = ', jpm207 188 WRITE(numout,*) ' Number of ice categories jpl = ', jpl 208 DO jm = 1, jpm209 WRITE(numout,*) ' Ice type ', jm210 WRITE(numout,*) ' Number of thickness categories ', ice_ncat_types(jm)211 WRITE(numout,*) ' Thickness category boundaries ', ice_cat_bounds(jm,1:2)212 END DO213 WRITE(numout,*) 'Ice type vector', ice_types(1:jpl)214 WRITE(numout,*)215 189 ENDIF 216 190 … … 218 192 !---------------------------------- 219 193 hi_max(:) = 0._wp 220 hi_max_typ(:,:) = 0._wp 221 222 !- Type 1 - undeformed ice 223 zc1 = 3._wp / REAL( ice_cat_bounds(1,2) - ice_cat_bounds(1,1) + 1 , wp ) 194 195 zc1 = 3._wp / REAL( jpl, wp ) 224 196 zc2 = 10._wp * zc1 225 197 zc3 = 3._wp 226 198 227 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2)228 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 ) 229 201 hi_max(jl) = hi_max(jl-1) + zc1 + zc2 * (1._wp + TANH( zc3 * (zx1 - 1._wp ) ) ) 230 202 END DO 231 203 232 !- Fill in the hi_max_typ vector, useful in other circumstances 233 ! Tricky trick: hi_max_typ is actually not used in the code and will be removed in a 234 ! next flyspray at this time, the tricky trick will also be removed (Martin, march 08) 235 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 236 hi_max_typ(jl,1) = hi_max(jl) 237 END DO 238 239 IF(lwp) WRITE(numout,*) ' Thickness category boundaries independently of ice type ' 204 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 240 205 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 241 206 242 IF(lwp) WRITE(numout,*) ' Thickness category boundaries inside ice types '243 IF(lwp) THEN244 DO jm = 1, jpm245 WRITE(numout,*) ' Type number ', jm246 WRITE(numout,*) ' hi_max_typ : ', hi_max_typ(0:ice_ncat_types(jm),jm)247 END DO248 ENDIF249 207 ! 250 208 DO jl = 1, jpl -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4688 r4899 136 136 DO jj = 1, jpj 137 137 DO ji = 1, jpi 138 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 139 ELSE ; zswitch(ji,jj) = 1._wp * tms(ji,jj) ! ice 138 IF( ( tsn(ji,jj,1,jp_tem) - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >= thres_sst ) THEN 139 zswitch(ji,jj) = 0._wp * tms(ji,jj) ! no ice 140 ELSE 141 zswitch(ji,jj) = 1._wp * tms(ji,jj) ! ice 140 142 ENDIF 141 143 END DO -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r4688 r4899 150 150 CALL wrk_alloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 151 151 152 IF( numit == nstart ) CALL lim_itd_me_init ! Initialization (first time-step only)153 154 152 IF(ln_ctl) THEN 155 153 CALL prt_ctl(tab2d_1=ato_i , clinfo1=' lim_itd_me: ato_i : ', tab2d_2=at_i , clinfo2=' at_i : ') … … 694 692 695 693 IF( partfun_swi == 0 ) THEN !--- Linear formulation (Thorndike et al., 1975) 696 DO jl = 0, ice_cat_bounds(1,2) ! only undeformed ice participates694 DO jl = 0, jpl 697 695 DO jj = 1, jpj 698 696 DO ji = 1, jpi … … 717 715 Gsum(:,:,jl) = EXP( -Gsum(:,:,jl) * astari ) * zdummy 718 716 END DO !jl 719 DO jl = 0, ice_cat_bounds(1,2)717 DO jl = 0, jpl 720 718 athorn(:,:,jl) = Gsum(:,:,jl-1) - Gsum(:,:,jl) 721 719 END DO … … 899 897 CALL wrk_alloc( jpi, jpj, afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 900 898 CALL wrk_alloc( jpi, jpj, jpl, aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 901 CALL wrk_alloc( jpi, jpj, jkmax, eirft, erdg1, erdg2, ersw )902 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 ) 903 901 904 902 ! Conservation check … … 1037 1035 ! / rafting category n1. 1038 1036 !-------------------------------------------------------------------------- 1039 vrdg1(ji,jj) = vicen_init(ji,jj,jl1) * afrac(ji,jj) / ( 1._wp + ridge_por )1037 vrdg1(ji,jj) = vicen_init(ji,jj,jl1) * afrac(ji,jj) 1040 1038 vrdg2(ji,jj) = vrdg1(ji,jj) * ( 1. + ridge_por ) 1041 1039 vsw (ji,jj) = vrdg1(ji,jj) * ridge_por … … 1043 1041 vsrdg(ji,jj) = vsnwn_init(ji,jj,jl1) * afrac(ji,jj) 1044 1042 esrdg(ji,jj) = esnwn_init(ji,jj,jl1) * afrac(ji,jj) 1045 srdg1(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) / ( 1._wp + ridge_por )1043 srdg1(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) 1046 1044 srdg2(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) !! MV HC 2014 this line seems useless 1047 1045 … … 1128 1126 jj = indxj(ij) 1129 1127 ! heat content of ridged ice 1130 erdg1(ji,jj,jk) = eicen_init(ji,jj,jk,jl1) * afrac(ji,jj) / ( 1._wp + ridge_por )1128 erdg1(ji,jj,jk) = eicen_init(ji,jj,jk,jl1) * afrac(ji,jj) 1131 1129 eirft(ji,jj,jk) = eicen_init(ji,jj,jk,jl1) * afrft(ji,jj) 1132 1130 e_i (ji,jj,jk,jl1) = e_i(ji,jj,jk,jl1) - erdg1(ji,jj,jk) - eirft(ji,jj,jk) … … 1195 1193 !------------------------------------------------------------------------------- 1196 1194 ! jl1 looping 1-jpl 1197 DO jl2 = ice_cat_bounds(1,1), ice_cat_bounds(1,2)1195 DO jl2 = 1, jpl 1198 1196 ! over categories to which ridged ice is transferred 1199 1197 !CDIR NODEP … … 1240 1238 END DO ! jl2 (new ridges) 1241 1239 1242 DO jl2 = ice_cat_bounds(1,1), ice_cat_bounds(1,2)1240 DO jl2 = 1, jpl 1243 1241 1244 1242 !CDIR NODEP … … 1304 1302 CALL wrk_dealloc( jpi, jpj, afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 1305 1303 CALL wrk_dealloc( jpi, jpj, jpl, aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 1306 CALL wrk_dealloc( jpi, jpj, jkmax, eirft, erdg1, erdg2, ersw )1307 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 ) 1308 1306 ! 1309 1307 END SUBROUTINE lim_itd_me_ridgeshift -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r4688 r4899 117 117 CALL iom_put( "qsr_oce" , qsr(:,:) * pfrld(:,:) ) ! solar flux at ocean surface 118 118 CALL iom_put( "qns_oce" , qns(:,:) * pfrld(:,:) ) ! non-solar flux at ocean surface 119 CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! solar flux at ice surface120 CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! non-solar flux at ice surface121 CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * old_a_i(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice119 CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux at ice surface 120 CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! non-solar flux at ice surface 121 CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice 122 122 CALL iom_put( "qt_oce" , ( qsr(:,:) + qns(:,:) ) * pfrld(:,:) ) 123 CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) * old_a_i(:,:,:), dim=3 ) )123 CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) * a_i_b(:,:,:), dim=3 ) ) 124 124 125 125 ! pfrld is the lead fraction at the previous time step (actually between TRP and THD) … … 139 139 !!!zfcm1 = qsr_tot(ji,jj) + ftr_ice(ji,jj) * ( 1._wp - pfrld(ji,jj) ) / ( 1._wp - zinda + zinda * iatte(ji,jj) ) 140 140 DO jl = 1, jpl 141 zfcm1 = zfcm1 - ( qsr_ice(ji,jj,jl) - ftr_ice(ji,jj,jl) ) * old_a_i(ji,jj,jl)141 zfcm1 = zfcm1 - ( qsr_ice(ji,jj,jl) - ftr_ice(ji,jj,jl) ) * a_i_b(ji,jj,jl) 142 142 END DO 143 143 ELSE … … 146 146 zfcm1 = pfrld(ji,jj) * qsr(ji,jj) 147 147 DO jl = 1, jpl 148 zfcm1 = zfcm1 + old_a_i(ji,jj,jl) * ftr_ice(ji,jj,jl)148 zfcm1 = zfcm1 + a_i_b(ji,jj,jl) * ftr_ice(ji,jj,jl) 149 149 END DO 150 150 ENDIF … … 182 182 183 183 ! mass flux from ice/ocean 184 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) 184 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) & 185 + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) 185 186 186 187 ! mass flux at the ocean/ice interface 187 188 fmmflx(ji,jj) = - wfx_ice(ji,jj) * rdt_ice ! F/M mass flux save at least for biogeochemical model 188 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)189 emp(ji,jj) = zemp - wfx_ice(ji,jj) - wfx_snw(ji,jj) ! mass flux + F/M mass flux (always ice/ocean mass exchange) 189 190 190 191 END DO … … 194 195 ! salt flux at the ocean surface ! 195 196 !------------------------------------------! 196 sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) 197 sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) & 198 & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) 197 199 198 200 !-------------------------------------------------------------! -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r4688 r4899 154 154 & + qns(ji,jj) ) & ! non solar heat 155 155 ! latent heat of precip (note that precip is included in qns but not in qns_ice) 156 & + ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus ) & 157 & + ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt ) ) 156 & + ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) & 157 & * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus ) & 158 & + ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) & 159 & * rcp * ( tatm_ice(ji,jj) - rtt ) ) 158 160 159 161 !-- Energy needed to bring ocean surface layer until its freezing (<0, J.m-2) --- ! … … 196 198 ! Second step in limthd_dh : heat remaining if total melt (zq_rema) 197 199 ! Third step in limsbc : heat from ice-ocean mass exchange (zf_mass) + solar 198 hfx_out(ji,jj) = hfx_out(ji,jj) 200 hfx_out(ji,jj) = hfx_out(ji,jj) & 199 201 ! Non solar heat flux received by the ocean 200 & + pfrld(ji,jj) * qns(ji,jj) 202 & + pfrld(ji,jj) * qns(ji,jj) & 201 203 ! latent heat of precip (note that precip is included in qns but not in qns_ice) 202 & + ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus ) & 203 & + ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt ) & 204 & + ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) & 205 & * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus ) & 206 & + ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt ) & 204 207 ! heat flux taken from the ocean where there is open water ice formation 205 & - qlead(ji,jj) * r1_rdtice 208 & - qlead(ji,jj) * r1_rdtice & 206 209 ! heat flux taken from the ocean during bottom growth/melt (fhld should be 0 while bott growth) 207 & - at_i(ji,jj) * fhtur(ji,jj) 210 & - at_i(ji,jj) * fhtur(ji,jj) & 208 211 & - at_i(ji,jj) * fhld(ji,jj) 209 212 … … 256 259 !------------------------- 257 260 258 CALL tab_2d_1d( nbpb, at_i_ b(1:nbpb), at_i , jpi, jpj, npb(1:nbpb) )259 CALL tab_2d_1d( nbpb, a_i_ b(1:nbpb), a_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )260 CALL tab_2d_1d( nbpb, ht_i_ b(1:nbpb), ht_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )261 CALL tab_2d_1d( nbpb, ht_s_ b(1:nbpb), ht_s(:,:,jl) , jpi, jpj, npb(1:nbpb) )262 263 CALL tab_2d_1d( nbpb, t_su_ b(1:nbpb), t_su(:,:,jl) , jpi, jpj, npb(1:nbpb) )264 CALL tab_2d_1d( nbpb, sm_i_ b(1:nbpb), sm_i(:,:,jl) , jpi, jpj, npb(1:nbpb) )261 CALL tab_2d_1d( nbpb, at_i_1d (1:nbpb), at_i , jpi, jpj, npb(1:nbpb) ) 262 CALL tab_2d_1d( nbpb, a_i_1d (1:nbpb), a_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 263 CALL tab_2d_1d( nbpb, ht_i_1d (1:nbpb), ht_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 264 CALL tab_2d_1d( nbpb, ht_s_1d (1:nbpb), ht_s(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 265 266 CALL tab_2d_1d( nbpb, t_su_1d (1:nbpb), t_su(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 267 CALL tab_2d_1d( nbpb, sm_i_1d (1:nbpb), sm_i(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 265 268 DO jk = 1, nlay_s 266 CALL tab_2d_1d( nbpb, t_s_ b(1:nbpb,jk), t_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )267 CALL tab_2d_1d( nbpb, q_s_ b(1:nbpb,jk), e_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )269 CALL tab_2d_1d( nbpb, t_s_1d(1:nbpb,jk), t_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 270 CALL tab_2d_1d( nbpb, q_s_1d(1:nbpb,jk), e_s(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 268 271 END DO 269 272 DO jk = 1, nlay_i 270 CALL tab_2d_1d( nbpb, t_i_ b(1:nbpb,jk), t_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )271 CALL tab_2d_1d( nbpb, q_i_ b(1:nbpb,jk), e_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )272 CALL tab_2d_1d( nbpb, s_i_ b(1:nbpb,jk), s_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) )273 CALL tab_2d_1d( nbpb, t_i_1d(1:nbpb,jk), t_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 274 CALL tab_2d_1d( nbpb, q_i_1d(1:nbpb,jk), e_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 275 CALL tab_2d_1d( nbpb, s_i_1d(1:nbpb,jk), s_i(:,:,jk,jl) , jpi, jpj, npb(1:nbpb) ) 273 276 END DO 274 277 … … 284 287 ENDIF 285 288 CALL tab_2d_1d( nbpb, dqns_ice_1d(1:nbpb), dqns_ice(:,:,jl), jpi, jpj, npb(1:nbpb) ) 286 CALL tab_2d_1d( nbpb, t_bo_ b(1:nbpb), t_bo , jpi, jpj, npb(1:nbpb) )289 CALL tab_2d_1d( nbpb, t_bo_1d (1:nbpb), t_bo , jpi, jpj, npb(1:nbpb) ) 287 290 CALL tab_2d_1d( nbpb, sprecip_1d (1:nbpb), sprecip , jpi, jpj, npb(1:nbpb) ) 288 291 CALL tab_2d_1d( nbpb, fhtur_1d (1:nbpb), fhtur , jpi, jpj, npb(1:nbpb) ) … … 338 341 339 342 ! --- Ice enthalpy remapping --- ! 340 CALL lim_thd_ent( 1, nbpb, q_i_ b(1:nbpb,:) )343 CALL lim_thd_ent( 1, nbpb, q_i_1d(1:nbpb,:) ) 341 344 342 345 !---------------------------------! … … 354 357 !-------------------------------- 355 358 356 CALL tab_1d_2d( nbpb, at_i , npb, at_i_ b(1:nbpb) , jpi, jpj )357 CALL tab_1d_2d( nbpb, ht_i(:,:,jl) , npb, ht_i_ b(1:nbpb) , jpi, jpj )358 CALL tab_1d_2d( nbpb, ht_s(:,:,jl) , npb, ht_s_ b(1:nbpb) , jpi, jpj )359 CALL tab_1d_2d( nbpb, a_i (:,:,jl) , npb, a_i_ b(1:nbpb) , jpi, jpj )360 CALL tab_1d_2d( nbpb, t_su(:,:,jl) , npb, t_su_ b(1:nbpb) , jpi, jpj )361 CALL tab_1d_2d( nbpb, sm_i(:,:,jl) , npb, sm_i_ b(1:nbpb) , jpi, jpj )359 CALL tab_1d_2d( nbpb, at_i , npb, at_i_1d (1:nbpb) , jpi, jpj ) 360 CALL tab_1d_2d( nbpb, ht_i(:,:,jl) , npb, ht_i_1d (1:nbpb) , jpi, jpj ) 361 CALL tab_1d_2d( nbpb, ht_s(:,:,jl) , npb, ht_s_1d (1:nbpb) , jpi, jpj ) 362 CALL tab_1d_2d( nbpb, a_i (:,:,jl) , npb, a_i_1d (1:nbpb) , jpi, jpj ) 363 CALL tab_1d_2d( nbpb, t_su(:,:,jl) , npb, t_su_1d (1:nbpb) , jpi, jpj ) 364 CALL tab_1d_2d( nbpb, sm_i(:,:,jl) , npb, sm_i_1d (1:nbpb) , jpi, jpj ) 362 365 DO jk = 1, nlay_s 363 CALL tab_1d_2d( nbpb, t_s(:,:,jk,jl), npb, t_s_ b(1:nbpb,jk), jpi, jpj)364 CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, q_s_ b(1:nbpb,jk), jpi, jpj)366 CALL tab_1d_2d( nbpb, t_s(:,:,jk,jl), npb, t_s_1d (1:nbpb,jk), jpi, jpj) 367 CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, q_s_1d (1:nbpb,jk), jpi, jpj) 365 368 END DO 366 369 DO jk = 1, nlay_i 367 CALL tab_1d_2d( nbpb, t_i(:,:,jk,jl), npb, t_i_ b(1:nbpb,jk), jpi, jpj)368 CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, q_i_ b(1:nbpb,jk), jpi, jpj)369 CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_ b(1:nbpb,jk), jpi, jpj)370 CALL tab_1d_2d( nbpb, t_i(:,:,jk,jl), npb, t_i_1d (1:nbpb,jk), jpi, jpj) 371 CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, q_i_1d (1:nbpb,jk), jpi, jpj) 372 CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_1d (1:nbpb,jk), jpi, jpj) 370 373 END DO 371 374 CALL tab_1d_2d( nbpb, qlead , npb, qlead_1d (1:nbpb) , jpi, jpj ) … … 504 507 DO jk = 1, nlay_i 505 508 DO ji = kideb, kiut 506 ztmelts = -tmut * s_i_ b(ji,jk) + rtt509 ztmelts = -tmut * s_i_1d(ji,jk) + rtt 507 510 ! Conversion q(S,T) -> T (second order equation) 508 511 zaaa = cpic 509 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + q_i_ b(ji,jk) / rhoic - lfus512 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + q_i_1d(ji,jk) / rhoic - lfus 510 513 zccc = lfus * ( ztmelts - rtt ) 511 514 zdiscrim = SQRT( MAX( zbbb * zbbb - 4._wp * zaaa * zccc, 0._wp ) ) 512 t_i_ b(ji,jk) = rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa )515 t_i_1d(ji,jk) = rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa ) 513 516 514 517 ! mask temperature 515 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_ b(ji) ) )516 t_i_ b(ji,jk) = zswitch * t_i_b(ji,jk) + ( 1._wp - zswitch ) * rtt518 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) ) 519 t_i_1d(ji,jk) = zswitch * t_i_1d(ji,jk) + ( 1._wp - zswitch ) * rtt 517 520 END DO 518 521 END DO -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r4688 r4899 130 130 CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 131 131 CALL wrk_alloc( jpij, zintermelt ) 132 CALL wrk_alloc( jpij, jkmax, zdeltah, zh_i )132 CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 133 133 CALL wrk_alloc( jpij, icount ) 134 134 … … 156 156 DO jk = 1, nlay_i 157 157 DO ji = kideb, kiut 158 h_i_old (ji,jk) = ht_i_ b(ji) / REAL( nlay_i )159 qh_i_old(ji,jk) = q_i_ b(ji,jk) * h_i_old(ji,jk)158 h_i_old (ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 159 qh_i_old(ji,jk) = q_i_1d(ji,jk) * h_i_old(ji,jk) 160 160 ENDDO 161 161 ENDDO … … 166 166 ! 167 167 DO ji = kideb, kiut 168 zinda = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_ b(ji) ) )168 zinda = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 169 169 ztmelts = zinda * rtt + ( 1._wp - zinda ) * rtt 170 170 … … 172 172 zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji) 173 173 174 zq_su (ji) = MAX( 0._wp, zfdum * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_ b(ji) - ztmelts ) )174 zq_su (ji) = MAX( 0._wp, zfdum * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - ztmelts ) ) 175 175 zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 176 176 END DO … … 182 182 !------------------------------------------------------------------------------! 183 183 DO ji = kideb, kiut 184 IF( t_s_ b(ji,1) > rtt ) THEN !!! Internal melting184 IF( t_s_1d(ji,1) > rtt ) THEN !!! Internal melting 185 185 ! Contribution to heat flux to the ocean [W.m-2], < 0 186 hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_ b(ji,1) * ht_s_b(ji) * a_i_b(ji) * r1_rdtice186 hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_1d(ji,1) * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 187 187 ! Contribution to mass flux 188 wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_ b(ji) * a_i_b(ji) * r1_rdtice188 wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 189 189 ! updates 190 ht_s_ b(ji) = 0._wp191 q_s_ b(ji,1) = 0._wp192 t_s_ b(ji,1) = rtt190 ht_s_1d(ji) = 0._wp 191 q_s_1d (ji,1) = 0._wp 192 t_s_1d (ji,1) = rtt 193 193 END IF 194 194 END DO … … 199 199 ! 200 200 DO ji = kideb, kiut 201 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )201 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 202 202 END DO 203 203 ! 204 204 DO jk = 1, nlay_s 205 205 DO ji = kideb, kiut 206 zqh_s(ji) = zqh_s(ji) + q_s_ b(ji,jk) * zh_s(ji)206 zqh_s(ji) = zqh_s(ji) + q_s_1d(ji,jk) * zh_s(ji) 207 207 END DO 208 208 END DO … … 210 210 DO jk = 1, nlay_i 211 211 DO ji = kideb, kiut 212 zh_i(ji,jk) = ht_i_ b(ji) / REAL( nlay_i )213 zqh_i(ji) = zqh_i(ji) + q_i_ b(ji,jk) * zh_i(ji,jk)212 zh_i(ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 213 zqh_i(ji) = zqh_i(ji) + q_i_1d(ji,jk) * zh_i(ji,jk) 214 214 END DO 215 215 END DO … … 238 238 !----------- 239 239 ! thickness change 240 zcoeff = ( 1._wp - ( 1._wp - at_i_ b(ji) )**betas ) / at_i_b(ji)240 zcoeff = ( 1._wp - ( 1._wp - at_i_1d(ji) )**betas ) / at_i_1d(ji) 241 241 zdh_s_pre(ji) = zcoeff * sprecip_1d(ji) * rdt_ice / rhosn 242 242 ! enthalpy of the precip (>0, J.m-3) (tatm_ice is now in K) … … 244 244 IF( sprecip_1d(ji) == 0._wp ) zqprec(ji) = 0._wp 245 245 ! heat flux from snow precip (>0, W.m-2) 246 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_ b(ji) * zqprec(ji) * r1_rdtice246 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 247 247 ! mass flux, <0 248 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_pre(ji) * r1_rdtice248 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_pre(ji) * r1_rdtice 249 249 ! update thickness 250 ht_s_ b (ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_pre(ji) )250 ht_s_1d (ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_pre(ji) ) 251 251 252 252 !--------------------- … … 259 259 zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting 260 260 ! heat used to melt snow (W.m-2, >0) 261 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_ b(ji) * zqprec(ji) * r1_rdtice261 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 262 262 ! snow melting only = water into the ocean (then without snow precip), >0 263 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_mel(ji) * r1_rdtice263 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_mel(ji) * r1_rdtice 264 264 265 265 ! updates available heat + thickness 266 266 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdh_s_mel(ji) * zqprec(ji) ) 267 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_mel(ji) )268 zh_s (ji) = ht_s_ b(ji) / REAL( nlay_s )267 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_mel(ji) ) 268 zh_s (ji) = ht_s_1d(ji) / REAL( nlay_s ) 269 269 270 270 ENDIF … … 276 276 DO ji = kideb, kiut 277 277 ! thickness change 278 zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_ b(ji) ) )279 zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_ b(ji,jk) + epsi20 ) )280 zdeltah (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_ b(ji,jk), epsi20 )278 zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) 279 zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) ) 280 zdeltah (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 281 281 zdeltah (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 282 282 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 283 283 ! heat used to melt snow(W.m-2, >0) 284 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_ b(ji) * q_s_b(ji,jk) * r1_rdtice284 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * q_s_1d(ji,jk) * r1_rdtice 285 285 ! snow melting only = water into the ocean (then without snow precip) 286 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice286 wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 287 287 288 288 ! updates available heat + thickness 289 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_ b(ji,jk) )290 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdeltah(ji,jk) )289 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_1d(ji,jk) ) 290 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdeltah(ji,jk) ) 291 291 292 292 END DO … … 305 305 ! forced mode: snow thickness change due to sublimation 306 306 DO ji = kideb, kiut 307 zdh_s_sub(ji) = MAX( - ht_s_ b(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice )307 zdh_s_sub(ji) = MAX( - ht_s_1d(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 308 308 ! Heat flux by sublimation [W.m-2], < 0 309 309 ! sublimate first snow that had fallen, then pre-existing snow 310 310 zcoeff = ( MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) * zqprec(ji) + & 311 & ( 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) ) &312 & * a_i_ b(ji) * r1_rdtice311 & ( 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) ) & 312 & * a_i_1d(ji) * r1_rdtice 313 313 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zcoeff 314 314 ! Mass flux by sublimation 315 wfx_sub_1d(ji) = wfx_sub_1d(ji) - rhosn * a_i_ b(ji) * zdh_s_sub(ji) * r1_rdtice315 wfx_sub_1d(ji) = wfx_sub_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_sub(ji) * r1_rdtice 316 316 ! new snow thickness 317 ht_s_ b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_sub(ji) )317 ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_sub(ji) ) 318 318 END DO 319 319 ENDIF … … 322 322 DO ji = kideb, kiut 323 323 dh_s_tot(ji) = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 324 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )324 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 325 325 END DO ! ji 326 326 … … 332 332 DO jk = 1, nlay_s 333 333 DO ji = kideb,kiut 334 zindh = MAX( 0._wp , SIGN( 1._wp, - ht_s_ b(ji) + epsi20 ) )335 q_s_ b(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_b(ji), epsi20 ) * &334 zindh = MAX( 0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 ) ) 335 q_s_1d(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_1d(ji), epsi20 ) * & 336 336 & ( ( MAX( 0._wp, dh_s_tot(ji) ) ) * zqprec(ji) + & 337 & ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_ b(ji) ) * rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) )338 zq_s(ji) = zq_s(ji) + q_s_ b(ji,jk)337 & ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) ) 338 zq_s(ji) = zq_s(ji) + q_s_1d(ji,jk) 339 339 END DO 340 340 END DO … … 346 346 DO jk = 1, nlay_i 347 347 DO ji = kideb, kiut 348 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of layer k [J/kg, <0]349 350 ztmelts = - tmut * s_i_ b(ji,jk) + rtt ! Melting point of layer k [K]348 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of layer k [J/kg, <0] 349 350 ztmelts = - tmut * s_i_1d(ji,jk) + rtt ! Melting point of layer k [K] 351 351 352 352 zEw = rcp * ( ztmelts - rt0 ) ! Specific enthalpy of resulting meltwater [J/kg, <0] … … 368 368 zQm = zfmdt * zEw ! Energy of the melt water sent to the ocean [J/m2, <0] 369 369 370 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)371 sfx_sum_1d(ji) = sfx_sum_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice370 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 371 sfx_sum_1d(ji) = sfx_sum_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 372 372 373 373 ! Contribution to heat flux [W.m-2], < 0 374 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice374 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 375 375 376 376 ! Total heat flux used in this process [W.m-2], > 0 377 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice377 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 378 378 379 379 ! Contribution to mass flux 380 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice380 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 381 381 382 382 ! record which layers have disappeared (for bottom melting) … … 388 388 389 389 ! update heat content (J.m-2) and layer thickness 390 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)390 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 391 391 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 392 392 END DO … … 394 394 ! update ice thickness 395 395 DO ji = kideb, kiut 396 ht_i_ b(ji) = MAX( 0._wp , ht_i_b(ji) + dh_i_surf(ji) )396 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_surf(ji) ) 397 397 END DO 398 398 … … 424 424 !clem debug. Just to be sure that enthalpy at nlay_i+1 is null 425 425 DO ji = kideb, kiut 426 q_i_ b(ji,nlay_i+1) = 0._wp426 q_i_1d(ji,nlay_i+1) = 0._wp 427 427 END DO 428 428 … … 446 446 447 447 s_i_new(ji) = zswitch_sal * zfracs * sss_m(ii,ij) & ! New ice salinity 448 + ( 1. - zswitch_sal ) * sm_i_ b(ji)448 + ( 1. - zswitch_sal ) * sm_i_1d(ji) 449 449 ! New ice growth 450 450 ztmelts = - tmut * s_i_new(ji) + rtt ! New ice melting point (K) 451 451 452 zt_i_new = zswitch_sal * t_bo_ b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i)452 zt_i_new = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 453 453 454 454 zEi = cpic * ( zt_i_new - ztmelts ) & ! Specific enthalpy of forming ice (J/kg, <0) … … 456 456 & + rcp * ( ztmelts-rtt ) 457 457 458 zEw = rcp * ( t_bo_ b(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0)458 zEw = rcp * ( t_bo_1d(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0) 459 459 460 460 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) … … 462 462 dh_i_bott(ji) = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 463 463 464 q_i_ b(ji,nlay_i+1) = -zEi * rhoic ! New ice energy of melting (J/m3, >0)464 q_i_1d(ji,nlay_i+1) = -zEi * rhoic ! New ice energy of melting (J/m3, >0) 465 465 466 466 ENDIF ! fc_bo_i … … 477 477 ztmelts = - tmut * s_i_new(ji) + rtt ! New ice melting point (K) 478 478 479 zt_i_new = zswitch_sal * t_bo_ b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i)479 zt_i_new = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 480 480 481 481 zEi = cpic * ( zt_i_new - ztmelts ) & ! Specific enthalpy of forming ice (J/kg, <0) … … 483 483 & + rcp * ( ztmelts-rtt ) 484 484 485 zEw = rcp * ( t_bo_ b(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0)485 zEw = rcp * ( t_bo_1d(ji) - rt0 ) ! Specific enthalpy of seawater (J/kg, < 0) 486 486 487 487 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 488 488 489 489 ! Contribution to heat flux to the ocean [W.m-2], >0 490 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice490 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 491 491 492 492 ! Total heat flux used in this process [W.m-2], <0 493 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice493 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 494 494 495 495 ! Contribution to salt flux, <0 496 sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_ b(ji) * zfmdt * r1_rdtice496 sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_1d(ji) * zfmdt * r1_rdtice 497 497 498 498 ! Contribution to mass flux, <0 499 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_ b(ji) * dh_i_bott(ji) * r1_rdtice499 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bott(ji) * r1_rdtice 500 500 501 501 ! update heat content (J.m-2) and layer thickness 502 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)502 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) 503 503 h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bott(ji) 504 504 ENDIF … … 513 513 IF( zf_tt(ji) >= 0._wp .AND. jk > icount(ji) ) THEN ! do not calculate where layer has already disappeared from surface melting 514 514 515 ztmelts = - tmut * s_i_ b(ji,jk) + rtt ! Melting point of layer jk (K)516 517 IF( t_i_ b(ji,jk) >= ztmelts ) THEN !!! Internal melting515 ztmelts = - tmut * s_i_1d(ji,jk) + rtt ! Melting point of layer jk (K) 516 517 IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 518 518 zintermelt(ji) = 1._wp 519 519 520 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0)521 522 !!zEw = rcp * ( t_i_ b(ji,jk) - rtt ) ! Specific enthalpy of meltwater at T = t_i_b(J/kg, <0)520 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 521 522 !!zEw = rcp * ( t_i_1d(ji,jk) - rtt ) ! Specific enthalpy of meltwater at T = t_i_1d (J/kg, <0) 523 523 524 524 zdE = 0._wp ! Specific enthalpy difference (J/kg, <0) … … 533 533 534 534 ! Contribution to heat flux to the ocean [W.m-2], <0 (ice enthalpy zEi is "sent" to the ocean) 535 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_ b(ji) * zEi * r1_rdtice536 537 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)538 sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice535 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_rdtice 536 537 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 538 sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 539 539 540 540 ! Contribution to mass flux 541 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice541 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 542 542 543 543 ! update heat content (J.m-2) and layer thickness 544 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)544 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 545 545 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 546 546 547 547 ELSE !!! Basal melting 548 548 549 zEi = - q_i_ b(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0)549 zEi = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 550 550 551 551 zEw = rcp * ( ztmelts - rtt )! Specific enthalpy of meltwater (J/kg, <0) … … 568 568 569 569 ! Contribution to heat flux to the ocean [W.m-2], <0 570 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice571 572 ! Contribution to salt flux (clem: using sm_i_ b and not s_i_b(jk) is ok)573 sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_ b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice570 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 571 572 ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 573 sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 574 574 575 575 ! Total heat flux used in this process [W.m-2], >0 576 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_ b(ji) * zdE * r1_rdtice576 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 577 577 578 578 ! Contribution to mass flux 579 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_ b(ji) * zdeltah(ji,jk) * r1_rdtice579 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 580 580 581 581 ! update heat content (J.m-2) and layer thickness 582 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_ b(ji,jk)582 qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 583 583 h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 584 584 ENDIF … … 603 603 ! 604 604 ! ! excessive energy is sent to lateral ablation 605 ! zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_ b(ji) - epsi20 ) )606 ! zq_1cat(ji) = zinda * rhoic * lfus * at_i_ b(ji) / MAX( 1._wp - at_i_b(ji) , epsi20 ) * zdvres ! J.m-2 >=0605 ! zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 606 ! zq_1cat(ji) = zinda * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 607 607 ! 608 608 ! ! correct salt and mass fluxes 609 ! 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 approximation610 ! wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_ b(ji) * zdvres * r1_rdtice609 ! 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 610 ! wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdvres * r1_rdtice 611 611 ! ENDIF 612 612 ! END DO … … 617 617 !------------------------------------------- 618 618 DO ji = kideb, kiut 619 ht_i_ b(ji) = MAX( 0._wp , ht_i_b(ji) + dh_i_bott(ji) )619 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_bott(ji) ) 620 620 END DO 621 621 … … 628 628 DO ji = kideb, kiut 629 629 zq_rema(ji) = zq_su(ji) + zq_bo(ji) 630 ! zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_ b(ji) ) ) ! =1 if snow630 ! zindh = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) ! =1 if snow 631 631 ! zindq = 1._wp - MAX( 0._wp, SIGN( 1._wp, - zq_s(ji) + epsi20 ) ) 632 632 ! zdeltah (ji,1) = - zindh * zindq * zq_rema(ji) / MAX( zq_s(ji), epsi20 ) 633 ! zdeltah (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_ b(ji) ) ) ! bound melting633 ! zdeltah (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_1d(ji) ) ) ! bound melting 634 634 ! zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,1) 635 635 ! dh_s_tot (ji) = dh_s_tot(ji) + zdeltah(ji,1) 636 ! ht_s_ b (ji) = ht_s_b(ji) + zdeltah(ji,1)636 ! ht_s_1d (ji) = ht_s_1d(ji) + zdeltah(ji,1) 637 637 ! 638 638 ! zq_rema(ji) = zq_rema(ji) + zdeltah(ji,1) * zq_s(ji) ! update available heat (J.m-2) 639 639 ! ! heat used to melt snow 640 ! hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_ b(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0)640 ! hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0) 641 641 ! ! Contribution to mass flux 642 ! wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_ b(ji) * zdeltah(ji,1) * r1_rdtice642 ! wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 643 643 ! 644 644 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 645 645 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 646 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_ b(ji) ) * r1_rdtice646 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_1d(ji) ) * r1_rdtice 647 647 648 648 IF( ln_nicep .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) … … 657 657 DO ji = kideb, kiut 658 658 ! 659 dh_snowice(ji) = MAX( 0._wp , ( rhosn * ht_s_ b(ji) + (rhoic-rau0) * ht_i_b(ji) ) / ( rhosn+rau0-rhoic ) )660 661 ht_i_ b(ji) = ht_i_b(ji) + dh_snowice(ji)662 ht_s_ b(ji) = ht_s_b(ji) - dh_snowice(ji)659 dh_snowice(ji) = MAX( 0._wp , ( rhosn * ht_s_1d(ji) + (rhoic-rau0) * ht_i_1d(ji) ) / ( rhosn+rau0-rhoic ) ) 660 661 ht_i_1d(ji) = ht_i_1d(ji) + dh_snowice(ji) 662 ht_s_1d(ji) = ht_s_1d(ji) - dh_snowice(ji) 663 663 664 664 ! Salinity of snow ice 665 665 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 666 zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_ b(ji)666 zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_1d(ji) 667 667 668 668 ! entrapment during snow ice formation 669 669 ! new salinity difference stored (to be used in limthd_ent.F90) 670 670 IF ( num_sal == 2 ) THEN 671 zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_ b(ji) - epsi10 ) )671 zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi10 ) ) 672 672 ! salinity dif due to snow-ice formation 673 dsm_i_si_1d(ji) = ( zs_snic - sm_i_ b(ji) ) * dh_snowice(ji) / MAX( ht_i_b(ji), epsi10 ) * zswitch673 dsm_i_si_1d(ji) = ( zs_snic - sm_i_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 674 674 ! salinity dif due to bottom growth 675 675 IF ( zf_tt(ji) < 0._wp ) THEN 676 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_ b(ji) ) * dh_i_bott(ji) / MAX( ht_i_b(ji), epsi10 ) * zswitch676 dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 677 677 ENDIF 678 678 ENDIF … … 686 686 687 687 ! Contribution to heat flux 688 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_ b(ji) * zEw * r1_rdtice688 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 689 689 690 690 ! Contribution to salt flux 691 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_ b(ji) * zfmdt * r1_rdtice691 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_1d(ji) * zfmdt * r1_rdtice 692 692 693 693 ! Contribution to mass flux 694 694 ! All snow is thrown in the ocean, and seawater is taken to replace the volume 695 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_ b(ji) * dh_snowice(ji) * rhoic * r1_rdtice696 wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_ b(ji) * dh_snowice(ji) * rhosn * r1_rdtice695 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoic * r1_rdtice 696 wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhosn * r1_rdtice 697 697 698 698 ! update heat content (J.m-2) and layer thickness 699 qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_ b(ji,1) + zfmdt * zEw699 qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_1d(ji,1) + zfmdt * zEw 700 700 h_i_old (ji,0) = h_i_old (ji,0) + dh_snowice(ji) 701 701 702 702 ! Total ablation (to debug) 703 IF( ht_i_ b(ji) <= 0._wp ) a_i_b(ji) = 0._wp703 IF( ht_i_1d(ji) <= 0._wp ) a_i_1d(ji) = 0._wp 704 704 705 705 END DO !ji … … 711 711 !clem bug: we should take snow into account here 712 712 DO ji = kideb, kiut 713 zindh = 1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_ b(ji) ) )714 t_su_ b(ji) = zindh * t_su_b(ji) + ( 1.0 - zindh ) * rtt713 zindh = 1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) ) 714 t_su_1d(ji) = zindh * t_su_1d(ji) + ( 1.0 - zindh ) * rtt 715 715 END DO ! ji 716 716 … … 718 718 DO ji = kideb,kiut 719 719 ! mask enthalpy 720 zinda = MAX( 0._wp , SIGN( 1._wp, - ht_s_ b(ji) ) )721 q_s_ b(ji,jk) = ( 1.0 - zinda ) * q_s_b(ji,jk)722 ! recalculate t_s_ b from q_s_b723 t_s_ b(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_b(ji,jk) / ( rhosn * cpic ) + lfus / cpic )720 zinda = MAX( 0._wp , SIGN( 1._wp, - ht_s_1d(ji) ) ) 721 q_s_1d(ji,jk) = ( 1.0 - zinda ) * q_s_1d(ji,jk) 722 ! recalculate t_s_1d from q_s_1d 723 t_s_1d(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 724 724 END DO 725 725 END DO … … 728 728 CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 729 729 CALL wrk_dealloc( jpij, zintermelt ) 730 CALL wrk_dealloc( jpij, jkmax, zdeltah, zh_i )730 CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 731 731 CALL wrk_dealloc( jpij, icount ) 732 732 ! -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4688 r4899 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 … … 151 151 ! 152 152 CALL wrk_alloc( jpij, numeqmin, numeqmax, isnow ) 153 CALL wrk_alloc( jpij, ztfs, ztsu old, ztsuoldit, zh_i, zh_s, zfsw )153 CALL wrk_alloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 154 154 CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 155 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)156 CALL wrk_alloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, zts old, zeta_s, ztstemp, z_s, kjstart=0)157 CALL wrk_alloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis )158 CALL wrk_alloc( jpij, jkmax+2, 3, ztrid )155 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) 156 CALL wrk_alloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 157 CALL wrk_alloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 158 CALL wrk_alloc( jpij, nlay_i+3, 3, ztrid ) 159 159 160 160 CALL wrk_alloc( jpij, zdq, zq_ini ) … … 163 163 zdq(:) = 0._wp ; zq_ini(:) = 0._wp 164 164 DO ji = kideb, kiut 165 zq_ini(ji) = ( SUM( q_i_ b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + &166 & SUM( q_s_ b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )165 zq_ini(ji) = ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) + & 166 & SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) ) 167 167 END DO 168 168 … … 173 173 DO ji = kideb , kiut 174 174 ! is there snow or not 175 isnow(ji)= NINT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_ b(ji) ) ) )175 isnow(ji)= NINT( 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_1d(ji) ) ) ) 176 176 ! surface temperature of fusion 177 177 ztfs(ji) = REAL( isnow(ji) ) * rtt + REAL( 1 - isnow(ji) ) * rtt 178 178 ! layer thickness 179 zh_i(ji) = ht_i_ b(ji) / REAL( nlay_i )180 zh_s(ji) = ht_s_ b(ji) / REAL( nlay_s )179 zh_i(ji) = ht_i_1d(ji) / REAL( nlay_i ) 180 zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 181 181 END DO 182 182 … … 188 188 z_i(:,0) = 0._wp ! vert. coord. of the up. lim. of the 1st ice layer 189 189 190 DO layer= 1, nlay_s ! vert. coord of the up. lim. of the layer-th snow layer191 DO ji = kideb , kiut 192 z_s(ji, layer) = z_s(ji,layer-1) + ht_s_b(ji) / REAL( nlay_s )193 END DO 194 END DO 195 196 DO layer= 1, nlay_i ! vert. coord of the up. lim. of the layer-th ice layer197 DO ji = kideb , kiut 198 z_i(ji, layer) = z_i(ji,layer-1) + ht_i_b(ji) / REAL( nlay_i )190 DO jk = 1, nlay_s ! vert. coord of the up. lim. of the layer-th snow layer 191 DO ji = kideb , kiut 192 z_s(ji,jk) = z_s(ji,jk-1) + ht_s_1d(ji) / REAL( nlay_s ) 193 END DO 194 END DO 195 196 DO jk = 1, nlay_i ! vert. coord of the up. lim. of the layer-th ice layer 197 DO ji = kideb , kiut 198 z_i(ji,jk) = z_i(ji,jk-1) + ht_i_1d(ji) / REAL( nlay_i ) 199 199 END DO 200 200 END DO … … 217 217 DO ji = kideb , kiut 218 218 ! switches 219 isnow(ji) = NINT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_ b(ji) ) ) )219 isnow(ji) = NINT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) ) 220 220 ! hs > 0, isnow = 1 221 221 zhsu (ji) = hnzst ! threshold for the computation of i0 222 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_ b(ji) / zhsu(ji) ) )222 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_1d(ji) / zhsu(ji) ) ) 223 223 224 224 i0(ji) = REAL( 1 - isnow(ji) ) * ( fr1_i0_1d(ji) + zihic(ji) * fr2_i0_1d(ji) ) … … 227 227 ! a function of the cloud cover 228 228 ! 229 !i0(ji) = (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_ b(ji)+10.0)229 !i0(ji) = (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_1d(ji)+10.0) 230 230 !formula used in Cice 231 231 END DO … … 249 249 END DO 250 250 251 DO layer= 1, nlay_s ! Radiation through snow251 DO jk = 1, nlay_s ! Radiation through snow 252 252 DO ji = kideb, kiut 253 253 ! ! radiation transmitted below the layer-th snow layer 254 zradtr_s(ji, layer) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,layer) ) ) )254 zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,jk) ) ) ) 255 255 ! ! radiation absorbed by the layer-th snow layer 256 zradab_s(ji, layer) = zradtr_s(ji,layer-1) - zradtr_s(ji,layer)256 zradab_s(ji,jk) = zradtr_s(ji,jk-1) - zradtr_s(ji,jk) 257 257 END DO 258 258 END DO … … 262 262 END DO 263 263 264 DO layer= 1, nlay_i ! Radiation through ice264 DO jk = 1, nlay_i ! Radiation through ice 265 265 DO ji = kideb, kiut 266 266 ! ! radiation transmitted below the layer-th ice layer 267 zradtr_i(ji, layer) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,layer) ) ) )267 zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - kappa_i * ( MAX ( 0._wp , z_i(ji,jk) ) ) ) 268 268 ! ! radiation absorbed by the layer-th ice layer 269 zradab_i(ji, layer) = zradtr_i(ji,layer-1) - zradtr_i(ji,layer)269 zradab_i(ji,jk) = zradtr_i(ji,jk-1) - zradtr_i(ji,jk) 270 270 END DO 271 271 END DO 272 272 273 273 DO ji = kideb, kiut ! Radiation transmitted below the ice 274 !!!ftr_ice_1d(ji) = ftr_ice_1d(ji) + iatte_1d(ji) * zradtr_i(ji,nlay_i) * a_i_ b(ji) / at_i_b(ji) ! clem modif274 !!!ftr_ice_1d(ji) = ftr_ice_1d(ji) + iatte_1d(ji) * zradtr_i(ji,nlay_i) * a_i_1d(ji) / at_i_1d(ji) ! clem modif 275 275 ftr_ice_1d(ji) = zradtr_i(ji,nlay_i) 276 276 END DO … … 282 282 ! 283 283 DO ji = kideb, kiut ! Old surface temperature 284 ztsu old (ji) = t_su_b(ji) ! temperature at the beg of iter pr.285 ztsu oldit(ji) = t_su_b(ji) ! temperature at the previous iter286 t_su_ b (ji) = MIN( t_su_b(ji), ztfs(ji) - ztsu_err ) ! necessary284 ztsub (ji) = t_su_1d(ji) ! temperature at the beg of iter pr. 285 ztsubit(ji) = t_su_1d(ji) ! temperature at the previous iter 286 t_su_1d (ji) = MIN( t_su_1d(ji), ztfs(ji) - ztsu_err ) ! necessary 287 287 zerrit (ji) = 1000._wp ! initial value of error 288 288 END DO 289 289 290 DO layer= 1, nlay_s ! Old snow temperature291 DO ji = kideb , kiut 292 zts old(ji,layer) = t_s_b(ji,layer)293 END DO 294 END DO 295 296 DO layer= 1, nlay_i ! Old ice temperature297 DO ji = kideb , kiut 298 zti old(ji,layer) = t_i_b(ji,layer)290 DO jk = 1, nlay_s ! Old snow temperature 291 DO ji = kideb , kiut 292 ztsb(ji,jk) = t_s_1d(ji,jk) 293 END DO 294 END DO 295 296 DO jk = 1, nlay_i ! Old ice temperature 297 DO ji = kideb , kiut 298 ztib(ji,jk) = t_i_1d(ji,jk) 299 299 END DO 300 300 END DO … … 313 313 IF( thcon_i_swi == 0 ) THEN ! Untersteiner (1964) formula 314 314 DO ji = kideb , kiut 315 ztcond_i(ji,0) = rcdic + zbeta*s_i_ b(ji,1) / MIN(-epsi10,t_i_b(ji,1)-rtt)315 ztcond_i(ji,0) = rcdic + zbeta*s_i_1d(ji,1) / MIN(-epsi10,t_i_1d(ji,1)-rtt) 316 316 ztcond_i(ji,0) = MAX(ztcond_i(ji,0),zkimin) 317 317 END DO 318 DO layer= 1, nlay_i-1318 DO jk = 1, nlay_i-1 319 319 DO ji = kideb , kiut 320 ztcond_i(ji, layer) = rcdic + zbeta*( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) / &321 MIN(-2.0_wp * epsi10, t_i_ b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt)322 ztcond_i(ji, layer) = MAX(ztcond_i(ji,layer),zkimin)320 ztcond_i(ji,jk) = rcdic + zbeta*( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) / & 321 MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt) 322 ztcond_i(ji,jk) = MAX(ztcond_i(ji,jk),zkimin) 323 323 END DO 324 324 END DO … … 327 327 IF( thcon_i_swi == 1 ) THEN ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 328 328 DO ji = kideb , kiut 329 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_ b(ji,1) / MIN( -epsi10, t_i_b(ji,1)-rtt ) &330 & - 0.011_wp * ( t_i_ b(ji,1) - rtt )329 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1)-rtt ) & 330 & - 0.011_wp * ( t_i_1d(ji,1) - rtt ) 331 331 ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) 332 332 END DO 333 DO layer= 1, nlay_i-1333 DO jk = 1, nlay_i-1 334 334 DO ji = kideb , kiut 335 ztcond_i(ji,layer) = rcdic + 0.090_wp * ( s_i_b(ji,layer) + s_i_b(ji,layer+1) ) & 336 & / MIN(-2.0_wp * epsi10, t_i_b(ji,layer)+t_i_b(ji,layer+1) - 2.0_wp * rtt) & 337 & - 0.0055_wp* ( t_i_b(ji,layer) + t_i_b(ji,layer+1) - 2.0*rtt ) 338 ztcond_i(ji,layer) = MAX( ztcond_i(ji,layer), zkimin ) 335 ztcond_i(ji,jk) = rcdic + & 336 & 0.090_wp * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) & 337 & / MIN(-2.0_wp * epsi10, t_i_1d(ji,jk)+t_i_1d(ji,jk+1) - 2.0_wp * rtt) & 338 & - 0.0055_wp* ( t_i_1d(ji,jk) + t_i_1d(ji,jk+1) - 2.0*rtt ) 339 ztcond_i(ji,jk) = MAX( ztcond_i(ji,jk), zkimin ) 339 340 END DO 340 341 END DO 341 342 DO ji = kideb , kiut 342 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_ b(ji,nlay_i) / MIN(-epsi10,t_bo_b(ji)-rtt) &343 & - 0.011_wp * ( t_bo_ b(ji) - rtt )343 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_1d(ji,nlay_i) / MIN(-epsi10,t_bo_1d(ji)-rtt) & 344 & - 0.011_wp * ( t_bo_1d(ji) - rtt ) 344 345 ztcond_i(ji,nlay_i) = MAX( ztcond_i(ji,nlay_i), zkimin ) 345 346 END DO … … 357 358 END DO 358 359 359 DO layer= 1, nlay_s-1360 DO ji = kideb , kiut 361 zkappa_s(ji, layer) = 2.0 * rcdsn / &360 DO jk = 1, nlay_s-1 361 DO ji = kideb , kiut 362 zkappa_s(ji,jk) = 2.0 * rcdsn / & 362 363 MAX(epsi10,2.0*zh_s(ji)) 363 364 END DO 364 365 END DO 365 366 366 DO layer= 1, nlay_i-1367 DO jk = 1, nlay_i-1 367 368 DO ji = kideb , kiut 368 369 !-- Ice kappa factors 369 zkappa_i(ji, layer) = 2.0*ztcond_i(ji,layer)/ &370 zkappa_i(ji,jk) = 2.0*ztcond_i(ji,jk)/ & 370 371 MAX(epsi10,2.0*zh_i(ji)) 371 372 END DO … … 386 387 !------------------------------------------------------------------------------| 387 388 ! 388 DO layer= 1, nlay_i389 DO ji = kideb , kiut 390 ztitemp(ji, layer) = t_i_b(ji,layer)391 zspeche_i(ji, layer) = cpic + zgamma*s_i_b(ji,layer)/ &392 MAX((t_i_ b(ji,layer)-rtt)*(ztiold(ji,layer)-rtt),epsi10)393 zeta_i(ji, layer) = rdt_ice / MAX(rhoic*zspeche_i(ji,layer)*zh_i(ji), &389 DO jk = 1, nlay_i 390 DO ji = kideb , kiut 391 ztitemp(ji,jk) = t_i_1d(ji,jk) 392 zspeche_i(ji,jk) = cpic + zgamma*s_i_1d(ji,jk)/ & 393 MAX((t_i_1d(ji,jk)-rtt)*(ztib(ji,jk)-rtt),epsi10) 394 zeta_i(ji,jk) = rdt_ice / MAX(rhoic*zspeche_i(ji,jk)*zh_i(ji), & 394 395 epsi10) 395 396 END DO 396 397 END DO 397 398 398 DO layer= 1, nlay_s399 DO ji = kideb , kiut 400 ztstemp(ji, layer) = t_s_b(ji,layer)401 zeta_s(ji, layer) = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10)399 DO jk = 1, nlay_s 400 DO ji = kideb , kiut 401 ztstemp(ji,jk) = t_s_1d(ji,jk) 402 zeta_s(ji,jk) = rdt_ice / MAX(rhosn*cpic*zh_s(ji),epsi10) 402 403 END DO 403 404 END DO … … 409 410 DO ji = kideb , kiut 410 411 ! update of the non solar flux according to the update in T_su 411 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_ b(ji) - ztsuoldit(ji) )412 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsubit(ji) ) 412 413 413 414 ! update incoming flux … … 429 430 !!ice interior terms (top equation has the same form as the others) 430 431 431 DO numeq=1, jkmax+2432 DO numeq=1,nlay_i+3 432 433 DO ji = kideb , kiut 433 434 ztrid(ji,numeq,1) = 0. … … 442 443 DO numeq = nlay_s + 2, nlay_s + nlay_i 443 444 DO ji = kideb , kiut 444 layer= numeq - nlay_s - 1445 ztrid(ji,numeq,1) = - zeta_i(ji, layer)*zkappa_i(ji,layer-1)446 ztrid(ji,numeq,2) = 1.0 + zeta_i(ji, layer)*(zkappa_i(ji,layer-1) + &447 zkappa_i(ji, layer))448 ztrid(ji,numeq,3) = - zeta_i(ji, layer)*zkappa_i(ji,layer)449 zindterm(ji,numeq) = zti old(ji,layer) + zeta_i(ji,layer)* &450 zradab_i(ji, layer)445 jk = numeq - nlay_s - 1 446 ztrid(ji,numeq,1) = - zeta_i(ji,jk)*zkappa_i(ji,jk-1) 447 ztrid(ji,numeq,2) = 1.0 + zeta_i(ji,jk)*(zkappa_i(ji,jk-1) + & 448 zkappa_i(ji,jk)) 449 ztrid(ji,numeq,3) = - zeta_i(ji,jk)*zkappa_i(ji,jk) 450 zindterm(ji,numeq) = ztib(ji,jk) + zeta_i(ji,jk)* & 451 zradab_i(ji,jk) 451 452 END DO 452 453 ENDDO … … 459 460 + zkappa_i(ji,nlay_i-1) ) 460 461 ztrid(ji,numeq,3) = 0.0 461 zindterm(ji,numeq) = zti old(ji,nlay_i) + zeta_i(ji,nlay_i)* &462 zindterm(ji,numeq) = ztib(ji,nlay_i) + zeta_i(ji,nlay_i)* & 462 463 ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i)*zg1 & 463 * t_bo_ b(ji) )464 * t_bo_1d(ji) ) 464 465 ENDDO 465 466 466 467 467 468 DO ji = kideb , kiut 468 IF ( ht_s_ b(ji).gt.0.0 ) THEN469 IF ( ht_s_1d(ji).gt.0.0 ) THEN 469 470 ! 470 471 !------------------------------------------------------------------------------| … … 474 475 !!snow interior terms (bottom equation has the same form as the others) 475 476 DO numeq = 3, nlay_s + 1 476 layer= numeq - 1477 ztrid(ji,numeq,1) = - zeta_s(ji, layer)*zkappa_s(ji,layer-1)478 ztrid(ji,numeq,2) = 1.0 + zeta_s(ji, layer)*( zkappa_s(ji,layer-1) + &479 zkappa_s(ji, layer) )480 ztrid(ji,numeq,3) = - zeta_s(ji, layer)*zkappa_s(ji,layer)481 zindterm(ji,numeq) = zts old(ji,layer) + zeta_s(ji,layer)* &482 zradab_s(ji, layer)477 jk = numeq - 1 478 ztrid(ji,numeq,1) = - zeta_s(ji,jk)*zkappa_s(ji,jk-1) 479 ztrid(ji,numeq,2) = 1.0 + zeta_s(ji,jk)*( zkappa_s(ji,jk-1) + & 480 zkappa_s(ji,jk) ) 481 ztrid(ji,numeq,3) = - zeta_s(ji,jk)*zkappa_s(ji,jk) 482 zindterm(ji,numeq) = ztsb(ji,jk) + zeta_s(ji,jk)* & 483 zradab_s(ji,jk) 483 484 END DO 484 485 … … 487 488 ztrid(ji,nlay_s+2,3) = 0.0 488 489 zindterm(ji,nlay_s+2) = zindterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 489 t_bo_ b(ji)490 t_bo_1d(ji) 490 491 ENDIF 491 492 492 IF ( t_su_ b(ji) .LT. rtt ) THEN493 IF ( t_su_1d(ji) .LT. rtt ) THEN 493 494 494 495 !------------------------------------------------------------------------------| … … 503 504 ztrid(ji,1,2) = dzf(ji) - zg1s*zkappa_s(ji,0) 504 505 ztrid(ji,1,3) = zg1s*zkappa_s(ji,0) 505 zindterm(ji,1) = dzf(ji)*t_su_ b(ji) - zf(ji)506 zindterm(ji,1) = dzf(ji)*t_su_1d(ji) - zf(ji) 506 507 507 508 !!first layer of snow equation … … 509 510 ztrid(ji,2,2) = 1.0 + zeta_s(ji,1)*(zkappa_s(ji,1) + zkappa_s(ji,0)*zg1s) 510 511 ztrid(ji,2,3) = - zeta_s(ji,1)* zkappa_s(ji,1) 511 zindterm(ji,2) = zts old(ji,1) + zeta_s(ji,1)*zradab_s(ji,1)512 zindterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 512 513 513 514 ELSE … … 526 527 zkappa_s(ji,0) * zg1s ) 527 528 ztrid(ji,2,3) = - zeta_s(ji,1)*zkappa_s(ji,1) 528 zindterm(ji,2) = zts old(ji,1) + zeta_s(ji,1) * &529 zindterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1) * & 529 530 ( zradab_s(ji,1) + & 530 zkappa_s(ji,0) * zg1s * t_su_ b(ji) )531 zkappa_s(ji,0) * zg1s * t_su_1d(ji) ) 531 532 ENDIF 532 533 ELSE … … 536 537 !------------------------------------------------------------------------------| 537 538 ! 538 IF (t_su_ b(ji) .LT. rtt) THEN539 IF (t_su_1d(ji) .LT. rtt) THEN 539 540 ! 540 541 !------------------------------------------------------------------------------| … … 550 551 ztrid(ji,numeqmin(ji),2) = dzf(ji) - zkappa_i(ji,0)*zg1 551 552 ztrid(ji,numeqmin(ji),3) = zkappa_i(ji,0)*zg1 552 zindterm(ji,numeqmin(ji)) = dzf(ji)*t_su_ b(ji) - zf(ji)553 zindterm(ji,numeqmin(ji)) = dzf(ji)*t_su_1d(ji) - zf(ji) 553 554 554 555 !!first layer of ice equation … … 557 558 + zkappa_i(ji,0) * zg1 ) 558 559 ztrid(ji,numeqmin(ji)+1,3) = - zeta_i(ji,1)*zkappa_i(ji,1) 559 zindterm(ji,numeqmin(ji)+1)= zti old(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)560 zindterm(ji,numeqmin(ji)+1)= ztib(ji,1) + zeta_i(ji,1)*zradab_i(ji,1) 560 561 561 562 !!case of only one layer in the ice (surface & ice equations are altered) … … 570 571 ztrid(ji,numeqmin(ji)+1,3) = 0.0 571 572 572 zindterm(ji,numeqmin(ji)+1) = zti old(ji,1) + zeta_i(ji,1)* &573 ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_ b(ji) )573 zindterm(ji,numeqmin(ji)+1) = ztib(ji,1) + zeta_i(ji,1)* & 574 ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji) ) 574 575 ENDIF 575 576 … … 590 591 zg1) 591 592 ztrid(ji,numeqmin(ji),3) = - zeta_i(ji,1) * zkappa_i(ji,1) 592 zindterm(ji,numeqmin(ji)) = zti old(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + &593 zkappa_i(ji,0) * zg1 * t_su_ b(ji) )593 zindterm(ji,numeqmin(ji)) = ztib(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 594 zkappa_i(ji,0) * zg1 * t_su_1d(ji) ) 594 595 595 596 !!case of only one layer in the ice (surface & ice equations are altered) … … 599 600 zkappa_i(ji,1)) 600 601 ztrid(ji,numeqmin(ji),3) = 0.0 601 zindterm(ji,numeqmin(ji)) = zti old(ji,1) + zeta_i(ji,1)* &602 (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_ b(ji)) &603 + t_su_ b(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0602 zindterm(ji,numeqmin(ji)) = ztib(ji,1) + zeta_i(ji,1)* & 603 (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji)) & 604 + t_su_1d(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0 604 605 ENDIF 605 606 … … 620 621 621 622 maxnumeqmax = 0 622 minnumeqmin = jkmax+4623 minnumeqmin = nlay_i+5 623 624 624 625 DO ji = kideb , kiut … … 629 630 END DO 630 631 631 DO layer= minnumeqmin+1, maxnumeqmax632 DO ji = kideb , kiut 633 numeq = min(max(numeqmin(ji)+1, layer),numeqmax(ji))632 DO jk = minnumeqmin+1, maxnumeqmax 633 DO ji = kideb , kiut 634 numeq = min(max(numeqmin(ji)+1,jk),numeqmax(ji)) 634 635 zdiagbis(ji,numeq) = ztrid(ji,numeq,2) - ztrid(ji,numeq,1)* & 635 636 ztrid(ji,numeq-1,3)/zdiagbis(ji,numeq-1) … … 641 642 DO ji = kideb , kiut 642 643 ! ice temperatures 643 t_i_ b(ji,nlay_i) = zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji))644 t_i_1d(ji,nlay_i) = zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 644 645 END DO 645 646 646 647 DO numeq = nlay_i + nlay_s + 1, nlay_s + 2, -1 647 648 DO ji = kideb , kiut 648 layer= numeq - nlay_s - 1649 t_i_ b(ji,layer) = (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* &650 t_i_ b(ji,layer+1))/zdiagbis(ji,numeq)649 jk = numeq - nlay_s - 1 650 t_i_1d(ji,jk) = (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* & 651 t_i_1d(ji,jk+1))/zdiagbis(ji,numeq) 651 652 END DO 652 653 END DO … … 654 655 DO ji = kideb , kiut 655 656 ! snow temperatures 656 IF (ht_s_ b(ji).GT.0._wp) &657 t_s_ b(ji,nlay_s) = (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) &658 * t_i_ b(ji,1))/zdiagbis(ji,nlay_s+1) &659 * MAX(0.0,SIGN(1.0,ht_s_ b(ji)))657 IF (ht_s_1d(ji).GT.0._wp) & 658 t_s_1d(ji,nlay_s) = (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 659 * t_i_1d(ji,1))/zdiagbis(ji,nlay_s+1) & 660 * MAX(0.0,SIGN(1.0,ht_s_1d(ji))) 660 661 661 662 ! surface temperature 662 isnow(ji) = NINT( 1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_ b(ji) ) ) )663 ztsu oldit(ji) = t_su_b(ji)664 IF( t_su_ b(ji) < ztfs(ji) ) &665 t_su_ b(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_b(ji,1) &666 & + REAL( 1 - isnow(ji) )*t_i_ b(ji,1) ) ) / zdiagbis(ji,numeqmin(ji))663 isnow(ji) = NINT( 1.0 - MAX( 0.0 , SIGN( 1.0 , -ht_s_1d(ji) ) ) ) 664 ztsubit(ji) = t_su_1d(ji) 665 IF( t_su_1d(ji) < ztfs(ji) ) & 666 t_su_1d(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_1d(ji,1) & 667 & + REAL( 1 - isnow(ji) )*t_i_1d(ji,1) ) ) / zdiagbis(ji,numeqmin(ji)) 667 668 END DO 668 669 ! … … 674 675 ! zerrit(ji) is a measure of error, it has to be under maxer_i_thd 675 676 DO ji = kideb , kiut 676 t_su_ b(ji) = MAX( MIN( t_su_b(ji) , ztfs(ji) ) , 190._wp )677 zerrit(ji) = ABS( t_su_ b(ji) - ztsuoldit(ji) )678 END DO 679 680 DO layer= 1, nlay_s681 DO ji = kideb , kiut 682 t_s_ b(ji,layer) = MAX( MIN( t_s_b(ji,layer), rtt ), 190._wp )683 zerrit(ji) = MAX(zerrit(ji),ABS(t_s_ b(ji,layer) - ztstemp(ji,layer)))684 END DO 685 END DO 686 687 DO layer= 1, nlay_i688 DO ji = kideb , kiut 689 ztmelt_i = -tmut * s_i_ b(ji,layer) + rtt690 t_i_ b(ji,layer) = MAX(MIN(t_i_b(ji,layer),ztmelt_i), 190._wp)691 zerrit(ji) = MAX(zerrit(ji),ABS(t_i_ b(ji,layer) - ztitemp(ji,layer)))677 t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , ztfs(ji) ) , 190._wp ) 678 zerrit(ji) = ABS( t_su_1d(ji) - ztsubit(ji) ) 679 END DO 680 681 DO jk = 1, nlay_s 682 DO ji = kideb , kiut 683 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rtt ), 190._wp ) 684 zerrit(ji) = MAX(zerrit(ji),ABS(t_s_1d(ji,jk) - ztstemp(ji,jk))) 685 END DO 686 END DO 687 688 DO jk = 1, nlay_i 689 DO ji = kideb , kiut 690 ztmelt_i = -tmut * s_i_1d(ji,jk) + rtt 691 t_i_1d(ji,jk) = MAX(MIN(t_i_1d(ji,jk),ztmelt_i), 190._wp) 692 zerrit(ji) = MAX(zerrit(ji),ABS(t_i_1d(ji,jk) - ztitemp(ji,jk))) 692 693 END DO 693 694 END DO … … 714 715 DO ji = kideb, kiut 715 716 ! forced mode only : update of latent heat fluxes (sublimation) (always >=0, upward flux) 716 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) ) )717 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) ) ) 717 718 ! ! surface ice conduction flux 718 isnow(ji) = NINT( 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_ b(ji) ) ) )719 fc_su(ji) = - REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_ b(ji,1) - t_su_b(ji)) &720 & - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1 * (t_i_ b(ji,1) - t_su_b(ji))719 isnow(ji) = NINT( 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_1d(ji) ) ) ) 720 fc_su(ji) = - REAL( isnow(ji) ) * zkappa_s(ji,0) * zg1s * (t_s_1d(ji,1) - t_su_1d(ji)) & 721 & - REAL( 1 - isnow(ji) ) * zkappa_i(ji,0) * zg1 * (t_i_1d(ji,1) - t_su_1d(ji)) 721 722 ! ! bottom ice conduction flux 722 fc_bo_i(ji) = - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_ b(ji) - t_i_b(ji,nlay_i)) )723 fc_bo_i(ji) = - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_1d(ji) - t_i_1d(ji,nlay_i)) ) 723 724 END DO 724 725 … … 727 728 !----------------------------------------- 728 729 DO ji = kideb, kiut 729 IF( t_su_b(ji) < rtt ) THEN ! case T_su < 0degC 730 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) 730 IF( t_su_1d(ji) < rtt ) THEN ! case T_su < 0degC 731 hfx_dif_1d(ji) = hfx_dif_1d(ji) + & 732 & ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 731 733 ELSE ! case T_su = 0degC 732 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) 734 hfx_dif_1d(ji) = hfx_dif_1d(ji) + & 735 & ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_1d(ji) 733 736 ENDIF 734 737 END DO … … 739 742 ! --- diag error on heat diffusion - PART 2 --- ! 740 743 DO ji = kideb, kiut 741 zdq(ji) = - zq_ini(ji) + ( SUM( q_i_ b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + &742 & SUM( q_s_ b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )744 zdq(ji) = - zq_ini(ji) + ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) / REAL( nlay_i ) + & 745 & SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) / REAL( nlay_s ) ) 743 746 zhfx_err = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice ) 744 hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_ b(ji)747 hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_1d(ji) 745 748 ! --- correction of qns_ice and surface conduction flux --- ! 746 749 qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err … … 748 751 ! --- Heat flux at the ice surface in W.m-2 --- ! 749 752 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 750 hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_ b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) )753 hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_1d(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 751 754 END DO 752 755 753 756 ! 754 757 CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) 755 CALL wrk_dealloc( jpij, ztfs, ztsu old, ztsuoldit, zh_i, zh_s, zfsw )758 CALL wrk_dealloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 756 759 CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zhsu ) 757 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 ) 758 CALL wrk_dealloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsold, zeta_s, ztstemp, z_s, kjstart = 0 ) 759 CALL wrk_dealloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 760 CALL wrk_dealloc( jpij, jkmax+2, 3, ztrid ) 760 CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, & 761 & ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 762 CALL wrk_dealloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 763 CALL wrk_dealloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 764 CALL wrk_dealloc( jpij, nlay_i+3, 3, ztrid ) 761 765 CALL wrk_dealloc( jpij, zdq, zq_ini ) 762 766 … … 779 783 DO jk = 1, nlay_i ! Sea ice energy of melting 780 784 DO ji = kideb, kiut 781 ztmelts = - tmut * s_i_ b(ji,jk) + rtt782 zindb = MAX( 0._wp , SIGN( 1._wp , -(t_i_ b(ji,jk) - rtt) - epsi10 ) )783 q_i_ b(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_b(ji,jk) ) &784 & + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_ b(ji,jk)-rtt, -epsi10 ) ) &785 ztmelts = - tmut * s_i_1d(ji,jk) + rtt 786 zindb = MAX( 0._wp , SIGN( 1._wp , -(t_i_1d(ji,jk) - rtt) - epsi10 ) ) 787 q_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) ) & 788 & + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_1d(ji,jk)-rtt, -epsi10 ) ) & 785 789 & - rcp * ( ztmelts-rtt ) ) 786 790 END DO … … 788 792 DO jk = 1, nlay_s ! Snow energy of melting 789 793 DO ji = kideb, kiut 790 q_s_ b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus )794 q_s_1d(ji,jk) = rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) 791 795 END DO 792 796 END DO -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r4688 r4899 29 29 USE lib_mpp ! MPP library 30 30 USE wrk_nemo ! work arrays 31 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 32 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 32 33 USE limthd_ent … … 71 72 !! - Computation of variation of ice volume and mass 72 73 !! - Computation of frldb after lateral accretion and 73 !! update ht_s_ b, ht_i_band tbif_1d(:,:)74 !! update ht_s_1d, ht_i_1d and tbif_1d(:,:) 74 75 !!------------------------------------------------------------------------ 75 INTEGER :: ji,jj,jk,jl ,jm! dummy loop indices76 INTEGER :: layer, nbpac! local integers77 INTEGER :: ii, ij, iter ! - -76 INTEGER :: ji,jj,jk,jl ! dummy loop indices 77 INTEGER :: nbpac ! local integers 78 INTEGER :: ii, ij, iter ! - - 78 79 REAL(wp) :: ztmelts, zdv, zfrazb, zweight, zindb, zinda, zde ! local scalars 79 80 REAL(wp) :: zgamafr, zvfrx, zvgx, ztaux, ztwogp, zf , zhicol_new ! - - … … 89 90 REAL(wp) :: zv_newfra 90 91 91 INTEGER , POINTER, DIMENSION(:) :: jcat ! indexes of categories where new ice grows92 INTEGER , POINTER, DIMENSION(:) :: jcat ! indexes of categories where new ice grows 92 93 REAL(wp), POINTER, DIMENSION(:) :: zswinew ! switch for new ice or not 93 94 … … 101 102 REAL(wp), POINTER, DIMENSION(:) :: zda_res ! residual area in case of excessive heat budget 102 103 REAL(wp), POINTER, DIMENSION(:) :: zat_i_1d ! total ice fraction 103 REAL(wp), POINTER, DIMENSION(:) :: zat_i_lev ! total ice fraction for level ice only (type 1) 104 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 105 105 REAL(wp), POINTER, DIMENSION(:) :: zvrel_1d ! relative ice / frazil velocity (1D vector) 106 106 107 REAL(wp), POINTER, DIMENSION(:,:) :: zv_ old! old volume of ice in category jl108 REAL(wp), POINTER, DIMENSION(:,:) :: za_ old! old area of ice in category jl109 REAL(wp), POINTER, DIMENSION(:,:) :: za_i_1d 110 REAL(wp), POINTER, DIMENSION(:,:) :: zv_i_1d 111 REAL(wp), POINTER, DIMENSION(:,:) :: zoa_i_1d 112 REAL(wp), POINTER, DIMENSION(:,:) :: zsmv_i_1d 113 114 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 115 115 116 116 REAL(wp), POINTER, DIMENSION(:,:) :: zvrel ! relative ice / frazil velocity … … 119 119 CALL wrk_alloc( jpij, jcat ) ! integer 120 120 CALL wrk_alloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 121 CALL wrk_alloc( jpij, zdv_res, zda_res, zat_i_1d, z at_i_lev, zv_frazb, zvrel_1d )122 CALL wrk_alloc( jpij,jpl, zv_ old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d )123 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 ) 124 124 CALL wrk_alloc( jpi,jpj, zvrel ) 125 125 … … 133 133 !Energy of melting q(S,T) [J.m-3] 134 134 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) + epsi10 ) ) !0 if no ice and 1 if yes 135 e_i(ji,jj,jk,jl) = zindb * e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i )135 e_i(ji,jj,jk,jl) = zindb * e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i, wp ) 136 136 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac 137 137 END DO … … 171 171 zgamafr = 0.03 172 172 173 DO jj = 1, jpj 174 DO ji = 1, jpi 175 173 DO jj = 2, jpj 174 DO ji = 2, jpi 176 175 IF ( qlead(ji,jj) < 0._wp ) THEN 177 176 !------------- … … 243 242 END DO ! loop on ji ends 244 243 END DO ! loop on jj ends 244 ! 245 CALL lbc_lnk( zvrel(:,:), 'T', 1. ) 246 CALL lbc_lnk( hicol(:,:), 'T', 1. ) 245 247 246 248 ENDIF ! End of computation of frazil ice collection thickness … … 255 257 ! This occurs if open water energy budget is negative 256 258 nbpac = 0 259 npac(:) = 0 260 ! 257 261 DO jj = 1, jpj 258 262 DO ji = 1, jpi … … 298 302 299 303 CALL tab_2d_1d( nbpac, qlead_1d (1:nbpac) , qlead , jpi, jpj, npac(1:nbpac) ) 300 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) ) 301 305 CALL tab_2d_1d( nbpac, sfx_opw_1d(1:nbpac) , sfx_opw, jpi, jpj, npac(1:nbpac) ) 302 306 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw, jpi, jpj, npac(1:nbpac) ) 303 CALL tab_2d_1d( nbpac, wfx_opw_1d(1:nbpac) , wfx_opw, jpi, jpj, npac(1:nbpac) ) 304 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) ) 305 308 CALL tab_2d_1d( nbpac, zvrel_1d (1:nbpac) , zvrel , jpi, jpj, npac(1:nbpac) ) 306 309 … … 315 318 ! Keep old ice areas and volume in memory 316 319 !----------------------------------------- 317 zv_old(:,:) = zv_i_1d(:,:) 318 za_old(:,:) = za_i_1d(:,:) 319 320 zv_b(1:nbpac,:) = zv_i_1d(1:nbpac,:) 321 za_b(1:nbpac,:) = za_i_1d(1:nbpac,:) 320 322 !---------------------- 321 323 ! Thickness of new ice … … 324 326 zh_newice(ji) = hiccrit 325 327 END DO 326 IF( fraz_swi == 1 ) zh_newice( :) = hicol_b(:)328 IF( fraz_swi == 1 ) zh_newice(1:nbpac) = hicol_1d(1:nbpac) 327 329 328 330 !---------------------- … … 331 333 SELECT CASE ( num_sal ) 332 334 CASE ( 1 ) ! Sice = constant 333 zs_newice( :) = bulk_sal335 zs_newice(1:nbpac) = bulk_sal 334 336 CASE ( 2 ) ! Sice = F(z,t) [Vancoppenolle et al (2005)] 335 337 DO ji = 1, nbpac … … 339 341 END DO 340 342 CASE ( 3 ) ! Sice = F(z) [multiyear ice] 341 zs_newice( :) = 2.3343 zs_newice(1:nbpac) = 2.3 342 344 END SELECT 343 345 … … 348 350 DO ji = 1, nbpac 349 351 ztmelts = - tmut * zs_newice(ji) + rtt ! Melting point (K) 350 ze_newice(ji) = rhoic * ( cpic * ( ztmelts - t_bo_ b(ji) ) &351 & + 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 ) ) & 352 354 & - rcp * ( ztmelts - rtt ) ) 353 355 END DO ! ji … … 367 369 zEi = - ze_newice(ji) / rhoic ! specific enthalpy of forming ice [J/kg] 368 370 369 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] 370 372 ! clem: we suppose we are already at the freezing point (condition qlead<0 is satisfyied) 371 373 … … 438 440 DO ji = 1, nbpac 439 441 jl = jcat(ji) ! categroy in which new ice is put 440 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 441 443 END DO 442 444 … … 446 448 zinda = MAX( 0._wp, SIGN( 1._wp , zv_i_1d(ji,jl) - epsi20 ) ) 447 449 ze_i_1d(ji,jk,jl) = zswinew(ji) * ze_newice(ji) + & 448 & ( 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) ) & 449 451 & * zinda / MAX( zv_i_1d(ji,jl), epsi20 ) 450 452 END DO … … 472 474 za_i_1d(ji,jl) = zinda * za_i_1d(ji,jl) 473 475 zv_i_1d(ji,jl) = zv_i_1d(ji,jl) + zv_newfra 474 475 476 ! for remapping 476 477 h_i_old (ji,nlay_i+1) = zv_newfra … … 479 480 480 481 ! --- Ice enthalpy remapping --- ! 481 IF( zv_newfra > 0._wp ) THEN 482 CALL lim_thd_ent( 1, nbpac, ze_i_1d(1:nbpac,:,jl) ) 483 ENDIF 484 482 CALL lim_thd_ent( 1, nbpac, ze_i_1d(1:nbpac,:,jl) ) 485 483 ENDDO 486 484 … … 491 489 DO ji = 1, nbpac 492 490 zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_1d(ji,jl) + epsi20 ) ) ! 0 if no ice and 1 if yes 493 zoa_i_1d(ji,jl) = za_ old(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb491 zoa_i_1d(ji,jl) = za_b(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb 494 492 END DO 495 493 END DO … … 500 498 DO jl = 1, jpl 501 499 DO ji = 1, nbpac 502 zdv = zv_i_1d(ji,jl) - zv_ old(ji,jl)500 zdv = zv_i_1d(ji,jl) - zv_b(ji,jl) 503 501 zsmv_i_1d(ji,jl) = zsmv_i_1d(ji,jl) + zdv * zs_newice(ji) 504 502 END DO … … 519 517 CALL tab_1d_2d( nbpac, sfx_opw, npac(1:nbpac), sfx_opw_1d(1:nbpac), jpi, jpj ) 520 518 CALL tab_1d_2d( nbpac, wfx_opw, npac(1:nbpac), wfx_opw_1d(1:nbpac), jpi, jpj ) 521 CALL tab_1d_2d( nbpac, wfx_opw, npac(1:nbpac), wfx_opw_1d(1:nbpac), jpi, jpj )522 519 523 520 CALL tab_1d_2d( nbpac, hfx_thd, npac(1:nbpac), hfx_thd_1d(1:nbpac), jpi, jpj ) … … 534 531 DO ji = 1, jpi 535 532 ! heat content in Joules 536 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / ( REAL( nlay_i ) * unit_fac )533 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / ( REAL( nlay_i ,wp ) * unit_fac ) 537 534 END DO 538 535 END DO … … 543 540 CALL wrk_dealloc( jpij, jcat ) ! integer 544 541 CALL wrk_dealloc( jpij, zswinew, zv_newice, za_newice, zh_newice, ze_newice, zs_newice, zo_newice ) 545 CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_1d, z at_i_lev, zv_frazb, zvrel_1d )546 CALL wrk_dealloc( jpij,jpl, zv_ old, za_old, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d )547 CALL wrk_dealloc( jpij, jkmax,jpl, ze_i_1d )542 CALL wrk_dealloc( jpij, zdv_res, zda_res, zat_i_1d, zv_frazb, zvrel_1d ) 543 CALL wrk_dealloc( jpij,jpl, zv_b, za_b, za_i_1d, zv_i_1d, zoa_i_1d, zsmv_i_1d ) 544 CALL wrk_dealloc( jpij,nlay_i+1,jpl, ze_i_1d ) 548 545 CALL wrk_dealloc( jpi,jpj, zvrel ) 549 546 ! -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/par_ice.F90
r4688 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r4688 r4899 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(:) :: iatte_1d !: clemattenuation coef of the input solar flux (unitless)118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: oatte_1d !: clemattenuation coef of the input solar flux (unitless)116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: iatte_1d !: attenuation coef of the input solar flux (unitless) 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: oatte_1d !: attenuation coef of the input solar flux (unitless) 119 118 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_s_ b!: corresponding to the 2D var t_s121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_i_ b!: corresponding to the 2D var t_i122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: s_i_ b!: profiled ice salinity123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_i_ b!: Ice enthalpy per unit volume124 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_s_ b!: Snow enthalpy per unit volume119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_s_1d !: corresponding to the 2D var t_s 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_i_1d !: corresponding to the 2D var t_i 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: s_i_1d !: profiled ice salinity 122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_i_1d !: Ice enthalpy per unit volume 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: q_s_1d !: Snow enthalpy per unit volume 125 124 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qh_i_old 127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_i_old 125 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qh_i_old !: ice heat content (q*h, J.m-2) 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_i_old !: ice thickness layer (m) 128 127 129 128 INTEGER , PUBLIC :: jiindex_1d ! 1D index of debugging point … … 149 148 & qsr_ice_1d (jpij) , & 150 149 & fr1_i0_1d(jpij) , fr2_i0_1d(jpij) , qns_ice_1d(jpij) , & 151 & t_bo_b (jpij) , iatte_1d (jpij) , oatte_1d (jpij) , & 152 & hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) ,hfx_dif_1d(jpij) ,hfx_opw_1d(jpij) , & 150 & t_bo_1d (jpij) , iatte_1d (jpij) , oatte_1d (jpij) , & 151 & hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij), & 152 & hfx_dif_1d(jpij) ,hfx_opw_1d(jpij) , & 153 153 & hfx_thd_1d(jpij) , hfx_spr_1d(jpij) , & 154 & hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , hfx_res_1d(jpij) , hfx_err_rem_1d(jpij), STAT=ierr(1) ) 154 & hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , & 155 & hfx_res_1d(jpij) , hfx_err_rem_1d(jpij), STAT=ierr(1) ) 155 156 ! 156 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) , at_i_b (jpij) , & 157 & fhtur_1d (jpij) , wfx_ice_1d (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) , & 158 & 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) , & 157 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) , at_i_1d (jpij) , & 158 & fhtur_1d (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) , & 159 & fhld_1d (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d(jpij) , wfx_bom_1d(jpij) , & 160 & wfx_sum_1d(jpij) , wfx_sni_1d (jpij) , wfx_opw_1d (jpij) , wfx_res_1d (jpij) , & 159 161 & dqns_ice_1d(jpij) , qla_ice_1d (jpij) , dqla_ice_1d(jpij) , & 160 162 & tatm_ice_1d(jpij) , & 161 163 & i0 (jpij) , & 162 & 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) , & 164 & sfx_bri_1d (jpij) , sfx_bog_1d (jpij) , sfx_bom_1d (jpij) ,sfx_sum_1d (jpij) , & 165 & sfx_sni_1d (jpij) , sfx_opw_1d (jpij) , sfx_res_1d (jpij) , & 163 166 & dsm_i_fl_1d(jpij) , dsm_i_gd_1d(jpij) , dsm_i_se_1d(jpij) , & 164 & dsm_i_si_1d(jpij) , hicol_ b(jpij) , STAT=ierr(2) )167 & dsm_i_si_1d(jpij) , hicol_1d (jpij) , STAT=ierr(2) ) 165 168 ! 166 ALLOCATE( t_su_ b (jpij) , a_i_b (jpij) , ht_i_b(jpij) , &167 & ht_s_ b(jpij) , fc_su (jpij) , fc_bo_i (jpij) , &169 ALLOCATE( t_su_1d (jpij) , a_i_1d (jpij) , ht_i_1d (jpij) , & 170 & ht_s_1d (jpij) , fc_su (jpij) , fc_bo_i (jpij) , & 168 171 & dh_s_tot (jpij) , dh_i_surf(jpij) , dh_i_bott(jpij) , & 169 & dh_snowice(jpij) , sm_i_ b(jpij) , s_i_new (jpij) , &170 & t_s_ b(jpij,nlay_s), &171 & t_i_ b(jpij,jkmax), s_i_b(jpij,jkmax) , &172 & q_i_ b(jpij,jkmax), q_s_b(jpij,jkmax) , &173 & qh_i_old(jpij,0: jkmax), h_i_old(jpij,0:jkmax) , STAT=ierr(3))172 & dh_snowice(jpij) , sm_i_1d (jpij) , s_i_new (jpij) , & 173 & t_s_1d(jpij,nlay_s), & 174 & t_i_1d(jpij,nlay_i+1), s_i_1d(jpij,nlay_i+1) , & 175 & q_i_1d(jpij,nlay_i+1), q_s_1d(jpij,nlay_i+1) , & 176 & qh_i_old(jpij,0:nlay_i+1), h_i_old(jpij,0:nlay_i+1) , STAT=ierr(3)) 174 177 ! 175 178 thd_ice_alloc = MAXVAL( ierr ) -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
r4640 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r4689 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r4570 r4899 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 … … 131 130 REAL(wp) :: zztmp, zztmpx, zztmpy ! 132 131 !! 133 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 132 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 133 REAL(wp), POINTER, DIMENSION(:,:) :: z2ds ! 2D workspace 134 134 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d ! 3D workspace 135 135 !!---------------------------------------------------------------------- … … 137 137 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 138 138 ! 139 CALL wrk_alloc( jpi , jpj , z2d )139 CALL wrk_alloc( jpi , jpj , z2d , z2ds ) 140 140 CALL wrk_alloc( jpi , jpj, jpk , z3d ) 141 141 ! … … 193 193 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 194 194 195 ! clem: heat and salt content 196 z2d(:,:) = 0._wp 197 z2ds(:,:) = 0._wp 198 DO jk = 1, jpkm1 199 DO jj = 2, jpjm1 200 DO ji = fs_2, fs_jpim1 ! vector opt. 201 z2d(ji,jj) = z2d(ji,jj) + rau0 * rcp * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 202 z2ds(ji,jj) = z2ds(ji,jj) + rau0 * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 203 END DO 204 END DO 205 END DO 206 CALL lbc_lnk( z2d, 'T', 1. ) 207 CALL lbc_lnk( z2ds, 'T', 1. ) 208 CALL iom_put( "heatc", z2d ) ! vertically integrated heat content (J/m2) 209 CALL iom_put( "saltc", z2ds ) ! vertically integrated salt content (PSU*kg/m2) 210 211 ! 212 rke(:,:,jk) = 0._wp ! kinetic energy 213 DO jk = 1, jpkm1 214 DO jj = 2, jpjm1 215 DO ji = fs_2, fs_jpim1 ! vector opt. 216 zztmp = 1._wp / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 217 zztmpx = 0.5 * ( un(ji-1,jj,jk) * un(ji-1,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) & 218 & + un(ji ,jj,jk) * un(ji ,jj,jk) * e2u(ji ,jj) * fse3u(ji ,jj,jk) ) & 219 & * zztmp 220 ! 221 zztmpy = 0.5 * ( vn(ji,jj-1,jk) * vn(ji,jj-1,jk) * e1v(ji,jj-1) * fse3v(ji,jj-1,jk) & 222 & + vn(ji,jj ,jk) * vn(ji,jj ,jk) * e1v(ji,jj ) * fse3v(ji,jj ,jk) ) & 223 & * zztmp 224 ! 225 rke(ji,jj,jk) = 0.5_wp * ( zztmpx + zztmpy ) 226 ! 227 ENDDO 228 ENDDO 229 ENDDO 230 CALL lbc_lnk( rke, 'T', 1. ) 231 CALL iom_put( "eken", rke ) 232 195 233 IF( lk_diaar5 ) THEN 196 234 z3d(:,:,jpk) = 0.e0 197 235 DO jk = 1, jpkm1 198 z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) 236 z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 199 237 END DO 200 238 CALL iom_put( "u_masstr", z3d ) ! mass transport in i-direction 239 201 240 zztmp = 0.5 * rcp 202 241 z2d(:,:) = 0.e0 242 z2ds(:,:) = 0.e0 203 243 DO jk = 1, jpkm1 204 244 DO jj = 2, jpjm1 205 245 DO ji = fs_2, fs_jpim1 ! vector opt. 206 246 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 247 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) ) 207 248 END DO 208 249 END DO 209 250 END DO 210 251 CALL lbc_lnk( z2d, 'U', -1. ) 252 CALL lbc_lnk( z2ds, 'U', -1. ) 211 253 CALL iom_put( "u_heattr", z2d ) ! heat transport in i-direction 254 CALL iom_put( "u_salttr", z2ds ) ! salt transport in i-direction 255 256 z3d(:,:,jpk) = 0.e0 212 257 DO jk = 1, jpkm1 213 z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) 258 z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) 214 259 END DO 215 260 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction 261 216 262 z2d(:,:) = 0.e0 263 z2ds(:,:) = 0.e0 217 264 DO jk = 1, jpkm1 218 265 DO jj = 2, jpjm1 219 266 DO ji = fs_2, fs_jpim1 ! vector opt. 220 267 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * zztmp * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 268 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) ) 221 269 END DO 222 270 END DO 223 271 END DO 224 272 CALL lbc_lnk( z2d, 'V', -1. ) 225 CALL iom_put( "v_heattr", z2d ) ! heat transport in i-direction 226 ENDIF 227 ! 228 CALL wrk_dealloc( jpi , jpj , z2d ) 273 CALL lbc_lnk( z2ds, 'V', -1. ) 274 CALL iom_put( "v_heattr", z2d ) ! heat transport in j-direction 275 CALL iom_put( "v_salttr", z2ds ) ! salt transport in j-direction 276 ENDIF 277 ! 278 CALL wrk_dealloc( jpi , jpj , z2d , z2ds ) 229 279 CALL wrk_dealloc( jpi , jpj, jpk , z3d ) 230 280 ! -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r4700 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r3294 r4899 286 286 IF ( llaction ) THEN 287 287 288 kinfo = OASIS_Rcv289 288 pdata(nldi:nlei, nldj:nlej,jc) = exfld(:,:) 290 289 … … 304 303 WRITE(numout,*) '****************' 305 304 ENDIF 305 306 ! Ideally we would not reuse kinfo, but define a separate variable 307 ! for use as the return code from this routine to avoid confusion 308 ! with the return code previously obtained from the coupler. 309 kinfo = OASIS_Rcv 306 310 307 311 ELSE -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r4663 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r4689 r4899 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 … … 289 290 ! 290 291 ! ! Store previous ice values 291 !!gm : remark old_... should becomes ...b as tn versus tb 292 old_a_i (:,:,:) = a_i (:,:,:) ! ice area 293 old_e_i (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 294 old_v_i (:,:,:) = v_i (:,:,:) ! ice volume 295 old_v_s (:,:,:) = v_s (:,:,:) ! snow volume 296 old_e_s (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 297 old_smv_i(:,:,:) = smv_i(:,:,:) ! salt content 298 old_oa_i (:,:,:) = oa_i (:,:,:) ! areal age content 299 old_u_ice(:,:) = u_ice(:,:) 300 old_v_ice(:,:) = v_ice(:,:) 292 a_i_b (:,:,:) = a_i (:,:,:) ! ice area 293 e_i_b (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 294 v_i_b (:,:,:) = v_i (:,:,:) ! ice volume 295 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 296 e_s_b (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 297 smv_i_b(:,:,:) = smv_i(:,:,:) ! salt content 298 oa_i_b (:,:,:) = oa_i (:,:,:) ! areal age content 299 u_ice_b(:,:) = u_ice(:,:) 300 v_ice_b(:,:) = v_ice(:,:) 301 301 302 302 ! trends !!gm is it truly necessary ??? … … 312 312 ! salt, heat and mass fluxes 313 313 sfx (:,:) = 0._wp ; 314 sfx_bri(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp314 sfx_bri(:,:) = 0._wp ; 315 315 sfx_sni(:,:) = 0._wp ; sfx_opw(:,:) = 0._wp 316 316 sfx_bog(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp … … 371 371 ENDIF 372 372 ! !- Change old values for new values 373 old_u_ice(:,:) = u_ice(:,:)374 old_v_ice(:,:) = v_ice(:,:)375 old_a_i(:,:,:) = a_i(:,:,:)376 old_v_s(:,:,:) = v_s(:,:,:)377 old_v_i(:,:,:) = v_i(:,:,:)378 old_e_s(:,:,:,:) = e_s(:,:,:,:)379 old_e_i(:,:,:,:) = e_i(:,:,:,:)380 o ld_oa_i(:,:,:) = oa_i(:,:,:)381 old_smv_i(:,:,:) = smv_i(:,:,:)373 u_ice_b(:,:) = u_ice(:,:) 374 v_ice_b(:,:) = v_ice(:,:) 375 a_i_b (:,:,:) = a_i (:,:,:) 376 v_s_b (:,:,:) = v_s (:,:,:) 377 v_i_b (:,:,:) = v_i (:,:,:) 378 e_s_b (:,:,:,:) = e_s (:,:,:,:) 379 e_i_b (:,:,:,:) = e_i (:,:,:,:) 380 oa_i_b (:,:,:) = oa_i (:,:,:) 381 smv_i_b(:,:,:) = smv_i(:,:,:) 382 382 383 383 ! ---------------------------------------------- … … 435 435 IF( lk_cpl ) THEN 436 436 IF ( ln_iceflx_ave .OR. ln_iceflx_linear ) & 437 & 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) 437 & CALL wrk_dealloc( jpi, jpj, ztem_ice_all , zalb_ice_all , z_qsr_ice_all, z_qns_ice_all, & 438 & z_qla_ice_all, z_dqns_ice_all, z_dqla_ice_all) 438 439 ENDIF 439 440 ! … … 472 473 !WRITE(numout,*) ' at_i ', at_i(ji,jj) 473 474 !WRITE(numout,*) ' Point - category', ji, jj, jl 474 !WRITE(numout,*) ' a_i *** a_i_ old ', a_i (ji,jj,jl), old_a_i(ji,jj,jl)475 !WRITE(numout,*) ' v_i *** v_i_ old ', v_i (ji,jj,jl), old_v_i(ji,jj,jl)475 !WRITE(numout,*) ' a_i *** a_i_b ', a_i (ji,jj,jl), a_i_b (ji,jj,jl) 476 !WRITE(numout,*) ' v_i *** v_i_b ', v_i (ji,jj,jl), v_i_b (ji,jj,jl) 476 477 !WRITE(numout,*) ' d_a_i_thd/trp ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl) 477 478 !WRITE(numout,*) ' d_v_i_thd/trp ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl) … … 583 584 !DO jl = 1, jpl 584 585 !WRITE(numout,*) ' Category no: ', jl 585 !WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' old_a_i : ', old_a_i(ji,jj,jl)586 !WRITE(numout,*) ' a_i : ', a_i (ji,jj,jl) , ' a_i_b : ', a_i_b (ji,jj,jl) 586 587 !WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 587 !WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' old_v_i : ', old_v_i(ji,jj,jl)588 !WRITE(numout,*) ' v_i : ', v_i (ji,jj,jl) , ' v_i_b : ', v_i_b (ji,jj,jl) 588 589 !WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 589 590 !WRITE(numout,*) ' ' … … 761 762 WRITE(numout,*) ' strength : ', strength(ji,jj) 762 763 WRITE(numout,*) ' d_u_ice_dyn : ', d_u_ice_dyn(ji,jj), ' d_v_ice_dyn : ', d_v_ice_dyn(ji,jj) 763 WRITE(numout,*) ' old_u_ice : ', old_u_ice(ji,jj) , ' old_v_ice : ', old_v_ice(ji,jj)764 WRITE(numout,*) ' u_ice_b : ', u_ice_b(ji,jj) , ' v_ice_b : ', v_ice_b(ji,jj) 764 765 WRITE(numout,*) 765 766 … … 771 772 WRITE(numout,*) ' t_su : ', t_su(ji,jj,jl) , ' t_s : ', t_s(ji,jj,1,jl) 772 773 WRITE(numout,*) ' sm_i : ', sm_i(ji,jj,jl) , ' o_i : ', o_i(ji,jj,jl) 773 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' old_a_i : ', old_a_i(ji,jj,jl)774 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) , ' a_i_b : ', a_i_b(ji,jj,jl) 774 775 WRITE(numout,*) ' d_a_i_trp : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd : ', d_a_i_thd(ji,jj,jl) 775 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' old_v_i : ', old_v_i(ji,jj,jl)776 WRITE(numout,*) ' v_i : ', v_i(ji,jj,jl) , ' v_i_b : ', v_i_b(ji,jj,jl) 776 777 WRITE(numout,*) ' d_v_i_trp : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd : ', d_v_i_thd(ji,jj,jl) 777 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' old_v_s : ', old_v_s(ji,jj,jl)778 WRITE(numout,*) ' v_s : ', v_s(ji,jj,jl) , ' v_s_b : ', v_s_b(ji,jj,jl) 778 779 WRITE(numout,*) ' d_v_s_trp : ', d_v_s_trp(ji,jj,jl) , ' d_v_s_thd : ', d_v_s_thd(ji,jj,jl) 779 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl)/1.0e9 , ' old_ei1 : ', old_e_i(ji,jj,1,jl)/1.0e9780 WRITE(numout,*) ' e_i1 : ', e_i(ji,jj,1,jl)/1.0e9 , ' ei1 : ', e_i_b(ji,jj,1,jl)/1.0e9 780 781 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 781 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl)/1.0e9 , ' old_ei2 : ', old_e_i(ji,jj,2,jl)/1.0e9782 WRITE(numout,*) ' e_i2 : ', e_i(ji,jj,2,jl)/1.0e9 , ' ei2_b : ', e_i_b(ji,jj,2,jl)/1.0e9 782 783 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 783 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' old_e_snow : ', old_e_s(ji,jj,1,jl)784 WRITE(numout,*) ' e_snow : ', e_s(ji,jj,1,jl) , ' e_snow_b : ', e_s_b(ji,jj,1,jl) 784 785 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) 785 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) , ' old_smv_i : ', old_smv_i(ji,jj,jl)786 WRITE(numout,*) ' smv_i : ', smv_i(ji,jj,jl) , ' smv_i_b : ', smv_i_b(ji,jj,jl) 786 787 WRITE(numout,*) ' d_smv_i_trp: ', d_smv_i_trp(ji,jj,jl) , ' d_smv_i_thd: ', d_smv_i_thd(ji,jj,jl) 787 WRITE(numout,*) ' oa_i : ', oa_i(ji,jj,jl) , ' o ld_oa_i : ', old_oa_i(ji,jj,jl)788 WRITE(numout,*) ' oa_i : ', oa_i(ji,jj,jl) , ' oa_i_b : ', oa_i_b(ji,jj,jl) 788 789 WRITE(numout,*) ' d_oa_i_trp : ', d_oa_i_trp(ji,jj,jl) , ' d_oa_i_thd : ', d_oa_i_thd(ji,jj,jl) 789 790 END DO !jl … … 793 794 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 794 795 WRITE(numout,*) ' - Heat fluxes in and out the ice ***' 795 WRITE(numout,*) ' qsr_ini : ', pfrld(ji,jj) * qsr(ji,jj) + SUM( old_a_i(ji,jj,:) * qsr_ice(ji,jj,:) )796 WRITE(numout,*) ' qns_ini : ', pfrld(ji,jj) * qns(ji,jj) + SUM( old_a_i(ji,jj,:) * qns_ice(ji,jj,:) )796 WRITE(numout,*) ' qsr_ini : ', pfrld(ji,jj) * qsr(ji,jj) + SUM( a_i_b(ji,jj,:) * qsr_ice(ji,jj,:) ) 797 WRITE(numout,*) ' qns_ini : ', pfrld(ji,jj) * qns(ji,jj) + SUM( a_i_b(ji,jj,:) * qns_ice(ji,jj,:) ) 797 798 WRITE(numout,*) 798 799 WRITE(numout,*) -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r4621 r4899 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 … … 205 209 CALL lim_trp_2 ( kt ) ! Ice transport ( Advection/diffusion ) 206 210 IF( ln_limdmp ) CALL lim_dmp_2 ( kt ) ! Ice damping 211 #if defined key_bdy 212 CALL bdy_ice_lim( kt ) ! bdy ice thermo 213 #endif 207 214 END IF 208 215 #if defined key_coupled -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4624 r4899 186 186 187 187 fmmflx(:,:) = 0.0_wp ! freezing-melting array initialisation 188 189 taum(:,:) = 0.0_wp ! Initialise taum for use in gls in case of reduced restart 188 190 189 191 ! ! restartability -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/oce.F90
r4354 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/OPA_SRC/step.F90
r4624 r4899 302 302 IF( lk_diaobs ) CALL dia_obs( kstp ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 303 303 304 IF( lrst_oce .AND. ln_diahsb ) CALL dia_hsb_rst( kstp, 'WRITE' )305 304 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 306 305 ! Control and restarts -
branches/2014/dev_r4743_NOC2_ZTS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r4624 r4899 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_r4743_NOC2_ZTS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r4641 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/BATCH_TEMPLATE/batch-x3750_ADA
r4255 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/iodef_sette.xml
r4242 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/prepare_exe_dir.sh
r4373 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/prepare_job.sh
r4687 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/sette.sh
r4379 r4899 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_r4743_NOC2_ZTS/NEMOGCM/SETTE/sette_beginner.sh
r4147 r4899 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_r4743_NOC2_ZTS/NEMOGCM/TOOLS/COMPILE/bld.cfg
r3695 r4899 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_r4743_NOC2_ZTS/NEMOGCM/TOOLS/COMPILE/bld_preproagr.cfg
r3850 r4899 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_r4743_NOC2_ZTS/NEMOGCM/TOOLS/COMPILE/bld_tools.cfg
r2281 r4899 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_r4743_NOC2_ZTS/NEMOGCM/TOOLS/COMPILE/bldxag.cfg
r3695 r4899 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.