aboutsummaryrefslogtreecommitdiff
path: root/src/EHFinder_Sources.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/EHFinder_Sources.F90')
-rw-r--r--src/EHFinder_Sources.F90192
1 files changed, 101 insertions, 91 deletions
diff --git a/src/EHFinder_Sources.F90 b/src/EHFinder_Sources.F90
index cdf2095..65e0488 100644
--- a/src/EHFinder_Sources.F90
+++ b/src/EHFinder_Sources.F90
@@ -15,7 +15,7 @@ subroutine EHFinder_Sources(CCTK_ARGUMENTS)
DECLARE_CCTK_ARGUMENTS
DECLARE_CCTK_FUNCTIONS
- CCTK_INT :: i, j, k
+ CCTK_INT :: i, j, k, l
CCTK_REAL :: idx, idy, idz, mdelta
CCTK_REAL :: a, b, c
CCTK_REAL :: g3xx, g3xy, g3xz, g3yy, g3yz, g3zz
@@ -41,132 +41,142 @@ subroutine EHFinder_Sources(CCTK_ARGUMENTS)
if ( CCTK_EQUALS ( surface_direction, 'inward' ) ) ssign = -one
if ( CCTK_EQUALS ( upwind_type, 'intrinsic' ) ) then
- do k = kzl, kzr
- do j = jyl, jyr
- do i = ixl, ixr
- if ( f(i,j,k) .gt. fmin_bound - three*mdelta ) then
+ do l = 1, eh_number_level_sets
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
+ if ( f(i,j,k,l) .gt. fmin_bound - three*mdelta ) then
#include "include/centered_second2.h"
- else
+ else
#include "include/upwind_second2.h"
- end if
+ end if
+ end do
end do
end do
end do
end if
if ( CCTK_EQUALS ( upwind_type, 'shift' ) ) then
- do k = kzl, kzr
- do j = jyl, jyr
- do i = ixl, ixr
+ do l = 1, eh_number_level_sets
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
#include "include/upwind_shift_second2.h"
+ end do
end do
end do
end do
end if
if ( CCTK_EQUALS ( upwind_type, 'characteristic' ) ) then
- do k = kzl, kzr
- do j = jyl, jyr
- do i = ixl, ixr
+ do l = 1, eh_number_level_sets
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
#include "include/metric.h"
#include "include/upwind_characteristic_second2.h"
+ end do
end do
end do
end do
end if
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
-
- 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 )
+ do l = 1, eh_number_level_sets
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
+ if ( eh_mask(i,j,k,l) .ge. 0 ) then
+ alp2 = alp(i,j,k)**2
- g3xx = tmp1 * idetg
- g3xy = tmp2 * idetg
- g3xz = tmp3 * idetg
- g3yy = ( gxx(i,j,k)*gzz(i,j,k) - gxz(i,j,k)**2 ) * idetg
- g3yz = ( gxy(i,j,k)*gxz(i,j,k) - gxx(i,j,k)*gyz(i,j,k) ) * idetg
- g3zz = ( gxx(i,j,k)*gyy(i,j,k) - gxy(i,j,k)**2 ) * idetg
-
- tmp1 = betax(i,j,k) * dfx(i,j,k) + &
- betay(i,j,k) * dfy(i,j,k) + &
- betaz(i,j,k) * dfz(i,j,k)
-
- tmp2 = g3xx * dfx(i,j,k)**2 + &
- g3yy * dfy(i,j,k)**2 + &
- g3zz * dfz(i,j,k)**2 + &
- two * ( g3xy * dfx(i,j,k) * dfy(i,j,k) + &
- g3xz * dfx(i,j,k) * dfz(i,j,k) + &
- g3yz * dfy(i,j,k) * dfz(i,j,k) )
- if ( tmp2 .ge. zero ) then
- sf(i,j,k) = tmp1 - ssign * sqrt ( alp2 * tmp2 )
+ 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 )
+
+ g3xx = tmp1 * idetg
+ g3xy = tmp2 * idetg
+ g3xz = tmp3 * idetg
+ g3yy = ( gxx(i,j,k)*gzz(i,j,k) - gxz(i,j,k)**2 ) * idetg
+ g3yz = ( gxy(i,j,k)*gxz(i,j,k) - gxx(i,j,k)*gyz(i,j,k) ) * idetg
+ g3zz = ( gxx(i,j,k)*gyy(i,j,k) - gxy(i,j,k)**2 ) * idetg
+
+ tmp1 = betax(i,j,k) * dfx(i,j,k,l) + &
+ betay(i,j,k) * dfy(i,j,k,l) + &
+ betaz(i,j,k) * dfz(i,j,k,l)
+
+ tmp2 = g3xx * dfx(i,j,k,l)**2 + &
+ g3yy * dfy(i,j,k,l)**2 + &
+ g3zz * dfz(i,j,k,l)**2 + &
+ two * ( g3xy * dfx(i,j,k,l) * dfy(i,j,k,l) + &
+ g3xz * dfx(i,j,k,l) * dfz(i,j,k,l) + &
+ g3yz * dfy(i,j,k,l) * dfz(i,j,k,l) )
+ if ( tmp2 .ge. zero ) then
+ sf(i,j,k,l) = tmp1 - ssign * sqrt ( alp2 * tmp2 )
+ else
+ call CCTK_WARN ( 0, "3-metric not positive definite: Stopping" )
+ end if
else
- call CCTK_WARN ( 0, "3-metric not positive definite: Stopping" )
+ sf(i,j,k,l) = zero
end if
- else
- sf(i,j,k) = zero
- end if
+ end do
end do
- end do
- end do
+ end do
+ end do
end if
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
+ do l = 1, eh_number_level_sets
+ do k = kzl, kzr
+ do j = jyl, jyr
+ do i = ixl, ixr
+ if ( eh_mask(i,j,k,l) .ge. 0 ) then
+ alp2 = alp(i,j,k)**2
- 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
+ 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
+ tmp1 = gyyc*gzzc - gyzc**2
+ tmp2 = gxzc*gyzc - gxyc*gzzc
+ tmp3 = gxyc*gyzc - gxzc*gyyc
- idetg = one / ( gxxc*tmp1 + gxyc*tmp2 + gxzc*tmp3 )
-
- g3xx = tmp1 * idetg
- g3xy = tmp2 * idetg
- g3xz = tmp3 * idetg
- g3yy = ( gxxc*gzzc - gxzc**2 ) * idetg
- g3yz = ( gxyc*gxzc - gxxc*gyzc ) * idetg
- g3zz = ( gxxc*gyyc - gxyc**2 ) * idetg
-
- tmp1 = betax(i,j,k) * dfx(i,j,k) + &
- betay(i,j,k) * dfy(i,j,k) + &
- betaz(i,j,k) * dfz(i,j,k)
-
- tmp2 = g3xx * dfx(i,j,k)**2 + &
- g3yy * dfy(i,j,k)**2 + &
- g3zz * dfz(i,j,k)**2 + &
- two * ( g3xy * dfx(i,j,k) * dfy(i,j,k) + &
- g3xz * dfx(i,j,k) * dfz(i,j,k) + &
- g3yz * dfy(i,j,k) * dfz(i,j,k) )
- if ( tmp2 .ge. zero ) then
- sf(i,j,k) = tmp1 - ssign * sqrt ( alp2 * tmp2 )
+ idetg = one / ( gxxc*tmp1 + gxyc*tmp2 + gxzc*tmp3 )
+
+ g3xx = tmp1 * idetg
+ g3xy = tmp2 * idetg
+ g3xz = tmp3 * idetg
+ g3yy = ( gxxc*gzzc - gxzc**2 ) * idetg
+ g3yz = ( gxyc*gxzc - gxxc*gyzc ) * idetg
+ g3zz = ( gxxc*gyyc - gxyc**2 ) * idetg
+
+ tmp1 = betax(i,j,k) * dfx(i,j,k,l) + &
+ betay(i,j,k) * dfy(i,j,k,l) + &
+ betaz(i,j,k) * dfz(i,j,k,l)
+
+ tmp2 = g3xx * dfx(i,j,k,l)**2 + &
+ g3yy * dfy(i,j,k,l)**2 + &
+ g3zz * dfz(i,j,k,l)**2 + &
+ two * ( g3xy * dfx(i,j,k,l) * dfy(i,j,k,l) + &
+ g3xz * dfx(i,j,k,l) * dfz(i,j,k,l) + &
+ g3yz * dfy(i,j,k,l) * dfz(i,j,k,l) )
+ if ( tmp2 .ge. zero ) then
+ sf(i,j,k,l) = tmp1 - ssign * sqrt ( alp2 * tmp2 )
+ else
+ call CCTK_WARN ( 0, "3-metric not positive definite: Stopping" )
+ end if
else
- call CCTK_WARN ( 0, "3-metric not positive definite: Stopping" )
+ sf(i,j,k,l) = zero
end if
- else
- sf(i,j,k) = zero
- end if
+ end do
end do
- end do
- end do
+ end do
+ end do
end if
return