      program make_composition_gen
      implicit none

!     -------------------------------------------------------------   
!     Purpose: to create "composition.in" file readable by kspectrum
!     Authour: Robin Wordsworth (2010)
!     -------------------------------------------------------------

      include 'max.inc'
      include 'formats.inc'
      integer strlen,nmolec,nlev_mf,mol,imf,ind,indf
      integer i,j,k,im,m
      integer nb,na,ne
      double precision alt(1:Nmax)
      double precision pres(1:Nmax)
      double precision temp(1:Nmax)

      double precision P_mf(1:Nmax)
      double precision x(1:Nmax,1:Nmol_max)
      double precision xlev(1:Nmol_max)
      double precision xconst(1:Nmol_max)
      character*100 composition_file,model_file
      character*100 planet_descriptor
      character*200 string
      character*20 s
      character*10 molec_names(1:Nmol_max),molname
      character*1 spch

      integer iP, iT, iQ
      double precision P(1:Nmax), T(1:Nmax), Q(1:Nmax)

      spch=' '

      print*,'Name of atmosphere / planet:'
      read*,planet_descriptor

      composition_file='./composition.in'

!     ! nmolec=2 ! total number of molecules

      ! load temperature, pressure, mixing ratio data
      open(9,file='T.dat')
      read(9,*) iT
      do i=1,iT
         read(9,*) T(i)
      enddo
      close(9)

      open(10,file='p.dat')
      read(10,*) iP
      do i=1,iP
         read(10,*) P(i)
         P(i)=10.**P(i)/1013.25
      enddo
      close(10)

      open(11,file='Q.dat')
      read(11,*) nmolec

      print*,'nmolec=',nmolec

      do mol=1,nmolec
         read(11,*) molec_names(mol)
      enddo
      read(11,*) iQ
      do i=1,iQ
         read(11,*) Q(i)
      enddo
      close(11)

      m=iP*iT*iQ ! total number of layers

      print*,'Temperature layers:  ',iT
      print*,'Pressure layers:     ',iP
      print*,'Mixing ratio layers: ',iQ
      print*,'Total:               ',m

      do mol=1,nmolec-1
         print*,'Please enter vmr of ',molec_names(mol)
         read(*,*) xconst(mol)
      end do

     
      do i=1,iQ
         do j=1,iP              
            do k=1,iT

               im = (i-1)*iP*iT + (j-1)*iT + k

               alt(im)=0.D0
               pres(im)=P(j)
               temp(im)=T(k)

               do mol=1,nmolec-1
                  x(im,mol)=xconst(mol)*(1.0-Q(i))
               enddo
               x(im,nmolec)=Q(i)

            enddo
         enddo
      enddo

      open(12,file=composition_file(1:strlen(composition_file)))
      string='Atmospheric composition input '
      string=string(1:strlen(string))//' data file for planet:'
      string=string(1:strlen(string))//' '//

     &     planet_descriptor(1:strlen(planet_descriptor))
      write(12,'(a)') string(1:strlen(string))
      write(12,39) 'Number of atmospheric levels: ',m
      write(12,34) 'Number of molecules: ',nmolec
      write(12,*) 
      string='      z (km)     /    P (atm)     /     T (K) *'


      do mol=1,nmolec

         molname=molec_names(mol)

         nb=5
         if (strlen(molname).eq.1) then
            na=7
         else if (strlen(molname).eq.2) then
            na=6
         else if (strlen(molname).eq.3) then
            na=5
         endif
         s='*'
         do ne=1,nb
            s=s(1:strlen(s)-1)//spch//'*'
         enddo
         s=s(1:strlen(s)-1)//'/*'
         do ne=1,na
            s=s(1:strlen(s)-1)//spch//'*'
         enddo
         
         string=string(1:strlen(string)-1)
     &        //s(1:strlen(s)-1)
     &        //'x['
     &        //molname(1:strlen(molname))
     &        //']*'
      enddo
      write(12,*) string(1:strlen(string)-1)

      do im=1,m

         do mol=1,nmolec
            xlev(mol)=x(im,mol)
         enddo                  ! mol

         write(12,50) alt(im),pres(im),temp(im),(xlev(mol),mol=1,nmolec)

      enddo

      write(12,*) 
      close(12)

      write(*,*) 'Output file successfully generated:'
      write(*,*) composition_file(1:strlen(composition_file))
      
      end
