10 integer,
parameter :: Fnr = 17, fnd = 10
12 real :: coefd(Fncd,Fnm,0:Fnd,Fnr),&
13 coefo(Fnco,Fnm,0:Fnd,Fnr), &
14 coefl(Fncl,Fnm,0:Fnd,Fnr),&
15 coefs(Fncs,Fnm,0:Fnd,Fnr), &
16 coefc(Fncc,Fnm,0:Fnd,Fnr)
21 subroutine modis_fascode(coeff_dir_path, year, jday, temp, wvmr, ozmr, theta, ang_2way, platform, &
22 kban, jdet, taut, taut_2way, newang, newatm, new_2way, do_2way, iok, xxx, yyy )
51 character(*),
intent(in) :: coeff_dir_path
52 integer,
intent(in) :: year,
jday
53 real,
intent(inout) :: temp(*),wvmr(*),ozmr(*),taut(*), taut_2way(*)
54 integer,
intent(in) :: platform
55 real,
intent(in) :: theta, ang_2way
56 integer,
intent(in) :: kban, jdet, xxx, yyy
57 integer,
intent(inout) :: iok
58 logical,
intent(in) :: newang, newatm, new_2way, do_2way
60 integer,
parameter :: nd=10,nk=5,nl=101,nm=nl-1,koff=19,nr=17
61 integer,
parameter :: nxc= 4,ncc=nxc+1,lencc=ncc*nm,lenccb=lencc*4
62 integer,
parameter :: nxd= 8,ncd=nxd+1,lencd=ncd*nm,lencdb=lencd*4
63 integer,
parameter :: nxo= 9,nco=nxo+1,lenco=nco*nm,lencob=lenco*4
64 integer,
parameter :: nxl= 2,ncl=nxl+1,lencl=ncl*nm,lenclb=lencl*4
65 integer,
parameter :: nxs=11,ncs=nxs+1,lencs=ncs*nm,lencsb=lencs*4
66 integer,
parameter :: ndt=nd+1,nrps=nr*ndt,nxw=nxl+nxs
67 real,
parameter :: slp=1.5/365.0
68 real,
parameter :: smag=3.0
69 real,
parameter ::
pi=3.14159
70 real,
parameter :: soff=0.41
71 real,
parameter :: coff=337.5
75 real :: taud(nl), tauw(nl), tauo(nl)
76 real :: taud_2way(nl), tauw_2way(nl), tauo_2way(nl)
81 real :: tauc(nl),tauc_2way(nl), tlas(nl),wlas(nl),olas(nl)
83 real*4 x,rco2,ratio,tau_test
86 character*256 cfile(nk),dfile
98 real :: zlas, zlas2way
103 integer :: ksat, iux, m, j, kk, ikrec, krec, krecx, k, lencx, l, i
106 real :: dt, dw, fdo, datm, zsec, zsec_2way
108 integer :: firsttime = 0
112 integer*4 :: start(5) = (/ 1, 1, 1, 1, 1/), edge(5), nc_stat
113 integer :: fid, sds_id, tbl_no
114 real :: coef_dry( fncd, fnm, 0:fnd, fnr )
115 real :: coef_oz( fnco, fnm, 0:fnd, fnr )
116 real :: coef_wtr1( fncs, fnm, 0:fnd, fnr )
117 real :: coef_wtr2( fncl, fnm, 0:fnd, fnr )
118 real :: coef_cont( fncc, fnm, 0:fnd, fnr )
119 character(100) :: tbl_nam
120 integer :: ids(5), lendim
132 xfile =
'/modisdet.com.101.xxx_end.v3'
141 comp = (/
'dry',
'ozo',
'wts',
'wtl',
'wco'/)
142 lengcf = (/lencdb,lencob,lencsb,lenclb,lenccb/)
143 lengcx = (/lencd,lenco,lencs,lencl,lencc/)
147 if (platform == 0)
then
150 path = coeff_dir_path
151 else if (platform == 1)
then
153 path = coeff_dir_path
155 write(*,
'(''tran_modisd101- unknown spacecraft '',i2)') platform
160 if (craft /=
cinit)
then
162 if (craft ==
"TERRA")
then
164 else if (craft ==
"AQUA")
then
167 write(*,
'(''tran_modisd101- unknown spacecraft '',a6)') craft
180 if( firsttime == 0 )
then
194 if( do_old_files == 1 )
then
198 call get_cld_tbl( 0, trans_id(m), dfile, stat )
200 print *, __file__,__line__, &
201 'Unable to get the FAST_TRANS_COEFF file', m
205 open( iux, file=dfile, recl=lencf, access=
'direct', status=
'old', &
206 convert=
'big_endian')
219 read(iuc(k),rec=krecx) (bufs(j),j=1,lencx)
221 if(nsat /= ksat)
then
223 write(*,
'(''In tran_modisd101 ... requested data for '', &
224 & ''satellite '',i1/'' but read data for '', ''satellite '',i1,'' from file '',a80)') ksat,nsat,dfile
235 read(iuc(1),rec=krec) ((coefd(i,j,l,k),i=1,ncd),j=1,nm)
236 read(iuc(2),rec=krec) ((coefo(i,j,l,k),i=1,nco),j=1,nm)
237 read(iuc(3),rec=krec) ((coefs(i,j,l,k),i=1,ncs),j=1,nm)
238 read(iuc(4),rec=krec) ((coefl(i,j,l,k),i=1,ncl),j=1,nm)
239 read(iuc(5),rec=krec) ((coefc(i,j,l,k),i=1,ncc),j=1,nm)
248 call get_cld_tbl( 0, trans_id(1), dfile, stat )
249 nc_stat = nf_open( dfile, nf_nowrite, fid )
250 call cld_fchk( nc_stat, __file__, __line__ )
261 tbl_nam =
"Dry_air_component"
264 tbl_nam =
"Ozone_component"
267 tbl_nam =
"Water_component_1"
270 tbl_nam =
"Water_component_2"
273 tbl_nam =
"Continuum_component"
275 nc_stat = nf_inq_varid( fid, tbl_nam, sds_id )
276 call cld_fchk( nc_stat, __file__, __line__ )
278 nc_stat = nf_inq_vardimid(fid, sds_id, ids )
285 nc_stat = nf_get_vara_real( fid, sds_id, start, edge, coef_dry )
286 call cld_fchk( nc_stat, __file__, __line__ )
290 nc_stat = nf_get_vara_real( fid, sds_id, start, edge, coef_oz )
291 call cld_fchk( nc_stat, __file__, __line__ )
295 nc_stat = nf_get_vara_real( fid, sds_id, start, edge, coef_wtr1 )
296 call cld_fchk( nc_stat, __file__, __line__ )
300 nc_stat = nf_get_vara_real( fid, sds_id, start, edge, coef_wtr2 )
301 call cld_fchk( nc_stat, __file__, __line__ )
305 nc_stat = nf_get_vara_real( fid, sds_id, start, edge, coef_cont )
306 call cld_fchk( nc_stat, __file__, __line__ )
320 nc_stat = nf_close( fid )
321 call cld_fchk( nc_stat, __file__, __line__ )
345 if (do_2way .and. new_2way)
then
346 zsec_2way =
secant(ang_2way)
351 if(newang .or. newatm )
then
356 if (do_2way .and. (new_2way .or. newatm))
then
375 call taudoc(ncd,nxd,nm,coefd(:,:,j,k),
xdry,taud)
384 x = (year - 1980) * 365.25 +
jday
385 rco2 = (slp*x - smag*sin(2*
pi*(x/365.25 + soff))) + coff
389 if(taud(jj) > 0.0 .and. taud(jj) < 1.0)
then
390 taud(jj)=taud(jj)**ratio
395 call taudoc(nco,nxo,nm,coefo(:,:,j,k),
xozo,tauo)
402 call tauwtr(ncs,ncl,nxs,nxl,nxw,nm,coefs(:,:,j,k),coefl(:,:,j,k),
xwet,tauw)
404 call taudoc(ncc,nxc,nm,coefc(:,:,j,k),
xcon,tauc)
407 tauw(jj)=tauw(jj)*tauc(jj)
411 taut(jj)=taud(jj)*tauo(jj)*tauw(jj)
420 tau_test = taud_2way(jj)
421 if(taud_2way(jj) > 0.0 .and. taud_2way(jj) < 1.0)
then
422 taud_2way(jj)=taud_2way(jj)**ratio
431 call tauwtr(ncs,ncl,nxs,nxl,nxw,nm,coefs(:,:,j,k),coefl(:,:,j,k),
xwet_2way,tauw_2way)
436 tauw_2way(jj)=tauw_2way(jj)*tauc_2way(jj)
440 taut_2way(jj)=taud_2way(jj)*tauo_2way(jj)*tauw_2way(jj)