OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
direct_solve.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| direct_solve ../engine/source/ale/alemuscl/direct_solve.f
25!||====================================================================
26 SUBROUTINE direct_solve (mat, rhs, sol)
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-----------------------------------------------
68 END SUBROUTINE direct_solve
#define my_real
Definition cppsort.cpp:32
subroutine direct_solve(mat, rhs, sol)