Changeset 14631 for NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_lap_blp.F90
- Timestamp:
- 2021-03-23T17:55:26+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_lap_blp.F90
r14576 r14631 103 103 ! 104 104 INTEGER :: ji, jj, jk, jn ! dummy loop indices 105 ! NOTE: [halo1-halo2] 106 INTEGER :: iij 105 107 REAL(wp) :: zsign ! local scalars 106 108 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: ztu, ztv, zaheeu, zaheev … … 121 123 ENDIF 122 124 ! 125 ! NOTE: [halo1-halo2] 126 ! Define pt_rhs halo points for multi-point haloes in bilaplacian case 127 IF( nldf_tra == np_blp .AND. kpass == 1 ) THEN ; iij = nn_hls 128 ELSE ; iij = 1 129 ENDIF 130 123 131 ! !== Initialization of metric arrays used for all tracers ==! 124 132 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 126 134 ENDIF 127 135 128 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) !== First derivative (gradient) ==! 136 ! NOTE: [halo1-halo2] 137 DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) !== First derivative (gradient) ==! 129 138 zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) !!gm * umask(ji,jj,jk) pah masked! 130 139 zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) !!gm * vmask(ji,jj,jk) … … 135 144 ! ! =========== ! 136 145 ! 137 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) !== First derivative (gradient) ==! 146 ! NOTE: [halo1-halo2] 147 DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) !== First derivative (gradient) ==! 138 148 ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) 139 149 ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 140 150 END_3D 141 151 IF( ln_zps ) THEN ! set gradient at bottom/top ocean level 142 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) ! bottom 152 ! NOTE: [halo1-halo2] 153 DO_2D( iij, iij-1, iij, iij-1 ) ! bottom 143 154 ztu(ji,jj,mbku(ji,jj)) = zaheeu(ji,jj,mbku(ji,jj)) * pgu(ji,jj,jn) 144 155 ztv(ji,jj,mbkv(ji,jj)) = zaheev(ji,jj,mbkv(ji,jj)) * pgv(ji,jj,jn) 145 156 END_2D 146 157 IF( ln_isfcav ) THEN ! top in ocean cavities only 147 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 158 ! NOTE: [halo1-halo2] 159 DO_2D( iij, iij-1, iij, iij-1 ) 148 160 IF( miku(ji,jj) > 1 ) ztu(ji,jj,miku(ji,jj)) = zaheeu(ji,jj,miku(ji,jj)) * pgui(ji,jj,jn) 149 161 IF( mikv(ji,jj) > 1 ) ztv(ji,jj,mikv(ji,jj)) = zaheev(ji,jj,mikv(ji,jj)) * pgvi(ji,jj,jn) … … 152 164 ENDIF 153 165 ! 154 DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) !== Second derivative (divergence) added to the general tracer trends ==! 155 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & 156 & + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) & 166 ! NOTE: [halo1-halo2] 167 DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 ) !== Second derivative (divergence) added to the general tracer trends ==! 168 ! NOTE: [halo1-halo2] 169 ! Extra brackets required to ensure consistent floating point arithmetic for different nn_hls for bilaplacian 170 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ( (ztu(ji,jj,jk) - ztu(ji-1,jj,jk)) & 171 & + (ztv(ji,jj,jk) - ztv(ji,jj-1,jk)) ) & 157 172 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 158 173 END_3D … … 229 244 END SELECT 230 245 ! 231 ! [comm_cleanup] 246 ! [comm_cleanup] 232 247 IF (nn_hls.EQ.1) CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp ) ! Lateral boundary conditions (unchanged sign) 233 248 ! ! Partial top/bottom cell: GRADh( zlap )
Note: See TracChangeset
for help on using the changeset viewer.