aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qlm_derivs.F90103
-rw-r--r--src/qlm_twometric.F90103
-rw-r--r--src/qlm_weyl_scalars.F9047
3 files changed, 50 insertions, 203 deletions
diff --git a/src/qlm_derivs.F90 b/src/qlm_derivs.F90
index 24a3552..a2a73ef 100644
--- a/src/qlm_derivs.F90
+++ b/src/qlm_derivs.F90
@@ -10,9 +10,7 @@ module qlm_derivs
public operator(.dot.)
public deriv
public deriv2
- public deriv3
public timederiv
- public timederiv2
interface deriv
module procedure rderiv
@@ -22,18 +20,8 @@ module qlm_derivs
module procedure rderiv2
end interface
- interface deriv3
- module procedure rderiv3
- end interface
-
interface timederiv
module procedure rtimederiv
- module procedure ctimederiv
- end interface
-
- interface timederiv2
- module procedure rtimederiv2
- module procedure ctimederiv2
end interface
interface operator(.outer.)
@@ -163,47 +151,6 @@ contains
end select
end function rderiv2
- pure function rderiv3 (f, i, j, dx) result (dddf)
- DECLARE_CCTK_PARAMETERS
- CCTK_REAL, intent(in) :: f(:,:)
- integer, intent(in) :: i, j
- CCTK_REAL, intent(in) :: dx(2)
- CCTK_REAL :: dddf(2,2,2)
-
- select case (spatial_order)
- case (2, 4)
- ! No separate 4th order stencil, since that would need 3 ghost
- ! zones
- dddf(1,1,1) = (- f(i-2,j ) &
- & + 2*f(i-1,j ) &
- & - 2*f(i+1,j ) &
- & + f(i+2,j )) / (2*dx(1)**3)
- dddf(1,1,2) = ( f(i+1,j+1) &
- & - 2*f(i ,j+1) &
- & + f(i-1,j+1) &
- & - f(i+1,j-1) &
- & + 2*f(i ,j-1) &
- & - f(i-1,j-1)) / (2 * dx(1)**2 * dx(2))
- dddf(1,2,2) = ( f(i+1,j+1) &
- & - 2*f(i+1,j ) &
- & + f(i+1,j-1) &
- & - f(i-1,j+1) &
- & + 2*f(i-1,j ) &
- & - f(i-1,j-1)) / (2 * dx(1) * dx(2)**2)
- dddf(2,2,2) = (- f(i ,j-2) &
- & + 2*f(i ,j-1) &
- & - 2*f(i ,j+1) &
- & + f(i ,j+2)) / (2*dx(2)**3)
- dddf(1,2,1) = dddf(1,1,2)
- dddf(2,1,1) = dddf(1,1,2)
- dddf(2,1,2) = dddf(1,2,2)
- dddf(2,2,1) = dddf(1,2,2)
- case default
- ! call CCTK_WARN (0, "internal error")
- dddf = TAT_nan()
- end select
- end function rderiv3
-
! Calculate a time derivate from several time levels
@@ -235,54 +182,4 @@ contains
end if
end function rtimederiv
- pure elemental function ctimederiv (f0, f1, f2, t0, t1, t2, ce0, ce1, ce2) result (fdot)
- CCTK_COMPLEX, intent(in) :: f0, f1, f2
- CCTK_REAL, intent(in) :: t0, t1, t2
- logical, intent(in) :: ce0, ce1, ce2
- CCTK_COMPLEX :: fdot
-
- fdot = cmplx(timederiv(real(f0),real(f1),real(f2), t0,t1,t2, ce0,ce1,ce2), &
- & timederiv(aimag(f0),aimag(f1),aimag(f2), t0,t1,t2, ce0,ce1,ce2), &
- & kind(fdot))
- end function ctimederiv
-
- pure elemental function rtimederiv2 (f0, f1, f2, t0, t1, t2, ce0, ce1, ce2) result (fdotdot)
- CCTK_REAL, intent(in) :: f0, f1, f2
- CCTK_REAL, intent(in) :: t0, t1, t2
- logical, intent(in) :: ce0, ce1, ce2
- CCTK_REAL :: fdotdot
- CCTK_REAL :: dt1, dt2
- CCTK_REAL :: fdotdot1, fdotdot2
-
-!!$ dt1 = qlm_time(hn) - qlm_time_p(hn)
-!!$ dt2 = qlm_time(hn) - qlm_time_p_p(hn)
- dt1 = t0 - t1
- dt2 = t0 - t2
-
- if (ce0 .or. ce1) then
- fdotdot = 0
- else if (ce2) then
- fdotdot = 0
- else
- ! f(dt1) = f(0) + dt1 f'(0) + dt1^2/2 f''(0)
- ! f(dt2) = f(0) + dt2 f'(0) + dt2^2/2 f''(0)
- ! f''(0) = [f(dt1) - f(0)] / [dt1^2/2] - f'(0) / [dt1/2]
- ! f''(0) = [f(dt2) - f(0)] / [dt2^2/2] - f'(0) / [dt2/2]
- fdotdot1 = (f1 - f0) / (dt1**2/2)
- fdotdot2 = (f2 - f0) / (dt2**2/2)
- fdotdot = (fdotdot1 * dt1 - fdotdot2 * dt2) / (dt1 - dt2)
- end if
- end function rtimederiv2
-
- pure elemental function ctimederiv2 (f0, f1, f2, t0, t1, t2, ce0, ce1, ce2) result (fdotdot)
- CCTK_COMPLEX, intent(in) :: f0, f1, f2
- CCTK_REAL, intent(in) :: t0, t1, t2
- logical, intent(in) :: ce0, ce1, ce2
- CCTK_COMPLEX :: fdotdot
-
- fdotdot = cmplx(timederiv2(real(f0),real(f1),real(f2), t0,t1,t2, ce0,ce1,ce2), &
- & timederiv2(aimag(f0),aimag(f1),aimag(f2), t0,t1,t2, ce0,ce1,ce2), &
- & kind(fdotdot))
- end function ctimederiv2
-
end module qlm_derivs
diff --git a/src/qlm_twometric.F90 b/src/qlm_twometric.F90
index e450ebb..7a31c42 100644
--- a/src/qlm_twometric.F90
+++ b/src/qlm_twometric.F90
@@ -23,17 +23,14 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
DECLARE_CCTK_PARAMETERS
integer :: hn
- CCTK_REAL, parameter :: two = 2, half = 1d0/2d0
- CCTK_REAL :: gg(3,3), dgg(3,3,3), ddgg(3,3,3,3)
- CCTK_REAL :: gamma(3,3,3), dgamma(3,3,3,3), ri(3,3), rsc
- CCTK_REAL :: ee(3,2), dee(3,2,2), ddee(3,2,2,2)
- CCTK_REAL :: qq(2,2), dqq(2,2,2), ddqq(2,2,2,2)
- CCTK_REAL :: dtq, qu(2,2), dqu(2,2,2)
+ CCTK_REAL :: gg(3,3), dgg(3,3,3)
+ CCTK_REAL :: ee(3,2), dee(3,2,2)
+ CCTK_REAL :: qq(2,2), dqq(2,2,2)
CCTK_REAL :: delta_space(2)
integer :: i, j
- integer :: a, b, c, d, e, f, g, h
+ integer :: a, b, c, d, e, f
if (veryverbose/=0) then
call CCTK_INFO ("Calculating two-metric")
@@ -77,49 +74,6 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
dgg(3,1,:) = dgg(1,3,:)
dgg(3,2,:) = dgg(2,3,:)
- ddgg(1,1,1,1) = qlm_ddgxxxx(i,j)
- ddgg(1,2,1,1) = qlm_ddgxyxx(i,j)
- ddgg(1,3,1,1) = qlm_ddgxzxx(i,j)
- ddgg(2,2,1,1) = qlm_ddgyyxx(i,j)
- ddgg(2,3,1,1) = qlm_ddgyzxx(i,j)
- ddgg(3,3,1,1) = qlm_ddgzzxx(i,j)
- ddgg(1,1,1,2) = qlm_ddgxxxy(i,j)
- ddgg(1,2,1,2) = qlm_ddgxyxy(i,j)
- ddgg(1,3,1,2) = qlm_ddgxzxy(i,j)
- ddgg(2,2,1,2) = qlm_ddgyyxy(i,j)
- ddgg(2,3,1,2) = qlm_ddgyzxy(i,j)
- ddgg(3,3,1,2) = qlm_ddgzzxy(i,j)
- ddgg(1,1,1,3) = qlm_ddgxxxz(i,j)
- ddgg(1,2,1,3) = qlm_ddgxyxz(i,j)
- ddgg(1,3,1,3) = qlm_ddgxzxz(i,j)
- ddgg(2,2,1,3) = qlm_ddgyyxz(i,j)
- ddgg(2,3,1,3) = qlm_ddgyzxz(i,j)
- ddgg(3,3,1,3) = qlm_ddgzzxz(i,j)
- ddgg(1,1,2,2) = qlm_ddgxxyy(i,j)
- ddgg(1,2,2,2) = qlm_ddgxyyy(i,j)
- ddgg(1,3,2,2) = qlm_ddgxzyy(i,j)
- ddgg(2,2,2,2) = qlm_ddgyyyy(i,j)
- ddgg(2,3,2,2) = qlm_ddgyzyy(i,j)
- ddgg(3,3,2,2) = qlm_ddgzzyy(i,j)
- ddgg(1,1,2,3) = qlm_ddgxxyz(i,j)
- ddgg(1,2,2,3) = qlm_ddgxyyz(i,j)
- ddgg(1,3,2,3) = qlm_ddgxzyz(i,j)
- ddgg(2,2,2,3) = qlm_ddgyyyz(i,j)
- ddgg(2,3,2,3) = qlm_ddgyzyz(i,j)
- ddgg(3,3,2,3) = qlm_ddgzzyz(i,j)
- ddgg(1,1,3,3) = qlm_ddgxxzz(i,j)
- ddgg(1,2,3,3) = qlm_ddgxyzz(i,j)
- ddgg(1,3,3,3) = qlm_ddgxzzz(i,j)
- ddgg(2,2,3,3) = qlm_ddgyyzz(i,j)
- ddgg(2,3,3,3) = qlm_ddgyzzz(i,j)
- ddgg(3,3,3,3) = qlm_ddgzzzz(i,j)
- ddgg(2,1,:,:) = ddgg(1,2,:,:)
- ddgg(3,1,:,:) = ddgg(1,3,:,:)
- ddgg(3,2,:,:) = ddgg(2,3,:,:)
- ddgg(:,:,2,1) = ddgg(:,:,1,2)
- ddgg(:,:,3,1) = ddgg(:,:,1,3)
- ddgg(:,:,3,2) = ddgg(:,:,2,3)
-
ee(1,1:2) = deriv (qlm_x(:,:,hn), i, j, delta_space)
ee(2,1:2) = deriv (qlm_y(:,:,hn), i, j, delta_space)
ee(3,1:2) = deriv (qlm_z(:,:,hn), i, j, delta_space)
@@ -128,10 +82,6 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
dee(2,1:2,1:2) = deriv2 (qlm_y(:,:,hn), i, j, delta_space)
dee(3,1:2,1:2) = deriv2 (qlm_z(:,:,hn), i, j, delta_space)
- ddee(1,1:2,1:2,1:2) = deriv3 (qlm_x(:,:,hn), i, j, delta_space)
- ddee(2,1:2,1:2,1:2) = deriv3 (qlm_y(:,:,hn), i, j, delta_space)
- ddee(3,1:2,1:2,1:2) = deriv3 (qlm_z(:,:,hn), i, j, delta_space)
-
do a=1,2
do b=1,2
qq(a,b) = 0
@@ -160,52 +110,12 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
end do
end do
- do a=1,2
- do b=1,2
- do c=1,2
- do d=1,2
- ddqq(a,b,c,d) = 0
- do e=1,3
- do f=1,3
- do g=1,3
- do h=1,3
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + ddgg(e,f,g,h) * ee(e,a) * ee(f,b) * ee(g,c) * ee(h,d)
- end do
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + dgg(e,f,g) * dee(e,a,d) * ee(f,b) * ee(g,c)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + dgg(e,f,g) * ee(e,a) * dee(f,b,d) * ee(g,c)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + dgg(e,f,g) * ee(e,a) * ee(f,b) * dee(g,c,d)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + dgg(e,f,g) * dee(e,a,c) * ee(f,b) * ee(g,d)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + dgg(e,f,g) * ee(e,a) * dee(f,b,c) * ee(g,d)
- end do
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + gg(e,f) * ddee(e,a,c,d) * ee(f,b)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + gg(e,f) * dee(e,a,c) * dee(f,b,d)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + gg(e,f) * dee(e,a,d) * dee(f,b,c)
- ddqq(a,b,c,d) = ddqq(a,b,c,d) + gg(e,f) * ee(e,a) * ddee(f,b,c,d)
- end do
- end do
- end do
- end do
- end do
- end do
-
- call calc_2det (qq, dtq)
- call calc_2inv (qq, dtq, qu)
- call calc_2invderiv (qu, dqq, dqu)
-
- call calc_2connections (qu, dqq, gamma)
- call calc_2connectionderivs (qu, dqq, dqu, ddqq, dgamma)
- call calc_2ricci (gamma, dgamma, ri)
-
- call calc_2trace (qu, ri, rsc)
-
! Could also calculate this as:
! q^ab = m^a mbar^b + mbar^a m^b
qlm_qtt(i,j,hn) = qq(1,1)
qlm_qtp(i,j,hn) = qq(1,2)
qlm_qpp(i,j,hn) = qq(2,2)
- ! Could also calculate this from NP coefficients alpha and
- ! beta (and epsilon and gamma?)
qlm_dqttt(i,j,hn) = dqq(1,1,1)
qlm_dqtpt(i,j,hn) = dqq(1,2,1)
qlm_dqppt(i,j,hn) = dqq(2,2,1)
@@ -213,9 +123,6 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
qlm_dqtpp(i,j,hn) = dqq(1,2,2)
qlm_dqppp(i,j,hn) = dqq(2,2,2)
- ! Could also calculate this from 3Rsc and extrinsic curvature
- qlm_rsc(i,j,hn) = rsc
-
end do
end do
@@ -229,7 +136,5 @@ subroutine qlm_calc_twometric (CCTK_ARGUMENTS, hn)
call set_boundary (CCTK_PASS_FTOF, hn, qlm_dqttp(:,:,hn), -1)
call set_boundary (CCTK_PASS_FTOF, hn, qlm_dqtpp(:,:,hn), -1)
call set_boundary (CCTK_PASS_FTOF, hn, qlm_dqppp(:,:,hn), -1)
-
- call set_boundary (CCTK_PASS_FTOF, hn, qlm_rsc(:,:,hn), +1)
end subroutine qlm_calc_twometric
diff --git a/src/qlm_weyl_scalars.F90 b/src/qlm_weyl_scalars.F90
index ade2e31..73d2926 100644
--- a/src/qlm_weyl_scalars.F90
+++ b/src/qlm_weyl_scalars.F90
@@ -26,7 +26,7 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
CCTK_REAL :: gg(3,3), dgg(3,3,3), ddgg(3,3,3,3), gg_dot(3,3), gg_dot2(3,3), dgg_dot(3,3,3)
CCTK_REAL :: kk(3,3), dkk(3,3,3), kk_dot(3,3)
CCTK_REAL :: tt(3,3)
- CCTK_REAL :: dtg, gu(3,3), dgu(3,3,3), gamma(3,3,3), dgamma(3,3,3,3), ri(3,3)
+ CCTK_REAL :: dtg, gu(3,3), dgu(3,3,3), gamma(3,3,3), dgamma(3,3,3,3), ri(3,3), rsc
CCTK_REAL :: g4(0:3,0:3), dg4(0:3,0:3,0:3), ddg4(0:3,0:3,0:3,0:3)
CCTK_REAL :: gu4(0:3,0:3), dgu4(0:3,0:3,0:3)
CCTK_REAL :: gamma4(0:3,0:3,0:3), dgamma4(0:3,0:3,0:3,0:3)
@@ -34,6 +34,10 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
CCTK_REAL :: rm4(0:3,0:3,0:3,0:3), we4(0:3,0:3,0:3,0:3)
CCTK_REAL :: ll(0:3), nn(0:3)
CCTK_COMPLEX :: mm(0:3)
+ CCTK_REAL :: ss(0:3)
+ CCTK_REAL :: nabla_ll(0:3,0:3), nabla_nn(0:3,0:3)
+ CCTK_REAL :: nabla_ss(0:3,0:3)
+ CCTK_REAL :: trkAH, kk_kk, tmpR
integer :: i, j
integer :: a, b, c, d
@@ -182,6 +186,13 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
mm(2) = qlm_m2(i,j,hn)
mm(3) = qlm_m3(i,j,hn)
+ ss = (ll - nn) / sqrt(two)
+
+ nabla_ll = qlm_tetrad_derivs(i,j)%nabla_ll
+ nabla_nn = qlm_tetrad_derivs(i,j)%nabla_nn
+
+ nabla_ss = (nabla_ll - nabla_nn) / sqrt(two)
+
! Calculate 4-metric
@@ -191,6 +202,7 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
call calc_connections (gu, dgg, gamma)
call calc_connectionderivs (gu, dgg, dgu, ddgg, dgamma)
call calc_ricci (gamma, dgamma, ri)
+ call calc_trace (gu, ri, rsc)
call calc_3metricdot_simple (kk, gg_dot)
call calc_3metricderivdot_simple (dkk, dgg_dot)
@@ -278,6 +290,37 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
& + 2 * real (qlm_psi2(i,j,hn)) &
& + 4 * qlm_lambda(i,j,hn)
+
+
+ trkAH = 0
+ do a=1,3
+ do b=1,3
+ trkAH = trkAH + (gu(a,b) - ss(a) * ss(b)) * nabla_ss(a,b)
+ end do
+ end do
+
+ kk_kk = 0
+ do a=1,3
+ do b=1,3
+ do c=1,3
+ do d=1,3
+ kk_kk = kk_kk + &
+ (gu(a,c) - ss(a) * ss(c)) * nabla_ss(a,b) * &
+ (gu(b,d) - ss(b) * ss(d)) * nabla_ss(c,d)
+ end do
+ end do
+ end do
+ end do
+
+ tmpR = 0
+ do a=1,3
+ do b=1,3
+ tmpR = tmpR + ri(a,b) * ss(a) * ss(b)
+ end do
+ end do
+
+ qlm_rsc(i,j,hn) = rsc - 2*tmpR + trkAH**2 - kk_kk
+
end do
end do
@@ -305,5 +348,7 @@ subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
call set_boundary (CCTK_PASS_FTOF, hn, qlm_lambda(:,:,hn), +1)
call set_boundary (CCTK_PASS_FTOF, hn, qlm_lie_n_theta_l(:,:,hn), +1)
+
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_rsc(:,:,hn), +1)
end subroutine qlm_calc_weyl_scalars