Changeset 8752
- Timestamp:
- 2017-11-20T13:54:32+01:00 (5 years ago)
- Location:
- branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM
- Files:
-
- 3 deleted
- 29 edited
- 3 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/CONFIG/ORCA2_LIM3_PISCES/EXP00/namelist_ice_cfg
r8738 r8752 13 13 !! 11 - Ice growth in open water (namthd_do) 14 14 !! 12 - Ice salinity (namthd_sal) 15 !! 13 - Ice melt ponds (nam mp)15 !! 13 - Ice melt ponds (namthd_pnd) 16 16 !! 14 - Ice initialization (namini) 17 17 !! 15 - Ice/snow albedos (namalb) … … 20 20 ! 21 21 !------------------------------------------------------------------------------ 22 &nampar ! Generic parameters22 &nampar ! Generic parameters 23 23 !------------------------------------------------------------------------------ 24 24 / 25 25 !------------------------------------------------------------------------------ 26 &namitd ! Ice discretization26 &namitd ! Ice discretization 27 27 !------------------------------------------------------------------------------ 28 28 / 29 29 !------------------------------------------------------------------------------ 30 &namdyn ! Ice dynamics30 &namdyn ! Ice dynamics 31 31 !------------------------------------------------------------------------------ 32 32 / … … 48 48 / 49 49 !------------------------------------------------------------------------------ 50 &namthd ! Ice thermodynamics50 &namthd ! Ice thermodynamics 51 51 !------------------------------------------------------------------------------ 52 52 / … … 56 56 / 57 57 !------------------------------------------------------------------------------ 58 &namthd_da ! Ice lateral melting58 &namthd_da ! Ice lateral melting 59 59 !------------------------------------------------------------------------------ 60 60 / 61 61 !------------------------------------------------------------------------------ 62 &namthd_do ! Ice growth in open water62 &namthd_do ! Ice growth in open water 63 63 !------------------------------------------------------------------------------ 64 64 / … … 68 68 / 69 69 !------------------------------------------------------------------------------ 70 &nam mp! Melt ponds70 &namthd_pnd ! Melt ponds 71 71 !------------------------------------------------------------------------------ 72 72 / 73 73 !------------------------------------------------------------------------------ 74 &namini ! Ice initialization74 &namini ! Ice initialization 75 75 !------------------------------------------------------------------------------ 76 76 / 77 77 !------------------------------------------------------------------------------ 78 &namalb ! albedo parameters78 &namalb ! albedo parameters 79 79 !------------------------------------------------------------------------------ 80 80 / 81 81 !------------------------------------------------------------------------------ 82 &namdia ! Diagnostics82 &namdia ! Diagnostics 83 83 !------------------------------------------------------------------------------ 84 84 / -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/CONFIG/ORCA2_SAS_LIM3/EXP00/namelist_ice_cfg
r8738 r8752 1 1 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 2 !! ESIM configuration namelist: Overwrites SHARED/namelist_ice_lim3_ref 3 !! 1 - Generic parameters (namice_run) 4 !! 2 - Ice thickness discretization (namice_itd) 5 !! 3 - Ice dynamics (namice_dyn) 6 !! 4 - Ice ridging/rafting (namice_rdgrft) 7 !! 5 - Ice rheology (namice_rhg) 8 !! 6 - Ice advection (namice_adv) 9 !! 7 - Ice thermodynamics (namice_thd) 10 !! 8 - Ice salinity (namice_sal) 11 !! 9 - Ice melt ponds (namice_mp) 12 !! 10 - Ice initialization (namice_ini) 13 !! 11 - Ice/snow albedos (namice_alb) 14 !! 12 - Ice diagnostics (namice_dia) 3 !! 1 - Generic parameters (nampar) 4 !! 2 - Ice thickness discretization (namitd) 5 !! 3 - Ice dynamics (namdyn) 6 !! 4 - Ice ridging/rafting (namdyn_rdgrft) 7 !! 5 - Ice rheology (namdyn_rhg) 8 !! 6 - Ice advection (namdyn_adv) 9 !! 7 - Ice surface forcing (namforcing) 10 !! 8 - Ice thermodynamics (namthd) 11 !! 9 - Ice heat diffusion (namthd_zdf) 12 !! 10 - Ice lateral melting (namthd_da) 13 !! 11 - Ice growth in open water (namthd_do) 14 !! 12 - Ice salinity (namthd_sal) 15 !! 13 - Ice melt ponds (namthd_pnd) 16 !! 14 - Ice initialization (namini) 17 !! 15 - Ice/snow albedos (namalb) 18 !! 16 - Ice diagnostics (namdia) 15 19 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 16 20 ! 17 21 !------------------------------------------------------------------------------ 18 &nam ice_run! Generic parameters22 &nampar ! Generic parameters 19 23 !------------------------------------------------------------------------------ 20 24 / 21 25 !------------------------------------------------------------------------------ 22 &nami ce_itd! Ice discretization26 &namitd ! Ice discretization 23 27 !------------------------------------------------------------------------------ 24 28 / 25 29 !------------------------------------------------------------------------------ 26 &nam ice_dyn! Ice dynamics30 &namdyn ! Ice dynamics 27 31 !------------------------------------------------------------------------------ 28 32 / 29 33 !------------------------------------------------------------------------------ 30 &nam ice_rdgrft ! Ice ridging/rafting34 &namdyn_rdgrft ! Ice ridging/rafting 31 35 !------------------------------------------------------------------------------ 32 36 / 33 37 !------------------------------------------------------------------------------ 34 &nam ice_rhg ! Ice rheology38 &namdyn_rhg ! Ice rheology 35 39 !------------------------------------------------------------------------------ 36 40 / 37 41 !------------------------------------------------------------------------------ 38 &nam ice_adv ! Ice advection42 &namdyn_adv ! Ice advection 39 43 !------------------------------------------------------------------------------ 40 44 / 41 45 !------------------------------------------------------------------------------ 42 &nam ice_thd ! Ice thermodynamics46 &namforcing ! Ice surface forcing 43 47 !------------------------------------------------------------------------------ 44 48 / 45 49 !------------------------------------------------------------------------------ 46 &nam ice_sal ! Ice salinity50 &namthd ! Ice thermodynamics 47 51 !------------------------------------------------------------------------------ 48 52 / 49 53 !------------------------------------------------------------------------------ 50 &nam icemp ! Melt ponds54 &namthd_zdf ! Ice heat diffusion 51 55 !------------------------------------------------------------------------------ 52 56 / 53 57 !------------------------------------------------------------------------------ 54 &nam ice_ini ! Ice initialization58 &namthd_da ! Ice lateral melting 55 59 !------------------------------------------------------------------------------ 56 60 / 57 61 !------------------------------------------------------------------------------ 58 &nam ice_alb ! albedo parameters62 &namthd_do ! Ice growth in open water 59 63 !------------------------------------------------------------------------------ 60 64 / 61 65 !------------------------------------------------------------------------------ 62 &nam ice_dia ! Diagnostics66 &namthd_sal ! Ice salinity 63 67 !------------------------------------------------------------------------------ 64 68 / 69 !------------------------------------------------------------------------------ 70 &namthd_pnd ! Melt ponds 71 !------------------------------------------------------------------------------ 72 / 73 !------------------------------------------------------------------------------ 74 &namini ! Ice initialization 75 !------------------------------------------------------------------------------ 76 / 77 !------------------------------------------------------------------------------ 78 &namalb ! albedo parameters 79 !------------------------------------------------------------------------------ 80 / 81 !------------------------------------------------------------------------------ 82 &namdia ! Diagnostics 83 !------------------------------------------------------------------------------ 84 / -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/CONFIG/SHARED/field_def_nemo-lim.xml
r8738 r8752 132 132 <field id="icevmp" long_name="melt pond volume" standard_name="sea_ice_meltpond_volume" unit="m" /> 133 133 134 <field id="iceconc_cat" long_name="Sea-ice area fractions in thickness categories"unit="" grid_ref="grid_T_3D_ncatice" />134 <field id="iceconc_cat" long_name="Sea-ice concentration in thickness categories" unit="" grid_ref="grid_T_3D_ncatice" /> 135 135 <field id="icethic_cat" long_name="Sea-ice thickness in thickness categories" unit="m" grid_ref="grid_T_3D_ncatice" /> 136 136 <field id="snowthic_cat" long_name="Snow thickness in thickness categories" unit="m" grid_ref="grid_T_3D_ncatice" /> … … 140 140 <field id="icetemp_cat" long_name="Ice temperature for categories" unit="degC" grid_ref="grid_T_3D_ncatice" /> 141 141 <field id="snwtemp_cat" long_name="Snow temperature for categories" unit="degC" grid_ref="grid_T_3D_ncatice" /> 142 <field id="iceamp_cat" long_name="Ice melt pond fraction for categories"unit="%" grid_ref="grid_T_3D_ncatice" />142 <field id="iceamp_cat" long_name="Ice melt pond concentration for categories" unit="%" grid_ref="grid_T_3D_ncatice" /> 143 143 <field id="icevmp_cat" long_name="Ice melt pond volume for categories" unit="m" grid_ref="grid_T_3D_ncatice" /> 144 <field id="icehmp_cat" long_name="Ice melt pond thickness for categories" unit="m" grid_ref="grid_T_3D_ncatice" /> 145 <field id="iceafp_cat" long_name="Ice melt pond fraction for categories" unit="m" grid_ref="grid_T_3D_ncatice" /> 144 146 145 147 <field id="micet" long_name="Mean ice temperature" unit="degC" /> … … 186 188 <field id="vfxspr" long_name="snw precipitation on ice" unit="kg/m2/s" /> 187 189 <field id="vfxthin" long_name="thermo ice prod. for thin ice(20cm) + open water" unit="kg/m2/s" /> 190 <field id="vfxpnd" long_name="melt pond water flux to ocean" unit="kg/m2/s" /> 188 191 189 192 <field id="afxtot" long_name="area tendency (total)" unit="s-1" /> -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r8738 r8752 13 13 !! 11 - Ice growth in open water (namthd_do) 14 14 !! 12 - Ice salinity (namthd_sal) 15 !! 13 - Ice melt ponds (nam mp)15 !! 13 - Ice melt ponds (namthd_pnd) 16 16 !! 14 - Ice initialization (namini) 17 17 !! 15 - Ice/snow albedos (namalb) … … 20 20 ! 21 21 !------------------------------------------------------------------------------ 22 &nampar ! Generic parameters22 &nampar ! Generic parameters 23 23 !------------------------------------------------------------------------------ 24 24 jpl = 5 ! number of ice categories … … 39 39 / 40 40 !------------------------------------------------------------------------------ 41 &namitd ! Ice discretization 42 !------------------------------------------------------------------------------ 43 rn_himean = 2.0 ! expected domain-average ice thickness (m) 41 &namitd ! Ice discretization 42 !------------------------------------------------------------------------------ 43 ln_cat_hfn = .true. ! ice categories are defined by a function following rn_himean**(-0.05) 44 rn_himean = 2.0 ! expected domain-average ice thickness (m) 45 ln_cat_usr = .false. ! ice categories are defined by rn_catbnd below (m) 46 rn_catbnd = 0.,0.45,1.1,2.1,3.7,6.0 44 47 rn_himin = 0.1 ! minimum ice thickness (m) used in remapping 45 48 / 46 49 !------------------------------------------------------------------------------ 47 &namdyn ! Ice dynamics50 &namdyn ! Ice dynamics 48 51 !------------------------------------------------------------------------------ 49 52 ln_dynFULL = .true. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction) … … 90 93 !------------------------------------------------------------------------------ 91 94 ln_rhg_EVP = .true. ! EVP rheology 92 rn_creepl = 1.0e-12 ! creep limit [1/s] 95 ln_aEVP = .false. ! adaptive rheology (Kimmritz et al. 2016 & 2017) 96 rn_creepl = 2.0e-9 ! creep limit [1/s] 93 97 rn_ecc = 2.0 ! eccentricity of the elliptical yield curve 94 98 nn_nevp = 120 ! number of EVP subcycles … … 118 122 ! = 2 Redistribute a single flux over categories 119 123 ! ==> coupled mode only 120 / 121 !------------------------------------------------------------------------------ 122 &namthd ! Ice thermodynamics 124 nice_jules = 1 ! Jules coupling (0=OFF, 1=EMULATED, 2=ACTIVE) 125 / 126 !------------------------------------------------------------------------------ 127 &namthd ! Ice thermodynamics 123 128 !------------------------------------------------------------------------------ 124 129 ln_icedH = .true. ! activate ice thickness change from growing/melting (T) or not (F) 125 130 ln_icedA = .true. ! activate lateral melting param. (T) or not (F) 126 131 ln_icedO = .true. ! activate ice growth in open-water (T) or not (F) 127 ln_icedS = .true. ! activate gravity drainage and flushing(T) or not (F)132 ln_icedS = .true. ! activate brine drainage (T) or not (F) 128 133 / 129 134 !------------------------------------------------------------------------------ … … 136 141 ! Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) 137 142 rn_kappa_i = 1.0 ! radiation attenuation coefficient in sea ice [1/m] 138 ln_dqns_i = .true. ! change the surface non-solar flux with surface temperature (T) or not (F)139 143 / 140 144 !------------------------------------------------------------------------------ … … 150 154 / 151 155 !------------------------------------------------------------------------------ 152 &namthd_do ! Ice growth in open water156 &namthd_do ! Ice growth in open water 153 157 !------------------------------------------------------------------------------ 154 158 rn_hinew = 0.1 ! thickness for new ice formation in open water (m), must be larger than rn_hnewice … … 174 178 / 175 179 !------------------------------------------------------------------------------ 176 &nam mp! Melt ponds177 !------------------------------------------------------------------------------ 178 ln_pnd = .false. ! active melt ponds179 ln_pnd_rad = .false. ! active melt ponds radiative coupling180 ln_pnd_ fw = .false. ! active melt ponds freshwater coupling181 nn_pnd_scheme = 0 ! type of melt pond scheme : =0 prescribed ( Tsu=0 ), =1 empirical, =2 topographic182 rn_apnd = 0.2 ! prescribed pond fraction, at Tsu=0 : (0<rn_apnd<1, nn_pnd_scheme = 0)183 rn_hpnd = 0.05 ! prescribed pond depth, at Tsu=0 : (0<rn_apnd<1, nn_pnd_scheme = 0)184 / 185 !------------------------------------------------------------------------------ 186 &namini ! Ice initialization180 &namthd_pnd ! Melt ponds 181 !------------------------------------------------------------------------------ 182 ln_pnd_H12 = .false. ! activate evolutive melt ponds (from Holland et al 2012) 183 ln_pnd_fwb = .false. ! melt ponds store freshwater or not 184 ln_pnd_CST = .false. ! activate constant melt ponds 185 rn_apnd = 0.2 ! prescribed pond fraction, at Tsu=0 186 rn_hpnd = 0.05 ! prescribed pond depth, at Tsu=0 187 ln_pnd_alb = .false. ! melt ponds affect albedo or not 188 / 189 !------------------------------------------------------------------------------ 190 &namini ! Ice initialization 187 191 !------------------------------------------------------------------------------ 188 192 ln_iceini = .true. ! activate ice initialization (T) or not (F) … … 209 213 / 210 214 !------------------------------------------------------------------------------ 211 &namalb ! albedo parameters 212 !------------------------------------------------------------------------------ 213 nn_ice_alb = 1 ! parameterization of ice/snow albedo 214 ! 0: Shine & Henderson-Sellers (JGR 1985), giving clear-sky albedo 215 ! 1: "home made" based on Brandt et al. (JClim 2005) 216 ! and Grenfell & Perovich (JGR 2004), giving cloud-sky albedo 217 ! 2: as 1 with melt ponds 218 rn_alb_sdry = 0.85 ! dry snow albedo : 0.80 (nn_ice_alb = 0); 0.85 (nn_ice_alb = 1); obs 0.85-0.87 (cloud-sky) 219 rn_alb_smlt = 0.75 ! melting snow albedo : 0.65 ( '' ) ; 0.75 ( '' ) ; obs 0.72-0.82 ( '' ) 220 rn_alb_idry = 0.60 ! dry ice albedo : 0.72 ( '' ) ; 0.60 ( '' ) ; obs 0.54-0.65 ( '' ) 221 rn_alb_imlt = 0.50 ! bare puddled ice albedo : 0.53 ( '' ) ; 0.50 ( '' ) ; obs 0.49-0.58 ( '' ) 222 rn_alb_dpnd = 0.27 ! ponded ice albedo : 0.25 ( '' ) ; 0.27 ( '' ) ; obs 0.10-0.30 ( '' ) 223 / 224 !------------------------------------------------------------------------------ 225 &namdia ! Diagnostics 215 &namalb ! albedo parameters 216 !------------------------------------------------------------------------------ 217 ! ! ! obs range (cloud-sky) 218 rn_alb_sdry = 0.85 ! dry snow albedo : 0.85 -- 0.87 219 rn_alb_smlt = 0.75 ! melting snow albedo : 0.72 -- 0.82 220 rn_alb_idry = 0.60 ! dry ice albedo : 0.54 -- 0.65 221 rn_alb_imlt = 0.50 ! bare puddled ice albedo : 0.49 -- 0.58 222 rn_alb_dpnd = 0.27 ! ponded ice albedo : 0.10 -- 0.30 223 / 224 !------------------------------------------------------------------------------ 225 &namdia ! Diagnostics 226 226 !------------------------------------------------------------------------------ 227 227 ln_icediachk = .false. ! check online the heat, mass & salt budgets (T) or not (F) -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/CONFIG/TEST_CASES/SAS_BIPER/EXP00/namelist_ice_cfg
r8738 r8752 1 1 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 !! LIM3 namelist: 3 !! 1 - Generic parameters (namicerun) 4 !! 2 - Diagnostics (namicediag) 5 !! 3 - Ice initialization (namiceini) 6 !! 4 - Ice discretization (namiceitd) 7 !! 5 - Ice dynamics and transport (namicedyn) 8 !! 6 - Ice thermodynamics (namicethd) 9 !! 7 - Ice salinity (namicesal) 10 !! 8 - Ice mechanical redistribution (namiceitdme) 11 !! 9 - Ice/snow albedos (namicealb) 2 !! ESIM namelist: 3 !! 1 - Generic parameters (nampar) 4 !! 2 - Ice thickness discretization (namitd) 5 !! 3 - Ice dynamics (namdyn) 6 !! 4 - Ice ridging/rafting (namdyn_rdgrft) 7 !! 5 - Ice rheology (namdyn_rhg) 8 !! 6 - Ice advection (namdyn_adv) 9 !! 7 - Ice surface forcing (namforcing) 10 !! 8 - Ice thermodynamics (namthd) 11 !! 9 - Ice heat diffusion (namthd_zdf) 12 !! 10 - Ice lateral melting (namthd_da) 13 !! 11 - Ice growth in open water (namthd_do) 14 !! 12 - Ice salinity (namthd_sal) 15 !! 13 - Ice melt ponds (namthd_pnd) 16 !! 14 - Ice initialization (namini) 17 !! 15 - Ice/snow albedos (namalb) 18 !! 16 - Ice diagnostics (namdia) 12 19 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 13 20 ! 14 21 !------------------------------------------------------------------------------ 15 &nam icerun! Generic parameters22 &nampar ! Generic parameters 16 23 !------------------------------------------------------------------------------ 17 jpl = 1 ! number of ice categories 18 nlay_i = 1 ! number of ice layers 19 ln_limthd = .false. ! ice thermo (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO 20 ln_limdyn = .true. ! ice dynamics (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO 21 nn_limdyn = 0 ! (ln_limdyn=T) switch for ice dynamics 22 ! 2: total 23 ! 1: advection only (no diffusion, no ridging/rafting) 24 ! 0: advection only (as 1 but with prescribed velocity, bypass rheology) 25 rn_uice = 0.5 ! (nn_limdyn=0) ice u-velocity 26 rn_vice = 0.0 ! (nn_limdyn=0) ice v-velocity 24 jpl = 1 ! number of ice categories 25 nlay_i = 1 ! number of ice layers 26 ln_icedyn = .true. ! ice dynamics (T) or not (F) 27 ln_icethd = .false. ! ice thermo (T) or not (F) 27 28 / 28 29 !------------------------------------------------------------------------------ 29 &namicediag ! Diagnostics 30 &namitd ! Ice discretization 31 !------------------------------------------------------------------------------ 32 rn_himin = 0.1 ! minimum ice thickness (m) used in remapping 33 / 34 !------------------------------------------------------------------------------ 35 &namdyn ! Ice dynamics 36 !------------------------------------------------------------------------------ 37 ln_dynFULL = .false. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction) 38 ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection) 39 ln_dynADV = .true. ! dyn.: only advection w prescribed vel.(rn_uvice + advection) 40 rn_uice = 0.5 ! prescribed ice u-velocity 41 rn_vice = 0. ! prescribed ice v-velocity 42 / 43 !------------------------------------------------------------------------------ 44 &namdyn_rdgrft ! Ice ridging/rafting 30 45 !------------------------------------------------------------------------------ 31 46 / 32 47 !------------------------------------------------------------------------------ 33 &namiceini ! Ice initialization 34 !------------------------------------------------------------------------------ 35 ! -- limistate -- ! 36 ln_limini = .true. ! activate ice initialization (T) or not (F) 37 ln_limini_file = .true. ! netcdf file provided for initialization (T) or not (F) 38 cn_dir="./" 39 sn_hti = 'initice' , -12 ,'hti' , .false. , .true., 'yearly' , '' , '', '' 40 sn_hts = 'initice' , -12 ,'hts' , .false. , .true., 'yearly' , '' , '', '' 41 sn_ati = 'initice' , -12 ,'ati' , .false. , .true., 'yearly' , '' , '', '' 42 sn_tsu = 'initice' , -12 ,'tsu' , .false. , .true., 'yearly' , '' , '', '' 43 sn_tmi = 'initice' , -12 ,'tmi' , .false. , .true., 'yearly' , '' , '', '' 44 sn_smi = 'initice' , -12 ,'smi' , .false. , .true., 'yearly' , '' , '', '' 45 / 46 !------------------------------------------------------------------------------ 47 &namiceitd ! Ice discretization 48 &namdyn_rhg ! Ice rheology 48 49 !------------------------------------------------------------------------------ 49 50 / 50 51 !------------------------------------------------------------------------------ 51 &nam icedyn ! Ice dynamics and transport52 &namdyn_adv ! Ice advection 52 53 !------------------------------------------------------------------------------ 53 ! -- limtrp & limadv -- !54 nn_limadv = 0 ! choose the advection scheme (-1=Prather ; 0=Ultimate-Macho)55 nn_limadv_ord = 5 ! choose the order of the advection scheme (if nn_limadv=0)56 54 / 57 55 !------------------------------------------------------------------------------ 58 &nam icethd ! Ice thermodynamics56 &namforcing ! Ice surface forcing 59 57 !------------------------------------------------------------------------------ 60 ! -- limthd_dh -- !61 ln_limdH = .true. ! activate ice thickness change from growing/melting (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO62 ! -- limthd_da -- !63 ln_limdA = .true. ! activate lateral melting param. (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO64 ! -- limthd_lac -- !65 ln_limdO = .true. ! activate ice growth in open-water (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO66 rn_hnewice = 0.02 ! thickness for new ice formation in open water (m)67 ! -- limitd_th -- !68 rn_himin = 0.01 ! minimum ice thickness (m) used in remapping, must be smaller than rn_hnewice69 58 / 70 59 !------------------------------------------------------------------------------ 71 &nam icesal ! Ice salinity60 &namthd ! Ice thermodynamics 72 61 !------------------------------------------------------------------------------ 73 ! -- limthd_sal -- !74 ln_limdS = .true. ! activate gravity drainage and flushing (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO75 62 / 76 63 !------------------------------------------------------------------------------ 77 &nam iceitdme ! Ice mechanical redistribution (ridging and rafting)64 &namthd_zdf ! Ice heat diffusion 78 65 !------------------------------------------------------------------------------ 79 ! -- limitd_me -- !80 ln_ridging = .true. ! ridging activated (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO81 ln_rafting = .true. ! rafting activated (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO82 66 / 83 !----------------------------------------------------------------------- 84 &nam icealb ! albedo parameters85 !----------------------------------------------------------------------- 67 !------------------------------------------------------------------------------ 68 &namthd_da ! Ice lateral melting 69 !------------------------------------------------------------------------------ 86 70 / 71 !------------------------------------------------------------------------------ 72 &namthd_do ! Ice growth in open water 73 !------------------------------------------------------------------------------ 74 / 75 !------------------------------------------------------------------------------ 76 &namthd_sal ! Ice salinity 77 !------------------------------------------------------------------------------ 78 / 79 !------------------------------------------------------------------------------ 80 &namthd_pnd ! Melt ponds 81 !------------------------------------------------------------------------------ 82 / 83 !------------------------------------------------------------------------------ 84 &namini ! Ice initialization 85 !------------------------------------------------------------------------------ 86 / 87 !------------------------------------------------------------------------------ 88 &namalb ! albedo parameters 89 !------------------------------------------------------------------------------ 90 / 91 !------------------------------------------------------------------------------ 92 &namdia ! Diagnostics 93 !------------------------------------------------------------------------------ 94 / -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r8742 r8752 178 178 ! 179 179 ! !!** ice-rheology namelist (namrhg) ** 180 LOGICAL , PUBLIC :: ln_aEVP !: using adaptive EVP (T or F) 180 181 REAL(wp), PUBLIC :: rn_creepl !: creep limit : has to be under 1.0e-9 181 182 REAL(wp), PUBLIC :: rn_ecc !: eccentricity of the elliptical yield curve … … 195 196 ! ! = 2 Redistribute a single flux over categories 196 197 198 INTEGER , PUBLIC :: nice_jules ! Choice of jules coupling 199 ! ! Associated indices 200 INTEGER , PUBLIC, PARAMETER :: np_jules_OFF = 0 ! no Jules coupling (ice thermodynamics forced via qsr and qns) 201 INTEGER , PUBLIC, PARAMETER :: np_jules_EMULE = 1 ! emulated Jules coupling via icethd_zdf.F90 (BL99) (1st round compute qcn and qsr_tr, 2nd round use it) 202 INTEGER , PUBLIC, PARAMETER :: np_jules_ACTIVE = 2 ! active Jules coupling (SM0L) (compute qcn and qsr_tr via sbcblk.F90 or sbccpl.F90) 203 197 204 ! !!** ice-salinity namelist (namthd_sal) ** 198 205 INTEGER , PUBLIC :: nn_icesal !: salinity configuration used in the model … … 204 211 REAL(wp), PUBLIC :: rn_simin !: minimum ice salinity [PSU] 205 212 206 ! MV MP 2016 207 ! !!** melt pond namelist (nammp) 208 LOGICAL , PUBLIC :: ln_pnd !: activate ponds or not 209 LOGICAL , PUBLIC :: ln_pnd_rad !: ponds radiatively active or not 210 LOGICAL , PUBLIC :: ln_pnd_fw !: ponds active wrt meltwater or not 211 INTEGER , PUBLIC :: nn_pnd_scheme !: type of melt pond scheme: =0 prescribed, =1 empirical, =2 topographic 212 REAL(wp), PUBLIC :: rn_apnd !: prescribed pond fraction (0<rn_apnd<1), only if nn_pnd_scheme = 0 213 REAL(wp), PUBLIC :: rn_hpnd !: prescribed pond depth (0<rn_hpnd<1), only if nn_pnd_scheme = 0 214 ! END MV MP 2016 213 ! !!** namelist namthd_pnd 214 LOGICAL , PUBLIC :: ln_pnd_H12 !: Melt ponds scheme from Holland et al 2012 215 LOGICAL , PUBLIC :: ln_pnd_fwb !: melt ponds store freshwater 216 LOGICAL , PUBLIC :: ln_pnd_CST !: Melt ponds scheme with constant fraction and depth 217 REAL(wp), PUBLIC :: rn_apnd !: prescribed pond fraction (0<rn_apnd<1) 218 REAL(wp), PUBLIC :: rn_hpnd !: prescribed pond depth (0<rn_hpnd<1) 219 LOGICAL , PUBLIC :: ln_pnd_alb !: melt ponds affect albedo 220 215 221 ! !!** ice-diagnostics namelist (namdia) ** 216 222 LOGICAL , PUBLIC :: ln_icediachk !: flag for ice diag (T) or not (F) -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90
r8738 r8752 36 36 ! 37 37 ! ** albedo namelist (namalb) 38 INTEGER :: nn_ice_alb ! type of albedo scheme: 0: Shine & Henderson-Sellers (JGR 1985)39 ! ! 1: "home made" based on Brandt et al. (JClim 2005)40 ! ! and Grenfell & Perovich (JGR 2004)41 ! ! 2: Same as 1 but with melt ponds42 38 REAL(wp) :: rn_alb_sdry ! dry snow albedo 43 39 REAL(wp) :: rn_alb_smlt ! melting snow albedo … … 53 49 CONTAINS 54 50 55 SUBROUTINE ice_alb( pt_ ice, ph_ice, ph_snw, pafrac_pnd, ph_pnd, ld_pnd, pa_ice_cs, pa_ice_os )51 SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, ld_pnd_alb, pafrac_pnd, ph_pnd, palb_cs, palb_os ) 56 52 !!---------------------------------------------------------------------- 57 53 !! *** ROUTINE ice_alb *** … … 59 55 !! ** Purpose : Computation of the albedo of the snow/ice system 60 56 !! 61 !! ** Method : Two schemes are available (from namelist parameter nn_ice_alb) 62 !! 0: the scheme is that of Shine & Henderson-Sellers (JGR 1985) for clear-skies 63 !! 1: the scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 64 !! and Grenfell & Perovich (JGR 2004) 65 !! 2: fractional surface-based formulation of scheme 1 (NEW) 66 !! Description of scheme 1: 57 !! ** Method : The scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 58 !! and Grenfell & Perovich (JGR 2004) 67 59 !! 1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) 68 60 !! which are an update of Allison et al. (JGR 1993) ; Brandt et al. 1999 … … 76 68 !! 4) The needed 4 parameters are: dry and melting snow, freezing ice and bare puddled ice 77 69 !! 78 !! ** Note : The parameterization from Shine & Henderson-Sellers presents several misconstructions: 70 !! compilation of values from literature (reference overcast sky values) 71 !! rn_alb_sdry = 0.85 ! dry snow 72 !! rn_alb_smlt = 0.75 ! melting snow 73 !! rn_alb_idry = 0.60 ! bare frozen ice 74 !! rn_alb_imlt = 0.50 ! bare puddled ice albedo 75 !! rn_alb_dpnd = 0.36 ! ponded-ice overcast albedo (Lecomte et al, 2015) 76 !! ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 77 !! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 78 !! rn_alb_sdry = 0.85 ! dry snow 79 !! rn_alb_smlt = 0.72 ! melting snow 80 !! rn_alb_idry = 0.65 ! bare frozen ice 81 !! Brandt et al 2005 (East Antarctica) 82 !! rn_alb_sdry = 0.87 ! dry snow 83 !! rn_alb_smlt = 0.82 ! melting snow 84 !! rn_alb_idry = 0.54 ! bare frozen ice 85 !! 86 !! ** Note : The old parameterization from Shine & Henderson-Sellers (not here anymore) presented several misconstructions 79 87 !! 1) ice albedo when ice thick. tends to 0 is different than ocean albedo 80 88 !! 2) for small ice thick. covered with some snow (<3cm?), albedo is larger … … 87 95 !! Grenfell & Perovich 2004, JGR, vol 109 88 96 !!---------------------------------------------------------------------- 89 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ ice! ice surface temperature (Kelvin)97 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_su ! ice surface temperature (Kelvin) 90 98 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_ice ! sea-ice thickness 91 99 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_snw ! snow depth 100 LOGICAL , INTENT(in ) :: ld_pnd_alb ! effect of melt ponds on albedo 92 101 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pafrac_pnd ! melt pond relative fraction (per unit ice area) 93 102 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_pnd ! melt pond depth 94 LOGICAL , INTENT(in ) :: ld_pnd ! melt ponds radiatively active or not 95 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky 96 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_os ! albedo of ice under overcast sky 103 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_cs ! albedo of ice under clear sky 104 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: palb_os ! albedo of ice under overcast sky 97 105 ! 98 106 INTEGER :: ji, jj, jl ! dummy loop indices 99 REAL(wp) :: zswitch, z1_c1, z1_c2 ! local scalar 100 REAL(wp) :: z1_href_pnd ! - - 101 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 102 ! 103 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb, zalb_it ! intermediate variable & albedo of ice (snow free) 104 !! MV MP 105 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb_pnd ! ponded sea ice albedo 106 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb_ice ! bare sea ice albedo 107 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb_snw ! snow-covered sea ice albedo 108 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zafrac_snw ! relative snow fraction 109 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zafrac_ice ! relative ice fraction 110 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zafrac_pnd ! relative ice fraction (effective) 107 REAL(wp) :: z1_c1, z1_c2,z1_c3, z1_c4 ! local scalar 108 REAL(wp) :: z1_href_pnd ! inverse of the characteristic length scale (Lecomte et al. 2015) 109 REAL(wp) :: zalb_pnd, zafrac_pnd ! ponded sea ice albedo & relative pound fraction 110 REAL(wp) :: zalb_ice, zafrac_ice ! bare sea ice albedo & relative ice fraction 111 REAL(wp) :: zalb_snw, zafrac_snw ! snow-covered sea ice albedo & relative snow fraction 111 112 !!--------------------------------------------------------------------- 112 113 ! 113 114 IF( nn_timing == 1 ) CALL timing_start('icealb') 114 115 ! 115 !----------------------------------------------------- 116 ! Snow-free albedo (no ice thickness dependence yet) 117 !----------------------------------------------------- 118 ! 119 ! Part common to nn_ice_alb = 0, 1, 2 120 ! 121 IF ( .NOT. ld_pnd ) THEN !--- No melt ponds OR radiatively inactive melt ponds 122 ! Bare ice albedo is prescribed, with implicit assumption on pond fraction and depth 123 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0 ) ; zalb(:,:,:) = rn_alb_imlt 124 ELSEWHERE ; zalb(:,:,:) = rn_alb_idry 125 END WHERE 126 ENDIF 127 128 SELECT CASE ( nn_ice_alb ) ! select a parameterization 129 ! 130 ! !------------------------------------------ 131 CASE( 0 ) ! Shine and Henderson-Sellers (1985) ! (based on clear sky values) 132 ! !------------------------------------------ 133 ! 134 ! ! Thickness-dependent bare ice albedo 135 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 136 ELSEWHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) 137 ELSEWHERE( 0.05 < ph_ice .AND. ph_ice <= 1.0 ) ; zalb_it = 0.2467 + 0.7049 * ph_ice & 138 & - 0.8608 * ph_ice * ph_ice & 139 & + 0.3812 * ph_ice * ph_ice * ph_ice 140 ELSEWHERE ; zalb_it = 0.1 + 3.6 * ph_ice 141 END WHERE 142 ! 143 IF ( ld_pnd ) THEN ! Depth-dependent ponded ice albedo 144 z1_href_pnd = 1. / 0.05 ! inverse of the characteristic length scale (Lecomte et al. 2015) 145 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd ) 146 ! ! Snow-free ice albedo is a function of pond fraction 147 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0 ) 148 zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd 149 END WHERE 150 ENDIF 151 ! 152 DO jl = 1, jpl 153 DO jj = 1, jpj 154 DO ji = 1, jpi 155 ! ! Freezing snow 156 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > ppc2 157 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - ppc1 ) ) ) 158 zalb_sf = ( 1._wp - zswitch ) * ( zalb_it(ji,jj,jl) & 159 & + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) * pp1_c1 ) & 160 & + zswitch * rn_alb_sdry 161 ! 162 ! ! Melting snow 163 ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > ppc2 164 zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - ppc2 ) ) 165 zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) * pp1_c2 ) & 166 & + zswitch * rn_alb_smlt 167 ! 168 ! ! Snow albedo 169 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 170 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 171 ! 172 ! ! Surface albedo 173 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 174 pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 175 ! 176 END DO 116 z1_href_pnd = 0.05 117 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 118 z1_c2 = 1. / 0.05 119 z1_c3 = 1. / 0.02 120 z1_c4 = 1. / 0.03 121 ! 122 DO jl = 1, jpl 123 DO jj = 1, jpj 124 DO ji = 1, jpi 125 ! !--- Specific snow, ice and pond fractions (for now, we prevent melt ponds and snow at the same time) 126 IF( ph_snw(ji,jj,jl) == 0._wp ) THEN 127 zafrac_snw = 0._wp 128 IF( ld_pnd_alb ) THEN 129 zafrac_pnd = pafrac_pnd(ji,jj,jl) 130 ELSE 131 zafrac_pnd = 0._wp 132 ENDIF 133 zafrac_ice = 1._wp - zafrac_pnd 134 ELSE 135 zafrac_snw = 1._wp ! Snow fully "shades" melt ponds and ice 136 zafrac_pnd = 0._wp 137 zafrac_ice = 0._wp 138 ENDIF 139 ! 140 ! !--- Bare ice albedo (for hi > 150cm) 141 IF( ld_pnd_alb ) THEN 142 zalb_ice = rn_alb_idry 143 ELSE 144 IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN ; zalb_ice = rn_alb_imlt 145 ELSE ; zalb_ice = rn_alb_idry ; ENDIF 146 ENDIF 147 ! !--- Bare ice albedo (for hi < 150cm) 148 IF( 0.05 < ph_ice(ji,jj,jl) .AND. ph_ice(ji,jj,jl) <= 1.5 ) THEN ! 5cm < hi < 150cm 149 zalb_ice = zalb_ice + ( 0.18 - zalb_ice ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice(ji,jj,jl)) ) 150 ELSEIF( ph_ice(ji,jj,jl) <= 0.05 ) THEN ! 0cm < hi < 5cm 151 zalb_ice = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice(ji,jj,jl) 152 ENDIF 153 ! 154 ! !--- Snow-covered ice albedo (freezing, melting cases) 155 IF( pt_su(ji,jj,jl) < rt0_snow ) THEN 156 zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c3 ) 157 ELSE 158 zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c4 ) 159 ENDIF 160 ! !--- Ponded ice albedo 161 IF( ld_pnd_alb ) THEN 162 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd ) 163 ELSE 164 zalb_pnd = rn_alb_dpnd 165 ENDIF 166 ! !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 167 palb_os(ji,jj,jl) = zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice 168 ! 177 169 END DO 178 170 END DO 179 ! 180 pa_ice_os(:,:,:) = pa_ice_cs(:,:,:) + ppcloud ! Oberhuber correction for overcast sky 181 ! 182 ! 183 ! !------------------------------------------ 184 CASE( 1 ) ! New parameterization (2016) ! (based on overcast sky values) 185 ! !------------------------------------------ 186 ! 187 ! compilation of values from literature (reference overcast sky values) 188 ! rn_alb_sdry = 0.85 ! dry snow 189 ! rn_alb_smlt = 0.75 ! melting snow 190 ! rn_alb_idry = 0.60 ! bare frozen ice 191 ! rn_alb_dpnd = 0.36 ! ponded-ice overcast albedo (Lecomte et al, 2015) 192 ! ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 193 ! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 194 ! rn_alb_sdry = 0.85 ! dry snow 195 ! rn_alb_smlt = 0.72 ! melting snow 196 ! rn_alb_idry = 0.65 ! bare frozen ice 197 ! Brandt et al 2005 (East Antarctica) 198 ! rn_alb_sdry = 0.87 ! dry snow 199 ! rn_alb_smlt = 0.82 ! melting snow 200 ! rn_alb_idry = 0.54 ! bare frozen ice 201 ! 202 ! !--- Computation of snow-free ice albedo 203 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 204 z1_c2 = 1. / 0.05 205 206 ! !--- Accounting for the ice-thickness dependency 207 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 208 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice) ) 209 ELSE WHERE ; zalb_it = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 210 END WHERE 211 ! 212 IF ( ld_pnd ) THEN ! Depth-dependent ponded ice albedo 213 z1_href_pnd = 0.05 ! inverse of the characteristic length scale (Lecomte et al. 2015) 214 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd ) 215 ! 216 ! ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 217 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0 ) 218 zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd 219 END WHERE 220 ENDIF 221 ! 222 ! !--- Overcast sky surface albedo (accounting for snow, ice melt ponds) 223 z1_c1 = 1. / 0.02 224 z1_c2 = 1. / 0.03 225 DO jl = 1, jpl 226 DO jj = 1, jpj 227 DO ji = 1, jpi 228 ! Snow depth dependence of snow albedo 229 zalb_sf = rn_alb_sdry - ( rn_alb_sdry - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 230 zalb_sm = rn_alb_smlt - ( rn_alb_smlt - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 231 232 ! Snow albedo (MV I guess we could use rt0 instead of rt0_snow) 233 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 234 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 235 236 ! Surface albedo 237 zswitch = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 238 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) 239 240 END DO 241 END DO 242 END DO 243 ! 244 ! !--- Clear sky surface albedo 245 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 246 ! 247 ! 248 ! !------------------------------------------ 249 CASE( 2 ) ! Fractional surface-based parameterization (2017) 250 ! !------------------------------------------ 251 ! MV: I propose this formulation that is more elegant, and more easy to expand towards 252 ! varying pond and snow fraction. 253 ! Formulation 1 has issues to handle ponds and snow together that can't easily be fixed. 254 ! This one handles it better, I believe. 255 ! 256 ! !== Snow, bare ice and ponded ice fractions ==! 257 ! 258 ! ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 259 ! 260 ! !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 261 zafrac_pnd = 0._wp 262 IF ( ld_pnd ) THEN 263 WHERE( ph_snw == 0._wp ) zafrac_pnd = pafrac_pnd ! Snow fully "shades" melt ponds 264 ENDIF 265 ! 266 ! !--- Specific snow fraction (for now, prescribed) 267 WHERE( ph_snw > 0._wp ) ; zafrac_snw = 1. 268 ELSEWHERE ; zafrac_snw = 0. 269 END WHERE 270 ! 271 ! !--- Specific ice fraction 272 zafrac_ice = 1. - zafrac_snw - zafrac_pnd 273 ! 274 ! !== Snow-covered, pond-covered, and bare ice albedos ==! 275 ! 276 ! !--- Bare ice albedo 277 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 278 z1_c2 = 1. / 0.05 279 WHERE ( 1.5 < ph_ice ) ; zalb_ice = zalb 280 ELSEWHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_ice = zalb + ( 0.18 - zalb ) * z1_c1 * & 281 & ( LOG(1.5) - LOG(ph_ice) ) 282 ELSEWHERE ; zalb_ice = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 283 END WHERE 284 ! 285 z1_c1 = 1. / 0.02 !--- Snow-covered ice albedo (freezing, melting cases) 286 z1_c2 = 1. / 0.03 287 ! 288 WHERE( pt_ice < rt0_snow ) ; zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw * z1_c1 ) 289 ELSEWHERE ; zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw * z1_c2 ) 290 END WHERE 291 ! 292 IF ( ld_pnd ) THEN !--- Depth-dependent ponded ice albedo 293 z1_href_pnd = 0.05 ! inverse of the characteristic length scale (Lecomte et al. 2015) 294 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd * z1_href_pnd ) 295 ELSE 296 zalb_pnd = rn_alb_dpnd 297 ENDIF 298 ! !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 299 pa_ice_os = zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice 300 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 301 302 END SELECT 171 END DO 172 ! 173 palb_cs(:,:,:) = palb_os(:,:,:) - ( - 0.1010 * palb_os(:,:,:) * palb_os(:,:,:) + 0.1933 * palb_os(:,:,:) - 0.0148 ) 303 174 ! 304 175 IF( nn_timing == 1 ) CALL timing_stop('icealb') … … 317 188 INTEGER :: ios ! Local integer output status for namelist read 318 189 !! 319 NAMELIST/namalb/ nn_ice_alb,rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd190 NAMELIST/namalb/ rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 320 191 !!---------------------------------------------------------------------- 321 192 ! … … 334 205 WRITE(numout,*) '~~~~~~~~~~~~' 335 206 WRITE(numout,*) ' Namelist namalb:' 336 WRITE(numout,*) ' choose the albedo parameterization nn_ice_alb = ', nn_ice_alb337 207 WRITE(numout,*) ' albedo of dry snow rn_alb_sdry = ', rn_alb_sdry 338 208 WRITE(numout,*) ' albedo of melting snow rn_alb_smlt = ', rn_alb_smlt -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icectl.F90
r8738 r8752 76 76 IF( icount == 0 ) THEN 77 77 ! ! water flux 78 pdiag_fv = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + & 79 & wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_lam(:,:) + wfx_ice_sub(:,:) + & 80 & wfx_snw_sni(:,:) + wfx_snw_sum(:,:) + wfx_snw_dyn(:,:) + wfx_snw_sub(:,:) + wfx_spr(:,:) & 78 pdiag_fv = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + & 79 & wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_lam(:,:) + wfx_pnd(:,:) + & 80 & wfx_snw_sni(:,:) + wfx_snw_sum(:,:) + wfx_snw_dyn(:,:) + wfx_snw_sub(:,:) + & 81 & wfx_ice_sub(:,:) + wfx_spr(:,:) & 81 82 & ) * e1e2t(:,:) ) * zconv 82 83 ! … … 96 97 97 98 pdiag_t = glob_sum( ( SUM( SUM( e_i(:,:,1:nlay_i,:), dim=4 ), dim=3 ) & 98 & + SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 ) 99 & + SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 ) ) * e1e2t ) * zconv 99 100 100 101 ELSEIF( icount == 1 ) THEN 101 102 102 103 ! water flux 103 zfv = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + & 104 & wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_lam(:,:) + wfx_ice_sub(:,:) + & 105 & wfx_snw_sni(:,:) + wfx_snw_sum(:,:) + wfx_snw_dyn(:,:) + wfx_snw_sub(:,:) + wfx_spr(:,:) & 104 zfv = glob_sum( -( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + & 105 & wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_lam(:,:) + wfx_pnd(:,:) + & 106 & wfx_snw_sni(:,:) + wfx_snw_sum(:,:) + wfx_snw_dyn(:,:) + wfx_snw_sub(:,:) + & 107 & wfx_ice_sub(:,:) + wfx_spr(:,:) & 106 108 & ) * e1e2t(:,:) ) * zconv - pdiag_fv 107 109 … … 117 119 118 120 ! outputs 119 zv = ( ( glob_sum( SUM( v_i * rhoic + v_s * rhosn, dim=3 ) * e1e2t 121 zv = ( ( glob_sum( SUM( v_i * rhoic + v_s * rhosn, dim=3 ) * e1e2t ) * zconv & 120 122 & - pdiag_v ) * r1_rdtice - zfv ) * rday 121 123 122 zs = ( ( glob_sum( SUM( sv_i * rhoic , dim=3 ) * e1e2t ) * zconv &124 zs = ( ( glob_sum( SUM( sv_i * rhoic , dim=3 ) * e1e2t ) * zconv & 123 125 & - pdiag_s ) * r1_rdtice + zfs ) * rday 124 126 -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn.F90
r8738 r8752 172 172 END DO 173 173 END DO 174 END DO 175 176 IF ( nn_pnd_scheme > 0 ) THEN !-- correct pond fraction to avoid a_ip > a_i 177 WHERE( a_ip(:,:,:) > a_i(:,:,:) ) a_ip(:,:,:) = a_i(:,:,:) 178 ENDIF 174 END DO 175 ! !-- correct pond fraction to avoid a_ip > a_i 176 WHERE( a_ip(:,:,:) > a_i(:,:,:) ) a_ip(:,:,:) = a_i(:,:,:) 179 177 ! 180 178 END SUBROUTINE Hbig -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn_adv_pra.F90
r8738 r8752 120 120 z0ei(:,:,jk,jl) = pe_i(:,:,jk,jl) * e1e2t(:,:) ! Ice heat content 121 121 END DO 122 IF ( nn_pnd_scheme > 0) THEN122 IF ( ln_pnd_H12 ) THEN 123 123 z0ap(:,:,jl) = pa_ip(:,:,jl) * e1e2t(:,:) ! Melt pond fraction 124 124 z0vp(:,:,jl) = pv_ip(:,:,jl) * e1e2t(:,:) ! Melt pond volume … … 167 167 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 168 168 END DO 169 IF ( nn_pnd_scheme > 0) THEN169 IF ( ln_pnd_H12 ) THEN 170 170 CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ap (:,:,jl), sxap (:,:,jl), & !--- melt pond fraction -- 171 171 & sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl) ) … … 220 220 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 221 221 END DO 222 IF ( nn_pnd_scheme > 0) THEN222 IF ( ln_pnd_H12 ) THEN 223 223 CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ap (:,:,jl), sxap (:,:,jl), & !--- melt pond fraction --- 224 224 & sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl) ) … … 249 249 END DO 250 250 ! MV MP 2016 251 IF ( nn_pnd_scheme > 0) THEN251 IF ( ln_pnd_H12 ) THEN 252 252 pa_ip (:,:,jl) = z0ap (:,:,jl) * r1_e1e2t(:,:) 253 253 pv_ip (:,:,jl) = z0vp (:,:,jl) * r1_e1e2t(:,:) … … 755 755 sxyage(:,:,jl)= z2d(:,:) 756 756 END DO 757 IF ( nn_pnd_scheme > 0) THEN757 IF ( ln_pnd_H12 ) THEN 758 758 DO jl = 1, jpl 759 759 WRITE(zchar,'(I2.2)') jl … … 833 833 syyc0 (:,:,:) = 0._wp ; syye (:,:,:,:) = 0._wp ; syysal (:,:,:) = 0._wp ; syyage (:,:,:) = 0._wp 834 834 sxyc0 (:,:,:) = 0._wp ; sxye (:,:,:,:) = 0._wp ; sxysal (:,:,:) = 0._wp ; sxyage (:,:,:) = 0._wp 835 IF ( nn_pnd_scheme > 0) THEN835 IF ( ln_pnd_H12 ) THEN 836 836 sxap (:,:,:) = 0._wp ; sxvp (:,:,:) = 0._wp 837 837 syap (:,:,:) = 0._wp ; syvp (:,:,:) = 0._wp … … 854 854 syyc0 (:,:,:) = 0._wp ; syye (:,:,:,:) = 0._wp ; syysal (:,:,:) = 0._wp ; syyage (:,:,:) = 0._wp 855 855 sxyc0 (:,:,:) = 0._wp ; sxye (:,:,:,:) = 0._wp ; sxysal (:,:,:) = 0._wp ; sxyage (:,:,:) = 0._wp 856 IF ( nn_pnd_scheme > 0) THEN856 IF ( ln_pnd_H12 ) THEN 857 857 sxap (:,:,:) = 0._wp ; sxvp (:,:,:) = 0._wp 858 858 syap (:,:,:) = 0._wp ; syvp (:,:,:) = 0._wp … … 989 989 END DO 990 990 END DO 991 IF ( nn_pnd_scheme > 0) THEN991 IF ( ln_pnd_H12 ) THEN 992 992 DO jl = 1, jpl 993 993 WRITE(zchar,'(I2.2)') jl -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn_adv_umx.F90
r8738 r8752 124 124 CALL adv_umx( k_order, kt, zdt, zudy, zvdx, zcu_box, zcv_box, pv_s(:,:,jl) ) ! Snow volume 125 125 CALL adv_umx( k_order, kt, zdt, zudy, zvdx, zcu_box, zcv_box, pe_s(:,:,1,jl) ) ! Snow heat content 126 IF ( nn_pnd_scheme > 0) THEN126 IF ( ln_pnd_H12 ) THEN 127 127 CALL adv_umx( k_order, kt, zdt, zudy, zvdx, zcu_box, zcv_box, pa_ip(:,:,jl) ) ! Melt pond fraction 128 128 CALL adv_umx( k_order, kt, zdt, zudy, zvdx, zcu_box, zcv_box, pv_ip(:,:,jl) ) ! Melt pond volume -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn_rdgrft.F90
r8738 r8752 253 253 CALL tab_3d_2d( npti, nptidx(1:npti), sv_i_2d(1:npti,1:jpl), sv_i(:,:,:) ) 254 254 CALL tab_3d_2d( npti, nptidx(1:npti), oa_i_2d(1:npti,1:jpl), oa_i(:,:,:) ) 255 IF ( nn_pnd_scheme > 0 ) THEN 256 CALL tab_3d_2d( npti, nptidx(1:npti), a_ip_2d(1:npti,1:jpl), a_ip(:,:,:) ) 257 CALL tab_3d_2d( npti, nptidx(1:npti), v_ip_2d(1:npti,1:jpl), v_ip(:,:,:) ) 258 ENDIF 255 CALL tab_3d_2d( npti, nptidx(1:npti), a_ip_2d(1:npti,1:jpl), a_ip(:,:,:) ) 256 CALL tab_3d_2d( npti, nptidx(1:npti), v_ip_2d(1:npti,1:jpl), v_ip(:,:,:) ) 259 257 DO jl = 1, jpl 260 258 DO jk = 1, nlay_s … … 270 268 CALL tab_2d_1d( npti, nptidx(1:npti), hfx_dyn_1d (1:npti), hfx_dyn (:,:) ) 271 269 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_snw_dyn_1d(1:npti), wfx_snw_dyn(:,:) ) 272 IF ( nn_pnd_scheme > 0 ) THEN 273 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_pnd_1d(1:npti), wfx_pnd(:,:) ) 274 ENDIF 270 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_pnd_1d(1:npti), wfx_pnd(:,:) ) 275 271 276 272 !-----------------------------------------------------------------------------! … … 320 316 CALL tab_2d_3d( npti, nptidx(1:npti), sv_i_2d(1:npti,1:jpl), sv_i(:,:,:) ) 321 317 CALL tab_2d_3d( npti, nptidx(1:npti), oa_i_2d(1:npti,1:jpl), oa_i(:,:,:) ) 322 IF ( nn_pnd_scheme > 0 ) THEN 323 CALL tab_2d_3d( npti, nptidx(1:npti), a_ip_2d(1:npti,1:jpl), a_ip(:,:,:) ) 324 CALL tab_2d_3d( npti, nptidx(1:npti), v_ip_2d(1:npti,1:jpl), v_ip(:,:,:) ) 325 ENDIF 318 CALL tab_2d_3d( npti, nptidx(1:npti), a_ip_2d(1:npti,1:jpl), a_ip(:,:,:) ) 319 CALL tab_2d_3d( npti, nptidx(1:npti), v_ip_2d(1:npti,1:jpl), v_ip(:,:,:) ) 326 320 DO jl = 1, jpl 327 321 DO jk = 1, nlay_s … … 337 331 CALL tab_1d_2d( npti, nptidx(1:npti), hfx_dyn_1d (1:npti), hfx_dyn (:,:) ) 338 332 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_snw_dyn_1d(1:npti), wfx_snw_dyn(:,:) ) 339 IF ( nn_pnd_scheme > 0 ) THEN 340 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_pnd_1d(1:npti), wfx_pnd(:,:) ) 341 ENDIF 333 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_pnd_1d(1:npti), wfx_pnd(:,:) ) 342 334 343 335 ENDIF ! npti > 0 … … 651 643 652 644 !MV MP 2016 653 IF ( nn_pnd_scheme > 0) THEN645 IF ( ln_pnd_H12 ) THEN 654 646 aprdg1 = a_ip_2d(ji,jl1) * afrdg 655 647 aprdg2(ji) = a_ip_2d(ji,jl1) * afrdg * hi_hrdg(ji,jl1) … … 679 671 ! Put the melt pond water into the ocean 680 672 !------------------------------------------ 681 IF ( ( nn_pnd_scheme > 0 ) .AND. ln_pnd_fw) THEN673 IF ( ln_pnd_fwb ) THEN 682 674 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) + ( rhofw * vprdg(ji) * ( 1._wp - rn_fpndrdg ) & ! fresh water source for ocean 683 675 & + rhofw * vprft(ji) * ( 1._wp - rn_fpndrft ) ) * r1_rdtice … … 702 694 oa_i_2d(ji,jl1) = oa_i_2d(ji,jl1) - oirdg1 - oirft1 703 695 ! MV MP 2016 704 IF ( nn_pnd_scheme > 0) THEN696 IF ( ln_pnd_H12 ) THEN 705 697 a_ip_2d(ji,jl1) = a_ip_2d(ji,jl1) - aprdg1 - aprft1 706 698 v_ip_2d(ji,jl1) = v_ip_2d(ji,jl1) - vprdg(ji) - vprft(ji) … … 766 758 & vsrft (ji) * rn_fsnwrft * zswitch(ji) ) 767 759 ! MV MP 2016 768 IF ( nn_pnd_scheme > 0) THEN760 IF ( ln_pnd_H12 ) THEN 769 761 v_ip_2d (ji,jl2) = v_ip_2d(ji,jl2) + ( vprdg (ji) * rn_fpndrdg * fvol (ji) & 770 762 & + vprft (ji) * rn_fpndrft * zswitch(ji) ) -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn_rhg.F90
r8738 r8752 78 78 CASE( np_rhgEVP ) ! Elasto-Viscous-Plastic ! 79 79 ! !------------------------! 80 CALL ice_dyn_rhg_evp( kt, stress1_i, stress2_i, stress12_i, u_ice, v_ice,shear_i, divu_i, delta_i )80 CALL ice_dyn_rhg_evp( kt, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i ) 81 81 ! 82 82 END SELECT … … 107 107 INTEGER :: ios, ioptio ! Local integer output status for namelist read 108 108 !! 109 NAMELIST/namdyn_rhg/ ln_rhg_EVP, rn_creepl, rn_ecc , nn_nevp, rn_relast109 NAMELIST/namdyn_rhg/ ln_rhg_EVP, ln_aEVP, rn_creepl, rn_ecc , nn_nevp, rn_relast 110 110 !!------------------------------------------------------------------- 111 111 ! … … 125 125 WRITE(numout,*) ' Namelist namdyn_rhg:' 126 126 WRITE(numout,*) ' rheology EVP (icedyn_rhg_evp) ln_rhg_EVP = ', ln_rhg_EVP 127 WRITE(numout,*) ' use adaptive EVP (aEVP) ln_aEVP = ', ln_aEVP 127 128 WRITE(numout,*) ' creep limit rn_creepl = ', rn_creepl 128 129 WRITE(numout,*) ' eccentricity of the elliptical yield curve rn_ecc = ', rn_ecc -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icedyn_rhg_evp.F90
r8738 r8752 53 53 CONTAINS 54 54 55 SUBROUTINE ice_dyn_rhg_evp( kt, pstress1_i, pstress2_i, pstress12_i, u_ice, v_ice,pshear_i, pdivu_i, pdelta_i )55 SUBROUTINE ice_dyn_rhg_evp( kt, pstress1_i, pstress2_i, pstress12_i, pshear_i, pdivu_i, pdelta_i ) 56 56 !!------------------------------------------------------------------- 57 57 !! *** SUBROUTINE ice_dyn_rhg_evp *** … … 95 95 !! 5) Diagnostics including charge ellipse 96 96 !! 97 !! ** Notes : There is the possibility to use mEVP from Bouillon 2013 98 !! (by uncommenting some lines in part 3 and changing alpha and beta parameters) 99 !! but this solution appears very unstable (see Kimmritz et al 2016) 97 !! ** Notes : There is the possibility to use aEVP from the nice work of Kimmritz et al. (2016 & 2017) 98 !! by setting up ln_aEVP=T (i.e. changing alpha and beta parameters). 99 !! This is an upgraded version of mEVP from Bouillon et al. 2013 100 !! (i.e. more stable and better convergence) 100 101 !! 101 102 !! References : Hunke and Dukowicz, JPO97 102 103 !! Bouillon et al., Ocean Modelling 2009 103 104 !! Bouillon et al., Ocean Modelling 2013 105 !! Kimmritz et al., Ocean Modelling 2016 & 2017 104 106 !!------------------------------------------------------------------- 105 107 INTEGER, INTENT(in) :: kt ! time step 106 108 REAL(wp), DIMENSION(:,:), INTENT(inout) :: pstress1_i, pstress2_i, pstress12_i 107 REAL(wp), DIMENSION(:,:), INTENT(inout) :: u_ice, v_ice108 109 REAL(wp), DIMENSION(:,:), INTENT( out) :: pshear_i, pdivu_i, pdelta_i 109 110 !! … … 114 115 REAL(wp) :: zdtevp, z1_dtevp ! time step for subcycling 115 116 REAL(wp) :: ecc2, z1_ecc2 ! square of yield ellipse eccenticity 116 REAL(wp) :: z beta, zalph1, z1_alph1, zalph2, z1_alph2 ! alpha and beta from Bouillon 2009 and 2013117 REAL(wp) :: zalph1, z1_alph1, zalph2, z1_alph2 ! alpha coef from Bouillon 2009 or Kimmritz 2017 117 118 REAL(wp) :: zm1, zm2, zm3, zmassU, zmassV ! ice/snow mass 118 119 REAL(wp) :: zdelta, zp_delf, zds2, zdt, zdt2, zdiv, zdiv2 ! temporary scalars … … 126 127 REAL(wp), DIMENSION(jpi,jpj) :: z1_e1t0, z1_e2t0 ! scale factors 127 128 REAL(wp), DIMENSION(jpi,jpj) :: zp_delt ! P/delta at T points 128 ! 129 REAL(wp), DIMENSION(jpi,jpj) :: zbeta ! beta coef from Kimmritz 2017 130 ! 131 REAL(wp), DIMENSION(jpi,jpj) :: zdt_m ! (dt / ice-snow_mass) on T points 129 132 REAL(wp), DIMENSION(jpi,jpj) :: zaU , zaV ! ice fraction on U/V points 130 REAL(wp), DIMENSION(jpi,jpj) :: zmU_t, zmV_t ! ice/snow mass/dton U/V points133 REAL(wp), DIMENSION(jpi,jpj) :: zmU_t, zmV_t ! (ice-snow_mass / dt) on U/V points 131 134 REAL(wp), DIMENSION(jpi,jpj) :: zmf ! coriolis parameter at T points 132 135 REAL(wp), DIMENSION(jpi,jpj) :: zTauU_ia , ztauV_ia ! ice-atm. stress at U-V points … … 231 234 232 235 ! alpha parameters (Bouillon 2009) 233 zalph1 = ( 2._wp * rn_relast * rdt_ice ) * z1_dtevp 234 zalph2 = zalph1 * z1_ecc2 235 236 ! alpha and beta parameters (Bouillon 2013) 237 !!zalph1 = 40. 238 !!zalph2 = 40. 239 !!zbeta = 3000. 240 !!zbeta = REAL( nn_nevp ) ! close to classical EVP of Hunke (2001) 241 242 z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 243 z1_alph2 = 1._wp / ( zalph2 + 1._wp ) 244 236 IF( .NOT. ln_aEVP ) THEN 237 zalph1 = ( 2._wp * rn_relast * rdt_ice ) * z1_dtevp 238 zalph2 = zalph1 * z1_ecc2 239 240 z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 241 z1_alph2 = 1._wp / ( zalph2 + 1._wp ) 242 ENDIF 243 245 244 ! Initialise stress tensor 246 245 zs1 (:,:) = pstress1_i (:,:) … … 304 303 zmf(ji,jj) = zm1 * ff_t(ji,jj) 305 304 305 ! dt/m at T points (for alpha and beta coefficients) 306 zdt_m(ji,jj) = zdtevp / MAX( zm1, zmmin ) 307 306 308 ! m/dt 307 309 zmU_t(ji,jj) = zmassU * z1_dtevp 308 310 zmV_t(ji,jj) = zmassV * z1_dtevp 309 311 310 312 ! Drag ice-atm. 311 313 zTauU_ia(ji,jj) = zaU(ji,jj) * utau_ice(ji,jj) … … 326 328 END DO 327 329 END DO 328 CALL lbc_lnk ( zmf, 'T', 1. )330 CALL lbc_lnk_multi( zmf, 'T', 1., zdt_m, 'T', 1. ) 329 331 ! 330 332 !------------------------------------------------------------------------------! … … 380 382 ! P/delta at T points 381 383 zp_delt(ji,jj) = strength(ji,jj) / ( zdelta + rn_creepl ) 384 385 ! alpha & beta for aEVP 386 ! gamma = 0.5*P/(delta+creepl) * (c*pi)**2/Area * dt/m 387 ! alpha = beta = sqrt(4*gamma) 388 IF( ln_aEVP ) THEN 389 zalph1 = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 390 z1_alph1 = 1._wp / ( zalph1 + 1._wp ) 391 zalph2 = zalph1 392 z1_alph2 = z1_alph1 393 ENDIF 382 394 383 395 ! stress at T points … … 392 404 DO ji = 1, jpim1 393 405 406 ! alpha & beta for aEVP 407 IF( ln_aEVP ) THEN 408 zalph2 = MAX( 50._wp, rpi * SQRT( 0.5_wp * zp_delt(ji,jj) * r1_e1e2t(ji,jj) * zdt_m(ji,jj) ) ) 409 z1_alph2 = 1._wp / ( zalph2 + 1._wp ) 410 zbeta(ji,jj) = zalph2 411 ENDIF 412 394 413 ! P/delta at F points 395 414 zp_delf = 0.25_wp * ( zp_delt(ji,jj) + zp_delt(ji+1,jj) + zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1) ) … … 411 430 & ) * 2._wp * r1_e1u(ji,jj) & 412 431 & ) * r1_e1e2u(ji,jj) 413 414 432 ! 433 ! !--- V points 415 434 zfV(ji,jj) = 0.5_wp * ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj) & 416 435 & - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj) & … … 419 438 & ) * 2._wp * r1_e2v(ji,jj) & 420 439 & ) * r1_e1e2v(ji,jj) 421 422 440 ! 441 ! !--- u_ice at V point 423 442 u_iceV(ji,jj) = 0.5_wp * ( ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * e2t(ji,jj+1) & 424 443 & + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj ) ) * z1_e2t0(ji,jj) * vmask(ji,jj,1) 425 426 444 ! 445 ! !--- v_ice at U point 427 446 v_iceU(ji,jj) = 0.5_wp * ( ( v_ice(ji ,jj) + v_ice(ji ,jj-1) ) * e1t(ji+1,jj) & 428 447 & + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji ,jj) ) * z1_e1t0(ji,jj) * umask(ji,jj,1) 429 !430 448 END DO 431 449 END DO 432 450 ! 433 451 ! --- Computation of ice velocity --- ! 434 ! Bouillon et al. 2013 (eq 47-48) => unstable unless alpha, beta are chosen wisely and large nn_nevp452 ! Bouillon et al. 2013 (eq 47-48) => unstable unless alpha, beta vary as in Kimmritz 2016 & 2017 435 453 ! Bouillon et al. 2009 (eq 34-35) => stable 436 454 IF( MOD(jter,2) == 0 ) THEN ! even iterations … … 438 456 DO jj = 2, jpjm1 439 457 DO ji = fs_2, fs_jpim1 440 458 ! !--- tau_io/(v_oce - v_ice) 441 459 zTauO = zaV(ji,jj) * zrhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) ) & 442 460 & + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) ) 443 461 ! !--- Ocean-to-Ice stress 444 462 ztauy_oi(ji,jj) = zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) ) 445 446 463 ! 464 ! !--- tau_bottom/v_ice 447 465 zvel = MAX( zepsi, SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) ) ) 448 466 zTauB = - tau_icebfr(ji,jj) / zvel 449 450 467 ! 468 ! !--- Coriolis at V-points (energy conserving formulation) 451 469 zCory(ji,jj) = - 0.25_wp * r1_e2v(ji,jj) * & 452 470 & ( zmf(ji,jj ) * ( e2u(ji,jj ) * u_ice(ji,jj ) + e2u(ji-1,jj ) * u_ice(ji-1,jj ) ) & 453 471 & + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) ) 454 455 472 ! 473 ! !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io 456 474 zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCory(ji,jj) + zspgV(ji,jj) + ztauy_oi(ji,jj) 457 458 475 ! 476 ! !--- landfast switch => 0 = static friction ; 1 = sliding friction 459 477 rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - tau_icebfr(ji,jj) ) - SIGN( 1._wp, zTauE ) ) ) 460 ! 461 ! !--- ice velocity using implicit formulation (cf Madec doc & Bouillon 2009) 478 ! 479 IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 480 v_ice(ji,jj) = ( ( rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) ) & ! previous velocity 481 & + zTauE + zTauO * v_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 482 & ) / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 483 & + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax ) & ! static friction => slow decrease to v=0 484 & ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 485 & ) * zmaskV(ji,jj) 486 ELSE !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 462 487 v_ice(ji,jj) = ( ( rswitch * ( zmV_t(ji,jj) * v_ice(ji,jj) & ! previous velocity 463 488 & + zTauE + zTauO * v_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) … … 466 491 & ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 467 492 & ) * zmaskV(ji,jj) 468 ! 469 ! Bouillon 2013 470 !!v_ice(ji,jj) = ( zmV_t(ji,jj) * ( zbeta * v_ice(ji,jj) + v_ice_b(ji,jj) ) & 471 !! & + zfV(ji,jj) + zCory(ji,jj) + zTauV_ia(ji,jj) + zTauO * v_oce(ji,jj) + zspgV(ji,jj) & 472 !! & ) / MAX( zmV_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitchV(ji,jj) 473 ! 493 ENDIF 474 494 END DO 475 495 END DO … … 483 503 ! 484 504 DO jj = 2, jpjm1 485 DO ji = fs_2, fs_jpim1 486 487 ! tau_io/(u_oce - u_ice) 505 DO ji = fs_2, fs_jpim1 506 ! !--- tau_io/(u_oce - u_ice) 488 507 zTauO = zaU(ji,jj) * zrhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) ) & 489 508 & + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) ) 490 491 ! Ocean-to-Ice stress 509 ! !--- Ocean-to-Ice stress 492 510 ztaux_oi(ji,jj) = zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) ) 493 494 ! tau_bottom/u_ice511 ! 512 ! !--- tau_bottom/u_ice 495 513 zvel = MAX( zepsi, SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) ) ) 496 514 zTauB = - tau_icebfr(ji,jj) / zvel 497 498 ! Coriolis at U-points (energy conserving formulation)515 ! 516 ! !--- Coriolis at U-points (energy conserving formulation) 499 517 zCorx(ji,jj) = 0.25_wp * r1_e1u(ji,jj) * & 500 518 & ( zmf(ji ,jj) * ( e1v(ji ,jj) * v_ice(ji ,jj) + e1v(ji ,jj-1) * v_ice(ji ,jj-1) ) & 501 519 & + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) ) 502 503 ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io520 ! 521 ! !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io 504 522 zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCorx(ji,jj) + zspgU(ji,jj) + ztaux_oi(ji,jj) 505 506 ! landfast switch => 0 = static friction ; 1 = sliding friction523 ! 524 ! !--- landfast switch => 0 = static friction ; 1 = sliding friction 507 525 rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - tau_icebfr(ji,jj) ) - SIGN( 1._wp, zTauE ) ) ) 508 509 ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009) 526 ! 527 IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 528 u_ice(ji,jj) = ( ( rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) ) & ! previous velocity 529 & + zTauE + zTauO * u_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 530 & ) / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 531 & + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax ) & ! static friction => slow decrease to v=0 532 & ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 533 & ) * zmaskU(ji,jj) 534 ELSE !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 510 535 u_ice(ji,jj) = ( ( rswitch * ( zmU_t(ji,jj) * u_ice(ji,jj) & ! previous velocity 511 536 & + zTauE + zTauO * u_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) … … 514 539 & ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 515 540 & ) * zmaskU(ji,jj) 516 ! Bouillon 2013 517 !!u_ice(ji,jj) = ( zmU_t(ji,jj) * ( zbeta * u_ice(ji,jj) + u_ice_b(ji,jj) ) & 518 !! & + zfU(ji,jj) + zCorx(ji,jj) + zTauU_ia(ji,jj) + zTauO * u_oce(ji,jj) + zspgU(ji,jj) & 519 !! & ) / MAX( zmU_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitchU(ji,jj) 541 ENDIF 520 542 END DO 521 543 END DO … … 532 554 DO jj = 2, jpjm1 533 555 DO ji = fs_2, fs_jpim1 534 535 ! tau_io/(u_oce - u_ice) 556 ! !--- tau_io/(u_oce - u_ice) 536 557 zTauO = zaU(ji,jj) * zrhoco * SQRT( ( u_ice (ji,jj) - u_oce (ji,jj) ) * ( u_ice (ji,jj) - u_oce (ji,jj) ) & 537 558 & + ( v_iceU(ji,jj) - v_oceU(ji,jj) ) * ( v_iceU(ji,jj) - v_oceU(ji,jj) ) ) 538 539 ! Ocean-to-Ice stress 559 ! !--- Ocean-to-Ice stress 540 560 ztaux_oi(ji,jj) = zTauO * ( u_oce(ji,jj) - u_ice(ji,jj) ) 541 542 ! tau_bottom/u_ice561 ! 562 ! !--- tau_bottom/u_ice 543 563 zvel = MAX( zepsi, SQRT( v_iceU(ji,jj) * v_iceU(ji,jj) + u_ice(ji,jj) * u_ice(ji,jj) ) ) 544 564 zTauB = - tau_icebfr(ji,jj) / zvel 545 546 ! Coriolis at U-points (energy conserving formulation)565 ! 566 ! !--- Coriolis at U-points (energy conserving formulation) 547 567 zCorx(ji,jj) = 0.25_wp * r1_e1u(ji,jj) * & 548 568 & ( zmf(ji ,jj) * ( e1v(ji ,jj) * v_ice(ji ,jj) + e1v(ji ,jj-1) * v_ice(ji ,jj-1) ) & 549 569 & + zmf(ji+1,jj) * ( e1v(ji+1,jj) * v_ice(ji+1,jj) + e1v(ji+1,jj-1) * v_ice(ji+1,jj-1) ) ) 550 551 ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io570 ! 571 ! !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io 552 572 zTauE = zfU(ji,jj) + zTauU_ia(ji,jj) + zCorx(ji,jj) + zspgU(ji,jj) + ztaux_oi(ji,jj) 553 554 ! landfast switch => 0 = static friction ; 1 = sliding friction573 ! 574 ! !--- landfast switch => 0 = static friction ; 1 = sliding friction 555 575 rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, ztauE - tau_icebfr(ji,jj) ) - SIGN( 1._wp, zTauE ) ) ) 556 557 ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009) 576 ! 577 IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 578 u_ice(ji,jj) = ( ( rswitch * ( zmU_t(ji,jj) * ( zbeta(ji,jj) * u_ice(ji,jj) + u_ice_b(ji,jj) ) & ! previous velocity 579 & + zTauE + zTauO * u_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 580 & ) / MAX( zepsi, zmU_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 581 & + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax ) & ! static friction => slow decrease to v=0 582 & ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 583 & ) * zmaskU(ji,jj) 584 ELSE !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 558 585 u_ice(ji,jj) = ( ( rswitch * ( zmU_t(ji,jj) * u_ice(ji,jj) & ! previous velocity 559 586 & + zTauE + zTauO * u_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 560 587 & ) / MAX( zepsi, zmU_t(ji,jj) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 561 588 & + ( 1._wp - rswitch ) * u_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax ) & ! static friction => slow decrease to v=0 562 & ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 589 & ) * zswitchU(ji,jj) + u_oce(ji,jj) * ( 1._wp - zswitchU(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 563 590 & ) * zmaskU(ji,jj) 564 ! Bouillon 2013 565 !!u_ice(ji,jj) = ( zmU_t(ji,jj) * ( zbeta * u_ice(ji,jj) + u_ice_b(ji,jj) ) & 566 !! & + zfU(ji,jj) + zCorx(ji,jj) + zTauU_ia(ji,jj) + zTauO * u_oce(ji,jj) + zspgU(ji,jj) & 567 !! & ) / MAX( zmU_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitchU(ji,jj) 591 ENDIF 568 592 END DO 569 593 END DO … … 578 602 DO jj = 2, jpjm1 579 603 DO ji = fs_2, fs_jpim1 580 581 ! tau_io/(v_oce - v_ice) 604 ! !--- tau_io/(v_oce - v_ice) 582 605 zTauO = zaV(ji,jj) * zrhoco * SQRT( ( v_ice (ji,jj) - v_oce (ji,jj) ) * ( v_ice (ji,jj) - v_oce (ji,jj) ) & 583 606 & + ( u_iceV(ji,jj) - u_oceV(ji,jj) ) * ( u_iceV(ji,jj) - u_oceV(ji,jj) ) ) 584 585 ! Ocean-to-Ice stress 607 ! !--- Ocean-to-Ice stress 586 608 ztauy_oi(ji,jj) = zTauO * ( v_oce(ji,jj) - v_ice(ji,jj) ) 587 588 ! tau_bottom/v_ice609 ! 610 ! !--- tau_bottom/v_ice 589 611 zvel = MAX( zepsi, SQRT( v_ice(ji,jj) * v_ice(ji,jj) + u_iceV(ji,jj) * u_iceV(ji,jj) ) ) 590 612 ztauB = - tau_icebfr(ji,jj) / zvel 591 592 ! Coriolis at V-points (energy conserving formulation)613 ! 614 ! !--- Coriolis at v-points (energy conserving formulation) 593 615 zCory(ji,jj) = - 0.25_wp * r1_e2v(ji,jj) * & 594 616 & ( zmf(ji,jj ) * ( e2u(ji,jj ) * u_ice(ji,jj ) + e2u(ji-1,jj ) * u_ice(ji-1,jj ) ) & 595 617 & + zmf(ji,jj+1) * ( e2u(ji,jj+1) * u_ice(ji,jj+1) + e2u(ji-1,jj+1) * u_ice(ji-1,jj+1) ) ) 596 597 ! Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io618 ! 619 ! !--- Sum of external forces (explicit solution) = F + tau_ia + Coriolis + spg + tau_io 598 620 zTauE = zfV(ji,jj) + zTauV_ia(ji,jj) + zCory(ji,jj) + zspgV(ji,jj) + ztauy_oi(ji,jj) 599 600 ! landfast switch => 0 = static friction (tau_icebfr > zTauE); 1 = sliding friction621 ! 622 ! !--- landfast switch => 0 = static friction ; 1 = sliding friction 601 623 rswitch = 1._wp - MIN( 1._wp, ABS( SIGN( 1._wp, zTauE - tau_icebfr(ji,jj) ) - SIGN( 1._wp, zTauE ) ) ) 602 603 ! ice velocity using implicit formulation (cf Madec doc & Bouillon 2009) 624 ! 625 IF( ln_aEVP ) THEN !--- ice velocity using aEVP (Kimmritz et al 2016 & 2017) 626 v_ice(ji,jj) = ( ( rswitch * ( zmV_t(ji,jj) * ( zbeta(ji,jj) * v_ice(ji,jj) + v_ice_b(ji,jj) ) & ! previous velocity 627 & + zTauE + zTauO * v_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) 628 & ) / MAX( zepsi, zmV_t(ji,jj) * ( zbeta(ji,jj) + 1._wp ) + zTauO - zTauB ) & ! m/dt + tau_io(only ice part) + landfast 629 & + ( 1._wp - rswitch ) * v_ice(ji,jj) * MAX( 0._wp, 1._wp - zdtevp * rn_lfrelax ) & ! static friction => slow decrease to v=0 630 & ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 631 & ) * zmaskV(ji,jj) 632 ELSE !--- ice velocity using EVP implicit formulation (cf Madec doc & Bouillon 2009) 604 633 v_ice(ji,jj) = ( ( rswitch * ( zmV_t(ji,jj) * v_ice(ji,jj) & ! previous velocity 605 634 & + zTauE + zTauO * v_ice(ji,jj) & ! F + tau_ia + Coriolis + spg + tau_io(only ocean part) … … 608 637 & ) * zswitchV(ji,jj) + v_oce(ji,jj) * ( 1._wp - zswitchV(ji,jj) ) & ! v_ice = v_oce if mass < zmmin 609 638 & ) * zmaskV(ji,jj) 610 ! Bouillon 2013 611 !!v_ice(ji,jj) = ( zmV_t(ji,jj) * ( zbeta * v_ice(ji,jj) + v_ice_b(ji,jj) ) & 612 !! & + zfV(ji,jj) + zCory(ji,jj) + zTauV_ia(ji,jj) + zTauO * v_oce(ji,jj) + zspgV(ji,jj) & 613 !! & ) / MAX( zmV_t(ji,jj) * ( zbeta + 1._wp ) + zTauO - zTauB, zepsi ) * zswitchV(ji,jj) 639 ENDIF 614 640 END DO 615 641 END DO -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/iceforcing.F90
r8738 r8752 99 99 !! 100 100 !! ** Action : It provides the following fields used in sea ice model: 101 !! fr1_i0 , fr2_i0 = 1sr & 2nd fraction of qsr penetration in ice [%]102 101 !! emp_oce , emp_ice = E-P over ocean and sea ice [Kg/m2/s] 103 102 !! sprecip = solid precipitation [Kg/m2/s] … … 130 129 131 130 ! --- cloud-sky and overcast-sky ice albedos --- ! 132 CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os )131 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_frac, h_ip, zalb_cs, zalb_os ) 133 132 134 133 ! albedo depends on cloud fraction because of non-linear spectral effects … … 142 141 ! 143 142 CASE( jp_blk ) !--- bulk formulation 144 CALL blk_ice_flx( t_su, alb_ice ) !145 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su )143 CALL blk_ice_flx( t_su, h_s, h_i, alb_ice ) ! 144 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 146 145 IF( nn_iceflx /= 2 ) CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_iceflx ) 147 146 ! 148 147 CASE ( jp_purecpl ) !--- coupled formulation 149 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su )148 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 150 149 IF( nn_iceflx == 2 ) CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_iceflx ) 151 150 ! … … 268 267 INTEGER :: ios, ioptio ! Local integer output status for namelist read 269 268 !! 270 NAMELIST/namforcing/ rn_cio, rn_blow_s, nn_iceflx 269 NAMELIST/namforcing/ rn_cio, rn_blow_s, nn_iceflx, nice_jules 271 270 !!------------------------------------------------------------------- 272 271 ! … … 285 284 WRITE(numout,*) '~~~~~~~~~~~~~~~' 286 285 WRITE(numout,*) ' Namelist namforcing:' 287 WRITE(numout,*) ' drag coefficient for oceanic stress rn_cio = ', rn_cio 288 WRITE(numout,*) ' coefficient for ice-lead partition of snowfall rn_blow_s = ', rn_blow_s 289 WRITE(numout,*) ' Multicategory heat flux formulation nn_iceflx = ', nn_iceflx 286 WRITE(numout,*) ' drag coefficient for oceanic stress rn_cio = ', rn_cio 287 WRITE(numout,*) ' coefficient for ice-lead partition of snowfall rn_blow_s = ', rn_blow_s 288 WRITE(numout,*) ' Multicategory heat flux formulation nn_iceflx = ', nn_iceflx 289 WRITE(numout,*) ' Jules coupling (0=no, 1=emulated, 2=active) nice_jules = ', nice_jules 290 290 ENDIF 291 291 ! -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/iceistate.F90
r8738 r8752 94 94 REAL(wp) :: ztmelts, zdh 95 95 INTEGER :: i_hemis, i_fill, jl0 96 REAL(wp) :: zarg, zV, zconv, zdv 96 REAL(wp) :: zarg, zV, zconv, zdv, zfac 97 97 INTEGER , DIMENSION(4) :: itest 98 98 REAL(wp), DIMENSION(jpi,jpj) :: z2d … … 314 314 315 315 ! for constant salinity in time 316 IF( nn_icesal == 1 .OR. nn_icesal == 3) THEN316 IF( nn_icesal /= 2 ) THEN 317 317 CALL ice_var_salprof 318 318 sv_i = s_i * v_i … … 358 358 tn_ice (:,:,:) = t_su (:,:,:) 359 359 360 ! MV MP 2016361 360 ! Melt pond volume and fraction 362 IF ( ln_pnd ) THEN 363 DO jl = 1, jpl 364 a_ip_frac(:,:,jl) = 0.2 * zswitch(:,:) 365 h_ip (:,:,jl) = 0.05 * zswitch(:,:) 366 a_ip(:,:,jl) = a_ip_frac(:,:,jl) * a_i (:,:,jl) 367 v_ip(:,:,jl) = h_ip (:,:,jl) * a_ip(:,:,jl) 368 END DO 369 ELSE 370 a_ip(:,:,:) = 0._wp 371 v_ip(:,:,:) = 0._wp 372 a_ip_frac(:,:,:) = 0._wp 373 h_ip (:,:,:) = 0._wp 374 ENDIF 375 ! END MV MP 2016 361 IF ( ln_pnd_CST .OR. ln_pnd_H12 ) THEN ; zfac = 1._wp 362 ELSE ; zfac = 0._wp ; ENDIF 363 DO jl = 1, jpl 364 a_ip_frac(:,:,jl) = rn_apnd * zswitch(:,:) * zfac 365 h_ip (:,:,jl) = rn_hpnd * zswitch(:,:) * zfac 366 END DO 367 a_ip(:,:,:) = a_ip_frac(:,:,:) * a_i (:,:,:) 368 v_ip(:,:,:) = h_ip (:,:,:) * a_ip(:,:,:) 376 369 377 370 ELSE ! if ln_iceini=false -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/iceitd.F90
r8738 r8752 36 36 PUBLIC ice_itd_reb ! called in icecor 37 37 38 INTEGER :: nice_catbnd ! choice of the type of ice category function 39 ! ! associated indices: 40 INTEGER, PARAMETER :: np_cathfn = 1 ! categories defined by a function 41 INTEGER, PARAMETER :: np_catusr = 2 ! categories defined by the user 42 ! 38 43 ! ** namelist (namitd) ** 44 LOGICAL :: ln_cat_hfn ! ice categories are defined by function like rn_himean**(-0.05) 39 45 REAL(wp) :: rn_himean ! mean thickness of the domain 40 46 LOGICAL :: ln_cat_usr ! ice categories are defined by rn_catbnd 47 REAL(wp), DIMENSION(0:100) :: rn_catbnd ! ice categories bounds 48 ! 41 49 !!---------------------------------------------------------------------- 42 50 !! NEMO/ICE 4.0 , NEMO Consortium (2017) … … 293 301 IF ( a_i_1d(ji) > epsi10 .AND. h_i_1d(ji) < rn_himin ) THEN 294 302 a_i_1d (ji) = a_i_1d(ji) * h_i_1d(ji) / rn_himin 295 ! MV MP 2016 296 IF ( nn_pnd_scheme > 0 ) THEN 297 a_ip_1d(ji) = a_ip_1d(ji) * h_i_1d(ji) / rn_himin 298 ENDIF 299 ! END MV MP 2016 303 IF ( ln_pnd_H12 ) a_ip_1d(ji) = a_ip_1d(ji) * h_i_1d(ji) / rn_himin 300 304 h_i_1d(ji) = rn_himin 301 305 ENDIF … … 457 461 zaTsfn(ji,jl2) = zaTsfn(ji,jl2) + ztrans 458 462 ! 459 ! MV MP 2016 460 IF ( nn_pnd_scheme > 0 ) THEN 463 IF ( ln_pnd_H12 ) THEN 461 464 ! ! Pond fraction 462 465 ztrans = a_ip_2d(ji,jl1) * pdaice(ji,jl) !!clem: should be * zworka(ji) but it does not work … … 468 471 v_ip_2d(ji,jl2) = v_ip_2d(ji,jl2) + ztrans 469 472 ENDIF 470 ! END MV MP 2016471 473 ! 472 474 ENDIF ! jl1 >0 … … 643 645 !! ** input : Namelist namitd 644 646 !!------------------------------------------------------------------- 645 INTEGER :: jl ! dummy loop index646 INTEGER :: ios ! Local integer output status for namelist read647 INTEGER :: jl ! dummy loop index 648 INTEGER :: ios, ioptio ! Local integer output status for namelist read 647 649 REAL(wp) :: zhmax, znum, zden, zalpha ! - - 648 ! !649 NAMELIST/namitd/ rn_himean, rn_himin650 ! 651 NAMELIST/namitd/ ln_cat_hfn, rn_himean, ln_cat_usr, rn_catbnd, rn_himin 650 652 !!------------------------------------------------------------------ 651 653 ! … … 664 666 WRITE(numout,*) '~~~~~~~~~~~~' 665 667 WRITE(numout,*) ' Namelist namitd: ' 666 WRITE(numout,*) ' mean ice thickness in the domain rn_himean = ', rn_himean 667 WRITE(numout,*) ' minimum ice thickness rn_himin = ', rn_himin 668 WRITE(numout,*) ' Ice categories are defined by a function of rn_himean**(-0.05) ln_cat_hfn = ', ln_cat_hfn 669 WRITE(numout,*) ' mean ice thickness in the domain rn_himean = ', rn_himean 670 WRITE(numout,*) ' Ice categories are defined by rn_catbnd ln_cat_usr = ', ln_cat_usr 671 WRITE(numout,*) ' ice categories boundaries (m) rn_catbnd = ', rn_catbnd 672 WRITE(numout,*) ' minimum ice thickness rn_himin = ', rn_himin 668 673 ENDIF 669 674 ! … … 671 676 ! Thickness categories boundaries ! 672 677 !-----------------------------------! 673 ! 674 zalpha = 0.05_wp ! max of each category (from h^(-alpha) function) 675 zhmax = 3._wp * rn_himean 676 DO jl = 1, jpl 677 znum = jpl * ( zhmax+1 )**zalpha 678 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 679 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 680 END DO 678 ! !== set the choice of ice categories ==! 679 ioptio = 0 680 IF( ln_cat_hfn ) THEN ; ioptio = ioptio + 1 ; nice_catbnd = np_cathfn ; ENDIF 681 IF( ln_cat_usr ) THEN ; ioptio = ioptio + 1 ; nice_catbnd = np_catusr ; ENDIF 682 IF( ioptio /= 1 ) CALL ctl_stop( 'ice_itd_init: choose one and only one ice categories boundaries' ) 683 ! 684 SELECT CASE( nice_catbnd ) 685 ! !------------------------! 686 CASE( np_cathfn ) ! h^(-alpha) function 687 ! !------------------------! 688 zalpha = 0.05_wp 689 zhmax = 3._wp * rn_himean 690 DO jl = 1, jpl 691 znum = jpl * ( zhmax+1 )**zalpha 692 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 693 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 694 END DO 695 ! !------------------------! 696 CASE( np_catusr ) ! user defined 697 ! !------------------------! 698 DO jl = 0, jpl 699 hi_max(jl) = rn_catbnd(jl) 700 END DO 701 ! 702 END SELECT 681 703 ! 682 704 DO jl = 1, jpl ! mean thickness by category -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icerst.F90
r8738 r8752 147 147 END DO 148 148 149 ! MV MP 2016 150 IF ( nn_pnd_scheme > 0 ) THEN 151 DO jl = 1, jpl 152 WRITE(zchar,'(I2.2)') jl 153 znam = 'a_ip'//'_htc'//zchar 154 z2d(:,:) = a_ip(:,:,jl) 155 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! a_ip 156 znam = 'v_ip'//'_htc'//zchar 157 z2d(:,:) = v_ip(:,:,jl) 158 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! v_ip 159 END DO 160 ENDIF 161 ! END MV MP 2016 149 DO jl = 1, jpl 150 WRITE(zchar,'(I2.2)') jl 151 znam = 'a_ip'//'_htc'//zchar 152 z2d(:,:) = a_ip(:,:,jl) 153 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! a_ip 154 znam = 'v_ip'//'_htc'//zchar 155 z2d(:,:) = v_ip(:,:,jl) 156 CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! v_ip 157 END DO 162 158 163 159 DO jl = 1, jpl … … 193 189 !! ** purpose : read restart file 194 190 !!---------------------------------------------------------------------- 195 INTEGER :: jk, jl 196 REAL(wp) :: zfice, ziter 191 INTEGER :: jk, jl 192 INTEGER :: id1 ! local integer 193 REAL(wp) :: zfice, ziter 197 194 REAL(wp), DIMENSION(jpi,jpj) :: z2d 198 195 CHARACTER(len=25) :: znam … … 248 245 END DO 249 246 250 ! MV MP 2016251 IF ( nn_pnd_scheme > 0 ) THEN247 id1 = iom_varid( numrir, 'a_ip_htc01' , ldstop = .FALSE. ) 248 IF( id1 > 0 ) THEN ! fields exist (melt ponds) 252 249 DO jl = 1, jpl 253 250 WRITE(zchar,'(I2.2)') jl … … 259 256 v_ip(:,:,jl) = z2d(:,:) 260 257 END DO 261 ENDIF 262 ! END MV MP 2016 258 ELSE ! start from rest 259 IF(lwp) WRITE(numout,*) ' ==>> previous run without melt ponds output then set it' 260 a_ip(:,:,:) = 0._wp 261 v_ip(:,:,:) = 0._wp 262 ENDIF 263 263 264 264 DO jl = 1, jpl -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icestp.F90
r8738 r8752 35 35 USE icedyn ! sea-ice: dynamics 36 36 USE icethd ! sea-ice: thermodynamics 37 USE limmp ! sea-ice: melt ponds38 37 USE icecor ! sea-ice: corrections 39 38 USE iceupdate ! sea-ice: sea surface boundary condition update … … 154 153 !------------------------------------------------------! 155 154 ! It provides the following fields used in sea ice model: 156 ! fr1_i0 , fr2_i0 = 1sr & 2nd fraction of qsr penetration in ice [%]157 155 ! emp_oce , emp_ice = E-P over ocean and sea ice [Kg/m2/s] 158 156 ! sprecip = solid precipitation [Kg/m2/s] … … 170 168 IF( ln_icethd ) CALL ice_thd( kt ) ! -- Ice thermodynamics 171 169 ! 172 IF ( ln_pnd ) CALL lim_mp( kt ) ! -- Melt ponds173 170 ! 174 171 IF( ln_icethd ) CALL ice_cor( kt , 2 ) ! -- Corrections … … 238 235 CALL ice_itd_init ! ice thickness distribution initialization 239 236 ! 240 CALL lim_mp_init ! set melt ponds parameters (clem: important to be located here) 241 ! 237 IF( ln_icethd ) THEN 238 CALL ice_thd_init ! set ice thermodynics parameters (clem: important to call it first for melt ponds) 239 ENDIF 242 240 ! ! Initial sea-ice state 243 241 IF( .NOT. ln_rstart ) THEN ! start from rest: sea-ice deduced from sst … … 255 253 CALL ice_dyn_init ! set ice dynamics parameters 256 254 ENDIF 257 !258 IF( ln_icethd ) THEN259 CALL ice_thd_init ! set ice thermodynics parameters260 ENDIF261 255 ! 262 256 CALL ice_update_init ! ice surface boundary condition … … 325 319 IF(lwp) WRITE(numout,*) ' nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen' 326 320 ENDIF 327 328 329 321 ! IF ( jpl == 1 .AND. nn_monocat == 0 ) THEN 322 ! CALL ctl_stop( 'STOP', 'par_init : if jpl=1 then nn_monocat should be between 1 and 4' ) 323 ! ENDIF 330 324 ! 331 325 IF( ln_bdy .AND. ln_icediachk ) CALL ctl_warn('par_init: online conservation check does not work with BDY') … … 398 392 wfx_snw_sub(:,:) = 0._wp ; wfx_ice_sub(:,:) = 0._wp 399 393 wfx_snw_sni(:,:) = 0._wp 400 ! MV MP 2016401 394 wfx_pnd(:,:) = 0._wp 402 ! END MV MP 2016403 395 404 396 hfx_thd(:,:) = 0._wp ; -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icethd.F90
r8738 r8752 26 26 USE sbc_oce , ONLY : sss_m, sst_m, e3t_m, utau, vtau, ssu_m, ssv_m, frq_m, qns_tot, qsr_tot, sprecip, ln_cpl 27 27 USE sbc_ice , ONLY : qsr_oce, qns_oce, qemp_oce, qsr_ice, qns_ice, dqns_ice, evap_ice, qprec_ice, qevap_ice, & 28 & fr1_i0, fr2_i028 & qml_ice, qcn_ice, qsr_ice_tr 29 29 USE ice1D ! sea-ice: thermodynamics variables 30 30 USE icethd_zdf ! sea-ice: vertical heat diffusion … … 34 34 USE icethd_ent ! sea-ice: enthalpy redistribution 35 35 USE icethd_do ! sea-ice: growth in open water 36 USE icethd_pnd ! sea-ice: melt ponds 36 37 USE iceitd ! sea-ice: remapping thickness distribution 37 38 USE icetab ! sea-ice: 1D <==> 2D transformation … … 86 87 !! - call ice_thd_rem for remapping thickness distribution 87 88 !! - call ice_thd_do for ice growth in leads 88 !!------------------------------------------------------------------- --89 !!------------------------------------------------------------------- 89 90 INTEGER, INTENT(in) :: kt ! number of iteration 90 91 ! … … 230 231 s_i_new (1:npti) = 0._wp ; dh_s_tot (1:npti) = 0._wp ! --- some init --- ! (important to have them here) 231 232 dh_i_surf (1:npti) = 0._wp ; dh_i_bott(1:npti) = 0._wp 232 dh_snowice(1:npti) = 0._wp ; dh_i_sub (1:npti) = 0._wp 233 dh_snowice(1:npti) = 0._wp ; dh_i_sub (1:npti) = 0._wp ; dh_s_mlt(1:npti) = 0._wp 233 234 ! 234 235 IF( ln_icedH ) THEN ! --- growing/melting --- ! 235 236 CALL ice_thd_zdf ! Ice/Snow Temperature profile 236 237 CALL ice_thd_dh ! Ice/Snow thickness 238 CALL ice_thd_pnd ! Melt ponds formation 237 239 CALL ice_thd_ent( e_i_1d(1:npti,:) ) ! Ice enthalpy remapping 238 240 ENDIF … … 362 364 CALL tab_2d_1d( npti, nptidx(1:npti), at_i_1d(1:npti), at_i ) 363 365 CALL tab_2d_1d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i (:,:,kl) ) 364 CALL tab_2d_1d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i(:,:,kl) )365 CALL tab_2d_1d( npti, nptidx(1:npti), h_s_1d (1:npti), h_s(:,:,kl) )366 CALL tab_2d_1d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,kl) ) 367 CALL tab_2d_1d( npti, nptidx(1:npti), h_s_1d (1:npti), h_s (:,:,kl) ) 366 368 CALL tab_2d_1d( npti, nptidx(1:npti), t_su_1d(1:npti), t_su(:,:,kl) ) 367 CALL tab_2d_1d( npti, nptidx(1:npti), s_i_1d (1:npti), s_i(:,:,kl) )369 CALL tab_2d_1d( npti, nptidx(1:npti), s_i_1d (1:npti), s_i (:,:,kl) ) 368 370 DO jk = 1, nlay_s 369 CALL tab_2d_1d( npti, nptidx(1:npti), t_s_1d(1:npti,jk), t_s(:,:,jk,kl) )370 CALL tab_2d_1d( npti, nptidx(1:npti), e_s_1d(1:npti,jk), e_s(:,:,jk,kl) )371 CALL tab_2d_1d( npti, nptidx(1:npti), t_s_1d(1:npti,jk), t_s(:,:,jk,kl) ) 372 CALL tab_2d_1d( npti, nptidx(1:npti), e_s_1d(1:npti,jk), e_s(:,:,jk,kl) ) 371 373 END DO 372 374 DO jk = 1, nlay_i 373 CALL tab_2d_1d( npti, nptidx(1:npti), t_i_1d(1:npti,jk), t_i(:,:,jk,kl) ) 374 CALL tab_2d_1d( npti, nptidx(1:npti), e_i_1d(1:npti,jk), e_i(:,:,jk,kl) ) 375 CALL tab_2d_1d( npti, nptidx(1:npti), sz_i_1d(1:npti,jk), sz_i(:,:,jk,kl) ) 376 END DO 375 CALL tab_2d_1d( npti, nptidx(1:npti), t_i_1d (1:npti,jk), t_i (:,:,jk,kl) ) 376 CALL tab_2d_1d( npti, nptidx(1:npti), e_i_1d (1:npti,jk), e_i (:,:,jk,kl) ) 377 CALL tab_2d_1d( npti, nptidx(1:npti), sz_i_1d(1:npti,jk), sz_i(:,:,jk,kl) ) 378 END DO 379 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_1d (1:npti), a_ip (:,:,kl) ) 380 CALL tab_2d_1d( npti, nptidx(1:npti), h_ip_1d (1:npti), h_ip (:,:,kl) ) 381 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 377 382 ! 378 383 CALL tab_2d_1d( npti, nptidx(1:npti), qprec_ice_1d(1:npti), qprec_ice ) 379 384 CALL tab_2d_1d( npti, nptidx(1:npti), qsr_ice_1d (1:npti), qsr_ice (:,:,kl) ) 380 CALL tab_2d_1d( npti, nptidx(1:npti), fr1_i0_1d (1:npti), fr1_i0 )381 CALL tab_2d_1d( npti, nptidx(1:npti), fr2_i0_1d (1:npti), fr2_i0 )382 385 CALL tab_2d_1d( npti, nptidx(1:npti), qns_ice_1d (1:npti), qns_ice (:,:,kl) ) 383 386 CALL tab_2d_1d( npti, nptidx(1:npti), ftr_ice_1d (1:npti), ftr_ice (:,:,kl) ) … … 388 391 CALL tab_2d_1d( npti, nptidx(1:npti), fhtur_1d (1:npti), fhtur ) 389 392 CALL tab_2d_1d( npti, nptidx(1:npti), fhld_1d (1:npti), fhld ) 393 394 CALL tab_2d_1d( npti, nptidx(1:npti), qml_ice_1d (1:npti), qml_ice (:,:,kl) ) 395 CALL tab_2d_1d( npti, nptidx(1:npti), qcn_ice_1d (1:npti), qcn_ice (:,:,kl) ) 396 CALL tab_2d_1d( npti, nptidx(1:npti), qsr_ice_tr_1d(1:npti), qsr_ice_tr (:,:,kl) ) 390 397 ! 391 398 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_snw_sni_1d(1:npti), wfx_snw_sni ) … … 403 410 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_spr_1d (1:npti), wfx_spr ) 404 411 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_lam_1d (1:npti), wfx_lam ) 412 CALL tab_2d_1d( npti, nptidx(1:npti), wfx_pnd_1d (1:npti), wfx_pnd ) 405 413 ! 406 414 CALL tab_2d_1d( npti, nptidx(1:npti), sfx_bog_1d (1:npti), sfx_bog ) … … 454 462 ! 455 463 ! Change thickness to volume (replaces routine ice_var_eqv2glo) 456 v_i_1d(1:npti) = h_i_1d(1:npti) * a_i_1d(1:npti) 457 v_s_1d(1:npti) = h_s_1d(1:npti) * a_i_1d(1:npti) 458 sv_i_1d(1:npti) = s_i_1d(1:npti) * v_i_1d(1:npti) 464 v_i_1d (1:npti) = h_i_1d (1:npti) * a_i_1d (1:npti) 465 v_s_1d (1:npti) = h_s_1d (1:npti) * a_i_1d (1:npti) 466 sv_i_1d(1:npti) = s_i_1d (1:npti) * v_i_1d (1:npti) 467 v_ip_1d(1:npti) = h_ip_1d(1:npti) * a_ip_1d(1:npti) 459 468 460 469 CALL tab_1d_2d( npti, nptidx(1:npti), at_i_1d(1:npti), at_i ) 461 470 CALL tab_1d_2d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i (:,:,kl) ) 462 CALL tab_1d_2d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i(:,:,kl) )463 CALL tab_1d_2d( npti, nptidx(1:npti), h_s_1d (1:npti), h_s(:,:,kl) )471 CALL tab_1d_2d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,kl) ) 472 CALL tab_1d_2d( npti, nptidx(1:npti), h_s_1d (1:npti), h_s (:,:,kl) ) 464 473 CALL tab_1d_2d( npti, nptidx(1:npti), t_su_1d(1:npti), t_su(:,:,kl) ) 465 CALL tab_1d_2d( npti, nptidx(1:npti), s_i_1d (1:npti), s_i(:,:,kl) )474 CALL tab_1d_2d( npti, nptidx(1:npti), s_i_1d (1:npti), s_i (:,:,kl) ) 466 475 DO jk = 1, nlay_s 467 CALL tab_1d_2d( npti, nptidx(1:npti), t_s_1d(1:npti,jk), t_s(:,:,jk,kl) )468 CALL tab_1d_2d( npti, nptidx(1:npti), e_s_1d(1:npti,jk), e_s(:,:,jk,kl) )476 CALL tab_1d_2d( npti, nptidx(1:npti), t_s_1d(1:npti,jk), t_s(:,:,jk,kl) ) 477 CALL tab_1d_2d( npti, nptidx(1:npti), e_s_1d(1:npti,jk), e_s(:,:,jk,kl) ) 469 478 END DO 470 479 DO jk = 1, nlay_i 471 CALL tab_1d_2d( npti, nptidx(1:npti), t_i_1d(1:npti,jk), t_i(:,:,jk,kl) ) 472 CALL tab_1d_2d( npti, nptidx(1:npti), e_i_1d(1:npti,jk), e_i(:,:,jk,kl) ) 473 CALL tab_1d_2d( npti, nptidx(1:npti), sz_i_1d(1:npti,jk), sz_i(:,:,jk,kl) ) 474 END DO 480 CALL tab_1d_2d( npti, nptidx(1:npti), t_i_1d (1:npti,jk), t_i (:,:,jk,kl) ) 481 CALL tab_1d_2d( npti, nptidx(1:npti), e_i_1d (1:npti,jk), e_i (:,:,jk,kl) ) 482 CALL tab_1d_2d( npti, nptidx(1:npti), sz_i_1d(1:npti,jk), sz_i(:,:,jk,kl) ) 483 END DO 484 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_1d (1:npti), a_ip (:,:,kl) ) 485 CALL tab_1d_2d( npti, nptidx(1:npti), h_ip_1d (1:npti), h_ip (:,:,kl) ) 486 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_frac_1d(1:npti), a_ip_frac(:,:,kl) ) 475 487 ! 476 488 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_snw_sni_1d(1:npti), wfx_snw_sni ) … … 488 500 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_spr_1d (1:npti), wfx_spr ) 489 501 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_lam_1d (1:npti), wfx_lam ) 502 CALL tab_1d_2d( npti, nptidx(1:npti), wfx_pnd_1d (1:npti), wfx_pnd ) 490 503 ! 491 504 CALL tab_1d_2d( npti, nptidx(1:npti), sfx_bog_1d (1:npti), sfx_bog ) … … 523 536 CALL tab_1d_2d( npti, nptidx(1:npti), v_s_1d (1:npti), v_s (:,:,kl) ) 524 537 CALL tab_1d_2d( npti, nptidx(1:npti), sv_i_1d(1:npti), sv_i(:,:,kl) ) 538 CALL tab_1d_2d( npti, nptidx(1:npti), v_ip_1d(1:npti), v_ip(:,:,kl) ) 525 539 ! 526 540 END SELECT … … 530 544 531 545 SUBROUTINE ice_thd_init 532 !!------------------------------------------------------------------- ----546 !!------------------------------------------------------------------- 533 547 !! *** ROUTINE ice_thd_init *** 534 548 !! … … 570 584 IF( ln_icedO ) CALL ice_thd_do_init ! set ice growth in open water parameters 571 585 CALL ice_thd_sal_init ! set ice salinity parameters 572 ! 573 IF( ln_icedS .AND. nn_icesal == 1 ) THEN 574 ln_icedS = .FALSE. 575 CALL ctl_warn('ln_icedS is set to false since constant ice salinity is chosen (nn_icesal=1)') 576 ENDIF 586 CALL ice_thd_pnd_init ! set melt ponds parameters 577 587 ! 578 588 END SUBROUTINE ice_thd_init -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icethd_dh.F90
r8738 r8752 130 130 !------------------------------------------------------------------------------! 131 131 ! 132 DO ji = 1, npti 133 zdum = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji) 132 SELECT CASE ( nice_jules ) 133 134 CASE ( np_jules_ACTIVE ) 135 136 DO ji = 1, npti 137 zq_su(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 138 END DO 139 140 CASE ( np_jules_EMULE ) 141 142 DO ji = 1, npti 143 zdum = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - qsr_ice_tr_1d(ji) - fc_su(ji) ) 144 qml_ice_1d(ji) = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 145 zq_su(ji) = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice ) 146 END DO 147 148 CASE ( np_jules_OFF ) 149 150 DO ji = 1, npti 151 zdum = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - qsr_ice_tr_1d(ji) - fc_su(ji) ) 152 zdum = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 153 zq_su(ji) = MAX( 0._wp, zdum * rdt_ice ) 154 END DO 155 156 END SELECT 157 158 DO ji = 1, npti 134 159 zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji) 135 136 zq_su (ji) = MAX( 0._wp, zdum * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) )137 160 zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 138 161 END DO … … 148 171 ! Contribution to mass flux 149 172 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhosn * h_s_1d(ji) * a_i_1d(ji) * r1_rdtice 173 dh_s_mlt(ji) = dh_s_mlt(ji) - h_s_1d(ji) 150 174 ! updates 151 h_s_1d(ji) = 0._wp175 h_s_1d(ji) = 0._wp 152 176 e_s_1d (ji,1) = 0._wp 153 177 t_s_1d (ji,1) = rt0 … … 211 235 ! snow melting only = water into the ocean (then without snow precip), >0 212 236 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 237 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,1) 213 238 ! updates available heat + precipitations after melting 214 239 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,1) * zqprec(ji) ) … … 233 258 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d(ji,jk) * r1_rdtice 234 259 ! snow melting only = water into the ocean (then without snow precip) 235 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 260 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 261 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,jk) 236 262 ! updates available heat + thickness 237 zq_su (ji) 263 zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * e_s_1d(ji,jk) ) 238 264 h_s_1d(ji) = MAX( 0._wp , h_s_1d(ji) + zdeltah(ji,jk) ) 239 265 END DO … … 571 597 zdeltah (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - h_s_1d(ji) ) ) ! bound melting 572 598 dh_s_tot (ji) = dh_s_tot(ji) + zdeltah(ji,1) 573 h_s_1d (ji) = h_s_1d(ji) + zdeltah(ji,1)599 h_s_1d (ji) = h_s_1d(ji) + zdeltah(ji,1) 574 600 575 601 zq_rema(ji) = zq_rema(ji) + zdeltah(ji,1) * e_s_1d(ji,1) ! update available heat (J.m-2) … … 577 603 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_rdtice ! W.m-2 (>0) 578 604 ! Contribution to mass flux 579 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 605 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 606 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,1) 580 607 ! 581 608 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget … … 611 638 612 639 ! Case constant salinity in time: virtual salt flux to keep salinity constant 613 IF( nn_icesal == 1 .OR. nn_icesal == 3) THEN640 IF( nn_icesal /= 2 ) THEN 614 641 sfx_bri_1d(ji) = sfx_bri_1d(ji) - sss_1d (ji) * a_i_1d(ji) * zfmdt * r1_rdtice & ! put back sss_m into the ocean 615 642 & - s_i_1d(ji) * a_i_1d(ji) * dh_snowice(ji) * rhoic * r1_rdtice ! and get rn_icesal from the ocean -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icethd_zdf.F90
r8738 r8752 34 34 LOGICAL :: ln_cndi_U64 ! thermal conductivity: Untersteiner (1964) 35 35 LOGICAL :: ln_cndi_P07 ! thermal conductivity: Pringle et al (2007) 36 REAL(wp) :: rn_cnd_s ! thermal conductivity of the snow [W/m/K]37 36 REAL(wp) :: rn_kappa_i ! coef. for the extinction of radiation Grenfell et al. (2006) [1/m] 38 LOGICAL :: ln_dqns_i ! change non-solar surface flux with changing surface temperature (T) or not (F) 39 37 REAL(wp), PUBLIC :: rn_cnd_s ! thermal conductivity of the snow [W/m/K] 38 39 INTEGER :: nice_zdf ! Choice of the type of vertical heat diffusion formulation 40 ! ! associated indices: 41 INTEGER, PARAMETER :: np_BL99 = 1 ! Bitz and Lipscomb (1999) 42 43 INTEGER , PARAMETER :: np_zdf_jules_OFF = 0 ! compute all temperatures from qsr and qns 44 INTEGER , PARAMETER :: np_zdf_jules_SND = 1 ! compute conductive heat flux and surface temperature from qsr and qns 45 INTEGER , PARAMETER :: np_zdf_jules_RCV = 2 ! compute snow and inner ice temperatures from qcnd 46 40 47 !!---------------------------------------------------------------------- 41 48 !! NEMO/ICE 4.0 , NEMO Consortium (2017) … … 45 52 CONTAINS 46 53 47 SUBROUTINE ice_thd_zdf 54 SUBROUTINE ice_thd_zdf 55 56 !! 48 57 !!------------------------------------------------------------------- 49 58 !! *** ROUTINE ice_thd_zdf *** 50 59 !! ** Purpose : 60 !! This chooses between the appropriate routine for the 61 !! computation of vertical diffusion 62 !! 63 !!------------------------------------------------------------------- 64 !! 65 66 SELECT CASE ( nice_zdf ) ! Choose the vertical heat diffusion solver 67 68 !------------- 69 CASE( np_BL99 ) ! BL99 solver 70 !------------- 71 72 IF ( nice_jules == np_jules_OFF ) THEN ! No Jules coupler 73 74 CALL ice_thd_zdf_BL99 ( np_zdf_jules_OFF ) 75 76 ENDIF 77 78 IF ( nice_jules == np_jules_EMULE ) THEN ! Jules coupler is emulated 79 80 CALL ice_thd_zdf_BL99 ( np_zdf_jules_SND ) 81 CALL ice_thd_zdf_BL99 ( np_zdf_jules_RCV ) 82 83 ENDIF 84 85 IF ( nice_jules == np_jules_ACTIVE ) THEN ! Jules coupler is emulated 86 87 CALL ice_thd_zdf_BL99 ( np_zdf_jules_RCV ) 88 89 ENDIF 90 91 END SELECT 92 93 END SUBROUTINE ice_thd_zdf 94 95 96 97 SUBROUTINE ice_thd_zdf_BL99(k_jules) 98 !!------------------------------------------------------------------- 99 !! *** ROUTINE ice_thd_zdf_BL99 *** 100 !! ** Purpose : 51 101 !! This routine determines the time evolution of snow and sea-ice 52 !! temperature profiles. 102 !! temperature profiles, using the original Bitz and Lipscomb (1999) algorithm 103 !! 53 104 !! ** Method : 54 105 !! This is done by solving the heat equation diffusion with … … 83 134 !! total ice/snow thickness : h_i_1d, h_s_1d 84 135 !!------------------------------------------------------------------- 136 INTEGER, INTENT(in) :: k_jules ! Jules coupling (0=OFF, 1=RECEIVE, 2=SEND) 137 85 138 INTEGER :: ji, jk ! spatial loop index 86 139 INTEGER :: jm ! current reference number of equation … … 101 154 REAL(wp) :: zdti_bnd = 1.e-4_wp ! maximal authorized error on temperature 102 155 REAL(wp) :: ztmelt_i ! ice melting temperature 103 REAL(wp) :: z1_hsu104 156 REAL(wp) :: zdti_max ! current maximal error on temperature 105 157 REAL(wp) :: zcpi ! Ice specific heat … … 111 163 REAL(wp), DIMENSION(jpij) :: zh_i, z1_h_i ! ice layer thickness 112 164 REAL(wp), DIMENSION(jpij) :: zh_s, z1_h_s ! snow layer thickness 113 REAL(wp), DIMENSION(jpij) :: zfsw ! solar radiation absorbed at the surface114 165 REAL(wp), DIMENSION(jpij) :: zqns_ice_b ! solar radiation absorbed at the surface 115 166 REAL(wp), DIMENSION(jpij) :: zfnet ! surface flux function 116 167 REAL(wp), DIMENSION(jpij) :: zdqns_ice_b ! derivative of the surface flux function 117 REAL(wp), DIMENSION(jpij) :: zftrice ! solar radiation transmitted through the ice118 168 169 REAL(wp), DIMENSION(jpij ) :: ztsuold ! Old surface temperature in the ice 119 170 REAL(wp), DIMENSION(jpij,nlay_i) :: ztiold ! Old temperature in the ice 120 171 REAL(wp), DIMENSION(jpij,nlay_s) :: ztsold ! Old temperature in the snow … … 136 187 REAL(wp), DIMENSION(jpij) :: zq_ini ! diag errors on heat 137 188 REAL(wp), DIMENSION(jpij) :: zghe ! G(he), th. conduct enhancement factor, mono-cat 189 190 REAL(wp) :: zfr1, zfr2, zfrqsr_tr_i ! dummy factor 138 191 139 192 ! Mono-category … … 166 219 ELSEWHERE ; z1_h_s(1:npti) = 0._wp 167 220 END WHERE 168 ! 169 ! temperatures 170 ztsub (1:npti) = t_su_1d(1:npti) ! temperature at the previous iteration 221 222 ! Store initial temperatures and non solar heat fluxes 223 IF ( k_jules == np_zdf_jules_OFF .OR. k_jules == np_zdf_jules_SND ) THEN ! OFF or SND mode 224 225 ztsub (1:npti) = t_su_1d(1:npti) ! surface temperature at iteration n-1 226 ztsuold(1:npti) = t_su_1d(1:npti) ! surface temperature initial value 227 zdqns_ice_b(1:npti) = dqns_ice_1d(1:npti) ! derivative of incoming nonsolar flux 228 zqns_ice_b (1:npti) = qns_ice_1d(1:npti) ! store previous qns_ice_1d value 229 230 t_su_1d(1:npti) = MIN( t_su_1d(1:npti), rt0 - ztsu_err ) ! required to leave the choice between melting or not 231 232 ENDIF 233 171 234 ztsold (1:npti,:) = t_s_1d(1:npti,:) ! Old snow temperature 172 235 ztiold (1:npti,:) = t_i_1d(1:npti,:) ! Old ice temperature 173 t_su_1d(1:npti) = MIN( t_su_1d(1:npti), rt0 - ztsu_err ) ! necessary 174 ! 236 175 237 !------------- 176 238 ! 2) Radiation 177 239 !------------- 178 z1_hsu = 1._wp / 0.1_wp ! threshold for the computation of i0179 DO ji = 1, npti180 ! --- Computation of i0 --- !181 ! i0 describes the fraction of solar radiation which does not contribute182 ! to the surface energy budget but rather penetrates inside the ice.183 ! We assume that no radiation is transmitted through the snow184 ! If there is no no snow185 ! zfsw = (1-i0).qsr_ice is absorbed at the surface186 ! zftrice = io.qsr_ice is below the surface187 ! ftr_ice = io.qsr_ice.exp(-k(h_i)) transmitted below the ice188 ! fr1_i0_1d = i0 for a thin ice cover, fr1_i0_2d = i0 for a thick ice cover189 zfac = MAX( 0._wp , 1._wp - ( h_i_1d(ji) * z1_hsu ) )190 i0(ji) = ( 1._wp - isnow(ji) ) * ( fr1_i0_1d(ji) + zfac * fr2_i0_1d(ji) )191 192 ! --- Solar radiation absorbed / transmitted at the surface --- !193 ! Derivative of the non solar flux194 zfsw (ji) = qsr_ice_1d(ji) * ( 1 - i0(ji) ) ! Shortwave radiation absorbed at surface195 zftrice(ji) = qsr_ice_1d(ji) * i0(ji) ! Solar radiation transmitted below the surface layer196 zdqns_ice_b(ji) = dqns_ice_1d(ji) ! derivative of incoming nonsolar flux197 zqns_ice_b (ji) = qns_ice_1d(ji) ! store previous qns_ice_1d value198 END DO199 200 240 ! --- Transmission/absorption of solar radiation in the ice --- ! 201 zradtr_s(1:npti,0) = zftrice(1:npti) 241 ! zfr1 = ( 0.18 * ( 1.0 - 0.81 ) + 0.35 * 0.81 ) ! standard value 242 ! zfr2 = ( 0.82 * ( 1.0 - 0.81 ) + 0.65 * 0.81 ) ! zfr2 such that zfr1 + zfr2 to equal 1 243 244 ! DO ji = 1, npti 245 246 ! zfac = MAX( 0._wp , 1._wp - ( h_i_1d(ji) * 10._wp ) ) 247 248 ! zfrqsr_tr_i = zfr1 + zfac * zfr2 ! below 10 cm, linearly increase zfrqsr_tr_i until 1 at zero thickness 249 ! IF ( h_s_1d(ji) >= 0.0_wp ) zfrqsr_tr_i = 0._wp ! snow fully opaque 250 251 ! qsr_ice_tr_1d(ji) = zfrqsr_tr_i * qsr_ice_1d(ji) ! transmitted solar radiation 252 253 ! zfsw(ji) = qsr_ice_1d(ji) - qsr_ice_tr_1d(ji) 254 ! zftrice(ji) = qsr_ice_tr_1d(ji) 255 ! i0(ji) = zfrqsr_tr_i 256 257 ! END DO 258 259 zradtr_s(1:npti,0) = qsr_ice_tr_1d(1:npti) 202 260 DO jk = 1, nlay_s 203 261 DO ji = 1, npti … … 209 267 END DO 210 268 211 zradtr_i(1:npti,0) = zradtr_s(1:npti,nlay_s) * isnow(1:npti) + zftrice(1:npti) * ( 1._wp - isnow(1:npti) )269 zradtr_i(1:npti,0) = zradtr_s(1:npti,nlay_s) * isnow(1:npti) + qsr_ice_tr_1d(1:npti) * ( 1._wp - isnow(1:npti) ) 212 270 DO jk = 1, nlay_i 213 271 DO ji = 1, npti … … 330 388 END DO 331 389 END DO 332 ! 333 !---------------------------- 334 ! 6) surface flux computation 335 !---------------------------- 336 IF ( ln_dqns_i ) THEN 337 DO ji = 1, npti 338 ! update of the non solar flux according to the update in T_su 390 391 ! 392 !----------------------------------------! 393 ! ! 394 ! JULES IF (OFF or SND MODE) ! 395 ! ! 396 !----------------------------------------! 397 ! 398 399 IF ( k_jules == np_zdf_jules_OFF .OR. k_jules == np_zdf_jules_SND ) THEN ! OFF or SND mode 400 401 ! 402 ! In OFF mode the original BL99 temperature computation is used 403 ! (with qsr_ice, qns_ice and dqns_ice as inputs) 404 ! 405 ! In SND mode, the computation is required to compute the conduction fluxes 406 ! 407 408 !---------------------------- 409 ! 6) surface flux computation 410 !---------------------------- 411 412 DO ji = 1, npti 413 ! update of the non solar flux according to the update in T_su 339 414 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsub(ji) ) 340 415 END DO 341 ENDIF 342 343 DO ji = 1, npti 344 zfnet(ji) = zfsw(ji) + qns_ice_1d(ji) ! incoming = net absorbed solar radiation + non solar total flux (LWup, LWdw, SH, LH) 345 END DO 346 ! 347 !---------------------------- 348 ! 7) tridiagonal system terms 349 !---------------------------- 350 !!layer denotes the number of the layer in the snow or in the ice 351 !!jm denotes the reference number of the equation in the tridiagonal 352 !!system, terms of tridiagonal system are indexed as following : 353 !!1 is subdiagonal term, 2 is diagonal and 3 is superdiagonal one 354 355 !!ice interior terms (top equation has the same form as the others) 356 ztrid (1:npti,:,:) = 0._wp 357 zindterm(1:npti,:) = 0._wp 358 zindtbis(1:npti,:) = 0._wp 359 zdiagbis(1:npti,:) = 0._wp 360 361 DO jm = nlay_s + 2, nlay_s + nlay_i 416 417 DO ji = 1, npti 418 zfnet(ji) = qsr_ice_1d(ji) - qsr_ice_tr_1d(ji) + qns_ice_1d(ji) ! net heat flux = net solar - transmitted solar + non solar 419 END DO 420 ! 421 !---------------------------- 422 ! 7) tridiagonal system terms 423 !---------------------------- 424 !!layer denotes the number of the layer in the snow or in the ice 425 !!jm denotes the reference number of the equation in the tridiagonal 426 !!system, terms of tridiagonal system are indexed as following : 427 !!1 is subdiagonal term, 2 is diagonal and 3 is superdiagonal one 428 429 !!ice interior terms (top equation has the same form as the others) 430 ztrid (1:npti,:,:) = 0._wp 431 zindterm(1:npti,:) = 0._wp 432 zindtbis(1:npti,:) = 0._wp 433 zdiagbis(1:npti,:) = 0._wp 434 435 DO jm = nlay_s + 2, nlay_s + nlay_i 362 436 DO ji = 1, npti 363 437 jk = jm - nlay_s - 1 … … 367 441 zindterm(ji,jm) = ztiold(ji,jk) + zeta_i(ji,jk) * zradab_i(ji,jk) 368 442 END DO 369 ENDDO370 371 jm = nlay_s + nlay_i + 1372 DO ji = 1, npti443 ENDDO 444 445 jm = nlay_s + nlay_i + 1 446 DO ji = 1, npti 373 447 !!ice bottom term 374 448 ztrid(ji,jm,1) = - zeta_i(ji,nlay_i)*zkappa_i(ji,nlay_i-1) … … 377 451 zindterm(ji,jm) = ztiold(ji,nlay_i) + zeta_i(ji,nlay_i) * & 378 452 & ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i) * zg1 * t_bo_1d(ji) ) 379 ENDDO380 381 382 DO ji = 1, npti453 ENDDO 454 455 456 DO ji = 1, npti 383 457 ! !---------------------! 384 IF ( h_s_1d(ji) > 0.0 ) THEN ! snow-covered cells !458 IF ( h_s_1d(ji) > 0.0 ) THEN ! snow-covered cells ! 385 459 ! !---------------------! 386 460 ! snow interior terms (bottom equation has the same form as the others) 387 461 DO jm = 3, nlay_s + 1 388 389 390 391 392 462 jk = jm - 1 463 ztrid(ji,jm,1) = - zeta_s(ji,jk) * zkappa_s(ji,jk-1) 464 ztrid(ji,jm,2) = 1.0 + zeta_s(ji,jk) * ( zkappa_s(ji,jk-1) + zkappa_s(ji,jk) ) 465 ztrid(ji,jm,3) = - zeta_s(ji,jk)*zkappa_s(ji,jk) 466 zindterm(ji,jm) = ztsold(ji,jk) + zeta_s(ji,jk) * zradab_s(ji,jk) 393 467 END DO 394 468 395 469 ! case of only one layer in the ice (ice equation is altered) 396 470 IF ( nlay_i == 1 ) THEN 397 398 471 ztrid(ji,nlay_s+2,3) = 0.0 472 zindterm(ji,nlay_s+2) = zindterm(ji,nlay_s+2) + zkappa_i(ji,1) * t_bo_1d(ji) 399 473 ENDIF 400 474 401 475 IF ( t_su_1d(ji) < rt0 ) THEN !-- case 1 : no surface melting 402 476 403 404 405 406 407 408 409 410 411 412 413 414 415 416 477 jm_min(ji) = 1 478 jm_max(ji) = nlay_i + nlay_s + 1 479 480 ! surface equation 481 ztrid(ji,1,1) = 0.0 482 ztrid(ji,1,2) = zdqns_ice_b(ji) - zg1s * zkappa_s(ji,0) 483 ztrid(ji,1,3) = zg1s * zkappa_s(ji,0) 484 zindterm(ji,1) = zdqns_ice_b(ji) * t_su_1d(ji) - zfnet(ji) 485 486 ! first layer of snow equation 487 ztrid(ji,2,1) = - zkappa_s(ji,0) * zg1s * zeta_s(ji,1) 488 ztrid(ji,2,2) = 1.0 + zeta_s(ji,1) * ( zkappa_s(ji,1) + zkappa_s(ji,0) * zg1s ) 489 ztrid(ji,2,3) = - zeta_s(ji,1)* zkappa_s(ji,1) 490 zindterm(ji,2) = ztsold(ji,1) + zeta_s(ji,1) * zradab_s(ji,1) 417 491 418 492 ELSE !-- case 2 : surface is melting 419 420 421 422 423 424 425 426 427 428 493 ! 494 jm_min(ji) = 2 495 jm_max(ji) = nlay_i + nlay_s + 1 496 497 ! first layer of snow equation 498 ztrid(ji,2,1) = 0.0 499 ztrid(ji,2,2) = 1.0 + zeta_s(ji,1) * ( zkappa_s(ji,1) + zkappa_s(ji,0) * zg1s ) 500 ztrid(ji,2,3) = - zeta_s(ji,1)*zkappa_s(ji,1) 501 zindterm(ji,2) = ztsold(ji,1) + zeta_s(ji,1) * & 502 & ( zradab_s(ji,1) + zkappa_s(ji,0) * zg1s * t_su_1d(ji) ) 429 503 ENDIF 430 504 ! !---------------------! … … 433 507 ! 434 508 IF ( t_su_1d(ji) < rt0 ) THEN !-- case 1 : no surface melting 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 509 ! 510 jm_min(ji) = nlay_s + 1 511 jm_max(ji) = nlay_i + nlay_s + 1 512 513 ! surface equation 514 ztrid(ji,jm_min(ji),1) = 0.0 515 ztrid(ji,jm_min(ji),2) = zdqns_ice_b(ji) - zkappa_i(ji,0)*zg1 516 ztrid(ji,jm_min(ji),3) = zkappa_i(ji,0)*zg1 517 zindterm(ji,jm_min(ji)) = zdqns_ice_b(ji)*t_su_1d(ji) - zfnet(ji) 518 519 ! first layer of ice equation 520 ztrid(ji,jm_min(ji)+1,1) = - zkappa_i(ji,0) * zg1 * zeta_i(ji,1) 521 ztrid(ji,jm_min(ji)+1,2) = 1.0 + zeta_i(ji,1) * ( zkappa_i(ji,1) + zkappa_i(ji,0) * zg1 ) 522 ztrid(ji,jm_min(ji)+1,3) = - zeta_i(ji,1) * zkappa_i(ji,1) 523 zindterm(ji,jm_min(ji)+1) = ztiold(ji,1) + zeta_i(ji,1) * zradab_i(ji,1) 524 525 ! case of only one layer in the ice (surface & ice equations are altered) 526 IF ( nlay_i == 1 ) THEN 527 ztrid(ji,jm_min(ji),1) = 0.0 528 ztrid(ji,jm_min(ji),2) = zdqns_ice_b(ji) - zkappa_i(ji,0) * 2.0 529 ztrid(ji,jm_min(ji),3) = zkappa_i(ji,0) * 2.0 530 ztrid(ji,jm_min(ji)+1,1) = -zkappa_i(ji,0) * 2.0 * zeta_i(ji,1) 531 ztrid(ji,jm_min(ji)+1,2) = 1.0 + zeta_i(ji,1) * ( zkappa_i(ji,0) * 2.0 + zkappa_i(ji,1) ) 532 ztrid(ji,jm_min(ji)+1,3) = 0.0 533 zindterm(ji,jm_min(ji)+1) = ztiold(ji,1) + zeta_i(ji,1) * & 534 & ( zradab_i(ji,1) + zkappa_i(ji,1) * t_bo_1d(ji) ) 535 ENDIF 462 536 463 537 ELSE !-- case 2 : surface is melting 464 538 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 539 jm_min(ji) = nlay_s + 2 540 jm_max(ji) = nlay_i + nlay_s + 1 541 542 ! first layer of ice equation 543 ztrid(ji,jm_min(ji),1) = 0.0 544 ztrid(ji,jm_min(ji),2) = 1.0 + zeta_i(ji,1) * ( zkappa_i(ji,1) + zkappa_i(ji,0) * zg1 ) 545 ztrid(ji,jm_min(ji),3) = - zeta_i(ji,1) * zkappa_i(ji,1) 546 zindterm(ji,jm_min(ji)) = ztiold(ji,1) + zeta_i(ji,1) * & 547 & ( zradab_i(ji,1) + zkappa_i(ji,0) * zg1 * t_su_1d(ji) ) 548 549 ! case of only one layer in the ice (surface & ice equations are altered) 550 IF ( nlay_i == 1 ) THEN 551 ztrid(ji,jm_min(ji),1) = 0.0 552 ztrid(ji,jm_min(ji),2) = 1.0 + zeta_i(ji,1) * ( zkappa_i(ji,0) * 2.0 + zkappa_i(ji,1) ) 553 ztrid(ji,jm_min(ji),3) = 0.0 554 zindterm(ji,jm_min(ji)) = ztiold(ji,1) + zeta_i(ji,1) * ( zradab_i(ji,1) + zkappa_i(ji,1) * t_bo_1d(ji) ) & 555 & + t_su_1d(ji) * zeta_i(ji,1) * zkappa_i(ji,0) * 2.0 556 ENDIF 483 557 484 558 ENDIF … … 488 562 zdiagbis(ji,jm_min(ji)) = ztrid(ji,jm_min(ji),2) 489 563 ! 490 END DO491 !492 !------------------------------493 ! 8) tridiagonal system solving494 !------------------------------495 ! Solve the tridiagonal system with Gauss elimination method.496 ! Thomas algorithm, from Computational fluid Dynamics, J.D. ANDERSON, McGraw-Hill 1984497 jm_maxt = 0498 jm_mint = nlay_i+5499 DO ji = 1, npti564 END DO 565 ! 566 !------------------------------ 567 ! 8) tridiagonal system solving 568 !------------------------------ 569 ! Solve the tridiagonal system with Gauss elimination method. 570 ! Thomas algorithm, from Computational fluid Dynamics, J.D. ANDERSON, McGraw-Hill 1984 571 jm_maxt = 0 572 jm_mint = nlay_i+5 573 DO ji = 1, npti 500 574 jm_mint = MIN(jm_min(ji),jm_mint) 501 575 jm_maxt = MAX(jm_max(ji),jm_maxt) 502 END DO503 504 DO jk = jm_mint+1, jm_maxt576 END DO 577 578 DO jk = jm_mint+1, jm_maxt 505 579 DO ji = 1, npti 506 580 jm = min(max(jm_min(ji)+1,jk),jm_max(ji)) … … 508 582 zindtbis(ji,jm) = zindterm(ji,jm) - ztrid(ji,jm,1) * zindtbis(ji,jm-1) / zdiagbis(ji,jm-1) 509 583 END DO 510 END DO511 512 DO ji = 1, npti584 END DO 585 586 DO ji = 1, npti 513 587 ! ice temperatures 514 588 t_i_1d(ji,nlay_i) = zindtbis(ji,jm_max(ji)) / zdiagbis(ji,jm_max(ji)) 515 END DO516 517 DO jm = nlay_i + nlay_s, nlay_s + 2, -1589 END DO 590 591 DO jm = nlay_i + nlay_s, nlay_s + 2, -1 518 592 DO ji = 1, npti 519 593 jk = jm - nlay_s - 1 520 594 t_i_1d(ji,jk) = ( zindtbis(ji,jm) - ztrid(ji,jm,3) * t_i_1d(ji,jk+1) ) / zdiagbis(ji,jm) 521 595 END DO 522 END DO523 524 DO ji = 1, npti596 END DO 597 598 DO ji = 1, npti 525 599 ! snow temperatures 526 600 IF( h_s_1d(ji) > 0._wp ) THEN 527 601 t_s_1d(ji,nlay_s) = ( zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) * t_i_1d(ji,1) ) & 528 602 & / zdiagbis(ji,nlay_s+1) 529 603 ENDIF 530 604 ! surface temperature … … 532 606 IF( t_su_1d(ji) < rt0 ) THEN 533 607 t_su_1d(ji) = ( zindtbis(ji,jm_min(ji)) - ztrid(ji,jm_min(ji),3) * & 534 535 ENDIF 536 END DO537 !538 !--------------------------------------------------------------539 ! 9) Has the scheme converged ?, end of the iterative procedure540 !--------------------------------------------------------------541 ! check that nowhere it has started to melt542 ! zdti_max is a measure of error, it has to be under zdti_bnd543 zdti_max = 0._wp544 DO ji = 1, npti608 & ( isnow(ji) * t_s_1d(ji,1) + ( 1._wp - isnow(ji) ) * t_i_1d(ji,1) ) ) / zdiagbis(ji,jm_min(ji)) 609 ENDIF 610 END DO 611 ! 612 !-------------------------------------------------------------- 613 ! 9) Has the scheme converged ?, end of the iterative procedure 614 !-------------------------------------------------------------- 615 ! check that nowhere it has started to melt 616 ! zdti_max is a measure of error, it has to be under zdti_bnd 617 zdti_max = 0._wp 618 DO ji = 1, npti 545 619 t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , rt0 ) , rt0 - 100._wp ) 546 620 zdti_max = MAX( zdti_max, ABS( t_su_1d(ji) - ztsub(ji) ) ) 547 END DO548 549 DO jk = 1, nlay_s621 END DO 622 623 DO jk = 1, nlay_s 550 624 DO ji = 1, npti 551 625 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rt0 ), rt0 - 100._wp ) 552 626 zdti_max = MAX( zdti_max, ABS( t_s_1d(ji,jk) - ztsb(ji,jk) ) ) 553 627 END DO 554 END DO555 556 DO jk = 1, nlay_i628 END DO 629 630 DO jk = 1, nlay_i 557 631 DO ji = 1, npti 558 632 ztmelt_i = -tmut * sz_i_1d(ji,jk) + rt0 … … 560 634 zdti_max = MAX( zdti_max, ABS( t_i_1d(ji,jk) - ztib(ji,jk) ) ) 561 635 END DO 562 END DO 563 564 ! Compute spatial maximum over all errors 565 ! note that this could be optimized substantially by iterating only the non-converging points 566 IF( lk_mpp ) CALL mpp_max( zdti_max, kcom=ncomm_ice ) 567 636 END DO 637 638 ! Compute spatial maximum over all errors 639 ! note that this could be optimized substantially by iterating only the non-converging points 640 IF( lk_mpp ) CALL mpp_max( zdti_max, kcom=ncomm_ice ) 641 ! 642 !----------------------------------------! 643 ! ! 644 ! JULES IF (RCV MODE) ! 645 ! ! 646 !----------------------------------------! 647 ! 648 649 ELSE IF ( k_jules == np_zdf_jules_RCV ) THEN ! RCV mode 650 651 ! 652 ! In RCV mode, we use a modified BL99 solver 653 ! with conduction flux (qcn_ice) as forcing term 654 ! 655 !---------------------------- 656 ! 7) tridiagonal system terms 657 !---------------------------- 658 !!layer denotes the number of the layer in the snow or in the ice 659 !!jm denotes the reference number of the equation in the tridiagonal 660 !!system, terms of tridiagonal system are indexed as following : 661 !!1 is subdiagonal term, 2 is diagonal and 3 is superdiagonal one 662 663 !!ice interior terms (top equation has the same form as the others) 664 ztrid (1:npti,:,:) = 0._wp 665 zindterm(1:npti,:) = 0._wp 666 zindtbis(1:npti,:) = 0._wp 667 zdiagbis(1:npti,:) = 0._wp 668 669 DO jm = nlay_s + 2, nlay_s + nlay_i 670 DO ji = 1, npti 671 jk = jm - nlay_s - 1 672 ztrid(ji,jm,1) = - zeta_i(ji,jk) * zkappa_i(ji,jk-1) 673 ztrid(ji,jm,2) = 1.0 + zeta_i(ji,jk) * ( zkappa_i(ji,jk-1) + zkappa_i(ji,jk) ) 674 ztrid(ji,jm,3) = - zeta_i(ji,jk) * zkappa_i(ji,jk) 675 zindterm(ji,jm) = ztiold(ji,jk) + zeta_i(ji,jk) * zradab_i(ji,jk) 676 END DO 677 ENDDO 678 679 jm = nlay_s + nlay_i + 1 680 DO ji = 1, npti 681 !!ice bottom term 682 ztrid(ji,jm,1) = - zeta_i(ji,nlay_i)*zkappa_i(ji,nlay_i-1) 683 ztrid(ji,jm,2) = 1.0 + zeta_i(ji,nlay_i) * ( zkappa_i(ji,nlay_i) * zg1 + zkappa_i(ji,nlay_i-1) ) 684 ztrid(ji,jm,3) = 0.0 685 zindterm(ji,jm) = ztiold(ji,nlay_i) + zeta_i(ji,nlay_i) * & 686 & ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i) * zg1 * t_bo_1d(ji) ) 687 ENDDO 688 689 690 DO ji = 1, npti 691 ! !---------------------! 692 IF ( h_s_1d(ji) > 0.0 ) THEN ! snow-covered cells ! 693 ! !---------------------! 694 ! snow interior terms (bottom equation has the same form as the others) 695 DO jm = 3, nlay_s + 1 696 jk = jm - 1 697 ztrid(ji,jm,1) = - zeta_s(ji,jk) * zkappa_s(ji,jk-1) 698 ztrid(ji,jm,2) = 1.0 + zeta_s(ji,jk) * ( zkappa_s(ji,jk-1) + zkappa_s(ji,jk) ) 699 ztrid(ji,jm,3) = - zeta_s(ji,jk)*zkappa_s(ji,jk) 700 zindterm(ji,jm) = ztsold(ji,jk) + zeta_s(ji,jk) * zradab_s(ji,jk) 701 END DO 702 703 ! case of only one layer in the ice (ice equation is altered) 704 IF ( nlay_i == 1 ) THEN 705 ztrid(ji,nlay_s+2,3) = 0.0 706 zindterm(ji,nlay_s+2) = zindterm(ji,nlay_s+2) + zkappa_i(ji,1) * t_bo_1d(ji) 707 ENDIF 708 709 jm_min(ji) = 2 710 jm_max(ji) = nlay_i + nlay_s + 1 711 712 ! first layer of snow equation 713 ztrid(ji,2,1) = 0.0 714 ztrid(ji,2,2) = 1.0 + zeta_s(ji,1) * zkappa_s(ji,1) 715 ztrid(ji,2,3) = - zeta_s(ji,1)*zkappa_s(ji,1) 716 zindterm(ji,2) = ztsold(ji,1) + zeta_s(ji,1) * & 717 & ( zradab_s(ji,1) + qcn_ice_1d(ji) ) 718 719 ! !---------------------! 720 ELSE ! cells without snow ! 721 ! !---------------------! 722 723 jm_min(ji) = nlay_s + 2 724 jm_max(ji) = nlay_i + nlay_s + 1 725 726 ! first layer of ice equation 727 ztrid(ji,jm_min(ji),1) = 0.0 728 ztrid(ji,jm_min(ji),2) = 1.0 + zeta_i(ji,1) * zkappa_i(ji,1) 729 ztrid(ji,jm_min(ji),3) = - zeta_i(ji,1) * zkappa_i(ji,1) 730 zindterm(ji,jm_min(ji)) = ztiold(ji,1) + zeta_i(ji,1) * & 731 & ( zradab_i(ji,1) + qcn_ice_1d(ji) ) 732 733 ! case of only one layer in the ice (surface & ice equations are altered) 734 IF ( nlay_i == 1 ) THEN 735 ztrid(ji,jm_min(ji),1) = 0.0 736 ztrid(ji,jm_min(ji),2) = 1.0 + zeta_i(ji,1) * zkappa_i(ji,1) 737 ztrid(ji,jm_min(ji),3) = 0.0 738 zindterm(ji,jm_min(ji)) = ztiold(ji,1) + zeta_i(ji,1) * ( zradab_i(ji,1) + zkappa_i(ji,1) * t_bo_1d(ji) & 739 & + qcn_ice_1d(ji) ) 740 741 ENDIF 742 743 ENDIF 744 ! 745 zindtbis(ji,jm_min(ji)) = zindterm(ji,jm_min(ji)) 746 zdiagbis(ji,jm_min(ji)) = ztrid(ji,jm_min(ji),2) 747 ! 748 END DO 749 ! 750 !------------------------------ 751 ! 8) tridiagonal system solving 752 !------------------------------ 753 ! Solve the tridiagonal system with Gauss elimination method. 754 ! Thomas algorithm, from Computational fluid Dynamics, J.D. ANDERSON, McGraw-Hill 1984 755 jm_maxt = 0 756 jm_mint = nlay_i+5 757 DO ji = 1, npti 758 jm_mint = MIN(jm_min(ji),jm_mint) 759 jm_maxt = MAX(jm_max(ji),jm_maxt) 760 END DO 761 762 DO jk = jm_mint+1, jm_maxt 763 DO ji = 1, npti 764 jm = min(max(jm_min(ji)+1,jk),jm_max(ji)) 765 zdiagbis(ji,jm) = ztrid(ji,jm,2) - ztrid(ji,jm,1) * ztrid(ji,jm-1,3) / zdiagbis(ji,jm-1) 766 zindtbis(ji,jm) = zindterm(ji,jm) - ztrid(ji,jm,1) * zindtbis(ji,jm-1) / zdiagbis(ji,jm-1) 767 END DO 768 END DO 769 770 DO ji = 1, npti 771 ! ice temperatures 772 t_i_1d(ji,nlay_i) = zindtbis(ji,jm_max(ji)) / zdiagbis(ji,jm_max(ji)) 773 END DO 774 775 DO jm = nlay_i + nlay_s, nlay_s + 2, -1 776 DO ji = 1, npti 777 jk = jm - nlay_s - 1 778 t_i_1d(ji,jk) = ( zindtbis(ji,jm) - ztrid(ji,jm,3) * t_i_1d(ji,jk+1) ) / zdiagbis(ji,jm) 779 END DO 780 END DO 781 782 DO ji = 1, npti 783 ! snow temperatures 784 IF( h_s_1d(ji) > 0._wp ) THEN 785 t_s_1d(ji,nlay_s) = ( zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) * t_i_1d(ji,1) ) & 786 & / zdiagbis(ji,nlay_s+1) 787 ENDIF 788 END DO 789 ! 790 !-------------------------------------------------------------- 791 ! 9) Has the scheme converged ?, end of the iterative procedure 792 !-------------------------------------------------------------- 793 ! check that nowhere it has started to melt 794 ! zdti_max is a measure of error, it has to be under zdti_bnd 795 zdti_max = 0._wp 796 797 DO jk = 1, nlay_s 798 DO ji = 1, npti 799 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rt0 ), rt0 - 100._wp ) 800 zdti_max = MAX( zdti_max, ABS( t_s_1d(ji,jk) - ztsb(ji,jk) ) ) 801 END DO 802 END DO 803 804 DO jk = 1, nlay_i 805 DO ji = 1, npti 806 ztmelt_i = -tmut * sz_i_1d(ji,jk) + rt0 807 t_i_1d(ji,jk) = MAX( MIN( t_i_1d(ji,jk), ztmelt_i ), rt0 - 100._wp ) 808 zdti_max = MAX( zdti_max, ABS( t_i_1d(ji,jk) - ztib(ji,jk) ) ) 809 END DO 810 END DO 811 812 ! Compute spatial maximum over all errors 813 ! note that this could be optimized substantially by iterating only the non-converging points 814 IF( lk_mpp ) CALL mpp_max( zdti_max, kcom=ncomm_ice ) 815 816 ENDIF ! k_jules 817 568 818 END DO ! End of the do while iterative procedure 569 819 570 820 IF( ln_icectl .AND. lwp ) THEN 571 821 WRITE(numout,*) ' zdti_max : ', zdti_max 572 822 WRITE(numout,*) ' iconv : ', iconv 573 823 ENDIF 824 574 825 ! 575 826 !----------------------------- 576 827 ! 10) Fluxes at the interfaces 577 828 !----------------------------- 829 ! 830 ! --- update conduction fluxes 831 ! 578 832 DO ji = 1, npti 579 833 ! ! surface ice conduction flux 580 834 fc_su(ji) = - isnow(ji) * zkappa_s(ji,0) * zg1s * (t_s_1d(ji,1) - t_su_1d(ji)) & 581 835 & - ( 1._wp - isnow(ji) ) * zkappa_i(ji,0) * zg1 * (t_i_1d(ji,1) - t_su_1d(ji)) 582 836 ! ! bottom ice conduction flux 583 837 fc_bo_i(ji) = - zkappa_i(ji,nlay_i) * ( zg1*(t_bo_1d(ji) - t_i_1d(ji,nlay_i)) ) 584 838 END DO 585 586 ! --- computes sea ice energy of melting compulsory for icethd_dh --- ! 587 CALL ice_thd_enmelt 588 589 ! --- diagnose the change in non-solar flux due to surface temperature change --- ! 590 IF ( ln_dqns_i ) THEN 839 840 ! 841 ! --- Diagnose the heat loss due to changing non-solar / conduction flux --- ! 842 ! 843 DO ji = 1, npti 844 IF ( k_jules == np_zdf_jules_OFF .OR. k_jules == np_zdf_jules_SND ) THEN 845 ! OFF or SND mode 846 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji) - zqns_ice_b(ji) ) * a_i_1d(ji) 847 ELSE ! RCV mode 848 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( fc_su(ji) - qcn_ice_1d(ji) ) * a_i_1d(ji) 849 ENDIF 850 END DO 851 852 ! 853 ! --- Diagnose the heat loss due to non-fully converged temperature solution (should not be above 10-4 W-m2) --- ! 854 ! 855 856 IF ( ( k_jules == np_zdf_jules_OFF ) .OR. ( k_jules == np_zdf_jules_RCV ) ) THEN ! OFF 857 858 CALL ice_thd_enmelt 859 860 ! zhfx_err = correction on the diagnosed heat flux due to non-convergence of the algorithm used to solve heat equation 591 861 DO ji = 1, npti 592 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji) - zqns_ice_b(ji) ) * a_i_1d(ji) 862 zdq = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * h_i_1d(ji) * r1_nlay_i + & 863 & SUM( e_s_1d(ji,1:nlay_s) ) * h_s_1d(ji) * r1_nlay_s ) 864 865 IF ( ( k_jules == np_zdf_jules_OFF ) ) THEN 866 867 IF( t_su_1d(ji) < rt0 ) THEN ! case T_su < 0degC 868 zhfx_err = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq * r1_rdtice ) * a_i_1d(ji) 869 ELSE ! case T_su = 0degC 870 zhfx_err = ( fc_su(ji) + qsr_ice_tr_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq * r1_rdtice ) * a_i_1d(ji) 871 ENDIF 872 873 ELSE ! RCV CASE 874 875 zhfx_err = ( fc_su(ji) + qsr_ice_tr_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq * r1_rdtice ) * a_i_1d(ji) 876 877 ENDIF 878 879 ! total heat sink to be sent to the ocean 880 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) + zhfx_err 881 882 ! hfx_dif = Heat flux diagnostic of sensible heat used to warm/cool ice in W.m-2 883 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_rdtice * a_i_1d(ji) 884 885 END DO 886 887 ! 888 ! --- SIMIP diagnostics 889 ! 890 891 DO ji = 1, npti 892 !--- Conduction fluxes (positive downwards) 893 diag_fc_bo_1d(ji) = diag_fc_bo_1d(ji) + fc_bo_i(ji) * a_i_1d(ji) / at_i_1d(ji) 894 diag_fc_su_1d(ji) = diag_fc_su_1d(ji) + fc_su(ji) * a_i_1d(ji) / at_i_1d(ji) 895 896 !--- Snow-ice interfacial temperature (diagnostic SIMIP) 897 zfac = rn_cnd_s * zh_i(ji) + ztcond_i(ji,1) * zh_s(ji) 898 IF( zh_s(ji) >= 1.e-3 .AND. zfac > epsi10 ) THEN 899 t_si_1d(ji) = ( rn_cnd_s * zh_i(ji) * t_s_1d(ji,1) + & 900 & ztcond_i(ji,1) * zh_s(ji) * t_i_1d(ji,1) ) / zfac 901 ELSE 902 t_si_1d(ji) = t_su_1d(ji) 903 ENDIF 593 904 END DO 594 END IF 595 596 ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 597 ! hfx_dif = Heat flux used to warm/cool ice in W.m-2 598 ! zhfx_err = correction on the diagnosed heat flux due to non-convergence of the algorithm used to solve heat equation 599 DO ji = 1, npti 600 zdq = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * h_i_1d(ji) * r1_nlay_i + & 601 & SUM( e_s_1d(ji,1:nlay_s) ) * h_s_1d(ji) * r1_nlay_s ) 602 603 IF( t_su_1d(ji) < rt0 ) THEN ! case T_su < 0degC 604 zhfx_err = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq * r1_rdtice ) * a_i_1d(ji) 605 ELSE ! case T_su = 0degC 606 zhfx_err = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq * r1_rdtice ) * a_i_1d(ji) 607 ENDIF 608 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_rdtice * a_i_1d(ji) 609 610 ! total heat that is sent to the ocean (i.e. not used in the heat diffusion equation) 611 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) + zhfx_err 612 613 END DO 614 615 ! --- Diagnostics SIMIP --- ! 616 DO ji = 1, npti 617 !--- Conduction fluxes (positive downwards) 618 diag_fc_bo_1d(ji) = diag_fc_bo_1d(ji) + fc_bo_i(ji) * a_i_1d(ji) / at_i_1d(ji) 619 diag_fc_su_1d(ji) = diag_fc_su_1d(ji) + fc_su(ji) * a_i_1d(ji) / at_i_1d(ji) 620 621 !--- Snow-ice interfacial temperature (diagnostic SIMIP) 622 zfac = rn_cnd_s * zh_i(ji) + ztcond_i(ji,1) * zh_s(ji) 623 IF( zh_s(ji) >= 1.e-3 .AND. zfac > epsi10 ) THEN 624 t_si_1d(ji) = ( rn_cnd_s * zh_i(ji) * t_s_1d(ji,1) + & 625 & ztcond_i(ji,1) * zh_s(ji) * t_i_1d(ji,1) ) / zfac 626 ELSE 627 t_si_1d(ji) = t_su_1d(ji) 628 ENDIF 629 END DO 630 ! 631 END SUBROUTINE ice_thd_zdf 905 906 ENDIF 907 ! 908 !--------------------------------------------------------------------------------------- 909 ! 11) Jules coupling: reset inner snow and ice temperatures, update conduction fluxes 910 !--------------------------------------------------------------------------------------- 911 ! 912 IF ( k_jules == np_zdf_jules_SND ) THEN ! --- Jules coupling in "SND" mode 913 914 ! Restore temperatures to their initial values 915 t_s_1d(1:npti,:) = ztsold (1:npti,:) 916 t_i_1d(1:npti,:) = ztiold (1:npti,:) 917 qcn_ice_1d(1:npti) = fc_su(1:npti) 918 919 ENDIF 920 921 END SUBROUTINE ice_thd_zdf_BL99 922 632 923 633 924 … … 663 954 664 955 956 665 957 SUBROUTINE ice_thd_zdf_init 666 958 !!----------------------------------------------------------------------- … … 675 967 !! ** input : Namelist namthd_zdf 676 968 !!------------------------------------------------------------------- 677 INTEGER :: ios ! Local integer output status for namelist read969 INTEGER :: ios, ioptio ! Local integer output status for namelist read 678 970 !! 679 NAMELIST/namthd_zdf/ ln_zdf_BL99, ln_cndi_U64, ln_cndi_P07, rn_cnd_s, rn_kappa_i , ln_dqns_i971 NAMELIST/namthd_zdf/ ln_zdf_BL99, ln_cndi_U64, ln_cndi_P07, rn_cnd_s, rn_kappa_i 680 972 !!------------------------------------------------------------------- 681 973 ! … … 694 986 WRITE(numout,*) '~~~~~~~~~~~~~~~~' 695 987 WRITE(numout,*) ' Namelist namthd_zdf:' 696 WRITE(numout,*) ' Diffusion follows a Bitz and Lipscomb (1999)ln_zdf_BL99 = ', ln_zdf_BL99988 WRITE(numout,*) ' Bitz and Lipscomb (1999) formulation ln_zdf_BL99 = ', ln_zdf_BL99 697 989 WRITE(numout,*) ' thermal conductivity in the ice (Untersteiner 1964) ln_cndi_U64 = ', ln_cndi_U64 698 990 WRITE(numout,*) ' thermal conductivity in the ice (Pringle et al 2007) ln_cndi_P07 = ', ln_cndi_P07 699 991 WRITE(numout,*) ' thermal conductivity in the snow rn_cnd_s = ', rn_cnd_s 700 992 WRITE(numout,*) ' extinction radiation parameter in sea ice rn_kappa_i = ', rn_kappa_i 701 WRITE(numout,*) ' change the surface non-solar flux with Tsu or not ln_dqns_i = ', ln_dqns_i702 993 ENDIF 994 703 995 ! 704 996 IF ( ( ln_cndi_U64 .AND. ln_cndi_P07 ) .OR. ( .NOT.ln_cndi_U64 .AND. .NOT.ln_cndi_P07 ) ) THEN 705 997 CALL ctl_stop( 'ice_thd_zdf_init: choose one and only one formulation for thermal conduction (ln_cndi_U64 or ln_cndi_P07)' ) 706 998 ENDIF 999 1000 ! !== set the choice of ice vertical thermodynamic formulation ==! 1001 ioptio = 0 1002 ! !--- BL99 thermo dynamics (linear liquidus + constant thermal properties) 1003 IF( ln_zdf_BL99 ) THEN ; ioptio = ioptio + 1 ; nice_zdf = np_BL99 ; ENDIF 1004 IF( ioptio /= 1 ) CALL ctl_stop( 'ice_thd_init: one and only one ice thermo option has to be defined ' ) 707 1005 ! 708 1006 END SUBROUTINE ice_thd_zdf_init … … 711 1009 !!---------------------------------------------------------------------- 712 1010 !! Default option Dummy Module No ESIM sea-ice model 713 !!--------------------------------------------------------------------- -1011 !!--------------------------------------------------------------------- 714 1012 #endif 715 1013 -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/iceupdate.F90
r8738 r8752 164 164 ! mass flux from ice/ocean 165 165 wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) & 166 & + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) + wfx_lam(ji,jj) 167 168 IF ( ln_pnd_fw ) wfx_ice(ji,jj) = wfx_ice(ji,jj) + wfx_pnd(ji,jj) 166 & + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) + wfx_lam(ji,jj) + wfx_pnd(ji,jj) 169 167 170 168 ! add the snow melt water to snow mass flux to the ocean … … 199 197 ! Snow/ice albedo (only if sent to coupler, useless in forced mode) 200 198 !------------------------------------------------------------------ 201 CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos199 CALL ice_alb( t_su, h_i, h_s, ln_pnd_alb, a_ip_frac, h_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 202 200 ! 203 201 alb_ice(:,:,:) = ( 1._wp - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) … … 246 244 CALL iom_put( "vfxlam" , wfx_lam ) ! lateral melt 247 245 CALL iom_put( "vfxice" , wfx_ice ) ! total ice growth/melt 248 IF ( ln_pnd ) CALL iom_put( "vfxpnd", wfx_pnd ) ! melt pond water flux246 IF ( ln_pnd_fwb ) CALL iom_put( "vfxpnd", wfx_pnd ) ! melt pond water flux 249 247 250 248 IF ( iom_use( "vfxthin" ) ) THEN ! ice production for open water + thin ice (<20cm) => comparable to observations -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icevar.F90
r8738 r8752 97 97 et_i(:,:) = SUM( SUM( e_i(:,:,:,:), dim=4 ), dim=3 ) 98 98 99 ! MV MP 2016 100 IF ( ln_pnd ) THEN ! Melt pond 101 at_ip(:,:) = SUM( a_ip(:,:,:), dim=3 ) 102 vt_ip(:,:) = SUM( v_ip(:,:,:), dim=3 ) 103 ENDIF 104 ! END MP 2016 99 at_ip(:,:) = SUM( a_ip(:,:,:), dim=3 ) ! melt ponds 100 vt_ip(:,:) = SUM( v_ip(:,:,:), dim=3 ) 105 101 106 102 ato_i(:,:) = 1._wp - at_i(:,:) ! open water fraction … … 167 163 !! a criteria for icy area (i.e. a_i > epsi20 and v_i > epsi20 ) 168 164 169 !------------------------------------------------------- 170 ! Ice thickness, snow thickness, ice salinity, ice age 171 !------------------------------------------------------- 165 !--------------------------------------------------------------- 166 ! Ice thickness, snow thickness, ice salinity, ice age and ponds 167 !--------------------------------------------------------------- 172 168 ! !--- inverse of the ice area 173 169 WHERE( a_i(:,:,:) > epsi20 ) ; z1_a_i(:,:,:) = 1._wp / a_i(:,:,:) … … 178 174 ELSEWHERE ; z1_v_i(:,:,:) = 0._wp 179 175 END WHERE 180 ! 181 h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:) !--- ice thickness176 ! !--- ice thickness 177 h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:) 182 178 183 179 zhmax = hi_max(jpl) 184 180 z1_zhmax = 1._wp / hi_max(jpl) 185 WHERE( h_i(:,:,jpl) > zhmax ) !---bound h_i by hi_max (i.e. 99 m) with associated update of ice area181 WHERE( h_i(:,:,jpl) > zhmax ) ! bound h_i by hi_max (i.e. 99 m) with associated update of ice area 186 182 h_i (:,:,jpl) = zhmax 187 183 a_i (:,:,jpl) = v_i(:,:,jpl) * z1_zhmax 188 z1_a_i(:,:,jpl) = zhmax * z1_v_i(:,:,jpl) ! NB: v_i always /=0 as h_i > hi_max184 z1_a_i(:,:,jpl) = zhmax * z1_v_i(:,:,jpl) 189 185 END WHERE 190 191 h_s(:,:,:) = v_s (:,:,:) * z1_a_i(:,:,:) !--- snow thickness 192 193 o_i(:,:,:) = oa_i(:,:,:) * z1_a_i(:,:,:) !--- ice age 194 195 IF( nn_icesal == 2 ) THEN !--- salinity (with a minimum value imposed everywhere) 186 ! !--- snow thickness 187 h_s(:,:,:) = v_s (:,:,:) * z1_a_i(:,:,:) 188 ! !--- ice age 189 o_i(:,:,:) = oa_i(:,:,:) * z1_a_i(:,:,:) 190 ! !--- pond fraction and thickness 191 a_ip_frac(:,:,:) = a_ip(:,:,:) * z1_a_i(:,:,:) 192 WHERE( a_ip_frac(:,:,:) > epsi20 ) ; h_ip(:,:,:) = v_ip(:,:,:) * z1_a_i(:,:,:) / a_ip_frac(:,:,:) 193 ELSEWHERE ; h_ip(:,:,:) = 0._wp 194 END WHERE 195 ! 196 ! !--- salinity (with a minimum value imposed everywhere) 197 IF( nn_icesal == 2 ) THEN 196 198 WHERE( v_i(:,:,:) > epsi20 ) ; s_i(:,:,:) = MAX( rn_simin , MIN( rn_simax, sv_i(:,:,:) * z1_v_i(:,:,:) ) ) 197 199 ELSEWHERE ; s_i(:,:,:) = rn_simin 198 200 END WHERE 199 201 ENDIF 200 201 CALL ice_var_salprof ! salinity profile 202 CALL ice_var_salprof ! salinity profile 202 203 203 204 !------------------- … … 242 243 vt_s (:,:) = SUM( v_s, dim=3 ) 243 244 at_i (:,:) = SUM( a_i, dim=3 ) 244 245 ! MV MP 2016246 ! probably should resum for melt ponds ???247 248 245 ! 249 246 END SUBROUTINE ice_var_glo2eqv … … 258 255 !!------------------------------------------------------------------- 259 256 ! 260 v_i (:,:,:) = h_i(:,:,:) * a_i(:,:,:) 261 v_s (:,:,:) = h_s(:,:,:) * a_i(:,:,:) 262 sv_i(:,:,:) = s_i(:,:,:) * v_i(:,:,:) 257 v_i (:,:,:) = h_i (:,:,:) * a_i (:,:,:) 258 v_s (:,:,:) = h_s (:,:,:) * a_i (:,:,:) 259 sv_i(:,:,:) = s_i (:,:,:) * v_i (:,:,:) 260 v_ip(:,:,:) = h_ip(:,:,:) * a_ip(:,:,:) 263 261 ! 264 262 END SUBROUTINE ice_var_eqv2glo … … 478 476 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhosn * r1_rdtice 479 477 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s (ji,jj,1,jl) * r1_rdtice ! W.m-2 <0 478 IF( ln_pnd_fwb ) THEN 479 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_ip(ji,jj,jl) * rhofw * r1_rdtice 480 ENDIF 480 481 !----------------------------------------------------------------- 481 482 ! Zap snow energy … … 498 499 h_s (ji,jj,jl) = h_s (ji,jj,jl) * zswitch(ji,jj) 499 500 500 END DO 501 END DO 502 503 IF( ln_pnd ) THEN 504 DO jj = 1 , jpj 505 DO ji = 1 , jpi 506 IF( ln_pnd_fw ) & 507 & wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_ip(ji,jj,jl) * rhofw * r1_rdtice 508 a_ip (ji,jj,jl) = a_ip (ji,jj,jl) * zswitch(ji,jj) 509 v_ip (ji,jj,jl) = v_ip (ji,jj,jl) * zswitch(ji,jj) 510 END DO 511 END DO 512 ENDIF 513 501 a_ip (ji,jj,jl) = a_ip (ji,jj,jl) * zswitch(ji,jj) 502 v_ip (ji,jj,jl) = v_ip (ji,jj,jl) * zswitch(ji,jj) 503 504 END DO 505 END DO 506 514 507 END DO 515 508 … … 520 513 ! open water = 1 if at_i=0 521 514 WHERE( at_i(:,:) == 0._wp ) ato_i(:,:) = 1._wp 515 522 516 ! 523 517 END SUBROUTINE ice_var_zapsmall -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/LIM_SRC_3/icewri.F90
r8738 r8752 128 128 CALL iom_put( "snowvol" , vt_s * zswi ) ! snow volume 129 129 130 IF ( ln_pnd ) THEN 131 CALL iom_put( "iceamp" , at_ip * zswi ) ! melt pond total fraction 132 CALL iom_put( "icevmp" , vt_ip * zswi ) ! melt pond total volume per unit area 133 ENDIF 130 CALL iom_put( "iceamp" , at_ip * zswi ) ! melt pond total fraction 131 CALL iom_put( "icevmp" , vt_ip * zswi ) ! melt pond total volume per unit area 134 132 135 133 !---------------------------------- … … 145 143 IF ( iom_use('brinevol_cat') ) CALL iom_put( "brinevol_cat", bv_i * 100. * zswi2 ) ! brine volume 146 144 147 IF ( ln_pnd ) THEN 148 IF ( iom_use('iceamp_cat') ) CALL iom_put( "iceamp_cat" , a_ip * zswi2 ) ! melt pond frac for categories 149 IF ( iom_use('icevmp_cat') ) CALL iom_put( "icevmp_cat" , v_ip * zswi2 ) ! melt pond frac for categories 150 IF ( iom_use('icehmp_cat') ) CALL iom_put( "icehmp_cat" , h_ip * zswi2 ) ! melt pond frac for categories 151 IF ( iom_use('iceafp_cat') ) CALL iom_put( "iceafp_cat" , a_ip_frac * zswi2 ) ! melt pond frac for categories 152 ENDIF 145 IF ( iom_use('iceamp_cat') ) CALL iom_put( "iceamp_cat" , a_ip * zswi2 ) ! melt pond frac for categories 146 IF ( iom_use('icevmp_cat') ) CALL iom_put( "icevmp_cat" , v_ip * zswi2 ) ! melt pond frac for categories 147 IF ( iom_use('icehmp_cat') ) CALL iom_put( "icehmp_cat" , h_ip * zswi2 ) ! melt pond frac for categories 148 IF ( iom_use('iceafp_cat') ) CALL iom_put( "iceafp_cat" , a_ip_frac * zswi2 ) ! melt pond frac for categories 153 149 154 150 !-------------------------------- … … 316 312 CALL histdef( kid, "sidive", "Ice divergence" , "10-8s-1", & 317 313 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 318 319 ! MV MP 2016 320 IF ( ln_pnd ) THEN 321 CALL histdef( kid, "si_amp", "Melt pond fraction" , "%" , & 322 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 323 CALL histdef( kid, "si_vmp", "Melt pond volume" , "m" , & 324 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 325 ENDIF 326 ! END MV MP 2016 327 314 CALL histdef( kid, "si_amp", "Melt pond fraction" , "%" , & 315 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 316 CALL histdef( kid, "si_vmp", "Melt pond volume" , "m" , & 317 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) 328 318 CALL histdef( kid, "vfxbog", "Ice bottom production" , "m/s" , & 329 319 & jpi, jpj, kh_i, 1, 1, 1, -99, 32, "inst(x)", rdt, rdt ) … … 370 360 CALL histwrite( kid, "sidive", kt, divu_i*1.0e8 , jpi*jpj, (/1/) ) 371 361 372 ! MV MP 2016 373 IF ( ln_pnd ) THEN 374 CALL histwrite( kid, "si_amp", kt, at_ip , jpi*jpj, (/1/) ) 375 CALL histwrite( kid, "si_vmp", kt, vt_ip , jpi*jpj, (/1/) ) 376 ENDIF 377 ! END MV MP 2016 362 CALL histwrite( kid, "si_amp", kt, at_ip , jpi*jpj, (/1/) ) 363 CALL histwrite( kid, "si_vmp", kt, vt_ip , jpi*jpj, (/1/) ) 378 364 379 365 CALL histwrite( kid, "vfxbog", kt, wfx_bog , jpi*jpj, (/1/) ) … … 384 370 CALL histwrite( kid, "vfxbom", kt, wfx_bom , jpi*jpj, (/1/) ) 385 371 CALL histwrite( kid, "vfxsum", kt, wfx_sum , jpi*jpj, (/1/) ) 386 IF ( ln_pnd ) & 387 CALL histwrite( kid, "vfxpnd", kt, wfx_pnd , jpi*jpj, (/1/) ) 372 CALL histwrite( kid, "vfxpnd", kt, wfx_pnd , jpi*jpj, (/1/) ) 388 373 389 374 CALL histwrite( kid, "sithicat", kt, h_i , jpi*jpj*jpl, (/1/) ) -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice.F90
r8738 r8752 19 19 USE eosbn2 ! equation of state 20 20 USE oce ! ocean dynamics and tracers variables 21 USE ice ! LIM_3 ice variables 22 USE icevar 23 USE icectl 21 USE ice ! sea-ice: variables 22 USE icevar ! sea-ice: operations 23 USE iceitd ! sea-ice: rebining 24 USE icectl ! sea-ice: control prints 24 25 USE par_oce ! ocean parameters 25 26 USE dom_oce ! ocean space and time domain variables … … 71 72 END DO 72 73 ! 73 74 74 CALL ice_var_zapsmall 75 CALL ice_var_agg(1) 75 76 IF( ln_icectl ) CALL ice_prt( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' ) 76 77 ! … … 248 249 END DO !jl 249 250 ! 251 ! --- In case categories are out of bounds, do a remapping --- ! 252 ! i.e. inputs have not the same ice thickness distribution 253 ! (set by rn_himean) than the regional simulation 254 IF( jpl > 1 ) CALL ice_itd_reb( kt ) 250 255 ! 251 256 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r8738 r8752 48 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: alb_ice !: ice albedo [-] 49 49 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qml_ice !: heat available for snow / ice surface melting [W/m2] 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qcn_ice !: heat conduction flux in the layer below surface [W/m2] 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice_tr !: solar flux transmitted below the ice surface [W/m2] 53 50 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau_ice !: atmos-ice u-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 51 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau_ice !: atmos-ice v-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr1_i0 !: Solar surface transmission parameter, thick ice [-]53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr2_i0 !: Solar surface transmission parameter, thin ice [-]54 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice !: sublimation - precip over sea ice [kg/m2/s] 55 57 … … 123 125 ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) , & 124 126 & qla_ice (jpi,jpj,jpl) , dqla_ice(jpi,jpj,jpl) , & 125 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 127 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 128 & qml_ice(jpi,jpj,jpl) , qcn_ice(jpi,jpj,jpl) , qsr_ice_tr(jpi,jpj,jpl), & 126 129 & utau_ice(jpi,jpj) , vtau_ice(jpi,jpj) , wndm_ice(jpi,jpj) , & 127 & fr1_i0 (jpi,jpj) , fr2_i0 (jpi,jpj) , &128 130 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice(jpi,jpj) , & 129 131 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj) , & … … 139 141 a_i(jpi,jpj,ncat) , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat) , & 140 142 STAT= ierr(2) ) 141 IF( ln_cpl ) ALLOCATE( u_ice(jpi,jpj) , fr1_i0(jpi,jpj) ,tn_ice (jpi,jpj,1) , &142 & v_ice(jpi,jpj) , fr2_i0(jpi,jpj) ,alb_ice(jpi,jpj,1) , &143 IF( ln_cpl ) ALLOCATE( u_ice(jpi,jpj) , tn_ice (jpi,jpj,1) , & 144 & v_ice(jpi,jpj) , alb_ice(jpi,jpj,1) , & 143 145 & emp_ice(jpi,jpj) , qns_ice(jpi,jpj,1) , dqns_ice(jpi,jpj,1) , & 144 146 & STAT= ierr(3) ) … … 168 170 REAL , PUBLIC, PARAMETER :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 169 171 INTEGER , PUBLIC, PARAMETER :: jpl = 1 170 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice ,fr1_i0,fr2_i0! jpi, jpj172 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice ! jpi, jpj 171 173 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice, qns_ice, dqns_ice ! (jpi,jpj,jpl) 172 174 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk.F90
r8738 r8752 17 17 !! ==> based on AeroBulk (http://aerobulk.sourceforge.net/) 18 18 !! 4.0 ! 2016-10 (G. Madec) introduce a sbc_blk_init routine 19 !! 4.0 ! 2016-10 (M. Vancoppenolle) Introduce Jules emulator (M. Vancoppenolle) 19 20 !!---------------------------------------------------------------------- 20 21 … … 42 43 USE ice , ONLY : u_ice, v_ice, jpl, a_i_b, at_i_b, tm_su 43 44 USE icethd_dh ! for CALL ice_thd_snwblow 45 USE icethd_zdf, ONLY: rn_cnd_s ! for blk_ice_qcn 44 46 #endif 45 47 USE sbcblk_algo_ncar ! => turb_ncar : NCAR - CORE (Large & Yeager, 2009) … … 64 66 PUBLIC blk_ice_tau ! routine called in icestp module 65 67 PUBLIC blk_ice_flx ! routine called in icestp module 66 #endif 68 PUBLIC blk_ice_qcn ! routine called in icestp module 69 #endif 67 70 68 71 !!Lolo: should ultimately be moved in the module with all physical constants ? … … 697 700 698 701 699 SUBROUTINE blk_ice_flx( ptsu, p alb )702 SUBROUTINE blk_ice_flx( ptsu, phs, phi, palb ) 700 703 !!--------------------------------------------------------------------- 701 704 !! *** ROUTINE blk_ice_flx *** … … 710 713 !!--------------------------------------------------------------------- 711 714 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: ptsu ! sea ice surface temperature 715 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phs ! snow thickness 716 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phi ! ice thickness 712 717 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: palb ! ice albedo (all skies) 713 718 !! … … 716 721 REAL(wp) :: zcoef_dqlw, zcoef_dqla ! - - 717 722 REAL(wp) :: zztmp, z1_lsub ! - - 723 REAL(wp) :: zfrqsr_tr_i ! sea ice shortwave fraction transmitted below through the ice 724 REAL(wp) :: zfr1, zfr2, zfac ! local variables 718 725 REAL(wp), DIMENSION(:,:,:), POINTER :: z_qlw ! long wave heat flux over ice 719 726 REAL(wp), DIMENSION(:,:,:), POINTER :: z_qsb ! sensible heat flux over ice … … 722 729 REAL(wp), DIMENSION(:,:) , POINTER :: zevap, zsnw ! evaporation and snw distribution after wind blowing (LIM3) 723 730 REAL(wp), DIMENSION(:,:) , POINTER :: zrhoa 731 724 732 !!--------------------------------------------------------------------- 725 733 ! … … 830 838 CALL wrk_dealloc( jpi,jpj, zevap, zsnw ) 831 839 832 !-------------------------------------------------------------------- 833 ! FRACTIONs of net shortwave radiation which is not absorbed in the 834 ! thin surface layer and penetrates inside the ice cover 835 ! ( Maykut and Untersteiner, 1971 ; Ebert and Curry, 1993 ) 836 ! 837 fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 838 fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 839 ! 840 ! 840 ! --- absorbed and transmitted shortwave radiation (W/m2) --- ! 841 ! 842 ! former coding was 843 ! fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 844 ! fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 845 846 ! --- surface transmission parameter (i0, Grenfell Maykut 77) --- ! 847 zfr1 = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) ! standard value 848 zfr2 = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) ! zfr2 such that zfr1 + zfr2 to equal 1 849 850 qsr_ice_tr(:,:,:) = 0._wp 851 852 DO jl = 1, jpl 853 DO jj = 1, jpj 854 DO ji = 1, jpi 855 856 zfac = MAX( 0._wp , 1._wp - phi(ji,jj,jl) * 10._wp ) ! linear weighting factor: =0 for phi=0, =1 for phi = 0.1 857 zfrqsr_tr_i = zfr1 + zfac * zfr2 ! below 10 cm, linearly increase zfrqsr_tr_i until 1 at zero thickness 858 859 IF ( phs(ji,jj,jl) <= 0.0_wp ) THEN 860 zfrqsr_tr_i = zfr1 + zfac * zfr2 861 ELSE 862 zfrqsr_tr_i = 0._wp ! snow fully opaque 863 ENDIF 864 865 qsr_ice_tr(ji,jj,jl) = zfrqsr_tr_i * qsr_ice(ji,jj,jl) ! transmitted solar radiation 866 867 END DO 868 END DO 869 END DO 870 871 841 872 IF(ln_ctl) THEN 842 873 CALL prt_ctl(tab3d_1=qla_ice , clinfo1=' blk_ice: qla_ice : ', tab3d_2=z_qsb , clinfo2=' z_qsb : ', kdim=jpl) … … 854 885 855 886 END SUBROUTINE blk_ice_flx 887 888 889 890 SUBROUTINE blk_ice_qcn( k_monocat, ptsu, ptb, phs, phi ) 891 892 !!--------------------------------------------------------------------- 893 !! *** ROUTINE blk_ice_qcn *** 894 !! 895 !! ** Purpose : Compute surface temperature and snow/ice conduction flux 896 !! to force sea ice / snow thermodynamics 897 !! in the case JULES coupler is emulated 898 !! 899 !! ** Method : compute surface energy balance assuming neglecting heat storage 900 !! following the 0-layer Semtner (1976) approach 901 !! 902 !! ** Outputs : - ptsu : sea-ice / snow surface temperature (K) 903 !! - qcn_ice : surface inner conduction flux (W/m2) 904 !! 905 !!--------------------------------------------------------------------- 906 !! 907 INTEGER, INTENT(in) :: k_monocat ! single-category option 908 909 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: ptsu ! sea ice / snow surface temperature 910 911 REAL(wp), DIMENSION(:,:) , INTENT(in) :: ptb ! sea ice base temperature 912 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phs ! snow thickness 913 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phi ! sea ice thickness 914 915 INTEGER :: ji, jj, jl ! dummy loop indices 916 INTEGER :: iter ! 917 REAL(wp) :: zfac, zfac2, zfac3 ! dummy factors 918 REAL(wp) :: zkeff_h, ztsu ! 919 REAL(wp) :: zqc, zqnet ! 920 REAL(wp) :: zhe, zqa0 ! 921 922 INTEGER , PARAMETER :: nit = 10 ! number of iterations 923 REAL(wp), PARAMETER :: zepsilon = 0.1_wp ! characteristic thickness for enhanced conduction 924 925 REAL(wp), DIMENSION(:,:,:), POINTER :: zgfac ! enhanced conduction factor 926 927 !!--------------------------------------------------------------------- 928 929 IF( nn_timing == 1 ) CALL timing_start('blk_ice_qcn') 930 ! 931 CALL wrk_alloc( jpi,jpj,jpl, zgfac ) 932 933 ! -------------------------------------! 934 ! I Enhanced conduction factor ! 935 ! -------------------------------------! 936 ! 937 ! Emulates the enhancement of conduction by unresolved thin ice (k_monocat = 1/3) 938 ! Fichefet and Morales Maqueda, JGR 1997 939 ! 940 zgfac(:,:,:) = 1._wp 941 942 SELECT CASE ( k_monocat ) 943 944 CASE ( 1 , 3 ) 945 946 zfac = 1._wp / ( rn_cnd_s + rcdic ) 947 zfac2 = EXP(1._wp) * 0.5_wp * zepsilon 948 zfac3 = 2._wp / zepsilon 949 950 DO jl = 1, jpl 951 DO jj = 1 , jpj 952 DO ji = 1, jpi 953 ! ! Effective thickness 954 zhe = ( rn_cnd_s * phi(ji,jj,jl) + rcdic * phs(ji,jj,jl) ) * zfac 955 ! ! Enhanced conduction factor 956 IF( zhe >= zfac2 ) & 957 zgfac(ji,jj,jl) = MIN( 2._wp, ( 0.5_wp + 0.5 * LOG( zhe * zfac3 ) ) ) 958 END DO 959 END DO 960 END DO 961 962 END SELECT 963 964 ! -------------------------------------------------------------! 965 ! II Surface temperature and conduction flux ! 966 ! -------------------------------------------------------------! 967 968 zfac = rcdic * rn_cnd_s 969 ! ========================== ! 970 DO jl = 1, jpl ! Loop over ice categories ! 971 ! ! ========================== ! 972 DO jj = 1 , jpj 973 DO ji = 1, jpi 974 ! ! Effective conductivity of the snow-ice system divided by thickness 975 zkeff_h = zfac * zgfac(ji,jj,jl) / ( rcdic * phs(ji,jj,jl) + rn_cnd_s * phi(ji,jj,jl) ) 976 ! Store initial surface temperature 977 ztsu = ptsu(ji,jj,jl) 978 ! Net initial atmospheric heat flux 979 zqa0 = qsr_ice(ji,jj,jl) - qsr_ice_tr(ji,jj,jl) + qns_ice(ji,jj,jl) 980 981 DO iter = 1, nit ! --- Iteration loop 982 983 ! ! Conduction heat flux through snow-ice system (>0 downwards) 984 zqc = zkeff_h * ( ztsu - ptb(ji,jj) ) 985 ! ! Surface energy budget 986 zqnet = zqa0 + dqns_ice(ji,jj,jl) * ( ztsu - ptsu(ji,jj,jl) ) - zqc 987 ! ! Temperature update 988 ztsu = ztsu - zqnet / ( dqns_ice(ji,jj,jl) - zkeff_h ) 989 990 END DO 991 992 ptsu(ji,jj,jl) = MIN( rt0, ztsu ) 993 994 qcn_ice(ji,jj,jl) = zkeff_h * ( ptsu(ji,jj,jl) - ptb(ji,jj) ) 995 996 END DO 997 END DO 998 999 END DO 1000 1001 CALL wrk_dealloc( jpi,jpj,jpl, zgfac ) 1002 1003 IF( nn_timing == 1 ) CALL timing_stop('blk_ice_qcn') 1004 1005 END SUBROUTINE blk_ice_qcn 856 1006 857 1007 #endif … … 1093 1243 zqi_sat(:,:) = 0.98_wp * q_sat( tm_su(:,:), sf(jp_slp)%fnow(:,:,1) ) ! saturation humidity over ice [kg/kg] 1094 1244 ! 1095 !! DO jj = 2, jpjm1 1096 !! DO ji = fs_2, fs_jpim1 1097 DO jj = 1, jpj 1098 DO ji = 1, jpi 1245 DO jj = 2, jpjm1 ! reduced loop is necessary for reproducibility 1246 DO ji = fs_2, fs_jpim1 1099 1247 ! Virtual potential temperature [K] 1100 1248 zthetav_os = zst(ji,jj) * ( 1._wp + rctv0 * zqo_sat(ji,jj) ) ! over ocean … … 1140 1288 END DO 1141 1289 END DO 1142 !!CALL lbc_lnk_multi( Cd, 'T', 1., Ch, 'T', 1. )1290 CALL lbc_lnk_multi( Cd, 'T', 1., Ch, 'T', 1. ) 1143 1291 ! 1144 1292 END SUBROUTINE Cdn10_Lupkes2015 -
branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r8751 r8752 32 32 USE geo2ocean ! 33 33 USE oce , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 34 USE albedooce!34 USE ocealb ! 35 35 USE eosbn2 ! 36 36 USE sbcrnf, ONLY : l_rnfcpl … … 178 178 TYPE( DYNARR ), SAVE, DIMENSION(jprcv) :: frcv ! all fields recieved from the atmosphere 179 179 180 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: alb edo_oce_mix ! ocean albedo sent to atmosphere (mix clear/overcast sky)180 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: alb_oce_mix ! ocean albedo sent to atmosphere (mix clear/overcast sky) 181 181 182 182 REAL(wp) :: rpref = 101000._wp ! reference atmospheric pressure[N/m2] … … 202 202 ierr(:) = 0 203 203 ! 204 ALLOCATE( alb edo_oce_mix(jpi,jpj), nrcvinfo(jprcv), STAT=ierr(1) )204 ALLOCATE( alb_oce_mix(jpi,jpj), nrcvinfo(jprcv), STAT=ierr(1) ) 205 205 206 206 #if ! defined key_lim3 && ! defined key_cice … … 737 737 ! 2. receiving mixed oce-ice solar radiation 738 738 IF ( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN 739 CALL albedo_oce( zaos, zacs )739 CALL oce_alb( zaos, zacs ) 740 740 ! Due to lack of information on nebulosity : mean clear/overcast sky 741 alb edo_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5741 alb_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 742 742 ENDIF 743 743 … … 1530 1530 1531 1531 1532 SUBROUTINE sbc_cpl_ice_flx( picefr, palbi, psst, pist )1532 SUBROUTINE sbc_cpl_ice_flx( picefr, palbi, psst, pist, phs, phi ) 1533 1533 !!---------------------------------------------------------------------- 1534 1534 !! *** ROUTINE sbc_cpl_ice_flx *** … … 1585 1585 REAL(wp), INTENT(in), DIMENSION(:,: ), OPTIONAL :: psst ! sea surface temperature [Celsius] 1586 1586 REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL :: pist ! ice surface temperature [Kelvin] 1587 ! 1588 INTEGER :: jl ! dummy loop index 1587 REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL :: phs ! snow depth [m] 1588 REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL :: phi ! ice thickness [m] 1589 ! 1590 INTEGER :: ji,jj,jl ! dummy loop index 1589 1591 REAL(wp), POINTER, DIMENSION(:,: ) :: zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw 1590 1592 REAL(wp), POINTER, DIMENSION(:,: ) :: zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice 1591 1593 REAL(wp), POINTER, DIMENSION(:,: ) :: zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice 1592 REAL(wp), POINTER, DIMENSION(:,:,:) :: zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice 1594 REAL(wp), POINTER, DIMENSION(:,:,:) :: zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i 1593 1595 !!---------------------------------------------------------------------- 1594 1596 ! … … 1598 1600 CALL wrk_alloc( jpi,jpj, zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 1599 1601 CALL wrk_alloc( jpi,jpj, zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) 1600 CALL wrk_alloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice )1602 CALL wrk_alloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i ) 1601 1603 1602 1604 IF( ln_mixcpl ) zmsk(:,:) = 1. - xcplmask(:,:,0) … … 1890 1892 ! ( see OASIS3 user guide, 5th edition, p39 ) 1891 1893 zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) ) & 1892 & / ( 1.- ( alb edo_oce_mix(:,: ) * ziceld(:,:) &1894 & / ( 1.- ( alb_oce_mix(:,: ) * ziceld(:,:) & 1893 1895 & + palbi (:,:,1) * picefr(:,:) ) ) 1894 1896 END SELECT … … 1951 1953 END SELECT 1952 1954 1953 ! Surface transimission parameter io (Maykut Untersteiner , 1971 ; Ebert and Curry, 1993 ) 1954 ! Used for LIM3 1955 ! Coupled case: since cloud cover is not received from atmosphere 1956 ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 1957 fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 1958 fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 1955 ! --- Transmitted shortwave radiation (W/m2) --- ! 1956 1957 IF ( nice_jules == 0 ) THEN 1958 1959 zfrqsr_tr_i(:,:,:) = 0._wp ! surface transmission parameter 1960 1961 ! former coding was 1962 ! Coupled case: since cloud cover is not received from atmosphere 1963 ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 1964 ! fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 1965 ! fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 1966 1967 ! to retrieve that coding, we needed to access h_i & h_s from here 1968 ! we could even retrieve cloud fraction from the coupler 1969 1970 DO jl = 1, jpl 1971 DO jj = 1 , jpj 1972 DO ji = 1, jpi 1973 1974 !--- surface transmission parameter (Grenfell Maykut 77) --- ! 1975 zfrqsr_tr_i(ji,jj,jl) = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice 1976 1977 ! --- influence of snow and thin ice --- ! 1978 IF ( phs(ji,jj,jl) >= 0.0_wp ) zfrqsr_tr_i(ji,jj,jl) = 0._wp ! snow fully opaque 1979 IF ( phi(ji,jj,jl) <= 0.1_wp ) zfrqsr_tr_i(ji,jj,jl) = 1._wp ! thin ice transmits all solar radiation 1980 END DO 1981 END DO 1982 END DO 1983 1984 qsr_ice_tr(:,:,:) = zfrqsr_tr_i(:,:,:) * qsr_ice(:,:,:) ! transmitted solar radiation 1985 1986 ENDIF 1987 1988 IF ( nice_jules == 2 ) THEN 1989 1990 ! here we must receive the qsr_ice_tr array from the coupler 1991 ! for now just assume zero 1992 1993 qsr_ice_tr(:,:,:) = 0.0_wp 1994 1995 ENDIF 1996 1997 1959 1998 1960 1999 CALL wrk_dealloc( jpi,jpj, zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw ) 1961 2000 CALL wrk_dealloc( jpi,jpj, zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 1962 2001 CALL wrk_dealloc( jpi,jpj, zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) 1963 CALL wrk_dealloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice )2002 CALL wrk_dealloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i ) 1964 2003 ! 1965 2004 IF( nn_timing == 1 ) CALL timing_stop('sbc_cpl_ice_flx') … … 2057 2096 ztmp1(:,:) = SUM( alb_ice (:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) / SUM( a_i(:,:,1:jpl), dim=3 ) 2058 2097 ELSEWHERE 2059 ztmp1(:,:) = alb edo_oce_mix(:,:)2098 ztmp1(:,:) = alb_oce_mix(:,:) 2060 2099 END WHERE 2061 2100 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%clcat' ) … … 2085 2124 2086 2125 IF( ssnd(jps_albmix)%laction ) THEN ! mixed ice-ocean 2087 ztmp1(:,:) = alb edo_oce_mix(:,:) * zfr_l(:,:)2126 ztmp1(:,:) = alb_oce_mix(:,:) * zfr_l(:,:) 2088 2127 DO jl=1,jpl 2089 2128 ztmp1(:,:) = ztmp1(:,:) + alb_ice(:,:,jl) * a_i(:,:,jl)
Note: See TracChangeset
for help on using the changeset viewer.