26 character*20 labmpc(*)
28 integer ipompc(*),nodempc(3,*),irefnode,irotnode,idir,idim,n,
29 & nmpc,index,ii,inode,nmpcold,iexpnode,irefnodeprev,i,ndepnodes,
30 & matz,ier,j,indexnext,node,mpcfree,nodeprev
32 real*8 co(3,*),coefmpc(*),e(3,3,3),dc(3,3,3) ,sx,sy,sz,sxx,
33 & sxy,sxz,syy,syz,szz,s(3,3),w(3),z(3,3),fv1(3),fv2(3),e1(3),
34 & e2(3),t1(3),u2(3,3),u3(3,3)
38 data e /0.,0.,0.,0.,0.,-1.,0.,1.,0.,
39 & 0.,0.,1.,0.,0.,0.,-1.,0.,0.,
40 & 0.,-1.,0.,1.,0.,0.,0.,0.,0./
44 data dc /0.,0.,0.,0.,0.,1.,0.,-1.,0.,
45 & 0.,0.,-1.,0.,0.,0.,1.,0.,0.,
46 & 0.,1.,0.,-1.,0.,0.,0.,0.,0./
51 if(labmpc(ii)(1:4).eq.
'KNOT')
then 56 irefnode=nodempc(1,nodempc(3,ipompc(ii)))
58 if(irefnode.ne.irefnodeprev)
then 63 read(labmpc(ii)(5:5),
'(i1)') idim
81 if(labmpc(i)(1:4).eq.
'KNOT')
then 82 if(nodempc(1,nodempc(3,ipompc(i))).eq.irefnode)
then 86 node=nodempc(1,ipompc(i))
88 if(node.ne.nodeprev)
then 95 sxx=sxx+co(1,node)*co(1,node)
96 sxy=sxy+co(1,node)*co(2,node)
97 sxz=sxz+co(1,node)*co(3,node)
98 syy=syy+co(2,node)*co(2,node)
99 syz=syz+co(2,node)*co(3,node)
100 szz=szz+co(3,node)*co(3,node)
110 sxx=sxx-sx*sx/ndepnodes
111 sxy=sxy-sx*sy/ndepnodes
112 sxz=sxz-sx*sz/ndepnodes
113 syy=syy-sy*sy/ndepnodes
114 syz=syz-sy*sz/ndepnodes
115 szz=szz-sz*sz/ndepnodes
132 call rs(n,n,s,w,matz,z,fv1,fv2,ier)
134 write(*,*)
'*ERROR in knotmpc while calculating the' 135 write(*,*)
' eigenvalues/eigenvectors' 151 if((w(1).lt.1.d-10).and.(w(2).lt.1.d-10))
then 154 elseif(w(1).lt.1.d-10)
then 174 if(t1(1)*(e1(2)*e2(3)-e1(3)*e2(2))-
175 & t1(2)*(e1(1)*e2(3)-e1(3)*e2(1))+
176 & t1(3)*(e1(1)*e2(2)-e1(2)*e2(1)).lt.0.d0)
then 188 iexpnode=nodempc(1,nodempc(3,nodempc(3,ipompc(ii))))
190 & nodempc(1,nodempc(3,nodempc(3,nodempc(3,ipompc(ii)))))
198 if((idim.eq.1).or.(idim.eq.3))
then 207 inode=nodempc(1,index)
208 idir=nodempc(2,index)
212 index=nodempc(3,index)
213 irefnode=nodempc(1,index)
217 index=nodempc(3,index)
218 iexpnode=nodempc(1,index)
219 coefmpc(index)=co(idir,irefnode)-co(idir,inode)
223 index=nodempc(3,index)
224 irotnode=nodempc(1,index)
229 coefmpc(index)=dc(idir,1,1)*(co(1,irefnode)-co(1,inode))+
230 & dc(idir,2,1)*(co(2,irefnode)-co(2,inode))+
231 & dc(idir,3,1)*(co(3,irefnode)-co(3,inode))
233 index=nodempc(3,index)
234 coefmpc(index)=dc(idir,1,2)*(co(1,irefnode)-co(1,inode))+
235 & dc(idir,2,2)*(co(2,irefnode)-co(2,inode))+
236 & dc(idir,3,2)*(co(3,irefnode)-co(3,inode))
238 index=nodempc(3,index)
239 coefmpc(index)=dc(idir,1,3)*(co(1,irefnode)-co(1,inode))+
240 & dc(idir,2,3)*(co(2,irefnode)-co(2,inode))+
241 & dc(idir,3,3)*(co(3,irefnode)-co(3,inode))
243 elseif(idim.eq.2)
then 251 u2(i,j)=2.d0*e1(i)*e1(j)
252 u3(i,j)=2.d0*e2(i)*e2(j)
259 inode=nodempc(1,index)
260 idir=nodempc(2,index)
264 index=nodempc(3,index)
265 irefnode=nodempc(1,index)
270 index=nodempc(3,index)
271 iexpnode=nodempc(1,index)
274 indexnext=nodempc(3,index)
275 nodempc(3,index)=mpcfree
277 nodempc(1,mpcfree)=iexpnode
279 coefmpc(mpcfree)=u2(idir,1)*(co(1,irefnode)-co(1,inode))+
280 & u2(idir,2)*(co(2,irefnode)-co(2,inode))+
281 & u2(idir,3)*(co(3,irefnode)-co(3,inode))
282 mpcfree=nodempc(3,mpcfree)
284 nodempc(1,mpcfree)=iexpnode
286 coefmpc(mpcfree)=u3(idir,1)*(co(1,irefnode)-co(1,inode))+
287 & u3(idir,2)*(co(2,irefnode)-co(2,inode))+
288 & u3(idir,3)*(co(3,irefnode)-co(3,inode))
290 mpcfree=nodempc(3,mpcfree)
291 nodempc(3,index)=indexnext
296 irotnode=nodempc(1,index)
301 coefmpc(index)=dc(idir,1,1)*(co(1,irefnode)-co(1,inode))+
302 & dc(idir,2,1)*(co(2,irefnode)-co(2,inode))+
303 & dc(idir,3,1)*(co(3,irefnode)-co(3,inode))
305 index=nodempc(3,index)
306 coefmpc(index)=dc(idir,1,2)*(co(1,irefnode)-co(1,inode))+
307 & dc(idir,2,2)*(co(2,irefnode)-co(2,inode))+
308 & dc(idir,3,2)*(co(3,irefnode)-co(3,inode))
310 index=nodempc(3,index)
311 coefmpc(index)=dc(idir,1,3)*(co(1,irefnode)-co(1,inode))+
312 & dc(idir,2,3)*(co(2,irefnode)-co(2,inode))+
313 & dc(idir,3,3)*(co(3,irefnode)-co(3,inode))
#define min(a, b)
Definition: cascade.c:31
subroutine rs(nm, n, a, w, matz, z, fv1, fv2, ierr)
Definition: rs.f:27