Linux Tips 리눅스 팁

running bc

a=$(bc -l << EOF

1 + 2.0

quit

EOF

)

echo $a

b=6.646142165465414

c=0.21654841684516

a=$(echo "scale=7; $b + $c" | bc)

echo $a

=======================================================

calculate integers

a=2

b=3

c=`expr $a - 1`

echo $c

=======================================================

Change file names of QE projwfc.x (pdos) output

#!/bin/bash

for fin in *.pdos_atm#*\(*\)_wfc#?\(?\)

do

f1=${fin/.pdos_atm#/ }

f2=${f1/_wfc#/ }

f3=${f2//\(/ }

f4=${f3//\)/ }

prefix=$(echo $f4 | awk '{print $1}')

iatm=$(echo $f4 | awk '{print $2}')

iatmtyp=$(echo $f4| awk '{print $3}')

iorbl=$(echo $f4 | awk '{print $4}')

iorb=$(echo $f4 | awk '{print $5}')

mv ${prefix}.pdos_atm#${iatm}\(${iatmtyp}\)_wfc#${iorbl}\(${iorb}\) pdos_atm_${iatm}_${iatmtyp}_${iorb}

done

mv ${prefix}.pdos_tot pdos_tot

=======================================================

read line by line

grep -v prefix sto_ncpp.scf.inp | grep -v nat | grep -v ntyp > INPTTMP

file='INPTTMP'

exec 3<&0

exec 0<$file

while read line

do

if [ "$line" == "&control" ] ; then

echo $line > FFFF

echo " prefix = xQE " >> FFFF

while read line

do

if [ "$line" == "/" ] ; then

echo $line >> FFFF

break

fi

echo " $line" >> FFFF

done

fi

done

exec 0<&3

Auto re-run

SIESTA

#!/bin/sh

#PBS -N Qdisloc409

#PBS -q full

#PBS -l nodes=1:ppn=32:full

NUMBER=`cat $PBS_NODEFILE | wc -l`

cp $PBS_NODEFILE $PBS_O_WORKDIR/PBS_NODEFILE

cd $PBS_O_WORKDIR

#mpirun -machinefile $PBS_NODEFILE -np $NUMBER $siesta -fdf ${finp} > ${fout}

fprefix="disloc409"

finp=${fprefix}.fdf

#finp="sto110disloc409_+O.fdf"

imax=5

irun=1

while [ $irun -le $imax ] ; do

fout=${fprefix}.${irun}.out

mpirun -machinefile $PBS_NODEFILE -np $NUMBER $siesta -fdf ${finp} > ${fout}

sleep 10

checkend=$(grep "End of run" ${fout})

if [ ${#checkend} -lt 5 ] ; then ## Abnormal exit

lastscf=$(grep "scf: " ${fout} | tail -1 ) ## check if saved DM is good to reuse

dmax==$(echo $lastscf | awk '{print $6}')

AAA=$(echo "$dmax < 0.01" |bc -l)

if [ !${AAA} ] ; then

rm -f *.DM

fi

((irun++))

else

break

fi

done

exit 0

======================================================

VASP

#!/bin/sh

#PBS -N Q

#PBS -q full

#PBS -l nodes=1:ppn=32:full

NUMBER=`cat $PBS_NODEFILE | wc -l`

cd $PBS_O_WORKDIR

fout="stdout.log"

imax=5

irun=1

while [ $irun -le $imax ] ; do

mpirun -machinefile $PBS_NODEFILE -np $NUMBER -genv OMP_NUM_THREADS=1 $vasp > ${fout}

sleep 10 # Waiting few seconds until writting thing on files

checkend=$(grep "General timing " OUTCAR)

if [ ${#checkend} -lt 5 ] ; then ## Abnormal exit

mv ${fout} ${fout}_${irun}

mv OUTCAR OUTCAR_${irun}

cp POSCAR POSCAR_${irun}

if [ -s CONTCAR ] ; then

cp CONTCAR POSCAR

fi

((irun++))

else

break

fi

done

if [ $irun -gt 1 ] && [ -s OUTCAR ] ; then

cp OUTCAR OUTCAR_${irun}

cp POSCAR POSCAR_${irun}

fi

exit 0