Updates to metric and emrge and adding read_lmp

This commit is contained in:
Alex Selimov 2021-03-19 12:23:57 -04:00
parent 85135e7c95
commit 8298c21503
5 changed files with 102 additions and 7 deletions

View File

@ -3,6 +3,7 @@
FC=mpif90 FC=mpif90
FFLAGS=-Wall -mcmodel=large -O0 -g -fbacktrace -fcheck=all -ffpe-trap=invalid,zero,overflow,underflow,denormal FFLAGS=-Wall -mcmodel=large -O0 -g -fbacktrace -fcheck=all -ffpe-trap=invalid,zero,overflow,underflow,denormal
FFLAGS=-O2 -mcmodel=large
OBJDIR=obj OBJDIR=obj
SRCS := $(wildcard *.f90) SRCS := $(wildcard *.f90)

View File

@ -635,7 +635,7 @@ module io
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('lmp','restart', 'mb', 'cac')
infilenum=infilenum+1 infilenum=infilenum+1
infiles(infilenum) = temp_infile infiles(infilenum) = temp_infile
case('out') case('out')
@ -673,6 +673,8 @@ module io
call read_mb(infiles(i), displace, temp_box_bd) call read_mb(infiles(i), displace, temp_box_bd)
case('restart') case('restart')
call read_pycac(infiles(i), displace, temp_box_bd) call read_pycac(infiles(i), displace, temp_box_bd)
case('lmp')
call read_lmp(infiles(i), displace, temp_box_bd)
case('cac') case('cac')
call read_lmpcac(infiles(i), displace, temp_box_bd) call read_lmpcac(infiles(i), displace, temp_box_bd)
case('out') case('out')
@ -1053,7 +1055,88 @@ module io
return return
end subroutine end subroutine
subroutine read_lmp(file, displace, temp_box_bd)
!This subroutine is used to read .cac files which are used with the lammpsCAC format
character(len=100), intent(in) :: file
real(kind=dp), dimension(3), intent(in) :: displace
real(kind = dp), dimension(6), intent(out) :: temp_box_bd
character(len=100) :: textholder, element_type
character(len=2) :: atom_species
integer :: i, j, k, atom_in, type_in, type_map(10), in_basis, node_types(10,8), &
lat_type, id
real(kind=dp) :: mass, r_in(3), newdisplace(3)
!Open the file
open(unit=11, file=trim(adjustl(file)), action='read',position='rewind')
!Now initialize some important variables if they aren't defined
if (max_basisnum==0) max_basisnum = 10
if (max_ng_node==0) max_ng_node=8
!Read header information
read(11, *) textholder
!Read number of elements
read(11, *) atom_in, textholder
read(11, *) type_in, textholder
!Read box_boundaries
read(11,*) temp_box_bd(1:2), textholder, textholder
read(11,*) temp_box_bd(3:4), textholder, textholder
read(11,*) temp_box_bd(5:6), textholder, textholder
print *, "Read in ", atom_in, " atoms from ", trim(adjustl(file))
!Shift the box boundaries if needed
do i = 1, 3
if (abs(displace(i)) > lim_zero) then
newdisplace(i) = displace(i) - temp_box_bd(2*i-1)
else
newdisplace(i)=displace(i)
end if
temp_box_bd(2*i-1) = temp_box_bd(2*i-1) + newdisplace(i)
temp_box_bd(2*i) = temp_box_bd(2*i) + newdisplace(i)
end do
!Grow box boundaries
call grow_box(temp_box_bd)
!Allocate sub_box
if (sub_box_num == 0) then
call alloc_sub_box(1)
else
call grow_sub_box(1)
end if
!Because orientations and other needed sub_box information isn't really
!present within the .cac file we just default a lot of it.
sub_box_ori(:,:,sub_box_num+1) = identity_mat(3)
sub_box_bd(:, sub_box_num+1) = temp_box_bd
sub_box_num = sub_box_num + 1
!Read useless information
read(11,*) textholder
!Read atomic masses
do i = 1, type_in
read(11,*) j, mass, textholder
call ATOMMASSSPECIES(mass, atom_species)
call add_atom_type(atom_species, type_map(i))
end do
!Read useless info
read(11,*) textholder
!Start the reading loop
do i = 1, atom_in
read(11,*) id, type_in, r_in(:)
call add_atom(id, type_in, sub_box_num, r_in)
end do
close(11)
return
end subroutine read_lmp
subroutine read_lmpcac(file, displace, temp_box_bd) subroutine read_lmpcac(file, displace, temp_box_bd)
!This subroutine is used to read .cac files which are used with the lammpsCAC format !This subroutine is used to read .cac files which are used with the lammpsCAC format

View File

@ -58,6 +58,15 @@ module mode_merge
if(shift_flag) call shift(new_starts, i) if(shift_flag) call shift(new_starts, i)
end do end do
!Now reset tags
do i = 1, atom_num
tag_atom(i) = i
end do
do i = 1, ele_num
tag_ele(i) = i
end do
return return
end subroutine merge end subroutine merge

View File

@ -50,10 +50,12 @@ module mode_metric
end select end select
!Now set the reference positions !Now set the reference positions
print *, "Combining positions"
call convert_positions(r_zero, npreal) call convert_positions(r_zero, npreal)
!Now calculate the neighbor list for the reference configuration !Now calculate the neighbor list for the reference configuration
call calc_neighbor(5.0_dp, r_zero, np) print *, "Getting initial neighbor list"
call calc_neighbor(rc_off, r_zero, np)
!Reset element and box !Reset element and box
call reset_data call reset_data
@ -67,6 +69,7 @@ module mode_metric
print *, "Error in mode_metric where number of points in ", i, "th file is ", np_temp, " and number of points in" & print *, "Error in mode_metric where number of points in ", i, "th file is ", np_temp, " and number of points in" &
// "reference file is", npreal // "reference file is", npreal
end if end if
print *, "Calculating metric for file number ", i
call calc_metric call calc_metric
!Now create the output file num and write out to xyz format !Now create the output file num and write out to xyz format
ppos = scan(trim(infiles(i)),".", BACK= .true.) ppos = scan(trim(infiles(i)),".", BACK= .true.)

View File

@ -55,11 +55,6 @@ module opt_group
call refinefill_group call refinefill_group
end if end if
if(displace)then
call get_group
call displace_group
end if
if(delete)then if(delete)then
call get_group call get_group
call delete_group call delete_group
@ -75,6 +70,10 @@ module opt_group
call change_group_type call change_group_type
end if end if
if(displace)then
call get_group
call displace_group
end if
end subroutine group end subroutine group
subroutine parse_group(arg_pos) subroutine parse_group(arg_pos)