00001 subroutine excurve_WL_gridpoint
00002 use phys_constant, only : nnrg, nntg, nnpg, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_matter_parameter, only : ome, ber, radi
00005 use def_metric, only : alph, bvxd, bvyd, bvzd, bvxu, bvyu, bvzu
00006 use def_metric_excurve_grid, only : tfkij_grid, tfkijkij_grid
00007 use coordinate_grav_r, only : rg
00008
00009 use def_cristoffel_grid, only : cri_grid
00010 use def_Lie_derivatives_grid, only : elpxx_grid, elpxy_grid, elpxz_grid, &
00011 & elpyy_grid, elpyz_grid, elpzz_grid, &
00012 & rlbxx_grid, rlbxy_grid, rlbxz_grid, &
00013 & rlbyy_grid, rlbyz_grid, rlbzz_grid
00014 use def_shift_derivatives_grid, only : cdbvxd_grid, cdbvyd_grid, &
00015 & cdbvzd_grid, cdivbv_grid, &
00016 & pdbvxd_grid, pdbvyd_grid, pdbvzd_grid
00017 use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00018 & hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00019 use def_cutsw, only : cutfac
00020 use def_formulation, only : chgra
00021
00022 use interface_grgrad_4th_gridpoint
00023 use make_array_3d
00024 use make_array_4d
00025 implicit none
00026
00027 real(8) :: dfdx, dfdy, dfdz
00028 real(8) :: gamu(3,3)
00029 real(8) :: ainvh, bvxha, bvyha, bvzha, cutoff, diver, fa23,
00030 dbvxdx, dbvxdy, dbvxdz, &
00031 dbvydx, dbvydy, dbvydz, &
00032 dbvzdx, dbvzdy, dbvzdz, &
00033 gmxxd, gmxyd, gmxzd, gmxxu, gmxyu, gmxzu, &
00034 gmyxd, gmyyd, gmyzd, gmyxu, gmyyu, gmyzu, &
00035 gmzxd, gmzyd, gmzzd, gmzxu, gmzyu, gmzzu, &
00036 oelpxx, oelpxy, oelpxz, &
00037 oelpyy, oelpyz, oelpzz, &
00038 pdbvxdx, pdbvxdy, pdbvxdz, &
00039 pdbvydx, pdbvydy, pdbvydz, &
00040 pdbvzdx, pdbvzdy, pdbvzdz
00041 integer :: ia, ib, ic, id, info, ipg, irg, itg
00042
00043
00044
00045
00046
00047 info = 0
00048
00049
00050 fa23 = 2.0d0/3.0d0
00051
00052 do ipg = 0, npg
00053 do itg = 0, ntg
00054 do irg = 0, nrg
00055
00056 call grgrad_4th_gridpoint(bvxd,dfdx,dfdy,dfdz,irg,itg,ipg)
00057 pdbvxd_grid(irg,itg,ipg,1) = dfdx
00058 pdbvxd_grid(irg,itg,ipg,2) = dfdy
00059 pdbvxd_grid(irg,itg,ipg,3) = dfdz
00060
00061 call grgrad_4th_gridpoint(bvyd,dfdx,dfdy,dfdz,irg,itg,ipg)
00062 pdbvyd_grid(irg,itg,ipg,1) = dfdx
00063 pdbvyd_grid(irg,itg,ipg,2) = dfdy
00064 pdbvyd_grid(irg,itg,ipg,3) = dfdz
00065
00066 call grgrad_4th_gridpoint(bvzd,dfdx,dfdy,dfdz,irg,itg,ipg)
00067 pdbvzd_grid(irg,itg,ipg,1) = dfdx
00068 pdbvzd_grid(irg,itg,ipg,2) = dfdy
00069 pdbvzd_grid(irg,itg,ipg,3) = dfdz
00070
00071 call grgrad_4th_gridpoint(bvxu,pdbvxdx,pdbvxdy,pdbvxdz,irg,itg,ipg)
00072 call grgrad_4th_gridpoint(bvyu,pdbvydx,pdbvydy,pdbvydz,irg,itg,ipg)
00073 call grgrad_4th_gridpoint(bvzu,pdbvzdx,pdbvzdy,pdbvzdz,irg,itg,ipg)
00074
00075 cutoff = 1.0d0
00076 if (chgra == 'c'.or.chgra == 'C'.or.chgra == 'W') then
00077 if (rg(irg) > cutfac*pi/ome) cutoff = 0.0d0
00078 end if
00079
00080 bvxha = bvxd(irg,itg,ipg)
00081 bvyha = bvyd(irg,itg,ipg)
00082 bvzha = bvzd(irg,itg,ipg)
00083 ainvh = alph(irg,itg,ipg)
00084 ainvh = 0.5d0/ainvh
00085
00086 cdbvxd_grid(irg,itg,ipg,1) = pdbvxd_grid(irg,itg,ipg,1) &
00087 & - cri_grid(irg,itg,ipg,1,1)*bvxha &
00088 & - cri_grid(irg,itg,ipg,2,1)*bvyha &
00089 & - cri_grid(irg,itg,ipg,3,1)*bvzha
00090 cdbvyd_grid(irg,itg,ipg,1) = pdbvyd_grid(irg,itg,ipg,1) &
00091 & - cri_grid(irg,itg,ipg,1,2)*bvxha &
00092 & - cri_grid(irg,itg,ipg,2,2)*bvyha &
00093 & - cri_grid(irg,itg,ipg,3,2)*bvzha
00094 cdbvzd_grid(irg,itg,ipg,1) = pdbvzd_grid(irg,itg,ipg,1) &
00095 & - cri_grid(irg,itg,ipg,1,3)*bvxha &
00096 & - cri_grid(irg,itg,ipg,2,3)*bvyha &
00097 & - cri_grid(irg,itg,ipg,3,3)*bvzha
00098
00099 cdbvxd_grid(irg,itg,ipg,2) = pdbvxd_grid(irg,itg,ipg,2) &
00100 & - cri_grid(irg,itg,ipg,1,2)*bvxha &
00101 & - cri_grid(irg,itg,ipg,2,2)*bvyha &
00102 & - cri_grid(irg,itg,ipg,3,2)*bvzha
00103 cdbvyd_grid(irg,itg,ipg,2) = pdbvyd_grid(irg,itg,ipg,2) &
00104 & - cri_grid(irg,itg,ipg,1,4)*bvxha &
00105 & - cri_grid(irg,itg,ipg,2,4)*bvyha &
00106 & - cri_grid(irg,itg,ipg,3,4)*bvzha
00107 cdbvzd_grid(irg,itg,ipg,2) = pdbvzd_grid(irg,itg,ipg,2) &
00108 & - cri_grid(irg,itg,ipg,1,5)*bvxha &
00109 & - cri_grid(irg,itg,ipg,2,5)*bvyha &
00110 & - cri_grid(irg,itg,ipg,3,5)*bvzha
00111
00112 cdbvxd_grid(irg,itg,ipg,3) = pdbvxd_grid(irg,itg,ipg,3) &
00113 & - cri_grid(irg,itg,ipg,1,3)*bvxha &
00114 & - cri_grid(irg,itg,ipg,2,3)*bvyha &
00115 & - cri_grid(irg,itg,ipg,3,3)*bvzha
00116 cdbvyd_grid(irg,itg,ipg,3) = pdbvyd_grid(irg,itg,ipg,3) &
00117 & - cri_grid(irg,itg,ipg,1,5)*bvxha &
00118 & - cri_grid(irg,itg,ipg,2,5)*bvyha &
00119 & - cri_grid(irg,itg,ipg,3,5)*bvzha
00120 cdbvzd_grid(irg,itg,ipg,3) = pdbvzd_grid(irg,itg,ipg,3) &
00121 & - cri_grid(irg,itg,ipg,1,6)*bvxha &
00122 & - cri_grid(irg,itg,ipg,2,6)*bvyha &
00123 & - cri_grid(irg,itg,ipg,3,6)*bvzha
00124
00125 dbvxdx = cdbvxd_grid(irg,itg,ipg,1)
00126 dbvydx = cdbvyd_grid(irg,itg,ipg,1)
00127 dbvzdx = cdbvzd_grid(irg,itg,ipg,1)
00128
00129 dbvxdy = cdbvxd_grid(irg,itg,ipg,2)
00130 dbvydy = cdbvyd_grid(irg,itg,ipg,2)
00131 dbvzdy = cdbvzd_grid(irg,itg,ipg,2)
00132
00133 dbvxdz = cdbvxd_grid(irg,itg,ipg,3)
00134 dbvydz = cdbvyd_grid(irg,itg,ipg,3)
00135 dbvzdz = cdbvzd_grid(irg,itg,ipg,3)
00136
00137 gmxxd = hxxd(irg,itg,ipg)
00138 gmxyd = hxyd(irg,itg,ipg)
00139 gmxzd = hxzd(irg,itg,ipg)
00140 gmyyd = hyyd(irg,itg,ipg)
00141 gmyzd = hyzd(irg,itg,ipg)
00142 gmzzd = hzzd(irg,itg,ipg)
00143 gmxxd = gmxxd + 1.0d0
00144 gmyyd = gmyyd + 1.0d0
00145 gmzzd = gmzzd + 1.0d0
00146 gmyxd = gmxyd
00147 gmzxd = gmxzd
00148 gmzyd = gmyzd
00149 gmxxu = hxxu(irg,itg,ipg)
00150 gmxyu = hxyu(irg,itg,ipg)
00151 gmxzu = hxzu(irg,itg,ipg)
00152 gmyyu = hyyu(irg,itg,ipg)
00153 gmyzu = hyzu(irg,itg,ipg)
00154 gmzzu = hzzu(irg,itg,ipg)
00155 gmyyu = gmyyu + 1.0d0
00156 gmxxu = gmxxu + 1.0d0
00157 gmzzu = gmzzu + 1.0d0
00158 gmyxu = gmxyu
00159 gmzxu = gmxzu
00160 gmzyu = gmyzu
00161
00162
00163
00164
00165 cdivbv_grid(irg,itg,ipg) = pdbvxdx + pdbvydy + pdbvzdz
00166 diver = fa23*cdivbv_grid(irg,itg,ipg)
00167
00168
00169
00170 oelpxx = 0.0d0
00171 oelpxy = 0.0d0
00172 oelpxz = 0.0d0
00173 oelpyy = 0.0d0
00174 oelpyz = 0.0d0
00175 oelpzz = 0.0d0
00176 if (chgra == 'h'.or.chgra == 'c'.or.chgra == 'C' &
00177 &.or.chgra == 'H'.or.chgra == 'W') then
00178 oelpxx = ainvh*ome*elpxx_grid(irg,itg,ipg)*cutoff
00179 oelpxy = ainvh*ome*elpxy_grid(irg,itg,ipg)*cutoff
00180 oelpxz = ainvh*ome*elpxz_grid(irg,itg,ipg)*cutoff
00181 oelpyy = ainvh*ome*elpyy_grid(irg,itg,ipg)*cutoff
00182 oelpyz = ainvh*ome*elpyz_grid(irg,itg,ipg)*cutoff
00183 oelpzz = ainvh*ome*elpzz_grid(irg,itg,ipg)*cutoff
00184 end if
00185
00186 tfkij_grid(irg,itg,ipg,1,1) = ainvh*(2.0d0*dbvxdx-gmxxd*diver) +oelpxx
00187 tfkij_grid(irg,itg,ipg,2,2) = ainvh*(2.0d0*dbvydy-gmyyd*diver) +oelpyy
00188 tfkij_grid(irg,itg,ipg,3,3) = ainvh*(2.0d0*dbvzdz-gmzzd*diver) +oelpzz
00189 tfkij_grid(irg,itg,ipg,1,2) = ainvh*(dbvydx+dbvxdy-gmxyd*diver)+oelpxy
00190 tfkij_grid(irg,itg,ipg,1,3) = ainvh*(dbvzdx+dbvxdz-gmxzd*diver)+oelpxz
00191 tfkij_grid(irg,itg,ipg,2,3) = ainvh*(dbvzdy+dbvydz-gmyzd*diver)+oelpyz
00192 tfkij_grid(irg,itg,ipg,2,1) = tfkij_grid(irg,itg,ipg,1,2)
00193 tfkij_grid(irg,itg,ipg,3,1) = tfkij_grid(irg,itg,ipg,1,3)
00194 tfkij_grid(irg,itg,ipg,3,2) = tfkij_grid(irg,itg,ipg,2,3)
00195
00196 gamu(1,1) = gmxxu
00197 gamu(1,2) = gmxyu
00198 gamu(1,3) = gmxzu
00199 gamu(2,1) = gmyxu
00200 gamu(2,2) = gmyyu
00201 gamu(2,3) = gmyzu
00202 gamu(3,1) = gmzxu
00203 gamu(3,2) = gmzyu
00204 gamu(3,3) = gmzzu
00205
00206 tfkijkij_grid(irg,itg,ipg) = 0.0d0
00207 do id = 1, 3
00208 do ic = 1, 3
00209 do ib = 1, 3
00210 do ia = 1, 3
00211 tfkijkij_grid(irg,itg,ipg) = tfkijkij_grid(irg,itg,ipg) &
00212 & + gamu(ia,ic)*gamu(ib,id) &
00213 & *tfkij_grid(irg,itg,ipg,ia,ib)*tfkij_grid(irg,itg,ipg,ic,id)
00214 end do
00215 end do
00216 end do
00217 end do
00218
00219 if (tfkijkij_grid(irg,itg,ipg) /= 0.) info = 1
00220
00221
00222
00223 rlbxx_grid(irg,itg,ipg) = 2.0d0*dbvxdx
00224 rlbxy_grid(irg,itg,ipg) = dbvydx + dbvxdy
00225 rlbxz_grid(irg,itg,ipg) = dbvzdx + dbvxdz
00226 rlbyy_grid(irg,itg,ipg) = 2.0d0*dbvydy
00227 rlbyz_grid(irg,itg,ipg) = dbvzdy + dbvydz
00228 rlbzz_grid(irg,itg,ipg) = 2.0d0*dbvzdz
00229
00230 end do
00231 end do
00232 end do
00233 if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00234
00235 end subroutine excurve_WL_gridpoint