SCALE-RM
Functions/Subroutines | Variables
scale_atmos_phy_ae_kajino13 Module Reference

module ATMOSPHERE / Physics Aerosol Microphysics More...

Functions/Subroutines

subroutine, public atmos_phy_ae_kajino13_setup (AE_TYPE)
 Setup. More...
 
subroutine, public atmos_phy_ae_kajino13 (DENS, MOMZ, MOMX, MOMY, RHOT, EMIT, NREG, QTRC, CN, CCN, RHOQ_t_AE)
 Aerosol Microphysics. More...
 
subroutine aerosol_zerochem (deltt, temp_k, pres_pa, super, flag_npf, flag_cond, flag_coag, aerosol_procs, conc_gas, emis_procs, emis_gas, aerosol_activ)
 
subroutine aerosol_nucleation (conc_h2so4, J_1nm)
 
subroutine, public atmos_phy_ae_kajino13_effectiveradius (Re, QTRC, RH)
 Calculate Effective Radius. More...
 

Variables

real(rp), dimension(:), allocatable, public ae_dens
 

Detailed Description

module ATMOSPHERE / Physics Aerosol Microphysics

Description
kajino13 code
Author
Team SCALE
History
  • 2015-03-25 (Y.Sato) [new]
NAMELIST
  • PARAM_ATMOS_PHY_AE_KAJINO13
    nametypedefault valuecomment
    H2SO4DT real(RP) 5.E-6_RP h2so4 production rate (Temporal) [ug/m3/s]
    OCGASDT real(RP) 8.E-5_RP other condensational bas production rate 16*h2so4dt (see Kajino et al. 2013)

History Output
namedescriptionunitvariable
CGAS_emit Emission ratio of Condensabule gas ug/m3/s EMIT
H2SO4_emit Emission ratio of H2SO4 gas ug/m3/s EMIT
trim(ofilename) Total number mixing ratio of emitted aerosol num/kg total_emit_aerosol_number

Function/Subroutine Documentation

◆ atmos_phy_ae_kajino13_setup()

subroutine, public scale_atmos_phy_ae_kajino13::atmos_phy_ae_kajino13_setup ( character(len=*), intent(in)  AE_TYPE)

Setup.

Definition at line 159 of file scale_atmos_phy_ae_kajino13.F90.

References scale_tracer::ae_ctg, ae_dens, scale_tracer::ae_qa, float(), scale_tracer::ic_mix, scale_stdio::io_fid_conf, scale_stdio::io_fid_log, scale_stdio::io_l, scale_stdio::io_lnml, dc_log::log(), scale_tracer::n_atr, scale_tracer::nsiz, scale_process::prc_mpistop(), and scale_time::time_dtsec_atmos_phy_ae.

Referenced by scale_atmos_phy_ae::atmos_phy_ae_setup().

