reservoir_face_velocity_correction Subroutine

public subroutine reservoir_face_velocity_correction(sim, spec, vmin_normal, barrier_normal, mesh)

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(out) :: vmin_normal

無限遠法線速度の下限 [m/s]。

real(kind=dp), intent(out) :: barrier_normal

法線エネルギー障壁 2 q Δφ / m [m^2/s^2]。

type(mesh_type), intent(in), optional :: mesh

現在バッチ開始時点の電荷分布メッシュ(補正時に必要)。


Calls

proc~~reservoir_face_velocity_correction~~CallsGraph proc~reservoir_face_velocity_correction reservoir_face_velocity_correction proc~compute_face_average_potential compute_face_average_potential proc~reservoir_face_velocity_correction->proc~compute_face_average_potential proc~lower_ascii lower_ascii proc~reservoir_face_velocity_correction->proc~lower_ascii proc~electric_potential_at electric_potential_at proc~compute_face_average_potential->proc~electric_potential_at proc~resolve_face_sampling_geometry resolve_face_sampling_geometry proc~compute_face_average_potential->proc~resolve_face_sampling_geometry proc~resolve_face_sampling_geometry->proc~lower_ascii

Called by

proc~~reservoir_face_velocity_correction~~CalledByGraph proc~reservoir_face_velocity_correction reservoir_face_velocity_correction proc~init_particle_batch_from_config init_particle_batch_from_config proc~init_particle_batch_from_config->proc~reservoir_face_velocity_correction

Source Code

  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