2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
5 |
|
#ifdef TARGET_NEC_SX |
6 |
|
C set a sensible default for the outer loop unrolling parameter that can |
7 |
|
C be overriden in the Makefile with the DEFINES macro or in CPP_OPTIONS.h |
8 |
|
#ifndef CG3D_OUTERLOOPITERS |
9 |
|
# define CG3D_OUTERLOOPITERS 10 |
10 |
|
#endif |
11 |
|
#endif /* TARGET_NEC_SX */ |
12 |
|
|
13 |
CBOP |
CBOP |
14 |
C !ROUTINE: CG3D |
C !ROUTINE: CG3D |
205 |
maskP1 = 1. _d 0 |
maskP1 = 1. _d 0 |
206 |
IF ( k .EQ. 1 ) maskM1 = 0. _d 0 |
IF ( k .EQ. 1 ) maskM1 = 0. _d 0 |
207 |
IF ( k .EQ. Nr) maskP1 = 0. _d 0 |
IF ( k .EQ. Nr) maskP1 = 0. _d 0 |
208 |
|
#ifdef TARGET_NEC_SX |
209 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
210 |
|
#endif /* TARGET_NEC_SX */ |
211 |
DO j=1,sNy |
DO j=1,sNy |
212 |
DO i=1,sNx |
DO i=1,sNx |
213 |
cg3d_r(i,j,k,bi,bj) = cg3d_b(i,j,k,bi,bj) |
cg3d_r(i,j,k,bi,bj) = cg3d_b(i,j,k,bi,bj) |
267 |
IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11 |
IF ( actualResidual .LT. cg3dTargetResidual ) GOTO 11 |
268 |
C-- Solve preconditioning equation and update |
C-- Solve preconditioning equation and update |
269 |
C-- conjugate direction vector "s". |
C-- conjugate direction vector "s". |
270 |
C Note. On the next to loops over all tiles the inner loop ranges |
C Note. On the next two loops over all tiles the inner loop ranges |
271 |
C in sNx and sNy are expanded by 1 to avoid a communication |
C in sNx and sNy are expanded by 1 to avoid a communication |
272 |
C step. However this entails a bit of gynamastics because we only |
C step. However this entails a bit of gynamastics because we only |
273 |
C want eta_qrN for the interior points. |
C want eta_qrN for the interior points. |
276 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
277 |
eta_qrNtile(bi,bj) = 0. _d 0 |
eta_qrNtile(bi,bj) = 0. _d 0 |
278 |
DO k=1,1 |
DO k=1,1 |
279 |
|
#ifdef TARGET_NEC_SX |
280 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
281 |
|
#endif /* TARGET_NEC_SX */ |
282 |
DO j=1-1,sNy+1 |
DO j=1-1,sNy+1 |
283 |
DO i=1-1,sNx+1 |
DO i=1-1,sNx+1 |
284 |
cg3d_q(i,j,k,bi,bj) = zMC(i,j,k,bi,bj) |
cg3d_q(i,j,k,bi,bj) = zMC(i,j,k,bi,bj) |
287 |
ENDDO |
ENDDO |
288 |
ENDDO |
ENDDO |
289 |
DO k=2,Nr |
DO k=2,Nr |
290 |
|
#ifdef TARGET_NEC_SX |
291 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
292 |
|
#endif /* TARGET_NEC_SX */ |
293 |
DO j=1-1,sNy+1 |
DO j=1-1,sNy+1 |
294 |
DO i=1-1,sNx+1 |
DO i=1-1,sNx+1 |
295 |
cg3d_q(i,j,k,bi,bj) = zMC(i,j,k,bi,bj) |
cg3d_q(i,j,k,bi,bj) = zMC(i,j,k,bi,bj) |
300 |
ENDDO |
ENDDO |
301 |
ENDDO |
ENDDO |
302 |
DO k=Nr,Nr |
DO k=Nr,Nr |
303 |
|
#ifdef TARGET_NEC_SX |
304 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
305 |
|
#endif /* TARGET_NEC_SX */ |
306 |
DO j=1,sNy |
DO j=1,sNy |
307 |
DO i=1,sNx |
DO i=1,sNx |
308 |
eta_qrNtile(bi,bj) = eta_qrNtile(bi,bj) |
eta_qrNtile(bi,bj) = eta_qrNtile(bi,bj) |
311 |
ENDDO |
ENDDO |
312 |
ENDDO |
ENDDO |
313 |
DO k=Nr-1,1,-1 |
DO k=Nr-1,1,-1 |
314 |
|
#ifdef TARGET_NEC_SX |
315 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
316 |
|
#endif /* TARGET_NEC_SX */ |
317 |
DO j=1-1,sNy+1 |
DO j=1-1,sNy+1 |
318 |
DO i=1-1,sNx+1 |
DO i=1-1,sNx+1 |
319 |
cg3d_q(i,j,k,bi,bj) = cg3d_q(i,j,k,bi,bj) |
cg3d_q(i,j,k,bi,bj) = cg3d_q(i,j,k,bi,bj) |
320 |
& -zMU(i,j,k,bi,bj)*cg3d_q(i,j,k+1,bi,bj) |
& -zMU(i,j,k,bi,bj)*cg3d_q(i,j,k+1,bi,bj) |
321 |
ENDDO |
ENDDO |
322 |
ENDDO |
ENDDO |
323 |
|
#ifdef TARGET_NEC_SX |
324 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
325 |
|
#endif /* TARGET_NEC_SX */ |
326 |
DO j=1,sNy |
DO j=1,sNy |
327 |
DO i=1,sNx |
DO i=1,sNx |
328 |
eta_qrNtile(bi,bj) = eta_qrNtile(bi,bj) |
eta_qrNtile(bi,bj) = eta_qrNtile(bi,bj) |
390 |
#endif /* NONLIN_FRSURF */ |
#endif /* NONLIN_FRSURF */ |
391 |
IF ( Nr .GT. 1 ) THEN |
IF ( Nr .GT. 1 ) THEN |
392 |
k=1 |
k=1 |
393 |
|
#ifdef TARGET_NEC_SX |
394 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
395 |
|
#endif /* TARGET_NEC_SX */ |
396 |
DO j=1,sNy |
DO j=1,sNy |
397 |
DO i=1,sNx |
DO i=1,sNx |
398 |
cg3d_q(i,j,k,bi,bj) = |
cg3d_q(i,j,k,bi,bj) = |
411 |
ENDDO |
ENDDO |
412 |
ELSE |
ELSE |
413 |
k=1 |
k=1 |
414 |
|
#ifdef TARGET_NEC_SX |
415 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
416 |
|
#endif /* TARGET_NEC_SX */ |
417 |
DO j=1,sNy |
DO j=1,sNy |
418 |
DO i=1,sNx |
DO i=1,sNx |
419 |
cg3d_q(i,j,k,bi,bj) = |
cg3d_q(i,j,k,bi,bj) = |
431 |
ENDDO |
ENDDO |
432 |
ENDIF |
ENDIF |
433 |
DO k=2,Nr-1 |
DO k=2,Nr-1 |
434 |
|
#ifdef TARGET_NEC_SX |
435 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
436 |
|
#endif /* TARGET_NEC_SX */ |
437 |
DO j=1,sNy |
DO j=1,sNy |
438 |
DO i=1,sNx |
DO i=1,sNx |
439 |
cg3d_q(i,j,k,bi,bj) = |
cg3d_q(i,j,k,bi,bj) = |
454 |
ENDDO |
ENDDO |
455 |
IF ( Nr .GT. 1 ) THEN |
IF ( Nr .GT. 1 ) THEN |
456 |
k=Nr |
k=Nr |
457 |
|
#ifdef TARGET_NEC_SX |
458 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
459 |
|
#endif /* TARGET_NEC_SX */ |
460 |
DO j=1,sNy |
DO j=1,sNy |
461 |
DO i=1,sNx |
DO i=1,sNx |
462 |
cg3d_q(i,j,k,bi,bj) = |
cg3d_q(i,j,k,bi,bj) = |
492 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
493 |
errTile(bi,bj) = 0. _d 0 |
errTile(bi,bj) = 0. _d 0 |
494 |
DO k=1,Nr |
DO k=1,Nr |
495 |
|
#ifdef TARGET_NEC_SX |
496 |
|
!CDIR OUTERUNROLL=CG3D_OUTERLOOPITERS |
497 |
|
#endif /* TARGET_NEC_SX */ |
498 |
DO j=1,sNy |
DO j=1,sNy |
499 |
DO i=1,sNx |
DO i=1,sNx |
500 |
cg3d_x(i,j,k,bi,bj)=cg3d_x(i,j,k,bi,bj) |
cg3d_x(i,j,k,bi,bj)=cg3d_x(i,j,k,bi,bj) |