Fix to opt_group which got the code working

development
Alex Selimov 4 years ago
parent 2c42520102
commit 29df0f9eb2

@ -606,7 +606,7 @@ module opt_group
!This command is used to refine the group to full atomistics !This command is used to refine the group to full atomistics
integer :: i, j, ie, type_interp(max_basisnum*max_esize**3), add_atom_num, orig_atom_num, m, n, o, esize, & integer :: i, j, ie, type_interp(max_basisnum*max_esize**3), add_atom_num, orig_atom_num, m, n, o, esize, &
ele(3,8), new_ele_num, ibasis, inod, vlat(3), nump_ele ele(3,8), new_ele_num, ibasis, inod, vlat(3), nump_ele, added_points
real(kind=dp) :: r_interp(3, max_basisnum*max_esize**3), rfill(3,max_basisnum,max_ng_node), ravg(3), ratom(3,max_basisnum) real(kind=dp) :: r_interp(3, max_basisnum*max_esize**3), rfill(3,max_basisnum,max_ng_node), ravg(3), ratom(3,max_basisnum)
logical :: lat_points(max_esize, max_esize, max_esize) logical :: lat_points(max_esize, max_esize, max_esize)
@ -623,7 +623,6 @@ module opt_group
lat_points(1:size_ele(ie),1:size_ele(ie),1:size_ele(ie)) = .true. lat_points(1:size_ele(ie),1:size_ele(ie),1:size_ele(ie)) = .true.
!Now calculate the number of elemets which are available for remeshing !Now calculate the number of elemets which are available for remeshing
call interpolate_atoms(type_ele(ie), size_ele(ie), lat_ele(ie), r_node(:,:,:,ie), type_interp, r_interp)
nump_ele = size_ele(ie)**3 nump_ele = size_ele(ie)**3
do o =1, size_ele(ie) do o =1, size_ele(ie)
do n = 1, size_ele(ie) do n = 1, size_ele(ie)
@ -644,6 +643,7 @@ module opt_group
!Now start the remeshing loop for the element !Now start the remeshing loop for the element
esize = size_ele(ie) - 2 esize = size_ele(ie) - 2
added_points=0
do while(esize > min_efillsize) do while(esize > min_efillsize)
if(nump_ele < min_efillsize**3) then if(nump_ele < min_efillsize**3) then
exit exit
@ -667,6 +667,7 @@ module opt_group
lat_points(m:m+esize-1, n:n+esize-1, o:o+esize-1) = .false. lat_points(m:m+esize-1, n:n+esize-1, o:o+esize-1) = .false.
call add_element(0,type_ele(ie), esize, lat_ele(ie), sbox_ele(ie), rfill) call add_element(0,type_ele(ie), esize, lat_ele(ie), sbox_ele(ie), rfill)
new_ele_num = new_ele_num + 1 new_ele_num = new_ele_num + 1
added_points = added_points + esize**3
end if end if
end do latloop end do latloop
@ -676,20 +677,25 @@ module opt_group
end if end if
end do end do
!Now add the leftover lattice points as atoms !Now add the leftover lattice points as atoms
do o = 1, size_ele(i) do o = 1, size_ele(ie)
do n = 1, size_ele(i) do n = 1, size_ele(ie)
do m = 1, size_ele(i) do m = 1, size_ele(ie)
if(lat_points(m,n,o)) then if(lat_points(m,n,o)) then
call get_interp_pos(m,n,o, ie, ratom(:,:)) call get_interp_pos(m,n,o, ie, ratom(:,:))
do ibasis = 1, basisnum(lat_ele(ie)) do ibasis = 1, basisnum(lat_ele(ie))
call apply_periodic(r_atom(:,ibasis)) call apply_periodic(ratom(:,ibasis))
call add_atom(0, basis_type(ibasis,lat_ele(ie)), sbox_ele(ie), ratom(:,ibasis)) call add_atom(0, basis_type(ibasis,lat_ele(ie)), sbox_ele(ie), ratom(:,ibasis))
added_points=added_points + 1
end do end do
end if end if
end do end do
end do end do
end do end do
if (added_points /= (size_ele(ie)**3)) then
print *, "Element ", ie, " is refined incorrectly in refinefill"
end if
end do end do
!Once all atoms are added we delete all of the elements !Once all atoms are added we delete all of the elements
call delete_elements(group_ele_num, element_index) call delete_elements(group_ele_num, element_index)

Loading…
Cancel
Save