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

Go to the source code of this file.

Functions/Subroutines

subroutine lag_direct (iadll, lll, jll, xll, ltsm, v, vr, a, ar, ms, in, nc_ini, ncl)

Function/Subroutine Documentation

◆ lag_direct()

subroutine lag_direct ( integer, dimension(*) iadll,
integer, dimension(*) lll,
integer, dimension(*) jll,
xll,
ltsm,
v,
vr,
a,
ar,
ms,
in,
integer nc_ini,
integer ncl )

Definition at line 34 of file lag_direct.F.

38C-----------------------------------------------
39C M o d u l e s
40C-----------------------------------------------
41 USE message_mod
42C-----------------------------------------------
43C I m p l i c i t T y p e s
44C-----------------------------------------------
45#include "implicit_f.inc"
46C-----------------------------------------------
47C C o m m o n B l o c k s
48C-----------------------------------------------
49#include "lagmult.inc"
50#include "com08_c.inc"
51C-----------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER NC_INI, NCL, IADLL(*), LLL(*), JLL(*)
55C REAL
57 . ltsm(6,*),xll(*),ms(*),in(*),v(3,*),vr(3,*),a(3,*),ar(3,*)
58C-----------------------------------------------
59C L o c a l V a r i a b l e s
60C-----------------------------------------------
61 INTEGER I,J,K,L,IC,JC,IK
63 . hloc(mxdlen,mxdlen),rloc(mxdlen),s,hij
64C======================================================================|
65 IF (ncl>mxdlen) THEN
66 CALL ancmsg(msgid=111,anmode=aninfo,
67 . i1=ncl)
68 CALL arret(2)
69 ENDIF
70C--- Local H matrix
71 DO k=1,ncl
72 rloc(k) = zero
73 ic = nc_ini + k
74 DO ik=iadll(ic),iadll(ic+1)-1
75 i = lll(ik)
76 j = jll(ik)
77 IF (j>3) THEN
78 ltsm(j,i) = xll(ik)/in(i)
79 ELSE
80 ltsm(j,i) = xll(ik)/ms(i)
81 ENDIF
82 ENDDO
83 DO l = 1,k
84 jc = nc_ini + l
85 hij = zero
86 DO ik=iadll(jc),iadll(jc+1)-1
87 hij = hij + xll(ik)*ltsm(jll(ik),lll(ik))
88 ENDDO
89 hloc(l,k) = hij
90 ENDDO
91 DO ik=iadll(ic),iadll(ic+1)-1
92 ltsm(jll(ik),lll(ik)) = zero
93 ENDDO
94 ENDDO
95 DO k = 2,ncl
96 DO l = 1,k
97 hloc(k,l) = hloc(l,k)
98 ENDDO
99 ENDDO
100C--- second membre
101 DO k = 1,ncl
102 ic = nc_ini + k
103 DO ik=iadll(ic),iadll(ic+1)-1
104 i = lll(ik)
105 j = jll(ik)
106 IF (j>3) THEN
107 j = j-3
108 rloc(k) = rloc(k) + xll(ik)*(vr(j,i)/dt12+ar(j,i))
109 ELSE
110 rloc(k) = rloc(k) + xll(ik)*(v(j,i)/dt12+a(j,i))
111 ENDIF
112 ENDDO
113 ENDDO
114C--- Factorise H (Full Cholesky)
115 DO j=1,ncl
116 IF (hloc(j,j)<=zero) THEN
117 CALL ancmsg(msgid=112,anmode=aninfo,
118 . i1=j)
119 CALL arret(2)
120 ENDIF
121 hloc(j,j) = sqrt(hloc(j,j))
122 DO k=1,j-1
123 DO i=j+1,ncl
124 hloc(i,j) = hloc(i,j) - hloc(i,k)*hloc(j,k)
125 ENDDO
126 ENDDO
127 DO i=j+1,ncl
128 hloc(i,j) = hloc(i,j)/hloc(j,j)
129 hloc(i,i) = hloc(i,i) - hloc(i,j)*hloc(i,j)
130 ENDDO
131 ENDDO
132C--- back subst Ly = r,
133 DO i=1,ncl
134 s = rloc(i)
135 DO j=1,i-1
136 s = s - hloc(i,j)*rloc(j)
137 ENDDO
138 rloc(i) = s / hloc(i,i)
139 ENDDO
140C--- back subst Lz = y
141 DO i=ncl,1,-1
142 s = rloc(i)
143 DO j=i+1,ncl
144 s = s - hloc(j,i)*rloc(j)
145 ENDDO
146 rloc(i) = s / hloc(i,i)
147 ENDDO
148C--- update accelerations
149 DO k=1,ncl
150 ic = nc_ini + k
151 DO ik=iadll(ic),iadll(ic+1)-1
152 i = lll(ik)
153 j = jll(ik)
154 IF(j>3) THEN
155 j = j-3
156 ar(j,i) = ar(j,i) - xll(ik)*rloc(k)/in(i)
157 ELSE
158 a(j,i) = a(j,i) - xll(ik)*rloc(k)/ms(i)
159 ENDIF
160 ENDDO
161 ENDDO
162C---
163 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)
Definition sigeps106.F:339
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
subroutine arret(nn)
Definition arret.F:87