31 character*80 matname(*),material
32 character*81 tieset(3,*),noset,set(*)
33 character*132 textpart(16)
35 integer istep,istat,n,i,key,ipos,iline,ipol,inl,ipoinp(2,*),
36 & inp(3,*),ntie,ntie_,iperturb(2),nmat,ipoinpc(0:*),nset,j,
37 & mortar,ncmat_,ntmat_
39 real*8 tietol(3,*),adjust,elcon(0:ncmat_,ntmat_,*)
47 write(*,*)
'*ERROR reading *CONTACT PAIR: *CONTACT PAIR should' 48 write(*,*)
' be placed before all step definitions' 56 if(ntie.gt.ntie_)
then 57 write(*,*)
'*ERROR reading *CONTACT PAIR: increase ntie_' 64 tietol(3,ntie)=1.2357111317d0
66 tieset(1,ntie)(j:j)=
' ' 70 if(textpart(i)(1:12).eq.
'INTERACTION=')
then 71 material=textpart(i)(13:92)
72 elseif(textpart(i)(1:12).eq.
'SMALLSLIDING')
then 73 tietol(1,ntie)=-tietol(1,ntie)
74 elseif(textpart(i)(1:6).eq.
'LINEAR')
then 76 elseif(textpart(i)(1:7).eq.
'ADJUST=')
then 77 read(textpart(i)(8:25),
'(f20.0)',iostat=istat) adjust
79 noset(1:80)=textpart(i)(8:87)
84 if(set(j).eq.noset)
exit 89 &
'*ERROR reading *CONTACT PAIR: adjust node set',
91 write(*,*)
' has not been defined' 97 tieset(1,ntie)(j:j)=noset(j:j)
100 tieset(1,ntie)(j:j)=
' ' 103 tietol(1,ntie)=dsign(1.d0,tietol(1,ntie))*(2.d0+adjust)
105 elseif(textpart(i)(1:18).eq.
'TYPE=NODETOSURFACE')
then 107 elseif(textpart(i)(1:21).eq.
'TYPE=SURFACETOSURFACE')
then 109 elseif(textpart(i)(1:11).eq.
'TYPE=MORTAR')
then 111 elseif(textpart(i)(1:13).eq.
'TYPE=PGMORTAR')
then 113 elseif(textpart(i)(1:14).eq.
'TYPE=LINMORTAR')
then 115 elseif(textpart(i)(1:16).eq.
'TYPE=PGLINMORTAR')
then 119 &
'*WARNING reading *CONTACT PAIR: parameter not recognized:' 121 & textpart(i)(1:index(textpart(i),
' ')-1)
128 write(*,*)
'*ERROR reading *CONTACT PAIR' 129 write(*,*)
' no TYPE specified' 138 if((tietol(1,ntie).lt.0.d0).and.(mortar.eq.1))
then 139 write(*,*)
'*WARNING reading *CONTACT PAIR' 140 write(*,*)
' The option SMALL SLIDING cannot be' 141 write(*,*)
' used with SURFACE TO SURFACE contact' 142 tietol(1,ntie)=-tietol(1,ntie)
148 if(matname(i).eq.material)
exit 151 write(*,*)
'*ERROR reading *CONTACT PAIR: nonexistent surface' 152 write(*,*)
' interaction; ' 157 tietol(2,ntie)=i+0.5d0
164 &
'*ERROR reading *CONTACT PAIR: no PRESSURE-OVERCLOSURE' 166 &
' has been defined for at least one *CONTACT INTERACTION' 168 elseif(int(elcon(3,1,i)).le.0)
then 170 &
'*ERROR reading *CONTACT PAIR: no PRESSURE-OVERCLOSURE' 172 &
' has been defined for at least one *CONTACT INTERACTION' 176 if(int(elcon(3,1,i)).eq.2)
then 178 if(elcon(1,1,i).lt.1.d-30)
then 179 write(*,*)
'*ERROR reading *CONTACT PAIR:' 180 write(*,*)
' for node-to-face penalty contact' 181 write(*,*)
' with linear pressure-overclosure' 182 write(*,*)
' relationship, the' 183 write(*,*)
' tension at large clearances' 184 write(*,*)
' must exceed 1.e-30' 192 tieset(1,ntie)(81:81)=
'C' 194 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
195 & ipoinp,inp,ipoinpc)
196 if((istat.lt.0).or.(key.eq.1))
then 197 write(*,*)
'*ERROR reading *CONTACT PAIR: definition of the ' 198 write(*,*)
' contact pair is not complete.' 205 tieset(2,ntie)(1:80)=textpart(1)(1:80)
206 tieset(2,ntie)(81:81)=
' ' 207 ipos=index(tieset(2,ntie),
' ')
208 tieset(2,ntie)(ipos:ipos)=
'T' 209 elseif(mortar.eq.2)
then 210 tieset(2,ntie)(1:80)=textpart(1)(1:80)
211 tieset(2,ntie)(81:81)=
' ' 212 ipos=index(tieset(2,ntie),
' ')
213 tieset(2,ntie)(ipos:ipos)=
'M' 214 elseif(mortar.eq.3)
then 215 tieset(2,ntie)(1:80)=textpart(1)(1:80)
216 tieset(2,ntie)(81:81)=
' ' 217 ipos=index(tieset(2,ntie),
' ')
218 tieset(2,ntie)(ipos:ipos)=
'O' 219 elseif(mortar.eq.4)
then 220 tieset(2,ntie)(1:80)=textpart(1)(1:80)
221 tieset(2,ntie)(81:81)=
' ' 222 ipos=index(tieset(2,ntie),
' ')
223 tieset(2,ntie)(ipos:ipos)=
'P' 224 elseif(mortar.eq.5)
then 225 tieset(2,ntie)(1:80)=textpart(1)(1:80)
226 tieset(2,ntie)(81:81)=
' ' 227 ipos=index(tieset(2,ntie),
' ')
228 tieset(2,ntie)(ipos:ipos)=
'G' 230 tieset(2,ntie)(1:80)=textpart(1)(1:80)
231 tieset(2,ntie)(81:81)=
' ' 232 ipos=index(tieset(2,ntie),
' ')
233 tieset(2,ntie)(ipos:ipos)=
'S' 236 tieset(3,ntie)(1:80)=textpart(2)(1:80)
237 tieset(3,ntie)(81:81)=
' ' 238 ipos=index(tieset(3,ntie),
' ')
239 tieset(3,ntie)(ipos:ipos)=
'T' 246 if((iperturb(1).eq.0).and.(.not.linear))
then 253 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
254 & ipoinp,inp,ipoinpc)
255 if((istat.lt.0).or.(key.eq.1))
exit 262 tietol(i,ntie)=tietol(i,ntie-1)
264 tieset(1,ntie)=tieset(1,ntie-1)
269 tieset(2,ntie)(1:80)=textpart(1)(1:80)
270 tieset(2,ntie)(81:81)=
' ' 271 ipos=index(tieset(2,ntie),
' ')
272 tieset(2,ntie)(ipos:ipos)=
'T' 273 elseif(mortar.eq.2)
then 274 tieset(2,ntie)(1:80)=textpart(1)(1:80)
275 tieset(2,ntie)(81:81)=
' ' 276 ipos=index(tieset(2,ntie),
' ')
277 tieset(2,ntie)(ipos:ipos)=
'M' 278 elseif(mortar.eq.3)
then 279 tieset(2,ntie)(1:80)=textpart(1)(1:80)
280 tieset(2,ntie)(81:81)=
' ' 281 ipos=index(tieset(2,ntie),
' ')
282 tieset(2,ntie)(ipos:ipos)=
'O' 283 elseif(mortar.eq.4)
then 284 tieset(2,ntie)(1:80)=textpart(1)(1:80)
285 tieset(2,ntie)(81:81)=
' ' 286 ipos=index(tieset(2,ntie),
' ')
287 tieset(2,ntie)(ipos:ipos)=
'P' 288 elseif(mortar.eq.5)
then 289 tieset(2,ntie)(1:80)=textpart(1)(1:80)
290 tieset(2,ntie)(81:81)=
' ' 291 ipos=index(tieset(2,ntie),
' ')
292 tieset(2,ntie)(ipos:ipos)=
'G' 294 tieset(2,ntie)(1:80)=textpart(1)(1:80)
295 tieset(2,ntie)(81:81)=
' ' 296 ipos=index(tieset(2,ntie),
' ')
297 tieset(2,ntie)(ipos:ipos)=
'S' 300 tieset(3,ntie)(1:80)=textpart(2)(1:80)
301 tieset(3,ntie)(81:81)=
' ' 302 ipos=index(tieset(3,ntie),
' ')
303 tieset(3,ntie)(ipos:ipos)=
'T'
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21