The TELEMAC-MASCARET system  trunk
bedload_diffin.f
Go to the documentation of this file.
1 ! *************************
2  SUBROUTINE bedload_diffin
3 ! *************************
4 !
5  &(u, v, nbor, xnebor, ynebor, maskel, nelbor, nptfr,
6  & kent, ksort, klog, kdir, kddl, kneu, msk, clt, litbor,
7  & masktr, limtra,iklbor,neleb,nelebx)
8 !
9 !***********************************************************************
10 ! SISYPHE V7P0 27/03/2014
11 !***********************************************************************
12 !
13 !brief INITIALISES THE BOUNDARY CONDITIONS.
14 !
15 !history FRANCOIS MENARD (PLACEMENT @ LNHE)
16 !+ 17/08/2004
17 !+ V6P0
18 !+
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
33 !+ 19/07/2011
34 !+ V6P1
35 !+ Name of variables
36 !
37 !history J-M HERVOUET (EDF LAB, LNHE)
38 !+ 27/03/2014
39 !+ V7P0
40 !+ Adaptation to different numbering of boundary elements.
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| CLT |<->| TYPE OF BOUNDARY CONDITIONS FOR TRACER (MODIFIED LITBOR)
44 !| IKLBOR |-->| CONNECTIVITY OF BOUNDARY ELEMENTS.
45 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
46 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
47 !| KENT |-->| CONVENTION FOR LIQUID INPUT WITH PRESCRIBED VALUE
48 !| KINC |-->| CONVENTION FOR INCIDENT WAVE BOUNDARY CONDITION
49 !| KLOG |-->| CONVENTION FOR SOLID BOUNDARY
50 !| KNEU |-->| CONVENTION FOR NEUMANN CONDITION
51 !| KSORT |-->| CONVENTION FOR FREE OUTPUT
52 !| LIMTRA |<->| TYPE OF BOUNDARY CONDITION FOR TRACER
53 !| LITBOR |<->| TYPE OF BOUNDARY CONDITIONS FOR TRACER (***)
54 !| MASKEL |-->| MASKING OF ELEMENTS
55 !| MASKTR |<->| MASKING FOR TRACERS, PER POINT
56 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS
57 !| NBOR |-->| NUMBER OF BOUDARY POINTS
58 !| NELBOR |-->| NUMBERS OF ELEMENTS TOUCHING THE BORDER
59 !| NELEB |-->| NUMBER OF BOUDARY ELEMENTS
60 !| NELEBX |-->| MAXIMUM NUMBER OF BOUDARY ELEMENTS
61 !| NPTFR |-->| NUMBER OF BOUDARIES
62 !| U |-->| FLOW VELOCITY IN THE X DIRECTION
63 !| V |-->| FLOW VELOCITY IN THE Y DIRECTION
64 !| XNEBOR |-->| X-COORDINATES OF THE BOUNDARY POINT
65 !| YNEBOR |-->| Y-COORDINATES OF THE BOUNDARY POINT
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68  USE interface_sisyphe, ex_bedload_diffin => bedload_diffin
69  USE bief
71  IMPLICIT NONE
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  TYPE(bief_obj), INTENT(IN) :: U,V,NBOR,XNEBOR,YNEBOR
76  TYPE(bief_obj), INTENT(IN) :: MASKEL,NELBOR
77  INTEGER, INTENT(IN) :: NPTFR,KENT,KSORT,KLOG
78  INTEGER, INTENT(IN) :: KDIR,KDDL,KNEU,NELEB,NELEBX
79  INTEGER, INTENT(IN) :: IKLBOR(nelebx,2)
80  LOGICAL, INTENT(IN) :: MSK
81  TYPE(bief_obj), INTENT(INOUT) :: CLT
82  TYPE(bief_obj), INTENT(INOUT) :: LITBOR, MASKTR, LIMTRA
83 !
84 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85 !
86  INTEGER :: K,K1,K2,IELEB
87  DOUBLE PRECISION :: USCALN,C
88  INTEGER, PARAMETER :: DIR = 1
89  INTEGER, PARAMETER :: DDL = 2
90  INTEGER, PARAMETER :: NEU = 3
91 !
92 !======================================================================!
93 !======================================================================!
94 ! PROGRAM !
95 !======================================================================!
96 !======================================================================!
97 !
98  ! ****************************************************** !
99  ! I - TYPES OF BOUNDARY CONDITIONS FOR THE TRACER !
100  ! MAY BE MODIFIED DEPENDING ON THE SIGN OF U.N !
101  ! FOR THE LIQUID BOUNDARIES (N : OUTGOING NORMAL) !
102  ! ****************************************************** !
103 !
104  DO k = 1, nptfr
105  clt%I(k) = litbor%I(k)
106  ! I.1 - LIQUID BOUNDARIES
107  ! --------------------------------------
108  IF (clt%I(k) == kent) THEN
109  uscaln = u%R(nbor%I(k))*xnebor%R(k)
110  & + v%R(nbor%I(k))*ynebor%R(k)
111  ! OUTGOING VELOCITY, FREE TRACER
112  ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
113  IF (uscaln >= 0.d0) clt%I(k) = ksort
114  ELSEIF(clt%I(k) == ksort) THEN
115  uscaln = u%R(nbor%I(k))*xnebor%R(k)
116  & + v%R(nbor%I(k))*ynebor%R(k)
117  ! ENTERING VELOCITY, FREE TRACER
118  ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119  IF (uscaln <= 0.d0) clt%I(k) = kent
120  ENDIF
121  ENDDO
122 !
123  ! **************************************************************** !
124  ! II - MASKTR ARRAY DEFINED AS A FUNCTION OF CLT !
125  ! EQUALS 1 FOR A SEGMENT OF NEUMANN TYPE, AND 0 OTHERWISE !
126  ! A SEGMENT IS OF NEUMANN TYPE IF THE USER SPECIFIES AT LEAST !
127  ! ONE OF ITS NODES AS NEUMANN. !
128  ! **************************************************************** !
129 !
130  CALL os('X=0 ', x=masktr)
131 !
132  DO ieleb = 1 , neleb
133  k1=iklbor(ieleb,1)
134  k2=iklbor(ieleb,2)
135  ! II.1 - NEUMANN TYPE SEGMENTS
136  ! -------------------------------
137  IF(clt%I(k1).EQ.klog.OR.clt%I(k2).EQ.klog) THEN
138  masktr%ADR(neu)%P%R(ieleb) = 1.d0
139  ! II.2 - OUTGOING TYPE SEGMENTS
140  ! ------------------------------
141  ELSEIF(clt%I(k1).EQ.kent.AND.clt%I(k2).EQ.ksort) THEN
142  masktr%ADR(ddl)%P%R(ieleb) = 1.d0
143  ELSEIF (clt%I(k1).EQ.ksort.OR.clt%I(k2).EQ.ksort) THEN
144  masktr%ADR(ddl)%P%R(ieleb) = 1.d0
145  ! II.3 - OUTGOING TYPE SEGMENTS
146  ! ------------------------------
147  ELSEIF(clt%I(k1).EQ.ksort.AND.clt%I(k2).EQ.kent) THEN
148  masktr%ADR(ddl)%P%R(ieleb) = 1.d0
149  ELSEIF(clt%I(k1).EQ.kent.OR.clt%I(k2).EQ.kent) THEN
150  masktr%ADR(dir)%P%R(ieleb) = 1.d0
151  ELSE
152  WRITE(lu,102)
153  CALL plante(1)
154  stop
155  ENDIF
156  ENDDO
157 !
158  ! *********************** !
159  ! III - POTENTIAL MASKING !
160  ! *********************** !
161 !
162  IF(msk) THEN
163  DO ieleb = 1 , neleb
164  c=maskel%R(nelbor%I(ieleb))
165  masktr%ADR(dir)%P%R(ieleb) = masktr%ADR(dir)%P%R(ieleb)*c
166  masktr%ADR(ddl)%P%R(ieleb) = masktr%ADR(ddl)%P%R(ieleb)*c
167  masktr%ADR(neu)%P%R(ieleb) = masktr%ADR(neu)%P%R(ieleb)*c
168  ENDDO
169  ENDIF
170 !
171  ! ************************************************************** !
172  ! IV - FROM PHYSICAL CONDITION TO TECHNICAL CONDITIONS !
173  ! ************************************************************** !
174 !
175  DO k = 1, nptfr
176  ! IV.1 - 'INCOMING' BOUNDARY : IMPOSED TRACER
177  ! -----------------------------------------
178  IF(clt%I(k).EQ.kent) THEN
179  limtra%I(k) = kdir
180  ELSEIF(clt%I(k).EQ.ksort) THEN
181  limtra%I(k) = kddl
182  ! IV.2 - SOLID BOUNDARY : NEUMANN CONDITIONS
183  ! ------------------------------------
184  ELSEIF(clt%I(k).EQ.klog ) THEN
185  limtra%I(k) = kneu
186  ! IV.3 - ERROR: UNKNOWN LITBOR VALUE
187  ! ----------------------------------------
188  ELSE
189  WRITE(lu,12) k, litbor%I(k)
190  CALL plante(1)
191  stop
192  ENDIF
193  ENDDO
194  !----------------------------------------------------------------!
195 102 FORMAT(' BEDLOAD_DIFFIN: UNEXPECTED CASE')
196 12 FORMAT(' BEDLOAD_DIFFIN: POINT ',1i8,' LITBOR= ',1i8,' ?')
197  !----------------------------------------------------------------!
198 !
199 !======================================================================!
200 !======================================================================!
201 !
202  RETURN
203  END
subroutine bedload_diffin(U, V, NBOR, XNEBOR, YNEBOR, MASKEL, NELBOR, NPTFR, KENT, KSORT, KLOG, KDIR, KDDL, KNEU, MSK, CLT, LITBOR, MASKTR, LIMTRA, IKLBOR, NELEB, NELEBX)
Definition: bedload_diffin.f:9
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
Definition: bief.f:3