Changeset 12377 for NEMO/trunk/src/OCE/DIA
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 1 deleted
- 9 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/DIA/dia25h.F90
r11536 r12377 39 39 CONTAINS 40 40 41 SUBROUTINE dia_25h_init 41 SUBROUTINE dia_25h_init( Kbb ) 42 42 !!--------------------------------------------------------------------------- 43 43 !! *** ROUTINE dia_25h_init *** … … 47 47 !! ** Method : Read namelist 48 48 !!--------------------------------------------------------------------------- 49 INTEGER, INTENT(in) :: Kbb ! Time level index 50 ! 49 51 INTEGER :: ios ! Local integer output status for namelist read 50 52 INTEGER :: ierror ! Local integer for memory allocation … … 53 55 !!---------------------------------------------------------------------- 54 56 ! 55 REWIND ( numnam_ref ) ! Read Namelist nam_dia25h in reference namelist : 25hour mean diagnostics56 57 READ ( numnam_ref, nam_dia25h, IOSTAT=ios, ERR= 901 ) 57 58 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_dia25h in reference namelist' ) 58 REWIND( numnam_cfg ) ! Namelist nam_dia25h in configuration namelist 25hour diagnostics59 59 READ ( numnam_cfg, nam_dia25h, IOSTAT = ios, ERR = 902 ) 60 60 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nam_dia25h in configuration namelist' ) … … 95 95 ! ------------------------- ! 96 96 cnt_25h = 1 ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible) 97 tn_25h (:,:,:) = ts b (:,:,:,jp_tem)98 sn_25h (:,:,:) = ts b (:,:,:,jp_sal)99 sshn_25h(:,:) = ssh b(:,:)100 un_25h (:,:,:) = u b (:,:,:)101 vn_25h (:,:,:) = v b (:,:,:)97 tn_25h (:,:,:) = ts (:,:,:,jp_tem,Kbb) 98 sn_25h (:,:,:) = ts (:,:,:,jp_sal,Kbb) 99 sshn_25h(:,:) = ssh(:,:,Kbb) 100 un_25h (:,:,:) = uu (:,:,:,Kbb) 101 vn_25h (:,:,:) = vv (:,:,:,Kbb) 102 102 avt_25h (:,:,:) = avt (:,:,:) 103 103 avm_25h (:,:,:) = avm (:,:,:) … … 116 116 117 117 118 SUBROUTINE dia_25h( kt )118 SUBROUTINE dia_25h( kt, Kmm ) 119 119 !!---------------------------------------------------------------------- 120 120 !! *** ROUTINE dia_25h *** … … 125 125 !!---------------------------------------------------------------------- 126 126 INTEGER, INTENT(in) :: kt ! ocean time-step index 127 INTEGER, INTENT(in) :: Kmm ! ocean time level index 127 128 !! 128 129 INTEGER :: ji, jj, jk … … 150 151 ! wn_25h could not be initialised in dia_25h_init, so we do it here instead 151 152 IF( kt == nn_it000 ) THEN 152 wn_25h(:,:,:) = w n(:,:,:)153 wn_25h(:,:,:) = ww(:,:,:) 153 154 ENDIF 154 155 … … 161 162 ENDIF 162 163 163 tn_25h (:,:,:) = tn_25h (:,:,:) + ts n (:,:,:,jp_tem)164 sn_25h (:,:,:) = sn_25h (:,:,:) + ts n (:,:,:,jp_sal)165 sshn_25h(:,:) = sshn_25h(:,:) + ssh n(:,:)166 un_25h (:,:,:) = un_25h (:,:,:) + u n (:,:,:)167 vn_25h (:,:,:) = vn_25h (:,:,:) + v n (:,:,:)168 wn_25h (:,:,:) = wn_25h (:,:,:) + w n(:,:,:)164 tn_25h (:,:,:) = tn_25h (:,:,:) + ts (:,:,:,jp_tem,Kmm) 165 sn_25h (:,:,:) = sn_25h (:,:,:) + ts (:,:,:,jp_sal,Kmm) 166 sshn_25h(:,:) = sshn_25h(:,:) + ssh(:,:,Kmm) 167 un_25h (:,:,:) = un_25h (:,:,:) + uu (:,:,:,Kmm) 168 vn_25h (:,:,:) = vn_25h (:,:,:) + vv (:,:,:,Kmm) 169 wn_25h (:,:,:) = wn_25h (:,:,:) + ww (:,:,:) 169 170 avt_25h (:,:,:) = avt_25h (:,:,:) + avt (:,:,:) 170 171 avm_25h (:,:,:) = avm_25h (:,:,:) + avm (:,:,:) … … 245 246 ! 246 247 ! After the write reset the values to cnt=1 and sum values equal current value 247 tn_25h (:,:,:) = ts n (:,:,:,jp_tem)248 sn_25h (:,:,:) = ts n (:,:,:,jp_sal)249 sshn_25h(:,:) = ssh n(:,:)250 un_25h (:,:,:) = u n (:,:,:)251 vn_25h (:,:,:) = v n (:,:,:)252 wn_25h (:,:,:) = w n(:,:,:)248 tn_25h (:,:,:) = ts (:,:,:,jp_tem,Kmm) 249 sn_25h (:,:,:) = ts (:,:,:,jp_sal,Kmm) 250 sshn_25h(:,:) = ssh(:,:,Kmm) 251 un_25h (:,:,:) = uu (:,:,:,Kmm) 252 vn_25h (:,:,:) = vv (:,:,:,Kmm) 253 wn_25h (:,:,:) = ww (:,:,:) 253 254 avt_25h (:,:,:) = avt (:,:,:) 254 255 avm_25h (:,:,:) = avm (:,:,:) -
NEMO/trunk/src/OCE/DIA/diaar5.F90
r12276 r12377 39 39 40 40 !! * Substitutions 41 # include " vectopt_loop_substitute.h90"41 # include "do_loop_substitute.h90" 42 42 !!---------------------------------------------------------------------- 43 43 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 62 62 63 63 64 SUBROUTINE dia_ar5( kt )64 SUBROUTINE dia_ar5( kt, Kmm ) 65 65 !!---------------------------------------------------------------------- 66 66 !! *** ROUTINE dia_ar5 *** … … 70 70 ! 71 71 INTEGER, INTENT( in ) :: kt ! ocean time-step index 72 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 72 73 ! 73 74 INTEGER :: ji, jj, jk, iks, ikb ! dummy loop arguments … … 89 90 ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk) ) 90 91 ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 91 zarea_ssh(:,:) = area(:,:) * ssh n(:,:)92 zarea_ssh(:,:) = area(:,:) * ssh(:,:,Kmm) 92 93 ENDIF 93 94 ! … … 99 100 zrhd(:,:,jpk) = 0._wp ! ocean volume ; rhd is used as workspace 100 101 DO jk = 1, jpkm1 101 zrhd(:,:,jk) = area(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk)102 zrhd(:,:,jk) = area(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 102 103 END DO 103 104 CALL iom_put( 'volcello' , zrhd(:,:,:) ) ! WARNING not consistent with CMIP DR where volcello is at ca. 2000 104 CALL iom_put( 'masscello' , rau0 * e3t _n(:,:,:) * tmask(:,:,:) ) ! ocean mass105 CALL iom_put( 'masscello' , rau0 * e3t(:,:,:,Kmm) * tmask(:,:,:) ) ! ocean mass 105 106 ENDIF 106 107 ! 107 108 IF( iom_use( 'e3tb' ) ) THEN ! bottom layer thickness 108 DO jj = 1, jpj 109 DO ji = 1, jpi 110 ikb = mbkt(ji,jj) 111 z2d(ji,jj) = e3t_n(ji,jj,ikb) 112 END DO 113 END DO 109 DO_2D_11_11 110 ikb = mbkt(ji,jj) 111 z2d(ji,jj) = e3t(ji,jj,ikb,Kmm) 112 END_2D 114 113 CALL iom_put( 'e3tb', z2d ) 115 114 ENDIF … … 122 121 CALL iom_put( 'voltot', zvol ) 123 122 CALL iom_put( 'sshtot', zvolssh / area_tot ) 124 CALL iom_put( 'sshdyn', ssh n(:,:) - (zvolssh / area_tot) )123 CALL iom_put( 'sshdyn', ssh(:,:,Kmm) - (zvolssh / area_tot) ) 125 124 ! 126 125 ENDIF … … 128 127 IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) ) THEN 129 128 ! 130 ztsn(:,:,:,jp_tem) = ts n(:,:,:,jp_tem) ! thermosteric ssh129 ztsn(:,:,:,jp_tem) = ts(:,:,:,jp_tem,Kmm) ! thermosteric ssh 131 130 ztsn(:,:,:,jp_sal) = sn0(:,:,:) 132 CALL eos( ztsn, zrhd, gdept _n(:,:,:) ) ! now in situ density using initial salinity131 CALL eos( ztsn, zrhd, gdept(:,:,:,Kmm) ) ! now in situ density using initial salinity 133 132 ! 134 133 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 135 134 DO jk = 1, jpkm1 136 zbotpres(:,:) = zbotpres(:,:) + e3t _n(:,:,jk) * zrhd(:,:,jk)135 zbotpres(:,:) = zbotpres(:,:) + e3t(:,:,jk,Kmm) * zrhd(:,:,jk) 137 136 END DO 138 137 IF( ln_linssh ) THEN … … 141 140 DO jj = 1, jpj 142 141 iks = mikt(ji,jj) 143 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh n(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj)142 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Kmm) * zrhd(ji,jj,iks) + riceload(ji,jj) 144 143 END DO 145 144 END DO 146 145 ELSE 147 zbotpres(:,:) = zbotpres(:,:) + ssh n(:,:) * zrhd(:,:,1)146 zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Kmm) * zrhd(:,:,1) 148 147 END IF 149 148 !!gm … … 157 156 158 157 ! ! steric sea surface height 159 CALL eos( ts n, zrhd, zrhop, gdept_n(:,:,:) ) ! now in situ and potential density158 CALL eos( ts(:,:,:,:,Kmm), zrhd, zrhop, gdept(:,:,:,Kmm) ) ! now in situ and potential density 160 159 zrhop(:,:,jpk) = 0._wp 161 160 CALL iom_put( 'rhop', zrhop ) … … 163 162 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 164 163 DO jk = 1, jpkm1 165 zbotpres(:,:) = zbotpres(:,:) + e3t _n(:,:,jk) * zrhd(:,:,jk)164 zbotpres(:,:) = zbotpres(:,:) + e3t(:,:,jk,Kmm) * zrhd(:,:,jk) 166 165 END DO 167 166 IF( ln_linssh ) THEN … … 170 169 DO jj = 1,jpj 171 170 iks = mikt(ji,jj) 172 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh n(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj)171 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Kmm) * zrhd(ji,jj,iks) + riceload(ji,jj) 173 172 END DO 174 173 END DO 175 174 ELSE 176 zbotpres(:,:) = zbotpres(:,:) + ssh n(:,:) * zrhd(:,:,1)175 zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Kmm) * zrhd(:,:,1) 177 176 END IF 178 177 END IF … … 183 182 ! ! ocean bottom pressure 184 183 zztmp = rau0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 185 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh n(:,:) + thick0(:,:) )184 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh(:,:,Kmm) + thick0(:,:) ) 186 185 CALL iom_put( 'botpres', zbotpres ) 187 186 ! … … 191 190 ! ! Mean density anomalie, temperature and salinity 192 191 ztsn(:,:,:,:) = 0._wp ! ztsn(:,:,1,jp_tem/sal) is used here as 2D Workspace for temperature & salinity 193 DO jk = 1, jpkm1 194 DO jj = 1, jpj 195 DO ji = 1, jpi 196 zztmp = area(ji,jj) * e3t_n(ji,jj,jk) 197 ztsn(ji,jj,1,jp_tem) = ztsn(ji,jj,1,jp_tem) + zztmp * tsn(ji,jj,jk,jp_tem) 198 ztsn(ji,jj,1,jp_sal) = ztsn(ji,jj,1,jp_sal) + zztmp * tsn(ji,jj,jk,jp_sal) 199 ENDDO 200 ENDDO 201 ENDDO 192 DO_3D_11_11( 1, jpkm1 ) 193 zztmp = area(ji,jj) * e3t(ji,jj,jk,Kmm) 194 ztsn(ji,jj,1,jp_tem) = ztsn(ji,jj,1,jp_tem) + zztmp * ts(ji,jj,jk,jp_tem,Kmm) 195 ztsn(ji,jj,1,jp_sal) = ztsn(ji,jj,1,jp_sal) + zztmp * ts(ji,jj,jk,jp_sal,Kmm) 196 END_3D 202 197 203 198 IF( ln_linssh ) THEN … … 206 201 DO jj = 1, jpj 207 202 iks = mikt(ji,jj) 208 ztsn(ji,jj,1,jp_tem) = ztsn(ji,jj,1,jp_tem) + zarea_ssh(ji,jj) * ts n(ji,jj,iks,jp_tem)209 ztsn(ji,jj,1,jp_sal) = ztsn(ji,jj,1,jp_sal) + zarea_ssh(ji,jj) * ts n(ji,jj,iks,jp_sal)203 ztsn(ji,jj,1,jp_tem) = ztsn(ji,jj,1,jp_tem) + zarea_ssh(ji,jj) * ts(ji,jj,iks,jp_tem,Kmm) 204 ztsn(ji,jj,1,jp_sal) = ztsn(ji,jj,1,jp_sal) + zarea_ssh(ji,jj) * ts(ji,jj,iks,jp_sal,Kmm) 210 205 END DO 211 206 END DO 212 207 ELSE 213 ztsn(:,:,1,jp_tem) = ztsn(:,:,1,jp_tem) + zarea_ssh(:,:) * ts n(:,:,1,jp_tem)214 ztsn(:,:,1,jp_sal) = ztsn(:,:,1,jp_sal) + zarea_ssh(:,:) * ts n(:,:,1,jp_sal)208 ztsn(:,:,1,jp_tem) = ztsn(:,:,1,jp_tem) + zarea_ssh(:,:) * ts(:,:,1,jp_tem,Kmm) 209 ztsn(:,:,1,jp_sal) = ztsn(:,:,1,jp_sal) + zarea_ssh(:,:) * ts(:,:,1,jp_sal,Kmm) 215 210 END IF 216 211 ENDIF … … 233 228 ztpot(:,:,jpk) = 0._wp 234 229 DO jk = 1, jpkm1 235 ztpot(:,:,jk) = eos_pt_from_ct( ts n(:,:,jk,jp_tem), tsn(:,:,jk,jp_sal) )230 ztpot(:,:,jk) = eos_pt_from_ct( ts(:,:,jk,jp_tem,Kmm), ts(:,:,jk,jp_sal,Kmm) ) 236 231 END DO 237 232 ! … … 242 237 z2d(:,:) = 0._wp 243 238 DO jk = 1, jpkm1 244 z2d(:,:) = z2d(:,:) + area(:,:) * e3t _n(:,:,jk) * ztpot(:,:,jk)239 z2d(:,:) = z2d(:,:) + area(:,:) * e3t(:,:,jk,Kmm) * ztpot(:,:,jk) 245 240 END DO 246 241 ztemp = glob_sum( 'diaar5', z2d(:,:) ) … … 255 250 IF( iom_use( 'tosmint_pot') ) THEN 256 251 z2d(:,:) = 0._wp 257 DO jk = 1, jpkm1 258 DO jj = 1, jpj 259 DO ji = 1, jpi ! vector opt. 260 z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t_n(ji,jj,jk) * ztpot(ji,jj,jk) 261 END DO 262 END DO 263 END DO 252 DO_3D_11_11( 1, jpkm1 ) 253 z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t(ji,jj,jk,Kmm) * ztpot(ji,jj,jk) 254 END_3D 264 255 CALL iom_put( 'tosmint_pot', z2d ) 265 256 ENDIF … … 268 259 ELSE 269 260 IF( iom_use('ssttot') ) THEN ! Output sst in case we use EOS-80 270 zsst = glob_sum( 'diaar5', area(:,:) * ts n(:,:,1,jp_tem) )261 zsst = glob_sum( 'diaar5', area(:,:) * ts(:,:,1,jp_tem,Kmm) ) 271 262 CALL iom_put('ssttot', zsst / area_tot ) 272 263 ENDIF … … 280 271 zpe(:,:) = 0._wp 281 272 IF( ln_zdfddm ) THEN 282 DO jk = 2, jpk 283 DO jj = 1, jpj 284 DO ji = 1, jpi 285 IF( rn2(ji,jj,jk) > 0._wp ) THEN 286 zrw = ( gdept_n(ji,jj,jk) - gdepw_n(ji,jj,jk) ) / e3w_n(ji,jj,jk) 287 ! 288 zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 289 zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 290 ! 291 zpe(ji, jj) = zpe(ji,jj) & 292 & - grav * ( avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) ) & 293 & - avs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) ) 294 ENDIF 295 END DO 296 END DO 297 END DO 273 DO_3D_11_11( 2, jpk ) 274 IF( rn2(ji,jj,jk) > 0._wp ) THEN 275 zrw = ( gdept(ji,jj,jk,Kmm) - gdepw(ji,jj,jk,Kmm) ) / e3w(ji,jj,jk,Kmm) 276 ! 277 zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 278 zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 279 ! 280 zpe(ji, jj) = zpe(ji,jj) & 281 & - grav * ( avt(ji,jj,jk) * zaw * (ts(ji,jj,jk-1,jp_tem,Kmm) - ts(ji,jj,jk,jp_tem,Kmm) ) & 282 & - avs(ji,jj,jk) * zbw * (ts(ji,jj,jk-1,jp_sal,Kmm) - ts(ji,jj,jk,jp_sal,Kmm) ) ) 283 ENDIF 284 END_3D 298 285 ELSE 299 DO jk = 1, jpk 300 DO ji = 1, jpi 301 DO jj = 1, jpj 302 zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * rau0 * e3w_n(ji,jj,jk) 303 END DO 304 END DO 305 END DO 286 DO_3D_11_11( 1, jpk ) 287 zpe(ji,jj) = zpe(ji,jj) + avt(ji,jj,jk) * MIN(0._wp,rn2(ji,jj,jk)) * rau0 * e3w(ji,jj,jk,Kmm) 288 END_3D 306 289 ENDIF 307 290 CALL iom_put( 'tnpeo', zpe ) … … 320 303 321 304 322 SUBROUTINE dia_ar5_hst( ktra, cptr, pu a, pva)305 SUBROUTINE dia_ar5_hst( ktra, cptr, puflx, pvflx ) 323 306 !!---------------------------------------------------------------------- 324 307 !! *** ROUTINE dia_ar5_htr *** … … 329 312 INTEGER , INTENT(in ) :: ktra ! tracer index 330 313 CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf' 331 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pu a ! 3D input arrayof advection/diffusion332 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pv a ! 3D input arrayof advection/diffusion314 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: puflx ! u-flux of advection/diffusion 315 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pvflx ! v-flux of advection/diffusion 333 316 ! 334 317 INTEGER :: ji, jj, jk … … 336 319 337 320 338 z2d(:,:) = pua(:,:,1) 339 DO jk = 1, jpkm1 340 DO jj = 2, jpjm1 341 DO ji = fs_2, fs_jpim1 ! vector opt. 342 z2d(ji,jj) = z2d(ji,jj) + pua(ji,jj,jk) 343 END DO 344 END DO 345 END DO 321 z2d(:,:) = puflx(:,:,1) 322 DO_3D_00_00( 1, jpkm1 ) 323 z2d(ji,jj) = z2d(ji,jj) + puflx(ji,jj,jk) 324 END_3D 346 325 CALL lbc_lnk( 'diaar5', z2d, 'U', -1. ) 347 326 IF( cptr == 'adv' ) THEN … … 354 333 ENDIF 355 334 ! 356 z2d(:,:) = pva(:,:,1) 357 DO jk = 1, jpkm1 358 DO jj = 2, jpjm1 359 DO ji = fs_2, fs_jpim1 ! vector opt. 360 z2d(ji,jj) = z2d(ji,jj) + pva(ji,jj,jk) 361 END DO 362 END DO 363 END DO 335 z2d(:,:) = pvflx(:,:,1) 336 DO_3D_00_00( 1, jpkm1 ) 337 z2d(ji,jj) = z2d(ji,jj) + pvflx(ji,jj,jk) 338 END_3D 364 339 CALL lbc_lnk( 'diaar5', z2d, 'V', -1. ) 365 340 IF( cptr == 'adv' ) THEN … … 406 381 zvol0 (:,:) = 0._wp 407 382 thick0(:,:) = 0._wp 408 DO jk = 1, jpkm1 409 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 410 DO ji = 1, jpi 411 idep = tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 412 zvol0 (ji,jj) = zvol0 (ji,jj) + idep * area(ji,jj) 413 thick0(ji,jj) = thick0(ji,jj) + idep 414 END DO 415 END DO 416 END DO 383 DO_3D_11_11( 1, jpkm1 ) 384 idep = tmask(ji,jj,jk) * e3t_0(ji,jj,jk) 385 zvol0 (ji,jj) = zvol0 (ji,jj) + idep * area(ji,jj) 386 thick0(ji,jj) = thick0(ji,jj) + idep 387 END_3D 417 388 vol0 = glob_sum( 'diaar5', zvol0 ) 418 389 DEALLOCATE( zvol0 ) … … 428 399 sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 429 400 IF( ln_zps ) THEN ! z-coord. partial steps 430 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 431 DO ji = 1, jpi 432 ik = mbkt(ji,jj) 433 IF( ik > 1 ) THEN 434 zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 435 sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 436 ENDIF 437 END DO 438 END DO 401 DO_2D_11_11 402 ik = mbkt(ji,jj) 403 IF( ik > 1 ) THEN 404 zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 405 sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 406 ENDIF 407 END_2D 439 408 ENDIF 440 409 ! -
NEMO/trunk/src/OCE/DIA/diacfl.F90
r11532 r12377 33 33 34 34 !! * Substitutions 35 # include " vectopt_loop_substitute.h90"35 # include "do_loop_substitute.h90" 36 36 !!---------------------------------------------------------------------- 37 37 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 41 41 CONTAINS 42 42 43 SUBROUTINE dia_cfl ( kt )43 SUBROUTINE dia_cfl ( kt, Kmm ) 44 44 !!---------------------------------------------------------------------- 45 45 !! *** ROUTINE dia_cfl *** … … 49 49 !!---------------------------------------------------------------------- 50 50 INTEGER, INTENT(in) :: kt ! ocean time-step index 51 INTEGER, INTENT(in) :: Kmm ! ocean time level index 51 52 ! 52 53 INTEGER :: ji, jj, jk ! dummy loop indices … … 64 65 ! 65 66 ! 66 DO jk = 1, jpk ! calculate Courant numbers 67 DO jj = 1, jpj 68 DO ji = 1, jpi 69 zCu_cfl(ji,jj,jk) = ABS( un(ji,jj,jk) ) * z2dt / e1u (ji,jj) ! for i-direction 70 zCv_cfl(ji,jj,jk) = ABS( vn(ji,jj,jk) ) * z2dt / e2v (ji,jj) ! for j-direction 71 zCw_cfl(ji,jj,jk) = ABS( wn(ji,jj,jk) ) * z2dt / e3w_n(ji,jj,jk) ! for k-direction 72 END DO 73 END DO 74 END DO 67 DO_3D_11_11( 1, jpk ) 68 zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * z2dt / e1u (ji,jj) ! for i-direction 69 zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * z2dt / e2v (ji,jj) ! for j-direction 70 zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * z2dt / e3w(ji,jj,jk,Kmm) ! for k-direction 71 END_3D 75 72 ! 76 73 ! write outputs -
NEMO/trunk/src/OCE/DIA/diadct.F90
r11536 r12377 123 123 !!--------------------------------------------------------------------- 124 124 125 REWIND( numnam_ref ) ! Namelist nam_diadct in reference namelist : Diagnostic: transport through sections126 125 READ ( numnam_ref, nam_diadct, IOSTAT = ios, ERR = 901) 127 126 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_diadct in reference namelist' ) 128 127 129 REWIND( numnam_cfg ) ! Namelist nam_diadct in configuration namelist : Diagnostic: transport through sections130 128 READ ( numnam_cfg, nam_diadct, IOSTAT = ios, ERR = 902 ) 131 129 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nam_diadct in configuration namelist' ) … … 175 173 176 174 177 SUBROUTINE dia_dct( kt )175 SUBROUTINE dia_dct( kt, Kmm ) 178 176 !!--------------------------------------------------------------------- 179 177 !! *** ROUTINE diadct *** … … 192 190 !! Reinitialise all relevant arrays to zero 193 191 !!--------------------------------------------------------------------- 194 INTEGER, INTENT(in) :: kt 192 INTEGER, INTENT(in) :: kt ! ocean time step 193 INTEGER, INTENT(in) :: Kmm ! time level index 195 194 ! 196 195 INTEGER :: jsec ! loop on sections … … 232 231 233 232 !Compute transport through section 234 CALL transport( secs(jsec),lldebug,jsec)233 CALL transport(Kmm,secs(jsec),lldebug,jsec) 235 234 236 235 ENDDO … … 246 245 ! Sum over each class 247 246 DO jsec=1,nb_sec 248 CALL dia_dct_sum( secs(jsec),jsec)247 CALL dia_dct_sum(Kmm,secs(jsec),jsec) 249 248 ENDDO 250 249 … … 558 557 559 558 560 SUBROUTINE transport( sec,ld_debug,jsec)559 SUBROUTINE transport(Kmm,sec,ld_debug,jsec) 561 560 !!------------------------------------------------------------------------------------------- 562 561 !! *** ROUTINE transport *** … … 578 577 !! 579 578 !!------------------------------------------------------------------------------------------- 579 INTEGER ,INTENT(IN) :: Kmm ! time level index 580 580 TYPE(SECTION),INTENT(INOUT) :: sec 581 581 LOGICAL ,INTENT(IN) :: ld_debug … … 673 673 SELECT CASE( sec%direction(jseg) ) 674 674 CASE(0,1) 675 ztn = interp( k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) )676 zsn = interp( k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) )677 zrhop = interp( k%I,k%J,jk,'V',rhop)678 zrhoi = interp( k%I,k%J,jk,'V',rhd*rau0+rau0)679 zsshn = 0.5*( ssh n(k%I,k%J) + sshn(k%I,k%J+1) ) * vmask(k%I,k%J,1)675 ztn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_tem,Kmm) ) 676 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 677 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 678 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0) 679 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm) ) * vmask(k%I,k%J,1) 680 680 CASE(2,3) 681 ztn = interp( k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) )682 zsn = interp( k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) )683 zrhop = interp( k%I,k%J,jk,'U',rhop)684 zrhoi = interp( k%I,k%J,jk,'U',rhd*rau0+rau0)685 zsshn = 0.5*( ssh n(k%I,k%J) + sshn(k%I+1,k%J) ) * umask(k%I,k%J,1)681 ztn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_tem,Kmm) ) 682 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 683 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 684 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0) 685 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 686 686 END SELECT 687 687 ! 688 zdep= gdept _n(k%I,k%J,jk)688 zdep= gdept(k%I,k%J,jk,Kmm) 689 689 690 690 SELECT CASE( sec%direction(jseg) ) !compute velocity with the correct direction 691 691 CASE(0,1) 692 692 zumid=0._wp 693 zvmid=isgnv*v n(k%I,k%J,jk)*vmask(k%I,k%J,jk)693 zvmid=isgnv*vv(k%I,k%J,jk,Kmm)*vmask(k%I,k%J,jk) 694 694 CASE(2,3) 695 zumid=isgnu*u n(k%I,k%J,jk)*umask(k%I,k%J,jk)695 zumid=isgnu*uu(k%I,k%J,jk,Kmm)*umask(k%I,k%J,jk) 696 696 zvmid=0._wp 697 697 END SELECT … … 699 699 !zTnorm=transport through one cell; 700 700 !velocity* cell's length * cell's thickness 701 zTnorm = zumid*e2u(k%I,k%J) * e3u _n(k%I,k%J,jk) &702 & + zvmid*e1v(k%I,k%J) * e3v _n(k%I,k%J,jk)701 zTnorm = zumid*e2u(k%I,k%J) * e3u(k%I,k%J,jk,Kmm) & 702 & + zvmid*e1v(k%I,k%J) * e3v(k%I,k%J,jk,Kmm) 703 703 704 704 !!gm THIS is WRONG no transport due to ssh in linear free surface case !!!!! … … 765 765 766 766 767 SUBROUTINE dia_dct_sum( sec,jsec)767 SUBROUTINE dia_dct_sum(Kmm,sec,jsec) 768 768 !!------------------------------------------------------------- 769 769 !! Purpose: Average the transport over nn_dctwri time steps … … 784 784 !! 785 785 !!------------------------------------------------------------- 786 INTEGER ,INTENT(IN) :: Kmm ! time level index 786 787 TYPE(SECTION),INTENT(INOUT) :: sec 787 788 INTEGER ,INTENT(IN) :: jsec ! numeric identifier of section … … 845 846 SELECT CASE( sec%direction(jseg) ) 846 847 CASE(0,1) 847 ztn = interp( k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) )848 zsn = interp( k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) )849 zrhop = interp( k%I,k%J,jk,'V',rhop)850 zrhoi = interp( k%I,k%J,jk,'V',rhd*rau0+rau0)848 ztn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_tem,Kmm) ) 849 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 850 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 851 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0) 851 852 852 853 CASE(2,3) 853 ztn = interp( k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) )854 zsn = interp( k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) )855 zrhop = interp( k%I,k%J,jk,'U',rhop)856 zrhoi = interp( k%I,k%J,jk,'U',rhd*rau0+rau0)857 zsshn = 0.5*( ssh n(k%I,k%J) + sshn(k%I+1,k%J) ) * umask(k%I,k%J,1)854 ztn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_tem,Kmm) ) 855 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 856 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 857 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0) 858 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 858 859 END SELECT 859 860 860 zdep= gdept _n(k%I,k%J,jk)861 zdep= gdept(k%I,k%J,jk,Kmm) 861 862 862 863 !------------------------------- … … 1101 1102 1102 1103 1103 FUNCTION interp( ki, kj, kk, cd_point, ptab)1104 FUNCTION interp(Kmm, ki, kj, kk, cd_point, ptab) 1104 1105 !!---------------------------------------------------------------------- 1105 1106 !! … … 1162 1163 !!---------------------------------------------------------------------- 1163 1164 !*arguments 1165 INTEGER, INTENT(IN) :: Kmm ! time level index 1164 1166 INTEGER, INTENT(IN) :: ki, kj, kk ! coordinate of point 1165 1167 CHARACTER(len=1), INTENT(IN) :: cd_point ! type of point (U, V) … … 1196 1198 IF( ln_sco )THEN ! s-coordinate case 1197 1199 1198 zdepu = ( gdept _n(ii1,ij1,kk) + gdept_n(ii2,ij2,kk) ) * 0.5_wp1199 zdep1 = gdept _n(ii1,ij1,kk) - zdepu1200 zdep2 = gdept _n(ii2,ij2,kk) - zdepu1200 zdepu = ( gdept(ii1,ij1,kk,Kmm) + gdept(ii2,ij2,kk,Kmm) ) * 0.5_wp 1201 zdep1 = gdept(ii1,ij1,kk,Kmm) - zdepu 1202 zdep2 = gdept(ii2,ij2,kk,Kmm) - zdepu 1201 1203 1202 1204 ! weights … … 1210 1212 ELSE ! full step or partial step case 1211 1213 1212 ze3t = e3t _n(ii2,ij2,kk) - e3t_n(ii1,ij1,kk)1213 zwgt1 = ( e3w _n(ii2,ij2,kk) - e3w_n(ii1,ij1,kk) ) / e3w_n(ii2,ij2,kk)1214 zwgt2 = ( e3w _n(ii1,ij1,kk) - e3w_n(ii2,ij2,kk) ) / e3w_n(ii1,ij1,kk)1214 ze3t = e3t(ii2,ij2,kk,Kmm) - e3t(ii1,ij1,kk,Kmm) 1215 zwgt1 = ( e3w(ii2,ij2,kk,Kmm) - e3w(ii1,ij1,kk,Kmm) ) / e3w(ii2,ij2,kk,Kmm) 1216 zwgt2 = ( e3w(ii1,ij1,kk,Kmm) - e3w(ii2,ij2,kk,Kmm) ) / e3w(ii1,ij1,kk,Kmm) 1215 1217 1216 1218 IF(kk .NE. 1)THEN … … 1245 1247 IMPLICIT NONE 1246 1248 END SUBROUTINE dia_dct_init 1247 SUBROUTINE dia_dct( kt ) 1249 1250 SUBROUTINE dia_dct( kt, Kmm ) ! Dummy routine 1248 1251 IMPLICIT NONE 1249 INTEGER, INTENT(in) :: kt 1252 INTEGER, INTENT( in ) :: kt ! ocean time-step index 1253 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 1254 WRITE(*,*) 'dia_dct: You should not have seen this print! error?', kt 1250 1255 END SUBROUTINE dia_dct 1251 1256 ! -
NEMO/trunk/src/OCE/DIA/diahsb.F90
r11536 r12377 17 17 USE phycst ! physical constants 18 18 USE sbc_oce ! surface thermohaline fluxes 19 USE isf_oce ! ice shelf fluxes 19 20 USE sbcrnf ! river runoff 20 USE sbcisf ! ice shelves21 21 USE domvvl ! vertical scale factors 22 22 USE traqsr ! penetrative solar radiation … … 48 48 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini ! 49 49 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini, sc_loc_ini, e3t_ini ! 50 51 !! * Substitutions 52 # include "vectopt_loop_substitute.h90" 50 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tmask_ini 51 53 52 !!---------------------------------------------------------------------- 54 53 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 58 57 CONTAINS 59 58 60 SUBROUTINE dia_hsb( kt )59 SUBROUTINE dia_hsb( kt, Kbb, Kmm ) 61 60 !!--------------------------------------------------------------------------- 62 61 !! *** ROUTINE dia_hsb *** … … 69 68 !! 70 69 !!--------------------------------------------------------------------------- 71 INTEGER, INTENT(in) :: kt ! ocean time-step index 70 INTEGER, INTENT(in) :: kt ! ocean time-step index 71 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices 72 72 ! 73 73 INTEGER :: ji, jj, jk ! dummy loop indice … … 86 86 IF( ln_timing ) CALL timing_start('dia_hsb') 87 87 ! 88 ts n(:,:,:,1) = tsn(:,:,:,1) * tmask(:,:,:) ; tsb(:,:,:,1) = tsb(:,:,:,1) * tmask(:,:,:) ;89 ts n(:,:,:,2) = tsn(:,:,:,2) * tmask(:,:,:) ; tsb(:,:,:,2) = tsb(:,:,:,2) * tmask(:,:,:) ;88 ts(:,:,:,1,Kmm) = ts(:,:,:,1,Kmm) * tmask(:,:,:) ; ts(:,:,:,1,Kbb) = ts(:,:,:,1,Kbb) * tmask(:,:,:) ; 89 ts(:,:,:,2,Kmm) = ts(:,:,:,2,Kmm) * tmask(:,:,:) ; ts(:,:,:,2,Kbb) = ts(:,:,:,2,Kbb) * tmask(:,:,:) ; 90 90 ! ------------------------- ! 91 91 ! 1 - Trends due to forcing ! 92 92 ! ------------------------- ! 93 z_frc_trd_v = r1_rau0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf (:,:) ) * surf(:,:) ) ! volume fluxes93 z_frc_trd_v = r1_rau0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) ) ! volume fluxes 94 94 z_frc_trd_t = glob_sum( 'diahsb', sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 95 95 z_frc_trd_s = glob_sum( 'diahsb', sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes … … 98 98 IF( ln_rnf_sal) z_frc_trd_s = z_frc_trd_s + glob_sum( 'diahsb', rnf_tsc(:,:,jp_sal) * surf(:,:) ) 99 99 ! ! Add ice shelf heat & salt input 100 IF( ln_isf ) z_frc_trd_t = z_frc_trd_t + glob_sum( 'diahsb', risf_tsc(:,:,jp_tem) * surf(:,:) ) 100 IF( ln_isf ) z_frc_trd_t = z_frc_trd_t & 101 & + glob_sum( 'diahsb', ( risf_cav_tsc(:,:,jp_tem) + risf_par_tsc(:,:,jp_tem) ) * surf(:,:) ) 101 102 ! ! Add penetrative solar radiation 102 103 IF( ln_traqsr ) z_frc_trd_t = z_frc_trd_t + r1_rau0_rcp * glob_sum( 'diahsb', qsr (:,:) * surf(:,:) ) … … 108 109 DO ji=1,jpi 109 110 DO jj=1,jpj 110 z2d0(ji,jj) = surf(ji,jj) * w n(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_tem)111 z2d1(ji,jj) = surf(ji,jj) * w n(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_sal)111 z2d0(ji,jj) = surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_tem,Kbb) 112 z2d1(ji,jj) = surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_sal,Kbb) 112 113 END DO 113 114 END DO 114 115 ELSE 115 z2d0(:,:) = surf(:,:) * w n(:,:,1) * tsb(:,:,1,jp_tem)116 z2d1(:,:) = surf(:,:) * w n(:,:,1) * tsb(:,:,1,jp_sal)116 z2d0(:,:) = surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_tem,Kbb) 117 z2d1(:,:) = surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_sal,Kbb) 117 118 END IF 118 119 z_wn_trd_t = - glob_sum( 'diahsb', z2d0 ) … … 135 136 136 137 ! ! volume variation (calculated with ssh) 137 zdiff_v1 = glob_sum_full( 'diahsb', surf(:,:)*ssh n(:,:) - surf_ini(:,:)*ssh_ini(:,:) )138 zdiff_v1 = glob_sum_full( 'diahsb', surf(:,:)*ssh(:,:,Kmm) - surf_ini(:,:)*ssh_ini(:,:) ) 138 139 139 140 ! ! heat & salt content variation (associated with ssh) … … 142 143 DO ji = 1, jpi 143 144 DO jj = 1, jpj 144 z2d0(ji,jj) = surf(ji,jj) * ( ts n(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) - ssh_hc_loc_ini(ji,jj) )145 z2d1(ji,jj) = surf(ji,jj) * ( ts n(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) - ssh_sc_loc_ini(ji,jj) )145 z2d0(ji,jj) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_tem,Kmm) * ssh(ji,jj,Kmm) - ssh_hc_loc_ini(ji,jj) ) 146 z2d1(ji,jj) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_sal,Kmm) * ssh(ji,jj,Kmm) - ssh_sc_loc_ini(ji,jj) ) 146 147 END DO 147 148 END DO 148 149 ELSE ! no under ice-shelf seas 149 z2d0(:,:) = surf(:,:) * ( ts n(:,:,1,jp_tem) * sshn(:,:) - ssh_hc_loc_ini(:,:) )150 z2d1(:,:) = surf(:,:) * ( ts n(:,:,1,jp_sal) * sshn(:,:) - ssh_sc_loc_ini(:,:) )150 z2d0(:,:) = surf(:,:) * ( ts(:,:,1,jp_tem,Kmm) * ssh(:,:,Kmm) - ssh_hc_loc_ini(:,:) ) 151 z2d1(:,:) = surf(:,:) * ( ts(:,:,1,jp_sal,Kmm) * ssh(:,:,Kmm) - ssh_sc_loc_ini(:,:) ) 151 152 END IF 152 153 z_ssh_hc = glob_sum_full( 'diahsb', z2d0 ) … … 155 156 ! 156 157 DO jk = 1, jpkm1 ! volume variation (calculated with scale factors) 157 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk) - surf_ini(:,:)*e3t_ini(:,:,jk) ) * tmask(:,:,jk)158 zwrk(:,:,jk) = surf(:,:)*e3t(:,:,jk,Kmm)*tmask(:,:,jk) - surf_ini(:,:)*e3t_ini(:,:,jk)*tmask_ini(:,:,jk) 158 159 END DO 159 zdiff_v2 = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 160 zdiff_v2 = glob_sum_full( 'diahsb', zwrk(:,:,:) ) ! glob_sum_full needed as tmask and tmask_ini could be different 160 161 DO jk = 1, jpkm1 ! heat content variation 161 zwrk(:,:,jk) = ( surf(:,:)*e3t _n(:,:,jk)*tsn(:,:,jk,jp_tem) - surf_ini(:,:)*hc_loc_ini(:,:,jk) ) * tmask(:,:,jk)162 zwrk(:,:,jk) = ( surf(:,:)*e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_tem,Kmm) - surf_ini(:,:)*hc_loc_ini(:,:,jk) ) 162 163 END DO 163 164 zdiff_hc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 164 165 DO jk = 1, jpkm1 ! salt content variation 165 zwrk(:,:,jk) = ( surf(:,:)*e3t _n(:,:,jk)*tsn(:,:,jk,jp_sal) - surf_ini(:,:)*sc_loc_ini(:,:,jk) ) * tmask(:,:,jk)166 zwrk(:,:,jk) = ( surf(:,:)*e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_sal,Kmm) - surf_ini(:,:)*sc_loc_ini(:,:,jk) ) 166 167 END DO 167 168 zdiff_sc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) … … 185 186 ! ----------------------- ! 186 187 DO jk = 1, jpkm1 ! total ocean volume (calculated with scale factors) 187 zwrk(:,:,jk) = surf(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk)188 zwrk(:,:,jk) = surf(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 188 189 END DO 189 zvol_tot = glob_sum _full( 'diahsb', zwrk(:,:,:) )190 zvol_tot = glob_sum( 'diahsb', zwrk(:,:,:) ) 190 191 191 192 !!gm to be added ? 192 193 ! IF( ln_linssh ) THEN ! fixed volume, add the ssh contribution 193 ! zvol_tot = zvol_tot + glob_sum( 'diahsb', surf(:,:) * ssh n(:,:) )194 ! zvol_tot = zvol_tot + glob_sum( 'diahsb', surf(:,:) * ssh(:,:,Kmm) ) 194 195 ! ENDIF 195 196 !!gm end … … 233 234 ENDIF 234 235 ! 235 IF( lrst_oce ) CALL dia_hsb_rst( kt, 'WRITE' )236 IF( lrst_oce ) CALL dia_hsb_rst( kt, Kmm, 'WRITE' ) 236 237 ! 237 238 IF( ln_timing ) CALL timing_stop('dia_hsb') … … 240 241 241 242 242 SUBROUTINE dia_hsb_rst( kt, cdrw )243 SUBROUTINE dia_hsb_rst( kt, Kmm, cdrw ) 243 244 !!--------------------------------------------------------------------- 244 245 !! *** ROUTINE dia_hsb_rst *** … … 249 250 !!---------------------------------------------------------------------- 250 251 INTEGER , INTENT(in) :: kt ! ocean time-step 252 INTEGER , INTENT(in) :: Kmm ! ocean time level index 251 253 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 252 254 ! … … 270 272 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini' , ssh_ini , ldxios = lrxios ) 271 273 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini' , e3t_ini , ldxios = lrxios ) 274 CALL iom_get( numror, jpdom_autoglo, 'tmask_ini' , tmask_ini , ldxios = lrxios ) 272 275 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini, ldxios = lrxios ) 273 276 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini, ldxios = lrxios ) … … 281 284 IF(lwp) WRITE(numout,*) 282 285 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface 283 ssh_ini(:,:) = ssh n(:,:) ! initial ssh286 ssh_ini(:,:) = ssh(:,:,Kmm) ! initial ssh 284 287 DO jk = 1, jpk 285 288 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 286 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors 287 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content 288 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content 289 e3t_ini (:,:,jk) = e3t(:,:,jk,Kmm) * tmask(:,:,jk) ! initial vertical scale factors 290 tmask_ini (:,:,jk) = tmask(:,:,jk) ! initial mask 291 hc_loc_ini(:,:,jk) = ts(:,:,jk,jp_tem,Kmm) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) ! initial heat content 292 sc_loc_ini(:,:,jk) = ts(:,:,jk,jp_sal,Kmm) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) ! initial salt content 289 293 END DO 290 294 frc_v = 0._wp ! volume trend due to forcing … … 295 299 DO ji = 1, jpi 296 300 DO jj = 1, jpj 297 ssh_hc_loc_ini(ji,jj) = ts n(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh298 ssh_sc_loc_ini(ji,jj) = ts n(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh301 ssh_hc_loc_ini(ji,jj) = ts(ji,jj,mikt(ji,jj),jp_tem,Kmm) * ssh(ji,jj,Kmm) ! initial heat content in ssh 302 ssh_sc_loc_ini(ji,jj) = ts(ji,jj,mikt(ji,jj),jp_sal,Kmm) * ssh(ji,jj,Kmm) ! initial salt content in ssh 299 303 END DO 300 304 END DO 301 305 ELSE 302 ssh_hc_loc_ini(:,:) = ts n(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh303 ssh_sc_loc_ini(:,:) = ts n(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh306 ssh_hc_loc_ini(:,:) = ts(:,:,1,jp_tem,Kmm) * ssh(:,:,Kmm) ! initial heat content in ssh 307 ssh_sc_loc_ini(:,:) = ts(:,:,1,jp_sal,Kmm) * ssh(:,:,Kmm) ! initial salt content in ssh 304 308 END IF 305 309 frc_wn_t = 0._wp ! initial heat content misfit due to free surface … … 325 329 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini' , ssh_ini , ldxios = lwxios ) 326 330 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini' , e3t_ini , ldxios = lwxios ) 331 CALL iom_rstput( kt, nitrst, numrow, 'tmask_ini' , tmask_ini , ldxios = lwxios ) 327 332 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini, ldxios = lwxios ) 328 333 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini, ldxios = lwxios ) … … 338 343 339 344 340 SUBROUTINE dia_hsb_init 345 SUBROUTINE dia_hsb_init( Kmm ) 341 346 !!--------------------------------------------------------------------------- 342 347 !! *** ROUTINE dia_hsb *** … … 350 355 !! - Compute coefficients for conversion 351 356 !!--------------------------------------------------------------------------- 357 INTEGER, INTENT(in) :: Kmm ! time level index 358 ! 352 359 INTEGER :: ierror, ios ! local integer 353 360 !! … … 360 367 WRITE(numout,*) '~~~~~~~~~~~~ ' 361 368 ENDIF 362 REWIND( numnam_ref ) ! Namelist namhsb in reference namelist363 369 READ ( numnam_ref, namhsb, IOSTAT = ios, ERR = 901) 364 370 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namhsb in reference namelist' ) 365 REWIND( numnam_cfg ) ! Namelist namhsb in configuration namelist366 371 READ ( numnam_cfg, namhsb, IOSTAT = ios, ERR = 902 ) 367 372 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namhsb in configuration namelist' ) … … 396 401 ! ------------------- ! 397 402 ALLOCATE( hc_loc_ini(jpi,jpj,jpk), sc_loc_ini(jpi,jpj,jpk), surf_ini(jpi,jpj), & 398 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror )403 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), tmask_ini(jpi,jpj,jpk),STAT=ierror ) 399 404 IF( ierror > 0 ) THEN 400 405 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN … … 417 422 ! 4 - initial conservation variables ! 418 423 ! ---------------------------------- ! 419 CALL dia_hsb_rst( nit000, 'READ' ) !* read or initialize all required files424 CALL dia_hsb_rst( nit000, Kmm, 'READ' ) !* read or initialize all required files 420 425 ! 421 426 END SUBROUTINE dia_hsb_init -
NEMO/trunk/src/OCE/DIA/diahth.F90
r12276 r12377 40 40 41 41 42 !! * Substitutions 43 # include "do_loop_substitute.h90" 42 44 !!---------------------------------------------------------------------- 43 45 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 61 63 62 64 63 SUBROUTINE dia_hth( kt )65 SUBROUTINE dia_hth( kt, Kmm ) 64 66 !!--------------------------------------------------------------------- 65 67 !! *** ROUTINE dia_hth *** … … 82 84 !!------------------------------------------------------------------- 83 85 INTEGER, INTENT( in ) :: kt ! ocean time-step index 86 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 84 87 !! 85 88 INTEGER :: ji, jj, jk ! dummy loop arguments … … 126 129 zdepinv(:,:) = 0._wp 127 130 zmaxdzT(:,:) = 0._wp 128 DO jj = 1, jpj 129 DO ji = 1, jpi 130 zztmp = gdepw_n(ji,jj,mbkt(ji,jj)+1) 131 hth (ji,jj) = zztmp 132 zabs2 (ji,jj) = zztmp 133 ztm2 (ji,jj) = zztmp 134 zrho10_3(ji,jj) = zztmp 135 zpycn (ji,jj) = zztmp 136 END DO 137 END DO 131 DO_2D_11_11 132 zztmp = gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) 133 hth (ji,jj) = zztmp 134 zabs2 (ji,jj) = zztmp 135 ztm2 (ji,jj) = zztmp 136 zrho10_3(ji,jj) = zztmp 137 zpycn (ji,jj) = zztmp 138 END_2D 138 139 IF( nla10 > 1 ) THEN 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 zztmp = gdepw_n(ji,jj,mbkt(ji,jj)+1) 142 zrho0_3(ji,jj) = zztmp 143 zrho0_1(ji,jj) = zztmp 144 END DO 145 END DO 140 DO_2D_11_11 141 zztmp = gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) 142 zrho0_3(ji,jj) = zztmp 143 zrho0_1(ji,jj) = zztmp 144 END_2D 146 145 ENDIF 147 146 148 147 ! Preliminary computation 149 148 ! computation of zdelr = (dr/dT)(T,S,10m)*(-0.2 degC) 150 DO jj = 1, jpj 151 DO ji = 1, jpi 152 IF( tmask(ji,jj,nla10) == 1. ) THEN 153 zu = 1779.50 + 11.250 * tsn(ji,jj,nla10,jp_tem) - 3.80 * tsn(ji,jj,nla10,jp_sal) & 154 & - 0.0745 * tsn(ji,jj,nla10,jp_tem) * tsn(ji,jj,nla10,jp_tem) & 155 & - 0.0100 * tsn(ji,jj,nla10,jp_tem) * tsn(ji,jj,nla10,jp_sal) 156 zv = 5891.00 + 38.000 * tsn(ji,jj,nla10,jp_tem) + 3.00 * tsn(ji,jj,nla10,jp_sal) & 157 & - 0.3750 * tsn(ji,jj,nla10,jp_tem) * tsn(ji,jj,nla10,jp_tem) 158 zut = 11.25 - 0.149 * tsn(ji,jj,nla10,jp_tem) - 0.01 * tsn(ji,jj,nla10,jp_sal) 159 zvt = 38.00 - 0.750 * tsn(ji,jj,nla10,jp_tem) 160 zw = (zu + 0.698*zv) * (zu + 0.698*zv) 161 zdelr(ji,jj) = ztem2 * (1000.*(zut*zv - zvt*zu)/zw) 162 ELSE 163 zdelr(ji,jj) = 0._wp 164 ENDIF 165 END DO 166 END DO 149 DO_2D_11_11 150 IF( tmask(ji,jj,nla10) == 1. ) THEN 151 zu = 1779.50 + 11.250 * ts(ji,jj,nla10,jp_tem,Kmm) - 3.80 * ts(ji,jj,nla10,jp_sal,Kmm) & 152 & - 0.0745 * ts(ji,jj,nla10,jp_tem,Kmm) * ts(ji,jj,nla10,jp_tem,Kmm) & 153 & - 0.0100 * ts(ji,jj,nla10,jp_tem,Kmm) * ts(ji,jj,nla10,jp_sal,Kmm) 154 zv = 5891.00 + 38.000 * ts(ji,jj,nla10,jp_tem,Kmm) + 3.00 * ts(ji,jj,nla10,jp_sal,Kmm) & 155 & - 0.3750 * ts(ji,jj,nla10,jp_tem,Kmm) * ts(ji,jj,nla10,jp_tem,Kmm) 156 zut = 11.25 - 0.149 * ts(ji,jj,nla10,jp_tem,Kmm) - 0.01 * ts(ji,jj,nla10,jp_sal,Kmm) 157 zvt = 38.00 - 0.750 * ts(ji,jj,nla10,jp_tem,Kmm) 158 zw = (zu + 0.698*zv) * (zu + 0.698*zv) 159 zdelr(ji,jj) = ztem2 * (1000.*(zut*zv - zvt*zu)/zw) 160 ELSE 161 zdelr(ji,jj) = 0._wp 162 ENDIF 163 END_2D 167 164 168 165 ! ------------------------------------------------------------- ! … … 172 169 ! MLD: rho = rho(1) + zrho1 ! 173 170 ! ------------------------------------------------------------- ! 174 DO jk = jpkm1, 2, -1 ! loop from bottom to 2 175 DO jj = 1, jpj 176 DO ji = 1, jpi 177 ! 178 zzdep = gdepw_n(ji,jj,jk) 179 zztmp = ( tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) ) & 180 & / zzdep * tmask(ji,jj,jk) ! vertical gradient of temperature (dT/dz) 181 zzdep = zzdep * tmask(ji,jj,1) 182 183 IF( zztmp > zmaxdzT(ji,jj) ) THEN 184 zmaxdzT(ji,jj) = zztmp 185 hth (ji,jj) = zzdep ! max and depth of dT/dz 186 ENDIF 187 188 IF( nla10 > 1 ) THEN 189 zztmp = rhop(ji,jj,jk) - rhop(ji,jj,1) ! delta rho(1) 190 IF( zztmp > zrho3 ) zrho0_3(ji,jj) = zzdep ! > 0.03 191 IF( zztmp > zrho1 ) zrho0_1(ji,jj) = zzdep ! > 0.01 192 ENDIF 193 END DO 194 END DO 195 END DO 171 DO_3DS_11_11( jpkm1, 2, -1 ) 172 ! 173 zzdep = gdepw(ji,jj,jk,Kmm) 174 zztmp = ( ts(ji,jj,jk-1,jp_tem,Kmm) - ts(ji,jj,jk,jp_tem,Kmm) ) & 175 & / zzdep * tmask(ji,jj,jk) ! vertical gradient of temperature (dT/dz) 176 zzdep = zzdep * tmask(ji,jj,1) 177 178 IF( zztmp > zmaxdzT(ji,jj) ) THEN 179 zmaxdzT(ji,jj) = zztmp 180 hth (ji,jj) = zzdep ! max and depth of dT/dz 181 ENDIF 182 183 IF( nla10 > 1 ) THEN 184 zztmp = rhop(ji,jj,jk) - rhop(ji,jj,1) ! delta rho(1) 185 IF( zztmp > zrho3 ) zrho0_3(ji,jj) = zzdep ! > 0.03 186 IF( zztmp > zrho1 ) zrho0_1(ji,jj) = zzdep ! > 0.01 187 ENDIF 188 END_3D 196 189 197 190 CALL iom_put( 'mlddzt', hth ) ! depth of the thermocline … … 213 206 ! depth of temperature inversion ! 214 207 ! ------------------------------------------------------------- ! 215 DO jk = jpkm1, nlb10, -1 ! loop from bottom to nlb10 216 DO jj = 1, jpj 217 DO ji = 1, jpi 218 ! 219 zzdep = gdepw_n(ji,jj,jk) * tmask(ji,jj,1) 220 ! 221 zztmp = tsn(ji,jj,nla10,jp_tem) - tsn(ji,jj,jk,jp_tem) ! - delta T(10m) 222 IF( ABS(zztmp) > ztem2 ) zabs2 (ji,jj) = zzdep ! abs > 0.2 223 IF( zztmp > ztem2 ) ztm2 (ji,jj) = zzdep ! > 0.2 224 zztmp = -zztmp ! delta T(10m) 225 IF( zztmp > ztinv(ji,jj) ) THEN ! temperature inversion 226 ztinv(ji,jj) = zztmp 227 zdepinv (ji,jj) = zzdep ! max value and depth 228 ENDIF 229 230 zztmp = rhop(ji,jj,jk) - rhop(ji,jj,nla10) ! delta rho(10m) 231 IF( zztmp > zrho3 ) zrho10_3(ji,jj) = zzdep ! > 0.03 232 IF( zztmp > zdelr(ji,jj) ) zpycn (ji,jj) = zzdep ! > equi. delta T(10m) - 0.2 233 ! 234 END DO 235 END DO 236 END DO 208 DO_3DS_11_11( jpkm1, nlb10, -1 ) 209 ! 210 zzdep = gdepw(ji,jj,jk,Kmm) * tmask(ji,jj,1) 211 ! 212 zztmp = ts(ji,jj,nla10,jp_tem,Kmm) - ts(ji,jj,jk,jp_tem,Kmm) ! - delta T(10m) 213 IF( ABS(zztmp) > ztem2 ) zabs2 (ji,jj) = zzdep ! abs > 0.2 214 IF( zztmp > ztem2 ) ztm2 (ji,jj) = zzdep ! > 0.2 215 zztmp = -zztmp ! delta T(10m) 216 IF( zztmp > ztinv(ji,jj) ) THEN ! temperature inversion 217 ztinv(ji,jj) = zztmp 218 zdepinv (ji,jj) = zzdep ! max value and depth 219 ENDIF 220 221 zztmp = rhop(ji,jj,jk) - rhop(ji,jj,nla10) ! delta rho(10m) 222 IF( zztmp > zrho3 ) zrho10_3(ji,jj) = zzdep ! > 0.03 223 IF( zztmp > zdelr(ji,jj) ) zpycn (ji,jj) = zzdep ! > equi. delta T(10m) - 0.2 224 ! 225 END_3D 237 226 238 227 CALL iom_put( 'mld_dt02', zabs2 ) ! MLD abs(delta t) - 0.2 … … 250 239 IF( iom_use ('20d') ) THEN ! depth of the 20 isotherm 251 240 ztem2 = 20. 252 CALL dia_hth_dep( ztem2, hd20 )241 CALL dia_hth_dep( Kmm, ztem2, hd20 ) 253 242 CALL iom_put( '20d', hd20 ) 254 243 ENDIF … … 256 245 IF( iom_use ('26d') ) THEN ! depth of the 26 isotherm 257 246 ztem2 = 26. 258 CALL dia_hth_dep( ztem2, hd26 )247 CALL dia_hth_dep( Kmm, ztem2, hd26 ) 259 248 CALL iom_put( '26d', hd26 ) 260 249 ENDIF … … 262 251 IF( iom_use ('28d') ) THEN ! depth of the 28 isotherm 263 252 ztem2 = 28. 264 CALL dia_hth_dep( ztem2, hd28 )253 CALL dia_hth_dep( Kmm, ztem2, hd28 ) 265 254 CALL iom_put( '28d', hd28 ) 266 255 ENDIF … … 271 260 IF( iom_use ('hc300') ) THEN 272 261 zzdep = 300. 273 CALL dia_hth_htc( zzdep, tsn(:,:,:,jp_tem), htc3 )262 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 ) 274 263 CALL iom_put( 'hc300', rau0_rcp * htc3 ) ! vertically integrated heat content (J/m2) 275 264 ENDIF … … 280 269 IF( iom_use ('hc700') ) THEN 281 270 zzdep = 700. 282 CALL dia_hth_htc( zzdep, tsn(:,:,:,jp_tem), htc7 )271 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 ) 283 272 CALL iom_put( 'hc700', rau0_rcp * htc7 ) ! vertically integrated heat content (J/m2) 284 273 … … 290 279 IF( iom_use ('hc2000') ) THEN 291 280 zzdep = 2000. 292 CALL dia_hth_htc( zzdep, tsn(:,:,:,jp_tem), htc20 )281 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 ) 293 282 CALL iom_put( 'hc2000', rau0_rcp * htc20 ) ! vertically integrated heat content (J/m2) 294 283 ENDIF … … 301 290 END SUBROUTINE dia_hth 302 291 303 SUBROUTINE dia_hth_dep( ptem, pdept ) 304 ! 292 SUBROUTINE dia_hth_dep( Kmm, ptem, pdept ) 293 ! 294 INTEGER , INTENT(in) :: Kmm ! ocean time level index 305 295 REAL(wp), INTENT(in) :: ptem 306 296 REAL(wp), DIMENSION(jpi,jpj), INTENT(out) :: pdept … … 314 304 ! --------------------------------------- ! 315 305 iktem(:,:) = 1 316 DO jk = 1, jpkm1 ! beware temperature is not always decreasing with depth => loop from top to bottom 317 DO jj = 1, jpj 318 DO ji = 1, jpi 319 zztmp = tsn(ji,jj,jk,jp_tem) 320 IF( zztmp >= ptem ) iktem(ji,jj) = jk 321 END DO 322 END DO 323 END DO 306 DO_3D_11_11( 1, jpkm1 ) 307 zztmp = ts(ji,jj,jk,jp_tem,Kmm) 308 IF( zztmp >= ptem ) iktem(ji,jj) = jk 309 END_3D 324 310 325 311 ! ------------------------------- ! 326 312 ! Depth of ptem isotherm ! 327 313 ! ------------------------------- ! 328 DO jj = 1, jpj 329 DO ji = 1, jpi 330 ! 331 zzdep = gdepw_n(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean bottom 332 ! 333 iid = iktem(ji,jj) 334 IF( iid /= 1 ) THEN 335 zztmp = gdept_n(ji,jj,iid ) & ! linear interpolation 336 & + ( gdept_n(ji,jj,iid+1) - gdept_n(ji,jj,iid) ) & 337 & * ( 20.*tmask(ji,jj,iid+1) - tsn(ji,jj,iid,jp_tem) ) & 338 & / ( tsn(ji,jj,iid+1,jp_tem) - tsn(ji,jj,iid,jp_tem) + (1.-tmask(ji,jj,1)) ) 339 pdept(ji,jj) = MIN( zztmp , zzdep) * tmask(ji,jj,1) ! bound by the ocean depth 340 ELSE 341 pdept(ji,jj) = 0._wp 342 ENDIF 343 END DO 344 END DO 314 DO_2D_11_11 315 ! 316 zzdep = gdepw(ji,jj,mbkt(ji,jj)+1,Kmm) ! depth of the ocean bottom 317 ! 318 iid = iktem(ji,jj) 319 IF( iid /= 1 ) THEN 320 zztmp = gdept(ji,jj,iid ,Kmm) & ! linear interpolation 321 & + ( gdept(ji,jj,iid+1,Kmm) - gdept(ji,jj,iid,Kmm) ) & 322 & * ( 20.*tmask(ji,jj,iid+1) - ts(ji,jj,iid,jp_tem,Kmm) ) & 323 & / ( ts(ji,jj,iid+1,jp_tem,Kmm) - ts(ji,jj,iid,jp_tem,Kmm) + (1.-tmask(ji,jj,1)) ) 324 pdept(ji,jj) = MIN( zztmp , zzdep) * tmask(ji,jj,1) ! bound by the ocean depth 325 ELSE 326 pdept(ji,jj) = 0._wp 327 ENDIF 328 END_2D 345 329 ! 346 330 END SUBROUTINE dia_hth_dep 347 331 348 332 349 SUBROUTINE dia_hth_htc( pdep, ptn, phtc ) 350 ! 333 SUBROUTINE dia_hth_htc( Kmm, pdep, pt, phtc ) 334 ! 335 INTEGER , INTENT(in) :: Kmm ! ocean time level index 351 336 REAL(wp), INTENT(in) :: pdep ! depth over the heat content 352 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt n337 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt 353 338 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: phtc 354 339 ! … … 361 346 362 347 IF( .NOT. ln_linssh ) THEN ; zthick(:,:) = 0._wp ; phtc(:,:) = 0._wp 363 ELSE ; zthick(:,:) = ssh n(:,:) ; phtc(:,:) = ptn(:,:,1) * sshn(:,:) * tmask(:,:,1)348 ELSE ; zthick(:,:) = ssh(:,:,Kmm) ; phtc(:,:) = pt(:,:,1) * ssh(:,:,Kmm) * tmask(:,:,1) 364 349 ENDIF 365 350 ! 366 351 ilevel(:,:) = 1 367 DO jk = 2, jpkm1 368 DO jj = 1, jpj 369 DO ji = 1, jpi 370 IF( ( gdept_n(ji,jj,jk) < pdep ) .AND. ( tmask(ji,jj,jk) == 1 ) ) THEN 371 ilevel(ji,jj) = jk 372 zthick(ji,jj) = zthick(ji,jj) + e3t_n(ji,jj,jk) 373 phtc (ji,jj) = phtc (ji,jj) + e3t_n(ji,jj,jk) * ptn(ji,jj,jk) 374 ENDIF 375 ENDDO 376 ENDDO 377 ENDDO 378 ! 379 DO jj = 1, jpj 380 DO ji = 1, jpi 381 ik = ilevel(ji,jj) 382 zthick(ji,jj) = pdep - zthick(ji,jj) ! remaining thickness to reach depht pdep 383 phtc(ji,jj) = phtc(ji,jj) + ptn(ji,jj,ik+1) * MIN( e3t_n(ji,jj,ik+1), zthick(ji,jj) ) & 384 * tmask(ji,jj,ik+1) 385 END DO 386 ENDDO 352 DO_3D_11_11( 2, jpkm1 ) 353 IF( ( gdept(ji,jj,jk,Kmm) < pdep ) .AND. ( tmask(ji,jj,jk) == 1 ) ) THEN 354 ilevel(ji,jj) = jk 355 zthick(ji,jj) = zthick(ji,jj) + e3t(ji,jj,jk,Kmm) 356 phtc (ji,jj) = phtc (ji,jj) + e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk) 357 ENDIF 358 END_3D 359 ! 360 DO_2D_11_11 361 ik = ilevel(ji,jj) 362 zthick(ji,jj) = pdep - zthick(ji,jj) ! remaining thickness to reach depht pdep 363 phtc(ji,jj) = phtc(ji,jj) + pt(ji,jj,ik+1) * MIN( e3t(ji,jj,ik+1,Kmm), zthick(ji,jj) ) & 364 * tmask(ji,jj,ik+1) 365 END_2D 387 366 ! 388 367 ! -
NEMO/trunk/src/OCE/DIA/diaptr.F90
r12276 r12377 46 46 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hstr_ove, hstr_btr, hstr_vtr !: heat Salt TRansports(overturn, baro, merional) 47 47 48 LOGICAL, PUBLIC :: ln_diaptr ! Poleward transport flag (T) or not (F) 49 LOGICAL, PUBLIC :: ln_subbas ! Atlantic/Pacific/Indian basins calculation 48 LOGICAL , PUBLIC :: l_diaptr !: tracers trend flag (set from namelist in trdini) 50 49 INTEGER, PARAMETER, PUBLIC :: nptr = 5 ! (glo, atl, pac, ind, ipc) 51 50 … … 60 59 REAL(wp), TARGET, ALLOCATABLE, SAVE, DIMENSION(:,:) :: p_fval2d 61 60 61 LOGICAL :: ll_init = .TRUE. !: tracers trend flag (set from namelist in trdini) 62 62 !! * Substitutions 63 # include " vectopt_loop_substitute.h90"63 # include "do_loop_substitute.h90" 64 64 !!---------------------------------------------------------------------- 65 65 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 69 69 CONTAINS 70 70 71 SUBROUTINE dia_ptr( pvtr )71 SUBROUTINE dia_ptr( kt, Kmm, pvtr ) 72 72 !!---------------------------------------------------------------------- 73 73 !! *** ROUTINE dia_ptr *** 74 74 !!---------------------------------------------------------------------- 75 INTEGER , INTENT(in) :: kt ! ocean time-step index 76 INTEGER , INTENT(in) :: Kmm ! time level index 75 77 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: pvtr ! j-effective transport 76 78 ! … … 92 94 ! 93 95 IF( ln_timing ) CALL timing_start('dia_ptr') 94 ! 96 97 IF( kt == nit000 .AND. ll_init ) CALL dia_ptr_init 98 ! 99 IF( .NOT. l_diaptr ) RETURN 100 95 101 IF( PRESENT( pvtr ) ) THEN 96 102 IF( iom_use( 'zomsf' ) ) THEN ! effective MSF … … 111 117 zmask(:,:,:) = 0._wp 112 118 zts(:,:,:,:) = 0._wp 113 DO jk = 1, jpkm1 114 DO jj = 1, jpjm1 115 DO ji = 1, jpi 116 zvfc = e1v(ji,jj) * e3v_n(ji,jj,jk) 117 zmask(ji,jj,jk) = vmask(ji,jj,jk) * zvfc 118 zts(ji,jj,jk,jp_tem) = (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * 0.5 * zvfc !Tracers averaged onto V grid 119 zts(ji,jj,jk,jp_sal) = (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) * 0.5 * zvfc 120 ENDDO 121 ENDDO 122 ENDDO 119 DO_3D_10_11( 1, jpkm1 ) 120 zvfc = e1v(ji,jj) * e3v(ji,jj,jk,Kmm) 121 zmask(ji,jj,jk) = vmask(ji,jj,jk) * zvfc 122 zts(ji,jj,jk,jp_tem) = (ts(ji,jj,jk,jp_tem,Kmm)+ts(ji,jj+1,jk,jp_tem,Kmm)) * 0.5 * zvfc !Tracers averaged onto V grid 123 zts(ji,jj,jk,jp_sal) = (ts(ji,jj,jk,jp_sal,Kmm)+ts(ji,jj+1,jk,jp_sal,Kmm)) * 0.5 * zvfc 124 END_3D 123 125 ENDIF 124 126 IF( iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) ) THEN … … 186 188 zts(:,:,:,:) = 0._wp 187 189 IF( iom_use( 'zotem' ) .OR. iom_use( 'zosal' ) .OR. iom_use( 'zosrf' ) ) THEN ! i-mean i-k-surface 188 DO jk = 1, jpkm1 189 DO jj = 1, jpj 190 DO ji = 1, jpi 191 zsfc = e1t(ji,jj) * e3t_n(ji,jj,jk) 192 zmask(ji,jj,jk) = tmask(ji,jj,jk) * zsfc 193 zts(ji,jj,jk,jp_tem) = tsn(ji,jj,jk,jp_tem) * zsfc 194 zts(ji,jj,jk,jp_sal) = tsn(ji,jj,jk,jp_sal) * zsfc 195 END DO 196 END DO 197 END DO 190 DO_3D_11_11( 1, jpkm1 ) 191 zsfc = e1t(ji,jj) * e3t(ji,jj,jk,Kmm) 192 zmask(ji,jj,jk) = tmask(ji,jj,jk) * zsfc 193 zts(ji,jj,jk,jp_tem) = ts(ji,jj,jk,jp_tem,Kmm) * zsfc 194 zts(ji,jj,jk,jp_sal) = ts(ji,jj,jk,jp_sal,Kmm) * zsfc 195 END_3D 198 196 ! 199 197 DO jn = 1, nptr … … 280 278 IF( iom_use( 'sopstvtr' ) .OR. iom_use( 'sophtvtr' ) ) THEN 281 279 zts(:,:,:,:) = 0._wp 282 DO jk = 1, jpkm1 283 DO jj = 1, jpjm1 284 DO ji = 1, jpi 285 zvfc = e1v(ji,jj) * e3v_n(ji,jj,jk) 286 zts(ji,jj,jk,jp_tem) = (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * 0.5 * zvfc !Tracers averaged onto V grid 287 zts(ji,jj,jk,jp_sal) = (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) * 0.5 * zvfc 288 ENDDO 289 ENDDO 290 ENDDO 280 DO_3D_10_11( 1, jpkm1 ) 281 zvfc = e1v(ji,jj) * e3v(ji,jj,jk,Kmm) 282 zts(ji,jj,jk,jp_tem) = (ts(ji,jj,jk,jp_tem,Kmm)+ts(ji,jj+1,jk,jp_tem,Kmm)) * 0.5 * zvfc !Tracers averaged onto V grid 283 zts(ji,jj,jk,jp_sal) = (ts(ji,jj,jk,jp_sal,Kmm)+ts(ji,jj+1,jk,jp_sal,Kmm)) * 0.5 * zvfc 284 END_3D 291 285 CALL dia_ptr_hst( jp_tem, 'vtr', zts(:,:,:,jp_tem) ) 292 286 CALL dia_ptr_hst( jp_sal, 'vtr', zts(:,:,:,jp_sal) ) … … 326 320 !! ** Purpose : Initialization, namelist read 327 321 !!---------------------------------------------------------------------- 328 INTEGER :: inum, jn, ios, ierr ! local integers 329 !! 330 NAMELIST/namptr/ ln_diaptr, ln_subbas 322 INTEGER :: inum, jn ! local integers 323 !! 331 324 REAL(wp), DIMENSION(jpi,jpj) :: zmsk 332 325 !!---------------------------------------------------------------------- 333 326 334 335 REWIND( numnam_ref ) ! Namelist namptr in reference namelist : Poleward transport 336 READ ( numnam_ref, namptr, IOSTAT = ios, ERR = 901) 337 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namptr in reference namelist' ) 338 339 REWIND( numnam_cfg ) ! Namelist namptr in configuration namelist : Poleward transport 340 READ ( numnam_cfg, namptr, IOSTAT = ios, ERR = 902 ) 341 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namptr in configuration namelist' ) 342 IF(lwm) WRITE ( numond, namptr ) 343 327 l_diaptr = .FALSE. 328 IF( iom_use( 'zomsf' ) .OR. iom_use( 'zotem' ) .OR. iom_use( 'zosal' ) .OR. & 329 & iom_use( 'zosrf' ) .OR. iom_use( 'sopstove' ) .OR. iom_use( 'sophtove' ) .OR. & 330 & iom_use( 'sopstbtr' ) .OR. iom_use( 'sophtbtr' ) .OR. iom_use( 'sophtadv' ) .OR. & 331 & iom_use( 'sopstadv' ) .OR. iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) .OR. & 332 & iom_use( 'sophteiv' ) .OR. iom_use( 'sopsteiv' ) .OR. iom_use( 'sopstvtr' ) .OR. & 333 & iom_use( 'sophtvtr' ) .OR. iom_use( 'uocetr_vsum_cumul' ) ) l_diaptr = .TRUE. 334 335 344 336 IF(lwp) THEN ! Control print 345 337 WRITE(numout,*) … … 347 339 WRITE(numout,*) '~~~~~~~~~~~~' 348 340 WRITE(numout,*) ' Namelist namptr : set ptr parameters' 349 WRITE(numout,*) ' Poleward heat & salt transport (T) or not (F) l n_diaptr = ', ln_diaptr341 WRITE(numout,*) ' Poleward heat & salt transport (T) or not (F) l_diaptr = ', l_diaptr 350 342 ENDIF 351 343 352 IF( l n_diaptr ) THEN344 IF( l_diaptr ) THEN 353 345 ! 354 346 IF( dia_ptr_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dia_ptr_init : unable to allocate arrays' ) … … 389 381 hstr_vtr(:,:,:) = 0._wp ! 390 382 ! 383 ll_init = .FALSE. 384 ! 391 385 ENDIF 392 386 ! … … 394 388 395 389 396 SUBROUTINE dia_ptr_hst( ktra, cptr, pv a)390 SUBROUTINE dia_ptr_hst( ktra, cptr, pvflx ) 397 391 !!---------------------------------------------------------------------- 398 392 !! *** ROUTINE dia_ptr_hst *** … … 403 397 INTEGER , INTENT(in ) :: ktra ! tracer index 404 398 CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf'/'eiv' 405 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pv a! 3D input array of advection/diffusion399 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pvflx ! 3D input array of advection/diffusion 406 400 INTEGER :: jn ! 407 401 … … 410 404 IF( ktra == jp_tem ) THEN 411 405 DO jn = 1, nptr 412 hstr_adv(:,jp_tem,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )406 hstr_adv(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 413 407 ENDDO 414 408 ENDIF 415 409 IF( ktra == jp_sal ) THEN 416 410 DO jn = 1, nptr 417 hstr_adv(:,jp_sal,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )411 hstr_adv(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 418 412 ENDDO 419 413 ENDIF … … 423 417 IF( ktra == jp_tem ) THEN 424 418 DO jn = 1, nptr 425 hstr_ldf(:,jp_tem,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )419 hstr_ldf(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 426 420 ENDDO 427 421 ENDIF 428 422 IF( ktra == jp_sal ) THEN 429 423 DO jn = 1, nptr 430 hstr_ldf(:,jp_sal,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )424 hstr_ldf(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 431 425 ENDDO 432 426 ENDIF … … 436 430 IF( ktra == jp_tem ) THEN 437 431 DO jn = 1, nptr 438 hstr_eiv(:,jp_tem,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )432 hstr_eiv(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 439 433 ENDDO 440 434 ENDIF 441 435 IF( ktra == jp_sal ) THEN 442 436 DO jn = 1, nptr 443 hstr_eiv(:,jp_sal,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )437 hstr_eiv(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 444 438 ENDDO 445 439 ENDIF … … 449 443 IF( ktra == jp_tem ) THEN 450 444 DO jn = 1, nptr 451 hstr_vtr(:,jp_tem,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )445 hstr_vtr(:,jp_tem,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 452 446 ENDDO 453 447 ENDIF 454 448 IF( ktra == jp_sal ) THEN 455 449 DO jn = 1, nptr 456 hstr_vtr(:,jp_sal,jn) = ptr_sj( pv a(:,:,:), btmsk(:,:,jn) )450 hstr_vtr(:,jp_sal,jn) = ptr_sj( pvflx(:,:,:), btmsk(:,:,jn) ) 457 451 ENDDO 458 452 ENDIF … … 486 480 487 481 488 FUNCTION ptr_sj_3d( pv a, pmsk ) RESULT ( p_fval )482 FUNCTION ptr_sj_3d( pvflx, pmsk ) RESULT ( p_fval ) 489 483 !!---------------------------------------------------------------------- 490 484 !! *** ROUTINE ptr_sj_3d *** … … 492 486 !! ** Purpose : i-k sum computation of a j-flux array 493 487 !! 494 !! ** Method : - i-k sum of pv ausing the interior 2D vmask (vmask_i).495 !! pv ais supposed to be a masked flux (i.e. * vmask*e1v*e3v)496 !! 497 !! ** Action : - p_fval: i-k-mean poleward flux of pv a498 !!---------------------------------------------------------------------- 499 REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) :: pv a! mask flux array at V-point488 !! ** Method : - i-k sum of pvflx using the interior 2D vmask (vmask_i). 489 !! pvflx is supposed to be a masked flux (i.e. * vmask*e1v*e3v) 490 !! 491 !! ** Action : - p_fval: i-k-mean poleward flux of pvflx 492 !!---------------------------------------------------------------------- 493 REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) :: pvflx ! mask flux array at V-point 500 494 REAL(wp), INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask 501 495 ! … … 509 503 ijpj = jpj 510 504 p_fval(:) = 0._wp 511 DO jk = 1, jpkm1 512 DO jj = 2, jpjm1 513 DO ji = fs_2, fs_jpim1 ! Vector opt. 514 p_fval(jj) = p_fval(jj) + pva(ji,jj,jk) * pmsk(ji,jj) * tmask_i(ji,jj) 515 END DO 516 END DO 517 END DO 505 DO_3D_00_00( 1, jpkm1 ) 506 p_fval(jj) = p_fval(jj) + pvflx(ji,jj,jk) * pmsk(ji,jj) * tmask_i(ji,jj) 507 END_3D 518 508 #if defined key_mpp_mpi 519 509 CALL mpp_sum( 'diaptr', p_fval, ijpj, ncomm_znl) … … 523 513 524 514 525 FUNCTION ptr_sj_2d( pv a, pmsk ) RESULT ( p_fval )515 FUNCTION ptr_sj_2d( pvflx, pmsk ) RESULT ( p_fval ) 526 516 !!---------------------------------------------------------------------- 527 517 !! *** ROUTINE ptr_sj_2d *** 528 518 !! 529 !! ** Purpose : "zonal" and vertical sum computation of a i-flux array530 !! 531 !! ** Method : - i-k sum of pv ausing the interior 2D vmask (vmask_i).532 !! pv ais supposed to be a masked flux (i.e. * vmask*e1v*e3v)533 !! 534 !! ** Action : - p_fval: i-k-mean poleward flux of pv a535 !!---------------------------------------------------------------------- 536 REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) :: pv a! mask flux array at V-point519 !! ** Purpose : "zonal" and vertical sum computation of a j-flux array 520 !! 521 !! ** Method : - i-k sum of pvflx using the interior 2D vmask (vmask_i). 522 !! pvflx is supposed to be a masked flux (i.e. * vmask*e1v*e3v) 523 !! 524 !! ** Action : - p_fval: i-k-mean poleward flux of pvflx 525 !!---------------------------------------------------------------------- 526 REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) :: pvflx ! mask flux array at V-point 537 527 REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask 538 528 ! … … 546 536 ijpj = jpj 547 537 p_fval(:) = 0._wp 548 DO jj = 2, jpjm1 549 DO ji = fs_2, fs_jpim1 ! Vector opt. 550 p_fval(jj) = p_fval(jj) + pva(ji,jj) * pmsk(ji,jj) * tmask_i(ji,jj) 551 END DO 552 END DO 538 DO_2D_00_00 539 p_fval(jj) = p_fval(jj) + pvflx(ji,jj) * pmsk(ji,jj) * tmask_i(ji,jj) 540 END_2D 553 541 #if defined key_mpp_mpi 554 542 CALL mpp_sum( 'diaptr', p_fval, ijpj, ncomm_znl ) … … 577 565 p_fval(:,:) = 0._wp 578 566 DO jc = 1, jpnj ! looping over all processors in j axis 579 DO jj = 2, jpjm1 580 DO ji = fs_2, fs_jpim1 ! Vector opt. 581 p_fval(ji,jj) = p_fval(ji,jj-1) + pva(ji,jj) * tmask_i(ji,jj) 582 END DO 583 END DO 567 DO_2D_00_00 568 p_fval(ji,jj) = p_fval(ji,jj-1) + pva(ji,jj) * tmask_i(ji,jj) 569 END_2D 584 570 CALL lbc_lnk( 'diaptr', p_fval, 'U', -1. ) 585 571 END DO … … 595 581 !! ** Purpose : i-sum computation of an array 596 582 !! 597 !! ** Method : - i-sum of pva using the interior 2D vmask (vmask_i).598 !! 599 !! ** Action : - p_fval: i- mean poleward flux of pva583 !! ** Method : - i-sum of field using the interior 2D vmask (pmsk). 584 !! 585 !! ** Action : - p_fval: i-sum of masked field 600 586 !!---------------------------------------------------------------------- 601 587 !! … … 618 604 p_fval(:,:) = 0._wp 619 605 ! 620 DO jk = 1, jpkm1 621 DO jj = 2, jpjm1 622 DO ji = fs_2, fs_jpim1 ! Vector opt. 623 p_fval(jj,jk) = p_fval(jj,jk) + pta(ji,jj,jk) * pmsk(ji,jj) * tmask_i(ji,jj) 624 END DO 625 END DO 626 END DO 606 DO_3D_00_00( 1, jpkm1 ) 607 p_fval(jj,jk) = p_fval(jj,jk) + pta(ji,jj,jk) * pmsk(ji,jj) * tmask_i(ji,jj) 608 END_3D 627 609 ! 628 610 #if defined key_mpp_mpi -
NEMO/trunk/src/OCE/DIA/diawri.F90
r12206 r12377 26 26 !!---------------------------------------------------------------------- 27 27 USE oce ! ocean dynamics and tracers 28 USE isf_oce 29 USE isfcpl 30 USE abl ! abl variables in case ln_abl = .true. 28 31 USE dom_oce ! ocean space and time domain 29 32 USE phycst ! physical constants … … 56 59 USE lib_mpp ! MPP library 57 60 USE timing ! preformance summary 58 USE diu rnal_bulk! diurnal warm layer59 USE cool_skin! Cool skin61 USE diu_bulk ! diurnal warm layer 62 USE diu_coolskin ! Cool skin 60 63 61 64 IMPLICIT NONE … … 65 68 PUBLIC dia_wri_state 66 69 PUBLIC dia_wri_alloc ! Called by nemogcm module 67 70 #if ! defined key_iomput 71 PUBLIC dia_wri_alloc_abl ! Called by sbcabl module (if ln_abl = .true.) 72 #endif 68 73 INTEGER :: nid_T, nz_T, nh_T, ndim_T, ndim_hT ! grid_T file 69 74 INTEGER :: nb_T , ndim_bT ! grid_T file … … 71 76 INTEGER :: nid_V, nz_V, nh_V, ndim_V, ndim_hV ! grid_V file 72 77 INTEGER :: nid_W, nz_W, nh_W ! grid_W file 78 INTEGER :: nid_A, nz_A, nh_A, ndim_A, ndim_hA ! grid_ABL file 73 79 INTEGER :: ndex(1) ! ??? 74 80 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_hT, ndex_hU, ndex_hV 81 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_hA, ndex_A ! ABL 75 82 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_T, ndex_U, ndex_V 76 83 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndex_bT 77 84 78 85 !! * Substitutions 79 # include " vectopt_loop_substitute.h90"86 # include "do_loop_substitute.h90" 80 87 !!---------------------------------------------------------------------- 81 88 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 96 103 97 104 98 SUBROUTINE dia_wri( kt )105 SUBROUTINE dia_wri( kt, Kmm ) 99 106 !!--------------------------------------------------------------------- 100 107 !! *** ROUTINE dia_wri *** … … 106 113 !!---------------------------------------------------------------------- 107 114 INTEGER, INTENT( in ) :: kt ! ocean time-step index 115 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 108 116 !! 109 117 INTEGER :: ji, jj, jk ! dummy loop indices … … 119 127 ! Output the initial state and forcings 120 128 IF( ninist == 1 ) THEN 121 CALL dia_wri_state( 'output.init' )129 CALL dia_wri_state( Kmm, 'output.init' ) 122 130 ninist = 0 123 131 ENDIF … … 128 136 CALL iom_put("e3v_0", e3v_0(:,:,:) ) 129 137 ! 130 CALL iom_put( "e3t" , e3t _n(:,:,:) )131 CALL iom_put( "e3u" , e3u _n(:,:,:) )132 CALL iom_put( "e3v" , e3v _n(:,:,:) )133 CALL iom_put( "e3w" , e3w _n(:,:,:) )138 CALL iom_put( "e3t" , e3t(:,:,:,Kmm) ) 139 CALL iom_put( "e3u" , e3u(:,:,:,Kmm) ) 140 CALL iom_put( "e3v" , e3v(:,:,:,Kmm) ) 141 CALL iom_put( "e3w" , e3w(:,:,:,Kmm) ) 134 142 IF( iom_use("e3tdef") ) & 135 CALL iom_put( "e3tdef" , ( ( e3t _n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 )143 CALL iom_put( "e3tdef" , ( ( e3t(:,:,:,Kmm) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) 136 144 137 145 IF( ll_wd ) THEN 138 CALL iom_put( "ssh" , (ssh n+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying)146 CALL iom_put( "ssh" , (ssh(:,:,Kmm)+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying) 139 147 ELSE 140 CALL iom_put( "ssh" , ssh n) ! sea surface height148 CALL iom_put( "ssh" , ssh(:,:,Kmm) ) ! sea surface height 141 149 ENDIF 142 150 143 151 IF( iom_use("wetdep") ) & ! wet depth 144 CALL iom_put( "wetdep" , ht_0(:,:) + ssh n(:,:) )152 CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Kmm) ) 145 153 146 CALL iom_put( "toce", ts n(:,:,:,jp_tem) ) ! 3D temperature147 CALL iom_put( "sst", ts n(:,:,1,jp_tem) ) ! surface temperature154 CALL iom_put( "toce", ts(:,:,:,jp_tem,Kmm) ) ! 3D temperature 155 CALL iom_put( "sst", ts(:,:,1,jp_tem,Kmm) ) ! surface temperature 148 156 IF ( iom_use("sbt") ) THEN 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 ikbot = mbkt(ji,jj) 152 z2d(ji,jj) = tsn(ji,jj,ikbot,jp_tem) 153 END DO 154 END DO 157 DO_2D_11_11 158 ikbot = mbkt(ji,jj) 159 z2d(ji,jj) = ts(ji,jj,ikbot,jp_tem,Kmm) 160 END_2D 155 161 CALL iom_put( "sbt", z2d ) ! bottom temperature 156 162 ENDIF 157 163 158 CALL iom_put( "soce", ts n(:,:,:,jp_sal) ) ! 3D salinity159 CALL iom_put( "sss", ts n(:,:,1,jp_sal) ) ! surface salinity164 CALL iom_put( "soce", ts(:,:,:,jp_sal,Kmm) ) ! 3D salinity 165 CALL iom_put( "sss", ts(:,:,1,jp_sal,Kmm) ) ! surface salinity 160 166 IF ( iom_use("sbs") ) THEN 161 DO jj = 1, jpj 162 DO ji = 1, jpi 163 ikbot = mbkt(ji,jj) 164 z2d(ji,jj) = tsn(ji,jj,ikbot,jp_sal) 165 END DO 166 END DO 167 DO_2D_11_11 168 ikbot = mbkt(ji,jj) 169 z2d(ji,jj) = ts(ji,jj,ikbot,jp_sal,Kmm) 170 END_2D 167 171 CALL iom_put( "sbs", z2d ) ! bottom salinity 168 172 ENDIF … … 171 175 zztmp = rau0 * 0.25 172 176 z2d(:,:) = 0._wp 173 DO jj = 2, jpjm1 174 DO ji = fs_2, fs_jpim1 ! vector opt. 175 zztmp2 = ( ( rCdU_bot(ji+1,jj)+rCdU_bot(ji ,jj) ) * un(ji ,jj,mbku(ji ,jj)) )**2 & 176 & + ( ( rCdU_bot(ji ,jj)+rCdU_bot(ji-1,jj) ) * un(ji-1,jj,mbku(ji-1,jj)) )**2 & 177 & + ( ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj ) ) * vn(ji,jj ,mbkv(ji,jj )) )**2 & 178 & + ( ( rCdU_bot(ji,jj )+rCdU_bot(ji,jj-1) ) * vn(ji,jj-1,mbkv(ji,jj-1)) )**2 179 z2d(ji,jj) = zztmp * SQRT( zztmp2 ) * tmask(ji,jj,1) 180 ! 181 END DO 182 END DO 177 DO_2D_00_00 178 zztmp2 = ( ( rCdU_bot(ji+1,jj)+rCdU_bot(ji ,jj) ) * uu(ji ,jj,mbku(ji ,jj),Kmm) )**2 & 179 & + ( ( rCdU_bot(ji ,jj)+rCdU_bot(ji-1,jj) ) * uu(ji-1,jj,mbku(ji-1,jj),Kmm) )**2 & 180 & + ( ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj ) ) * vv(ji,jj ,mbkv(ji,jj ),Kmm) )**2 & 181 & + ( ( rCdU_bot(ji,jj )+rCdU_bot(ji,jj-1) ) * vv(ji,jj-1,mbkv(ji,jj-1),Kmm) )**2 182 z2d(ji,jj) = zztmp * SQRT( zztmp2 ) * tmask(ji,jj,1) 183 ! 184 END_2D 183 185 CALL lbc_lnk( 'diawri', z2d, 'T', 1. ) 184 186 CALL iom_put( "taubot", z2d ) 185 187 ENDIF 186 188 187 CALL iom_put( "uoce", u n(:,:,:) ) ! 3D i-current188 CALL iom_put( "ssu", u n(:,:,1) ) ! surface i-current189 CALL iom_put( "uoce", uu(:,:,:,Kmm) ) ! 3D i-current 190 CALL iom_put( "ssu", uu(:,:,1,Kmm) ) ! surface i-current 189 191 IF ( iom_use("sbu") ) THEN 190 DO jj = 1, jpj 191 DO ji = 1, jpi 192 ikbot = mbku(ji,jj) 193 z2d(ji,jj) = un(ji,jj,ikbot) 194 END DO 195 END DO 192 DO_2D_11_11 193 ikbot = mbku(ji,jj) 194 z2d(ji,jj) = uu(ji,jj,ikbot,Kmm) 195 END_2D 196 196 CALL iom_put( "sbu", z2d ) ! bottom i-current 197 197 ENDIF 198 198 199 CALL iom_put( "voce", v n(:,:,:) ) ! 3D j-current200 CALL iom_put( "ssv", v n(:,:,1) ) ! surface j-current199 CALL iom_put( "voce", vv(:,:,:,Kmm) ) ! 3D j-current 200 CALL iom_put( "ssv", vv(:,:,1,Kmm) ) ! surface j-current 201 201 IF ( iom_use("sbv") ) THEN 202 DO jj = 1, jpj 203 DO ji = 1, jpi 204 ikbot = mbkv(ji,jj) 205 z2d(ji,jj) = vn(ji,jj,ikbot) 206 END DO 207 END DO 202 DO_2D_11_11 203 ikbot = mbkv(ji,jj) 204 z2d(ji,jj) = vv(ji,jj,ikbot,Kmm) 205 END_2D 208 206 CALL iom_put( "sbv", z2d ) ! bottom j-current 209 207 ENDIF 210 208 211 IF( ln_zad_Aimp ) w n = wn+ wi ! Recombine explicit and implicit parts of vertical velocity for diagnostic output212 ! 213 CALL iom_put( "woce", w n) ! vertical velocity209 IF( ln_zad_Aimp ) ww = ww + wi ! Recombine explicit and implicit parts of vertical velocity for diagnostic output 210 ! 211 CALL iom_put( "woce", ww ) ! vertical velocity 214 212 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 215 213 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 216 214 z2d(:,:) = rau0 * e1e2t(:,:) 217 215 DO jk = 1, jpk 218 z3d(:,:,jk) = w n(:,:,jk) * z2d(:,:)216 z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) 219 217 END DO 220 218 CALL iom_put( "w_masstr" , z3d ) … … 222 220 ENDIF 223 221 ! 224 IF( ln_zad_Aimp ) w n = wn- wi ! Remove implicit part of vertical velocity that was added for diagnostic output222 IF( ln_zad_Aimp ) ww = ww - wi ! Remove implicit part of vertical velocity that was added for diagnostic output 225 223 226 224 CALL iom_put( "avt" , avt ) ! T vert. eddy diff. coef. … … 232 230 233 231 IF ( iom_use("sstgrad") .OR. iom_use("sstgrad2") ) THEN 234 DO jj = 2, jpjm1 ! sst gradient 235 DO ji = fs_2, fs_jpim1 ! vector opt. 236 zztmp = tsn(ji,jj,1,jp_tem) 237 zztmpx = ( tsn(ji+1,jj,1,jp_tem) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) * r1_e1u(ji-1,jj) 238 zztmpy = ( tsn(ji,jj+1,1,jp_tem) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) * r1_e2v(ji,jj-1) 239 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 240 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) 241 END DO 242 END DO 232 DO_2D_00_00 233 zztmp = ts(ji,jj,1,jp_tem,Kmm) 234 zztmpx = ( ts(ji+1,jj,1,jp_tem,Kmm) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - ts(ji-1,jj ,1,jp_tem,Kmm) ) * r1_e1u(ji-1,jj) 235 zztmpy = ( ts(ji,jj+1,1,jp_tem,Kmm) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - ts(ji ,jj-1,1,jp_tem,Kmm) ) * r1_e2v(ji,jj-1) 236 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 237 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) 238 END_2D 243 239 CALL lbc_lnk( 'diawri', z2d, 'T', 1. ) 244 240 CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient … … 250 246 IF( iom_use("heatc") ) THEN 251 247 z2d(:,:) = 0._wp 252 DO jk = 1, jpkm1 253 DO jj = 1, jpj 254 DO ji = 1, jpi 255 z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk) 256 END DO 257 END DO 258 END DO 248 DO_3D_11_11( 1, jpkm1 ) 249 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) * tmask(ji,jj,jk) 250 END_3D 259 251 CALL iom_put( "heatc", rau0_rcp * z2d ) ! vertically integrated heat content (J/m2) 260 252 ENDIF … … 262 254 IF( iom_use("saltc") ) THEN 263 255 z2d(:,:) = 0._wp 264 DO jk = 1, jpkm1 265 DO jj = 1, jpj 266 DO ji = 1, jpi 267 z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk) 268 END DO 269 END DO 270 END DO 256 DO_3D_11_11( 1, jpkm1 ) 257 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) * tmask(ji,jj,jk) 258 END_3D 271 259 CALL iom_put( "saltc", rau0 * z2d ) ! vertically integrated salt content (PSU*kg/m2) 272 260 ENDIF … … 274 262 IF ( iom_use("eken") ) THEN 275 263 z3d(:,:,jpk) = 0._wp 276 DO jk = 1, jpkm1 277 DO jj = 2, jpjm1 278 DO ji = fs_2, fs_jpim1 ! vector opt. 279 zztmp = 0.25_wp * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 280 z3d(ji,jj,jk) = zztmp * ( un(ji-1,jj,jk)**2 * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk) & 281 & + un(ji ,jj,jk)**2 * e2u(ji ,jj) * e3u_n(ji ,jj,jk) & 282 & + vn(ji,jj-1,jk)**2 * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk) & 283 & + vn(ji,jj ,jk)**2 * e1v(ji,jj ) * e3v_n(ji,jj ,jk) ) 284 END DO 285 END DO 286 END DO 264 DO_3D_00_00( 1, jpkm1 ) 265 zztmp = 0.25_wp * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 266 z3d(ji,jj,jk) = zztmp * ( uu(ji-1,jj,jk,Kmm)**2 * e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) & 267 & + uu(ji ,jj,jk,Kmm)**2 * e2u(ji ,jj) * e3u(ji ,jj,jk,Kmm) & 268 & + vv(ji,jj-1,jk,Kmm)**2 * e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) & 269 & + vv(ji,jj ,jk,Kmm)**2 * e1v(ji,jj ) * e3v(ji,jj ,jk,Kmm) ) 270 END_3D 287 271 CALL lbc_lnk( 'diawri', z3d, 'T', 1. ) 288 272 CALL iom_put( "eken", z3d ) ! kinetic energy 289 273 ENDIF 290 274 ! 291 CALL iom_put( "hdiv", hdiv n) ! Horizontal divergence275 CALL iom_put( "hdiv", hdiv ) ! Horizontal divergence 292 276 ! 293 277 IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN … … 295 279 z2d(:,:) = 0.e0 296 280 DO jk = 1, jpkm1 297 z3d(:,:,jk) = rau0 * u n(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk)281 z3d(:,:,jk) = rau0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 298 282 z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 299 283 END DO … … 304 288 IF( iom_use("u_heattr") ) THEN 305 289 z2d(:,:) = 0._wp 306 DO jk = 1, jpkm1 307 DO jj = 2, jpjm1 308 DO ji = fs_2, fs_jpim1 ! vector opt. 309 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 310 END DO 311 END DO 312 END DO 290 DO_3D_00_00( 1, jpkm1 ) 291 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji+1,jj,jk,jp_tem,Kmm) ) 292 END_3D 313 293 CALL lbc_lnk( 'diawri', z2d, 'U', -1. ) 314 294 CALL iom_put( "u_heattr", 0.5*rcp * z2d ) ! heat transport in i-direction … … 317 297 IF( iom_use("u_salttr") ) THEN 318 298 z2d(:,:) = 0.e0 319 DO jk = 1, jpkm1 320 DO jj = 2, jpjm1 321 DO ji = fs_2, fs_jpim1 ! vector opt. 322 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 323 END DO 324 END DO 325 END DO 299 DO_3D_00_00( 1, jpkm1 ) 300 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji+1,jj,jk,jp_sal,Kmm) ) 301 END_3D 326 302 CALL lbc_lnk( 'diawri', z2d, 'U', -1. ) 327 303 CALL iom_put( "u_salttr", 0.5 * z2d ) ! heat transport in i-direction … … 332 308 z3d(:,:,jpk) = 0.e0 333 309 DO jk = 1, jpkm1 334 z3d(:,:,jk) = rau0 * v n(:,:,jk) * e1v(:,:) * e3v_n(:,:,jk) * vmask(:,:,jk)310 z3d(:,:,jk) = rau0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 335 311 END DO 336 312 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction … … 339 315 IF( iom_use("v_heattr") ) THEN 340 316 z2d(:,:) = 0.e0 341 DO jk = 1, jpkm1 342 DO jj = 2, jpjm1 343 DO ji = fs_2, fs_jpim1 ! vector opt. 344 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 345 END DO 346 END DO 347 END DO 317 DO_3D_00_00( 1, jpkm1 ) 318 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji,jj+1,jk,jp_tem,Kmm) ) 319 END_3D 348 320 CALL lbc_lnk( 'diawri', z2d, 'V', -1. ) 349 321 CALL iom_put( "v_heattr", 0.5*rcp * z2d ) ! heat transport in j-direction … … 352 324 IF( iom_use("v_salttr") ) THEN 353 325 z2d(:,:) = 0._wp 354 DO jk = 1, jpkm1 355 DO jj = 2, jpjm1 356 DO ji = fs_2, fs_jpim1 ! vector opt. 357 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 358 END DO 359 END DO 360 END DO 326 DO_3D_00_00( 1, jpkm1 ) 327 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji,jj+1,jk,jp_sal,Kmm) ) 328 END_3D 361 329 CALL lbc_lnk( 'diawri', z2d, 'V', -1. ) 362 330 CALL iom_put( "v_salttr", 0.5 * z2d ) ! heat transport in j-direction … … 365 333 IF( iom_use("tosmint") ) THEN 366 334 z2d(:,:) = 0._wp 367 DO jk = 1, jpkm1 368 DO jj = 2, jpjm1 369 DO ji = fs_2, fs_jpim1 ! vector opt. 370 z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) 371 END DO 372 END DO 373 END DO 335 DO_3D_00_00( 1, jpkm1 ) 336 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) 337 END_3D 374 338 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 375 339 CALL iom_put( "tosmint", rau0 * z2d ) ! Vertical integral of temperature … … 377 341 IF( iom_use("somint") ) THEN 378 342 z2d(:,:)=0._wp 379 DO jk = 1, jpkm1 380 DO jj = 2, jpjm1 381 DO ji = fs_2, fs_jpim1 ! vector opt. 382 z2d(ji,jj) = z2d(ji,jj) + e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) 383 END DO 384 END DO 385 END DO 343 DO_3D_00_00( 1, jpkm1 ) 344 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) 345 END_3D 386 346 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 387 347 CALL iom_put( "somint", rau0 * z2d ) ! Vertical integral of salinity … … 390 350 CALL iom_put( "bn2", rn2 ) ! Brunt-Vaisala buoyancy frequency (N^2) 391 351 ! 392 393 IF (ln_dia25h) CALL dia_25h( kt )! 25h averaging352 353 IF (ln_dia25h) CALL dia_25h( kt, Kmm ) ! 25h averaging 394 354 395 355 IF( ln_timing ) CALL timing_stop('dia_wri') … … 411 371 & ndex_hV(jpi*jpj) , ndex_V(jpi*jpj*jpk) , STAT=ierr(1) ) 412 372 ! 413 373 dia_wri_alloc = MAXVAL(ierr) 414 374 CALL mpp_sum( 'diawri', dia_wri_alloc ) 415 375 ! 416 376 END FUNCTION dia_wri_alloc 377 378 INTEGER FUNCTION dia_wri_alloc_abl() 379 !!---------------------------------------------------------------------- 380 ALLOCATE( ndex_hA(jpi*jpj), ndex_A (jpi*jpj*jpkam1), STAT=dia_wri_alloc_abl) 381 CALL mpp_sum( 'diawri', dia_wri_alloc_abl ) 382 ! 383 END FUNCTION dia_wri_alloc_abl 417 384 418 385 419 SUBROUTINE dia_wri( kt )386 SUBROUTINE dia_wri( kt, Kmm ) 420 387 !!--------------------------------------------------------------------- 421 388 !! *** ROUTINE dia_wri *** … … 430 397 !!---------------------------------------------------------------------- 431 398 INTEGER, INTENT( in ) :: kt ! ocean time-step index 399 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 432 400 ! 433 401 LOGICAL :: ll_print = .FALSE. ! =T print and flush numout … … 437 405 INTEGER :: ierr ! error code return from allocation 438 406 INTEGER :: iimi, iima, ipk, it, itmod, ijmi, ijma ! local integers 407 INTEGER :: ipka ! ABL 439 408 INTEGER :: jn, ierror ! local integers 440 409 REAL(wp) :: zsto, zout, zmax, zjulian ! local scalars … … 442 411 REAL(wp), DIMENSION(jpi,jpj) :: zw2d ! 2D workspace 443 412 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d ! 3D workspace 413 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d_abl ! ABL 3D workspace 444 414 !!---------------------------------------------------------------------- 445 415 ! 446 416 IF( ninist == 1 ) THEN !== Output the initial state and forcings ==! 447 CALL dia_wri_state( 'output.init' )417 CALL dia_wri_state( Kmm, 'output.init' ) 448 418 ninist = 0 449 419 ENDIF … … 475 445 ijmi = 1 ; ijma = jpj 476 446 ipk = jpk 447 IF(ln_abl) ipka = jpkam1 477 448 478 449 ! define time axis … … 577 548 & "m", ipk, gdepw_1d, nz_W, "down" ) 578 549 550 IF( ln_abl ) THEN 551 ! Define the ABL grid FILE ( nid_A ) 552 CALL dia_nam( clhstnam, nn_write, 'grid_ABL' ) 553 IF(lwp) WRITE(numout,*) " Name of NETCDF file ", clhstnam ! filename 554 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & ! Horizontal grid: glamt and gphit 555 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 556 & nit000-1, zjulian, rdt, nh_A, nid_A, domain_id=nidom, snc4chunks=snc4set ) 557 CALL histvert( nid_A, "ght_abl", "Vertical T levels", & ! Vertical grid: gdept 558 & "m", ipka, ght_abl(2:jpka), nz_A, "up" ) 559 ! ! Index of ocean points 560 ALLOCATE( zw3d_abl(jpi,jpj,ipka) ) 561 zw3d_abl(:,:,:) = 1._wp 562 CALL wheneq( jpi*jpj*ipka, zw3d_abl, 1, 1., ndex_A , ndim_A ) ! volume 563 CALL wheneq( jpi*jpj , zw3d_abl, 1, 1., ndex_hA, ndim_hA ) ! surface 564 DEALLOCATE(zw3d_abl) 565 ENDIF 579 566 580 567 ! Declare all the output fields as NETCDF variables … … 586 573 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 587 574 IF( .NOT.ln_linssh ) THEN 588 CALL histdef( nid_T, "vovvle3t", "Level thickness" , "m" ,& ! e3t _n575 CALL histdef( nid_T, "vovvle3t", "Level thickness" , "m" ,& ! e3t(:,:,:,Kmm) 589 576 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 590 CALL histdef( nid_T, "vovvldep", "T point depth" , "m" ,& ! e3t _n577 CALL histdef( nid_T, "vovvldep", "T point depth" , "m" ,& ! e3t(:,:,:,Kmm) 591 578 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 592 CALL histdef( nid_T, "vovvldef", "Squared level deformation" , "%^2" ,& ! e3t _n579 CALL histdef( nid_T, "vovvldef", "Squared level deformation" , "%^2" ,& ! e3t(:,:,:,Kmm) 593 580 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 594 581 ENDIF … … 607 594 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 608 595 IF( ln_linssh ) THEN 609 CALL histdef( nid_T, "sosst_cd", "Concentration/Dilution term on temperature" & ! emp * ts n(:,:,1,jp_tem)596 CALL histdef( nid_T, "sosst_cd", "Concentration/Dilution term on temperature" & ! emp * ts(:,:,1,jp_tem,Kmm) 610 597 & , "KgC/m2/s", & ! sosst_cd 611 598 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 612 CALL histdef( nid_T, "sosss_cd", "Concentration/Dilution term on salinity" & ! emp * ts n(:,:,1,jp_sal)599 CALL histdef( nid_T, "sosss_cd", "Concentration/Dilution term on salinity" & ! emp * ts(:,:,1,jp_sal,Kmm) 613 600 & , "KgPSU/m2/s",& ! sosss_cd 614 601 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) … … 626 613 CALL histdef( nid_T, "sowindsp", "wind speed at 10m" , "m/s" , & ! wndm 627 614 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 628 ! 615 ! 616 IF( ln_abl ) THEN 617 CALL histdef( nid_A, "t_abl", "Potential Temperature" , "K" , & ! t_abl 618 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 619 CALL histdef( nid_A, "q_abl", "Humidity" , "kg/kg" , & ! q_abl 620 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 621 CALL histdef( nid_A, "u_abl", "Atmospheric U-wind " , "m/s" , & ! u_abl 622 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 623 CALL histdef( nid_A, "v_abl", "Atmospheric V-wind " , "m/s" , & ! v_abl 624 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 625 CALL histdef( nid_A, "tke_abl", "Atmospheric TKE " , "m2/s2" , & ! tke_abl 626 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 627 CALL histdef( nid_A, "avm_abl", "Atmospheric turbulent viscosity", "m2/s" , & ! avm_abl 628 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 629 CALL histdef( nid_A, "avt_abl", "Atmospheric turbulent diffusivity", "m2/s2", & ! avt_abl 630 & jpi, jpj, nh_A, ipka, 1, ipka, nz_A, 32, clop, zsto, zout ) 631 CALL histdef( nid_A, "pblh", "Atmospheric boundary layer height " , "m", & ! pblh 632 & jpi, jpj, nh_A, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 633 #if defined key_si3 634 CALL histdef( nid_A, "oce_frac", "Fraction of open ocean" , " ", & ! ato_i 635 & jpi, jpj, nh_A, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 636 #endif 637 CALL histend( nid_A, snc4chunks=snc4set ) 638 ENDIF 639 ! 629 640 IF( ln_icebergs ) THEN 630 641 CALL histdef( nid_T, "calving" , "calving mass input" , "kg/s" , & … … 686 697 687 698 ! !!! nid_U : 3D 688 CALL histdef( nid_U, "vozocrtx", "Zonal Current" , "m/s" , & ! u n699 CALL histdef( nid_U, "vozocrtx", "Zonal Current" , "m/s" , & ! uu(:,:,:,Kmm) 689 700 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout ) 690 701 IF( ln_wave .AND. ln_sdw) THEN … … 699 710 700 711 ! !!! nid_V : 3D 701 CALL histdef( nid_V, "vomecrty", "Meridional Current" , "m/s" , & ! v n712 CALL histdef( nid_V, "vomecrty", "Meridional Current" , "m/s" , & ! vv(:,:,:,Kmm) 702 713 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout ) 703 714 IF( ln_wave .AND. ln_sdw) THEN … … 712 723 713 724 ! !!! nid_W : 3D 714 CALL histdef( nid_W, "vovecrtz", "Vertical Velocity" , "m/s" , & ! w n725 CALL histdef( nid_W, "vovecrtz", "Vertical Velocity" , "m/s" , & ! ww 715 726 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 716 727 CALL histdef( nid_W, "votkeavt", "Vertical Eddy Diffusivity" , "m2/s" , & ! avt … … 750 761 751 762 IF( .NOT.ln_linssh ) THEN 752 CALL histwrite( nid_T, "votemper", it, ts n(:,:,:,jp_tem) * e3t_n(:,:,:) , ndim_T , ndex_T ) ! heat content753 CALL histwrite( nid_T, "vosaline", it, ts n(:,:,:,jp_sal) * e3t_n(:,:,:) , ndim_T , ndex_T ) ! salt content754 CALL histwrite( nid_T, "sosstsst", it, ts n(:,:,1,jp_tem) * e3t_n(:,:,1) , ndim_hT, ndex_hT ) ! sea surface heat content755 CALL histwrite( nid_T, "sosaline", it, ts n(:,:,1,jp_sal) * e3t_n(:,:,1) , ndim_hT, ndex_hT ) ! sea surface salinity content763 CALL histwrite( nid_T, "votemper", it, ts(:,:,:,jp_tem,Kmm) * e3t(:,:,:,Kmm) , ndim_T , ndex_T ) ! heat content 764 CALL histwrite( nid_T, "vosaline", it, ts(:,:,:,jp_sal,Kmm) * e3t(:,:,:,Kmm) , ndim_T , ndex_T ) ! salt content 765 CALL histwrite( nid_T, "sosstsst", it, ts(:,:,1,jp_tem,Kmm) * e3t(:,:,1,Kmm) , ndim_hT, ndex_hT ) ! sea surface heat content 766 CALL histwrite( nid_T, "sosaline", it, ts(:,:,1,jp_sal,Kmm) * e3t(:,:,1,Kmm) , ndim_hT, ndex_hT ) ! sea surface salinity content 756 767 ELSE 757 CALL histwrite( nid_T, "votemper", it, ts n(:,:,:,jp_tem) , ndim_T , ndex_T ) ! temperature758 CALL histwrite( nid_T, "vosaline", it, ts n(:,:,:,jp_sal) , ndim_T , ndex_T ) ! salinity759 CALL histwrite( nid_T, "sosstsst", it, ts n(:,:,1,jp_tem) , ndim_hT, ndex_hT ) ! sea surface temperature760 CALL histwrite( nid_T, "sosaline", it, ts n(:,:,1,jp_sal) , ndim_hT, ndex_hT ) ! sea surface salinity768 CALL histwrite( nid_T, "votemper", it, ts(:,:,:,jp_tem,Kmm) , ndim_T , ndex_T ) ! temperature 769 CALL histwrite( nid_T, "vosaline", it, ts(:,:,:,jp_sal,Kmm) , ndim_T , ndex_T ) ! salinity 770 CALL histwrite( nid_T, "sosstsst", it, ts(:,:,1,jp_tem,Kmm) , ndim_hT, ndex_hT ) ! sea surface temperature 771 CALL histwrite( nid_T, "sosaline", it, ts(:,:,1,jp_sal,Kmm) , ndim_hT, ndex_hT ) ! sea surface salinity 761 772 ENDIF 762 773 IF( .NOT.ln_linssh ) THEN 763 zw3d(:,:,:) = ( ( e3t _n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2764 CALL histwrite( nid_T, "vovvle3t", it, e3t _n (:,:,:) , ndim_T , ndex_T ) ! level thickness765 CALL histwrite( nid_T, "vovvldep", it, gdept _n(:,:,:) , ndim_T , ndex_T ) ! t-point depth774 zw3d(:,:,:) = ( ( e3t(:,:,:,Kmm) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 775 CALL histwrite( nid_T, "vovvle3t", it, e3t (:,:,:,Kmm) , ndim_T , ndex_T ) ! level thickness 776 CALL histwrite( nid_T, "vovvldep", it, gdept(:,:,:,Kmm) , ndim_T , ndex_T ) ! t-point depth 766 777 CALL histwrite( nid_T, "vovvldef", it, zw3d , ndim_T , ndex_T ) ! level thickness deformation 767 778 ENDIF 768 CALL histwrite( nid_T, "sossheig", it, ssh n, ndim_hT, ndex_hT ) ! sea surface height779 CALL histwrite( nid_T, "sossheig", it, ssh(:,:,Kmm) , ndim_hT, ndex_hT ) ! sea surface height 769 780 CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf ) , ndim_hT, ndex_hT ) ! upward water flux 770 781 CALL histwrite( nid_T, "sorunoff", it, rnf , ndim_hT, ndex_hT ) ! river runoffs … … 773 784 ! in linear free surface case) 774 785 IF( ln_linssh ) THEN 775 zw2d(:,:) = emp (:,:) * ts n(:,:,1,jp_tem)786 zw2d(:,:) = emp (:,:) * ts(:,:,1,jp_tem,Kmm) 776 787 CALL histwrite( nid_T, "sosst_cd", it, zw2d, ndim_hT, ndex_hT ) ! c/d term on sst 777 zw2d(:,:) = emp (:,:) * ts n(:,:,1,jp_sal)788 zw2d(:,:) = emp (:,:) * ts(:,:,1,jp_sal,Kmm) 778 789 CALL histwrite( nid_T, "sosss_cd", it, zw2d, ndim_hT, ndex_hT ) ! c/d term on sss 779 790 ENDIF … … 784 795 CALL histwrite( nid_T, "soicecov", it, fr_i , ndim_hT, ndex_hT ) ! ice fraction 785 796 CALL histwrite( nid_T, "sowindsp", it, wndm , ndim_hT, ndex_hT ) ! wind speed 786 ! 797 ! 798 IF( ln_abl ) THEN 799 ALLOCATE( zw3d_abl(jpi,jpj,jpka) ) 800 IF( ln_mskland ) THEN 801 DO jk=1,jpka 802 zw3d_abl(:,:,jk) = tmask(:,:,1) 803 END DO 804 ELSE 805 zw3d_abl(:,:,:) = 1._wp 806 ENDIF 807 CALL histwrite( nid_A, "pblh" , it, pblh(:,:) *zw3d_abl(:,:,1 ), ndim_hA, ndex_hA ) ! pblh 808 CALL histwrite( nid_A, "u_abl" , it, u_abl (:,:,2:jpka,nt_n )*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! u_abl 809 CALL histwrite( nid_A, "v_abl" , it, v_abl (:,:,2:jpka,nt_n )*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! v_abl 810 CALL histwrite( nid_A, "t_abl" , it, tq_abl (:,:,2:jpka,nt_n,1)*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! t_abl 811 CALL histwrite( nid_A, "q_abl" , it, tq_abl (:,:,2:jpka,nt_n,2)*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! q_abl 812 CALL histwrite( nid_A, "tke_abl", it, tke_abl (:,:,2:jpka,nt_n )*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! tke_abl 813 CALL histwrite( nid_A, "avm_abl", it, avm_abl (:,:,2:jpka )*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! avm_abl 814 CALL histwrite( nid_A, "avt_abl", it, avt_abl (:,:,2:jpka )*zw3d_abl(:,:,2:jpka), ndim_A , ndex_A ) ! avt_abl 815 #if defined key_si3 816 CALL histwrite( nid_A, "oce_frac" , it, ato_i(:,:) , ndim_hA, ndex_hA ) ! ato_i 817 #endif 818 DEALLOCATE(zw3d_abl) 819 ENDIF 820 ! 787 821 IF( ln_icebergs ) THEN 788 822 ! … … 811 845 CALL histwrite( nid_T, "sohefldp", it, qrp , ndim_hT, ndex_hT ) ! heat flux damping 812 846 CALL histwrite( nid_T, "sowafldp", it, erp , ndim_hT, ndex_hT ) ! freshwater flux damping 813 zw2d(:,:) = erp(:,:) * ts n(:,:,1,jp_sal) * tmask(:,:,1)847 zw2d(:,:) = erp(:,:) * ts(:,:,1,jp_sal,Kmm) * tmask(:,:,1) 814 848 CALL histwrite( nid_T, "sosafldp", it, zw2d , ndim_hT, ndex_hT ) ! salt flux damping 815 849 ENDIF … … 824 858 #endif 825 859 826 CALL histwrite( nid_U, "vozocrtx", it, u n, ndim_U , ndex_U ) ! i-current860 CALL histwrite( nid_U, "vozocrtx", it, uu(:,:,:,Kmm) , ndim_U , ndex_U ) ! i-current 827 861 CALL histwrite( nid_U, "sozotaux", it, utau , ndim_hU, ndex_hU ) ! i-wind stress 828 862 829 CALL histwrite( nid_V, "vomecrty", it, v n, ndim_V , ndex_V ) ! j-current863 CALL histwrite( nid_V, "vomecrty", it, vv(:,:,:,Kmm) , ndim_V , ndex_V ) ! j-current 830 864 CALL histwrite( nid_V, "sometauy", it, vtau , ndim_hV, ndex_hV ) ! j-wind stress 831 865 832 866 IF( ln_zad_Aimp ) THEN 833 CALL histwrite( nid_W, "vovecrtz", it, w n+ wi , ndim_T, ndex_T ) ! vert. current867 CALL histwrite( nid_W, "vovecrtz", it, ww + wi , ndim_T, ndex_T ) ! vert. current 834 868 ELSE 835 CALL histwrite( nid_W, "vovecrtz", it, w n, ndim_T, ndex_T ) ! vert. current869 CALL histwrite( nid_W, "vovecrtz", it, ww , ndim_T, ndex_T ) ! vert. current 836 870 ENDIF 837 871 CALL histwrite( nid_W, "votkeavt", it, avt , ndim_T, ndex_T ) ! T vert. eddy diff. coef. … … 854 888 CALL histclo( nid_V ) 855 889 CALL histclo( nid_W ) 890 IF(ln_abl) CALL histclo( nid_A ) 856 891 ENDIF 857 892 ! … … 861 896 #endif 862 897 863 SUBROUTINE dia_wri_state( cdfile_name )898 SUBROUTINE dia_wri_state( Kmm, cdfile_name ) 864 899 !!--------------------------------------------------------------------- 865 900 !! *** ROUTINE dia_wri_state *** … … 874 909 !! File 'output.abort.nc' is created in case of abnormal job end 875 910 !!---------------------------------------------------------------------- 911 INTEGER , INTENT( in ) :: Kmm ! time level index 876 912 CHARACTER (len=* ), INTENT( in ) :: cdfile_name ! name of the file created 877 913 !! 878 INTEGER :: inum 914 INTEGER :: inum, jk 879 915 !!---------------------------------------------------------------------- 880 916 ! … … 890 926 #endif 891 927 892 CALL iom_rstput( 0, 0, inum, 'votemper', ts n(:,:,:,jp_tem) ) ! now temperature893 CALL iom_rstput( 0, 0, inum, 'vosaline', ts n(:,:,:,jp_sal) ) ! now salinity894 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh n) ! sea surface height895 CALL iom_rstput( 0, 0, inum, 'vozocrtx', u n) ! now i-velocity896 CALL iom_rstput( 0, 0, inum, 'vomecrty', v n) ! now j-velocity928 CALL iom_rstput( 0, 0, inum, 'votemper', ts(:,:,:,jp_tem,Kmm) ) ! now temperature 929 CALL iom_rstput( 0, 0, inum, 'vosaline', ts(:,:,:,jp_sal,Kmm) ) ! now salinity 930 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh(:,:,Kmm) ) ! sea surface height 931 CALL iom_rstput( 0, 0, inum, 'vozocrtx', uu(:,:,:,Kmm) ) ! now i-velocity 932 CALL iom_rstput( 0, 0, inum, 'vomecrty', vv(:,:,:,Kmm) ) ! now j-velocity 897 933 IF( ln_zad_Aimp ) THEN 898 CALL iom_rstput( 0, 0, inum, 'vovecrtz', w n+ wi ) ! now k-velocity934 CALL iom_rstput( 0, 0, inum, 'vovecrtz', ww + wi ) ! now k-velocity 899 935 ELSE 900 CALL iom_rstput( 0, 0, inum, 'vovecrtz', wn ) ! now k-velocity 901 ENDIF 936 CALL iom_rstput( 0, 0, inum, 'vovecrtz', ww ) ! now k-velocity 937 ENDIF 938 CALL iom_rstput( 0, 0, inum, 'risfdep', risfdep ) ! now k-velocity 939 CALL iom_rstput( 0, 0, inum, 'ht' , ht ) ! now water column height 940 941 IF ( ln_isf ) THEN 942 IF (ln_isfcav_mlt) THEN 943 CALL iom_rstput( 0, 0, inum, 'fwfisf_cav', fwfisf_cav ) ! now k-velocity 944 CALL iom_rstput( 0, 0, inum, 'rhisf_cav_tbl', rhisf_tbl_cav ) ! now k-velocity 945 CALL iom_rstput( 0, 0, inum, 'rfrac_cav_tbl', rfrac_tbl_cav ) ! now k-velocity 946 CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,8) ) ! now k-velocity 947 CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,8) ) ! now k-velocity 948 CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav,8), ktype = jp_i1 ) 949 END IF 950 IF (ln_isfpar_mlt) THEN 951 CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,8) ) ! now k-velocity 952 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 953 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity 954 CALL iom_rstput( 0, 0, inum, 'rfrac_par_tbl', rfrac_tbl_par ) ! now k-velocity 955 CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,8) ) ! now k-velocity 956 CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,8) ) ! now k-velocity 957 CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par,8), ktype = jp_i1 ) 958 END IF 959 END IF 960 902 961 IF( ALLOCATED(ahtu) ) THEN 903 962 CALL iom_rstput( 0, 0, inum, 'ahtu', ahtu ) ! aht at u-point … … 915 974 CALL iom_rstput( 0, 0, inum, 'sometauy', vtau ) ! j-wind stress 916 975 IF( .NOT.ln_linssh ) THEN 917 CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept _n) ! T-cell depth918 CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t _n) ! T-cell thickness976 CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept(:,:,:,Kmm) ) ! T-cell depth 977 CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t(:,:,:,Kmm) ) ! T-cell thickness 919 978 END IF 920 979 IF( ln_wave .AND. ln_sdw ) THEN … … 923 982 CALL iom_rstput( 0, 0, inum, 'sdvecrtz', wsd ) ! now StokesDrift k-velocity 924 983 ENDIF 984 IF ( ln_abl ) THEN 985 CALL iom_rstput ( 0, 0, inum, "uz1_abl", u_abl(:,:,2,nt_a ) ) ! now first level i-wind 986 CALL iom_rstput ( 0, 0, inum, "vz1_abl", v_abl(:,:,2,nt_a ) ) ! now first level j-wind 987 CALL iom_rstput ( 0, 0, inum, "tz1_abl", tq_abl(:,:,2,nt_a,1) ) ! now first level temperature 988 CALL iom_rstput ( 0, 0, inum, "qz1_abl", tq_abl(:,:,2,nt_a,2) ) ! now first level humidity 989 ENDIF 925 990 926 991 #if defined key_si3
Note: See TracChangeset
for help on using the changeset viewer.