Changeset 8313 for branches/2017/dev_r8183_ICEMODEL
- Timestamp:
- 2017-07-10T20:24:21+02:00 (7 years ago)
- Location:
- branches/2017/dev_r8183_ICEMODEL/NEMOGCM
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref
r8312 r8313 17 17 nlay_i = 2 ! number of ice layers 18 18 nlay_s = 1 ! number of snow layers (only 1 is working) 19 nn_monocat = 0 ! virtual ITD mono-category parameterizations (1-4 => jpl = 1 only) or not (0) 20 ! 2: simple piling instead of ridging --- temporary option 21 ! 3: activate G(he) only --- temporary option 22 ! 4: activate extra lateral melting only --- temporary option 19 23 rn_amax_n = 0.997 ! maximum tolerated ice concentration NH 20 24 rn_amax_s = 0.997 ! maximum tolerated ice concentration SH … … 70 74 &namiceitd ! Ice discretization 71 75 !------------------------------------------------------------------------------ 72 nn_catbnd = 2 ! computation of ice category boundaries based on 73 ! 1: tanh function 74 ! 2: h^(-alpha), function of rn_himean 75 rn_himean = 2.0 ! expected domain-average ice thickness (m), nn_catbnd = 2 only 76 rn_himean = 2.0 ! expected domain-average ice thickness (m) 76 77 / 77 78 !------------------------------------------------------------------------------ … … 91 92 ! 92 93 ! -- limdyn & limrhg -- ! 94 rn_ishlat = 2. ! free slip (0) ; partial slip (0-2) ; no slip (2) ; strong slip (>2) 93 95 rn_cio = 5.0e-03 ! ice-ocean drag coefficient (-) 94 96 rn_creepl = 1.0e-12 ! creep limit (s-1) … … 110 112 ! -- limthd_dif -- ! 111 113 rn_kappa_i = 1.0 ! radiation attenuation coefficient in sea ice (m-1) 112 nn_conv_dif = 50 ! maximal number of iterations for heat diffusion computation113 rn_terr_dif = 1.0e-04 ! maximum temperature after heat diffusion (degC)114 114 nn_ice_thcon = 1 ! sea ice thermal conductivity 115 115 ! 0: k = k0 + beta.S/T (Untersteiner, 1964) 116 116 ! 1: k = k0 + beta1.S/T - beta2.T (Pringle et al., 2007) 117 ln_it_qnsice = .true. ! iterate the surface non-solar flux with surface temperature (T) or not (F) 118 nn_monocat = 0 ! virtual ITD mono-category parameterizations (1, jpl = 1 only) or not (0) 119 ! 2: simple piling instead of ridging --- temporary option 120 ! 3: activate G(he) only --- temporary option 121 ! 4: activate extra lateral melting only --- temporary option 122 rn_cdsn = 0.31 ! thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971) 123 ! Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) 117 ln_dqnsice = .true. ! change the surface non-solar flux with surface temperature (T) or not (F) 118 rn_cdsn = 0.31 ! thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971) 119 ! Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) 124 120 ! -- limthd_dh -- ! 125 121 ln_limdH = .true. ! activate ice thickness change from growing/melting (T) or not (F) => DO NOT TOUCH UNLESS U KNOW WHAT U DO -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/CONFIG/SHARED/namelist_ref
r8306 r8313 201 201 ! =1 use observed ice-cover , 202 202 ! =3 to 4 : ice-model used (LIM3 or CICE) ("key_lim3" or "key_cice") 203 nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) 204 ! =1 levitating ice with mass and salt exchange but no presure effect 205 ! =2 embedded sea-ice (full salt and mass exchanges and pressure) 203 ln_ice_embd = .false. ! =F levitating ice with mass and salt exchange but no presure effect 204 ! =T embedded sea-ice (full salt and mass exchanges and pressure) 206 205 ! Misc. options of sbc : 207 206 ln_traqsr = .true. ! Light penetration in the ocean (T => fill namtra_qsr) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r8312 r8313 196 196 197 197 ! !!** ice-thickness distribution namelist (namiceitd) ** 198 INTEGER , PUBLIC :: nn_catbnd !: categories distribution following: tanh function (1), or h^(-alpha) function (2)199 198 REAL(wp), PUBLIC :: rn_himean !: mean thickness of the domain (used to compute the distribution, nn_itdshp = 2 only) 200 199 … … 210 209 LOGICAL , PUBLIC :: ln_icestr_bvf !: use brine volume to diminish ice strength 211 210 ! -- limdyn & limrhg -- ! 211 REAL(wp), PUBLIC :: rn_ishlat !: lateral boundary condition for sea-ice 212 212 REAL(wp), PUBLIC :: rn_cio !: drag coefficient for oceanic stress 213 213 REAL(wp), PUBLIC :: rn_creepl !: creep limit : has to be under 1.0e-9 … … 223 223 ! -- limthd_dif -- ! 224 224 REAL(wp), PUBLIC :: rn_kappa_i !: coef. for the extinction of radiation Grenfell et al. (2006) [1/m] 225 REAL(wp), PUBLIC :: nn_conv_dif !: maximal number of iterations for heat diffusion226 REAL(wp), PUBLIC :: rn_terr_dif !: maximal tolerated error (C) for heat diffusion227 225 INTEGER , PUBLIC :: nn_ice_thcon !: thermal conductivity: =0 Untersteiner (1964) ; =1 Pringle et al (2007) 228 LOGICAL , PUBLIC :: ln_ it_qnsice !: iterate surface flux with changing surface temperatureor not (F)229 INTEGER , PUBLIC :: nn_monocat !: virtual ITD mono-category parameterizations (1 ) or not (0)226 LOGICAL , PUBLIC :: ln_dqnsice !: change non-solar surface flux with changing surface temperature (T) or not (F) 227 INTEGER , PUBLIC :: nn_monocat !: virtual ITD mono-category parameterizations (1-4) or not (0) 230 228 REAL(wp), PUBLIC :: rn_cdsn !: thermal conductivity of the snow [W/m/K] 231 229 ! -- limthd_dh -- ! … … 310 308 ! 311 309 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: t_bo !: Sea-Ice bottom temperature [Kelvin] 312 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: frld !: Leads fraction = 1 - ice fraction313 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfrld !: Leads fraction at previous time314 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: phicif !: Old ice thickness315 310 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qlead !: heat balance of the lead (or of the open ocean) 316 311 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fhtur !: net downward heat flux from the ice to the ocean … … 534 529 535 530 ii = ii + 1 536 ALLOCATE( t_bo (jpi,jpj) , frld (jpi,jpj) , pfrld (jpi,jpj) , phicif (jpi,jpj) ,&531 ALLOCATE( t_bo (jpi,jpj) , & 537 532 & wfx_snw(jpi,jpj) , wfx_snw_dyn(jpi,jpj) , wfx_snw_sum(jpi,jpj) , wfx_snw_sub(jpi,jpj) , & 538 533 & wfx_ice(jpi,jpj) , wfx_sub (jpi,jpj) , wfx_ice_sub(jpi,jpj) , wfx_lam (jpi,jpj) , & -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limctl.F90
r7646 r8313 385 385 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~ ' 386 386 WRITE(numout,*) ' - Heat fluxes in and out the ice ***' 387 WRITE(numout,*) ' qsr_ini : ', pfrld(ji,jj) * qsr(ji,jj) + SUM( a_i_b(ji,jj,:) * qsr_ice(ji,jj,:) )388 WRITE(numout,*) ' qns_ini : ', pfrld(ji,jj) * qns(ji,jj) + SUM( a_i_b(ji,jj,:) * qns_ice(ji,jj,:) )387 WRITE(numout,*) ' qsr_ini : ', (1._wp-at_i_b(ji,jj)) * qsr(ji,jj) + SUM( a_i_b(ji,jj,:) * qsr_ice(ji,jj,:) ) 388 WRITE(numout,*) ' qns_ini : ', (1._wp-at_i_b(ji,jj)) * qns(ji,jj) + SUM( a_i_b(ji,jj,:) * qns_ice(ji,jj,:) ) 389 389 WRITE(numout,*) 390 390 WRITE(numout,*) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r7753 r8313 109 109 !!------------------------------------------------------------------- 110 110 INTEGER :: ios ! Local integer output status for namelist read 111 NAMELIST/namicedyn/ nn_limadv, nn_limadv_ord, & 112 & nn_icestr, ln_icestr_bvf, rn_pe_rdg, rn_pstar, rn_crhg, rn_cio, rn_creepl, rn_ecc, & 111 NAMELIST/namicedyn/ nn_limadv, nn_limadv_ord, & 112 & nn_icestr, rn_pe_rdg, rn_pstar, rn_crhg, ln_icestr_bvf, & 113 & rn_ishlat, rn_cio, rn_creepl, rn_ecc, & 113 114 & nn_nevp, rn_relast, ln_landfast, rn_gamma, rn_icebfr, rn_lfrelax 114 115 !!------------------------------------------------------------------- … … 130 131 WRITE(numout,*)' choose the advection scheme (-1=Prather, 0=Ulimate-Macho) nn_limadv = ', nn_limadv 131 132 WRITE(numout,*)' choose the order of the scheme (if ultimate) nn_limadv_ord = ', nn_limadv_ord 132 ! lim rhg133 ! limitd_me 133 134 WRITE(numout,*)' ice strength parameterization (0=Hibler 1=Rothrock) nn_icestr = ', nn_icestr 134 WRITE(numout,*)' Including brine volume in ice strength comp. ln_icestr_bvf = ', ln_icestr_bvf135 135 WRITE(numout,*)' Ratio of ridging work to PotEner change in ridging rn_pe_rdg = ', rn_pe_rdg 136 WRITE(numout,*) ' drag coefficient for oceanic stress rn_cio = ', rn_cio137 136 WRITE(numout,*) ' first bulk-rheology parameter rn_pstar = ', rn_pstar 138 137 WRITE(numout,*) ' second bulk-rhelogy parameter rn_crhg = ', rn_crhg 138 WRITE(numout,*)' Including brine volume in ice strength comp. ln_icestr_bvf = ', ln_icestr_bvf 139 ! limrhg 140 WRITE(numout,*) ' lateral boundary condition for sea ice dynamics rn_ishlat = ', rn_ishlat 141 WRITE(numout,*) ' drag coefficient for oceanic stress rn_cio = ', rn_cio 139 142 WRITE(numout,*) ' creep limit rn_creepl = ', rn_creepl 140 143 WRITE(numout,*) ' eccentricity of the elliptical yield curve rn_ecc = ', rn_ecc … … 142 145 WRITE(numout,*) ' ratio of elastic timescale over ice time step rn_relast = ', rn_relast 143 146 WRITE(numout,*) ' Landfast: param (T or F) ln_landfast = ', ln_landfast 144 WRITE(numout,*) ' Landfast: fraction of ocean depth that ice must reach rn_gamma = ', rn_gamma 145 WRITE(numout,*) ' Landfast: maximum bottom stress per unit area of contact rn_icebfr = ', rn_icebfr 146 WRITE(numout,*) ' Landfast: relax time scale (s-1) to reach static friction rn_lfrelax = ', rn_lfrelax 147 WRITE(numout,*) ' T: fraction of ocean depth that ice must reach rn_gamma = ', rn_gamma 148 WRITE(numout,*) ' T: maximum bottom stress per unit area of contact rn_icebfr = ', rn_icebfr 149 WRITE(numout,*) ' T: relax time scale (s-1) to reach static friction rn_lfrelax = ', rn_lfrelax 150 ENDIF 151 ! 152 IF ( rn_ishlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ice lateral free-slip ' 153 ELSEIF ( rn_ishlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ice lateral no-slip ' 154 ELSEIF ( 0. < rn_ishlat .AND. rn_ishlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ice lateral partial-slip ' 155 ELSEIF ( 2. < rn_ishlat ) THEN ; IF(lwp) WRITE(numout,*) ' ice lateral strong-slip ' 147 156 ENDIF 148 157 ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r8306 r8313 150 150 REAL(wp), PARAMETER :: zepsi = 1.0e-20_wp ! tolerance parameter 151 151 REAL(wp), PARAMETER :: zmmin = 1._wp ! ice mass (kg/m2) below which ice velocity equals ocean velocity 152 REAL(wp), PARAMETER :: zshlat = 2._wp ! boundary condition for sea-ice velocity (2=no slip ; 0=free slip)153 152 !!------------------------------------------------------------------- 154 153 … … 182 181 DO ji = fs_2, fs_jpim1 ! vector opt. 183 182 IF( zfmask(ji,jj) == 0._wp ) THEN 184 zfmask(ji,jj) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), zwf(ji-1,jj), zwf(ji,jj-1) ) )183 zfmask(ji,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1), zwf(ji-1,jj), zwf(ji,jj-1) ) ) 185 184 ENDIF 186 185 END DO … … 188 187 DO jj = 2, jpjm1 189 188 IF( zfmask(1,jj) == 0._wp ) THEN 190 zfmask(1 ,jj) = zshlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) )189 zfmask(1 ,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 191 190 ENDIF 192 191 IF( zfmask(jpi,jj) == 0._wp ) THEN 193 zfmask(jpi,jj) = zshlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) )192 zfmask(jpi,jj) = rn_ishlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 194 193 ENDIF 195 194 END DO 196 195 DO ji = 2, jpim1 197 196 IF( zfmask(ji,1) == 0._wp ) THEN 198 zfmask(ji,1 ) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) )197 zfmask(ji,1 ) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 199 198 ENDIF 200 199 IF( zfmask(ji,jpj) == 0._wp ) THEN 201 zfmask(ji,jpj) = zshlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) )200 zfmask(ji,jpj) = rn_ishlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 202 201 ENDIF 203 202 END DO … … 251 250 !------------------------------------------------------------------------------! 252 251 253 IF( nn_ice_embd == 2) THEN !== embedded sea ice: compute representative ice top surface ==!252 IF( ln_ice_embd ) THEN !== embedded sea ice: compute representative ice top surface ==! 254 253 ! 255 254 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r8266 r8313 112 112 ! --- case we bypass ice thermodynamics --- ! 113 113 IF( .NOT. ln_limthd ) THEN ! we suppose ice is impermeable => ocean is isolated from atmosphere 114 hfx_in (:,:) = pfrld(:,:) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:)115 hfx_out (:,:) = pfrld(:,:) * qns_oce(:,:) + qemp_oce(:,:)114 hfx_in (:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 115 hfx_out (:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + qemp_oce(:,:) 116 116 ftr_ice (:,:,:) = 0._wp 117 117 emp_ice (:,:) = 0._wp … … 195 195 & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) + sfx_sub(:,:) + sfx_lam(:,:) 196 196 197 !-------------------------------------------------------------! 198 ! mass of snow and ice per unit area for embedded sea-ice ! 199 !-------------------------------------------------------------! 200 IF( nn_ice_embd /= 0 ) THEN 201 ! save mass from the previous ice time step 202 snwice_mass_b(:,:) = snwice_mass(:,:) 203 ! new mass per unit area 204 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 205 ! time evolution of snow+ice mass 206 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice 207 ENDIF 197 !----------------------------------------! 198 ! mass of snow and ice per unit area ! 199 !----------------------------------------! 200 ! save mass from the previous ice time step 201 snwice_mass_b(:,:) = snwice_mass(:,:) 202 ! new mass per unit area 203 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 204 ! time evolution of snow+ice mass 205 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice 208 206 209 207 !-----------------------------------------------! … … 243 241 !! tmod_io = rhoco * | U_ice-U_oce | 244 242 !! - update the modulus of stress at ocean surface 245 !! taum = frld * taum + (1-frld)* tmod_io * | U_ice-U_oce |243 !! taum = (1-a) * taum + a * tmod_io * | U_ice-U_oce | 246 244 !! * at each ocean time step (every kt): 247 245 !! compute linearized ice-ocean stresses as … … 336 334 ! 337 335 IF( .NOT. ln_rstart ) THEN 338 ! ! embedded sea ice 339 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 340 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) 341 snwice_mass_b(:,:) = snwice_mass(:,:) 342 ELSE 343 snwice_mass (:,:) = 0._wp ! no mass exchanges 344 snwice_mass_b(:,:) = 0._wp ! no mass exchanges 345 ENDIF 346 IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area 336 ! 337 snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) ) ! snow+ice mass 338 snwice_mass_b(:,:) = snwice_mass(:,:) 339 ! 340 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 347 341 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 348 342 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r8239 r8313 172 172 ! --- Energy received in the lead, zqld is defined everywhere (J.m-2) --- ! 173 173 zqld = tmask(ji,jj,1) * rdt_ice * & 174 & ( pfrld(ji,jj) * qsr_oce(ji,jj) * frq_m(ji,jj) + pfrld(ji,jj) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 174 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 175 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 175 176 176 177 ! --- Energy needed to bring ocean surface layer until its freezing (<0, J.m-2) --- ! … … 210 211 IF( .NOT. ln_limdO ) qlead(:,:) = 0._wp 211 212 ! In case we bypass growing/melting from top and bottom: we suppose ice is impermeable => ocean is isolated from atmosphere 212 IF( .NOT. ln_limdH ) hfx_in(:,:) = pfrld(:,:) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:)213 IF( .NOT. ln_limdH ) hfx_in(:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) 213 214 IF( .NOT. ln_limdH ) fhtur (:,:) = 0._wp ; fhld (:,:) = 0._wp 214 215 … … 221 222 DO jj = 1, jpj 222 223 DO ji = 1, jpi 223 hfx_out(ji,jj) = pfrld(ji,jj) * qns_oce(ji,jj) + qemp_oce(ji,jj) & ! Non solar heat flux received by the ocean224 & - qlead(ji,jj) * r1_rdtice & ! heat flux taken from the ocean where there is open water ice formation225 & - at_i(ji,jj) * fhtur(ji,jj) & ! heat flux taken by turbulence226 & - at_i(ji,jj) * fhld(ji,jj) ! heat flux taken during bottom growth/melt227 ! (fhld should be 0 while bott growth)224 hfx_out(ji,jj) = ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) & ! Non solar heat flux received by the ocean 225 & - qlead(ji,jj) * r1_rdtice & ! heat flux taken from the ocean where there is open water ice formation 226 & - at_i(ji,jj) * fhtur(ji,jj) & ! heat flux taken by turbulence 227 & - at_i(ji,jj) * fhld(ji,jj) ! heat flux taken during bottom growth/melt 228 ! (fhld should be 0 while bott growth) 228 229 END DO 229 230 END DO … … 590 591 !!------------------------------------------------------------------- 591 592 INTEGER :: ios ! Local integer output status for namelist read 592 NAMELIST/namicethd/ rn_kappa_i, nn_ conv_dif, rn_terr_dif, nn_ice_thcon, ln_it_qnsice, nn_monocat, rn_cdsn,&593 & ln_limdH, rn_betas, 594 & ln_limdA, rn_beta, rn_dmin, 593 NAMELIST/namicethd/ rn_kappa_i, nn_ice_thcon, ln_dqnsice, rn_cdsn, & 594 & ln_limdH, rn_betas, & 595 & ln_limdA, rn_beta, rn_dmin, & 595 596 & ln_limdO, rn_hnewice, ln_frazil, rn_maxfrazb, rn_vfrazb, rn_Cfrazb, rn_himin 596 597 !!------------------------------------------------------------------- … … 605 606 IF(lwm) WRITE ( numoni, namicethd ) 606 607 ! 607 IF ( ( jpl > 1 ) .AND. ( nn_monocat == 1 ) ) THEN608 nn_monocat = 0609 IF(lwp) WRITE(numout,*)610 IF(lwp) WRITE(numout,*) ' nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen'611 ENDIF612 608 ! 613 609 IF(lwp) THEN ! control print … … 616 612 WRITE(numout,*)' -- limthd_dif --' 617 613 WRITE(numout,*)' extinction radiation parameter in sea ice rn_kappa_i = ', rn_kappa_i 618 WRITE(numout,*)' maximal n. of iter. for heat diffusion computation nn_conv_dif = ', nn_conv_dif619 WRITE(numout,*)' maximal err. on T for heat diffusion computation rn_terr_dif = ', rn_terr_dif620 614 WRITE(numout,*)' switch for comp. of thermal conductivity in the ice nn_ice_thcon = ', nn_ice_thcon 621 WRITE(numout,*)' iterate the surface non-solar flux (T) or not (F) ln_it_qnsice = ', ln_it_qnsice 622 WRITE(numout,*)' virtual ITD mono-category parameterizations (1) or not nn_monocat = ', nn_monocat 615 WRITE(numout,*)' change the surface non-solar flux with Tsu or not ln_dqnsice = ', ln_dqnsice 623 616 WRITE(numout,*)' thermal conductivity of the snow rn_cdsn = ', rn_cdsn 624 617 WRITE(numout,*)' -- limthd_dh --' … … 641 634 ENDIF 642 635 ! 636 IF ( rn_hnewice < rn_himin ) CALL ctl_stop( 'STOP', 'lim_thd_init : rn_hnewice should be >= rn_himin' ) 637 ! 643 638 END SUBROUTINE lim_thd_init 644 639 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r8239 r8313 702 702 !!-------------------------------------------------------------------------- 703 703 SUBROUTINE lim_thd_snwblow_2d( pin, pout ) 704 REAL(wp), DIMENSION(:,:), INTENT(in ) :: pin ! previous fraction lead ( pfrld or (1. - a_i_b))704 REAL(wp), DIMENSION(:,:), INTENT(in ) :: pin ! previous fraction lead ( 1. - a_i_b ) 705 705 REAL(wp), DIMENSION(:,:), INTENT(inout) :: pout 706 706 pout = ( 1._wp - ( pin )**rn_betas ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r8239 r8313 92 92 93 93 !! * Local variables 94 INTEGER :: ji ! spatial loop index 95 INTEGER :: ii, ij ! temporary dummy loop index 96 INTEGER :: numeq ! current reference number of equation 97 INTEGER :: jk ! vertical dummy loop index 98 INTEGER :: nconv ! number of iterations in iterative procedure 94 INTEGER :: ji ! spatial loop index 95 INTEGER :: ii, ij ! temporary dummy loop index 96 INTEGER :: numeq ! current reference number of equation 97 INTEGER :: jk ! vertical dummy loop index 99 98 INTEGER :: minnumeqmin, maxnumeqmax 99 INTEGER :: iconv ! number of iterations in iterative procedure 100 INTEGER :: iconv_max = 50 ! max number of iterations in iterative procedure 100 101 101 102 INTEGER, POINTER, DIMENSION(:) :: numeqmin ! reference number of top equation … … 109 110 REAL(wp) :: zkimin = 0.10_wp ! minimum ice thermal conductivity 110 111 REAL(wp) :: ztsu_err = 1.e-5_wp ! range around which t_su is considered as 0°C 111 REAL(wp) :: ztmelt_i ! ice melting temperature 112 REAL(wp) :: zerritmax ! current maximal error on temperature 112 REAL(wp) :: ztmelt_i ! ice melting temperature 113 113 REAL(wp) :: zhsu 114 REAL(wp) :: zdti_max ! current maximal error on temperature 115 REAL(wp) :: zdti_bnd = 1.e-4_wp ! maximal authorized error on temperature 114 116 115 117 REAL(wp), POINTER, DIMENSION(:) :: isnow ! switch for presence (1) or absence (0) of snow … … 122 124 REAL(wp), POINTER, DIMENSION(:) :: zf ! surface flux function 123 125 REAL(wp), POINTER, DIMENSION(:) :: dzf ! derivative of the surface flux function 124 REAL(wp), POINTER, DIMENSION(:) :: z errit! current error on temperature126 REAL(wp), POINTER, DIMENSION(:) :: zdti ! current error on temperature 125 127 REAL(wp), POINTER, DIMENSION(:) :: zdifcase ! case of the equation resolution (1->4) 126 128 REAL(wp), POINTER, DIMENSION(:) :: zftrice ! solar radiation transmitted through the ice … … 168 170 CALL wrk_alloc( jpij, numeqmin, numeqmax ) 169 171 CALL wrk_alloc( jpij, isnow, ztsub, ztsubit, zh_i, zh_s, zfsw ) 170 CALL wrk_alloc( jpij, zf, dzf, zqns_ice_b, z errit, zdifcase, zftrice, zihic, zghe )172 CALL wrk_alloc( jpij, zf, dzf, zqns_ice_b, zdti, zdifcase, zftrice, zihic, zghe ) 171 173 CALL wrk_alloc( jpij,nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0 ) 172 174 CALL wrk_alloc( jpij,nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0 ) … … 290 292 ztsubit(ji) = t_su_1d(ji) ! temperature at the previous iter 291 293 t_su_1d(ji) = MIN( t_su_1d(ji), rt0 - ztsu_err ) ! necessary 292 z errit(ji) = 1000._wp ! initial value of error294 zdti (ji) = 1000._wp ! initial value of error 293 295 END DO 294 296 … … 305 307 END DO 306 308 307 nconv= 0 ! number of iterations308 z erritmax = 1000._wp ! maximal value of error on all points309 310 DO WHILE ( z erritmax > rn_terr_dif .AND. nconv < nn_conv_dif)311 ! 312 nconv = nconv + 1309 iconv = 0 ! number of iterations 310 zdti_max = 1000._wp ! maximal value of error on all points 311 312 DO WHILE ( zdti_max > zdti_bnd .AND. iconv < iconv_max ) 313 ! 314 iconv = iconv + 1 313 315 ! 314 316 !------------------------------------------------------------------------------| … … 452 454 !------------------------------------------------------------------------------| 453 455 ! 454 IF ( ln_ it_qnsice ) THEN456 IF ( ln_dqnsice ) THEN 455 457 DO ji = kideb , kiut 456 458 ! update of the non solar flux according to the update in T_su … … 703 705 ! 704 706 ! check that nowhere it has started to melt 705 ! z errit(ji) is a measure of error, it has to be under terr_dif707 ! zdti(ji) is a measure of error, it has to be under zdti_bnd 706 708 DO ji = kideb , kiut 707 709 t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , rt0 ) , 190._wp ) 708 z errit(ji)= ABS( t_su_1d(ji) - ztsubit(ji) )710 zdti (ji) = ABS( t_su_1d(ji) - ztsubit(ji) ) 709 711 END DO 710 712 … … 712 714 DO ji = kideb , kiut 713 715 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rt0 ), 190._wp ) 714 z errit(ji) = MAX( zerrit(ji), ABS( t_s_1d(ji,jk) - ztstemp(ji,jk) ) )716 zdti (ji) = MAX( zdti(ji), ABS( t_s_1d(ji,jk) - ztstemp(ji,jk) ) ) 715 717 END DO 716 718 END DO … … 720 722 ztmelt_i = -tmut * s_i_1d(ji,jk) + rt0 721 723 t_i_1d(ji,jk) = MAX( MIN( t_i_1d(ji,jk), ztmelt_i ), 190._wp ) 722 z errit(ji) = MAX( zerrit(ji), ABS( t_i_1d(ji,jk) - ztitemp(ji,jk) ) )724 zdti (ji) = MAX( zdti(ji), ABS( t_i_1d(ji,jk) - ztitemp(ji,jk) ) ) 723 725 END DO 724 726 END DO … … 726 728 ! Compute spatial maximum over all errors 727 729 ! note that this could be optimized substantially by iterating only the non-converging points 728 z erritmax = 0._wp730 zdti_max = 0._wp 729 731 DO ji = kideb, kiut 730 z erritmax = MAX( zerritmax, zerrit(ji) )731 END DO 732 IF( lk_mpp ) CALL mpp_max( z erritmax, kcom=ncomm_ice )732 zdti_max = MAX( zdti_max, zdti(ji) ) 733 END DO 734 IF( lk_mpp ) CALL mpp_max( zdti_max, kcom=ncomm_ice ) 733 735 734 736 END DO ! End of the do while iterative procedure … … 745 747 746 748 IF( ln_limctl .AND. lwp ) THEN 747 WRITE(numout,*) ' z erritmax : ', zerritmax748 WRITE(numout,*) ' nconv : ', nconv749 WRITE(numout,*) ' zdti_max : ', zdti_max 750 WRITE(numout,*) ' iconv : ', iconv 749 751 ENDIF 750 752 … … 772 774 773 775 ! --- diagnose the change in non-solar flux due to surface temperature change --- ! 774 IF ( ln_ it_qnsice ) THEN776 IF ( ln_dqnsice ) THEN 775 777 DO ji = kideb, kiut 776 778 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji) - zqns_ice_b(ji) ) * a_i_1d(ji) … … 810 812 CALL wrk_dealloc( jpij, numeqmin, numeqmax ) 811 813 CALL wrk_dealloc( jpij, isnow, ztsub, ztsubit, zh_i, zh_s, zfsw ) 812 CALL wrk_dealloc( jpij, zf, dzf, zqns_ice_b, z errit, zdifcase, zftrice, zihic, zghe )814 CALL wrk_dealloc( jpij, zf, dzf, zqns_ice_b, zdti, zdifcase, zftrice, zihic, zghe ) 813 815 CALL wrk_dealloc( jpij,nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 814 816 CALL wrk_dealloc( jpij,nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r7753 r8313 67 67 !! - Updating ice internal temperature 68 68 !! - Computation of variation of ice volume and mass 69 !! - Computation of frldbafter lateral accretion and69 !! - Computation of a_i after lateral accretion and 70 70 !! update ht_s_1d, ht_i_1d and tbif_1d(:,:) 71 71 !!------------------------------------------------------------------------ -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r8294 r8313 109 109 !---------------------------------------- 110 110 ! fluxes 111 ! pfrld is the lead fraction at the previous time step (actually between TRP and THD) 112 IF( iom_use('qsr_oce') ) CALL iom_put( "qsr_oce" , qsr_oce(:,:) * pfrld(:,:) ) ! solar flux at ocean surface 113 IF( iom_use('qns_oce') ) CALL iom_put( "qns_oce" , qns_oce(:,:) * pfrld(:,:) + qemp_oce(:,:) ) ! non-solar flux at ocean surface 111 IF( iom_use('qsr_oce') ) CALL iom_put( "qsr_oce" , qsr_oce(:,:) * ( 1._wp - at_i_b(:,:) ) ) ! solar flux at ocean surface 112 IF( iom_use('qns_oce') ) CALL iom_put( "qns_oce" , qns_oce(:,:) * ( 1._wp - at_i_b(:,:) ) + qemp_oce(:,:) ) ! non-solar flux at ocean surface 114 113 IF( iom_use('qsr_ice') ) CALL iom_put( "qsr_ice" , SUM( qsr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux at ice surface 115 114 IF( iom_use('qns_ice') ) CALL iom_put( "qns_ice" , SUM( qns_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) + qemp_ice(:,:) ) ! non-solar flux at ice surface 116 115 IF( iom_use('qtr_ice') ) CALL iom_put( "qtr_ice" , SUM( ftr_ice(:,:,:) * a_i_b(:,:,:), dim=3 ) ) ! solar flux transmitted thru ice 117 IF( iom_use('qt_oce' ) ) CALL iom_put( "qt_oce" , ( qsr_oce(:,:) + qns_oce(:,:) ) * pfrld(:,:) + qemp_oce(:,:) )116 IF( iom_use('qt_oce' ) ) CALL iom_put( "qt_oce" , ( qsr_oce(:,:) + qns_oce(:,:) ) * ( 1._wp - at_i_b(:,:) ) + qemp_oce(:,:) ) 118 117 IF( iom_use('qt_ice' ) ) CALL iom_put( "qt_ice" , SUM( ( qns_ice(:,:,:) + qsr_ice(:,:,:) ) & 119 118 & * a_i_b(:,:,:), dim=3 ) + qemp_ice(:,:) ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r8240 r8313 82 82 83 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sprecip_1d !: <==> the 2D sprecip 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: frld_1d !: <==> the 2D frld85 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: at_i_1d !: <==> the 2D at_i 86 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: fhtur_1d !: <==> the 2D fhtur … … 153 152 ! 154 153 ii = ii + 1 155 ALLOCATE( sprecip_1d (jpij) , frld_1d (jpij) ,at_i_1d (jpij) , &154 ALLOCATE( sprecip_1d (jpij) , at_i_1d (jpij) , & 156 155 & fhtur_1d (jpij) , wfx_snw_1d (jpij) , wfx_spr_1d (jpij) , wfx_snw_sum_1d(jpij) , & 157 156 & fhld_1d (jpij) , wfx_sub_1d (jpij) , wfx_bog_1d (jpij) , wfx_bom_1d(jpij) , & -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/ASM/asmbkg.F90
r8306 r8313 146 146 CALL iom_rstput( kt, nitdin_r, inum, 'sshn' , sshn ) 147 147 #if defined key_lim3 148 IF( nn_ice == 2 .OR. nn_ice ==3 ) THEN149 IF( ALLOCATED( frld) ) THEN150 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', 1._wp - frld(:,:) )148 IF( nn_ice == 3 ) THEN 149 IF( ALLOCATED(at_i) ) THEN 150 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', at_i(:,:) ) 151 151 ELSE 152 CALL ctl_warn('Ice concentration not written to background as ice variable frldnot allocated on this timestep')152 CALL ctl_warn('Ice concentration not written to background as ice variable at_i not allocated on this timestep') 153 153 ENDIF 154 154 ENDIF -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r8306 r8313 36 36 USE lib_mpp ! MPP library 37 37 #if defined key_lim3 38 USE ice, ONLY: htm_i, at_i, pfrld, phicif38 USE ice, ONLY: htm_i, at_i, at_i_b 39 39 #endif 40 40 USE sbc_oce ! Surface boundary condition variables. … … 837 837 zohicif(:,:) = htm_i(:,:) 838 838 ! 839 at_i (:,:) = 1. - MIN( MAX( 1.-at_i(:,:) - seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp)840 pfrld = MIN( MAX( pfrld(:,:)- seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp)839 at_i (:,:) = 1. - MIN( MAX( 1.-at_i (:,:) - seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp) 840 at_i_b(:,:) = 1. - MIN( MAX( 1.-at_i_b(:,:) - seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp) 841 841 fr_i(:,:) = at_i(:,:) ! adjust ice fraction 842 842 ! … … 852 852 ! nudge ice depth 853 853 htm_i (:,:) = htm_i (:,:) + zhicifinc(:,:) 854 phicif(:,:) = phicif(:,:) + zhicifinc(:,:)855 854 ! 856 855 ! seaice salinity balancing (to add) … … 889 888 ! Initialize the now fields the background + increment 890 889 at_i(:,:) = 1. - MIN( MAX( 1.-at_i(:,:) - seaice_bkginc(:,:), 0.0_wp), 1.0_wp) 891 pfrld(:,:) = 1.-at_i(:,:)890 at_i_b(:,:) = at_i(:,:) 892 891 fr_i(:,:) = at_i(:,:) ! adjust ice fraction 893 892 ! … … 903 902 ! nudge ice depth 904 903 htm_i (:,:) = htm_i (:,:) + zhicifinc(:,:) 905 phicif(:,:) = phicif(:,:)906 904 ! 907 905 ! seaice salinity balancing (to add) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r7753 r8313 89 89 IF( ln_apr_dyn & ! atmos. pressure 90 90 .OR. ( .NOT.ln_dynspg_ts .AND. (ln_tide_pot .AND. ln_tide) ) & ! tide potential (no time slitting) 91 .OR. nn_ice_embd == 2 ) THEN! embedded sea-ice91 .OR. ln_ice_embd ) THEN ! embedded sea-ice 92 92 ! 93 93 DO jj = 2, jpjm1 … … 123 123 ENDIF 124 124 ! 125 IF( nn_ice_embd == 2) THEN !== embedded sea ice: Pressure gradient due to snow-ice mass ==!125 IF( ln_ice_embd ) THEN !== embedded sea ice: Pressure gradient due to snow-ice mass ==! 126 126 CALL wrk_alloc( jpi,jpj, zpice ) 127 127 ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r8306 r8313 539 539 #if defined key_lim3 540 540 USE ice, ONLY : & ! LIM3 Ice model variables 541 & frld541 & at_i 542 542 #endif 543 543 IMPLICIT NONE … … 564 564 & zgphi2 ! Model latitudes for prof variable 2 565 565 #if ! defined key_lim3 566 REAL(wp), POINTER, DIMENSION(:,:) :: frld566 REAL(wp), POINTER, DIMENSION(:,:) :: at_i 567 567 #endif 568 568 LOGICAL :: llnightav ! Logical for calculating night-time average … … 579 579 CALL wrk_alloc( jpi, jpj, zgphi2 ) 580 580 #if ! defined key_lim3 581 CALL wrk_alloc(jpi,jpj, frld)581 CALL wrk_alloc(jpi,jpj,at_i) 582 582 #endif 583 583 … … 591 591 592 592 !----------------------------------------------------------------------- 593 ! No LIM => frld== 0.0_wp593 ! No LIM => at_i == 0.0_wp 594 594 !----------------------------------------------------------------------- 595 595 #if ! defined key_lim3 596 frld(:,:) = 0.0_wp596 at_i(:,:) = 0.0_wp 597 597 #endif 598 598 !----------------------------------------------------------------------- … … 674 674 CYCLE 675 675 ELSE 676 zsurfvar(:,:) = 1._wp - frld(:,:)676 zsurfvar(:,:) = at_i(:,:) 677 677 ENDIF 678 678 … … 699 699 CALL wrk_dealloc( jpi, jpj, zgphi2 ) 700 700 #if ! defined key_lim3 701 CALL wrk_dealloc(jpi,jpj, frld)701 CALL wrk_dealloc(jpi,jpj,at_i) 702 702 #endif 703 703 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r7788 r8313 47 47 LOGICAL , PUBLIC :: ln_apr_dyn !: Atmospheric pressure forcing used on dynamics (ocean & ice) 48 48 INTEGER , PUBLIC :: nn_ice !: flag for ice in the surface boundary condition (=0/1/2/3) 49 INTEGER , PUBLIC :: nn_ice_embd !: flag for levitating/embedding sea-ice in the ocean 50 ! !: =0 levitating ice (no mass exchange, concentration/dilution effect) 51 ! !: =1 levitating ice with mass and salt exchange but no presure effect 52 ! !: =2 embedded sea-ice (full salt and mass exchanges and pressure) 49 LOGICAL , PUBLIC :: ln_ice_embd !: flag for levitating/embedding sea-ice in the ocean 50 ! !: =F levitating ice with mass and salt exchange but no presure effect 51 ! !: =T embedded sea-ice (full salt and mass exchanges and pressure) 53 52 INTEGER , PUBLIC :: nn_components !: flag for sbc module (including sea-ice) coupling mode (see component definition below) 54 53 INTEGER , PUBLIC :: nn_limflx !: LIM3 Multi-category heat flux formulation -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk.F90
r8306 r8313 40 40 USE lib_fortran ! to use key_nosignedzero 41 41 #if defined key_lim3 42 USE ice , ONLY : u_ice, v_ice, jpl, pfrld,a_i_b, at_i_b42 USE ice , ONLY : u_ice, v_ice, jpl, a_i_b, at_i_b 43 43 USE limthd_dh ! for CALL lim_thd_snwblow 44 44 #endif … … 789 789 ! --- evaporation minus precipitation --- ! 790 790 zsnw(:,:) = 0._wp 791 CALL lim_thd_snwblow( pfrld, zsnw ) ! snow distribution over ice after wind blowing792 emp_oce(:,:) = pfrld(:,:) * zevap(:,:) - ( tprecip(:,:) - sprecip(:,:) ) - sprecip(:,:) * (1._wp - zsnw )791 CALL lim_thd_snwblow( (1.-at_i_b(:,:)), zsnw ) ! snow distribution over ice after wind blowing 792 emp_oce(:,:) = ( 1._wp - at_i_b(:,:) ) * zevap(:,:) - ( tprecip(:,:) - sprecip(:,:) ) - sprecip(:,:) * (1._wp - zsnw ) 793 793 emp_ice(:,:) = SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) - sprecip(:,:) * zsnw 794 794 emp_tot(:,:) = emp_oce(:,:) + emp_ice(:,:) 795 795 796 796 ! --- heat flux associated with emp --- ! 797 qemp_oce(:,:) = - pfrld(:,:) * zevap(:,:) * sst_m(:,:) * rcp& ! evap at sst797 qemp_oce(:,:) = - ( 1._wp - at_i_b(:,:) ) * zevap(:,:) * sst_m(:,:) * rcp & ! evap at sst 798 798 & + ( tprecip(:,:) - sprecip(:,:) ) * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp & ! liquid precip at Tair 799 799 & + sprecip(:,:) * ( 1._wp - zsnw ) * & ! solid precip at min(Tair,Tsnow) … … 803 803 804 804 ! --- total solar and non solar fluxes --- ! 805 qns_tot(:,:) = pfrld(:,:) * qns_oce(:,:) + SUM( a_i_b(:,:,:) * qns_ice(:,:,:), dim=3 ) + qemp_ice(:,:) + qemp_oce(:,:) 806 qsr_tot(:,:) = pfrld(:,:) * qsr_oce(:,:) + SUM( a_i_b(:,:,:) * qsr_ice(:,:,:), dim=3 ) 805 qns_tot(:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + SUM( a_i_b(:,:,:) * qns_ice(:,:,:), dim=3 ) & 806 & + qemp_ice(:,:) + qemp_oce(:,:) 807 qsr_tot(:,:) = ( 1._wp - at_i_b(:,:) ) * qsr_oce(:,:) + SUM( a_i_b(:,:,:) * qsr_ice(:,:,:), dim=3 ) 807 808 808 809 ! --- heat content of precip over ice in J/m3 (to be used in 1D-thermo) --- ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r8306 r8313 1557 1557 !! 1558 1558 !! ** Details 1559 !! qns_tot = pfrld * qns_oce + ( 1 - pfrld ) * qns_ice=> provided1559 !! qns_tot = (1-a) * qns_oce + a * qns_ice => provided 1560 1560 !! + qemp_oce + qemp_ice => recalculated and added up to qns 1561 1561 !! 1562 !! qsr_tot = pfrld * qsr_oce + ( 1 - pfrld ) * qsr_ice=> provided1562 !! qsr_tot = (1-a) * qsr_oce + a * qsr_ice => provided 1563 1563 !! 1564 1564 !! emp_tot = emp_oce + emp_ice => calving is provided and added to emp_tot (and emp_oce). -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r7646 r8313 230 230 CALL lbc_lnk ( fr_iv , 'V', 1. ) 231 231 232 ! ! embedded sea ice 233 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 234 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 235 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 236 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 237 snwice_mass_b(:,:) = snwice_mass(:,:) 238 ELSE 239 snwice_mass (:,:) = 0.0_wp ! no mass exchanges 240 snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges 241 ENDIF 232 ! set the snow+ice mass 233 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 234 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 235 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 236 snwice_mass_b(:,:) = snwice_mass(:,:) 237 242 238 IF( .NOT.ln_rstart ) THEN 243 IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2)deplete the initial ssh below sea-ice area239 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 244 240 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 245 241 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 … … 473 469 CALL nemo2cice(ztmp,vocn,'F', -1. ) 474 470 475 IF( nn_ice_embd == 2) THEN !== embedded sea ice: compute representative ice top surface ==!471 IF( ln_ice_embd ) THEN !== embedded sea ice: compute representative ice top surface ==! 476 472 ! 477 473 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} … … 676 672 CALL lbc_lnk ( fr_iv , 'V', 1. ) 677 673 678 ! ! embedded sea ice 679 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 680 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 681 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 682 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 683 snwice_mass_b(:,:) = snwice_mass(:,:) 684 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / dt 685 ENDIF 674 ! set the snow+ice mass 675 CALL cice2nemo(vsno(:,:,:),ztmp1,'T', 1. ) 676 CALL cice2nemo(vice(:,:,:),ztmp2,'T', 1. ) 677 snwice_mass (:,:) = ( rhosn * ztmp1(:,:) + rhoic * ztmp2(:,:) ) 678 snwice_mass_b(:,:) = snwice_mass(:,:) 679 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / dt 686 680 687 681 ! Release work space -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r8312 r8313 196 196 CALL sbc_lim_bef 197 197 CALL lim_var_glo2eqv ! ht_i and ht_s for ice albedo calculation 198 CALL lim_var_agg(1) ! at_i for coupling (via pfrld) 199 ! 200 pfrld(:,:) = 1._wp - at_i(:,:) 201 phicif(:,:) = vt_i(:,:) 198 CALL lim_var_agg(1) ! at_i for coupling 202 199 203 200 !------------------------------------------------------! … … 221 218 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 222 219 CALL blk_ice_flx( t_su, alb_ice ) 223 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld= pfrld, palbi=alb_ice, psst=sst_m, pist=t_su )220 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld=(1.-at_i_b), palbi=alb_ice, psst=sst_m, pist=t_su ) 224 221 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 225 222 CASE ( jp_purecpl ) 226 223 ! albedo depends on cloud fraction because of non-linear spectral effects 227 224 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 228 CALL sbc_cpl_ice_flx( p_frld= pfrld, palbi=alb_ice, psst=sst_m, pist=t_su )225 CALL sbc_cpl_ice_flx( p_frld=(1.-at_i_b), palbi=alb_ice, psst=sst_m, pist=t_su ) 229 226 IF( nn_limflx == 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 230 227 END SELECT … … 374 371 !!------------------------------------------------------------------- 375 372 INTEGER :: ios ! Local integer output status for namelist read 376 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, rn_amax_n, rn_amax_s, cn_icerst_in, cn_icerst_indir, &373 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, nn_monocat, rn_amax_n, rn_amax_s, cn_icerst_in, cn_icerst_indir, & 377 374 & cn_icerst_out, cn_icerst_outdir, ln_limthd, ln_limdyn, nn_limdyn, rn_uice, rn_vice 378 375 NAMELIST/namicediag/ ln_limdiachk, ln_limdiahsb, ln_limctl, iiceprt, jiceprt … … 401 398 WRITE(numout,*) 'lim_run_init : ice share parameters for dynamics/advection/thermo of sea-ice' 402 399 WRITE(numout,*) ' ~~~~~~' 403 WRITE(numout,*) ' number of ice categories = ', jpl 404 WRITE(numout,*) ' number of ice layers = ', nlay_i 405 WRITE(numout,*) ' number of snow layers = ', nlay_s 406 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 407 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 408 WRITE(numout,*) ' Ice thermodynamics (T) or not (F) ln_limthd = ', ln_limthd 409 WRITE(numout,*) ' Ice dynamics (T) or not (F) ln_limdyn = ', ln_limdyn 410 WRITE(numout,*) ' (ln_limdyn=T) Ice dynamics switch nn_limdyn = ', nn_limdyn 400 WRITE(numout,*) ' number of ice categories jpl = ', jpl 401 WRITE(numout,*) ' number of ice layers nlay_i = ', nlay_i 402 WRITE(numout,*) ' number of snow layers nlay_s = ', nlay_s 403 WRITE(numout,*) ' virtual ITD mono-category param (1-4) or not (0) nn_monocat = ', nn_monocat 404 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 405 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 406 WRITE(numout,*) ' Ice thermodynamics (T) or not (F) ln_limthd = ', ln_limthd 407 WRITE(numout,*) ' Ice dynamics (T) or not (F) ln_limdyn = ', ln_limdyn 408 WRITE(numout,*) ' (ln_limdyn=T) Ice dynamics switch nn_limdyn = ', nn_limdyn 411 409 WRITE(numout,*) ' 2: total' 412 410 WRITE(numout,*) ' 1: advection only (no diffusion, no ridging/rafting)' 413 411 WRITE(numout,*) ' 0: advection only (as 1 + prescribed velocity, bypass rheology)' 414 WRITE(numout,*) ' (ln_limdyn=T) prescribed u-vel (case nn_limdyn=0) = ', rn_uice415 WRITE(numout,*) ' (ln_limdyn=T) prescribed v-vel (case nn_limdyn=0) = ', rn_vice412 WRITE(numout,*) ' (ln_limdyn=T) prescribed u-vel (case nn_limdyn=0) = ', rn_uice 413 WRITE(numout,*) ' (ln_limdyn=T) prescribed v-vel (case nn_limdyn=0) = ', rn_vice 416 414 WRITE(numout,*) 417 415 WRITE(numout,*) '...and ice diagnostics' … … 424 422 ENDIF 425 423 ! 424 IF ( ( jpl > 1 ) .AND. ( nn_monocat == 1 ) ) THEN 425 nn_monocat = 0 426 IF(lwp) WRITE(numout,*) 427 IF(lwp) WRITE(numout,*) ' nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen' 428 ENDIF 429 IF ( ( jpl == 1 ) .AND. ( nn_monocat == 0 ) ) THEN 430 CALL ctl_stop( 'STOP', 'lim_run_init : if jpl=1 then nn_monocat should be between 1 and 4' ) 431 ENDIF 432 ! 426 433 ! sea-ice timestep and inverse 427 434 rdt_ice = REAL(nn_fsbc) * rdt … … 449 456 !!------------------------------------------------------------------- 450 457 INTEGER :: ios ! Local integer output status for namelist read 451 NAMELIST/namiceitd/ nn_catbnd,rn_himean458 NAMELIST/namiceitd/ rn_himean 452 459 ! 453 460 INTEGER :: jl ! dummy loop index … … 469 476 WRITE(numout,*) 'lim_itd_init : Initialization of ice cat distribution ' 470 477 WRITE(numout,*) '~~~~~~~~~~~~' 471 WRITE(numout,*) ' shape of ice categories distribution nn_catbnd = ', nn_catbnd 472 WRITE(numout,*) ' mean ice thickness in the domain (only active if nn_catbnd=2) rn_himean = ', rn_himean 478 WRITE(numout,*) ' mean ice thickness in the domain rn_himean = ', rn_himean 473 479 ENDIF 474 480 ! … … 479 485 hi_max(:) = 0._wp 480 486 ! 481 SELECT CASE ( nn_catbnd ) ! type of ice categories distribution 482 ! 483 CASE (1) !== tanh function (CICE) ==! 484 zc1 = 3._wp / REAL( jpl, wp ) 485 zc2 = 10._wp * zc1 486 zc3 = 3._wp 487 DO jl = 1, jpl 488 zx1 = REAL( jl-1, wp ) / REAL( jpl, wp ) 489 hi_max(jl) = hi_max(jl-1) + zc1 + zc2 * (1._wp + TANH( zc3 * (zx1 - 1._wp ) ) ) 490 END DO 491 ! 492 CASE (2) !== h^(-alpha) function ==! 493 zalpha = 0.05_wp 494 zhmax = 3._wp * rn_himean 495 DO jl = 1, jpl 496 znum = jpl * ( zhmax+1 )**zalpha 497 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 498 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 499 END DO 500 ! 501 END SELECT 487 !== h^(-alpha) function ==! 488 zalpha = 0.05_wp 489 zhmax = 3._wp * rn_himean 490 DO jl = 1, jpl 491 znum = jpl * ( zhmax+1 )**zalpha 492 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 493 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 494 END DO 495 ! 502 496 ! 503 497 DO jl = 1, jpl ! mean thickness by category -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r8306 r8313 90 90 & ln_usr , ln_flx , ln_blk , & 91 91 & ln_cpl , ln_mixcpl, nn_components, nn_limflx, & 92 & nn_ice , nn_ice_embd, &92 & nn_ice , ln_ice_embd, & 93 93 & ln_traqsr, ln_dm2dc , & 94 94 & ln_rnf , nn_fwb , ln_ssr , ln_isf , ln_apr_dyn , & … … 139 139 WRITE(numout,*) ' Multicategory heat flux formulation (LIM3) nn_limflx = ', nn_limflx 140 140 WRITE(numout,*) ' Sea-ice : ' 141 WRITE(numout,*) ' ice management in the sbc (=0/1/ 2/3) nn_ice = ', nn_ice142 WRITE(numout,*) ' ice -ocean embedded/levitating (=0/1/2) nn_ice_embd = ', nn_ice_embd141 WRITE(numout,*) ' ice management in the sbc (=0/1/3/4) nn_ice = ', nn_ice 142 WRITE(numout,*) ' ice embedded into ocean ln_ice_embd = ', ln_ice_embd 143 143 WRITE(numout,*) ' Misc. options of sbc : ' 144 144 WRITE(numout,*) ' Light penetration in temperature Eq. ln_traqsr = ', ln_traqsr … … 199 199 CASE( 1 ) !- Ice-cover climatology ("Ice-if" model) 200 200 CASE( 3 ) !- LIM3 ice model 201 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : LIM3 sea-ice models require nn_ice_embd = 1 or 2' )202 201 CASE( 4 ) !- CICE ice model 203 202 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : CICE sea-ice model requires ln_blk or ln_cpl = T' ) 204 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : CICE sea-ice models require nn_ice_embd = 1 or 2' )205 203 IF( lk_agrif ) CALL ctl_stop( 'sbc_init : CICE sea-ice model not currently available with AGRIF' ) 206 204 CASE DEFAULT !- not supported -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r7753 r8313 48 48 LOGICAL , PUBLIC :: ln_qsr_2bd !: 2 band light absorption flag 49 49 LOGICAL , PUBLIC :: ln_qsr_bio !: bio-model light absorption flag 50 LOGICAL , PUBLIC :: ln_qsr_ice !: light penetration for ice-model LIM3 (clem)50 LOGICAL , PUBLIC :: ln_qsr_ice !: light penetration for ice-model 51 51 INTEGER , PUBLIC :: nn_chldta !: use Chlorophyll data (=1) or not (=0) 52 52 REAL(wp), PUBLIC :: rn_abs !: fraction absorbed in the very near surface (RGB & 2 bands) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r7753 r8313 63 63 INTEGER :: ji, jj, jn ! dummy loop indices 64 64 REAL(wp) :: zse3t, zrtrn, zratio, zfact ! temporary scalars 65 REAL(wp) :: z switch, zftra, zcd, zdtra, ztfx, ztra! temporary scalars65 REAL(wp) :: zftra, zcd, zdtra, ztfx, ztra ! temporary scalars 66 66 CHARACTER (len=22) :: charout 67 67 REAL(wp), POINTER, DIMENSION(:,: ) :: zsfx … … 77 77 ! 78 78 zrtrn = 1.e-15_wp 79 80 SELECT CASE( nn_ice_embd ) ! levitating or embedded sea-ice option81 CASE( 0 ) ; zswitch = 1 ! (0) standard levitating sea-ice : salt exchange only82 CASE( 1, 2 ) ; zswitch = 0 ! (1) levitating sea-ice: salt and volume exchange but no pressure effect83 ! ! (2) embedded sea-ice : salt and volume fluxes and pressure84 END SELECT85 79 86 80 IF( kt == nittrc000 ) THEN … … 145 139 ! tracer flux only : add concentration dilution term in net tracer flux, no F-M in volume flux 146 140 ! tracer and mass fluxes : no concentration dilution term in net tracer flux, F-M term in volume flux 147 ztfx = zftra + zswitch * zcd ! net tracer flux (+C/D if no ice/ocean mass exchange)141 ztfx = zftra ! net tracer flux 148 142 149 143 zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90
r7881 r8313 63 63 USE sbc_oce , ONLY : ln_rnf => ln_rnf !: runoffs / runoff mouths 64 64 USE sbc_oce , ONLY : fr_i => fr_i !: ice fraction (between 0 to 1) 65 USE sbc_oce , ONLY : nn_ice_embd => nn_ice_embd !: flag for levitating/embedding sea-ice in the ocean66 65 USE sbc_oce , ONLY : atm_co2 => atm_co2 ! atmospheric pCO2 67 66 USE traqsr , ONLY : rn_abs => rn_abs !: fraction absorbed in the very near surface
Note: See TracChangeset
for help on using the changeset viewer.