00001 subroutine excurve
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
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 
00018 
00019 
00020 
00021 
00022   info = 0
00023 
00024 
00025   fa23 = 2.0d0/3.0d0
00026 
00027   call alloc_array3d(dbvxdx, 0, nrg, 0, ntg, 0, npg)
00028   call alloc_array3d(dbvxdy, 0, nrg, 0, ntg, 0, npg)
00029   call alloc_array3d(dbvxdz, 0, nrg, 0, ntg, 0, npg)
00030   call alloc_array3d(dbvydx, 0, nrg, 0, ntg, 0, npg)
00031   call alloc_array3d(dbvydy, 0, nrg, 0, ntg, 0, npg)
00032   call alloc_array3d(dbvydz, 0, nrg, 0, ntg, 0, npg)
00033   call alloc_array3d(dbvzdx, 0, nrg, 0, ntg, 0, npg)
00034   call alloc_array3d(dbvzdy, 0, nrg, 0, ntg, 0, npg)
00035   call alloc_array3d(dbvzdz, 0, nrg, 0, ntg, 0, npg)
00036   call grgrad_midpoint(bvxd,dbvxdx,dbvxdy,dbvxdz)
00037   call grgrad_midpoint(bvyd,dbvydx,dbvydy,dbvydz)
00038   call grgrad_midpoint(bvzd,dbvzdx,dbvzdy,dbvzdz)
00039 
00040   do ipg = 1, npg
00041     do itg = 1, ntg
00042       do irg = 1, nrg
00043 
00044         call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00045         ainvh = 0.5d0/alpgc    
00046         cdivbv = dbvxdx(irg,itg,ipg) + dbvydy(irg,itg,ipg) &
00047                + dbvzdz(irg,itg,ipg)
00048         diver = fa23*cdivbv
00049 
00050         tfkij(irg,itg,ipg,1,1) = ainvh*(2.0d0*dbvxdx(irg,itg,ipg) &
00051         - diver)
00052         tfkij(irg,itg,ipg,2,2) = ainvh*(2.0d0*dbvydy(irg,itg,ipg) & 
00053         - diver)
00054         tfkij(irg,itg,ipg,3,3) = ainvh*(2.0d0*dbvzdz(irg,itg,ipg) & 
00055         - diver)
00056         tfkij(irg,itg,ipg,1,2) = ainvh*(dbvydx(irg,itg,ipg) & 
00057         + dbvxdy(irg,itg,ipg))
00058         tfkij(irg,itg,ipg,1,3) = ainvh*(dbvzdx(irg,itg,ipg) & 
00059         + dbvxdz(irg,itg,ipg))
00060         tfkij(irg,itg,ipg,2,3) = ainvh*(dbvzdy(irg,itg,ipg) & 
00061         + dbvydz(irg,itg,ipg))
00062         tfkij(irg,itg,ipg,2,1) = tfkij(irg,itg,ipg,1,2)
00063         tfkij(irg,itg,ipg,3,1) = tfkij(irg,itg,ipg,1,3)
00064         tfkij(irg,itg,ipg,3,2) = tfkij(irg,itg,ipg,2,3)
00065 
00066         tfkijkij(irg,itg,ipg) = 0.0d0
00067         do ib = 1, 3
00068           do ia = 1, 3
00069             tfkijkij(irg,itg,ipg) = tfkijkij(irg,itg,ipg) & 
00070             + tfkij(irg,itg,ipg,ia,ib)*tfkij(irg,itg,ipg,ia,ib)
00071           end do
00072         end do
00073 
00074         if (tfkijkij(irg,itg,ipg) /= 0.0d0) info = 1
00075 
00076       end do
00077     end do
00078   end do
00079 
00080   if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00081   deallocate(dbvxdx)
00082   deallocate(dbvxdy)
00083   deallocate(dbvxdz)
00084   deallocate(dbvydx)
00085   deallocate(dbvydy)
00086   deallocate(dbvydz)
00087   deallocate(dbvzdx)
00088   deallocate(dbvzdy)
00089   deallocate(dbvzdz)
00090 
00091 
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100 end subroutine excurve 
00101 
00102 
00103