The TELEMAC-MASCARET system  trunk
rpi_intr.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE rpi_intr
3 ! *******************
4 !
5  &(neigb , nb_close, rx , ry , rxx , ryy ,
6  & npoin2 , i , maxnsp , ffd , firdiv1 , firdiv2 ,
7  & secdiv1, secdiv2 , secdiv3, frstdiv , scnddiv)
8 !
9 !***********************************************************************
10 ! TOMAWAC V6P3 25/06/2012
11 !***********************************************************************
12 !
13 !brief FREE-MESH METHOD FOR DIFFRACTION COMPUTATION
14 !+
15 !+ CALCULATES FIRST AND SECOND DERIVATIVE OF
16 !+ VARIABLE FFD
17 !
18 !history E. KRIEZI (LNH)
19 !+ 04/12/2006
20 !+ V5P5
21 !+
22 !
23 !history G.MATTAROLO (EDF - LNHE)
24 !+ 23/10/2011
25 !+ V6P1
26 !+ Translation of French names of the variables in argument
27 !
28 !history G.MATTAROLO (EDF - LNHE)
29 !+ 23/06/2012
30 !+ V6P2
31 !+ Modification for V6P2
32 !
33 !history J-M HERVOUET (EDF R&D, LNHE)
34 !+ 19/03/2013
35 !+ V6P3
36 !+ Arguments slightly changed to avoid copy before calling.
37 !
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !| FFD |-->| INPUT FIELD FUNCTION
40 !| FIRDIV |<--| FIRST DERIVATIVE OF FFD
41 !| FRSTDIV |-->| IF TRUE COMPUTES 1ST DERIVATIVE
42 !| I |-->| POINT INDEX
43 !| MAXNSP |-->| CONSTANT FOR MESHFREE TECHNIQUE
44 !| NB_CLOSE |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
45 !| NEIGB |-->| NEIGHBOUR POINTS FOR MESHFREE METHOD
46 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
47 !| RX |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
48 !| RXX |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
49 !| RY |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
50 !| RYY |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
51 !| SECDIV |<--| SECOND DERIVATIVE OF FFD
52 !| SCNDDIV |-->| IF TRUE COMPUTES 2ND DERIVATIVE
53 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54 !
56  USE interface_tomawac, ex_rpi_intr => rpi_intr
57  IMPLICIT NONE
58 !
59 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 !
61  INTEGER, INTENT(IN) :: NPOIN2, MAXNSP,I
62  INTEGER, INTENT(IN) :: NEIGB(npoin2,maxnsp),NB_CLOSE(npoin2)
63 !
64  DOUBLE PRECISION, INTENT(IN) :: RX(maxnsp),RY(maxnsp)
65  DOUBLE PRECISION, INTENT(IN) :: RXX(maxnsp),RYY(maxnsp)
66  DOUBLE PRECISION, INTENT(INOUT) :: SECDIV1,SECDIV2,SECDIV3
67  DOUBLE PRECISION, INTENT(INOUT) :: FIRDIV1,FIRDIV2
68  DOUBLE PRECISION, INTENT(IN) :: FFD(npoin2)
69 !
70  LOGICAL, INTENT(IN) :: FRSTDIV,SCNDDIV
71 !
72 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 !
74  INTEGER IPOIN,IP1
75 
76  DOUBLE PRECISION WZX1,WZY1,WZX2,WZY2
77 !
78 !-----------------------------------------------------------------------
79 !
80  IF(.NOT.deja_rpi_intr) THEN
81  ALLOCATE(wu_om_rpi(maxnsp))
82  deja_rpi_intr=.true.
83  ENDIF
84 !
85 ! FFD the field function where data are coming from.
86 !
87  DO ip1 =1,nb_close(i)
88  ipoin=neigb(i,ip1)
89  wu_om_rpi(ip1)=ffd(ipoin)
90  ENDDO
91 !
92 ! Calculate derivatives in IPOIN
93 ! TODO: never used still usefull ?
94 !
95  IF(frstdiv) THEN
96  wzx1=0.d0
97  wzy1=0.d0
98  DO ip1 =1,nb_close(i)
99  wzx1=wzx1+rx(ip1)*wu_om_rpi(ip1)
100  wzy1=wzy1+ry(ip1)*wu_om_rpi(ip1)
101  ENDDO
102  firdiv1=wzx1
103  firdiv2=wzy1
104  ENDIF
105 !
106 ! SECOND DERIVATIVES
107 !
108  IF(scnddiv) THEN
109  wzx2=0.d0
110  wzy2=0.d0
111  DO ip1 =1,nb_close(i)
112  wzx2=wzx2+rxx(ip1)*wu_om_rpi(ip1)
113  wzy2=wzy2+ryy(ip1)*wu_om_rpi(ip1)
114  ENDDO
115  secdiv1=wzx2
116  secdiv2=wzy2
117 ! NOTE JMH : The only value really used
118  secdiv3= wzx2+wzy2
119  ENDIF
120 !
121 !-----------------------------------------------------------------------
122 !
123  RETURN
124  END
double precision, dimension(:), allocatable wu_om_rpi
subroutine rpi_intr(NEIGB, NB_CLOSE, RX, RY, RXX, RYY, NPOIN2, I, MAXNSP, FFD, FIRDIV1, FIRDIV2, SECDIV1, SECDIV2, SECDIV3, FRSTDIV, SCNDDIV)
Definition: rpi_intr.f:9