First working version of model builder with several output file types and mode_create working
This commit is contained in:
parent
8217e8b51c
commit
ff3fc5e20a
6 changed files with 418 additions and 142 deletions
118
src/io.f90
118
src/io.f90
|
@ -64,10 +64,13 @@ module io
|
|||
outfilenum=outfilenum+1
|
||||
outfiles(outfilenum) = temp_outfile
|
||||
exit
|
||||
|
||||
case('vtk')
|
||||
outfilenum=outfilenum+1
|
||||
outfiles(outfilenum)=temp_outfile
|
||||
exit
|
||||
case default
|
||||
print *, "File type: ", trim(temp_outfile(scan(temp_outfile,'.',.true.):)), "not currently accepted. ", &
|
||||
"please input a filename with extension from following list: xyz."
|
||||
"please input a filename with extension from following list: xyz, lmp, vtk."
|
||||
read(*,*) temp_outfile
|
||||
|
||||
end select
|
||||
|
@ -81,6 +84,9 @@ module io
|
|||
|
||||
integer :: i
|
||||
|
||||
!Find max esize which will be needed later
|
||||
call set_max_esize
|
||||
|
||||
do i = 1, outfilenum
|
||||
!Pull out the extension of the file and call the correct write subroutine
|
||||
select case(trim(adjustl(outfiles(i)(scan(outfiles(i),'.',.true.)+1:))))
|
||||
|
@ -88,6 +94,8 @@ module io
|
|||
call write_xyz(outfiles(i))
|
||||
case('lmp')
|
||||
call write_lmp(outfiles(i))
|
||||
case('vtk')
|
||||
call write_vtk(outfiles(i))
|
||||
case default
|
||||
print *, "The extension ", trim(adjustl(outfiles(i)(scan(outfiles(i),'.',.true.)+1:))), &
|
||||
" is not accepted for writing. Please select from: xyz and try again"
|
||||
|
@ -138,10 +146,10 @@ module io
|
|||
end subroutine write_xyz
|
||||
|
||||
subroutine write_lmp(file)
|
||||
|
||||
integer :: write_num, i
|
||||
character(len=100), intent(in) :: file
|
||||
!This subroutine writes out a .lmp style dump file
|
||||
character(len=100), intent(in) :: file
|
||||
integer :: write_num, i, iatom, type_interp(max_basisnum*max_esize**3)
|
||||
real(kind=dp) :: r_interp(3, max_basisnum*max_esize**3), mass
|
||||
|
||||
open(unit=11, file=trim(adjustl(file)), action='write', status='replace',position='rewind')
|
||||
|
||||
|
@ -150,10 +158,13 @@ module io
|
|||
write(11, '(a)')
|
||||
!Calculate total atom number
|
||||
write_num = atom_num
|
||||
do i = 1,ele_num
|
||||
if(type_ele(i) == 'fcc') write_num = write_num + size_ele(i)**3
|
||||
end do
|
||||
!Write total number of atoms + elements
|
||||
write(11, '(i16, a)') write_num, ' atoms'
|
||||
!Write number of atom types
|
||||
write(11, '(i16, a)') 1, ' atom types'
|
||||
write(11, '(i16, a)') atom_types, ' atom types'
|
||||
|
||||
write(11,'(a)') ' '
|
||||
!Write box bd
|
||||
|
@ -163,15 +174,106 @@ module io
|
|||
|
||||
!Masses
|
||||
write(11, '(a)') 'Masses'
|
||||
|
||||
write(11, '(a)') ' '
|
||||
write(11, '(i16, f23.15)') 1, 63.546
|
||||
do i =1, atom_types
|
||||
call atommass(type_to_name(i),mass)
|
||||
write(11, '(i16, f23.15)') i, mass
|
||||
end do
|
||||
write(11, '(a)') ' '
|
||||
|
||||
!Write atom positions
|
||||
write(11, '(a)') 'Atoms'
|
||||
write(11, '(a)') ' '
|
||||
do i = 1, atom_num
|
||||
write(11, '(2i16, 3f23.15)') i, 1, r_atom(:,i)
|
||||
write(11, '(2i16, 3f23.15)') i, type_atom(i), r_atom(:,i)
|
||||
end do
|
||||
|
||||
!Write refined element atomic positions
|
||||
do i = 1, ele_num
|
||||
call interpolate_atoms(type_ele(i), size_ele(i), lat_ele(i), r_node(:,:,:,i), type_interp, r_interp)
|
||||
select case(trim(adjustl(type_ele(i))))
|
||||
case('fcc')
|
||||
do iatom = 1, basisnum(lat_ele(i))*size_ele(i)**3
|
||||
write(11, '(2i16, 3f23.15)') atom_num+iatom, type_interp(iatom), r_interp(:,iatom)
|
||||
end do
|
||||
end select
|
||||
end do
|
||||
end subroutine write_lmp
|
||||
|
||||
subroutine write_vtk(file)
|
||||
!This subroutine writes out a vtk style dump file
|
||||
integer :: i, j, inod, ibasis
|
||||
character(len=100), intent(in) :: file
|
||||
|
||||
1 format('# vtk DataFile Version 4.0.1', / &
|
||||
'CAC output -- cg', / &
|
||||
'ASCII')
|
||||
11 format('# vtk DataFile Version 4.0.1', / &
|
||||
'CACmb output -- atoms', / &
|
||||
'ASCII')
|
||||
2 format('DATASET UNSTRUCTURED_GRID')
|
||||
3 format('POINTS', i16, ' float')
|
||||
4 format(/'CELLS', 2i16)
|
||||
5 format(/'CELL_TYPES', i16)
|
||||
12 format(/'CELL_DATA', i16)
|
||||
16 format(/'POINT_DATA', i16)
|
||||
17 format('SCALARS weight float', / &
|
||||
'LOOKUP_TABLE default')
|
||||
18 format('SCALARS atom_type float', / &
|
||||
'LOOKUP_TABLE default')
|
||||
|
||||
20 format('SCALARS lattice_type float', /&
|
||||
'LOOKUP_TABLE default')
|
||||
|
||||
!First we write the vtk file containing the atoms
|
||||
open(unit=11, file='atoms_'//trim(adjustl(file)), action='write', status='replace',position='rewind')
|
||||
|
||||
write(11, 11)
|
||||
write(11, 2)
|
||||
write(11, 3) atom_num
|
||||
do i = 1, atom_num
|
||||
write(11, '(3f23.15)') r_atom(:,i)
|
||||
end do
|
||||
write(11,4) atom_num, atom_num*2
|
||||
do i = 1, atom_num
|
||||
write(11, '(2i16)') 1, i-1
|
||||
end do
|
||||
write(11, 5) atom_num
|
||||
do i = 1, atom_num
|
||||
write(11, '(i16)') 1
|
||||
end do
|
||||
write(11, 16) atom_num
|
||||
write(11, 18)
|
||||
do i = 1, atom_num
|
||||
write(11, '(i16)') type_atom(i)
|
||||
end do
|
||||
close(11)
|
||||
|
||||
open(unit=11, file='cg_'//trim(adjustl(file)), action='write', status='replace',position='rewind')
|
||||
write(11,1)
|
||||
write(11,2)
|
||||
write(11,3) node_num
|
||||
do i = 1, ele_num
|
||||
do inod=1, ng_node(lat_ele(i))
|
||||
do ibasis = 1, basisnum(lat_ele(i))
|
||||
write(11, '(3f23.1)') sum(r_node(:,:,inod,i),2)/basisnum(lat_ele(i))
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
write(11, 4) ele_num, ele_num + node_num
|
||||
do i =1, ele_num
|
||||
write(11, '(9i16)') ng_node(lat_ele(i)), (j, j = (i-1)*ng_node(lat_ele(i)), i*ng_node(lat_ele(i))-1)
|
||||
end do
|
||||
write(11,5) ele_num
|
||||
do i = 1, ele_num
|
||||
if(trim(adjustl(type_ele(i))) == 'fcc') write(11, '(i16)') 12
|
||||
end do
|
||||
write(11,12) ele_num
|
||||
write(11,20)
|
||||
do i = 1, ele_num
|
||||
write(11, '(i16)') lat_ele(i)
|
||||
end do
|
||||
close(11)
|
||||
end subroutine
|
||||
end module io
|
Loading…
Add table
Add a link
Reference in a new issue