Working read from pycac.out file format
This commit is contained in:
parent
dadc1f7a4a
commit
5949f04103
7 changed files with 213 additions and 16 deletions
|
@ -13,6 +13,8 @@ module elements
|
|||
character(len=100), allocatable :: type_ele(:) !Element type
|
||||
integer, allocatable :: size_ele(:), lat_ele(:), sbox_ele(:), tag_ele(:) !Element size
|
||||
real(kind=dp), allocatable :: r_node(:,:,:,:) !Nodal position array
|
||||
!Element result data structures
|
||||
real(kind=8), allocatable :: force_node(:,:,:,:), virial_node(:,:,:,:), energy_node(:,:,:)
|
||||
|
||||
integer, save :: ele_num !Number of elements
|
||||
integer, save :: node_num !Total number of nodes
|
||||
|
@ -22,6 +24,8 @@ module elements
|
|||
integer, allocatable :: sbox_atom(:), tag_atom(:)
|
||||
real(kind =dp),allocatable :: r_atom(:,:) !atom position
|
||||
integer :: atom_num=0 !Number of atoms
|
||||
!Atom result data structures information
|
||||
real(kind=8), allocatable :: force_atom(:,:), virial_atom(:,:), energy_atom(:)
|
||||
|
||||
!Mapping atom type to provided name
|
||||
character(len=2), dimension(10) :: type_to_name
|
||||
|
@ -669,17 +673,17 @@ module elements
|
|||
esize = size_ele(ie)
|
||||
select case(iface)
|
||||
case(1)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, -10.0_dp**-2.0_dp /)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, -10.0_dp**(-2.0_dp) /)
|
||||
case(2)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, -10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, -10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp /)
|
||||
case(3)
|
||||
pos = (/ (esize-1)+10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
pos = (/ (esize-1)+10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
case(4)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp /)
|
||||
case(5)
|
||||
pos = (/ -10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
pos = (/ -10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
|
||||
case(6)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**-2.0_dp /)
|
||||
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**(-2.0_dp) /)
|
||||
end select
|
||||
|
||||
!Now transform it to real space and adjust it to the position of the element in the first node.
|
||||
|
@ -736,4 +740,57 @@ module elements
|
|||
|
||||
end subroutine lattice_map
|
||||
|
||||
subroutine alloc_dat_arrays(n,m)
|
||||
!This subroutine used to provide initial allocation for the atom and element data arrays
|
||||
integer, intent(in) :: n,m !n-size of element arrays, m-size of atom arrays
|
||||
integer :: allostat
|
||||
|
||||
!Allocate element arrays
|
||||
if (n > 0) then
|
||||
allocate(force_node(3,max_basisnum, max_ng_node, n), &
|
||||
virial_node(6,max_basisnum, max_ng_node, n), &
|
||||
energy_node(max_basisnum,max_ng_node,n), &
|
||||
stat=allostat)
|
||||
if(allostat > 0) then
|
||||
print *, "Error allocating element data arrays in mode_metric becaus of:", allostat
|
||||
stop
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
if (m > 0) then
|
||||
allocate(force_atom(3, m), &
|
||||
virial_atom(6, m), &
|
||||
energy_atom(m), &
|
||||
stat=allostat)
|
||||
if(allostat > 0) then
|
||||
print *, "Error allocating atom data arrays in mode_metric becaus of:", allostat
|
||||
stop
|
||||
end if
|
||||
end if
|
||||
|
||||
end subroutine
|
||||
|
||||
subroutine add_atom_data(ia, eng, force, virial)
|
||||
!Function which sets the atom data arrays
|
||||
integer, intent(in) :: ia
|
||||
real(kind=dp), intent(in) :: eng, force(3), virial(6)
|
||||
|
||||
energy_atom(ia) = eng
|
||||
force_atom(:,ia) = force(:)
|
||||
virial_atom(:,ia) = virial(:)
|
||||
return
|
||||
end subroutine add_atom_data
|
||||
|
||||
subroutine add_element_data(ie, eng, force, virial)
|
||||
!Function which sets the element data arrays
|
||||
integer, intent(in) :: ie
|
||||
real(kind=dp), intent(in) :: eng(max_basisnum, max_ng_node), &
|
||||
force(3,max_basisnum, max_ng_node), &
|
||||
virial(6,max_basisnum,max_ng_node)
|
||||
energy_node(:,:,ie) = eng
|
||||
force_node(:,:,:,ie) = force
|
||||
virial_node(:,:,:,ie) = virial
|
||||
return
|
||||
end subroutine add_element_data
|
||||
end module elements
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue