c c _____________________________ c c subroutine postsymm(qq,lindex,qresult) real qq(4),qresult(4) integer lindex c include 'common.f' common/a1/ quatsymm(4,48),numsymm c PI=3.14159265 c c algorithm for forming resultant quaternion c from applying a symmetry operator, QUATSYMM(n,lindex) c to the second quaternion c c If the symm oper == O, then c Qresult = (QQ x O^-1) where QQ= Q1 x Q2^-1 c i.e. Qresult = Q1 x (O x Q2)^-1 c note change of signs to get inverse of first orientation c if(lindex.gt.numsymm) stop 'error in postsymm, lindex>numsymm' if(lindex.lt.1) stop 'error in postsymm, lindex<1' qresult(1)=qq(1)*quatsymm(4,lindex)-qq(4)*quatsymm(1,lindex) & +qq(2)*quatsymm(3,lindex)-qq(3)*quatsymm(2,lindex) qresult(2)=qq(2)*quatsymm(4,lindex)-qq(4)*quatsymm(2,lindex) & +qq(3)*quatsymm(1,lindex)-qq(1)*quatsymm(3,lindex) qresult(3)=qq(3)*quatsymm(4,lindex)-qq(4)*quatsymm(3,lindex) & +qq(1)*quatsymm(2,lindex)-qq(2)*quatsymm(1,lindex) qresult(4)=qq(4)*quatsymm(4,lindex)+qq(1)*quatsymm(1,lindex) & +qq(2)*quatsymm(2,lindex)+qq(3)*quatsymm(3,lindex) c c write(*,*) 'postsymm: qresult ',qresult c return end c c c _____________________________ c