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(out) | :: | vmin_normal |
無限遠法線速度の下限 [m/s]。 |
||
| real(kind=dp), | intent(out) | :: | barrier_normal |
法線エネルギー障壁 |
||
| type(mesh_type), | intent(in), | optional | :: | mesh |
現在バッチ開始時点の電荷分布メッシュ(補正時に必要)。 |
subroutine reservoir_face_velocity_correction(sim, spec, vmin_normal, barrier_normal, mesh) type(sim_config), intent(in) :: sim type(particle_species_spec), intent(in) :: spec real(dp), intent(out) :: vmin_normal real(dp), intent(out) :: barrier_normal type(mesh_type), intent(in), optional :: mesh real(dp) :: phi_face, delta_phi vmin_normal = 0.0d0 barrier_normal = 0.0d0 select case (trim(lower_ascii(sim%reservoir_potential_model))) case ('none') return case ('infinity_barrier') if (.not. present(mesh)) then error stop 'sim.reservoir_potential_model="infinity_barrier" requires mesh in init_particle_batch_from_config.' end if call compute_face_average_potential(mesh, sim, spec, phi_face) delta_phi = phi_face - sim%phi_infty barrier_normal = 2.0d0*spec%q_particle*delta_phi/spec%m_particle if (.not. ieee_is_finite(barrier_normal)) then error stop 'reservoir potential correction produced non-finite barrier.' end if if (barrier_normal > 0.0d0) then vmin_normal = sqrt(barrier_normal) else vmin_normal = 0.0d0 end if case default error stop 'Unknown sim.reservoir_potential_model in runtime.' end select end subroutine reservoir_face_velocity_correction