compute_macro_particles_for_species Subroutine

public subroutine compute_macro_particles_for_species(sim, spec, residual, count, vmin_normal, batch_duration_scale, number_density_override, w_particle_override, temperature_k_override, drift_velocity_override)

reservoir_face 用に、物理流量と残差から今バッチのマクロ粒子数を決める。

Arguments

Type IntentOptional Attributes Name
type(sim_config), intent(in) :: sim

ボックス境界・バッチ時間などのシミュレーション設定。

type(particle_species_spec), intent(in) :: spec

reservoir_face 粒子種設定。

real(kind=dp), intent(inout) :: residual

前バッチから繰り越した端数。

integer(kind=i32), intent(out) :: count

今バッチで生成するマクロ粒子数。

real(kind=dp), intent(in), optional :: vmin_normal

法線速度の下限 [m/s](省略時は 0)。

real(kind=dp), intent(in), optional :: batch_duration_scale
real(kind=dp), intent(in), optional :: number_density_override

数密度の上書き値 [1/m^3]。

real(kind=dp), intent(in), optional :: w_particle_override

マクロ粒子重みの上書き値。

real(kind=dp), intent(in), optional :: temperature_k_override

温度の上書き値 [K]。

real(kind=dp), intent(in), optional :: drift_velocity_override(3)

Calls

proc~~compute_macro_particles_for_species~~CallsGraph proc~compute_macro_particles_for_species compute_macro_particles_for_species proc~compute_macro_particles_for_batch compute_macro_particles_for_batch proc~compute_macro_particles_for_species->proc~compute_macro_particles_for_batch proc~species_number_density_m3~2 species_number_density_m3 proc~compute_macro_particles_for_species->proc~species_number_density_m3~2 proc~species_temperature_k~2 species_temperature_k proc~compute_macro_particles_for_species->proc~species_temperature_k~2 proc~compute_face_area_from_bounds compute_face_area_from_bounds proc~compute_macro_particles_for_batch->proc~compute_face_area_from_bounds proc~compute_inflow_flux_from_drifting_maxwellian compute_inflow_flux_from_drifting_maxwellian proc~compute_macro_particles_for_batch->proc~compute_inflow_flux_from_drifting_maxwellian

Called by

proc~~compute_macro_particles_for_species~~CalledByGraph proc~compute_macro_particles_for_species compute_macro_particles_for_species proc~init_particle_batch_from_config init_particle_batch_from_config proc~init_particle_batch_from_config->proc~compute_macro_particles_for_species

Source Code

  subroutine compute_macro_particles_for_species( &
    sim, spec, residual, count, vmin_normal, batch_duration_scale, number_density_override, w_particle_override, &
    temperature_k_override, drift_velocity_override &
    )
    type(sim_config), intent(in) :: sim
    type(particle_species_spec), intent(in) :: spec
    real(dp), intent(inout) :: residual
    integer(i32), intent(out) :: count
    real(dp), intent(in), optional :: vmin_normal
    real(dp), intent(in), optional :: batch_duration_scale
    real(dp), intent(in), optional :: number_density_override
    real(dp), intent(in), optional :: w_particle_override
    real(dp), intent(in), optional :: temperature_k_override
    real(dp), intent(in), optional :: drift_velocity_override(3)

    real(dp) :: number_density_m3, effective_batch_duration, w_particle, temperature_k_local, drift_velocity_local(3)

    number_density_m3 = species_number_density_m3(spec)
    if (present(number_density_override)) number_density_m3 = number_density_override
    w_particle = spec%w_particle
    if (present(w_particle_override)) w_particle = w_particle_override
    temperature_k_local = species_temperature_k(spec)
    if (present(temperature_k_override)) temperature_k_local = temperature_k_override
    drift_velocity_local = spec%drift_velocity
    if (present(drift_velocity_override)) drift_velocity_local = drift_velocity_override
    effective_batch_duration = sim%batch_duration
    if (present(batch_duration_scale)) effective_batch_duration = sim%batch_duration*batch_duration_scale
    if (present(vmin_normal)) then
      call compute_macro_particles_for_batch( &
        number_density_m3, temperature_k_local, spec%m_particle, drift_velocity_local, sim%box_min, sim%box_max, &
        spec%inject_face, spec%pos_low, spec%pos_high, effective_batch_duration, w_particle, residual, count, &
        vmin_normal=vmin_normal &
        )
    else
      call compute_macro_particles_for_batch( &
        number_density_m3, temperature_k_local, spec%m_particle, drift_velocity_local, sim%box_min, sim%box_max, &
        spec%inject_face, spec%pos_low, spec%pos_high, effective_batch_duration, w_particle, residual, count &
        )
    end if
  end subroutine compute_macro_particles_for_species