module txt_output_mod

  implicit none

contains

subroutine writeheader_txt

  !*****************************************************************************
  !                                                                            *
  !  This routine produces a file header containing basic information on the   *
  !  settings of the FLEXPART run.                                             *
  !  The header file is essential and must be read in by any postprocessing    *
  !  program before reading in the output data.                                *
  !                                                                            *
  !     Author: A. Stohl                                                       *
  !                                                                            *
  !     7 August 2002                                                          *
  !     modified IP 2013 for text output                                       *
  !*****************************************************************************
  !                                                                            *
  ! Variables:                                                                 *
  !                                                                            *
  ! xlon                   longitude                                           *
  ! xl                     model x coordinate                                  *
  ! ylat                   latitude                                            *
  ! yl                     model y coordinate                                  *
  !                                                                            *
  !*****************************************************************************

  use point_mod
  use outgrid_mod
  use par_mod
  use com_mod
  use date_mod

  implicit none

  !  integer :: jjjjmmdd,ihmmss,i,ix,jy,j
  integer :: jjjjmmdd,ihmmss,i,j
  real :: xp1,yp1,xp2,yp2

  !************************
  ! Open header output file
  !************************

  open(unitheader,file=path(2)(1:length(2))//'header_txt', &
       form='formatted',err=998)
  open(unitheader_txt,file=path(2)(1:length(2))//'header_txt_releases', &
       form='formatted',err=998)

  ! Write the header information
  !*****************************

  write(unitheader,*) '# ibdate,ibtime, iedate, ietime, flexversion'
  write(unitheader,*) ibdate, ibtime, iedate, ietime, trim(flexversion) !  'FLEXPART V9.0'
  !if (ldirect.eq.1) then
  !  write(unitheader,*) ibdate,ibtime,trim(flexversion) !  'FLEXPART V9.0'
  !else
  !  write(unitheader,*) iedate,ietime,trim(flexversion) ! 'FLEXPART V9.0'
  !endif

  ! Write info on output interval, averaging time, sampling time
  !*************************************************************

  write(unitheader,*) '# interval, averaging time, sampling time'
  write(unitheader,*) loutstep,loutaver,loutsample

  ! Write information on output grid setup
  !***************************************

  write(unitheader,*) '# information on grid setup    '
  write(unitheader,*) '#outlon0,outlat0,numxgrid,numygrid,dxout,dyout'
  write(unitheader,*) outlon0,outlat0,numxgrid,numygrid, &
       dxout,dyout
  write(unitheader,*) '# numzgrid, outheight(.) '
  write(unitheader,*) numzgrid,(outheight(i),i=1,numzgrid)

  write(unitheader,*) '# jjjjmmdd,ihmmss'
  call caldate(bdate,jjjjmmdd,ihmmss)
  write(unitheader,*) jjjjmmdd,ihmmss

  ! Write number of species, and name for each species (+extra name for depositions)
  ! Indicate the vertical dimension of the fields (i.e., 1 for deposition fields, numzgrid for
  ! concentration fields
  !*****************************************************************************

  write(unitheader,*) '# information on species'
  write(unitheader,*) '# 3*nspec,maxpointspec_act'
  write(unitheader,*) 3*nspec,maxpointspec_act
  write(unitheader,*) '# for nspec:'
  write(unitheader,*) '# 1, WD_ '
  write(unitheader,*) '# 1, DD_ '
  write(unitheader,*) '# numzgrid,species'
  do i=1,nspec
    write(unitheader,*) 1,'WD_'//species(i)(1:7)
    write(unitheader,*) 1,'DD_'//species(i)(1:7)
    write(unitheader,*) numzgrid,species(i)
  end do

  ! Write information on release points: total number, then for each point:
  ! start, end, coordinates, # of particles, name, mass
  !************************************************************************

  write(unitheader_txt,*) '# information on release points'
  write(unitheader_txt,*) '# numpoint'
  write(unitheader_txt,*) numpoint
  if ((ipin.ne.3).and.(ipin.ne.4)) then
    write(unitheader_txt,*) '# for numpoint:'
    do i=1,numpoint
      write(unitheader_txt,*) ireleasestart(i),ireleaseend(i),kindz(i)
      xp1=xpoint1(i)*dx+xlon0
      yp1=ypoint1(i)*dy+ylat0
      xp2=xpoint2(i)*dx+xlon0
      yp2=ypoint2(i)*dy+ylat0
      write(unitheader_txt,*) xp1,yp1,xp2,yp2,zpoint1(i),zpoint2(i)
      write(unitheader_txt,*) npart(i),1
      if (numpoint.le.1000) then
        write(unitheader_txt,*) compoint(i)
      else
        write(unitheader_txt,*) compoint(1001)
      endif
      do j=1,nspec
        write(unitheader_txt,*) xmass(i,j)
        write(unitheader_txt,*) xmass(i,j)
        write(unitheader_txt,*) xmass(i,j)
      end do
    end do
  endif

  ! Write information on model switches
  !*****************************************

  write(unitheader,*) '# information on model switches'
  write(unitheader,*) '# method,lsubgrid,lconvection, ind_source,ind_receptor'
  write(unitheader,*) method,lsubgrid,lconvection, &
       ind_source,ind_receptor

  ! Write age class information
  !****************************

  write(unitheader,*) '# information on age class     '
  write(unitheader,*) nageclass,(lage(i),i=1,nageclass)

  !Do not write topography to text output file. Keep it on the binary one
  !********************************

  !do ix=0,numxgrid-1
  !  write(unitheader,*) (oroout(ix,jy),jy=0,numygrid-1)
  !end do

  close(unitheader)
  close(unitheader_txt)

  return

998   write(*,*) ' #### FLEXPART MODEL ERROR!   THE FILE         #### '
  write(*,*) ' #### '//path(2)(1:length(2))//'header_txt'//' #### '
  write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS    #### '
  write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### '
  write(*,*) ' #### THE PROGRAM AGAIN.                       #### '
  error stop
end subroutine writeheader_txt

end module txt_output_mod