aboutsummaryrefslogtreecommitdiff
path: root/src/derivs.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/derivs.F90')
-rw-r--r--src/derivs.F9029
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