Merge pull request #19 from aselimov/ft--random-position-selector

Ft  random position selector
master
aselimov 5 years ago committed by GitHub
commit 636ae9421b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -225,4 +225,23 @@ This command remeshes the atoms/elements within the group to the new element siz
-ow
```
If this option is passed then all files are automatically overwritten without asking the user.
If this option is passed then all files are automatically overwritten without asking the user.
## Position Specification
Specifying positions in cacmb can be done through a variety of ways. Examples of each format is shown below.
`val` - Where `val` is a number, then that value in Angstroms is used as the position. As an example, `11.1` would be read in as a position of 11.1 $\AA$.
`-inf` - This specifies the lower box boundary in the specific dimension. The vector `-inf -inf -inf` specifies the bottom corner of the simulation cell which also acts as the simulation cell origin. The vector `-inf 10 3` instead puts only the x position at the simulation cell origin.
`inf` - Similar to `-inf` but references the upper boundary of the box in that dimension
`inf-val` - Using a minus sign reduces the position from the **upper boundary** by `val`. `inf-10` would be at a distance of $10 \AA$ from the upper boundary in that dimension.
`inf+val` - This increases the position from the **lower boundary**. `inf+10` would be a position $10\AA$ from the lower boundary within the cell.
`inf*val` - This gives you a fractional position in the simulation cell. As an example `inf*0.5` gives you the center point of the simulation cell.
`rand` - Returns a random position that lies within the simulation cell.

@ -37,6 +37,7 @@ program main
!Call initialization functions
call lattice_init
call box_init
call random_seed
force_overwrite=.false.
end_mode_arg = 0
@ -98,4 +99,4 @@ program main
end if
call write_out
end program main
end program main

@ -178,6 +178,7 @@ module subroutines
real(kind=dp), intent(out) :: pos !The output parsed position value
integer :: iospara
real(kind=dp) :: rand
iospara = 0
if(trim(adjustl(pos_string)) == 'inf') then
@ -208,6 +209,10 @@ module subroutines
read(pos_string(1:index(pos_string,'*')-1), *, iostat=iospara) pos
end if
pos = (box_bd(2*i)-box_bd(2*i-1))*pos + box_bd(2*i-1)
else if (trim(adjustl(pos_string)) == 'rand') then
call random_number(rand)
pos = (box_bd(2*i)-box_bd(2*i-1))*rand + box_bd(2*i-1)
else
read(pos_string, *, iostat=iospara) pos
end if

Loading…
Cancel
Save