Current working changes to control-box code
This commit is contained in:
parent
5949f04103
commit
95e2ad0b4d
@ -58,7 +58,7 @@ Default duplicate is `1 1 1`. This is used to replicate the element along each d
|
|||||||
**Dimensions**
|
**Dimensions**
|
||||||
|
|
||||||
```
|
```
|
||||||
dimensions dimx dimy dimz
|
dim dimx dimy dimz
|
||||||
```
|
```
|
||||||
|
|
||||||
There is no default dimensions as duplicate is the default option. This command assigns a box with user-assigned dimensions and fills it with the desired element. By default atoms fill in the jagged edges at the boundaries if the dimensions command is included.
|
There is no default dimensions as duplicate is the default option. This command assigns a box with user-assigned dimensions and fills it with the desired element. By default atoms fill in the jagged edges at the boundaries if the dimensions command is included.
|
||||||
@ -129,6 +129,11 @@ wrap
|
|||||||
|
|
||||||
This will wrap atomic positions back inside the box. Effectively as if periodic boundary conditions are applied so that atoms which exit from one side of the simulation cell enter back in through the other.
|
This will wrap atomic positions back inside the box. Effectively as if periodic boundary conditions are applied so that atoms which exit from one side of the simulation cell enter back in through the other.
|
||||||
|
|
||||||
|
###Mode Metric
|
||||||
|
```
|
||||||
|
--metric cmetric nfiles {filepaths}
|
||||||
|
```
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
Options are additional portions of code which have additional functionality. Options are performed in the order that they appear in the argument list and can be added to any mode. If wanting to use strictly options use `--convert` to specify input and output files.
|
Options are additional portions of code which have additional functionality. Options are performed in the order that they appear in the argument list and can be added to any mode. If wanting to use strictly options use `--convert` to specify input and output files.
|
||||||
|
@ -97,4 +97,10 @@ module box
|
|||||||
end do
|
end do
|
||||||
return
|
return
|
||||||
end subroutine in_sub_box
|
end subroutine in_sub_box
|
||||||
|
|
||||||
|
subroutine reset_box
|
||||||
|
!This subroutine just resets the box boundary and position
|
||||||
|
box_bc = "ppp"
|
||||||
|
box_bd(:) = 0
|
||||||
|
end subroutine reset_box
|
||||||
end module box
|
end module box
|
||||||
|
@ -793,4 +793,11 @@ module elements
|
|||||||
virial_node(:,:,:,ie) = virial
|
virial_node(:,:,:,ie) = virial
|
||||||
return
|
return
|
||||||
end subroutine add_element_data
|
end subroutine add_element_data
|
||||||
|
|
||||||
|
subroutine reset_data
|
||||||
|
!This function resets all of the data arrays for the elements and atoms
|
||||||
|
atom_num = 0
|
||||||
|
ele_num = 0
|
||||||
|
node_num = 0
|
||||||
|
end subroutine reset_data
|
||||||
end module elements
|
end module elements
|
||||||
|
17
src/io.f90
17
src/io.f90
@ -583,22 +583,17 @@ module io
|
|||||||
temp_infile = filename
|
temp_infile = filename
|
||||||
end if
|
end if
|
||||||
|
|
||||||
!Infinite loop which only exists if user provides valid filetype
|
|
||||||
do while(.true.)
|
|
||||||
|
|
||||||
!Check to see if file exists, if it does then ask user if they would like to overwrite the file
|
!Check to see if file exists, if it does then ask user if they would like to overwrite the file
|
||||||
inquire(file=trim(temp_infile), exist=file_exists)
|
inquire(file=trim(temp_infile), exist=file_exists)
|
||||||
if (.not.file_exists) then
|
if (.not.file_exists) then
|
||||||
print *, "The file ", trim(adjustl(filename)), " does not exist. Please input a filename that exists"
|
print *, "The file ", trim(adjustl(filename)), " does not exist. Please input an existing file to read."
|
||||||
read(*,*) temp_infile
|
stop 3
|
||||||
cycle
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
select case(temp_infile(scan(temp_infile,'.',.true.)+1:))
|
select case(temp_infile(scan(temp_infile,'.',.true.)+1:))
|
||||||
case('restart', 'mb', 'cac')
|
case('restart', 'mb', 'cac')
|
||||||
infilenum=infilenum+1
|
infilenum=infilenum+1
|
||||||
infiles(infilenum) = temp_infile
|
infiles(infilenum) = temp_infile
|
||||||
exit
|
|
||||||
case('out')
|
case('out')
|
||||||
if(atom_types == 0) then
|
if(atom_types == 0) then
|
||||||
print *, "Please run -set_types command prior to running code requiring reading in pycac_*.out files"
|
print *, "Please run -set_types command prior to running code requiring reading in pycac_*.out files"
|
||||||
@ -608,7 +603,6 @@ module io
|
|||||||
case('--convert','--metric')
|
case('--convert','--metric')
|
||||||
infilenum = infilenum+1
|
infilenum = infilenum+1
|
||||||
infiles(infilenum) = temp_infile
|
infiles(infilenum) = temp_infile
|
||||||
exit
|
|
||||||
case default
|
case default
|
||||||
print *, "Files of type .out cannot be used with mode ", trim(adjustl(mode))
|
print *, "Files of type .out cannot be used with mode ", trim(adjustl(mode))
|
||||||
stop 3
|
stop 3
|
||||||
@ -617,15 +611,13 @@ module io
|
|||||||
case default
|
case default
|
||||||
print *, "File type: ", trim(temp_infile(scan(temp_infile,'.',.true.):)), "not currently accepted. ", &
|
print *, "File type: ", trim(temp_infile(scan(temp_infile,'.',.true.):)), "not currently accepted. ", &
|
||||||
"please input a filename with extension from following list: mb, restart, cac, or out."
|
"please input a filename with extension from following list: mb, restart, cac, or out."
|
||||||
read(*,*) temp_infile
|
stop 3
|
||||||
|
|
||||||
end select
|
end select
|
||||||
end do
|
|
||||||
|
|
||||||
end subroutine get_in_file
|
end subroutine get_in_file
|
||||||
|
|
||||||
subroutine read_in(i, displace, temp_box_bd)
|
subroutine read_in(i, displace, temp_box_bd)
|
||||||
!This subroutine loops over alll of the outfile types defined and calls the correct writing subroutine
|
!This subroutine reads in file i
|
||||||
|
|
||||||
integer, intent(in) :: i
|
integer, intent(in) :: i
|
||||||
real(kind=dp), dimension(3), intent(in) :: displace
|
real(kind=dp), dimension(3), intent(in) :: displace
|
||||||
@ -1067,6 +1059,7 @@ module io
|
|||||||
end do
|
end do
|
||||||
call add_element(tag, fcc, esize+1, lat_type, sub_box_num, re)
|
call add_element(tag, fcc, esize+1, lat_type, sub_box_num, re)
|
||||||
call add_element_data(ele_num, ee, fe, ve)
|
call add_element_data(ele_num, ee, fe, ve)
|
||||||
|
node_num = node_num + 8
|
||||||
end do
|
end do
|
||||||
end if
|
end if
|
||||||
call set_max_esize
|
call set_max_esize
|
||||||
|
@ -3,6 +3,7 @@ module opt_delete
|
|||||||
use parameters
|
use parameters
|
||||||
use subroutines
|
use subroutines
|
||||||
use elements
|
use elements
|
||||||
|
use neighbors
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
|
@ -198,66 +198,6 @@ module subroutines
|
|||||||
end do
|
end do
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine build_cell_list(numinlist, r_list, rc_off, cell_num, num_in_cell, cell_list, which_cell)
|
|
||||||
!This subroutine builds a cell list based on rc_off
|
|
||||||
|
|
||||||
!----------------------------------------Input/output variables-------------------------------------------
|
|
||||||
|
|
||||||
integer, intent(in) :: numinlist !The number of points within r_list
|
|
||||||
|
|
||||||
real(kind=dp), dimension(3,numinlist), intent(in) :: r_list !List of points to be used for the construction of
|
|
||||||
!the cell list.
|
|
||||||
|
|
||||||
real(kind=dp), intent(in) :: rc_off ! Cutoff radius which dictates the size of the cells
|
|
||||||
|
|
||||||
integer, dimension(3), intent(inout) :: cell_num !Number of cells in each dimension.
|
|
||||||
|
|
||||||
integer, allocatable, intent(inout) :: num_in_cell(:,:,:) !Number of points within each cell
|
|
||||||
|
|
||||||
integer, allocatable, intent(inout) :: cell_list(:,:,:,:) !Index of points from r_list within each cell.
|
|
||||||
|
|
||||||
integer, dimension(3,numinlist), intent(out) :: which_cell !The cell index for each point in r_list
|
|
||||||
|
|
||||||
!----------------------------------------Begin Subroutine -------------------------------------------
|
|
||||||
|
|
||||||
integer :: i, j, cell_lim, c(3)
|
|
||||||
real(kind=dp) :: box_len(3)
|
|
||||||
integer, allocatable :: resize_cell_list(:,:,:,:)
|
|
||||||
|
|
||||||
!First calculate the number of cells that we need in each dimension
|
|
||||||
do i = 1,3
|
|
||||||
box_len(i) = box_bd(2*i) - box_bd(2*i-1)
|
|
||||||
cell_num(i) = int(box_len(i)/(rc_off/2))+1
|
|
||||||
end do
|
|
||||||
|
|
||||||
!Initialize/allocate variables
|
|
||||||
cell_lim = 10
|
|
||||||
allocate(num_in_cell(cell_num(1),cell_num(2),cell_num(3)), cell_list(cell_lim, cell_num(1), cell_num(2), cell_num(3)))
|
|
||||||
|
|
||||||
!Now place points within cell
|
|
||||||
do i = 1, numinlist
|
|
||||||
!c is the position of the cell that the point belongs to
|
|
||||||
do j = 1, 3
|
|
||||||
c(j) = int((r_list(j,i)-box_bd(2*j-1))/(rc_off/2)) + 1
|
|
||||||
end do
|
|
||||||
|
|
||||||
!Place the index in the correct position, growing if necessary
|
|
||||||
num_in_cell(c(1),c(2),c(3)) = num_in_cell(c(1),c(2),c(3)) + 1
|
|
||||||
if (num_in_cell(c(1),c(2),c(3)) > cell_lim) then
|
|
||||||
allocate(resize_cell_list(cell_lim+10,cell_num(1),cell_num(2),cell_num(3)))
|
|
||||||
resize_cell_list(1:cell_lim, :, :, :) = cell_list
|
|
||||||
resize_cell_list(cell_lim+1:, :, :, :) = 0
|
|
||||||
call move_alloc(resize_cell_list, cell_list)
|
|
||||||
end if
|
|
||||||
|
|
||||||
cell_list(num_in_cell(c(1),c(2),c(3)),c(1),c(2),c(3)) = i
|
|
||||||
which_cell(:,i) = c
|
|
||||||
end do
|
|
||||||
|
|
||||||
return
|
|
||||||
end subroutine build_cell_list
|
|
||||||
|
|
||||||
|
|
||||||
subroutine check_right_ortho(ori, isortho, isrighthanded)
|
subroutine check_right_ortho(ori, isortho, isrighthanded)
|
||||||
!This subroutine checks whether provided orientations in the form:
|
!This subroutine checks whether provided orientations in the form:
|
||||||
! | x1 x2 x3 |
|
! | x1 x2 x3 |
|
||||||
@ -301,4 +241,5 @@ module subroutines
|
|||||||
return
|
return
|
||||||
end subroutine check_right_ortho
|
end subroutine check_right_ortho
|
||||||
|
|
||||||
|
|
||||||
end module subroutines
|
end module subroutines
|
||||||
|
Loading…
x
Reference in New Issue
Block a user