PartMC
2.3.0
|
The aero_particle_t structure and associated subroutines. More...
Data Types | |
type | aero_particle_t |
Single aerosol particle data structure. More... | |
Public Member Functions | |
subroutine | aero_particle_allocate (aero_particle) |
Allocates memory in an aero_particle_t. More... | |
subroutine | aero_particle_allocate_size (aero_particle, n_spec, n_source) |
Allocates an aero_particle_t of the given size. More... | |
subroutine | aero_particle_deallocate (aero_particle) |
Deallocates memory associated with an aero_particle_t. More... | |
subroutine | aero_particle_copy (aero_particle_from, aero_particle_to) |
Copies a particle. More... | |
subroutine | aero_particle_shift (aero_particle_from, aero_particle_to) |
Shift data from one aero_particle_t to another and free the first one. More... | |
subroutine | aero_particle_zero (aero_particle) |
Resets an aero_particle to be zero. More... | |
subroutine | aero_particle_new_id (aero_particle) |
Assigns a globally-unique new ID number to the particle. More... | |
subroutine | aero_particle_set_create_time (aero_particle, create_time) |
Sets the creation times for the particle. More... | |
subroutine | aero_particle_set_vols (aero_particle, vols) |
Sets the aerosol particle volumes. More... | |
subroutine | aero_particle_set_source (aero_particle, i_source) |
Sets the aerosol particle source. More... | |
subroutine | aero_particle_set_weight (aero_particle, i_group, i_class) |
Sets the aerosol particle weight group. More... | |
elemental real(kind=dp) function | aero_particle_mass (aero_particle, aero_data) |
Total mass of the particle (kg). More... | |
elemental real(kind=dp) function | aero_particle_species_mass (aero_particle, i_spec, aero_data) |
Mass of a single species in the particle (kg). More... | |
real(kind=dp) function, dimension(aero_data%n_spec) | aero_particle_species_masses (aero_particle, aero_data) |
Mass of all species in the particle (kg). More... | |
elemental real(kind=dp) function | aero_particle_moles (aero_particle, aero_data) |
Total moles in the particle (1). More... | |
elemental real(kind=dp) function | aero_particle_volume (aero_particle) |
Total volume of the particle (m^3). More... | |
elemental real(kind=dp) function | aero_particle_dry_volume (aero_particle, aero_data) |
Total dry volume of the particle (m^3). More... | |
elemental real(kind=dp) function | aero_particle_volume_maybe_dry (aero_particle, aero_data, dry_volume) |
Total volume (dry or wet) of the particle (m^3). More... | |
elemental real(kind=dp) function | aero_particle_radius (aero_particle) |
Total radius of the particle (m). More... | |
elemental real(kind=dp) function | aero_particle_dry_radius (aero_particle, aero_data) |
Total dry radius of the particle (m). More... | |
elemental real(kind=dp) function | aero_particle_diameter (aero_particle) |
Total diameter of the particle (m). More... | |
elemental real(kind=dp) function | aero_particle_dry_diameter (aero_particle, aero_data) |
Total dry diameter of the particle (m). More... | |
real(kind=dp) function | aero_particle_density (aero_particle, aero_data) |
Average density of the particle (kg/m^3). More... | |
real(kind=dp) function | aero_particle_average_solute_quantity (aero_particle, aero_data, quantity) |
Returns the volume-average of the non-water elements of quantity. More... | |
real(kind=dp) function | aero_particle_total_solute_quantity (aero_particle, aero_data, quantity) |
Returns the volume-total of the non-water elements of quantity. More... | |
real(kind=dp) function | aero_particle_average_water_quantity (aero_particle, aero_data, quantity) |
Returns the water element of quantity. More... | |
real(kind=dp) function | aero_particle_total_water_quantity (aero_particle, aero_data, quantity) |
Returns the volume-total of the water element of quantity. More... | |
real(kind=dp) function | aero_particle_water_molec_weight (aero_data) |
Returns the water molecular weight. (kg/mole) More... | |
real(kind=dp) function | aero_particle_solute_molec_weight (aero_particle, aero_data) |
Returns the average of the solute molecular weight (kg/mole). More... | |
real(kind=dp) function | aero_particle_solute_num_ions (aero_particle, aero_data) |
Returns the average of the solute ion number (1). More... | |
real(kind=dp) function | aero_particle_water_density (aero_data) |
Returns the water density (kg/m^3). More... | |
real(kind=dp) function | aero_particle_solute_density (aero_particle, aero_data) |
Returns the average of the solute densities (kg/m^3). More... | |
real(kind=dp) function | aero_particle_water_mass (aero_particle, aero_data) |
Returns the water mass (kg). More... | |
real(kind=dp) function | aero_particle_solute_mass (aero_particle, aero_data) |
Returns the total solute mass (kg). More... | |
real(kind=dp) function | aero_particle_solute_volume (aero_particle, aero_data) |
Returns the total solute volume (m^3). More... | |
real(kind=dp) function | aero_particle_solute_radius (aero_particle, aero_data) |
Returns the total solute radius (m). More... | |
real(kind=dp) function | aero_particle_solute_kappa (aero_particle, aero_data) |
Returns the average of the solute kappas (1). More... | |
real(kind=dp) function | aero_particle_approx_crit_rel_humid (aero_particle, aero_data, env_state) |
Returns the approximate critical relative humidity (1). More... | |
real(kind=dp) function | aero_particle_crit_rel_humid (aero_particle, aero_data, env_state) |
Returns the critical relative humidity (1). More... | |
real(kind=dp) function | aero_particle_crit_diameter (aero_particle, aero_data, env_state) |
Returns the critical diameter (m). More... | |
subroutine | aero_particle_coagulate (aero_particle_1, aero_particle_2, aero_particle_new) |
Coagulate two particles together to make a new one. The new particle will not have its ID set. More... | |
integer function | pmc_mpi_pack_size_aero_particle (val) |
Determines the number of bytes required to pack the given value. More... | |
subroutine | pmc_mpi_pack_aero_particle (buffer, position, val) |
Packs the given value into the buffer, advancing position. More... | |
subroutine | pmc_mpi_unpack_aero_particle (buffer, position, val) |
Unpacks the given value from the buffer, advancing position. More... | |
Public Attributes | |
integer, save | next_id = 1 |
Next unique ID number to use for a particle. More... | |
The aero_particle_t structure and associated subroutines.
Definition at line 9 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_allocate | ( | type(aero_particle_t), intent(out) | aero_particle | ) |
Allocates memory in an aero_particle_t.
[out] | aero_particle | Particle to init. |
Definition at line 66 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_allocate_size | ( | type(aero_particle_t), intent(out) | aero_particle, |
integer, intent(in) | n_spec, | ||
integer, intent(in) | n_source | ||
) |
Allocates an aero_particle_t of the given size.
[out] | aero_particle | Particle to init. |
[in] | n_spec | Number of species. |
[in] | n_source | Number of sources. |
Definition at line 80 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_approx_crit_rel_humid | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
type(env_state_t), intent(in) | env_state | ||
) |
Returns the approximate critical relative humidity (1).
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | env_state | Environment state. |
Definition at line 749 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_average_solute_quantity | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
real(kind=dp), dimension(:), intent(in) | quantity | ||
) |
Returns the volume-average of the non-water elements of quantity.
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | quantity | Quantity to average. |
Definition at line 479 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_average_water_quantity | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
real(kind=dp), dimension(:), intent(in) | quantity | ||
) |
Returns the water element of quantity.
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | quantity | Quantity to average. |
Definition at line 528 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_coagulate | ( | type(aero_particle_t), intent(in) | aero_particle_1, |
type(aero_particle_t), intent(in) | aero_particle_2, | ||
type(aero_particle_t), intent(inout) | aero_particle_new | ||
) |
Coagulate two particles together to make a new one. The new particle will not have its ID set.
[in] | aero_particle_1 | First particle. |
[in] | aero_particle_2 | Second particle. |
[in,out] | aero_particle_new | Result particle. |
Definition at line 889 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_copy | ( | type(aero_particle_t), intent(in) | aero_particle_from, |
type(aero_particle_t), intent(inout) | aero_particle_to | ||
) |
Copies a particle.
[in] | aero_particle_from | Reference particle. |
[in,out] | aero_particle_to | Destination particle (already alloced on entry). |
Definition at line 111 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_crit_diameter | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
type(env_state_t), intent(in) | env_state | ||
) |
Returns the critical diameter (m).
The method is as follows. We need to solve the polynomial equation given in Eq. (7) of
N. Riemer, M. West, R. Zaveri, D. Easter, "Estimating black carbon aging time-scales with a particle-resolved aerosol model", Aerosol Science 41, 143-158, 2010.
This is the equation:
where ,
, and
. There is unique solution for
, as shown in the above paper.
The polynomial has first derivative which factors like
The first term is positive for and the second is positive for
. If we take
then we have that for
. Similarly,
so for
(as this ensures that
and
).
Thus for $D > D_0$ we have that the first and second derivatives of $f(D)$ are positive, so Newton's method starting from will converge quadratically. This is the scheme used here.
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | env_state | Environment state. |
Definition at line 838 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_crit_rel_humid | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
type(env_state_t), intent(in) | env_state | ||
) |
Returns the critical relative humidity (1).
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | env_state | Environment state. |
Definition at line 771 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_deallocate | ( | type(aero_particle_t), intent(inout) | aero_particle | ) |
Deallocates memory associated with an aero_particle_t.
[in,out] | aero_particle | Particle to free. |
Definition at line 98 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_density | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Average density of the particle (kg/m^3).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 464 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_diameter | ( | type(aero_particle_t), intent(in) | aero_particle | ) |
Total diameter of the particle (m).
[in] | aero_particle | Particle. |
Definition at line 436 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_dry_diameter | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Total dry diameter of the particle (m).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 448 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_dry_radius | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Total dry radius of the particle (m).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 420 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_dry_volume | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Total dry volume of the particle (m^3).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 363 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_mass | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Total mass of the particle (kg).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 287 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_moles | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Total moles in the particle (1).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Definition at line 335 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_new_id | ( | type(aero_particle_t), intent(inout) | aero_particle | ) |
Assigns a globally-unique new ID number to the particle.
[in,out] | aero_particle | Particle to set ID for. |
Definition at line 214 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_radius | ( | type(aero_particle_t), intent(in) | aero_particle | ) |
Total radius of the particle (m).
[in] | aero_particle | Particle. |
Definition at line 408 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_set_create_time | ( | type(aero_particle_t), intent(inout) | aero_particle, |
real(kind=dp), intent(in) | create_time | ||
) |
Sets the creation times for the particle.
[in,out] | aero_particle | Particle to set time for. |
[in] | create_time | Creation time. |
Definition at line 227 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_set_source | ( | type(aero_particle_t), intent(inout) | aero_particle, |
integer, intent(in) | i_source | ||
) |
Sets the aerosol particle source.
[in,out] | aero_particle | Particle. |
[in] | i_source | Source number for the particle. |
Definition at line 256 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_set_vols | ( | type(aero_particle_t), intent(inout) | aero_particle, |
real(kind=dp), dimension(size(aero_particle%vol)), intent(in) | vols | ||
) |
Sets the aerosol particle volumes.
[in,out] | aero_particle | Particle. |
[in] | vols | New volumes. |
Definition at line 242 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_set_weight | ( | type(aero_particle_t), intent(inout) | aero_particle, |
integer, intent(in), optional | i_group, | ||
integer, intent(in), optional | i_class | ||
) |
Sets the aerosol particle weight group.
[in,out] | aero_particle | Particle. |
[in] | i_group | Weight group number for the particle. |
[in] | i_class | Weight class number for the particle. |
Definition at line 270 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_shift | ( | type(aero_particle_t), intent(inout) | aero_particle_from, |
type(aero_particle_t), intent(inout) | aero_particle_to | ||
) |
Shift data from one aero_particle_t to another and free the first one.
This is roughly equivalent to aero_particle_copy(from, to) followed by aero_particle_deallocate(from), but faster and with different memory allocation requirements.
[in,out] | aero_particle_from | Reference particle (will be deallocated on return). |
[in,out] | aero_particle_to | Destination particle (not allocated on entry). |
Definition at line 158 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_density | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the average of the solute densities (kg/m^3).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 628 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_kappa | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the average of the solute kappas (1).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 713 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_mass | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the total solute mass (kg).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 661 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_molec_weight | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the average of the solute molecular weight (kg/mole).
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
Definition at line 581 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_num_ions | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the average of the solute ion number (1).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 598 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_radius | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the total solute radius (m).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 697 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_solute_volume | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the total solute volume (m^3).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 677 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_species_mass | ( | type(aero_particle_t), intent(in) | aero_particle, |
integer, intent(in) | i_spec, | ||
type(aero_data_t), intent(in) | aero_data | ||
) |
Mass of a single species in the particle (kg).
[in] | aero_particle | Particle. |
[in] | i_spec | Species number to find mass of. |
[in] | aero_data | Aerosol data. |
Definition at line 301 of file aero_particle.F90.
real(kind=dp) function, dimension(aero_data%n_spec) pmc_aero_particle::aero_particle_species_masses | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Mass of all species in the particle (kg).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
Return value.
Definition at line 319 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_total_solute_quantity | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
real(kind=dp), dimension(:), intent(in) | quantity | ||
) |
Returns the volume-total of the non-water elements of quantity.
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | quantity | Quantity to total. |
Definition at line 502 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_total_water_quantity | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
real(kind=dp), dimension(:), intent(in) | quantity | ||
) |
Returns the volume-total of the water element of quantity.
[in] | aero_particle | Aerosol particle. |
[in] | aero_data | Aerosol data. |
[in] | quantity | Quantity to total. |
Definition at line 546 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_volume | ( | type(aero_particle_t), intent(in) | aero_particle | ) |
Total volume of the particle (m^3).
[in] | aero_particle | Particle. |
Definition at line 351 of file aero_particle.F90.
elemental real(kind=dp) function pmc_aero_particle::aero_particle_volume_maybe_dry | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data, | ||
logical, intent(in) | dry_volume | ||
) |
Total volume (dry or wet) of the particle (m^3).
[in] | aero_particle | Particle. |
[in] | aero_data | Aerosol data. |
[in] | dry_volume | Whether the desired volume is dry (otherwise wet). |
Definition at line 386 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_water_density | ( | type(aero_data_t), intent(in) | aero_data | ) |
Returns the water density (kg/m^3).
[in] | aero_data | Aerosol data. |
Definition at line 615 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_water_mass | ( | type(aero_particle_t), intent(in) | aero_particle, |
type(aero_data_t), intent(in) | aero_data | ||
) |
Returns the water mass (kg).
[in] | aero_data | Aerosol data. |
[in] | aero_particle | Aerosol particle. |
Definition at line 645 of file aero_particle.F90.
real(kind=dp) function pmc_aero_particle::aero_particle_water_molec_weight | ( | type(aero_data_t), intent(in) | aero_data | ) |
Returns the water molecular weight. (kg/mole)
[in] | aero_data | Aerosol data. |
Definition at line 567 of file aero_particle.F90.
subroutine pmc_aero_particle::aero_particle_zero | ( | type(aero_particle_t), intent(inout) | aero_particle | ) |
Resets an aero_particle to be zero.
[in,out] | aero_particle | Particle to zero. |
Definition at line 189 of file aero_particle.F90.
subroutine pmc_aero_particle::pmc_mpi_pack_aero_particle | ( | character, dimension(:), intent(inout) | buffer, |
integer, intent(inout) | position, | ||
type(aero_particle_t), intent(in) | val | ||
) |
Packs the given value into the buffer, advancing position.
[in,out] | buffer | Memory buffer. |
[in,out] | position | Current buffer position. |
[in] | val | Value to pack. |
Definition at line 963 of file aero_particle.F90.
integer function pmc_aero_particle::pmc_mpi_pack_size_aero_particle | ( | type(aero_particle_t), intent(in) | val | ) |
Determines the number of bytes required to pack the given value.
[in] | val | Value to pack. |
Definition at line 937 of file aero_particle.F90.
subroutine pmc_aero_particle::pmc_mpi_unpack_aero_particle | ( | character, dimension(:), intent(inout) | buffer, |
integer, intent(inout) | position, | ||
type(aero_particle_t), intent(inout) | val | ||
) |
Unpacks the given value from the buffer, advancing position.
[in,out] | buffer | Memory buffer. |
[in,out] | position | Current buffer position. |
[in,out] | val | Value to pack. |
Definition at line 999 of file aero_particle.F90.
integer, save pmc_aero_particle::next_id = 1 |
Next unique ID number to use for a particle.
Definition at line 59 of file aero_particle.F90.