36 character*80 matname(*),orname(*),material,orientation
37 character*81 set(*),elset
38 character*132 textpart(16)
40 integer istartset(*),iendset(*),ialset(*),mi(*),ielmat(mi(3),*),
41 & ipoinpc(0:*),ielorien(mi(3),*),ipkon(*),iline,ipol,inl,lprop,
42 & ipoinp(2,*),inp(3,*),nset,nmat,norien,istep,istat,n,key,i,j,k,l,
43 & imaterial,iorientation,ipos,m,iponor(2,*),ixfree,indexx,indexe,
44 & irstrt,ielprop(*),nprop_,nprop,npropstart,ndprop,ndpropread,
47 real*8 thicke(mi(3),*),thickness1,thickness2,p(3),xnor(*),
48 & offset(2,*),offset1,offset2,dd,prop(*)
50 if((istep.gt.0).and.(irstrt.ge.0))
then 51 write(*,*)
'*ERROR reading *BEAM SECTION:' 52 write(*,*)
' *BEAM SECTION should' 53 write(*,*)
' be placed before all step definitions' 66 if(textpart(i)(1:9).eq.
'MATERIAL=')
then 67 material=textpart(i)(10:89)
68 elseif(textpart(i)(1:12).eq.
'ORIENTATION=')
then 69 orientation=textpart(i)(13:92)
70 elseif(textpart(i)(1:6).eq.
'ELSET=')
then 71 elset=textpart(i)(7:86)
75 elseif(textpart(i)(1:8).eq.
'SECTION=')
then 76 if(textpart(i)(9:12).eq.
'PIPE')
then 79 elseif(textpart(i)(9:11).eq.
'BOX')
then 82 elseif(textpart(i)(9:15).eq.
'GENERAL')
then 87 &
'*ERROR reading *BEAM SECTION: unknown section' 90 elseif(textpart(i)(1:8).eq.
'OFFSET1=')
then 91 read(textpart(i)(9:28),
'(f20.0)',iostat=istat) offset1
92 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
94 elseif(textpart(i)(1:8).eq.
'OFFSET2=')
then 95 read(textpart(i)(9:28),
'(f20.0)',iostat=istat) offset2
96 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
99 write(*,*)
'*WARNING reading *BEAM SECTION:' 100 write(*,*)
' parameter not recognized:' 102 & textpart(i)(1:index(textpart(i),
' ')-1)
110 if(section.eq.
' ')
then 111 write(*,*)
'*ERROR reading *BEAM SECTION:' 112 write(*,*)
' no section defined' 119 if(matname(i).eq.material)
exit 122 write(*,*)
'*ERROR reading *BEAM SECTION:' 123 write(*,*)
' nonexistent material' 134 elseif(nelcon(1,i).eq.2)
then 135 write(*,*)
'*INFO reading *SOLID SECTION: an orientation' 136 write(*,*)
' is for isotropic materials irrelevant' 142 if(orname(i).eq.orientation)
exit 146 &
'*ERROR reading *BEAM SECTION: nonexistent orientation' 156 if(set(i).eq.elset)
exit 160 write(*,*)
'*ERROR reading *BEAM SECTION: element set ',
162 write(*,*)
' has not yet been defined. ' 171 if(section.ne.
'GENE')
then 172 do j=istartset(i),iendset(i)
173 if(ialset(j).gt.0)
then 174 if(lakon(ialset(j))(1:4).ne.
'B32R')
then 175 write(*,*)
'*ERROR reading *BEAM SECTION:' 176 write(*,*)
' *BEAM SECTION can' 177 write(*,*)
' only be used for B32R elements.' 178 write(*,*)
' Element ',ialset(j),
' is not a B32R 182 ielmat(1,ialset(j))=imaterial
183 ielorien(1,ialset(j))=iorientation
184 offset(1,ialset(j))=offset1
185 offset(2,ialset(j))=offset2
186 if(section.eq.
'PIPE')
then 187 lakon(ialset(j))(8:8)=
'P' 188 elseif(section.eq.
'BOX')
then 189 lakon(ialset(j))(8:8)=
'B' 195 if(k.ge.ialset(j-1))
exit 196 if(lakon(k)(1:1).ne.
'B')
then 197 write(*,*)
'*ERROR reading *BEAM SECTION:' 198 write(*,*)
' *BEAM SECTION can' 199 write(*,*)
' only be used for beam elements.' 200 write(*,*)
' Element ',k,
' is not a beam elem 204 ielmat(1,k)=imaterial
205 ielorien(1,k)=iorientation
208 if(section.eq.
'PIPE')
then 210 elseif(section.eq.
'BOX')
then 220 do j=istartset(i),iendset(i)
221 if(ialset(j).gt.0)
then 222 if(lakon(ialset(j))(1:2).ne.
'U1')
then 223 write(*,*)
'*ERROR reading *BEAM SECTION:' 224 write(*,*)
' *BEAM SECTION of type GENERAL can' 225 write(*,*)
' only be used for U1 elements.' 226 write(*,*)
' Element ',ialset(j),
' is not a U1 230 ielmat(1,ialset(j))=imaterial
231 ielorien(1,ialset(j))=iorientation
236 if(k.ge.ialset(j-1))
exit 237 if(lakon(k)(1:2).ne.
'U1')
then 238 write(*,*)
'*ERROR reading *BEAM SECTION:' 239 write(*,*)
' *BEAM SECTION of type GENERAL' 240 write(*,*)
' can only be used for beam' 241 write(*,*)
' elements.' 242 write(*,*)
' Element ',k,
' is not a beam elem 246 ielmat(1,k)=imaterial
247 ielorien(1,k)=iorientation
257 do j=1,(ndpropread-1)/8+1
258 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
259 & ipoinp,inp,ipoinpc)
262 if(lprop.gt.ndpropread)
exit 263 read(textpart(k),
'(f40.0)',iostat=istat)
265 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
271 if(section.eq.
'GENE')
then 273 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
274 & ipoinp,inp,ipoinpc)
275 if((istat.lt.0).or.(key.eq.1))
then 286 read(textpart(1)(1:20),
'(f20.0)',iostat=istat) p(1)
287 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
289 read(textpart(2)(1:20),
'(f20.0)',iostat=istat) p(2)
290 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
292 read(textpart(3)(1:20),
'(f20.0)',iostat=istat) p(3)
293 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
295 dd=dsqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
296 if(dd.lt.1.d-10)
then 298 &
'*ERROR reading *BEAM SECTION: normal in direction 1' 299 write(*,*)
' has zero size' 303 prop(nprop+j)=p(j)/dd
308 prop(nprop+1)=offset1
309 prop(nprop+2)=offset2
313 if(nprop.gt.nprop_)
then 315 &
'*ERROR reading *BEAM SECTION: increase nprop_' 321 if(section.eq.
'PIPE')
then 322 thickness1=2.d0*prop(npropstart+1)
323 thickness2=thickness1
324 elseif(section.eq.
'BOX')
then 325 thickness1=prop(npropstart+1)
326 thickness2=prop(npropstart+2)
331 if(section.ne.
'GENE')
then 332 do j=istartset(i),iendset(i)
333 if(ialset(j).gt.0)
then 334 indexe=ipkon(ialset(j))
336 thicke(1,indexe+l)=thickness1
337 thicke(2,indexe+l)=thickness2
339 ielprop(ialset(j))=npropstart
344 if(k.ge.ialset(j-1))
exit 347 thicke(1,indexe+l)=thickness1
348 thicke(2,indexe+l)=thickness2
350 ielprop(k)=npropstart
355 do j=istartset(i),iendset(i)
356 if(ialset(j).gt.0)
then 357 ielprop(ialset(j))=npropstart
362 if(k.ge.ialset(j-1))
exit 363 ielprop(k)=npropstart
369 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
370 & ipoinp,inp,ipoinpc)
371 if((istat.lt.0).or.(key.eq.1))
return 376 read(textpart(1)(1:20),
'(f20.0)',iostat=istat) p(1)
377 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
379 read(textpart(2)(1:20),
'(f20.0)',iostat=istat) p(2)
380 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
382 read(textpart(3)(1:20),
'(f20.0)',iostat=istat) p(3)
383 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
385 dd=dsqrt(p(1)*p(1)+p(2)*p(2)+p(3)*p(3))
386 if(dd.lt.1.d-10)
then 388 &
'*ERROR reading *BEAM SECTION: normal in direction 1' 389 write(*,*)
' has zero size' 395 do j=istartset(i),iendset(i)
396 if(ialset(j).gt.0)
then 397 indexe=ipkon(ialset(j))
399 if(indexx.eq.-1)
then 406 iponor(1,indexe+l)=indexx
412 if(k.ge.ialset(j-1))
exit 415 if(indexx.eq.-1)
then 422 iponor(1,indexe+l)=indexx
428 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
429 & ipoinp,inp,ipoinpc)
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21