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 trk(irg,itg,ipg) = 0.0d0
00087 do ib = 1, 3
00088 do ia = 1, 3
00089 tfkijkij(irg,itg,ipg) = tfkijkij(irg,itg,ipg) &
00090 + tfkij(irg,itg,ipg,ia,ib)*tfkij(irg,itg,ipg,ia,ib)
00091 end do
00092 end do
00093
00094 if (tfkijkij(irg,itg,ipg) /= 0.0d0) info = 1
00095
00096 end do
00097 end do
00098 end do
00099
00100 if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00101 deallocate(dbvxdx)
00102 deallocate(dbvxdy)
00103 deallocate(dbvxdz)
00104 deallocate(dbvydx)
00105 deallocate(dbvydy)
00106 deallocate(dbvydz)
00107 deallocate(dbvzdx)
00108 deallocate(dbvzdy)
00109 deallocate(dbvzdz)
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 end subroutine excurve
00121
00122
00123