Changeset 9176 for branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
- Timestamp:
- 2018-01-04T13:30:03+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r6486 r9176 77 77 INTEGER :: ji, jj, jk ! dummy loop indices 78 78 REAL(wp) :: zua, zva, zbt, ze2u, ze2v ! temporary scalar 79 REAL(wp), POINTER, DIMENSION(:,:) :: zcu, zcv79 REAL(wp), DIMENSION(jpi,jpj ) :: zcu, zcv 80 80 REAL(wp), POINTER, DIMENSION(:,:,:) :: zuf, zut, zlu, zlv 81 81 !!---------------------------------------------------------------------- … … 83 83 IF( nn_timing == 1 ) CALL timing_start('dyn_ldf_bilap') 84 84 ! 85 85 ! CALL wrk_alloc( jpi, jpj, zcu, zcv ) 86 86 CALL wrk_alloc( jpi, jpj, jpk, zuf, zut, zlu, zlv ) 87 87 ! … … 102 102 zlv(:,:,:) = 0._wp 103 103 104 ! ! =============== 105 DO jk = 1, jpkm1 ! Horizontal slab 106 ! ! =============== 104 ! 107 105 ! Laplacian 108 106 ! --------- 109 107 110 108 IF( ln_sco .OR. ln_zps ) THEN ! s-coordinate or z-coordinate with partial steps 111 zuf(:,:,jk) = rotb(:,:,jk) * fse3f(:,:,jk) 112 DO jj = 2, jpjm1 113 DO ji = fs_2, fs_jpim1 ! vector opt. 114 zlu(ji,jj,jk) = - ( zuf(ji,jj,jk) - zuf(ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) & 115 & + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj,jk) ) / e1u(ji,jj) 116 117 zlv(ji,jj,jk) = + ( zuf(ji,jj,jk) - zuf(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) & 118 & + ( hdivb(ji,jj+1,jk) - hdivb(ji,jj,jk) ) / e2v(ji,jj) 119 END DO 109 !$OMP PARALLEL DO 110 ! ! =============== 111 DO jk = 1, jpkm1 ! Horizontal slab 112 ! ! =============== 113 ! Laplacian 114 ! --------- 115 zuf(:,:,jk) = rotb(:,:,jk) * fse3f(:,:,jk) 116 DO jj = 2, jpjm1 117 DO ji = fs_2, fs_jpim1 ! vector opt. 118 zlu(ji,jj,jk) = - ( zuf(ji,jj,jk) - zuf(ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) & 119 & + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj,jk) ) / e1u(ji,jj) 120 121 zlv(ji,jj,jk) = + ( zuf(ji,jj,jk) - zuf(ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) & 122 & + ( hdivb(ji,jj+1,jk) - hdivb(ji,jj,jk) ) / e2v(ji,jj) 123 END DO 124 END DO 120 125 END DO 121 126 ELSE ! z-coordinate - full step 122 DO jj = 2, jpjm1 123 DO ji = fs_2, fs_jpim1 ! vector opt. 124 zlu(ji,jj,jk) = - ( rotb (ji ,jj,jk) - rotb (ji,jj-1,jk) ) / e2u(ji,jj) & 125 & + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj ,jk) ) / e1u(ji,jj) 126 127 zlv(ji,jj,jk) = + ( rotb (ji,jj ,jk) - rotb (ji-1,jj,jk) ) / e1v(ji,jj) & 128 & + ( hdivb(ji,jj+1,jk) - hdivb(ji ,jj,jk) ) / e2v(ji,jj) 127 !$OMP PARALLEL DO 128 ! ! =============== 129 DO jk = 1, jpkm1 ! Horizontal slab 130 ! ! =============== 131 DO jj = 2, jpjm1 132 DO ji = fs_2, fs_jpim1 ! vector opt. 133 zlu(ji,jj,jk) = - ( rotb (ji ,jj,jk) - rotb (ji,jj-1,jk) ) / e2u(ji,jj) & 134 & + ( hdivb(ji+1,jj,jk) - hdivb(ji,jj ,jk) ) / e1u(ji,jj) 135 136 zlv(ji,jj,jk) = + ( rotb (ji,jj ,jk) - rotb (ji-1,jj,jk) ) / e1v(ji,jj) & 137 & + ( hdivb(ji,jj+1,jk) - hdivb(ji ,jj,jk) ) / e2v(ji,jj) 138 END DO 129 139 END DO 130 END DO 140 END DO 131 141 ENDIF 132 END DO133 142 CALL lbc_lnk( zlu, 'U', -1. ) ; CALL lbc_lnk( zlv, 'V', -1. ) ! Boundary conditions 134 135 143 !$OMP PARALLE DO PRIVATE(zcu, zcv, zbt) 136 144 DO jk = 1, jpkm1 137 145 … … 145 153 146 154 ! Contravariant "laplacian" 147 zcu(:,:) = e1u(:,:) * zlu(:,:,jk) 148 zcv(:,:) = e2v(:,:) * zlv(:,:,jk) 155 DO jj = 1, jpj 156 DO ji = 1, jpi 157 zcu(ji,jj) = e1u(ji,jj) * zlu(ji,jj,jk) 158 zcv(ji,jj) = e2v(ji,jj) * zlv(ji,jj,jk) 159 END DO 160 END DO 149 161 150 162 ! Laplacian curl ( * e3f if s-coordinates or z-coordinate with partial steps) … … 180 192 CALL lbc_lnk( zuf, 'F', 1. ) 181 193 CALL lbc_lnk( zut, 'T', 1. ) 182 194 !OMP PARALLEL DO PRIVATE(ze2u, ze2v, zua, zva) 183 195 DO jk = 1, jpkm1 184 196 … … 205 217 END DO ! End of slab 206 218 ! ! =============== 207 219 ! CALL wrk_dealloc( jpi, jpj, zcu, zcv ) 208 220 CALL wrk_dealloc( jpi, jpj, jpk, zuf, zut, zlu, zlv ) 209 221 !
Note: See TracChangeset
for help on using the changeset viewer.