source: ether_geisa/trunk/pgm03/copie.f @ 848

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

Geisa inital import

File size: 5.8 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./
26      include 'geisafile.h'
27C     INITIALISATION DE L'UNITE LOGIQUE DE LECTURE DE LA BANQUE
28      call pgeisa(0.,99999.,*130)
29c
30C OUVERTURE DU FICHIER KUNI
31      len=ltrim(filename_bin)
32      open(unit=kuni,status='new',access='direct',recl=11276
33     & ,file=filename_bin(1:len))
34C       
35C     IMPRESSION DU TITRE
36C       
37C    &'* GEISA   GEISA *'/' *     GEISA     *',98X,'*     GEISA     *'/
38C     WRITE(ISOR,900 ) VERS,NU1,NU2
39      write(isor,900 ) vers,pgm,pgm,nu1,nu2
40900   format(1x,17('*'),98x,17('*')/1x,'* geisa   geisa *',
41     &30x,'creation d''un sous-fichier de GEISA',i2.2,31x,
42     &'* geisa   geisa *'/' *',6x,a3,6x,'*',98x,'*',6x,a3,6x,'*'/
43     &' * geisa   geisa *',20x,'spectral  interval (cm-1) ',
44     &' nu1=',f10.3,3x,'nu2=',f10.3,
45     &20x,'* geisa   geisa *'/1x,17('*'),98x,17('*'))
46      i1=1
47      read (iuni,rec=1)
48     &aa1,aa2,anu,n203,nbraie,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
49      if(nu1.gt.aa2.or.nu2.lt.aa1.or.nu1.gt.nu2) go to 200
50      v1=amax1(nu1,aa1)
51      v2=amin1(nu2,aa2)
52      iadr=int(v1/anu) + 2 - int(aa1/anu)
53C       
54C     CALCUL DE INU1= NUMERO DU 1ER BLOC A LIRE ET DE I1=1ERE TRANSITION
55C     A LIRE DANS CE BLOC
56C       
575     continue
58      ilec=iadr
59      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
60      if(v1.gt.a1) go to 5
61C       
62C GEISA90 16 -> 29
63C       
64      do 10 j=1,k,29
65      if(v1.le.v(j)) go to 13
6610    continue
67      inu1=iadr
68      go to 15
6913    continue
70      inu1=ilec
71      i1=j
7215    continue
73      bb1=v(i1)
74C       
75C     CALCUL DE INU2= NUMERO DU DERNIER BLOC A LIRE ET DE I2= DERNIERE
76C     TRANSITION A LIRE DANS CE BLOC
77C       
78      iadr=inu1
7920    continue
80      ilec=iadr
81      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
82      if(v2.lt.a1) go to 25
83      go to 20
8425    continue
85C       
86C GEISA90 16 -> 29
87C       
88      do 26 j=1,k,29
89      if(v2.le.v(j)) go to 27
9026    continue
91C       
92C GEISA90 16 -> 29
93C       
94      j=j-29
9527    continue
96      inu2=ilec
97      i2=j
98      bb2=v(i2)
99      nbr=0
100      iaa=2-int(bb1/anu)
101      nbreg=int(bb2/anu) + iaa
102      jad=1
103      ireg=2
104      iad=nbreg+1
105      mul=1
106      app=0.
107      iadr=inu1
10850    continue
109      ilec=iadr
110      read (iuni,rec=ilec) iadr,jadr,k,a1,a2,a3,(v(j),j=1,k)
111      iregp=int(a1/anu)+iaa
112      if(ilec.eq.inu2) go to 70
113      if(ireg.ne.iregp) go to 60
114      if(ilec.ne.inu1) go to 56
115C       
116C     ECRITURE DU BLOC 2
117C       
118      do 55 j=i1,k
11955    v(j-i1+1)=v(j)
120      k=k-i1+1
12156    continue
122C       
123C     ZONE D'ECRITURE DES TRANSITIONS AYANT LE MEME
124C     IREG=INT(NU/ANU) + 2 - INT(BB1/ANU)
125C       
126C     SI MUL=1  ECRITURE DU PREMIER BLOC A L'ADRESSE IREG
127C     SI MUL=2  ECRITURE DES BLOCS SUIVANTS A L'ADRESSE IECR
128C       
129      iiii=iecr
130      if(mul.eq.1) iiii=ireg
131C       
132C     ECRITURE DU BLOC ET MISE A JOUR DES PARAMETRES IAD,JAD,APP,IECR
133C       
134      write(kuni,rec=iiii) iad,jad,k,a1,app,v(k-15),(v(j),j=1,k)
135      nbr=nbr+k
136C       
137C GEISA90:  15 -> 28
138C       
139      app=v(k-28)
140      iecr=iad
141      jad=iiii
142      iad=iad+1
143      mul=2
144      go to 50
14560    continue
146C       
147C     ZONE DE FIN D'ECRITURE DES TRANSITIONS AYANT LE MEME IREG
148C       
149C       
150C     SI MUL=1  ECRITURE DU DERNIER BLOC IREG (C'EST AUSSI LE PREMIER)
151C               A L'ADRESSE IREG
152C     SI MUL=2  ECRITURE DU DERNIER BLOC A L'ADRESSE IECR
153C       
154      iiii=iecr
155      if(mul.eq.1) iiii=ireg
156C       
157C     ECRITURE DU BLOC ET MISE A JOUR DES PARAMETRES JAD,IECR,IREG,APP
158C       
159      write(kuni,rec=iiii) iregp,jad,k,a1,app,v(k-15),(v(j),j=1,k)
160      nbr=nbr+k
161C       
162C GEISA90:  15 -> 28
163C       
164      app=v(k-28)
165      iecr=iregp
166      jad=iiii
167      ireg=iregp
168      mul=1
169      go to 50
17070    continue
171      a1=99999.9
172C       
173C GEISA90:  15 -> 28
174C       
175      k=i2+28
176      if(mul.eq.2) ireg=iecr
177C       
178C     ECRITURE DU DERNIER RECORD DU FICHIER ( NUMERO IECR OU IREG)
179C       
180      write(kuni,rec=ireg) iad,jad,k,a1,app,v(k-15),(v(j),j=1,k)
181C       
182C     ECRITURE DU DERNIER RECORD PHYSIQUE CONTENANT DES ZEROS
183C       
184      write(kuni,rec=iad) izero,izero,izero,zero
185C       
186C GEISA90:  16 -> 29
187C       
188      nbr=(nbr+k)/29
189      ifin=iad
190C       
191C     ECRITURE DU PREMIER RECORD CONTENANT LES PARAMETRES
192C       
193      ll1=0
194      ll2=0
195      ll3=-100
196      ll4=0
197      write(kuni,rec=1)
198     &bb1,bb2,anu,n203,nbr,nbmol,iecr,ifin,ll1,ll2,ll3,ll4
199      write(isor,4000) 
2004000  format(///1x,'copy ended successfuly',//)
201      write(isor,5000) nbr,bb1,bb2
2025000  format(///' total number of transitions : ',i7//
203     &'  first   transition : ',f12.6/
204     &'  last    transition : ',f12.6/)
205      return
206200   continue
207      write(isor,2000) nu1,nu2,nbraie,aa1,aa2
2082000  format(/// ' *cop*   verify the value of nu1=',f12.6,' and of nu2=
209     &',f12.6/09x,'the',i8,' transitions of the spectroscopic data ',
210     &' bank are in spectral range '/09x,'v1=',f12.6,' et v2=',
211     &f12.6///)
212130   continue
213      return 1
214      end
Note: See TracBrowser for help on using the repository browser.