c c ______________________ c subroutine cslquat(qq,numsig,theta,qresult) real qq(4),theta,qresult(4),tmp(2) real pi integer numsig ! index of CSL boundary - must be supplied common/a2/quatcsl(4,50),numcsl,nsig(50) c PI=3.14159265 c c algorithm for forming resultant quaternion c and determining angle based on fourth component c c note change of signs to get inverse of second orientation c qresult(1)=qq(1)*quatcsl(4,numsig)-qq(4)*quatcsl(1,numsig) & +qq(2)*quatcsl(3,numsig)-qq(3)*quatcsl(2,numsig) qresult(2)=qq(2)*quatcsl(4,numsig)-qq(4)*quatcsl(2,numsig) & +qq(3)*quatcsl(1,numsig)-qq(1)*quatcsl(3,numsig) qresult(3)=qq(3)*quatcsl(4,numsig)-qq(4)*quatcsl(3,numsig) & +qq(1)*quatcsl(2,numsig)-qq(2)*quatcsl(1,numsig) qresult(4)=qq(4)*quatcsl(4,numsig)+qq(1)*quatcsl(1,numsig) & +qq(2)*quatcsl(2,numsig)+qq(3)*quatcsl(3,numsig) c c write(*,*) 'qresult ',qresult if(qresult(4).gt.1.0) qresult(4)=1.0 if(qresult(4).lt.-1.0) qresult(4)=-1.0 theta=acos(qresult(4))*360./pi c write(*,*) 'theta= ',theta c return end c c ______________________ c