The TELEMAC-MASCARET system  trunk
extrac.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE extrac
3 ! *****************
4 !
5  &(x,y,som,ikle,indic,nelem,nelmax,npoin,nsom,projec)
6 !
7 !***********************************************************************
8 ! PROGICIEL : STBTEL V5.2 07/12/88 J-M HERVOUET (LNH) 30 87 80 18
9 ! 19/02/93 J-M JANIN (LNH) 30 87 72 84
10 ! A WATRIN
11 !***********************************************************************
12 !
13 ! FONCTION : PREPARATION DE DONNEES AVANT L'APPEL DE FMTSEL
14 !
15 !-----------------------------------------------------------------------
16 ! ARGUMENTS
17 ! .________________.____.______________________________________________
18 ! ! NOM !MODE! ROLE
19 ! !________________!____!______________________________________________
20 ! !________________!____!______________________________________________
21 ! MODE : -->(DONNEE NON MODIFIEE), <--(RESULTAT), <-->(DONNEE MODIFIEE)
22 !-----------------------------------------------------------------------
23 !
24 ! APPELE PAR : PREDON
25 ! APPEL DE : -
26 !
27 !***********************************************************************
28 !
30  IMPLICIT NONE
31 !
32  INTEGER, INTENT(INOUT) :: NELEM
33  INTEGER, INTENT(IN) :: NELMAX,NPOIN,NSOM
34  INTEGER, INTENT(INOUT) :: IKLE(nelmax,3),INDIC(npoin)
35  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin),Y(npoin)
36  DOUBLE PRECISION, INTENT(IN) :: SOM(10,2)
37  LOGICAL, INTENT(IN) :: PROJEC
38 !
39  LOGICAL FLAG,F1,F2,F3
40 !
41  INTEGER IELEM,IPOIN,ISOM,IDP,I1,I2,I3
42  DOUBLE PRECISION DX,DY,A1,A2,A3
43 !
44 !=======================================================================
45 ! BOUCLE SUR TOUS LES PLANS DE COUPE
46 !=======================================================================
47 !
48  DO isom = 1,nsom
49 !
50  dx = som(isom+1,1) - som(isom,1)
51  dy = som(isom+1,2) - som(isom,2)
52 !
53 !=======================================================================
54 ! POUR UN DEMI PLAN DE COUPE DONNE :
55 ! RECHERCHE DES POINTS EXT.(=0) , INT.(=1) , SUR LE BORD (=2)
56 !=======================================================================
57 !
58  DO ipoin = 1,npoin
59  indic(ipoin) = 0
60  IF (dx*(y(ipoin)-som(isom,2)).GE.dy*(x(ipoin)-som(isom,1)))
61  & indic(ipoin) = 1
62  ENDDO
63 !
64  ielem = 1
65 20 CONTINUE
66  i1 = indic(ikle(ielem,1))
67  i2 = indic(ikle(ielem,2))
68  i3 = indic(ikle(ielem,3))
69  IF (i1.EQ.0.OR.i2.EQ.0.OR.i3.EQ.0) THEN
70  IF (i1.EQ.1) indic(ikle(ielem,1)) = 2
71  IF (i2.EQ.1) indic(ikle(ielem,2)) = 2
72  IF (i3.EQ.1) indic(ikle(ielem,3)) = 2
73  ikle(ielem,1) = ikle(nelem,1)
74  ikle(ielem,2) = ikle(nelem,2)
75  ikle(ielem,3) = ikle(nelem,3)
76  nelem = nelem - 1
77  ELSE
78  ielem = ielem + 1
79  ENDIF
80  IF (ielem.NE.nelem+1) GOTO 20
81 !
82 !=======================================================================
83 ! POUR UN DEMI PLAN DE COUPE DONNE :
84 ! ELIMINATION DES ELEMENTS DEGENERES
85 !=======================================================================
86 !
87 30 CONTINUE
88  ielem = 1
89  flag = .false.
90 35 CONTINUE
91  i1 = ikle(ielem,1)
92  i2 = ikle(ielem,2)
93  i3 = ikle(ielem,3)
94  f1 = indic(i1).EQ.2
95  f2 = indic(i2).EQ.2
96  f3 = indic(i3).EQ.2
97  IF (f1.AND.f2.AND.f3) THEN
98  ikle(ielem,1) = ikle(nelem,1)
99  ikle(ielem,2) = ikle(nelem,2)
100  ikle(ielem,3) = ikle(nelem,3)
101  nelem = nelem - 1
102  ELSE
103  IF (f1.AND.f2) THEN
104  IF (dx*(x(i2)-x(i1))+dy*(y(i2)-y(i1)).LE.0.d0) THEN
105  flag = .true.
106  indic(i3) = 2
107  ENDIF
108  ENDIF
109  IF (f2.AND.f3) THEN
110  IF (dx*(x(i3)-x(i2))+dy*(y(i3)-y(i2)).LE.0.d0) THEN
111  flag = .true.
112  indic(i1) = 2
113  ENDIF
114  ENDIF
115  IF (f3.AND.f1) THEN
116  IF (dx*(x(i1)-x(i3))+dy*(y(i1)-y(i3)).LE.0.d0) THEN
117  flag = .true.
118  indic(i2) = 2
119  ENDIF
120  ENDIF
121  ielem = ielem + 1
122  ENDIF
123  IF (ielem.NE.nelem+1) GOTO 35
124  IF (flag) GOTO 30
125 !
126 !=======================================================================
127 ! POUR UN DEMI PLAN DE COUPE DONNE :
128 ! PROJECTION DES NOUVEAUX POINTS DE BORD
129 !=======================================================================
130 !
131  IF (projec) THEN
132  a1 = 1.d0 / (dx*dx + dy*dy)
133  a2 = a1 * (som(isom,1)*som(isom+1,2) -
134  & som(isom,2)*som(isom+1,1) )
135  DO idp = 1,3
136  DO ielem = 1,nelem
137  ipoin = ikle(ielem,idp)
138  IF (indic(ipoin).EQ.2) THEN
139  a3 = a1*(x(ipoin)*dx+y(ipoin)*dy)
140  x(ipoin) = dx*a3 + dy*a2
141  y(ipoin) = dy*a3 - dx*a2
142  ENDIF
143  ENDDO
144  ENDDO
145  ENDIF
146 !
147  ENDDO !ISOM
148 !
149 !=======================================================================
150 !
151  RETURN
152  END
subroutine projec(X, Y, ZF, XRELV, YRELV, ZRELV, NBAT, NBOR, NPTFR, NFOND, NBFOND, FOND, DM, FONTRI, CORTRI, MAILLE, NGEO, KP1BOR)
Definition: projec.f:9
subroutine extrac(X, Y, SOM, IKLE, INDIC, NELEM, NELMAX, NPOIN, NSOM, PROJEC)
Definition: extrac.f:7