Fix to opt_orient to preserve boundary conditions
This commit is contained in:
parent
1e1c08e546
commit
fb236f4ab4
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user