00001 subroutine invhij_up2down
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 implicit none
00006 real(8) :: hxx, hxy, hxz, hyx, hyy, hyz, hzx, hzy, hzz,
00007 hod1, hod2, hod3, detgm, detgmi, &
00008 gmxxd, gmxyd, gmxzd, gmyxd, gmyyd, gmyzd, &
00009 gmzxd, gmzyd, gmzzd
00010 integer :: ipg, itg, irg
00011
00012 do ipg = 0, npg
00013 do itg = 0, ntg
00014 do irg = 0, nrg
00015
00016 hxx = hxxu(irg,itg,ipg)
00017 hxy = hxyu(irg,itg,ipg)
00018 hxz = hxzu(irg,itg,ipg)
00019 hyx = hxy
00020 hyy = hyyu(irg,itg,ipg)
00021 hyz = hyzu(irg,itg,ipg)
00022 hzx = hxz
00023 hzy = hyz
00024 hzz = hzzu(irg,itg,ipg)
00025
00026 hod1 = hxx + hyy + hzz
00027 hod2 = hxx*hyy + hxx*hzz + hyy*hzz &
00028 & - hxy*hyx - hxz*hzx - hyz*hzy
00029 hod3 = hxx*hyy*hzz + hxy*hyz*hzx + hxz*hyx*hzy &
00030 & - hxx*hyz*hzy - hxy*hyx*hzz - hxz*hyy*hzx
00031 detgm = 1.0d0 + hod1 + hod2 + hod3
00032 detgmi = 1.0d0/detgm
00033
00034 hod1 = + hyy + hzz
00035 hod2 = + hyy*hzz - hyz*hzy
00036 gmxxd = (1.0d0 + hod1 + hod2)*detgmi
00037 hod1 = - hxy
00038 hod2 = + hxz*hzy - hxy*hzz
00039 gmxyd = (hod1 + hod2)*detgmi
00040 hod1 = - hxz
00041 hod2 = + hxy*hyz - hxz*hyy
00042 gmxzd = (hod1 + hod2)*detgmi
00043 hod1 = + hxx + hzz
00044 hod2 = + hxx*hzz - hxz*hzx
00045 gmyyd = (1.0d0 + hod1 + hod2)*detgmi
00046 hod1 = - hyz
00047 hod2 = + hxz*hyx - hxx*hyz
00048 gmyzd = (hod1 + hod2)*detgmi
00049 hod1 = + hxx + hyy
00050 hod2 = + hxx*hyy - hxy*hyx
00051 gmzzd = (1.0d0 + hod1 + hod2)*detgmi
00052 gmyxd = gmxyd
00053 gmzxd = gmxzd
00054 gmzyd = gmyzd
00055
00056 hxxd(irg,itg,ipg) = gmxxd - 1.0d0
00057 hxyd(irg,itg,ipg) = gmxyd
00058 hxzd(irg,itg,ipg) = gmxzd
00059 hyyd(irg,itg,ipg) = gmyyd - 1.0d0
00060 hyzd(irg,itg,ipg) = gmyzd
00061 hzzd(irg,itg,ipg) = gmzzd - 1.0d0
00062
00063 end do
00064 end do
00065 end do
00066
00067 end subroutine invhij_up2down