The TELEMAC-MASCARET system  trunk
longitu.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE longitu
3 ! ******************
4 !
5  &(xel,coslat,ikle,nelmax,nelem)
6 !
7 !***********************************************************************
8 ! BIEF V7P1
9 !***********************************************************************
10 !
11 !brief CORRECT THE ARRAYS THAT DEPEND ON THE LONGITUDE
12 !+ OF THE GIVEN ELEMENT.
13 !
14 !history M.S.TURNBULL (HRW) and S.E.BOURBAN (HRW)
15 !+ 01/10/2015
16 !+ V7P1
17 !+ Correction to the computation of the XEL in spherical coordinates.
18 !
19 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 !| XEL |<->| VECTOR DEFINED PER ELEMENT
21 !| COSLAT |-->| COSINUS OF LATITUDE OF ORIGIN POINT
22 !| IKLE |-->| CONNECTIVITY TABLE
23 !| NELEM |-->| NUMBER OF ELEMENTS
24 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
25 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 !
27  IMPLICIT NONE
28 !
29 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30 !
31  INTEGER, INTENT(IN) :: NELEM,NELMAX
32  INTEGER , INTENT(IN) :: IKLE(nelmax,3)
33  DOUBLE PRECISION, INTENT(IN) :: COSLAT(*)
34  DOUBLE PRECISION, INTENT(INOUT) :: XEL(nelmax,3)
35 !
36 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
37 !
38  INTEGER IELEM
39 !
40  DOUBLE PRECISION R,PIR,SCAEL
41 !
42  INTRINSIC atan
43 !
44 !-----------------------------------------------------------------------
45 !
46 ! EARTH RADIUS
47 !
48  r = 6370000.d0
49 !
50 !-----------------------------------------------------------------------
51 !
52 ! FILTER XEL ON THE DATELINE, AND THEN ONLY SCALE
53 !
54 ! WARNING: XEL ON EITHER SIDE OF THE SAME SEGMENT MIGHT BE DIFFERENT
55 ! ANOTHER SOLUTION WHERE SCAEL is SCAEDGE MIGHT BE MORE APPROPRIATE
56 !
57  pir = 4.d0 * atan(1.d0) * r
58 !
59  DO ielem = 1,nelem
60 !
61  IF(xel(ielem,2).GT.pir) THEN
62  xel(ielem,2) = xel(ielem,2) - 2.d0 * pir
63  ELSEIF(xel(ielem,2).LT.-pir) THEN
64  xel(ielem,2) = xel(ielem,2) + 2.d0 * pir
65  ENDIF
66 !
67  IF(xel(ielem,3).GT.pir) THEN
68  xel(ielem,3) = xel(ielem,3) - 2.d0 * pir
69  ELSEIF(xel(ielem,3).LT.-pir) THEN
70  xel(ielem,3) = xel(ielem,3) + 2.d0 * pir
71  ENDIF
72 !
73  scael = ( coslat(ikle(ielem,1))
74  & + coslat(ikle(ielem,2)) +
75  & coslat(ikle(ielem,3)) ) / 3.d0
76  xel(ielem,2) = xel(ielem,2) * scael
77  xel(ielem,3) = xel(ielem,3) * scael
78 !
79  ENDDO
80 !
81 !-----------------------------------------------------------------------
82 !
83  RETURN
84  END
subroutine longitu(XEL, COSLAT, IKLE, NELMAX, NELEM)
Definition: longitu.f:7