- Timestamp:
- 2020-03-26T15:59:52+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE
- Files:
-
- 1 added
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/diawri.F90
r12529 r12614 119 119 REAL(wp):: zztmp , zztmpx ! local scalar 120 120 REAL(wp):: zztmp2, zztmpy ! - - 121 REAL(wp):: ze3 ! - - 121 122 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 122 123 REAL(wp), DIMENSION(jpi,jpj,jpk) :: z3d ! 3D workspace … … 146 147 CALL iom_put( "ssh" , (ssh(:,:,Kmm)+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying) 147 148 ELSE 148 CALL iom_put( "ssh" , ssh(:,:,Kmm) ) ! sea surface height 149 ENDIF 149 CALL iom_put( "ssh" , ssh(:,:,Kmm) ) ! sea surface height 150 ENDIF 151 152 !!an 153 IF( iom_use("ht") ) & ! water column at t-point 154 CALL iom_put( "ht" , ht_0(:,:) + ssh(:,:,Kmm) ) 155 ! 156 IF( iom_use("hu") ) THEN ! water column at u-point 157 z2d(:,:) = 0._wp 158 DO_2D_10_10 159 z2d(ji,jj) = 0.5_wp * ( e3t(ji ,jj,1,Kmm) * e1e2t(ji ,jj) & 160 & + e3t(ji+1,jj,1,Kmm) * e1e2t(ji+1,jj) ) * r1_e1e2u(ji,jj) 161 END_2D 162 CALL lbc_lnk( 'diawri', z2d, 'U', 1._wp ) 163 CALL iom_put( "hu", z2d ) 164 ENDIF 165 ! 166 IF( iom_use("hv") ) THEN ! water column at v-point 167 z2d(:,:) = 0._wp 168 DO_2D_10_10 169 z2d(ji,jj) = 0.5_wp * ( e3t(ji,jj+1,1,Kmm) * e1e2t(ji,jj+1) & 170 & + e3t(ji,jj ,1,Kmm) * e1e2t(ji,jj ) ) * r1_e1e2v(ji,jj) 171 END_2D 172 CALL lbc_lnk( 'diawri', z2d, 'V', 1._wp ) 173 CALL iom_put( "hv", z2d ) 174 ENDIF 175 ! 176 IF( iom_use("hf") ) THEN ! water column at f-point 177 z2d(:,:) = 0._wp 178 DO_2D_10_10 179 z2d(ji,jj) = 0.25_wp * ( e3t(ji,jj+1,1,Kmm) * e1e2t(ji,jj+1) + e3t(ji+1,jj+1,1,Kmm) * e1e2t(ji+1,jj+1) & 180 & + e3t(ji,jj ,1,Kmm) * e1e2t(ji,jj ) + e3t(ji+1,jj ,1,Kmm) * e1e2t(ji+1,jj ) ) * r1_e1e2f(ji,jj) 181 END_2D 182 CALL lbc_lnk( 'diawri', z2d, 'F', 1._wp ) 183 CALL iom_put( "hf", z2d ) 184 ENDIF 185 !!an 150 186 151 187 IF( iom_use("wetdep") ) & ! wet depth 152 188 CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Kmm) ) 153 154 CALL iom_put( "toce", ts(:,:,:,jp_tem,Kmm) ) ! 3D temperature155 CALL iom_put( "sst", ts(:,:,1,jp_tem,Kmm) ) ! surface temperature156 IF ( iom_use("sbt") ) THEN157 DO_2D_11_11158 ikbot = mbkt(ji,jj)159 z2d(ji,jj) = ts(ji,jj,ikbot,jp_tem,Kmm)160 END_2D161 CALL iom_put( "sbt", z2d ) ! bottom temperature162 ENDIF163 164 CALL iom_put( "soce", ts(:,:,:,jp_sal,Kmm) ) ! 3D salinity165 CALL iom_put( "sss", ts(:,:,1,jp_sal,Kmm) ) ! surface salinity166 IF ( iom_use("sbs") ) THEN167 DO_2D_11_11168 ikbot = mbkt(ji,jj)169 z2d(ji,jj) = ts(ji,jj,ikbot,jp_sal,Kmm)170 END_2D171 CALL iom_put( "sbs", z2d ) ! bottom salinity172 ENDIF173 189 174 190 IF ( iom_use("taubot") ) THEN ! bottom stress … … 186 202 CALL iom_put( "taubot", z2d ) 187 203 ENDIF 188 189 CALL iom_put( "uoce", uu(:,:,:,Kmm) ) ! 3D i-current 190 CALL iom_put( "ssu", uu(:,:,1,Kmm) ) ! surface i-current 191 IF ( iom_use("sbu") ) THEN 192 DO_2D_11_11 193 ikbot = mbku(ji,jj) 194 z2d(ji,jj) = uu(ji,jj,ikbot,Kmm) 204 ! 205 CALL iom_put( "ssu" , uu(:,:,1,Kmm) ) ! surface i-current 206 CALL iom_put( "ssv" , vv(:,:,1,Kmm) ) ! surface j-current 207 CALL iom_put( "woce", ww ) ! vertical velocity 208 ! 209 210 IF ( iom_use("sKE") ) THEN ! surface kinetic energy at T point 211 z2d(:,:) = 0._wp 212 DO_2D_00_00 213 z2d(ji,jj) = 0.25_wp * ( uu(ji ,jj,1,Kmm) * uu(ji ,jj,1,Kmm) * e1e2u(ji ,jj) * e3u(ji ,jj,1,Kmm) & 214 & + uu(ji-1,jj,1,Kmm) * uu(ji-1,jj,1,Kmm) * e1e2u(ji-1,jj) * e3u(ji-1,jj,1,Kmm) & 215 & + vv(ji,jj ,1,Kmm) * vv(ji,jj ,1,Kmm) * e1e2v(ji,jj ) * e3v(ji,jj ,1,Kmm) & 216 & + vv(ji,jj-1,1,Kmm) * vv(ji,jj-1,1,Kmm) * e1e2v(ji,jj-1) * e3v(ji,jj-1,1,Kmm) ) & 217 & * r1_e1e2t(ji,jj) / e3t(ji,jj,1,Kmm) * tmask(ji,jj,1) 195 218 END_2D 196 CALL iom_put( "sbu", z2d ) ! bottom i-current 219 ! 220 CALL lbc_lnk( 'diawri', z2d, 'T', 1. ) 221 IF ( iom_use("sKE" ) ) CALL iom_put( "sKE" , z2d ) 222 223 ENDIF 224 225 !!an sKEf 226 IF ( iom_use("sKEf") ) THEN ! surface kinetic energy at F point 227 z2d(:,:) = 0._wp ! CAUTION : only valid in SWE, not with bathymetry 228 DO_2D_00_00 229 z2d(ji,jj) = 0.25_wp * ( uu(ji,jj ,1,Kmm) * uu(ji,jj ,1,Kmm) * e1e2u(ji,jj ) * e3u(ji,jj ,1,Kmm) & 230 & + uu(ji,jj+1,1,Kmm) * uu(ji,jj+1,1,Kmm) * e1e2u(ji,jj+1) * e3u(ji,jj+1,1,Kmm) & 231 & + vv(ji ,jj,1,Kmm) * vv(ji,jj ,1,Kmm) * e1e2v(ji ,jj) * e3v(ji ,jj,1,Kmm) & 232 & + vv(ji+1,jj,1,Kmm) * vv(ji+1,jj,1,Kmm) * e1e2v(ji+1,jj) * e3v(ji+1,jj,1,Kmm) ) & 233 & * r1_e1e2f(ji,jj) / e3f(ji,jj,1) * ssfmask(ji,jj) 234 END_2D 235 ! 236 CALL lbc_lnk( 'diawri', z2d, 'F', 1. ) 237 CALL iom_put( "sKEf", z2d ) 238 ENDIF 239 !!an 240 ! 241 CALL iom_put( "hdiv", hdiv ) ! Horizontal divergence 242 ! 243 ! Output of vorticity terms 244 IF ( iom_use("relvor") .OR. iom_use("plavor") .OR. & 245 & iom_use("relpotvor") .OR. iom_use("abspotvor") .OR. & 246 & iom_use("Ens") ) THEN 247 ! 248 z2d(:,:) = 0._wp 249 ze3 = 0._wp 250 DO_2D_10_10 251 z2d(ji,jj) = ( e2v(ji+1,jj ) * vv(ji+1,jj ,1,Kmm) - e2v(ji,jj) * vv(ji,jj,1,Kmm) & 252 & - e1u(ji ,jj+1) * uu(ji ,jj+1,1,Kmm) + e1u(ji,jj) * uu(ji,jj,1,Kmm) ) * r1_e1e2f(ji,jj) 253 END_2D 254 CALL lbc_lnk( 'diawri', z2d, 'F', 1. ) 255 CALL iom_put( "relvor", z2d ) ! relative vorticity ( zeta ) 256 ! 257 CALL iom_put( "plavor", ff_f ) ! planetary vorticity ( f ) 258 ! 259 DO_2D_10_10 260 ze3 = ( e3t(ji,jj+1,1,Kmm) * e1e2t(ji,jj+1) + e3t(ji+1,jj+1,1,Kmm) * e1e2t(ji+1,jj+1) & 261 & + e3t(ji,jj ,1,Kmm) * e1e2t(ji,jj ) + e3t(ji+1,jj ,1,Kmm) * e1e2t(ji+1,jj ) ) * r1_e1e2f(ji,jj) 262 IF( ze3 /= 0._wp ) THEN ; ze3 = 4._wp / ze3 263 ELSE ; ze3 = 0._wp 264 ENDIF 265 z2d(ji,jj) = ze3 * z2d(ji,jj) 266 END_2D 267 CALL lbc_lnk( 'diawri', z2d, 'F', 1. ) 268 CALL iom_put( "relpotvor", z2d ) ! relative potential vorticity (zeta/h) 269 ! 270 DO_2D_10_10 271 ze3 = ( e3t(ji,jj+1,1,Kmm) * e1e2t(ji,jj+1) + e3t(ji+1,jj+1,1,Kmm) * e1e2t(ji+1,jj+1) & 272 & + e3t(ji,jj ,1,Kmm) * e1e2t(ji,jj ) + e3t(ji+1,jj ,1,Kmm) * e1e2t(ji+1,jj ) ) * r1_e1e2f(ji,jj) 273 IF( ze3 /= 0._wp ) THEN ; ze3 = 4._wp / ze3 274 ELSE ; ze3 = 0._wp 275 ENDIF 276 z2d(ji,jj) = ze3 * ff_f(ji,jj) + z2d(ji,jj) 277 END_2D 278 CALL lbc_lnk( 'diawri', z2d, 'F', 1. ) 279 CALL iom_put( "abspotvor", z2d ) ! absolute potential vorticity ( q ) 280 ! 281 DO_2D_10_10 282 z2d(ji,jj) = 0.5_wp * z2d(ji,jj) * z2d(ji,jj) 283 END_2D 284 CALL lbc_lnk( 'diawri', z2d, 'F', 1. ) 285 CALL iom_put( "Ens", z2d ) ! potential enstrophy ( 1/2*q2 ) 286 ! 197 287 ENDIF 198 288 199 CALL iom_put( "voce", vv(:,:,:,Kmm) ) ! 3D j-current 200 CALL iom_put( "ssv", vv(:,:,1,Kmm) ) ! surface j-current 201 IF ( iom_use("sbv") ) THEN 202 DO_2D_11_11 203 ikbot = mbkv(ji,jj) 204 z2d(ji,jj) = vv(ji,jj,ikbot,Kmm) 205 END_2D 206 CALL iom_put( "sbv", z2d ) ! bottom j-current 207 ENDIF 208 209 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 212 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 213 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 214 z2d(:,:) = rho0 * e1e2t(:,:) 215 DO jk = 1, jpk 216 z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) 217 END DO 218 CALL iom_put( "w_masstr" , z3d ) 219 IF( iom_use('w_masstr2') ) CALL iom_put( "w_masstr2", z3d(:,:,:) * z3d(:,:,:) ) 220 ENDIF 221 ! 222 IF( ln_zad_Aimp ) ww = ww - wi ! Remove implicit part of vertical velocity that was added for diagnostic output 223 224 CALL iom_put( "avt" , avt ) ! T vert. eddy diff. coef. 225 CALL iom_put( "avs" , avs ) ! S vert. eddy diff. coef. 226 CALL iom_put( "avm" , avm ) ! T vert. eddy visc. coef. 227 228 IF( iom_use('logavt') ) CALL iom_put( "logavt", LOG( MAX( 1.e-20_wp, avt(:,:,:) ) ) ) 229 IF( iom_use('logavs') ) CALL iom_put( "logavs", LOG( MAX( 1.e-20_wp, avs(:,:,:) ) ) ) 230 231 IF ( iom_use("sstgrad") .OR. iom_use("sstgrad2") ) THEN 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 239 CALL lbc_lnk( 'diawri', z2d, 'T', 1. ) 240 CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient 241 z2d(:,:) = SQRT( z2d(:,:) ) 242 CALL iom_put( "sstgrad" , z2d ) ! module of sst gradient 243 ENDIF 244 245 ! heat and salt contents 246 IF( iom_use("heatc") ) THEN 247 z2d(:,:) = 0._wp 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 251 CALL iom_put( "heatc", rho0_rcp * z2d ) ! vertically integrated heat content (J/m2) 252 ENDIF 253 254 IF( iom_use("saltc") ) THEN 255 z2d(:,:) = 0._wp 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 259 CALL iom_put( "saltc", rho0 * z2d ) ! vertically integrated salt content (PSU*kg/m2) 260 ENDIF 261 ! 262 IF ( iom_use("eken") ) THEN 263 z3d(:,:,jpk) = 0._wp 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 271 CALL lbc_lnk( 'diawri', z3d, 'T', 1. ) 272 CALL iom_put( "eken", z3d ) ! kinetic energy 273 ENDIF 274 ! 275 CALL iom_put( "hdiv", hdiv ) ! Horizontal divergence 276 ! 277 IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 278 z3d(:,:,jpk) = 0.e0 279 z2d(:,:) = 0.e0 280 DO jk = 1, jpkm1 281 z3d(:,:,jk) = rho0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 282 z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 283 END DO 284 CALL iom_put( "u_masstr" , z3d ) ! mass transport in i-direction 285 CALL iom_put( "u_masstr_vint", z2d ) ! mass transport in i-direction vertical sum 286 ENDIF 287 288 IF( iom_use("u_heattr") ) THEN 289 z2d(:,:) = 0._wp 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 293 CALL lbc_lnk( 'diawri', z2d, 'U', -1. ) 294 CALL iom_put( "u_heattr", 0.5*rcp * z2d ) ! heat transport in i-direction 295 ENDIF 296 297 IF( iom_use("u_salttr") ) THEN 298 z2d(:,:) = 0.e0 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 302 CALL lbc_lnk( 'diawri', z2d, 'U', -1. ) 303 CALL iom_put( "u_salttr", 0.5 * z2d ) ! heat transport in i-direction 304 ENDIF 305 306 307 IF( iom_use("v_masstr") .OR. iom_use("v_heattr") .OR. iom_use("v_salttr") ) THEN 308 z3d(:,:,jpk) = 0.e0 309 DO jk = 1, jpkm1 310 z3d(:,:,jk) = rho0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 311 END DO 312 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction 313 ENDIF 314 315 IF( iom_use("v_heattr") ) THEN 316 z2d(:,:) = 0.e0 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 320 CALL lbc_lnk( 'diawri', z2d, 'V', -1. ) 321 CALL iom_put( "v_heattr", 0.5*rcp * z2d ) ! heat transport in j-direction 322 ENDIF 323 324 IF( iom_use("v_salttr") ) THEN 325 z2d(:,:) = 0._wp 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 329 CALL lbc_lnk( 'diawri', z2d, 'V', -1. ) 330 CALL iom_put( "v_salttr", 0.5 * z2d ) ! heat transport in j-direction 331 ENDIF 332 333 IF( iom_use("tosmint") ) THEN 334 z2d(:,:) = 0._wp 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 338 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 339 CALL iom_put( "tosmint", rho0 * z2d ) ! Vertical integral of temperature 340 ENDIF 341 IF( iom_use("somint") ) THEN 342 z2d(:,:)=0._wp 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 346 CALL lbc_lnk( 'diawri', z2d, 'T', -1. ) 347 CALL iom_put( "somint", rho0 * z2d ) ! Vertical integral of salinity 348 ENDIF 349 350 CALL iom_put( "bn2", rn2 ) ! Brunt-Vaisala buoyancy frequency (N^2) 351 ! 352 353 IF (ln_dia25h) CALL dia_25h( kt, Kmm ) ! 25h averaging 354 289 ! 355 290 IF( ln_timing ) CALL timing_stop('dia_wri') 356 291 !
Note: See TracChangeset
for help on using the changeset viewer.