excurve_WL_gridpoint.f90

Go to the documentation of this file.
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 ! --- Compute extringic curvature.  
00044 ! --- Whose value is assigned on the grid points. 
00045 !
00046 !testtesttest
00047   info = 0
00048 !testtesttest
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 !ccp      cdivbv(irg,itg,ipg) = gmxxu*dbvxdx + gmxyu*dbvydx + gmxzu*dbvzdx
00163 !ccp     &                    + gmyxu*dbvxdy + gmyyu*dbvydy + gmyzu*dbvzdy
00164 !ccp     &                    + gmzxu*dbvxdz + gmzyu*dbvydz + gmzzu*dbvzdz
00165         cdivbv_grid(irg,itg,ipg) = pdbvxdx + pdbvydy + pdbvzdz
00166         diver = fa23*cdivbv_grid(irg,itg,ipg)
00167 !
00168 ! --  For rotating shift
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 ! --  Lie_beta tgamma
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

Generated on 27 Oct 2011 for Cocal by  doxygen 1.6.1