00001 subroutine SEM_tensor_EMF
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : psi
00005 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00006 & hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_faraday_tensor, only : fxd, fyd, fzd, fijdu, fijd, fidfiu, fijfij
00008 use def_SEM_tensor_EMF, only : rhoH_EMF, jmd_EMF, smijd_EMF, trsm_EMF
00009 use interface_interpo_linear_type0
00010 use make_array_3d
00011 implicit none
00012 integer :: irg, itg, ipg, ia, ib
00013 real(long) :: pi4inv, pi8inv
00014 real(long) :: psigc, psigc4, psigc4inv, psigc8inv, gamd(3,3), gamu(3,3)
00015 real(long) :: hxxdgc, hxydgc, hxzdgc, hyydgc, hyzdgc, hzzdgc
00016 real(long) :: hxxugc, hxyugc, hxzugc, hyyugc, hyzugc, hzzugc
00017 real(long) :: fidfiugc, fijfijgc, fid(3), fijdugc(3,3), fijdgc(3,3)
00018
00019
00020
00021
00022 pi4inv = 1.0d0/(4.0d0*pi)
00023 pi8inv = 1.0d0/(8.0d0*pi)
00024 do ipg = 1, npg
00025 do itg = 1, ntg
00026 do irg = 1, nrg
00027
00028 call interpo_linear_type0(psigc,psi ,irg,itg,ipg)
00029 call interpo_linear_type0(hxxdgc,hxxd,irg,itg,ipg)
00030 call interpo_linear_type0(hxydgc,hxyd,irg,itg,ipg)
00031 call interpo_linear_type0(hxzdgc,hxzd,irg,itg,ipg)
00032 call interpo_linear_type0(hyydgc,hyyd,irg,itg,ipg)
00033 call interpo_linear_type0(hyzdgc,hyzd,irg,itg,ipg)
00034 call interpo_linear_type0(hzzdgc,hzzd,irg,itg,ipg)
00035 psigc4 = psigc**4
00036 psigc4inv = 1.0d0/psigc**4
00037 psigc8inv = 1.0d0/psigc**8
00038 gamd(1,1) = 1.0d0 + hxxdgc
00039 gamd(1,2) = hxydgc
00040 gamd(1,3) = hxzdgc
00041 gamd(2,2) = 1.0d0 + hyydgc
00042 gamd(2,3) = hyzdgc
00043 gamd(3,3) = 1.0d0 + hzzdgc
00044 gamd(2,1) = gamd(1,2)
00045 gamd(3,1) = gamd(1,3)
00046 gamd(3,2) = gamd(2,3)
00047
00048 call interpo_linear_type0(hxxugc,hxxu,irg,itg,ipg)
00049 call interpo_linear_type0(hxyugc,hxyu,irg,itg,ipg)
00050 call interpo_linear_type0(hxzugc,hxzu,irg,itg,ipg)
00051 call interpo_linear_type0(hyyugc,hyyu,irg,itg,ipg)
00052 call interpo_linear_type0(hyzugc,hyzu,irg,itg,ipg)
00053 call interpo_linear_type0(hzzugc,hzzu,irg,itg,ipg)
00054 gamu(1,1) = hxxugc + 1.0d0
00055 gamu(1,2) = hxyugc
00056 gamu(1,3) = hxzugc
00057 gamu(2,2) = hyyugc + 1.0d0
00058 gamu(2,3) = hyzugc
00059 gamu(3,3) = hzzugc + 1.0d0
00060 gamu(2,1) = gamu(1,2)
00061 gamu(3,1) = gamu(1,3)
00062 gamu(3,2) = gamu(2,3)
00063
00064 fidfiugc = fidfiu(irg,itg,ipg)
00065 fijfijgc = fijfij(irg,itg,ipg)
00066 fid(1) = fxd(irg,itg,ipg)
00067 fid(2) = fyd(irg,itg,ipg)
00068 fid(3) = fzd(irg,itg,ipg)
00069 fijdugc(1:3,1:3) = fijdu(irg,itg,ipg,1:3,1:3)
00070 fijdgc(1,1) = 0.0d0 ; fijdgc(2,2) = 0.0d0 ; fijdgc(3,3) = 0.0d0
00071 fijdgc(1,2) = fijd(irg,itg,ipg,1) ; fijdgc(2,1) = - fijdgc(1,2)
00072 fijdgc(1,3) = fijd(irg,itg,ipg,2) ; fijdgc(3,1) = - fijdgc(1,3)
00073 fijdgc(2,3) = fijd(irg,itg,ipg,3) ; fijdgc(3,2) = - fijdgc(2,3)
00074
00075 rhoH_EMF(irg,itg,ipg) = pi8inv*(psigc4inv*fidfiugc &
00076 & + 0.5d0* psigc8inv*fijfijgc)
00077
00078 do ia = 1, 3
00079
00080 jmd_EMF(irg,itg,ipg,ia) = pi4inv*psigc4inv &
00081 & *(fijdugc(ia,1)*fid(1) &
00082 & + fijdugc(ia,2)*fid(2) &
00083 & + fijdugc(ia,3)*fid(3))
00084
00085 do ib = 1, 3
00086 smijd_EMF(irg,itg,ipg,ia,ib) = pi4inv* &
00087 & ( psigc4inv*(fijdugc(ia,1)*fijdgc(ib,1) &
00088 & + fijdugc(ia,2)*fijdgc(ib,2) &
00089 & + fijdugc(ia,3)*fijdgc(ib,3)) &
00090 & - fid(ia)*fid(ib) &
00091 & - 0.25d0*psigc4*gamd(ia,ib) &
00092 & *(psigc8inv*fijfijgc - 2.0d0*psigc4inv*fidfiugc) )
00093 end do
00094 end do
00095
00096 trsm_EMF(irg,itg,ipg) = pi8inv*(psigc4inv*fidfiugc &
00097 & + 0.5d0* psigc8inv*fijfijgc)
00098
00099 end do
00100 end do
00101 end do
00102
00103
00104
00105 end subroutine SEM_tensor_EMF