The TELEMAC-MASCARET system  trunk
crsl11.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE crsl11
3 ! *****************
4 !
5  &(newsl,oldsl,zf,ikle,nelem,nelmax)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief CORRECTS THE FREE SURFACE COMPUTATION BY ELEMENTS
12 !+ TO TAKE ACCOUNT OF THE TIDAL FLATS.
13 !
14 !history J-M JANIN (LNH)
15 !+ 27/11/92
16 !+ V5P5
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 !| IKLE |-->| CONNECTIVITY TABLE
33 !| NELEM |-->| NUMBER OF ELEMENTS
34 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
35 !| NEWSL |<->| MODIFIED FREE SURFACE, PER ELEMENT
36 !| OLDSL |-->| REAL FREE SURFACE, PER POINT
37 !| ZF |-->| BATHYMETRY
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !
41  IMPLICIT NONE
42 !
43 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44 !
45  INTEGER, INTENT(IN) :: NELEM,NELMAX
46  DOUBLE PRECISION, INTENT(INOUT) :: NEWSL(nelmax,3)
47  DOUBLE PRECISION, INTENT(IN) :: OLDSL(*),ZF(*)
48  INTEGER, INTENT(IN) :: IKLE(nelmax,3)
49 !
50 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 !
52  INTEGER IELEM,IK(3),J(3)
53 !
54 !-----------------------------------------------------------------------
55 !
56  INTRINSIC max
57 !
58 !-----------------------------------------------------------------------
59 !
60 ! 1) SORTS (ASCENDING ORDER) THE BOTTOM ELEVATIONS AND POTENTIALLY
61 ! CORRECTS THE FREE SURFACE ELEVATION FOR DRYING ELEMENTS
62 !
63 !-----------------------------------------------------------------------
64 !
65  DO ielem = 1 , nelem
66 !
67  ik(1) = ikle(ielem,1)
68  ik(2) = ikle(ielem,2)
69  ik(3) = ikle(ielem,3)
70  j(1) = 1
71  j(2) = 2
72  j(3) = 3
73 !
74 ! SORTS THE 3 POINTS
75 !
76  IF(zf(ik(2)).LT.zf(ik(1))) THEN
77  j(2)=1
78  j(1)=2
79  ENDIF
80  IF(zf(ik(3)).LT.zf(ik(j(2)))) THEN
81  j(3)=j(2)
82  j(2)=3
83  IF(zf(ik(3)).LT.zf(ik(j(1)))) THEN
84  j(2)=j(1)
85  j(1)=3
86  ENDIF
87  ENDIF
88 !
89 ! CORRECTS
90 !
91  newsl(ielem,j(1))=max(zf(ik(j(2))),oldsl(ik(j(1))))
92  newsl(ielem,j(2))=oldsl(ik(j(2)))
93  newsl(ielem,j(3))=
94  & oldsl(ik(j(3)))-max(0.d0,zf(ik(j(3)))-oldsl(ik(j(2))))
95 !
96  ENDDO ! IELEM
97 !
98 !-----------------------------------------------------------------------
99 !
100  RETURN
101  END
subroutine crsl11(NEWSL, OLDSL, ZF, IKLE, NELEM, NELMAX)
Definition: crsl11.f:7