Changeset 886
- Timestamp:
- 2008-04-11T11:24:17+02:00 (16 years ago)
- Location:
- branches/dev_001_SBC/NEMO
- Files:
-
- 2 added
- 3 deleted
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_001_SBC/NEMO/LIM_SRC_2/limsbc_2.F90
r882 r886 85 85 #if defined key_coupled 86 86 REAL(wp), DIMENSION(jpi,jpj) :: zalb ! albedo of ice under overcast sky 87 REAL(wp), DIMENSION(jpi,jpj) :: zalcn ! albedo of ocean under overcast sky88 87 REAL(wp), DIMENSION(jpi,jpj) :: zalbp ! albedo of ice under clear sky 89 REAL(wp), DIMENSION(jpi,jpj) :: zaldum ! albedo of ocean under clear sky90 88 #endif 91 89 REAL(wp) :: zsang, zmod, zfm … … 224 222 !------------------------------------------------! 225 223 zalb (:,:) = 0.e0 226 zalcn (:,:) = 0.e0227 224 zalbp (:,:) = 0.e0 228 zaldum(:,:) = 0.e0 229 230 CALL blk_albedo( zalb, zalcn, zalbp, zaldum ) 225 226 CALL albedo_ice( sist, hicif, hsnif, zalbp, zalb ) 231 227 232 228 alb_ice(:,:) = 0.5 * zalbp(:,:) + 0.5 * zalb (:,:) ! Ice albedo (mean clear and overcast skys) -
branches/dev_001_SBC/NEMO/LIM_SRC_2/limwri_dimg_2.h90
r882 r886 123 123 zcmo(ji,jj,15) = utaui_ice(ji,jj) 124 124 zcmo(ji,jj,16) = vtaui_ice(ji,jj) 125 zcmo(ji,jj,17) = qsr_ice 126 zcmo(ji,jj,18) = qns r_ice(ji,jj)125 zcmo(ji,jj,17) = qsr_ice(ji,jj) 126 zcmo(ji,jj,18) = qns_ice(ji,jj) 127 127 zcmo(ji,jj,19) = sprecip(ji,jj) 128 128 END DO … … 166 166 rcmoy(ji,jj,15) = utaui_ice(ji,jj) 167 167 rcmoy(ji,jj,16) = vtaui_ice(ji,jj) 168 rcmoy(ji,jj,17) = qsr_ice 169 rcmoy(ji,jj,18) = qns r_ice(ji,jj)168 rcmoy(ji,jj,17) = qsr_ice(ji,jj) 169 rcmoy(ji,jj,18) = qns_ice(ji,jj) 170 170 rcmoy(ji,jj,19) = sprecip(ji,jj) 171 171 END DO -
branches/dev_001_SBC/NEMO/LIM_SRC_3/ice.F90
r884 r886 493 493 diag_bot_me, & ! vertical bottom melt 494 494 diag_sur_me ! vertical surface melt 495 INTEGER , PUBLIC :: & !: indexes of the debugging 496 jiindex, & ! point 497 jjindex 495 INTEGER , PUBLIC :: jiindx, jjindx !: indexes of the debugging point 498 496 499 497 #else -
branches/dev_001_SBC/NEMO/LIM_SRC_3/iceini.F90
r884 r886 13 13 USE in_out_manager 14 14 USE ice_oce ! ice variables 15 USE flx_oce 15 USE sbc_oce ! Surface boundary condition: ocean fields 16 USE sbc_ice ! Surface boundary condition: ice fields 16 17 USE phycst ! Define parameters for the routines 17 18 USE ocfzpt … … 74 75 ! Louvain la Neuve Ice model 75 76 IF( nacc == 1 ) THEN 76 dtsd2 = n fice* rdtmin * 0.577 rdt_ice = n fice* rdtmin77 dtsd2 = nn_fsbc * rdtmin * 0.5 78 rdt_ice = nn_fsbc * rdtmin 78 79 ELSE 79 dtsd2 = n fice* rdt * 0.580 rdt_ice = n fice* rdt80 dtsd2 = nn_fsbc * rdt * 0.5 81 rdt_ice = nn_fsbc * rdt 81 82 ENDIF 82 83 … … 104 105 freeze(:,:) = at_i(:,:) ! initialisation of sea/ice cover 105 106 # if defined key_coupled 106 alb_ice(:,:) = albege(:,:) ! sea-ice albedo 107 Must be adpated to LIM3 108 alb_ice(:,:,:) = albege(:,:) ! sea-ice albedo 107 109 # endif 108 110 109 nstart = numit + n fice111 nstart = numit + nn_fsbc 110 112 nitrun = nitend - nit000 + 1 111 113 nlast = numit + nitrun … … 188 190 189 191 WRITE(numout,*) 'lim_itd_ini : Initialization of ice thickness distribution ' 190 WRITE(numout,*) '~~~~~~~~~~~~ ~~~'192 WRITE(numout,*) '~~~~~~~~~~~~' 191 193 192 194 !!-- End of declarations -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limdia.F90
r884 r886 26 26 USE limistate 27 27 USE dom_oce 28 USE sbc_oce ! Surface boundary condition: ocean fields 28 29 29 30 IMPLICIT NONE … … 107 108 !--------------------------------------- 108 109 zday_min = 273.0 ! zday_min = date of minimum extent, here September 30th 109 zday = FLOAT(numit-nit000) * rdt_ice / ( 86400.0 * FLOAT(n fice) )110 zday = FLOAT(numit-nit000) * rdt_ice / ( 86400.0 * FLOAT(nn_fsbc) ) 110 111 IF (zday.GT.zday_min) THEN 111 112 zshift_date = zday - zday_min … … 142 143 vinfor(31) = vinfor(31) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 143 144 v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12 144 vinfor(53) = vinfor(53) + fsalt(ji,jj)*aire(ji,jj) / 1.0e12 !salt flux145 vinfor(53) = vinfor(53) + emps(ji,jj)*aire(ji,jj) / 1.0e12 !salt flux 145 146 vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) / 1.0e12 !brine drainage flux 146 147 vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) / 1.0e12 !equivalent salt flux 147 vinfor(59) = vinfor(59) + sst_io(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SST148 vinfor(61) = vinfor(61) + sss_ io(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SSS148 vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SST 149 vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SSS 149 150 vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! snow temperature 150 151 vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! ice heat content … … 155 156 vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12 !ice volume 156 157 vinfor(79) = 0.0 157 vinfor(81) = vinfor(81) + fmass(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux158 vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux 158 159 ENDIF 159 160 END DO … … 293 294 vinfor(32) = vinfor(32) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 294 295 v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12 !ice vel 295 vinfor(54) = vinfor(54) + at_i(ji,jj)* fsalt(ji,jj)*aire(ji,jj) / 1.0e12 ! Total salt flux296 vinfor(54) = vinfor(54) + at_i(ji,jj)*emps(ji,jj)*aire(ji,jj) / 1.0e12 ! Total salt flux 296 297 vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) / 1.0e12 ! Brine drainage salt flux 297 298 vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) / 1.0e12 ! Equivalent salt flux 298 vinfor(60) = vinfor(60) + sst_io(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SST299 vinfor(62) = vinfor(62) + sss_ io(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SSS299 vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SST 300 vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) / 1.0e12 !SSS 300 301 vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! snow temperature 301 302 vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) / 1.0e12 ! ice enthalpy … … 306 307 vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) / 1.0e12 !ice volume 307 308 vinfor(80) = 0.0 308 vinfor(82) = vinfor(82) + fmass(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux309 vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) / 1.0e12 ! mass flux 309 310 ENDIF 310 311 END DO -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limdyn.F90
r884 r886 16 16 USE dom_ice 17 17 USE dom_oce ! ocean space and time domain 18 USE taumod19 18 USE ice 20 19 USE par_ice 20 USE sbc_ice ! Surface boundary condition: ice fields 21 21 USE ice_oce 22 22 USE iceini … … 90 90 IF ( ln_limdyn ) THEN 91 91 92 ! ocean velocity93 u_oce(:,:) = u_io(:,:) * tmu(:,:)94 v_oce(:,:) = v_io(:,:) * tmv(:,:)95 96 92 old_u_ice(:,:) = u_ice(:,:) * tmu(:,:) 97 93 old_v_ice(:,:) = v_ice(:,:) * tmv(:,:) … … 162 158 ENDIF 163 159 164 ! Ice-Ocean stress165 ! ================166 DO jj = 2, jpjm1167 zsang = SIGN(1.e0, gphif(1,jj-1) ) * sangvg168 169 DO ji = fs_2, fs_jpim1170 ! computation of wind stress over ocean in X and Y direction171 #if defined key_coupled && defined key_lim_cp1172 ! ztairx = ( 1.0 - at_i(ji-1,jj) ) * gtaux(ji-1,jj) + &173 ! ( 1.0 - at_i(ji,jj) ) * gtaux(ji,jj ) + &174 ! ( 1.0 - at_i(ji-1,jj-1) ) * gtaux(ji-1,jj-1) + &175 ! ( 1.0 - at_i(ji,jj-1) ) * gtaux(ji,jj-1)176 177 ! ztairy = ( 1.0 - at_i(ji-1,jj) ) * gtauy(ji-1,jj ) + &178 ! ( 1.0 - at_i(ji,jj ) ) * gtauy(ji,jj ) + &179 ! ( 1.0 - at_i(ji-1,jj-1) ) * gtauy(ji-1,jj-1) + &180 ! ( 1.0 - at_i(ji,jj-1) ) * gtauy(ji,jj-1)181 #else182 ztairx = ( 2.0 - at_i(ji,jj) - at_i(ji+1,jj) ) * gtaux(ji,jj) / cai * cao183 ztairy = ( 2.0 - at_i(ji,jj) - at_i(ji,jj+1) ) * gtauy(ji,jj) / cai * cao184 185 zsfrldmx2 = at_i(ji,jj) + at_i(ji+1,jj)186 zsfrldmy2 = at_i(ji,jj) + at_i(ji,jj+1)187 188 #endif189 zu_ice = u_ice(ji,jj) - u_oce(ji,jj)190 zv_ice = v_ice(ji,jj) - v_oce(ji,jj)191 zmod = SQRT( zu_ice * zu_ice + zv_ice * zv_ice )192 193 ! quadratic drag formulation194 ztglx = zsfrldmx2 * rhoco * zmod * ( cangvg * zu_ice - zsang * zv_ice )195 ztgly = zsfrldmy2 * rhoco * zmod * ( cangvg * zv_ice + zsang * zu_ice )196 !197 ! ! IMPORTANT198 ! ! these lignes are bound to prevent numerical oscillations199 ! ! in the ice-ocean stress200 ! ! They are physically ill-based. There is a cleaner solution201 ! ! to try (remember discussion in Paris Gurvan)202 !203 ztglx = ztglx * exp( - zmod / 0.5 )204 ztgly = ztglx * exp( - zmod / 0.5 )205 206 tio_u(ji,jj) = - ( ztairx + 1.0 * ztglx ) / ( 2. * rau0 )207 tio_v(ji,jj) = - ( ztairy + 1.0 * ztgly ) / ( 2. * rau0 )208 END DO209 END DO210 211 160 ! computation of friction velocity 212 161 DO jj = 2, jpjm1 213 162 DO ji = fs_2, fs_jpim1 214 163 215 zu_ice = u_ice(ji,jj) - u_ io(ji,jj)164 zu_ice = u_ice(ji,jj) - u_oce(ji,jj) 216 165 zt11 = rhoco * zu_ice * zu_ice 217 166 218 zu_ice = u_ice(ji-1,jj) - u_ io(ji-1,jj)167 zu_ice = u_ice(ji-1,jj) - u_oce(ji-1,jj) 219 168 zt12 = rhoco * zu_ice * zu_ice 220 169 221 zv_ice = v_ice(ji,jj) - v_ io(ji,jj)170 zv_ice = v_ice(ji,jj) - v_oce(ji,jj) 222 171 zt21 = rhoco * zv_ice * zv_ice 223 172 224 zv_ice = v_ice(ji,jj-1) - v_ io(ji,jj-1)173 zv_ice = v_ice(ji,jj-1) - v_oce(ji,jj-1) 225 174 zt22 = rhoco * zv_ice * zv_ice 226 ztair2 = ( ( gtaux(ji,jj) + gtaux(ji-1,jj) ) / 2. )**2 + &227 ( ( gtauy(ji,jj) + gtauy(ji,jj-1) ) / 2. )**2175 ztair2 = ( ( utaui_ice(ji,jj) + utaui_ice(ji-1,jj) ) / 2. )**2 + & 176 ( ( vtaui_ice(ji,jj) + vtaui_ice(ji,jj-1) ) / 2. )**2 228 177 229 178 ! should not be weighted … … 241 190 DO jj = 2, jpjm1 242 191 DO ji = fs_2, fs_jpim1 243 #if defined key_coupled && defined key_lim_cp1 244 tio_u(ji,jj) = - ( gtaux(ji ,jj ) + gtaux(ji-1,jj ) & 245 & + gtaux(ji-1,jj-1) + gtaux(ji ,jj-1) ) / ( 4 * rau0 ) 246 247 tio_v(ji,jj) = - ( gtauy(ji ,jj ) + gtauy(ji-1,jj ) & 248 & + gtauy(ji-1,jj-1) + gtauy(ji ,jj-1) ) / ( 4 * rau0 ) 249 #else 250 tio_u(ji,jj) = - gtaux(ji,jj) / cai * cao / rau0 251 tio_v(ji,jj) = - gtauy(ji,jj) / cai * cao / rau0 252 #endif 253 ztair2 = ( ( gtaux(ji,jj) + gtaux(ji-1,jj) ) / 2. )**2 + & 254 ( ( gtauy(ji,jj) + gtauy(ji,jj-1) ) / 2. )**2 192 ztair2 = ( ( utaui_ice(ji,jj) + utaui_ice(ji-1,jj) ) / 2. )**2 + & 193 ( ( vtaui_ice(ji,jj) + vtaui_ice(ji,jj-1) ) / 2. )**2 255 194 zustm = SQRT( ztair2 ) 256 195 … … 262 201 263 202 CALL lbc_lnk( ust2s, 'T', 1. ) ! T-point 264 CALL lbc_lnk( tio_u, 'U', -1. ) ! I-point (i.e. ice U-V point)265 CALL lbc_lnk( tio_v, 'V', -1. ) ! I-point (i.e. ice U-V point)266 203 267 204 IF(ln_ctl) THEN ! Control print … … 269 206 CALL prt_ctl_info(' - Cell values : ') 270 207 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 271 CALL prt_ctl(tab2d_1=tio_u , clinfo1=' lim_dyn : tio_u :', tab2d_2=tio_v , clinfo2=' tio_v :')272 208 CALL prt_ctl(tab2d_1=ust2s , clinfo1=' lim_dyn : ust2s :') 273 209 CALL prt_ctl(tab2d_1=divu_i , clinfo1=' lim_dyn : divu_i :') -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limistate.F90
r884 r886 16 16 USE oce ! dynamics and tracers variables 17 17 USE dom_oce 18 USE sbc_oce ! Surface boundary condition: ocean fields 18 19 USE par_ice ! ice parameters 19 20 USE ice_oce ! ice variables … … 93 94 CALL lim_istate_init ! reading the initials parameters of the ice 94 95 95 !-- Initialisation of sst,sss,u,v do i=1,jpi96 u_io(:,:) = 0.e0 ! ice velocity in x direction97 v_io(:,:) = 0.e0 ! ice velocity in y direction98 99 96 ! Initialisation at tn or -2 if ice 100 97 DO jj = 1, jpj … … 104 101 END DO 105 102 END DO 106 107 u_io (:,:) = 0.108 v_io (:,:) = 0.109 sst_io(:,:) = ( nfice - 1 ) * ( tn(:,:,1) + rt0 ) ! use the ocean initial values110 sss_io(:,:) = ( nfice - 1 ) * sn(:,:,1) ! tricky trick *(nfice-1) !111 103 112 104 !-------------------------------------------------------------------- … … 280 272 !--------------- 281 273 sm_i(ji,jj,jl) = zidto * sinn + ( 1.0 - zidto ) * 0.1 282 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_ io(ji,jj) ) * v_i(ji,jj,jl)274 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 283 275 284 276 !---------- … … 405 397 406 398 sm_i(ji,jj,jl) = zidto * sins + ( 1.0 - zidto ) * 0.1 407 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_ io(ji,jj) ) * v_i(ji,jj,jl)399 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) 408 400 409 401 !---------- … … 538 530 539 531 CALL lbc_lnk( fsbbq , 'T', 1. ) 540 CALL lbc_lnk( sss_io , 'T', 1. )541 532 542 533 END SUBROUTINE lim_istate -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limitd_me.F90
r884 r886 20 20 USE phycst ! physical constants (ocean directory) 21 21 USE ice_oce ! ice variables 22 USE sbc_oce ! Surface boundary condition: ocean fields 22 23 USE thd_ice 23 24 USE limistate … … 743 744 ! Temporal smoothing 744 745 !-------------------- 745 IF ( numit .EQ. nit000 + n fice- 1 ) THEN746 IF ( numit .EQ. nit000 + nn_fsbc - 1 ) THEN 746 747 strp1(:,:) = 0.0 747 748 strp2(:,:) = 0.0 … … 1194 1195 IF ( con_i ) THEN 1195 1196 CALL lim_column_sum (jpl, v_i, vice_init ) 1196 WRITE(numout,*) ' vice_init : ', vice_init(jiind ex,jjindex)1197 WRITE(numout,*) ' vice_init : ', vice_init(jiindx,jjindx) 1197 1198 CALL lim_column_sum_energy (jpl, nlay_i, e_i, eice_init ) 1198 WRITE(numout,*) ' eice_init : ', eice_init(jiind ex,jjindex)1199 WRITE(numout,*) ' eice_init : ', eice_init(jiindx,jjindx) 1199 1200 ENDIF 1200 1201 … … 1363 1364 ! Salinity 1364 1365 !------------- 1365 smsw(ji,jj) = sss_ io(ji,jj) * vsw(ji,jj) * ridge_por1366 smsw(ji,jj) = sss_m(ji,jj) * vsw(ji,jj) * ridge_por 1366 1367 1367 1368 ! salinity of new ridge … … 1447 1448 - eirft(ji,jj,jk) 1448 1449 ! sea water heat content 1449 ztmelts = - tmut * sss_ io(ji,jj) + rtt1450 ztmelts = - tmut * sss_m(ji,jj) + rtt 1450 1451 ! heat content per unit volume 1451 zdummy0 = - rcp * ( sst_ io(ji,jj)- rtt ) * vsw(ji,jj)1452 zdummy0 = - rcp * ( sst_m(ji,jj) + rt0 - rtt ) * vsw(ji,jj) 1452 1453 1453 1454 ! corrected sea water salinity … … 1616 1617 fieldid = ' v_i : limitd_me ' 1617 1618 CALL lim_cons_check (vice_init, vice_final, 1.0e-6, fieldid) 1618 WRITE(numout,*) ' vice_init : ', vice_init(jiind ex,jjindex)1619 WRITE(numout,*) ' vice_final : ', vice_final(jiind ex,jjindex)1619 WRITE(numout,*) ' vice_init : ', vice_init(jiindx,jjindx) 1620 WRITE(numout,*) ' vice_final : ', vice_final(jiindx,jjindx) 1620 1621 1621 1622 CALL lim_column_sum_energy (jpl, nlay_i, e_i, eice_final ) 1622 1623 fieldid = ' e_i : limitd_me ' 1623 1624 CALL lim_cons_check (eice_init, eice_final, 1.0e-2, fieldid) 1624 WRITE(numout,*) ' eice_init : ', eice_init(jiind ex,jjindex)1625 WRITE(numout,*) ' eice_final : ', eice_final(jiind ex,jjindex)1625 WRITE(numout,*) ' eice_init : ', eice_init(jiindx,jjindx) 1626 WRITE(numout,*) ' eice_final : ', eice_final(jiindx,jjindx) 1626 1627 ENDIF 1627 1628 … … 1839 1840 ! fresh_hist(i,j) = fresh_hist(i,j) + xtmp 1840 1841 1841 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_ io(ji,jj) ) * &1842 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) ) * & 1842 1843 ! rhosn * v_s(ji,jj,jl) / rdt_ice 1843 1844 1844 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_ io(ji,jj) - sm_i(ji,jj,jl) ) * &1845 ! fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) - sm_i(ji,jj,jl) ) * & 1845 1846 ! rhoic * v_i(ji,jj,jl) / rdt_ice 1846 1847 1847 ! fsalt(i,j) = fsalt(i,j) + xtmp1848 ! emps(i,j) = emps(i,j) + xtmp 1848 1849 ! fsalt_hist(i,j) = fsalt_hist(i,j) + xtmp 1849 1850 -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limrhg.F90
r884 r886 16 16 USE dom_oce 17 17 USE dom_ice 18 USE sbc_ice ! Surface boundary condition: ice fields 18 19 USE ice 19 20 USE iceini … … 268 269 / ( e2t(ji,jj+1) + e2t(ji,jj) + epsd ) 269 270 ! 270 u_oce1(ji,jj) = u_ io(ji,jj)271 v_oce2(ji,jj) = v_ io(ji,jj)271 u_oce1(ji,jj) = u_oce(ji,jj) 272 v_oce2(ji,jj) = v_oce(ji,jj) 272 273 273 274 ! Ocean has no slip boundary condition 274 v_oce1(ji,jj) = 0.5*( (v_ io(ji,jj)+v_io(ji,jj-1))*e1t(ji,jj) &275 & +(v_ io(ji+1,jj)+v_io(ji+1,jj-1))*e1t(ji+1,jj)) &275 v_oce1(ji,jj) = 0.5*( (v_oce(ji,jj)+v_oce(ji,jj-1))*e1t(ji,jj) & 276 & +(v_oce(ji+1,jj)+v_oce(ji+1,jj-1))*e1t(ji+1,jj)) & 276 277 & /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj) 277 278 278 u_oce2(ji,jj) = 0.5*((u_ io(ji,jj)+u_io(ji-1,jj))*e2t(ji,jj) &279 & +(u_ io(ji,jj+1)+u_io(ji-1,jj+1))*e2t(ji,jj+1)) &279 u_oce2(ji,jj) = 0.5*((u_oce(ji,jj)+u_oce(ji-1,jj))*e2t(ji,jj) & 280 & +(u_oce(ji,jj+1)+u_oce(ji-1,jj+1))*e2t(ji,jj+1)) & 280 281 & / (e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 281 282 282 283 ! Wind stress. 283 ztagnx = ( 1. - zfrld1(ji,jj) ) * gtaux(ji,jj)284 ztagny = ( 1. - zfrld2(ji,jj) ) * gtauy(ji,jj)284 ztagnx = ( 1. - zfrld1(ji,jj) ) * utaui_ice(ji,jj) 285 ztagny = ( 1. - zfrld2(ji,jj) ) * vtaui_ice(ji,jj) 285 286 286 287 ! Computation of the velocity field taking into account the ice internal interaction. … … 621 622 zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , 1.0e-06 ) 622 623 IF ( zdummy .LE. 5.0e-2 ) THEN 623 u_ice(ji,jj) = u_ io(ji,jj)624 v_ice(ji,jj) = v_ io(ji,jj)624 u_ice(ji,jj) = u_oce(ji,jj) 625 v_ice(ji,jj) = v_oce(ji,jj) 625 626 ENDIF ! zdummy 626 627 END DO -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limrst.F90
r884 r886 18 18 USE dom_oce 19 19 USE ice_oce ! ice variables 20 USE sbc_oce ! Surface boundary condition: ocean fields 21 USE sbc_ice ! Surface boundary condition: ice fields 20 22 USE daymod 21 23 USE iom … … 55 57 56 58 ! to get better performances with NetCDF format: 57 ! we open and define the ice restart file one ice time step before writing the data (-> at nitrst - 2*n fice+ 1)58 ! except if we write ice restart files every ice time step or if an ice restart file was writen at nitend - 2*n fice+ 159 IF( kt == nitrst - 2*n fice + 1 .OR. nstock == nfice .OR. ( kt == nitend - nfice+ 1 .AND. .NOT. lrst_ice ) ) THEN59 ! we open and define the ice restart file one ice time step before writing the data (-> at nitrst - 2*nn_fsbc + 1) 60 ! except if we write ice restart files every ice time step or if an ice restart file was writen at nitend - 2*nn_fsbc + 1 61 IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nstock == nn_fsbc .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN 60 62 ! beware of the format used to write kt (default is i8.8, that should be large enough...) 61 63 IF( nitrst > 99999999 ) THEN ; WRITE(clkt, * ) nitrst … … 70 72 CASE DEFAULT ; WRITE(numout,*) ' open ice restart NetCDF file: '//clname 71 73 END SELECT 72 IF( kt == nitrst - 2*n fice+ 1 ) THEN73 WRITE(numout,*) ' kt = nitrst - 2*n fice+ 1 = ', kt,' date= ', ndastp74 ELSE ; WRITE(numout,*) ' kt = ' , kt,' date= ', ndastp74 IF( kt == nitrst - 2*nn_fsbc + 1 ) THEN 75 WRITE(numout,*) ' kt = nitrst - 2*nn_fsbc + 1 = ', kt,' date= ', ndastp 76 ELSE ; WRITE(numout,*) ' kt = ' , kt,' date= ', ndastp 75 77 ENDIF 76 78 ENDIF … … 100 102 !!---------------------------------------------------------------------- 101 103 102 iter = kt + n fice - 1 ! ice restarts are written at kt == nitrst - nfice+ 1104 iter = kt + nn_fsbc - 1 ! ice restarts are written at kt == nitrst - nn_fsbc + 1 103 105 104 106 IF( iter == nitrst ) THEN … … 111 113 ! ------------------ 112 114 ! ! calendar control 113 CALL iom_rstput( iter, nitrst, numriw, 'n fice' , REAL( nfice, wp) ) ! time-step114 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp) )! date115 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp) ) ! time-step 116 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp) ) ! date 115 117 116 118 ! Prognostic variables … … 158 160 CALL iom_rstput( iter, nitrst, numriw, 'u_ice' , u_ice ) 159 161 CALL iom_rstput( iter, nitrst, numriw, 'v_ice' , v_ice ) 160 CALL iom_rstput( iter, nitrst, numriw, ' gtaux' , gtaux)161 CALL iom_rstput( iter, nitrst, numriw, ' gtauy' , gtauy)162 CALL iom_rstput( iter, nitrst, numriw, 'utaui_ice' , utaui_ice ) 163 CALL iom_rstput( iter, nitrst, numriw, 'vtaui_ice' , vtaui_ice ) 162 164 CALL iom_rstput( iter, nitrst, numriw, 'fsbbq' , fsbbq ) 163 165 CALL iom_rstput( iter, nitrst, numriw, 'stress1_i' , stress1_i ) … … 299 301 WRITE(numout,*) ' ~~~ Arctic' 300 302 301 ji = jiind ex302 jj = jjind ex303 ji = jiindx 304 jj = jjindx 303 305 304 306 WRITE(numout,*) ' ji, jj ', ji, jj … … 387 389 !!---------------------------------------------------------------------- 388 390 ! Local variables 389 INTEGER :: ji, jj, jk, jl, ind ex391 INTEGER :: ji, jj, jk, jl, indx 390 392 REAL(wp) :: zfice, ziter 391 393 REAL(wp) :: & !parameters for the salinity profile … … 405 407 CALL iom_open ( 'restart_ice_in', numrir, kiolib = jprstlib ) 406 408 407 CALL iom_get( numrir, 'n fice', zfice )408 CALL iom_get( numrir, 'kt_ice' , ziter )409 CALL iom_get( numrir, 'nn_fsbc', zfice ) 410 CALL iom_get( numrir, 'kt_ice' , ziter ) 409 411 IF(lwp) WRITE(numout,*) ' read ice restart file at time step : ', ziter 410 412 IF(lwp) WRITE(numout,*) ' in any case we force it to nit000 - 1 : ', nit000 - 1 … … 416 418 & ' verify the file or rerun with the value 0 for the', & 417 419 & ' control of time parameter nrstdt' ) 418 IF( INT(zfice) /= n fice.AND. ABS( nrstdt ) == 1 ) &419 & CALL ctl_stop( 'lim_rst_read ===>>>> : problem with n ficein ice restart', &420 & ' verify the file or rerun with the value 0 for the', &420 IF( INT(zfice) /= nn_fsbc .AND. ABS( nrstdt ) == 1 ) & 421 & CALL ctl_stop( 'lim_rst_read ===>>>> : problem with nn_fsbc in ice restart', & 422 & ' verify the file or rerun with the value 0 for the', & 421 423 & ' control of time parameter nrstdt' ) 422 424 … … 512 514 CALL iom_get( numrir, jpdom_autoglo, 'u_ice' , u_ice ) 513 515 CALL iom_get( numrir, jpdom_autoglo, 'v_ice' , v_ice ) 514 CALL iom_get( numrir, jpdom_autoglo, ' gtaux' , gtaux)515 CALL iom_get( numrir, jpdom_autoglo, ' gtauy' , gtauy)516 CALL iom_get( numrir, jpdom_autoglo, 'utaui_ice' , utaui_ice ) 517 CALL iom_get( numrir, jpdom_autoglo, 'vtaui_ice' , vtaui_ice ) 516 518 CALL iom_get( numrir, jpdom_autoglo, 'fsbbq' , fsbbq ) 517 519 CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i ) … … 650 652 WRITE(numout,*) ' ~~~ Arctic' 651 653 652 ind ex = 1654 indx = 1 653 655 ji = 24 654 656 jj = 24 -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limthd.F90
r884 r886 18 18 USE ice ! LIM sea-ice variables 19 19 USE ice_oce ! sea-ice/ocean variables 20 USE flx_oce ! sea-ice/ocean forcings variables 20 USE sbc_oce ! Surface boundary condition: ocean fields 21 USE sbc_ice ! Surface boundary condition: ice fields 21 22 USE thd_ice ! LIM thermodynamic sea-ice variables 22 23 USE dom_ice ! LIM sea-ice domain … … 84 85 !!--------------------------------------------------------------------- 85 86 !! * Local variables 86 INTEGER :: ji, jj, jk, jl, & 87 zji , zjj, & ! dummy loop indices 88 nbpb , & ! nb of icy pts for thermo. cal. 89 index 87 INTEGER :: ji, jj, jk, jl, nbpb ! nb of icy pts for thermo. cal. 90 88 91 89 REAL(wp) :: & … … 211 209 212 210 ! here the drag will depend on ice thickness and type (0.006) 213 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_io(ji,jj) - t_bo(ji,jj) )211 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( (sst_m(ji,jj) + rt0) - t_bo(ji,jj) ) 214 212 ! also category dependent 215 213 ! !-- Energy from the turbulent oceanic heat flux heat flux coming in the lead … … 220 218 ! !-- Lead heat budget (part 1, next one is in limthd_dh 221 219 ! !-- qldif -- (or qldif_1d in 1d routines) 222 zfontn = sprecip(ji,jj) * lfus ! 223 zfnsol = qns r_oce(ji,jj) !total non solar flux224 qldif(ji,jj) = tms(ji,jj) * ( qsr _oce(ji,jj)&220 zfontn = sprecip(ji,jj) * lfus ! energy of melting 221 zfnsol = qns(ji,jj) ! total non solar flux 222 qldif(ji,jj) = tms(ji,jj) * ( qsr(ji,jj) & 225 223 & + zfnsol + fdtcn(ji,jj) - zfontn & 226 224 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & … … 242 240 ! Energy needed to bring ocean surface layer until its freezing 243 241 ! qcmif, limflx 244 qcmif (ji,jj) = rau0 * rcp * fse3t(ji,jj,1) * ( t_bo(ji,jj) - sst_io(ji,jj) ) * ( 1. - zinda )242 qcmif (ji,jj) = rau0 * rcp * fse3t(ji,jj,1) * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) ) * ( 1. - zinda ) 245 243 246 244 ! calculate oceanic heat flux (limthd_dh) … … 271 269 ENDIF 272 270 ! debug point to follow 273 IF ( (ji.eq.jiind ex).AND.(jj.eq.jjindex) ) THEN271 IF ( (ji.eq.jiindx).AND.(jj.eq.jjindx) ) THEN 274 272 jiindex_1d = nbpb 275 273 ENDIF … … 310 308 CALL tab_2d_1d( nbpb, fr1_i0_1d (1:nbpb) , fr1_i0 , jpi, jpj, npb(1:nbpb) ) 311 309 CALL tab_2d_1d( nbpb, fr2_i0_1d (1:nbpb) , fr2_i0 , jpi, jpj, npb(1:nbpb) ) 312 CALL tab_2d_1d( nbpb, qnsr_ice_1d(1:nbpb) , qns r_ice(:,:,jl), jpi, jpj, npb(1:nbpb) )310 CALL tab_2d_1d( nbpb, qnsr_ice_1d(1:nbpb) , qns_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 313 311 314 312 #if ! defined key_coupled … … 360 358 361 359 !---------------------------------! 362 CALL lim_thd_sal(1,nbpb ,jl)! Ice salinity computation !360 CALL lim_thd_sal(1,nbpb) ! Ice salinity computation ! 363 361 !---------------------------------! 364 362 … … 415 413 CALL tab_1d_2d( nbpb, s_i_newice , npb, s_i_new (1:nbpb) , jpi, jpj ) 416 414 CALL tab_1d_2d( nbpb, izero(:,:,jl) , npb, i0 (1:nbpb) , jpi, jpj ) 417 CALL tab_1d_2d( nbpb, qns r_ice(:,:,jl), npb, qnsr_ice_1d(1:nbpb), jpi, jpj)415 CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qnsr_ice_1d(1:nbpb), jpi, jpj) 418 416 !+++++ 419 417 … … 543 541 544 542 INTEGER :: & 545 ji,j j,jk! loop indices543 ji,jk ! loop indices 546 544 547 545 !!----------------------------------------------------------------------- … … 598 596 ! is violated 599 597 INTEGER :: & 600 ji,j j,jk,& !: loop indices598 ji,jk, & !: loop indices 601 599 zji, zjj 602 600 !!--------------------------------------------------------------------- … … 726 724 WRITE(numout,*) ' foc : ', fbif_1d(ji) 727 725 WRITE(numout,*) ' fstroc : ', fstroc (zji,zjj,jl) 728 WRITE(numout,*) ' i0 : ', i0(ji)729 WRITE(numout,*) ' fsolar: ', (1.0-i0(ji))*qsr_ice_1d(ji)730 WRITE(numout,*) ' fnsolar: ', qnsr_ice_1d(ji)726 WRITE(numout,*) ' i0 : ', i0(ji) 727 WRITE(numout,*) ' qsr_ice : ', (1.0-i0(ji))*qsr_ice_1d(ji) 728 WRITE(numout,*) ' qns_ice : ', qnsr_ice_1d(ji) 731 729 WRITE(numout,*) ' Conduction fluxes : ' 732 730 WRITE(numout,*) ' fc_s : ', fc_s(ji,0:nlay_s) … … 778 776 numce !: number of points for which conservation 779 777 ! is violated 780 INTEGER :: & 781 ji,jj,jk, & !: loop indices 782 zji, zjj 783 778 INTEGER :: ji, zji, zjj ! loop indices 784 779 !!--------------------------------------------------------------------- 785 780 -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limthd_dh.F90
r884 r886 16 16 USE phycst ! physical constants (OCE directory) 17 17 USE ice_oce ! ice variables 18 USE sbc_oce ! Surface boundary condition: ocean fields 18 19 USE thd_ice 19 20 USE iceini … … 338 339 zjj = ( npb(ji) - 1 ) / jpi + 1 339 340 zfsalt_melt(ji) = zfsalt_melt(ji) + & 340 ( sss_ io(zji,zjj) - sm_i_b(ji) ) *&341 ( sss_m(zji,zjj) - sm_i_b(ji) ) * & 341 342 a_i_b(ji) * & 342 343 MIN( zdeltah(ji,jk) , 0.0 ) * rhoic / rdt_ice … … 368 369 WRITE(numout,*) ' qlbbq_1d: ', qlbbq_1d(ji) 369 370 WRITE(numout,*) ' s_i_new : ', s_i_new(ji) 370 WRITE(numout,*) ' sss_ io : ', sss_io(zji,zjj)371 WRITE(numout,*) ' sss_m : ', sss_m(zji,zjj) 371 372 ENDIF 372 373 … … 494 495 zswi2 * 0.26 / & 495 496 ( 0.26 + 0.74 * EXP ( - 724300.0 * zgrr ) ) 496 zds = zfracs*sss_ io(zji,zjj) - s_i_new(ji)497 s_i_new(ji) = zfracs * sss_ io(zji,zjj)497 zds = zfracs*sss_m(zji,zjj) - s_i_new(ji) 498 s_i_new(ji) = zfracs * sss_m(zji,zjj) 498 499 ENDIF ! fc_bo_i 499 500 END DO ! ji … … 567 568 zjj = ( npb(ji) - 1 ) / jpi + 1 568 569 zfsalt_melt(ji) = zfsalt_melt(ji) + & 569 ( sss_ io(zji,zjj) - sm_i_b(ji) ) *&570 ( sss_m(zji,zjj) - sm_i_b(ji) ) * & 570 571 a_i_b(ji) * & 571 572 MIN( zdeltah(ji,jk) , 0.0 ) * rhoic / rdt_ice … … 596 597 WRITE(numout,*) ' qlbbq_1d: ', qlbbq_1d(ji) 597 598 WRITE(numout,*) ' s_i_new : ', s_i_new(ji) 598 WRITE(numout,*) ' sss_ io : ', sss_io(zji,zjj)599 WRITE(numout,*) ' sss_m : ', sss_m(zji,zjj) 599 600 WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 600 601 WRITE(numout,*) ' innermelt : ', innermelt(ji) … … 701 702 fseqv_1d(ji) = fseqv_1d(ji) + zihgnew * zfsalt_melt(ji) + & 702 703 (1.0 - zihgnew) * rdmicif_1d(ji) * & 703 ( sss_ io(zji,zjj) - sm_i_b(ji) ) / rdt_ice704 ( sss_m(zji,zjj) - sm_i_b(ji) ) / rdt_ice 704 705 ! new lines 705 706 IF ( num_sal .EQ. 4 ) & 706 707 fseqv_1d(ji) = fseqv_1d(ji) + zihgnew * zfsalt_melt(ji) + & 707 708 (1.0 - zihgnew) * rdmicif_1d(ji) * & 708 ( sss_ io(zji,zjj) - bulk_sal ) / rdt_ice709 ( sss_m(zji,zjj) - bulk_sal ) / rdt_ice 709 710 ! Heat flux 710 711 ! excessive bottom ablation energy (fsup) - 0 except if jpl = 1 … … 775 776 776 777 zsm_snowice = ( rhoic - rhosn ) / rhoic * & 777 sss_ io(zji,zjj)778 sss_m(zji,zjj) 778 779 779 780 IF ( num_sal .NE. 2 ) zsm_snowice = sm_i_b(ji) … … 781 782 IF ( num_sal .NE. 4 ) & 782 783 fseqv_1d(ji) = fseqv_1d(ji) + & 783 ( sss_ io(zji,zjj) - zsm_snowice ) * &784 ( sss_m(zji,zjj) - zsm_snowice ) * & 784 785 a_i_b(ji) * & 785 786 ( zhgnew(ji) - ht_i_b(ji) ) * rhoic / rdt_ice … … 787 788 IF ( num_sal .EQ. 4 ) & 788 789 fseqv_1d(ji) = fseqv_1d(ji) + & 789 ( sss_ io(zji,zjj) - bulk_sal ) * &790 ( sss_m(zji,zjj) - bulk_sal ) * & 790 791 a_i_b(ji) * & 791 792 ( zhgnew(ji) - ht_i_b(ji) ) * rhoic / rdt_ice … … 804 805 rdmicif_1d(ji) = rdmicif_1d(ji) + a_i_b(ji) & 805 806 * ( zhgnew(ji) - ht_i_b(ji) ) * rhoic & 806 + ( zhnnew - ht_s_b(ji) ) * rhosn )807 + ( zhnnew - ht_s_b(ji) ) * rhosn 807 808 #endif 808 809 ! Actualize new snow and ice thickness. -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limthd_lac.F90
r884 r886 17 17 USE phycst 18 18 USE ice_oce ! ice variables 19 USE sbc_oce ! Surface boundary condition: ocean fields 20 USE sbc_ice ! Surface boundary condition: ice fields 19 21 USE thd_ice 20 22 USE dom_ice … … 23 25 USE iceini 24 26 USE limtab 25 USE taumod26 USE blk_oce27 27 USE limcons 28 28 … … 181 181 vt_s_init, vt_s_final, & ! snow volume summed over categories 182 182 et_i_init, et_i_final, & ! ice energy summed over categories 183 et_s_init , et_s_final! snow energy summed over categories183 et_s_init ! snow energy summed over categories 184 184 185 185 REAL(wp) :: & … … 267 267 !------------- 268 268 ! C-grid wind stress components 269 ztaux = ( gtaux(ji-1,jj ) * tmu(ji-1,jj ) &270 + gtaux(ji ,jj ) * tmu(ji ,jj ) ) / 2.0271 ztauy = ( gtauy(ji ,jj-1) * tmv(ji ,jj-1) &272 + gtauy(ji ,jj ) * tmv(ji ,jj ) ) / 2.0269 ztaux = ( utaui_ice(ji-1,jj ) * tmu(ji-1,jj ) & 270 + utaui_ice(ji ,jj ) * tmu(ji ,jj ) ) / 2.0 271 ztauy = ( vtaui_ice(ji ,jj-1) * tmv(ji ,jj-1) & 272 + vtaui_ice(ji ,jj ) * tmv(ji ,jj ) ) / 2.0 273 273 ! Square root of wind stress 274 274 ztenagm = SQRT( SQRT( ztaux * ztaux + ztauy * ztauy ) ) … … 343 343 nbpac = nbpac + 1 344 344 npac( nbpac ) = (jj - 1) * jpi + ji 345 IF ( (ji.eq.jiind ex).AND.(jj.eq.jjindex) ) THEN345 IF ( (ji.eq.jiindx).AND.(jj.eq.jjindx) ) THEN 346 346 jiindex_1d = nbpac 347 347 ENDIF … … 418 418 zji = MOD( npac(ji) - 1, jpi ) + 1 419 419 zjj = ( npac(ji) - 1 ) / jpi + 1 420 zs_newice(ji) = MIN( 0.5*sss_ io(zji,zjj) , zs_newice(ji) )420 zs_newice(ji) = MIN( 0.5*sss_m(zji,zjj) , zs_newice(ji) ) 421 421 END DO ! jl 422 422 … … 476 476 zjj = ( npac(ji) - 1 ) / jpi + 1 477 477 fseqv_1d(ji) = fseqv_1d(ji) + & 478 ( sss_ io(zji,zjj) - bulk_sal ) * rhoic *&478 ( sss_m(zji,zjj) - bulk_sal ) * rhoic * & 479 479 zv_newice(ji) / rdt_ice 480 480 END DO … … 484 484 zjj = ( npac(ji) - 1 ) / jpi + 1 485 485 fseqv_1d(ji) = fseqv_1d(ji) + & 486 ( sss_ io(zji,zjj) - zs_newice(ji) ) * rhoic *&486 ( sss_m(zji,zjj) - zs_newice(ji) ) * rhoic * & 487 487 zv_newice(ji) / rdt_ice 488 488 END DO ! ji … … 617 617 END DO 618 618 619 WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiind ex, 1:jpl)619 WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindx, 1:jpl) 620 620 DO jl = ice_cat_bounds(jm,1), ice_cat_bounds(jm,2) 621 621 DO ji = 1, nbpac … … 626 626 END DO ! ji 627 627 END DO ! jl 628 WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiind ex, 1:jpl)628 WRITE(numout,*) ' zv_i_ac : ', zv_i_ac(jiindx, 1:jpl) 629 629 630 630 !--------------------------------- … … 796 796 ! CALL lim_cons_check (et_s_init, et_s_final, 1.0e-3, fieldid) 797 797 798 WRITE(numout,*) ' vt_i_init : ', vt_i_init(jiind ex,jjindex)799 WRITE(numout,*) ' vt_i_final: ', vt_i_final(jiind ex,jjindex)800 WRITE(numout,*) ' et_i_init : ', et_i_init(jiind ex,jjindex)801 WRITE(numout,*) ' et_i_final: ', et_i_final(jiind ex,jjindex)798 WRITE(numout,*) ' vt_i_init : ', vt_i_init(jiindx,jjindx) 799 WRITE(numout,*) ' vt_i_final: ', vt_i_final(jiindx,jjindx) 800 WRITE(numout,*) ' et_i_init : ', et_i_init(jiindx,jjindx) 801 WRITE(numout,*) ' et_i_final: ', et_i_final(jiindx,jjindx) 802 802 803 803 ENDIF -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limthd_sal.F90
r884 r886 16 16 USE phycst ! physical constants (ocean directory) 17 17 USE ice_oce ! ice variables 18 USE sbc_oce ! Surface boundary condition: ocean fields 18 19 USE thd_ice 19 20 USE iceini … … 40 41 CONTAINS 41 42 42 SUBROUTINE lim_thd_sal(kideb,kiut ,jl)43 SUBROUTINE lim_thd_sal(kideb,kiut) 43 44 !!------------------------------------------------------------------- 44 45 !! *** ROUTINE lim_thd_sal *** … … 76 77 !! * Local variables 77 78 INTEGER, INTENT(in) :: & 78 kideb, kiut , jl!: thickness category index79 kideb, kiut !: thickness category index 79 80 80 81 INTEGER :: & … … 318 319 zjj = ( npb(ji) - 1 ) / jpi + 1 319 320 fseqv_1d(ji) = fseqv_1d(ji) + & 320 ( sss_ io(zji,zjj) - bulk_sal ) * &321 ( sss_m(zji,zjj) - bulk_sal ) * & 321 322 rhoic * a_i_b(ji) * & 322 323 MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice … … 327 328 zjj = ( npb(ji) - 1 ) / jpi + 1 328 329 fseqv_1d(ji) = fseqv_1d(ji) + & 329 ( sss_ io(zji,zjj) - s_i_new(ji) ) * &330 ( sss_m(zji,zjj) - s_i_new(ji) ) * & 330 331 rhoic * a_i_b(ji) * & 331 332 MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limtrp.F90
r884 r886 17 17 USE in_out_manager ! I/O manager 18 18 USE ice_oce ! ice variables 19 USE sbc_oce ! Surface boundary condition: ocean fields 19 20 USE dom_ice 20 21 USE ice … … 519 520 520 521 ! Ice salinity and age 521 zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_ io(ji,jj) , &522 zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj) , & 522 523 zusvoic * zs0sm(ji,jj,jl) ), s_i_min ) * & 523 524 v_i(ji,jj,jl) -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limupdate.F90
r884 r886 25 25 USE in_out_manager 26 26 USE ice_oce ! ice variables 27 USE flx_oce ! forcings variables 27 USE sbc_oce ! Surface boundary condition: ocean fields 28 USE sbc_ice ! Surface boundary condition: ice fields 28 29 USE dom_ice 29 30 USE daymod 30 31 USE phycst ! Define parameters for the routines 31 USE taumod32 32 USE ice 33 33 USE iceini 34 USE ocesbc35 34 USE lbclnk 36 35 USE limdyn 37 36 USE limtrp 38 37 USE limthd 39 USE lim flx38 USE limsbc 40 39 USE limdia 41 40 USE limwri … … 126 125 !+++++ [ 127 126 WRITE(numout,*) ' O) Initial values ' 128 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)129 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)130 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)131 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)132 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)133 DO jk = 1, nlay_i 134 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)127 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 128 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 129 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 130 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 131 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 132 DO jk = 1, nlay_i 133 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 135 134 END DO 136 135 !+++++ ] … … 238 237 239 238 !residual salt flux if ice is over-molten 240 fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_ io(ji,jj) - sm_i(ji,jj,jl) ) * &239 fsalt_res(ji,jj) = fsalt_res(ji,jj) + ( sss_m(ji,jj) - sm_i(ji,jj,jl) ) * & 241 240 ( rhoic * zdvres / rdt_ice ) 242 241 ! fheat_res(ji,jj) = fheat_res(ji,jj) + rhoic * lfus * zdvres / rdt_ice … … 254 253 255 254 !residual salt flux if snow is over-molten 256 fsalt_res(ji,jj) = fsalt_res(ji,jj) + sss_ io(ji,jj) * &255 fsalt_res(ji,jj) = fsalt_res(ji,jj) + sss_m(ji,jj) * & 257 256 ( rhosn * zdvres / rdt_ice ) 258 257 !this flux will be positive if snow was over-molten … … 276 275 277 276 WRITE(numout,*) ' 1. Before update of Global variables ' 278 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)279 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)280 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)281 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)282 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)283 DO jk = 1, nlay_i 284 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)277 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 278 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 279 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 280 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 281 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 282 DO jk = 1, nlay_i 283 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 285 284 END DO 286 285 !+++++ ] … … 294 293 CALL lim_var_glo2eqv ! useless, just for debug 295 294 DO jk = 1, nlay_i 296 WRITE(numout,*) ' t_i : ', t_i(jiind ex, jjindex, jk, 1:jpl)295 WRITE(numout,*) ' t_i : ', t_i(jiindx, jjindx, jk, 1:jpl) 297 296 END DO 298 297 e_i(:,:,:,:) = e_i(:,:,:,:) + d_e_i_trp(:,:,:,:) … … 300 299 WRITE(numout,*) ' After transport update ' 301 300 DO jk = 1, nlay_i 302 WRITE(numout,*) ' t_i : ', t_i(jiind ex, jjindex, jk, 1:jpl)301 WRITE(numout,*) ' t_i : ', t_i(jiindx, jjindx, jk, 1:jpl) 303 302 END DO 304 303 e_i(:,:,:,:) = e_i(:,:,:,:) + d_e_i_thd(:,:,:,:) … … 306 305 WRITE(numout,*) ' After thermodyn update ' 307 306 DO jk = 1, nlay_i 308 WRITE(numout,*) ' t_i : ', t_i(jiind ex, jjindex, jk, 1:jpl)307 WRITE(numout,*) ' t_i : ', t_i(jiindx, jjindx, jk, 1:jpl) 309 308 END DO 310 309 … … 316 315 !+++++ [ 317 316 WRITE(numout,*) ' 1. After update of Global variables (2) ' 318 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)319 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)320 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)321 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)322 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)323 WRITE(numout,*) ' oa_i : ', oa_i(jiind ex, jjindex, 1:jpl)324 WRITE(numout,*) ' e_s : ', e_s(jiind ex, jjindex, 1, 1:jpl)325 DO jk = 1, nlay_i 326 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)317 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 318 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 319 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 320 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 321 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 322 WRITE(numout,*) ' oa_i : ', oa_i(jiindx, jjindx, 1:jpl) 323 WRITE(numout,*) ' e_s : ', e_s(jiindx, jjindx, 1, 1:jpl) 324 DO jk = 1, nlay_i 325 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 327 326 END DO 328 327 !+++++ ] … … 348 347 !+++++ 349 348 WRITE(numout,*) ' Before everything ' 350 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)351 WRITE(numout,*) ' oa_i: ', oa_i(jiind ex, jjindex, 1:jpl)352 DO jk = 1, nlay_i 353 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)354 END DO 355 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)349 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 350 WRITE(numout,*) ' oa_i: ', oa_i(jiindx, jjindx, 1:jpl) 351 DO jk = 1, nlay_i 352 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 353 END DO 354 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 356 355 !+++++ 357 356 … … 362 361 !+++++ 363 362 WRITE(numout,*) ' After advection ' 364 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)365 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)363 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 364 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 366 365 !+++++ 367 366 … … 401 400 !+++++ [ 402 401 WRITE(numout,*) ' 2.1 ' 403 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)404 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)405 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)406 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)407 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)408 DO jk = 1, nlay_i 409 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)402 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 403 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 404 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 405 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 406 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 407 DO jk = 1, nlay_i 408 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 410 409 END DO 411 410 !+++++ ] … … 444 443 !+++++ [ 445 444 WRITE(numout,*) ' 2.1 initial ' 446 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)447 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)448 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)449 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)450 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)451 DO jk = 1, nlay_i 452 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)445 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 446 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 447 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 448 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 449 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 450 DO jk = 1, nlay_i 451 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 453 452 END DO 454 453 !+++++ ] … … 464 463 !+++++ [ 465 464 WRITE(numout,*) ' 2.1 before rebinning ' 466 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)467 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)468 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)469 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)470 DO jk = 1, nlay_i 471 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)472 END DO 473 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)465 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 466 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 467 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 468 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 469 DO jk = 1, nlay_i 470 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 471 END DO 472 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 474 473 !+++++ ] 475 474 … … 483 482 !+++++ [ 484 483 WRITE(numout,*) ' 2.1 after rebinning' 485 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)486 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)487 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)488 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)489 DO jk = 1, nlay_i 490 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)491 WRITE(numout,*) ' t_i : ', t_i(jiind ex, jjindex, jk, 1:jpl)492 END DO 493 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)484 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 485 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 486 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 487 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 488 DO jk = 1, nlay_i 489 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 490 WRITE(numout,*) ' t_i : ', t_i(jiindx, jjindx, jk, 1:jpl) 491 END DO 492 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 494 493 !+++++ ] 495 494 … … 611 610 !+++++ [ 612 611 WRITE(numout,*) ' 2.3 after melt of an internal ice layer ' 613 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)614 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)615 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)616 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)617 DO jk = 1, nlay_i 618 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)619 WRITE(numout,*) ' t_i : ', t_i(jiind ex, jjindex, jk, 1:jpl)620 END DO 621 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)612 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 613 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 614 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 615 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 616 DO jk = 1, nlay_i 617 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 618 WRITE(numout,*) ' t_i : ', t_i(jiindx, jjindx, jk, 1:jpl) 619 END DO 620 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 622 621 !+++++ ] 623 622 … … 638 637 639 638 !++++++ 640 IF ( (ji.eq.jiind ex) .AND. (jj.eq.jjindex) ) THEN639 IF ( (ji.eq.jiindx) .AND. (jj.eq.jjindx) ) THEN 641 640 WRITE(numout,*) ' jl : ', jl 642 641 WRITE(numout,*) ' ze_s : ', ze_s … … 737 736 !+++++ [ 738 737 WRITE(numout,*) ' 2.8 ' 739 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)740 WRITE(numout,*) ' at_i: ', at_i(jiind ex,jjindex)741 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)742 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)743 DO jk = 1, nlay_i 744 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)745 END DO 746 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)738 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 739 WRITE(numout,*) ' at_i: ', at_i(jiindx,jjindx) 740 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 741 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 742 DO jk = 1, nlay_i 743 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 744 END DO 745 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 747 746 !+++++ ] 748 747 … … 767 766 WRITE(numout,*) ' 2.9 ' 768 767 DO jk = 1, nlay_i 769 WRITE(numout,*) ' e_i : ', e_i(jiind ex, jjindex, jk, 1:jpl)770 END DO 771 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)772 773 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)768 WRITE(numout,*) ' e_i : ', e_i(jiindx, jjindx, jk, 1:jpl) 769 END DO 770 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 771 772 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 774 773 775 774 !--------------------- … … 784 783 DO ji = 1, jpi 785 784 ! salinity stays in bounds 786 smv_i(ji,jj,jl) = MAX(MIN((rhoic-rhosn)/rhoic*sss_ io(ji,jj),smv_i(ji,jj,jl)), &785 smv_i(ji,jj,jl) = MAX(MIN((rhoic-rhosn)/rhoic*sss_m(ji,jj),smv_i(ji,jj,jl)), & 787 786 0.1 * v_i(ji,jj,jl) ) 788 787 i_ice_switch = 1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) … … 798 797 !+++++ [ 799 798 WRITE(numout,*) ' 2.11 ' 800 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)801 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)802 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)803 WRITE(numout,*) ' at_i ', at_i(jiind ex,jjindex)804 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)799 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 800 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 801 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 802 WRITE(numout,*) ' at_i ', at_i(jiindx,jjindx) 803 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 805 804 !+++++ ] 806 805 … … 826 825 !+++++ [ 827 826 WRITE(numout,*) ' 2.12 ' 828 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)829 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)830 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)831 WRITE(numout,*) ' at_i ', at_i(jiind ex,jjindex)832 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)827 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 828 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 829 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 830 WRITE(numout,*) ' at_i ', at_i(jiindx,jjindx) 831 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 833 832 !+++++ ] 834 833 … … 873 872 !+++++ [ 874 873 WRITE(numout,*) ' 2.13 ' 875 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)876 WRITE(numout,*) ' at_i ', at_i(jiind ex,jjindex)877 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)878 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)879 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)874 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 875 WRITE(numout,*) ' at_i ', at_i(jiindx,jjindx) 876 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 877 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 878 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 880 879 !+++++ ] 881 880 … … 907 906 !+++++ [ 908 907 WRITE(numout,*) ' rebinning before' 909 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)910 WRITE(numout,*) ' at_i ', at_i(jiind ex,jjindex)911 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)912 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)913 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)908 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 909 WRITE(numout,*) ' at_i ', at_i(jiindx,jjindx) 910 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 911 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 912 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 914 913 !+++++ ] 915 914 !old version … … 925 924 !+++++ [ 926 925 WRITE(numout,*) ' rebinning final' 927 WRITE(numout,*) ' a_i : ', a_i(jiind ex, jjindex, 1:jpl)928 WRITE(numout,*) ' at_i ', at_i(jiind ex,jjindex)929 WRITE(numout,*) ' v_i : ', v_i(jiind ex, jjindex, 1:jpl)930 WRITE(numout,*) ' v_s : ', v_s(jiind ex, jjindex, 1:jpl)931 WRITE(numout,*) ' smv_i: ', smv_i(jiind ex, jjindex, 1:jpl)926 WRITE(numout,*) ' a_i : ', a_i(jiindx, jjindx, 1:jpl) 927 WRITE(numout,*) ' at_i ', at_i(jiindx,jjindx) 928 WRITE(numout,*) ' v_i : ', v_i(jiindx, jjindx, 1:jpl) 929 WRITE(numout,*) ' v_s : ', v_s(jiindx, jjindx, 1:jpl) 930 WRITE(numout,*) ' smv_i: ', smv_i(jiindx, jjindx, 1:jpl) 932 931 !+++++ ] 933 932 … … 1014 1013 END DO !ji 1015 1014 1016 WRITE(numout,*) ' TESTOSC1 ', tio_u(jiind ex,jjindex), tio_v(jiindex,jjindex)1017 WRITE(numout,*) ' TESTOSC2 ', u_ice(jiind ex,jjindex), v_ice(jiindex,jjindex)1018 WRITE(numout,*) ' TESTOSC3 ', u_oce(jiind ex,jjindex), v_oce(jiindex,jjindex)1019 WRITE(numout,*) ' TESTOSC4 ', tauxw(jiindex,jjindex), tauxw(jiindex,jjindex)1015 WRITE(numout,*) ' TESTOSC1 ', tio_u(jiindx,jjindx), tio_v(jiindx,jjindx) 1016 WRITE(numout,*) ' TESTOSC2 ', u_ice(jiindx,jjindx), v_ice(jiindx,jjindx) 1017 WRITE(numout,*) ' TESTOSC3 ', u_oce(jiindx,jjindx), v_oce(jiindx,jjindx) 1018 WRITE(numout,*) ' TESTOSC4 ', utau (jiindx,jjindx), vtau (jiindx,jjindx) 1020 1019 1021 1020 … … 1087 1086 CALL prt_ctl_info(' ~~~~~~~~~~~~~~~~~~ ') 1088 1087 CALL prt_ctl(tab2d_1=fmmec , clinfo1= ' lim_update : fmmec : ', tab2d_2=fhmec , clinfo2= ' fhmec : ') 1089 CALL prt_ctl(tab2d_1=sst_ io , clinfo1= ' lim_update : sst : ', tab2d_2=sss_io, clinfo2= ' sss : ')1088 CALL prt_ctl(tab2d_1=sst_m , clinfo1= ' lim_update : sst : ', tab2d_2=sss_m , clinfo2= ' sss : ') 1090 1089 CALL prt_ctl(tab2d_1=fhbri , clinfo1= ' lim_update : fhbri : ', tab2d_2=fheat_rpo , clinfo2= ' fheat_rpo : ') 1091 1090 … … 1093 1092 CALL prt_ctl_info(' - Stresses : ') 1094 1093 CALL prt_ctl_info(' ~~~~~~~~~~ ') 1095 CALL prt_ctl(tab2d_1=tauxw , clinfo1= ' lim_update : tauxw : ', tab2d_2=tauyw , clinfo2= ' tauyw : ') 1096 CALL prt_ctl(tab2d_1=taux , clinfo1= ' lim_update : taux : ', tab2d_2=tauy , clinfo2= ' tauy : ') 1097 CALL prt_ctl(tab2d_1=ftaux , clinfo1= ' lim_update : ftaux : ', tab2d_2=ftauy , clinfo2= ' ftauy : ') 1098 CALL prt_ctl(tab2d_1=gtaux , clinfo1= ' lim_update : gtaux : ', tab2d_2=gtauy , clinfo2= ' gtauy : ') 1099 CALL prt_ctl(tab2d_1=u_io , clinfo1= ' lim_update : u_io : ', tab2d_2=v_io , clinfo2= ' v_io : ') 1094 CALL prt_ctl(tab2d_1=utau , clinfo1= ' lim_update : utau : ', tab2d_2=vtau , clinfo2= ' vtau : ') 1095 CALL prt_ctl(tab2d_1=utaui_ice , clinfo1= ' lim_update : utaui_ice : ', tab2d_2=vtaui_ice , clinfo2= ' vtaui_ice : ') 1096 CALL prt_ctl(tab2d_1=u_oce , clinfo1= ' lim_update : u_oce : ', tab2d_2=v_oce , clinfo2= ' v_oce : ') 1100 1097 ENDIF 1101 1098 -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limvar.F90
r884 r886 40 40 USE phycst ! physical constants (ocean directory) 41 41 USE ice_oce ! ice variables 42 USE sbc_oce ! Surface boundary condition: ocean fields 42 43 USE thd_ice 43 44 USE in_out_manager … … 428 429 zind0 , & !: switch, = 1 if sm_i lt s_i_0 429 430 zind01 , & !: switch, = 1 if sm_i between s_i_0 and s_i_1 430 zindbal , & !: switch, = 1, if 2*sm_i gt sss_ io431 zindbal , & !: switch, = 1, if 2*sm_i gt sss_m 431 432 zargtemp !: dummy factor 432 433 … … 491 492 zind01 = ( 1.0 - zind0 ) * & 492 493 MAX( 0.0 , SIGN( 1.0 , s_i_1 - sm_i(ji,jj,jl) ) ) 493 ! If 2.sm_i GE sss_ iothen zindbal = 1494 ! If 2.sm_i GE sss_m then zindbal = 1 494 495 zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) - & 495 sss_ io(ji,jj) ) )496 sss_m(ji,jj) ) ) 496 497 zalpha(ji,jj,jl) = zind0 * 1.0 & 497 498 + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + & … … 692 693 zind01 = ( 1.0 - zind0 ) * & 693 694 MAX( 0.0 , SIGN( 1.0 , s_i_1 - sm_i_b(ji) ) ) 694 ! if 2.sm_i GE sss_ iothen zindbal = 1695 ! if 2.sm_i GE sss_m then zindbal = 1 695 696 zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i_b(ji) - & 696 sss_ io(zji,zjj) ) )697 sss_m(zji,zjj) ) ) 697 698 698 699 zalpha = zind0 * 1.0 & -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limwri.F90
r884 r886 18 18 !! * Modules used 19 19 USE ioipsl 20 USE dianam ! build name of file (routine)20 USE dianam ! build name of file (routine) 21 21 USE phycst 22 22 USE dom_oce … … 24 24 USE in_out_manager 25 25 USE ice_oce ! ice variables 26 USE flx_oce 26 USE sbc_oce ! Surface boundary condition: ocean fields 27 USE sbc_ice ! Surface boundary condition: ice fields 27 28 USE dom_ice 28 29 USE ice … … 137 138 zsto = rdt_ice 138 139 clop = "ave(x)" 139 zout = nwrite * rdt_ice / n fice140 zout = nwrite * rdt_ice / nn_fsbc 140 141 zsec = 0. 141 142 niter = 0 … … 165 166 zsto = rdt_ice 166 167 clop = "ave(x)" 167 zout = nwrite * rdt_ice / n fice168 zout = nwrite * rdt_ice / nn_fsbc 168 169 zsec = 0. 169 170 nitera = 0 … … 221 222 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) ) 222 223 zcmo(ji,jj,17) = zcmo(ji,jj,17) + a_i(ji,jj,jl)*qsr_ice (ji,jj,jl) 223 zcmo(ji,jj,18) = zcmo(ji,jj,18) + a_i(ji,jj,jl)*qns r_ice(ji,jj,jl)224 zcmo(ji,jj,18) = zcmo(ji,jj,18) + a_i(ji,jj,jl)*qns_ice(ji,jj,jl) 224 225 zcmo(ji,jj,27) = zcmo(ji,jj,27) + t_su(ji,jj,jl)*a_i(ji,jj,jl)/MAX(at_i(ji,jj),epsi16)*zinda 225 226 END DO … … 253 254 & / 2.0 254 255 zcmo(ji,jj,8) = zindb * ( v_ice(ji,jj ) * tmv(ji,jj) & 255 & + v_ice(ji,jj-1) * tmv(ji,jj-1) )&256 & + v_ice(ji,jj-1) * tmv(ji,jj-1) ) & 256 257 & / 2.0 257 zcmo(ji,jj,9) = sst_ io(ji,jj)258 zcmo(ji,jj,10) = sss_ io(ji,jj)259 260 zcmo(ji,jj,11) = fnsolar(ji,jj) + fsolar(ji,jj)261 zcmo(ji,jj,12) = fsolar(ji,jj)262 zcmo(ji,jj,13) = fnsolar(ji,jj)258 zcmo(ji,jj,9) = sst_m(ji,jj) 259 zcmo(ji,jj,10) = sss_m(ji,jj) 260 261 zcmo(ji,jj,11) = qns(ji,jj) + qsr(ji,jj) 262 zcmo(ji,jj,12) = qsr(ji,jj) 263 zcmo(ji,jj,13) = qns(ji,jj) 263 264 zcmo(ji,jj,14) = fhbri(ji,jj) 264 zcmo(ji,jj,15) = gtaux(ji,jj)265 zcmo(ji,jj,16) = gtauy(ji,jj)266 zcmo(ji,jj,17) = zcmo(ji,jj,17) + (1.0-at_i(ji,jj))*qsr _oce(ji,jj)267 zcmo(ji,jj,18) = zcmo(ji,jj,18) + (1.0-at_i(ji,jj))*qns r_oce(ji,jj)265 zcmo(ji,jj,15) = utaui_ice(ji,jj) 266 zcmo(ji,jj,16) = vtaui_ice(ji,jj) 267 zcmo(ji,jj,17) = zcmo(ji,jj,17) + (1.0-at_i(ji,jj))*qsr(ji,jj) 268 zcmo(ji,jj,18) = zcmo(ji,jj,18) + (1.0-at_i(ji,jj))*qns(ji,jj) 268 269 zcmo(ji,jj,19) = sprecip(ji,jj) 269 270 zcmo(ji,jj,20) = smt_i(ji,jj) … … 299 300 END DO 300 301 301 IF ( jf == 7 .OR. jf == 8 .OR. jf == 11 .OR. jf == 12 .OR. jf == 15 .OR. & 302 jf == 16 ) THEN 302 IF ( jf == 7 .OR. jf == 8 .OR. jf == 15 .OR. jf == 16 ) THEN 303 303 CALL lbc_lnk( zfield, 'T', -1. ) 304 304 ELSE … … 315 315 END DO 316 316 317 IF ( ( n fice* niter + nit000 - 1 ) >= nitend .OR. kindic < 0 ) THEN317 IF ( ( nn_fsbc * niter + nit000 - 1 ) >= nitend .OR. kindic < 0 ) THEN 318 318 WRITE(numout,*) ' Closing the icemod file ' 319 319 CALL histclo( nice ) … … 374 374 ! not yet implemented 375 375 376 IF ( ( n fice* niter + nit000 - 1 ) >= nitend .OR. kindic < 0 ) THEN376 IF ( ( nn_fsbc * niter + nit000 - 1 ) >= nitend .OR. kindic < 0 ) THEN 377 377 WRITE(numout,*) ' Closing the icemod file ' 378 378 CALL histclo( nicea ) -
branches/dev_001_SBC/NEMO/LIM_SRC_3/limwri_dimg.h90
r884 r886 80 80 81 81 zsto = rdt_ice 82 zout = nwrite * rdt_ice / n fice82 zout = nwrite * rdt_ice / nn_fsbc 83 83 zsec = 0. 84 84 niter = 0 … … 111 111 + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 112 112 / ztmu 113 zcmo(ji,jj,9) = sst_ io(ji,jj)114 zcmo(ji,jj,10) = sss_ io(ji,jj)115 116 zcmo(ji,jj,11) = fnsolar(ji,jj) + fsolar(ji,jj)117 zcmo(ji,jj,12) = fsolar(ji,jj)118 zcmo(ji,jj,13) = fnsolar(ji,jj)113 zcmo(ji,jj,9) = sst_m(ji,jj) 114 zcmo(ji,jj,10) = sss_m(ji,jj) 115 116 zcmo(ji,jj,11) = qns(ji,jj) + qsr(ji,jj) 117 zcmo(ji,jj,12) = qsr(ji,jj) 118 zcmo(ji,jj,13) = qns(ji,jj) 119 119 ! See thersf for the coefficient 120 zcmo(ji,jj,14) = - fsalt(ji,jj) * rday * ( sss_io(ji,jj) + epsi16 ) / soce121 zcmo(ji,jj,15) = gtaux(ji,jj)122 zcmo(ji,jj,16) = gtauy(ji,jj)123 zcmo(ji,jj,17) = ( 1.0 - frld(ji,jj) ) * qsr_ice (ji,jj) + frld(ji,jj) * qsr_oce(ji,jj)124 zcmo(ji,jj,18) = ( 1.0 - frld(ji,jj) ) * qnsr_ice(ji,jj) + frld(ji,jj) * qnsr_oce(ji,jj)120 zcmo(ji,jj,14) = - emps(ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce 121 zcmo(ji,jj,15) = utaui_ice(ji,jj) 122 zcmo(ji,jj,16) = vtaui_ice(ji,jj) 123 zcmo(ji,jj,17) = qsr (ji,jj) 124 zcmo(ji,jj,18) = qns(ji,jj) 125 125 zcmo(ji,jj,19) = sprecip(ji,jj) 126 126 END DO … … 154 154 + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 155 155 / ztmu 156 rcmoy(ji,jj,9) = sst_ io(ji,jj)157 rcmoy(ji,jj,10) = sss_ io(ji,jj)158 159 rcmoy(ji,jj,11) = fnsolar(ji,jj) + fsolar(ji,jj)160 rcmoy(ji,jj,12) = fsolar(ji,jj)161 rcmoy(ji,jj,13) = fnsolar(ji,jj)156 rcmoy(ji,jj,9) = sst_m(ji,jj) 157 rcmoy(ji,jj,10) = sss_m(ji,jj) 158 159 rcmoy(ji,jj,11) = qns(ji,jj) + qsr(ji,jj) 160 rcmoy(ji,jj,12) = qsr(ji,jj) 161 rcmoy(ji,jj,13) = qns(ji,jj) 162 162 ! See thersf for the coefficient 163 rcmoy(ji,jj,14) = - fsalt(ji,jj) * rday * ( sss_io(ji,jj) + epsi16 ) / soce164 rcmoy(ji,jj,15) = gtaux(ji,jj)165 rcmoy(ji,jj,16) = gtauy(ji,jj)166 rcmoy(ji,jj,17) = ( 1.0 - frld(ji,jj) ) * qsr_ice (ji,jj) + frld(ji,jj) * qsr_oce(ji,jj)167 rcmoy(ji,jj,18) = ( 1.0 - frld(ji,jj) ) * qnsr_ice(ji,jj) + frld(ji,jj) * qnsr_oce(ji,jj)163 rcmoy(ji,jj,14) = - emps(ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce 164 rcmoy(ji,jj,15) = utaui_ice(ji,jj) 165 rcmoy(ji,jj,16) = vtaui_ice(ji,jj) 166 rcmoy(ji,jj,17) = qsr(ji,jj) 167 rcmoy(ji,jj,18) = qns(ji,jj) 168 168 rcmoy(ji,jj,19) = sprecip(ji,jj) 169 169 END DO … … 176 176 zfield(:,:) = (rcmoy(:,:,jf) * cmulti(jf) + cadd(jf)) * tmask(:,:,1) 177 177 178 IF ( jf == 7 .OR. jf == 8 .OR. jf == 11 .OR. jf == 12 .OR. jf == 15 .OR. & 179 jf == 23 .OR. jf == 24 .OR. jf == 16 ) THEN 178 IF ( jf == 7 .OR. jf == 8 .OR. jf == 15 .OR. jf == 16 ) THEN 180 179 CALL lbc_lnk( zfield, 'T', -1. ) 181 180 ELSE -
branches/dev_001_SBC/NEMO/OPA_SRC/DIA/diawri.F90
r885 r886 14 14 USE sol_oce ! solver variables 15 15 USE ice_oce ! ice variables 16 USE sbc_oce ! surface boundary condition: ocean17 USE sbc_ice ! surface boundary condition: ice16 USE sbc_oce ! Surface boundary condition: ocean fields 17 USE sbc_ice ! Surface boundary condition: ice fields 18 18 USE sbcssr ! restoring term toward SST/SSS climatology 19 19 USE phycst ! physical constants … … 255 255 CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux" , "Kg/m2/s", & ! emp 256 256 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 257 CALL histdef( nid_T, "sorunoff", "Runoffs" , "Kg/m2/s", & ! runoffs258 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout )257 !!$ CALL histdef( nid_T, "sorunoff", "Runoffs" , "Kg/m2/s", & ! runoffs 258 !!$ & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 259 259 CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux" , "kg/m2/s", & ! emps 260 260 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) … … 308 308 #endif 309 309 310 #if ( defined key_lim3 || defined key_lim2 ) && defined key_coupled 310 #if defined key_coupled 311 # if defined key_lim3 312 Must be adapted to LIM3 313 # else 311 314 CALL histdef( nid_T,"soicetem" , "Ice Surface Temperature" , "K" , & ! tn_ice 312 315 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 313 316 CALL histdef( nid_T,"soicealb" , "Ice Albedo" , "[0,1]" , & ! alb_ice 314 317 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 318 # endif 315 319 #endif 316 320 … … 419 423 !!$#endif 420 424 CALL histwrite( nid_T, "sowaflup", it, emp , ndim_hT, ndex_hT ) ! upward water flux 421 CALL histwrite( nid_T, "sorunoff", it, runoff , ndim_hT, ndex_hT ) ! runoff425 !!$ CALL histwrite( nid_T, "sorunoff", it, runoff , ndim_hT, ndex_hT ) ! runoff 422 426 CALL histwrite( nid_T, "sowaflcd", it, emps , ndim_hT, ndex_hT ) ! c/d water flux 423 427 zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1) … … 452 456 CALL histwrite( nid_T, "sohtc300", it, htc3 , ndim_hT, ndex_hT ) ! first 300m heaat content 453 457 #endif 454 #if ( defined key_lim3 || defined key_lim2 ) && defined key_coupled 458 459 #if defined key_coupled 460 # if defined key_lim3 461 Must be adapted for LIM3 455 462 CALL histwrite( nid_T, "soicetem", it, tn_ice , ndim_hT, ndex_hT ) ! surf. ice temperature 456 463 CALL histwrite( nid_T, "soicealb", it, alb_ice , ndim_hT, ndex_hT ) ! ice albedo 464 # else 465 CALL histwrite( nid_T, "soicetem", it, tn_ice , ndim_hT, ndex_hT ) ! surf. ice temperature 466 CALL histwrite( nid_T, "soicealb", it, alb_ice , ndim_hT, ndex_hT ) ! ice albedo 467 # endif 457 468 #endif 458 469 ! Write fields on U grid -
branches/dev_001_SBC/NEMO/OPA_SRC/DIA/diawri_dimg.h90
r881 r886 186 186 ! fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 187 187 fsel(:,:,16) = fsel(:,:,16) + emps(:,:) 188 #if defined key_lim2189 fsel(:,:,17) = fsel(:,:,17) + fsalt(:,:)190 #endif191 188 #ifdef key_diaspr 192 189 fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g 193 #endif194 #if defined key_flx_core195 fsel(:,:,21) = fsel(:,:,21) + qla(:,:)196 fsel(:,:,22) = fsel(:,:,22) + qlw(:,:)197 fsel(:,:,23) = fsel(:,:,23) + qsb(:,:)198 190 #endif 199 191 ! … … 276 268 ! fsel(:,:,15) = fbt(:,:) 277 269 fsel(:,:,16) = emps(:,:) * tmask(:,:,1) 278 #if defined key_lim2279 fsel(:,:,17) = fsalt(:,:) * tmask(:,:,1)280 #endif281 270 #ifdef key_diaspr 282 271 fsel(:,:,18) = gps(:,:) /g 283 272 fsel(:,:,19) = spgu(:,:) 284 273 fsel(:,:,20) = spgv(:,:) 285 #endif286 #if defined key_flx_core287 fsel(:,:,21) = qla(:,:)* tmask(:,:,1)288 fsel(:,:,22) = qlw(:,:)* tmask(:,:,1)289 fsel(:,:,23) = qsb(:,:)* tmask(:,:,1)290 274 #endif 291 275 ! -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/albedo.F90
r881 r886 7 7 !! 8.5 ! 03-07 (C. Ethe, G. Madec) Optimization (old name:shine) 8 8 !! 9.0 ! 04-11 (C. Talandier) add albedo_init 9 !! 9.0 ! 06-08 (G. Madec) cleaning for surface module 10 !!---------------------------------------------------------------------- 11 12 !!---------------------------------------------------------------------- 13 !! blk_albedo : albedo for ocean and ice (clear and overcast skies) 14 !! albedo_init : initialisation 15 !!---------------------------------------------------------------------- 16 USE oce ! ocean dynamics and tracers 9 !! - ! 01-06 (M. Vancoppenolle) LIM 3.0 10 !! - ! 06-08 (G. Madec) cleaning for surface module 11 !!---------------------------------------------------------------------- 12 !! albedo_ice : albedo for ice (clear and overcast skies) 13 !! albedo_oce : albedo for ocean (clear and overcast skies) 14 !! albedo_init : initialisation of albedo computation 15 !!---------------------------------------------------------------------- 17 16 USE phycst ! physical constants 18 USE in_out_manager 17 USE in_out_manager ! I/O manager 19 18 20 19 IMPLICIT NONE 21 20 PRIVATE 22 21 23 PUBLIC blk_albedo ! routine called by sbcice_lim module24 25 INTEGER :: albd_init = 0 !: control flag for initialization 26 27 REAL(wp) :: zzero = 0.e0 ! constant values28 REAL(wp) :: zone = 1.e0 ! " "22 PUBLIC albedo_ice ! routine called sbcice_lim.F90 23 PUBLIC albedo_oce ! routine called by ??? 24 25 INTEGER :: albd_init = 0 !: control flag for initialization 26 REAL(wp) :: zzero = 0.e0 ! constant values 27 REAL(wp) :: zone = 1.e0 ! " " 29 28 30 29 REAL(wp) :: c1 = 0.05 ! constants values 31 30 REAL(wp) :: c2 = 0.10 ! " " 32 REAL(wp) :: cmue = 0.40 ! cosine of local solar altitude31 REAL(wp) :: rmue = 0.40 ! cosine of local solar altitude 33 32 34 33 !!* namelist namalb … … 36 35 cgren = 0.06 , & ! correction of the snow or ice albedo to take into account 37 36 ! ! effects of cloudiness (Grenfell & Perovich, 1984) 37 #if defined key_lim3 38 albice = 0.53 , & ! albedo of melting ice in the arctic and antarctic (Shine & Hendersson-Sellers) 39 #else 38 40 albice = 0.50 , & ! albedo of melting ice in the arctic and antarctic (Shine & Hendersson-Sellers) 41 #endif 39 42 alphd = 0.80 , & ! coefficients for linear interpolation used to compute 40 43 alphdi = 0.72 , & ! albedo between two extremes values (Pyane, 1972) 41 44 alphc = 0.65 42 NAMELIST/namalb/ cgren, albice, alphd, alphdi, alphc43 45 44 46 !!---------------------------------------------------------------------- … … 50 52 CONTAINS 51 53 52 #if defined key_lim2 53 !!---------------------------------------------------------------------- 54 !! 'key_lim2' LIM 2.0 ice model 55 !!---------------------------------------------------------------------- 56 57 SUBROUTINE blk_albedo( palb , palcn , palbp , palcnp ) 58 !!---------------------------------------------------------------------- 59 !! *** ROUTINE blk_albedo *** 54 SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pa_ice_cs, pa_ice_os ) 55 !!---------------------------------------------------------------------- 56 !! *** ROUTINE albedo_ice *** 60 57 !! 61 58 !! ** Purpose : Computation of the albedo of the snow/ice system … … 68 65 !! References : Shine and Hendersson-Sellers 1985, JGR, 90(D1), 2243-2250. 69 66 !!---------------------------------------------------------------------- 70 USE ice_2 ! ???71 !!72 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: palb ! albedo of ice under overcast sky73 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: palcn ! albedo of ocean under overcastsky74 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: palbp ! albedo of ice under clear sky75 REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: palcnp ! albedo of ocean under clear sky76 !!77 INTEGER :: ji, jj ! dummy loop indices78 REAL(wp) :: z coef, & ! temporary scalar79 zalbpsnm , & ! albedo of ice under clear sky when snow is melting80 zalbpsnf , & ! albedo of ice under clear sky when snow is freezing81 zalbpsn , & ! albedo of snow/ice system when ice is coverd bysnow82 zalbpic , & ! albedo of snow/ice system when ice is free of snow83 zithsn , & ! = 1 for hsn >= 0 ( ice is cov. by snow ) ; = 0 otherwise (ice is free ofsnow)84 zitmlsn , & ! = 1 freezinz snow (sist >=rt0_snow) ; = 0 melting snow (sist<rt0_snow)85 zihsc1 , & ! = 1 hsn <= c1 ; = 0 hsn > c186 zihsc2 ! = 1 hsn >= c2 ; = 0 hsn < c287 LOGICAL , DIMENSION(jpi,jpj ) :: llmask !88 REAL(wp), DIMENSION(jpi,jpj ) :: zalbfz ! ( = alphdi for freezing ice ; = albice for melting ice )89 REAL(wp), DIMENSION(jpi,jpj ) :: zficeth !function of ice thickness67 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ice ! ice surface temperature 68 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_ice ! sea-ice thickness 69 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_snw ! snow thickness 70 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky 71 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_os ! albedo of ice under overcast sky 72 !! 73 INTEGER :: ji, jj, jl ! dummy loop indices 74 INTEGER :: ijpl ! number of ice categories (3rd dim of ice input arrays) 75 REAL(wp) :: zalbpsnm ! albedo of ice under clear sky when snow is melting 76 REAL(wp) :: zalbpsnf ! albedo of ice under clear sky when snow is freezing 77 REAL(wp) :: zalbpsn ! albedo of snow/ice system when ice is coverd by snow 78 REAL(wp) :: zalbpic ! albedo of snow/ice system when ice is free of snow 79 REAL(wp) :: zithsn ! = 1 for hsn >= 0 ( ice is cov. by snow ) ; = 0 otherwise (ice is free of snow) 80 REAL(wp) :: zitmlsn ! = 1 freezinz snow (pt_ice >=rt0_snow) ; = 0 melting snow (pt_ice<rt0_snow) 81 REAL(wp) :: zihsc1 ! = 1 hsn <= c1 ; = 0 hsn > c1 82 REAL(wp) :: zihsc2 ! = 1 hsn >= c2 ; = 0 hsn < c2 83 !! 84 LOGICAL , DIMENSION(jpi,jpj,SIZE(pt_ice,3)) :: llmask 85 REAL(wp), DIMENSION(jpi,jpj,SIZE(pt_ice,3)) :: zalbfz ! = alphdi for freezing ice ; = albice for melting ice 86 REAL(wp), DIMENSION(jpi,jpj,SIZE(pt_ice,3)) :: zficeth ! function of ice thickness 90 87 !!--------------------------------------------------------------------- 91 88 89 ijpl = SIZE( pt_ice, 3 ) ! number of ice categories 90 92 91 IF( albd_init == 0 ) CALL albedo_init ! initialization 93 92 … … 95 94 ! Computation of zficeth 96 95 !--------------------------- 97 98 llmask = (hsnif == 0.e0) .AND. ( sist >= rt0_ice ) 99 WHERE ( llmask ) ! ice free of snow and melts 100 zalbfz = albice 101 ELSEWHERE 102 zalbfz = alphdi 96 llmask = ( ph_snw == 0.e0 ) .AND. ( pt_ice >= rt0_ice ) 97 ! ice free of snow and melts 98 WHERE( llmask ) ; zalbfz = albice 99 ELSEWHERE ; zalbfz = alphdi 103 100 END WHERE 104 105 DO jj = 1, jpj 106 DO ji = 1, jpi 107 IF( hicif(ji,jj) > 1.5 ) THEN 108 zficeth(ji,jj) = zalbfz(ji,jj) 109 ELSEIF( hicif(ji,jj) > 1.0 .AND. hicif(ji,jj) <= 1.5 ) THEN 110 zficeth(ji,jj) = 0.472 + 2.0 * ( zalbfz(ji,jj) - 0.472 ) * ( hicif(ji,jj) - 1.0 ) 111 ELSEIF( hicif(ji,jj) > 0.05 .AND. hicif(ji,jj) <= 1.0 ) THEN 112 zficeth(ji,jj) = 0.2467 + 0.7049 * hicif(ji,jj) & 113 & - 0.8608 * hicif(ji,jj) * hicif(ji,jj) & 114 & + 0.3812 * hicif(ji,jj) * hicif(ji,jj) * hicif (ji,jj) 115 ELSE 116 zficeth(ji,jj) = 0.1 + 3.6 * hicif(ji,jj) 117 ENDIF 101 102 DO jl = 1, ijpl 103 DO jj = 1, jpj 104 DO ji = 1, jpi 105 IF( ph_ice(ji,jj,jl) > 1.5 ) THEN 106 zficeth(ji,jj,jl) = zalbfz(ji,jj,jl) 107 ELSEIF( ph_ice(ji,jj,jl) > 1.0 .AND. ph_ice(ji,jj,jl) <= 1.5 ) THEN 108 zficeth(ji,jj,jl) = 0.472 + 2.0 * ( zalbfz(ji,jj,jl) - 0.472 ) * ( ph_ice(ji,jj,jl) - 1.0 ) 109 ELSEIF( ph_ice(ji,jj,jl) > 0.05 .AND. ph_ice(ji,jj,jl) <= 1.0 ) THEN 110 zficeth(ji,jj,jl) = 0.2467 + 0.7049 * ph_ice(ji,jj,jl) & 111 & - 0.8608 * ph_ice(ji,jj,jl) * ph_ice(ji,jj,jl) & 112 & + 0.3812 * ph_ice(ji,jj,jl) * ph_ice(ji,jj,jl) * ph_ice (ji,jj,jl) 113 ELSE 114 zficeth(ji,jj,jl) = 0.1 + 3.6 * ph_ice(ji,jj,jl) 115 ENDIF 116 END DO 118 117 END DO 119 118 END DO … … 125 124 ! Albedo of snow-ice for clear sky. 126 125 !----------------------------------------------- 127 DO jj = 1, jpj 128 DO ji = 1, jpi 129 ! Case of ice covered by snow. 126 DO jl = 1, ijpl 127 DO jj = 1, jpj 128 DO ji = 1, jpi 129 ! Case of ice covered by snow. 130 ! ! freezing snow 131 zihsc1 = 1.0 - MAX( zzero , SIGN( zone , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 132 zalbpsnf = ( 1.0 - zihsc1 ) * ( zficeth(ji,jj,jl) & 133 & + ph_snw(ji,jj,jl) * ( alphd - zficeth(ji,jj,jl) ) / c1 ) & 134 & + zihsc1 * alphd 135 ! ! melting snow 136 zihsc2 = MAX( zzero , SIGN( zone , ph_snw(ji,jj,jl) - c2 ) ) 137 zalbpsnm = ( 1.0 - zihsc2 ) * ( albice + ph_snw(ji,jj,jl) * ( alphc - albice ) / c2 ) & 138 & + zihsc2 * alphc 139 ! 140 zitmlsn = MAX( zzero , SIGN( zone , pt_ice(ji,jj,jl) - rt0_snow ) ) 141 zalbpsn = zitmlsn * zalbpsnm + ( 1.0 - zitmlsn ) * zalbpsnf 130 142 131 ! melting snow 132 zihsc1 = 1.0 - MAX ( zzero , SIGN ( zone , - ( hsnif(ji,jj) - c1 ) ) ) 133 zalbpsnm = ( 1.0 - zihsc1 ) * ( zficeth(ji,jj) + hsnif(ji,jj) * ( alphd - zficeth(ji,jj) ) / c1 ) & 134 & + zihsc1 * alphd 135 ! freezing snow 136 zihsc2 = MAX ( zzero , SIGN ( zone , hsnif(ji,jj) - c2 ) ) 137 zalbpsnf = ( 1.0 - zihsc2 ) * ( albice + hsnif(ji,jj) * ( alphc - albice ) / c2 ) & 138 & + zihsc2 * alphc 143 ! Case of ice free of snow. 144 zalbpic = zficeth(ji,jj,jl) 139 145 140 zitmlsn = MAX ( zzero , SIGN ( zone , sist(ji,jj) - rt0_snow ) ) 141 zalbpsn = zitmlsn * zalbpsnf + ( 1.0 - zitmlsn ) * zalbpsnm 142 143 ! Case of ice free of snow. 144 zalbpic = zficeth(ji,jj) 145 146 ! albedo of the system 147 zithsn = 1.0 - MAX ( zzero , SIGN ( zone , - hsnif(ji,jj) ) ) 148 palbp(ji,jj) = zithsn * zalbpsn + ( 1.0 - zithsn ) * zalbpic 146 ! albedo of the system 147 zithsn = 1.0 - MAX( zzero , SIGN( zone , - ph_snw(ji,jj,jl) ) ) 148 pa_ice_cs(ji,jj,jl) = zithsn * zalbpsn + ( 1.0 - zithsn ) * zalbpic 149 END DO 149 150 END DO 150 151 END DO … … 152 153 ! Albedo of snow-ice for overcast sky. 153 154 !---------------------------------------------- 154 palb(:,:) = palbp(:,:) + cgren 155 156 !-------------------------------------------- 157 ! Computation of the albedo of the ocean 158 !-------------------------- ----------------- 159 160 zcoef = 0.05 / ( 1.1 * cmue**1.4 + 0.15 ) ! Parameterization of Briegled and Ramanathan, 1982 161 palcnp(:,:) = zcoef 162 palcn(:,:) = 0.06 ! Parameterization of Kondratyev, 1969 and Payne, 1972 163 ! 164 END SUBROUTINE blk_albedo 165 166 # else 167 !!---------------------------------------------------------------------- 168 !! Default option : NO sea-ice model 169 !!---------------------------------------------------------------------- 170 171 SUBROUTINE blk_albedo( palb , palcn , palbp , palcnp ) 172 !!---------------------------------------------------------------------- 173 !! *** ROUTINE blk_albedo *** 155 pa_ice_os(:,:,:) = pa_ice_cs(:,:,:) + cgren ! Oberhuber correction 156 ! 157 END SUBROUTINE albedo_ice 158 159 160 SUBROUTINE albedo_oce( pa_oce_os , pa_oce_cs ) 161 !!---------------------------------------------------------------------- 162 !! *** ROUTINE albedo_oce *** 174 163 !! 175 164 !! ** Purpose : Computation of the albedo of the ocean … … 177 166 !! ** Method : .... 178 167 !!---------------------------------------------------------------------- 179 REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: palb ! albedo of ice under overcast sky 180 REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: palcn ! albedo of ocean under overcast sky 181 REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: palbp ! albedo of ice under clear sky 182 REAL(wp), INTENT(out), DIMENSION(jpi,jpj) :: palcnp ! albedo of ocean under clear sky 183 !! 184 REAL(wp) :: zcoef ! temporary scalar 185 !!---------------------------------------------------------------------- 186 ! 187 zcoef = 0.05 / ( 1.1 * cmue**1.4 + 0.15 ) 188 189 palcnp(:,:) = zcoef ! Parameterization of Briegled and Ramanathan, 1982 190 palcn(:,:) = 0.06 ! Parameterization of Kondratyev, 1969 and Payne, 1972 191 192 palb (:,:) = zcoef ! ice overcast albedo set to oceanvalue 193 palbp(:,:) = 0.06 ! ice clear sky albedo set to oceanvalue 194 ! 195 END SUBROUTINE blk_albedo 196 197 #endif 168 REAL(wp), DIMENSION(jpi,jpj), INTENT(out) :: pa_oce_os ! albedo of ocean under overcast sky 169 REAL(wp), DIMENSION(jpi,jpj), INTENT(out) :: pa_oce_cs ! albedo of ocean under clear sky 170 !! 171 REAL(wp) :: zcoef ! temporary scalar 172 !!---------------------------------------------------------------------- 173 ! 174 zcoef = 0.05 / ( 1.1 * rmue**1.4 + 0.15 ) ! Parameterization of Briegled and Ramanathan, 1982 175 pa_oce_cs(:,:) = zcoef 176 pa_oce_os(:,:) = 0.06 ! Parameterization of Kondratyev, 1969 and Payne, 1972 177 ! 178 END SUBROUTINE albedo_oce 179 198 180 199 181 SUBROUTINE albedo_init … … 205 187 !! ** Method : Read the namelist namalb 206 188 !!---------------------------------------------------------------------- 207 ! 208 albd_init = 1 ! set the initialization flag to 1 (done) 209 210 REWIND( numnam ) ! Read Namelist namalb : albedo parameters 189 NAMELIST/namalb/ cgren, albice, alphd, alphdi, alphc 190 !!---------------------------------------------------------------------- 191 192 ! set the initialization flag to 1 193 albd_init = 1 ! indicate that the initialization has been done 194 195 ! Read Namelist namalb : albedo parameters 196 REWIND( numnam ) 211 197 READ ( numnam, namalb ) 212 198 -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r881 r886 308 308 309 309 #if defined key_cpl_albedo 310 # if defined key_lim3 311 Must be adapted for LIM3 312 # endif 310 313 tn_ice = 271.285 311 314 alb_ice = 0.75 -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbc_ice.F90
r881 r886 6 6 !! History : 9.0 ! 06-08 (G. Modec) Surface module 7 7 !!---------------------------------------------------------------------- 8 #if defined key_lim 28 #if defined key_lim3 || defined key_lim2 9 9 !!---------------------------------------------------------------------- 10 !! 'key_lim2' : LIM 2.0 sea-ice model10 !! 'key_lim2' or 'key_lim3' : LIM 2.0 or 3.0 sea-ice model 11 11 !!---------------------------------------------------------------------- 12 12 USE par_oce ! ocean parameters 13 #if defined key_lim3 14 USE par_ice ! ice parameters 15 #endif 13 16 14 17 IMPLICIT NONE 15 18 PRIVATE 16 19 17 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: utaui_ice !: u-stress over ice (I-point) [N/m2] 18 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: vtaui_ice !: v-stress over ice (I-point) [N/m2] 20 #if defined key_lim3 21 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: qns_ice !: non solar heat flux over ice [W/m2] 22 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: qsr_ice !: solar heat flux over ice [W/m2] 23 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: dqns_ice !: non solar heat flux sensibility over ice (LW+SEN+LA) [W/m2/K] 24 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: tn_ice !: ice surface temperature [K] 25 #else 19 26 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qns_ice !: non solar heat flux over ice [W/m2] 20 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qsr_ice !: solar heat flux over ice [W/m2] 21 28 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: dqns_ice !: non solar heat flux sensibility over ice (LW+SEN+LA) [W/m2/K] 22 29 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: tn_ice !: ice surface temperature [K] 30 #endif 31 23 32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: tprecip !: total precipitation [Kg/m2/s] 24 33 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: sprecip !: solid precipitation [Kg/m2/s] 34 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: utaui_ice !: u-stress over ice (I-point) [N/m2] 35 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: vtaui_ice !: v-stress over ice (I-point) [N/m2] 25 36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: fr1_i0 !: 1st fraction of sol. rad. which penetrate inside the ice cover 26 37 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: fr2_i0 !: 2nd fraction of sol. rad. which penetrate inside the ice cover 27 38 28 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: &29 39 #if ! defined key_coupled 30 qla_ice , & !: latent flux over ice 31 dqla_ice !: latent sensibility over ice 40 41 # if defined key_lim3 42 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: qla_ice !: latent flux over ice 43 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: dqla_ice !: latent sensibility over ice 44 # else 45 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qla_ice !: latent flux over ice 46 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: dqla_ice !: latent sensibility over ice 47 # endif 48 32 49 #else 33 rrunoff , & !: runoff 34 calving , & !: calving 35 alb_ice !: albedo of ice 50 51 # if defined key_lim3 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpl) :: alb_ice !: albedo of ice 53 # else 54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: alb_ice !: albedo of ice 55 # endif 56 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rrunoff !: runoff 57 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: calving !: calving 58 36 59 #endif 37 60 -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcana.F90
r756 r886 119 119 INTEGER, INTENT(in) :: kt ! ocean time step 120 120 121 INTEGER :: ji, jj , js! dummy loop indices121 INTEGER :: ji, jj ! dummy loop indices 122 122 INTEGER :: zyear0 ! initial year 123 123 INTEGER :: zmonth0 ! initial month 124 124 INTEGER :: zday0 ! initial day 125 125 INTEGER :: zday_year0 ! initial day since january 1st 126 INTEGER :: zdaymax !127 126 REAL(wp) :: ztau , ztau_sais ! wind intensity and of the seasonal cycle 128 127 REAL(wp) :: ztime ! time in hour … … 283 282 WRITE(numout,*)' adatrj = ',adatrj 284 283 WRITE(numout,*)' ztime = ',ztime 285 WRITE(numout,*)' zdaymax = ',zdaymax286 284 287 285 WRITE(numout,*)' ztimemax = ',ztimemax -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r881 r886 30 30 USE albedo 31 31 USE prtctl ! Print control 32 #if defined key_lim2 32 #if defined key_lim3 33 USE par_ice 34 USE ice 35 #elif defined key_lim2 33 36 USE par_ice_2 34 37 USE ice_2 … … 41 44 42 45 INTEGER , PARAMETER :: jpfld = 7 ! maximum number of files to read 43 INTEGER , PARAMETER :: jp_ wndi = 1 ! index of 10m wind velocity (i-component) (m/s) at U-point44 INTEGER , PARAMETER :: jp_ wndj = 2 ! index of 10m wind velocity (j-component) (m/s) at V-point46 INTEGER , PARAMETER :: jp_utau = 1 ! index of wind stress (i-component) (N/m2) at U-point 47 INTEGER , PARAMETER :: jp_vtau = 2 ! index of wind stress (j-component) (N/m2) at V-point 45 48 INTEGER , PARAMETER :: jp_wndm = 3 ! index of 10m wind module (m/s) at T-point 46 49 INTEGER , PARAMETER :: jp_humi = 4 ! index of specific humidity ( % ) … … 49 52 INTEGER , PARAMETER :: jp_prec = 7 ! index of total precipitation (rain+snow) (Kg/m2/s) 50 53 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 51 52 53 !!54 !!!!gm to be moved55 INTEGER, PARAMETER :: jpl = 1 ! number of layer in the ice56 !!!!gm to be moved57 58 54 59 55 INTEGER, PARAMETER :: jpintsr = 24 ! number of time step between sunrise and sunset … … 127 123 CHARACTER(len=100) :: cn_dir ! Root directory for location of CLIO files 128 124 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist informations on the fields to read 129 TYPE(FLD_N) :: sn_ wndi, sn_wndj, sn_wndm, sn_tair ! informations about the fields to be read125 TYPE(FLD_N) :: sn_utau, sn_vtau, sn_wndm, sn_tair ! informations about the fields to be read 130 126 TYPE(FLD_N) :: sn_humi, sn_ccov, sn_prec ! " " 131 127 !! 132 NAMELIST/namsbc_clio/ cn_dir, sn_ wndi, sn_wndj, sn_wndm, sn_humi, &128 NAMELIST/namsbc_clio/ cn_dir, sn_utau, sn_vtau, sn_wndm, sn_humi, & 133 129 & sn_ccov, sn_tair, sn_prec 134 130 !!--------------------------------------------------------------------- … … 143 139 ! ! file ! frequency ! variable ! time intep ! clim ! starting ! 144 140 ! ! name ! (hours) ! name ! (T/F) ! (0/1) ! record ! 145 sn_ wndi = FLD_N( 'uwnd10m' , 24. , 'u_10' , .true. , 0 , 0 )146 sn_ wndj = FLD_N( 'vwnd10m' , 24. , 'v_10' , .true. , 0 , 0 )141 sn_utau = FLD_N( 'utau' , 24. , 'utau' , .true. , 0 , 0 ) 142 sn_vtau = FLD_N( 'vtau' , 24. , 'vtau' , .true. , 0 , 0 ) 147 143 sn_wndm = FLD_N( 'mwnd10m' , 24. , 'm_10' , .true. , 0 , 0 ) 148 144 sn_tair = FLD_N( 'tair10m' , 24. , 't_10' , .FALSE. , 0 , 0 ) … … 155 151 156 152 ! store namelist information in an array 157 slf_i(jp_ wndi) = sn_wndi ; slf_i(jp_wndj) = sn_wndj; slf_i(jp_wndm) = sn_wndm153 slf_i(jp_utau) = sn_utau ; slf_i(jp_vtau) = sn_vtau ; slf_i(jp_wndm) = sn_wndm 158 154 slf_i(jp_tair) = sn_tair ; slf_i(jp_humi) = sn_humi 159 155 slf_i(jp_ccov) = sn_ccov ; slf_i(jp_prec) = sn_prec … … 203 199 WRITE(numout,*) 204 200 ifpr = INT(jpi/8) ; jfpr = INT(jpj/10) 205 WRITE(numout,*) TRIM(sf(jp_ wndi)%clvar),' day: ',ndastp206 CALL prihre( sf(jp_ wndi)%fnow,jpi,jpj,1,jpi,ifpr,1,jpj,jfpr,0.,numout )201 WRITE(numout,*) TRIM(sf(jp_utau)%clvar),' day: ',ndastp 202 CALL prihre( sf(jp_utau)%fnow,jpi,jpj,1,jpi,ifpr,1,jpj,jfpr,0.,numout ) 207 203 WRITE(numout,*) 208 WRITE(numout,*) TRIM(sf(jp_ wndj)%clvar),' day: ',ndastp209 CALL prihre( sf(jp_ wndj)%fnow,jpi,jpj,1,jpi,ifpr,1,jpj,jfpr,0.,numout )204 WRITE(numout,*) TRIM(sf(jp_vtau)%clvar),' day: ',ndastp 205 CALL prihre( sf(jp_vtau)%fnow,jpi,jpj,1,jpi,ifpr,1,jpj,jfpr,0.,numout ) 210 206 WRITE(numout,*) 211 207 WRITE(numout,*) TRIM(sf(jp_humi)%clvar),' day: ',ndastp … … 246 242 !! follow the work of Oberhuber, 1988 247 243 !! - momentum flux (stresses) directly read in files at U- and V-points 248 !! - compute ocean and ice albedos (call flx_blk_albedo)244 !! - compute ocean/ice albedos (call albedo_oce/albedo_ice) 249 245 !! - compute shortwave radiation for ocean (call blk_clio_qsr_oce) 250 246 !! - compute long-wave radiation for the ocean … … 269 265 REAL(wp) :: zdtetar, ztvmoyr, zlxins, zchcm, zclcm ! - - 270 266 REAL(wp) :: zmt1, zmt2, zmt3, ztatm3, ztamr, ztaevbk ! - - 271 REAL(wp) :: zsst, ztatm, zcco1, zpatm 267 REAL(wp) :: zsst, ztatm, zcco1, zpatm, zinda ! - - 272 268 REAL(wp) :: zrhoa, zev, zes, zeso, zqatm, zevsqr ! - - 273 269 !! … … 285 281 DO jj = 1 , jpj 286 282 DO ji = 1, jpi 287 utau(ji,jj) = sf(jp_ wndi)%fnow(ji,jj)288 vtau(ji,jj) = sf(jp_ wndj)%fnow(ji,jj)283 utau(ji,jj) = sf(jp_utau)%fnow(ji,jj) 284 vtau(ji,jj) = sf(jp_vtau)%fnow(ji,jj) 289 285 END DO 290 286 END DO … … 295 291 296 292 CALL blk_clio_qsr_oce( qsr ) 293 294 ! CAUTION: ocean shortwave radiation sets to zero if more than 50% of sea-ice !!gm to be removed 295 DO jj = 1, jpj 296 DO ji = 1, jpi 297 zinda = MAX( 0.e0, SIGN( 1.e0, -( -1.5 - freeze(ji,jj) ) ) ) 298 qsr(ji,jj) = zinda * qsr(ji,jj) 299 END DO 300 END DO 297 301 298 302 … … 423 427 !! follow the work of Oberhuber, 1988 424 428 !! 425 !! ** Action : call flx_blk_albedo to compute ocean andice albedo429 !! ** Action : call albedo_oce/albedo_ice to compute ocean/ice albedo 426 430 !! computation of snow precipitation 427 431 !! computation of solar flux at the ocean and ice surfaces … … 433 437 !! 434 438 !!---------------------------------------------------------------------- 435 REAL(wp), INTENT(in ), DIMENSION( jpi,jpj,jpl):: pst ! ice surface temperature [Kelvin]436 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) 437 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) 438 REAL(wp), INTENT(in ), DIMENSION( jpi,jpj,jpl) :: palb_cs ! ice albedo (clear sky) (alb_ice_cs)[%]439 REAL(wp), INTENT(in ), DIMENSION( jpi,jpj,jpl) :: palb_os ! ice albedo (overcast sky) (alb_ice_cs) [%]440 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) 441 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) 442 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl):: p_qns ! non solar heat flux over ice (T-point) [W/m2]443 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl):: p_qsr ! solar heat flux over ice (T-point) [W/m2]444 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl):: p_qla ! latent heat flux over ice (T-point) [W/m2]445 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl):: p_dqns ! non solar heat sensistivity (T-point) [W/m2]446 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl):: p_dqla ! latent heat sensistivity (T-point) [W/m2]447 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tpr ! total precipitation (T-point)[Kg/m2/s]448 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_spr ! solid precipitation (T-point)[Kg/m2/s]449 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr1 ! 1sr fraction of qsr penetration in ice[%]450 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr2 ! 2nd fraction of qsr penetration in ice[%]451 CHARACTER(len=1), INTENT(in ) 439 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pst ! ice surface temperature [Kelvin] 440 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pui ! ice surface velocity (i-component, I-point) [m/s] 441 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pvi ! ice surface velocity (j-component, I-point) [m/s] 442 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: palb_cs ! ice albedo (clear sky) (alb_ice_cs) [%] 443 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: palb_os ! ice albedo (overcast sky) (alb_ice_os) [%] 444 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_taui ! surface ice stress at I-point (i-component) [N/m2] 445 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tauj ! surface ice stress at I-point (j-component) [N/m2] 446 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qns ! non solar heat flux over ice (T-point) [W/m2] 447 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qsr ! solar heat flux over ice (T-point) [W/m2] 448 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qla ! latent heat flux over ice (T-point) [W/m2] 449 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_dqns ! non solar heat sensistivity (T-point) [W/m2] 450 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_dqla ! latent heat sensistivity (T-point) [W/m2] 451 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tpr ! total precipitation (T-point) [Kg/m2/s] 452 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_spr ! solid precipitation (T-point) [Kg/m2/s] 453 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr1 ! 1sr fraction of qsr penetration in ice [%] 454 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr2 ! 2nd fraction of qsr penetration in ice [%] 455 CHARACTER(len=1), INTENT(in ) :: cd_grid ! type of sea-ice grid ("C" or "B" grid) 452 456 !! 453 457 INTEGER :: ji, jj, jl ! dummy loop indices 458 INTEGER :: ijpl ! number of ice categories (size of 3rd dim of input arrays) 454 459 !! 455 460 REAL(wp) :: zcoef, zmt1, zmt2, zmt3, ztatm3 ! temporary scalars … … 464 469 REAL(wp), DIMENSION(jpi,jpj) :: zevsqr ! vapour pressure square-root 465 470 REAL(wp), DIMENSION(jpi,jpj) :: zrhoa ! air density 466 REAL(wp), DIMENSION(jpi,jpj, jpl) :: z_qlw, z_qsb471 REAL(wp), DIMENSION(jpi,jpj,SIZE(pst,3)) :: z_qlw, z_qsb 467 472 !!--------------------------------------------------------------------- 468 473 474 ijpl = SIZE( pst, 3 ) ! number of ice categories 469 475 zpatm = 101000. ! atmospheric pressure (assumed constant here) 470 476 … … 548 554 549 555 ! ! ========================== ! 550 DO jl = 1, jpl! Loop over ice categories !556 DO jl = 1, ijpl ! Loop over ice categories ! 551 557 ! ! ========================== ! 552 558 !CDIR NOVERRCHK … … 602 608 p_dqns(ji,jj,jl) = -( zdqlw + zdqsb + zdqla ) ! total non solar sensitivity 603 609 END DO 604 END DO 605 END DO 606 610 ! 611 END DO 612 ! 613 END DO 607 614 ! 608 615 ! ----------------------------------------------------------------------------- ! 609 ! IIITotal FLUXES !616 ! Total FLUXES ! 610 617 ! ----------------------------------------------------------------------------- ! 611 618 ! 612 619 !CDIR COLLAPSE 613 p_qns(:,:,:) = 614 !CDIR COLLAPSE 615 p_tpr(:,:) = sf(jp_prec)%fnow(:,:) / rday! total precipitation [kg/m2/s]620 p_qns(:,:,:) = z_qlw (:,:,:) - z_qsb (:,:,:) - p_qla (:,:,:) ! Downward Non Solar flux 621 !CDIR COLLAPSE 622 p_tpr(:,:) = sf(jp_prec)%fnow(:,:) / rday ! total precipitation [kg/m2/s] 616 623 ! 617 624 !!gm : not necessary as all input data are lbc_lnk... 618 625 CALL lbc_lnk( p_fr1 (:,:) , 'T', 1. ) 619 626 CALL lbc_lnk( p_fr2 (:,:) , 'T', 1. ) 620 DO jl = 1, jpl627 DO jl = 1, ijpl 621 628 CALL lbc_lnk( p_qns (:,:,jl) , 'T', 1. ) 622 629 CALL lbc_lnk( p_dqns(:,:,jl) , 'T', 1. ) … … 626 633 627 634 !!gm : mask is not required on forcing 628 DO jl = 1, jpl635 DO jl = 1, ijpl 629 636 p_qns (:,:,jl) = p_qns (:,:,jl) * tmask(:,:,1) 630 637 p_qla (:,:,jl) = p_qla (:,:,jl) * tmask(:,:,1) … … 634 641 635 642 IF(ln_ctl) THEN 636 CALL prt_ctl(tab2d_1=z_qsb(:,:,jpl) , clinfo1=' blk_ice_clio: z_qsb : ', tab2d_2=z_qlw(:,:,jpl), clinfo2=' z_qlw : ') 637 CALL prt_ctl(tab2d_1=p_qla(:,:,jpl) , clinfo1=' blk_ice_clio: z_qla : ', tab2d_2=p_qsr(:,:,jpl), clinfo2=' p_qsr : ') 638 CALL prt_ctl(tab2d_1=p_tpr(:,:,jpl) , clinfo1=' blk_ice_clio: p_tpr : ', tab2d_2=p_spr , clinfo2=' p_spr : ') 639 CALL prt_ctl(tab2d_1=p_taui , clinfo1=' blk_ice_clio: p_taui : ', tab2d_2=p_tauj , clinfo2=' p_tauj : ') 640 CALL prt_ctl(tab2d_1=pst(:,:,jpl) , clinfo2=' blk_ice_clio: pst : ') 643 CALL prt_ctl(tab3d_1=z_qsb , clinfo1=' blk_ice_clio: z_qsb : ', tab3d_2=z_qlw , clinfo2=' z_qlw : ', kdim=ijpl) 644 CALL prt_ctl(tab3d_1=p_qla , clinfo1=' blk_ice_clio: z_qla : ', tab3d_2=p_qsr , clinfo2=' p_qsr : ', kdim=ijpl) 645 CALL prt_ctl(tab3d_1=p_dqns , clinfo1=' blk_ice_clio: p_dqns : ', tab3d_2=p_qns , clinfo2=' p_qns : ', kdim=ijpl) 646 CALL prt_ctl(tab3d_1=p_dqla , clinfo1=' blk_ice_clio: p_dqla : ', tab3d_2=pst , clinfo2=' pst : ', kdim=ijpl) 647 CALL prt_ctl(tab2d_1=p_tpr , clinfo1=' blk_ice_clio: p_tpr : ', tab2d_2=p_spr , clinfo2=' p_spr : ') 648 CALL prt_ctl(tab2d_1=p_taui , clinfo1=' blk_ice_clio: p_taui : ', tab2d_2=p_tauj , clinfo2=' p_tauj : ') 641 649 ENDIF 642 650 … … 667 675 REAL(wp) :: zmt1, zmt2, zmt3 ! 668 676 REAL(wp) :: zdecl, zsdecl , zcdecl ! 669 REAL(wp) :: za_oce, ztamr , zinda!670 671 REAL(wp) :: zdl, zlha ! local scalars672 REAL(wp) :: zlmunoon, zcldcor, zdaycor 673 REAL(wp) :: zxday, zdist, zcoef, zcoef1 677 REAL(wp) :: za_oce, ztamr ! 678 679 REAL(wp) :: zdl, zlha ! local scalars 680 REAL(wp) :: zlmunoon, zcldcor, zdaycor ! 681 REAL(wp) :: zxday, zdist, zcoef, zcoef1 ! 674 682 REAL(wp) :: zes 675 683 !! 676 REAL(wp), DIMENSION(jpi,jpj) :: zev ! vapour pressure684 REAL(wp), DIMENSION(jpi,jpj) :: zev ! vapour pressure 677 685 REAL(wp), DIMENSION(jpi,jpj) :: zdlha, zlsrise, zlsset ! 2D workspace 678 686 … … 786 794 END DO 787 795 ! Taking into account the ellipsity of the earth orbit, the clouds AND masked if sea-ice cover > 0% 788 !!gm : bug zinda is always 0 si ice....789 796 zcoef1 = srgamma * zdaycor / ( 2. * rpi ) 790 797 !CDIR COLLAPSE … … 794 801 zcldcor = MIN( 1.e0, ( 1.e0 - 0.62 * sf(jp_ccov)%fnow(ji,jj) & ! cloud correction (Reed 1977) 795 802 & + 0.0019 * zlmunoon ) ) 796 zinda = MAX( 0.e0, SIGN( 1.e0, -( -1.5 + freeze(ji,jj) ) ) ) ! 0 if more than 0% of ice 797 pqsr_oce(ji,jj) = zcoef1 * zcldcor * zinda * pqsr_oce(ji,jj) * tmask(ji,jj,1) ! and zcoef1: ellipsity 803 pqsr_oce(ji,jj) = zcoef1 * zcldcor * pqsr_oce(ji,jj) * tmask(ji,jj,1) ! and zcoef1: ellipsity 798 804 END DO 799 805 END DO … … 812 818 !! - also initialise sbudyko and stauc once for all 813 819 !!---------------------------------------------------------------------- 814 REAL(wp), INTENT(in ), DIMENSION( jpi,jpj,jpl) :: pa_ice_cs ! albedo of ice under clear sky815 REAL(wp), INTENT(in ), DIMENSION( jpi,jpj,jpl) :: pa_ice_os ! albedo of ice under overcast sky816 REAL(wp), INTENT( out), DIMENSION( jpi,jpj,jpl) :: pqsr_ice ! shortwave radiation over the ice/snow820 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky 821 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pa_ice_os ! albedo of ice under overcast sky 822 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pqsr_ice ! shortwave radiation over the ice/snow 817 823 !! 818 824 INTEGER, PARAMETER :: jp24 = 24 ! sampling of the daylight period (sunrise to sunset) into 24 equal parts 819 825 !! 820 826 INTEGER :: ji, jj, jl, jt ! dummy loop indices 827 INTEGER :: ijpl ! number of ice categories (3rd dim of pqsr_ice) 821 828 INTEGER :: indaet ! = -1, 0, 1 for odd, normal and leap years resp. 822 829 INTEGER :: iday ! integer part of day 823 824 REAL(wp) :: zcmue, zcmue2 ! local scalars 825 REAL(wp) :: zmt1, zmt2, zmt3 ! 826 REAL(wp) :: zdecl, zsdecl , zcdecl ! 827 REAL(wp) :: ztamr ! 828 829 REAL(wp) :: zlha ! local scalars 830 REAL(wp) :: zdaycor ! 831 REAL(wp) :: zxday, zdist, zcoef, zcoef1 ! 832 REAL(wp) :: zes 833 REAL(wp) :: zqsr_ice_cs, zqsr_ice_os 834 !! 835 REAL(wp), DIMENSION(jpi,jpj) :: zev ! vapour pressure 836 REAL(wp), DIMENSION(jpi,jpj) :: zdlha, zlsrise, zlsset ! 2D workspace 837 830 !! 831 REAL(wp) :: zcmue, zcmue2, ztamr ! temporary scalars 832 REAL(wp) :: zmt1, zmt2, zmt3 ! - - 833 REAL(wp) :: zdecl, zsdecl, zcdecl ! - - 834 REAL(wp) :: zlha, zdaycor, zes ! - - 835 REAL(wp) :: zxday, zdist, zcoef, zcoef1 ! - - 836 REAL(wp) :: zqsr_ice_cs, zqsr_ice_os ! - - 837 !! 838 REAL(wp), DIMENSION(jpi,jpj) :: zev ! vapour pressure 839 REAL(wp), DIMENSION(jpi,jpj) :: zdlha, zlsrise, zlsset ! 2D workspace 838 840 REAL(wp), DIMENSION(jpi,jpj) :: zps, zpc ! sine (cosine) of latitude per sine (cosine) of solar declination 839 841 !!--------------------------------------------------------------------- 842 843 ijpl = SIZE(pqsr_ice, 3 ) ! number of ice categories 840 844 841 845 ! Saturated water vapour and vapour pressure … … 895 899 ! compute and sum ice qsr over the daylight for each ice categories 896 900 pqsr_ice(:,:,:) = 0.e0 897 zcoef1 = zdaycor / ( 2. * rpi ) 901 zcoef1 = zdaycor / ( 2. * rpi ) ! Correction for the ellipsity of the earth orbit 898 902 899 903 ! !----------------------------! 900 DO jl = 1, jpl! loop over ice categories !904 DO jl = 1, ijpl ! loop over ice categories ! 901 905 ! !----------------------------! 902 906 !CDIR NOVERRCHK … … 930 934 ! !--------------------------------! 931 935 END DO ! end loop over ice categories ! 932 !!--------------------------------!936 ! !--------------------------------! 933 937 934 938 935 939 !!gm : this should be suppress as input data have been passed through lbc_lnk 936 DO jl = 1, jpl940 DO jl = 1, ijpl 937 941 CALL lbc_lnk( pqsr_ice(:,:,jl) , 'T', 1. ) 938 942 END DO -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r879 r886 4 4 !! Ocean forcing: momentum, heat and freshwater flux formulation 5 5 !!===================================================================== 6 !! History : 9.0 ! 04-08 (U. Schweckendiek) Original code7 !! 6 !! History : 1.0 ! 04-08 (U. Schweckendiek) Original code 7 !! 2.0 ! 05-04 (L. Brodeau, A.M. Treguier) additions: 8 8 !! - new bulk routine for efficiency 9 9 !! - WINDS ARE NOW ASSUMED TO BE AT T POINTS in input files !!!! 10 10 !! - file names and file characteristics in namelist 11 11 !! - Implement reading of 6-hourly fields 12 !! 12 !! 3.0 ! 06-06 (G. Madec) sbc rewritting 13 13 !!---------------------------------------------------------------------- 14 14 … … 66 66 !!---------------------------------------------------------------------- 67 67 !! OPA 9.0 , LOCEAN-IPSL (2006) 68 !! $ Header: $68 !! $ Id: $ 69 69 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 70 70 !!---------------------------------------------------------------------- … … 184 184 ENDIF 185 185 186 CALL fld_read( kt, nn_fsbc, sf ) ! Read input fields and provides the 187 ! ! input fieldsat the current time-step186 187 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 188 188 189 189 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 190 191 CALL blk_oce_core( sst_m, ssu_m, ssv_m ) ! set the ocean surface fluxes 192 190 CALL blk_oce_core( sst_m, ssu_m, ssv_m ) ! compute the surface ocean fluxes using CLIO bulk formulea 193 191 ENDIF 194 192 ! ! using CORE bulk formulea … … 208 206 !! ** Outputs : - utau : i-component of the stress at U-point (N/m2) 209 207 !! - vtau : j-component of the stress at V-point (N/m2) 210 !! - qsr _oce: Solar heat flux over the ocean (W/m2)211 !! - qns _oce: Non Solar heat flux over the ocean (W/m2)208 !! - qsr : Solar heat flux over the ocean (W/m2) 209 !! - qns : Non Solar heat flux over the ocean (W/m2) 212 210 !! - evap : Evaporation over the ocean (kg/m2/s) 213 211 !! - tprecip : Total precipitation (Kg/m2/s) … … 334 332 & tab2d_2=vtau , clinfo2=' vtau : ', mask2=vmask ) 335 333 CALL prt_ctl( tab2d_1=zwind_speed_t, clinfo1=' blk_oce_core: zwind_speed_t : ') 334 CALL prt_ctl( tab2d_1=zst , clinfo1=' blk_oce_core: zst : ') 336 335 ENDIF 337 336 … … 354 353 & p_qla , p_dqns, p_dqla, & 355 354 & p_tpr , p_spr , & 356 & p_fr1 , p_fr2 )355 & p_fr1 , p_fr2 , cd_grid ) 357 356 !!--------------------------------------------------------------------- 358 357 !! *** ROUTINE blk_ice_core *** … … 367 366 !! caution : the net upward water flux has with mm/day unit 368 367 !!--------------------------------------------------------------------- 369 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pst ! ice surface temperature (>0, =rt0 over land) [Kelvin] 370 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pui ! ice surface velocity (i-component, I-point) [m/s] 371 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pvi ! ice surface velocity (j-component, I-point) [m/s] 372 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: palb ! ice albedo (clear sky) (alb_ice_cs) [%] 373 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_taui ! surface ice stress at I-point (i-component) [N/m2] 374 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tauj ! surface ice stress at I-point (j-component) [N/m2] 375 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_qns ! non solar heat flux over ice (T-point) [W/m2] 376 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_qsr ! solar heat flux over ice (T-point) [W/m2] 377 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_qla ! latent heat flux over ice (T-point) [W/m2] 378 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_dqns ! non solar heat sensistivity (T-point) [W/m2] 379 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_dqla ! latent heat sensistivity (T-point) [W/m2] 380 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tpr ! total precipitation (T-point) [Kg/m2/s] 381 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_spr ! solid precipitation (T-point) [Kg/m2/s] 382 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr1 ! 1sr fraction of qsr penetration in ice [%] 383 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr2 ! 2nd fraction of qsr penetration in ice [%] 384 !! 385 INTEGER :: ji, jj ! dummy loop indices 386 REAL(wp) :: zst3 387 REAL(wp) :: zcoef_wnorm, zcoef_dqlw, zcoef_dqla, zcoef_dqsb 388 REAL(wp) :: zcoef_frca ! fractional cloud amount 389 REAL(wp) :: zwnorm_f, zwndi_f , zwndj_f ! relative wind module and components at F-point 390 REAL(wp) :: zwndi_t , zwndj_t ! relative wind components at T-point 391 REAL(wp), DIMENSION(jpi,jpj) :: z_wnds_t ! wind speed ( = | U10m - U_ice | ) at T-point 392 REAL(wp), DIMENSION(jpi,jpj) :: z_qlw ! long wave heat flux over ice 393 REAL(wp), DIMENSION(jpi,jpj) :: z_qsb ! sensible heat flux over ice 394 REAL(wp), DIMENSION(jpi,jpj) :: z_dqlw ! sensible heat flux over ice 395 REAL(wp), DIMENSION(jpi,jpj) :: z_dqsb ! sensible heat flux over ice 368 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pst ! ice surface temperature (>0, =rt0 over land) [Kelvin] 369 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pui ! ice surface velocity (i- and i- components [m/s] 370 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: pvi ! at I-point (B-grid) or U & V-point (C-grid) 371 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: palb ! ice albedo (clear sky) (alb_ice_cs) [%] 372 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_taui ! i- & j-components of surface ice stress [N/m2] 373 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tauj ! at I-point (B-grid) or U & V-point (C-grid) 374 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qns ! non solar heat flux over ice (T-point) [W/m2] 375 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qsr ! solar heat flux over ice (T-point) [W/m2] 376 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_qla ! latent heat flux over ice (T-point) [W/m2] 377 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_dqns ! non solar heat sensistivity (T-point) [W/m2] 378 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: p_dqla ! latent heat sensistivity (T-point) [W/m2] 379 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_tpr ! total precipitation (T-point) [Kg/m2/s] 380 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_spr ! solid precipitation (T-point) [Kg/m2/s] 381 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr1 ! 1sr fraction of qsr penetration in ice (T-point) [%] 382 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: p_fr2 ! 2nd fraction of qsr penetration in ice (T-point) [%] 383 CHARACTER(len=1), INTENT(in ) :: cd_grid ! ice grid ( C or B-grid) 384 !! 385 INTEGER :: ji, jj, jl ! dummy loop indices 386 INTEGER :: ijpl ! number of ice categories (size of 3rd dim of input arrays) 387 REAL(wp) :: zst2, zst3 388 REAL(wp) :: zcoef_wnorm, zcoef_wnorm2, zcoef_dqlw, zcoef_dqla, zcoef_dqsb 389 REAL(wp) :: zcoef_frca ! fractional cloud amount 390 REAL(wp) :: zwnorm_f, zwndi_f , zwndj_f ! relative wind module and components at F-point 391 REAL(wp) :: zwndi_t , zwndj_t ! relative wind components at T-point 392 REAL(wp), DIMENSION(jpi,jpj) :: z_wnds_t ! wind speed ( = | U10m - U_ice | ) at T-point 393 REAL(wp), DIMENSION(jpi,jpj,SIZE(pst,3)) :: z_qlw ! long wave heat flux over ice 394 REAL(wp), DIMENSION(jpi,jpj,SIZE(pst,3)) :: z_qsb ! sensible heat flux over ice 395 REAL(wp), DIMENSION(jpi,jpj,SIZE(pst,3)) :: z_dqlw ! sensible heat flux over ice 396 REAL(wp), DIMENSION(jpi,jpj,SIZE(pst,3)) :: z_dqsb ! sensible heat flux over ice 396 397 !!--------------------------------------------------------------------- 398 399 ijpl = SIZE( pst, 3 ) ! number of ice categories 397 400 398 401 ! local scalars ( place there for vector optimisation purposes) 399 402 zcoef_wnorm = rhoa * Cice 403 zcoef_wnorm2 = rhoa * Cice * 0.5 400 404 zcoef_dqlw = 4.0 * 0.95 * Stef 401 405 zcoef_dqla = -Ls * Cice * 11637800. * (-5897.8) … … 410 414 411 415 ! ----------------------------------------------------------------------------- ! 412 ! Wind components and module relative to the moving ocean at I and T-point ! 413 ! ----------------------------------------------------------------------------- ! 414 ! ... components ( U10m - U_oce ) at I-point (F-point with sea-ice indexation) (unmasked) 415 ! and scalar wind at T-point ( = | U10m - U_ice | ) (masked) 416 ! Wind components and module relative to the moving ocean ( U10m - U_ice ) ! 417 ! ----------------------------------------------------------------------------- ! 418 SELECT CASE( cd_grid ) 419 CASE( 'B' ) ! B-grid ice dynamics : I-point (i.e. F-point with sea-ice indexation) 420 ! and scalar wind at T-point ( = | U10m - U_ice | ) (masked) 416 421 #if defined key_vectopt_loop 417 422 !CDIR COLLAPSE 418 423 #endif 419 424 !CDIR NOVERRCHK 420 DO jj = 2, jpjm1 421 DO ji = fs_2, fs_jpim1 422 ! ... scalar wind at I-point (fld being at T-point) 423 zwndi_f = 0.25 * ( sf(jp_wndi)%fnow(ji-1,jj ) + sf(jp_wndi)%fnow(ji ,jj ) & 424 & + sf(jp_wndi)%fnow(ji-1,jj-1) + sf(jp_wndi)%fnow(ji ,jj-1) ) - pui(ji,jj) 425 zwndj_f = 0.25 * ( sf(jp_wndj)%fnow(ji-1,jj ) + sf(jp_wndj)%fnow(ji ,jj ) & 426 & + sf(jp_wndj)%fnow(ji-1,jj-1) + sf(jp_wndj)%fnow(ji ,jj-1) ) - pvi(ji,jj) 427 zwnorm_f = zcoef_wnorm * SQRT( zwndi_f * zwndi_f + zwndj_f * zwndj_f ) 428 ! ... ice stress at I-point 429 p_taui(ji,jj) = zwnorm_f * zwndi_f 430 p_tauj(ji,jj) = zwnorm_f * zwndj_f 431 ! ... scalar wind at T-point (fld being at T-point) 432 zwndi_t = sf(jp_wndi)%fnow(ji,jj) - 0.25 * ( pui(ji,jj+1) + pui(ji+1,jj+1) & 433 & + pui(ji,jj ) + pui(ji+1,jj ) ) 434 zwndj_t = sf(jp_wndj)%fnow(ji,jj) - 0.25 * ( pvi(ji,jj+1) + pvi(ji+1,jj+1) & 435 & + pvi(ji,jj ) + pvi(ji+1,jj ) ) 436 z_wnds_t(ji,jj) = SQRT( zwndi_t * zwndi_t + zwndj_t * zwndj_t ) * tmask(ji,jj,1) 425 DO jj = 2, jpjm1 426 DO ji = fs_2, fs_jpim1 427 ! ... scalar wind at I-point (fld being at T-point) 428 zwndi_f = 0.25 * ( sf(jp_wndi)%fnow(ji-1,jj ) + sf(jp_wndi)%fnow(ji ,jj ) & 429 & + sf(jp_wndi)%fnow(ji-1,jj-1) + sf(jp_wndi)%fnow(ji ,jj-1) ) - pui(ji,jj) 430 zwndj_f = 0.25 * ( sf(jp_wndj)%fnow(ji-1,jj ) + sf(jp_wndj)%fnow(ji ,jj ) & 431 & + sf(jp_wndj)%fnow(ji-1,jj-1) + sf(jp_wndj)%fnow(ji ,jj-1) ) - pvi(ji,jj) 432 zwnorm_f = zcoef_wnorm * SQRT( zwndi_f * zwndi_f + zwndj_f * zwndj_f ) 433 ! ... ice stress at I-point 434 p_taui(ji,jj) = zwnorm_f * zwndi_f 435 p_tauj(ji,jj) = zwnorm_f * zwndj_f 436 ! ... scalar wind at T-point (fld being at T-point) 437 zwndi_t = sf(jp_wndi)%fnow(ji,jj) - 0.25 * ( pui(ji,jj+1) + pui(ji+1,jj+1) & 438 & + pui(ji,jj ) + pui(ji+1,jj ) ) 439 zwndj_t = sf(jp_wndj)%fnow(ji,jj) - 0.25 * ( pvi(ji,jj+1) + pvi(ji+1,jj+1) & 440 & + pvi(ji,jj ) + pvi(ji+1,jj ) ) 441 z_wnds_t(ji,jj) = SQRT( zwndi_t * zwndi_t + zwndj_t * zwndj_t ) * tmask(ji,jj,1) 442 END DO 437 443 END DO 444 CALL lbc_lnk( p_taui , 'I', -1. ) 445 CALL lbc_lnk( p_tauj , 'I', -1. ) 446 CALL lbc_lnk( z_wnds_t, 'T', 1. ) 447 ! 448 CASE( 'C' ) ! C-grid ice dynamics : U & V-points (same as ocean) 449 #if defined key_vectopt_loop 450 !CDIR COLLAPSE 451 #endif 452 DO jj = 2, jpj 453 DO ji = fs_2, jpi ! vect. opt. 454 zwndi_t = ( sf(jp_wndi)%fnow(ji,jj) - 0.5 * ( pui(ji-1,jj ) + pui(ji,jj) ) ) 455 zwndj_t = ( sf(jp_wndj)%fnow(ji,jj) - 0.5 * ( pvi(ji ,jj-1) + pvi(ji,jj) ) ) 456 z_wnds_t(ji,jj) = SQRT( zwndi_t * zwndi_t + zwndj_t * zwndj_t ) * tmask(ji,jj,1) 457 END DO 458 END DO 459 #if defined key_vectopt_loop 460 !CDIR COLLAPSE 461 #endif 462 DO jj = 2, jpjm1 463 DO ji = fs_2, fs_jpim1 ! vect. opt. 464 p_taui(ji,jj) = zcoef_wnorm2 * ( z_wnds_t(ji+1,jj) + z_wnds_t(ji,jj) ) & 465 & * ( 0.5 * (sf(jp_wndi)%fnow(ji+1,jj) + sf(jp_wndi)%fnow(ji,jj) ) - pui(ji,jj) ) 466 p_tauj(ji,jj) = zcoef_wnorm2 * ( z_wnds_t(ji,jj+1) + z_wnds_t(ji,jj) ) & 467 & * ( 0.5 * (sf(jp_wndj)%fnow(ji,jj+1) + sf(jp_wndj)%fnow(ji,jj) ) - pvi(ji,jj) ) 468 END DO 469 END DO 470 CALL lbc_lnk( p_taui , 'U', -1. ) 471 CALL lbc_lnk( p_tauj , 'V', -1. ) 472 CALL lbc_lnk( z_wnds_t, 'T', 1. ) 473 ! 474 END SELECT 475 476 ! ! ========================== ! 477 DO jl = 1, ijpl ! Loop over ice categories ! 478 ! ! ========================== ! 479 !CDIR NOVERRCHK 480 !CDIR COLLAPSE 481 DO jj = 1 , jpj 482 !CDIR NOVERRCHK 483 DO ji = 1, jpi 484 ! ----------------------------! 485 ! I Radiative FLUXES ! 486 ! ----------------------------! 487 zst2 = pst(ji,jj,jl) * pst(ji,jj,jl) 488 zst3 = pst(ji,jj,jl) * zst2 489 ! Short Wave (sw) 490 p_qsr(ji,jj,jl) = ( 1. - palb(ji,jj,jl) ) * sf(jp_qsr)%fnow(ji,jj) * tmask(ji,jj,1) 491 ! Long Wave (lw) 492 z_qlw(ji,jj,jl) = 0.95 * ( sf(jp_qlw)%fnow(ji,jj) & 493 & - Stef * pst(ji,jj,jl) * zst3 ) * tmask(ji,jj,1) 494 ! lw sensitivity 495 z_dqlw(ji,jj,jl) = zcoef_dqlw * zst3 496 497 ! ----------------------------! 498 ! II Turbulent FLUXES ! 499 ! ----------------------------! 500 501 ! ... turbulent heat fluxes 502 ! Sensible Heat 503 z_qsb(ji,jj,jl) = rhoa * cpa * Cice * z_wnds_t(ji,jj) * ( pst(ji,jj,jl) - sf(jp_tair)%fnow(ji,jj) ) 504 ! Latent Heat 505 p_qla(ji,jj,jl) = MAX( 0.e0, rhoa * Ls * Cice * z_wnds_t(ji,jj) & 506 & * ( 11637800. * EXP( -5897.8 / pst(ji,jj,jl) ) / rhoa - sf(jp_humi)%fnow(ji,jj) ) ) 507 ! Latent heat sensitivity for ice (Dqla/Dt) 508 p_dqla(ji,jj,jl) = zcoef_dqla * z_wnds_t(ji,jj) / ( zst2 ) * EXP( -5897.8 / pst(ji,jj,jl) ) 509 ! Sensible heat sensitivity (Dqsb_ice/Dtn_ice) 510 z_dqsb(ji,jj,jl) = zcoef_dqsb * z_wnds_t(ji,jj) 511 512 ! ----------------------------! 513 ! III Total FLUXES ! 514 ! ----------------------------! 515 ! Downward Non Solar flux 516 p_qns (ji,jj,jl) = z_qlw (ji,jj,jl) - z_qsb (ji,jj,jl) - p_qla (ji,jj,jl) 517 ! Total non solar heat flux sensitivity for ice 518 p_dqns(ji,jj,jl) = - ( z_dqlw(ji,jj,jl) + z_dqsb(ji,jj,jl) + p_dqla(ji,jj,jl) ) 519 END DO 520 ! 521 END DO 522 ! 438 523 END DO 439 CALL lbc_lnk( p_taui , 'I', -1. ) 440 CALL lbc_lnk( p_tauj , 'I', -1. ) 441 CALL lbc_lnk( z_wnds_t, 'T', 1. ) 442 443 ! ----------------------------------------------------------------------------- ! 444 ! I Radiative FLUXES ! 445 ! ----------------------------------------------------------------------------- ! 446 !CDIR COLLAPSE 447 DO jj = 1, jpj 448 DO ji = 1, jpi 449 zst3 = pst(ji,jj) * pst(ji,jj) * pst(ji,jj) 450 p_qsr(ji,jj) = ( 1. - palb(ji,jj) ) * sf(jp_qsr)%fnow(ji,jj) * tmask(ji,jj,1) ! Short Wave (sw) 451 z_qlw(ji,jj) = 0.95 * ( sf(jp_qlw)%fnow(ji,jj) & ! Long Wave (lw) 452 & - Stef * pst(ji,jj) * zst3 ) * tmask(ji,jj,1) 453 z_dqlw(ji,jj) = zcoef_dqlw * zst3 ! lw sensitivity 454 END DO 455 END DO 456 457 ! ----------------------------------------------------------------------------- ! 458 ! II Turbulent FLUXES ! 459 ! ----------------------------------------------------------------------------- ! 460 461 ! ... turbulent heat fluxes 462 !CDIR COLLAPSE 463 z_qsb(:,:) = rhoa * cpa * Cice * z_wnds_t(:,:) * ( pst(:,:) - sf(jp_tair)%fnow(:,:) ) ! Sensible Heat 464 !CDIR NOVERRCHK 465 !CDIR COLLAPSE 466 p_qla(:,:) = MAX( 0.e0, rhoa * Ls * Cice * z_wnds_t(:,:) & ! Latent Heat 467 & * ( 11637800. * EXP( -5897.8 / pst(:,:) ) / rhoa - sf(jp_humi)%fnow(:,:) ) ) 468 469 ! Latent heat sensitivity for ice (Dqla/Dt) 470 !CDIR NOVERRCHK 471 !CDIR COLLAPSE 472 p_dqla(:,:) = zcoef_dqla * z_wnds_t(:,:) / ( pst(:,:) * pst(:,:) ) * EXP( -5897.8 / pst(:,:) ) 473 474 ! Sensible heat sensitivity (Dqsb_ice/Dtn_ice) 475 !CDIR COLLAPSE 476 z_dqsb(:,:) = zcoef_dqsb * z_wnds_t(:,:) 477 478 ! ----------------------------------------------------------------------------- ! 479 ! III Total FLUXES ! 480 ! ----------------------------------------------------------------------------- ! 481 482 !CDIR COLLAPSE 483 p_qns (:,:) = z_qlw (:,:) - z_qsb (:,:) - p_qla (:,:) ! Downward Non Solar flux 484 !CDIR COLLAPSE 485 p_dqns(:,:) = - ( z_dqlw(:,:) + z_dqsb(:,:) + p_dqla(:,:) ) ! Total non solar heat flux sensitivity for ice 486 487 524 ! 488 525 !-------------------------------------------------------------------- 489 526 ! FRACTIONs of net shortwave radiation which is not absorbed in the … … 502 539 ! 503 540 IF(ln_ctl) THEN 504 CALL prt_ctl(tab2d_1=p_qla , clinfo1=' blk_ice_core: p_qla : ', tab2d_2=z_qsb , clinfo2=' z_qsb : ') 505 CALL prt_ctl(tab2d_1=z_qlw , clinfo1=' blk_ice_core: z_qlw : ', tab2d_2=p_dqla , clinfo2=' p_dqla : ') 506 CALL prt_ctl(tab2d_1=z_dqsb , clinfo1=' blk_ice_core: z_dqsb : ', tab2d_2=z_dqlw , clinfo2=' z_dqlw : ') 507 CALL prt_ctl(tab2d_1=p_tpr , clinfo1=' blk_ice_core: p_tpr : ', tab2d_2=p_spr , clinfo2=' p_spr : ') 508 CALL prt_ctl(tab2d_1=p_dqns , clinfo1=' blk_ice_core: p_dqns : ', tab2d_2=z_wnds_t, clinfo2=' z_wnds_t : ') 509 CALL prt_ctl(tab2d_1=p_taui , clinfo1=' blk_ice_core: p_taui : ', tab2d_2=p_tauj , clinfo2=' p_tauj : ') 541 CALL prt_ctl(tab3d_1=p_qla , clinfo1=' blk_ice_core: p_qla : ', tab3d_2=z_qsb , clinfo2=' z_qsb : ', kdim=ijpl) 542 CALL prt_ctl(tab3d_1=z_qlw , clinfo1=' blk_ice_core: z_qlw : ', tab3d_2=p_dqla , clinfo2=' p_dqla : ', kdim=ijpl) 543 CALL prt_ctl(tab3d_1=z_dqsb , clinfo1=' blk_ice_core: z_dqsb : ', tab3d_2=z_dqlw , clinfo2=' z_dqlw : ', kdim=ijpl) 544 CALL prt_ctl(tab3d_1=p_dqns , clinfo1=' blk_ice_core: p_dqns : ', tab3d_2=p_qsr , clinfo2=' p_qsr : ', kdim=ijpl) 545 CALL prt_ctl(tab3d_1=pst , clinfo1=' blk_ice_core: pst : ', tab3d_2=p_qns , clinfo2=' p_qns : ', kdim=ijpl) 546 CALL prt_ctl(tab2d_1=p_tpr , clinfo1=' blk_ice_core: p_tpr : ', tab2d_2=p_spr , clinfo2=' p_spr : ') 547 CALL prt_ctl(tab2d_1=p_taui , clinfo1=' blk_ice_core: p_taui : ', tab2d_2=p_tauj , clinfo2=' p_tauj : ') 548 CALL prt_ctl(tab2d_1=z_wnds_t, clinfo1=' blk_ice_core: z_wnds_t : ') 510 549 ENDIF 511 550 … … 801 840 END FUNCTION psi_h 802 841 803 804 842 !!====================================================================== 805 843 END MODULE sbcblk_core -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r882 r886 52 52 PUBLIC sbc_ice_lim_2 ! routine called by sbcmod.F90 53 53 54 CHARACTER(len=1) :: cl_grid = 'B' ! type of grid used in ice dynamics 55 54 56 !! * Substitutions 55 57 # include "domzgr_substitute.h90" … … 87 89 !! 88 90 INTEGER :: ji, jj ! dummy loop indices 89 REAL(wp), DIMENSION(jpi,jpj) :: alb_oce_os ! albedo of the ocean under overcast sky 90 REAL(wp), DIMENSION(jpi,jpj) :: alb_oce_cs ! albedo of the ocean under clear sky 91 REAL(wp), DIMENSION(jpi,jpj) :: alb_ice_os ! albedo of the ice under overcast sky 92 REAL(wp), DIMENSION(jpi,jpj) :: alb_ice_cs ! albedo of ice under clear sky 91 REAL(wp), DIMENSION(jpi,jpj,1) :: alb_ice_os ! albedo of the ice under overcast sky 92 REAL(wp), DIMENSION(jpi,jpj,1) :: alb_ice_cs ! albedo of ice under clear sky 93 REAL(wp), DIMENSION(jpi,jpj,1) :: zsist ! surface ice temperature (K) 94 REAL(wp), DIMENSION(jpi,jpj,1) :: zhicif ! ice thickness 95 REAL(wp), DIMENSION(jpi,jpj,1) :: zhsnif ! snow thickness 96 REAL(wp), DIMENSION(jpi,jpj,1) :: zqns_ice ! non solar sea-ice heat flux 97 REAL(wp), DIMENSION(jpi,jpj,1) :: zqsr_ice ! solar sea-ice heat flux 98 REAL(wp), DIMENSION(jpi,jpj,1) :: zqla_ice ! ice latent heat flux 99 REAL(wp), DIMENSION(jpi,jpj,1) :: zdqns_ice ! sensitivity ice net heat flux 100 REAL(wp), DIMENSION(jpi,jpj,1) :: zdqla_ice ! sensitivity ice latent heat flux 93 101 !!---------------------------------------------------------------------- 94 102 … … 104 112 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 105 113 ! 106 ! ... mean surface ocean current at I-point (F-point with sea-ice indexation) 114 ! ... mean surface ocean current at ice dynamics point 115 ! B-grid dynamics : I-point (F-point with sea-ice indexation) 107 116 DO jj = 2, jpj 108 117 DO ji = fs_2, jpi ! vector opt. … … 117 126 tfu(:,:) = tfreez( sss_m ) + rt0 118 127 119 ! ... ice and ocean albedo 120 CALL blk_albedo( alb_ice_os , alb_oce_os , alb_ice_cs , alb_oce_cs ) 128 zsist (:,:,1) = sist (:,:) 129 zhicif(:,:,1) = hicif(:,:) ; zhsnif(:,:,1) = hsnif(:,:) 130 131 ! ... ice albedo 132 CALL albedo_ice( zsist, zhicif, zhsnif, alb_ice_cs, alb_ice_os ) 121 133 122 134 ! ... Sea-ice surface boundary conditions output from bulk formulae : … … 135 147 SELECT CASE( kblk ) 136 148 CASE( 3 ) ! CLIO bulk formulation 137 CALL blk_ice_clio( sist , ui_ice , vi_ice , alb_ice_cs, alb_ice_os,&138 & utaui_ice, vtaui_ice , qns_ice ,qsr_ice, &139 & qla_ice , dqns_ice , dqla_ice ,&140 & tprecip , sprecip ,&141 & fr1_i0 , fr2_i0 , 'B')149 CALL blk_ice_clio( zsist , ui_ice , vi_ice , alb_ice_cs , alb_ice_os , & 150 & utaui_ice , vtaui_ice , zqns_ice , zqsr_ice, & 151 & zqla_ice , zdqns_ice , zdqla_ice , & 152 & tprecip , sprecip , & 153 & fr1_i0 , fr2_i0 , cl_grid ) 142 154 CASE( 4 ) ! CORE bulk formulation 143 CALL blk_ice_core( sist , ui_ice , vi_ice , alb_ice_cs,&144 & utaui_ice, vtaui_ice , qns_ice ,qsr_ice, &145 & qla_ice , dqns_ice , dqla_ice,&146 & tprecip , sprecip ,&147 & fr1_i0 , fr2_i0)155 CALL blk_ice_core( zsist , ui_ice , vi_ice , alb_ice_cs , & 156 & utaui_ice , vtaui_ice , zqns_ice , zqsr_ice, & 157 & zqla_ice , zdqns_ice , zdqla_ice , & 158 & tprecip , sprecip , & 159 & fr1_i0 , fr2_i0 , cl_grid) 148 160 END SELECT 161 162 qsr_ice(:,:) = zqsr_ice(:,:,1) 163 qns_ice(:,:) = zqns_ice(:,:,1) ; dqns_ice(:,:) = zdqns_ice(:,:,1) 164 qla_ice(:,:) = zqla_ice(:,:,1) ; dqla_ice(:,:) = zdqla_ice(:,:,1) 149 165 150 166 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcmod.F90
r881 r886 26 26 USE sbcblk_core ! surface boundary condition: bulk formulation : CORE 27 27 USE sbcice_if ! surface boundary condition: ice-if sea-ice model 28 USE sbcice_lim ! surface boundary condition: LIM 3.0 sea-ice model 28 29 USE sbcice_lim_2 ! surface boundary condition: LIM 2.0 sea-ice model 29 30 USE sbccpl ! surface boundary condition: coupled florulation … … 96 97 !!gmhere no overwrite, test all option via namelist change: require more incore memory 97 98 !!gm IF( lk_sbc_cpl ) THEN ; ln_cpl = .TRUE. ; ELSE ; ln_cpl = .FALSE. ; ENDIF 98 IF( lk_ice_lim ) nn_ice = 2 99 IF( lk_lim2 ) nn_ice = 2 100 IF( lk_lim3 ) nn_ice = 3 99 101 IF( cp_cfg == 'gyre' ) THEN 100 102 ln_ana = .TRUE. … … 229 231 ! ! (update heat and freshwater fluxes) 230 232 CASE( 2 ) ; CALL sbc_ice_lim_2( kt, nsbc ) ! LIM 2.0 ice model 233 ! ! (update heat and freshwater fluxes) 234 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM 3.0 ice model 231 235 END SELECT ! (update all fluxes using bulk + LIM) 232 236 -
branches/dev_001_SBC/NEMO/OPA_SRC/ice_oce.F90
r885 r886 45 45 fcalving !: Iceberg calving 46 46 # endif 47 48 # if defined key_lim3 49 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: field exchanges with ice model to ocean 50 catm_ice , & !: cloud cover 51 tatm_ice , & !: air temperature 52 icethi !: icethickness 53 # endif 47 54 48 55 REAL(wp), PUBLIC :: & !: -
branches/dev_001_SBC/NEMO/OPA_SRC/lib_mpp.F90
r717 r886 60 60 PUBLIC mynode, mpparent, mpp_isl, mpp_min, mpp_max, mpp_sum, mpp_lbc_north 61 61 PUBLIC mpp_lbc_north_e, mpp_minloc, mpp_maxloc, mpp_lnk_3d, mpp_lnk_2d, mpp_lnk_3d_gather, mpp_lnk_2d_e, mpplnks 62 PUBLIC mpprecv, mppsend, mppscatter, mppgather, mppobc, mpp_ini_north, mppstop, mppsync 62 PUBLIC mpprecv, mppsend, mppscatter, mppgather, mppobc, mpp_ini_north, mppstop, mppsync, mpp_ini_ice, mpp_comm_free 63 63 #if defined key_oasis3 || defined key_oasis4 64 64 PUBLIC mppsize, mpprank … … 113 113 mpi_comm_opa ! opa local communicator 114 114 115 ! variables used in case of sea-ice 116 INTEGER, PUBLIC :: & ! 117 ngrp_ice, & ! group ID for the ice processors (to compute rheology) 118 ncomm_ice, & ! communicator made by the processors with sea-ice 119 ndim_rank_ice, & ! number of 'ice' processors 120 n_ice_root ! number (in the comm_ice) of proc 0 in the ice comm 121 INTEGER, DIMENSION(:), ALLOCATABLE :: & 122 nrank_ice ! dimension ndim_rank_north, number of the procs belonging to ncomm_north 115 123 ! variables used in case of north fold condition in mpp_mpi with jpni > 1 116 124 INTEGER :: & ! … … 3085 3093 3086 3094 3087 SUBROUTINE mppmax_a_int( ktab, kdim )3095 SUBROUTINE mppmax_a_int( ktab, kdim, kcom ) 3088 3096 !!---------------------------------------------------------------------- 3089 3097 !! *** routine mppmax_a_int *** … … 3095 3103 INTEGER , INTENT( in ) :: kdim ! size of array 3096 3104 INTEGER , INTENT(inout), DIMENSION(kdim) :: ktab ! input array 3105 INTEGER , INTENT(in) , OPTIONAL :: kcom 3097 3106 3098 3107 #if defined key_mpp_shmem … … 3126 3135 !! * Local variables (MPI version) 3127 3136 INTEGER :: ierror 3137 INTEGER :: localcomm 3128 3138 INTEGER, DIMENSION(kdim) :: iwork 3139 3140 localcomm = mpi_comm_opa 3141 IF( PRESENT(kcom) ) localcomm = kcom 3129 3142 3130 3143 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, & 3131 & mpi_max, mpi_comm_opa, ierror )3144 & mpi_max, localcomm, ierror ) 3132 3145 3133 3146 ktab(:) = iwork(:) … … 3137 3150 3138 3151 3139 SUBROUTINE mppmax_int( ktab )3152 SUBROUTINE mppmax_int( ktab, kcom ) 3140 3153 !!---------------------------------------------------------------------- 3141 3154 !! *** routine mppmax_int *** … … 3148 3161 !! * Arguments 3149 3162 INTEGER, INTENT(inout) :: ktab ! ??? 3163 INTEGER, INTENT(in), OPTIONAL :: kcom ! ??? 3150 3164 3151 3165 !! * Local declarations … … 3175 3189 !! * Local variables (MPI version) 3176 3190 INTEGER :: ierror, iwork 3177 3191 INTEGER :: localcomm 3192 3193 localcomm = mpi_comm_opa 3194 IF( PRESENT(kcom) ) localcomm = kcom 3195 3178 3196 CALL mpi_allreduce(ktab,iwork, 1,mpi_integer & 3179 & ,mpi_max, mpi_comm_opa,ierror)3197 & ,mpi_max,localcomm,ierror) 3180 3198 3181 3199 ktab = iwork … … 3185 3203 3186 3204 3187 SUBROUTINE mppmin_a_int( ktab, kdim )3205 SUBROUTINE mppmin_a_int( ktab, kdim, kcom ) 3188 3206 !!---------------------------------------------------------------------- 3189 3207 !! *** routine mppmin_a_int *** … … 3195 3213 INTEGER , INTENT( in ) :: kdim ! size of array 3196 3214 INTEGER , INTENT(inout), DIMENSION(kdim) :: ktab ! input array 3215 INTEGER , INTENT( in ), OPTIONAL :: kcom ! input array 3197 3216 3198 3217 #if defined key_mpp_shmem … … 3226 3245 !! * Local variables (MPI version) 3227 3246 INTEGER :: ierror 3247 INTEGER :: localcomm 3228 3248 INTEGER, DIMENSION(kdim) :: iwork 3229 3249 3250 localcomm = mpi_comm_opa 3251 IF( PRESENT(kcom) ) localcomm = kcom 3252 3230 3253 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, & 3231 & mpi_min, mpi_comm_opa, ierror )3254 & mpi_min, localcomm, ierror ) 3232 3255 3233 3256 ktab(:) = iwork(:) … … 3521 3544 3522 3545 3523 SUBROUTINE mppmax_a_real( ptab, kdim )3546 SUBROUTINE mppmax_a_real( ptab, kdim, kcom ) 3524 3547 !!---------------------------------------------------------------------- 3525 3548 !! *** routine mppmax_a_real *** … … 3531 3554 INTEGER , INTENT( in ) :: kdim 3532 3555 REAL(wp), INTENT(inout), DIMENSION(kdim) :: ptab 3556 INTEGER , INTENT( in ), OPTIONAL :: kcom 3533 3557 3534 3558 #if defined key_mpp_shmem … … 3563 3587 !! * Local variables (MPI version) 3564 3588 INTEGER :: ierror 3589 INTEGER :: localcomm 3565 3590 REAL(wp), DIMENSION(kdim) :: zwork 3566 3591 3592 localcomm = mpi_comm_opa 3593 IF( PRESENT(kcom) ) localcomm = kcom 3594 3567 3595 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3568 ,mpi_max, mpi_comm_opa,ierror)3596 ,mpi_max,localcomm,ierror) 3569 3597 ptab(:) = zwork(:) 3570 3598 … … 3574 3602 3575 3603 3576 SUBROUTINE mppmax_real( ptab )3604 SUBROUTINE mppmax_real( ptab, kcom ) 3577 3605 !!---------------------------------------------------------------------- 3578 3606 !! *** routine mppmax_real *** … … 3583 3611 !! * Arguments 3584 3612 REAL(wp), INTENT(inout) :: ptab ! ??? 3613 INTEGER , INTENT( in ), OPTIONAL :: kcom ! ??? 3585 3614 3586 3615 #if defined key_mpp_shmem … … 3607 3636 !! * Local variables (MPI version) 3608 3637 INTEGER :: ierror 3638 INTEGER :: localcomm 3609 3639 REAL(wp) :: zwork 3610 3640 3641 localcomm = mpi_comm_opa 3642 IF( PRESENT(kcom) ) localcomm = kcom 3643 3611 3644 CALL mpi_allreduce( ptab, zwork , 1 , mpi_double_precision, & 3612 & mpi_max, mpi_comm_opa, ierror )3645 & mpi_max, localcomm, ierror ) 3613 3646 ptab = zwork 3614 3647 … … 3618 3651 3619 3652 3620 SUBROUTINE mppmin_a_real( ptab, kdim )3653 SUBROUTINE mppmin_a_real( ptab, kdim, kcom ) 3621 3654 !!---------------------------------------------------------------------- 3622 3655 !! *** routine mppmin_a_real *** … … 3628 3661 INTEGER , INTENT( in ) :: kdim 3629 3662 REAL(wp), INTENT(inout), DIMENSION(kdim) :: ptab 3663 INTEGER , INTENT( in ), OPTIONAL :: kcom 3630 3664 3631 3665 #if defined key_mpp_shmem … … 3660 3694 !! * Local variables (MPI version) 3661 3695 INTEGER :: ierror 3696 INTEGER :: localcomm 3662 3697 REAL(wp), DIMENSION(kdim) :: zwork 3663 3698 3699 localcomm = mpi_comm_opa 3700 IF( PRESENT(kcom) ) localcomm = kcom 3701 3664 3702 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3665 ,mpi_min, mpi_comm_opa,ierror)3703 ,mpi_min,localcomm,ierror) 3666 3704 ptab(:) = zwork(:) 3667 3705 … … 3671 3709 3672 3710 3673 SUBROUTINE mppmin_real( ptab )3711 SUBROUTINE mppmin_real( ptab, kcom ) 3674 3712 !!---------------------------------------------------------------------- 3675 3713 !! *** routine mppmin_real *** … … 3681 3719 !! * Arguments 3682 3720 REAL(wp), INTENT( inout ) :: ptab ! 3721 INTEGER , INTENT( in ), OPTIONAL :: kcom 3683 3722 3684 3723 #if defined key_mpp_shmem … … 3706 3745 INTEGER :: ierror 3707 3746 REAL(wp) :: zwork 3747 INTEGER :: localcomm 3748 3749 localcomm = mpi_comm_opa 3750 IF( PRESENT(kcom) ) localcomm = kcom 3708 3751 3709 3752 CALL mpi_allreduce( ptab, zwork, 1,mpi_double_precision & 3710 & ,mpi_min, mpi_comm_opa,ierror)3753 & ,mpi_min,localcomm,ierror) 3711 3754 ptab = zwork 3712 3755 … … 3716 3759 3717 3760 3718 SUBROUTINE mppsum_a_real( ptab, kdim )3761 SUBROUTINE mppsum_a_real( ptab, kdim, kcom ) 3719 3762 !!---------------------------------------------------------------------- 3720 3763 !! *** routine mppsum_a_real *** … … 3726 3769 INTEGER , INTENT( in ) :: kdim ! size of ptab 3727 3770 REAL(wp), DIMENSION(kdim), INTENT( inout ) :: ptab ! input array 3771 INTEGER , INTENT( in ), OPTIONAL :: kcom 3728 3772 3729 3773 #if defined key_mpp_shmem … … 3758 3802 !! * Local variables (MPI version) 3759 3803 INTEGER :: ierror ! temporary integer 3804 INTEGER :: localcomm 3760 3805 REAL(wp), DIMENSION(kdim) :: zwork ! temporary workspace 3806 3807 3808 localcomm = mpi_comm_opa 3809 IF( PRESENT(kcom) ) localcomm = kcom 3761 3810 3762 3811 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3763 & ,mpi_sum, mpi_comm_opa,ierror)3812 & ,mpi_sum,localcomm,ierror) 3764 3813 ptab(:) = zwork(:) 3765 3814 … … 3769 3818 3770 3819 3771 SUBROUTINE mppsum_real( ptab )3820 SUBROUTINE mppsum_real( ptab, kcom ) 3772 3821 !!---------------------------------------------------------------------- 3773 3822 !! *** routine mppsum_real *** … … 3778 3827 !!----------------------------------------------------------------------- 3779 3828 REAL(wp), INTENT(inout) :: ptab ! input scalar 3829 INTEGER , INTENT( in ), OPTIONAL :: kcom 3780 3830 3781 3831 #if defined key_mpp_shmem … … 3802 3852 !! * Local variables (MPI version) 3803 3853 INTEGER :: ierror 3854 INTEGER :: localcomm 3804 3855 REAL(wp) :: zwork 3805 3856 3806 CALL mpi_allreduce(ptab, zwork, 1,mpi_double_precision & 3807 & ,mpi_sum,mpi_comm_opa,ierror) 3857 localcomm = mpi_comm_opa 3858 IF( PRESENT(kcom) ) localcomm = kcom 3859 3860 CALL mpi_allreduce(ptab, zwork, 1,mpi_double_precision & 3861 & ,mpi_sum,localcomm,ierror) 3808 3862 ptab = zwork 3809 3863 … … 4305 4359 END SUBROUTINE mppobc 4306 4360 4361 SUBROUTINE mpp_comm_free( kcom) 4362 4363 INTEGER, INTENT(in) :: kcom 4364 INTEGER :: ierr 4365 4366 CALL MPI_COMM_FREE(kcom, ierr) 4367 4368 END SUBROUTINE mpp_comm_free 4369 4370 4371 SUBROUTINE mpp_ini_ice(pindic) 4372 !!---------------------------------------------------------------------- 4373 !! *** routine mpp_ini_ice *** 4374 !! 4375 !! ** Purpose : Initialize special communicator for ice areas 4376 !! condition together with global variables needed in the ddmpp folding 4377 !! 4378 !! ** Method : - Look for ice processors in ice routines 4379 !! - Put their number in nrank_ice 4380 !! - Create groups for the world processors and the ice processors 4381 !! - Create a communicator for ice processors 4382 !! 4383 !! ** output 4384 !! njmppmax = njmpp for northern procs 4385 !! ndim_rank_ice = number of processors in the northern line 4386 !! nrank_north (ndim_rank_north) = number of the northern procs. 4387 !! ngrp_world = group ID for the world processors 4388 !! ngrp_ice = group ID for the ice processors 4389 !! ncomm_ice = communicator for the ice procs. 4390 !! n_ice_root = number (in the world) of proc 0 in the ice comm. 4391 !! 4392 !! History : 4393 !! ! 03-09 (J.M. Molines, MPI only ) 4394 !!---------------------------------------------------------------------- 4395 #ifdef key_mpp_shmem 4396 CALL ctl_stop( ' mpp_ini_ice not available in SHMEM' ) 4397 # elif key_mpp_mpi 4398 INTEGER, INTENT(in) :: pindic 4399 INTEGER :: ierr 4400 INTEGER :: jproc 4401 INTEGER :: ii,ji 4402 INTEGER, DIMENSION(jpnij) :: kice 4403 INTEGER, DIMENSION(jpnij) :: zwork 4404 INTEGER :: zrank 4405 !!---------------------------------------------------------------------- 4406 4407 ! Look for how many procs with sea-ice 4408 ! 4409 kice = 0 4410 DO jproc=1,jpnij 4411 IF(jproc == narea .AND. pindic .GT. 0) THEN 4412 kice(jproc) = 1 4413 ENDIF 4414 END DO 4415 4416 zwork = 0 4417 CALL MPI_ALLREDUCE( kice, zwork,jpnij, mpi_integer, & 4418 mpi_sum, mpi_comm_opa, ierr ) 4419 ndim_rank_ice = sum(zwork) 4420 4421 ! Allocate the right size to nrank_north 4422 IF(ALLOCATED(nrank_ice)) DEALLOCATE(nrank_ice) 4423 ALLOCATE(nrank_ice(ndim_rank_ice)) 4424 4425 ii = 0 4426 nrank_ice = 0 4427 DO jproc=1,jpnij 4428 IF(zwork(jproc) == 1) THEN 4429 ii = ii + 1 4430 nrank_ice(ii) = jproc -1 4431 ENDIF 4432 END DO 4433 4434 ! Create the world group 4435 CALL MPI_COMM_GROUP(mpi_comm_opa,ngrp_world,ierr) 4436 4437 ! Create the ice group from the world group 4438 CALL MPI_GROUP_INCL(ngrp_world,ndim_rank_ice,nrank_ice,ngrp_ice,ierr) 4439 4440 ! Create the ice communicator , ie the pool of procs with sea-ice 4441 CALL MPI_COMM_CREATE(mpi_comm_opa,ngrp_ice,ncomm_ice,ierr) 4442 4443 ! Find proc number in the world of proc 0 in the north 4444 CALL MPI_GROUP_TRANSLATE_RANKS(ngrp_ice,1,0,ngrp_world,n_ice_root,ierr) 4445 #endif 4446 4447 END SUBROUTINE mpp_ini_ice 4448 4307 4449 4308 4450 SUBROUTINE mpp_ini_north … … 5253 5395 5254 5396 LOGICAL, PUBLIC, PARAMETER :: lk_mpp = .FALSE. !: mpp flag 5397 INTEGER :: ncomm_ice 5255 5398 5256 5399 CONTAINS … … 5264 5407 END SUBROUTINE mppsync 5265 5408 5266 SUBROUTINE mpp_sum_as( parr, kdim ) ! Dummy routine5409 SUBROUTINE mpp_sum_as( parr, kdim, kcom ) ! Dummy routine 5267 5410 REAL , DIMENSION(:) :: parr 5268 5411 INTEGER :: kdim 5269 WRITE(*,*) 'mpp_sum_as: You should not have seen this print! error?', kdim, parr(1) 5412 INTEGER, OPTIONAL :: kcom 5413 WRITE(*,*) 'mpp_sum_as: You should not have seen this print! error?', kdim, parr(1), kcom 5270 5414 END SUBROUTINE mpp_sum_as 5271 5415 5272 SUBROUTINE mpp_sum_a2s( parr, kdim ) ! Dummy routine5416 SUBROUTINE mpp_sum_a2s( parr, kdim, kcom ) ! Dummy routine 5273 5417 REAL , DIMENSION(:,:) :: parr 5274 5418 INTEGER :: kdim 5275 WRITE(*,*) 'mpp_sum_a2s: You should not have seen this print! error?', kdim, parr(1,1) 5419 INTEGER, OPTIONAL :: kcom 5420 WRITE(*,*) 'mpp_sum_a2s: You should not have seen this print! error?', kdim, parr(1,1), kcom 5276 5421 END SUBROUTINE mpp_sum_a2s 5277 5422 5278 SUBROUTINE mpp_sum_ai( karr, kdim ) ! Dummy routine5423 SUBROUTINE mpp_sum_ai( karr, kdim, kcom ) ! Dummy routine 5279 5424 INTEGER, DIMENSION(:) :: karr 5280 5425 INTEGER :: kdim 5281 WRITE(*,*) 'mpp_sum_ai: You should not have seen this print! error?', kdim, karr(1) 5426 INTEGER, OPTIONAL :: kcom 5427 WRITE(*,*) 'mpp_sum_ai: You should not have seen this print! error?', kdim, karr(1), kcom 5282 5428 END SUBROUTINE mpp_sum_ai 5283 5429 5284 SUBROUTINE mpp_sum_s( psca ) ! Dummy routine5430 SUBROUTINE mpp_sum_s( psca, kcom ) ! Dummy routine 5285 5431 REAL :: psca 5286 WRITE(*,*) 'mpp_sum_s: You should not have seen this print! error?', psca 5432 INTEGER, OPTIONAL :: kcom 5433 WRITE(*,*) 'mpp_sum_s: You should not have seen this print! error?', psca, kcom 5287 5434 END SUBROUTINE mpp_sum_s 5288 5435 5289 SUBROUTINE mpp_sum_i( kint ) ! Dummy routine5436 SUBROUTINE mpp_sum_i( kint, kcom ) ! Dummy routine 5290 5437 integer :: kint 5291 WRITE(*,*) 'mpp_sum_i: You should not have seen this print! error?', kint 5438 INTEGER, OPTIONAL :: kcom 5439 WRITE(*,*) 'mpp_sum_i: You should not have seen this print! error?', kint, kcom 5292 5440 END SUBROUTINE mpp_sum_i 5293 5441 5294 SUBROUTINE mppmax_a_real( parr, kdim )5442 SUBROUTINE mppmax_a_real( parr, kdim, kcom ) 5295 5443 REAL , DIMENSION(:) :: parr 5296 5444 INTEGER :: kdim 5297 WRITE(*,*) 'mppmax_a_real: You should not have seen this print! error?', kdim, parr(1) 5445 INTEGER, OPTIONAL :: kcom 5446 WRITE(*,*) 'mppmax_a_real: You should not have seen this print! error?', kdim, parr(1), kcom 5298 5447 END SUBROUTINE mppmax_a_real 5299 5448 5300 SUBROUTINE mppmax_real( psca )5449 SUBROUTINE mppmax_real( psca, kcom ) 5301 5450 REAL :: psca 5302 WRITE(*,*) 'mppmax_real: You should not have seen this print! error?', psca 5451 INTEGER, OPTIONAL :: kcom 5452 WRITE(*,*) 'mppmax_real: You should not have seen this print! error?', psca, kcom 5303 5453 END SUBROUTINE mppmax_real 5304 5454 5305 SUBROUTINE mppmin_a_real( parr, kdim )5455 SUBROUTINE mppmin_a_real( parr, kdim, kcom ) 5306 5456 REAL , DIMENSION(:) :: parr 5307 5457 INTEGER :: kdim 5308 WRITE(*,*) 'mppmin_a_real: You should not have seen this print! error?', kdim, parr(1) 5458 INTEGER, OPTIONAL :: kcom 5459 WRITE(*,*) 'mppmin_a_real: You should not have seen this print! error?', kdim, parr(1), kcom 5309 5460 END SUBROUTINE mppmin_a_real 5310 5461 5311 SUBROUTINE mppmin_real( psca )5462 SUBROUTINE mppmin_real( psca, kcom ) 5312 5463 REAL :: psca 5313 WRITE(*,*) 'mppmin_real: You should not have seen this print! error?', psca 5464 INTEGER, OPTIONAL :: kcom 5465 WRITE(*,*) 'mppmin_real: You should not have seen this print! error?', psca, kcom 5314 5466 END SUBROUTINE mppmin_real 5315 5467 5316 SUBROUTINE mppmax_a_int( karr, kdim )5468 SUBROUTINE mppmax_a_int( karr, kdim ,kcom) 5317 5469 INTEGER, DIMENSION(:) :: karr 5318 5470 INTEGER :: kdim 5319 WRITE(*,*) 'mppmax_a_int: You should not have seen this print! error?', kdim, karr(1) 5471 INTEGER, OPTIONAL :: kcom 5472 WRITE(*,*) 'mppmax_a_int: You should not have seen this print! error?', kdim, karr(1), kcom 5320 5473 END SUBROUTINE mppmax_a_int 5321 5474 5322 SUBROUTINE mppmax_int( kint 5475 SUBROUTINE mppmax_int( kint, kcom) 5323 5476 INTEGER :: kint 5324 WRITE(*,*) 'mppmax_int: You should not have seen this print! error?', kint 5477 INTEGER, OPTIONAL :: kcom 5478 WRITE(*,*) 'mppmax_int: You should not have seen this print! error?', kint, kcom 5325 5479 END SUBROUTINE mppmax_int 5326 5480 5327 SUBROUTINE mppmin_a_int( karr, kdim )5481 SUBROUTINE mppmin_a_int( karr, kdim, kcom ) 5328 5482 INTEGER, DIMENSION(:) :: karr 5329 5483 INTEGER :: kdim 5330 WRITE(*,*) 'mppmin_a_int: You should not have seen this print! error?', kdim, karr(1) 5484 INTEGER, OPTIONAL :: kcom 5485 WRITE(*,*) 'mppmin_a_int: You should not have seen this print! error?', kdim, karr(1), kcom 5331 5486 END SUBROUTINE mppmin_a_int 5332 5487 5333 SUBROUTINE mppmin_int( kint )5488 SUBROUTINE mppmin_int( kint, kcom ) 5334 5489 INTEGER :: kint 5335 WRITE(*,*) 'mppmin_int: You should not have seen this print! error?', kint 5490 INTEGER, OPTIONAL :: kcom 5491 WRITE(*,*) 'mppmin_int: You should not have seen this print! error?', kint, kcom 5336 5492 END SUBROUTINE mppmin_int 5337 5493 … … 5428 5584 END SUBROUTINE mppstop 5429 5585 5586 SUBROUTINE mpp_ini_ice(kcom) 5587 INTEGER :: kcom 5588 WRITE(*,*) 'mpp_ini_ice: You should not have seen this print! error?',kcom 5589 END SUBROUTINE mpp_ini_ice 5590 5591 SUBROUTINE mpp_comm_free(kcom) 5592 INTEGER :: kcom 5593 WRITE(*,*) 'mpp_comm_free: You should not have seen this print! error?',kcom 5594 END SUBROUTINE mpp_comm_free 5595 5430 5596 #endif 5431 5597 !!---------------------------------------------------------------------- -
branches/dev_001_SBC/NEMO/OPA_SRC/restart.F90
r881 r886 192 192 !! has been stored in the restart file. 193 193 !!---------------------------------------------------------------------- 194 REAL(wp) :: zcoef, zkt, zrdt, zrdttra1, zndastp 195 #if defined key_lim2 196 INTEGER :: ji, jj 197 #endif 194 REAL(wp) :: zkt, zrdt, zrdttra1, zndastp 198 195 !!---------------------------------------------------------------------- 199 196
Note: See TracChangeset
for help on using the changeset viewer.