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