source: trunk/LMDZ.GENERIC/libf/phystd/interpolateH2H2.F90 @ 1458

Last change on this file since 1458 was 1315, checked in by milmd, 11 years ago

LMDZ.GENERIC. OpenMP directives added in generic physic. When running in pure OpenMP or hybrid OpenMP/MPI, may have some bugs with condense_cloud and wstats routines.

  • Property svn:executable set to *
File size: 4.0 KB
RevLine 
[878]1     subroutine interpolateH2H2(wn,temp,pres,abcoef,firstcall,ind)
[253]2
3!==================================================================
4!     
5!     Purpose
6!     -------
7!     Calculates the H2-H2 CIA opacity, using a lookup table from
[716]8!     HITRAN (2011)
[253]9!
10!     Authors
11!     -------
[716]12!     R. Wordsworth (2011)
[253]13!     
14!==================================================================
15
[374]16      use datafile_mod, only: datadir
[873]17
[374]18      implicit none
[253]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
[716]29      parameter(nS=2428)
30      parameter(nT=10)
[253]31
[716]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
[253]37      double precision amagat
38      double precision wn_arr(nS)
39      double precision temp_arr(nT)
40      double precision abs_arr(nS,nT)
41
[716]42      integer k,iT
[253]43      logical firstcall
44
[1315]45      save wn_arr, temp_arr, abs_arr !read by master
[253]46
47      character*100 dt_file
48      integer strlen,ios
49
[716]50      character(LEN=*), parameter :: fmat1 = "(A20,F10.3,F10.3,I7,F7.1,E10.3,F5.3)"
[253]51
[716]52      character*20 bleh
53      double precision blah, Ttemp
54      integer nres
[253]55
[878]56      integer ind
[873]57
[716]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
[253]71!     1.1 Open the ASCII files
[716]72         dt_file=TRIM(datadir)//'/continuum_data/H2-H2_norm_2011.cia'
[253]73
[1315]74!$OMP MASTER
[253]75         open(33,file=dt_file,form='formatted',status='old',iostat=ios)
76         if (ios.ne.0) then        ! file not found
[374]77           write(*,*) 'Error from interpolateH2H2'
78           write(*,*) 'Data file ',trim(dt_file),' not found.'
[716]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.'
[374]83           call abort
[253]84         else
[716]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
[253]101            end do
[716]102     
[253]103         endif
104         close(33)
[1315]105!$OMP END MASTER
106!$OMP BARRIER
[253]107
[374]108         print*,'interpolateH2H2: At wavenumber ',wn,' cm^-1'
[253]109         print*,'   temperature ',temp,' K'
110         print*,'   pressure ',pres,' Pa'
111
[873]112      endif
[253]113
[878]114         call bilinearbig(nS,nT,wn_arr,temp_arr,abs_arr,wn,temp,abcoef,ind)
[253]115
[873]116         !print*,'the absorption is ',abcoef,' cm^5 molecule^-2'
117         !print*,'or ',abcoef*losch**2,' cm^-1 amagat^-2'
118
[716]119         abcoef=abcoef*losch**2*100.0*amagat**2 ! convert to m^-1
[253]120
[873]121         !print*,'We have ',amagat,' amagats of H2'
122         !print*,'So the absorption is ',abcoef,' m^-1'
[253]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.