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

Contents 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 - (show annotations) (download)
Tue May 12 19:40:32 2009 UTC (15 years 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 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