reservoir_face 用に、物理流量と残差から今バッチのマクロ粒子数を決める。
| Type | Intent | Optional | 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) |
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