The TELEMAC-MASCARET system  trunk
conlit.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE conlit
3 ! *****************
4 !
5  &(nbor,at)
6 !
7 !***********************************************************************
8 ! SISYPHE V7P3 17/03/2017
9 !***********************************************************************
10 !
11 !brief ALLOWS TO IMPOSE TIME VARYING BOUNDARY CONDITIONS
12 !+ (CONSTANT VALUES CAN BE DIRECTLY IMPOSED IN CONDIM
13 !+ INPUT FILE).
14 !+
15 !+
16 !+ ALLOWS TO IMPOSE A SAND TRANSPORT RATE AT SOME
17 !+ BOUNDARY NODES (QBOR AND LIQBOR). IT IS THEN NECESSARY
18 !+ TO ALSO IMPOSE LIEBOR = KSORT AT THESE NODES !
19 !
20 !history E. PELTIER; C. LENORMANT; J.-M. HERVOUET
21 !+ 11/09/1995
22 !+
23 !+
24 !
25 !history CV
26 !+ 19/06/2008
27 !+ V5P9
28 !+ TAKES INTO ACCOUNT CBOR_VASE AND CBOR_SABLE
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 13/07/2010
32 !+ V6P0
33 !+ Translation of French comments within the FORTRAN sources into
34 !+ English comments
35 !
36 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
37 !+ 21/08/2010
38 !+ V6P0
39 !+ Creation of DOXYGEN tags for automated documentation and
40 !+ cross-referencing of the FORTRAN sources
41 !
42 !history P. TASSI & J-M HERVOUET (LNHE)
43 !+ 24/07/2012
44 !+ V6P2
45 !+ Dealing with new key-word "prescribed solid discharges"
46 !
47 !history P. TASSI
48 !+ 09/07/2013
49 !+ V6P3
50 !+ Correction for multiples boundaries. Thanks to Dougal Clunie
51 !+ for pointing out this error.
52 !
53 !history R. KOPMANN (BAW)
54 !+ 13/07/2016
55 !+ V7P2
56 !+ Integrating liquid boundary file for QS
57 !
58 !history M. SECHER AND P. TASSI (EDF)
59 !+ 17/03/2017
60 !+ V7P3
61 !+ Add conditional for liquid boundary file for QS
62 !
63 !history J,RIEHME (ADJOINTWARE)
64 !+ November 2016
65 !+ V7P2
66 !+ Replaced EXTERNAL statements to parallel functions / subroutines
67 !+ by the INTERFACE_PARALLEL
68 !
69 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINT
71 !| AT |-->| TEMPS (s)
72 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 !
74  USE bief
77 !
79  USE interface_parallel, ONLY : p_max
80  IMPLICIT NONE
81 !
82 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83 !
84  INTEGER, INTENT(IN) :: NBOR(nptfr)
85  DOUBLE PRECISION, INTENT(IN) :: AT
86 !
87 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
88 !
89  INTEGER I,K,IFRLIQ,IRANK
90  INTEGER YADEB(maxfro)
91 !
92  DOUBLE PRECISION, EXTERNAL :: CGL
93  DOUBLE PRECISION, EXTERNAL :: QGL
94 !
95 !-----------------------------------------------------------------------
96 !
97 ! INITIALISATION OF YADEB
98 !
99  IF(nfrliq.GE.1) THEN
100  DO i=1,nfrliq
101  yadeb(i)=0
102  ENDDO
103  ENDIF
104 !
105 !-----------------------------------------------------------------------
106 !
107 ! DISTRIBUTING THE (TOTAL) PRESCRIBED EVOLUTION TAKEN IN THE
108 ! BOUNDARY CONDITIONS FILE WITH RESPECT TO FRACTIONS IN THE
109 ! FIRST LAYER
110 !
111  IF(nsicla.GT.1) THEN
112  DO i=nsicla,1,-1
113  DO k=1,nptfr
114  ebor%ADR(i)%P%R(k)=avail(nbor(k),1,i)*ebor%ADR(1)%P%R(k)
115  ENDDO
116  ENDDO
117  ENDIF
118 !
119 !-----------------------------------------------------------------------
120 !
121  DO k=1,nptfr
122 !
123  i = nbor(k)
124 !
125 ! HERE KADH (WALL WITH NO SLIP CONDITION) IS CHANGED INTO KLOG (WALL)
126 !
127  IF(liebor%I(k).EQ.kadh) THEN
128  liebor%I(k)= klog
129  ELSEIF(liebor%I(k).EQ.kent) THEN
130 ! WARNING !!!!!!!!!!!!!! DYNAMITE !!!!!!!!!
131 ! FOR COMPATIBILITY OF OLD STUDIES, LIEBOR=KENT SUPERSEDES LIQBOR=KENT
132 ! IF BOTH ARE GIVEN AS KENT
133  liqbor%I(k)= ksort
134  ENDIF
135 !
136 ! CASES WHERE WE HAVE A PRESCRIBED DISCHARGE
137 !
138  IF(liqbor%I(k).EQ.kent) yadeb(numliq%I(k))=1
139 !
140 ! DIRICHLET CONDITIONS
141 ! EITHER ON EVOLUTION OR ON SOLID DISCHARGE
142 !
143  ! USER FUNCTION
144  CALL user_conlit(nbor,at)
145 !
146  ENDDO
147 !
148 ! DEALING WITH PRESCRIBED SOLID DISCHARGES
149 !
150  IF(nfrliq.GT.0) THEN
151  DO ifrliq=1,nfrliq
152  IF(ncsize.GT.1) yadeb(ifrliq)=p_max(yadeb(ifrliq))
153  IF(yadeb(ifrliq).EQ.1) THEN
154 !
155 ! READING BOUNDARY CONDITION FILE WITH SOLID DISCHARGE
156 !
157  IF(charr) THEN
158 ! AVOID OVERRIDING WITH SUSPENDED SEDIMENT TRANSPORT
159  IF(sis_files(sisliq)%NAME(1:1).NE.' ') THEN
160  soldis(ifrliq)=qgl(ifrliq,at)
161  ENDIF
162  ENDIF
163 
164  CALL disimp(soldis(ifrliq),q2bor,numliq%I,ifrliq,nsoldis,
165  & t5,t1,
166 ! MASK OF LIQUID BOUNDARIES DONE IN SISYPHE
167  & nptfr,mask%R,mesh)
168 !
169  IF(nsicla.GT.1) THEN
170  DO i=1,nsicla
171  DO k=1,nptfr
172  IF(numliq%I(k).EQ.ifrliq.AND.
173  & liqbor%I(k).EQ.kent) THEN
174  qbor%ADR(i)%P%R(k)=avail(nbor(k),1,i)*t1%R(k)
175  ENDIF
176  ENDDO
177  ENDDO
178  ELSE
179  DO k=1,nptfr
180  IF(numliq%I(k).EQ.ifrliq.AND.
181  & liqbor%I(k).EQ.kent) THEN
182  qbor%ADR(1)%P%R(k)=t1%R(k)
183  ENDIF
184  ENDDO
185  ENDIF
186  ENDIF
187  ENDDO
188  ENDIF
189 !
190 !-----------------------------------------------------------------------
191 ! LICBOR : BOUNDARY CONDITION FOR SEDIMENT CONCENTRATION
192 !-----------------------------------------------------------------------
193 !
194  IF(susp) THEN
195 !
196  DO k=1,nptfr
197 !
198 ! SO FAR LICBOR=LIEBOR (WITH KADH CHANGED INTO KLOG, SEE ABOVE,
199 ! BUT CAN BE CHANGED)
200 !
201  licbor%I(k) = liebor%I(k)
202 !
203 ! ENTRANCE : IMPOSED CONCENTRATION
204 ! -------------------------------
205 !
206 ! KSORT MUST BE TREATED ALSO BECAUSE SUBROUTINE DIFFIN
207 ! MAY CHANGE A KSORT INTO KENT, DEPENDING OF FLOW
208 !
209  ifrliq=numliq%I(k)
210  IF(liebor%I(k).EQ.kent.OR.liebor%I(k).EQ.ksort) THEN
211  DO i=1,nsicla
212  irank=i+(ifrliq-1)*nsicla
213  cbor%ADR(i)%P%R(k) = cbor_classe(irank)
214  ENDDO
215  ENDIF
216 !
217 ! READING BOUNDARY CONDITION FILE
218 !
219  IF(licbor%I(k).EQ.kent.AND.
220  & sis_files(sisliq)%NAME(1:1).NE.' ') THEN
221  IF(ifrliq.GT.0) THEN
222  DO i=1,nsicla
223  cbor%ADR(i)%P%R(k)=cgl(ifrliq,at)/xmvs
224  ENDDO
225  ENDIF
226  ENDIF
227 !
228  ENDDO
229 !
230  ENDIF
231 !
232 !-----------------------------------------------------------------------
233 !
234  RETURN
235  END
double precision, dimension(:), allocatable, target cbor_classe
type(bief_obj), target numliq
type(bief_obj), target licbor
type(bief_obj), target q2bor
integer, parameter kadh
type(bief_obj), target ebor
subroutine conlit(NBOR, AT)
Definition: conlit.f:7
type(bief_obj), pointer t5
type(bief_obj), target cbor
type(bief_obj), target mask
integer, parameter kent
subroutine user_conlit(NBOR, AT)
Definition: user_conlit.f:7
type(bief_obj), target liebor
type(bief_obj), pointer t1
subroutine disimp(Q, Q2BOR, NUMLIQ, IFRLIQ, NSOLDIS, WORK1, QBOR, NPTFR, MASK, MESH)
Definition: disimp.f:7
type(bief_obj), target qbor
double precision, dimension(:), allocatable soldis
type(bief_obj), target liqbor
double precision, dimension(:,:,:), allocatable, target avail
type(bief_mesh), target mesh
integer, parameter klog
integer, parameter ksort
type(bief_file), dimension(maxlu_sis), target sis_files
Definition: bief.f:3