Used for l
computation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(shellig_type), | intent(inout) | :: | me |
subroutine feldi(me) class(shellig_type), intent(inout) :: me real(wp) :: f, x, y, z integer :: i, ih, ihmax, il, imax, k, last, m ihmax = me%nmax * me%nmax + 1 last = ihmax + me%nmax + me%nmax imax = me%nmax + me%nmax - 1 do i = ihmax, last me%h(i) = me%g(i) end do do k = 1, 3, 2 i = imax ih = ihmax do il = ih - i f = 2.0_wp / real(i - k + 2, wp) x = me%xi(1) * f y = me%xi(2) * f z = me%xi(3) * (f + f) i = i - 2 if ((i - 1) >= 0) then if ((i - 1) > 0) then do m = 3, i, 2 me%h(il + m + 1) = me%g(il + m + 1) + z * me%h(ih + m + 1) + x * (me%h(ih + m + 3) - & me%h(ih + m - 1)) - y * (me%h(ih + m + 2) + me%h(ih + m - 2)) me%h(il + m) = me%g(il + m) + z * me%h(ih + m) + x * (me%h(ih + m + 2) - & me%h(ih + m - 2)) + y * (me%h(ih + m + 3) + me%h(ih + m - 1)) end do end if me%h(il + 2) = me%g(il + 2) + z * me%h(ih + 2) + x * me%h(ih + 4) - y * (me%h(ih + 3) + me%h(ih)) me%h(il + 1) = me%g(il + 1) + z * me%h(ih + 1) + y * me%h(ih + 4) + x * (me%h(ih + 3) - me%h(ih)) end if me%h(il) = me%g(il) + z * me%h(ih) + 2.0_wp * (x * me%h(ih + 1) + y * me%h(ih + 2)) ih = il if (i < k) exit end do end do end subroutine feldi