aboutsummaryrefslogtreecommitdiff
path: root/src/pointwise.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/pointwise.F90')
-rw-r--r--src/pointwise.F90252
1 files changed, 252 insertions, 0 deletions
diff --git a/src/pointwise.F90 b/src/pointwise.F90
new file mode 100644
index 0000000..827ad6e
--- /dev/null
+++ b/src/pointwise.F90
@@ -0,0 +1,252 @@
+! $Header$
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+module pointwise
+!!$ use derivs
+ implicit none
+ DECLARE_CCTK_PARAMETERS
+ private
+ public calc_position
+ public calc_offsets
+ public get_scalar
+ public get_vector
+ public get_tensor
+ public get_connections
+ public set_scalar
+ public set_vector
+ public set_tensor
+ public set_connections
+ public get_scalarderivs
+ public get_vectorderivs
+ public get_tensorderivs
+ public get_scalarderivs2
+ public get_vectorderivs2
+ public get_tensorderivs2
+contains
+#define TGR_INCLUDED
+#include "derivs.F90"
+#undef TGR_INCLUDED
+ subroutine calc_position (shape, i,j,k, pos)
+ integer, intent(in) :: shape(3)
+ integer, intent(in) :: i,j,k
+ integer, intent(out) :: pos
+ pos = 1 + i-1 + shape(1) * (j-1 + shape(2) * (k-1))
+ end subroutine calc_position
+ subroutine calc_offsets (shape, off)
+ integer, intent(in) :: shape(3)
+ integer, intent(out) :: off(3)
+ off(1) = 1
+ off(2) = shape(1)
+ off(3) = shape(1) * shape(2)
+ end subroutine calc_offsets
+ subroutine get_scalar (a, f, pos)
+ CCTK_REAL, intent(in) :: a(*)
+ CCTK_REAL, intent(out) :: f
+ integer, intent(in) :: pos
+ f = a(pos)
+ end subroutine get_scalar
+ subroutine get_vector (ax,ay,az, f, pos)
+ CCTK_REAL, intent(in) :: ax(*),ay(*),az(*)
+ CCTK_REAL, intent(out) :: f(3)
+ integer, intent(in) :: pos
+ f(1) = ax(pos)
+ f(2) = ay(pos)
+ f(3) = az(pos)
+ end subroutine get_vector
+ subroutine get_tensor (axx,axy,axz,ayy,ayz,azz, f, pos)
+ CCTK_REAL, intent(in) :: axx(*),axy(*),axz(*),ayy(*),ayz(*),azz(*)
+ CCTK_REAL, intent(out) :: f(3,3)
+ integer, intent(in) :: pos
+ f(1,1) = axx(pos)
+ f(1,2) = axy(pos)
+ f(1,3) = axz(pos)
+ f(2,1) = axy(pos)
+ f(2,2) = ayy(pos)
+ f(2,3) = ayz(pos)
+ f(3,1) = axz(pos)
+ f(3,2) = ayz(pos)
+ f(3,3) = azz(pos)
+ end subroutine get_tensor
+ subroutine get_connections (&
+ gammaxxx,gammaxxy,gammaxxz,gammaxyy,gammaxyz,gammaxzz, &
+ gammayxx,gammayxy,gammayxz,gammayyy,gammayyz,gammayzz, &
+ gammazxx,gammazxy,gammazxz,gammazyy,gammazyz,gammazzz, gamma, pos)
+ CCTK_REAL, intent(in) :: gammaxxx(*),gammaxxy(*),gammaxxz(*)
+ CCTK_REAL, intent(in) :: gammaxyy(*),gammaxyz(*),gammaxzz(*)
+ CCTK_REAL, intent(in) :: gammayxx(*),gammayxy(*),gammayxz(*)
+ CCTK_REAL, intent(in) :: gammayyy(*),gammayyz(*),gammayzz(*)
+ CCTK_REAL, intent(in) :: gammazxx(*),gammazxy(*),gammazxz(*)
+ CCTK_REAL, intent(in) :: gammazyy(*),gammazyz(*),gammazzz(*)
+ CCTK_REAL, intent(out) :: gamma(3,3,3)
+ integer, intent(in) :: pos
+ gamma(1,1,1) = gammaxxx(pos)
+ gamma(1,1,2) = gammaxxy(pos)
+ gamma(1,1,3) = gammaxxz(pos)
+ gamma(1,2,1) = gammaxxy(pos)
+ gamma(1,2,2) = gammaxyy(pos)
+ gamma(1,2,3) = gammaxyz(pos)
+ gamma(1,3,1) = gammaxxz(pos)
+ gamma(1,3,2) = gammaxyz(pos)
+ gamma(1,3,3) = gammaxzz(pos)
+ gamma(2,1,1) = gammayxx(pos)
+ gamma(2,1,2) = gammayxy(pos)
+ gamma(2,1,3) = gammayxz(pos)
+ gamma(2,2,1) = gammayxy(pos)
+ gamma(2,2,2) = gammayyy(pos)
+ gamma(2,2,3) = gammayyz(pos)
+ gamma(2,3,1) = gammayxz(pos)
+ gamma(2,3,2) = gammayyz(pos)
+ gamma(2,3,3) = gammayzz(pos)
+ gamma(3,1,1) = gammazxx(pos)
+ gamma(3,1,2) = gammazxy(pos)
+ gamma(3,1,3) = gammazxz(pos)
+ gamma(3,2,1) = gammazxy(pos)
+ gamma(3,2,2) = gammazyy(pos)
+ gamma(3,2,3) = gammazyz(pos)
+ gamma(3,3,1) = gammazxz(pos)
+ gamma(3,3,2) = gammazyz(pos)
+ gamma(3,3,3) = gammazzz(pos)
+ end subroutine get_connections
+ subroutine set_scalar (f, a, pos)
+ CCTK_REAL, intent(in) :: f
+ CCTK_REAL :: a(*)
+ integer, intent(in) :: pos
+ a(pos) = f
+ end subroutine set_scalar
+ subroutine set_vector (f, ax,ay,az, pos)
+ CCTK_REAL, intent(in) :: f(3)
+ CCTK_REAL :: ax(*),ay(*),az(*)
+ integer, intent(in) :: pos
+ ax(pos) = f(1)
+ ay(pos) = f(2)
+ az(pos) = f(3)
+ end subroutine set_vector
+ subroutine set_tensor (f, axx,axy,axz,ayy,ayz,azz, pos)
+ CCTK_REAL, intent(in) :: f(3,3)
+ CCTK_REAL :: axx(*),axy(*),axz(*),ayy(*),ayz(*),azz(*)
+ integer, intent(in) :: pos
+ axx(pos) = f(1,1)
+ axy(pos) = f(1,2)
+ axz(pos) = f(1,3)
+ ayy(pos) = f(2,2)
+ ayz(pos) = f(2,3)
+ azz(pos) = f(3,3)
+ end subroutine set_tensor
+ subroutine set_connections (gamma, &
+ gammaxxx,gammaxxy,gammaxxz,gammaxyy,gammaxyz,gammaxzz, &
+ gammayxx,gammayxy,gammayxz,gammayyy,gammayyz,gammayzz, &
+ gammazxx,gammazxy,gammazxz,gammazyy,gammazyz,gammazzz, pos)
+ CCTK_REAL, intent(in) :: gamma(3,3,3)
+ CCTK_REAL :: gammaxxx(*),gammaxxy(*),gammaxxz(*)
+ CCTK_REAL :: gammaxyy(*),gammaxyz(*),gammaxzz(*)
+ CCTK_REAL :: gammayxx(*),gammayxy(*),gammayxz(*)
+ CCTK_REAL :: gammayyy(*),gammayyz(*),gammayzz(*)
+ CCTK_REAL :: gammazxx(*),gammazxy(*),gammazxz(*)
+ CCTK_REAL :: gammazyy(*),gammazyz(*),gammazzz(*)
+ integer, intent(in) :: pos
+ gammaxxx(pos) = gamma(1,1,1)
+ gammaxxy(pos) = gamma(1,1,2)
+ gammaxxz(pos) = gamma(1,1,3)
+ gammaxyy(pos) = gamma(1,2,2)
+ gammaxyz(pos) = gamma(1,2,3)
+ gammaxzz(pos) = gamma(1,3,3)
+ gammayxx(pos) = gamma(2,1,1)
+ gammayxy(pos) = gamma(2,1,2)
+ gammayxz(pos) = gamma(2,1,3)
+ gammayyy(pos) = gamma(2,2,2)
+ gammayyz(pos) = gamma(2,2,3)
+ gammayzz(pos) = gamma(2,3,3)
+ gammazxx(pos) = gamma(3,1,1)
+ gammazxy(pos) = gamma(3,1,2)
+ gammazxz(pos) = gamma(3,1,3)
+ gammazyy(pos) = gamma(3,2,2)
+ gammazyz(pos) = gamma(3,2,3)
+ gammazzz(pos) = gamma(3,3,3)
+ end subroutine set_connections
+ subroutine get_scalarderivs (a, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: a(*)
+ CCTK_REAL, intent(out) :: f(3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ call get_derivs (a, f, pos, off, dx)
+ end subroutine get_scalarderivs
+ subroutine get_vectorderivs (ax,ay,az, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: ax(*),ay(*),az(*)
+ CCTK_REAL, intent(out) :: f(3,3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ CCTK_REAL :: fx(3),fy(3),fz(3)
+ call get_derivs (ax, fx, pos, off, dx)
+ call get_derivs (ay, fy, pos, off, dx)
+ call get_derivs (az, fz, pos, off, dx)
+ f(1,:) = fx
+ f(2,:) = fy
+ f(3,:) = fz
+ end subroutine get_vectorderivs
+ subroutine get_tensorderivs (axx,axy,axz,ayy,ayz,azz, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: axx(*),axy(*),axz(*),ayy(*),ayz(*),azz(*)
+ CCTK_REAL, intent(out) :: f(3,3,3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ CCTK_REAL :: fxx(3),fxy(3),fxz(3),fyy(3),fyz(3),fzz(3)
+ call get_derivs (axx, fxx, pos, off, dx)
+ call get_derivs (axy, fxy, pos, off, dx)
+ call get_derivs (axz, fxz, pos, off, dx)
+ call get_derivs (ayy, fyy, pos, off, dx)
+ call get_derivs (ayz, fyz, pos, off, dx)
+ call get_derivs (azz, fzz, pos, off, dx)
+ f(1,1,:) = fxx
+ f(1,2,:) = fxy
+ f(1,3,:) = fxz
+ f(2,1,:) = fxy
+ f(2,2,:) = fyy
+ f(2,3,:) = fyz
+ f(3,1,:) = fxz
+ f(3,2,:) = fyz
+ f(3,3,:) = fzz
+ end subroutine get_tensorderivs
+ subroutine get_scalarderivs2 (a, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: a(*)
+ CCTK_REAL, intent(out) :: f(3,3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ call get_derivs2 (a, f, pos, off, dx)
+ end subroutine get_scalarderivs2
+ subroutine get_vectorderivs2 (ax,ay,az, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: ax(*),ay(*),az(*)
+ CCTK_REAL, intent(out) :: f(3,3,3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ CCTK_REAL :: fx(3,3),fy(3,3),fz(3,3)
+ call get_derivs2 (ax, fx, pos, off, dx)
+ call get_derivs2 (ay, fy, pos, off, dx)
+ call get_derivs2 (az, fz, pos, off, dx)
+ f(1,:,:) = fx
+ f(2,:,:) = fy
+ f(3,:,:) = fz
+ end subroutine get_vectorderivs2
+ subroutine get_tensorderivs2 (axx,axy,axz,ayy,ayz,azz, f, pos, off, dx)
+ CCTK_REAL, intent(in) :: axx(*),axy(*),axz(*),ayy(*),ayz(*),azz(*)
+ CCTK_REAL, intent(out) :: f(3,3,3,3)
+ integer, intent(in) :: pos, off(3)
+ CCTK_REAL, intent(in) :: dx(3)
+ CCTK_REAL :: fxx(3,3),fxy(3,3),fxz(3,3),fyy(3,3),fyz(3,3),fzz(3,3)
+ call get_derivs2 (axx, fxx, pos, off, dx)
+ call get_derivs2 (axy, fxy, pos, off, dx)
+ call get_derivs2 (axz, fxz, pos, off, dx)
+ call get_derivs2 (ayy, fyy, pos, off, dx)
+ call get_derivs2 (ayz, fyz, pos, off, dx)
+ call get_derivs2 (azz, fzz, pos, off, dx)
+ f(1,1,:,:) = fxx
+ f(1,2,:,:) = fxy
+ f(1,3,:,:) = fxz
+ f(2,1,:,:) = fxy
+ f(2,2,:,:) = fyy
+ f(2,3,:,:) = fyz
+ f(3,1,:,:) = fxz
+ f(3,2,:,:) = fyz
+ f(3,3,:,:) = fzz
+ end subroutine get_tensorderivs2
+end module pointwise