Changeset 15249 for NEMO/trunk/src/OCE/DIA
- Timestamp:
- 2021-09-13T11:59:09+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/DIA/dia25h.F90
r12489 r15249 32 32 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: en_25h , rmxln_25h 33 33 34 !! * Substitutions 35 # include "do_loop_substitute.h90" 34 36 !!---------------------------------------------------------------------- 35 37 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 51 53 INTEGER :: ios ! Local integer output status for namelist read 52 54 INTEGER :: ierror ! Local integer for memory allocation 55 INTEGER :: ji, jj, jk 53 56 ! 54 57 NAMELIST/nam_dia25h/ ln_dia25h … … 73 76 ! ------------------- ! 74 77 ! ! ocean arrays 75 ALLOCATE( tn_25h ( jpi,jpj,jpk), sn_25h (jpi,jpj,jpk), sshn_25h(jpi,jpj) , &76 & un_25h ( jpi,jpj,jpk), vn_25h (jpi,jpj,jpk), wn_25h(jpi,jpj,jpk), &77 & avt_25h( jpi,jpj,jpk), avm_25h(jpi,jpj,jpk), STAT=ierror )78 ALLOCATE( tn_25h (A2D(0),jpk), sn_25h (A2D(0),jpk), sshn_25h(A2D(0)) , & 79 & un_25h (A2D(0),jpk), vn_25h (A2D(0),jpk), wn_25h(A2D(0),jpk), & 80 & avt_25h(A2D(0),jpk), avm_25h(A2D(0),jpk), STAT=ierror ) 78 81 IF( ierror > 0 ) THEN 79 82 CALL ctl_stop( 'dia_25h: unable to allocate ocean arrays' ) ; RETURN 80 83 ENDIF 81 84 IF( ln_zdftke ) THEN ! TKE physics 82 ALLOCATE( en_25h( jpi,jpj,jpk), STAT=ierror )85 ALLOCATE( en_25h(A2D(0),jpk), STAT=ierror ) 83 86 IF( ierror > 0 ) THEN 84 87 CALL ctl_stop( 'dia_25h: unable to allocate en_25h' ) ; RETURN … … 86 89 ENDIF 87 90 IF( ln_zdfgls ) THEN ! GLS physics 88 ALLOCATE( en_25h( jpi,jpj,jpk), rmxln_25h(jpi,jpj,jpk), STAT=ierror )91 ALLOCATE( en_25h(A2D(0),jpk), rmxln_25h(A2D(0),jpk), STAT=ierror ) 89 92 IF( ierror > 0 ) THEN 90 93 CALL ctl_stop( 'dia_25h: unable to allocate en_25h and rmxln_25h' ) ; RETURN … … 94 97 ! 2 - Assign Initial Values ! 95 98 ! ------------------------- ! 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 (:,:,:,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 avt_25h (:,:,:) = avt (:,:,:) 103 avm_25h (:,:,:) = avm (:,:,:) 99 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) 100 DO_3D( 0, 0, 0, 0, 1, jpk ) 101 tn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_tem,Kbb) 102 sn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_sal,Kbb) 103 un_25h (ji,jj,jk) = uu (ji,jj,jk,Kbb) 104 vn_25h (ji,jj,jk) = vv (ji,jj,jk,Kbb) 105 avt_25h(ji,jj,jk) = avt(ji,jj,jk) 106 avm_25h(ji,jj,jk) = avm(ji,jj,jk) 107 END_3D 108 DO_2D( 0, 0, 0, 0 ) 109 sshn_25h(ji,jj) = ssh(ji,jj,Kbb) 110 END_2D 104 111 IF( ln_zdftke ) THEN 105 en_25h(:,:,:) = en(:,:,:) 112 DO_3D( 0, 0, 0, 0, 1, jpk ) 113 en_25h(ji,jj,jk) = en(ji,jj,jk) 114 END_3D 106 115 ENDIF 107 116 IF( ln_zdfgls ) THEN 108 en_25h (:,:,:) = en (:,:,:) 109 rmxln_25h(:,:,:) = hmxl_n(:,:,:) 117 DO_3D( 0, 0, 0, 0, 1, jpk ) 118 en_25h (ji,jj,jk) = en (ji,jj,jk) 119 rmxln_25h(ji,jj,jk) = hmxl_n(ji,jj,jk) 120 END_3D 110 121 ENDIF 111 122 #if defined key_si3 … … 132 143 REAL(wp) :: zsto, zout, zmax, zjulian, zmdi ! local scalars 133 144 INTEGER :: i_steps ! no of timesteps per hour 134 REAL(wp), DIMENSION( jpi,jpj ):: zw2d, un_dm, vn_dm ! workspace135 REAL(wp), DIMENSION( jpi,jpj,jpk):: zw3d ! workspace136 REAL(wp), DIMENSION( jpi,jpj,3):: zwtmb ! workspace145 REAL(wp), DIMENSION(A2D(0) ) :: zw2d, un_dm, vn_dm ! workspace 146 REAL(wp), DIMENSION(A2D(0),jpk) :: zw3d ! workspace 147 REAL(wp), DIMENSION(A2D(0),3) :: zwtmb ! workspace 137 148 !!---------------------------------------------------------------------- 138 149 … … 151 162 ! wn_25h could not be initialised in dia_25h_init, so we do it here instead 152 163 IF( kt == nn_it000 ) THEN 153 wn_25h(:,:,:) = ww(:,:,:) 164 DO_3D( 0, 0, 0, 0, 1, jpk ) 165 wn_25h(ji,jj,jk) = ww(ji,jj,jk) 166 END_3D 154 167 ENDIF 155 168 … … 162 175 ENDIF 163 176 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 (:,:,:) 170 avt_25h (:,:,:) = avt_25h (:,:,:) + avt (:,:,:) 171 avm_25h (:,:,:) = avm_25h (:,:,:) + avm (:,:,:) 177 DO_3D( 0, 0, 0, 0, 1, jpk ) 178 tn_25h (ji,jj,jk) = tn_25h (ji,jj,jk) + ts (ji,jj,jk,jp_tem,Kmm) 179 sn_25h (ji,jj,jk) = sn_25h (ji,jj,jk) + ts (ji,jj,jk,jp_sal,Kmm) 180 un_25h (ji,jj,jk) = un_25h (ji,jj,jk) + uu (ji,jj,jk,Kmm) 181 vn_25h (ji,jj,jk) = vn_25h (ji,jj,jk) + vv (ji,jj,jk,Kmm) 182 wn_25h (ji,jj,jk) = wn_25h (ji,jj,jk) + ww (ji,jj,jk) 183 avt_25h (ji,jj,jk) = avt_25h (ji,jj,jk) + avt(ji,jj,jk) 184 avm_25h (ji,jj,jk) = avm_25h (ji,jj,jk) + avm(ji,jj,jk) 185 END_3D 186 DO_2D( 0, 0, 0, 0 ) 187 sshn_25h(ji,jj) = sshn_25h(ji,jj) + ssh(ji,jj,Kmm) 188 END_2D 172 189 IF( ln_zdftke ) THEN 173 en_25h(:,:,:) = en_25h (:,:,:) + en(:,:,:) 190 DO_3D( 0, 0, 0, 0, 1, jpk ) 191 en_25h(ji,jj,jk) = en_25h(ji,jj,jk) + en(ji,jj,jk) 192 END_3D 174 193 ENDIF 175 194 IF( ln_zdfgls ) THEN 176 en_25h (:,:,:) = en_25h (:,:,:) + en (:,:,:) 177 rmxln_25h(:,:,:) = rmxln_25h(:,:,:) + hmxl_n(:,:,:) 195 DO_3D( 0, 0, 0, 0, 1, jpk ) 196 en_25h (ji,jj,jk) = en_25h (ji,jj,jk) + en (ji,jj,jk) 197 rmxln_25h(ji,jj,jk) = rmxln_25h(ji,jj,jk) + hmxl_n(ji,jj,jk) 198 END_3D 178 199 ENDIF 179 200 cnt_25h = cnt_25h + 1 … … 212 233 zmdi=1.e+20 !missing data indicator for masking 213 234 ! write tracers (instantaneous) 214 zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 235 DO_3D( 0, 0, 0, 0, 1, jpk ) 236 zw3d(ji,jj,jk) = tn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 237 END_3D 215 238 CALL iom_put("temper25h", zw3d) ! potential temperature 216 zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 239 DO_3D( 0, 0, 0, 0, 1, jpk ) 240 zw3d(ji,jj,jk) = sn_25h(ji,jj,jk)*tmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 241 END_3D 217 242 CALL iom_put( "salin25h", zw3d ) ! salinity 218 zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 243 DO_2D( 0, 0, 0, 0 ) 244 zw2d(ji,jj) = sshn_25h(ji,jj)*tmask(ji,jj,1) + zmdi*(1.0-tmask(ji,jj,1)) 245 END_2D 219 246 IF( ll_wd ) THEN 220 247 CALL iom_put( "ssh25h", zw2d+ssh_ref ) ! sea surface … … 223 250 ENDIF 224 251 ! Write velocities (instantaneous) 225 zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 252 DO_3D( 0, 0, 0, 0, 1, jpk ) 253 zw3d(ji,jj,jk) = un_25h(ji,jj,jk)*umask(ji,jj,jk) + zmdi*(1.0-umask(ji,jj,jk)) 254 END_3D 226 255 CALL iom_put("vozocrtx25h", zw3d) ! i-current 227 zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 256 DO_3D( 0, 0, 0, 0, 1, jpk ) 257 zw3d(ji,jj,jk) = vn_25h(ji,jj,jk)*vmask(ji,jj,jk) + zmdi*(1.0-vmask(ji,jj,jk)) 258 END_3D 228 259 CALL iom_put("vomecrty25h", zw3d ) ! j-current 229 zw3d(:,:,:) = wn_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 260 DO_3D( 0, 0, 0, 0, 1, jpk ) 261 zw3d(ji,jj,jk) = wn_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 262 END_3D 230 263 CALL iom_put("vovecrtz25h", zw3d ) ! k-current 231 264 ! Write vertical physics 232 zw3d(:,:,:) = avt_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 265 DO_3D( 0, 0, 0, 0, 1, jpk ) 266 zw3d(ji,jj,jk) = avt_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 267 END_3D 233 268 CALL iom_put("avt25h", zw3d ) ! diffusivity 234 zw3d(:,:,:) = avm_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 269 DO_3D( 0, 0, 0, 0, 1, jpk ) 270 zw3d(ji,jj,jk) = avm_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 271 END_3D 235 272 CALL iom_put("avm25h", zw3d) ! viscosity 236 273 IF( ln_zdftke ) THEN 237 zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 274 DO_3D( 0, 0, 0, 0, 1, jpk ) 275 zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 276 END_3D 238 277 CALL iom_put("tke25h", zw3d) ! tke 239 278 ENDIF 240 279 IF( ln_zdfgls ) THEN 241 zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 280 DO_3D( 0, 0, 0, 0, 1, jpk ) 281 zw3d(ji,jj,jk) = en_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 282 END_3D 242 283 CALL iom_put("tke25h", zw3d) ! tke 243 zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 284 DO_3D( 0, 0, 0, 0, 1, jpk ) 285 zw3d(ji,jj,jk) = rmxln_25h(ji,jj,jk)*wmask(ji,jj,jk) + zmdi*(1.0-tmask(ji,jj,jk)) 286 END_3D 244 287 CALL iom_put( "mxln25h",zw3d) 245 288 ENDIF 246 289 ! 247 290 ! After the write reset the values to cnt=1 and sum values equal current value 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 (:,:,:) 254 avt_25h (:,:,:) = avt (:,:,:) 255 avm_25h (:,:,:) = avm (:,:,:) 291 DO_3D( 0, 0, 0, 0, 1, jpk ) 292 tn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_tem,Kmm) 293 sn_25h (ji,jj,jk) = ts (ji,jj,jk,jp_sal,Kmm) 294 un_25h (ji,jj,jk) = uu (ji,jj,jk,Kmm) 295 vn_25h (ji,jj,jk) = vv (ji,jj,jk,Kmm) 296 wn_25h (ji,jj,jk) = ww (ji,jj,jk) 297 avt_25h (ji,jj,jk) = avt(ji,jj,jk) 298 avm_25h (ji,jj,jk) = avm(ji,jj,jk) 299 END_3D 300 DO_2D( 0, 0, 0, 0 ) 301 sshn_25h(ji,jj) = ssh(ji,jj,Kmm) 302 END_2D 256 303 IF( ln_zdftke ) THEN 257 en_25h(:,:,:) = en(:,:,:) 304 DO_3D( 0, 0, 0, 0, 1, jpk ) 305 en_25h(ji,jj,jk) = en(ji,jj,jk) 306 END_3D 258 307 ENDIF 259 308 IF( ln_zdfgls ) THEN 260 en_25h (:,:,:) = en (:,:,:) 261 rmxln_25h(:,:,:) = hmxl_n(:,:,:) 309 DO_3D( 0, 0, 0, 0, 1, jpk ) 310 en_25h (ji,jj,jk) = en (ji,jj,jk) 311 rmxln_25h(ji,jj,jk) = hmxl_n(ji,jj,jk) 312 END_3D 262 313 ENDIF 263 314 cnt_25h = 1
Note: See TracChangeset
for help on using the changeset viewer.