The TELEMAC-MASCARET system  trunk
prepro.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE prepro
3 ! *****************
4 !
5  &( cx , cy , ikle2 , ifabor, elt , eta , fre ,
6  & xk , cg , itr01 , npoin3, npoin2, nelem2, ndire ,
7  & nf , couran)
8 !
9 !***********************************************************************
10 ! TOMAWAC V6P3 25/06/2012
11 !***********************************************************************
12 !
13 !brief PREPARES ADVECTION.
14 !+
15 !+ COMPUTES THE ADVECTION FIELD; TRACES BACK THE
16 !+ CHARACTERISTICS.
17 !
18 !history F. MARCOS (LNH)
19 !+ 04/12/95
20 !+ V1P0
21 !+
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history G.MATTAROLO (EDF - LNHE)
36 !+ 23/06/2011
37 !+ V6P1
38 !+ Translation of French names of the variables in argument
39 !
40 !history G.MATTAROLO (EDF - LNHE)
41 !+ 23/06/2012
42 !+ V6P2
43 !+ Modifications : possibility of taking into account diffraction
44 !
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !| CG |-->| DISCRETIZED GROUP VELOCITY
47 !| COURAN |-->| LOGICAL INDICATING IF THERE IS A CURRENT
48 !| CX |<->| ADVECTION FIELD ALONG X(OR PHI)
49 !| CY |<->| ADVECTION FIELD ALONG Y(OR LAMBDA)
50 !| ELT |<->| NUMBERS OF THE ELEMENTS 2D OF THE
51 !| | | POINTS TO BE ADVECTED
52 !| ETA |<->| NUMBERS OF THE LAYERS OF THE
53 !| | | POINTS TO BE ADVECTED
54 !| FRE |<->| NUMBER OF THE FREQUENCIES OF THE
55 !| | | POINTS TO BE ADVECTED
56 !| IFABOR |-->| ELEMENTS BEHIND THE EDGES OF A TRIANGLE
57 !| | | IF NEGATIVE OR ZERO, THE EDGE IS A LIQUID,
58 !| | | SOLID OR PERIODIC BOUNDARY
59 !| IKLE2 |-->| TRANSITION BETWEEN LOCAL AND GLOBAL NUMBERING
60 !| | | OF THE 2D MESH
61 !| ISUB |<->| ARRIVAL SUB-DOMAIN OF CHARACTERISTICS
62 !| ITR01 |<->| WORK TABLE
63 !| MESH |-->| 2D MESH
64 !| MESH3D |-->| 3D MESH
65 !| NELEM2 |-->| NUMBER OF ELEMENTS IN 2D MESH
66 !| NF |-->| NUMBER OF FREQUENCIES
67 !| NDIRE |-->| NUMBER OF DIRECTIONS
68 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
69 !| NPOIN3 |-->| NPOIN2*NDIRE
70 !| SHF |<->| BARYCENTRIC COORDINATES ALONG F OF THE
71 !| | | NODES IN THEIR ASSOCIATED FREQUENCIES "FRE"
72 !| SHP |<->| BARYCENTRIC COORDINATES OF THE NODES IN
73 !| | | THEIR ASSOCIATED 2D ELEMENT "ELT"
74 !| SHZ |<->| BARYCENTRIC COORDINATES ALONG TETA OF THE
75 !| | | NODES IN THEIR ASSOCIATED LAYER "ETA"
76 !| XK |-->| DISCRETIZED WAVE NUMBER
77 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78 !
79  USE bief
80  USE interface_tomawac, ex_prepro => prepro
81  USE declarations_telemac, ONLY : namecode
82 !
83  USE declarations_tomawac, ONLY : promin, depth, dt, steta, sfr,
84  & sct,scf, sshp1, sshz, sshf, ielm3, tb, mesh , mesh3d, sisub
86  IMPLICIT NONE
87 !
88 !
89 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
90 !
91  INTEGER, INTENT(IN) :: NPOIN3,NPOIN2,NELEM2,NDIRE,NF
92  DOUBLE PRECISION, INTENT(IN) :: XK(npoin2,nf),CG(npoin2,nf)
93  INTEGER, INTENT(INOUT) :: ELT(npoin3,nf),ETA(npoin3,nf)
94  INTEGER, INTENT(INOUT) :: FRE(*)
95  INTEGER, INTENT(IN) :: IKLE2(nelem2,3)
96  INTEGER, INTENT(INOUT) :: ITR01(npoin3,3),IFABOR(nelem2,7)
97  LOGICAL, INTENT(IN) :: COURAN
98  TYPE(bief_obj), INTENT(INOUT) :: CX,CY
99 !
100 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
101 !
102  INTEGER JF,IEL,I1,I2,I3
103  TYPE(bief_obj) :: BID
104  TYPE(slvcfg) :: SLVBID
105  INTEGER :: SIZ_ISUB, SIZ_FRE, JF_ISUB, JF_FRE
106  INTEGER, ALLOCATABLE :: TMP_ISUB(:)
107 !
108 !----------------------------------------------------------------------
109 !
110  IF(.NOT.couran) THEN
111 !
112 ! -------------------------------------------------------------------
113 !
114 ! RELATIVE = ABSOLUTE => ADVECTION IN 3D
115 ! SEPARATES OUT THE FREQUENCIES
116 !
117  DO jf=1,nf
118 !
119 ! ---------------------------------------------------------------
120 !
121 ! COMPUTES THE ADVECTION FIELD
122 !
123  CALL conwac
124  &( cx%R, cy%R, sct%R, xk, cg, npoin2, ndire, jf, nf)
125 !
126 ! ----------------------------------------------------------------
127 !
128  DO iel=1,nelem2
129  i1=ikle2(iel,1)
130  i2=ikle2(iel,2)
131  i3=ikle2(iel,3)
132  IF(depth(i1).LT.promin.AND.depth(i2).LT.promin.AND.
133  & ifabor(iel,1).GT.0) ifabor(iel,1)=-1
134  IF(depth(i2).LT.promin.AND.depth(i3).LT.promin.AND.
135  & ifabor(iel,2).GT.0) ifabor(iel,2)=-1
136  IF(depth(i3).LT.promin.AND.depth(i1).LT.promin.AND.
137  & ifabor(iel,3).GT.0) ifabor(iel,3)=-1
138  ENDDO
139 !
140  WRITE(lu,*) 'FREQUENCE :',jf
141 !
142  IF(ncsize.GT.1) THEN
143  siz_isub = npoin3
144  jf_isub = jf
145  ELSE
146  siz_isub = 1
147  jf_isub = 1
148  ENDIF
149  ! Manually creating contiguous temporary array
150  ALLOCATE(tmp_isub(siz_isub))
151  tmp_isub = sisub%I((jf_isub-1)*siz_isub+1:jf_isub*siz_isub)
152  CALL charac(sshz%ADR(jf)%P,sshz%ADR(jf)%P,0,
153  & cx,cy,sct,sct,steta,steta,dt,mesh3d%IFABOR,ielm3,
154  & npoin2,ndire,1,1,.false.,sshp1%ADR(jf)%P,
155  & sshz%ADR(jf)%P,sshz%ADR(jf)%P,tb,
156  & elt(1:npoin3,jf),eta(1:npoin3,jf),eta(1:npoin3,jf),
157  & itr01(1:npoin3,1),
158  & tmp_isub,
159  & itr01(1:npoin3,2),mesh3d,nelem2,nelem2,
160  & mesh%IKLE,
161  & mesh%SURDET,
162  & bid,bid,slvbid,0.d0,.false.,3,bid,1,
163 ! A POSTERIORI INTERPOLATION
164  & .true.,
165 ! AND PERIODICITY
166  & .true.)
167  sisub%I((jf_isub-1)*siz_isub+1:jf_isub*siz_isub) = tmp_isub
168  DEALLOCATE(tmp_isub)
169 !
170  ENDDO ! JF
171 !
172  ELSE
173 !
174 ! ---------------------------------------------------------------
175 !
176 ! IN A RELATIVE REFERENCE SYSTEM => ADVECTION IN 4D
177 ! IT IS NO LONGER POSSIBLE TO SEPARATE THE FREQUENCIES OUT
178 !
179  DO jf=1,nf
180 !
181  CALL conw4d(cx%R,cy%R,sct%R,scf%R, xk,cg,npoin2,ndire,
182  & jf,nf)
183 !
184  ENDDO
185 !
186  DO jf=1,nf
187 !
188  IF(ncsize.GT.1) THEN
189  siz_isub = npoin3
190  jf_isub = jf
191  ELSE
192  siz_isub = 1
193  jf_isub = 1
194  ENDIF
195  IF(couran.OR.namecode(1:7).EQ.'TELEMAC') THEN
196  siz_fre = npoin3
197  jf_fre = jf
198  ELSE
199  siz_fre = 1
200  jf_fre = 1
201  ENDIF
202  ! Manually creating contiguous temporary array
203  ALLOCATE(tmp_isub(siz_isub))
204  tmp_isub = sisub%I((jf_isub-1)*siz_isub+1:jf_isub*siz_isub)
205  CALL charac(sshz%ADR(jf)%P,sshz%ADR(jf)%P,0,
206  & cx,cy,sct,scf,steta,sfr,dt,mesh3d%IFABOR,ielm3,
207  & npoin2,ndire,jf,nf,.false.,sshp1%ADR(jf)%P,
208  & sshz%ADR(jf)%P,sshf%ADR(jf)%P,tb,
209  & elt(1:npoin3,jf),eta(1:npoin3,jf),
210  & fre((jf_fre-1)*siz_fre+1:jf_fre*siz_fre),
211  & itr01(1:npoin3,1),
212  & tmp_isub,
213  & itr01(1:npoin3,2),mesh3d,nelem2,nelem2,
214  & mesh%IKLE, mesh%SURDET,
215  & bid,bid,slvbid,0.d0,.false.,3,bid,1,
216 ! A POSTERIORI INTERPOLATION
217  & .true.,
218 ! AND PERIODICITY
219  & .true.,
220 ! AND 4D
221  & .true.)
222  sisub%I((jf_isub-1)*siz_isub+1:jf_isub*siz_isub) = tmp_isub
223  DEALLOCATE(tmp_isub)
224 !
225  ENDDO
226 !
227  ENDIF
228 !
229 !----------------------------------------------------------------------
230 !
231  RETURN
232  END
subroutine prepro(CX, CY, IKLE2, IFABOR, ELT, ETA, FRE, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN)
Definition: prepro.f:9
double precision, dimension(:), pointer depth
type(bief_obj), target steta
character(len=24) namecode
subroutine conw4d(CX, CY, CT, CF, XK, CG, NPOIN2, NDIRE, JF, NF)
Definition: conw4d.f:7
type(bief_obj), target sfr
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