@@ -33,65 +33,13 @@ subroutine f_aero_state_init(ptr_c, n_part, aero_data_ptr_c) bind(C)
3333 type (c_ptr) :: ptr_c, aero_data_ptr_c
3434 real (c_double), intent (in ) :: n_part
3535
36- ! local testing ! TODO #141
37- type (aero_dist_t) :: aero_dist_init
38- real (kind= dp), parameter , dimension (2 ) :: num_conc = &
39- [3.2d9 , 2.9d9 ] ! TODO #141
40- real (kind= dp), parameter , dimension (2 ) :: diams = [2d-8 , 1.16d-7 ] ! TODO #141
41- real (kind= dp), parameter , dimension (2 ) :: std = [1.45 ,1.65 ] ! TODO #141
42- character (len= 10 ), parameter , dimension (2 ) :: mode_names = [" init_small" ," init_large" ]
43- integer :: n_spec, n_modes, i_mode, i_spec
44- integer :: n_part_added, source
45- logical , parameter :: hardcoded_init = .true.
46-
4736 call c_f_pointer(ptr_c, ptr_f)
4837 call c_f_pointer(aero_data_ptr_c, aero_data_ptr_f)
4938
5039 call aero_state_zero(ptr_f)
5140 call fractal_set_spherical(aero_data_ptr_f% fractal)
52-
53- if (hardcoded_init) then
54- n_modes = 2 ! TODO #141
55- n_spec = aero_data_n_spec(aero_data_ptr_f)
56- if (n_spec > 1 ) then
57- allocate (aero_dist_init% mode(n_modes))
58- do i_mode = 1 ,n_modes
59- aero_dist_init% mode(i_mode)% name = mode_names(i_mode)
60- aero_dist_init% mode(i_mode)% type = AERO_MODE_TYPE_LOG_NORMAL
61- aero_dist_init% mode(i_mode)% char_radius = diams(i_mode) / 2
62- aero_dist_init% mode(i_mode)% log10_std_dev_radius = &
63- log10 (std(i_mode))
64- aero_dist_init% mode(i_mode)% num_conc = num_conc(i_mode)
65- allocate (aero_dist_init% mode(i_mode)% vol_frac(n_spec))
66- aero_dist_init% mode(i_mode)% vol_frac = 0.0
67- if (i_mode == 1 ) then
68- i_spec = aero_data_spec_by_name(aero_data_ptr_f, " SO4" )
69- aero_dist_init% mode(i_mode)% vol_frac(i_spec) = 1.0
70- else
71- i_spec = aero_data_spec_by_name(aero_data_ptr_f, " OC" )
72- aero_dist_init% mode(i_mode)% vol_frac(i_spec) = .8
73- i_spec = aero_data_spec_by_name(aero_data_ptr_f, " BC" )
74- aero_dist_init% mode(i_mode)% vol_frac(i_spec) = .2
75- end if
76- allocate (aero_dist_init% mode(i_mode)% vol_frac_std(n_spec))
77- aero_dist_init% mode(i_mode)% vol_frac_std = 0.0
78- source = aero_data_source_by_name(aero_data_ptr_f, mode_names(i_mode))
79- aero_dist_init% mode(i_mode)% source = source
80- end do
81- end if
82- end if
83-
8441 call aero_state_set_weight(ptr_f, aero_data_ptr_f, AERO_STATE_WEIGHT_NUMMASS_SOURCE)
8542 call aero_state_set_n_part_ideal(ptr_f, n_part)
86-
87- if (hardcoded_init) then
88- call aero_state_add_aero_dist_sample(ptr_f, aero_data_ptr_f, &
89- aero_dist_init, 1d0 , 0d0 , &
90- .true. , & ! TODO #121 run_part_opt%allow_doubling, &
91- .true. , & ! TODO #121 run_part_opt%allow_halving)
92- n_part_added)
93- end if
94-
9543 end subroutine
9644
9745 subroutine f_aero_state_len (ptr_c , len ) bind(C)
@@ -238,7 +186,7 @@ subroutine f_aero_state_crit_rel_humids(ptr_c, aero_data_ptr_c, &
238186
239187 ! TODO #130: Add include, exclude, group and groups
240188 subroutine f_aero_state_mixing_state_metrics (ptr_c , aero_data_ptr_c , &
241- d_alpha , d_gamma , chi ) bind(C) ! , include, exclude, group, groups)&
189+ d_alpha , d_gamma , chi ) bind(C)
242190
243191 type (aero_state_t), pointer :: ptr_f = > null ()
244192 type (aero_data_t), pointer :: aero_data_ptr_f = > null ()
@@ -310,4 +258,26 @@ subroutine f_aero_state_rand_particle(ptr_c, ptr_particle_c) bind(C)
310258
311259 end subroutine
312260
261+ subroutine f_aero_state_add_aero_dist_sample (ptr_c , ptr_aero_data_c , &
262+ ptr_aero_dist_c , sample_prop , create_time , allow_doubling , &
263+ allow_halving , n_part_add ) bind(C)
264+
265+ type (c_ptr) :: ptr_c, ptr_aero_data_c, ptr_aero_dist_c
266+ type (aero_state_t), pointer :: ptr_f = > null ()
267+ type (aero_data_t), pointer :: ptr_aero_data_f = > null ()
268+ type (aero_dist_t), pointer :: ptr_aero_dist_f = > null ()
269+ real (c_double) :: sample_prop, create_time
270+ logical (c_bool) :: allow_doubling, allow_halving
271+ integer (c_int) :: n_part_add
272+
273+ call c_f_pointer(ptr_c, ptr_f)
274+ call c_f_pointer(ptr_aero_data_c,ptr_aero_data_f)
275+ call c_f_pointer(ptr_aero_dist_c,ptr_aero_dist_f)
276+
277+ call aero_state_add_aero_dist_sample(ptr_f, ptr_aero_data_f, &
278+ ptr_aero_dist_f, sample_prop, create_time, LOGICAL (allow_doubling), &
279+ logical (allow_halving), n_part_add)
280+
281+ end subroutine
282+
313283end module
0 commit comments