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
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 do ib = 1, 3
00070 do ia = 1, 3
00071 tfkijkij(irg,itg,ipg) = tfkijkij(irg,itg,ipg) &
00072 + tfkij(irg,itg,ipg,ia,ib)*tfkij(irg,itg,ipg,ia,ib)
00073 end do
00074 end do
00075
00076 if (tfkijkij(irg,itg,ipg) /= 0.0d0) info = 1
00077
00078 end do
00079 end do
00080 end do
00081
00082 if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00083 deallocate(dbvxdx)
00084 deallocate(dbvxdy)
00085 deallocate(dbvxdz)
00086 deallocate(dbvydx)
00087 deallocate(dbvydy)
00088 deallocate(dbvydz)
00089 deallocate(dbvzdx)
00090 deallocate(dbvzdy)
00091 deallocate(dbvzdz)
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 end subroutine excurve_CF