PROGRAM treat_files_list USE fonctions_mod USE grid_ames_mod USE head_ames_mod USE struct_ames_mod USE lidar_mod IMPLICIT NONE CHARACTER(LEN=300) :: temp_string, temp_string2 CHARACTER(LEN=250) :: filein,list_files,tmp_list CHARACTER(LEN=100) :: cmoismin,cmoismax,cheuremin,cheuremax ,temp_string3 CHARACTER(LEN=100) :: rep_data,rep_so,chaine,chaine2,rep_lo,file_lo CHARACTER(LEN=50) :: link CHARACTER(LEN=8) :: tdate CHARACTER(LEN=7) :: col1, col2, col5, col6 CHARACTER(LEN=3) :: col4,mois,annee CHARACTER(LEN=6) :: col3 CHARACTER(LEN=10) :: ttime CHARACTER(LEN=5) :: tzone INTEGER, DIMENSION(8) :: tvalues CHARACTER(LEN=200) :: screen,line,line2 INTEGER :: i,j,indice,idatemesure,idatemesuremax,idatemesuremin,nblcomment INTEGER :: unit,ios,ios2,iosres,debug,nbfile,ios3,lecture,ulog,nbfiles,ifile,temp_int,nbbc type(grid_ames) :: sortie_asc,temp_ames type(struct_ames) :: sortie_ames LOGICAL :: retour REAL :: temp_real COMMON screen,rep_so,debug COMMON rep_lo,file_lo,ulog !lecture du fichier temporaire devant contenir la liste des fichiers de donnees a traiter call getarg(1,tmp_list) nbfiles=0 debug=1 ifile=0 !ouverture liste des fichiers asc a traiter OPEN( UNIT=2, & FILE=tmp_list, & FORM="formatted", & ACCESS="sequential", & STATUS="old", & ACTION="read", & POSITION="rewind", & IOSTAT=ios3 ) READ(2,IOSTAT=ios3, FMT='(A)') filein if (ios3 /= 0 ) then screen="Impossible d ouvrir le fichier temporaire des fichiers de donnees a traiter : "//adjustl(trim(filein)) retour=printl() STOP endif rep_data=filein screen="DATA DIRECTORY : "//rep_data retour=printl() mois="" annee="" READ(2,IOSTAT=ios3, FMT='(I)') nbfiles READ(2,IOSTAT=ios3,FMT='(I)') debug READ(2,IOSTAT=ios3,FMT=*) mois READ(2,IOSTAT=ios3,FMT=*) annee !definition de l'entete OPEN( UNIT=1, & FILE=trim(adjustl(rep_data))//"./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 sortie_ames%head%station=line(9:) ENDIF IF (index(line,"instrument=")>0) THEN sortie_ames%head%instrument=line(12:) ENDIF IF (index(line,"instrument2")>0) THEN sortie_ames%head%instrument2=line(13:) ENDIF IF (index(line,"pi=")>0) THEN sortie_ames%head%pi=line(4:) ENDIF IF (index(line,"pi2")>0) THEN sortie_ames%head%pi2=line(5:) ENDIF IF (index(line,"lab")>0) THEN sortie_ames%head%lab=line(5:) ENDIF IF (index(line,"specie")>0) THEN sortie_ames%head%specie=line(8:) ENDIF IF (index(line,"altitude")>0) THEN sortie_ames%head%altitude=line(10:) ENDIF IF (index(line,"latitude")>0) THEN sortie_ames%head%latitude=line(10:) ENDIF IF (index(line,"longitude")>0) THEN sortie_ames%head%longitude=line(11:) ENDIF READ(1,IOSTAT=ios, FMT='(A)') line END DO CLOSE(unit=1) !creation du fichier de sortie ames OPEN( UNIT=14, & FILE="ohte"//trim(adjustl(annee))//trim(adjustl(mois))//".hal", & FORM="formatted", & ACCESS="sequential", & STATUS="unknown", & ACTION="readwrite", & POSITION="rewind", & IOSTAT=iosres ) if (iosres /= 0 ) then screen="Impossible de creer le fichier des grilles" retour=printl() STOP endif nbbc=0 READ(2,IOSTAT=ios3, FMT='(A)') filein ALLOCATE(sortie_ames%grids_ames(nbfiles)) DO WHILE ( ios3 == 0 ) filein=trim(adjustl(filein)) screen="current file data="//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="Impossible d ouvrir le fichier "//trim(adjustl(filein)) retour=printl() STOP endif ifile=ifile+1 screen="-> Reading file : "//adjustl(trim(filein)) retour=printl() !lecture des donnees et formatage des grilles sortie_asc=lidar(filein,rep_data) indice=size(sortie_asc%tabMesures(:,1)) ALLOCATE(sortie_ames%grids_ames(ifile)%tabMesures(indice,6)) DO i=1,indice temp_int=sortie_asc%tabMesures(i,1) sortie_ames%grids_ames(ifile)%tabMesures(i,1)=temp_int temp_int=sortie_asc%tabMesures(i,2) sortie_ames%grids_ames(ifile)%tabMesures(i,2)=temp_int temp_int=sortie_asc%tabMesures(i,3) sortie_ames%grids_ames(ifile)%tabMesures(i,3)=temp_int END DO !DEALLOCATE(sortie_ames%grids_ames(ifile)%tabMesures(i,6)) sortie_ames%grids_ames(ifile)%top(1)=sortie_asc%top(1) sortie_ames%grids_ames(ifile)%top(2)=sortie_asc%top(2) sortie_ames%grids_ames(ifile)%top(3)=sortie_asc%top(3) sortie_ames%grids_ames(ifile)%top(4)=sortie_asc%top(4) sortie_ames%grids_ames(ifile)%top(5)=sortie_asc%top(5) sortie_ames%grids_ames(ifile)%top(6)=sortie_asc%top(6) sortie_ames%grids_ames(ifile)%top(7)=sortie_asc%top(7) sortie_ames%grids_ames(ifile)%top(8)=sortie_asc%top(8) sortie_ames%grids_ames(ifile)%top(9)=trim(adjustl(sortie_ames%head%latitude)) sortie_ames%grids_ames(ifile)%top(10)=trim(adjustl(sortie_ames%head%longitude)) sortie_ames%grids_ames(ifile)%top(11)=trim(adjustl(sortie_ames%head%altitude)) sortie_ames%grids_ames(ifile)%datemesure=sortie_asc%datemesure sortie_ames%grids_ames(ifile)%cmois=sortie_asc%cmois sortie_ames%grids_ames(ifile)%cheure=sortie_asc%cheure DEALLOCATE(sortie_asc%tabMesures) !lecture des mesures terminees => sortie_ames%grids_ames remplie nbbc=nbbc+1 CLOSE(unit=1) READ(2,IOSTAT=ios3, FMT='(A)') filein END DO CLOSE(unit=2) ifile=1 idatemesuremax=0 idatemesuremin=99999999 nblcomment=0 cheuremin="" cmoismin="" cheuremax="" cmoismax="" ifile=1 !calcul date DEBUT et FIN mesures DO WHILE ( ifile <= nbfiles) temp_string=sortie_ames%grids_ames(ifile)%datemesure READ(temp_string, FMT=*) idatemesure IF(idatemesure < idatemesuremin) THEN idatemesuremin=idatemesure cheuremin=sortie_ames%grids_ames(ifile)%cheure cmoismin=sortie_ames%grids_ames(ifile)%cmois ENDIF IF (idatemesure > idatemesuremax) THEN idatemesuremax=idatemesure cheuremax=sortie_ames%grids_ames(ifile)%cheure cmoismax=sortie_ames%grids_ames(ifile)%cmois ENDIF !nblcomment=nblcomment+1 ifile=ifile+1 END DO !DATEMIN temp_string="" link="" retour=concat(temp_string,temp_string3,idatemesuremin,link,7,8) sortie_ames%head%datemin=temp_string3 link="-" retour=concat(temp_string,cmoismin,-999,link,-1,-1) retour=concat(temp_string,temp_string3,idatemesuremin,link,1,4) link=" " retour=concat(temp_string,cheuremin,-999,link,-1,-1) sortie_ames%head%datemin=temp_string !DATEMAX temp_string="" link="" retour=concat(temp_string,temp_string3,idatemesuremax,link,7,8) sortie_ames%head%datemax=temp_string3 link="-" retour=concat(temp_string,cmoismax,-999,link,-1,-1) retour=concat(temp_string,temp_string3,idatemesuremax,link,1,4) link=" " retour=concat(temp_string,cheuremax,-999,link,-1,-1) sortie_ames%head%datemax=temp_string !ecriture du fichier de sortie ames !head temp_string="" temp_string3=sortie_ames%head%pi link="" retour=concat(temp_string,temp_string3,-999,link,-1,-1) link=" " temp_string3=sortie_ames%head%instrument retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%head%station retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%head%specie retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%head%datemin retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%head%datemax retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) nblcomment=33+3*nbfiles temp_string="31" WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string))//" 2110" temp_string="" temp_string3=sortie_ames%head%pi2 retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) temp_string="" temp_string3=sortie_ames%head%lab retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) temp_string="" temp_string3=sortie_ames%head%instrument2 retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) WRITE(UNIT=14, FMT=*) "NDACC" WRITE(UNIT=14, FMT=*) "1 1" link="" temp_string="" WRITE(temp_string2,FMT=*) idatemesuremin temp_string2=trim(adjustl(temp_string2)) temp_string3=temp_string2(1:4) retour=concat(temp_string,temp_string3,-999,link,-1,-1) link=" " temp_string3=temp_string2(5:6) IF (temp_string3(1:1) == "0") THEN temp_string3=temp_string2(6:6) ENDIF retour=concat(temp_string,temp_string3,-999,link,-1,-1) link=" " temp_string3=temp_string2(7:8) IF (temp_string3(1:1) == "0") THEN temp_string3=temp_string2(8:8) ENDIF retour=concat(temp_string,temp_string3,-999,link,-1,-1) !DATE CREATION FICHIERS AMES call date_and_time (tdate, ttime, tzone, tvalues) link="" WRITE(temp_string3,FMT=*) tvalues(1:1) temp_string3=trim(adjustl(temp_string3)) retour=concat(temp_string,temp_string3,-999,link,-1,-1) link=" " WRITE(temp_string3,FMT=*) tvalues(2:2) temp_string3=trim(adjustl(temp_string3)) retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(temp_string3,FMT=*) tvalues(3:3) temp_string3=trim(adjustl(temp_string3)) retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) WRITE(UNIT=14, FMT=*) "1000. 0.00" !ouverture fichier description format colonnes OPEN( UNIT=2, & FILE=trim(adjustl(rep_data))//"./data_format.txt", & FORM="formatted", & ACCESS="sequential", & STATUS="old", & ACTION="read", & POSITION="rewind", & IOSTAT=ios3 ) READ(2,IOSTAT=ios3, FMT='(A)') line if (ios3 /= 0 ) then screen="Impossible d ouvrir le fichier de format des colonnes" retour=printl() STOP endif DO WHILE ( ios3 == 0 ) WRITE(UNIT=14, FMT=*) trim(adjustl(line)) READ(2,IOSTAT=ios3, FMT='(A)') line END DO WRITE(UNIT=14, FMT=*) "0" WRITE(UNIT=14,FMT=*) "1" WRITE(UNIT=14, FMT=*) "LTA" !data DO ifile=1,nbfiles temp_string="" temp_string2="" temp_string3="" link=" " temp_string3=sortie_ames%grids_ames(ifile)%top(1) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(2) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(3) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(4) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(5) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(6) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(7) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(8) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(9) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(10) retour=concat(temp_string,temp_string3,-999,link,-1,-1) temp_string3=sortie_ames%grids_ames(ifile)%top(11) retour=concat(temp_string,temp_string3,-999,link,-1,-1) WRITE(UNIT=14, FMT=*) trim(adjustl(temp_string)) DO i=1,size(sortie_ames%grids_ames(ifile)%tabMesures(:,1)) temp_string="" temp_string2="" temp_int=sortie_ames%grids_ames(ifile)%tabMesures(i,1) WRITE(col1, FMT='(I7)') temp_int temp_int=sortie_ames%grids_ames(ifile)%tabMesures(i,2) WRITE(col2, FMT='(I7)') temp_int temp_int=sortie_ames%grids_ames(ifile)%tabMesures(i,3) WRITE(col3, FMT='(I6)') temp_int WRITE(UNIT=14, FMT=*) trim(adjustl(adjustr(col1)))//" "//trim(adjustr(col2))//" "//trim(adjustr(col3)) !WRITE(UNIT=14, FMT=*) temp_string END DO DEALLOCATE(sortie_ames%grids_ames(ifile)%tabMesures) END DO CLOSE(UNIT=14) END PROGRAM treat_files_list