- Timestamp:
- 2020-11-26T10:52:00+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13508_HPC-09_loop_fusion/src/OCE/TRA/traadv_mus_lf.F90
r13881 r13882 129 129 REAL(wp) :: zv, z0v, z0w ! - - 130 130 REAL(wp) :: zzwx, zzwxm1, zzwxp1, zzwy, zzwym1, zzwyp1 131 REAL(wp) :: zzwz, zzwzp1, zzwzp2, zzslpz, zzslpzp1 132 REAL(wp) :: zzslpx, zzslpx_ip1, zzslpy, zzslpy_jp1 133 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwx, zwy, zwz 131 REAL(wp) :: zzslpx, zzslpxp1, zzslpy, zzslpyp1 132 REAL(wp), TARGET, DIMENSION(jpi,jpj) :: zzwz_buf, zzwzp1_buf, zzwzp2_buf 133 REAL(wp), TARGET, DIMENSION(jpi,jpj) :: zzslpz_buf, zzslpzp1_buf 134 REAL(wp), POINTER, DIMENSION(:,:) :: tmp, zzwz_ptr, zzwzp1_ptr, zzwzp2_ptr 135 REAL(wp), POINTER, DIMENSION(:,:) :: zzslpz_ptr, zzslpzp1_ptr 136 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwz, zwx, zwy ! 3D workspace 134 137 !!---------------------------------------------------------------------- 135 138 ! … … 167 170 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 168 171 ! 172 zzwz_ptr => zzwz_buf 173 zzwzp1_ptr => zzwzp1_buf 174 zzwzp2_ptr => zzwzp2_buf 175 zzslpz_ptr => zzslpz_buf 176 zzslpzp1_ptr => zzslpzp1_buf 177 ! 169 178 DO jn = 1, kjpt !== loop over the tracers ==! 170 179 ! 171 ! !* Horizontal advective fluxes172 !173 !!----------------------------------------------------------------------174 180 zwx(:,:,jpk) = 0._wp ! bottom values 175 181 zwy(:,:,jpk) = 0._wp 176 182 zwz(:,:, 1 ) = 0._wp ! surface & bottom boundary conditions 177 183 zwz(:,:,jpk) = 0._wp 178 184 ! !* Horizontal advective fluxes 185 ! 186 !!---------------------------------------------------------------------- 179 187 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 180 188 !-- first guess of the slopes 189 initial_slop_i(zzwxm1, ji-1) 181 190 initial_slop_i(zzwx, ji) 182 initial_slop_i(zzwxm1, ji-1)183 191 initial_slop_i(zzwxp1, ji+1) 184 192 193 initial_slop_j(zzwym1, jj-1) 185 194 initial_slop_j(zzwy, jj) 186 initial_slop_j(zzwym1, jj-1)187 195 initial_slop_j(zzwyp1, jj+1) 188 196 !-- Slopes of tracer 189 197 tracer_slop(zzslpx, zzwx, zzwxm1) 190 tracer_slop(zzslpx _ip1, zzwxp1, zzwx)198 tracer_slop(zzslpxp1, zzwxp1, zzwx) 191 199 tracer_slop(zzslpy, zzwy, zzwym1) 192 tracer_slop(zzslpy _jp1, zzwyp1, zzwy)200 tracer_slop(zzslpyp1, zzwyp1, zzwy) 193 201 !-- Slopes limitation 194 202 limitation_slop(zzslpx, zzslpx, zzwxm1, zzwx) 195 limitation_slop(zzslpx _ip1, zzslpx_ip1, zzwx, zzwxp1)203 limitation_slop(zzslpxp1, zzslpxp1, zzwx, zzwxp1) 196 204 limitation_slop(zzslpy, zzslpy, zzwym1, zzwy) 197 limitation_slop(zzslpy _jp1, zzslpy_jp1, zzwy, zzwyp1)205 limitation_slop(zzslpyp1, zzslpyp1, zzwy, zzwyp1) 198 206 !-- MUSCL horizontal advective fluxes 199 vertical_adv_flux_i(zwx(ji,jj,jk), jk, zzslpx, zzslpx _ip1)200 vertical_adv_flux_j(zwy(ji,jj,jk), jk, zzslpy, zzslpy _jp1)207 vertical_adv_flux_i(zwx(ji,jj,jk), jk, zzslpx, zzslpxp1) 208 vertical_adv_flux_j(zwy(ji,jj,jk), jk, zzslpy, zzslpyp1) 201 209 END_3D 202 210 ! … … 207 215 END_3D 208 216 ! !* Vertical advective fluxes 209 !210 217 DO_2D( 0, 0, 0, 0 ) 211 218 !-- first guess of the slopes 212 initial_slop_k(zzwz p1, 2)213 initial_slop_k(zzwzp 2, 3)219 initial_slop_k(zzwz_ptr(ji,jj), 2) 220 initial_slop_k(zzwzp1_ptr(ji,jj), 3) 214 221 !-- Slopes of tracer 215 tracer_slop(zzslpz p1, zzwzp1, zzwzp2)222 tracer_slop(zzslpz_ptr(ji,jj), zzwz_ptr(ji,jj), zzwzp1_ptr(ji,jj)) 216 223 !-- Slopes limitation 217 limitation_slop(zzslpz p1, zzslpzp1, zzwzp2, zzwzp1)224 limitation_slop(zzslpz_ptr(ji,jj), zzslpz_ptr(ji,jj), zzwzp1_ptr(ji,jj), zzwz_ptr(ji,jj)) 218 225 !-- vertical advective flux 219 vertical_adv_flux(zwz(ji,jj,2), 1, 0, zzslpz p1)226 vertical_adv_flux(zwz(ji,jj,2), 1, 0, zzslpz_ptr(ji,jj)) 220 227 END_2D 221 DO_3D( 0, 0, 0, 0, 2, jpk-3 ) 222 !-- first guess of the slopes 223 initial_slop_k(zzwz, jk) 224 initial_slop_k(zzwzp1, jk+1) 225 initial_slop_k(zzwzp2, jk+2) 228 229 DO jk = 2, jpk-3 230 DO_2D( 0, 0, 0, 0 ) 231 !-- first guess of the slopes 232 initial_slop_k(zzwzp2_ptr(ji,jj), jk+2) 233 !-- Slopes of tracer 234 tracer_slop(zzslpzp1_ptr(ji,jj), zzwzp1_ptr(ji,jj), zzwzp2_ptr(ji,jj)) 235 !-- Slopes limitation 236 limitation_slop(zzslpzp1_ptr(ji,jj), zzslpzp1_ptr(ji,jj), zzwzp2_ptr(ji,jj), zzwzp1_ptr(ji,jj)) 237 !-- vertical advective flux 238 vertical_adv_flux(zwz(ji,jj,jk+1), jk, zzslpz_ptr(ji,jj), zzslpzp1_ptr(ji,jj)) 239 END_2D 240 tmp => zzwzp1_ptr 241 zzwzp1_ptr => zzwzp2_ptr 242 zzwzp2_ptr => tmp 243 244 tmp => zzslpz_ptr 245 zzslpz_ptr => zzslpzp1_ptr 246 zzslpzp1_ptr => tmp 247 END DO 248 DO_2D( 0, 0, 0, 0 ) 226 249 !-- Slopes of tracer 227 tracer_slop(zzslpz, zzwz, zzwzp1) 228 tracer_slop(zzslpzp1, zzwzp1, zzwzp2) 250 tracer_slop(zzslpzp1_ptr(ji,jj), zzwzp1_ptr(ji,jj), 0) 229 251 !-- Slopes limitation 230 limitation_slop(zzslpz, zzslpz, zzwzp1, zzwz) 231 limitation_slop(zzslpzp1, zzslpzp1, zzwzp2, zzwzp1) 252 limitation_slop(zzslpzp1_ptr(ji,jj), zzslpzp1_ptr(ji,jj), 0, zzwzp1_ptr(ji,jj)) 232 253 !-- vertical advective flux 233 vertical_adv_flux(zwz(ji,jj,jk+1), jk, zzslpz, zzslpzp1) 234 END_3D 235 DO_2D( 0, 0, 0, 0 ) 236 !-- first guess of the slopes 237 initial_slop_k(zzwz, jpk-2) 238 initial_slop_k(zzwzp1, jpk-1) 239 zzwzp2 = 0 240 !-- Slopes of tracer 241 tracer_slop(zzslpz, zzwz, zzwzp1) 242 tracer_slop(zzslpzp1, zzwzp1, zzwzp2) 243 !-- Slopes limitation 244 limitation_slop(zzslpz, zzslpz, zzwzp1, zzwz) 245 limitation_slop(zzslpzp1, zzslpzp1, zzwzp2, zzwzp1) 246 !-- vertical advective flux 247 vertical_adv_flux(zwz(ji,jj,jpk-1), jpk-2, zzslpz, zzslpzp1) 254 vertical_adv_flux(zwz(ji,jj,jpk-1), jpk-2, zzslpz_ptr(ji,jj), zzslpzp1_ptr(ji,jj)) 248 255 END_2D 249 256
Note: See TracChangeset
for help on using the changeset viewer.