The TELEMAC-MASCARET system  trunk
surcon.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE surcon
3 ! *****************
4 !
5  &(x,y,ikle,ipo,nbor,nptfr,ncolor,ifabor,color)
6 !
7 !***********************************************************************
8 ! PROGICIEL : STBTEL V5.2 19/04/91 J-C GALLAND (LNH)
9 ! 19/02/93 J-M JANIN (LNH)
10 !***********************************************************************
11 !
12 ! FONCTION : DECOUPAGE DES TRIANGLES SURCONTRAINTS
13 !
14 !-----------------------------------------------------------------------
15 ! ARGUMENTS
16 ! .________________.____.______________________________________________.
17 ! | NOM |MODE| ROLE |
18 ! |________________|____|______________________________________________|
19 ! | X,Y |<-->| COORDONNEES DU MAILLAGE .
20 ! | IKLE |<-->| NUMEROS GLOBAUX DES NOEUDS DE CHAQUE ELEMENT
21 ! | TRAV1 |<-->| TABLEAU DE TRAVAIL
22 ! | NBOR | -->| TABLEAU DES POINTS DE BORD
23 ! | NPTFR | -->| NOMBRE DE POINT FRONTIERE
24 ! | NCOLOR |<-->| TABLEAU DES COULEURS DES POINTS
25 ! | IFABOR |<-->| TABLEAU DES VOISINS DES ELEMENTS
26 ! | COLOR |<-->| STOCKAGE COULEURS DES NOEUDS SUR FICHIER GEO
27 ! |________________|____|______________________________________________
28 ! | COMMON: | |
29 ! | GEO: | |
30 ! | MESH | -->| TYPE DES ELEMENTS DU MAILLAGE
31 ! | NDP | -->| NOMBRE DE NOEUDS PAR ELEMENTS
32 ! | NPOIN |<-->| NOMBRE TOTAL DE NOEUDS DU MAILLAGE
33 ! | NELEM |<-->| NOMBRE TOTAL D'ELEMENTS DU MAILLAGE
34 ! | NPMAX | -->| DIMENSION EFFECTIVE DES TABLEAUX X ET Y
35 ! | | | (NPMAX = NPOIN + 0.1*NELEM)
36 ! | NELMAX | -->| DIMENSION EFFECTIVE DES TABLEAUX CONCERNANT
37 ! | | | LES ELEMENTS (NELMAX = NELEM + 0.2*NELEM)
38 ! | | |
39 ! |________________|____|______________________________________________|
40 ! MODE : -->(DONNEE NON MODIFIEE), <--(RESULTAT), <-->(DONNEE MODIFIEE)
41 !-----------------------------------------------------------------------
42 ! APPELE PAR : STBTEL
43 ! APPEL DE : DECOUP
44 !***********************************************************************
45 !
48  USE interface_stbtel, ex_surcon => surcon
49  IMPLICIT NONE
50 !
51  DOUBLE PRECISION, INTENT(INOUT) :: X(*) , Y(*)
52  INTEGER, INTENT(INOUT) :: NBOR(*) , IKLE(nelmax,4) , NCOLOR(*)
53  INTEGER, INTENT(INOUT) :: IFABOR(nelmax,*) , IPO(*)
54  LOGICAL, INTENT(INOUT) :: COLOR
55  INTEGER, INTENT(IN) :: NPTFR
56 !
57  INTEGER NPOIN2 , NELEM2
58  INTEGER ITEST , IELEM , KELEM , ISWAP , KSWAP
59  INTEGER I , J , K
60  INTEGER :: IP(3) , KP , ISUI(3)
61 !
62  parameter( isui = (/ 2 , 3 , 1 /) )
63 !
64 !=======================================================================
65 !
66  WRITE(lu,4050)
67 !
68  npoin2 = npoin
69  nelem2 = nelem
70  itest = 0
71 !
72 !=======================================================================
73 ! RECHERCHE DES TRIANGLES SURCONTRAINTS
74 !=======================================================================
75 !
76  DO k = 1 , npmax
77  ipo(k) = 0
78  ENDDO
79 !
80  DO k = 1 , nptfr
81  ipo(nbor(k)) = 1
82  ENDDO
83 
84  DO k = 1 , nelem
85  IF (ipo(ikle(k,1))+ipo(ikle(k,2))+ipo(ikle(k,3)).EQ.3) THEN
86 !
87 ! LE TRIANGLE EST SURCONTRAINT, ON LE DECOUPE EN TROIS
88 !
89  itest = itest + 1
90  IF (itest.GT.int(0.1*nelmax)) THEN
91  WRITE(lu,4000) int(0.1*nelmax)
92  CALL plante(1)
93  stop
94  ENDIF
95 !
96  WRITE(lu,4070) x(ikle(k,1)),y(ikle(k,1)),
97  & x(ikle(k,2)),y(ikle(k,2)),x(ikle(k,3)),y(ikle(k,3))
98 !
99  CALL decoup (k,x,y,ikle,ncolor,ifabor,
100  & nelem2,npoin2,color)
101 !
102  ENDIF
103  ENDDO !K
104 !
105 !=======================================================================
106 ! REMISE A JOUR DE NPOIN ET NELEM
107 !=======================================================================
108 !
109  npoin = npoin2
110  nelem = nelem2
111 !
112 !=======================================================================
113 ! MAINTENANT ON SWAPE LES ARETES CONTENANT 2 POINTS DE BORD ET QUI NE
114 ! SONT PAS DES ARETES DE BORD
115 !
116 ! REMARQUE : LES IFABOR NE SONT PAS MODIFIES DANS CE QUI SUIT CAR
117 ! ILS NE SERVENT PLUS APRES POUR LE LOGICIEL
118 !=======================================================================
119 !
120  iswap = 0
121  kswap = 0
122  DO ielem = 1,nelem
123  ip(1) = ikle(ielem,1)
124  ip(2) = ikle(ielem,2)
125  ip(3) = ikle(ielem,3)
126  DO i = 1,3
127  j = isui(i)
128  IF(ifabor(ielem,i).GT.0.AND.ipo(ip(i))+ipo(ip(j)).EQ.2) THEN
129  kelem = ifabor(ielem,i)
130 !
131 ! COMPTE TENU DU PREMIER DECOUPAGE, ON EST SUR QUE TOUT ELEMENT CONTIENT
132 ! AU MOINS UN POINT INTERIEUR, ET DANS CE CAS UN SEUL.
133 ! K EST SUR D'ETRE REMPLI.
134 !
135  IF (ipo(ikle(kelem,1)).EQ.0) k=1
136  IF (ipo(ikle(kelem,2)).EQ.0) k=2
137  IF (ipo(ikle(kelem,3)).EQ.0) k=3
138  kp = ikle(kelem,k)
139 !
140  IF ((x(kp)-x(ip(i)))*(y(ip(isui(j)))-y(ip(i))).GT.
141  & (y(kp)-y(ip(i)))*(x(ip(isui(j)))-x(ip(i))).AND.
142  & (x(kp)-x(ip(j)))*(y(ip(isui(j)))-y(ip(j))).LT.
143  & (y(kp)-y(ip(j)))*(x(ip(isui(j)))-x(ip(j)))) THEN
144 !
145  iswap = iswap + 1
146  ikle(ielem,i) = kp
147  ikle(kelem,isui(k)) = ip(isui(j))
148 !
149  WRITE(lu,4080) x(ip(i)),y(ip(i)),
150  & x(ip(j)),y(ip(j))
151 !
152  ELSE
153 !
154  kswap = kswap + 1
155 !
156  ENDIF
157  ENDIF
158  ENDDO
159  ENDDO
160 !
161 !=======================================================================
162 !
163  WRITE(lu,4100) itest,npoin,nelem,iswap
164 !
165  IF (kswap.NE.0) THEN
166  WRITE(lu,4200) kswap
167  ENDIF
168 !
169  4000 FORMAT(//,1x,'**************************************************',
170  & /,1x,'THE MAXIMUM NUMBER OF OVERSTRESSED TRIANGLES ',
171  & /,1x,'IS',i5,' : IT IS GREATER IN YOUR CASE ||',
172  & /,1x,'**************************************************')
173  4050 FORMAT(//,1x,'OVERSTRESSED ELEMENTS ARE CANCELLED',/,
174  & 1x,'-----------------------------------',/)
175  4070 FORMAT (1x,'ADDITIONAL NODE AT CENTRE OF TRIANGLE :',/,
176  & 1x,'(',d9.3,',',d9.3,'),(',d9.3,',',d9.3,'),',
177  & '(',d9.3,',',d9.3,')')
178  4080 FORMAT (1x,'SWAP OF FACE :',/,
179  & 1x,'(',d9.3,',',d9.3,'),(',d9.3,',',d9.3,')')
180  4100 FORMAT (/,1x,'NUMBER OF CANCELLED ELEMENTS : ',i5,/,
181  & 1x,'AFTER BEING CANCELLED :',/,
182  & 1x,' NUMBER OF POINTS : ',i5,/,
183  & 1x,' NUMBER OF ELEMENTS : ',i5,//,
184  & 1x,'MOREOVER,',i4,' TRIANGLES HAVE BEEN SWAPPED',//)
185  4200 FORMAT (1x,' BUT',i4,' COULD NOT BE',//)
186 !
187  RETURN
188  END
subroutine surcon(X, Y, IKLE, IPO, NBOR, NPTFR, NCOLOR, IFABOR, COLOR)
Definition: surcon.f:7
subroutine decoup(ISURC, X, Y, IKLE, NCOLOR, IFABOR, NELEM2, NPOIN2, COLOR)
Definition: decoup.f:7