/[MITgcm]/MITgcm/model/src/cg3d.F
ViewVC logotype

Diff of /MITgcm/model/src/cg3d.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.21 by jmc, Sun Nov 29 03:16:10 2009 UTC revision 1.22 by mlosch, Mon Nov 30 15:18:21 2009 UTC
# Line 2  C $Header$ Line 2  C $Header$
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
# Line 198  C--   Initial residual calculation (with Line 205  C--   Initial residual calculation (with
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)
# Line 258  CcnhDebugEnds Line 267  CcnhDebugEnds
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.
# Line 267  C            want eta_qrN for the interi Line 276  C            want eta_qrN for the interi
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)
# Line 275  C            want eta_qrN for the interi Line 287  C            want eta_qrN for the interi
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)
# Line 285  C            want eta_qrN for the interi Line 300  C            want eta_qrN for the interi
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)
# Line 293  C            want eta_qrN for the interi Line 311  C            want eta_qrN for the interi
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)
# Line 366  C==    q = A.s Line 390  C==    q = A.s
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) =
# Line 384  C==    q = A.s Line 411  C==    q = A.s
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) =
# Line 401  C==    q = A.s Line 431  C==    q = A.s
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) =
# Line 421  C==    q = A.s Line 454  C==    q = A.s
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) =
# Line 456  C      Now compute "interior" points. Line 492  C      Now compute "interior" points.
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)

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

  ViewVC Help
Powered by ViewVC 1.1.22