The TELEMAC-MASCARET system  trunk
leclim.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE leclim
3 ! *****************
4 !
5  &(lihbor,liubor,livbor,litbor,hbor,ubor,vbor,tbor,
6  & chbord,atbor,btbor,nptfr,code,trac,fformat,ngeo,
7  & kent,kentu,ksort,kadh,klog,kinc,numliq,mesh,boundary_colour,
8  & nptfr2)
9 !
10 !***********************************************************************
11 ! BIEF V6P1 21/08/2010
12 !***********************************************************************
13 !
14 !brief READS THE BOUNDARY CONDITIONS FILE AND
15 !+ STORES IN ARRAYS THE DATA READ.
16 !
17 !history J-M HERVOUET (LNHE)
18 !+ 09/07/2009
19 !+ V6P0
20 !+
21 !
22 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
23 !+ 13/07/2010
24 !+ V6P0
25 !+ Translation of French comments within the FORTRAN sources into
26 !+ English comments
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 21/08/2010
30 !+ V6P0
31 !+ Creation of DOXYGEN tags for automated documentation and
32 !+ cross-referencing of the FORTRAN sources
33 !
34 !history Y AUDOUIN (LNHE)
35 !+ 25/05/2015
36 !+ V7P0
37 !+ Modification to comply with the hermes module
38 !
39 !history J. GRASSET (Daresbury Lab & EDF)
40 !+ 01/05/2018
41 !+ Add code for managing concatenated mesh
42 !
43 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !| LIHBOR |-->| TYPE OF BOUNDARY CONDITIONS ON DEPTH
45 !| LIUBOR |-->| TYPE OF BOUNDARY CONDITIONS ON U
46 !| LIVBOR |-->| TYPE OF BOUNDARY CONDITIONS ON V
47 !| LITBOR |-->| PHYSICAL BOUNDARY CONDITIONS FOR TRACERS
48 !| HBOR |<--| PRESCRIBED BOUNDARY CONDITION ON DEPTH
49 !| UBOR |<--| PRESCRIBED BOUNDARY CONDITION ON VELOCITY U
50 !| VBOR |<--| PRESCRIBED BOUNDARY CONDITION ON VELOCITY V
51 !| TBOR |<--| PRESCRIBED BOUNDARY CONDITION ON TRACER
52 !| CHBORD |<--| FRICTION COEFFICIENT AT BOUNDARY
53 !| ATBOR,BTBOR |<--| THERMAL EXCHANGE COEFFICIENTS.
54 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
55 !| CODE |-->| 3 LETTER NAME OF THE CODE
56 !| TRAC |-->| IF YES, THERE ARE TRACERS
57 !| FFORMAT |-->| FILE FORMAT
58 !| NGEO |-->| LOGICAL UNIT OF BOUNDARY CONDITIONS FILE
59 !| KENT |-->| CONVENTION FOR LIQUID INPUT WITH PRESCRIBED VALUE
60 !| KENTU |-->| CONVENTION FOR LIQUID INPUT WITH PRESCRIBED VELOCITY
61 !| KSORT |-->| CONVENTION FOR FREE OUTPUT
62 !| KADH |-->| CONVENTION FOR NO SLIP BOUNDARY CONDITION
63 !| KLOG |-->| CONVENTION FOR SOLID BOUNDARY
64 !| KINC |-->| CONVENTION FOR INCIDENT WAVE BOUNDARY CONDITION
65 !| NUMLIQ |-->| LIQUID BOUNDARY NUMBER OF BOUNDARY POINTS
66 !| MESH |-->| MESH STRUCTURE
67 !| BOUNDARY_COLOUR|<--| COLOUR OF BOUNDARY POINT (DEFAULT: ITS RANK)
68 !| NPTFR2 |-->| NUMBER OF QUADRATIC BOUNDARY POINTS
69 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 !
71  USE bief, ex_leclim => leclim
73 !
75  IMPLICIT NONE
76 !
77 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
78 !
79  INTEGER, INTENT(IN) :: NGEO,KENT,KSORT,KADH,KLOG,KINC,KENTU
80  INTEGER, INTENT(IN) :: NPTFR
81  LOGICAL, INTENT(IN) :: TRAC
82  INTEGER, INTENT(INOUT) :: NUMLIQ(*)
83  INTEGER, INTENT(INOUT) :: LIUBOR(nptfr),LIVBOR(nptfr)
84  INTEGER, INTENT(INOUT) :: LIHBOR(nptfr),LITBOR(*)
85  DOUBLE PRECISION, INTENT(INOUT) :: UBOR(*),VBOR(*)
86  DOUBLE PRECISION, INTENT(INOUT) :: HBOR(nptfr),CHBORD(nptfr)
87  DOUBLE PRECISION, INTENT(INOUT) :: TBOR(*),ATBOR(*)
88  DOUBLE PRECISION, INTENT(INOUT) :: BTBOR(*)
89  TYPE(bief_mesh), INTENT(INOUT) :: MESH
90  CHARACTER(LEN=3), INTENT(IN) :: CODE
91  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
92  INTEGER, OPTIONAL, INTENT(INOUT) :: BOUNDARY_COLOUR(nptfr)
93  INTEGER, OPTIONAL, INTENT(IN) :: NPTFR2
94 !
95 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
96 !
97  INTEGER NPTFR_BND, I, IERR, K
98  INTEGER, ALLOCATABLE :: BOUNDARY_COLOUR2(:)
99  INTEGER :: DIMUBOR, TYPE_BND_ELEM, NDP_BND, NELEBD
100 !
101  CHARACTER(LEN=11) :: EXTENS
102  EXTERNAL extens
103 !
104 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
105 !
106  type_bnd_elem = mesh%TYPELMBND
107  dimubor = nptfr
108  IF(PRESENT(nptfr2)) dimubor = nptfr2
109  CALL get_bnd_npoin(fformat,ngeo,type_bnd_elem,nptfr_bnd,ierr)
110  CALL check_call(ierr,'LECLIM:GET_BND_NPOIN')
111  ! Test difference between nptfr and nptfr_bnd
112  IF(nptfr.NE.nptfr_bnd) THEN
113  WRITE(lu,24) nptfr_bnd,nptfr
114 24 FORMAT(1x,'LECLIM: ERROR IN THE BOUNDARY CONDITIONS FILE,',
115  & /,9x,1i5,' LINES INSTEAD OF ',i5,' REQUESTED')
116  CALL plante(1)
117  stop
118  ENDIF
119  !
120  CALL get_bnd_nelem(fformat,ngeo,type_bnd_elem,nelebd,ierr)
121  CALL check_call(ierr,'LECLIM:GET_BND_NPOIN')
122 
123  CALL get_nodes_per_element(type_bnd_elem,ndp_bnd)
124  ! Get nbor
125  ! Only reading nbor from mesh in serial (because of renumbering)
126  ! In parallel it will be read by read_partel_info
127  IF(ncsize.LE.1) THEN
128  CALL get_bnd_numbering(fformat,ngeo,type_bnd_elem,nptfr_bnd,
129  & mesh%NBOR%I,ierr)
130  IF(PRESENT(boundary_colour)) THEN
131  CALL get_bnd_color(fformat,ngeo,type_bnd_elem,nptfr_bnd,
132  & boundary_colour,ierr)
133  CALL check_call(ierr,'LECLIM:GET_BND_COLOR')
134  ENDIF
135  ELSE
136  ALLOCATE(boundary_colour2(nptfr),stat=ierr)
137  CALL check_allocate(ierr,'LECLIM:BOUNDARY_COLOUR2')
138 !
139  CALL read_partel_info(code,nptfr,numliq,boundary_colour2,
140  & mesh)
141 !
142  IF(PRESENT(boundary_colour)) THEN
143  DO i=1,nptfr
144  boundary_colour(i) = boundary_colour2(i)
145  ENDDO
146  ENDIF
147  DEALLOCATE(boundary_colour2)
148  ENDIF
149  ! Get value of each boundary conditions
150  CALL get_bnd_value(fformat,ngeo,type_bnd_elem,nelebd,
151  & lihbor,liubor,livbor,hbor,ubor,vbor,chbord,trac,
152  & litbor,tbor,atbor,btbor,nptfr_bnd,ierr)
153  CALL check_call(ierr,'LECLIM:GET_BND_VALUE')
154 !
155  DO k=1,nptfr
156 !
157 ! ADHERENCE FOR H CHANGED AT THE WALL
158 !
159  IF(lihbor(k).EQ.kadh) THEN
160  lihbor(k)=klog
161  WRITE(lu,52) k
162 52 FORMAT(1x,'LECLIM : ADHERENCE SUR LA HAUTEUR AU POINT ',1i6,
163  & ' CHANGEE EN CONDITION DE PAROI')
164  ENDIF
165 !
166 ! INCIDENT WAVE FOR H TREATED LIKE A FREE EXIT
167 !
168  IF(lihbor(k).EQ.kinc) THEN
169  lihbor(k)=ksort
170  ENDIF
171 !
172 ! CANCELS DIRICHLET VALUES WHEN THE POINT IS NOT DIRICHLET
173 ! FOR POINTS WITH ADHERENCE, NEEDS UBOR OR VBOR =0
174 !
175  IF(liubor(k).NE.kent.AND.liubor(k).NE.kentu) ubor(k)=0.d0
176  IF(livbor(k).NE.kent.AND.livbor(k).NE.kentu) vbor(k)=0.d0
177 !
178 ! BACKS UP UBOR AND VBOR ON THEIR SECOND DIMENSION
179 !
180  ubor(k+dimubor) = ubor(k)
181  vbor(k+dimubor) = vbor(k)
182 !
183  ENDDO ! K
184 !
185 !-----------------------------------------------------------------------
186 !
187  RETURN
188  END
subroutine get_bnd_npoin(FFORMAT, FID, TYPE_BND_ELEM, NPTFR, IERR)
Definition: get_bnd_npoin.f:7
subroutine get_bnd_color(FFORMAT, FID, TYP_BND_ELEM, NELEBD, COLOR, IERR)
Definition: get_bnd_color.f:7
subroutine get_bnd_nelem(FFORMAT, FID, TYPE_BND_ELEM, NELEM, IERR)
Definition: get_bnd_nelem.f:7
subroutine read_partel_info(CODE, NPTFR, NUMLIQ, BOUNDARY_COLOUR, MESH)
subroutine get_bnd_numbering(FFORMAT, FID, TYP_BND_ELEM, NPTFR, NBOR, IERR)
subroutine get_bnd_value(FFORMAT, FID, TYP_BND_ELEM, NELEBD, LIHBOR, LIUBOR, LIVBOR, HBOR, UBOR, VBOR, CHBORD, TRAC, LITBOR, TBOR, ATBOR, BTBOR, NPTFR, IERR)
Definition: get_bnd_value.f:9
subroutine leclim(LIHBOR, LIUBOR, LIVBOR, LITBOR, HBOR, UBOR, VBOR, TBOR, CHBORD, ATBOR, BTBOR, NPTFR, CODE, TRAC, FFORMAT, NGEO, KENT, KENTU, KSORT, KADH, KLOG, KINC, NUMLIQ, MESH, BOUNDARY_COLOUR, NPTFR2)
Definition: leclim.f:10
Definition: bief.f:3