/[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.1 - (hide annotations) (download)
Tue May 12 19:40:32 2009 UTC (15 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint61o
new code to set-up W2-Exch2 topology (replace matlab-topology-generator)
 read parameter file "data.exch2" if it exist ; otherwise try default
 regular cube without blank-tile.

1 jmc 1.1 C $Header: /u/gcmpack/MITgcm/pkg/exch2/w2_e2setup.F,v 1.3 2008/07/29 20:25:23 jmc Exp $
2     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     C Tile toplogy settings data structures
24     #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     C msgBuf :: Informational/error meesage buffer
38     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     IF ( nfacets.GT.W2_maxNbFacets )
57     & STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (nFacets>maxNbFacets)'
58    
59     C-- Facet Edge connections ( edges order: N,S,E,W <==> 1,2,3,4 )
60     DO j=1,nFacets
61     IF ( MOD(j,2).EQ.1 ) THEN
62     jj = j+2
63     facet_link(1,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
64     jj = j-1
65     facet_link(2,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
66     jj = j+1
67     facet_link(3,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
68     jj = j-2
69     facet_link(4,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
70     ELSE
71     jj = j+1
72     facet_link(1,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
73     jj = j-2
74     facet_link(2,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
75     jj = j+2
76     facet_link(3,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
77     jj = j-1
78     facet_link(4,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
79     ENDIF
80     ENDDO
81    
82     C-- facet dimension: take the 1rst 3 numbers from facet_dims
83     nRd = facet_dims(1)
84     nGr = facet_dims(2)
85     nBl = facet_dims(3)
86     DO j=4,W2_maxNbFacets*2
87     IF ( facet_dims(j).NE.0 ) THEN
88     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
89     & ' no more than 3 dims (nRd,nGr,nBl) expected for CS-6 Topol'
90     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
91     CALL PRINT_ERROR( msgBuf, myThid )
92     STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS: allows 3 dims only'
93     ENDIF
94     ENDDO
95     IF ( nRd.GT.0 .AND. nGr+nBl.EQ.0 ) THEN
96     C- Only 1rst dim is set: assuming a regular Cube
97     nGr = nRd
98     nBl = nRd
99     ELSEIF ( nRd+nGr+nBl.EQ.0 ) THEN
100     C- try to get cube size from number of tiles, assuming a regular Cube
101     nGr = nTiles*sNx*sNy
102     tmpVar = FLOAT(nGr)/6.
103     tmpVar = SQRT(tmpVar)
104     nRd = NINT(tmpVar)
105     IF ( nRd*nRd*6 .EQ. nGr ) THEN
106     nGr = nRd
107     nBl = nRd
108     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
109     & ' facet-dims Unset; assume nRd=nGr=nBl=', nRd
110     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
111     ELSE
112     WRITE(msgBuf,'(3(A,I4),A,I10,A,I6,A)')
113     & ' nTiles*sNx*sNy=', nTiles, ' x',sNx,' x',sNy,' =',nGr
114     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
115     WRITE(msgBuf,'(A,I6,A,I10)')
116     & ' not equal to: 6 x',nRd,'^2 =', nRd*nRd*6
117     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
118     WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
119     & ' facet-dims Unset; attempt to fit single dim FAIL'
120     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
121     CALL PRINT_ERROR( msgBuf, myThid )
122     ENDIF
123     ENDIF
124     IF ( nRd*nGr*nBl.EQ.0 )
125     & STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (Dims are missing)'
126    
127    
128     C-- Set facet dimension : 1rst 3 are known:
129     facet_dims(1) = nRd
130     facet_dims(2) = nGr
131     facet_dims(3) = nBl
132     C- Derive the other using from connection graph (topology):
133     setDims = 3
134     addDims = 1
135     DO WHILE ( addDims.GT.0 )
136     addDims = 0
137     DO j=2,nFacets
138     DO i=1,4
139     C- connected to:
140     jj = INT(facet_link(i,j))
141     ii = MOD( NINT(facet_link(i,j)*10.), 10 )
142     IF ( jj.GE.1 .AND. jj.LE.nFacets
143     & .AND. ii.GE.1 .AND. ii.LE.4 ) THEN
144     C- Length of N or S Edge = x-size, E or W Edge = y-size
145     lo = 2*(j-1) + (i+1)/2
146     C- Corresponding Edge length
147     ll = 2*(jj-1)+(ii+1)/2
148     IF ( facet_dims(lo).EQ.0 .AND. facet_dims(ll).GT.0 ) THEN
149     addDims = addDims + 1
150     facet_dims(lo) = facet_dims(ll)
151     IF ( prtFlag ) THEN
152     WRITE(msgBuf,'(A,I3,3A,2(I4,A),I3,3A,I8)')
153     & ' facet',j,'.',edge(i), ' set dim', lo, ' = dim', ll,
154     & ' from',jj,'.',edge(ii),' :',facet_dims(ll)
155     CALL PRINT_MESSAGE(msgBuf,W2_oUnit,SQUEEZE_RIGHT,myThid)
156     ENDIF
157     ENDIF
158     ENDIF
159     ENDDO
160     ENDDO
161     setDims = setDims + addDims
162     ENDDO
163    
164     IF ( setDims.NE.nFacets*2 ) THEN
165     WRITE(msgBuf,'(A,I3,A)') ' W2_SET_CS6_FACETS:',
166     & nFacets*2-setDims, ' facet-dims left Unset'
167     CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid )
168     CALL PRINT_ERROR( msgBuf, myThid )
169     DO j=1,nFacets
170     IF ( facet_dims(2*j-1)*facet_dims(2*j).EQ.0 ) THEN
171     WRITE(W2_oUnit,'(A,I3,2(A,I8))')
172     & ' facets #', j, ' , x-size=', facet_dims(2*j-1),
173     & ' , y-size=', facet_dims(2*j)
174     CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
175     CALL PRINT_ERROR( msgBuf, myThid )
176     ENDIF
177     ENDDO
178     STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (unset facet dims)'
179     ENDIF
180    
181     RETURN
182     END

  ViewVC Help
Powered by ViewVC 1.1.22