7 hprogram,kch,hemis_gr_name, knbtimes,&
8 kemis_gr_time,koffndx,tpemiss,ksize,kluout, kverb,prhodref)
40 USE modi_ch_open_inputb
46 USE modd_csts, ONLY : ndaysec, xmd, xavogadro
52 USE yomhook
,ONLY : lhook, dr_hook
53 USE parkind1
,ONLY : jprb
65 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
66 INTEGER,
INTENT(IN) :: kch
67 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: hemis_gr_name
68 INTEGER,
DIMENSION(:),
INTENT(IN) :: knbtimes
69 INTEGER,
DIMENSION(:),
INTENT(IN) :: kemis_gr_time
70 INTEGER,
DIMENSION(:),
INTENT(IN) :: koffndx
71 TYPE(emissvar_t),
DIMENSION(:),
INTENT(OUT):: tpemiss
72 INTEGER,
INTENT(IN) :: ksize
73 INTEGER,
INTENT(IN) :: kluout
74 INTEGER,
INTENT(IN) :: kverb
75 REAL,
DIMENSION(:),
INTENT(IN) :: prhodref
80 CHARACTER(LEN=3):: yunit
83 INTEGER :: iind1, iind2
86 INTEGER :: iws_default
87 CHARACTER (LEN=16):: yrecfm
88 REAL(KIND=JPRB) :: zhook_handle
97 IF (lhook) CALL dr_hook(
'BUILD_EMISSTAB_N',0,zhook_handle)
99 WRITE(kluout,*)
'******** SUBROUTINE (CHIMIE): BUILD_EMISSTAB_n ********'
106 CALL ch_open_inputb(
"EMISUNIT", kch, kluout)
109 READ(kch,
'(A3)') yunit
115 ALLOCATE (chu%XCONVERSION(
SIZE(prhodref,1)))
117 chu%XCONVERSION(:) = 1.
121 chu%XCONVERSION(:) = xavogadro * prhodref(:) / xmd
123 chu%XCONVERSION(:) = 1e4
127 chu%XCONVERSION(:) = 1e-6 * xavogadro / 86400.
130 CALL
abor1_sfx(
'CH_BUILDEMISSN: UNKNOWN CONVERSION FACTOR')
135 IF (iws_default < 2) iws_default = 2
139 DO jspec=1,
SIZE(tpemiss)
141 inbts = knbtimes(jspec)
144 tpemiss(jspec)%CNAME = hemis_gr_name(koffndx(jspec))
146 ALLOCATE(tpemiss(jspec)%NETIMES(inbts))
149 tpemiss(jspec)%NETIMES(:) = kemis_gr_time(iind1:iind2)
152 IF (inbts <= iws_default)
THEN
155 tpemiss(jspec)%NWS = inbts
156 tpemiss(jspec)%NDX = 1
157 tpemiss(jspec)%NTX = 1
158 tpemiss(jspec)%LREAD = .false.
159 ALLOCATE(tpemiss(jspec)%XEMISDATA(ksize,inbts))
161 yrecfm=
'E_'//trim(tpemiss(jspec)%CNAME)
162 CALL
read_surf(hprogram,yrecfm,tpemiss(jspec)%XEMISDATA(:,:),iresp)
166 WHERE(tpemiss(jspec)%XEMISDATA(:,:) == 999.)
167 tpemiss(jspec)%XEMISDATA(:,:) = 0.
169 WHERE(tpemiss(jspec)%XEMISDATA(:,:) == 1.e20)
170 tpemiss(jspec)%XEMISDATA(:,:) = 0.
174 tpemiss(jspec)%XEMISDATA(:,itime) = tpemiss(jspec)%XEMISDATA(:,itime) * chu%XCONVERSION(:)
179 tpemiss(jspec)%NWS = iws_default
180 tpemiss(jspec)%NDX = iws_default
181 tpemiss(jspec)%NTX = 0
182 tpemiss(jspec)%LREAD = .true.
183 ALLOCATE(tpemiss(jspec)%XEMISDATA(ksize,iws_default))
187 tpemiss(jspec)%XFWORK=>tpemiss(jspec)%XEMISDATA(:,1)
189 ALLOCATE(tpemiss(jspec)%XFWORK(ksize))
192 tpemiss(jspec)%NPX = maxval(minloc(tpemiss(jspec)%NETIMES(:)+&
193 (1+(tpemiss(jspec)%NETIMES(inbts)-&
194 tpemiss(jspec)%NETIMES(:))/ndaysec)*ndaysec))
198 WRITE(kluout,*)
'====== Species ',trim(tpemiss(jspec)%CNAME),
' ======'
199 WRITE(kluout,*)
' Emission Times :' ,tpemiss(jspec)%NETIMES
200 WRITE(kluout,*)
' Current time index :' ,tpemiss(jspec)%NTX
201 WRITE(kluout,*)
' Current data index :' ,tpemiss(jspec)%NDX
202 WRITE(kluout,*)
' Periodic index = ',tpemiss(jspec)%NPX,&
203 ' at time :',tpemiss(jspec)%NETIMES(tpemiss(jspec)%NPX)
204 WRITE(kluout,*)
' Read window size :', tpemiss(jspec)%NWS
205 IF (tpemiss(jspec)%LREAD)
THEN
206 WRITE(kluout,*)
' -> Data must be read during simulation.'
208 WRITE(kluout,*)
' -> Data already in memory.'
214 WRITE(kluout,*)
'******** END SUBROUTINE (CHIMIE) : BUILD_EMISSTAB_n ********'
216 IF (lhook) CALL dr_hook(
'BUILD_EMISSTAB_N',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine build_emisstab_n(CHU, HPROGRAM, KCH, HEMIS_GR_NAME, KNBTIMES, KEMIS_GR_TIME, KOFFNDX, TPEMISS, KSIZE, KLUOUT, KVERB, PRHODREF)