@@ -230,6 +230,7 @@ subroutine sox_cldaero_update( &
230230 dso4dt_aqrxn, dso4dt_hprxn, &
231231 dso4dt_gasuptk, dmsadt_gasuptk_toso4, &
232232 dqdt_aq, dqdt_wr, dqdt
233+ real (r8 ) :: delnh3
233234
234235 real (r8 ) :: fwetrem, uptkrate
235236
@@ -295,6 +296,10 @@ subroutine sox_cldaero_update( &
295296
296297 delso4_o3rxn = xso4(i,k) - xso4_init(i,k)
297298
299+ if (id_nh3> 0 ) then
300+ delnh3 = nh3g(i,k) - xnh3(i,k)
301+ endif
302+
298303 ! the factors are proportional to the activated particle MR for each
299304 ! bin, which is the MR of cloud drops "associated with" the mode
300305 ! thus we are assuming the cloud drop size is independent of the
@@ -384,7 +389,6 @@ subroutine sox_cldaero_update( &
384389 dqdt_aq = - dso4dt_aqrxn* cldfrc(i,k)
385390 dqdt = dqdt_aq + dqdt_wr
386391 qin(i,k,id_so2) = qin(i,k,id_so2) + dqdt * dtime
387- qin(i,k,id_so2) = MAX ( qin(i,k,id_so2), small_value )
388392
389393 ! h2o2 -- the first order loss rate for h2o2 is frh2o2_c*clwlrat(i,k)
390394 ! fwetrem = max( 0.0_r8, (1.0_r8-exp(-min(100._r8,dtime*frh2o2_c*clwlrat(i,k)))) )
@@ -394,7 +398,13 @@ subroutine sox_cldaero_update( &
394398 dqdt_aq = - dso4dt_hprxn* cldfrc(i,k)
395399 dqdt = dqdt_aq + dqdt_wr
396400 qin(i,k,id_h2o2) = qin(i,k,id_h2o2) + dqdt * dtime
397- qin(i,k,id_h2o2) = MAX ( qin(i,k,id_h2o2), small_value )
401+
402+ ! NH3
403+ if (id_nh3> 0 ) then
404+ dqdt_aq = delnh3/ dtime* cldfrc(i,k)
405+ dqdt = dqdt_aq
406+ qin(i,k,id_nh3) = qin(i,k,id_nh3) + dqdt * dtime
407+ endif
398408
399409 ! for SO4 from H2O2/O3 budgets
400410 dqdt_aqhprxn(i,k) = dso4dt_hprxn* cldfrc(i,k)
@@ -408,31 +418,52 @@ subroutine sox_cldaero_update( &
408418 ! ==============================================================
409419 ! ... Update the mixing ratios
410420 ! ==============================================================
421+ do k = 1 ,pver
422+
423+ do n = 1 , nbins
424+ do l = 1 , nspec(n)
425+ mm = bin_idx(n, l)
426+ call rad_aer_get_bin_props_by_idx(0 , n, l,spectype= spectype)
427+ if (trim (spectype) == ' sulfate' ) then
428+ qcw(:,k,mm) = max (qcw(:,k,mm), small_value )
429+ end if
430+ end do
431+ end do
432+
433+ qin(:ncol,k,id_so2) = max ( qin(:ncol,k,id_so2), small_value )
434+ qin(:ncol,k,id_h2o2) = max ( qin(:ncol,k,id_h2o2), small_value )
435+ qin(:ncol,k,id_h2so4) = max ( qin(:ncol,k,id_h2so4), small_value )
436+ if ( id_nh3 > 0 ) qin(:ncol,k,id_nh3) = max ( qin(:ncol,k,id_nh3), small_value )
437+
438+ end do
411439
412440 ! diagnostics
413441
414442 specmw_so4_amode = 96.0_r8
415- do n = 1 , nbins
416- ! while looking through all species, only dqdt_aqso4 from sulfates is gt zero
417- do l = 1 , nspec(n)
418- mm = bin_idx(n, l)
419- aqso4(:,n)= 0._r8
420- do k= 1 ,pver
421- do i= 1 ,ncol
422- aqso4(i,n)= aqso4(i,n)+ dqdt_aqso4(i,k,mm)* specmw_so4_amode/ mbar(i,k) &
423- * pdel(i,k)/ gravit ! kg/m2/s
424- enddo
425- enddo
426-
427- aqh2so4(:,n)= 0._r8
428- do k= 1 ,pver
429- do i= 1 ,ncol
430- aqh2so4(i,n)= aqh2so4(i,n)+ dqdt_aqh2so4(i,k,mm)* specmw_so4_amode/ mbar(i,k) &
431- * pdel(i,k)/ gravit ! kg/m2/s
432- enddo
433- enddo
434- end do
435- end do
443+ do n = 1 , nbins
444+ ! while looking through all species, only dqdt_aqso4 from sulfates is gt zero
445+ do l = 1 , nspec(n)
446+ call rad_aer_get_bin_props_by_idx(0 , n, l,spectype= spectype)
447+ if (trim (spectype) == ' sulfate' ) then
448+ mm = bin_idx(n, l)
449+ aqso4(:,n)= 0._r8
450+ do k= 1 ,pver
451+ do i= 1 ,ncol
452+ aqso4(i,n)= aqso4(i,n)+ dqdt_aqso4(i,k,mm)* specmw_so4_amode/ mbar(i,k) &
453+ * pdel(i,k)/ gravit ! kg/m2/s
454+ enddo
455+ enddo
456+
457+ aqh2so4(:,n)= 0._r8
458+ do k= 1 ,pver
459+ do i= 1 ,ncol
460+ aqh2so4(i,n)= aqh2so4(i,n)+ dqdt_aqh2so4(i,k,mm)* specmw_so4_amode/ mbar(i,k) &
461+ * pdel(i,k)/ gravit ! kg/m2/s
462+ enddo
463+ enddo
464+ end if
465+ end do
466+ end do
436467
437468 aqso4_h2o2(:) = 0._r8
438469 do k= 1 ,pver
0 commit comments