302 type(scalar_field),
intent(INOUT) :: div
303 type(scalar_field),
intent(IN) :: fields(1:3)
304 type(int_bounds_info),
intent(IN) :: ix_s, iy_s, iz_s
308 real(wp) :: divergence
311# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
313# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
314#if defined(MFC_OpenACC)
315# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
317# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
318#elif defined(MFC_OpenMP)
319# 26 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
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 do x = ix_s%beg, ix_s%end
332 do y = iy_s%beg, iy_s%end
333 do z = iz_s%beg, iz_s%end
335 if (x == ix_s%beg)
then
336 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))
337 else if (x == ix_s%end)
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) -
x_cc(x - 2))
340 divergence = (fields(1)%sf(x + 1, y, z) - fields(1)%sf(x - 1, y, z))/(
x_cc(x + 1) -
x_cc(x - 1))
344 if (y == iy_s%beg)
then
345 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))
346 else if (y == iy_s%end)
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) -
y_cc(y - 2))
349 divergence = divergence + (fields(2)%sf(x, y + 1, z) - fields(2)%sf(x, y - 1, z))/(
y_cc(y + 1) -
y_cc(y - 1))
354 if (z == iz_s%beg)
then
355 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))
356 else if (z == iz_s%end)
then
357 divergence = divergence + (+3._wp*fields(3)%sf(x, y, z) - 4._wp*fields(3)%sf(x, y, z - 1) + fields(2)%sf(x, y, z - 2))/(
z_cc(z) -
z_cc(z - 2))
359 divergence = divergence + (fields(3)%sf(x, y, z + 1) - fields(3)%sf(x, y, z - 1))/(
z_cc(z + 1) -
z_cc(z - 1))
363 div%sf(x, y, z) = div%sf(x, y, z) + divergence
369# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
371# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
372#if defined(MFC_OpenACC)
373# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
375# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
376#elif defined(MFC_OpenMP)
377# 64 "/home/runner/work/MFC/MFC/src/common/m_finite_differences.fpp"
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"
405 fd_number_in, fd_order_in, offset_s)
408 integer,
intent(IN) :: q
409 integer,
intent(IN) :: local_buff_size, fd_number_in, fd_order_in
410 type(int_bounds_info),
optional,
intent(IN) :: offset_s
411 real(wp),
allocatable,
dimension(:, :),
intent(INOUT) :: fd_coeff_s
414 dimension(-local_buff_size:q + local_buff_size), &
419 if (
present(offset_s))
then
421 le = q + offset_s%end
427#ifdef MFC_POST_PROCESS
428 if (
allocated(fd_coeff_s))
deallocate (fd_coeff_s)
429 allocate (fd_coeff_s(-fd_number_in:fd_number_in, lb:le))
433 if (fd_order_in == 1)
then
435 fd_coeff_s(-1, i) = 0._wp
436 fd_coeff_s(0, i) = -1._wp/(s_cc(i + 1) - s_cc(i))
437 fd_coeff_s(1, i) = -fd_coeff_s(0, i)
441 elseif (fd_order_in == 2)
then
443 fd_coeff_s(-1, i) = -1._wp/(s_cc(i + 1) - s_cc(i - 1))
444 fd_coeff_s(0, i) = 0._wp
445 fd_coeff_s(1, i) = -fd_coeff_s(-1, i)
451 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))
452 fd_coeff_s(-1, i) = -8._wp*fd_coeff_s(-2, i)
453 fd_coeff_s(0, i) = 0._wp
454 fd_coeff_s(1, i) = -fd_coeff_s(-1, i)
455 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...