|
|
|
@ -11,6 +11,7 @@ module opt_orient
|
|
|
|
|
real(kind=dp), save :: new_orient(3,3)
|
|
|
|
|
real(kind=dp), dimension(6) :: orig_box_bd
|
|
|
|
|
real(kind=dp), allocatable :: orig_sub_box_ori(:,:,:)
|
|
|
|
|
character(len=3) :: orig_box_bc
|
|
|
|
|
|
|
|
|
|
public
|
|
|
|
|
contains
|
|
|
|
@ -19,10 +20,10 @@ module opt_orient
|
|
|
|
|
|
|
|
|
|
integer, intent(inout) :: arg_pos
|
|
|
|
|
|
|
|
|
|
integer :: i, ibasis, inod
|
|
|
|
|
logical :: isortho, isrighthanded
|
|
|
|
|
integer :: i, j, k, ibasis, inod
|
|
|
|
|
logical :: isortho, isrighthanded, matching
|
|
|
|
|
real(kind=dp) :: inv_sub_box_ori(3,3,sub_box_num)
|
|
|
|
|
character(len=3) :: old_box_bc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!First parse the orient command
|
|
|
|
|
call parse_orient(arg_pos)
|
|
|
|
@ -63,11 +64,24 @@ module opt_orient
|
|
|
|
|
!Save original box boundaries
|
|
|
|
|
orig_box_bd = box_bd
|
|
|
|
|
|
|
|
|
|
!Now find new box boundaries, have to temporarily define the box as shrink wrapped for def new box to work
|
|
|
|
|
old_box_bc = box_Bc
|
|
|
|
|
box_bc = 'sss'
|
|
|
|
|
!Now find new box boundaries, if any orientations are the same we leave them as they are. If they are different then we have
|
|
|
|
|
!to shrink wrap them
|
|
|
|
|
|
|
|
|
|
orig_box_bc = box_bc
|
|
|
|
|
do i = 1,3
|
|
|
|
|
matching=.true.
|
|
|
|
|
sbox_loop:do j = 1, sub_box_num
|
|
|
|
|
do k = 1, 3
|
|
|
|
|
if(.not.is_equal(orig_sub_box_ori(i,k,j), new_orient(i,k))) then
|
|
|
|
|
matching = .false.
|
|
|
|
|
exit sbox_loop
|
|
|
|
|
end if
|
|
|
|
|
end do
|
|
|
|
|
end do sbox_loop
|
|
|
|
|
if(.not.matching) box_bc(i:i)='s'
|
|
|
|
|
end do
|
|
|
|
|
|
|
|
|
|
call def_new_box
|
|
|
|
|
box_bc = old_box_bc
|
|
|
|
|
end subroutine orient
|
|
|
|
|
|
|
|
|
|
subroutine parse_orient(arg_pos)
|
|
|
|
@ -129,8 +143,9 @@ module opt_orient
|
|
|
|
|
end do
|
|
|
|
|
end do
|
|
|
|
|
|
|
|
|
|
!Restore original box boundaries
|
|
|
|
|
!Restore original box boundaries and box BC
|
|
|
|
|
box_bd = orig_box_bd
|
|
|
|
|
box_bc = orig_box_bc
|
|
|
|
|
end subroutine unorient
|
|
|
|
|
|
|
|
|
|
subroutine sbox_ori(arg_pos)
|
|
|
|
|