|
|
|
@ -204,7 +204,7 @@ module io
|
|
|
|
|
!This subroutine writes out a .lmp style dump file
|
|
|
|
|
character(len=100), intent(in) :: file
|
|
|
|
|
integer :: write_num, i, inod, ibasis
|
|
|
|
|
real(kind=dp) :: mass
|
|
|
|
|
real(kind=dp) :: mass, fcc_adjust(3,8), local_adjust(3,8), rout(3)
|
|
|
|
|
|
|
|
|
|
1 format(i16, ' Eight_Node', 4i16)
|
|
|
|
|
2 format(i16, ' Atom', 4i16)
|
|
|
|
@ -242,16 +242,32 @@ module io
|
|
|
|
|
write(11, '(a)') 'CAC Elements'
|
|
|
|
|
write(11, '(a)') ' '
|
|
|
|
|
|
|
|
|
|
!Set up the nodal adjustment variables for all the different element types. This adjusts the node centers
|
|
|
|
|
!from the center of the unit cell (as formulated in this code) to the corners of the unit cells
|
|
|
|
|
do inod = 1, 8
|
|
|
|
|
do i = 1,3
|
|
|
|
|
if(is_equal(cubic_cell(i, inod),0.0_dp)) then
|
|
|
|
|
fcc_adjust(i,inod) = -0.5_dp
|
|
|
|
|
else
|
|
|
|
|
fcc_adjust(i, inod) = 0.5_dp
|
|
|
|
|
end if
|
|
|
|
|
end do
|
|
|
|
|
end do
|
|
|
|
|
fcc_adjust = matmul(fcc_mat, fcc_adjust)
|
|
|
|
|
|
|
|
|
|
!Write element nodal positions
|
|
|
|
|
do i = 1, ele_num
|
|
|
|
|
select case(trim(adjustl(type_ele(i))))
|
|
|
|
|
case('fcc')
|
|
|
|
|
!Now orient the current adjustment vector to the correct orientation
|
|
|
|
|
local_adjust = matmul(sub_box_ori(:,:,sbox_ele(i)), fcc_adjust) * lapa(lat_ele(i))
|
|
|
|
|
!The first entry is the element specifier
|
|
|
|
|
write(11,1) i, basisnum(lat_ele(i)), size_ele(i), size_ele(i), size_ele(i)
|
|
|
|
|
do ibasis = 1, basisnum(lat_ele(i))
|
|
|
|
|
do inod = 1, 8
|
|
|
|
|
!Nodal information for every node
|
|
|
|
|
write(11,3) inod, ibasis, basis_type(ibasis,lat_ele(i)), r_node(:,ibasis,inod,i)
|
|
|
|
|
rout = r_node(:,ibasis,inod,i) + local_adjust(:,inod)
|
|
|
|
|
write(11,3) inod, ibasis, basis_type(ibasis,lat_ele(i)), rout
|
|
|
|
|
end do
|
|
|
|
|
end do
|
|
|
|
|
end select
|
|
|
|
@ -486,6 +502,8 @@ module io
|
|
|
|
|
write(11,*) lattice_types, (basisnum(i), i = 1, lattice_types), (ng_node(i), i = 1, lattice_types)
|
|
|
|
|
!Now for every lattice type write the basis atom types
|
|
|
|
|
write(11,*) ((basis_type(i,j), i = 1, basisnum(j)), j = 1, lattice_types)
|
|
|
|
|
!Now for every lattice type write the lattice parameters
|
|
|
|
|
write(11,*) (lapa(i), i = 1, lattice_types)
|
|
|
|
|
|
|
|
|
|
!Now write the numbers of elements and atoms
|
|
|
|
|
write(11,*) atom_num, ele_num
|
|
|
|
@ -498,7 +516,7 @@ module io
|
|
|
|
|
!Write out the elements, this is written in two stages, one line for the element and then 1 line for
|
|
|
|
|
!every basis at every node
|
|
|
|
|
do i = 1, ele_num
|
|
|
|
|
write(11, *) i, lat_ele(i), size_ele(i), type_ele(i)
|
|
|
|
|
write(11, *) i, lat_ele(i), size_ele(i), sbox_ele(i), type_ele(i)
|
|
|
|
|
do inod = 1, ng_node(lat_ele(i))
|
|
|
|
|
do ibasis =1, basisnum(lat_ele(i))
|
|
|
|
|
write(11,*) inod, ibasis, r_node(:, ibasis, inod, i)
|
|
|
|
@ -582,7 +600,7 @@ module io
|
|
|
|
|
real(kind = dp), dimension(6), intent(out) :: temp_box_bd
|
|
|
|
|
|
|
|
|
|
integer :: i, j, k, n, inod, ibasis, type, size, in_atoms, in_eles, new_atom_types, &
|
|
|
|
|
new_type_to_type(10), new_lattice_types
|
|
|
|
|
new_type_to_type(10), new_lattice_types, sbox
|
|
|
|
|
character(len=100) :: etype
|
|
|
|
|
real(kind=dp) :: r(3), newdisplace(3)
|
|
|
|
|
real(kind=dp), allocatable :: r_innode(:,:,:)
|
|
|
|
@ -623,8 +641,6 @@ module io
|
|
|
|
|
sub_box_array_bd(:,1,sub_box_num+1:) = sub_box_array_bd(:,1,sub_box_num+1:) + atom_num
|
|
|
|
|
sub_box_array_bd(:,2,sub_box_num+1:) = sub_box_array_bd(:,2,sub_box_num+1:) + ele_num
|
|
|
|
|
|
|
|
|
|
sub_box_num = sub_box_num + n
|
|
|
|
|
|
|
|
|
|
!Read in the number of atom types and all their names
|
|
|
|
|
read(11, *) new_atom_types, (new_type_to_name(i), i = 1, new_atom_types)
|
|
|
|
|
!Now fit these into the global list of atom types, after this new_type_to_type is the actual global
|
|
|
|
@ -646,6 +662,8 @@ module io
|
|
|
|
|
basis_type(i,j) = new_type_to_type(basis_type(i,j))
|
|
|
|
|
end do
|
|
|
|
|
end do
|
|
|
|
|
!Read the lattice parameters for every lattice type
|
|
|
|
|
read(11,*) (lapa(i), i = lattice_types+1, lattice_types+new_lattice_types)
|
|
|
|
|
!Read number of elements and atoms and allocate arrays
|
|
|
|
|
read(11, *) in_atoms, in_eles
|
|
|
|
|
call grow_ele_arrays(in_eles, in_atoms)
|
|
|
|
@ -659,7 +677,7 @@ module io
|
|
|
|
|
|
|
|
|
|
!Read the elements
|
|
|
|
|
do i = 1, in_eles
|
|
|
|
|
read(11, *) n, type, size, etype
|
|
|
|
|
read(11, *) n, type, size, sbox, etype
|
|
|
|
|
do inod = 1, ng_node(type)
|
|
|
|
|
do ibasis =1, basisnum(type)
|
|
|
|
|
read(11,*) j, k, r_innode(:, ibasis, inod)
|
|
|
|
@ -667,7 +685,7 @@ module io
|
|
|
|
|
end do
|
|
|
|
|
end do
|
|
|
|
|
type = type + lattice_types
|
|
|
|
|
call add_element(etype, size, type, r_innode)
|
|
|
|
|
call add_element(etype, size, type, sbox+n, r_innode)
|
|
|
|
|
end do
|
|
|
|
|
|
|
|
|
|
!Close the file being read
|
|
|
|
@ -676,5 +694,9 @@ module io
|
|
|
|
|
!Only increment the lattice types if there are elements, if there are no elements then we
|
|
|
|
|
!just overwrite the arrays
|
|
|
|
|
if(in_eles > 0) lattice_types = lattice_types + new_lattice_types
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sub_box_num = sub_box_num + n
|
|
|
|
|
|
|
|
|
|
end subroutine read_mb
|
|
|
|
|
end module io
|
|
|
|
|