The TELEMAC-MASCARET system  trunk
read_mesh_coord.f
Go to the documentation of this file.
1 ! **************************
2  SUBROUTINE read_mesh_coord
3 ! **************************
4 !
5  &(fformat,nfic,x,y,npoin,projection,lati0,longi0,z)
6 !
7 !***********************************************************************
8 ! HERMES V7P1
9 !***********************************************************************
10 !
11 !brief Reads the coordinates in the geometry file.
12 !+ Latitude-longitude coordinates transformed into mercator.
13 !
14 !history Y. AUDOUIN (EDF LAB, LNHE)
15 !+ 06/05/2015
16 !+ V7P1
17 !+ First version.
18 !
19 !history M.S.TURNBULL (HRW)
20 !+ 18/09/2015
21 !+ V7P1
22 !+ Correction to the conversion from degree to Mercator projection.
23 !
24 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 !| FFORMAT |-->| FORMAT FOR GEOMETRY FILE
26 !| NFIC |-->| LOGICAL UNIT FOR GEOMETRY FILE
27 !| X |<--| X COORDINATES
28 !| Y |<--| Y COORDINATES
29 !| PROJECTION |<--| TYPE OF PROJECTION
30 !| LATI0 |<--| LATITUDE
31 !| LONGI0 |<--| LONGITUDE
32 !| Z |<--| Z COORDINATES
33 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 !
37  IMPLICIT NONE
38 !
39 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40 !
41  INTEGER, INTENT(IN) :: NPOIN,NFIC
42  DOUBLE PRECISION, INTENT(OUT) :: X(npoin),Y(npoin)
43  DOUBLE PRECISION, INTENT(OUT), OPTIONAL :: Z(npoin)
44  INTEGER, INTENT(INOUT) :: PROJECTION
45  DOUBLE PRECISION, INTENT(IN) :: LATI0,LONGI0
46  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
47 !
48 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49 !
50  INTEGER :: IERR, I, NDIM
51 !
52  DOUBLE PRECISION, PARAMETER :: R=6.37d6
53  DOUBLE PRECISION PS4,TAN1,TAN2,LONGIRAD
54 !
55  INTRINSIC log,tan,atan
56 !
57 !-----------------------------------------------------------------------
58 !
59 ! total number of dimension
60  ndim = 2
61  IF (PRESENT(z)) ndim = 3
62 
63  CALL get_mesh_coord(fformat,nfic,1,ndim,npoin,x,ierr)
64  IF(ierr.NE.0) THEN
65  WRITE(lu,*) 'ERROR WHILE READING X ARRAY'
66  CALL plante(1)
67  ENDIF
68  CALL get_mesh_coord(fformat,nfic,2,ndim,npoin,y,ierr)
69  IF(ierr.NE.0) THEN
70  WRITE(lu,*) 'ERROR WHILE READING Y ARRAY'
71  CALL plante(1)
72  ENDIF
73  IF(PRESENT(z)) THEN
74  CALL get_mesh_coord(fformat,nfic,3,ndim,npoin,z,ierr)
75  IF(ierr.NE.0) THEN
76  WRITE(lu,*) 'ERROR WHILE READING Z ARRAY'
77  CALL plante(1)
78  ENDIF
79  ENDIF
80 !
81  CALL corrxy(x,y,npoin)
82 !
83 ! LATITUDE-LONGITUDE COORDINATES (DEGREES)
84 ! CHANGED INTO MERCATOR PROJECTION
85 !
86  IF(projection.EQ.3) THEN
87  ps4=atan(1.d0)
88  longirad=longi0*ps4/45.d0
89  tan2=tan(lati0*ps4/90.d0+ps4)
90  IF(tan2.LT.0.d0) THEN
91  WRITE(lu,*) 'LATI0=',lati0,' IS PROBABLY WRONG'
92  CALL plante(1)
93  stop
94  ENDIF
95  DO i=1,npoin
96  x(i)=r*(x(i)*ps4/45.d0-longirad)
97  tan1=tan(y(i)*ps4/90.d0+ps4)
98  IF(tan1.LT.0.d0) THEN
99  WRITE(lu,*) 'LATITUDE MUST BE GIVEN IN DEGREES'
100  WRITE(lu,*) 'HERE Y(I)=',y(i),' FOR I=',i
101  WRITE(lu,*) 'USE CORRXY (BIEF) FOR CONVERSION'
102  CALL plante(1)
103  stop
104  ENDIF
105  y(i)=r*(log(tan1)-log(tan2))
106  ENDDO
107 ! NOW IT IS MERCATOR
108  projection=2
109  WRITE(lu,*) ' '
110  WRITE(lu,*) 'READ_MESH_COORD :'
111  WRITE(lu,*) 'COORDINATES CHANGED INTO MERCATOR PROJECTION'
112  WRITE(lu,*) 'WITH LATITUDE OF ORIGIN POINT = ',lati0
113  WRITE(lu,*) 'AND LONGITUDE OF ORIGIN POINT = ',longi0
114  WRITE(lu,*) ' '
115  ENDIF
116 !
117 !-----------------------------------------------------------------------
118 !
119  RETURN
120  END
subroutine corrxy(X, Y, NPOIN)
Definition: corrxy.f:7
subroutine read_mesh_coord(FFORMAT, NFIC, X, Y, NPOIN, PROJECTION, LATI0, LONGI0, Z)
subroutine get_mesh_coord(FFORMAT, FID, JDIM, NDIM, NPOIN, COORD, IERR)
Definition: get_mesh_coord.f:7