electric_potential_at Subroutine

public subroutine electric_potential_at(mesh, r, softening, phi)

全要素電荷を点電荷近似で総和し、softening付きで観測点 r の電位を返す。

Arguments

Type IntentOptional Attributes Name
type(mesh_type), intent(in) :: mesh

要素重心 centers と要素電荷 q_elem を保持したメッシュ情報。

real(kind=dp), intent(in) :: r(3)
real(kind=dp), intent(in) :: softening

特異点回避のために距離2乗へ加える softening 長さ [m]。

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

観測点 r における電位 [V]。


Called by

proc~~electric_potential_at~~CalledByGraph proc~electric_potential_at electric_potential_at proc~compute_face_average_potential compute_face_average_potential proc~compute_face_average_potential->proc~electric_potential_at proc~reservoir_face_velocity_correction reservoir_face_velocity_correction proc~reservoir_face_velocity_correction->proc~compute_face_average_potential 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 electric_potential_at(mesh, r, softening, phi)
    type(mesh_type), intent(in) :: mesh
    real(dp), intent(in) :: r(3)
    real(dp), intent(in) :: softening
    real(dp), intent(out) :: phi

    integer(i32) :: i
    real(dp) :: soft2, r2, inv_r, phi_sum
    real(dp) :: rx, ry, rz, dx, dy, dz

    phi_sum = 0.0d0
    soft2 = softening*softening
    rx = r(1)
    ry = r(2)
    rz = r(3)

    !$omp simd reduction(+:phi_sum) private(dx,dy,dz,r2,inv_r)
    do i = 1, mesh%nelem
      dx = rx - mesh%center_x(i)
      dy = ry - mesh%center_y(i)
      dz = rz - mesh%center_z(i)
      r2 = dx*dx + dy*dy + dz*dz + soft2
      inv_r = 1.0d0/sqrt(r2)
      phi_sum = phi_sum + mesh%q_elem(i)*inv_r
    end do

    phi = k_coulomb*phi_sum
  end subroutine electric_potential_at