00001 subroutine excurve_CF(cobj)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric, only : alph, bvxd, bvyd, bvzd, tfkij, tfkijkij, trk
00005 use interface_grgrad_midpoint_r3rd_nsbh
00006 use interface_interpo_linear_type0
00007 use make_array_3d
00008 implicit none
00009 integer :: info
00010 integer :: ia, ib
00011 integer :: irg, itg, ipg
00012 real(long) :: fa23, diver
00013 real(long) :: alpgc, ainvh, cdivbv
00014 real(long), pointer :: dbvxdx(:,:,:), dbvxdy(:,:,:), dbvxdz(:,:,:)
00015 real(long), pointer :: dbvydx(:,:,:), dbvydy(:,:,:), dbvydz(:,:,:)
00016 real(long), pointer :: dbvzdx(:,:,:), dbvzdy(:,:,:), dbvzdz(:,:,:)
00017 character(len=2), intent(in) :: cobj
00018
00019
00020
00021
00022
00023 info = 0
00024
00025
00026 fa23 = 2.0d0/3.0d0
00027
00028 call alloc_array3d(dbvxdx, 0, nrg, 0, ntg, 0, npg)
00029 call alloc_array3d(dbvxdy, 0, nrg, 0, ntg, 0, npg)
00030 call alloc_array3d(dbvxdz, 0, nrg, 0, ntg, 0, npg)
00031 call alloc_array3d(dbvydx, 0, nrg, 0, ntg, 0, npg)
00032 call alloc_array3d(dbvydy, 0, nrg, 0, ntg, 0, npg)
00033 call alloc_array3d(dbvydz, 0, nrg, 0, ntg, 0, npg)
00034 call alloc_array3d(dbvzdx, 0, nrg, 0, ntg, 0, npg)
00035 call alloc_array3d(dbvzdy, 0, nrg, 0, ntg, 0, npg)
00036 call alloc_array3d(dbvzdz, 0, nrg, 0, ntg, 0, npg)
00037
00038 call grgrad_midpoint_r3rd_nsbh(bvxd,dbvxdx,dbvxdy,dbvxdz,cobj)
00039 call grgrad_midpoint_r3rd_nsbh(bvyd,dbvydx,dbvydy,dbvydz,cobj)
00040 call grgrad_midpoint_r3rd_nsbh(bvzd,dbvzdx,dbvzdy,dbvzdz,cobj)
00041
00042 do ipg = 1, npg
00043 do itg = 1, ntg
00044 do irg = 1, nrg
00045
00046 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00047 ainvh = 0.5d0/alpgc
00048 cdivbv = dbvxdx(irg,itg,ipg) + dbvydy(irg,itg,ipg) &
00049 + dbvzdz(irg,itg,ipg)
00050 diver = fa23*cdivbv
00051
00052 tfkij(irg,itg,ipg,1,1) = ainvh*(2.0d0*dbvxdx(irg,itg,ipg) &
00053 - diver)
00054 tfkij(irg,itg,ipg,2,2) = ainvh*(2.0d0*dbvydy(irg,itg,ipg) &
00055 - diver)
00056 tfkij(irg,itg,ipg,3,3) = ainvh*(2.0d0*dbvzdz(irg,itg,ipg) &
00057 - diver)
00058 tfkij(irg,itg,ipg,1,2) = ainvh*(dbvydx(irg,itg,ipg) &
00059 + dbvxdy(irg,itg,ipg))
00060 tfkij(irg,itg,ipg,1,3) = ainvh*(dbvzdx(irg,itg,ipg) &
00061 + dbvxdz(irg,itg,ipg))
00062 tfkij(irg,itg,ipg,2,3) = ainvh*(dbvzdy(irg,itg,ipg) &
00063 + dbvydz(irg,itg,ipg))
00064 tfkij(irg,itg,ipg,2,1) = tfkij(irg,itg,ipg,1,2)
00065 tfkij(irg,itg,ipg,3,1) = tfkij(irg,itg,ipg,1,3)
00066 tfkij(irg,itg,ipg,3,2) = tfkij(irg,itg,ipg,2,3)
00067
00068 tfkijkij(irg,itg,ipg) = 0.0d0
00069 trk(irg,itg,ipg) = 0.0d0
00070 do ib = 1, 3
00071 do ia = 1, 3
00072 tfkijkij(irg,itg,ipg) = tfkijkij(irg,itg,ipg) &
00073 + tfkij(irg,itg,ipg,ia,ib)*tfkij(irg,itg,ipg,ia,ib)
00074 end do
00075 end do
00076
00077 if (tfkijkij(irg,itg,ipg) /= 0.0d0) info = 1
00078
00079 end do
00080 end do
00081 end do
00082
00083 if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00084 deallocate(dbvxdx)
00085 deallocate(dbvxdy)
00086 deallocate(dbvxdz)
00087 deallocate(dbvydx)
00088 deallocate(dbvydy)
00089 deallocate(dbvydz)
00090 deallocate(dbvzdx)
00091 deallocate(dbvzdy)
00092 deallocate(dbvzdz)
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 end subroutine excurve_CF