source: trunk/LMDZ.GENERIC/libf/phystd/interpolateHeCH4.F90

Last change on this file was 2870, checked in by jleconte, 23 months ago

Removed too many prints in CIA interpolation + correction for hot H2H2

File size: 5.7 KB
Line 
1subroutine interpolateHeCH4(wn,temp,presHe,presCH4,abcoef,firstcall,ind)
2
3  !==================================================================
4  !     
5  !     Purpose
6  !     -------
7  !     Calculates the He-CH4 CIA opacity, using a lookup table from
8  !     HITRAN (2018)
9  !
10  !     Authors
11  !     -------
12  !     R. Wordsworth (2011)
13  !     
14  !==================================================================
15
16  use callkeys_mod, only: strictboundcia
17  use datafile_mod, only: datadir
18  use mod_phys_lmdz_para, only : is_master
19
20  implicit none
21
22  ! input
23  double precision wn                 ! wavenumber             (cm^-1)
24  double precision temp               ! temperature            (Kelvin)
25  double precision presCH4            ! CH4 partial pressure    (Pascals)
26  double precision presHe             ! He partial pressure    (Pascals)
27
28  ! output
29  double precision abcoef             ! absorption coefficient (m^-1)
30
31  integer nS,nT
32  parameter(nS=1000)
33  parameter(nT=10)
34
35  double precision, parameter :: losch = 2.6867774e19
36  ! Loschmit's number (molecule cm^-3 at STP)
37  ! converts cm^5 molecule^-2 --> cm^-1 amagat^-2
38  ! see Richard et al. 2011, JQSRT for details
39
40  double precision amagatCH4
41  double precision amagatHe
42  double precision wn_arr(nS)
43  double precision temp_arr(nT)
44  double precision abs_arr(nS,nT)
45
46  integer k,iT
47  logical firstcall
48
49  save wn_arr, temp_arr, abs_arr !read by master
50
51  character*100 dt_file
52  integer strlen,ios
53
54  character(LEN=*), parameter :: fmat1 = "(A20,F10.3,F10.3,I7,F7.1,E10.3,F5.3)"
55
56  character*20 bleh
57  double precision blah, Ttemp, ztemp
58  integer nres
59  integer ind
60
61  ztemp=temp
62
63  if(ztemp.gt.350)then
64    if (strictboundcia) then
65      if (is_master) then
66        print*,'Your temperatures are too high for this He-CH4 CIA dataset.'
67        print*,'Please run mixed He-CH4 atmospheres below T = 350 K.'     
68      endif
69      stop
70    else
71      !if (is_master) then
72      !  print*,'Your temperatures are too high for this He-CH4 CIA dataset'
73      !  print*,'you have chosen strictboundcia = ', strictboundcia
74      !  print*,'*********************************************************'
75      !  print*,' we allow model to continue but with temp = 350          '
76      !  print*,'  ...       for He-CH4 CIA dataset         ...           '
77      !  print*,'  ... we assume we know what you are doing ...           '
78      !  print*,'*********************************************************'
79      !endif
80      ztemp = 350
81    endif
82  elseif(ztemp.lt.40)then
83    if (strictboundcia) then
84      if (is_master) then
85        print*,'Your temperatures are too low for this He-CH4 CIA dataset.'
86        print*,'Please run mixed He-CH4 atmospheres above T = 40 K.'     
87      endif
88      stop
89    else
90      !if (is_master) then
91      !  print*,'Your temperatures are too low for this He-CH4 CIA dataset'
92      !  print*,'you have chosen strictboundcia = ', strictboundcia
93      !  print*,'*********************************************************'
94      !  print*,' we allow model to continue but with temp = 40           '
95      !  print*,'  ...       for He-CH4 CIA dataset         ...           '
96      !  print*,'  ... we assume we know what you are doing ...           '
97      !  print*,'*********************************************************'
98      !endif
99      ztemp = 40
100    endif
101  endif
102
103  amagatCH4 = (273.15/temp)*(presCH4/101325.0)
104  amagatHe = (273.15/temp)*(presHe/101325.0)
105
106  if(firstcall)then ! called by sugas_corrk only
107     if (is_master) print*,'----------------------------------------------------'
108     if (is_master) print*,'Initialising He-CH4 continuum from HITRAN database...'
109
110     !     1.1 Open the ASCII files
111     dt_file=TRIM(datadir)//'/continuum_data/CH4-He_2018.cia'
112
113!$OMP MASTER
114     open(33,file=dt_file,form='formatted',status='old',iostat=ios)
115     if (ios.ne.0) then        ! file not found
116        if (is_master) then
117          write(*,*) 'Error from interpolateHeCH4'
118          write(*,*) 'Data file ',trim(dt_file),' not found.'
119          write(*,*) 'Check that your path to datagcm:',trim(datadir)
120          write(*,*) 'is correct. You can change it in callphys.def with:'
121          write(*,*) 'datadir = /absolute/path/to/datagcm'
122          write(*,*) 'Also check that the continuum data continuum_data/He-CH4_2018.cia is there.'
123        endif
124        call abort
125     else
126
127        do iT=1,nT
128
129           read(33,fmat1) bleh,blah,blah,nres,Ttemp
130           if(nS.ne.nres)then
131              if (is_master) then
132                print*,'Resolution given in file: ',trim(dt_file)
133                print*,'is ',nres,', which does not match nS.'
134                print*,'Please adjust nS value in interpolateHeCH4.F90'
135              endif
136              stop
137           endif
138           temp_arr(iT)=Ttemp
139
140           do k=1,nS
141              read(33,*) wn_arr(k),abs_arr(k,it)
142           end do
143
144        end do
145
146     endif
147     close(33)
148!$OMP END MASTER
149!$OMP BARRIER
150     if (is_master) then
151       print*,'interpolateHeCH4: At wavenumber ',wn,' cm^-1'
152       print*,'   temperature                 ',temp,' K'
153       print*,'   CH4 partial pressure        ',presCH4,' Pa'
154       print*,'   and He partial pressure     ',presHe,' Pa'
155     endif
156  endif
157
158  call bilinearbig(nS,nT,wn_arr,temp_arr,abs_arr,wn,ztemp,abcoef,ind)
159
160!     print*,'the absorption is ',abcoef,' cm^5 molecule^-2'
161!     print*,'or ',abcoef*losch**2,' cm^-1 amagat^-2'
162
163  abcoef=abcoef*losch**2*100.0*amagatCH4*amagatHe ! convert to m^-1
164
165!     print*,'We have ',amagatCH4,' amagats of CH4'
166!     print*,'and     ',amagatHe,' amagats of He'
167!     print*,'So the absorption is ',abcoef,' m^-1'
168
169
170!  unlike for Rayleigh scattering, we do not currently weight by the BB function
171!  however our bands are normally thin, so this is no big deal.
172
173
174  return
175end subroutine interpolateHeCH4
176
Note: See TracBrowser for help on using the repository browser.