source: trunk/pgm03/pgeisa.f @ 1

Last change on this file since 1 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'
106     
107      len=ltrim(racine_data)
108      filename_asc=racine_data(1:len)//'/line_GEISA2003_asc_gs_v1.0'
109      filename_bin=racine_data(1:len)//'/line_GEISA2003_bin_gs_v1.0'
110CBB modif pour parametrer la lecture soit de la base (unit=1) soit un autre
111CBB fichier (unit=iuni)         29/10/1996
112CBB   data iuni,isor /01,6/
113C       
114C GEISA90 : 6233 -> 11276
115C       
116CBB  test de iuni pour faire l open sur le bon fichier
117c     print *,' pgeisa: iuni=',iuni
118      if (iuni.eq.1) then
119      len=ltrim(filename_bin)
120      open (unit=1,access='direct',recl=11276,
121c    &file='/usr/local/datageisa/data/geisa97')
122c    &file='/users6/geisa/Database/line_GEISA2003_bin_gs_v1.0')
123     &file=filename_bin(1:len))
124                     else
125c     print *,' pgeisa2: iuni=',iuni
126      open (unit=iuni,access='direct',recl=11276)
127      endif
128CBB fin du test 29/10/96
129C       
130C     RECHERCHE DE LA PREMIERE TRANSITION A LIRE
131C     IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V
132C     V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC
133C       
134      invers=.false.
135c     print *,' pgeisa: read rec1 '
136      if(u1.gt.u2) invers=.true.
137      read (iuni,rec=1)
138     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
139c     print *,'aa1=',aa1,' aa2=',aa2,' n203=',n203,' nbraie=',nbraie
140c    *,' iecr=',iecr,' ifin=',ifin,' ll1=',ll1,' ll2=',ll2,' ll3=',
141c    *ll3,' ll4=',ll4
142      nmol=nbmol
143      vers=ll3
144      v1=amax1(u1,aa1)
145      v2=amin1(u2,aa2)
146      w2=amin1(u1,aa2)
147      w1=amax1(u2,aa1)
148      iadr=int(v1/anu) + 2 - int(aa1/anu)
149      if(invers.and.w1.ge.w2) go to 70
150      if(.not.invers.and.v1.gt.v2) go to 70
151      if(.not.invers) go to 1
152      v1=w2
153      w2=w1
154      iadr=int(w2/anu) + 2 - int(aa1/anu)
1551     continue
156      go to 5
157C partie inutile ( trace des users connectes via la proc geisa du CIRCE
158      if(ll1.eq.0.or.ll2.eq.0.or.nfff.eq.1.or.ll4.lt.0) go to 5
159C       
160C     VALEURS RETOURNEES
161C     1 - 8  NOM
162C     9 - 15 SIGLE NUM
163C     16     BLANC
164C     17 -19 ADRESSE TERMINAL
165C     20 -24 DATE XXYYY
166C     25 -32 HEURE HHMMSSDC
167C       
168      kpgm=ipgm
169      if(npgx.ge.1.and.npgx.le.8) kpgm=mpgx
170C       
171      if(kpgm.ne.ipgm) go to 7
172      do 6 j=1,nmol
173      qqq(j)=.true.
1746     continue
1757     continue
176C       
177C       
178C     VB CONTIENT 32+NMOL OCTETS  :
179C     1  - 8   NOM
180C     9  - 15  SIGLE NUM
181C     16 - 20 DATE XXYYY
182C     21 - 24 NU1
183C     25 - 28 NU2
184C     29 - 32 PGM
185C     33 - 32+NMOL  NMOL OCTETS PRESENCE ABSENCE MOLECULE
186C       
187      nfff=1
188      do 2 j=20,24
189      vb(j-4)=vb(j)
1902     continue
191      vab(6)=v1
192      if(kpgm.eq.icop) vab(6)=nu1
193      vab(7)=v2
194      if(kpgm.eq.icop) vab(7)=nu2
195      do 3 j=1,nmol
196      vb(32+j)=qqq(j)
1973     continue
198      lll=ifin+ll1+ll2+ll4
199c     print *,' pgeisalire: rec =lll',lll
200      read (iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb)
201      do 4 j=1,nxx
202      kb=kb+1
203      vv(kb)=vb(j)
2044     continue
205      write(iuni,rec=lll) kb,longr,max,nxx,(vv(j),j=1,kb)
206      if(kb.lt.longr) go to 5
207      ll4=ll4+1
208      if(ll4.gt.max-1) ll4=-ll4
209      write(iuni,rec=1)
210     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
211C fin de la trace utilisateurs
2125     continue
213      if(invers) go to 30
2149     continue
215C       
216C     RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE DIRECTE
217C       
218      ilec=iadr
219c     print *,' pgeisalire: rec =iadr',iadr
220      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
221C     FIND (IUNI,REC=IADR)
222      if(v1.gt.a1) go to 9
223      if(v1.gt.a3) go to 11
224C       
225C GEISA90 : 16 -> 29
226C       
227      do 10 j=1,k,29
228      ideb=j
229      if(v1.le.v(j)) go to 20
23010    continue
23111    continue
232      ideb=k+1
23320    continue
234C       
235C GEISA90 : 16 -> 29
236C       
237      ideb=ideb-29
238C       
239      return
240C       
241C     RECHERCHE DE LA PREMIERE TRANSITION POUR LECTURE INVERSE
242C     IDEB=ADRESSE DE LA TRANSITION DANS LE VECTEUR V
243C     V VECTEUR QUI CONTIENT TOUTES LES TRANSITIONS D'UN BLOC
244C       
24530    continue
24635    continue
247      ilec=iadr
248c     print *,' lecture de ilec=',ilec
249      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
250C     FIND (IUNI,REC=IADR)
251      if(w2.gt.a1) go to 35
252      if(w2.gt.a3) go to 37
253C       
254C GEISA90 : 16 -> 29
255C       
256      do 36 j=1,k,29
257      ideb=j
258      if(w2.lt.v(j)) return
25936    continue
26037    continue
261      ideb=k+1
262      return
263C       
264C     LECTURE DES TRANSITIONS
265C       
266      entry lgeisa(tab,*)
267      if(invers) go to 52
268C       
269C     LECTURE DES TRANSITIONS PAR ORDRE CROISSANT
270C       
27147    continue
272C       
273C GEISA90 : 16 -> 29
274C       
275      ideb=ideb+29
276      if(ideb.gt.k) go to 50
277C       
278C GEISA90 : 16 -> 29
279C       
280      do 48 j=1,29
28148    tab(j)=v(ideb+j-1)
282      if(v2.lt.v(ideb)) return 1
283C       
284C     RETURN 1  SI DERNIERE TRANSITION LUE
285C     OU SI FIN DU FICHIER RENCONTRE
286C       
287      return
28850    continue
289C       
290C     TOUT LE VECTEUR V EST LU
291C     LECTURE DU BLOC SUIVANT ET REMPLISSAGE DE V
292C       
293      if(iadr.eq.ifin) return 1
294c     print *,' lecture de iadr=',iadr
295      read (iuni,rec=iadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
296C     FIND (IUNI,REC=IADR)
297C       
298C GEISA90 : 15 -> 28
299C       
300      ideb=-28
301      go to 47
302C       
303C     LECTURE DES TRANSITIONS PAR ORDRE DECROISSANT
304C       
30552    continue
306C       
307C GEISA90 : 16 -> 29
308C       
309      ideb=ideb-29
310      if(ideb.lt.1) go to 55
311C       
312C GEISA90 : 16 -> 29
313C       
314      do 54 j=1,29
31554    tab(j)=v(ideb+j-1)
316      if(v(ideb).lt.w1) return 1
317      return
31855    continue
319      if(jadr.eq.1) return 1
320c     print *,' lecture de jadr=',jadr
321      read (iuni,rec=jadr) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
322C     FIND (IUNI,REC=JADR)
323      ideb=k+1
324      go to 52
32570    continue
326C       
327C     ERREUR SUR LES VALEURS NU1 ET NU2
328C       
329      write(isor,1000) u1,u2,nbraie,aa1,aa2
3301000  format(///' consultation of geisa contents   *** geisa ***'/
331     &          ' verify the value of nu1=',f12.6,' and nu2=',
332     &f12.6/' the',i8,' transitions of the spectroscopic data bank are i
333     &n the spectral interval   '/9x,'v1=',f12.6,' and v2=',f12.6///)
334      return 1
335      end
Note: See TracBrowser for help on using the repository browser.