00001 subroutine cristoffel_gridpoint
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_grid, only : cri_grid, crid_grid
00006 use def_gamma_crist_grid, only : gmcrix_grid, gmcriy_grid, gmcriz_grid
00007 use def_vector_x, only : vec_xg
00008 use interface_grgrad_4th_gridpoint
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 integer :: ipg, itg, irg
00019
00020
00021
00022
00023
00024
00025 do ipg = 0, npg
00026 do itg = 0, ntg
00027 do irg = 0, nrg
00028
00029 gmxxu=hxxu(irg,itg,ipg)
00030 gmxyu=hxyu(irg,itg,ipg)
00031 gmxzu=hxzu(irg,itg,ipg)
00032 gmyyu=hyyu(irg,itg,ipg)
00033 gmyzu=hyzu(irg,itg,ipg)
00034 gmzzu=hzzu(irg,itg,ipg)
00035 gmyyu = gmyyu + 1.0d0
00036 gmxxu = gmxxu + 1.0d0
00037 gmzzu = gmzzu + 1.0d0
00038 gmyxu = gmxyu
00039 gmzxu = gmxzu
00040 gmzyu = gmyzu
00041
00042 call grgrad_4th_gridpoint(hxxd,dhxxdx,dhxxdy,dhxxdz,irg,itg,ipg)
00043 call grgrad_4th_gridpoint(hxyd,dhxydx,dhxydy,dhxydz,irg,itg,ipg)
00044 call grgrad_4th_gridpoint(hxzd,dhxzdx,dhxzdy,dhxzdz,irg,itg,ipg)
00045 call grgrad_4th_gridpoint(hyyd,dhyydx,dhyydy,dhyydz,irg,itg,ipg)
00046 call grgrad_4th_gridpoint(hyzd,dhyzdx,dhyzdy,dhyzdz,irg,itg,ipg)
00047 call grgrad_4th_gridpoint(hzzd,dhzzdx,dhzzdy,dhzzdz,irg,itg,ipg)
00048
00049 dhyxdx = dhxydx
00050 dhyxdy = dhxydy
00051 dhyxdz = dhxydz
00052
00053 dhzxdx = dhxzdx
00054 dhzxdy = dhxzdy
00055 dhzxdz = dhxzdz
00056
00057 dhzydx = dhyzdx
00058 dhzydy = dhyzdy
00059 dhzydz = dhyzdz
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 crid_grid(irg,itg,ipg,1,1) = 0.5d0*(dhxxdx + dhxxdx - dhxxdx)
00082 crid_grid(irg,itg,ipg,1,2) = 0.5d0*(dhxxdy + dhxydx - dhxydx)
00083 crid_grid(irg,itg,ipg,1,3) = 0.5d0*(dhxxdz + dhxzdx - dhxzdx)
00084 crid_grid(irg,itg,ipg,1,4) = 0.5d0*(dhxydy + dhxydy - dhyydx)
00085 crid_grid(irg,itg,ipg,1,5) = 0.5d0*(dhxydz + dhxzdy - dhyzdx)
00086 crid_grid(irg,itg,ipg,1,6) = 0.5d0*(dhxzdz + dhxzdz - dhzzdx)
00087 crid_grid(irg,itg,ipg,2,1) = 0.5d0*(dhxydx + dhxydx - dhxxdy)
00088 crid_grid(irg,itg,ipg,2,2) = 0.5d0*(dhxydy + dhyydx - dhxydy)
00089 crid_grid(irg,itg,ipg,2,3) = 0.5d0*(dhxydz + dhyzdx - dhxzdy)
00090 crid_grid(irg,itg,ipg,2,4) = 0.5d0*(dhyydy + dhyydy - dhyydy)
00091 crid_grid(irg,itg,ipg,2,5) = 0.5d0*(dhyydz + dhyzdy - dhyzdy)
00092 crid_grid(irg,itg,ipg,2,6) = 0.5d0*(dhyzdz + dhyzdz - dhzzdy)
00093 crid_grid(irg,itg,ipg,3,1) = 0.5d0*(dhxzdx + dhxzdx - dhxxdz)
00094 crid_grid(irg,itg,ipg,3,2) = 0.5d0*(dhxzdy + dhyzdx - dhxydz)
00095 crid_grid(irg,itg,ipg,3,3) = 0.5d0*(dhxzdz + dhzzdx - dhxzdz)
00096 crid_grid(irg,itg,ipg,3,4) = 0.5d0*(dhyzdy + dhyzdy - dhyydz)
00097 crid_grid(irg,itg,ipg,3,5) = 0.5d0*(dhyzdz + dhzzdy - dhyzdz)
00098 crid_grid(irg,itg,ipg,3,6) = 0.5d0*(dhzzdz + dhzzdz - dhzzdz)
00099
00100 cri_grid(irg,itg,ipg,1,1) = &
00101 & (-gmxzu*dhxxdz - gmxyu*dhxxdy + gmxxu*dhxxdx + &
00102 & 2.0d0*gmxyu*dhxydx + 2.0d0*gmxzu*dhxzdx)*0.5d0
00103 cri_grid(irg,itg,ipg,1,2) = &
00104 & (-gmxzu*dhxydz + gmxxu*dhxxdy + gmxzu*dhxzdy + &
00105 & gmxyu*dhyydx + gmxzu*dhyzdx)*0.5d0
00106 cri_grid(irg,itg,ipg,1,3) = &
00107 & (gmxxu*dhxxdz + gmxyu*dhxydz - gmxyu*dhxzdy + &
00108 & gmxyu*dhyzdx + gmxzu*dhzzdx)*0.5d0
00109 cri_grid(irg,itg,ipg,1,4) = &
00110 & (-gmxzu*dhyydz + 2.0d0*gmxxu*dhxydy + gmxyu*dhyydy + &
00111 & 2.0d0*gmxzu*dhyzdy - gmxxu*dhyydx)*0.5d0
00112 cri_grid(irg,itg,ipg,1,5) = &
00113 & (gmxxu*dhxydz + gmxyu*dhyydz + gmxxu*dhxzdy + &
00114 & gmxzu*dhzzdy - gmxxu*dhyzdx)*0.5d0
00115 cri_grid(irg,itg,ipg,1,6) = &
00116 & (2.0d0*gmxxu*dhxzdz + 2.0d0*gmxyu*dhyzdz + &
00117 & gmxzu*dhzzdz - gmxyu*dhzzdy - gmxxu*dhzzdx)*0.5d0
00118
00119 cri_grid(irg,itg,ipg,2,1) = &
00120 & (-gmyzu*dhxxdz - gmyyu*dhxxdy + gmxyu*dhxxdx + &
00121 & 2.0d0*gmyyu*dhxydx + 2.0d0*gmyzu*dhxzdx)*0.5d0
00122 cri_grid(irg,itg,ipg,2,2) = &
00123 & (-gmyzu*dhxydz + gmxyu*dhxxdy + gmyzu*dhxzdy + &
00124 & gmyyu*dhyydx + gmyzu*dhyzdx)*0.5d0
00125 cri_grid(irg,itg,ipg,2,3) = &
00126 & (gmxyu*dhxxdz + gmyyu*dhxydz - gmyyu*dhxzdy + &
00127 & gmyyu*dhyzdx + gmyzu*dhzzdx)*0.5d0
00128 cri_grid(irg,itg,ipg,2,4) = &
00129 & (-gmyzu*dhyydz + 2.0d0*gmxyu*dhxydy + gmyyu*dhyydy + &
00130 & 2.0d0*gmyzu*dhyzdy - gmxyu*dhyydx)*0.5d0
00131 cri_grid(irg,itg,ipg,2,5) = &
00132 & (gmxyu*dhxydz + gmyyu*dhyydz + gmxyu*dhxzdy + &
00133 & gmyzu*dhzzdy - gmxyu*dhyzdx)*0.5d0
00134 cri_grid(irg,itg,ipg,2,6) = &
00135 & (2.0d0*gmxyu*dhxzdz + 2.0d0*gmyyu*dhyzdz + &
00136 & gmyzu*dhzzdz - gmyyu*dhzzdy - gmxyu*dhzzdx)*0.5d0
00137
00138 cri_grid(irg,itg,ipg,3,1) = &
00139 & (-gmzzu*dhxxdz - gmyzu*dhxxdy + gmxzu*dhxxdx + &
00140 & 2.0d0*gmyzu*dhxydx + 2.0d0*gmzzu*dhxzdx)*0.5d0
00141 cri_grid(irg,itg,ipg,3,2) = &
00142 & (-gmzzu*dhxydz + gmxzu*dhxxdy + gmzzu*dhxzdy + &
00143 & gmyzu*dhyydx + gmzzu*dhyzdx)*0.5d0
00144 cri_grid(irg,itg,ipg,3,3) = &
00145 & (gmxzu*dhxxdz + gmyzu*dhxydz - gmyzu*dhxzdy + &
00146 & gmyzu*dhyzdx + gmzzu*dhzzdx)*0.5d0
00147 cri_grid(irg,itg,ipg,3,4) = &
00148 & (-gmzzu*dhyydz + 2.0d0*gmxzu*dhxydy + gmyzu*dhyydy + &
00149 & 2.0d0*gmzzu*dhyzdy - gmxzu*dhyydx)*0.5d0
00150 cri_grid(irg,itg,ipg,3,5) = &
00151 & (gmxzu*dhxydz + gmyzu*dhyydz + gmxzu*dhxzdy + &
00152 & gmzzu*dhzzdy - gmxzu*dhyzdx)*0.5d0
00153 cri_grid(irg,itg,ipg,3,6) = &
00154 & (2.0d0*gmxzu*dhxzdz + 2.0d0*gmyzu*dhyzdz + &
00155 & gmzzu*dhzzdz - gmyzu*dhzzdy - gmxzu*dhzzdx)*0.5d0
00156
00157
00158
00159 gmcrix_grid(irg,itg,ipg) = gmxxu*cri_grid(irg,itg,ipg,1,1) &
00160 & + gmxyu*cri_grid(irg,itg,ipg,1,2)*2.0d0 &
00161 & + gmxzu*cri_grid(irg,itg,ipg,1,3)*2.0d0 &
00162 & + gmyyu*cri_grid(irg,itg,ipg,1,4) &
00163 & + gmyzu*cri_grid(irg,itg,ipg,1,5)*2.0d0 &
00164 & + gmzzu*cri_grid(irg,itg,ipg,1,6)
00165 gmcriy_grid(irg,itg,ipg) = gmxxu*cri_grid(irg,itg,ipg,2,1) &
00166 & + gmxyu*cri_grid(irg,itg,ipg,2,2)*2.0d0 &
00167 & + gmxzu*cri_grid(irg,itg,ipg,2,3)*2.0d0 &
00168 & + gmyyu*cri_grid(irg,itg,ipg,2,4) &
00169 & + gmyzu*cri_grid(irg,itg,ipg,2,5)*2.0d0 &
00170 & + gmzzu*cri_grid(irg,itg,ipg,2,6)
00171 gmcriz_grid(irg,itg,ipg) = gmxxu*cri_grid(irg,itg,ipg,3,1) &
00172 & + gmxyu*cri_grid(irg,itg,ipg,3,2)*2.0d0 &
00173 & + gmxzu*cri_grid(irg,itg,ipg,3,3)*2.0d0 &
00174 & + gmyyu*cri_grid(irg,itg,ipg,3,4) &
00175 & + gmyzu*cri_grid(irg,itg,ipg,3,5)*2.0d0 &
00176 & + gmzzu*cri_grid(irg,itg,ipg,3,6)
00177
00178
00179
00180
00181
00182
00183 end do
00184 end do
00185 end do
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 end subroutine cristoffel_gridpoint