diff options
Diffstat (limited to 'src/derivs.F90')
-rw-r--r-- | src/derivs.F90 | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/derivs.F90 b/src/derivs.F90 index 1d425c8..1413f7d 100644 --- a/src/derivs.F90 +++ b/src/derivs.F90 @@ -10,6 +10,7 @@ module derivs private public get_derivs public get_derivs2 + public get_derivs3 contains #endif subroutine get_derivs (a, f, pos, off, dx) @@ -41,6 +42,34 @@ contains & - a(pos-off(2)+off(3)) + a(pos+off(2)+off(3))) / (4*dx(2)*dx(3)) f(3,2) = f(2,3) end subroutine get_derivs2 + subroutine get_derivs3 (a, f, pos, off, dx) + CCTK_REAL, intent(in) :: a(*) + CCTK_REAL, intent(out) :: f(3,3,3) + integer, intent(in) :: pos, off(3) + CCTK_REAL, intent(in) :: dx(3) + integer :: i + f(1,1,1) = (- a(pos+2*off(1)) + 2*a(pos+off(1)) - 2*a(pos-off(1)) + a(pos-2*off(1))) / (2*dx(1)**3) + f(2,1,1) = (a(pos+off(1)+off(2)) - 2*a(pos+off(2)) + a(pos-off(1)+off(2)) - a(pos+off(1)-off(2)) + 2*a(pos-off(2)) - a(pos-off(1)-off(2))) / (2*dx(1)*dx(1)*dx(2)) + f(3,1,1) = (a(pos+off(1)+off(3)) - 2*a(pos+off(3)) + a(pos-off(1)+off(3)) - a(pos+off(1)-off(3)) + 2*a(pos-off(3)) - a(pos-off(1)-off(3))) / (2*dx(1)*dx(1)*dx(3)) + f(1,2,1) = f(2,1,1) + f(2,2,1) = (a(pos+off(1)+off(2)) - 2*a(pos+off(1)) + a(pos+off(1)-off(2)) - a(pos-off(1)+off(2)) + 2*a(pos-off(1)) - a(pos-off(1)-off(2))) / (2*dx(1)*dx(2)*dx(2)) + f(3,2,1) = (a(pos+off(1)+off(2)+1) - a(pos-off(1)+off(2)+1) - a(pos+off(1)-off(2)+1) + a(pos-off(1)-off(2)+1) - a(pos+off(1)+off(2)-1) + a(pos-off(1)+off(2)-1) + a(pos+off(1)-off(2)-1) - a(pos-off(1)-off(2)-1)) * (8*dx(1)*dx(2)*dx(3)) + f(1,3,1) = f(3,3,1) + f(2,3,1) = f(3,2,1) + f(3,3,1) = (a(pos+off(1)+off(3)) - 2*a(pos+off(1)) + a(pos+off(1)-off(3)) - a(pos-off(1)+off(3)) + 2*a(pos-off(1)) - a(pos-off(1)-off(3))) / (2*dx(1)*dx(3)*dx(3)) + f(:,1,2) = f(:,2,1) + f(1,2,2) = f(2,2,1) + f(2,2,2) = (- a(pos+2*off(2)) + 2*a(pos+off(2)) - 2*a(pos-off(2)) + a(pos-2*off(2))) / (2*dx(2)**3) + f(3,2,2) = (a(pos+off(2)+1) - 2*a(pos+off(3)) + a(pos-off(2)+1) - a(pos+off(2)-1) + 2*a(pos-off(3)) - a(pos-off(2)-1)) / (2*dx(2)*dx(2)*dx(3)) + f(1,3,2) = f(3,2,1) + f(2,3,2) = f(3,2,2) + f(3,3,2) = (a(pos+off(2)+1) - 2*a(pos+off(2)) + a(pos+off(2)-1) - a(pos-off(2)+1) + 2*a(pos-off(2)) - a(pos-off(2)-1)) / (2*dx(2)*dx(3)*dx(3)) + f(:,1,3) = f(:,3,1) + f(:,2,3) = f(:,3,2) + f(1,3,3) = f(3,3,1) + f(2,3,3) = f(3,3,2) + f(3,3,3) = (- a(pos+2*off(3)) + 2*a(pos+off(3)) - 2*a(pos-off(3)) + a(pos-2*off(3))) / (2*dx(3)**3) + end subroutine get_derivs3 #ifndef TGR_INCLUDED end module derivs #endif |