OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ig3donederiv.F File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine ig3donederiv (itel, n, xxi, yyi, zzi, wwi, idx, idy, idz, knotlocx, knotlocy, knotlocz, drdx, r, detjac, nctrl, gaussx, gaussy, gaussz, kx, ky, kz, px, py, pz, boolg, idx2, idy2, idz2, knotlocelx, knotlocely, knotlocelz)

Function/Subroutine Documentation

◆ ig3donederiv()

subroutine ig3donederiv ( integer itel,
integer n,
xxi,
yyi,
zzi,
wwi,
integer idx,
integer idy,
integer idz,
knotlocx,
knotlocy,
knotlocz,
drdx,
r,
detjac,
integer nctrl,
gaussx,
gaussy,
gaussz,
kx,
ky,
kz,
integer px,
integer py,
integer pz,
integer boolg,
integer idx2,
integer idy2,
integer idz2,
knotlocelx,
knotlocely,
knotlocelz )

Definition at line 33 of file ig3donederiv.F.

43C--------------------------------------------------------------------------------------------------------
44C
45C This subroutine calculates the vector of local shape functions R and an array of their derivatives dR.dx
46C The Jacobian determinant J may be returned to if it's necessary
47C This subroutine is called by ig3dinit3 for every LR or Truncated element
48C
49C--------------------------------------------------------------------------------------------------------
50C VAR | SIZE | TYP | RW | DEFINITION
51C--------------------------------------------------------------------------------------------------------
52C ITEL | 1 | I | R | ELEMENT ID
53C N | 1 | I | R | GAUSS POINT ID
54C XXI | NCTRL | F | R | X COORDINATE of ELEMENT I CONTROL POINTS in global frame
55C YYI | NCTRL | F | R | Y COORDINATE of ELEMENT I CONTROL POINTS in global frame
56C ZZI | NCTRL | F | R | Z COORDINATE of ELEMENT I CONTROL POINTS in global frame
57C WWI | NCTRL | F | R | WEIGHT OF ELEMENT I CONTROL POINTS
58C IDX | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN X DIRECTION
59C IDY | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN Y DIRECTION
60C IDZ | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN Z DIRECTION
61C IDX2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN X DIRECTION
62C IDY2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN Y DIRECTION
63C IDZ2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN Z DIRECTION
64C R | NCTRL | F | W | ARRAY OF TRIVIATE NURBS BASIS FUNCTION
65C DRDX | NCTRL,3 | F | W | TRIVIATE NURBS FUNCTION DERIVATIVES IN PARAMETRIC COORDINATES
66C GAUSSX | 1 | F | R | COORDINATES IN DIRECTION X OF GAUSS POINT
67C GAUSSY | 1 | F | R | COORDINATES IN DIRECTION Y OF GAUSS POINT
68C GAUSSZ | 1 | F | R | COORDINATES IN DIRECTION Z OF GAUSS POINT
69C NCTRL | 1 | I | R | NUMBER OF ELEMENT CONTROL POINTS IN CURRENT GROUP
70C PX | 1 | I | R | POLYNOMIAL INTERPOLATION DEGREE IN X DIRECTION
71C PY | 1 | I | R | POLYNOMIAL INTERPOLATION DEGREE IN Y DIRECTION
72C PZ | 1 | I | R | POLYNOMIAL INTERPOLATION DEGREE IN Z DIRECTION
73C KX | NKX | F | R | (FULL) KNOT VECTOR IN X DIRECTION FOR THE CURRENT PATCH
74C KY | NKY | F | R | (FULL) KNOT VECTOR IN Y DIRECTION FOR THE CURRENT PATCH
75C KZ | NKZ | F | R | (FULL) KNOT VECTOR IN Z DIRECTION FOR THE CURRENT PATCH
76C KNOTLOCX | PX+2,NCTRL | F | R | LOCAL KNOT VECTOR IN X DIRECTION FOR EACH CONTROL POINT
77C KNOTLOCY | PY+2,NCTRL | F | R | LOCAL KNOT VECTOR IN Y DIRECTION FOR EACH CONTROL POINT
78C KNOTLOCZ | PZ+2,NCTRL | F | R | LOCAL KNOT VECTOR IN Z DIRECTION FOR EACH CONTROL POINT
79C DXDXI | 3,3 | F | W | DERIVATIVE OF PHYSICAL COORDINATES W.R.T. PARAMETRIC COORDINATES
80C DXIDX | 3,3 | F | W | INVERSE OF DXDXI
81C DXIDTILDEXI | 3,3 | F | W | DERIVATIVE OF PARAMETRIC COORDINATES W.R.T. PARENT ELEMENT COORDINATES
82C AJMAT | 3,3 | F | W | JACOBIAN MATRIX
83C DETJAC | 1 | F | W | DETERMINANT OF AJMAT
84C-----------------------------------------------
85C M o d u l e s
86C-----------------------------------------------
87 USE message_mod
88C-----------------------------------------------
89C I m p l i c i t T y p e s
90C-----------------------------------------------
91#include "implicit_f.inc"
92C-----------------------------------------------
93C D u m m y A r g u m e n t s
94C-----------------------------------------------
95 INTEGER IDX, IDY, IDZ, NCTRL, PX, PY, PZ, ITEL, N, BOOLG,IDX2, IDY2, IDZ2
97 . gaussx, gaussy, gaussz, detjac,
98 . r(*),drdx(3,nctrl),xxi(*),yyi(*),zzi(*),
99 . wwi(*),kx(*), ky(*), kz(*), knotlocx(px+2,nctrl),
100 . knotlocy(py+2,nctrl),knotlocz(pz+2,nctrl),knotlocelx(2),
101 . knotlocely(2),knotlocelz(2)
102C-----------------------------------------------
103C L o c a l V a r i a b l e s
104C-----------------------------------------------
105 INTEGER NUMLOC, I, J, K, NA, NB, NC
106 my_real
107 . drdxi(nctrl,3),sumtot, detdxdxi, fn(nctrl),
108 . dndxi(nctrl), fm(nctrl), dmdxi(nctrl), fl(nctrl),
109 . dldxi(nctrl), xi(3), sumxi(3), ajmat(3,3),
110 . dxidtildexi(3,3), dxidx(3,3), dxdxi(3,3)
111C=======================================================================
112C S o u r c e L i n e s
113C=======================================================================
114C
115C INITIALISATION DES DIFFERENTES MATRICES LOCALES
116
117 dxdxi(:,:)=zero
118 dxidtildexi(:,:)=zero
119 ajmat(:,:)=zero
120 drdx(:,:)=zero
121
122 IF (boolg == 1) THEN
123C CALCULATE PARAMETRIC COORDINATES OF THE GAUSS POINT FROM PARENT ELEMENT COORDINATES, FOR THE THREE DIRECTIONS
124 xi(1) = ((knotlocelx(2)-knotlocelx(1))*gaussx + (knotlocelx(2)+(knotlocelx(1))))/two
125 xi(2) = ((knotlocely(2)-knotlocely(1))*gaussy + (knotlocely(2)+(knotlocely(1))))/two
126 xi(3) = ((knotlocelz(2)-knotlocelz(1))*gaussz + (knotlocelz(2)+(knotlocelz(1))))/two
127c XI(1) = ((KX(IDX2)-KX(IDX))*GAUSSX + (KX(IDX2)+(KX(IDX))))/TWO
128c XI(2) = ((KY(IDY2)-KY(IDY))*GAUSSY + (KY(IDY2)+(KY(IDY))))/TWO
129c XI(3) = ((KZ(IDZ2)-KZ(IDZ))*GAUSSZ + (KZ(IDZ2)+(KZ(IDZ))))/TWO
130 ELSE
131 xi(1) = gaussx
132 xi(2) = gaussy
133 xi(3) = gaussz
134 ENDIF
135
136C CALCULATE B-SPLINE FUNCTION AT XI POINT
137
138 DO numloc=1,nctrl
139 CALL dersonebasisfun(1, px, xi(1), knotlocx(:,numloc), fn(numloc), dndxi(numloc))
140 CALL dersonebasisfun(1, py, xi(2), knotlocy(:,numloc), fm(numloc), dmdxi(numloc))
141 CALL dersonebasisfun(1, pz, xi(3), knotlocz(:,numloc), fl(numloc), dldxi(numloc))
142 ENDDO
143
144C BUILD NUMERATORS AND DENOMINATORS
145
146 sumtot=zero
147 sumxi(1)=zero
148 sumxi(2)=zero
149 sumxi(3)=zero
150
151 DO numloc=1,nctrl
152 r(numloc)=fn(numloc)*fm(numloc)*fl(numloc)*wwi(numloc)
153 sumtot=sumtot+r(numloc)
154
155 drdxi(numloc,1)=dndxi(numloc)*fm(numloc)*fl(numloc)*
156 . wwi(numloc)
157 sumxi(1)=sumxi(1)+drdxi(numloc,1)
158 drdxi(numloc,2)=fn(numloc)*dmdxi(numloc)*fl(numloc)*
159 . wwi(numloc)
160 sumxi(2)=sumxi(2)+drdxi(numloc,2)
161 drdxi(numloc,3)=fn(numloc)*fm(numloc)*dldxi(numloc)*
162 . wwi(numloc)
163 sumxi(3)=sumxi(3)+drdxi(numloc,3)
164 ENDDO
165
166C DIVIDE BY DENOMINATOR TO COMPLETE DEFINITION OF FUNCTION AND DERIVATIVES
167
168 DO numloc=1,nctrl
169 r(numloc)=r(numloc)/sumtot
170 ENDDO
171
172 DO i=1,3
173 DO numloc=1,nctrl
174 drdxi(numloc,i)=(drdxi(numloc,i)-r(numloc)*sumxi(i))/sumtot
175 ENDDO
176 ENDDO
177
178C GRADIENT OF MAPPING FROM PARAMETER SPACE TO PHYSICAL SPACE
179
180 DO nb=1,3
181 DO numloc=1,nctrl
182 dxdxi(1,nb)=dxdxi(1,nb)+xxi(numloc)*drdxi(numloc,nb)
183 dxdxi(2,nb)=dxdxi(2,nb)+yyi(numloc)*drdxi(numloc,nb)
184 dxdxi(3,nb)=dxdxi(3,nb)+zzi(numloc)*drdxi(numloc,nb)
185 ENDDO
186 ENDDO
187
188C COMPUTE INVERSE OF GRADIENT (OBTENIR DXIDX)
189
190 detdxdxi=dxdxi(1,2)*dxdxi(2,3)*dxdxi(3,1)
191 . -dxdxi(1,3)*dxdxi(2,2)*dxdxi(3,1)
192 . +dxdxi(1,3)*dxdxi(2,1)*dxdxi(3,2)
193 . -dxdxi(1,1)*dxdxi(2,3)*dxdxi(3,2)
194 . +dxdxi(1,1)*dxdxi(2,2)*dxdxi(3,3)
195 . -dxdxi(1,2)*dxdxi(2,1)*dxdxi(3,3)
196
197 IF (abs(detdxdxi)<em20) THEN
198 CALL ancmsg(msgid=1183,
199 . msgtype=msgwarning,
200 . anmode=aninfo,
201 . i1=itel,
202 . i2=n)
203 ENDIF
204
205 dxidx(1,1)=(dxdxi(2,2)*dxdxi(3,3)-dxdxi(2,3)*dxdxi(3,2))/detdxdxi
206 dxidx(1,2)=(dxdxi(1,3)*dxdxi(3,2)-dxdxi(1,2)*dxdxi(3,3))/detdxdxi
207 dxidx(1,3)=(dxdxi(1,2)*dxdxi(2,3)-dxdxi(1,3)*dxdxi(2,2))/detdxdxi
208 dxidx(2,1)=(dxdxi(2,3)*dxdxi(3,1)-dxdxi(2,1)*dxdxi(3,3))/detdxdxi
209 dxidx(2,2)=(dxdxi(1,1)*dxdxi(3,3)-dxdxi(1,3)*dxdxi(3,1))/detdxdxi
210 dxidx(2,3)=(dxdxi(1,3)*dxdxi(2,1)-dxdxi(1,1)*dxdxi(2,3))/detdxdxi
211 dxidx(3,1)=(dxdxi(2,1)*dxdxi(3,2)-dxdxi(2,2)*dxdxi(3,1))/detdxdxi
212 dxidx(3,2)=(dxdxi(1,2)*dxdxi(3,1)-dxdxi(1,1)*dxdxi(3,2))/detdxdxi
213 dxidx(3,3)=(dxdxi(1,1)*dxdxi(2,2)-dxdxi(1,2)*dxdxi(2,1))/detdxdxi
214
215C GRADIENT OF MAPPING FROM PARENT ELEMENT TO PARAMETER SPACE
216
217 dxidtildexi(1,1)=(knotlocelx(2)-knotlocelx(1))/two
218 dxidtildexi(2,2)=(knotlocely(2)-knotlocely(1))/two
219 dxidtildexi(3,3)=(knotlocelz(2)-knotlocelz(1))/two
220c DXIDTILDEXI(1,1)=(KX(IDX2)-KX(IDX))/TWO
221c DXIDTILDEXI(2,2)=(KY(IDY2)-KY(IDY))/TWO
222c DXIDTILDEXI(3,3)=(KZ(IDZ2)-KZ(IDZ))/TWO
223
224C COMPUTE DERIVATES OF BASIS FUNCTIONS WITH RESPECT TO PHYSICAL COORDINATES
225
226 DO na=1,3
227 DO nb=1,3
228 DO numloc=1,nctrl
229 drdx(na,numloc)=drdx(na,numloc)+(drdxi(numloc,nb)*dxidx(nb,na))
230 ENDDO
231 DO nc=1,3
232 ajmat(na,nb)=ajmat(na,nb)+dxdxi(na,nc)*dxidtildexi(nc,nb)
233 ENDDO
234 ENDDO
235 ENDDO
236
237C DETERMINANT DE LA MATRICE AJMAT (QUI REGROUPE DONC LES TWO JACOBIENS)
238
239 detjac=(ajmat(1,1)*ajmat(2,2)*ajmat(3,3))
240 . +(ajmat(1,2)*ajmat(2,3)*ajmat(3,1))
241 . +(ajmat(2,1)*ajmat(3,2)*ajmat(1,3))
242 . -(ajmat(1,3)*ajmat(2,2)*ajmat(3,1))
243 . -(ajmat(1,2)*ajmat(2,1)*ajmat(3,3))
244 . -(ajmat(2,3)*ajmat(3,2)*ajmat(1,1))
245
246 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine dersonebasisfun(idxi, pxi, xi, kxi, ders1, ders2)
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