aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface.ccl2
-rw-r--r--param.ccl4
-rw-r--r--schedule.ccl5
-rw-r--r--src/EHFinder_Sources.F90166
-rw-r--r--src/make.code.defn1
5 files changed, 121 insertions, 57 deletions
diff --git a/interface.ccl b/interface.ccl
index 796eff6..d543c91 100644
--- a/interface.ccl
+++ b/interface.ccl
@@ -2,7 +2,7 @@
# $Header$
implements: ehfinder
-inherits: grid admbase coordgauge boundary
+inherits: grid admbase coordgauge staticconformal boundary
USES INCLUDE: Boundary.h
USES INCLUDE: MoL.h
diff --git a/param.ccl b/param.ccl
index 02d3961..33629ab 100644
--- a/param.ccl
+++ b/param.ccl
@@ -93,3 +93,7 @@ shares: grid
USES KEYWORD domain
USES KEYWORD quadrant_direction
USES KEYWORD bitant_plane
+
+shares: admbase
+
+USES KEYWORD metric_type
diff --git a/schedule.ccl b/schedule.ccl
index e728618..4465325 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -8,6 +8,11 @@ STORAGE: eh_mask_all
STORAGE: rep_mask
STORAGE: ftmp
+schedule EHFinder_ParamCheck at CCTK_PARAMCHECK
+{
+ LANG: Fortran
+} "Check parameters"
+
schedule EHFinder_Init at CCTK_POSTINITIAL
{
LANG: Fortran
diff --git a/src/EHFinder_Sources.F90 b/src/EHFinder_Sources.F90
index 1ccfee2..6101d54 100644
--- a/src/EHFinder_Sources.F90
+++ b/src/EHFinder_Sources.F90
@@ -19,6 +19,7 @@ subroutine EHFinder_Sources(CCTK_ARGUMENTS)
CCTK_REAL :: idx, idy, idz
CCTK_REAL :: a, b, c
CCTK_REAL :: g4tt, g4tx, g4ty, g4tz, g4xx, g4xy, g4xz, g4yy, g4yz, g4zz
+ CCTK_REAL :: gxxc, gxyc, gxzc, gyyc, gyzc, gzzc, psito4
CCTK_REAL :: idetg, alp2, tmp1, tmp2, tmp3
CCTK_REAL :: ratio
CCTK_REAL, dimension(3) :: maxpos
@@ -250,71 +251,124 @@ subroutine EHFinder_Sources(CCTK_ARGUMENTS)
! do j = 1+iy1, ny-iy2
! do i = 1+ix1, nx-ix2
- do k = kzl, kzr
- do j = jyl, jyr
- do i = ixl, ixr
- if ( eh_mask(i,j,k) .ge. 0 ) then
- alp2 = alp(i,j,k)**2
- g4tt = -one
- g4tx = betax(i,j,k)
- g4ty = betay(i,j,k)
- g4tz = betaz(i,j,k)
+ if ( CCTK_Equals(metric_type,'physical') ) then
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
+ if ( eh_mask(i,j,k) .ge. 0 ) then
+ alp2 = alp(i,j,k)**2
+ g4tt = -one
+ g4tx = betax(i,j,k)
+ g4ty = betay(i,j,k)
+ g4tz = betaz(i,j,k)
- tmp1 = gyy(i,j,k)*gzz(i,j,k) - gyz(i,j,k)**2
- tmp2 = gxz(i,j,k)*gyz(i,j,k) - gxy(i,j,k)*gzz(i,j,k)
- tmp3 = gxy(i,j,k)*gyz(i,j,k) - gxz(i,j,k)*gyy(i,j,k)
+ tmp1 = gyy(i,j,k)*gzz(i,j,k) - gyz(i,j,k)**2
+ tmp2 = gxz(i,j,k)*gyz(i,j,k) - gxy(i,j,k)*gzz(i,j,k)
+ tmp3 = gxy(i,j,k)*gyz(i,j,k) - gxz(i,j,k)*gyy(i,j,k)
- idetg = one / ( gxx(i,j,k)*tmp1 + gxy(i,j,k)*tmp2 + gxz(i,j,k)*tmp3 )
+ idetg = one / ( gxx(i,j,k)*tmp1 + gxy(i,j,k)*tmp2 + gxz(i,j,k)*tmp3 )
+
+ g4xx = tmp1 * idetg
+ g4xy = tmp2 * idetg
+ g4xz = tmp3 * idetg
+ g4yy = ( gxx(i,j,k)*gzz(i,j,k) - gxz(i,j,k)**2 ) * idetg
+ g4yz = ( gxy(i,j,k)*gxz(i,j,k) - gxx(i,j,k)*gyz(i,j,k) ) * idetg
+ g4zz = ( gxx(i,j,k)*gyy(i,j,k) - gxy(i,j,k)**2 ) * idetg
+
+ g4xx = alp2*g4xx - betax(i,j,k)**2
+ g4xy = alp2*g4xy - betax(i,j,k)*betay(i,j,k)
+ g4xz = alp2*g4xz - betax(i,j,k)*betaz(i,j,k)
+ g4yy = alp2*g4yy - betay(i,j,k)**2
+ g4yz = alp2*g4yz - betay(i,j,k)*betaz(i,j,k)
+ g4zz = alp2*g4zz - betaz(i,j,k)**2
+
+ a = g4tt
+ b = two * ( g4tx * dfx(i,j,k) + &
+ g4ty * dfy(i,j,k) + &
+ g4tz * dfz(i,j,k) )
+ c = g4xx * dfx(i,j,k)**2 + &
+ g4yy * dfy(i,j,k)**2 + &
+ g4zz * dfz(i,j,k)**2 + &
+ two * ( g4xy * dfx(i,j,k) * dfy(i,j,k) + &
+ g4xz * dfx(i,j,k) * dfz(i,j,k) + &
+ g4yz * dfy(i,j,k) * dfz(i,j,k) )
+
+ if ( b .lt. zero ) then
+ sf(i,j,k) = ( -b + sqrt(b**2 - four*a*c) ) / ( two*a )
+ else
+ sf(i,j,k) = two*c / ( -b - sqrt(b**2 - 4*a*c) )
+ end if
+ else
+ sf(i,j,k) = zero
+ end if
+ end do
+ end do
+ end do
+ end if
- g4xx = tmp1 * idetg
- g4xy = tmp2 * idetg
- g4xz = tmp3 * idetg
- g4yy = ( gxx(i,j,k)*gzz(i,j,k) - gxz(i,j,k)**2 ) * idetg
- g4yz = ( gxy(i,j,k)*gxz(i,j,k) - gxx(i,j,k)*gyz(i,j,k) ) * idetg
- g4zz = ( gxx(i,j,k)*gyy(i,j,k) - gxy(i,j,k)**2 ) * idetg
+ if ( CCTK_Equals(metric_type,'static conformal') ) then
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
+ if ( eh_mask(i,j,k) .ge. 0 ) then
+ alp2 = alp(i,j,k)**2
+ g4tt = -one
+ g4tx = betax(i,j,k)
+ g4ty = betay(i,j,k)
+ g4tz = betaz(i,j,k)
+
+ psito4 = psi(i,j,k)**4
+ gxxc = gxx(i,j,k) * psito4
+ gxyc = gxy(i,j,k) * psito4
+ gxzc = gxz(i,j,k) * psito4
+ gyyc = gyy(i,j,k) * psito4
+ gyzc = gyz(i,j,k) * psito4
+ gzzc = gzz(i,j,k) * psito4
+
+ tmp1 = gyyc*gzzc - gyzc**2
+ tmp2 = gxzc*gyzc - gxyc*gzzc
+ tmp3 = gxyc*gyzc - gxzc*gyyc
+
+ idetg = one / ( gxxc*tmp1 + gxyc*tmp2 + gxzc*tmp3 )
+
+ g4xx = tmp1 * idetg
+ g4xy = tmp2 * idetg
+ g4xz = tmp3 * idetg
+ g4yy = ( gxxc*gzzc - gxzc**2 ) * idetg
+ g4yz = ( gxyc*gxzc - gxxc*gyzc ) * idetg
+ g4zz = ( gxxc*gyyc - gxyc**2 ) * idetg
- g4xx = alp2*g4xx - betax(i,j,k)**2
- g4xy = alp2*g4xy - betax(i,j,k)*betay(i,j,k)
- g4xz = alp2*g4xz - betax(i,j,k)*betaz(i,j,k)
- g4yy = alp2*g4yy - betay(i,j,k)**2
- g4yz = alp2*g4yz - betay(i,j,k)*betaz(i,j,k)
- g4zz = alp2*g4zz - betaz(i,j,k)**2
+ g4xx = alp2*g4xx - betax(i,j,k)**2
+ g4xy = alp2*g4xy - betax(i,j,k)*betay(i,j,k)
+ g4xz = alp2*g4xz - betax(i,j,k)*betaz(i,j,k)
+ g4yy = alp2*g4yy - betay(i,j,k)**2
+ g4yz = alp2*g4yz - betay(i,j,k)*betaz(i,j,k)
+ g4zz = alp2*g4zz - betaz(i,j,k)**2
- a = g4tt
- b = two * ( g4tx * dfx(i,j,k) + &
- g4ty * dfy(i,j,k) + &
- g4tz * dfz(i,j,k) )
- c = g4xx * dfx(i,j,k)**2 + &
- g4yy * dfy(i,j,k)**2 + &
- g4zz * dfz(i,j,k)**2 + &
- two * ( g4xy * dfx(i,j,k) * dfy(i,j,k) + &
- g4xz * dfx(i,j,k) * dfz(i,j,k) + &
- g4yz * dfy(i,j,k) * dfz(i,j,k) )
+ a = g4tt
+ b = two * ( g4tx * dfx(i,j,k) + &
+ g4ty * dfy(i,j,k) + &
+ g4tz * dfz(i,j,k) )
+ c = g4xx * dfx(i,j,k)**2 + &
+ g4yy * dfy(i,j,k)**2 + &
+ g4zz * dfz(i,j,k)**2 + &
+ two * ( g4xy * dfx(i,j,k) * dfy(i,j,k) + &
+ g4xz * dfx(i,j,k) * dfz(i,j,k) + &
+ g4yz * dfy(i,j,k) * dfz(i,j,k) )
- if ( b .lt. zero ) then
- sf(i,j,k) = ( -b + sqrt(b**2 - four*a*c) ) / ( two*a )
+ if ( b .lt. zero ) then
+ sf(i,j,k) = ( -b + sqrt(b**2 - four*a*c) ) / ( two*a )
+ else
+ sf(i,j,k) = two*c / ( -b - sqrt(b**2 - 4*a*c) )
+ end if
+ sf(i,j,k) = sf(i,j,k)*sign(one,alp(i,j,k))
else
- sf(i,j,k) = two*c / ( -b - sqrt(b**2 - 4*a*c) )
+ sf(i,j,k) = zero
end if
- else
- sf(i,j,k) = zero
- end if
-! if ( CCTK_MyProc(cctkGH) .eq. 0 ) then
-! if ( abs(b) .gt. 0.00000001 ) then
-! print*,i,j,k
-! print*,dfx(i,j,k),dfy(i,j,k),dfz(i,j,k)
-! print*,g4tx,g4ty,g4tz
-! print*,idetg
-! print*,g4xx,g4yy,g4zz
-! print*,g4xy,g4xz,g4yz
-! print*,a,b,c
-! print*,sf(i,j,k)
-! pause
-! endif
-! end if
+ end do
end do
- end do
- end do
+ end do
+ end if
! print*,maxval(sf)
! print*
diff --git a/src/make.code.defn b/src/make.code.defn
index 47d924a..c2cafaa 100644
--- a/src/make.code.defn
+++ b/src/make.code.defn
@@ -3,6 +3,7 @@
# Source files in this directory
SRCS = EHFinder_mod.F90 \
+ EHFinder_ParamCheck.F90 \
EHFinder_Init.F90 \
MoL_Init.F90 \
EHFinder_Sources.F90 \