31 character*80 matname(*)
32 character*132 textpart(16)
34 integer nelcon(2,*),nmat,ntmat_,ntmat,npmat_,npmat,istep,
35 & n,key,i,nplicon(0:ntmat_,*),nplkcon(0:ntmat_,*),ncmat_,
36 & iplas,iperturb(*),istat,nstate_,kin,itemp,ndata,ndatamax,id,
37 & irstrt,iline,ipol,inl,ipoinp(2,*),inp(3,*),ipoinpc(0:*),
40 real*8 plicon(0:2*npmat_,ntmat_,*),plkcon(0:2*npmat_,ntmat_,*),
41 & temperature,plconloc(802),t1l,elcon(0:ncmat_,ntmat_,*)
48 if((istep.gt.0).and.(irstrt.ge.0))
then 49 write(*,*)
'*ERROR reading *PLASTIC: *PLASTIC should be placed' 50 write(*,*)
' before all step definitions' 56 &
'*ERROR reading *PLASTIC: *PLASTIC should be preceded' 57 write(*,*)
' by a *MATERIAL card' 61 if((nelcon(1,nmat).ne.2).and.(nelcon(1,nmat).ne.9))
then 63 &
'*ERROR reading *PLASTIC: *PLASTIC should be preceded' 64 write(*,*)
' by an *ELASTIC,TYPE=ISO card or' 65 write(*,*)
' by an *ELASTIC,TYPE=ORTHO card' 75 if(nelcon(1,nmat).eq.2)
then 78 nstate_=
max(nstate_,13)
82 nstate_=
max(nstate_,14)
86 if(textpart(i)(1:10).eq.
'HARDENING=')
then 87 if(textpart(i)(11:19).eq.
'KINEMATIC')
then 89 elseif(textpart(i)(11:18).eq.
'COMBINED')
then 91 elseif(textpart(i)(11:14).eq.
'USER')
then 92 if(nelcon(1,nmat).eq.-114)
then 93 write(*,*)
'*ERROR reading *PLASTIC: user defined ' 94 write(*,*)
' hardening is not allowed for ' 95 write(*,*)
' elastically anisotropic materials' 98 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
105 &
'*WARNING reading *PLASTIC: parameter not recognized:' 107 & textpart(i)(1:index(textpart(i),
' ')-1)
118 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
119 & ipoinp,inp,ipoinpc)
120 if((istat.lt.0).or.(key.eq.1))
exit 121 read(textpart(3)(1:20),
'(f20.0)',iostat=istat) temperature
122 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
130 if(ntmat.gt.ntmat_)
then 131 write(*,*)
'*ERROR reading *PLASTIC: increase ntmat_' 134 nplicon(0,nmat)=ntmat
135 plicon(0,ntmat,nmat)=temperature
139 elseif(plicon(0,ntmat,nmat).ne.temperature)
then 142 if(ntmat.gt.ntmat_)
then 143 write(*,*)
'*ERROR reading *PLASTIC: increase ntmat_' 146 nplicon(0,nmat)=ntmat
147 plicon(0,ntmat,nmat)=temperature
150 read(textpart(i)(1:20),
'(f20.0)',iostat=istat)
151 & plicon(2*npmat+i,ntmat,nmat)
152 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
156 if(npmat.gt.npmat_)
then 157 write(*,*)
'*ERROR reading *PLASTIC: increase npmat_' 160 nplicon(ntmat,nmat)=npmat
167 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
168 & ipoinp,inp,ipoinpc)
169 if((istat.lt.0).or.(key.eq.1))
exit 170 read(textpart(3)(1:20),
'(f20.0)',iostat=istat) temperature
171 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
179 if(ntmat.gt.ntmat_)
then 180 write(*,*)
'*ERROR reading *PLASTIC: increase ntmat_' 183 nplkcon(0,nmat)=ntmat
184 plkcon(0,ntmat,nmat)=temperature
188 elseif(plkcon(0,ntmat,nmat).ne.temperature)
then 191 if(ntmat.gt.ntmat_)
then 192 write(*,*)
'*ERROR reading *PLASTIC: increase ntmat_' 195 nplkcon(0,nmat)=ntmat
196 plkcon(0,ntmat,nmat)=temperature
199 read(textpart(i)(1:20),
'(f20.0)',iostat=istat)
200 & plkcon(2*npmat+i,ntmat,nmat)
201 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
205 if(npmat.gt.npmat_)
then 206 write(*,*)
'*ERROR reading *PLASTIC: increase npmat_' 209 nplkcon(ntmat,nmat)=npmat
215 &
'*ERROR reading *PLASTIC: *PLASTIC card without data' 222 if(nelcon(1,nmat).eq.-114)
then 223 if(matname(nmat)(71:80).ne.
' ')
then 225 &
'*ERROR reading *PLASTIC: the material name for an' 226 write(*,*)
' elastically anisotropic material with' 227 write(*,*)
' isotropic plasticity must not exceed 70' 228 write(*,*)
' characters' 232 matname(nmat)(i:i)=matname(nmat)(i-10:i-10)
235 matname(nmat)(1:10)=
'ANISO_PLAS' 246 do i=1,nelcon(2,nmat)
253 if(nplicon(0,nmat).eq.1)
then 256 call ident2(plicon(0,1,nmat),t1l,nplicon(0,nmat),
260 if(nplicon(0,nmat).eq.0)
then 262 elseif((nplicon(0,nmat).eq.1).or.(id.eq.0).or.
263 & (id.eq.nplicon(0,nmat)))
then 270 call plcopy(plicon,nplicon,plconloc,npmat_,ntmat_,
272 if((id.eq.0).or.(id.eq.nplicon(0,nmat)))
then 276 call plmix(plicon,nplicon,plconloc,npmat_,ntmat_,
277 & nmat,id+1,t1l,i,kin)
280 ndata=int(plconloc(801))
282 elcon(10,i,nmat)=plconloc(2)
283 elcon(11,i,nmat)=0.d0
284 elcon(12,i,nmat)=0.d0
285 elcon(13,i,nmat)=-1.d0
286 elcon(14,i,nmat)=1.d0
288 elcon(10,i,nmat)=plconloc(2)
289 elcon(11,i,nmat)=(plconloc(4)-plconloc(2))/
290 & (plconloc(3)-plconloc(1))
291 elcon(12,i,nmat)=0.d0
292 elcon(13,i,nmat)=-1.d0
293 elcon(14,i,nmat)=1.d0
295 ndatamax=
max(ndata,ndatamax)
297 if(ndatamax.gt.2)
then 299 &
'*WARNING reading *PLASTIC: isotropic hardening' 300 write(*,*)
' curve is possibly nonlinear for' 301 write(*,*)
' the elastically anisotropic' 302 write(*,*)
' material ',matname(nmat)(11:80)
312 do i=1,nelcon(2,nmat)
319 if(nplkcon(0,nmat).eq.1)
then 322 call ident2(plkcon(0,1,nmat),t1l,nplkcon(0,nmat),
326 if(nplkcon(0,nmat).eq.0)
then 328 elseif((nplkcon(0,nmat).eq.1).or.(id.eq.0).or.
329 & (id.eq.nplkcon(0,nmat)))
then 336 call plcopy(plkcon,nplkcon,plconloc,npmat_,ntmat_,
338 if((id.eq.0).or.(id.eq.nplkcon(0,nmat)))
then 342 call plmix(plkcon,nplkcon,plconloc,npmat_,ntmat_,
343 & nmat,id+1,t1l,i,kin)
346 ndata=int(plconloc(802))
348 elcon(10,i,nmat)=plconloc(402)
349 elcon(11,i,nmat)=0.d0
350 elcon(12,i,nmat)=0.d0
351 elcon(13,i,nmat)=-1.d0
352 elcon(14,i,nmat)=1.d0
354 elcon(10,i,nmat)=plconloc(402)
355 elcon(11,i,nmat)=0.d0
356 elcon(12,i,nmat)=(plconloc(404)-plconloc(402))/
357 & (plconloc(403)-plconloc(401))
358 elcon(13,i,nmat)=-1.d0
359 elcon(14,i,nmat)=1.d0
361 ndatamax=
max(ndata,ndatamax)
363 if(ndatamax.gt.2)
then 365 &
'*WARNING reading *PLASTIC: kinematic hardening' 366 write(*,*)
' curve is possibly nonlinear for' 367 write(*,*)
' the elastically anisotropic' 368 write(*,*)
' material ',matname(nmat)(11:80)
subroutine plcopy(plcon, nplcon, plconloc, npmat_, ntmat_, imat, itemp, nelem, kin)
Definition: plcopy.f:21
#define max(a, b)
Definition: cascade.c:32
subroutine ident2(x, px, n, ninc, id)
Definition: ident2.f:27
subroutine plmix(plcon, nplcon, plconloc, npmat_, ntmat_, imat, j, temp, nelem, kin)
Definition: plmix.f:21
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21