Format for absorption cross-sections since GEISA-2015

 

1. Filename

In the spectral range WnMin – WnMax (cm-1). A compressed cross-section file is named “xxxx_rrrr_[yyyy]_tttt_pppp.asc.gz” where :

  • xxxx represent the name of the molecule,
  • rrrr the resolution in cm-1,
  • yyyy the reference(s),
  • tttt the temperature,
  • pppp the pressure.

Example of a file name : cfc-14_00.01_[19]_216.00_005012.93.asc.gz

2. Header :

The nine first lines of each file define the header describing data parameters.

Parameter Molecule Temp Pressure Resol Ref Nbline WnMin WnMax
Fortran descriptor (values) A20 F6.2 F9.2 F8.4 A15 I9 F11.4 F11.4
Undefined values -99999.99 -9.99

2.Data format :

For a given molecular species, each file describe absorption cross-section data corresponding to :

  • a given temperature in K,
  • a given pressure in Pa (which could be unknown),
  • – a given resolution in cm-1 or nm (which could be unknown),
  • some references.
Parameter Wavenumber
(cm-1)
Absorption cross-section
(cm2 mol-1)
Field length 13 11
Fortran descriptor F13.6 E11.3

 

To see how to read the GEISA-2015 cross-section sub-database : read_geisa_Xcross_G15.f90

program read_geisa_Xcross_G15
! read the GEISA-2015 x-sections database
! compilation without specific options : ifort read_geisa_Xcross_G15.f90 -o read_geisa_Xcross_G15
! run : read_geisa_Xcross_G15 file_geisa_x-sections1, file_geisa_x-sections2, ...
!
integer nbr_pts
real wavenb, intensite
real T,P,resol,wavenb_min,wavenb_max
character*1 a1
character*15 reference
character*20 molecule
character*250 file_geisa_Xcross
nbfich=iargc()
do ifich=1,nbfich
   call getarg(ifich,file_geisa_Xcross)
   write(*,*) 'reading '//TRIM(file_geisa_Xcross)//' ...'
   open(10,file=file_geisa_Xcross,form='formatted',status='old')
   read(10,*)
   read(10,*)
   read(10,*)
   read(10,*)
   read(10,*)
   read(10,*) a1,molecule,T,P,resol,reference,nbr_pts,wavenb_min,wavenb_max
   write(*,'(A,1x,f6.2,1x,f9.2,1x,f8.4,A,i9,2f11.4)') molecule,T,P,resol,reference,nbr_pts,wavenb_min,wavenb_max
   read(10,*)
   read(10,*)
   read(10,*)
   do icpt=1,nbr_pts
      read (unit=10, fmt=*, IOSTAT=ios) wavenb, intensite
      if(icpt.eq.1) write(*,*) 'first point',wavenb, intensite
      if(icpt.eq.nbr_pts) write(*,*) 'last point',wavenb, intensite
   enddo
enddo
end