31 character*20 labmpc(*)
33 integer ipompc(*),nodempc(3,*),nmpc,nmpc_,mpcfree,ikmpc(*),
34 & ilmpc(*),iponoel(*),inoel(3,*),iponoelmax,kon(*),ipkon(*),
35 & ne,iponor(2,*),knor(*),rig(*),i,index1,node,index2,ielem,
36 & indexe,j,indexk,newnode,idir,idof,id,mpcfreenew,k,idofold,
39 real*8 coefmpc(*),xnor(*)
45 node=nodempc(1,index1)
46 if(node.le.iponoelmax)
then 47 if(rig(node).ne.0)
then 48 if(nodempc(2,index1).gt.3)
then 49 if(rig(node).lt.0)
then 50 write(*,*)
'*ERROR in gen3dmpc: in node ',node
51 write(*,*)
' a rotational DOF is constrained' 52 write(*,*)
' by a SPC; however, the elements' 53 write(*,*)
' to which this node belongs do not' 54 write(*,*)
' have rotational DOFs' 57 nodempc(1,index1)=rig(node)
58 nodempc(2,index1)=nodempc(2,index1)-3
64 idofold=8*(node-1)+nodempc(2,index1)+3
65 call nident(ikmpc,idofold,nmpc,idold)
66 idofnew=8*(rig(node)-1)+nodempc(2,index1)
67 call nident(ikmpc,idofnew,nmpc,idnew)
68 if(idold.le.idnew)
then 90 index1=nodempc(3,index1)
99 indexk=iponor(2,indexe+j)
103 if(lakon(ielem)(7:7).eq.
'L')
then 104 newnode=knor(indexk+1)
105 idir=nodempc(2,index1)
106 idof=8*(newnode-1)+idir
107 call nident(ikmpc,idof,nmpc,id)
108 if((id.le.0).or.(ikmpc(id).ne.idof))
then 110 if(nmpc.gt.nmpc_)
then 112 &
'*ERROR in gen3dmpc: increase nmpc_' 123 nodempc(1,mpcfree)=newnode
124 nodempc(2,mpcfree)=idir
125 coefmpc(mpcfree)=1.d0
126 mpcfree=nodempc(3,mpcfree)
127 if(mpcfree.eq.0)
then 129 &
'*ERROR in gen3dmpc: increase memmpc_' 132 nodempc(1,mpcfree)=knor(indexk+3)
133 nodempc(2,mpcfree)=idir
134 coefmpc(mpcfree)=1.d0
135 mpcfree=nodempc(3,mpcfree)
136 if(mpcfree.eq.0)
then 138 &
'*ERROR in gen3dmpc: increase memmpc_' 141 nodempc(1,mpcfree)=node
142 nodempc(2,mpcfree)=idir
143 coefmpc(mpcfree)=-2.d0
144 mpcfreenew=nodempc(3,mpcfree)
145 if(mpcfreenew.eq.0)
then 147 &
'*ERROR in gen3dmpc: increase memmpc_' 160 newnode=knor(indexk+3)
161 idof=8*(newnode-1)+idir
162 call nident(ikmpc,idof,nmpc,id)
163 if((id.le.0).or.(ikmpc(id).ne.idof))
then 165 if(nmpc.gt.nmpc_)
then 167 &
'*ERROR in gen3dboun: increase nmpc_' 178 nodempc(1,mpcfree)=newnode
179 nodempc(2,mpcfree)=idir
180 coefmpc(mpcfree)=1.d0
181 mpcfree=nodempc(3,mpcfree)
182 if(mpcfree.eq.0)
then 184 &
'*ERROR in gen3dboun: increase memmpc_' 187 nodempc(1,mpcfree)=node
188 nodempc(2,mpcfree)=idir
189 coefmpc(mpcfree)=-1.d0
190 mpcfreenew=nodempc(3,mpcfree)
191 if(mpcfreenew.eq.0)
then 193 &
'*ERROR in gen3dboun: increase memmpc_' 200 elseif(lakon(ielem)(7:7).eq.
'B')
then 204 newnode=knor(indexk+1)
205 idir=nodempc(2,index1)
206 idof=8*(newnode-1)+idir
207 call nident(ikmpc,idof,nmpc,id)
208 if((id.le.0).or.(ikmpc(id).ne.idof))
then 210 if(nmpc.gt.nmpc_)
then 212 &
'*ERROR in gen3dmpc: increase nmpc_' 223 nodempc(1,mpcfree)=newnode
224 nodempc(2,mpcfree)=idir
225 coefmpc(mpcfree)=1.d0
226 mpcfree=nodempc(3,mpcfree)
227 if(mpcfree.eq.0)
then 229 &
'*ERROR in gen3dmpc: increase memmpc_' 233 nodempc(1,mpcfree)=knor(indexk+k)
234 nodempc(2,mpcfree)=idir
235 coefmpc(mpcfree)=1.d0
236 mpcfree=nodempc(3,mpcfree)
237 if(mpcfree.eq.0)
then 239 &
'*ERROR in gen3dmpc: increase memmpc_' 243 nodempc(1,mpcfree)=node
244 nodempc(2,mpcfree)=idir
245 coefmpc(mpcfree)=-4.d0
246 mpcfreenew=nodempc(3,mpcfree)
247 if(mpcfreenew.eq.0)
then 249 &
'*ERROR in gen3dmpc: increase memmpc_' 263 newnode=knor(indexk+k)
264 idof=8*(newnode-1)+idir
265 call nident(ikmpc,idof,nmpc,id)
266 if((id.le.0).or.(ikmpc(id).ne.idof))
then 268 if(nmpc.gt.nmpc_)
then 270 &
'*ERROR in gen3dboun: increase nmpc_' 281 nodempc(1,mpcfree)=newnode
282 nodempc(2,mpcfree)=idir
283 coefmpc(mpcfree)=1.d0
284 mpcfree=nodempc(3,mpcfree)
285 if(mpcfree.eq.0)
then 287 &
'*ERROR in gen3dboun: increase memmpc_' 290 nodempc(1,mpcfree)=node
291 nodempc(2,mpcfree)=idir
292 coefmpc(mpcfree)=-1.d0
293 mpcfreenew=nodempc(3,mpcfree)
294 if(mpcfreenew.eq.0)
then 296 &
'*ERROR in gen3dboun: increase memmpc_' 309 newnode=knor(indexk+2)
310 idir=nodempc(2,index1)
311 idof=8*(newnode-1)+idir
312 call nident(ikmpc,idof,nmpc,id)
313 if(((id.le.0).or.(ikmpc(id).ne.idof)).and.
316 if(nmpc.gt.nmpc_)
then 318 &
'*ERROR in gen3dmpc: increase nmpc_' 329 nodempc(1,mpcfree)=newnode
330 nodempc(2,mpcfree)=idir
331 coefmpc(mpcfree)=1.d0
332 mpcfree=nodempc(3,mpcfree)
333 if(mpcfree.eq.0)
then 335 &
'*ERROR in gen3dmpc: increase memmpc_' 338 nodempc(1,mpcfree)=node
339 nodempc(2,mpcfree)=idir
340 coefmpc(mpcfree)=-1.d0
341 mpcfreenew=nodempc(3,mpcfree)
342 if(mpcfreenew.eq.0)
then 344 &
'*ERROR in gen3dmpc: increase memmpc_' 353 index1=nodempc(3,index1)
subroutine nident(x, px, n, id)
Definition: nident.f:26