OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ig3donederiv.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!|| ig3donederiv ../engine/source/elements/ige3d/ig3donederiv.F
25!||--- called by ------------------------------------------------------
26!|| ig3duforc3 ../engine/source/elements/ige3d/ig3duforc3.F
27!|| projecig3d ../engine/source/elements/ige3d/projecig3d.F
28!||--- calls -----------------------------------------------------
29!|| dersonebasisfun ../engine/source/elements/ige3d/dersonebasisfun.F
30!||--- uses -----------------------------------------------------
31!|| message_mod ../engine/share/message_module/message_mod.F
32!||====================================================================
33 SUBROUTINE ig3donederiv(
34 1 ITEL ,N ,XXI ,YYI ,
35 2 ZZI ,WWI ,IDX ,IDY ,
36 3 IDZ ,KNOTLOCX ,KNOTLOCY ,KNOTLOCZ ,
37 4 DRDX ,R ,DETJAC,NCTRL ,
38 5 GAUSSX,GAUSSY,GAUSSZ,KX ,
39 6 KY ,KZ ,PX ,
40 7 PY ,PZ ,BOOLG ,
41 8 IDX2 ,IDY2 ,IDZ2 ,
42 9 KNOTLOCELX,KNOTLOCELY,KNOTLOCELZ)
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(nctrl,3),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
131C SI ON A EN ENTREE DES POINTS DEJA DANS LE REPERE PARAMETRIQUE ON N'A PAS BESOIN DE LES BASCULER DE L'ESPACE PARENT A L'ESPACE PARAMETRIQUE
132 xi(1) = gaussx
133 xi(2) = gaussy
134 xi(3) = gaussz
135 ENDIF
136
137C CALCULATE B-SPLINE FUNCTION AT XI POINT
138
139 DO numloc=1,nctrl
140 CALL dersonebasisfun(1, px, xi(1), knotlocx(:,numloc), fn(numloc), dndxi(numloc))
141 CALL dersonebasisfun(1, py, xi(2), knotlocy(:,numloc), fm(numloc), dmdxi(numloc))
142 CALL dersonebasisfun(1, pz, xi(3), knotlocz(:,numloc), fl(numloc), dldxi(numloc))
143 ENDDO
144
145c NUMLOC = 0
146c DO K=1,PZ+1
147c DO J=1,PY+1
148c DO I=1,PX+1
149c NUMLOC = NUMLOC+1
150c CALL DERSONEBASISFUN(I, 1, PX, XI(1), KNOTLOCX(:,NUMLOC), FN(NUMLOC), DNDXI(NUMLOC))
151c CALL DERSONEBASISFUN(J, 1, PY, XI(2), KNOTLOCY(:,NUMLOC), FM(NUMLOC), DMDXI(NUMLOC))
152c CALL DERSONEBASISFUN(K, 1, PZ, XI(3), KNOTLOCZ(:,NUMLOC), FL(NUMLOC), DLDXI(NUMLOC))
153c ENDDO
154c ENDDO
155c ENDDO
156
157C BUILD NUMERATORS AND DENOMINATORS
158
159 sumtot=zero
160 sumxi(1)=zero
161 sumxi(2)=zero
162 sumxi(3)=zero
163
164 DO numloc=1,nctrl
165 r(numloc)=fn(numloc)*fm(numloc)*fl(numloc)*wwi(numloc)
166 sumtot=sumtot+r(numloc)
167
168 drdxi(numloc,1)=dndxi(numloc)*fm(numloc)*fl(numloc)*
169 . wwi(numloc)
170 sumxi(1)=sumxi(1)+drdxi(numloc,1)
171 drdxi(numloc,2)=fn(numloc)*dmdxi(numloc)*fl(numloc)*
172 . wwi(numloc)
173 sumxi(2)=sumxi(2)+drdxi(numloc,2)
174 drdxi(numloc,3)=fn(numloc)*fm(numloc)*dldxi(numloc)*
175 . wwi(numloc)
176 sumxi(3)=sumxi(3)+drdxi(numloc,3)
177 ENDDO
178
179C DIVIDE BY DENOMINATOR TO COMPLETE DEFINITION OF FUNCTION AND DERIVATIVES
180
181 DO numloc=1,nctrl
182 r(numloc)=r(numloc)/sumtot
183 ENDDO
184
185 DO i=1,3
186 DO numloc=1,nctrl
187 drdxi(numloc,i)=(drdxi(numloc,i)-r(numloc)*sumxi(i))/sumtot
188 ENDDO
189 ENDDO
190
191C GRADIENT OF MAPPING FROM PARAMETER SPACE TO PHYSICAL SPACE
192
193 DO nb=1,3
194 DO numloc=1,nctrl
195 dxdxi(1,nb)=dxdxi(1,nb)+xxi(numloc)*drdxi(numloc,nb)
196 dxdxi(2,nb)=dxdxi(2,nb)+yyi(numloc)*drdxi(numloc,nb)
197 dxdxi(3,nb)=dxdxi(3,nb)+zzi(numloc)*drdxi(numloc,nb)
198 ENDDO
199 ENDDO
200
201C COMPUTE INVERSE OF GRADIENT (OBTENIR DXIDX)
202
203 detdxdxi=dxdxi(1,2)*dxdxi(2,3)*dxdxi(3,1)
204 . -dxdxi(1,3)*dxdxi(2,2)*dxdxi(3,1)
205 . +dxdxi(1,3)*dxdxi(2,1)*dxdxi(3,2)
206 . -dxdxi(1,1)*dxdxi(2,3)*dxdxi(3,2)
207 . +dxdxi(1,1)*dxdxi(2,2)*dxdxi(3,3)
208 . -dxdxi(1,2)*dxdxi(2,1)*dxdxi(3,3)
209
210 IF(detdxdxi/=0) THEN
211 dxidx(1,1)=(dxdxi(2,2)*dxdxi(3,3)-dxdxi(2,3)*dxdxi(3,2))/detdxdxi
212 dxidx(1,2)=(dxdxi(1,3)*dxdxi(3,2)-dxdxi(1,2)*dxdxi(3,3))/detdxdxi
213 dxidx(1,3)=(dxdxi(1,2)*dxdxi(2,3)-dxdxi(1,3)*dxdxi(2,2))/detdxdxi
214 dxidx(2,1)=(dxdxi(2,3)*dxdxi(3,1)-dxdxi(2,1)*dxdxi(3,3))/detdxdxi
215 dxidx(2,2)=(dxdxi(1,1)*dxdxi(3,3)-dxdxi(1,3)*dxdxi(3,1))/detdxdxi
216 dxidx(2,3)=(dxdxi(1,3)*dxdxi(2,1)-dxdxi(1,1)*dxdxi(2,3))/detdxdxi
217 dxidx(3,1)=(dxdxi(2,1)*dxdxi(3,2)-dxdxi(2,2)*dxdxi(3,1))/detdxdxi
218 dxidx(3,2)=(dxdxi(1,2)*dxdxi(3,1)-dxdxi(1,1)*dxdxi(3,2))/detdxdxi
219 dxidx(3,3)=(dxdxi(1,1)*dxdxi(2,2)-dxdxi(1,2)*dxdxi(2,1))/detdxdxi
220 ENDIF
221
222
223C GRADIENT OF MAPPING FROM PARENT ELEMENT TO PARAMETER SPACE
224
225 dxidtildexi(1,1)=(knotlocelx(2)-knotlocelx(1))/two
226 dxidtildexi(2,2)=(knotlocely(2)-knotlocely(1))/two
227 dxidtildexi(3,3)=(knotlocelz(2)-knotlocelz(1))/two
228c DXIDTILDEXI(1,1)=(KX(IDX2)-KX(IDX))/TWO
229c DXIDTILDEXI(2,2)=(KY(IDY2)-KY(IDY))/TWO
230c DXIDTILDEXI(3,3)=(KZ(IDZ2)-KZ(IDZ))/TWO
231cc DXIDTILDEXI(1,1)=(KX(IDX+1)-KX(IDX))/TWO
232cc DXIDTILDEXI(2,2)=(KY(IDY+1)-KY(IDY))/TWO
233cc DXIDTILDEXI(3,3)=(KZ(IDZ+1)-KZ(IDZ))/TWO
234
235C COMPUTE DERIVATES OF BASIS FUNCTIONS WITH RESPECT TO PHYSICAL COORDINATES
236
237 DO na=1,3
238 DO nb=1,3
239 DO numloc=1,nctrl
240 drdx(numloc,na)=drdx(numloc,na)+(drdxi(numloc,nb)*dxidx(nb,na))
241 ENDDO
242 DO nc=1,3
243 ajmat(na,nb)=ajmat(na,nb)+dxdxi(na,nc)*dxidtildexi(nc,nb)
244 ENDDO
245 ENDDO
246 ENDDO
247
248
249C DETERMINANT DE LA MATRICE AJMAT (QUI REGROUPE DONC LES TWO JACOBIENS)
250
251 detjac=(ajmat(1,1)*ajmat(2,2)*ajmat(3,3))
252 . +(ajmat(1,2)*ajmat(2,3)*ajmat(3,1))
253 . +(ajmat(2,1)*ajmat(3,2)*ajmat(1,3))
254 . -(ajmat(1,3)*ajmat(2,2)*ajmat(3,1))
255 . -(ajmat(1,2)*ajmat(2,1)*ajmat(3,3))
256 . -(ajmat(2,3)*ajmat(3,2)*ajmat(1,1))
257
258 RETURN
259 END
260
261
262
263
264
265
#define my_real
Definition cppsort.cpp:32
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)
subroutine dersonebasisfun(idxi, pxi, xi, kxi, ders1, ders2)