Changeset 14834 for NEMO/trunk/src/OCE/DYN/dynadv_ubs.F90
- Timestamp:
- 2021-05-11T11:24:44+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/DYN/dynadv_ubs.F90
r14820 r14834 75 75 INTEGER :: ji, jj, jk ! dummy loop indices 76 76 REAL(wp) :: zui, zvj, zfuj, zfvi, zl_u, zl_v ! local scalars 77 REAL(wp), DIMENSION( jpi,jpj,jpk) :: zfu_t, zfu_f, zfu_uw, zfu78 REAL(wp), DIMENSION( jpi,jpj,jpk) :: zfv_t, zfv_f, zfv_vw, zfv, zfw79 REAL(wp), DIMENSION( jpi,jpj,jpk,2) :: zlu_uu, zlu_uv80 REAL(wp), DIMENSION( jpi,jpj,jpk,2) :: zlv_vv, zlv_vu77 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: zfu_t, zfu_f, zfu_uw, zfu 78 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: zfv_t, zfv_f, zfv_vw, zfv, zfw 79 REAL(wp), DIMENSION(A2D(nn_hls),jpk,2) :: zlu_uu, zlu_uv 80 REAL(wp), DIMENSION(A2D(nn_hls),jpk,2) :: zlv_vv, zlv_vu 81 81 !!---------------------------------------------------------------------- 82 82 ! 83 IF( kt == nit000 ) THEN 84 IF(lwp) WRITE(numout,*) 85 IF(lwp) WRITE(numout,*) 'dyn_adv_ubs : UBS flux form momentum advection' 86 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 83 IF( .NOT. l_istiled .OR. ntile == 1 ) THEN ! Do only on the first tile 84 IF( kt == nit000 ) THEN 85 IF(lwp) WRITE(numout,*) 86 IF(lwp) WRITE(numout,*) 'dyn_adv_ubs : UBS flux form momentum advection' 87 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 88 ENDIF 87 89 ENDIF 88 90 ! … … 105 107 ! ! =========================== ! 106 108 ! ! horizontal volume fluxes 107 zfu(:,:,jk) = e2u(:,:) * e3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) 108 zfv(:,:,jk) = e1v(:,:) * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) 109 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 110 zfu(ji,jj,jk) = e2u(ji,jj) * e3u(ji,jj,jk,Kmm) * puu(ji,jj,jk,Kmm) 111 zfv(ji,jj,jk) = e1v(ji,jj) * e3v(ji,jj,jk,Kmm) * pvv(ji,jj,jk,Kmm) 112 END_2D 109 113 ! 110 DO_2D( 0, 0, 0, 0) ! laplacian114 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! laplacian 111 115 ! round brackets added to fix the order of floating point operations 112 116 ! needed to ensure halo 1 - halo 2 compatibility 113 zlu_uu(ji,jj,jk,1) = ( (puu (ji+1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb)) + & 114 & (puu (ji-1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb)) ) * umask(ji ,jj ,jk) 115 zlv_vv(ji,jj,jk,1) = ( (pvv (ji ,jj+1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb)) + & 116 & (pvv (ji ,jj-1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb)) ) * vmask(ji ,jj ,jk) 117 zlu_uv(ji,jj,jk,1) = ( puu (ji ,jj+1,jk,Kbb) - puu (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 118 & - ( puu (ji ,jj ,jk,Kbb) - puu (ji ,jj-1,jk,Kbb) ) * fmask(ji ,jj-1,jk) 119 zlv_vu(ji,jj,jk,1) = ( pvv (ji+1,jj ,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 120 & - ( pvv (ji ,jj ,jk,Kbb) - pvv (ji-1,jj ,jk,Kbb) ) * fmask(ji-1,jj ,jk) 121 ! 122 zlu_uu(ji,jj,jk,2) = ( (zfu(ji+1,jj ,jk) - zfu(ji ,jj ,jk)) + & 123 & (zfu(ji-1,jj ,jk) - zfu(ji ,jj ,jk)) ) * umask(ji ,jj ,jk) 124 zlv_vv(ji,jj,jk,2) = ( (zfv(ji ,jj+1,jk) - zfv(ji ,jj ,jk)) + & 125 & (zfv(ji ,jj-1,jk) - zfv(ji ,jj ,jk)) ) * vmask(ji ,jj ,jk) 126 zlu_uv(ji,jj,jk,2) = ( zfu(ji ,jj+1,jk) - zfu(ji ,jj ,jk) ) * fmask(ji ,jj ,jk) & 127 & - ( zfu(ji ,jj ,jk) - zfu(ji ,jj-1,jk) ) * fmask(ji ,jj-1,jk) 128 zlv_vu(ji,jj,jk,2) = ( zfv(ji+1,jj ,jk) - zfv(ji ,jj ,jk) ) * fmask(ji ,jj ,jk) & 129 & - ( zfv(ji ,jj ,jk) - zfv(ji-1,jj ,jk) ) * fmask(ji-1,jj ,jk) 117 zlu_uu(ji,jj,jk,1) = ( ( puu (ji+1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb) & 118 & ) & ! bracket for halo 1 - halo 2 compatibility 119 & + ( puu (ji-1,jj ,jk,Kbb) - puu (ji ,jj ,jk,Kbb) & 120 & ) & ! bracket for halo 1 - halo 2 compatibility 121 & ) * umask(ji ,jj ,jk) 122 zlv_vv(ji,jj,jk,1) = ( ( pvv (ji ,jj+1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) & 123 & ) & ! bracket for halo 1 - halo 2 compatibility 124 & + ( pvv (ji ,jj-1,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) & 125 & ) & ! bracket for halo 1 - halo 2 compatibility 126 & ) * vmask(ji ,jj ,jk) 127 zlu_uv(ji,jj,jk,1) = ( puu (ji ,jj+1,jk,Kbb) - puu (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 128 & - ( puu (ji ,jj ,jk,Kbb) - puu (ji ,jj-1,jk,Kbb) ) * fmask(ji ,jj-1,jk) 129 zlv_vu(ji,jj,jk,1) = ( pvv (ji+1,jj ,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 130 & - ( pvv (ji ,jj ,jk,Kbb) - pvv (ji-1,jj ,jk,Kbb) ) * fmask(ji-1,jj ,jk) 131 ! 132 ! round brackets added to fix the order of floating point operations 133 ! needed to ensure halo 1 - halo 2 compatibility 134 zlu_uu(ji,jj,jk,2) = ( ( zfu(ji+1,jj ,jk) - zfu(ji ,jj ,jk) & 135 & ) & ! bracket for halo 1 - halo 2 compatibility 136 & + ( zfu(ji-1,jj ,jk) - zfu(ji ,jj ,jk) & 137 & ) & ! bracket for halo 1 - halo 2 compatibility 138 & ) * umask(ji ,jj ,jk) 139 zlv_vv(ji,jj,jk,2) = ( ( zfv(ji ,jj+1,jk) - zfv(ji ,jj ,jk) & 140 & ) & ! bracket for halo 1 - halo 2 compatibility 141 & + ( zfv(ji ,jj-1,jk) - zfv(ji ,jj ,jk) & 142 & ) & ! bracket for halo 1 - halo 2 compatibility 143 & ) * vmask(ji ,jj ,jk) 144 zlu_uv(ji,jj,jk,2) = ( zfu(ji ,jj+1,jk) - zfu(ji ,jj ,jk) ) * fmask(ji ,jj ,jk) & 145 & - ( zfu(ji ,jj ,jk) - zfu(ji ,jj-1,jk) ) * fmask(ji ,jj-1,jk) 146 zlv_vu(ji,jj,jk,2) = ( zfv(ji+1,jj ,jk) - zfv(ji ,jj ,jk) ) * fmask(ji ,jj ,jk) & 147 & - ( zfv(ji ,jj ,jk) - zfv(ji-1,jj ,jk) ) * fmask(ji-1,jj ,jk) 130 148 END_2D 131 149 END DO 132 CALL lbc_lnk( 'dynadv_ubs', zlu_uu(:,:,:,1), 'U', -1.0_wp , zlu_uv(:,:,:,1), 'U', -1.0_wp, &133 &zlu_uu(:,:,:,2), 'U', -1.0_wp , zlu_uv(:,:,:,2), 'U', -1.0_wp, &134 &zlv_vv(:,:,:,1), 'V', -1.0_wp , zlv_vu(:,:,:,1), 'V', -1.0_wp, &135 &zlv_vv(:,:,:,2), 'V', -1.0_wp , zlv_vu(:,:,:,2), 'V', -1.0_wp )150 IF( nn_hls == 1 ) CALL lbc_lnk( 'dynadv_ubs', zlu_uu(:,:,:,1), 'U', -1.0_wp , zlu_uv(:,:,:,1), 'U', -1.0_wp, & 151 & zlu_uu(:,:,:,2), 'U', -1.0_wp , zlu_uv(:,:,:,2), 'U', -1.0_wp, & 152 & zlv_vv(:,:,:,1), 'V', -1.0_wp , zlv_vu(:,:,:,1), 'V', -1.0_wp, & 153 & zlv_vv(:,:,:,2), 'V', -1.0_wp , zlv_vu(:,:,:,2), 'V', -1.0_wp ) 136 154 ! 137 155 ! ! ====================== ! … … 139 157 DO jk = 1, jpkm1 ! ====================== ! 140 158 ! ! horizontal volume fluxes 141 zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) 142 zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) 159 DO_2D( 1, 1, 1, 1 ) 160 zfu(ji,jj,jk) = 0.25_wp * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) * puu(ji,jj,jk,Kmm) 161 zfv(ji,jj,jk) = 0.25_wp * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) * pvv(ji,jj,jk,Kmm) 162 END_2D 143 163 ! 144 164 DO_2D( 1, 0, 1, 0 ) ! horizontal momentum fluxes at T- and F-point
Note: See TracChangeset
for help on using the changeset viewer.