source: trunk/LMDZ.GENERIC/utilities/make_composition_gen.for @ 1217

Last change on this file since 1217 was 253, checked in by emillour, 13 years ago

Generic GCM

  • Massive update to version 0.7

EM+RW

File size: 4.0 KB
Line 
1      program make_composition_gen
2      implicit none
3
4!     -------------------------------------------------------------   
5!     Purpose: to create "composition.in" file readable by kspectrum
6!     Authour: Robin Wordsworth (2010)
7!     -------------------------------------------------------------
8
9      include 'max.inc'
10      include 'formats.inc'
11      integer strlen,nmolec,nlev_mf,mol,imf,ind,indf
12      integer i,j,k,im,m
13      integer nb,na,ne
14      double precision alt(1:Nmax)
15      double precision pres(1:Nmax)
16      double precision temp(1:Nmax)
17
18      double precision P_mf(1:Nmax)
19      double precision x(1:Nmax,1:Nmol_max)
20      double precision xlev(1:Nmol_max)
21      double precision xconst(1:Nmol_max)
22      character*100 composition_file,model_file
23      character*100 planet_descriptor
24      character*200 string
25      character*20 s
26      character*10 molec_names(1:Nmol_max),molname
27      character*1 spch
28
29      integer iP, iT, iQ
30      double precision P(1:Nmax), T(1:Nmax), Q(1:Nmax)
31
32      spch=' '
33
34      print*,'Name of atmosphere / planet:'
35      read*,planet_descriptor
36
37      composition_file='./composition.in'
38
39!     ! nmolec=2 ! total number of molecules
40
41      ! load temperature, pressure, mixing ratio data
42      open(9,file='T.dat')
43      read(9,*) iT
44      do i=1,iT
45         read(9,*) T(i)
46      enddo
47      close(9)
48
49      open(10,file='p.dat')
50      read(10,*) iP
51      do i=1,iP
52         read(10,*) P(i)
53         P(i)=10.**P(i)/1013.25
54      enddo
55      close(10)
56
57      open(11,file='Q.dat')
58      read(11,*) nmolec
59
60      print*,'nmolec=',nmolec
61
62      do mol=1,nmolec
63         read(11,*) molec_names(mol)
64      enddo
65      read(11,*) iQ
66      do i=1,iQ
67         read(11,*) Q(i)
68      enddo
69      close(11)
70
71      m=iP*iT*iQ ! total number of layers
72
73      print*,'Temperature layers:  ',iT
74      print*,'Pressure layers:     ',iP
75      print*,'Mixing ratio layers: ',iQ
76      print*,'Total:               ',m
77
78      do mol=1,nmolec-1
79         print*,'Please enter vmr of ',molec_names(mol)
80         read(*,*) xconst(mol)
81      end do
82
83     
84      do i=1,iQ
85         do j=1,iP             
86            do k=1,iT
87
88               im = (i-1)*iP*iT + (j-1)*iT + k
89
90               alt(im)=0.D0
91               pres(im)=P(j)
92               temp(im)=T(k)
93
94               do mol=1,nmolec-1
95                  x(im,mol)=xconst(mol)*(1.0-Q(i))
96               enddo
97               x(im,nmolec)=Q(i)
98
99            enddo
100         enddo
101      enddo
102
103      open(12,file=composition_file(1:strlen(composition_file)))
104      string='Atmospheric composition input '
105      string=string(1:strlen(string))//' data file for planet:'
106      string=string(1:strlen(string))//' '//
107
108     &     planet_descriptor(1:strlen(planet_descriptor))
109      write(12,'(a)') string(1:strlen(string))
110      write(12,39) 'Number of atmospheric levels: ',m
111      write(12,34) 'Number of molecules: ',nmolec
112      write(12,*)
113      string='      z (km)     /    P (atm)     /     T (K) *'
114
115
116      do mol=1,nmolec
117
118         molname=molec_names(mol)
119
120         nb=5
121         if (strlen(molname).eq.1) then
122            na=7
123         else if (strlen(molname).eq.2) then
124            na=6
125         else if (strlen(molname).eq.3) then
126            na=5
127         endif
128         s='*'
129         do ne=1,nb
130            s=s(1:strlen(s)-1)//spch//'*'
131         enddo
132         s=s(1:strlen(s)-1)//'/*'
133         do ne=1,na
134            s=s(1:strlen(s)-1)//spch//'*'
135         enddo
136         
137         string=string(1:strlen(string)-1)
138     &        //s(1:strlen(s)-1)
139     &        //'x['
140     &        //molname(1:strlen(molname))
141     &        //']*'
142      enddo
143      write(12,*) string(1:strlen(string)-1)
144
145      do im=1,m
146
147         do mol=1,nmolec
148            xlev(mol)=x(im,mol)
149         enddo                  ! mol
150
151         write(12,50) alt(im),pres(im),temp(im),(xlev(mol),mol=1,nmolec)
152
153      enddo
154
155      write(12,*)
156      close(12)
157
158      write(*,*) 'Output file successfully generated:'
159      write(*,*) composition_file(1:strlen(composition_file))
160     
161      end
Note: See TracBrowser for help on using the repository browser.