#!/bin/bash
# Directorio de salida, coordinado con el graficador
OUTDIR="out/"
mkdir -p $OUTDIR
# Minima y maxima precision a calcular
minprec=10
maxprec=51
# Tabla con los algoritmos a usar, y la cantidad minima y maxima de
# iteraciones para el mismo
declare -A maxiter
declare -A miniter
miniter["babilonio"]=1
maxiter["babilonio"]=50
miniter["binomial"]=1
maxiter["binomial"]=200 # mas, da NaN
miniter["binomial_inc"]=1
maxiter["binomial_inc"]=200 # mas, da NaN
miniter["binomial_dec"]=1
maxiter["binomial_dec"]=600
miniter["fcont"]=1
maxiter["fcont"]=50
miniter["fcont_int"]=1
maxiter["fcont_int"]=50
# Algunos algoritmos son incrementales, y nos dan los resultados en cada
# iteración hasta que llegan a la indicada en la linea de comandos, para
# optimizar las corridas. Estos estan indicados en este arreglo.
declare -A isincr
isincr["binomial"]=1
isincr["binomial_inc"]=1
isincr["binomial_dec"]=1
algolist=${!maxiter[*]}
# Corremos y guardamos en archivos por algoritmo y por precision
for algo in $algolist; do
echo -n "$algo " >&2
for prec in `seq $minprec $maxprec`; do
echo -n "$prec " >&2
OF="$OUTDIR/OUT-$algo-prec:$prec"
rm -f "$OF"
# Si no es incremental, entonces hacemos nosotros a mano el
# loop para cada iteración; sino directamente corremos el
# programa con la máxima iteración buscada
if [ "${isincr[$algo]}" == "" ]; then
for iter in `seq ${miniter[$algo]} ${maxiter[$algo]}`; do
./$algo $prec $iter >> "$OF"
done
else
./$algo $prec ${maxiter[$algo]} > "$OF"
fi
# Obtenemos los errores de cada resultado
cat "$OF" | ./err.py > "$OF-err"
done
echo >&2
done
# Obtenemos archivos por iteracion, asegurandonos que esten bien ordenados
# para no confundir al graficador
echo "iter split"
for algo in $algolist; do
for iter in `seq 1 ${maxiter[$algo]}`; do
cat "$OUTDIR"/OUT-$algo-prec:*-err | egrep "^$iter " \
| sort -n -k 2 \
> "$OUTDIR/OUT-$algo-iter:$iter-err"
done
done
# Armamos un gran archivo para los plots 3D, dejando lineas en blanco entre
# las distintas "tiradas" de precision
echo "iter join"
for algo in $algolist; do
OF="$OUTDIR/OUT-$algo-all-err"
rm -f $OF
for f in "$OUTDIR"/OUT-$algo-prec:*-err; do
cat "$f" >> $OF
echo >> $OF
done
done