The TELEMAC-MASCARET system  trunk
predif.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE predif
3 ! *****************
4 !
5  &(cx , cy , ikle2 , ifabor, elt , eta , xk ,
6  & cg , itr01 , npoin3, npoin2, nelem2, ndire , nf ,
7  & couran, f , rx , ry , rxx , ryy , neigb )
8 !
9 !***********************************************************************
10 ! TOMAWAC V6P3 25/06/2012
11 !***********************************************************************
12 !
13 !brief PREPARES DIFFRACTION.
14 !+
15 !+ COMPUTES THE ADVECTION FIELD; TRACES BACK THE
16 !+ CHARACTERISTICS.
17 !
18 !history E. KRIEZI (LNH)
19 !+ 04/12/2006
20 !+ V5P5
21 !+
22 !
23 !history G.MATTAROLO (EDF - LNHE)
24 !+ 23/06/2012
25 !+ V6P2
26 !+ Modification for V6P2
27 !+ Taking into account both Mean Sloe Equation model (Berkhoff,1972)
28 !+ and Revised Mild Slope Equation model (Porter,2003)
29 !
30 !history J-M HERVOUET (EDF R&D, LNHE)
31 !+ 21/03/2013
32 !+ V6P3
33 !+ Call CONWAC added before call to DIFFRAC and DIFFRAC does only the
34 !+ modification of the velocities.
35 !
36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 !| CG |-->| DISCRETIZED GROUP VELOCITY
38 !| COURAN |-->| LOGICAL INDICATING IF THERE IS A CURRENT
39 !| CX |<->| ADVECTION FIELD ALONG X(OR PHI)
40 !| CY |<->| ADVECTION FIELD ALONG Y(OR LAMBDA)
41 !| ELT |<->| NUMBERS OF THE ELEMENTS 2D OF THE
42 !| | | POINTS TO BE ADVECTED
43 !| ETA |<->| NUMBERS OF THE LAYERS OF THE
44 !| | | POINTS TO BE ADVECTED
45 !| F |<->| VARIANCE DENSITY DIRECTIONAL SPECTRUM
46 !| IFABOR |-->| ELEMENTS BEHIND THE EDGES OF A TRIANGLE
47 !| | | IF NEGATIVE OR ZERO, THE EDGE IS A LIQUID,
48 !| | | SOLID OR PERIODIC BOUNDARY
49 !| IKLE2 |-->| TRANSITION BETWEEN LOCAL AND GLOBAL NUMBERING
50 !| | | OF THE 2D MESH
51 !| ITR01 |<->| WORK TABLE
52 !| NEIGB |-->| NEIGHBOUR POINTS FOR MESHFREE METHOD
53 !| NELEM2 |-->| NUMBER OF ELEMENTS IN 2D MESH
54 !| NF |-->| NUMBER OF FREQUENCIES
55 !| NDIRE |-->| NUMBER OF DIRECTIONS
56 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
57 !| NPOIN3 |-->| NPOIN2*NDIRE
58 !| RX |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
59 !| RXX |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
60 !| RY |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
61 !| RYY |-->| ARRAY USED IN THE MESHFREE TECHNIQUE
62 !| SHP |<->| BARYCENTRIC COORDINATES OF THE NODES IN
63 !| | | THEIR ASSOCIATED 2D ELEMENT "ELT"
64 !| SHZ |<->| BARYCENTRIC COORDINATES ALONG TETA OF THE
65 !| | | NODES IN THEIR ASSOCIATED LAYER "ETA"
66 !| SINTET |-->| SINE OF TETA ANGLE
67 !| TETA |-->| DISCRETIZED DIRECTIONS
68 !| TRA01 |<->| WORK TABLE
69 !| XK |-->| DISCRETIZED WAVE NUMBER
70 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71 !
72  USE bief
73  USE declarations_tomawac, ONLY : promin, steta, sct, dt, depth,
74  & mesh3d, mesh ,sshp1, sshz, tb, ielm3, isub, maxnsp
76  USE interface_tomawac, ex_predif => predif
77  IMPLICIT NONE
78 !
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER,INTENT(IN) :: NPOIN3,NPOIN2,NELEM2,NDIRE,NF
83  INTEGER,INTENT(IN) :: IKLE2(nelem2,3)
84  INTEGER,INTENT(IN) :: NEIGB(npoin2,maxnsp)
85  INTEGER,INTENT(INOUT) :: IFABOR(nelem2,7)
86  INTEGER,INTENT(INOUT) :: ELT(npoin3,nf), ETA(npoin3,nf)
87  INTEGER,INTENT(INOUT) :: ITR01(npoin3,3)
88  DOUBLE PRECISION,INTENT(IN) :: RX(maxnsp,npoin2),RY(maxnsp,npoin2)
89  DOUBLE PRECISION,INTENT(IN) :: RXX(maxnsp,npoin2)
90  DOUBLE PRECISION,INTENT(IN) :: RYY(maxnsp,npoin2)
91  DOUBLE PRECISION,INTENT(IN) :: XK(npoin2,nf),CG(npoin2,nf)
92  DOUBLE PRECISION,INTENT(IN) :: F(npoin2,ndire,nf)
93  LOGICAL,INTENT(IN) :: COURAN
94  TYPE(bief_obj), INTENT(INOUT) :: CX,CY
95 !
96 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
97 !
98  INTEGER IFF,IEL,I1,I2,I3
99  TYPE(bief_obj) :: BID
100  TYPE(slvcfg) :: SLVBID
101  INTEGER :: SIZ_ISUB, JF_ISUB
102 
103 !
104 !----------------------------------------------------------------------
105 !
106  IF (.NOT.couran) THEN
107 !
108 ! RELATIVE = ABSOLUTE => ADVECTION IN 3D
109 ! SEPARATES OUT THE FREQUENCIES
110 !
111  DO iff=1,nf
112 !
113 ! COMPUTES THE ADVECTION FIELD
114 !
115  CALL conwac
116  &(cx%R, cy%R, sct%R, xk, cg, npoin2, ndire, iff, nf)
117 !
118 ! MODIFIESS THE ADVECTION FIELD WITH DIFFRACTION
119 !
120  CALL diffrac
121  & (cx%R, cy%R, sct%R, xk, cg, npoin2, ndire, iff, nf,
122  & f, rx, ry, rxx, ryy, neigb)
123 !
124  DO iel=1,nelem2
125  i1=ikle2(iel,1)
126  i2=ikle2(iel,2)
127  i3=ikle2(iel,3)
128  IF(depth(i1).LT.promin.AND.depth(i2).LT.promin.AND.
129  & ifabor(iel,1).GT.0) ifabor(iel,1)=-1
130  IF(depth(i2).LT.promin.AND.depth(i3).LT.promin.AND.
131  & ifabor(iel,2).GT.0) ifabor(iel,2)=-1
132  IF(depth(i3).LT.promin.AND.depth(i1).LT.promin.AND.
133  & ifabor(iel,3).GT.0) ifabor(iel,3)=-1
134  ENDDO
135 !
136  WRITE(lu,*) 'FREQUENCE :',iff
137 !
138  IF(ncsize.GT.1) THEN
139  siz_isub = npoin3
140  jf_isub = iff
141  ELSE
142  siz_isub = 1
143  jf_isub = 1
144  ENDIF
145  CALL charac(sshz%ADR(iff)%P,sshz%ADR(iff)%P,0,
146  & cx,cy,sct,sct,steta,steta,dt,mesh3d%IFABOR,ielm3,
147  & npoin2,ndire,1,1,.false.,sshp1%ADR(iff)%P,
148  & sshz%ADR(iff)%P,sshz%ADR(iff)%P,tb,
149  & elt(1,iff),eta(1,iff),eta(1,iff),itr01,
150  & isub((jf_isub-1)*siz_isub+1:jf_isub*siz_isub),
151  & itr01(1,2),mesh3d,nelem2,nelem2,
152  & mesh%IKLE,
153  & mesh%SURDET,bid,bid,slvbid,0.d0,.false.,3,bid,1,
154 ! A POSTERIORI INTERPOLATION
155  & .true.,
156 ! AND PERIODICITY
157  & .true.)
158 !
159  ENDDO ! IFF
160 !
161  ELSE
162 !
163 ! ---------------------------------------------------------------
164 !
165 ! IN A RELATIVE REFERENCE SYSTEM => ADVECTION IN 4D
166 ! IT IS NO LONGER POSSIBLE TO SEPARATE THE FREQUENCIES OUT
167  WRITE(lu,*) ''
168  WRITE(lu,*) '***************************************'
169  WRITE(lu,*) ' ATTENTION : DIFFRACTION IS NOT TAKEN '
170  WRITE(lu,*) ' INTO ACCOUNT IF CURRENTS OR VARYING '
171  WRITE(lu,*) ' WATER LEVELS ARE CONSIDERED '
172  WRITE(lu,*) ' ONE HAS TO CHOOSE BETWEEN CURRENT AND '
173  WRITE(lu,*) ' DIFFRACTION '
174  WRITE(lu,*) '***************************************'
175  CALL plante(1)
176  stop
177 !
178  ENDIF
179 !
180 !----------------------------------------------------------------------
181 !
182  RETURN
183  END
double precision, dimension(:), pointer depth
type(bief_obj), target steta
type(bief_obj), target sct
subroutine predif(CX, CY, IKLE2, IFABOR, ELT, ETA, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN, F, RX, RY, RXX, RYY, NEIGB)
Definition: predif.f:9
subroutine diffrac(CX, CY, CT, XK, CG, NPOIN2, NDIRE, IFF, NF, F, RX, RY, RXX, RYY, NEIGB)
Definition: diffrac.f:8
subroutine charac(FN, FTILD, NOMB, UCONV, VCONV, WCONV, FRCONV, ZSTAR, FREQ, DT, IFAMAS, IELM, NPOIN2, NPLAN, JF, NF, MSK, SHP, SHZ, SHF, TB, ELT, ETA, FRE, IT3, ISUB, FREBUF, MESH, NELEM2, NELMAX2, IKLE2, SURDET2, AM1, RHS, SLV, AGGLO, LISTIN, NGAUSS, UNSV, OPTCHA, POST, PERIO, YA4D, SIGMA, STOCHA, VISC)
Definition: charac.f:14
subroutine conwac(CX, CY, CT, XK, CG, NPOIN2, NDIRE, JF, NF)
Definition: conwac.f:7
double precision, target dt
Definition: bief.f:3