37 character*132 textpart(16)
39 integer nmethod,iperturb,isolver,istep,istat,n,key,i,idrct,
40 & iline,ipol,inl,ipoinp(2,*),inp(3,*),ipoinpc(0:*),nelcon(2,*),
43 real*8 tinc,tper,tmin,tmax,ctrl(*)
49 if((iperturb.eq.1).and.(istep.gt.1))
then 50 write(*,*)
'*ERROR reading *VISCO: perturbation analysis is' 51 write(*,*)
' not provided in a *VISCO step. Perform' 52 write(*,*)
' a genuine nonlinear geometric calculation' 53 write(*,*)
' instead (parameter NLGEOM)' 58 write(*,*)
'*ERROR reading *VISCO: *VISCO can only be used' 59 write(*,*)
' within a STEP' 68 elseif(isolver.eq.2)
then 69 solver(1:16)=
'ITERATIVESCALING' 70 elseif(isolver.eq.3)
then 71 solver(1:17)=
'ITERATIVECHOLESKY' 72 elseif(isolver.eq.4)
then 74 elseif(isolver.eq.5)
then 76 elseif(isolver.eq.7)
then 81 if(textpart(i)(1:7).eq.
'SOLVER=')
then 82 read(textpart(i)(8:27),
'(a20)') solver
83 elseif((textpart(i)(1:6).eq.
'DIRECT').and.
84 & (textpart(i)(1:9).ne.
'DIRECT=NO'))
then 86 elseif(textpart(i)(1:6).eq.
'CETOL=')
then 87 read(textpart(i)(7:26),
'(f20.0)',iostat=istat) ctrl(40)
88 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
92 &
'*WARNING reading *VISCO: parameter not recognized:' 94 & textpart(i)(1:index(textpart(i),
' ')-1)
100 if(ctrl(40).le.0.d0)
then 101 write(*,*)
'*ERROR reading *VISCO:' 102 write(*,*)
' no strictly positive value' 103 write(*,*)
' for the parameter CETOL given' 107 if(solver(1:7).eq.
'SPOOLES')
then 109 elseif(solver(1:16).eq.
'ITERATIVESCALING')
then 111 elseif(solver(1:17).eq.
'ITERATIVECHOLESKY')
then 113 elseif(solver(1:3).eq.
'SGI')
then 115 elseif(solver(1:5).eq.
'TAUCS')
then 117 elseif(solver(1:7).eq.
'PARDISO')
then 120 write(*,*)
'*WARNING reading *VISCO: unknown solver;' 121 write(*,*)
' the default solver is used' 126 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
127 & ipoinp,inp,ipoinpc)
128 if((istat.lt.0).or.(key.eq.1))
then 129 if(iperturb.ge.2)
then 130 write(*,*)
'*WARNING reading *VISCO: a nonlinear analysis is 132 write(*,*)
' but no time increment nor step is speci 134 write(*,*)
' the defaults (1,1) are used' 143 read(textpart(1)(1:20),
'(f20.0)',iostat=istat) tinc
144 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
146 read(textpart(2)(1:20),
'(f20.0)',iostat=istat) tper
147 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
149 read(textpart(3)(1:20),
'(f20.0)',iostat=istat) tmin
150 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
152 read(textpart(4)(1:20),
'(f20.0)',iostat=istat) tmax
153 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
156 if(tinc.le.0.d0)
then 157 write(*,*)
'*ERROR reading *VISCO: initial increment size is ne 160 if(tper.le.0.d0)
then 161 write(*,*)
'*ERROR reading *VISCO: step size is negative' 163 if(tinc.gt.tper)
then 164 write(*,*)
'*ERROR reading *VISCO: initial increment size excee 169 if(dabs(tmin).lt.1.d-6*tper)
then 170 tmin=
min(tinc,1.d-6*tper)
172 if(dabs(tmax).lt.1.d-10)
then 174 if(tinc.gt.dabs(tmax))
then 175 write(*,*)
'*WARNING reading *VISCO:' 176 write(*,*)
' the initial increment ',tinc
177 write(*,*)
' exceeds the maximum increment ',
179 write(*,*)
' the initial increment is reduced' 180 write(*,*)
' to the maximum value' 186 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
187 & ipoinp,inp,ipoinpc)
#define min(a, b)
Definition: cascade.c:31
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21