00001 subroutine sourceterm_HaC_WL(sou)
00002 use def_metric, only : psi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_gamma_crist, only : gmcrix, gmcriy, gmcriz
00005 use def_ricci_tensor, only : rab
00006 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_vector_x, only : hvec_xg
00008 use make_array_4d
00009 use make_array_3d
00010 use interface_interpo_linear_type0
00011 use interface_grgrad_midpoint
00012 use interface_dadbscalar_type0
00013 use interface_dadbscalar_type3
00014 implicit none
00015
00016 real(8), pointer :: sou(:,:,:)
00017 real(8), pointer :: grad(:,:,:,:), dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00018 real(8) :: dabfnc(3,3)
00019 real(8) :: gcdp, hd2p, hhgc,
00020 psigc, rics, &
00021 rxx, rxy, rxz, ryx, ryy, ryz, rzx, rzy, rzz, &
00022 utgc, zfac, &
00023 gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu, gmyxu, gmzxu, gmzyu, &
00024 hhxxu, hhxyu, hhxzu, hhyyu, hhyzu, hhzzu, hhyxu, hhzxu, hhzyu
00025 integer :: ipg, irg, itg
00026
00027 call alloc_array4d(grad,1,nrg,1,ntg,1,npg,1,3)
00028 call alloc_array3d(dfdx,1,nrg,1,ntg,1,npg)
00029 call alloc_array3d(dfdy,1,nrg,1,ntg,1,npg)
00030 call alloc_array3d(dfdz,1,nrg,1,ntg,1,npg)
00031
00032
00033
00034 call grgrad_midpoint(psi,dfdx,dfdy,dfdz)
00035 grad(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00036 grad(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00037 grad(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00038
00039 do ipg = 1, npg
00040 do itg = 1, ntg
00041 do irg = 1, nrg
00042
00043 call interpo_linear_type0(psigc, psi,irg,itg,ipg)
00044
00045 call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00046 call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00047 call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00048 call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00049 call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00050 call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00051 hhyxu = hhxyu
00052 hhzxu = hhxzu
00053 hhzyu = hhyzu
00054 gmxxu = hhxxu + 1.0d0
00055 gmxyu = hhxyu
00056 gmxzu = hhxzu
00057 gmyyu = hhyyu + 1.0d0
00058 gmyzu = hhyzu
00059 gmzzu = hhzzu + 1.0d0
00060 gmyxu = hhxyu
00061 gmzxu = hhxzu
00062 gmzyu = hhyzu
00063
00064 rxx = rab(irg,itg,ipg,1)
00065 rxy = rab(irg,itg,ipg,2)
00066 rxz = rab(irg,itg,ipg,3)
00067 ryy = rab(irg,itg,ipg,4)
00068 ryz = rab(irg,itg,ipg,5)
00069 rzz = rab(irg,itg,ipg,6)
00070 ryx = rxy
00071 rzx = rxz
00072 rzy = ryz
00073
00074
00075 rics = 0.0d0
00076 gcdp = 0.0d0
00077 hd2p = 0.0d0
00078
00079 rics = gmxxu*rxx + gmxyu*rxy + gmxzu*rxz &
00080 & + gmyxu*ryx + gmyyu*ryy + gmyzu*ryz &
00081 & + gmzxu*rzx + gmzyu*rzy + gmzzu*rzz
00082
00083 gcdp = gmcrix(irg,itg,ipg)*grad(irg,itg,ipg,1) &
00084 & + gmcriy(irg,itg,ipg)*grad(irg,itg,ipg,2) &
00085 & + gmcriz(irg,itg,ipg)*grad(irg,itg,ipg,3)
00086
00087
00088 call dadbscalar_type3(psi,dabfnc,irg,itg,ipg)
00089 hd2p = hhxxu* dabfnc(1,1) &
00090 & + hhxyu*(dabfnc(1,2) + dabfnc(2,1)) &
00091 & + hhxzu*(dabfnc(1,3) + dabfnc(3,1)) &
00092 & + hhyyu* dabfnc(2,2) &
00093 & + hhyzu*(dabfnc(2,3) + dabfnc(3,2)) &
00094 & + hhzzu* dabfnc(3,3)
00095
00096 sou(irg,itg,ipg) = - hd2p + gcdp + 0.125d0*psigc*rics
00097
00098
00099
00100
00101
00102
00103
00104 end do
00105 end do
00106 end do
00107
00108 deallocate(grad)
00109 deallocate(dfdx)
00110 deallocate(dfdy)
00111 deallocate(dfdz)
00112
00113 end subroutine sourceterm_HaC_WL