1! 2! CalculiX - A 3-dimensional finite element program 3! Copyright (C) 1998-2021 Guido Dhondt 4! 5! This program is free software; you can redistribute it and/or 6! modify it under the terms of the GNU General Public License as 7! published by the Free Software Foundation(version 2); 8! 9! 10! This program is distributed in the hope that it will be useful, 11! but WITHOUT ANY WARRANTY; without even the implied warranty of 12! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13! GNU General Public License for more details. 14! 15! You should have received a copy of the GNU General Public License 16! along with this program; if not, write to the Free Software 17! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18! 19 subroutine nodestiedface(tieset,ntie,ipkon,kon, 20 & lakon,set,istartset,iendset,ialset,nset,ifaceslave, 21 & istartfield,iendfield,ifield,nconf,ncone,kind) 22! 23! identifies slave nodes in tied slave faces 24! 25 implicit none 26! 27 character*1 kind 28 character*8 lakon(*) 29 character*81 tieset(3,*),slavset,set(*) 30! 31 integer ntie,nset,istartset(*),iendset(*),ialset(*),ifree, 32 & ipkon(*),kon(*),node,ifaceslave(*),i,j,k,l, 33 & ifaceq(8,6),ifacet(6,4),ilength,id,ncone, 34 & ifacew1(4,5),ifacew2(8,5),nelem,jface,indexe, 35 & nnodelem,nface,nope,nodef(8), 36 & ifield(*),istartfield(*),iendfield(*),nconf 37! 38! nodes per face for hex elements 39! 40 data ifaceq /4,3,2,1,11,10,9,12, 41 & 5,6,7,8,13,14,15,16, 42 & 1,2,6,5,9,18,13,17, 43 & 2,3,7,6,10,19,14,18, 44 & 3,4,8,7,11,20,15,19, 45 & 4,1,5,8,12,17,16,20/ 46! 47! nodes per face for tet elements 48! 49 data ifacet /1,3,2,7,6,5, 50 & 1,2,4,5,9,8, 51 & 2,3,4,6,10,9, 52 & 1,4,3,8,10,7/ 53! 54! nodes per face for linear wedge elements 55! 56 data ifacew1 /1,3,2,0, 57 & 4,5,6,0, 58 & 1,2,5,4, 59 & 2,3,6,5, 60 & 3,1,4,6/ 61! 62! nodes per face for quadratic wedge elements 63! 64 data ifacew2 /1,3,2,9,8,7,0,0, 65 & 4,5,6,10,11,12,0,0, 66 & 1,2,5,4,7,14,10,13, 67 & 2,3,6,5,8,15,11,14, 68 & 3,1,4,6,9,13,12,15/ 69! 70 ifree=1 71! 72 do i=1,ntie 73 ilength=0 74 if(tieset(1,i)(81:81).ne.kind) cycle 75 if(ifaceslave(i).eq.0) cycle 76 slavset=tieset(2,i) 77c do j=1,nset 78c if(set(j).eq.slavset) exit 79c enddo 80 call cident81(set,slavset,nset,id) 81 j=nset+1 82 if(id.gt.0) then 83 if(slavset.eq.set(id)) then 84 j=id 85 endif 86 endif 87! 88 istartfield(i)=ifree 89 do j=istartset(j),iendset(j) 90 ncone=ncone-1 91 nelem=int(ialset(j)/10.) 92 jface=ialset(j)-10*nelem 93! 94 indexe=ipkon(nelem) 95 if(lakon(nelem)(4:4).eq.'2') then 96 nnodelem=8 97 nface=6 98 elseif(lakon(nelem)(4:4).eq.'8') then 99 nnodelem=4 100 nface=6 101 elseif(lakon(nelem)(4:5).eq.'10') then 102 nnodelem=6 103 nface=4 104 elseif(lakon(nelem)(4:4).eq.'4') then 105 nnodelem=3 106 nface=4 107 elseif(lakon(nelem)(4:5).eq.'15') then 108 if(jface.le.2) then 109 nnodelem=6 110 else 111 nnodelem=8 112 endif 113 nface=5 114 nope=15 115 elseif(lakon(nelem)(4:4).eq.'6') then 116 if(jface.le.2) then 117 nnodelem=3 118 else 119 nnodelem=4 120 endif 121 nface=5 122 nope=6 123 else 124 cycle 125 endif 126! 127! determining the nodes of the face 128! 129 if(nface.eq.4) then 130 do k=1,nnodelem 131 nodef(k)=kon(indexe+ifacet(k,jface)) 132 enddo 133 elseif(nface.eq.5) then 134 if(nope.eq.6) then 135 do k=1,nnodelem 136 nodef(k)=kon(indexe+ifacew1(k,jface)) 137 enddo 138 elseif(nope.eq.15) then 139 do k=1,nnodelem 140 nodef(k)=kon(indexe+ifacew2(k,jface)) 141 enddo 142 endif 143 elseif(nface.eq.6) then 144 do k=1,nnodelem 145 nodef(k)=kon(indexe+ifaceq(k,jface)) 146 enddo 147 endif 148! 149! inserting the nodes in ifield 150! 151 do k=1,nnodelem 152 node=nodef(k) 153 call nident(ifield(istartfield(i)),node,ilength,id) 154 id=istartfield(i)+id-1 155 if(id.gt.istartfield(i)-1) then 156 if(ifield(id).eq.node) cycle 157 endif 158 do l=ifree,id+2,-1 159 ifield(l)=ifield(l-1) 160 enddo 161 ifield(id+1)=node 162 ifree=ifree+1 163 ilength=ilength+1 164 enddo 165 enddo 166 iendfield(i)=ifree-1 167 enddo 168! 169 nconf=ifree-1 170! 171 return 172 end 173 174