Go to the documentation of this file.
28 subroutine exact_soln(bin_grid, aero_data, do_coagulation, &
29 coag_kernel_type, aero_dist_init, scenario, env_state, time, &
37 logical,
intent(in) :: do_coagulation
39 integer,
intent(in) :: coag_kernel_type
47 real(kind=
dp),
intent(in) :: time
51 if (.not. do_coagulation)
then
52 call die_msg(287486666,
'Exact solutions require coagulation ' &
53 //
'(can set coag_kernel to "zero").')
58 call die_msg(189372109,
'Exact solution with particle loss ' &
59 //
'requires using the "none" coag_kernel.')
65 call die_msg(285407619,
"Exact solution with additive kernel " &
66 //
"requires exactly 1 initial distribution mode, not: " &
69 if (aero_dist_init%mode(1)%type /= aero_mode_type_exp)
then
70 call die_msg(373749499,
"Exact solution with additive kernel " &
71 //
"requires exactly 1 initial distribution mode of " &
72 //
"exponential type, not: " &
73 // aero_mode_type_to_string(aero_dist_init%mode(1)%type))
76 aero_dist_init%mode(1)%num_conc, &
77 aero_dist_init%mode(1)%char_radius, env_state, aero_binned)
81 call die_msg(827813758,
"Exact solution with constant kernel " &
82 //
"requires exactly 1 initial distribution mode, not: " &
85 if (aero_dist_init%mode(1)%type /= aero_mode_type_exp)
then
86 call die_msg(574495367,
"Exact solution with constant kernel " &
87 //
"requires exactly 1 initial distribution mode of " &
88 //
"exponential type, not: " &
89 // aero_mode_type_to_string(aero_dist_init%mode(1)%type))
92 aero_dist_init%mode(1)%num_conc, &
93 aero_dist_init%mode(1)%char_radius, env_state, aero_binned)
96 call soln_zero(bin_grid, aero_data, time, aero_dist_init, &
97 scenario, env_state, aero_binned)
99 call die_msg(932981721,
"No exact solutions with " &
100 //
"coagulation kernel type " &
subroutine exact_soln(bin_grid, aero_data, do_coagulation, coag_kernel_type, aero_dist_init, scenario, env_state, time, aero_binned)
elemental integer function aero_dist_n_mode(aero_dist)
Return the number of modes.
Exact solutions for various simulations.
Additive coagulation kernel.
The scenario_t structure and associated subroutines.
subroutine soln_additive_exp(bin_grid, aero_data, time, num_conc, radius_at_mean_vol, env_state, aero_binned)
Exact solution with the additive coagulation kernel and exponential initial condition.
Constant coagulation kernel.
subroutine die_msg(code, error_msg)
Error immediately.
integer, parameter scenario_loss_function_none
Type code for a zero loss function.
integer, parameter dp
Kind of a double precision real number.
Generic coagulation kernel.
subroutine soln_zero(bin_grid, aero_data, time, aero_dist_init, scenario, env_state, aero_binned)
Exact solution with the zero coagulation kernel. Only useful for testing emissions,...
Current environment state.
integer, parameter coag_kernel_type_additive
Type code for an additive kernel.
character(len=pmc_util_convert_string_len) function integer_to_string(val)
Convert an integer to a string format.
The aero_dist_t structure and associated subroutines.
integer, parameter coag_kernel_type_constant
Type code for a constant kernel.
Constant kernel equal to zero.
The env_state_t structure and associated subroutines.
Aerosol material properties and associated data.
A complete aerosol distribution, consisting of several modes.
Common utility subroutines.
The aero_binned_t structure and associated subroutines.
character(len=coag_kernel_type_len) function coag_kernel_type_to_string(coag_kernel_type)
Return a string representation of a kernel type.
Aerosol number and volume distributions stored per bin.
The bin_grid_t structure and associated subroutines.
The aero_data_t structure and associated subroutines.
integer, parameter coag_kernel_type_zero
Type code for a zero kernel.
1D grid, either logarithmic or linear.
subroutine soln_constant_exp(bin_grid, aero_data, time, num_conc, radius_at_mean_vol, env_state, aero_binned)
Exact solution with a constant coagulation kernel and an exponential initial condition.