Changeset 1037 for trunk/NEMO
- Timestamp:
- 2008-05-30T18:21:28+02:00 (16 years ago)
- Location:
- trunk/NEMO
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/C1D_SRC/diawri_c1d.F90
r900 r1037 25 25 USE ice_oce ! ice variables 26 26 USE phycst ! physical constants 27 USE ocfzpt ! ???28 27 USE zdfmxl ! mixed layer 29 28 USE daymod ! calendar … … 185 184 CALL histdef( nid_T, "somixhgt", "Turbocline Depth" , "m" , & ! hmld 186 185 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 187 CALL histdef( nid_T, "soicecov", "Ice Cover" , "[0,1]" , & ! freeze186 CALL histdef( nid_T, "soicecov", "Ice Fraction" , "[0,1]" , & ! fr_i 188 187 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 189 188 IF( ln_ssr ) THEN … … 304 303 CALL histwrite( nid_T, "somxlavt", it, zw2d , ndim_hT, ndex_hT ) ! Kz at bottom of mixed layer 305 304 CALL histwrite( nid_T, "somixhgt", it, hmld , ndim_hT, ndex_hT ) ! turbocline depth 306 CALL histwrite( nid_T, "soicecov", it, fr eeze , ndim_hT, ndex_hT ) ! ice cover305 CALL histwrite( nid_T, "soicecov", it, fr_i , ndim_hT, ndex_hT ) ! ice fraction 307 306 IF( ln_ssr ) THEN 308 307 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping -
trunk/NEMO/C1D_SRC/step_c1d.F90
r922 r1037 26 26 USE sbcmod ! surface boundary condition (sbc routine) 27 27 USE sbcrnf ! surface boundary condition: runoff variables 28 USE ocfzpt ! surface ocean freezing point (oc_fz_pt routine)29 28 30 29 USE trcstp ! passive tracer time-stepping (trc_stp routine) … … 185 184 186 185 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 187 ! Computation of diagnostic variables188 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<189 ! N.B. ua, va, ta, sa arrays are used as workspace in this section190 !-----------------------------------------------------------------------191 CALL oc_fz_pt ! ocean surface freezing temperature192 193 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>194 186 ! Control and restarts 195 187 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -
trunk/NEMO/LIM_SRC_2/iceini_2.F90
r900 r1037 21 21 USE sbc_ice ! surface boundary condition: ice 22 22 USE phycst ! Define parameters for the routines 23 USE ocfzpt24 23 USE ice_2 25 24 USE limmsh_2 … … 75 74 76 75 tn_ice(:,:) = sist(:,:) ! initialisation of ice temperature 77 fr eeze(:,:) = 1.0 - frld(:,:) ! initialisation of sea/ice cover76 fr_i (:,:) = 1.0 - frld(:,:) ! initialisation of sea-ice fraction 78 77 # if defined key_coupled 79 78 alb_ice(:,:) = albege(:,:) ! sea-ice albedo -
trunk/NEMO/LIM_SRC_2/limistate_2.F90
r888 r1037 19 19 !!---------------------------------------------------------------------- 20 20 USE phycst 21 USE ocfzpt22 21 USE par_ice_2 ! ice parameters 23 22 USE ice_oce ! ice variables 24 23 USE dom_ice_2 24 USE eosbn2 ! equation of state 25 25 USE lbclnk 26 26 USE oce … … 72 72 IF( .NOT. ln_limini ) THEN 73 73 74 ! Initialisation at tn or -2 if ice 74 tfu(:,:) = tfreez( sn(:,:,1) ) * tmask(:,:,1) ! freezing/melting point of sea water [Celcius] 75 75 76 DO jj = 1, jpj 76 77 DO ji = 1, jpi 77 zbin = MAX( 0., SIGN( 1., fzptn(ji,jj) - tn(ji,jj,1) ) ) 78 ztn(ji,jj) = ( (1.-zbin) * tn(ji,jj,1) - 2. * zbin + rt0 ) * tmask(ji,jj,1) 79 END DO 80 END DO 81 82 ! tfu: Melting point of sea water [Kelvin] 83 zs0 = 34.e0 84 ztf = rt0 + ( - 0.0575 + 1.710523e-3 * SQRT( zs0 ) - 2.154996e-4 * zs0 ) * zs0 85 tfu(:,:) = ztf 86 87 DO jj = 1, jpj 88 DO ji = 1, jpi 89 !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice 90 zidto = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - tfu(ji,jj) - ttest) ) ) 91 78 ! ! ice if sst <= t-freez + ttest 79 IF( tn(ji,jj,1) - tfu(ji,jj) >= ttest ) THEN ; zidto = 0.e0 ! no ice 80 ELSE ; zidto = 1.e0 ! ice 81 ENDIF 82 ! 92 83 IF( fcor(ji,jj) >= 0.e0 ) THEN !-- Northern hemisphere. 93 84 hicif(ji,jj) = zidto * hginn … … 101 92 END DO 102 93 END DO 94 95 tfu(:,:) = tfu(:,:) + rt0 ! ftu converted from Celsius to Kelvin (rt0 over land) 103 96 104 97 sist (:,:) = tfu(:,:) -
trunk/NEMO/LIM_SRC_2/limsbc_2.F90
r888 r1037 20 20 USE sbc_oce ! surface boundary condition 21 21 USE phycst ! physical constants 22 USE ocfzpt ! surface ocean freezing point23 22 USE ice_oce ! sea-ice variable 24 23 USE ice_2 ! LIM sea-ice variables … … 61 60 !! - Update 62 61 !! 63 !! ** Outputs : - qsr : sea heat flux: solar 64 !! - qns : sea heat flux: non solar 65 !! - emp : freshwater budget: volume flux 66 !! - emps : freshwater budget: concentration/dillution 67 !! - utau : sea surface i-stress (ocean referential) 68 !! - vtau : sea surface j-stress (ocean referential) 62 !! ** Outputs : - qsr : sea heat flux: solar 63 !! - qns : sea heat flux: non solar 64 !! - emp : freshwater budget: volume flux 65 !! - emps : freshwater budget: concentration/dillution 66 !! - utau : sea surface i-stress (ocean referential) 67 !! - vtau : sea surface j-stress (ocean referential) 68 !! - fr_i : ice fraction 69 !! - tn_ice : sea-ice surface temperature 70 !! - alb_ice : sea-ice alberdo (lk_cpl=T) 69 71 !! 70 72 !! References : Goosse, H. et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90. … … 214 216 !-----------------------------------------------! 215 217 216 fr eeze(:,:) = 1.0 - frld(:,:) ! Sea ice cover217 tn_ice(:,:) = sist(:,:) ! Ice surface temperature218 fr_i (:,:) = 1.0 - frld(:,:) ! sea-ice fraction 219 tn_ice(:,:) = sist(:,:) ! sea-ice surface temperature 218 220 219 221 #if defined key_coupled … … 234 236 CALL prt_ctl(tab2d_1=utau , clinfo1=' lim_sbc: utau : ', mask1=umask, & 235 237 & tab2d_2=vtau , clinfo2=' vtau : ' , mask2=vmask ) 236 CALL prt_ctl(tab2d_1=fr eeze, clinfo1=' lim_sbc: freeze: ', tab2d_2=tn_ice, clinfo2=' tn_ice : ')238 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' lim_sbc: fr_i : ', tab2d_2=tn_ice, clinfo2=' tn_ice : ') 237 239 ENDIF 238 240 -
trunk/NEMO/LIM_SRC_3/iceini.F90
r921 r1037 16 16 USE sbc_ice ! Surface boundary condition: ice fields 17 17 USE phycst ! Define parameters for the routines 18 USE ocfzpt19 18 USE ice 20 19 USE limmsh … … 93 92 ENDIF 94 93 95 fr eeze(:,:) = at_i(:,:) ! initialisation of sea/ice cover94 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction 96 95 # if defined key_coupled 97 96 Must be adpated to LIM3 -
trunk/NEMO/LIM_SRC_3/limistate.F90
r921 r1037 13 13 !! * Modules used 14 14 USE phycst 15 USE ocfzpt16 15 USE oce ! dynamics and tracers variables 17 16 USE dom_oce … … 19 18 USE par_ice ! ice parameters 20 19 USE ice_oce ! ice variables 20 USE eosbn2 ! equation of state 21 21 USE in_out_manager 22 22 USE dom_ice … … 74 74 INTEGER :: ji, jj, jk, jl ! dummy loop indices 75 75 76 REAL(wp) :: zidto,& ! temporary scalar77 zs0, ztf, zbin,&76 REAL(wp) :: & ! temporary scalar 77 zs0, ztf, & 78 78 zeps6, zeps, ztmelts, & 79 79 epsi06 … … 81 81 zgfactorn, zhin, & 82 82 zgfactors, zhis 83 REAL(wp), DIMENSION(jpi,jpj) :: &84 ztn85 83 REAL(wp) :: & 86 84 zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs 85 REAL(wp), DIMENSION(jpi,jpj) :: zidto ! ice indicator 87 86 !-------------------------------------------------------------------- 88 87 … … 94 93 CALL lim_istate_init ! reading the initials parameters of the ice 95 94 96 ! Initialisation at tn or -2 if ice 97 DO jj = 1, jpj 95 !!gm in lim2 the initialisation if only done if required in the namelist : 96 !!gm IF( .NOT. ln_limini ) THEN 97 !!gm this should be added in lim3 namelist... 98 99 !-------------------------------------------------------------------- 100 ! 2) Ice initialization (hi,hs,frld,t_su,sm_i,t_i,t_s) | 101 !-------------------------------------------------------------------- 102 103 IF(lwp) WRITE(numout,*) 104 IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization ' 105 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' 106 107 t_bo(:,:) = tfreez( sn(:,:,1) ) * tmask(:,:,1) ! freezing/melting point of sea water [Celcius] 108 109 DO jj = 1, jpj ! ice if sst <= t-freez + ttest 98 110 DO ji = 1, jpi 99 zbin = MAX( 0., SIGN( 1., fzptn(ji,jj) - tn(ji,jj,1) ) ) 100 ztn(ji,jj) = ( (1.-zbin) * tn(ji,jj,1) - 2. * zbin + rt0 ) * tmask(ji,jj,1) 111 IF( tn(ji,jj,1) - t_bo(ji,jj) >= ttest ) THEN ; zidto(ji,jj) = 0.e0 ! no ice 112 ELSE ; zidto(ji,jj) = 1.e0 ! ice 113 ENDIF 101 114 END DO 102 115 END DO 103 116 104 !-------------------------------------------------------------------- 105 ! 2) Ice initialization (hi,hs,frld,t_su,sm_i,t_i,t_s) | 106 !-------------------------------------------------------------------- 107 108 WRITE(numout,*) 109 WRITE(numout,*) 'lim_istate : Ice initialization ' 110 WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' 111 112 ! reference salinity 34psu 113 zs0 = 34.e0 114 ztf = ABS ( rt0 - 0.0575 * zs0 & 115 & + 1.710523e-03 * zs0 * SQRT( zs0 ) & 116 & - 2.154996e-04 * zs0 *zs0 ) 117 t_bo(:,:) = t_bo(:,:) + rt0 ! t_bo converted from Celsius to Kelvin (rt0 over land) 117 118 118 119 ! constants for heat contents 119 120 zeps = 1.0d-20 120 121 zeps6 = 1.0d-06 121 122 ! t_bo: Seawater freezing point123 t_bo(:,:) = ztf124 122 125 123 ! zgfactor for initial ice distribution … … 148 146 zh3 = zh3 + zh*zh*zh 149 147 END DO 150 WRITE(numout,*) ' zh1 : ', zh1151 WRITE(numout,*) ' zh2 : ', zh2152 WRITE(numout,*) ' zh3 : ', zh3148 IF(lwp) WRITE(numout,*) ' zh1 : ', zh1 149 IF(lwp) WRITE(numout,*) ' zh2 : ', zh2 150 IF(lwp) WRITE(numout,*) ' zh3 : ', zh3 153 151 154 152 zvol = aginn_u*hginn_u … … 159 157 ENDIF 160 158 161 WRITE(numout,*) ' zvol: ', zvol162 WRITE(numout,*) ' zare: ', zare163 WRITE(numout,*) ' zbn : ', zbn164 WRITE(numout,*) ' zan : ', zan159 IF(lwp) WRITE(numout,*) ' zvol: ', zvol 160 IF(lwp) WRITE(numout,*) ' zare: ', zare 161 IF(lwp) WRITE(numout,*) ' zbn : ', zbn 162 IF(lwp) WRITE(numout,*) ' zan : ', zan 165 163 166 164 zvol = agins_u*hgins_u … … 171 169 ENDIF 172 170 173 WRITE(numout,*) ' zvol: ', zvol174 WRITE(numout,*) ' zare: ', zare175 WRITE(numout,*) ' zbn : ', zbn176 WRITE(numout,*) ' zan : ', zan171 IF(lwp) WRITE(numout,*) ' zvol: ', zvol 172 IF(lwp) WRITE(numout,*) ' zare: ', zare 173 IF(lwp) WRITE(numout,*) ' zbn : ', zbn 174 IF(lwp) WRITE(numout,*) ' zan : ', zan 177 175 178 176 !end of new lines … … 201 199 ! END retour a LIMA_MEC 202 200 !!! 201 202 !!gm optimisation : loop over the ice categories inside the ji, jj loop !!! 203 203 204 DO jj = 1, jpj 204 205 DO ji = 1, jpi 205 206 !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice207 zidto = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - t_bo(ji,jj) - ttest) ) )208 206 209 207 !--- Northern hemisphere … … 218 216 219 217 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) ! loop over ice thickness categories 220 a_i(ji,jj,jl) = zidto * aginn_u221 ht_i(ji,jj,jl) = zidto * hginn_u218 a_i(ji,jj,jl) = zidto(ji,jj) * aginn_u 219 ht_i(ji,jj,jl) = zidto(ji,jj) * hginn_u 222 220 v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 223 221 END DO … … 227 225 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) ! loop over ice thickness categories 228 226 zhin(1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0 229 a_i(ji,jj,jl) = zidto * MAX( zgfactorn(1) * exp(-(zhin(1)-hginn_u)* &227 a_i(ji,jj,jl) = zidto(ji,jj) * MAX( zgfactorn(1) * exp(-(zhin(1)-hginn_u)* & 230 228 (zhin(1)-hginn_u)/2.0) , epsi06) 231 229 ! new line 232 a_i(ji,jj,jl) = zidto * ( zan * zhin(1) * zhin(1) + zbn * zhin(1) )233 ht_i(ji,jj,jl) = zidto * zhin(1)230 a_i(ji,jj,jl) = zidto(ji,jj) * ( zan * zhin(1) * zhin(1) + zbn * zhin(1) ) 231 ht_i(ji,jj,jl) = zidto(ji,jj) * zhin(1) 234 232 v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 235 233 END DO … … 245 243 ! DO jl = ice_cat_bounds(2,1), ice_cat_bounds(2,2) ! loop over ice thickness categories 246 244 ! zhin(2) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0 247 ! a_i(ji,jj,jl) = zidto * MAX( zgfactorn(2) * exp(-(zhin(2)-hginn_d)* &245 ! a_i(ji,jj,jl) = zidto(ji,jj) * MAX( zgfactorn(2) * exp(-(zhin(2)-hginn_d)* & 248 246 ! (zhin(2)-hginn_d)/2.0) , epsi06) 249 ! ht_i(ji,jj,jl) = zidto * zhin(2)247 ! ht_i(ji,jj,jl) = zidto(ji,jj) * zhin(2) 250 248 ! v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 251 249 ! END DO … … 265 263 ! Snow depth 266 264 !------------- 267 ht_s(ji,jj,jl) = zidto * hninn265 ht_s(ji,jj,jl) = zidto(ji,jj) * hninn 268 266 v_s(ji,jj,jl) = ht_s(ji,jj,jl)*a_i(ji,jj,jl) 269 267 … … 271 269 ! Ice salinity 272 270 !--------------- 273 sm_i(ji,jj,jl) = zidto * sinn + ( 1.0 - zidto) * 0.1271 sm_i(ji,jj,jl) = zidto(ji,jj) * sinn + ( 1.0 - zidto(ji,jj) ) * 0.1 274 272 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 275 273 … … 277 275 ! Ice age 278 276 !---------- 279 o_i(ji,jj,jl) = zidto * 1.0 + ( 1.0 - zidto)277 o_i(ji,jj,jl) = zidto(ji,jj) * 1.0 + ( 1.0 - zidto(ji,jj) ) 280 278 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl) 281 279 … … 284 282 !------------------------------ 285 283 286 t_su(ji,jj,jl) = zidto * 270.0 + ( 1.0 - zidto) * t_bo(ji,jj)284 t_su(ji,jj,jl) = zidto(ji,jj) * 270.0 + ( 1.0 - zidto(ji,jj) ) * t_bo(ji,jj) 287 285 288 286 !------------------------------------ … … 291 289 292 290 DO jk = 1, nlay_s 293 t_s(ji,jj,jk,jl) = zidto * 270.00 + ( 1.0 - zidto) * rtt291 t_s(ji,jj,jk,jl) = zidto(ji,jj) * 270.00 + ( 1.0 - zidto(ji,jj) ) * rtt 294 292 ! Snow energy of melting 295 e_s(ji,jk,jk,jl) = zidto * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus )293 e_s(ji,jk,jk,jl) = zidto(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 296 294 ! Change dimensions 297 295 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac … … 306 304 307 305 DO jk = 1, nlay_i 308 t_i(ji,jj,jk,jl) = zidto *270.00 + ( 1.0 - zidto) * rtt309 s_i(ji,jj,jk,jl) = zidto * sinn + ( 1.0 - zidto) * 0.1306 t_i(ji,jj,jk,jl) = zidto(ji,jj)*270.00 + ( 1.0 - zidto(ji,jj) ) * rtt 307 s_i(ji,jj,jk,jl) = zidto(ji,jj) * sinn + ( 1.0 - zidto(ji,jj) ) * 0.1 310 308 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K 311 309 312 310 ! heat content per unit volume 313 e_i(ji,jj,jk,jl) = zidto * rhoic * &311 e_i(ji,jj,jk,jl) = zidto(ji,jj) * rhoic * & 314 312 ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 315 313 + lfus * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-zeps) ) & … … 340 338 341 339 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) ! loop over ice thickness categories 342 a_i(ji,jj,jl) = zidto * agins_u343 ht_i(ji,jj,jl) = zidto * hgins_u340 a_i(ji,jj,jl) = zidto(ji,jj) * agins_u 341 ht_i(ji,jj,jl) = zidto(ji,jj) * hgins_u 344 342 v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 345 343 END DO … … 351 349 352 350 zhis(1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0 353 a_i(ji,jj,jl) = zidto * MAX( zgfactors(1) * exp(-(zhis(1)-hgins_u) * &351 a_i(ji,jj,jl) = zidto(ji,jj) * MAX( zgfactors(1) * exp(-(zhis(1)-hgins_u) * & 354 352 (zhis(1)-hgins_u)/2.0) , epsi06 ) 355 353 ! new line square distribution volume conserving 356 a_i(ji,jj,jl) = zidto * ( zas * zhis(1) * zhis(1) + zbs * zhis(1) )357 ht_i(ji,jj,jl) = zidto * zhis(1)354 a_i(ji,jj,jl) = zidto(ji,jj) * ( zas * zhis(1) * zhis(1) + zbs * zhis(1) ) 355 ht_i(ji,jj,jl) = zidto(ji,jj) * zhis(1) 358 356 v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 359 357 … … 369 367 ! DO jl = ice_cat_bounds(2,1), ice_cat_bounds(2,2) !over thickness categories 370 368 ! zhis(2) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0 371 ! a_i(ji,jj,jl) = zidto*MAX( zgfactors(2) * exp(-(zhis(2)-hgins_d)*(zhis(2)-hgins_d)/2.0), epsi06 ) 372 ! ht_i(ji,jj,jl) = zidto * zhis(2) 369 ! a_i(ji,jj,jl) = zidto(ji,jj)*MAX( zgfactors(2) & 370 ! & * exp(-(zhis(2)-hgins_d)*(zhis(2)-hgins_d)/2.0), epsi06 ) 371 ! ht_i(ji,jj,jl) = zidto(ji,jj) * zhis(2) 373 372 ! v_i(ji,jj,jl) = ht_i(ji,jj,jl)*a_i(ji,jj,jl) 374 373 ! END DO … … 389 388 !--------------- 390 389 391 ht_s(ji,jj,jl) = zidto * hnins390 ht_s(ji,jj,jl) = zidto(ji,jj) * hnins 392 391 v_s(ji,jj,jl) = ht_s(ji,jj,jl)*a_i(ji,jj,jl) 393 392 … … 396 395 !--------------- 397 396 398 sm_i(ji,jj,jl) = zidto * sins + ( 1.0 - zidto) * 0.1397 sm_i(ji,jj,jl) = zidto(ji,jj) * sins + ( 1.0 - zidto(ji,jj) ) * 0.1 399 398 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 400 399 … … 403 402 !---------- 404 403 405 o_i(ji,jj,jl) = zidto * 1.0 + ( 1.0 - zidto)404 o_i(ji,jj,jl) = zidto(ji,jj) * 1.0 + ( 1.0 - zidto(ji,jj) ) 406 405 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl) 407 406 … … 410 409 !------------------------------ 411 410 412 t_su(ji,jj,jl) = zidto * 270.0 + ( 1.0 - zidto) * t_bo(ji,jj)411 t_su(ji,jj,jl) = zidto(ji,jj) * 270.0 + ( 1.0 - zidto(ji,jj) ) * t_bo(ji,jj) 413 412 414 413 !---------------------------------- … … 417 416 418 417 DO jk = 1, nlay_s 419 t_s(ji,jj,jk,jl) = zidto * 270.00 + ( 1.0 - zidto) * rtt418 t_s(ji,jj,jk,jl) = zidto(ji,jj) * 270.00 + ( 1.0 - zidto(ji,jj) ) * rtt 420 419 ! Snow energy of melting 421 e_s(ji,jj,jk,jl) = zidto * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus )420 e_s(ji,jj,jk,jl) = zidto(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 422 421 ! Change dimensions 423 422 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac … … 432 431 433 432 DO jk = 1, nlay_i 434 t_i(ji,jj,jk,jl) = zidto *270.00 + ( 1.0 - zidto) * rtt435 s_i(ji,jj,jk,jl) = zidto * sins + ( 1.0 - zidto) * 0.1433 t_i(ji,jj,jk,jl) = zidto(ji,jj)*270.00 + ( 1.0 - zidto(ji,jj) ) * rtt 434 s_i(ji,jj,jk,jl) = zidto(ji,jj) * sins + ( 1.0 - zidto(ji,jj) ) * 0.1 436 435 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K 437 436 438 437 ! heat content per unit volume 439 e_i(ji,jj,jk,jl) = zidto * rhoic * &438 e_i(ji,jj,jk,jl) = zidto(ji,jj) * rhoic * & 440 439 ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 441 440 + lfus * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-zeps) ) & -
trunk/NEMO/LIM_SRC_3/limsbc.F90
r921 r1037 21 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 22 USE phycst ! physical constants 23 USE ocfzpt ! surface ocean freezing point24 23 USE ice_oce ! sea-ice variable 25 24 USE ice ! LIM sea-ice variables … … 225 224 !! - Update the ocean sbc 226 225 !! 227 !! ** Outputs : - qsr : sea heat flux: solar 228 !! - qns : sea heat flux: non solar 229 !! - emp : freshwater budget: volume flux 230 !! - emps : freshwater budget: concentration/dillution 226 !! ** Outputs : - qsr : sea heat flux: solar 227 !! - qns : sea heat flux: non solar 228 !! - emp : freshwater budget: volume flux 229 !! - emps : freshwater budget: concentration/dillution 230 !! - fr_i : ice fraction 231 !! - tn_ice : sea-ice surface temperature 232 !! - alb_ice : sea-ice alberdo (lk_cpl=T) 231 233 !! 232 234 !! References : Goosse, H. et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90. … … 422 424 !-----------------------------------------------! 423 425 424 fr eeze(:,:) = at_i(:,:) ! Sea ice cover426 fr_i (:,:) = at_i(:,:) ! Sea-ice fraction 425 427 tn_ice(:,:,:) = t_su(:,:,:) ! Ice surface temperature 426 428 … … 440 442 CALL prt_ctl( tab2d_1=qsr , clinfo1=' lim_sbc: qsr : ', tab2d_2=qns , clinfo2=' qns : ' ) 441 443 CALL prt_ctl( tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2=emps, clinfo2=' emps : ' ) 442 CALL prt_ctl( tab2d_1=fr eeze, clinfo1=' lim_sbc: freeze: ' )444 CALL prt_ctl( tab2d_1=fr_i , clinfo1=' lim_sbc: fr_i : ' ) 443 445 CALL prt_ctl( tab3d_1=tn_ice, clinfo1=' lim_sbc: tn_ice : ', kdim=jpl ) 444 446 ENDIF -
trunk/NEMO/OPA_SRC/DIA/diawri.F90
r895 r1037 18 18 USE sbcssr ! restoring term toward SST/SSS climatology 19 19 USE phycst ! physical constants 20 USE ocfzpt ! ocean freezing point21 20 USE zdfmxl ! mixed layer 22 21 USE daymod ! calendar … … 271 270 CALL histdef( nid_T, "somixhgt", "Turbocline Depth" , "m" , & ! hmld 272 271 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 273 CALL histdef( nid_T, "soicecov", "Ice Cover" , "[0,1]" , & ! freeze272 CALL histdef( nid_T, "soicecov", "Ice fraction" , "[0,1]" , & ! fr_i 274 273 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 275 274 #if ! defined key_coupled … … 433 432 CALL histwrite( nid_T, "somxl010", it, hmlp , ndim_hT, ndex_hT ) ! mixed layer depth 434 433 CALL histwrite( nid_T, "somixhgt", it, hmld , ndim_hT, ndex_hT ) ! turbocline depth 435 CALL histwrite( nid_T, "soicecov", it, fr eeze , ndim_hT, ndex_hT ) ! ice cover434 CALL histwrite( nid_T, "soicecov", it, fr_i , ndim_hT, ndex_hT ) ! ice fraction 436 435 #if ! defined key_coupled 437 436 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping … … 622 621 CALL histdef( id_i, "soshfldo", "Shortwave Radiation" , "W/m2" , & ! solar flux 623 622 & jpi, jpj, nh_i, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 624 CALL histdef( id_i, "soicecov", "Ice fraction" , "[0,1]" , & ! fr eeze623 CALL histdef( id_i, "soicecov", "Ice fraction" , "[0,1]" , & ! fr_i 625 624 & jpi, jpj, nh_i, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 626 625 CALL histdef( id_i, "sozotaux", "Zonal Wind Stress" , "N/m2" , & ! i-wind stress … … 652 651 CALL histwrite( id_i, "sohefldo", 1, qsr + qns, jpi*jpj , idex ) ! total heat flux 653 652 CALL histwrite( id_i, "soshfldo", 1, qsr , jpi*jpj , idex ) ! solar heat flux 654 CALL histwrite( id_i, "soicecov", 1, fr eeze , jpi*jpj , idex ) ! ice cover653 CALL histwrite( id_i, "soicecov", 1, fr_i , jpi*jpj , idex ) ! ice fraction 655 654 CALL histwrite( id_i, "sozotaux", 1, utau , jpi*jpj , idex ) ! i-wind stress 656 655 CALL histwrite( id_i, "sometauy", 1, vtau , jpi*jpj , idex ) ! j-wind stress -
trunk/NEMO/OPA_SRC/DIA/diawri_dimg.h90
r888 r1037 52 52 !! level 10: hmld(:,:) turbocline depth 53 53 !! level 11: hmlp(:,:) mixed layer depth 54 !! level 12: fr eeze (:,:) Ice cover (1. or 0.)54 !! level 12: fr_i(:,:) ice fraction (between 0 and 1) 55 55 !! level 13: sst(:,:) the observed SST we relax to. 56 56 !! level 14: qct(:,:) equivalent flux due to treshold SST … … 181 181 fsel(:,:,10) = fsel(:,:,10) + hmld(:,:) 182 182 fsel(:,:,11) = fsel(:,:,11) + hmlp(:,:) 183 fsel(:,:,12) = fsel(:,:,12) + fr eeze(:,:)183 fsel(:,:,12) = fsel(:,:,12) + fr_i(:,:) 184 184 fsel(:,:,13) = fsel(:,:,13) + sst(:,:) 185 185 ! fsel(:,:,14) = fsel(:,:,14) + qct(:,:) … … 263 263 fsel(:,:,10) = hmld(:,:) * tmask(:,:,1) 264 264 fsel(:,:,11) = hmlp(:,:) * tmask(:,:,1) 265 fsel(:,:,12) = fr eeze(:,:) * tmask(:,:,1)265 fsel(:,:,12) = fr_i(:,:) * tmask(:,:,1) 266 266 fsel(:,:,13) = sst(:,:) 267 267 ! fsel(:,:,14) = qct(:,:) -
trunk/NEMO/OPA_SRC/SBC/sbc_oce.F90
r1033 r1037 16 16 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: utau !: sea surface i-stress (ocean referential) [N/m2] 17 17 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: vtau !: sea surface j-stress (ocean referential) [N/m2] 18 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: wndm !: wind speed module at T-point (= |U10m -Uoce|[m/s]18 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 19 19 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qns !: sea heat flux: non solar [W/m2] 20 20 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qsr !: sea heat flux: solar [W/m2] 21 21 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emp !: freshwater budget: volume flux [Kg/m2/s] 22 22 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emps !: freshwater budget: concentration/dillution [Kg/m2/s] 23 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: fr_i !: ice fraction (between 0 to 1)23 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: fr_i !: ice fraction (between 0 to 1) - 24 24 25 25 !!---------------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/SBC/sbcana.F90
r1028 r1037 16 16 USE phycst ! physical constants 17 17 USE daymod ! calendar 18 USE ocfzpt ! ocean freezing point19 18 USE in_out_manager ! I/O manager 20 19 USE lib_mpp ! distribued memory computing library … … 36 35 REAL(wp) :: rn_emp0 = 0.e0 ! net freshwater flux 37 36 38 REAL(wp) :: rhoa = 1.22! Air density kg/m339 REAL(wp) :: cdrag = 1.5e-3! drag coefficient37 REAL(wp) :: rhoa = 1.22 ! Air density kg/m3 38 REAL(wp) :: cdrag = 1.5e-3 ! drag coefficient 40 39 41 40 !! * Substitutions -
trunk/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r1000 r1037 20 20 USE phycst ! physical constants 21 21 USE daymod ! calendar 22 USE ocfzpt ! ocean freezing point23 22 USE fldread ! read input fields 24 23 USE sbc_oce ! Surface boundary condition: ocean fields -
trunk/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r1025 r1037 24 24 USE phycst ! physical constants 25 25 USE daymod ! calendar 26 USE ocfzpt ! ocean freezing point27 26 USE fldread ! read input fields 28 27 USE sbc_oce ! Surface boundary condition: ocean fields -
trunk/NEMO/OPA_SRC/SBC/sbcflx.F90
r1029 r1037 30 30 USE phycst ! physical constants 31 31 USE daymod ! calendar 32 USE ocfzpt ! ocean freezing point33 32 USE fldread ! read input fields 34 33 USE iom ! IOM library -
trunk/NEMO/OPA_SRC/SBC/sbcice_if.F90
r888 r1037 5 5 !! covered area using ice-if model 6 6 !!====================================================================== 7 !! History : 9.0 !06-06 (G. Madec) Original code7 !! History : 3.0 ! 2006-06 (G. Madec) Original code 8 8 !!---------------------------------------------------------------------- 9 9 … … 14 14 USE dom_oce ! ocean space and time domain 15 15 USE phycst ! physical constants 16 USE ocfzpt ! ocean freezing point17 USE sbc_oce ! Surface boundary condition: ocean fields16 USE eosbn2 ! equation of state 17 USE sbc_oce ! surface boundary condition: ocean fields 18 18 USE fldread ! read input field 19 19 USE iom ! I/O manager library … … 30 30 # include "domzgr_substitute.h90" 31 31 !!---------------------------------------------------------------------- 32 !! OPA 9.0 , LOCEAN-IPSL (2006)33 !! $ Id:$32 !! NEMO/OPA 3.0 , LOCEAN-IPSL (2008) 33 !! $Id:$ 34 34 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 35 35 !!---------------------------------------------------------------------- … … 47 47 !! - blah blah blah, ... 48 48 !! 49 !! ** Action : qns, qsr: update heat flux below sea-ice 50 !! emp, emps: update freshwater flux below sea-ice 49 !! ** Action : utau, vtau : remain unchanged 50 !! qns, qsr : update heat flux below sea-ice 51 !! emp, emps : update freshwater flux below sea-ice 52 !! fr_i : update the ice fraction 51 53 !!--------------------------------------------------------------------- 52 54 INTEGER, INTENT(in) :: kt ! ocean time step 53 55 ! 56 INTEGER :: ji, jj ! dummy loop indices 57 INTEGER :: ierror ! return error code 58 REAL(wp) :: ztrp, zsice, zt_fzp, zfr_obs 59 REAL(wp) :: zqri, zqrj, zqrp, zqi 60 !! 54 61 CHARACTER(len=100) :: cn_dir ! Root directory for location of ice-if files 55 62 TYPE(FLD_N) :: sn_ice ! informations about the fields to be read 56 63 NAMELIST/namsbc_iif/ cn_dir, sn_ice 57 !58 INTEGER :: ji, jj ! dummy loop indices59 INTEGER :: ierror ! return error code60 REAL(wp) :: ztrp, zsice, zt_fzp, zicover_obs, zicover_opa61 REAL(wp) :: zqri, zqrj, zqrp, zqi62 64 !!--------------------------------------------------------------------- 63 65 ! ! ====================== ! … … 80 82 81 83 ! store namelist information in sf_ice structure 82 WRITE(sf_ice(1)%clrootname,'(a,a)' 84 WRITE(sf_ice(1)%clrootname,'(a,a)') TRIM( cn_dir ), TRIM( sn_ice%clname ) 83 85 sf_ice(1)%freqh = sn_ice%freqh 84 86 sf_ice(1)%clvar = sn_ice%clvar … … 111 113 zsice = - 0.04 / 0.8 ! ratio of isohaline compressibility over isotherme compressibility 112 114 ! ( d rho / dt ) / ( d rho / ds ) ( s = 34, t = -1.8 ) 113 ! Flux computation 115 116 fr_i(:,:) = tfreez( sss_m ) * tmask(:,:,1) ! sea surface freezing temperature [Celcius] 117 118 ! Flux and ice fraction computation 114 119 !CDIR COLLAPSE 115 120 DO jj = 1, jpj 116 121 DO ji = 1, jpi 117 ! ... sea surface freezing point temperature [Celcius]118 zt_fzp = ( ( - 0.0575 + 1.710523e-3 * SQRT( sss_m(ji,jj) ) &119 & - 2.154996e-4 * sss_m(ji,jj) ) * sss_m(ji,jj) ) * tmask(ji,jj,1)120 121 ! ... indicators : ice cover (obs, ocean model) & hemisphere (=1 north, =-1 south)122 zicover_obs = sf_ice(1)%fnow(ji,jj) ! observed123 zicover_opa = MAX( 0., SIGN( 1., zt_fzp - sst_m(ji,jj) ) ) * tmask(ji,jj,1) ! model122 ! 123 zt_fzp = fr_i(ji,jj) ! freezing point temperature 124 zfr_obs = sf_ice(1)%fnow(ji,jj) ! observed ice cover 125 ! ! ocean ice fraction (0/1) from the freezing point temperature 126 IF( sst_m(ji,jj) <= zt_fzp ) THEN ; fr_i(ji,jj) = 1.e0 127 ELSE ; fr_i(ji,jj) = 0.e0 128 ENDIF 124 129 125 ! ... avoid over-freezing point temperature 126 tn(ji,jj,1) = MAX( tn(ji,jj,1), zt_fzp ) 130 tn(ji,jj,1) = MAX( tn(ji,jj,1), zt_fzp ) ! avoid over-freezing point temperature 127 131 128 ! ... solar heat flux : zero below observed ice cover 129 qsr(ji,jj) = ( 1. - zicover_obs ) * qsr(ji,jj) 132 qsr(ji,jj) = ( 1. - zfr_obs ) * qsr(ji,jj) ! solar heat flux : zero below observed ice cover 130 133 131 ! ... non solar heat flux : add a damping term 132 ! - gamma*(t-(tgel-1.)) if observed ice and no opa ice (zicover_obs=1 zicover_opa=0) 133 ! - gamma*min(0,t-tgel) if observed ice and opa ice (zicover_obs=1 zicover_opa=1) 134 134 ! ! non solar heat flux : add a damping term 135 ! # ztrp*(t-(tgel-1.)) if observed ice and no opa ice (zfr_obs=1 fr_i=0) 136 ! # ztrp*min(0,t-tgel) if observed ice and opa ice (zfr_obs=1 fr_i=1) 135 137 zqri = ztrp * ( tb(ji,jj,1) - ( zt_fzp - 1.) ) 136 138 zqrj = ztrp * MIN( 0., tb(ji,jj,1) - zt_fzp ) 139 zqrp = ( zfr_obs * ( (1. - fr_i(ji,jj) ) * zqri & 140 & + fr_i(ji,jj) * zqrj ) ) * tmask(ji,jj,1) 137 141 138 zqrp = ( zicover_obs * ( (1. - zicover_opa ) * zqri & 139 & + zicover_opa * zqrj ) ) * tmask(ji,jj,1) 140 141 ! c) net downward heat flux q() = q0 + qrp() 142 ! for q0 143 ! # qns unchanged if no climatological ice (zicover_obs=0) 144 ! # qns = zqrp if climatological ice and no opa ice (zicover_obs=1, zicover_opa=0) 145 ! # qns = zqrp -2(-4) watt/m2 if climatological ice and opa ice (zicover_obs=1, zicover_opa=1) 146 ! (-2=arctic, -4=antarctic) 142 ! ! non-solar heat flux 143 ! # qns unchanged if no climatological ice (zfr_obs=0) 144 ! # qns = zqrp if climatological ice and no opa ice (zfr_obs=1, fr_i=0) 145 ! # qns = zqrp -2(-4) watt/m2 if climatological ice and opa ice (zfr_obs=1, fr_i=1) 146 ! (-2=arctic, -4=antarctic) 147 147 zqi = -3. + SIGN( 1.e0, ff(ji,jj) ) 148 qns(ji,jj) = ( ( 1.- z icover_obs ) * qns(ji,jj)&149 & + z icover_obs * zicover_opa* zqi ) * tmask(ji,jj,1) &148 qns(ji,jj) = ( ( 1.- zfr_obs ) * qns(ji,jj) & 149 & + zfr_obs * fr_i(ji,jj) * zqi ) * tmask(ji,jj,1) & 150 150 & + zqrp 151 151 END DO -
trunk/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r914 r1037 46 46 USE in_out_manager ! I/O manager 47 47 USE prtctl ! Print control 48 USE ocfzpt ! ocean freezing point49 48 50 49 IMPLICIT NONE … … 158 157 DO jj = 1, jpj 159 158 DO ji = 1, jpi 160 zinda = MAX( 0.e0, SIGN( 1.e0, -( -1.5 - freeze(ji,jj) ) ) ) 159 !! zinda = MAX( 0.e0, SIGN( 1.e0, -( -1.5 - freeze(ji,jj) ) ) ) 160 !!gm BBBBBBBBUUUUUUGGGGGGGGGGGGGGGGG zinda alway negatif !!! ???????? 161 zinda = MAX( 0.e0, SIGN( 1.e0, -( -1.5 - 1.e0 + frld(ji,jj) ) ) ) 161 162 qsr(ji,jj) = zinda * qsr(ji,jj) 162 163 END DO -
trunk/NEMO/OPA_SRC/SBC/sbcmod.F90
r920 r1037 4 4 !! Surface module : provide to the ocean its surface boundary condition 5 5 !!====================================================================== 6 !! History : 9.0 !06-07 (G. Madec) Original code6 !! History : 3.0 ! 2006-07 (G. Madec) Original code 7 7 !!---------------------------------------------------------------------- 8 8 9 9 !!---------------------------------------------------------------------- 10 10 !! sbc_init : read namsbc namelist 11 !! sbc : surface ocean momentum, heat and freshwater 12 !! boundary conditions 11 !! sbc : surface ocean momentum, heat and freshwater boundary conditions 13 12 !!---------------------------------------------------------------------- 14 13 USE oce ! ocean dynamics and tracers … … 16 15 USE daymod ! calendar 17 16 USE phycst ! physical constants 18 USE ocfzpt ! ocean freezing point19 17 20 18 USE ice_oce ! sea-ice model : LIM … … 66 64 # include "domzgr_substitute.h90" 67 65 !!---------------------------------------------------------------------- 68 !! OPA 9.0 , LOCEAN-IPSL (2006)66 !! NEMO/OPA 3.0 , LOCEAN-IPSL (2008) 69 67 !! $Id: $ 70 68 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 85 83 !!---------------------------------------------------------------------- 86 84 INTEGER :: icpt ! temporary integer 87 !! ----------------------------------------------------------------------85 !! 88 86 NAMELIST/namsbc/ nn_fsbc, ln_ana, ln_flx, ln_blk_clio, ln_blk_core, ln_cpl, & 89 87 & nn_ice , ln_dm2dc, ln_rnf, ln_ssr, nn_fwb, nn_ico_cpl 88 !!---------------------------------------------------------------------- 90 89 91 90 IF(lwp) THEN … … 119 118 WRITE(numout,*) ' coupled formulation (T if key_sbc_cpl) ln_cpl = ', ln_cpl 120 119 WRITE(numout,*) ' Misc. options of sbc : ' 121 WRITE(numout,*) ' ice management in the sbc (=0/1/2 )nn_ice = ', nn_ice120 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 122 121 WRITE(numout,*) ' ice-ocean stress computation (=0/1/2) nn_ico_cpl = ', nn_ico_cpl 123 122 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc … … 128 127 ENDIF 129 128 129 IF( .NOT. ln_rnf ) nn_runoff = 0 ! no runoff, or runoff mouths 130 IF( nn_ice == 0 ) fr_i(:,:) = 0.e0 ! no ice in the domain, ice fraction is always zero 131 130 132 ! Check consistancy !!gm mixture of real and integer : coding to be changed.... 131 132 IF( .NOT. ln_rnf ) nn_runoff = 0 ! no runoff, or runoff mouths133 133 134 134 IF( nn_ice == 2 ) THEN … … 191 191 !! ** Action : - set the ocean surface boundary condition, i.e. 192 192 !! utau, vtau, qns, qsr, emp, emps, qrp, erp 193 !! - updte the ice fraction : fr_i 193 194 !!---------------------------------------------------------------------- 194 195 INTEGER, INTENT(in) :: kt ! ocean time step … … 202 203 ! ! temperature and salinity (at T-point) over nf_sbc time-step 203 204 ! ! (i.e. sst_m, sss_m, ssu_m, ssv_m) 204 205 !!gm add a flag on nn_fsbc frequency ????? except the diurnal cycle!206 !! IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN207 208 205 209 206 ! sbc formulation … … 219 216 CASE( 5 ) ; CALL sbc_cpl ( kt ) ! coupled formulation 220 217 CASE( -1 ) 221 ;CALL sbc_ana ( kt ) ! ESOPA, test ALL the formulations222 ;CALL sbc_gyre ( kt )223 ;CALL sbc_flx ( kt )224 ;CALL sbc_blk_clio( kt )225 ;CALL sbc_blk_core( kt )226 ;CALL sbc_cpl ( kt )218 CALL sbc_ana ( kt ) ! ESOPA, test ALL the formulations 219 CALL sbc_gyre ( kt ) 220 CALL sbc_flx ( kt ) 221 CALL sbc_blk_clio( kt ) 222 CALL sbc_blk_core( kt ) 223 CALL sbc_cpl ( kt ) 227 224 END SELECT 228 225 … … 232 229 !!gm IF( ln_dm2dc ) CALL sbc_dcy( kt ) ! Daily mean qsr distributed over the Diurnal Cycle 233 230 234 SELECT CASE( nn_ice ) ! Update sbcover ice-covered areas235 CASE( 1 ) ; 236 ! ! (update heat and freshwater fluxes)237 CASE( 2 ) ; 238 ! ! (update heat and freshwater fluxes)239 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc, nn_ico_cpl)! LIM 3.0 ice model240 END SELECT ! (update all fluxes using bulk + LIM)241 242 IF( ln_ssr ) CALL sbc_ssr( kt )! add SST/SSS damping term243 244 IF( ln_rnf ) CALL sbc_rnf( kt )! add runoffs to fresh water fluxes231 SELECT CASE( nn_ice ) ! Update heat and freshwater fluxes over ice-covered areas 232 CASE( 1 ) ; CALL sbc_ice_if ( kt ) ! Ice-cover climatology ("Ice-if" model) 233 ! 234 CASE( 2 ) ; CALL sbc_ice_lim_2( kt, nsbc ) ! LIM 2.0 ice model 235 ! 236 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc, nn_ico_cpl) ! LIM 3.0 ice model 237 END SELECT 238 239 IF( ln_ssr ) CALL sbc_ssr( kt ) ! add SST/SSS damping term 240 241 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes 245 242 246 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc )! control the freshwater budget243 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc ) ! control the freshwater budget 247 244 248 245 IF( nclosea == 1 ) CALL sbc_clo( kt ) ! treatment of closed sea in the model domain … … 250 247 ! 251 248 IF(ln_ctl) THEN ! print mean trends (used for debugging) 252 CALL prt_ctl(tab2d_1=emp , clinfo1=' emp - : ', mask1=tmask, ovlap=1) 253 CALL prt_ctl(tab2d_1=emps , clinfo1=' emps - : ', mask1=tmask, ovlap=1) 254 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask, ovlap=1) 255 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask, ovlap=1) 256 CALL prt_ctl(tab3d_1=tmask , clinfo1=' tmask : ', mask1=tmask, ovlap=1, kdim=jpk) 257 CALL prt_ctl(tab3d_1=tn , clinfo1=' sst - : ', mask1=tmask, ovlap=1, kdim=1) 258 CALL prt_ctl(tab3d_1=sn , clinfo1=' sss - : ', mask1=tmask, ovlap=1, kdim=1) 259 CALL prt_ctl(tab2d_1=utau , clinfo1=' utau - : ', mask1=umask, & 260 tab2d_2=vtau , clinfo2=' vtau - : ', mask2=vmask, ovlap=1) 261 ENDIF 262 263 !!gm 264 !! ENDIF 265 !!gm 249 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask, ovlap=1 ) 250 CALL prt_ctl(tab2d_1=emp , clinfo1=' emp - : ', mask1=tmask, ovlap=1 ) 251 CALL prt_ctl(tab2d_1=emps , clinfo1=' emps - : ', mask1=tmask, ovlap=1 ) 252 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask, ovlap=1 ) 253 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask, ovlap=1 ) 254 CALL prt_ctl(tab3d_1=tmask , clinfo1=' tmask : ', mask1=tmask, ovlap=1, kdim=jpk ) 255 CALL prt_ctl(tab3d_1=tn , clinfo1=' sst - : ', mask1=tmask, ovlap=1, kdim=1 ) 256 CALL prt_ctl(tab3d_1=sn , clinfo1=' sss - : ', mask1=tmask, ovlap=1, kdim=1 ) 257 CALL prt_ctl(tab2d_1=utau , clinfo1=' utau - : ', mask1=umask, & 258 & tab2d_2=vtau , clinfo2=' vtau - : ', mask2=vmask, ovlap=1 ) 259 ENDIF 266 260 ! 267 261 END SUBROUTINE sbc -
trunk/NEMO/OPA_SRC/SBC/sbcssr.F90
r888 r1037 16 16 USE phycst ! physical constants 17 17 USE daymod ! calendar 18 USE ocfzpt ! ocean freezing point19 18 USE sbcrnf ! surface boundary condition : runoffs 20 19 USE fldread ! read input fields -
trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r916 r1037 23 23 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 24 24 USE trdmod_oce ! ocean variables trends 25 USE eosbn2 ! equation of state 25 26 USE trdmod ! ocean active tracers trends 26 27 USE closea ! closed sea 27 28 USE trabbl ! advective term in the BBL 28 USE ocfzpt !29 29 USE sbcmod ! surface Boundary Condition 30 30 USE sbcrnf ! river runoffs … … 137 137 & zupst , zupss , zcent , zcens , & ! " " 138 138 & z_hdivn_x, z_hdivn_y, z_hdivn 139 REAL(wp) :: zice ! - - 140 REAL(wp), DIMENSION(jpi,jpj) :: ztfreez ! 2D workspace 139 141 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwz, ztrdt, zind ! 3D workspace 140 142 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zww, ztrds ! " " … … 160 162 ! Upstream / centered scheme indicator 161 163 ! ------------------------------------ 164 !!gm not strickly exact : the freezing point should be computed at each ocean levels... 165 !!gm not a big deal since cen2 is no more used in global ice-ocean simulations 166 ztfreez(:,:) = tfreez( sn(:,:,1) ) 162 167 DO jk = 1, jpk 163 168 DO jj = 1, jpj 164 169 DO ji = 1, jpi 170 ! ! below ice covered area (if tn < "freezing"+0.1 ) 171 IF( tn(ji,jj,jk) <= ztfreez(ji,jj) + 0.1 ) THEN ; zice = 1.e0 172 ELSE ; zice = 0.e0 173 ENDIF 165 174 zind(ji,jj,jk) = MAX ( & 166 175 rnfmsk(ji,jj) * rnfmsk_z(jk), & ! near runoff mouths (& closed sea outflows) 167 upsmsk(ji,jj) & ! some of some straits 168 #if defined key_lim3 || defined key_lim2 169 ! ! below ice covered area (if tn < "freezing"+0.1 ) 170 , MAX( 0., SIGN( 1., fzptn(ji,jj) + 0.1 - tn(ji,jj,jk) ) ) * tmask(ji,jj,jk) & 171 #endif 172 & ) 176 upsmsk(ji,jj) , & ! some of some straits 177 zice & ! below ice covered area (if tn < "freezing"+0.1 ) 178 & ) * tmask(ji,jj,jk) 173 179 END DO 174 180 END DO -
trunk/NEMO/OPA_SRC/opa.F90
r1002 r1037 64 64 65 65 USE phycst ! physical constant (par_cst routine) 66 USE ocfzpt ! ocean freezing point (oc_fz_pt routine)67 66 USE trdmod ! momentum/tracers trends (trd_mod_init routine) 68 67 … … 278 277 CALL istate_init ! ocean initial state (Dynamics and tracers) 279 278 280 CALL oc_fz_pt ! Surface freezing point281 282 279 ! ! Ocean physics 283 280 -
trunk/NEMO/OPA_SRC/step.F90
r988 r1037 42 42 USE sbcmod ! surface boundary condition (sbc routine) 43 43 USE sbcrnf ! surface boundary condition: runoff variables 44 USE ocfzpt ! surface ocean freezing point (oc_fz_pt routine)45 44 46 45 USE trcstp ! passive tracer time-stepping (trc_stp routine) … … 324 323 ! N.B. ua, va, ta, sa arrays are used as workspace in this section 325 324 !----------------------------------------------------------------------- 326 CALL oc_fz_pt ! ocean surface freezing temperature327 325 CALL div_cur( kstp ) ! Horizontal divergence & Relative vorticity 328 326 IF( n_cla == 1 ) CALL div_cla( kstp ) ! Cross Land Advection (Update Hor. divergence)
Note: See TracChangeset
for help on using the changeset viewer.