/[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.3 - (show annotations) (download)
Fri Apr 23 20:21:06 2010 UTC (14 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62g, checkpoint62f, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.2: +3 -3 lines
fix propagating typo (& others) in variable description

1 C $Header: /u/gcmpack/MITgcm/pkg/exch2/w2_set_cs6_facets.F,v 1.2 2009/05/26 23:08:25 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 topology 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 message 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 ) THEN
57 CALL ALL_PROC_DIE( myThid )
58 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (nFacets>maxNbFacets)'
59 ENDIF
60
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 CALL ALL_PROC_DIE( myThid )
95 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 nGr = nTiles*sNx*sNy
105 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 & ' nTiles*sNx*sNy=', nTiles, ' x',sNx,' x',sNy,' =',nGr
117 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 IF ( nRd*nGr*nBl.EQ.0 ) THEN
128 CALL ALL_PROC_DIE( myThid )
129 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (Dims are missing)'
130 ENDIF
131
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 CALL ALL_PROC_DIE( myThid )
184 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