00001 subroutine cristoffel_midpoint
00002   use grid_parameter, only : nrg, ntg, npg
00003   use def_metric_hij, only : hxxd, hxyd, hxzd, hyyd, hyzd, hzzd, &
00004   &                          hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00005   use def_cristoffel, only : cri
00006   use def_gamma_crist, only : gmcrix, gmcriy, gmcriz
00007   use interface_interpo_linear_type0
00008   use interface_grgrad_midpoint
00009   use make_array_3d
00010   implicit none
00011   real(8) :: crid11, crid12, crid13, crid14, crid15, crid16, 
00012             crid21, crid22, crid23, crid24, crid25, crid26, &
00013             crid31, crid32, crid33, crid34, crid35, crid36, &
00014             dhyxdx, dhyxdy, dhyxdz, dhzxdx, dhzxdy, dhzxdz, &
00015             dhzydx, dhzydy, dhzydz, &
00016             dhxxdx, dhxxdy, dhxxdz, dhxydx, dhxydy, dhxydz, &
00017             dhxzdx, dhxzdy, dhxzdz, dhyydx, dhyydy, dhyydz, &
00018             dhyzdx, dhyzdy, dhyzdz, dhzzdx, dhzzdy, dhzzdz, &
00019             gmxxu, gmxyu, gmxzu, gmyyu, gmyzu, gmzzu, &
00020             gmyxu, gmzxu, gmzyu
00021   real(8), pointer :: dfxxdx(:,:,:), dfxxdy(:,:,:), dfxxdz(:,:,:), 
00022                      dfxydx(:,:,:), dfxydy(:,:,:), dfxydz(:,:,:), &
00023                      dfxzdx(:,:,:), dfxzdy(:,:,:), dfxzdz(:,:,:), &
00024                      dfyydx(:,:,:), dfyydy(:,:,:), dfyydz(:,:,:), &
00025                      dfyzdx(:,:,:), dfyzdy(:,:,:), dfyzdz(:,:,:), &
00026                      dfzzdx(:,:,:), dfzzdy(:,:,:), dfzzdz(:,:,:)
00027   integer :: ipg, itg, irg
00028 
00029   call alloc_array3d(dfxxdx,1,nrg,1,ntg,1,npg)
00030   call alloc_array3d(dfxxdy,1,nrg,1,ntg,1,npg)
00031   call alloc_array3d(dfxxdz,1,nrg,1,ntg,1,npg)
00032   call alloc_array3d(dfxydx,1,nrg,1,ntg,1,npg)
00033   call alloc_array3d(dfxydy,1,nrg,1,ntg,1,npg)
00034   call alloc_array3d(dfxydz,1,nrg,1,ntg,1,npg)
00035   call alloc_array3d(dfxzdx,1,nrg,1,ntg,1,npg)
00036   call alloc_array3d(dfxzdy,1,nrg,1,ntg,1,npg)
00037   call alloc_array3d(dfxzdz,1,nrg,1,ntg,1,npg)
00038   call alloc_array3d(dfyydx,1,nrg,1,ntg,1,npg)
00039   call alloc_array3d(dfyydy,1,nrg,1,ntg,1,npg)
00040   call alloc_array3d(dfyydz,1,nrg,1,ntg,1,npg)
00041   call alloc_array3d(dfyzdx,1,nrg,1,ntg,1,npg)
00042   call alloc_array3d(dfyzdy,1,nrg,1,ntg,1,npg)
00043   call alloc_array3d(dfyzdz,1,nrg,1,ntg,1,npg)
00044   call alloc_array3d(dfzzdx,1,nrg,1,ntg,1,npg)
00045   call alloc_array3d(dfzzdy,1,nrg,1,ntg,1,npg)
00046   call alloc_array3d(dfzzdz,1,nrg,1,ntg,1,npg)
00047 
00048 
00049 
00050 
00051 
00052 
00053   call grgrad_midpoint(hxxd,dfxxdx,dfxxdy,dfxxdz)
00054   call grgrad_midpoint(hxyd,dfxydx,dfxydy,dfxydz)
00055   call grgrad_midpoint(hxzd,dfxzdx,dfxzdy,dfxzdz)
00056   call grgrad_midpoint(hyyd,dfyydx,dfyydy,dfyydz)
00057   call grgrad_midpoint(hyzd,dfyzdx,dfyzdy,dfyzdz)
00058   call grgrad_midpoint(hzzd,dfzzdx,dfzzdy,dfzzdz)
00059   do ipg = 1, npg
00060     do itg = 1, ntg
00061       do irg = 1, nrg
00062 
00063         call interpo_linear_type0(gmxxu,hxxu,irg,itg,ipg)
00064         call interpo_linear_type0(gmxyu,hxyu,irg,itg,ipg)
00065         call interpo_linear_type0(gmxzu,hxzu,irg,itg,ipg)
00066         call interpo_linear_type0(gmyyu,hyyu,irg,itg,ipg)
00067         call interpo_linear_type0(gmyzu,hyzu,irg,itg,ipg)
00068         call interpo_linear_type0(gmzzu,hzzu,irg,itg,ipg)
00069         gmyyu = gmyyu + 1.0d0
00070         gmxxu = gmxxu + 1.0d0
00071         gmzzu = gmzzu + 1.0d0
00072         gmyxu = gmxyu
00073         gmzxu = gmxzu
00074         gmzyu = gmyzu
00075 
00076         dhxxdx = dfxxdx(irg,itg,ipg)
00077         dhxxdy = dfxxdy(irg,itg,ipg)
00078         dhxxdz = dfxxdz(irg,itg,ipg)
00079 
00080         dhxydx = dfxydx(irg,itg,ipg)
00081         dhxydy = dfxydy(irg,itg,ipg)
00082         dhxydz = dfxydz(irg,itg,ipg)
00083 
00084         dhxzdx = dfxzdx(irg,itg,ipg)
00085         dhxzdy = dfxzdy(irg,itg,ipg)
00086         dhxzdz = dfxzdz(irg,itg,ipg)
00087 
00088         dhyydx = dfyydx(irg,itg,ipg)
00089         dhyydy = dfyydy(irg,itg,ipg)
00090         dhyydz = dfyydz(irg,itg,ipg)
00091 
00092         dhyzdx = dfyzdx(irg,itg,ipg)
00093         dhyzdy = dfyzdy(irg,itg,ipg)
00094         dhyzdz = dfyzdz(irg,itg,ipg)
00095 
00096         dhzzdx = dfzzdx(irg,itg,ipg)
00097         dhzzdy = dfzzdy(irg,itg,ipg)
00098         dhzzdz = dfzzdz(irg,itg,ipg)
00099 
00100         dhyxdx = dhxydx
00101         dhyxdy = dhxydy
00102         dhyxdz = dhxydz
00103 
00104         dhzxdx = dhxzdx
00105         dhzxdy = dhxzdy
00106         dhzxdz = dhxzdz
00107 
00108         dhzydx = dhyzdx
00109         dhzydy = dhyzdy
00110         dhzydz = dhyzdz
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132         crid11 = 0.5d0*(dhxxdx + dhxxdx - dhxxdx)
00133         crid12 = 0.5d0*(dhxxdy + dhxydx - dhxydx)
00134         crid13 = 0.5d0*(dhxxdz + dhxzdx - dhxzdx)
00135         crid14 = 0.5d0*(dhxydy + dhxydy - dhyydx)
00136         crid15 = 0.5d0*(dhxydz + dhxzdy - dhyzdx)
00137         crid16 = 0.5d0*(dhxzdz + dhxzdz - dhzzdx)
00138         crid21 = 0.5d0*(dhxydx + dhxydx - dhxxdy)
00139         crid22 = 0.5d0*(dhxydy + dhyydx - dhxydy)
00140         crid23 = 0.5d0*(dhxydz + dhyzdx - dhxzdy)
00141         crid24 = 0.5d0*(dhyydy + dhyydy - dhyydy)
00142         crid25 = 0.5d0*(dhyydz + dhyzdy - dhyzdy)
00143         crid26 = 0.5d0*(dhyzdz + dhyzdz - dhzzdy)
00144         crid31 = 0.5d0*(dhxzdx + dhxzdx - dhxxdz)
00145         crid32 = 0.5d0*(dhxzdy + dhyzdx - dhxydz)
00146         crid33 = 0.5d0*(dhxzdz + dhzzdx - dhxzdz)
00147         crid34 = 0.5d0*(dhyzdy + dhyzdy - dhyydz)
00148         crid35 = 0.5d0*(dhyzdz + dhzzdy - dhyzdz)
00149         crid36 = 0.5d0*(dhzzdz + dhzzdz - dhzzdz)
00150 
00151         cri(irg,itg,ipg,1,1) = &
00152            &      (-gmxzu*dhxxdz - gmxyu*dhxxdy + gmxxu*dhxxdx + &
00153            &  2.0d0*gmxyu*dhxydx + 2.0d0*gmxzu*dhxzdx)*0.5d0
00154         cri(irg,itg,ipg,1,2) = &
00155            &      (-gmxzu*dhxydz + gmxxu*dhxxdy + gmxzu*dhxzdy + &
00156            &        gmxyu*dhyydx + gmxzu*dhyzdx)*0.5d0
00157         cri(irg,itg,ipg,1,3) = &
00158            &       (gmxxu*dhxxdz + gmxyu*dhxydz - gmxyu*dhxzdy + &
00159            &        gmxyu*dhyzdx + gmxzu*dhzzdx)*0.5d0
00160         cri(irg,itg,ipg,1,4) = &
00161            &      (-gmxzu*dhyydz + 2.0d0*gmxxu*dhxydy + gmxyu*dhyydy + &
00162            &  2.0d0*gmxzu*dhyzdy - gmxxu*dhyydx)*0.5d0
00163         cri(irg,itg,ipg,1,5) = &
00164            &       (gmxxu*dhxydz + gmxyu*dhyydz + gmxxu*dhxzdy + &
00165            &        gmxzu*dhzzdy - gmxxu*dhyzdx)*0.5d0
00166         cri(irg,itg,ipg,1,6) = &
00167            & (2.0d0*gmxxu*dhxzdz + 2.0d0*gmxyu*dhyzdz + &
00168            &        gmxzu*dhzzdz - gmxyu*dhzzdy - gmxxu*dhzzdx)*0.5d0
00169 
00170         cri(irg,itg,ipg,2,1) = &
00171            &      (-gmyzu*dhxxdz - gmyyu*dhxxdy + gmxyu*dhxxdx + &
00172            &  2.0d0*gmyyu*dhxydx + 2.0d0*gmyzu*dhxzdx)*0.5d0
00173         cri(irg,itg,ipg,2,2) = &
00174            &      (-gmyzu*dhxydz + gmxyu*dhxxdy + gmyzu*dhxzdy + &
00175            &        gmyyu*dhyydx + gmyzu*dhyzdx)*0.5d0
00176         cri(irg,itg,ipg,2,3) = &
00177            &       (gmxyu*dhxxdz + gmyyu*dhxydz - gmyyu*dhxzdy + &
00178            &        gmyyu*dhyzdx + gmyzu*dhzzdx)*0.5d0
00179         cri(irg,itg,ipg,2,4) = &
00180            &      (-gmyzu*dhyydz + 2.0d0*gmxyu*dhxydy + gmyyu*dhyydy + &
00181            &  2.0d0*gmyzu*dhyzdy - gmxyu*dhyydx)*0.5d0
00182         cri(irg,itg,ipg,2,5) = &
00183            &       (gmxyu*dhxydz + gmyyu*dhyydz + gmxyu*dhxzdy + &
00184            &        gmyzu*dhzzdy - gmxyu*dhyzdx)*0.5d0
00185         cri(irg,itg,ipg,2,6) = &
00186            & (2.0d0*gmxyu*dhxzdz + 2.0d0*gmyyu*dhyzdz + &
00187            &        gmyzu*dhzzdz - gmyyu*dhzzdy - gmxyu*dhzzdx)*0.5d0
00188 
00189         cri(irg,itg,ipg,3,1) = &
00190            &      (-gmzzu*dhxxdz - gmyzu*dhxxdy + gmxzu*dhxxdx + &
00191            &  2.0d0*gmyzu*dhxydx + 2.0d0*gmzzu*dhxzdx)*0.5d0
00192         cri(irg,itg,ipg,3,2) = &
00193            &      (-gmzzu*dhxydz + gmxzu*dhxxdy + gmzzu*dhxzdy + &
00194            &        gmyzu*dhyydx + gmzzu*dhyzdx)*0.5d0
00195         cri(irg,itg,ipg,3,3) = &
00196            &       (gmxzu*dhxxdz + gmyzu*dhxydz - gmyzu*dhxzdy + &
00197            &        gmyzu*dhyzdx + gmzzu*dhzzdx)*0.5d0
00198         cri(irg,itg,ipg,3,4) = &
00199            &      (-gmzzu*dhyydz + 2.0d0*gmxzu*dhxydy + gmyzu*dhyydy + &
00200            &  2.0d0*gmzzu*dhyzdy - gmxzu*dhyydx)*0.5d0
00201         cri(irg,itg,ipg,3,5) = &
00202            &       (gmxzu*dhxydz + gmyzu*dhyydz + gmxzu*dhxzdy + &
00203            &        gmzzu*dhzzdy - gmxzu*dhyzdx)*0.5d0
00204         cri(irg,itg,ipg,3,6) = &
00205            & (2.0d0*gmxzu*dhxzdz + 2.0d0*gmyzu*dhyzdz + &
00206            &        gmzzu*dhzzdz - gmyzu*dhzzdy - gmxzu*dhzzdx)*0.5d0
00207 
00208 
00209 
00210 
00211 
00212 
00213 
00214 
00215 
00216 
00217 
00218 
00219 
00220 
00221 
00222 
00223 
00224 
00225 
00226 
00227 
00228 
00229         gmcrix(irg,itg,ipg) = 0.0d0
00230         gmcriy(irg,itg,ipg) = 0.0d0
00231         gmcriz(irg,itg,ipg) = 0.0d0
00232       end do
00233     end do
00234   end do
00235 
00236 
00237   deallocate(dfxxdx)
00238   deallocate(dfxxdy)
00239   deallocate(dfxxdz)
00240   deallocate(dfxydx)
00241   deallocate(dfxydy)
00242   deallocate(dfxydz)
00243   deallocate(dfxzdx)
00244   deallocate(dfxzdy)
00245   deallocate(dfxzdz)
00246   deallocate(dfyydx)
00247   deallocate(dfyydy)
00248   deallocate(dfyydz)
00249   deallocate(dfyzdx)
00250   deallocate(dfyzdy)
00251   deallocate(dfyzdz)
00252   deallocate(dfzzdx)
00253   deallocate(dfzzdy)
00254   deallocate(dfzzdz)
00255 
00256 end subroutine cristoffel_midpoint