304 type(scalar_field),
intent(INOUT) :: div
305 type(scalar_field),
intent(IN) :: fields(1:3)
306 type(int_bounds_info),
intent(IN) :: ix_s, iy_s, iz_s
310 real(wp) :: divergence
313# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
315# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
316#if defined(MFC_OpenACC)
317# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
319# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
320#elif defined(MFC_OpenMP)
321# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
323# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
325# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
327# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
329# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
331# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
333 do x = ix_s%beg, ix_s%end
334 do y = iy_s%beg, iy_s%end
335 do z = iz_s%beg, iz_s%end
337 if (x == ix_s%beg)
then
338 divergence = (-3._wp*fields(1)%sf(x, y, z) + 4._wp*fields(1)%sf(x + 1, y, z) - fields(1)%sf(x + 2, y, z))/(
x_cc(x + 2) -
x_cc(x))
339 else if (x == ix_s%end)
then
340 divergence = (+3._wp*fields(1)%sf(x, y, z) - 4._wp*fields(1)%sf(x - 1, y, z) + fields(1)%sf(x - 2, y, z))/(
x_cc(x) -
x_cc(x - 2))
342 divergence = (fields(1)%sf(x + 1, y, z) - fields(1)%sf(x - 1, y, z))/(
x_cc(x + 1) -
x_cc(x - 1))
346 if (y == iy_s%beg)
then
347 divergence = divergence + (-3._wp*fields(2)%sf(x, y, z) + 4._wp*fields(2)%sf(x, y + 1, z) - fields(2)%sf(x, y + 2, z))/(
y_cc(y + 2) -
y_cc(y))
348 else if (y == iy_s%end)
then
349 divergence = divergence + (+3._wp*fields(2)%sf(x, y, z) - 4._wp*fields(2)%sf(x, y - 1, z) + fields(2)%sf(x, y - 2, z))/(
y_cc(y) -
y_cc(y - 2))
351 divergence = divergence + (fields(2)%sf(x, y + 1, z) - fields(2)%sf(x, y - 1, z))/(
y_cc(y + 1) -
y_cc(y - 1))
356 if (z == iz_s%beg)
then
357 divergence = divergence + (-3._wp*fields(3)%sf(x, y, z) + 4._wp*fields(3)%sf(x, y, z + 1) - fields(3)%sf(x, y, z + 2))/(
z_cc(z + 2) -
z_cc(z))
358 else if (z == iz_s%end)
then
359 divergence = divergence + (+3._wp*fields(3)%sf(x, y, z) - 4._wp*fields(3)%sf(x, y, z - 1) + fields(3)%sf(x, y, z - 2))/(
z_cc(z) -
z_cc(z - 2))
361 divergence = divergence + (fields(3)%sf(x, y, z + 1) - fields(3)%sf(x, y, z - 1))/(
z_cc(z + 1) -
z_cc(z - 1))
365 div%sf(x, y, z) = div%sf(x, y, z) + divergence
371# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
373# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
374#if defined(MFC_OpenACC)
375# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
377# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
378#elif defined(MFC_OpenMP)
379# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
381# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
383# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
385# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
387# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
407 fd_number_in, fd_order_in, offset_s)
410 integer,
intent(IN) :: q
411 integer,
intent(IN) :: local_buff_size, fd_number_in, fd_order_in
412 type(int_bounds_info),
optional,
intent(IN) :: offset_s
413 real(wp),
allocatable,
dimension(:, :),
intent(INOUT) :: fd_coeff_s
416 dimension(-local_buff_size:q + local_buff_size), &
421 if (
present(offset_s))
then
423 le = q + offset_s%end
429#ifdef MFC_POST_PROCESS
430 if (
allocated(fd_coeff_s))
deallocate (fd_coeff_s)
431 allocate (fd_coeff_s(-fd_number_in:fd_number_in, lb:le))
435 if (fd_order_in == 1)
then
437 fd_coeff_s(-1, i) = 0._wp
438 fd_coeff_s(0, i) = -1._wp/(s_cc(i + 1) - s_cc(i))
439 fd_coeff_s(1, i) = -fd_coeff_s(0, i)
443 elseif (fd_order_in == 2)
then
445 fd_coeff_s(-1, i) = -1._wp/(s_cc(i + 1) - s_cc(i - 1))
446 fd_coeff_s(0, i) = 0._wp
447 fd_coeff_s(1, i) = -fd_coeff_s(-1, i)
453 fd_coeff_s(-2, i) = 1._wp/(s_cc(i - 2) - 8._wp*s_cc(i - 1) - s_cc(i + 2) + 8._wp*s_cc(i + 1))
454 fd_coeff_s(-1, i) = -8._wp*fd_coeff_s(-2, i)
455 fd_coeff_s(0, i) = 0._wp
456 fd_coeff_s(1, i) = -fd_coeff_s(-1, i)
457 fd_coeff_s(2, i) = -fd_coeff_s(-2, i)
subroutine s_compute_finite_difference_coefficients(q, s_cc, fd_coeff_s, local_buff_size, fd_number_in, fd_order_in, offset_s)
The purpose of this subroutine is to compute the finite- difference coefficients for the centered sch...