159  use scale_process, only: &
161  use scale_time, only: &
163  implicit none
164 
165  character(len=*), intent(in) :: ae_type
166  real(RP), allocatable :: d_min_inp(:)
167  real(RP), allocatable :: d_max_inp(:)
168  real(RP), allocatable :: k_min_inp(:)
169  real(RP), allocatable :: k_max_inp(:)
170  integer , allocatable :: n_kap_inp(:)
171 
172  real(RP), parameter :: d_min_def = 1.e-9_rp ! default lower bound of 1st size bin
173  real(RP), parameter :: d_max_def = 1.e-5_rp ! upper bound of last size bin
174  integer , parameter :: n_kap_def = 1 ! number of kappa bins
175  real(RP), parameter :: k_min_def = 0.e0_rp ! lower bound of 1st kappa bin
176  real(RP), parameter :: k_max_def = 1.e0_rp ! upper bound of last kappa bin
177 
178  namelist / param_atmos_phy_ae_kajino13 / &
179  h2so4dt, &
180  ocgasdt, &
181 ! c_ratio, &
182  c_kappa, &
183  t_npf, &
184 ! d_min_inp, &
185 ! d_max_inp, &
186 ! k_min_inp, &
187 ! k_max_inp, &
188 ! n_kap_inp, &
189  flag_npf, &
190  flag_cond, &
191  flag_coag, &
192  flag_ccn_interactive, &
193  flag_regeneration, &
194  dg_reg, &
195  sg_reg, &
196  logk_aenucl, &
197  nbins_out
198 
199  integer :: it, ierr
200  !---------------------------------------------------------------------------
201 
202  if( io_l ) write(io_fid_log,*)
203  if( io_l ) write(io_fid_log,*) '++++++ Module[AEROSOL] / Categ[ATMOS PHYSICS] / Origin[SCALElib]'
204  if( io_l ) write(io_fid_log,*) '+++ kajino13 aerosol process'
205 
206  !--- setup parameter
207  pi6 = pi / 6._rp ! pi/6
208  sixpi = 6._rp / pi ! 6/pi
209  forpi = 4._rp / pi ! 4/pi
210 
211  if ( ae_type /= 'KAJINO13' .AND. ae_type /= 'NONE' ) then
212  write(*,*) 'xxx ATMOS_PHY_AE_TYPE is not KAJINO13. Check!'
213  call prc_mpistop
214  endif
215 
216 ! deltt = TIME_DTSEC_ATMOS_PHY_AE
217  n_ctg = ae_ctg
218  allocate( rnum_out(nbins_out) )
219  allocate( n_siz(n_ctg) )
220  allocate( d_min(n_ctg) )
221  allocate( d_max(n_ctg) )
222  allocate( n_kap(n_ctg) )
223  allocate( k_min(n_ctg) )
224  allocate( k_max(n_ctg) )
225  allocate( d_min_inp(n_ctg) )
226  allocate( d_max_inp(n_ctg) )
227  allocate( n_kap_inp(n_ctg) )
228  allocate( k_min_inp(n_ctg) )
229  allocate( k_max_inp(n_ctg) )
230  allocate( ctg_name(n_ctg) )
231 
232  n_siz(1:n_ctg) = nsiz(1:n_ctg) ! number of size bins
233  d_min(1:n_ctg) = d_min_def ! lower bound of 1st size bin
234  d_max(1:n_ctg) = d_max_def ! upper bound of last size bin
235  n_kap(1:n_ctg) = n_kap_def ! number of kappa bins
236  k_min(1:n_ctg) = k_min_def ! lower bound of 1st kappa bin
237  k_max(1:n_ctg) = k_max_def ! upper bound of last kappa bin
238 
239  do it = 1, n_ctg
240  if( n_ctg == 1 ) then
241  write(ctg_name(it),'(a)') "Sulfate"
242  elseif( n_ctg == 2 ) then
243  write(ctg_name(it),'(a)') "Seasalt"
244  elseif( n_ctg == 3 ) then
245  write(ctg_name(it),'(a)') "Dust"
246  endif
247  enddo
248 
249  !--- read namelist
250  rewind(io_fid_conf)
251  read(io_fid_conf,nml=param_atmos_phy_ae_kajino13,iostat=ierr)
252  if( ierr < 0 ) then !--- missing
253  if( io_l ) write(io_fid_log,*) '*** Not found namelist. Default used.'
254  elseif( ierr > 0 ) then !--- fatal error
255  write(*,*) 'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_AE_KAJINO13. Check!'
256  call prc_mpistop
257  endif
258  if( io_lnml ) write(io_fid_log,nml=param_atmos_phy_ae_kajino13)
259 
260  !--- now only the default setting is supported
261 ! n_siz(1:n_ctg) = NSIZ(1:n_ctg) ! number of size bins
262 ! d_min(1:n_ctg) = d_min_inp(1:n_ctg) ! lower bound of 1st size bin
263 ! d_max(1:n_ctg) = d_max_inp(1:n_ctg) ! upper bound of last size bin
264 ! n_kap(1:n_ctg) = n_kap_inp(1:n_ctg) ! number of kappa bins
265 ! k_min(1:n_ctg) = k_min_inp(1:n_ctg) ! lower bound of 1st kappa bin
266 ! k_max(1:n_ctg) = k_max_inp(1:n_ctg) ! upper bound of last kappa bin
267 
268  !--- diagnose parameters (n_trans, n_siz_max, n_kap_max)
269  n_trans = 0
270  n_siz_max = 0
271  n_kap_max = 0
272  do ic = 1, n_ctg
273  n_trans = n_trans + n_siz(ic) * n_kap(ic) * n_atr
274  n_siz_max = max(n_siz_max, n_siz(ic))
275  n_kap_max = max(n_kap_max, n_kap(ic))
276  enddo
277 
278  !--- bin settings
279  allocate(d_lw(n_siz_max,n_ctg))
280  allocate(d_ct(n_siz_max,n_ctg))
281  allocate(d_up(n_siz_max,n_ctg))
282  allocate(k_lw(n_kap_max,n_ctg))
283  allocate(k_ct(n_kap_max,n_ctg))
284  allocate(k_up(n_kap_max,n_ctg))
285  d_lw(:,:) = 0.0_rp
286  d_ct(:,:) = 0.0_rp
287  d_up(:,:) = 0.0_rp
288  k_lw(:,:) = 0.0_rp
289  k_ct(:,:) = 0.0_rp
290  k_up(:,:) = 0.0_rp
291 
292  do ic = 1, n_ctg
293  dlogd = (log(d_max(ic)) - log(d_min(ic)))/float(n_siz(ic))
294  do is0 = 1, n_siz(ic) !size bin
295  d_lw(is0,ic) = exp(log(d_min(ic))+dlogd* float(is0-1) )
296  d_ct(is0,ic) = exp(log(d_min(ic))+dlogd*(float(is0)-0.5_rp))
297  d_up(is0,ic) = exp(log(d_min(ic))+dlogd* float(is0) )
298  enddo !is (1:n_siz(ic))
299 
300  dk = (k_max(ic) - k_min(ic))/float(n_kap(ic))
301  do ik = 1, n_kap(ic) !size bin
302  k_lw(ik,ic) = k_min(ic) + dk * float(ik-1)
303  k_ct(ik,ic) = k_min(ic) + dk *(float(ik)-0.5_rp)
304  k_up(ik,ic) = k_min(ic) + dk * float(ik)
305  enddo !ik (1:n_kap(ic))
306 
307  enddo !ic (1:n_ctg)
308 
309 !find size bin of regenerated aerosols
310  do is0 = 1, n_siz(ic_mix)
311  if (dg_reg >= d_lw(is0,ic_mix) .AND. &
312  dg_reg < d_up(is0,ic_mix) ) then
313  is0_reg = is0
314  endif !d_lw < dg_reg < d_up
315  enddo
316 
317  !--- coagulation rule
318  ! [ NOTE: current version has one category and single
319  ! hygroscopicity bins and thus does not consider inter-category
320  ! nor inter-hygroscopicity-section coagulation ]
321  mcomb = 0
322  do ic = 1, n_ctg !=1
323  do ik = 1, n_kap(ic) !=1
324  do is2 = 1, n_siz(ic)
325  do is1 = 1, n_siz(ic)
326  if ( d_ct(is2,ic) >= d_ct(is1,ic) ) then
327  mcomb = mcomb + 1
328  endif !d_ct(is2) >= d_ct(is1)
329  enddo !is1 (1:n_siz(ic) )
330  enddo !is2 (1:n_siz(ic) )
331  enddo !ik(1:n_kap(ic))
332  enddo !ic(1:n_ctg)
333 
334  allocate(is_i(mcomb))
335  allocate(is_j(mcomb))
336  allocate(is_k(mcomb))
337  allocate(ik_i(mcomb))
338  allocate(ik_j(mcomb))
339  allocate(ik_k(mcomb))
340  allocate(ic_i(mcomb))
341  allocate(ic_j(mcomb))
342  allocate(ic_k(mcomb))
343 
344  mc = 0
345  do ic = 1, n_ctg !=1
346  do ik = 1, n_kap(ic) !=1
347  do is2 = 1, n_siz(ic)
348  do is1 = 1, n_siz(ic)
349  if ( d_ct(is2,ic) >= d_ct(is1,ic) ) then
350  mc = mc + 1
351  is_i(mc) = is1
352  ik_i(mc) = ik
353  ic_i(mc) = ic
354  is_j(mc) = is2
355  ik_j(mc) = ik
356  ic_j(mc) = ic
357  is_k(mc) = is2
358  ik_k(mc) = ik
359  ic_k(mc) = ic
360  endif !d_ct(is2) >= d_ct(is1)
361  enddo !is1 (1:n_siz(ic) )
362  enddo !is2 (1:n_siz(ic) )
363  enddo !ik(1:n_kap(ic))
364  enddo !ic(1:n_ctg)
365 
366  !--- gas concentration
367 ! conc_h2so4 = 0.0_RP
368 ! conc_cgas = 0.0_RP
369 
370  allocate( it_procs2trans(n_atr,n_siz_max,n_kap_max,n_ctg) )
371  allocate( ia_trans2procs(n_trans) )
372  allocate( is_trans2procs(n_trans) )
373  allocate( ik_trans2procs(n_trans) )
374  allocate( ic_trans2procs(n_trans) )
375 
376  it_procs2trans(:,:,:,:)= -999
377  ia_trans2procs(:) = 0
378  is_trans2procs(:) = 0
379  ik_trans2procs(:) = 0
380  ic_trans2procs(:) = 0
381 
382  !--- get pointer for trans2procs, procs2trans
383  it = 0
384  do ic = 1, n_ctg !aerosol category
385  do ik = 1, n_kap(ic) !kappa bin
386  do is0 = 1, n_siz(ic) !size bin
387  do ia0 = 1, n_atr !attributes
388  it = it + 1
389  it_procs2trans(ia0,is0,ik,ic)= it
390  ia_trans2procs(it) = ia0
391  is_trans2procs(it) = is0
392  ik_trans2procs(it) = ik
393  ic_trans2procs(it) = ic
394  enddo !ia (1:n_atr_prog )
395  enddo !is (1:n_siz(ic) )
396  enddo !ik (1:n_kap(ic) )
397  enddo !ic (1:n_ctg )
398 
399  allocate( ae_dens(ae_qa) )
400  ae_dens(:) = rhod_ae
401 
402  return
subroutine, public prc_mpistop
Abort MPI.
typedef float(real32_t)
integer, public ae_ctg
integer, public ae_qa
module TIME
Definition: scale_time.F90:15
module PROCESS
integer, dimension(:), allocatable, public nsiz
subroutine, public log(type, message)
Definition: dc_log.f90:133
real(dp), public time_dtsec_atmos_phy_ae
time interval of physics(aerosol ) [sec]
Definition: scale_time.F90:46
integer, public ic_mix
integer, public n_atr
Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_ae_kajino13()

subroutine, public scale_atmos_phy_ae_kajino13::atmos_phy_ae_kajino13 ( real(rp), dimension(ka,ia,ja), intent(inout)  DENS,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMZ,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMX,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMY,
real(rp), dimension(ka,ia,ja), intent(inout)  RHOT,
real(rp), dimension(ka,ia,ja,qa_ae), intent(inout)  EMIT,
real(rp), dimension(ka,ia,ja), intent(in)  NREG,
real(rp), dimension(ka,ia,ja,qa), intent(inout)  QTRC,
real(rp), dimension(ka,ia,ja), intent(out)  CN,
real(rp), dimension(ka,ia,ja), intent(out)  CCN,
real(rp), dimension(ka,ia,ja,qa), intent(inout)  RHOQ_t_AE 
)

Aerosol Microphysics.

Definition at line 419 of file scale_atmos_phy_ae_kajino13.F90.

References aerosol_zerochem(), scale_atmos_thermodyn::aq_cp, scale_atmos_thermodyn::aq_cv, scale_const::const_cpdry, scale_const::const_cvdry, scale_const::const_pre00, scale_const::const_rdry, scale_const::const_rvap, scale_tracer::gas_ctg, scale_tracer::i_qv, scale_grid_index::ia, scale_tracer::ic_mix, scale_grid_index::ie, scale_tracer::ig_cgas, scale_tracer::ig_h2so4, scale_stdio::io_fid_log, scale_stdio::io_l, scale_grid_index::is, scale_grid_index::ja, scale_grid_index::je, scale_grid_index::js, scale_grid_index::ka, scale_grid_index::ke, scale_grid_index::ks, dc_log::log(), scale_tracer::n_atr, scale_tracer::qa, scale_tracer::qa_ae, scale_tracer::qaee, scale_tracer::qaes, and scale_time::time_dtsec_atmos_phy_ae.

Referenced by scale_atmos_phy_ae::atmos_phy_ae_setup().

419  use scale_grid_index
420  use scale_tracer
421  use scale_const, only: &
422  const_cpdry, &
423  const_cvdry, &
424  const_rvap, &
425  const_pre00, &
426  const_rdry
427  use scale_atmos_thermodyn, only: &
428  aq_cv, &
429  aq_cp
430  use scale_atmos_saturation, only: &
431  pres2qsat_liq => atmos_saturation_pres2qsat_liq
432  use scale_time, only: &
434  use scale_history, only: &
435  hist_in
436  implicit none
437  real(RP), intent(inout) :: dens(ka,ia,ja)
438  real(RP), intent(inout) :: momz(ka,ia,ja)
439  real(RP), intent(inout) :: momx(ka,ia,ja)
440  real(RP), intent(inout) :: momy(ka,ia,ja)
441  real(RP), intent(inout) :: rhot(ka,ia,ja)
442  real(RP), intent(inout) :: emit(ka,ia,ja,qa_ae)
443  real(RP), intent(in) :: nreg(ka,ia,ja)
444  real(RP), intent(inout) :: qtrc(ka,ia,ja,qa)
445  real(RP), intent(out) :: cn(ka,ia,ja)
446  real(RP), intent(out) :: ccn(ka,ia,ja)
447  real(RP), intent(inout) :: rhoq_t_ae(ka,ia,ja,qa)
448  real(RP), allocatable :: qtrc0(:,:,:,:)
449  real(RP), allocatable :: qtrc1(:,:,:,:)
450 
451  !--- local
452  real(RP) :: pres_ae(ka,ia,ja)
453  real(RP) :: temp_ae(ka,ia,ja)
454  real(RP) :: qv_ae(ka,ia,ja)
455  real(RP) :: ssliq_ae(ka,ia,ja)
456  real(RP) :: th(ka,ia,ja)
457  real(RP) :: q(ka,ia,ja,qa)
458  real(RP) :: qdry(ka,ia,ja)
459  real(RP) :: rrhog(ka,ia,ja)
460  real(RP) :: cva(ka,ia,ja)
461  real(RP) :: cpa(ka,ia,ja)
462  real(RP) :: t_ccn, t_cn
463  real(RP) :: rmoist
464  real(RP) :: qsat_tmp
465  real(RP) :: m0_reg, m2_reg, m3_reg !regenerated aerosols [m^k/m3]
466  real(RP) :: ms_reg !regenerated aerosol mass [ug/m3]
467  real(RP) :: reg_factor_m2,reg_factor_m3 !to save cpu time for moment conversion
468  !--- aerosol variables
469  real(RP),allocatable :: aerosol_procs(:,:,:,:) !(n_atr,n_siz_max,n_kap_max,n_ctg)
470  real(RP),allocatable :: aerosol_activ(:,:,:,:) !(n_atr,n_siz_max,n_kap_max,n_ctg)
471  real(RP),allocatable :: emis_procs(:,:,:,:) !(n_atr,n_siz_max,n_kap_max,n_ctg)
472  real(RP),allocatable :: emis_gas(:) !emission of gas
473  real(RP) :: total_aerosol_mass(ka,ia,ja,n_ctg)
474  real(RP) :: total_aerosol_number(ka,ia,ja,n_ctg)
475  real(RP) :: total_emit_aerosol_mass(ka,ia,ja,n_ctg)
476  real(RP) :: total_emit_aerosol_number(ka,ia,ja,n_ctg)
477  !--- gas
478 ! real(RP),allocatable :: conc_h2so4(:,:,:,:) !concentration [ug/m3]
479 ! real(RP) :: conc_gas(KA,IA,JA,GAS_CTG) !concentration [ug/m3]
480  real(RP) :: conc_gas(gas_ctg) !concentration [ug/m3]
481  character(len=H_LONG) :: ofilename
482  integer :: i, j, k, iq, it
483 
484  if( io_l ) write(io_fid_log,*) '*** Physics step: Aerosol(kajino13)'
485 
486  !--- Negative fixer
487  do j = js, je
488  do i = is, ie
489  do k = ks, ke
490  do ic = 1, n_ctg !aerosol category
491  do ik = 1, n_kap(ic) !kappa bin
492  do is0 = 1, n_siz(ic) !size bin
493  if (qtrc(k,i,j,qaes-1+it_procs2trans(ia_m0,is0,ik,ic)) < 0.0_rp .or. &
494  qtrc(k,i,j,qaes-1+it_procs2trans(ia_m2,is0,ik,ic)) < 0.0_rp .or. &
495  qtrc(k,i,j,qaes-1+it_procs2trans(ia_m3,is0,ik,ic)) < 0.0_rp .or. &
496  qtrc(k,i,j,qaes-1+it_procs2trans(ia_ms,is0,ik,ic)) < 0.0_rp .or. &
497  qtrc(k,i,j,qaes-1+it_procs2trans(ia_kp,is0,ik,ic)) < 0.0_rp ) then
498  qtrc(k,i,j,qaes-1+it_procs2trans(1:n_atr,is0,ik,ic)) = 0.0_rp
499  endif
500  enddo
501  enddo
502  enddo
503  enddo
504  enddo
505  enddo
506 
507  allocate( qtrc0(ka,ia,ja,qa), qtrc1(ka,ia,ja,qa) )
508  do iq = 1, qa
509  do j = js, je
510  do i = is, ie
511  do k = ks, ke
512  qtrc0(k,i,j,iq) = qtrc(k,i,j,iq) ! save
513  enddo
514  enddo
515  enddo
516  enddo
517 
518  allocate( aerosol_procs(n_atr,n_siz_max,n_kap_max,n_ctg) )
519  allocate( aerosol_activ(n_atr,n_siz_max,n_kap_max,n_ctg) )
520  allocate( emis_procs(n_atr,n_siz_max,n_kap_max,n_ctg) )
521  allocate( emis_gas(gas_ctg) )
522 
523  reg_factor_m2 = dg_reg**2._rp * exp( 2.0_rp *(log(sg_reg)**2._rp)) !m0_reg to m2_reg
524  reg_factor_m3 = dg_reg**3._rp * exp( 4.5_rp *(log(sg_reg)**2._rp)) !m0_reg to m3_reg
525 
526  !--- convert SCALE variable to zerochem variable
527 
528  aerosol_procs(:,:,:,:) = 0.0_rp
529  aerosol_activ(:,:,:,:) = 0.0_rp
530  emis_procs(:,:,:,:) = 0.0_rp
531  emis_gas(:) = 0.0_rp
532  pres_ae(:,:,:) = 0.0_rp
533  temp_ae(:,:,:) = 0.0_rp
534  qv_ae(:,:,:) = 0.0_rp
535 
536  do j = js, je
537  do i = is, ie
538 
539  do k = ks, ke
540  rrhog(k,i,j) = 1.0_rp / dens(k,i,j)
541  th(k,i,j) = rhot(k,i,j) * rrhog(k,i,j)
542  enddo
543  do k = ks, ke
544  calc_qdry( qdry(k,i,j), qtrc, k, i, j, iq )
545  enddo
546  do k = ks, ke
547  calc_cv( cva(k,i,j), qdry(k,i,j), qtrc, k, i, j, iq, const_cvdry, aq_cv )
548  enddo
549  do k = ks, ke
550  calc_r( rmoist, qtrc(k,i,j,i_qv), qdry(k,i,j), const_rdry, const_rvap )
551  cpa(k,i,j) = cva(k,i,j) + rmoist
552  calc_pre( pres_ae(k,i,j), dens(k,i,j), th(k,i,j), rmoist, cpa(k,i,j), const_pre00 )
553  temp_ae(k,i,j) = pres_ae(k,i,j) / ( dens(k,i,j) * rmoist )
554  qv_ae(k,i,j) = qtrc(k,i,j,i_qv)
555  !--- calculate super saturation of water
556  call pres2qsat_liq( qsat_tmp,temp_ae(k,i,j),pres_ae(k,i,j) )
557  ssliq_ae(k,i,j) = qv_ae(k,i,j)/qsat_tmp - 1.0_rp
558  enddo
559 
560  enddo
561  enddo
562 
563  ! tiny number, tiny mass
564  do j = js, je
565  do i = is, ie
566  do k = ks, ke
567  do ic = 1, n_ctg !aerosol category
568  do ik = 1, n_kap(ic) !kappa bin
569  do is0 = 1, n_siz(ic) !size bin
570  if (qtrc0(k,i,j,qaes-1+it_procs2trans(ia_m0,is0,ik,ic))*dens(k,i,j) < cleannumber) then
571  do ia0 = 1, n_atr
572  qtrc0(k,i,j,qaes-1+it_procs2trans(ia0,is0,ik,ic)) = 0._rp !to save cpu time and avoid underflow
573  enddo !ia0 (1:n_atr )
574  endif
575  enddo !is (1:n_siz(ic) )
576  enddo !ik (1:n_kap(ic) )
577  enddo !ic (1:n_ctg )
578  enddo
579  enddo
580  enddo
581 
582  do iq = 1, qa
583  do j = js, je
584  do i = is, ie
585  do k = ks, ke
586  qtrc1(k,i,j,iq) = qtrc0(k,i,j,iq) ! save
587  enddo
588  enddo
589  enddo
590  enddo
591 
592  !---- Calculate aerosol processs
593  cn(:,:,:) = 0.0_rp
594  ccn(:,:,:) = 0.0_rp
595  do k = ks, ke
596  do j = js, je
597  do i = is, ie
598 
599  !--- aerosol_trans at initial time
600  ! [xx/kg] -> [xx/m3]
601  do it = 1, n_trans
602  aerosol_procs(ia_trans2procs(it), &
603  is_trans2procs(it), &
604  ik_trans2procs(it), &
605  ic_trans2procs(it)) = qtrc1(k,i,j,qaes-1+it)*dens(k,i,j)
606  emis_procs(ia_trans2procs(it), &
607  is_trans2procs(it), &
608  ik_trans2procs(it), &
609  ic_trans2procs(it)) = emit(k,i,j,it)*dens(k,i,j)
610  enddo !it(1:n_trans)
611  ! mixing ratio [kg/kg] -> concentration [ug/m3]
612  conc_gas(1:gas_ctg) &
613  = qtrc1(k,i,j,qaee-gas_ctg+1:qaee-gas_ctg+gas_ctg)*dens(k,i,j)*1.e+9_rp
614 
615  emis_gas(1:gas_ctg) = emit(k,i,j,qa_ae-gas_ctg+ig_h2so4:qa_ae-gas_ctg+ig_cgas)
616 
617  call aerosol_zerochem( &
618  time_dtsec_atmos_phy_ae, & !--- in
619  temp_ae(k,i,j), & !--- in
620  pres_ae(k,i,j), & !--- in
621  ssliq_ae(k,i,j), & !--- in
622  flag_npf, flag_cond, flag_coag,& !--- in
623  aerosol_procs, & !--- inout
624  conc_gas, & !--- inout
625  emis_procs, & !--- out
626  emis_gas, & !--- out
627  aerosol_activ ) !--- out
628 
629 ! aerosol loss due to activation to cloud droplets
630  if (flag_ccn_interactive) then
631  do is0 = 1, n_siz(ic_mix)
632  do ia0 = 1, n_atr !attributes
633  aerosol_activ(ia0,is0,ik_out,ic_mix) = min(max(0._rp, aerosol_activ(ia0,is0,ik_out,ic_mix)), &
634  aerosol_procs(ia0,is0,ik_out,ic_mix) )
635  aerosol_procs(ia0,is0,ik_out,ic_mix) = &
636  aerosol_procs(ia0,is0,ik_out,ic_mix) - aerosol_activ(ia0,is0,ik_out,ic_mix)
637  enddo
638  enddo
639  endif !flag_ccn_interactive
640 
641 ! aerosol regeneration due to evaporation of cloud droplets
642 ! using prescribed size parameters and to internal mixture category (ic_mix)
643  if (flag_regeneration) then
644  m0_reg = nreg(k,i,j) !#/m3
645 ! m2_reg = m0_reg * dg_reg**2._RP * exp( 2.0_RP *(log(sg_reg)**2._RP)) !m2/m3
646 ! m3_reg = m0_reg * dg_reg**3._RP * exp( 4.5_RP *(log(sg_reg)**2._RP)) !m3/m3
647  m2_reg = m0_reg * reg_factor_m2 !m2/m3
648  m3_reg = m0_reg * reg_factor_m3 !m3/m3
649  ms_reg = m3_reg * pi6 * conv_vl_ms !ug/m3
650  aerosol_procs(ia_m0,is0_reg,ik_out,ic_mix) = &
651  aerosol_procs(ia_m0,is0_reg,ik_out,ic_mix) + m0_reg !#/m3
652  aerosol_procs(ia_m2,is0_reg,ik_out,ic_mix) = &
653  aerosol_procs(ia_m2,is0_reg,ik_out,ic_mix) + m2_reg !m2/m3
654  aerosol_procs(ia_m3,is0_reg,ik_out,ic_mix) = &
655  aerosol_procs(ia_m3,is0_reg,ik_out,ic_mix) + m3_reg !m3/m3
656  aerosol_procs(ia_ms,is0_reg,ik_out,ic_mix) = &
657  aerosol_procs(ia_ms,is0_reg,ik_out,ic_mix) + ms_reg !ug/m3
658 ! additional attirbute to be added (ia_kp)
659  endif !flag_regeneration
660 
661 ! diagnosed variables
662  do is0 = 1, n_siz(ic_mix)
663  ccn(k,i,j) = ccn(k,i,j) + aerosol_activ(ia_m0,is0,ik_out,ic_mix)
664  cn(k,i,j) = cn(k,i,j) + aerosol_procs(ia_m0,is0,ik_out,ic_mix)
665  enddo
666 
667 ! call trans_ccn(aerosol_procs, aerosol_activ, t_ccn, t_cn, &
668 ! n_ctg, n_kap_max, n_siz_max, N_ATR, &
669 ! ic_mix, ia_m0, ia_m2, ia_m3, ik_out, n_siz, &
670 ! rnum_out, nbins_out)
671 
672 ! CN(k,i,j) = t_cn
673 ! CCN(k,i,j) = t_ccn
674 
675  ! [xx/m3] -> [xx/kg]
676  do ic = 1, n_ctg !category
677  do ik = 1, n_kap(ic) !kappa bin
678  do is0 = 1, n_siz(ic) !size bin
679  do ia0 = 1, n_atr !attributes
680  qtrc1(k,i,j,qaes-1+it_procs2trans(ia0,is0,ik,ic)) = aerosol_procs(ia0,is0,ik,ic) / dens(k,i,j)
681  enddo !ia (1:N_ATR )
682  enddo !is (1:n_siz(ic) )
683  enddo !ik (1:n_kap(ic) )
684  enddo !ic (1:n_ctg )
685  ! [ug/m3] -> mixing ratio [kg/kg]
686  qtrc1(k,i,j,qaee-gas_ctg+1:qaee-gas_ctg+gas_ctg) &
687  = conc_gas(1:gas_ctg) / dens(k,i,j)*1.e-9_rp
688 
689  ! tiny number, tiny mass
690  do ic = 1, n_ctg !aerosol category
691  do ik = 1, n_kap(ic) !kappa bin
692  do is0 = 1, n_siz(ic) !size bin
693  if (qtrc1(k,i,j,qaes-1+it_procs2trans(ia_m0,is0,ik,ic))*dens(k,i,j) < cleannumber) then
694  do ia0 = 1, n_atr
695  qtrc1(k,i,j,qaes-1+it_procs2trans(ia0,is0,ik,ic)) = 0._rp !to save cpu time and avoid underflow
696  enddo !ia0 (1:n_atr )
697  endif
698  enddo !is (1:n_siz(ic) )
699  enddo !ik (1:n_kap(ic) )
700  enddo !ic (1:n_ctg )
701 
702  !--- Negative fixer
703  do ic = 1, n_ctg !aerosol category
704  do ik = 1, n_kap(ic) !kappa bin
705  do is0 = 1, n_siz(ic) !size bin
706  if (qtrc(k,i,j,qaes-1+it_procs2trans(ia_m0,is0,ik,ic)) < 0.0_rp .or. &
707  qtrc(k,i,j,qaes-1+it_procs2trans(ia_m2,is0,ik,ic)) < 0.0_rp .or. &
708  qtrc(k,i,j,qaes-1+it_procs2trans(ia_m3,is0,ik,ic)) < 0.0_rp .or. &
709  qtrc(k,i,j,qaes-1+it_procs2trans(ia_ms,is0,ik,ic)) < 0.0_rp .or. &
710  qtrc(k,i,j,qaes-1+it_procs2trans(ia_kp,is0,ik,ic)) < 0.0_rp ) then
711  qtrc(k,i,j,qaes-1+it_procs2trans(1:n_atr,is0,ik,ic)) = 0.0_rp
712  endif
713  enddo
714  enddo
715  enddo
716 
717  ! for history
718  total_aerosol_mass(k,i,j,:) = 0.0_rp
719  total_aerosol_number(k,i,j,:) = 0.0_rp
720  total_emit_aerosol_mass(k,i,j,:) = 0.0_rp
721  total_emit_aerosol_number(k,i,j,:) = 0.0_rp
722  do ic = 1, n_ctg
723  do ik = 1, n_kap(ic)
724  do is0 = 1, n_siz(ic)
725  total_aerosol_mass(k,i,j,ic) = total_aerosol_mass(k,i,j,ic) &
726  + qtrc1(k,i,j,qaes-1+it_procs2trans(ia_ms,is0,ik,ic))
727  total_aerosol_number(k,i,j,ic) = total_aerosol_number(k,i,j,ic) &
728  + qtrc1(k,i,j,qaes-1+it_procs2trans(ia_m0,is0,ik,ic))
729  total_emit_aerosol_mass(k,i,j,ic) = total_emit_aerosol_mass(k,i,j,ic) &
730  + emit(k,i,j,it_procs2trans(ia_ms,is0,ik,ic))
731  total_emit_aerosol_number(k,i,j,ic) = total_emit_aerosol_number(k,i,j,ic) &
732  + emit(k,i,j,it_procs2trans(ia_m0,is0,ik,ic))
733  enddo
734  enddo
735  enddo
736 
737  enddo
738  enddo
739  enddo
740 
741  do ic = 1, n_ctg
742  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'mass'
743  call hist_in( total_aerosol_mass(:,:,:,ic), trim(ofilename), 'Total mass mixing ratio of aerosol', 'kg/kg' )
744  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'number'
745  call hist_in( total_aerosol_number(:,:,:,ic), trim(ofilename), 'Total number mixing ratio of aerosol', 'num/kg' )
746  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'mass_emit'
747  call hist_in( total_emit_aerosol_mass(:,:,:,ic), trim(ofilename), 'Total mass mixing ratio of emitted aerosol', 'kg/kg' )
748  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'number_emit'
749  call hist_in( total_emit_aerosol_number(:,:,:,ic), trim(ofilename), 'Total number mixing ratio of emitted aerosol', 'num/kg' )
750  enddo
751 
752  do ic = 1, n_ctg
753  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'mass'
754  call hist_in( total_aerosol_mass(:,:,:,ic), trim(ofilename), 'Total mass mixing ratio of aerosol', 'kg/kg' )
755  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'number'
756  call hist_in( total_aerosol_number(:,:,:,ic), trim(ofilename), 'Total number mixing ratio of aerosol', 'num/kg' )
757  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'mass_emit'
758  call hist_in( total_emit_aerosol_mass(:,:,:,ic), trim(ofilename), 'Total mass mixing ratio of emitted aerosol', 'kg/kg' )
759  write(ofilename,'(a,a)') trim(ctg_name(ic)), 'number_emit'
760  call hist_in( total_emit_aerosol_number(:,:,:,ic), trim(ofilename), 'Total number mixing ratio of emitted aerosol', 'num/kg' )
761  enddo
762 
763  call hist_in( emit(:,:,:,qa_ae-gas_ctg+ig_h2so4), 'H2SO4_emit', 'Emission ratio of H2SO4 gas', 'ug/m3/s' )
764  call hist_in( emit(:,:,:,qa_ae-gas_ctg+ig_cgas), 'CGAS_emit', 'Emission ratio of Condensabule gas', 'ug/m3/s' )
765 
766  deallocate( aerosol_procs )
767  deallocate( aerosol_activ )
768  deallocate( emis_procs )
769  deallocate( emis_gas )
770 
771  do iq = 1, qa
772  do j = js, je
773  do i = is, ie
774  do k = ks, ke
775  rhoq_t_ae(k,i,j,iq) = ( qtrc1(k,i,j,iq) - qtrc0(k,i,j,iq) ) * dens(k,i,j) / time_dtsec_atmos_phy_ae
776  enddo
777  enddo
778  enddo
779  enddo
780 
781  deallocate( qtrc0, qtrc1 )
782 
783  return
integer, public is
start point of inner domain: x, local
real(rp), public const_cvdry
specific heat (dry air,constant volume) [J/kg/K]
Definition: scale_const.F90:59
integer, public je
end point of inner domain: y, local
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
Definition: scale_const.F90:58
integer, public qa_ae
module ATMOSPHERE / Saturation adjustment
real(rp), dimension(:), allocatable, public aq_cp
CP for each hydrometeors [J/kg/K].
integer, public qaes
integer, public ke
end point of inner domain: z, local
integer, public qa
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
Definition: scale_const.F90:57
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public ka
of z whole cells (local, with HALO)
integer, public i_qv
real(rp), public const_pre00
pressure reference [Pa]
Definition: scale_const.F90:93
integer, public ig_h2so4
integer, public gas_ctg
integer, public js
start point of inner domain: y, local
module TIME
Definition: scale_time.F90:15
subroutine, public log(type, message)
Definition: dc_log.f90:133
real(dp), public time_dtsec_atmos_phy_ae
time interval of physics(aerosol ) [sec]
Definition: scale_time.F90:46
real(rp), parameter, public const_rvap
specific gas constant (water vapor) [J/kg/K]
Definition: scale_const.F90:65
module CONSTANT
Definition: scale_const.F90:14
real(rp), dimension(:), allocatable, public aq_cv
CV for each hydrometeors [J/kg/K].
integer, public ks
start point of inner domain: z, local
integer, public ie
end point of inner domain: x, local
integer, public ic_mix
module ATMOSPHERE / Thermodynamics
integer, public ig_cgas
integer, public n_atr
module HISTORY
integer, public qaee
integer, public ja
of y whole cells (local, with HALO)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ aerosol_zerochem()

subroutine scale_atmos_phy_ae_kajino13::aerosol_zerochem ( real(dp), intent(in)  deltt,
real(rp), intent(in)  temp_k,
real(rp), intent(in)  pres_pa,
real(rp), intent(in)  super,
logical, intent(in)  flag_npf,
logical, intent(in)  flag_cond,
logical, intent(in)  flag_coag,
real(rp), dimension(n_atr,n_siz_max,n_kap_max,n_ctg), intent(inout)  aerosol_procs,
real(rp), dimension(gas_ctg), intent(inout)  conc_gas,
real(rp), dimension(n_atr,n_siz_max,n_kap_max,n_ctg), intent(in)  emis_procs,
real(rp), dimension(gas_ctg), intent(in)  emis_gas,
real(rp), dimension(n_atr,n_siz_max,n_kap_max,n_ctg), intent(out)  aerosol_activ 
)

Definition at line 798 of file scale_atmos_phy_ae_kajino13.F90.

References aerosol_nucleation(), scale_tracer::ic_mix, scale_tracer::ig_cgas, scale_tracer::ig_h2so4, scale_tracer::n_atr, scale_prof::prof_rapend(), scale_prof::prof_rapstart(), scale_time::time_nowsec, and scale_time::time_startdaysec.

Referenced by atmos_phy_ae_kajino13().

