- 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/SOL/solpcg.F90
r6486 r9176 94 94 REAL(wp), DIMENSION(2) :: zsum 95 95 REAL(wp), POINTER, DIMENSION(:,:) :: zgcr 96 REAL(wp), DIMENSION(jpi, jpj) :: tmp1, tmp2 96 97 !!---------------------------------------------------------------------- 97 98 ! … … 109 110 ! gcr = gcb-a.gcx 110 111 ! gcdes = gcr 112 !$OMP PARALLEL DO PRIVATE(zgcad) 111 113 DO jj = 2, jpjm1 112 114 DO ji = fs_2, fs_jpim1 ! vector opt. … … 120 122 END DO 121 123 END DO 124 !$OMP END PARALLEL DO 122 125 123 126 ! rnorme = (gcr,gcr) 124 rnorme = glob_sum( gcr(:,:) * gcdmat(:,:) * gcr(:,:) ) 125 127 tmp1 = 0. 128 !$OMP PARALLEL DO 129 DO jj = 2, jpjm1 130 DO ji = fs_2, fs_jpim1 ! vector opt. 131 tmp1(ji, jj) = gcr(ji, jj) * gcdmat(ji, jj) * gcr(ji, jj) 132 END DO 133 END DO 134 !$OMP END PARALLEL DO 135 rnorme = glob_sum( tmp1(:,:) ) 126 136 CALL lbc_lnk( gcdes, c_solver_pt, 1. ) ! lateral boundary condition 127 137 128 138 ! gccd = matrix . gcdes 139 gccd = 0. 140 !$OMP PARALLEL DO 129 141 DO jj = 2, jpjm1 130 142 DO ji = fs_2, fs_jpim1 ! vector opt. … … 134 146 END DO 135 147 END DO 136 148 !$OMP END PARALLEL DO 137 149 ! alph = (gcr,gcr)/(gcdes,gccd) 138 radd = glob_sum( gcdes(:,:) * gcdmat(:,:) * gccd(:,:) ) 150 !$OMP PARALLEL DO 151 DO jj = 1, jpj 152 DO ji = 1, jpi 153 tmp1(ji, jj) = gcdes(ji, jj) * gcdmat(ji, jj) * gccd(ji, jj) 154 END DO 155 END DO 156 !$OMP END PARALLEL DO 157 radd = glob_sum( tmp1 ) 139 158 alph = rnorme /radd 140 159 141 160 ! gcx = gcx + alph * gcdes 142 161 ! gcr = gcr - alph * gccd 162 !$OMP PARALLEL DO 143 163 DO jj = 2, jpjm1 144 164 DO ji = fs_2, fs_jpim1 ! vector opt. … … 147 167 END DO 148 168 END DO 149 169 !$OMP END PARALLEL DO 150 170 ! Algorithm wtih Eijkhout rearrangement 151 171 ! ------------------------------------- … … 158 178 159 179 ! zgcr = matrix . gcr 180 !$OMP PARALLEL DO 160 181 DO jj = 2, jpjm1 161 182 DO ji = fs_2, fs_jpim1 ! vector opt. … … 168 189 ! rnorme = (gcr,gcr) 169 190 rr = rnorme 170 171 ! zgcad = (zgcr,gcr) 172 zsum(1) = glob_sum(gcr(:,:) * gcdmat(:,:) * gcr(:,:)) 173 zsum(2) = glob_sum(gcr(:,:) * gcdmat(:,:) * zgcr(:,:) * bmask(:,:)) 191 192 ! zgcad = (zgcr,gcr) 193 tmp2 = 0. 194 !$OMP PARALLEL 195 !$OMP DO 196 DO jj = 1, jpj 197 DO ji = 1, jpi 198 tmp2(ji, jj) = gcr(ji, jj) * gcdmat(ji, jj) 199 tmp1(ji, jj) = tmp2(ji, jj) * gcr(ji, jj) 200 END DO 201 END DO 202 !$OMP END DO 203 !$OMP DO 204 !DIR$ IVDEP 205 DO jj = 1, jpj 206 !DIR$ IVDEP 207 DO ji = 1, jpi 208 tmp2(ji, jj) = tmp2(ji, jj) * zgcr(ji, jj) * bmask(ji, jj) 209 END DO 210 END DO 211 !$OMP END DO 212 !$OMP END PARALLEL 213 214 ! zsum(1) = glob_sum(gcr(:,:) * gcdmat(:,:) * gcr(:,:)) 215 ! zsum(2) = glob_sum(gcr(:,:) * gcdmat(:,:) * zgcr(:,:) * bmask(:,:)) 216 zsum = glob_asum_2d(tmp1, tmp2) 174 217 175 218 !!RB we should gather the 2 glob_sum … … 190 233 ! gcx = gcx + alph * gcdes 191 234 ! gcr = gcr - alph * gccd 235 !$OMP PARALLEL DO 192 236 DO jj = 2, jpjm1 193 237 DO ji = fs_2, fs_jpim1 ! vector opt.
Note: See TracChangeset
for help on using the changeset viewer.