/[MITgcm]/MITgcm/pkg/exch2/w2_set_cs6_facets.F
ViewVC logotype

Annotation of /MITgcm/pkg/exch2/w2_set_cs6_facets.F

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


Revision 1.5 - (hide annotations) (download)
Fri Mar 30 18:23:13 2012 UTC (12 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint64, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.4: +5 -5 lines
change argument of ALL_PROC_DIE calls (at this stage, not yet multi-threaded)

1 jmc 1.5 C $Header: /u/gcmpack/MITgcm/pkg/exch2/w2_set_cs6_facets.F,v 1.4 2011/07/09 21:53:35 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "CPP_EEOPTIONS.h"
5     #include "W2_OPTIONS.h"
6    
7     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8     CBOP 0
9     C !ROUTINE: W2_SET_CS6_FACETS( myThid )
10    
11     C !INTERFACE:
12     SUBROUTINE W2_SET_CS6_FACETS( myThid )
13    
14     C !DESCRIPTION:
15     C Set-up multi facets(=sub-domains) topology : 6 facets Cube case
16     C Facet Dimension taken from the 1rst 3 facet_dims (nRed, nGreen, nBlue)
17     C if provided in "data.exch2"; if not, assume regular Cube (equal size)
18     C and derive single dimension from "SIZE.h".
19    
20     C !USES:
21     IMPLICIT NONE
22    
23 jmc 1.3 C Tile topology settings data structures
24 jmc 1.1 #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "W2_EXCH2_SIZE.h"
27     #include "W2_EXCH2_PARAMS.h"
28     #include "W2_EXCH2_TOPOLOGY.h"
29    
30     C !INPUT PARAMETERS:
31     C myThid :: my Thread Id number
32     C (Note: not relevant since threading has not yet started)
33     INTEGER myThid
34    
35     C !LOCAL VARIABLES:
36     C === Local variables ===
37 jmc 1.3 C msgBuf :: Informational/error message buffer
38 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) msgBuf
39     CHARACTER*1 edge(4)
40     INTEGER i, j, ii, jj, lo, ll
41     INTEGER nRd, nGr, nBl
42     INTEGER setDims, addDims
43     LOGICAL prtFlag
44     Real*4 tmpVar
45     CEOP
46     DATA edge / 'N' , 'S' , 'E' , 'W' /
47    
48     WRITE(msgBuf,'(2A,I3,A)') 'W2_SET_CS6_FACETS:',
49     & ' preDefTopol=', preDefTopol, ' selected'
50     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
51     prtFlag = ABS(W2_printMsg).GE.2
52     & .OR. ( W2_printMsg .NE.0 .AND. myProcId.EQ.0 )
53    
54     C-- Number of facets:
55     nFacets = 6
56 jmc 1.2 IF ( nfacets.GT.W2_maxNbFacets ) THEN
57 jmc 1.5 CALL ALL_PROC_DIE( 0 )
58 jmc 1.2 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (nFacets>maxNbFacets)'
59     ENDIF
60 jmc 1.1
61     C-- Facet Edge connections ( edges order: N,S,E,W <==> 1,2,3,4 )
62     DO j=1,nFacets
63     IF ( MOD(j,2).EQ.1 ) THEN
64     jj = j+2
65     facet_link(1,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
66     jj = j-1
67     facet_link(2,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
68     jj = j+1
69     facet_link(3,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
70     jj = j-2
71     facet_link(4,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
72     ELSE
73     jj = j+1
74     facet_link(1,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
75     jj = j-2
76     facet_link(2,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
77     jj = j+2
78     facet_link(3,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
79     jj = j-1
80     facet_link(4,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
81     ENDIF
82     ENDDO
83    
84     C-- facet dimension: take the 1rst 3 numbers from facet_dims
85     nRd = facet_dims(1)
86     nGr = facet_dims(2)
87     nBl = facet_dims(3)
88     DO j=4,W2_maxNbFacets*2
89     IF ( facet_dims(j).NE.0 ) THEN
90     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
91     & ' no more than 3 dims (nRd,nGr,nBl) expected for CS-6 Topol'
92     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
93     CALL PRINT_ERROR( msgBuf, myThid )
94 jmc 1.5 CALL ALL_PROC_DIE( 0 )
95 jmc 1.1 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS: allows 3 dims only'
96     ENDIF
97     ENDDO
98     IF ( nRd.GT.0 .AND. nGr+nBl.EQ.0 ) THEN
99     C- Only 1rst dim is set: assuming a regular Cube
100     nGr = nRd
101     nBl = nRd
102     ELSEIF ( nRd+nGr+nBl.EQ.0 ) THEN
103     C- try to get cube size from number of tiles, assuming a regular Cube
104 jmc 1.4 nGr = exch2_nTiles*sNx*sNy
105 jmc 1.1 tmpVar = FLOAT(nGr)/6.
106     tmpVar = SQRT(tmpVar)
107     nRd = NINT(tmpVar)
108     IF ( nRd*nRd*6 .EQ. nGr ) THEN
109     nGr = nRd
110     nBl = nRd
111     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
112     & ' facet-dims Unset; assume nRd=nGr=nBl=', nRd
113     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
114     ELSE
115     WRITE(msgBuf,'(3(A,I4),A,I10,A,I6,A)')
116 jmc 1.4 & ' nTiles*sNx*sNy=', exch2_nTiles,' x',sNx,' x',sNy,' =',nGr
117 jmc 1.1 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
118     WRITE(msgBuf,'(A,I6,A,I10)')
119     & ' not equal to: 6 x',nRd,'^2 =', nRd*nRd*6
120     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
121     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
122     & ' facet-dims Unset; attempt to fit single dim FAIL'
123     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
124     CALL PRINT_ERROR( msgBuf, myThid )
125     ENDIF
126     ENDIF
127 jmc 1.2 IF ( nRd*nGr*nBl.EQ.0 ) THEN
128 jmc 1.5 CALL ALL_PROC_DIE( 0 )
129 jmc 1.2 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (Dims are missing)'
130     ENDIF
131 jmc 1.1
132    
133     C-- Set facet dimension : 1rst 3 are known:
134     facet_dims(1) = nRd
135     facet_dims(2) = nGr
136     facet_dims(3) = nBl
137     C- Derive the other using from connection graph (topology):
138     setDims = 3
139     addDims = 1
140     DO WHILE ( addDims.GT.0 )
141     addDims = 0
142     DO j=2,nFacets
143     DO i=1,4
144     C- connected to:
145     jj = INT(facet_link(i,j))
146     ii = MOD( NINT(facet_link(i,j)*10.), 10 )
147     IF ( jj.GE.1 .AND. jj.LE.nFacets
148     & .AND. ii.GE.1 .AND. ii.LE.4 ) THEN
149     C- Length of N or S Edge = x-size, E or W Edge = y-size
150     lo = 2*(j-1) + (i+1)/2
151     C- Corresponding Edge length
152     ll = 2*(jj-1)+(ii+1)/2
153     IF ( facet_dims(lo).EQ.0 .AND. facet_dims(ll).GT.0 ) THEN
154     addDims = addDims + 1
155     facet_dims(lo) = facet_dims(ll)
156     IF ( prtFlag ) THEN
157     WRITE(msgBuf,'(A,I3,3A,2(I4,A),I3,3A,I8)')
158     & ' facet',j,'.',edge(i), ' set dim', lo, ' = dim', ll,
159     & ' from',jj,'.',edge(ii),' :',facet_dims(ll)
160     CALL PRINT_MESSAGE(msgBuf,W2_oUnit,SQUEEZE_RIGHT,myThid)
161     ENDIF
162     ENDIF
163     ENDIF
164     ENDDO
165     ENDDO
166     setDims = setDims + addDims
167     ENDDO
168    
169     IF ( setDims.NE.nFacets*2 ) THEN
170     WRITE(msgBuf,'(A,I3,A)') ' W2_SET_CS6_FACETS:',
171     & nFacets*2-setDims, ' facet-dims left Unset'
172     CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid )
173     CALL PRINT_ERROR( msgBuf, myThid )
174     DO j=1,nFacets
175     IF ( facet_dims(2*j-1)*facet_dims(2*j).EQ.0 ) THEN
176     WRITE(W2_oUnit,'(A,I3,2(A,I8))')
177     & ' facets #', j, ' , x-size=', facet_dims(2*j-1),
178     & ' , y-size=', facet_dims(2*j)
179     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
180     CALL PRINT_ERROR( msgBuf, myThid )
181     ENDIF
182     ENDDO
183 jmc 1.5 CALL ALL_PROC_DIE( 0 )
184 jmc 1.1 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (unset facet dims)'
185     ENDIF
186    
187     RETURN
188     END

  ViewVC Help
Powered by ViewVC 1.1.22