excurve_WL_midpoint.f90

Go to the documentation of this file.
00001 subroutine excurve_WL_midpoint
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, tfkij, tfkijkij, &
00006   &                      bvxd, bvyd, bvzd, bvxu, bvyu, bvzu
00007   use coordinate_grav_r, only : rg
00008 !
00009   use def_cristoffel, only : cri
00010   use def_Lie_derivatives, only : elpxx, elpxy, elpxz, elpyy, elpyz, elpzz, &
00011   &                               rlbxx, rlbxy, rlbxz, rlbyy, rlbyz, rlbzz
00012   use def_shift_derivatives, only : cdbvxd, cdbvyd, cdbvzd, cdivbv, &
00013   &                                 pdbvxd, pdbvyd, pdbvzd
00014   use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00015   &                          hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00016   use def_cutsw, only : cutfac
00017   use def_formulation, only : chgra
00018 !
00019   use interface_interpo_linear_type0
00020   use interface_grgrad_midpoint
00021   use make_array_3d
00022   use make_array_4d
00023   implicit none
00024 !
00025   real(8), pointer :: dbvxu(:,:,:,:), dbvyu(:,:,:,:), dbvzu(:,:,:,:)
00026   real(8), pointer :: dfdx(:,:,:), dfdy(:,:,:), dfdz(:,:,:)
00027   real(8) :: gamu(3,3)
00028   real(8) :: ainvh, bvxha, bvyha, bvzha, cutoff, diver, fa23, 
00029             dbvxdx, dbvxdy, dbvxdz, &
00030             dbvydx, dbvydy, dbvydz, &
00031             dbvzdx, dbvzdy, dbvzdz, &
00032             gmxxd, gmxyd, gmxzd, gmxxu, gmxyu, gmxzu, &
00033             gmyxd, gmyyd, gmyzd, gmyxu, gmyyu, gmyzu, &
00034             gmzxd, gmzyd, gmzzd, gmzxu, gmzyu, gmzzu, &
00035             oelpxx, oelpxy, oelpxz, &
00036             oelpyy, oelpyz, oelpzz, &
00037             pdbvxdx, pdbvxdy, pdbvxdz, &
00038             pdbvydx, pdbvydy, pdbvydz, &
00039             pdbvzdx, pdbvzdy, pdbvzdz
00040   integer :: ia, ib, ic, id, info, ipg, irg, itg
00041 !
00042   call alloc_array3d(dfdx,1,nrg,1,ntg,1,npg)
00043   call alloc_array3d(dfdy,1,nrg,1,ntg,1,npg)
00044   call alloc_array3d(dfdz,1,nrg,1,ntg,1,npg)
00045   call alloc_array4d(dbvxu,1,nrg,1,ntg,1,npg,1,3)
00046   call alloc_array4d(dbvyu,1,nrg,1,ntg,1,npg,1,3)
00047   call alloc_array4d(dbvzu,1,nrg,1,ntg,1,npg,1,3)
00048 !
00049 ! --- Compute extringic curvature.  
00050 ! --- Whose value is assigned on the grid points. 
00051 !
00052 !testtesttest
00053   info = 0
00054 !testtesttest
00055 !
00056   fa23 = 2.0d0/3.0d0
00057 !
00058   call grgrad_midpoint(bvxd,dfdx,dfdy,dfdz)
00059   pdbvxd(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00060   pdbvxd(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00061   pdbvxd(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00062 !
00063   call grgrad_midpoint(bvyd,dfdx,dfdy,dfdz)
00064   pdbvyd(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00065   pdbvyd(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00066   pdbvyd(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00067 !
00068   call grgrad_midpoint(bvzd,dfdx,dfdy,dfdz)
00069   pdbvzd(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00070   pdbvzd(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00071   pdbvzd(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00072 !
00073   call grgrad_midpoint(bvxu,dfdx,dfdy,dfdz)
00074   dbvxu(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00075   dbvxu(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00076   dbvxu(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00077 !
00078   call grgrad_midpoint(bvyu,dfdx,dfdy,dfdz)
00079   dbvyu(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00080   dbvyu(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00081   dbvyu(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00082 !
00083   call grgrad_midpoint(bvzu,dfdx,dfdy,dfdz)
00084   dbvzu(1:nrg,1:ntg,1:npg,1) = dfdx(1:nrg,1:ntg,1:npg)
00085   dbvzu(1:nrg,1:ntg,1:npg,2) = dfdy(1:nrg,1:ntg,1:npg)
00086   dbvzu(1:nrg,1:ntg,1:npg,3) = dfdz(1:nrg,1:ntg,1:npg)
00087 !
00088   do ipg = 1, npg
00089     do itg = 1, ntg
00090       do irg = 1, nrg
00091 !
00092         cutoff = 1.0d0
00093         if (chgra == 'c'.or.chgra == 'C'.or.chgra == 'W') then
00094           if (rg(irg) > cutfac*pi/ome) cutoff = 0.0d0
00095         end if
00096 !
00097         call interpo_linear_type0(bvxha,bvxd,irg,itg,ipg)
00098         call interpo_linear_type0(bvyha,bvyd,irg,itg,ipg)
00099         call interpo_linear_type0(bvzha,bvzd,irg,itg,ipg)
00100         call interpo_linear_type0(ainvh,alph,irg,itg,ipg)
00101         ainvh = 0.5d0/ainvh
00102 ! 
00103         pdbvxdx = dbvxu(irg,itg,ipg,1)
00104         pdbvxdy = dbvxu(irg,itg,ipg,2)
00105         pdbvxdz = dbvxu(irg,itg,ipg,3)
00106         pdbvydx = dbvyu(irg,itg,ipg,1)
00107         pdbvydy = dbvyu(irg,itg,ipg,2)
00108         pdbvydz = dbvyu(irg,itg,ipg,3)
00109         pdbvzdx = dbvzu(irg,itg,ipg,1)
00110         pdbvzdy = dbvzu(irg,itg,ipg,2)
00111         pdbvzdz = dbvzu(irg,itg,ipg,3)
00112 !
00113         cdbvxd(irg,itg,ipg,1) = pdbvxd(irg,itg,ipg,1) &
00114            &                      - cri(irg,itg,ipg,1,1)*bvxha &
00115            &                      - cri(irg,itg,ipg,2,1)*bvyha &
00116            &                      - cri(irg,itg,ipg,3,1)*bvzha
00117         cdbvyd(irg,itg,ipg,1) = pdbvyd(irg,itg,ipg,1) &
00118            &                      - cri(irg,itg,ipg,1,2)*bvxha &
00119            &                      - cri(irg,itg,ipg,2,2)*bvyha &
00120            &                      - cri(irg,itg,ipg,3,2)*bvzha
00121         cdbvzd(irg,itg,ipg,1) = pdbvzd(irg,itg,ipg,1) &
00122            &                      - cri(irg,itg,ipg,1,3)*bvxha &
00123            &                      - cri(irg,itg,ipg,2,3)*bvyha &
00124            &                      - cri(irg,itg,ipg,3,3)*bvzha
00125 !
00126         cdbvxd(irg,itg,ipg,2) = pdbvxd(irg,itg,ipg,2) &
00127            &                      - cri(irg,itg,ipg,1,2)*bvxha &
00128            &                      - cri(irg,itg,ipg,2,2)*bvyha &
00129            &                      - cri(irg,itg,ipg,3,2)*bvzha
00130         cdbvyd(irg,itg,ipg,2) = pdbvyd(irg,itg,ipg,2) &
00131            &                      - cri(irg,itg,ipg,1,4)*bvxha &
00132            &                      - cri(irg,itg,ipg,2,4)*bvyha &
00133            &                      - cri(irg,itg,ipg,3,4)*bvzha
00134         cdbvzd(irg,itg,ipg,2) = pdbvzd(irg,itg,ipg,2) &
00135            &                      - cri(irg,itg,ipg,1,5)*bvxha &
00136            &                      - cri(irg,itg,ipg,2,5)*bvyha &
00137            &                      - cri(irg,itg,ipg,3,5)*bvzha
00138 !
00139         cdbvxd(irg,itg,ipg,3) = pdbvxd(irg,itg,ipg,3) &
00140            &                      - cri(irg,itg,ipg,1,3)*bvxha &
00141            &                      - cri(irg,itg,ipg,2,3)*bvyha &
00142            &                      - cri(irg,itg,ipg,3,3)*bvzha
00143         cdbvyd(irg,itg,ipg,3) = pdbvyd(irg,itg,ipg,3) &
00144            &                      - cri(irg,itg,ipg,1,5)*bvxha &
00145            &                      - cri(irg,itg,ipg,2,5)*bvyha &
00146            &                      - cri(irg,itg,ipg,3,5)*bvzha
00147         cdbvzd(irg,itg,ipg,3) = pdbvzd(irg,itg,ipg,3) &
00148            &                      - cri(irg,itg,ipg,1,6)*bvxha &
00149            &                      - cri(irg,itg,ipg,2,6)*bvyha &
00150            &                      - cri(irg,itg,ipg,3,6)*bvzha
00151 !
00152         dbvxdx = cdbvxd(irg,itg,ipg,1)
00153         dbvydx = cdbvyd(irg,itg,ipg,1)
00154         dbvzdx = cdbvzd(irg,itg,ipg,1)
00155 !
00156         dbvxdy = cdbvxd(irg,itg,ipg,2)
00157         dbvydy = cdbvyd(irg,itg,ipg,2)
00158         dbvzdy = cdbvzd(irg,itg,ipg,2)
00159 !
00160         dbvxdz = cdbvxd(irg,itg,ipg,3)
00161         dbvydz = cdbvyd(irg,itg,ipg,3)
00162         dbvzdz = cdbvzd(irg,itg,ipg,3)
00163 !
00164         call interpo_linear_type0(gmxxd,hxxd,irg,itg,ipg)
00165         call interpo_linear_type0(gmxyd,hxyd,irg,itg,ipg)
00166         call interpo_linear_type0(gmxzd,hxzd,irg,itg,ipg)
00167         call interpo_linear_type0(gmyyd,hyyd,irg,itg,ipg)
00168         call interpo_linear_type0(gmyzd,hyzd,irg,itg,ipg)
00169         call interpo_linear_type0(gmzzd,hzzd,irg,itg,ipg)
00170         gmxxd = gmxxd + 1.0d0
00171         gmyyd = gmyyd + 1.0d0
00172         gmzzd = gmzzd + 1.0d0
00173         gmyxd = gmxyd
00174         gmzxd = gmxzd
00175         gmzyd = gmyzd
00176         call interpo_linear_type0(gmxxu,hxxu,irg,itg,ipg)
00177         call interpo_linear_type0(gmxyu,hxyu,irg,itg,ipg)
00178         call interpo_linear_type0(gmxzu,hxzu,irg,itg,ipg)
00179         call interpo_linear_type0(gmyyu,hyyu,irg,itg,ipg)
00180         call interpo_linear_type0(gmyzu,hyzu,irg,itg,ipg)
00181         call interpo_linear_type0(gmzzu,hzzu,irg,itg,ipg)
00182         gmyyu = gmyyu + 1.0d0
00183         gmxxu = gmxxu + 1.0d0
00184         gmzzu = gmzzu + 1.0d0
00185         gmyxu = gmxyu
00186         gmzxu = gmxzu
00187         gmzyu = gmyzu
00188 !
00189 !ccp      cdivbv(irg,itg,ipg) = gmxxu*dbvxdx + gmxyu*dbvydx + gmxzu*dbvzdx
00190 !ccp     &                    + gmyxu*dbvxdy + gmyyu*dbvydy + gmyzu*dbvzdy
00191 !ccp     &                    + gmzxu*dbvxdz + gmzyu*dbvydz + gmzzu*dbvzdz
00192         cdivbv(irg,itg,ipg) = pdbvxdx + pdbvydy + pdbvzdz
00193         diver = fa23*cdivbv(irg,itg,ipg)
00194 !
00195 ! --  For rotating shift
00196 !
00197         oelpxx = 0.0d0
00198         oelpxy = 0.0d0
00199         oelpxz = 0.0d0
00200         oelpyy = 0.0d0
00201         oelpyz = 0.0d0
00202         oelpzz = 0.0d0
00203         if (chgra == 'h'.or.chgra == 'c'.or.chgra == 'C' &
00204            &.or.chgra == 'H'.or.chgra == 'W') then
00205           oelpxx = ainvh*ome*elpxx(irg,itg,ipg)*cutoff
00206           oelpxy = ainvh*ome*elpxy(irg,itg,ipg)*cutoff
00207           oelpxz = ainvh*ome*elpxz(irg,itg,ipg)*cutoff
00208           oelpyy = ainvh*ome*elpyy(irg,itg,ipg)*cutoff
00209           oelpyz = ainvh*ome*elpyz(irg,itg,ipg)*cutoff
00210           oelpzz = ainvh*ome*elpzz(irg,itg,ipg)*cutoff
00211         end if
00212 !
00213         tfkij(irg,itg,ipg,1,1) = ainvh*(2.0d0*dbvxdx-gmxxd*diver) +oelpxx
00214         tfkij(irg,itg,ipg,2,2) = ainvh*(2.0d0*dbvydy-gmyyd*diver) +oelpyy
00215         tfkij(irg,itg,ipg,3,3) = ainvh*(2.0d0*dbvzdz-gmzzd*diver) +oelpzz
00216         tfkij(irg,itg,ipg,1,2) = ainvh*(dbvydx+dbvxdy-gmxyd*diver)+oelpxy
00217         tfkij(irg,itg,ipg,1,3) = ainvh*(dbvzdx+dbvxdz-gmxzd*diver)+oelpxz
00218         tfkij(irg,itg,ipg,2,3) = ainvh*(dbvzdy+dbvydz-gmyzd*diver)+oelpyz
00219         tfkij(irg,itg,ipg,2,1) = tfkij(irg,itg,ipg,1,2)
00220         tfkij(irg,itg,ipg,3,1) = tfkij(irg,itg,ipg,1,3)
00221         tfkij(irg,itg,ipg,3,2) = tfkij(irg,itg,ipg,2,3)
00222 !
00223         gamu(1,1) = gmxxu 
00224         gamu(1,2) = gmxyu 
00225         gamu(1,3) = gmxzu 
00226         gamu(2,1) = gmyxu 
00227         gamu(2,2) = gmyyu 
00228         gamu(2,3) = gmyzu 
00229         gamu(3,1) = gmzxu 
00230         gamu(3,2) = gmzyu 
00231         gamu(3,3) = gmzzu
00232 ! 
00233         tfkijkij(irg,itg,ipg) = 0.0d0
00234         do id = 1, 3
00235           do ic = 1, 3
00236             do ib = 1, 3
00237               do ia = 1, 3
00238                 tfkijkij(irg,itg,ipg) = tfkijkij(irg,itg,ipg) &
00239                    &       + gamu(ia,ic)*gamu(ib,id) &
00240                    &        *tfkij(irg,itg,ipg,ia,ib)*tfkij(irg,itg,ipg,ic,id)
00241               end do
00242             end do
00243           end do
00244         end do
00245 !
00246         if (tfkijkij(irg,itg,ipg) /= 0.) info = 1
00247 !
00248 ! --  Lie_beta tgamma
00249 !
00250         rlbxx(irg,itg,ipg) = 2.0d0*dbvxdx
00251         rlbxy(irg,itg,ipg) = dbvydx + dbvxdy
00252         rlbxz(irg,itg,ipg) = dbvzdx + dbvxdz
00253         rlbyy(irg,itg,ipg) = 2.0d0*dbvydy
00254         rlbyz(irg,itg,ipg) = dbvzdy + dbvydz
00255         rlbzz(irg,itg,ipg) = 2.0d0*dbvzdz
00256 !
00257       end do
00258     end do
00259   end do
00260   if (info /= 1) write(6,*) ' ### Warning K_ij = 0 *** '
00261 !
00262   deallocate(dbvxu)
00263   deallocate(dbvyu)
00264   deallocate(dbvzu)
00265   deallocate(dfdx)
00266   deallocate(dfdy)
00267   deallocate(dfdz)
00268 !
00269 end subroutine excurve_WL_midpoint

Generated on 27 Oct 2011 for Cocal by  doxygen 1.6.1