diff --git a/src/opt_orient.f90 b/src/opt_orient.f90 index 4ec4b4c..e60049b 100644 --- a/src/opt_orient.f90 +++ b/src/opt_orient.f90 @@ -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' - call def_new_box - box_bc = old_box_bc + !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 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)