quantum-espresso/PW/tools/pwi2xsf.sh

125 lines
3.3 KiB
Bash
Executable File

#!/bin/sh
#############################################################################
# Author: #
# ------ #
# Anton Kokalj Email: Tone.Kokalj@ijs.si #
# #
# Copyright (c) 2004 by Anton Kokalj #
#############################################################################
#------------------------------------------------------------------------
# This file is distributed under the terms of the
# GNU General Public License. See the file `License'
# in the root directory of the present distribution,
# or http://www.gnu.org/copyleft/gpl.txt .
#------------------------------------------------------------------------
# make sure there is no locale setting creating unneeded differences.
LC_ALL=C
export LC_ALL
#
# pwi2xsf.sh: PW-input to XSF converison
#
# Usage: pwi2xsf [-r] pw-input-file
#
# Last major rewrite by Tone Kokalj on Mon Feb 9 12:48:10 CET 2004
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if [ "$#" -lt 1 ]; then
echo "
Usage: pwi2xsf.sh [-r] pw-input
Option for PWscf version < 1.2:
-r ... one must specify i.e. ityp->nat conversion, and the corresponding
data are writen to file nuclei.charges. The -r flag deletes this
file.
"
exit 1
fi
r=0
if [ "$1" = "-r" ]; then
r=1
shift
fi
#
# check if we have OLD or NEW PW.X input format
#
new_format1=`grep 'ATOMIC_POSITIONS' $1`
new_format2=`grep -i '&system' $1`
if [ "$new_format1" != "" -a "$new_format2" != "" ]; then
# we have NEW PW.X input format
#
cat $1 | awk 'BEGIN {RS=",";} {print $0}' | awk '
BEGIN {
calculation="";
num_of_images="";
nml_end=0;
nml_end_string="";
}
toupper($0) ~ /&SYSTEM/ { print; }
/=/ {
if ( toupper($1) ~ /^IBRAV($|=)|^CELLDM\([1-6]\)($|=)|^NAT($|=)|^A($|=)|^B($|=)|^C($|=)|^COSAB($|=)|^COSAC($|=)|^COSBC($|=)/ ) { print; }
if ( toupper($1) ~ /^CALCULATION($|=)/ ) { calculation=toupper($0); }
if ( toupper($1) ~ /^STRING_METHOD($|=)/ ) { calculation="calculation=" toupper($3); }
if ( toupper($1) ~ /^NUM_OF_IMAGES($|=)/ ) { num_of_images=toupper($0); }
}
/ATOMIC_POSITIONS|CELL_PARAMETERS|FIRST_IMAGE/ {
if ( !nml_end) {
# first finish the namelist
nml_end=1;
if (calculation != "") print calculation;
if (num_of_images != "") print num_of_images;
print nml_end_string;
}
# now print the current record
print_line=1;
print toupper($0);
next;
}
toupper($0) ~ /&END|^\/|^ \// {
nml_end_string=$0;
}
/a*/ {
if ( print_line == 1 ) {
print toupper($0);
}
}'> pw.$$
else
# we have OLD PW.X input format
echo "
------------------------------------------------------------------------
ERROR: This is NOT a PW-input or an input for an older PW version
------------------------------------------------------------------------
"
exit 1
fi
#
# execute $PWI2XSF fortran program and print the XSF file
#
if test -f $XCRYSDEN_TOPDIR/bin/$PWI2XSF ; then
$XCRYSDEN_TOPDIR/bin/pwi2xsf < pw.$$ | tee pwi2xsf.xsf_out
else
pwi2xsf.x < pw.$$ | tee pwi2xsf.xsf_out
fi
rm -f pw.$$
if [ "$r" -eq 1 ]; then
if [ -f nuclei.charges ]; then rm nuclei.charges; fi
fi
exit 0