229 el_list, n_pts, resx, resy, resz)
231 integer,
intent(in) :: n_pts
232 real(kind=
rp),
intent(inout) :: rst(3, n_pts)
233 real(kind=
rp),
intent(in) :: pt_x(n_pts)
234 real(kind=
rp),
intent(in) :: pt_y(n_pts)
235 real(kind=
rp),
intent(in) :: pt_z(n_pts)
236 real(kind=
rp),
intent(inout) :: resx(n_pts)
237 real(kind=
rp),
intent(inout) :: resy(n_pts)
238 real(kind=
rp),
intent(inout) :: resz(n_pts)
239 integer,
intent(in) :: el_list(n_pts)
240 real(kind=
rp) :: r_legendre(1, this%Xh%lx)
241 real(kind=
rp) :: s_legendre(this%Xh%lx, 1)
242 real(kind=
rp) :: t_legendre(this%Xh%lx, 1)
243 real(kind=
rp) :: dr_legendre(1, this%Xh%lx)
244 real(kind=
rp) :: ds_legendre(this%Xh%lx, 1)
245 real(kind=
rp) :: dt_legendre(this%Xh%lx, 1)
246 real(kind=
rp) :: jac(3,3)
247 real(kind=
xp) :: rst_d(3), jacinv(3,3)
250 integer :: i, j, e, iter, lx
255 if (n_pts .lt. 1)
return
263 do while (.not. converged)
266 r_legendre(1, 1) = 1.0
267 r_legendre(1, 2) = rst(1,i)
268 s_legendre(1, 1) = 1.0
269 s_legendre(2, 1) = rst(2,i)
270 t_legendre(1, 1) = 1.0
271 t_legendre(2, 1) = rst(3,i)
272 dr_legendre(1, 1) = 0.0
273 dr_legendre(1, 2) = 1.0
274 ds_legendre(1, 1) = 0.0
275 ds_legendre(2, 1) = 1.0
276 dt_legendre(1, 1) = 0.0
277 dt_legendre(2, 1) = 1.0
279 r_legendre(1, j+1) = ((2.0_xp*(j-1.0_xp)+1.0_xp) * rst(1,i) &
280 * r_legendre(1, j) - (j-1.0_xp) &
281 * r_legendre(1, j-1)) / (
real(j,
xp))
282 s_legendre(j+1, 1) = ((2.0_xp*(j-1.0_xp)+1.0_xp) * rst(2,i) &
283 * s_legendre(j, 1) - (j-1.0_xp) &
284 * s_legendre(j-1, 1))/(
real(j,
xp))
285 t_legendre(j+1, 1) = ((2.0_xp*(j-1.0_xp)+1.0_xp) * rst(3,i) &
286 * t_legendre(j, 1) - (j-1.0_xp) &
287 * t_legendre(j-1, 1))/(
real(j,
xp))
288 dr_legendre(1, j+1) = ((j-1.0_xp)+1.0_xp) * r_legendre(1, j) &
289 + rst(1,i)*dr_legendre(1, j)
290 ds_legendre(j+1, 1) = ((j-1.0_xp)+1.0_xp) * s_legendre(j, 1) &
291 + rst(2,i)*ds_legendre(j, 1)
292 dt_legendre(j+1, 1) = ((j-1.0_xp)+1.0_xp) * t_legendre(j, 1) &
293 + rst(3,i)*dt_legendre(j, 1)
295 e = (el_list(i))*this%Xh%lxyz + 1
298 r_legendre, s_legendre, t_legendre)
300 r_legendre, s_legendre, t_legendre)
302 r_legendre, s_legendre, t_legendre)
306 dr_legendre, s_legendre, t_legendre)
308 dr_legendre, s_legendre, t_legendre)
310 dr_legendre, s_legendre, t_legendre)
312 r_legendre, ds_legendre, t_legendre)
314 r_legendre, ds_legendre, t_legendre)
316 r_legendre, ds_legendre, t_legendre)
318 r_legendre, s_legendre, dt_legendre)
320 r_legendre, s_legendre, dt_legendre)
322 r_legendre, s_legendre, dt_legendre)
323 resx(i) = pt_x(i) - resx(i)
324 resy(i) = pt_y(i) - resy(i)
325 resz(i) = pt_z(i) - resz(i)
327 jacinv =
matinv39(jac(1,1), jac(1,2), jac(1,3),&
328 jac(2,1), jac(2,2), jac(2,3),&
329 jac(3,1), jac(3,2), jac(3,3))
331 rst_d(1) = (resx(i)*jacinv(1,1) &
332 + jacinv(2,1)*resy(i) &
333 + jacinv(3,1)*resz(i))
334 rst_d(2) = (resx(i)*jacinv(1,2) &
335 + jacinv(2,2)*resy(i) &
336 + jacinv(3,2)*resz(i))
337 rst_d(3) = (resx(i)*jacinv(1,3) &
338 + jacinv(2,3)*resy(i) &
339 + jacinv(3,3)*resz(i))
342 if (norm2(
real(rst_d,
xp)) .le. this%tol)
then
345 if (norm2(
real(rst_d,
xp)) .gt. 4.0)
then
349 rst(1,i) = rst(1,i) + rst_d(1)
350 rst(2,i) = rst(2,i) + rst_d(2)
351 rst(3,i) = rst(3,i) + rst_d(3)
353 converged = conv_pts .eq. 1
354 if (iter .ge. this%max_iter) converged = .true.