The TELEMAC-MASCARET system  trunk
interp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE interp
3 ! *****************
4 !
5  &(xinit , yinit , ikinit , npinit , neinit ,
6  & x , y , npoin , npmax , shp , elt)
7 !
8 !***********************************************************************
9 ! PROGICIEL : STBTEL V5.2 24/04/91 J-C GALLAND (LNH)
10 ! 09/11/94 P LANG / TRIGRID (LHF)
11 !***********************************************************************
12 !
13 ! FONCTION : INTERPOLATION DES FONDS SUR LE MAILLAGE
14 !
15 !----------------------------------------------------------------------
16 ! ARGUMENTS
17 ! .________________.____.______________________________________________
18 ! | NOM |MODE| ROLE
19 ! |________________|____|______________________________________________
20 ! | X,Y | -->| COORDONNEES DES POINTS DU MAILLAGE
21 ! | ZF |<-- | COTES DU FOND
22 ! | XRELV,YRELV | -->| COORDONNEES DES POINTS DE BATHY
23 ! | ZRELV | -->| COTES DES POINTS DE BATHY
24 ! | NBAT | -->| NOMBRE DE POINTS DE BATHY
25 ! | NBOR | -->| NUMEROTATION DES ELEMENTS DE BORD
26 ! | NPTFR | -->| NOMBRE DE POINTS FRONTIERE
27 ! | NFOND | -->| CANAUX DES FICHIERS DES FONDS
28 ! | NBFOND | -->| NOMBRE DE FICHIERS FONDS DONNES PAR
29 ! | | | L'UTILISATEUR (5 MAXI)
30 ! | FOND | -->| NOM DES FICHIERS DES FONDS
31 ! | DM | -->| DISTANCE MINIMALE A LA FRONTIERE
32 ! | | | POUR L'INTERPOLATION DES FONDS
33 ! | FONTRI | -->| INDICATEUR DE LECTURE DES FONDS DANS TRIGRID
34 ! | CORTRI | -->| CORRECTION DES FONDS POUR TRIGRID
35 ! | | |
36 ! | COMMON: | |
37 ! | GEO: | |
38 ! | MESH | -->| TYPE DES ELEMENTS DU MAILLAGE
39 ! | NDP | -->| NOMBRE DE NOEUDS PAR ELEMENTS
40 ! | NPOIN | -->| NOMBRE TOTAL DE NOEUDS DU MAILLAGE
41 ! | NELEM | -->| NOMBRE TOTAL D'ELEMENTS DU MAILLAGE
42 ! | NPMAX | -->| DIMENSION EFFECTIVE DES TABLEAUX X ET Y
43 ! | | | (NPMAX = NPOIN + 0.1*NELEM)
44 ! | NELMAX | -->| DIMENSION EFFECTIVE DES TABLEAUX CONCERNANT
45 ! | | | LES ELEMENTS (NELMAX = NELEM + 0.2*NELEM)
46 ! | | |
47 ! |________________|____|______________________________________________
48 ! MODE : -->(DONNEE NON MODIFIEE), <--(RESULTAT), <-->(DONNEE MODIFIEE)
49 !----------------------------------------------------------------------
50 !
51 ! APPELE PAR : STBTEL
52 ! APPEL DE : LECFON, FASP
53 !
54 !**********************************************************************
55 !
57  IMPLICIT NONE
58 !
59  INTEGER, INTENT(IN) :: NPINIT, NEINIT, NPOIN,NPMAX
60  DOUBLE PRECISION, INTENT(IN) :: XINIT(npinit) , YINIT(npinit)
61  INTEGER, INTENT(IN) :: IKINIT(neinit,3)
62  INTEGER, INTENT(INOUT) :: ELT(npmax)
63  DOUBLE PRECISION, INTENT(IN) :: X(npmax) , Y(npmax)
64  DOUBLE PRECISION, INTENT(INOUT) :: SHP(npmax,3)
65 !
66  INTEGER IELEM , JELEM , IPOIN
67  DOUBLE PRECISION XP,YP,A1,A2,A3,C1,C2,X1,X2,X3,Y1,Y2,Y3
68 !
69 !=======================================================================
70 !
71  WRITE(lu,4)
72 !
73 4 FORMAT(//,1x,'DATA INTERPOLATION',/,
74  & 1x,'------------------',/)
75 !
76  DO ipoin = 1,npoin
77 !
78  xp = x(ipoin)
79  yp = y(ipoin)
80  c1 = -999999.d0
81 !
82  DO ielem = 1,neinit
83  x1 = xinit(ikinit(ielem,1))
84  x2 = xinit(ikinit(ielem,2))
85  x3 = xinit(ikinit(ielem,3))
86  y1 = yinit(ikinit(ielem,1))
87  y2 = yinit(ikinit(ielem,2))
88  y3 = yinit(ikinit(ielem,3))
89  a1 = (x3-x2)*(yp-y2) - (y3-y2)*(xp-x2)
90  a2 = (x1-x3)*(yp-y3) - (y1-y3)*(xp-x3)
91  a3 = (x2-x1)*(yp-y1) - (y2-y1)*(xp-x1)
92  IF (a1.GE.0.AND.a2.GE.0.AND.a3.GE.0) GOTO 30
93  c2 = min(a1,a2,a3) / ((x3-x2)*(y1-y2)-(y3-y2)*(x1-x2))
94  IF (c2.GT.c1) THEN
95  c1 = c2
96  jelem = ielem
97  ENDIF
98  ENDDO
99 !
100  WRITE(lu,*) 'EXTRAPOLATION REQUIRED FOR ',
101  & 'THE NODE :',ipoin
102  ielem = jelem
103  x1 = xinit(ikinit(ielem,1))
104  x2 = xinit(ikinit(ielem,2))
105  x3 = xinit(ikinit(ielem,3))
106  y1 = yinit(ikinit(ielem,1))
107  y2 = yinit(ikinit(ielem,2))
108  y3 = yinit(ikinit(ielem,3))
109  a1 = (x3-x2)*(yp-y2) - (y3-y2)*(xp-x2)
110  a2 = (x1-x3)*(yp-y3) - (y1-y3)*(xp-x3)
111  a3 = (x2-x1)*(yp-y1) - (y2-y1)*(xp-x1)
112 !
113 30 CONTINUE
114  c1 = (x3-x2)*(y1-y2)-(y3-y2)*(x1-x2)
115  shp(ipoin,1) = a1/c1
116  shp(ipoin,2) = a2/c1
117  shp(ipoin,3) = a3/c1
118  elt(ipoin) = ielem
119 !
120  ENDDO
121 !
122 !-----------------------------------------------------------------------
123 !
124  RETURN
125  END
subroutine interp(XINIT, YINIT, IKINIT, NPINIT, NEINIT, X, Y, NPOIN, NPMAX, SHP, ELT)
Definition: interp.f:8