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

Go to the source code of this file.

Functions/Subroutines

subroutine imp_fac_icj (nddl, nnz, iadk, jdik, diag_k, lt_k, iadm, jdim, diag_m, lt_m, psi, nnzm, max_l, isky, li, nne)
subroutine diagmod (j0, j1, li, diag_m, aii, isky)

Function/Subroutine Documentation

◆ diagmod()

subroutine diagmod ( integer j0,
integer j1,
li,
diag_m,
aii,
integer, dimension(*) isky )

Definition at line 147 of file imp_fac_ic.F.

148C-----------------------------------------------
149C I m p l i c i t T y p e s
150C-----------------------------------------------
151#include "implicit_f.inc"
152C-----------------------------------------------
153C D u m m y A r g u m e n t s
154C-----------------------------------------------
155 INTEGER J0, J1,ISKY(*)
156C REAL
157 my_real
158 . diag_m(*), li(*) ,aii
159C-----------------------------------------------
160C L o c a l V a r i a b l e s
161C-----------------------------------------------
162 INTEGER J
163 my_real
164 . ajj,s,fac
165C-----------------------------------------------
166 DO j = j0, j1
167 IF (isky(j)/=j) THEN
168 s = li(j)
169 IF (s/=zero) THEN
170 ajj = diag_m(j)
171 s =abs(s)
172 fac = sqrt(abs(aii/ajj))
173 aii = aii +s*fac
174 IF (abs(aii)<ep30) THEN
175 ELSE
176 ENDIF
177 diag_m(j) = ajj +s/fac
178 ENDIF
179 ENDIF
180 ENDDO
181C
182 RETURN
#define my_real
Definition cppsort.cpp:32

◆ imp_fac_icj()

subroutine imp_fac_icj ( integer nddl,
integer nnz,
integer, dimension(*) iadk,
integer, dimension(*) jdik,
diag_k,
lt_k,
integer, dimension(*) iadm,
integer, dimension(*) jdim,
diag_m,
lt_m,
psi,
integer nnzm,
integer max_l,
integer, dimension(*) isky,
li,
integer nne )

Definition at line 31 of file imp_fac_ic.F.

36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C-----------------------------------------------
41C D u m m y A r g u m e n t s
42C-----------------------------------------------
43 INTEGER NDDL ,NNZ ,IADK(*) ,JDIK(*),NNZM ,IADM(*),JDIM(*),
44 . NNE,ISKY(*),MAX_L
45C REAL
47 . diag_k(*), diag_m(*), lt_k(*) ,lt_m(*) ,psi ,li(*)
48C-----------------------------------------------
49C L o c a l V a r i a b l e s
50C-----------------------------------------------
51 INTEGER I,J,K,REJ,MAXK,
52 1 K0 ,J0 ,K1, KFT,LSKY
54 . aii,ajj,lkik,s, fac
55C-----------------------------
56C PSI = SQRT(PSI)
57 rej = 0
58 maxk = 0
59 nne = 0
60 nnzm = 0
61 iadm(1)=1
62 DO i=1,nddl
63 diag_m(i) = diag_k(i)
64 isky(i)=i
65 li(i)=zero
66 ENDDO
67C
68 DO i=1,nddl
69 aii = diag_m(i)
70 k0 = iadk(i+1) - 1
71 IF (k0>0) THEN
72 j0 = jdik(k0)
73 IF (j0>maxk) maxk=j0
74 ENDIF
75 DO j = iadk(i),k0
76 k1= jdik(j)
77 li(k1) = lt_k(j)
78C----------ISKY(J)=I for LT_K(I,J)-----
79 IF (isky(k1)==k1) isky(k1)=i
80 ENDDO
81 kft =isky(i)
82 DO k = kft,i-1
83 lsky = isky(k)
84C IF (LSKY>=IADM(K+1)) write(*,*)'found 1',i
85 IF (lsky<iadm(k+1).AND.jdim(lsky)==i) THEN
86 lkik = lt_m(lsky)/diag_m(k)
87 aii = aii -lt_m(lsky)*lkik
88 isky(k)=lsky+1
89 DO j = isky(k),iadm(k+1)-1
90 k1= jdim(j)
91C----------voir ici quand ca tombre sur diagonal---
92 li(k1) = li(k1)-lkik*lt_m(j)
93 ENDDO
94 ENDIF
95 ENDDO
96 DO 100 j = i+1 , maxk
97 IF (isky(j)==j) GOTO 100
98 s = li(j)
99 IF (s/=zero) THEN
100 li(j)=zero
101 ajj = diag_m(j)
102 IF (psi==zero) THEN
103 nnzm = nnzm +1
104 IF (nnzm>max_l) CALL err_mem(nnzm)
105 lt_m(nnzm)=s
106 jdim(nnzm)=j
107 ELSEIF (s*s<psi*aii*ajj) THEN
108 s =abs(s)
109 fac = sqrt(aii/ajj)
110 aii = aii +s*fac
111 diag_m(j) = ajj +s/fac
112 rej = rej +1
113 ELSE
114 nnzm = nnzm +1
115 IF (nnzm>max_l) CALL err_mem(nnzm)
116 lt_m(nnzm)=s
117 jdim(nnzm)=j
118 ENDIF
119 ENDIF
120 100 CONTINUE
121 IF (aii<em20) THEN
122 nne=nne+1
123 aii=sign(max(abs(aii),em20),aii)
124 ENDIF
125 diag_m(i) = one/aii
126 iadm(i+1)=nnzm+1
127 DO j = iadm(i),nnzm
128 lt_m(j)=lt_m(j)*diag_m(i)
129 ENDDO
130 isky(i)=iadm(i)
131 IF (isky(i)>nnzm) isky(i)= iadm(i)
132 ENDDO
133c IF (NNE>0) then
134c write(*,*)'--WARNING: PIVOT PROBLEM',NNE
135c DO I=1,NDDL
136c write(*,*)'diag,i,iadm=',DIAG_M(I),I,IADM(I)
137c ENDDO
138c DO J=1,NNZM
139c write(*,*)'LT_M,i,j=',LT_M(J),J,JDIM(J)
140c ENDDO
141c endif
142 RETURN
subroutine err_mem(mem)
Definition lin_solv.F:617
#define max(a, b)
Definition macros.h:21