source: trunk/pgm97/copie.f @ 1

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

Geisa inital import

File size: 5.7 KB
Line 
1C     CE PROGRAMME CREE UN SOUS-FICHIER DE LA BANQUE DANS LA MEME
2C     STRUCTURE,C'EST-A-DIRE EXPLOITABLE PAR LE PROGRAMME *** GEISA ***
3C       
4C     LA COPIE SE FAIT SUR L'UNITE LOGIQUE   2
5C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
6C       
7C       MODIF : 06.05.1991 PASSAGE DE 40 A 75 MOLECULES DANS LES COMMON
8C       
9C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
10      subroutine copie(v,*)
11C       
12      character*4 blanc
13      character*3 pgm,ianl,iext,itrs,ilst,icop,info,icre,mpgx,
14     &            liste,oui
15      integer vers
16      logical*1 qqq
17      real nu1,nu2
18      real v(1)
19C       
20      common/p1/ nu1,nu2,dnu,nbclas,khist,kanal,vers,mode,liste
21      common/p3/ imole,iran,ival,pgm,ianl,iext,itrs,ilst,icop,info,icre
22      common/p8/ npgx,nfff,mpgx,qqq(75)
23      common/entsor/iuni,juni,kuni,ient,isor,iper,nresv,maxx,blanc,oui
24C       
25      data izero,zero/0,0./
26C     INITIALISATION DE L'UNITE LOGIQUE DE LECTURE DE LA BANQUE
27      call pgeisa(0.,99999.,*130)
28c
29C OUVERTURE DU FICHIER KUNI
30      open(unit=kuni,status='new',access='direct',recl=11276)
31C       
32C     IMPRESSION DU TITRE
33C       
34C    &'* GEISA   GEISA *'/' *     GEISA     *',98X,'*     GEISA     *'/
35C     WRITE(ISOR,900 ) VERS,NU1,NU2
36      write(isor,900 ) vers,pgm,pgm,nu1,nu2
37900   format(1x,17('*'),98x,17('*')/1x,'* geisa   geisa *',
38     &30x,'creation d''un sous-fichier de GEISA',i2.2,31x,
39     &'* geisa   geisa *'/' *',6x,a3,6x,'*',98x,'*',6x,a3,6x,'*'/
40     &' * geisa   geisa *',20x,'spectral  interval (cm-1) ',
41     &' nu1=',f10.3,3x,'nu2=',f10.3,
42     &20x,'* geisa   geisa *'/1x,17('*'),98x,17('*'))
43      i1=1
44      read (iuni,rec=1)
45     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
46      if(nu1.gt.aa2.or.nu2.lt.aa1.or.nu1.gt.nu2) go to 200
47      v1=amax1(nu1,aa1)
48      v2=amin1(nu2,aa2)
49      iadr=int(v1/anu) + 2 - int(aa1/anu)
50C       
51C     CALCUL DE INU1= NUMERO DU 1ER BLOC A LIRE ET DE I1=1ERE TRANSITION
52C     A LIRE DANS CE BLOC
53C       
545     continue
55      ilec=iadr
56      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
57      if(v1.gt.a1) go to 5
58C       
59C GEISA90 16 -> 29
60C       
61      do 10 j=1,k,29
62      if(v1.le.v(j)) go to 13
6310    continue
64      inu1=iadr
65      go to 15
6613    continue
67      inu1=ilec
68      i1=j
6915    continue
70      bb1=v(i1)
71C       
72C     CALCUL DE INU2= NUMERO DU DERNIER BLOC A LIRE ET DE I2= DERNIERE
73C     TRANSITION A LIRE DANS CE BLOC
74C       
75      iadr=inu1
7620    continue
77      ilec=iadr
78      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
79      if(v2.lt.a1) go to 25
80      go to 20
8125    continue
82C       
83C GEISA90 16 -> 29
84C       
85      do 26 j=1,k,29
86      if(v2.le.v(j)) go to 27
8726    continue
88C       
89C GEISA90 16 -> 29
90C       
91      j=j-29
9227    continue
93      inu2=ilec
94      i2=j
95      bb2=v(i2)
96      nbr=0
97      iaa=2-int(bb1/anu)
98      nbreg=int(bb2/anu) + iaa
99      jad=1
100      ireg=2
101      iad=nbreg+1
102      mul=1
103      app=0.
104      iadr=inu1
10550    continue
106      ilec=iadr
107      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
108      iregp=int(a1/anu)+iaa
109      if(ilec.eq.inu2) go to 70
110      if(ireg.ne.iregp) go to 60
111      if(ilec.ne.inu1) go to 56
112C       
113C     ECRITURE DU BLOC 2
114C       
115      do 55 j=i1,k
11655    v(j-i1+1)=v(j)
117      k=k-i1+1
11856    continue
119C       
120C     ZONE D'ECRITURE DES TRANSITIONS AYANT LE MEME
121C     IREG=INT(NU/ANU) + 2 - INT(BB1/ANU)
122C       
123C     SI MUL=1  ECRITURE DU PREMIER BLOC A L'ADRESSE IREG
124C     SI MUL=2  ECRITURE DES BLOCS SUIVANTS A L'ADRESSE IECR
125C       
126      iiii=iecr
127      if(mul.eq.1) iiii=ireg
128C       
129C     ECRITURE DU BLOC ET MISE A JOUR DES PARAMETRES IAD,JAD,APP,IECR
130C       
131      write(kuni,rec=iiii) iad,jad,k,a1,app,v(k-15),(v(j),j=1,k)
132      nbr=nbr+k
133C       
134C GEISA90:  15 -> 28
135C       
136      app=v(k-28)
137      iecr=iad
138      jad=iiii
139      iad=iad+1
140      mul=2
141      go to 50
14260    continue
143C       
144C     ZONE DE FIN D'ECRITURE DES TRANSITIONS AYANT LE MEME IREG
145C       
146C       
147C     SI MUL=1  ECRITURE DU DERNIER BLOC IREG (C'EST AUSSI LE PREMIER)
148C               A L'ADRESSE IREG
149C     SI MUL=2  ECRITURE DU DERNIER BLOC A L'ADRESSE IECR
150C       
151      iiii=iecr
152      if(mul.eq.1) iiii=ireg
153C       
154C     ECRITURE DU BLOC ET MISE A JOUR DES PARAMETRES JAD,IECR,IREG,APP
155C       
156      write(kuni,rec=iiii) iregp,jad,k,a1,app,v(k-15),(v(j),j=1,k)
157      nbr=nbr+k
158C       
159C GEISA90:  15 -> 28
160C       
161      app=v(k-28)
162      iecr=iregp
163      jad=iiii
164      ireg=iregp
165      mul=1
166      go to 50
16770    continue
168      a1=99999.9
169C       
170C GEISA90:  15 -> 28
171C       
172      k=i2+28
173      if(mul.eq.2) ireg=iecr
174C       
175C     ECRITURE DU DERNIER RECORD DU FICHIER ( NUMERO IECR OU IREG)
176C       
177      write(kuni,rec=ireg) iad,jad,k,a1,app,v(k-15),(v(j),j=1,k)
178C       
179C     ECRITURE DU DERNIER RECORD PHYSIQUE CONTENANT DES ZEROS
180C       
181      write(kuni,rec=iad) izero,izero,izero,zero
182C       
183C GEISA90:  16 -> 29
184C       
185      nbr=(nbr+k)/29
186      ifin=iad
187C       
188C     ECRITURE DU PREMIER RECORD CONTENANT LES PARAMETRES
189C       
190      ll1=0
191      ll2=0
192      ll4=0
193      write(kuni,rec=1)
194     &bb1,bb2,anu,n203,nbr,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
195      write(isor,4000) 
1964000  format(///1x,'copy ended successfuly',//)
197      write(isor,5000) nbr,bb1,bb2
1985000  format(///' total number of transitions : ',i7//
199     &'  first   transition : ',f12.6/
200     &'  last    transition : ',f12.6/)
201      return
202200   continue
203      write(isor,2000) nu1,nu2,nbraie,aa1,aa2
2042000  format(/// ' *cop*   verify the value of nu1=',f12.6,' and of nu2=
205     &',f12.6/09x,'the',i8,' transitions of the spectroscopic data ',
206     &' bank are in spectral range '/09x,'v1=',f12.6,' et v2=',
207     &f12.6///)
208130   continue
209      return 1
210      end
Note: See TracBrowser for help on using the repository browser.