OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ig3donebasis.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!|| ig3donebasis ../engine/source/elements/ige3d/ig3donebasis.F
25!||--- called by ------------------------------------------------------
26!|| deplafakeige ../engine/source/assembly/deplafakeige.F
27!|| i7assigeo0 ../engine/source/interfaces/int07/i7ass3.F
28!|| projecig3d ../engine/source/elements/ige3d/projecig3d.F
29!||--- calls -----------------------------------------------------
30!|| onebasisfun ../engine/source/elements/ige3d/onebasisfun.F
31!||--- uses -----------------------------------------------------
32!|| message_mod ../engine/share/message_module/message_mod.F
33!||====================================================================
34 SUBROUTINE ig3donebasis(
35 1 ITEL ,N ,XXI ,YYI ,
36 2 ZZI ,WWI ,IDX ,IDY ,
37 3 IDZ ,KNOTLOCX ,KNOTLOCY ,KNOTLOCZ ,
38 4 R ,NCTRL ,
39 5 GAUSSX,GAUSSY,GAUSSZ,KX ,
40 6 KY ,KZ ,PX ,
41 7 PY ,PZ ,BOOLG ,
42 8 IDX2 ,IDY2 ,IDZ2 ,
43 9 KNOTLOCELX,KNOTLOCELY,KNOTLOCELZ)
44C--------------------------------------------------------------------------------------------------------
45C
46C This subroutine calculates the vector of local shape functions R and an array of their derivatives dR.dx
47C The Jacobian determinant J may be returned to if it's necessary
48C This subroutine is called by ig3dinit3 for every LR or Truncated element
49C
50C--------------------------------------------------------------------------------------------------------
51C VAR | SIZE | TYP | RW | DEFINITION
52C--------------------------------------------------------------------------------------------------------
53C ITEL | 1 | I | R | ELEMENT ID
54C N | 1 | I | R | GAUSS POINT ID
55C XXI | NCTRL | F | R | X COORDINATE of ELEMENT I CONTROL POINTS in global frame
56C YYI | NCTRL | F | R | Y COORDINATE of ELEMENT I CONTROL POINTS in global frame
57C ZZI | NCTRL | F | R | Z COORDINATE of ELEMENT I CONTROL POINTS in global frame
58C WWI | NCTRL | F | R | WEIGHT OF ELEMENT I CONTROL POINTS
59C IDX | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN X DIRECTION
60C IDY | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN Y DIRECTION
61C IDZ | 1 | I | R | ELEMENT FIRST INDEX IN KNOT VECTOR IN Z DIRECTION
62C IDX2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN X DIRECTION
63C IDY2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN Y DIRECTION
64C IDZ2 | 1 | I | R | ELEMENT LAST INDEX IN KNOT VECTOR IN Z DIRECTION
65C R | NCTRL | F | W | ARRAY OF TRIVIATE NURBS BASIS FUNCTION
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-----------------------------------------------
80C M o d u l e s
81C-----------------------------------------------
82 USE message_mod
83C-----------------------------------------------
84C I m p l i c i t T y p e s
85C-----------------------------------------------
86#include "implicit_f.inc"
87C-----------------------------------------------
88C D u m m y A r g u m e n t s
89C-----------------------------------------------
90 INTEGER IDX, IDY, IDZ, NCTRL, PX, PY, PZ,
91 . itel, n, boolg,idx2, idy2, idz2
93 . gaussx, gaussy, gaussz,
94 . r(*),xxi(*),yyi(*),zzi(*),
95 . wwi(*),kx(*), ky(*), kz(*), knotlocx(px+2,nctrl),
96 . knotlocy(py+2,nctrl),knotlocz(pz+2,nctrl),knotlocelx(2),
97 . knotlocely(2),knotlocelz(2)
98C-----------------------------------------------
99C L o c a l V a r i a b l e s
100C-----------------------------------------------
101 INTEGER NUMLOC, I, J, K, NA, NB, NC
102 my_real
103 . SUMTOT, FN(NCTRL), FM(NCTRL), FL(NCTRL),
104 . XI(3)
105C=======================================================================
106C S o u r c e L i n e s
107C=======================================================================
108C
109 IF (BOOLG == 1) then
110C CALCULATE PARAMETRIC COORDINATES OF THE GAUSS POINT FROM PARENT ELEMENT COORDINATES, FOR THE THREE DIRECTIONS
111 xi(1) = ((knotlocelx(2)-knotlocelx(1))*gaussx + (knotlocelx(2)+(knotlocelx(1))))/two
112 xi(2) = ((knotlocely(2)-knotlocely(1))*gaussy + (knotlocely(2)+(knotlocely(1))))/two
113 xi(3) = ((knotlocelz(2)-knotlocelz(1))*gaussz + (knotlocelz(2)+(knotlocelz(1))))/two
114c XI(1) = ((KX(IDX2)-KX(IDX))*GAUSSX + (KX(IDX2)+(KX(IDX))))/TWO
115c XI(2) = ((KY(IDY2)-KY(IDY))*GAUSSY + (KY(IDY2)+(KY(IDY))))/TWO
116c XI(3) = ((KZ(IDZ2)-KZ(IDZ))*GAUSSZ + (KZ(IDZ2)+(KZ(IDZ))))/TWO
117 ELSE
118C 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
119 xi(1) = gaussx
120 xi(2) = gaussy
121 xi(3) = gaussz
122 ENDIF
123
124C CALCULATE B-SPLINE FUNCTION AT XI POINT
125
126c DO NUMLOC=1,NCTRL
127c CALL ONEBASISFUN(1, PX, XI(1), KNOTLOCX(:,NUMLOC), FN(NUMLOC))
128c CALL ONEBASISFUN(1, PY, XI(2), KNOTLOCY(:,NUMLOC), FM(NUMLOC))
129c CALL ONEBASISFUN(1, PZ, XI(3), KNOTLOCZ(:,NUMLOC), FL(NUMLOC))
130c ENDDO
131
132 numloc = 0
133 DO k=1,pz+1
134 DO j=1,py+1
135 DO i=1,px+1
136 numloc = numloc+1
137 CALL onebasisfun(i, 1, px, xi(1), knotlocx(:,numloc), fn(numloc))
138 CALL onebasisfun(j, 1, py, xi(2), knotlocy(:,numloc), fm(numloc))
139 CALL onebasisfun(k, 1, pz, xi(3), knotlocz(:,numloc), fl(numloc))
140 ENDDO
141 ENDDO
142 ENDDO
143
144C BUILD NUMERATORS AND DENOMINATORS
145
146 sumtot=zero
147
148 DO numloc=1,nctrl
149 r(numloc)=fn(numloc)*fm(numloc)*fl(numloc)*wwi(numloc)
150 sumtot=sumtot+r(numloc)
151 ENDDO
152
153C DIVIDE BY DENOMINATOR TO COMPLETE DEFINITION OF FUNCTION
154
155 DO numloc=1,nctrl
156 r(numloc)=r(numloc)/sumtot
157 ENDDO
158
159 RETURN
160 END
161
162
163
164
165
166
#define my_real
Definition cppsort.cpp:32
subroutine ig3donebasis(itel, n, xxi, yyi, zzi, wwi, idx, idy, idz, knotlocx, knotlocy, knotlocz, r, nctrl, gaussx, gaussy, gaussz, kx, ky, kz, px, py, pz, boolg, idx2, idy2, idz2, knotlocelx, knotlocely, knotlocelz)
subroutine onebasisfun(idxii, idxi, pxi, xi, kxi, ders1)
Definition onebasisfun.F:29