source: ether_ndacc/trunk/dev_ndacc/livraison/src/godin/lidar/lidar_mod.f90.new @ 84

Last change on this file since 84 was 84, checked in by cbipsl, 14 years ago

import ether_ndacc

  • Property svn:executable set to *
File size: 6.6 KB
Line 
1MODULE lidar_mod
2IMPLICIT NONE
3
4CONTAINS
5function lidar(filein,rep_en)
6
7USE fonctions_mod
8USE struct_ames_mod
9 
10IMPLICIT NONE
11
12CHARACTER(LEN=250)                              :: chainetmp
13CHARACTER(LEN=100)                              :: rep_en,rep_so,line,rep_lo,file_lo,rep_ex
14CHARACTER(LEN=100)                              :: pi, pi2, lab, clatitude, clongitude, heure2, cc
15CHARACTER(LEN=50)                               :: instrument, instrument2, specie, station, heure, jour, mois, annee, minute
16CHARACTER(LEN=200)                              :: filein, screen
17
18INTEGER                                         :: nblines, nbheadlines, nbdatalines,i, indice, j, latitude, longitude
19INTEGER                                         :: unit,ios,ios2,niv_flag,debug,nbfile,ios3,lecture,ulog,stepTime
20INTEGER                                         :: imois,ijour,iannee,iheure,iminute
21
22CHARACTER(LEN=500), DIMENSION(6)                :: tabLine
23REAL, DIMENSION(:,:),pointer            :: tabMesures=> null()
24
25type(struct_ames)                               :: format_ames, lidar
26
27LOGICAL                                         :: retour
28
29REAL                                            :: altmax, altmin, altitude, flatitude, flongitude
30
31INTEGER                                         :: Time,dm, linemax, linemin
32
33
34COMMON                                                                  screen,rep_so,rep_ex,debug
35COMMON                                                                  niv_flag,rep_lo,file_lo,ulog,stepTime
36
37debug=1
38altmax=0.
39altmin=0.
40dm=0
41linemin=-1
42linemax=-1
43i=0
44nblines=0
45
46print* ,"rep_en=" , rep_en
47!Lecture de parametres en entree
48!STOP
49
50OPEN(   UNIT=1, &
51        FILE=trim(adjustl(rep_en))//"./conf.txt", &
52        FORM="formatted", &
53        ACCESS="sequential", &
54        STATUS="old", &
55        ACTION="read", &
56        POSITION="rewind", &
57        IOSTAT=ios2 )
58
59READ(1,IOSTAT=ios, FMT='(A)') line
60
61if (ios /= 0 ) then
62        screen="Impossible d ouvrir le fichier de configuration"
63        retour=printl()
64        STOP
65endif
66
67DO WHILE ( ios == 0)
68
69        IF (index(line,"station")>0) THEN
70                station=line(9:)
71        ENDIF
72        IF (index(line,"instrument=")>0) THEN
73                instrument=line(12:)
74        ENDIF
75        IF (index(line,"instrument2")>0) THEN
76                instrument2=line(13:)
77        ENDIF
78        IF (index(line,"pi=")>0) THEN
79                pi=line(4:)
80        ENDIF
81        IF (index(line,"pi2")>0) THEN
82                pi2=line(5:)
83        ENDIF
84        IF (index(line,"lab")>0) THEN
85                lab=line(5:)
86        ENDIF
87        IF (index(line,"specie")>0) THEN
88                specie=line(8:)
89        ENDIF
90
91        READ(1,IOSTAT=ios, FMT='(A)') line
92
93END DO
94
95CLOSE(unit=1)
96
97!print *, "lidar --> filein =", filein
98
99!filein=trim(adjustl(rep_en))//"./"//trim(adjustl(filein))
100
101
102screen=filein
103retour=printl()
104
105OPEN(   UNIT=1, &
106        FILE=filein, &
107        FORM="formatted", &
108        ACCESS="sequential", &
109        STATUS="old", &
110        ACTION="read", &
111        POSITION="rewind", &
112        IOSTAT=ios )
113
114if (ios /= 0 ) then
115        screen="FILE "//trim(adjustl(filein))//" DOES NOT EXISTS"
116        retour=printl()
117        STOP
118ELSE
119        DO WHILE ( ios == 0)
120                nblines=nblines+1
121                READ(unit=1, IOSTAT=ios, FMT='(A)') line
122
123                IF (index(line,"nb ligne entete") > 0) THEN
124                        !nb de lignes de l'entete
125                        chainetmp=line(19:)     
126                        !nb de lignes de l'entete
127                        READ(chainetmp,'(I3,A)') nbheadlines,line
128                        WRITE(screen,FMT=*) nbheadlines
129                        retour=printl()
130
131                        !nb de lignes de mesures
132                        chainetmp=line(18:)
133                        READ(chainetmp,'(I4,A)') nbdatalines,line
134                        WRITE(screen,FMT=*) "nbdataline=",nbdatalines
135                        retour=printl()
136
137                        !parcours de l'entete   
138                        DO WHILE (nblines <= nbheadlines - 1)
139                                READ(unit=1, IOSTAT=ios, FMT='(A)') line
140                                nblines=nblines+1
141
142                                IF ( nblines == 3 ) THEN
143                                        j=index(line,"/")
144                                        mois=line(j+1:j+2)
145                                        read(mois,fmt=*) imois
146
147                                        jour=line(j-2:j-1)
148                                        read(jour,fmt=*) ijour
149
150                                        annee=line(j+4:j+7)
151                                        read(annee,fmt=*) iannee
152
153                                        heure=line(j+9:j+10)
154                                        read(heure,fmt=*) iheure
155
156                                        minute=line(j+12:j+13)
157                                        read(minute,fmt=*) iminute
158
159                                        line=line(j+18:)
160                                        READ(line,FMT=*) heure2,cc,clatitude,clongitude
161                                       
162                                        READ(clatitude, FMT=*) flatitude
163                                        READ(clongitude, FMT=*) flongitude
164
165                                        latitude=ceiling(flatitude)
166                                        longitude=ceiling(flongitude)
167
168                                ENDIF
169                               
170                                IF (i==0 .AND. index(line, "domvalid")>0) THEN
171                                        i=index(line,"-")       
172                                        chainetmp=line(12:i)
173                                        READ(chainetmp,FMT=*) altmin
174                                        chainetmp=line(i+2:)
175                                        READ(chainetmp,FMT=*) altmax
176
177                                        READ(unit=1, IOSTAT=ios, FMT='(A)') line
178                                        nblines=nblines+1
179
180                                        WRITE(screen,FMT=*) "altmin=", altmin
181                                        retour=printl()
182
183                                        WRITE(screen,FMT=*) "altmax=", altmax
184                                        retour=printl()
185                                ENDIF   
186
187                        END DO
188                        READ(unit=1, IOSTAT=ios, FMT='(A)') line
189                ENDIF
190
191                READ(line,FMT=*) tabLine
192
193                READ(tabLine(1),FMT=*) altitude
194
195                IF (altitude > altmin .AND. altitude < altmax) THEN
196                        !print* , "altitudem=", altitude
197                        IF (linemin == -1) THEN
198                                linemin=nblines+1
199                        ENDIF
200
201                       
202
203                       
204
205                ENDIF
206
207                IF (linemax == -1 .AND. altitude >= altmax) THEN
208                        linemax=nblines
209                ENDIF
210               
211               
212       
213               
214        END DO
215
216ENDIF
217
218CLOSE(unit=1)
219
220ALLOCATE(tabMesures(linemax-linemin+1,6))
221ALLOCATE(format_ames%tabMesures(linemax-linemin+1,6))
222
223nblines=0
224indice=1
225
226OPEN(   UNIT=1, &
227        FILE=filein, &
228        FORM="formatted", &
229        ACCESS="sequential", &
230        STATUS="old", &
231        ACTION="read", &
232        POSITION="rewind", &
233        IOSTAT=ios )
234
235IF (ios /= 0 ) THEN
236        screen="FILE "//trim(adjustl(filein))//" DOES NOT EXISTS"
237        retour=printl()
238        STOP
239ELSE
240        DO WHILE ( ios == 0)
241                nblines=nblines+1
242                READ(unit=1, IOSTAT=ios, FMT='(A)') line
243
244                IF ( nblines >= linemin .AND. nblines <= linemax ) THEN
245                        READ(line,FMT=*) tabLine
246                        READ(tabLine(1), FMT=*) tabMesures(indice,1)
247                        READ(tabLine(2), FMT=*) tabMesures(indice,2)
248                        READ(tabLine(3), FMT=*) tabMesures(indice,3)
249                        READ(tabLine(4), FMT=*) tabMesures(indice,4)
250                        READ(tabLine(5), FMT=*) tabMesures(indice,5)
251                        READ(tabLine(6), FMT=*) tabMesures(indice,6)
252                        indice=indice+1
253                ENDIF
254
255        END DO 
256ENDIF
257
258CLOSE(unit=1)
259
260print* ,"jour=", jour
261print* ,"mois=", mois
262print* ,"annee=", annee
263
264format_ames%head_line=trim(adjustl(jour))//"  "//trim(adjustl(mois))//"  "//trim(adjustl(annee))
265format_ames%tabMesures=tabMesures
266format_ames%station=station
267format_ames%instrument=instrument
268format_ames%instrument2=instrument2
269format_ames%pi=pi
270format_ames%pi2=pi2
271format_ames%lab=lab
272format_ames%specie=specie
273
274print* , "head_line=", format_ames%head_line
275print* , format_ames%station
276print* , format_ames%instrument
277print* , format_ames%instrument2
278print* , format_ames%pi
279print* , format_ames%pi2
280print* , format_ames%lab
281print* , format_ames%specie
282
283
284DEALLOCATE(tabMesures)
285DEALLOCATE(format_ames%tabMesures)
286
287lidar=format_ames
288
289END FUNCTION lidar
290
291END MODULE lidar_mod
292
Note: See TracBrowser for help on using the repository browser.