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