aboutsummaryrefslogtreecommitdiff
path: root/src/matinv.F90
diff options
context:
space:
mode:
Diffstat (limited to 'src/matinv.F90')
-rw-r--r--src/matinv.F9065
1 files changed, 65 insertions, 0 deletions
diff --git a/src/matinv.F90 b/src/matinv.F90
index 4b6d8ec..e6fc6a3 100644
--- a/src/matinv.F90
+++ b/src/matinv.F90
@@ -8,11 +8,53 @@ module matinv
implicit none
private
+ public calc_posinv3
+ public calc_syminv3
public calc_inv3
+
+ public calc_syminv4
public calc_inv4
contains
+ subroutine calc_posinv3 (g3, gu3)
+ CCTK_REAL, intent(in) :: g3(3,3)
+ CCTK_REAL, intent(out) :: gu3(3,3)
+ CCTK_REAL :: tmp(3,3)
+ integer :: info
+ character :: msg*1000
+
+ tmp = g3
+ gu3 = delta3
+ call posv ('u', 3, 3, tmp, 3, gu3, 3, info)
+
+ if (info /= 0) then
+ write (msg, '("Error in call to POSV, info=",i4)') info
+ call CCTK_WARN (0, trim(msg))
+ end if
+ end subroutine calc_posinv3
+
+ subroutine calc_syminv3 (g3, gu3)
+ CCTK_REAL, intent(in) :: g3(3,3)
+ CCTK_REAL, intent(out) :: gu3(3,3)
+ CCTK_REAL :: tmp(3,3)
+ integer :: ipiv(3)
+ integer :: info
+ character :: msg*1000
+
+ integer, parameter :: lwork = 1000
+ CCTK_REAL :: work(lwork)
+
+ tmp = g3
+ gu3 = delta3
+ call sysv ('u', 3, 3, tmp, 3, ipiv, gu3, 3, work, lwork, info)
+
+ if (info /= 0) then
+ write (msg, '("Error in call to SYSV, info=",i4)') info
+ call CCTK_WARN (0, trim(msg))
+ end if
+ end subroutine calc_syminv3
+
subroutine calc_inv3 (g3, gu3)
CCTK_REAL, intent(in) :: g3(3,3)
CCTK_REAL, intent(out) :: gu3(3,3)
@@ -31,6 +73,29 @@ contains
end if
end subroutine calc_inv3
+
+
+ subroutine calc_syminv4 (g4, gu4)
+ CCTK_REAL, intent(in) :: g4(0:3,0:3)
+ CCTK_REAL, intent(out) :: gu4(0:3,0:3)
+ CCTK_REAL :: tmp(0:3,0:3)
+ integer :: ipiv(0:3)
+ integer :: info
+ character :: msg*1000
+
+ integer, parameter :: lwork = 1000
+ CCTK_REAL :: work(lwork)
+
+ tmp = g4
+ gu4 = delta4
+ call sysv ('u', 4, 4, tmp, 4, ipiv, gu4, 4, work, lwork, info)
+
+ if (info /= 0) then
+ write (msg, '("Error in call to SYSV, info=",i4)') info
+ call CCTK_WARN (0, trim(msg))
+ end if
+ end subroutine calc_syminv4
+
subroutine calc_inv4 (g4, gu4)
CCTK_REAL, intent(in) :: g4(0:3,0:3)
CCTK_REAL, intent(out) :: gu4(0:3,0:3)