798 
799  use scale_time, only: &
800  time_nowsec, &
802 
803  implicit none
804  ! i/o variables
805  real(DP),intent(in) :: deltt ! delta t [sec]
806  real(RP),intent(in) :: temp_k ! temperature [K]
807  real(RP),intent(in) :: pres_pa ! pressure [Pa]
808  real(RP),intent(in) :: super ! supersaturation [-]
809 ! real(RP),intent(in) :: h2so4dt ! h2so4 production rate [ug/m3/s]
810 ! real(RP),intent(in) :: c_ratio ! ratio of condensable mass to h2so4 (after NPF) [-]
811 ! real(RP),intent(in) :: c_kappa ! hygroscopicity of condensable mass [-]
812  logical, intent(in) :: flag_npf ! (on/off) new particle formation
813  logical, intent(in) :: flag_cond ! (on/off) condensation
814  logical, intent(in) :: flag_coag ! (on/off) coagulation
815  real(RP),intent(inout) :: aerosol_procs(n_atr,n_siz_max,n_kap_max,n_ctg)
816  real(RP),intent(inout) :: conc_gas(gas_ctg)
817  real(RP),intent(out) :: aerosol_activ(n_atr,n_siz_max,n_kap_max,n_ctg)
818  real(RP),intent(in) :: emis_procs(n_atr,n_siz_max,n_kap_max,n_ctg)
819  real(RP),intent(in) :: emis_gas(gas_ctg)
820  ! local variables
821  real(RP) :: j_1nm ! nucleation rate of 1nm particles [#/cm3/s]
822  integer :: ic_nuc ! category for 1nm new particles
823  integer :: ik_nuc ! kappa bin for 1nm new particles
824  integer :: is_nuc ! size bin for 1nm new particles
825  real(RP) :: c_ratio, t_elaps
826  real(RP) :: chem_gas(gas_ctg)
827 
828  chem_gas(ig_h2so4) = h2so4dt
829  chem_gas(ig_cgas) = ocgasdt
830 
831  !--- convert unit of aerosol mass [ia=ia_ms]
832  do ic = 1, n_ctg !aerosol category
833  do ik = 1, n_kap(ic) !kappa bin
834  do is0 = 1, n_siz(ic) !size bin
835  aerosol_procs(ia_ms,is0,ik,ic) = aerosol_procs(ia_ms,is0,ik,ic) * 1.e+9_rp ! [kg/m3] -> [ug/m3]
836  enddo !is (1:n_siz(ic) )
837  enddo !ik (1:n_kap(ic) )
838  enddo !ic (1:n_ctg )
839 
840  ! emission
841  do ic = 1, n_ctg !aerosol category
842  do ik = 1, n_kap(ic) !kappa bin
843  do is0 = 1, n_siz(ic) !size bin
844  do ia0 = 1, n_atr !attributes (prognostic)
845  aerosol_procs(ia0,is0,ik,ic) = aerosol_procs(ia0,is0,ik,ic) &
846  + emis_procs(ia0,is0,ik,ic) * deltt
847  enddo !ia0 (1:n_atr )
848  enddo !is (1:n_siz(ic) )
849  enddo !ik (1:n_kap(ic) )
850  enddo !ic (1:n_ctg )
851 
852  ! tiny number, tiny mass
853  do ic = 1, n_ctg !aerosol category
854  do ik = 1, n_kap(ic) !kappa bin
855  do is0 = 1, n_siz(ic) !size bin
856  if (aerosol_procs(ia_m0,is0,ik,ic) < cleannumber) then
857  do ia0 = 1, n_atr
858  aerosol_procs(ia0,is0,ik,ic) = 0._rp !to save cpu time and avoid underflow
859  enddo !ia0 (1:n_atr )
860  endif
861  enddo !is (1:n_siz(ic) )
862  enddo !ik (1:n_kap(ic) )
863  enddo !ic (1:n_ctg )
864 
865  ! update conc_h2so4
866 ! conc_h2so4 = conc_h2so4 + h2so4dt * deltt ! [ug/m3]
867  conc_gas(ig_h2so4) = conc_gas(ig_h2so4) + chem_gas(ig_h2so4) * deltt ! [ug/m3]
868  conc_gas(ig_cgas) = conc_gas(ig_cgas) + chem_gas(ig_cgas) * deltt ! [ug/m3]
869 
870  conc_gas(ig_h2so4) = conc_gas(ig_h2so4) + emis_gas(ig_h2so4) * deltt ! [ug/m3]
871  conc_gas(ig_cgas) = conc_gas(ig_cgas) + emis_gas(ig_cgas) * deltt ! [ug/m3]
872 
873  if( chem_gas(ig_h2so4)+emis_gas(ig_h2so4) /= 0.0_rp ) then
874  c_ratio = ( chem_gas(ig_h2so4)+emis_gas(ig_h2so4)+chem_gas(ig_cgas)+emis_gas(ig_cgas) ) &
875  / ( chem_gas(ig_h2so4)+emis_gas(ig_h2so4) )
876  else
877  c_ratio = 0.0_rp
878  endif
879 
880  ! new particle formation
881  t_elaps = time_nowsec - time_startdaysec
882  j_1nm = 0._rp
883  ic_nuc = ic_mix
884  ik_nuc = 1
885  is_nuc = 1
886  if (flag_npf) then
887  call prof_rapstart('ATM_Aerosol_NPF',1)
888  if( t_elaps <= t_npf ) then ! call aerosol_nucleation(conc_h2so4, J_1nm) !(i) conc_h2so4 (o) J_1nm
889  call aerosol_nucleation(conc_gas(ig_h2so4), j_1nm) !(i) conc_h2so4 (o) J_1nm
890  endif
891  call prof_rapend('ATM_Aerosol_NPF',1)
892  else
893  j_1nm = 0._rp !( new particle formation does not occur )
894  endif !if flag_npf=.true.
895 
896  ! condensation
897  if (flag_cond) then
898  call prof_rapstart('ATM_Aerosol_cond',1)
899  call aerosol_condensation(j_1nm, temp_k, pres_pa, deltt, &
900  ic_nuc, ik_nuc, is_nuc, n_ctg, n_kap, n_siz, n_atr, &
901  n_siz_max, n_kap_max, ia_m0, ia_m2, ia_m3, ia_ms, &
902  ! d_lw, d_ct, d_up, k_lw, k_ct, k_up, &
903  d_lw, d_ct, d_up, &
904  conc_gas(ig_h2so4), c_ratio, aerosol_procs )
905  call prof_rapend('ATM_Aerosol_cond',1)
906  endif !if flag_cond=.true.
907 
908  ! coagulation
909  if (flag_coag) then
910  call prof_rapstart('ATM_Aerosol_coag',1)
911  call aerosol_coagulation(deltt, temp_k, pres_pa, &
912  mcomb,is_i,is_j,is_k,ik_i,ik_j,ik_k,ic_i,ic_j,ic_k, &
913  n_atr,n_siz_max,n_kap_max,n_ctg,ia_m0,ia_m2,ia_m3,ia_ms, &
914  n_siz,n_kap,d_lw,d_ct,d_up,aerosol_procs)
915  call prof_rapend('ATM_Aerosol_coag',1)
916  endif !if flag_coag=.true.
917 
918  call aerosol_activation(c_kappa, super, temp_k, ia_m0, ia_m2, ia_m3, &
919  n_atr,n_siz_max,n_kap_max,n_ctg,n_siz,n_kap, &
920  d_ct,aerosol_procs, aerosol_activ)
921 
922 ! conc_gas(IG_CGAS) = conc_gas(IG_H2SO4)*( c_ratio-1.0_RP )
923 
924  !--- convert unit of aerosol mass [ia=ia_ms]
925  do ic = 1, n_ctg !aerosol category
926  do ik = 1, n_kap(ic) !kappa bin
927  do is0 = 1, n_siz(ic) !size bin
928  aerosol_procs(ia_ms,is0,ik,ic) = aerosol_procs(ia_ms,is0,ik,ic) * 1.e-9_rp ! [ug/m3] -> [kg/m3]
929  enddo !is (1:n_siz(ic) )
930  enddo !ik (1:n_kap(ic) )
931  enddo !ic (1:n_ctg )
932 
933  return
real(dp), public time_nowsec
subday part of current time [sec]
Definition: scale_time.F90:68
real(dp), public time_startdaysec
second of start time [sec]
Definition: scale_time.F90:74
integer, public ig_h2so4
integer, public gas_ctg
module TIME
Definition: scale_time.F90:15
integer, public ic_mix
integer, public ig_cgas
integer, public n_atr
Here is the call graph for this function:
Here is the caller graph for this function:

◆ aerosol_nucleation()

subroutine scale_atmos_phy_ae_kajino13::aerosol_nucleation ( real(rp), intent(in)  conc_h2so4,
real(rp), intent(inout)  J_1nm 
)

Definition at line 939 of file scale_atmos_phy_ae_kajino13.F90.

References float(), and dc_log::log().

Referenced by aerosol_zerochem().

939  implicit none
940  !i/o variables
941  real(RP), intent(in) :: conc_h2so4 !H2SO4 concentration [ug/m3]
942  real(RP), intent(inout) :: j_1nm !nucleation rate of 1nm particles [#/cm3/s]
943  !local variables
944  real(RP) :: conc_num_h2so4 !H2SO4 number concentration [#/cm3]
945  ! real(RP), parameter :: logk = -12.4_RP !constant coefficient for kinetic nucleation [-]
946  ! real(RP), parameter :: logk = -11.4_RP !constant coefficient for kinetic nucleation [-]
947 
948  conc_num_h2so4 = conc_h2so4 * conv_m2n ![ug/m3] -> [#/cm3]
949 
950  !emperical formula of new particle formation rate [Kuang et al., 2008]
951  j_1nm = (10._rp**(logk_aenucl)) * conc_num_h2so4 ** 2._rp
952 
953  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_ae_kajino13_effectiveradius()

subroutine, public scale_atmos_phy_ae_kajino13::atmos_phy_ae_kajino13_effectiveradius ( real(rp), dimension (ka,ia,ja,ae_qa), intent(out)  Re,
real(rp), dimension(ka,ia,ja,qa), intent(in)  QTRC,
real(rp), dimension (ka,ia,ja), intent(in)  RH 
)

Calculate Effective Radius.

Definition at line 2027 of file scale_atmos_phy_ae_kajino13.F90.

References scale_const::const_undef.

Referenced by scale_atmos_phy_ae::atmos_phy_ae_setup().

2027  use scale_grid_index
2028  use scale_tracer
2029  use scale_const, only: &
2030  undef => const_undef
2031  implicit none
2032 
2033  real(RP), intent(out) :: re (ka,ia,ja,ae_qa) ! effective radius
2034  real(RP), intent(in) :: qtrc(ka,ia,ja,qa) ! tracer mass concentration [kg/kg]
2035  real(RP), intent(in) :: rh (ka,ia,ja) ! relative humidity [0-1]
2036  !---------------------------------------------------------------------------
2037 
2038  re(:,:,:,:) = undef
2039 
2040 ! Re(:,:,:,I_ae_seasalt) = 2.E-4_RP
2041 ! Re(:,:,:,I_ae_dust ) = 4.E-6_RP
2042 ! Re(:,:,:,I_ae_bc ) = 4.E-8_RP
2043 ! Re(:,:,:,I_ae_oc ) = RH(:,:,:)
2044 ! Re(:,:,:,I_ae_sulfate) = RH(:,:,:)
2045 
2046  return
integer, public qa
real(rp), public const_undef
Definition: scale_const.F90:43
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public ka
of z whole cells (local, with HALO)
integer, public ae_qa
module CONSTANT
Definition: scale_const.F90:14
integer, public ja
of y whole cells (local, with HALO)
Here is the caller graph for this function:

Variable Documentation

◆ ae_dens

real(rp), dimension(:), allocatable, public scale_atmos_phy_ae_kajino13::ae_dens

Definition at line 62 of file scale_atmos_phy_ae_kajino13.F90.

Referenced by atmos_phy_ae_kajino13_setup().

62  real(RP), public, allocatable :: ae_dens(:) ! aerosol density [kg/m3]=[g/L]