注入面の局所電位差が面平均 reservoir 近似の特徴エネルギーに対して大きい場合に警告する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(sim_config), | intent(in) | :: | sim | |||
| type(particle_species_spec), | intent(in) | :: | spec | |||
| real(kind=dp), | intent(in) | :: | phi_mean | |||
| real(kind=dp), | intent(in) | :: | phi_std | |||
| real(kind=dp), | intent(in) | :: | phi_min | |||
| real(kind=dp), | intent(in) | :: | phi_max |
subroutine warn_face_average_potential_variation(sim, spec, phi_mean, phi_std, phi_min, phi_max) real(dp), parameter :: variation_warn_ratio = 0.1_dp type(sim_config), intent(in) :: sim type(particle_species_spec), intent(in) :: spec real(dp), intent(in) :: phi_mean, phi_std, phi_min, phi_max real(dp) :: inward_normal(3), normal_drift, characteristic_energy, variation_energy, ratio, phi_scale if (trim(lower_ascii(spec%velocity_distribution)) /= 'maxwellian') return phi_scale = max(1.0_dp, abs(phi_mean), abs(phi_min), abs(phi_max)) if (phi_std <= 256.0_dp*epsilon(1.0_dp)*phi_scale) return call resolve_inward_normal(spec%inject_face, inward_normal) normal_drift = dot_product(spec%drift_velocity, inward_normal) characteristic_energy = k_boltzmann*species_temperature_k_local(spec) + & 0.5_dp*spec%m_particle*normal_drift*normal_drift variation_energy = abs(spec%q_particle)*phi_std if (characteristic_energy > 0.0_dp) then ratio = variation_energy/characteristic_energy if (ratio <= variation_warn_ratio) return else ratio = huge(1.0_dp) end if write (error_unit, '(a,a,a,a,a,i0,a,es12.4,a,es12.4,a,es12.4,a,es12.4,a,es12.4)') & 'WARNING: reservoir face-average potential may be inaccurate: species=', trim(spec%species_key), & ' face=', trim(spec%inject_face), ' samples=', sim%injection_face_phi_grid_n**2, & ' mean_V=', phi_mean, ' std_V=', phi_std, ' min_V=', phi_min, ' max_V=', phi_max, & ' energy_ratio=', ratio flush (error_unit) end subroutine warn_face_average_potential_variation