43 integer,
private,
parameter :: i_ch_rn222 = 1
45 character(len=H_SHORT),
private :: atmos_sfc_ch_rn222_emission_type =
'CONST' 48 real(RP),
private :: atmos_sfc_ch_rn222_const_emission_land = 20.8e-3_rp
49 real(RP),
private :: atmos_sfc_ch_rn222_const_emission_ocean = 0.14e-3_rp
52 character(len=H_LONG),
private :: atmos_sfc_ch_rn222_schery1998_dirpath =
'.' 55 character(len=H_LONG),
private :: atmos_sfc_ch_rn222_hirao2010_dirpath =
'.' 56 integer,
private :: atmos_sfc_ch_rn222_hirao2010_ystart = 1979
57 integer,
private :: atmos_sfc_ch_rn222_hirao2010_yend = 2012
59 integer,
private :: atmos_sfc_ch_rn222_nintrp = 5
61 real(RP),
private,
allocatable :: emission_lat (:,:)
62 real(RP),
private,
allocatable :: emission_lon (:,:)
63 real(RP),
private,
allocatable :: emission_value(:,:,:,:)
65 integer,
private,
allocatable :: idx_i(:,:,:)
66 integer,
private,
allocatable :: idx_j(:,:,:)
67 real(RP),
private,
allocatable :: hfact(:,:,:)
69 integer,
private :: nlon
70 integer,
private :: nlat
71 integer,
private :: nmonth
72 integer,
private :: nyear
92 integer,
intent(in) :: IA
93 integer,
intent(in) :: JA
94 real(RP),
intent(in) :: real_lon(ia,ja)
95 real(RP),
intent(in) :: real_lat(ia,ja)
97 namelist / param_atmos_sfc_ch_rn222 / &
98 atmos_sfc_ch_rn222_emission_type, &
99 atmos_sfc_ch_rn222_const_emission_land, &
100 atmos_sfc_ch_rn222_const_emission_ocean, &
101 atmos_sfc_ch_rn222_schery1998_dirpath, &
102 atmos_sfc_ch_rn222_hirao2010_dirpath, &
103 atmos_sfc_ch_rn222_hirao2010_ystart, &
104 atmos_sfc_ch_rn222_hirao2010_yend, &
105 atmos_sfc_ch_rn222_nintrp
107 character(len=H_LONG) :: fname
108 real(RP) :: lon, lat, value
111 integer :: i, j, m, y, yy
115 log_info(
"ATMOS_SFC_CH_rn222_setup",*)
'Setup' 116 log_info(
"ATMOS_SFC_CH_rn222_setup",*)
'rn222 surface flux' 120 read(
io_fid_conf,nml=param_atmos_sfc_ch_rn222,iostat=ierr)
122 log_info(
"ATMOS_SFC_CH_rn222_setup",*)
'Not found namelist. Default used.' 123 elseif( ierr > 0 )
then 124 log_error(
"ATMOS_SFC_CH_rn222_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_SFC_CH_RN222. Check!' 127 log_nml(param_atmos_sfc_ch_rn222)
132 log_info(
"ATMOS_SFC_CH_rn222_setup",*)
'Type of emission of Rn222: ', trim(atmos_sfc_ch_rn222_emission_type)
134 select case( atmos_sfc_ch_rn222_emission_type )
137 log_info_cont(
'(A,ES16.6)')
'From land [Bq/m2/s] : ', atmos_sfc_ch_rn222_const_emission_land
138 log_info_cont(
'(A,ES16.6)')
'From ocean [Bq/m2/s] : ', atmos_sfc_ch_rn222_const_emission_ocean
142 log_info_cont(*)
'Flux map by Schery and Wasiolek (1998) is used' 149 allocate( emission_lon(nlon,nlat) )
150 allocate( emission_lat(nlon,nlat) )
151 allocate( emission_value(nlon,nlat,nmonth,nyear) )
156 write(fname,
'(A,A,I2.2,A)') trim(atmos_sfc_ch_rn222_schery1998_dirpath),
"/fdh3a.", m
157 log_info_cont(*)
'Read from the ASCII file: ', trim(fname)
161 file = trim(fname), &
167 lon =
real(i-1,kind=RP) - 180.0_RP
168 lat = 90.0_rp -
real(j-1,kind=RP) 172 emission_lon(i,j) = ( lon + 0.5_rp ) *
const_d2r 173 emission_lat(i,j) = ( lat - 0.5_rp ) *
const_d2r 174 emission_value(i,j,m,y) =
value * 1.e-3_rp
184 log_info_cont(*)
'Flux map by Hirao et al. (2010) is used' 185 log_info_cont(*)
'Start year: ', atmos_sfc_ch_rn222_hirao2010_ystart
186 log_info_cont(*)
'End year: ', atmos_sfc_ch_rn222_hirao2010_yend
188 if ( atmos_sfc_ch_rn222_hirao2010_ystart < 1979 &
189 .OR. atmos_sfc_ch_rn222_hirao2010_yend > 2012 )
then 190 log_warn(
'ATMOS_SFC_CH_rn222_setup',*)
'Available period of the data is between 1979 and 2012.' 191 log_warn_cont(*)
'Please check the range of ystart and yend.' 192 atmos_sfc_ch_rn222_hirao2010_ystart = max( atmos_sfc_ch_rn222_hirao2010_ystart, 1979 )
193 atmos_sfc_ch_rn222_hirao2010_yend = min( atmos_sfc_ch_rn222_hirao2010_yend, 2012 )
199 nyear = atmos_sfc_ch_rn222_hirao2010_yend - atmos_sfc_ch_rn222_hirao2010_ystart + 1
201 allocate( emission_lon(nlon,nlat) )
202 allocate( emission_lat(nlon,nlat) )
203 allocate( emission_value(nlon,nlat,nmonth,nyear) )
208 yy = y+atmos_sfc_ch_rn222_hirao2010_ystart-1
209 write(fname,
'(A,A,I4.4,I2.2)') trim(atmos_sfc_ch_rn222_hirao2010_dirpath),
"/flux-hra-revi", yy, m
210 log_info_cont(*)
'Read from the ASCII file: ', trim(fname)
214 file = trim(fname), &
220 read(fid,*) lon, lat,
value 222 emission_lon(i,j) = ( lon + 0.5_rp ) *
const_d2r 223 emission_lat(i,j) = ( lat - 0.5_rp ) *
const_d2r 224 emission_value(i,j,m,y) =
value * 1.e-3_rp
234 log_error(
"ATMOS_SFC_CH_rn222_setup",*)
'Not supported type of Rn222 emission! Stop.' 238 select case( atmos_sfc_ch_rn222_emission_type )
239 case(
'SCHERY1998',
'HIRAO2010' )
241 call comm_bcast( emission_lon(:,:), nlon, nlat )
242 call comm_bcast( emission_lat(:,:), nlon, nlat )
243 call comm_bcast( emission_value(:,:,:,:), nlon, nlat, nmonth, nyear )
245 allocate( idx_i(ia,ja,atmos_sfc_ch_rn222_nintrp) )
246 allocate( idx_j(ia,ja,atmos_sfc_ch_rn222_nintrp) )
247 allocate( hfact(ia,ja,atmos_sfc_ch_rn222_nintrp) )
273 integer,
intent(in) :: IA, IS, IE
274 integer,
intent(in) :: JA, JS, JE
275 integer,
intent(in) :: QA_CH
276 real(RP),
intent(inout) :: SFLX_QTRC(ia,ja,qa_ch)
281 select case( atmos_sfc_ch_rn222_emission_type )
282 case(
'CONST',
'SCHERY1998',
'HIRAO2010' )
286 sflx_qtrc(i,j,i_ch_rn222) = atmos_sfc_ch_rn222_const_emission_ocean
309 integer,
intent(in) :: IA, IS, IE
310 integer,
intent(in) :: JA, JS, JE
311 integer,
intent(in) :: QA_CH
312 integer,
intent(in) :: NOWDATE(6)
313 real(RP),
intent(inout) :: SFLX_QTRC(ia,ja,qa_ch)
315 integer :: i, j, m, y, yy
318 select case( atmos_sfc_ch_rn222_emission_type )
323 sflx_qtrc(i,j,i_ch_rn222) = atmos_sfc_ch_rn222_const_emission_land
338 emission_value(:,:,m,y), &
339 sflx_qtrc(:,:,i_ch_rn222) )
347 y = yy-atmos_sfc_ch_rn222_hirao2010_ystart+1
349 if ( y < 1 .OR. y > nyear )
then 350 log_error(
"ATMOS_SFC_CH_rn222_setup",*)
'emission file does not exist for year=', yy
362 emission_value(:,:,m,y), &
363 sflx_qtrc(:,:,i_ch_rn222) )
module atmosphere / surface / chemistry / RN222
subroutine, public atmos_sfc_ch_rn222_setup(IA, JA, real_lon, real_lat)
Setup.
integer, public io_fid_conf
Config file ID.
real(rp), public const_d2r
degree to radian
subroutine, public atmos_sfc_ch_rn222_ocean_flux(IA, IS, IE, JA, JS, JE, QA_CH, SFLX_QTRC)
Emission from the ocean surface.
subroutine, public atmos_sfc_ch_rn222_land_flux(IA, IS, IE, JA, JS, JE, QA_CH, NOWDATE, SFLX_QTRC)
Emission from the land surface.
integer function, public io_get_available_fid()
search & get available file ID
subroutine, public interp_interp2d(npoints, IA_ref, JA_ref, IA, JA, idx_i, idx_j, hfact, val_ref, val)
subroutine, public prc_abort
Abort Process.
logical, public prc_ismaster
master process in local communicator?
subroutine, public interp_factor2d(npoints, IA_ref, JA_ref, lon_ref, lat_ref, IA, JA, lon, lat, idx_i, idx_j, hfact, search_limit, latlon_structure, weight_order)