TABLE OF CONTENTS


::pwtk::nebi::POSITIONS_fromPATH

SYNOPSIS

proc ::pwtk::nebi::POSITIONS_fromPATH {pathFile} {

PURPOSE

Load POSITIONS from neb.x PATH file.

BEWARE

Atoms are fixed according to the if_pos(:) specs in the PATH file.

SOURCE

    ::pwtk::fileMustExist $pathFile "neb.x path file"

    set pathL [split [::pwtk::readFile $pathFile] \n]
    # trim the empty elements at the end
    while { [lindex $pathL end] eq "" } {
        set pathL [lrange $pathL 0 end-1]
    }
    set ims   [lsearch -all $pathL Image:*]
    set nImage [llength $ims]

    for {set i 1} {$i <= $nImage} {incr i} {
        set i1($i) [expr [lindex $ims $i-1] + 2]
        set i2($i) [expr [lindex $ims $i] - 1]
    }
    # the above fails for i2($nImage), hence recalculate it:
    set ii [expr $nImage - 1]
    set i2($nImage) [expr $i1($nImage) + $i2($ii) - $i1($ii)]

    set natp [expr $i2(1) - $i1(1) + 1]
    set nati [::pwtk::nebi::getNAtoms]

    if { $natp != $nati } {
        ::pwtk::error "the number of input atoms ($nati) differ from the number of atoms in the path file ($natp);
cannot assign atomic symbols to atomic positions from the '$pathFile' path file" 1
    }
    
    set symbols [::pwtk::nebi::getAtmSymbList]    

    # 1st image
    
    set image   [join [lmap s $symbols xyz [lrange $pathL $i1(1) $i2(1)] {
        format $::pwtk::fmt_atmPos(7) {*}[concat $s [lrange $xyz 0 2] [lrange $xyz 6 8]]
    }] \n]     
    set positions "
FIRST_IMAGE
ATOMIC_POSITIONS (bohr)
$image
"
    # intermediate images
    
    for {set i 2} {$i < $nImage} {incr i} {
        set image [join [lmap s $symbols xyz [lrange $pathL $i1($i) $i2($i)] {            
            format $::pwtk::fmt_atmPos(4) {*}[concat $s [lrange $xyz 0 2]]
        }] \n]     
        append positions "
INTERMEDIATE_IMAGE
ATOMIC_POSITIONS (bohr)
$image
"
    }
    
    # last image
    
    set image [join [lmap s $symbols xyz [lrange $pathL $i1($nImage) $i2($nImage)] {
        format $::pwtk::fmt_atmPos(4) {*}[concat $s [lrange $xyz 0 2]]
    }] \n]     
    append positions "
LAST_IMAGE
ATOMIC_POSITIONS (bohr)
$image
"
    # input positions
    
    POSITIONS $positions
}