source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/phystd/interpolateH2H2.F90 @ 263

Last change on this file since 263 was 227, checked in by milmd, 10 years ago

Last LMDZ version (1315) with OpenMP directives and other stuff

  • Property svn:executable set to *
File size: 4.0 KB
Line 
1     subroutine interpolateH2H2(wn,temp,pres,abcoef,firstcall,ind)
2
3!==================================================================
4!     
5!     Purpose
6!     -------
7!     Calculates the H2-H2 CIA opacity, using a lookup table from
8!     HITRAN (2011)
9!
10!     Authors
11!     -------
12!     R. Wordsworth (2011)
13!     
14!==================================================================
15
16      use datafile_mod, only: datadir
17
18      implicit none
19
20      ! input
21      double precision wn                 ! wavenumber             (cm^-1)
22      double precision temp               ! temperature            (Kelvin)
23      double precision pres               ! pressure               (Pascals)
24
25      ! output
26      double precision abcoef             ! absorption coefficient (m^-1)
27
28      integer nS,nT
29      parameter(nS=2428)
30      parameter(nT=10)
31
32      double precision, parameter :: losch = 2.6867774e19
33      ! Loschmit's number (molecule cm^-3 at STP)
34      ! converts cm^5 molecule^-2 --> cm^-1 amagat^-2
35      ! see Richard et al. 2011, JQSRT for details
36
37      double precision amagat
38      double precision wn_arr(nS)
39      double precision temp_arr(nT)
40      double precision abs_arr(nS,nT)
41
42      integer k,iT
43      logical firstcall
44
45      save wn_arr, temp_arr, abs_arr !read by master
46
47      character*100 dt_file
48      integer strlen,ios
49
50      character(LEN=*), parameter :: fmat1 = "(A20,F10.3,F10.3,I7,F7.1,E10.3,F5.3)"
51
52      character*20 bleh
53      double precision blah, Ttemp
54      integer nres
55
56      integer ind
57
58      if(temp.gt.400)then
59         print*,'Your temperatures are too high for this H2-H2 CIA dataset. If you '
60         print*,'really want to run simulations with hydrogen at T > 400 K, contact'
61         print*,'Robin Wordsworth [rwordsworth@uchicago.edu].'
62         stop
63      endif
64
65      amagat = (273.15/temp)*(pres/101325.0)
66
67      if(firstcall)then ! called by sugas_corrk only
68         print*,'----------------------------------------------------'
69         print*,'Initialising H2-H2 continuum from HITRAN database...'
70
71!     1.1 Open the ASCII files
72         dt_file=TRIM(datadir)//'/continuum_data/H2-H2_norm_2011.cia'
73
74!$OMP MASTER
75         open(33,file=dt_file,form='formatted',status='old',iostat=ios)
76         if (ios.ne.0) then        ! file not found
77           write(*,*) 'Error from interpolateH2H2'
78           write(*,*) 'Data file ',trim(dt_file),' not found.'
79           write(*,*) 'Check that your path to datagcm:',trim(datadir)
80           write(*,*) 'is correct. You can change it in callphys.def with:'
81           write(*,*) 'datadir = /absolute/path/to/datagcm'
82           write(*,*) 'Also check that the continuum data continuum_data/H2-H2_norm_2011.cia is there.'
83           call abort
84         else
85
86            do iT=1,nT
87
88               read(33,fmat1) bleh,blah,blah,nres,Ttemp
89               if(nS.ne.nres)then
90                  print*,'Resolution given in file: ',trim(dt_file)
91                  print*,'is ',nres,', which does not match nS.'
92                  print*,'Please adjust nS value in interpolateH2H2.F90'
93                  stop
94               endif
95               temp_arr(iT)=Ttemp
96
97               do k=1,nS
98                  read(33,*) wn_arr(k),abs_arr(k,it)
99               end do
100
101            end do
102     
103         endif
104         close(33)
105!$OMP END MASTER
106!$OMP BARRIER
107
108         print*,'interpolateH2H2: At wavenumber ',wn,' cm^-1'
109         print*,'   temperature ',temp,' K'
110         print*,'   pressure ',pres,' Pa'
111
112      endif
113
114         call bilinearbig(nS,nT,wn_arr,temp_arr,abs_arr,wn,temp,abcoef,ind)
115
116         !print*,'the absorption is ',abcoef,' cm^5 molecule^-2'
117         !print*,'or ',abcoef*losch**2,' cm^-1 amagat^-2'
118
119         abcoef=abcoef*losch**2*100.0*amagat**2 ! convert to m^-1
120
121         !print*,'We have ',amagat,' amagats of H2'
122         !print*,'So the absorption is ',abcoef,' m^-1'
123
124         ! unlike for Rayleigh scattering, we do not currently weight by the BB function
125         ! however our bands are normally thin, so this is no big deal.
126
127      return
128    end subroutine interpolateH2H2
Note: See TracBrowser for help on using the repository browser.