@@ -303,7 +303,7 @@ end subroutine set_list_idx
303303 !- -----------------------------------------------------------------------------
304304 ! returns aerosol number, volume concentrations, and bulk hygroscopicity
305305 !- -----------------------------------------------------------------------------
306- subroutine loadaer ( self , aero_props , istart , istop , k , m , cs , phase , &
306+ subroutine loadaer ( self , aero_props , ncol , nlev , m , cs , phase , &
307307 naerosol , vaerosol , hygro , errnum , errstr , pom_hygro )
308308
309309 use aerosol_properties_mod, only: aerosol_properties
@@ -312,17 +312,15 @@ subroutine loadaer( self, aero_props, istart, istop, k, m, cs, phase, &
312312 class(aerosol_state), intent (in ) :: self
313313 class(aerosol_properties), intent (in ) :: aero_props
314314
315- integer , intent (in ) :: istart ! start column index (1 <= istart <= istop <= pcols)
316- integer , intent (in ) :: istop ! stop column index
317- integer , intent (in ) :: k ! level index
315+ integer , intent (in ) :: ncol, nlev
318316 integer , intent (in ) :: m ! mode or bin index
319317 real (r8 ), intent (in ) :: cs(:,:) ! air density (kg/m3)
320318 integer , intent (in ) :: phase ! phase of aerosol: 1 for interstitial, 2 for cloud-borne, 3 for sum
321319
322320 ! output arguments
323- real (r8 ), intent (out ) :: naerosol(:) ! number conc (1/m3)
324- real (r8 ), intent (out ) :: vaerosol(:) ! volume conc (m3/m3)
325- real (r8 ), intent (out ) :: hygro(:) ! bulk hygroscopicity of mode
321+ real (r8 ), intent (out ) :: naerosol(:,: ) ! number conc (1/m3)
322+ real (r8 ), intent (out ) :: vaerosol(:,: ) ! volume conc (m3/m3)
323+ real (r8 ), intent (out ) :: hygro(:,: ) ! bulk hygroscopicity of mode
326324
327325 integer , intent (out ) :: errnum
328326 character (len=* ), intent (out ) :: errstr
@@ -335,15 +333,13 @@ subroutine loadaer( self, aero_props, istart, istop, k, m, cs, phase, &
335333 real (r8 ) :: specdens, spechygro
336334 character (len= aero_name_len) :: spectype
337335
338- real (r8 ) :: vol(istart:istop ) ! aerosol volume mixing ratio
339- integer :: i, l
336+ real (r8 ) :: vol(ncol,nlev ) ! aerosol volume mixing ratio
337+ integer :: l
340338 !- ------------------------------------------------------------------------------
341339 errnum = 0
342340
343- do i = istart, istop
344- vaerosol(i) = 0._r8
345- hygro(i) = 0._r8
346- end do
341+ vaerosol(:,:) = 0._r8
342+ hygro(:,:) = 0._r8
347343
348344 do l = 1 , aero_props% nspecies(m)
349345
@@ -357,59 +353,42 @@ subroutine loadaer( self, aero_props, istart, istop, k, m, cs, phase, &
357353 endif
358354
359355 if (phase == 3 ) then
360- do i = istart, istop
361- vol(i) = max (raer(i,k) + qqcw(i,k), 0._r8 )/ specdens
362- end do
356+ vol(:ncol,:) = max (raer(:ncol,:) + qqcw(:ncol,:), 0._r8 )/ specdens
363357 else if (phase == 2 ) then
364- do i = istart, istop
365- vol(i) = max (qqcw(i,k), 0._r8 )/ specdens
366- end do
358+ vol(:ncol,:) = max (qqcw(:ncol,:), 0._r8 )/ specdens
367359 else if (phase == 1 ) then
368- do i = istart, istop
369- vol(i) = max (raer(i,k), 0._r8 )/ specdens
370- end do
360+ vol(:ncol,:) = max (raer(:ncol,:), 0._r8 )/ specdens
371361 else
372362 errnum = - 1
373363 write (errstr,* )' phase = ' ,phase,' in aerosol_state::loadaer not recognized'
374364 return
375365 end if
376366
377- do i = istart, istop
378- vaerosol(i) = vaerosol(i) + vol(i)
379- hygro(i) = hygro(i) + vol(i)* spechygro
380- end do
381-
367+ vaerosol(:ncol,:) = vaerosol(:ncol,:) + vol(:ncol,:)
368+ hygro(:ncol,:) = hygro(:ncol,:) + vol(:ncol,:)* spechygro
382369 end do
383370
384- do i = istart, istop
385- if (vaerosol(i) > 1.0e-30_r8 ) then
386- hygro(i) = hygro(i)/ (vaerosol(i))
387- vaerosol(i) = vaerosol(i)* cs(i,k)
388- else
389- hygro(i) = 0.0_r8
390- vaerosol(i) = 0.0_r8
391- end if
392- end do
371+ where (vaerosol(:ncol,:) > 1.0e-30_r8 )
372+ hygro(:ncol,:) = hygro(:ncol,:)/ (vaerosol(:ncol,:))
373+ vaerosol(:ncol,:) = vaerosol(:ncol,:)* cs(:ncol,:)
374+ elsewhere
375+ hygro(:ncol,:) = 0._r8
376+ vaerosol(:ncol,:) = 0._r8
377+ end where
393378
394379 ! aerosol number mixing ratios (#/kg)
395380 call self% get_ambient_num(m, raer)
396381 call self% get_cldbrne_num(m, qqcw)
397382 if (phase == 3 ) then
398- do i = istart, istop
399- naerosol(i) = (raer(i,k) + qqcw(i,k))* cs(i,k) ! #/kg -> #/m3
400- end do
383+ naerosol(:ncol,:) = (raer(:ncol,:) + qqcw(:ncol,:))* cs(:ncol,:) ! #/kg -> #/m3
401384 else if (phase == 2 ) then
402- do i = istart, istop
403- naerosol(i) = qqcw(i,k)* cs(i,k)
404- end do
385+ naerosol(:ncol,:) = qqcw(:ncol,:)* cs(:ncol,:)
405386 else
406- do i = istart, istop
407- naerosol(i) = raer(i,k)* cs(i,k)
408- end do
387+ naerosol(:ncol,:) = raer(:ncol,:)* cs(:ncol,:)
409388 end if
410389
411390 ! adjust number
412- call aero_props% apply_number_limits( naerosol, vaerosol, istart, istop , m )
391+ call aero_props% apply_number_limits( naerosol, vaerosol, ncol, nlev , m )
413392
414393 end subroutine loadaer
415394
0 commit comments