00001 subroutine sourceterm_HaC_WL_test(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 make_array_5d
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_type2
00013 implicit none
00014
00015
00016 real(8), pointer :: sou(:,:,:)
00017 real(8), pointer :: grad(:,:,:,:), dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00018 real(8), pointer :: dadbfn(:,:,:,:,:)
00019 real(8) :: dabfnc(3,3)
00020 real(8) :: gcdp, hd2p, hhgc,
00021 psigc, rics, &
00022 rxx, rxy, rxz, ryx, ryy, ryz, rzx, rzy, rzz, &
00023 utgc, zfac, &
00024 gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu, gmyxu, gmzxu, gmzyu, &
00025 hhxxu, hhxyu, hhxzu, hhyyu, hhyzu, hhzzu, hhyxu, hhzxu, hhzyu
00026 integer :: ipg, irg, itg
00027
00028
00029 call alloc_array5d(dadbfn,1,nrg,1,ntg,1,npg,1,3,1,3)
00030 call alloc_array4d(grad,1,nrg,1,ntg,1,npg,1,3)
00031 call alloc_array3d(dfdx,1,nrg,1,ntg,1,npg)
00032 call alloc_array3d(dfdy,1,nrg,1,ntg,1,npg)
00033 call alloc_array3d(dfdz,1,nrg,1,ntg,1,npg)
00034
00035
00036
00037
00038
00039 call grgrad_midpoint(psi,dfdx,dfdy,dfdz)
00040 grad(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00041 grad(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00042 grad(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00043
00044
00045 call dadbscalar_type2(psi,dadbfn,'ns')
00046
00047
00048
00049 do ipg = 1, npg
00050 do itg = 1, ntg
00051 do irg = 1, nrg
00052
00053 call interpo_linear_type0(psigc, psi,irg,itg,ipg)
00054
00055 call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00056 call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00057 call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00058 call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00059 call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00060 call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00061 gmxxu = hhxxu + 1.0d0
00062 gmxyu = hhxyu
00063 gmxzu = hhxzu
00064 gmyyu = hhyyu + 1.0d0
00065 gmyzu = hhyzu
00066 gmzzu = hhzzu + 1.0d0
00067 gmyxu = hhxyu
00068 gmzxu = hhxzu
00069 gmzyu = hhyzu
00070
00071 rxx = rab(irg,itg,ipg,1)
00072 rxy = rab(irg,itg,ipg,2)
00073 rxz = rab(irg,itg,ipg,3)
00074 ryy = rab(irg,itg,ipg,4)
00075 ryz = rab(irg,itg,ipg,5)
00076 rzz = rab(irg,itg,ipg,6)
00077 ryx = rxy
00078 rzx = rxz
00079 rzy = ryz
00080
00081
00082 rics = 0.0d0
00083 gcdp = 0.0d0
00084 hd2p = 0.0d0
00085
00086 rics = gmxxu*rxx + gmxyu*rxy + gmxzu*rxz &
00087 & + gmyxu*ryx + gmyyu*ryy + gmyzu*ryz &
00088 & + gmzxu*rzx + gmzyu*rzy + gmzzu*rzz
00089
00090 gcdp = gmcrix(irg,itg,ipg)*grad(irg,itg,ipg,1) &
00091 & + gmcriy(irg,itg,ipg)*grad(irg,itg,ipg,2) &
00092 & + gmcriz(irg,itg,ipg)*grad(irg,itg,ipg,3)
00093
00094
00095 dabfnc(1,1) = dadbfn(irg,itg,ipg,1,1)
00096 dabfnc(1,2) = dadbfn(irg,itg,ipg,1,2)
00097 dabfnc(1,3) = dadbfn(irg,itg,ipg,1,3)
00098 dabfnc(2,1) = dadbfn(irg,itg,ipg,2,1)
00099 dabfnc(2,2) = dadbfn(irg,itg,ipg,2,2)
00100 dabfnc(2,3) = dadbfn(irg,itg,ipg,2,3)
00101 dabfnc(3,1) = dadbfn(irg,itg,ipg,3,1)
00102 dabfnc(3,2) = dadbfn(irg,itg,ipg,3,2)
00103 dabfnc(3,3) = dadbfn(irg,itg,ipg,3,3)
00104 hd2p = hhxxu* dabfnc(1,1) &
00105 & + hhxyu*(dabfnc(1,2) + dabfnc(2,1)) &
00106 & + hhxzu*(dabfnc(1,3) + dabfnc(3,1)) &
00107 & + hhyyu* dabfnc(2,2) &
00108 & + hhyzu*(dabfnc(2,3) + dabfnc(3,2)) &
00109 & + hhzzu* dabfnc(3,3)
00110
00111 sou(irg,itg,ipg) = - hd2p + gcdp + 0.125d0*psigc*rics
00112
00113 end do
00114 end do
00115 end do
00116
00117
00118
00119 deallocate(dadbfn)
00120 deallocate(grad)
00121 deallocate(dfdx)
00122 deallocate(dfdy)
00123 deallocate(dfdz)
00124
00125 end subroutine sourceterm_HaC_WL_test