33 character*1 inpc(*),pressureoverclosure
34 character*132 textpart(16)
36 integer nelcon(2,*),imat,ntmat_,istep,istat,ipoinpc(0:*),
37 & n,key,i,ncmat_,irstrt,iline,ipol,inl,ipoinp(2,*),inp(3,*),
38 & ntmat,npmat,npmat_,nplicon(0:ntmat_,*),nstate_,
39 & ichangesurfacebehavior
41 real*8 elcon(0:ncmat_,ntmat_,*),plicon(0:2*npmat_,ntmat_,*),
44 if((istep.gt.0).and.(irstrt.ge.0).and.
45 & (ichangesurfacebehavior.eq.0))
then 46 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR:' 47 write(*,*)
' *SURFACE BEHAVIOR should be placed' 48 write(*,*)
' before all step definitions' 53 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR:' 54 write(*,*)
' *SURFACE BEHAVIOR should be preceded' 55 write(*,*)
' by a *SURFACE INTERACTION card' 58 pressureoverclosure=
' ' 61 if(textpart(i)(1:27).eq.
'PRESSURE-OVERCLOSURE=LINEAR')
then 62 pressureoverclosure=
'L' 63 elseif(textpart(i)(1:32).eq.
'PRESSURE-OVERCLOSURE=EXPONENTIAL')
65 pressureoverclosure=
'E' 66 elseif(textpart(i)(1:38).eq.
'PRESSURE-OVERCLOSURE=TABULAR')
68 pressureoverclosure=
'T' 69 elseif(textpart(i)(1:35).eq.
'PRESSURE-OVERCLOSURE=TIED')
71 pressureoverclosure=
'D' 74 &
'*WARNING reading *SURFACE BEHAVIOR: parameter not recognized:' 76 & textpart(i)(1:index(textpart(i),
' ')-1)
78 &
"*SURFACE BEHAVIOR%")
81 if(pressureoverclosure.eq.
' ')
then 82 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR:' 83 write(*,*)
' no PRESSURE-OVERCLOSURE defined on the' 84 write(*,*)
' *SURFACE BEHAVIOR card' 88 if(nelcon(1,imat).ne.-51) nelcon(1,imat)=
max(nelcon(1,imat),2)
91 if(pressureoverclosure.eq.
'E')
then 93 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
95 if((istat.lt.0).or.(key.eq.1))
then 96 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR: data' 97 write(*,*)
' line is lacking for exponential' 98 write(*,*)
' behavior' 100 &
"*SURFACE BEHAVIOR%")
103 elcon(3,1,imat)=1.5d0
108 read(textpart(i)(1:20),
'(f20.0)',iostat=istat)
110 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
111 &
"*SURFACE BEHAVIOR%")
116 if(elcon(1,1,imat).le.0.d0)
then 117 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR: c_0 must' 118 write(*,*)
' exceed zero' 121 if(elcon(2,1,imat).lt.0.d0)
then 122 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR: p_0 must' 123 write(*,*)
' not be smaller than zero' 134 elcon(1,1,imat)=dlog(100.d0)/elcon(1,1,imat)
136 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
137 & ipoinp,inp,ipoinpc)
139 elseif((pressureoverclosure.eq.
'L').or.
140 & (pressureoverclosure.eq.
'D'))
then 142 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
143 & ipoinp,inp,ipoinpc)
144 if((istat.lt.0).or.(key.eq.1))
then 145 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR: data' 146 write(*,*)
' line is lacking for linear' 147 write(*,*)
' behavior' 149 &
"*SURFACE BEHAVIOR%")
152 if(pressureoverclosure.eq.
'L')
then 153 elcon(3,1,imat)=2.5d0
155 nstate_=
max(nstate_,9)
156 elcon(3,1,imat)=4.5d0
163 read(textpart(1)(1:20),
'(f20.0)',iostat=istat)
165 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
166 &
"*SURFACE BEHAVIOR%")
168 if(elcon(2,1,imat).le.0.d0)
then 169 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR: K must' 170 write(*,*)
' be strictly positive' 176 read(textpart(2)(1:20),
'(f20.0)',iostat=istat)
178 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
179 &
"*SURFACE BEHAVIOR%")
187 read(textpart(3)(1:20),
'(f20.0)',iostat=istat)
189 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
190 &
"*SURFACE BEHAVIOR%")
194 if(elcon(4,1,imat).le.0.d0)
then 195 elcon(4,1,imat)=1.d-3
198 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
199 & ipoinp,inp,ipoinpc)
201 elseif(pressureoverclosure.eq.
'T')
then 202 elcon(3,1,imat)=3.5d0
203 elcon(4,1,imat)=1.d-3
213 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
214 & ipoinp,inp,ipoinpc)
215 if((istat.lt.0).or.(key.eq.1))
exit 216 read(textpart(3)(1:20),
'(f20.0)',iostat=istat)temperature
217 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
218 &
"*SURFACE BEHAVIOR%")
225 if(ntmat.gt.ntmat_)
then 226 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR:' 227 write(*,*)
' increase ntmat_' 230 nplicon(0,imat)=ntmat
231 plicon(0,ntmat,imat)=temperature
235 elseif(plicon(0,ntmat,imat).ne.temperature)
then 238 if(ntmat.gt.ntmat_)
then 239 write(*,*)
'*ERROR reading *SURFACE BEHAVIOR:' 240 write(*,*)
' increase ntmat_' 243 nplicon(0,imat)=ntmat
244 plicon(0,ntmat,imat)=temperature
247 read(textpart(i)(1:20),
'(f20.0)',iostat=istat)
248 & plicon(2*npmat+i,ntmat,imat)
249 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
250 &
"*SURFACE BEHAVIOR%")
253 if(npmat.gt.npmat_)
then 255 &
'*ERROR reading *SURFACE BEHAVIOR: increase npmat_' 258 nplicon(ntmat,imat)=npmat
263 &
'*ERROR reading *SURFACE BEHAVIOR: *SURFACE BEHAVIOR' 264 write(*,*)
' card without data' 274 if(plicon(2*i+2,1,imat)-plicon(2*i,1,imat).lt.1.d-10)
then 275 plicon(2*i+2,1,imat)=plicon(2*i,1,imat)+1.d-10
#define max(a, b)
Definition: cascade.c:32
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21