Dolyapunov.sh
From DftWiki
--D. Thiebaut 17:04, 14 September 2010 (UTC)
Example of a bash script illustrating many features of the bash shell.
#! /bin/bash
# dolyapunov.sh
# D. Thiebaut
# syntax: dolyapunov.sh Dim delta interval tau
#
# Display syntax in case user didn't specify any
#
if [ "$#" -eq "0" ]
then
echo "Syntax: dolyapunov.sh Dim delta interval tau"
echo " Dim -- dimension of embedding"
echo " delta -- when creating embedding, specifies distance"
echo " separating data used for coordinates"
echo " interval -- interval used in sampling. Use 4."
echo " tau -- distance separating successive x-value of"
echo " points, when embedding is performed"
exit 1
fi
#
# Record command line
#
DIM=$1
DELTA=$2
#IVAL=$3
IVAL=4
TAU=$4
echo dolaypunov Dim=$DIM delta=$DELTA interval=$IVAL tau=$TAU
echo "===================================================" >> ~/log
date >> ~/log
echo dolyapunov Dim=$DIM delta=$DELTA interval=$IVAL tau=$TAU >> ~/log
echo "===================================================" >> ~/log
FILENAME=laser_"$DIM"_"$DELTA"_"$TAU"
if [ ! -e $FILENAME ]; then
echo embed -f laser.dat -D $DIM -delta $DELTA -tau $TAU \> $FILENAME
echo embed -f laser.dat -D $DIM -delta $DELTA -tau $TAU \> $FILENAME >> ~/log
embed -f laser.dat -D $DIM -delta $DELTA -tau $TAU > $FILENAME
fi
#
# This next part will loop and splines two dimensions of the embeded
# file at a time
#
NUM=3
COUNT1=1
COUNT2=2
if [ ! -e "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al ]; then
while [ "$COUNT2" -lt "$DIM" ]; do
echo "{ print "$"$COUNT1, "$"$COUNT2, "$"$COUNT2 }" > script.lyapunov
# remember than Junheng's spline program assumes 3-dim files
# treat only 2 columns at a time
DUMMY=`cat script.lyapunov`
echo "awk $DUMMY \> "$FILENAME"."$COUNT1"."$COUNT2"" >> ~/log
awk -f script.lyapunov $FILENAME > "$FILENAME"."$COUNT1"."$COUNT2"
# Call Junheng's SamNAl shell
if [ ! -e "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al ]; then
echo SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL
echo SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL >> ~/log
SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL
fi
# update counters
COUNT1=`expr $COUNT1 + 2`
COUNT2=`expr $COUNT2 + 2`
done
#
# if the Dimension specified was odd, treat last 2 columns together
#
if [ "$COUNT1" -le "$DIM" ]; then
if [ "$COUNT2" -ge "$DIM" ]; then
COUNT1=`expr $DIM - 1`
COUNT2=$DIM
echo "{ print "$"$COUNT1, "$"$COUNT2, "$"$COUNT2 }" > script.lyapunov
DUMMY=`cat script.lyapunov`
echo "awk $DUMMY \> "$FILENAME"."$COUNT1"."$COUNT2"" >> ~/log
awk -f script.lyapunov $FILENAME > "$FILENAME"."$COUNT1"."$COUNT2"
# Call Junheng's SamNAl shell
if [ ! -e "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al ]; then
echo SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL
echo SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL >> ~/log
SamNAl "$FILENAME"."$COUNT1"."$COUNT2" $IVAL
fi
fi
fi
fi
#
# merge the files generated
# To do so, create a variable equal to the command
# merge file1 n1 n2 file2 n3 n4 ...
#
if [ ! -e "$FILENAME"_"$IVAL".al ]; then
COUNT1=1
COUNT2=2
COMMANDSTRING="merge "
while [ "$COUNT2" -lt "$DIM" ]; do
COMMANDSTRING=`echo $COMMANDSTRING "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al $COUNT1 $COUNT2`
COUNT1=`expr $COUNT1 + 2`
COUNT2=`expr $COUNT2 + 2`
done
if [ "$COUNT1" -le "$DIM" ]; then
if [ "$COUNT2" -ge "$DIM" ]; then
COUNT1=`expr $DIM - 1`
COUNT2=$DIM
#COMMANDSTRING=`echo $COMMANDSTRING "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al $COUNT1 $COUNT2`
COMMANDSTRING=`echo $COMMANDSTRING "$FILENAME"."$COUNT1"."$COUNT2"_"$IVAL".al 0 $COUNT2`
fi
fi
fi
#
# Now we can do the merge
#
echo $COMMANDSTRING \> "$FILENAME"_"$IVAL".al >> ~/log
echo $COMMANDSTRING \> "$FILENAME"_"$IVAL".al
$COMMANDSTRING > "$FILENAME"_"$IVAL".al
if [ ! -s "$FILENAME"_"$IVAL".al ]; then
echo "$FILENAME"_"$IVAL".al has length 0
echo COMMANDSTRING = $COMMANDSTRING
echo "$FILENAME"_"$IVAL".al has length 0 >> ~/log
echo COMMANDSTRING = $COMMANDSTRING >> ~/log
exit
fi
if [ ! -e "$FILENAME"_"$IVAL".al.bin ]; then
echo d2i \< "$FILENAME"_"$IVAL".al \> "$FILENAME"_"$IVAL".al.bin >> ~/log
echo d2i \< "$FILENAME"_"$IVAL".al \> "$FILENAME"_"$IVAL".al.bin
d2i < "$FILENAME"_"$IVAL".al > "$FILENAME"_"$IVAL".al.bin
fi
#
#
#
NUM=10000
LAMBDA="lambda = -Infinity"
while [ "$LAMBDA" = "lambda = -Infinity" ]; do
echo lyapunov -f "$FILENAME"_"$IVAL".al.bin -N $NUM -D $DIM -T $TAU
LAMBDA=`lyapunov -f "$FILENAME"_"$IVAL".al.bin -N $NUM -D $DIM -T $TAU`
echo %%% Dim $DIM delta $DELTA interval $IVAL tau $TAU lambda $LAMBDA >> ~/log
echo Dim $DIM delta $DELTA interval $IVAL tau $TAU lambda $LAMBDA
NUM=`expr $NUM \/ 2 `
if [ "$NUM" -lt 50 ]; then
exit
fi
done
