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