source: ether_geisa/trunk/pgm97/pgeisa97.f @ 356

Last change on this file since 356 was 1, checked in by cbipsl, 18 years ago

Geisa inital import

File size: 9.8 KB
Line 
1C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
2C     PGEISA - LGEISA
3C       
4C     CALL PGEISA(NU1,NU2,&ETIQ1)
5C     CALL LGEISA(A,&ETIQ2)
6C       
7C     SUBROUTINES DE LECTURE DE LA BANQUE DES DONNEES SPECTROSCOPIQUES
8C       
9C     PGEISA POSITIONNE LA LECTURE
10C       
11C     LGEISA LIT LES CARACTERISTIQUES D'UNE TRANSITION
12C            SEQUENTIELLEMENT DANS L'ORDRE NU1  A  NU2
13C            NU1>NU2  NU1=NU2  NU1<NU2
14C       
15C     LE FICHIER DES DONNEES DOIT ETRE  *** FT01F001 ***
16C       
17C     NU1 ET NU2 LIMITES DES RAIES A LIRE
18C     A VECTEUR A 29 VALEURS DONT 26 DE REMPLIES:
19C     A(1)=RAIE ; A(2)=INTENSITE ; A(3)=DEMI-LARGEUR ; A(4)=ENERGIE ;
20C     A(5)-A(13)=NOMBRES QUANTIQUES ; A(14)=            ;
21C     A(15)=CODE ISOTOPE ; A(16)=CODE MOLECULE.
22C     A(15) - A(16)  SONT DES VARIABLES ENTIERES.
23C     FAIRE PAR EXEMPLE EQUIVALENCE (A(15),ISOT),(A(16),IMOL)
24C     A(17)= CODE AUTEUR ;
25C       
26C     ETIQ1 ETIQUETTE A PREVOIR POUR UNE SORTIE EN ERREUR DE PGEISA
27C     ETIQ2 ETIQUETTE A PREVOIR POUR UNE SORTIE EN FIN DE LECTURE
28C           EN ETIQ2 LE VECTEUR A CONTIENDRA LA TRANSITION
29C           SUIVANT NU2 (LECTURE DIRECTE) ET PRECEDANT NU2 (INVERSE)
30C       
31C     REMARQUE : PGEISA DOIT ETRE APPELE IMMEDIATEMENT AVANT LGEISA
32C       
33C       
34C     CONTENU DU PREMIER BLOC :
35C     AA1,AA2,ANU,N203,NBRAIE,NBMOL,IECR,IFIN,LL1,LL2,LL3,LL4,LL5
36C       
37C     AA1=PREMIERE TRANSITION
38C     AA2=DERNIERE TRANSITION
39C     ANU=PAS DU BLOCAGE DES TRANSITIONS (PAR GROUPE DE 100 CM-1)
40C     AU MAXIMUM N203=97  ENREGISTREMENTS PAR PISTE
41C     NBRAIE=NOMBRE TOTAL DE TRANSITIONS DANS LE FICHIER
42C     NBMOL=NOMBRE DE MOLECULES DECLAREES DANS LE PROGRAMME
43C     IECR=NUMERO DERNIER BLOC ECRIT
44C     IFIN=NUMERO BLOC A ECRIRE (EN CONTINUATION) A PREVOIR PHYSIQUEMENT
45C       
46C     LL1=NB DE RECORDS OU SONT STOCKEES LES INFORMATIONS CONCERNANT TRS
47C     SOIT : IFIN,IFIN+1,IFIN+2,...,IFIN+LL1-1
48C       
49C     LL2=1 LES INFORMATIONS CONCERNANT ANL EXISTENT SUR IFIN+LL1
50C     LL2=0 SINON
51C       
52C     LL3=NUMERO VERSION DE LA BANQUE
53C     LL4=INCREMENT POUR ADRESSAGE RECORD RENSEIGNEMENTS UTILISATEURS
54C     LL4=0,1,2,...,MAX-1
55C     LL5=4 SELON DISQUE 3380
56C     ADRESSE RECORD=IFIN+LL1+LL2+LL4
57C     FORMAT RECORD : KB,LONGR,MAX,NXX,(VV(J),J=1,KB)
58C       
59C     A PARTIR DU RECORD IFIN+LL1+LL2 SONT STOCKEES LES INFORMATIONS
60C     CONCERNANT L'UTILISATION DE LA BANQUE
61C       
62C       
63C     CONTENU D'UN BLOC>1
64C     IADR,JADR,K,A1,A2,A3,(V(J),J=1,K)
65C     IADR=ADRESSE DU BLOC SUIVANT A LIRE
66C     JADR=ADRESSE DU BLOC PRECEDENT QUI A ETE LU
67C     A1=PREMIERE VALEUR DE NU DANS LE BLOC SUIVANT
68C     A2=DERNIERE VALEUR DE NU DANS LE BLOC PRECEDENT
69C     A3=DERNIERE VALEUR DE NU DANS LE BLOC ACTUEL
70C     V(1)=PREMIERE VALEUR DE NU DANS LE BLOC ACTUEL
71C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
72C       
73C LAST MODIF : 07.05.1991 PASSAGE DE 40 MOLECULES A 75 DANS LES COMMON
74C       
75C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
76C       
77      subroutine pgeisa(u1,u2,*)
78C       
79C     SI L'APPEL VIENT DES PROGRAMMES GEISA
80C     MPGX='ANL','EXT',....
81C     NPGX=1,2,...,8
82C       
83      character*7 form,bin
84      character*3 liste,pgm,ianl,iext,itrs,ilst,icop,info,icre,
85     &            modif,mpgx,ipgm,kpgm
86      logical*1 vb(107),vv(06233),qqq,invers
87      integer vers
88      real nu1,nu2
89C       
90C GEISA90 : 1552 -> 2813
91C       
92      dimension tab(29),v(2813),vab(13)
93C       
94      common/p1/ nu1,nu2,dnu,nbclas,khist,kanal,vers,mode,liste
95      common/p3/ imole,iran,ival,pgm,ianl,iext,itrs,ilst,icop,info,icre
96      common/p4/ nmol,knmol,ksot,kksot,ntab,nhist,kp,lre,form,bin,modif
97      common/p8/ npgx,nfff,mpgx,qqq(75)
98CBB modif: ajout du common ensor pour initialiser iuni
99      common/entsor/iuni,juni
100CBB fin modif 29/10/96
101C       
102      equivalence (kpgm,vb(29)),(v(1),vv(1)),(vab(1),vb(1))
103C       
104      data ipgm/'lec'/,invers,ideb/.false.,0/
105      include 'geisafile.h'
106CBB modif pour parametrer la lecture soit de la base (unit=1) soit un autre
107CBB fichier (unit=iuni)         29/10/1996
108CBB   data iuni,isor /01,6/
109C       
110C GEISA90 : 6233 -> 11276
111C       
112CBB  test de iuni pour faire l open sur le bon fichier
113c     print *,' pgeisa: iuni=',iuni
114      len=ltrim(racine_data)
115      write(*,*) 'racine_data ',racine_data(1:len),len
116      if (iuni.eq.1) then
117      open (unit=1,access='direct',recl=11276,
118c    &file='/users4/armante/GEISA_NEW/LxL/Data/Geisa97/geisa97_old')
119c    &file='/users4/armante/GEISA_NEW/LxL/Data/Geisa97new/geisa97')
120     &file=racine_data(1:len)//'/geisa97')
121                     else
122c     print *,' pgeisa2: iuni=',iuni
123      open (unit=iuni,access='direct',recl=11276)
124      endif
125CBB fin du test 29/10/96
126C       
127C     RECHERCHE DE LA PREMIERE TRANSITION A LIRE
128C     IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V
129C     V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC
130C       
131      invers=.false.
132c     print *,' pgeisa: read rec1 '
133      if(u1.gt.u2) invers=.true.
134      read (iuni,rec=1)
135     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
136c     print *,'aa1=',aa1,' aa2=',aa2,' n203=',n203,' nbraie=',nbraie
137c    *,' iecr=',iecr,' ifin=',ifin,' ll1=',ll1,' ll2=',ll2,' ll3=',
138c    *ll3,' ll4=',ll4
139      nmol=nbmol
140c     vers=ll3
141      v1=amax1(u1,aa1)
142      v2=amin1(u2,aa2)
143      w2=amin1(u1,aa2)
144      w1=amax1(u2,aa1)
145      iadr=int(v1/anu) + 2 - int(aa1/anu)
146      if(invers.and.w1.ge.w2) go to 70
147      if(.not.invers.and.v1.gt.v2) go to 70
148      if(.not.invers) go to 1
149      v1=w2
150      w2=w1
151      iadr=int(w2/anu) + 2 - int(aa1/anu)
1521     continue
153      go to 5
154C partie inutile ( trace des users connectes via la proc geisa du CIRCE
155      if(ll1.eq.0.or.ll2.eq.0.or.nfff.eq.1.or.ll4.lt.0) go to 5
156C       
157C     VALEURS RETOURNEES
158C     1 - 8  NOM
159C     9 - 15 SIGLE NUM
160C     16     BLANC
161C     17 -19 ADRESSE TERMINAL
162C     20 -24 DATE XXYYY
163C     25 -32 HEURE HHMMSSDC
164C       
165      kpgm=ipgm
166      if(npgx.ge.1.and.npgx.le.8) kpgm=mpgx
167C       
168      if(kpgm.ne.ipgm) go to 7
169      do 6 j=1,nmol
170      qqq(j)=.true.
1716     continue
1727     continue
173C       
174C       
175C     VB CONTIENT 32+NMOL OCTETS  :
176C     1  - 8   NOM
177C     9  - 15  SIGLE NUM
178C     16 - 20 DATE XXYYY
179C     21 - 24 NU1
180C     25 - 28 NU2
181C     29 - 32 PGM
182C     33 - 32+NMOL  NMOL OCTETS PRESENCE ABSENCE MOLECULE
183C       
184      nfff=1
185      do 2 j=20,24
186      vb(j-4)=vb(j)
1872     continue
188      vab(6)=v1
189      if(kpgm.eq.icop) vab(6)=nu1
190      vab(7)=v2
191      if(kpgm.eq.icop) vab(7)=nu2
192      do 3 j=1,nmol
193      vb(32+j)=qqq(j)
1943     continue
195      lll=ifin+ll1+ll2+ll4
196c     print *,' pgeisalire: rec =lll',lll
197      read (iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb)
198      do 4 j=1,nxx
199      kb=kb+1
200      vv(kb)=vb(j)
2014     continue
202      write(iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb)
203      if(kb.lt.longr) go to 5
204      ll4=ll4+1
205      if(ll4.gt.max-1) ll4=-ll4
206      write(iuni,rec=1)
207     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
208C fin de la trace utilisateurs
2095     continue
210      if(invers) go to 30
2119     continue
212C       
213C     RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE DIRECTE
214C       
215      ilec=iadr
216c     print *,' pgeisalire: rec =iadr',iadr
217      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
218C     FIND (IUNI,REC=IADR)
219      if(v1.gt.a1) go to 9
220      if(v1.gt.a3) go to 11
221C       
222C GEISA90 : 16 -> 29
223C       
224      do 10 j=1,k,29
225      ideb=j
226      if(v1.le.v(j)) go to 20
22710    continue
22811    continue
229      ideb=k+1
23020    continue
231C       
232C GEISA90 : 16 -> 29
233C       
234      ideb=ideb-29
235C       
236      return
237C       
238C     RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE INVERSE
239C     IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V
240C     V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC
241C       
24230    continue
24335    continue
244      ilec=iadr
245c     print *,' lecture de ilec=',ilec
246      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
247C     FIND (IUNI,REC=IADR)
248      if(w2.gt.a1) go to 35
249      if(w2.gt.a3) go to 37
250C       
251C GEISA90 : 16 -> 29
252C       
253      do 36 j=1,k,29
254      ideb=j
255      if(w2.lt.v(j)) return
25636    continue
25737    continue
258      ideb=k+1
259      return
260C       
261C     LECTURE DES TRANSITIONS
262C       
263      entry lgeisa(tab,*)
264      if(invers) go to 52
265C       
266C     LECTURE DES TRANSITIONS PAR ORDRE CROISSANT
267C       
26847    continue
269C       
270C GEISA90 : 16 -> 29
271C       
272      ideb=ideb+29
273      if(ideb.gt.k) go to 50
274C       
275C GEISA90 : 16 -> 29
276C       
277      do 48 j=1,29
27848    tab(j)=v(ideb+j-1)
279      if(v2.lt.v(ideb)) return 1
280C       
281C     RETURN 1  SI DERNIERE TRANSITION LUE
282C     OU SI FIN DU FICHIER RENCONTRE
283C       
284      return
28550    continue
286C       
287C     TOUT LE VECTEUR V EST LU
288C     LECTURE DU BLOC SUIVANT ET REMPLISSAGE DE V
289C       
290      if(iadr.eq.ifin) return 1
291c     print *,' lecture de iadr=',iadr
292      read (iuni,rec=iadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
293C     FIND (IUNI,REC=IADR)
294C       
295C GEISA90 : 15 -> 28
296C       
297      ideb=-28
298      go to 47
299C       
300C     LECTURE DES TRANSITIONS PAR ORDRE DECROISSANT
301C       
30252    continue
303C       
304C GEISA90 : 16 -> 29
305C       
306      ideb=ideb-29
307      if(ideb.lt.1) go to 55
308C       
309C GEISA90 : 16 -> 29
310C       
311      do 54 j=1,29
31254    tab(j)=v(ideb+j-1)
313      if(v(ideb).lt.w1) return 1
314      return
31555    continue
316      if(jadr.eq.1) return 1
317c     print *,' lecture de jadr=',jadr
318      read (iuni,rec=jadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
319C     FIND (IUNI,REC=JADR)
320      ideb=k+1
321      go to 52
32270    continue
323C       
324C     ERREUR SUR LES VALEURS NU1 ET NU2
325C       
326      write(isor,1000) u1,u2,nbraie,aa1,aa2
3271000  format(///' consultation of geisa contents   *** geisa ***'/
328     &          ' verify the value of nu1=',f12.6,' and nu2=',
329     &f12.6/' the',i8,' transitions of the spectroscopic data bank are i
330     &n the spectral interval   '/9x,'v1=',f12.6,' and v2=',f12.6///)
331      return 1
332      end
Note: See TracBrowser for help on using the repository browser.