mirror of https://gitlab.com/QEF/q-e.git
183 lines
4.7 KiB
Fortran
183 lines
4.7 KiB
Fortran
subroutine path_gen_inputs(parse_file_name,engine_prefix,nimage,root,comm)
|
|
!
|
|
USE io_files, only : find_free_unit
|
|
USE mp_global, only : mp_rank
|
|
|
|
implicit none
|
|
!
|
|
character(len=*), intent(in) :: parse_file_name
|
|
character(len=*), intent(in) :: engine_prefix
|
|
integer, intent(out) :: nimage
|
|
integer, intent(in) :: root
|
|
integer, intent(in) :: comm
|
|
!
|
|
character(len=256) :: dummy, dummy2
|
|
integer :: i, j
|
|
integer :: parse_unit, neb_unit
|
|
integer, allocatable :: unit_tmp(:)
|
|
integer :: unit_tmp_i
|
|
character(len=10) :: a_tmp
|
|
|
|
integer :: myrank
|
|
|
|
|
|
myrank = mp_rank(comm)
|
|
|
|
parse_unit = find_free_unit()
|
|
open(unit=parse_unit,file=trim(parse_file_name),status="old")
|
|
|
|
|
|
! ---------------------------------------------------
|
|
! NEB INPUT PART
|
|
! ---------------------------------------------------
|
|
|
|
i=0
|
|
nimage = 0
|
|
|
|
neb_unit = find_free_unit()
|
|
|
|
open(unit=neb_unit,file='neb.dat',status="unknown")
|
|
|
|
read(parse_unit,*) dummy
|
|
if(trim(dummy)=="BEGIN") then
|
|
do while (trim(dummy)/="END")
|
|
read(parse_unit,*) dummy
|
|
if(trim(dummy)=="BEGIN_PATH_INPUT") then
|
|
|
|
read(parse_unit,'(A256)') dummy
|
|
|
|
do while (trim(dummy)/="END_PATH_INPUT")
|
|
if(myrank==root) write(neb_unit,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
endif
|
|
if(trim(dummy)=="FIRST_IMAGE") then
|
|
nimage = nimage + 1
|
|
endif
|
|
if(trim(dummy)=="INTERMEDIATE_IMAGE") then
|
|
nimage = nimage + 1
|
|
endif
|
|
if(trim(dummy)=="LAST_IMAGE") then
|
|
nimage=nimage+1
|
|
endif
|
|
enddo
|
|
else
|
|
write(0,*) "key word BEGIN missing"
|
|
endif
|
|
close(neb_unit)
|
|
!------------------------------------------------
|
|
!
|
|
!
|
|
! ------------------------------------------------
|
|
! ENGINE INPUT PART
|
|
! ------------------------------------------------
|
|
|
|
allocate(unit_tmp(1:nimage))
|
|
unit_tmp(:) = 0
|
|
|
|
do i=1,nimage
|
|
unit_tmp(i) = find_free_unit()
|
|
enddo
|
|
|
|
do i=1,nimage
|
|
if(i>=1.and.i<10) then
|
|
write(a_tmp,'(i1)') i
|
|
elseif(i>10.and.i<100) then
|
|
write(a_tmp,'(i2)') i
|
|
elseif(i>100.and.i<1000) then
|
|
write(a_tmp,'(i3)')
|
|
endif
|
|
|
|
unit_tmp_i = unit_tmp(i)
|
|
|
|
open(unit=unit_tmp_i,file=trim(engine_prefix)//trim(a_tmp)//".in")
|
|
|
|
REWIND(parse_unit)
|
|
|
|
read(parse_unit,*) dummy
|
|
if(trim(dummy)=="BEGIN") then
|
|
do while (trim(dummy)/="END")
|
|
read(parse_unit,*) dummy
|
|
if(trim(dummy)=="BEGIN_ENGINE_INPUT") then
|
|
|
|
read(parse_unit,'(A256)') dummy
|
|
|
|
do while (trim(dummy)/="BEGIN_POSITIONS")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
if(i==1) then
|
|
do while (trim(dummy)/="FIRST_IMAGE")
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
if(trim(dummy)=="FIRST_IMAGE") then
|
|
read(parse_unit,'(A256)') dummy
|
|
do while (trim(dummy)/="INTERMEDIATE_IMAGE".and.(trim(dummy)/="LAST_IMAGE"))
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
do while (trim(dummy)/="END_POSITIONS")
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
read(parse_unit,'(A256)') dummy
|
|
do while (trim(dummy)/="END_ENGINE_INPUT")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
endif
|
|
endif
|
|
!
|
|
if(i==nimage) then
|
|
do while (trim(dummy)/="LAST_IMAGE")
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
if(trim(dummy)=="LAST_IMAGE") then
|
|
read(parse_unit,'(A256)') dummy
|
|
do while (trim(dummy)/="END_POSITIONS")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
read(parse_unit,'(A256)') dummy
|
|
do while (trim(dummy)/="END_ENGINE_INPUT")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
endif
|
|
endif
|
|
!
|
|
if(i/=nimage.and.i/=1) then
|
|
do j=2,i
|
|
do while (trim(dummy)/="INTERMEDIATE_IMAGE")
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
enddo
|
|
if(trim(dummy)=="INTERMEDIATE_IMAGE") then
|
|
read(parse_unit,'(A256)') dummy
|
|
do while ((trim(dummy)/="LAST_IMAGE").and.trim(dummy)/="INTERMEDIATE_IMAGE")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
do while (trim(dummy)/="END_POSITIONS")
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
read(parse_unit,'(A256)') dummy
|
|
do while (trim(dummy)/="END_ENGINE_INPUT")
|
|
if(myrank==root) write(unit_tmp_i,*) trim(dummy)
|
|
read(parse_unit,'(A256)') dummy
|
|
enddo
|
|
endif
|
|
endif
|
|
!
|
|
endif
|
|
enddo
|
|
endif
|
|
|
|
close(unit_tmp_i)
|
|
enddo
|
|
|
|
deallocate(unit_tmp)
|
|
|
|
close(parse_unit)
|
|
!
|
|
end subroutine path_gen_inputs
|