File indexing completed on 2020-07-29 05:11:13 UTC
view on githubraw file Latest commit b9dadda2 on 2020-07-28 16:49:33 UTC
017b6b2289 Jean*0001 #include "CPP_EEOPTIONS.h"
0002 #include "W2_OPTIONS.h"
0003
0004
0005
0006
0007
0008
0009 SUBROUTINE W2_SET_CS6_FACETS( myThid )
0010
0011
0012
0013
0014
0015
0016
0017
0018 IMPLICIT NONE
0019
d6ea3164dc Jean*0020
017b6b2289 Jean*0021 #include "SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "W2_EXCH2_SIZE.h"
0024 #include "W2_EXCH2_PARAMS.h"
0025 #include "W2_EXCH2_TOPOLOGY.h"
0026
0027
0028
0029
0030 INTEGER myThid
0031
0032
0033
d6ea3164dc Jean*0034
017b6b2289 Jean*0035 CHARACTER*(MAX_LEN_MBUF) msgBuf
0036 CHARACTER*1 edge(4)
0037 INTEGER i, j, ii, jj, lo, ll
0038 INTEGER nRd, nGr, nBl
0039 INTEGER setDims, addDims
0040 LOGICAL prtFlag
0041 Real*4 tmpVar
0042
0043 DATA edge / 'N' , 'S' , 'E' , 'W' /
0044
0045 WRITE(msgBuf,'(2A,I3,A)') 'W2_SET_CS6_FACETS:',
0046 & ' preDefTopol=', preDefTopol, ' selected'
0047 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0048 prtFlag = ABS(W2_printMsg).GE.2
0049 & .OR. ( W2_printMsg .NE.0 .AND. myProcId.EQ.0 )
0050
0051
0052 nFacets = 6
628abffd44 Jean*0053 IF ( nfacets.GT.W2_maxNbFacets ) THEN
d39305b879 Jean*0054 CALL ALL_PROC_DIE( 0 )
628abffd44 Jean*0055 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (nFacets>maxNbFacets)'
0056 ENDIF
017b6b2289 Jean*0057
0058
0059 DO j=1,nFacets
0060 IF ( MOD(j,2).EQ.1 ) THEN
0061 jj = j+2
0062 facet_link(1,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
0063 jj = j-1
0064 facet_link(2,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
0065 jj = j+1
0066 facet_link(3,j) = 0.4 + FLOAT( 1+MOD(jj+5,6) )
0067 jj = j-2
0068 facet_link(4,j) = 0.1 + FLOAT( 1+MOD(jj+5,6) )
0069 ELSE
0070 jj = j+1
0071 facet_link(1,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
0072 jj = j-2
0073 facet_link(2,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
0074 jj = j+2
0075 facet_link(3,j) = 0.2 + FLOAT( 1+MOD(jj+5,6) )
0076 jj = j-1
0077 facet_link(4,j) = 0.3 + FLOAT( 1+MOD(jj+5,6) )
0078 ENDIF
0079 ENDDO
0080
0081
0082 nRd = facet_dims(1)
0083 nGr = facet_dims(2)
0084 nBl = facet_dims(3)
0085 DO j=4,W2_maxNbFacets*2
0086 IF ( facet_dims(j).NE.0 ) THEN
0087 WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
0088 & ' no more than 3 dims (nRd,nGr,nBl) expected for CS-6 Topol'
0089 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0090 CALL PRINT_ERROR( msgBuf, myThid )
d39305b879 Jean*0091 CALL ALL_PROC_DIE( 0 )
017b6b2289 Jean*0092 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS: allows 3 dims only'
0093 ENDIF
0094 ENDDO
0095 IF ( nRd.GT.0 .AND. nGr+nBl.EQ.0 ) THEN
0096
0097 nGr = nRd
0098 nBl = nRd
0099 ELSEIF ( nRd+nGr+nBl.EQ.0 ) THEN
0100
71f938ee99 Jean*0101 nGr = exch2_nTiles*sNx*sNy
017b6b2289 Jean*0102 tmpVar = FLOAT(nGr)/6.
0103 tmpVar = SQRT(tmpVar)
0104 nRd = NINT(tmpVar)
0105 IF ( nRd*nRd*6 .EQ. nGr ) THEN
0106 nGr = nRd
0107 nBl = nRd
0108 WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
0109 & ' facet-dims Unset; assume nRd=nGr=nBl=', nRd
0110 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0111 ELSE
b9dadda204 Mart*0112 WRITE(msgBuf,'(A,I8,2(A,I4),A,I10,A,I6,A)')
71f938ee99 Jean*0113 & ' nTiles*sNx*sNy=', exch2_nTiles,' x',sNx,' x',sNy,' =',nGr
017b6b2289 Jean*0114 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0115 WRITE(msgBuf,'(A,I6,A,I10)')
0116 & ' not equal to: 6 x',nRd,'^2 =', nRd*nRd*6
0117 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0118 WRITE(msgBuf,'(2A,I5)') 'W2_SET_CS6_FACETS:',
0119 & ' facet-dims Unset; attempt to fit single dim FAIL'
0120 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0121 CALL PRINT_ERROR( msgBuf, myThid )
0122 ENDIF
0123 ENDIF
628abffd44 Jean*0124 IF ( nRd*nGr*nBl.EQ.0 ) THEN
d39305b879 Jean*0125 CALL ALL_PROC_DIE( 0 )
628abffd44 Jean*0126 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (Dims are missing)'
0127 ENDIF
017b6b2289 Jean*0128
0129
0130 facet_dims(1) = nRd
0131 facet_dims(2) = nGr
0132 facet_dims(3) = nBl
0133
0134 setDims = 3
0135 addDims = 1
0136 DO WHILE ( addDims.GT.0 )
0137 addDims = 0
0138 DO j=2,nFacets
0139 DO i=1,4
0140
0141 jj = INT(facet_link(i,j))
0142 ii = MOD( NINT(facet_link(i,j)*10.), 10 )
0143 IF ( jj.GE.1 .AND. jj.LE.nFacets
0144 & .AND. ii.GE.1 .AND. ii.LE.4 ) THEN
0145
0146 lo = 2*(j-1) + (i+1)/2
0147
0148 ll = 2*(jj-1)+(ii+1)/2
0149 IF ( facet_dims(lo).EQ.0 .AND. facet_dims(ll).GT.0 ) THEN
0150 addDims = addDims + 1
0151 facet_dims(lo) = facet_dims(ll)
0152 IF ( prtFlag ) THEN
0153 WRITE(msgBuf,'(A,I3,3A,2(I4,A),I3,3A,I8)')
0154 & ' facet',j,'.',edge(i), ' set dim', lo, ' = dim', ll,
0155 & ' from',jj,'.',edge(ii),' :',facet_dims(ll)
0156 CALL PRINT_MESSAGE(msgBuf,W2_oUnit,SQUEEZE_RIGHT,myThid)
0157 ENDIF
0158 ENDIF
0159 ENDIF
0160 ENDDO
0161 ENDDO
0162 setDims = setDims + addDims
0163 ENDDO
0164
0165 IF ( setDims.NE.nFacets*2 ) THEN
0166 WRITE(msgBuf,'(A,I3,A)') ' W2_SET_CS6_FACETS:',
0167 & nFacets*2-setDims, ' facet-dims left Unset'
0168 CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid )
0169 CALL PRINT_ERROR( msgBuf, myThid )
0170 DO j=1,nFacets
0171 IF ( facet_dims(2*j-1)*facet_dims(2*j).EQ.0 ) THEN
0172 WRITE(W2_oUnit,'(A,I3,2(A,I8))')
0173 & ' facets #', j, ' , x-size=', facet_dims(2*j-1),
0174 & ' , y-size=', facet_dims(2*j)
0175 CALL PRINT_MESSAGE( msgBuf, W2_oUnit,SQUEEZE_RIGHT,myThid )
0176 CALL PRINT_ERROR( msgBuf, myThid )
0177 ENDIF
0178 ENDDO
d39305b879 Jean*0179 CALL ALL_PROC_DIE( 0 )
017b6b2289 Jean*0180 STOP 'ABNORMAL END: S/R W2_SET_CS6_FACETS (unset facet dims)'
0181 ENDIF
0182
0183 RETURN
0184 END