00001 subroutine sourceterm_MWspatial_WL(souvec)
00002
00003 use phys_constant, only : pi
00004 use def_matter_parameter, only : ome
00005 use def_metric, only : psi, alph, tfkij
00006 use def_emfield, only : vaxd, vayd, vazd, vaxu, vayu, vazu
00007 use grid_parameter, only : nrg, ntg, npg
00008 use coordinate_grav_r, only : rg
00009 use def_cristoffel_grid, only : cri_grid
00010 use def_gamma_crist, only : gmcrix, gmcriy, gmcriz
00011 use def_ricci_tensor, only : rab
00012 use def_faraday_tensor, only : fxd, fyd, fzd, fijd
00013 use def_emfield_derivatives, only : cdvaxd, cdvayd, cdvazd
00014 use def_formulation, only : swflu
00015 use def_cristoffel, only : cri
00016 use def_cutsw, only : cutfac
00017 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00018 use def_metric_rotshift, only : ovxd, ovyd, ovzd
00019 use def_formulation, only : chgra
00020 use interface_interpo_linear_type0
00021 use interface_grgrad_midpoint
00022 use interface_grgrad1g_midpoint
00023 use interface_dadbscalar_type0
00024 use interface_dadbscalar_type3
00025 use make_array_3d
00026 implicit none
00027
00028 real(8), pointer :: souvec(:,:,:,:)
00029 real(8), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00030 real(8), pointer :: fnc2(:,:,:)
00031 real(8) :: grad(1:3), dabfnc(3,3), Fdalps2(3,3), AabFc(3,3),
00032 fijdgc(3,3), tfkijgc(3,3), hiju(3,3), gmiju(3,3)
00033
00034 real(8), pointer :: cri1va(:,:,:), cri2va(:,:,:), cri3va(:,:,:),
00035 cri4va(:,:,:), cri5va(:,:,:), cri6va(:,:,:)
00036 real(8) :: gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu,
00037 gmyxu, gmzxu, gmzyu, &
00038 hhxxu, hhxyu, hhxzu, hhyxu, hhyyu, hhyzu, &
00039 hhzxu, hhzyu, hhzzu, &
00040 vaxdc, vaxgc, vaydc, vaygc, vazdc, vazgc, &
00041 c11, c12, c13, c14, c15, c16, &
00042 c21, c22, c23, c24, c25, c26, &
00043 c31, c32, c33, c34, c35, c36, &
00044 gc1, gc2, gc3, gclp, gcrdb1, gcrdb2, gdcb, &
00045 gmxvax, gmxvay, gmxvaz, gmyvax, gmyvay, gmyvaz, &
00046 gmzvax, gmzvay, gmzvaz, &
00047 hddb, rax, ray, raz, &
00048 san, san2, zfac, &
00049 cutoff, alpsi2, alpsi2inv, divlp, &
00050 dxc1b, dxc2b, dxc3b, dxc4b, dxc5b, dxc6b, &
00051 dyc1b, dyc2b, dyc3b, dyc4b, dyc5b, dyc6b, &
00052 dzc1b, dzc2b, dzc3b, dzc4b, dzc5b, dzc6b, &
00053 dvaxdx, dvaxdy, dvaxdz, dvaydx, dvaydy, dvaydz, &
00054 dvazdx, dvazdy, dvazdz, &
00055 dxafn, dyafn, dzafn, &
00056 vaxdgc, vaydgc, vazdgc, fxdgc, fydgc, fzdgc
00057 real(8) :: psigc, ricciva, Fap2dap2, p4AF
00058 integer :: ipg, irg, itg, ic1, ic2, ic3, ii, ic0(1:3)
00059
00060 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00061 call alloc_array3d(grad2x,0,nrg,0,ntg,0,npg)
00062 call alloc_array3d(grad2y,0,nrg,0,ntg,0,npg)
00063 call alloc_array3d(grad2z,0,nrg,0,ntg,0,npg)
00064 call alloc_array3d(cri1va,0,nrg,0,ntg,0,npg)
00065 call alloc_array3d(cri2va,0,nrg,0,ntg,0,npg)
00066 call alloc_array3d(cri3va,0,nrg,0,ntg,0,npg)
00067 call alloc_array3d(cri4va,0,nrg,0,ntg,0,npg)
00068 call alloc_array3d(cri5va,0,nrg,0,ntg,0,npg)
00069 call alloc_array3d(cri6va,0,nrg,0,ntg,0,npg)
00070
00071
00072
00073 do ipg = 0, npg
00074 do itg = 0, ntg
00075 do irg = 0, nrg
00076
00077 vaxdc=vaxd(irg,itg,ipg)
00078 vaydc=vayd(irg,itg,ipg)
00079 vazdc=vazd(irg,itg,ipg)
00080 c11 = cri_grid(irg,itg,ipg,1,1)
00081 c12 = cri_grid(irg,itg,ipg,1,2)
00082 c13 = cri_grid(irg,itg,ipg,1,3)
00083 c14 = cri_grid(irg,itg,ipg,1,4)
00084 c15 = cri_grid(irg,itg,ipg,1,5)
00085 c16 = cri_grid(irg,itg,ipg,1,6)
00086 c21 = cri_grid(irg,itg,ipg,2,1)
00087 c22 = cri_grid(irg,itg,ipg,2,2)
00088 c23 = cri_grid(irg,itg,ipg,2,3)
00089 c24 = cri_grid(irg,itg,ipg,2,4)
00090 c25 = cri_grid(irg,itg,ipg,2,5)
00091 c26 = cri_grid(irg,itg,ipg,2,6)
00092 c31 = cri_grid(irg,itg,ipg,3,1)
00093 c32 = cri_grid(irg,itg,ipg,3,2)
00094 c33 = cri_grid(irg,itg,ipg,3,3)
00095 c34 = cri_grid(irg,itg,ipg,3,4)
00096 c35 = cri_grid(irg,itg,ipg,3,5)
00097 c36 = cri_grid(irg,itg,ipg,3,6)
00098 cri1va(irg,itg,ipg) = c11*vaxdc + c21*vaydc + c31*vazdc
00099 cri2va(irg,itg,ipg) = c12*vaxdc + c22*vaydc + c32*vazdc
00100 cri3va(irg,itg,ipg) = c13*vaxdc + c23*vaydc + c33*vazdc
00101 cri4va(irg,itg,ipg) = c14*vaxdc + c24*vaydc + c34*vazdc
00102 cri5va(irg,itg,ipg) = c15*vaxdc + c25*vaydc + c35*vazdc
00103 cri6va(irg,itg,ipg) = c16*vaxdc + c26*vaydc + c36*vazdc
00104
00105 end do
00106 end do
00107 end do
00108
00109 fnc2(0:nrg,0:ntg,0:npg) = alph(0:nrg,0:ntg,0:npg)*psi(0:nrg,0:ntg,0:npg)**2
00110 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00111
00112 san = 1.0d0/3.0d0
00113 san2= 2.0d0/3.0d0
00114
00115
00116
00117 do ii = 1, 3
00118
00119 do ipg = 1, npg
00120 do itg = 1, ntg
00121 do irg = 1, nrg
00122
00123 cutoff = 1.0d0
00124 if (chgra == 'c'.or.chgra == 'C'.or.chgra == 'W') then
00125 if (rg(irg) > cutfac*pi/ome) cutoff = 0.0d0
00126 end if
00127
00128 call interpo_linear_type0(vaxgc,vaxu,irg,itg,ipg)
00129 call interpo_linear_type0(vaygc,vayu,irg,itg,ipg)
00130 call interpo_linear_type0(vazgc,vazu,irg,itg,ipg)
00131 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00132 call interpo_linear_type0(alpsi2,fnc2,irg,itg,ipg)
00133 alpsi2inv = 1.0d0/alpsi2
00134
00135 call interpo_linear_type0(hhxxu,hxxu,irg,itg,ipg)
00136 call interpo_linear_type0(hhxyu,hxyu,irg,itg,ipg)
00137 call interpo_linear_type0(hhxzu,hxzu,irg,itg,ipg)
00138 call interpo_linear_type0(hhyyu,hyyu,irg,itg,ipg)
00139 call interpo_linear_type0(hhyzu,hyzu,irg,itg,ipg)
00140 call interpo_linear_type0(hhzzu,hzzu,irg,itg,ipg)
00141 hhyxu = hhxyu
00142 hhzxu = hhxzu
00143 hhzyu = hhyzu
00144 gmxxu = hhxxu + 1.0d0
00145 gmxyu = hhxyu
00146 gmxzu = hhxzu
00147 gmyyu = hhyyu + 1.0d0
00148 gmyzu = hhyzu
00149 gmzzu = hhzzu + 1.0d0
00150 gmyxu = gmxyu
00151 gmzxu = gmxzu
00152 gmzyu = gmyzu
00153 hiju(1,1) = hhxxu ; hiju(1,2) = hhxyu ; hiju(1,3) = hhxzu
00154 hiju(2,1) = hhxyu ; hiju(2,2) = hhyyu ; hiju(2,3) = hhyzu
00155 hiju(3,1) = hhxzu ; hiju(3,2) = hhyzu ; hiju(3,3) = hhzzu
00156 gmiju(1,1) = gmxxu; gmiju(1,2) = gmxyu; gmiju(1,3) = gmxzu
00157 gmiju(2,1) = gmxyu; gmiju(2,2) = gmyyu; gmiju(2,3) = gmyzu
00158 gmiju(3,1) = gmxzu; gmiju(3,2) = gmyzu; gmiju(3,3) = gmzzu
00159
00160 dxafn = grad2x(irg,itg,ipg)
00161 dyafn = grad2y(irg,itg,ipg)
00162 dzafn = grad2z(irg,itg,ipg)
00163 tfkijgc(1,1) = tfkij(irg,itg,ipg,1,1)
00164 tfkijgc(1,2) = tfkij(irg,itg,ipg,1,2)
00165 tfkijgc(1,3) = tfkij(irg,itg,ipg,1,3)
00166 tfkijgc(2,1) = tfkij(irg,itg,ipg,2,1)
00167 tfkijgc(2,2) = tfkij(irg,itg,ipg,2,2)
00168 tfkijgc(2,3) = tfkij(irg,itg,ipg,2,3)
00169 tfkijgc(3,1) = tfkij(irg,itg,ipg,3,1)
00170 tfkijgc(3,2) = tfkij(irg,itg,ipg,3,2)
00171 tfkijgc(3,3) = tfkij(irg,itg,ipg,3,3)
00172
00173 dvaxdx = cdvaxd(irg,itg,ipg,1)
00174 dvaydx = cdvayd(irg,itg,ipg,1)
00175 dvazdx = cdvazd(irg,itg,ipg,1)
00176 dvaxdy = cdvaxd(irg,itg,ipg,2)
00177 dvaydy = cdvayd(irg,itg,ipg,2)
00178 dvazdy = cdvazd(irg,itg,ipg,2)
00179 dvaxdz = cdvaxd(irg,itg,ipg,3)
00180 dvaydz = cdvayd(irg,itg,ipg,3)
00181 dvazdz = cdvazd(irg,itg,ipg,3)
00182
00183 fxdgc = fxd(irg,itg,ipg)
00184 fydgc = fyd(irg,itg,ipg)
00185 fzdgc = fzd(irg,itg,ipg)
00186 fijdgc(1,1) = 0.0d0 ; fijdgc(2,2) = 0.0d0 ; fijdgc(3,3) = 0.0d0
00187 fijdgc(1,2) = fijd(irg,itg,ipg,1) ; fijdgc(2,1) = - fijdgc(1,2)
00188 fijdgc(1,3) = fijd(irg,itg,ipg,2) ; fijdgc(3,1) = - fijdgc(1,3)
00189 fijdgc(2,3) = fijd(irg,itg,ipg,3) ; fijdgc(3,2) = - fijdgc(2,3)
00190
00191 hddb = 0.0d0
00192 gdcb = 0.0d0
00193 gcrdb1 = 0.0d0
00194 gcrdb2 = 0.0d0
00195 rax = 0.0d0
00196 ray = 0.0d0
00197 raz = 0.0d0
00198
00199 c11 = cri(irg,itg,ipg,1,1) ; c12 = cri(irg,itg,ipg,1,2)
00200 c13 = cri(irg,itg,ipg,1,3) ; c14 = cri(irg,itg,ipg,1,4)
00201 c15 = cri(irg,itg,ipg,1,5) ; c16 = cri(irg,itg,ipg,1,6)
00202 c21 = cri(irg,itg,ipg,2,1) ; c22 = cri(irg,itg,ipg,2,2)
00203 c23 = cri(irg,itg,ipg,2,3) ; c24 = cri(irg,itg,ipg,2,4)
00204 c25 = cri(irg,itg,ipg,2,5) ; c26 = cri(irg,itg,ipg,2,6)
00205 c31 = cri(irg,itg,ipg,3,1) ; c32 = cri(irg,itg,ipg,3,2)
00206 c33 = cri(irg,itg,ipg,3,3) ; c34 = cri(irg,itg,ipg,3,4)
00207 c35 = cri(irg,itg,ipg,3,5) ; c36 = cri(irg,itg,ipg,3,6)
00208
00209 gc1 = gmcrix(irg,itg,ipg)
00210 gc2 = gmcriy(irg,itg,ipg)
00211 gc3 = gmcriz(irg,itg,ipg)
00212
00213 ic1 = 1*(ii-2)*(ii-3)/2 - 2*(ii-1)*(ii-3) + 3*(ii-1)*(ii-2)/2
00214 ic2 = 2*(ii-2)*(ii-3)/2 - 4*(ii-1)*(ii-3) + 5*(ii-1)*(ii-2)/2
00215 ic3 = 3*(ii-2)*(ii-3)/2 - 5*(ii-1)*(ii-3) + 6*(ii-1)*(ii-2)/2
00216
00217 rax = rab(irg,itg,ipg,ic1)
00218 ray = rab(irg,itg,ipg,ic2)
00219 raz = rab(irg,itg,ipg,ic3)
00220
00221 ic0(1) = ic1
00222 ic0(2) = ic2
00223 ic0(3) = ic3
00224
00225
00226
00227
00228
00229
00230 if(ii == 1) call dadbscalar_type3(vaxd,dabfnc,irg,itg,ipg)
00231 if(ii == 2) call dadbscalar_type3(vayd,dabfnc,irg,itg,ipg)
00232 if(ii == 3) call dadbscalar_type3(vazd,dabfnc,irg,itg,ipg)
00233 hddb = hhxxu*dabfnc(1,1) + hhxyu*dabfnc(1,2) + hhxzu*dabfnc(1,3) &
00234 & + hhyxu*dabfnc(2,1) + hhyyu*dabfnc(2,2) + hhyzu*dabfnc(2,3) &
00235 & + hhzxu*dabfnc(3,1) + hhzyu*dabfnc(3,2) + hhzzu*dabfnc(3,3)
00236
00237
00238
00239 if (ii == 1) then
00240 call grgrad1g_midpoint(cri1va,grad,irg,itg,ipg)
00241 dxc1b = grad(1)
00242 dyc1b = grad(2)
00243 dzc1b = grad(3)
00244 call grgrad1g_midpoint(cri2va,grad,irg,itg,ipg)
00245 dxc2b = grad(1)
00246 dyc2b = grad(2)
00247 dzc2b = grad(3)
00248 call grgrad1g_midpoint(cri3va,grad,irg,itg,ipg)
00249 dxc3b = grad(1)
00250 dyc3b = grad(2)
00251 dzc3b = grad(3)
00252 gdcb = gmxxu*dxc1b + gmxyu*dxc2b + gmxzu*dxc3b &
00253 & + gmyxu*dyc1b + gmyyu*dyc2b + gmyzu*dyc3b &
00254 & + gmzxu*dzc1b + gmzyu*dzc2b + gmzzu*dzc3b
00255 end if
00256 if (ii == 2) then
00257 call grgrad1g_midpoint(cri2va,grad,irg,itg,ipg)
00258 dxc2b = grad(1)
00259 dyc2b = grad(2)
00260 dzc2b = grad(3)
00261 call grgrad1g_midpoint(cri4va,grad,irg,itg,ipg)
00262 dxc4b = grad(1)
00263 dyc4b = grad(2)
00264 dzc4b = grad(3)
00265 call grgrad1g_midpoint(cri5va,grad,irg,itg,ipg)
00266 dxc5b = grad(1)
00267 dyc5b = grad(2)
00268 dzc5b = grad(3)
00269 gdcb = gmxxu*dxc2b + gmxyu*dxc4b + gmxzu*dxc5b &
00270 & + gmyxu*dyc2b + gmyyu*dyc4b + gmyzu*dyc5b &
00271 & + gmzxu*dzc2b + gmzyu*dzc4b + gmzzu*dzc5b
00272 end if
00273 if (ii == 3) then
00274 call grgrad1g_midpoint(cri3va,grad,irg,itg,ipg)
00275 dxc3b = grad(1)
00276 dyc3b = grad(2)
00277 dzc3b = grad(3)
00278 call grgrad1g_midpoint(cri5va,grad,irg,itg,ipg)
00279 dxc5b = grad(1)
00280 dyc5b = grad(2)
00281 dzc5b = grad(3)
00282 call grgrad1g_midpoint(cri6va,grad,irg,itg,ipg)
00283 dxc6b = grad(1)
00284 dyc6b = grad(2)
00285 dzc6b = grad(3)
00286 gdcb = gmxxu*dxc3b + gmxyu*dxc5b + gmxzu*dxc6b &
00287 & + gmyxu*dyc3b + gmyyu*dyc5b + gmyzu*dyc6b &
00288 & + gmzxu*dzc3b + gmzyu*dzc5b + gmzzu*dzc6b
00289 end if
00290
00291
00292
00293 if (ii == 1) gcrdb1 = gc1*dvaxdx + gc2*dvaxdy + gc3*dvaxdz
00294 if (ii == 2) gcrdb1 = gc1*dvaydx + gc2*dvaydy + gc3*dvaydz
00295 if (ii == 3) gcrdb1 = gc1*dvazdx + gc2*dvazdy + gc3*dvazdz
00296
00297 gmxvax = gmxxu*dvaxdx + gmxyu*dvaxdy + gmxzu*dvaxdz
00298 gmxvay = gmxxu*dvaydx + gmxyu*dvaydy + gmxzu*dvaydz
00299 gmxvaz = gmxxu*dvazdx + gmxyu*dvazdy + gmxzu*dvazdz
00300 gmyvax = gmyxu*dvaxdx + gmyyu*dvaxdy + gmyzu*dvaxdz
00301 gmyvay = gmyxu*dvaydx + gmyyu*dvaydy + gmyzu*dvaydz
00302 gmyvaz = gmyxu*dvazdx + gmyyu*dvazdy + gmyzu*dvazdz
00303 gmzvax = gmzxu*dvaxdx + gmzyu*dvaxdy + gmzzu*dvaxdz
00304 gmzvay = gmzxu*dvaydx + gmzyu*dvaydy + gmzzu*dvaydz
00305 gmzvaz = gmzxu*dvazdx + gmzyu*dvazdy + gmzzu*dvazdz
00306
00307 if (ii == 1) gcrdb2 = c11*gmxvax + c21*gmxvay + c31*gmxvaz &
00308 & + c12*gmyvax + c22*gmyvay + c32*gmyvaz &
00309 & + c13*gmzvax + c23*gmzvay + c33*gmzvaz
00310
00311 if (ii == 2) gcrdb2 = c12*gmxvax + c22*gmxvay + c32*gmxvaz &
00312 & + c14*gmyvax + c24*gmyvay + c34*gmyvaz &
00313 & + c15*gmzvax + c25*gmzvay + c35*gmzvaz
00314
00315 if (ii == 3) gcrdb2 = c13*gmxvax + c23*gmxvay + c33*gmxvaz &
00316 & + c15*gmyvax + c25*gmyvay + c35*gmyvaz &
00317 & + c16*gmzvax + c26*gmzvay + c36*gmzvaz
00318
00319
00320 ricciva = rax*vaxgc + ray*vaygc + raz*vazgc
00321
00322 Fdalps2(1,1) = fijdgc(ii,1)*dxafn
00323 Fdalps2(1,2) = fijdgc(ii,1)*dyafn
00324 Fdalps2(1,3) = fijdgc(ii,1)*dzafn
00325 Fdalps2(2,1) = fijdgc(ii,2)*dxafn
00326 Fdalps2(2,2) = fijdgc(ii,2)*dyafn
00327 Fdalps2(2,3) = fijdgc(ii,2)*dzafn
00328 Fdalps2(3,1) = fijdgc(ii,3)*dxafn
00329 Fdalps2(3,2) = fijdgc(ii,3)*dyafn
00330 Fdalps2(3,3) = fijdgc(ii,3)*dzafn
00331 call compute_trace(hiju,Fdalps2,Fap2dap2)
00332 Fap2dap2 = alpsi2inv*Fap2dap2
00333
00334 AabFc(1,1) = tfkijgc(ii,1)*fxdgc
00335 AabFc(1,2) = tfkijgc(ii,1)*fydgc
00336 AabFc(1,3) = tfkijgc(ii,1)*fzdgc
00337 AabFc(2,1) = tfkijgc(ii,2)*fxdgc
00338 AabFc(2,2) = tfkijgc(ii,2)*fydgc
00339 AabFc(2,3) = tfkijgc(ii,2)*fzdgc
00340 AabFc(3,1) = tfkijgc(ii,3)*fxdgc
00341 AabFc(3,2) = tfkijgc(ii,3)*fydgc
00342 AabFc(3,3) = tfkijgc(ii,3)*fzdgc
00343 call compute_trace(hiju,AabFc,p4AF)
00344 p4AF = 2.0d0*psigc**4*p4AF
00345
00346 souvec(irg,itg,ipg,ii) = - hddb + gdcb + gcrdb1 + gcrdb2 &
00347 & + ricciva + Fap2dap2 - p4AF
00348
00349 end do
00350 end do
00351 end do
00352 end do
00353
00354
00355
00356 deallocate(fnc2)
00357 deallocate(grad2x)
00358 deallocate(grad2y)
00359 deallocate(grad2z)
00360 deallocate(cri1va)
00361 deallocate(cri2va)
00362 deallocate(cri3va)
00363 deallocate(cri4va)
00364 deallocate(cri5va)
00365 deallocate(cri6va)
00366
00367 end subroutine sourceterm_MWspatial_WL