全要素電荷を点電荷近似で総和し、softening付きで観測点 r の電位を返す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mesh_type), | intent(in) | :: | mesh |
要素重心 |
||
| real(kind=dp), | intent(in) | :: | r(3) | |||
| real(kind=dp), | intent(in) | :: | softening |
特異点回避のために距離2乗へ加える softening 長さ [m]。 |
||
| real(kind=dp), | intent(out) | :: | phi |
観測点 |
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