C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * C PGEISA - LGEISA C C CALL PGEISA(NU1,NU2,&ETIQ1) C CALL LGEISA(A,&ETIQ2) C C SUBROUTINES DE LECTURE DE LA BANQUE DES DONNEES SPECTROSCOPIQUES C C PGEISA POSITIONNE LA LECTURE C C LGEISA LIT LES CARACTERISTIQUES D'UNE TRANSITION C SEQUENTIELLEMENT DANS L'ORDRE NU1 A NU2 C NU1>NU2 NU1=NU2 NU11 C IADR,JADR,K,A1,A2,A3,(V(J),J=1,K) C IADR=ADRESSE DU BLOC SUIVANT A LIRE C JADR=ADRESSE DU BLOC PRECEDENT QUI A ETE LU C A1=PREMIERE VALEUR DE NU DANS LE BLOC SUIVANT C A2=DERNIERE VALEUR DE NU DANS LE BLOC PRECEDENT C A3=DERNIERE VALEUR DE NU DANS LE BLOC ACTUEL C V(1)=PREMIERE VALEUR DE NU DANS LE BLOC ACTUEL C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * C C LAST MODIF : 07.05.1991 PASSAGE DE 40 MOLECULES A 75 DANS LES COMMON C C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * C subroutine pgeisa(u1,u2,*) C C SI L'APPEL VIENT DES PROGRAMMES GEISA C MPGX='ANL','EXT',.... C NPGX=1,2,...,8 C character*7 form,bin character*3 liste,pgm,ianl,iext,itrs,ilst,icop,info,icre, & modif,mpgx,ipgm,kpgm logical*1 vb(107),vv(06233),qqq,invers integer vers real nu1,nu2 C C GEISA90 : 1552 -> 2813 C dimension tab(29),v(2813),vab(13) C common/p1/ nu1,nu2,dnu,nbclas,khist,kanal,vers,mode,liste common/p3/ imole,iran,ival,pgm,ianl,iext,itrs,ilst,icop,info,icre common/p4/ nmol,knmol,ksot,kksot,ntab,nhist,kp,lre,form,bin,modif common/p8/ npgx,nfff,mpgx,qqq(75) CBB modif: ajout du common ensor pour initialiser iuni common/entsor/iuni,juni CBB fin modif 29/10/96 C equivalence (kpgm,vb(29)),(v(1),vv(1)),(vab(1),vb(1)) C data ipgm/'lec'/,invers,ideb/.false.,0/ include 'geisafile.h' len=ltrim(racine_data) filename_asc=racine_data(1:len)//'/line_GEISA2003_asc_gs_v1.0' filename_bin=racine_data(1:len)//'/line_GEISA2003_bin_gs_v1.0' CBB modif pour parametrer la lecture soit de la base (unit=1) soit un autre CBB fichier (unit=iuni) 29/10/1996 CBB data iuni,isor /01,6/ C C GEISA90 : 6233 -> 11276 C CBB test de iuni pour faire l open sur le bon fichier c print *,' pgeisa: iuni=',iuni if (iuni.eq.1) then len=ltrim(filename_bin) open (unit=1,access='direct',recl=11276, c &file='/usr/local/datageisa/data/geisa97') c &file='/users6/geisa/Database/line_GEISA2003_bin_gs_v1.0') &file=filename_bin(1:len)) else c print *,' pgeisa2: iuni=',iuni open (unit=iuni,access='direct',recl=11276) endif CBB fin du test 29/10/96 C C RECHERCHE DE LA PREMIERE TRANSITION A LIRE C IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V C V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC C invers=.false. c print *,' pgeisa: read rec1 ' if(u1.gt.u2) invers=.true. read (iuni,rec=1) &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4 c print *,'aa1=',aa1,' aa2=',aa2,' n203=',n203,' nbraie=',nbraie c *,' iecr=',iecr,' ifin=',ifin,' ll1=',ll1,' ll2=',ll2,' ll3=', c *ll3,' ll4=',ll4 nmol=nbmol vers=ll3 v1=amax1(u1,aa1) v2=amin1(u2,aa2) w2=amin1(u1,aa2) w1=amax1(u2,aa1) iadr=int(v1/anu) + 2 - int(aa1/anu) if(invers.and.w1.ge.w2) go to 70 if(.not.invers.and.v1.gt.v2) go to 70 if(.not.invers) go to 1 v1=w2 w2=w1 iadr=int(w2/anu) + 2 - int(aa1/anu) 1 continue go to 5 C partie inutile ( trace des users connectes via la proc geisa du CIRCE if(ll1.eq.0.or.ll2.eq.0.or.nfff.eq.1.or.ll4.lt.0) go to 5 C C VALEURS RETOURNEES C 1 - 8 NOM C 9 - 15 SIGLE NUM C 16 BLANC C 17 -19 ADRESSE TERMINAL C 20 -24 DATE XXYYY C 25 -32 HEURE HHMMSSDC C kpgm=ipgm if(npgx.ge.1.and.npgx.le.8) kpgm=mpgx C if(kpgm.ne.ipgm) go to 7 do 6 j=1,nmol qqq(j)=.true. 6 continue 7 continue C C C VB CONTIENT 32+NMOL OCTETS : C 1 - 8 NOM C 9 - 15 SIGLE NUM C 16 - 20 DATE XXYYY C 21 - 24 NU1 C 25 - 28 NU2 C 29 - 32 PGM C 33 - 32+NMOL NMOL OCTETS PRESENCE ABSENCE MOLECULE C nfff=1 do 2 j=20,24 vb(j-4)=vb(j) 2 continue vab(6)=v1 if(kpgm.eq.icop) vab(6)=nu1 vab(7)=v2 if(kpgm.eq.icop) vab(7)=nu2 do 3 j=1,nmol vb(32+j)=qqq(j) 3 continue lll=ifin+ll1+ll2+ll4 c print *,' pgeisalire: rec =lll',lll read (iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb) do 4 j=1,nxx kb=kb+1 vv(kb)=vb(j) 4 continue write(iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb) if(kb.lt.longr) go to 5 ll4=ll4+1 if(ll4.gt.max-1) ll4=-ll4 write(iuni,rec=1) &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4 C fin de la trace utilisateurs 5 continue if(invers) go to 30 9 continue C C RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE DIRECTE C ilec=iadr c print *,' pgeisalire: rec =iadr',iadr read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k) C FIND (IUNI,REC=IADR) if(v1.gt.a1) go to 9 if(v1.gt.a3) go to 11 C C GEISA90 : 16 -> 29 C do 10 j=1,k,29 ideb=j if(v1.le.v(j)) go to 20 10 continue 11 continue ideb=k+1 20 continue C C GEISA90 : 16 -> 29 C ideb=ideb-29 C return C C RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE INVERSE C IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V C V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC C 30 continue 35 continue ilec=iadr c print *,' lecture de ilec=',ilec read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k) C FIND (IUNI,REC=IADR) if(w2.gt.a1) go to 35 if(w2.gt.a3) go to 37 C C GEISA90 : 16 -> 29 C do 36 j=1,k,29 ideb=j if(w2.lt.v(j)) return 36 continue 37 continue ideb=k+1 return C C LECTURE DES TRANSITIONS C entry lgeisa(tab,*) if(invers) go to 52 C C LECTURE DES TRANSITIONS PAR ORDRE CROISSANT C 47 continue C C GEISA90 : 16 -> 29 C ideb=ideb+29 if(ideb.gt.k) go to 50 C C GEISA90 : 16 -> 29 C do 48 j=1,29 48 tab(j)=v(ideb+j-1) if(v2.lt.v(ideb)) return 1 C C RETURN 1 SI DERNIERE TRANSITION LUE C OU SI FIN DU FICHIER RENCONTRE C return 50 continue C C TOUT LE VECTEUR V EST LU C LECTURE DU BLOC SUIVANT ET REMPLISSAGE DE V C if(iadr.eq.ifin) return 1 c print *,' lecture de iadr=',iadr read (iuni,rec=iadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k) C FIND (IUNI,REC=IADR) C C GEISA90 : 15 -> 28 C ideb=-28 go to 47 C C LECTURE DES TRANSITIONS PAR ORDRE DECROISSANT C 52 continue C C GEISA90 : 16 -> 29 C ideb=ideb-29 if(ideb.lt.1) go to 55 C C GEISA90 : 16 -> 29 C do 54 j=1,29 54 tab(j)=v(ideb+j-1) if(v(ideb).lt.w1) return 1 return 55 continue if(jadr.eq.1) return 1 c print *,' lecture de jadr=',jadr read (iuni,rec=jadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k) C FIND (IUNI,REC=JADR) ideb=k+1 go to 52 70 continue C C ERREUR SUR LES VALEURS NU1 ET NU2 C write(isor,1000) u1,u2,nbraie,aa1,aa2 1000 format(///' consultation of geisa contents *** geisa ***'/ & ' verify the value of nu1=',f12.6,' and nu2=', &f12.6/' the',i8,' transitions of the spectroscopic data bank are i &n the spectral interval '/9x,'v1=',f12.6,' and v2=',f12.6///) return 1 end