MODULE lidar_mod IMPLICIT NONE CONTAINS function lidar(filein,rep_en) USE fonctions_mod USE struct_ames_mod IMPLICIT NONE CHARACTER(LEN=250) :: chainetmp CHARACTER(LEN=100) :: rep_en,rep_so,line,rep_lo,file_lo,rep_ex CHARACTER(LEN=100) :: pi, pi2, lab, clatitude, clongitude, heure2, cc CHARACTER(LEN=50) :: instrument, instrument2, specie, station, heure, jour, mois, annee, minute CHARACTER(LEN=200) :: filein, screen INTEGER :: nblines, nbheadlines, nbdatalines,i, indice, j, latitude, longitude INTEGER :: unit,ios,ios2,niv_flag,debug,nbfile,ios3,lecture,ulog,stepTime INTEGER :: imois,ijour,iannee,iheure,iminute CHARACTER(LEN=500), DIMENSION(6) :: tabLine REAL, DIMENSION(:,:),pointer :: tabMesures=> null() type(struct_ames) :: format_ames, lidar LOGICAL :: retour REAL :: altmax, altmin, altitude, flatitude, flongitude INTEGER :: Time,dm, linemax, linemin COMMON screen,rep_so,rep_ex,debug COMMON niv_flag,rep_lo,file_lo,ulog,stepTime debug=1 altmax=0. altmin=0. dm=0 linemin=-1 linemax=-1 i=0 nblines=0 print* ,"rep_en=" , rep_en !Lecture de parametres en entree !STOP OPEN( UNIT=1, & FILE=trim(adjustl(rep_en))//"./conf.txt", & FORM="formatted", & ACCESS="sequential", & STATUS="old", & ACTION="read", & POSITION="rewind", & IOSTAT=ios2 ) READ(1,IOSTAT=ios, FMT='(A)') line if (ios /= 0 ) then screen="Impossible d ouvrir le fichier de configuration" retour=printl() STOP endif DO WHILE ( ios == 0) IF (index(line,"station")>0) THEN station=line(9:) ENDIF IF (index(line,"instrument=")>0) THEN instrument=line(12:) ENDIF IF (index(line,"instrument2")>0) THEN instrument2=line(13:) ENDIF IF (index(line,"pi=")>0) THEN pi=line(4:) ENDIF IF (index(line,"pi2")>0) THEN pi2=line(5:) ENDIF IF (index(line,"lab")>0) THEN lab=line(5:) ENDIF IF (index(line,"specie")>0) THEN specie=line(8:) ENDIF READ(1,IOSTAT=ios, FMT='(A)') line END DO CLOSE(unit=1) !print *, "lidar --> filein =", filein !filein=trim(adjustl(rep_en))//"./"//trim(adjustl(filein)) screen=filein retour=printl() OPEN( UNIT=1, & FILE=filein, & FORM="formatted", & ACCESS="sequential", & STATUS="old", & ACTION="read", & POSITION="rewind", & IOSTAT=ios ) if (ios /= 0 ) then screen="FILE "//trim(adjustl(filein))//" DOES NOT EXISTS" retour=printl() STOP ELSE DO WHILE ( ios == 0) nblines=nblines+1 READ(unit=1, IOSTAT=ios, FMT='(A)') line IF (index(line,"nb ligne entete") > 0) THEN !nb de lignes de l'entete chainetmp=line(19:) !nb de lignes de l'entete READ(chainetmp,'(I3,A)') nbheadlines,line WRITE(screen,FMT=*) nbheadlines retour=printl() !nb de lignes de mesures chainetmp=line(18:) READ(chainetmp,'(I4,A)') nbdatalines,line WRITE(screen,FMT=*) "nbdataline=",nbdatalines retour=printl() !parcours de l'entete DO WHILE (nblines <= nbheadlines - 1) READ(unit=1, IOSTAT=ios, FMT='(A)') line nblines=nblines+1 IF ( nblines == 3 ) THEN j=index(line,"/") mois=line(j+1:j+2) read(mois,fmt=*) imois jour=line(j-2:j-1) read(jour,fmt=*) ijour annee=line(j+4:j+7) read(annee,fmt=*) iannee heure=line(j+9:j+10) read(heure,fmt=*) iheure minute=line(j+12:j+13) read(minute,fmt=*) iminute line=line(j+18:) READ(line,FMT=*) heure2,cc,clatitude,clongitude READ(clatitude, FMT=*) flatitude READ(clongitude, FMT=*) flongitude latitude=ceiling(flatitude) longitude=ceiling(flongitude) ENDIF IF (i==0 .AND. index(line, "domvalid")>0) THEN i=index(line,"-") chainetmp=line(12:i) READ(chainetmp,FMT=*) altmin chainetmp=line(i+2:) READ(chainetmp,FMT=*) altmax READ(unit=1, IOSTAT=ios, FMT='(A)') line nblines=nblines+1 WRITE(screen,FMT=*) "altmin=", altmin retour=printl() WRITE(screen,FMT=*) "altmax=", altmax retour=printl() ENDIF END DO READ(unit=1, IOSTAT=ios, FMT='(A)') line ENDIF READ(line,FMT=*) tabLine READ(tabLine(1),FMT=*) altitude IF (altitude > altmin .AND. altitude < altmax) THEN !print* , "altitudem=", altitude IF (linemin == -1) THEN linemin=nblines+1 ENDIF ENDIF IF (linemax == -1 .AND. altitude >= altmax) THEN linemax=nblines ENDIF END DO ENDIF CLOSE(unit=1) ALLOCATE(tabMesures(linemax-linemin+1,6)) ALLOCATE(format_ames%tabMesures(linemax-linemin+1,6)) nblines=0 indice=1 OPEN( UNIT=1, & FILE=filein, & FORM="formatted", & ACCESS="sequential", & STATUS="old", & ACTION="read", & POSITION="rewind", & IOSTAT=ios ) IF (ios /= 0 ) THEN screen="FILE "//trim(adjustl(filein))//" DOES NOT EXISTS" retour=printl() STOP ELSE DO WHILE ( ios == 0) nblines=nblines+1 READ(unit=1, IOSTAT=ios, FMT='(A)') line IF ( nblines >= linemin .AND. nblines <= linemax ) THEN READ(line,FMT=*) tabLine READ(tabLine(1), FMT=*) tabMesures(indice,1) READ(tabLine(2), FMT=*) tabMesures(indice,2) READ(tabLine(3), FMT=*) tabMesures(indice,3) READ(tabLine(4), FMT=*) tabMesures(indice,4) READ(tabLine(5), FMT=*) tabMesures(indice,5) READ(tabLine(6), FMT=*) tabMesures(indice,6) indice=indice+1 ENDIF END DO ENDIF CLOSE(unit=1) print* ,"jour=", jour print* ,"mois=", mois print* ,"annee=", annee format_ames%head_line=trim(adjustl(jour))//" "//trim(adjustl(mois))//" "//trim(adjustl(annee)) format_ames%tabMesures=tabMesures format_ames%station=station format_ames%instrument=instrument format_ames%instrument2=instrument2 format_ames%pi=pi format_ames%pi2=pi2 format_ames%lab=lab format_ames%specie=specie print* , "head_line=", format_ames%head_line print* , format_ames%station print* , format_ames%instrument print* , format_ames%instrument2 print* , format_ames%pi print* , format_ames%pi2 print* , format_ames%lab print* , format_ames%specie DEALLOCATE(tabMesures) DEALLOCATE(format_ames%tabMesures) lidar=format_ames END FUNCTION lidar END MODULE lidar_mod