aboutsummaryrefslogtreecommitdiff
path: root/src/qlm_weyl_scalars.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/qlm_weyl_scalars.F90')
-rw-r--r--src/qlm_weyl_scalars.F90252
1 files changed, 252 insertions, 0 deletions
diff --git a/src/qlm_weyl_scalars.F90 b/src/qlm_weyl_scalars.F90
new file mode 100644
index 0000000..d79751c
--- /dev/null
+++ b/src/qlm_weyl_scalars.F90
@@ -0,0 +1,252 @@
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "cctk_Parameters.h"
+
+
+
+subroutine qlm_calc_weyl_scalars (CCTK_ARGUMENTS, hn)
+ use adm_metric_simple
+ use cctk
+ use constants
+ use qlm_boundary
+ use qlm_derivs
+ use qlm_variables
+ use ricci
+ use ricci4
+ use tensor
+ use tensor4
+ implicit none
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_FUNCTIONS
+ DECLARE_CCTK_PARAMETERS
+ integer :: hn
+
+ CCTK_REAL, parameter :: two=2, four=4
+ 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 :: 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)
+ CCTK_REAL :: ri4(0:3,0:3), rsc4
+ 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)
+
+ integer :: i, j
+ integer :: a, b, c, d
+ CCTK_REAL :: theta, phi
+
+ if (veryverbose/=0) then
+ call CCTK_INFO ("Calculating Weyl scalars")
+ end if
+
+ ! Calculate the coordinates
+ do j = 1+qlm_nghostsphi(hn), qlm_nphi(hn)-qlm_nghostsphi(hn)
+ do i = 1+qlm_nghoststheta(hn), qlm_ntheta(hn)-qlm_nghoststheta(hn)
+ theta = qlm_origin_theta(hn) + (i-1)*qlm_delta_theta(hn)
+ phi = qlm_origin_phi(hn) + (j-1)*qlm_delta_phi(hn)
+
+ ! Get the stuff from the arrays
+ gg(1,1) = qlm_gxx(i,j)
+ gg(1,2) = qlm_gxy(i,j)
+ gg(1,3) = qlm_gxz(i,j)
+ gg(2,2) = qlm_gyy(i,j)
+ gg(2,3) = qlm_gyz(i,j)
+ gg(3,3) = qlm_gzz(i,j)
+ gg(2,1) = gg(1,2)
+ gg(3,1) = gg(1,3)
+ gg(3,2) = gg(2,3)
+
+ dgg(1,1,1) = qlm_dgxxx(i,j)
+ dgg(1,2,1) = qlm_dgxyx(i,j)
+ dgg(1,3,1) = qlm_dgxzx(i,j)
+ dgg(2,2,1) = qlm_dgyyx(i,j)
+ dgg(2,3,1) = qlm_dgyzx(i,j)
+ dgg(3,3,1) = qlm_dgzzx(i,j)
+ dgg(1,1,2) = qlm_dgxxy(i,j)
+ dgg(1,2,2) = qlm_dgxyy(i,j)
+ dgg(1,3,2) = qlm_dgxzy(i,j)
+ dgg(2,2,2) = qlm_dgyyy(i,j)
+ dgg(2,3,2) = qlm_dgyzy(i,j)
+ dgg(3,3,2) = qlm_dgzzy(i,j)
+ dgg(1,1,3) = qlm_dgxxz(i,j)
+ dgg(1,2,3) = qlm_dgxyz(i,j)
+ dgg(1,3,3) = qlm_dgxzz(i,j)
+ dgg(2,2,3) = qlm_dgyyz(i,j)
+ dgg(2,3,3) = qlm_dgyzz(i,j)
+ dgg(3,3,3) = qlm_dgzzz(i,j)
+ dgg(2,1,:) = dgg(1,2,:)
+ 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)
+
+ ll(0) = qlm_l0(i,j,hn)
+ ll(1) = qlm_l1(i,j,hn)
+ ll(2) = qlm_l2(i,j,hn)
+ ll(3) = qlm_l3(i,j,hn)
+
+ nn(0) = qlm_n0(i,j,hn)
+ nn(1) = qlm_n1(i,j,hn)
+ nn(2) = qlm_n2(i,j,hn)
+ nn(3) = qlm_n3(i,j,hn)
+
+ mm(0) = qlm_m0(i,j,hn)
+ mm(1) = qlm_m1(i,j,hn)
+ mm(2) = qlm_m2(i,j,hn)
+ mm(3) = qlm_m3(i,j,hn)
+
+
+
+ ! Calculate 4-metric
+ call calc_4metricderivs2_simple (gg, dgg, &
+ ddgg, gg_dot, gg_dot2, dgg_dot, g4,dg4,ddg4)
+ call calc_4inv (g4, gu4)
+ call calc_4invderiv (gu4, dg4, dgu4)
+ call calc_4connections (gu4,dg4, gamma4)
+ call calc_4connectionderivs (gu4, dg4, dgu4, ddg4, dgamma4)
+ call calc_4ricci (gamma4, dgamma4, ri4)
+ call calc_4riemann (g4, gamma4, dgamma4, rm4)
+ call calc_4trace (ri4, gu4, rsc4)
+ call calc_4weyl (g4, rm4, ri4, rsc4, we4)
+
+ ! debugging
+! qlm_rsc4(i,j,hn) = rsc4
+
+ qlm_psi0(i,j,hn) = 0 ! transverse radiation along n
+ qlm_psi1(i,j,hn) = 0 ! longitudinal radiation along n
+ qlm_psi2(i,j,hn) = 0 ! Coulomb field and spin
+ qlm_psi3(i,j,hn) = 0 ! longitudinal radiation along l
+ qlm_psi4(i,j,hn) = 0 ! transverse radiation along l
+
+ do a=0,3
+ do b=0,3
+ do c=0,3
+ do d=0,3
+ qlm_psi0(i,j,hn) = qlm_psi0(i,j,hn) + we4(a,b,c,d) * ll(a) * mm(b) * ll(c) * mm(d)
+ qlm_psi1(i,j,hn) = qlm_psi1(i,j,hn) + we4(a,b,c,d) * ll(a) * mm(b) * ll(c) * nn(d)
+ qlm_psi2(i,j,hn) = qlm_psi2(i,j,hn) + we4(a,b,c,d) * ll(a) * mm(b) * conjg(mm(c)) * nn(d)
+ qlm_psi3(i,j,hn) = qlm_psi3(i,j,hn) + we4(a,b,c,d) * ll(a) * nn(b) * conjg(mm(c)) * nn(d)
+ qlm_psi4(i,j,hn) = qlm_psi4(i,j,hn) + we4(a,b,c,d) * conjg(mm(a)) * nn(b) * conjg(mm(c)) * nn(d)
+ end do
+ end do
+ end do
+ end do
+
+ ! gr-qc/0104063, (3.3)
+ qlm_i(i,j,hn) = + 3 * qlm_psi2(i,j,hn)**2 &
+ & - 4 * qlm_psi1(i,j,hn) * qlm_psi3(i,j,hn) &
+ & + qlm_psi0(i,j,hn) * qlm_psi4(i,j,hn)
+ qlm_j(i,j,hn) = - qlm_psi2(i,j,hn)**3 &
+ & + qlm_psi0(i,j,hn) * qlm_psi2(i,j,hn) * qlm_psi4(i,j,hn) &
+ & + 2 * qlm_psi1(i,j,hn) * qlm_psi2(i,j,hn) * qlm_psi3(i,j,hn) &
+ & - qlm_psi1(i,j,hn)**2 * qlm_psi4(i,j,hn) &
+ & - qlm_psi0(i,j,hn) * qlm_psi3(i,j,hn)**2
+
+ ! gr-qc/0104063, (3.1)
+ qlm_s(i,j,hn) = 27 * qlm_j(i,j,hn)**2 / qlm_i(i,j,hn)**3
+ qlm_sdiff(i,j,hn) = (27 * qlm_j(i,j,hn)**2 - qlm_i(i,j,hn)**3) / sqrt((abs2(qlm_psi0(i,j,hn)) + abs2(qlm_psi1(i,j,hn)) + abs2(qlm_psi2(i,j,hn)) + abs2(qlm_psi3(i,j,hn)) + abs2(qlm_psi4(i,j,hn))) / 5)**3
+
+ qlm_phi00(i,j,hn) = 0
+ qlm_phi11(i,j,hn) = 0
+ qlm_phi01(i,j,hn) = 0
+ qlm_phi12(i,j,hn) = 0
+ qlm_phi10(i,j,hn) = 0
+ qlm_phi21(i,j,hn) = 0
+ qlm_phi02(i,j,hn) = 0
+ qlm_phi22(i,j,hn) = 0
+ qlm_phi20(i,j,hn) = 0
+
+ do a=0,3
+ do b=0,3
+
+ qlm_phi00(i,j,hn) = qlm_phi00(i,j,hn) - 1/two * ri4(a,b) * ll(a) * ll(b)
+ qlm_phi11(i,j,hn) = qlm_phi11(i,j,hn) - 1/two * ri4(a,b) * (ll(a) * nn(b) + mm(a) * conjg(mm(b))) / 2
+ qlm_phi01(i,j,hn) = qlm_phi01(i,j,hn) - 1/two * ri4(a,b) * ll(a) * mm(b)
+ qlm_phi12(i,j,hn) = qlm_phi12(i,j,hn) - 1/two * ri4(a,b) * nn(a) * mm(b)
+ qlm_phi10(i,j,hn) = qlm_phi10(i,j,hn) - 1/two * ri4(a,b) * ll(a) * conjg(mm(b))
+ qlm_phi21(i,j,hn) = qlm_phi21(i,j,hn) - 1/two * ri4(a,b) * nn(a) * conjg(mm(b))
+ qlm_phi02(i,j,hn) = qlm_phi02(i,j,hn) - 1/two * ri4(a,b) * mm(a) * mm(b)
+ qlm_phi22(i,j,hn) = qlm_phi22(i,j,hn) - 1/two * ri4(a,b) * nn(a) * nn(b)
+ qlm_phi20(i,j,hn) = qlm_phi20(i,j,hn) - 1/two * ri4(a,b) * conjg(mm(a)) * conjg(mm(b))
+
+ end do
+ end do
+
+ qlm_lambda(i,j,hn) = rsc4 / 24
+
+ qlm_lie_n_theta_l(i,j,hn) = &
+ & + 2 * real (qlm_npsigma(i,j,hn) * qlm_nplambda(i,j,hn)) &
+ & + 2 * real (qlm_psi2(i,j,hn)) &
+ & + 4 * qlm_lambda(i,j,hn)
+
+ end do
+ end do
+
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_psi0(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_psi1(:,:,hn), -1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_psi2(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_psi3(:,:,hn), -1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_psi4(:,:,hn), +1)
+
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_i(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_j(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_s(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_sdiff(:,:,hn), +1)
+
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi00(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi11(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi01(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi12(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi10(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi21(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi02(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi22(:,:,hn), +1)
+ call set_boundary (CCTK_PASS_FTOF, hn, qlm_phi20(:,:,hn), +1)
+
+ 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)
+
+end subroutine qlm_calc_weyl_scalars