43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
88
89
90
91#include "implicit_f.inc"
92
93
94
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)
102
103
104
105 INTEGER NUMLOC, I, J, K, NA, NB, NC
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)
111
112
113
114
115
116
117 dxdxi(:,:)=zero
118 dxidtildexi(:,:)=zero
119 ajmat(:,:)=zero
120 drdx(:,:)=zero
121
122 IF (boolg == 1) THEN
123
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
127
128
129
130 ELSE
131 xi(1) = gaussx
132 xi(2) = gaussy
133 xi(3) = gaussz
134 ENDIF
135
136
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
144
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
166
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
178
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
188
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
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
215
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
220
221
222
223
224
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
237
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
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)