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