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