27 character*80 orname(*)
28 character*132 textpart(16)
30 integer norien,norien_,istep,istat,n,key,i,iline,ipol,inl,
31 & ipoinp(2,*),inp(3,*),ipoinpc(0:*),iaxis,j
33 real*8 orab(7,*),a(3,3),c(3,3),angle,p(3),dc,ds,pi
37 &
'*ERROR reading *ORIENTATION: *ORIENTATION should be' 38 write(*,*)
' placed before all step definitions' 43 if(norien.gt.norien_)
then 44 write(*,*)
'*ERROR reading *ORIENTATION: increase norien_' 55 if(textpart(i)(1:5).eq.
'NAME=')
then 56 orname(norien)=textpart(i)(6:85)
57 if(textpart(i)(86:86).ne.
' ')
then 58 write(*,*)
'*ERROR reading *ORIENTATION: name too long' 59 write(*,*)
' (more than 80 characters)' 60 write(*,*)
' orientation name:',textpart(i)(1:132)
63 elseif(textpart(i)(1:7).eq.
'SYSTEM=')
then 64 if(textpart(i)(8:8).eq.
'C')
then 69 &
'*WARNING reading *ORIENTATION: parameter not recognized:' 71 & textpart(i)(1:index(textpart(i),
' ')-1)
77 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
79 if((istat.lt.0).or.(key.eq.1))
then 81 &
'*ERROR reading *ORIENTATION: definition of the following' 82 write(*,*)
' orientation is not complete: ',orname(norien)
87 read(textpart(i)(1:20),
'(f20.0)',iostat=istat) orab(i,norien)
88 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
92 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
95 if((istat.lt.0).or.(key.eq.1))
return 97 read(textpart(1)(1:10),
'(i10)',iostat=istat) iaxis
98 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
100 read(textpart(2)(1:20),
'(f20.0)',iostat=istat) angle
101 if(istat.gt.0)
call inputerror(inpc,ipoinpc,iline,
107 if(orab(7,norien).lt.0.d0)
then 108 write(*,*)
'*ERROR reading *ORIENTATION' 109 write(*,*)
' additional rotation about an angle' 110 write(*,*)
' is only allowed for rectangular systems' 125 angle=angle*pi/180.d0
128 c(1,1)=dc+(1.d0-dc)*p(1)*p(1)
129 c(1,2)=-ds*p(3)+(1.d0-dc)*p(1)*p(2)
130 c(1,3)=ds*p(2)+(1.d0-dc)*p(1)*p(3)
131 c(2,1)=ds*p(3)+(1.d0-dc)*p(2)*p(1)
132 c(2,2)=dc+(1.d0-dc)*p(2)*p(2)
133 c(2,3)=-ds*p(1)+(1.d0-dc)*p(2)*p(3)
134 c(3,1)=-ds*p(2)+(1.d0-dc)*p(3)*p(1)
135 c(3,2)=ds*p(1)+(1.d0-dc)*p(3)*p(2)
136 c(3,3)=dc+(1.d0-dc)*p(3)*p(3)
144 orab(i,norien)=orab(i,norien)+c(i,j)*a(j,1)
152 orab(i+3,norien)=0.d0
154 orab(i+3,norien)=orab(i+3,norien)+c(i,j)*a(j,2)
158 call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
159 & ipoinp,inp,ipoinpc)
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21