|
|
|
@ -606,7 +606,7 @@ module opt_group
|
|
|
|
|
!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, &
|
|
|
|
|
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)
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
!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
|
|
|
|
|
do o =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
|
|
|
|
|
esize = size_ele(ie) - 2
|
|
|
|
|
added_points=0
|
|
|
|
|
do while(esize > min_efillsize)
|
|
|
|
|
if(nump_ele < min_efillsize**3) then
|
|
|
|
|
exit
|
|
|
|
@ -667,6 +667,7 @@ module opt_group
|
|
|
|
|
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)
|
|
|
|
|
new_ele_num = new_ele_num + 1
|
|
|
|
|
added_points = added_points + esize**3
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
end do latloop
|
|
|
|
@ -676,20 +677,25 @@ module opt_group
|
|
|
|
|
end if
|
|
|
|
|
end do
|
|
|
|
|
!Now add the leftover lattice points as atoms
|
|
|
|
|
do o = 1, size_ele(i)
|
|
|
|
|
do n = 1, size_ele(i)
|
|
|
|
|
do m = 1, size_ele(i)
|
|
|
|
|
do o = 1, size_ele(ie)
|
|
|
|
|
do n = 1, size_ele(ie)
|
|
|
|
|
do m = 1, size_ele(ie)
|
|
|
|
|
if(lat_points(m,n,o)) then
|
|
|
|
|
call get_interp_pos(m,n,o, ie, ratom(:,:))
|
|
|
|
|
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))
|
|
|
|
|
added_points=added_points + 1
|
|
|
|
|
end do
|
|
|
|
|
end if
|
|
|
|
|
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
|
|
|
|
|
!Once all atoms are added we delete all of the elements
|
|
|
|
|
call delete_elements(group_ele_num, element_index)
|
|
|
|
|