00001 subroutine faraday
00002 use phys_constant, only : long
00003 use make_array_3d
00004 use grid_parameter, only : nrg, ntg, npg
00005 use def_metric, only : alph, bvxu, bvyu, bvzu
00006 use def_emfield, only : alva, vaxd, vayd, vazd
00007 use def_faraday_tensor, only : fxd, fyd, fzd, fijd
00008 use def_emfield_derivatives, only : Lie_bAxd, Lie_bAyd, Lie_bAzd
00009 use interface_grgrad_midpoint
00010 use interface_interpo_linear_type0
00011 implicit none
00012 integer :: irg, itg, ipg
00013 real(long) :: alpgc, ainvh, bvxugc, bvyugc, bvzugc
00014 real(long) :: vaxdgc, vaydgc, vazdgc
00015 real(long) :: dbvxdxgc, dbvxdygc, dbvxdzgc,
00016 dbvydxgc, dbvydygc, dbvydzgc, &
00017 dbvzdxgc, dbvzdygc, dbvzdzgc
00018 real(long) :: dvaxdxgc, dvaxdygc, dvaxdzgc,
00019 dvaydxgc, dvaydygc, dvaydzgc, &
00020 dvazdxgc, dvazdygc, dvazdzgc
00021 real(long) :: dalvadxgc, dalvadygc, dalvadzgc
00022 real(long) :: lie_bAx, lie_bAy, lie_bAz
00023 real(long), pointer :: dbvxdx(:,:,:), dbvxdy(:,:,:), dbvxdz(:,:,:)
00024 real(long), pointer :: dbvydx(:,:,:), dbvydy(:,:,:), dbvydz(:,:,:)
00025 real(long), pointer :: dbvzdx(:,:,:), dbvzdy(:,:,:), dbvzdz(:,:,:)
00026 real(long), pointer :: dvaxdx(:,:,:), dvaxdy(:,:,:), dvaxdz(:,:,:)
00027 real(long), pointer :: dvaydx(:,:,:), dvaydy(:,:,:), dvaydz(:,:,:)
00028 real(long), pointer :: dvazdx(:,:,:), dvazdy(:,:,:), dvazdz(:,:,:)
00029 real(long), pointer :: dalvadx(:,:,:), dalvady(:,:,:), dalvadz(:,:,:)
00030
00031
00032
00033
00034 call alloc_array3d(dbvxdx, 0, nrg, 0, ntg, 0, npg)
00035 call alloc_array3d(dbvxdy, 0, nrg, 0, ntg, 0, npg)
00036 call alloc_array3d(dbvxdz, 0, nrg, 0, ntg, 0, npg)
00037 call alloc_array3d(dbvydx, 0, nrg, 0, ntg, 0, npg)
00038 call alloc_array3d(dbvydy, 0, nrg, 0, ntg, 0, npg)
00039 call alloc_array3d(dbvydz, 0, nrg, 0, ntg, 0, npg)
00040 call alloc_array3d(dbvzdx, 0, nrg, 0, ntg, 0, npg)
00041 call alloc_array3d(dbvzdy, 0, nrg, 0, ntg, 0, npg)
00042 call alloc_array3d(dbvzdz, 0, nrg, 0, ntg, 0, npg)
00043 call grgrad_midpoint(bvxu,dbvxdx,dbvxdy,dbvxdz)
00044 call grgrad_midpoint(bvyu,dbvydx,dbvydy,dbvydz)
00045 call grgrad_midpoint(bvzu,dbvzdx,dbvzdy,dbvzdz)
00046
00047 call alloc_array3d(dvaxdx, 0, nrg, 0, ntg, 0, npg)
00048 call alloc_array3d(dvaxdy, 0, nrg, 0, ntg, 0, npg)
00049 call alloc_array3d(dvaxdz, 0, nrg, 0, ntg, 0, npg)
00050 call alloc_array3d(dvaydx, 0, nrg, 0, ntg, 0, npg)
00051 call alloc_array3d(dvaydy, 0, nrg, 0, ntg, 0, npg)
00052 call alloc_array3d(dvaydz, 0, nrg, 0, ntg, 0, npg)
00053 call alloc_array3d(dvazdx, 0, nrg, 0, ntg, 0, npg)
00054 call alloc_array3d(dvazdy, 0, nrg, 0, ntg, 0, npg)
00055 call alloc_array3d(dvazdz, 0, nrg, 0, ntg, 0, npg)
00056 call grgrad_midpoint(vaxd,dvaxdx,dvaxdy,dvaxdz)
00057 call grgrad_midpoint(vayd,dvaydx,dvaydy,dvaydz)
00058 call grgrad_midpoint(vazd,dvazdx,dvazdy,dvazdz)
00059
00060 call alloc_array3d(dalvadx, 0, nrg, 0, ntg, 0, npg)
00061 call alloc_array3d(dalvady, 0, nrg, 0, ntg, 0, npg)
00062 call alloc_array3d(dalvadz, 0, nrg, 0, ntg, 0, npg)
00063 call grgrad_midpoint(alva,dalvadx,dalvady,dalvadz)
00064
00065 do ipg = 1, npg
00066 do itg = 1, ntg
00067 do irg = 1, nrg
00068
00069 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00070 ainvh = 1.0d0/alpgc
00071 call interpo_linear_type0(bvxugc,bvxu,irg,itg,ipg)
00072 call interpo_linear_type0(bvyugc,bvyu,irg,itg,ipg)
00073 call interpo_linear_type0(bvzugc,bvzu,irg,itg,ipg)
00074 call interpo_linear_type0(vaxdgc,vaxd,irg,itg,ipg)
00075 call interpo_linear_type0(vaydgc,vayd,irg,itg,ipg)
00076 call interpo_linear_type0(vazdgc,vazd,irg,itg,ipg)
00077 dbvxdxgc = dbvxdx(irg,itg,ipg) ; dvaxdxgc = dvaxdx(irg,itg,ipg)
00078 dbvxdygc = dbvxdy(irg,itg,ipg) ; dvaxdygc = dvaxdy(irg,itg,ipg)
00079 dbvxdzgc = dbvxdz(irg,itg,ipg) ; dvaxdzgc = dvaxdz(irg,itg,ipg)
00080 dbvydxgc = dbvydx(irg,itg,ipg) ; dvaydxgc = dvaydx(irg,itg,ipg)
00081 dbvydygc = dbvydy(irg,itg,ipg) ; dvaydygc = dvaydy(irg,itg,ipg)
00082 dbvydzgc = dbvydz(irg,itg,ipg) ; dvaydzgc = dvaydz(irg,itg,ipg)
00083 dbvzdxgc = dbvzdx(irg,itg,ipg) ; dvazdxgc = dvazdx(irg,itg,ipg)
00084 dbvzdygc = dbvzdy(irg,itg,ipg) ; dvazdygc = dvazdy(irg,itg,ipg)
00085 dbvzdzgc = dbvzdz(irg,itg,ipg) ; dvazdzgc = dvazdz(irg,itg,ipg)
00086 dalvadxgc = dalvadx(irg,itg,ipg)
00087 dalvadygc = dalvady(irg,itg,ipg)
00088 dalvadzgc = dalvadz(irg,itg,ipg)
00089
00090 lie_bAx = bvxugc*dvaxdxgc + bvyugc*dvaxdygc + bvzugc*dvaxdzgc &
00091 & + vaxdgc*dbvxdxgc + vaydgc*dbvydxgc + vazdgc*dbvzdxgc
00092 lie_bAy = bvxugc*dvaydxgc + bvyugc*dvaydygc + bvzugc*dvaydzgc &
00093 & + vaxdgc*dbvxdygc + vaydgc*dbvydygc + vazdgc*dbvzdygc
00094 lie_bAz = bvxugc*dvazdxgc + bvyugc*dvazdygc + bvzugc*dvazdzgc &
00095 & + vaxdgc*dbvxdzgc + vaydgc*dbvydzgc + vazdgc*dbvzdzgc
00096
00097 Lie_bAxd(irg,itg,ipg) = lie_bAx
00098 Lie_bAyd(irg,itg,ipg) = lie_bAy
00099 Lie_bAzd(irg,itg,ipg) = lie_bAz
00100
00101 fxd(irg,itg,ipg) = ainvh*(lie_bAx - dalvadxgc)
00102 fyd(irg,itg,ipg) = ainvh*(lie_bAy - dalvadygc)
00103 fzd(irg,itg,ipg) = ainvh*(lie_bAz - dalvadzgc)
00104 fijd(irg,itg,ipg,1) = dvaydxgc - dvaxdygc
00105 fijd(irg,itg,ipg,2) = dvazdxgc - dvaxdzgc
00106 fijd(irg,itg,ipg,3) = dvazdygc - dvaydzgc
00107
00108 end do
00109 end do
00110 end do
00111
00112 deallocate(dalvadx)
00113 deallocate(dalvady)
00114 deallocate(dalvadz)
00115 deallocate(dvaxdx)
00116 deallocate(dvaxdy)
00117 deallocate(dvaxdz)
00118 deallocate(dvaydx)
00119 deallocate(dvaydy)
00120 deallocate(dvaydz)
00121 deallocate(dvazdx)
00122 deallocate(dvazdy)
00123 deallocate(dvazdz)
00124
00125 deallocate(dbvxdx)
00126 deallocate(dbvxdy)
00127 deallocate(dbvxdz)
00128 deallocate(dbvydx)
00129 deallocate(dbvydy)
00130 deallocate(dbvydz)
00131 deallocate(dbvzdx)
00132 deallocate(dbvzdy)
00133 deallocate(dbvzdz)
00134
00135 end subroutine faraday