OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
direct_solve.F File Reference
#include "implicit_f.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine direct_solve (mat, rhs, sol)

Function/Subroutine Documentation

◆ direct_solve()

subroutine direct_solve ( dimension(3, 3), intent(in) mat,
dimension(3), intent(in) rhs,
dimension(3), intent(out) sol )

Definition at line 26 of file direct_solve.F.

27C-----------------------------------------------
28C D e s c r i p t i o n
29C This subroutine solves directly the 3 x 3
30C symmetric definite positive linear system
31C mat * sol = rhs
32C-----------------------------------------------
33
34C-----------------------------------------------
35C I m p l i c i t T y p e s
36C-----------------------------------------------
37#include "implicit_f.inc"
38C-----------------------------------------------
39C D u m m y A r g u m e n t s
40C-----------------------------------------------
41 my_real, INTENT(IN) :: mat(3, 3) ! matrix
42 my_real, INTENT(IN) :: rhs(3) ! right hand side
43 my_real, INTENT(OUT) :: sol(3) ! solution vector
44C-----------------------------------------------
45C L o c a l V a r i a b l e s
46C-----------------------------------------------
47 my_real :: det
48 my_real :: a11, a12, a13, a22, a23, a33
49C-----------------------------------------------
50C S o u r c e L i n e s
51C-----------------------------------------------
52 !!! Determinant of the matrix
53 det = 2.0d0 * mat(1,3) * mat(1,2) * mat(2, 3) -
54 . mat(1,3) * mat(1,3) * mat(2,2) - mat(1,2) * mat(1,2) * mat(3,3) +
55 . mat(1,1) * mat(2,2) * mat(3,3) - mat(1,1) * mat(2,3) * mat(2,3)
56 !!! Coefficients of the inverse
57 a11 = mat(2,2) * mat(3,3) - mat(2,3) * mat(2,3)
58 a12 = -mat(1,2) * mat(3,3) + mat(1,3) * mat(2,3)
59 a13 = mat(1,2) * mat(2,3) - mat(1,3) * mat(2,2)
60 a22 = -mat(1,3) * mat(1,3) + mat(1,1) * mat(3,3)
61 a23 = -mat(1,1) * mat(2,3) +mat(1,3) * mat(1,2)
62 a33 = -mat(1,2) * mat(1,2) + mat(1,1) * mat(2,2)
63 !!! Direct matrix / vector multiplication
64 sol(1) = (a11 * rhs(1) + a12 * rhs(2) + a13 * rhs(3)) / det
65 sol(2) = (a12 * rhs(1) + a22 * rhs(2) + a23 * rhs(3)) / det
66 sol(3) = (a13 * rhs(1) + a23 * rhs(2) + a33 * rhs(3)) / det
67C-----------------------------------------------
#define my_real
Definition cppsort.cpp:32