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