The TELEMAC-MASCARET system  trunk
maskbd.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE maskbd
3 ! *****************
4 !
5  &(maskel,zfe,zf,hn,hmin,ikle,ifabor,itra01,nelem,npoin)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief MASKS DRY OR PARTIALLY DRY ELEMENTS.
12 !code
13 !+ ALGORITHM:
14 !+
15 !+ - AN ELEMENT IS MASKED IF THE BOTTOM ELEVATION ZFE IS HIGHER THAN
16 !+ THE FREE SURFACE ELEVATION AT ITS BARYCENTRE
17 !+
18 !+ - ANY ELEMENT WHICH BOTTOM ELEVATION ZFE IS HIGHER THAN THE
19 !+ ELEVATION ZFE OF A MASKED NEIGHBOUR IS IN TURN MASKED
20 !+
21 !+ WHEN TURNING AROUND A NODE, FUNCTION ZFE ONLY HAS A MIN AND
22 !+ A MAX (SEE TOPOGR). THE SECOND PHASE OF THE ALGORITHM THUS
23 !+ ENSURES THAT NO 2 PARTS OF THE DOMAIN ARE ONLY CONNECTED BY
24 !+ 1 VERTEX. THIS TREATMENT ALSO PREVENTS INOPPORTUNE MASKING-
25 !+ DEMASKING, IN PARTICULAR IN TIDAL FLAT AREAS.
26 !+
27 !+
28 !+ DISADVANTAGES:
29 !+
30 !+ THIS ALGORITHM ASSUMES THAT THE FREE SURFACE IS QUASI HORIZONTAL.
31 !+ IT IS WELL SUITED TO STUDY EVOLUTIONS DUE TO TIDAL EFFECTS, BUT
32 !+ NOT TO STUDY DAM BREAKS.
33 !
34 !history J-M JANIN (LNH)
35 !+ 11/08/94
36 !+ V5P1
37 !+
38 !
39 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
40 !+ 13/07/2010
41 !+ V6P0
42 !+ Translation of French comments within the FORTRAN sources into
43 !+ English comments
44 !
45 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
46 !+ 21/08/2010
47 !+ V6P0
48 !+ Creation of DOXYGEN tags for automated documentation and
49 !+ cross-referencing of the FORTRAN sources
50 !
51 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
52 !| HMIN |-->| MINIMUM VALUE OF DEPTH
53 !| HN |-->| WATER DEPTH AT TIME N
54 !| IFABOR |-->| ELEMENTS BEHIND THE EDGES OF A TRIANGLE
55 !| | | IF NEGATIVE OR ZERO, THE EDGE IS A LIQUID
56 !| | | BOUNDARY
57 !| IKLE |-->| CONNECTIVITY TABLE.
58 !| ITRA01 |-->| WORK ARRAY OF INTEGERS
59 !| MASKEL |<--| MASKING OF ELEMENTS
60 !| | | =1. : NORMAL =0. : MASKED ELEMENT
61 !| NELEM |-->| NUMBER OF ELEMENTS
62 !| NPOIN |-->| NUMBER OF POINTS
63 !| ZF |-->| ELEVATION OF BOTTOM
64 !| ZFE |-->| ELEVATION OF BOTTOM, PER ELEMENT
65 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66 !
67  IMPLICIT NONE
68 !
69 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 !
71  INTEGER, INTENT(IN) :: NELEM,NPOIN
72  INTEGER, INTENT(IN) :: IKLE(nelem,3),IFABOR(nelem,3)
73  INTEGER, INTENT(INOUT) :: ITRA01(nelem)
74  DOUBLE PRECISION, INTENT(IN) :: ZFE(nelem),ZF(npoin),HN(npoin)
75  DOUBLE PRECISION, INTENT(IN) :: HMIN
76  DOUBLE PRECISION, INTENT(INOUT) :: MASKEL(nelem)
77 !
78 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79 !
80  INTEGER IELEM,I1,I2,I3,N
81 !
82  DOUBLE PRECISION ZSE
83 !
84  LOGICAL FLAG
85 !
86  DOUBLE PRECISION, PARAMETER :: EPSILO = 1.d-6
87 !
88 !-----------------------------------------------------------------------
89 !
90  flag = .false.
91 !
92  DO ielem = 1,nelem
93  i1 = ikle(ielem,1)
94  i2 = ikle(ielem,2)
95  i3 = ikle(ielem,3)
96  zse = (zf(i1)+hn(i1)+zf(i2)+hn(i2)+zf(i3)+hn(i3))/3.d0
97  IF (zfe(ielem)+hmin+epsilo.GT.zse) THEN
98  flag = .true.
99  maskel(ielem) = 0.d0
100  ENDIF
101  ENDDO ! IELEM
102 !
103 20 CONTINUE
104 !
105  IF (flag) THEN
106 !
107  flag = .false.
108  DO ielem = 1,nelem
109 !
110  itra01(ielem) = 0
111  IF (maskel(ielem).GT.0.5d0) THEN
112 !
113  n=ifabor(ielem,1)
114  IF (n.GT.0) THEN
115  IF (maskel(n).LT.0.5d0.AND.zfe(ielem).GT.
116  & zfe(n)-epsilo) itra01(ielem) = 1
117  ENDIF
118  n=ifabor(ielem,2)
119  IF (n.GT.0) THEN
120  IF (maskel(n).LT.0.5d0.AND.zfe(ielem).GT.
121  & zfe(n)-epsilo) itra01(ielem) = 1
122  ENDIF
123  n=ifabor(ielem,3)
124  IF (n.GT.0) THEN
125  IF (maskel(n).LT.0.5d0.AND.zfe(ielem).GT.
126  & zfe(n)-epsilo) itra01(ielem) = 1
127  ENDIF
128 !
129  ENDIF
130 !
131  ENDDO ! IELEM
132 !
133  DO ielem = 1,nelem
134  IF (itra01(ielem).EQ.1) THEN
135  flag = .true.
136  maskel(ielem) = 0.d0
137  ENDIF
138  ENDDO ! IELEM
139 !
140  GOTO 20
141 !
142  ENDIF
143 !
144 !-----------------------------------------------------------------------
145 !
146  RETURN
147  END
subroutine maskbd(MASKEL, ZFE, ZF, HN, HMIN, IKLE, IFABOR, ITRA01, NELEM, NPOIN)
Definition: maskbd.f:7