#!/bin/bash
echo divagcv:///////////////////////////////////////////
echo divagcv:       Generalized Cross Validation
echo divagcv:///////////////////////////////////////////
echo ' '

divagcvlog='./output/divagcv.log'
echo divagcv://///////////////////////////////////////// > $divagcvlog
echo divagcv:       Generalized Cross Validation >> $divagcvlog
echo divagcv://///////////////////////////////////////// >> $divagcvlog
echo ' ' >> $divagcvlog


cp ./input/param.par  ./input/param.par.ori
if [ -f ./input/valatxy.coord.ori ]
then
rm -f ./input/valatxy.coord.ori
fi
if [ -f ./input/valatxy.coord ]
then
mv ./input/valatxy.coord ./input/valatxy.coord.ori
fi
rm -f ./output/gcv.dat
if [ -f ./input/gcvsampling.dat ]
then
#Create mesh once if no mesh present
if [ -f ./meshgenwork/fort.22 ]
then 
echo divagcv:=========================================================================== >> $divagcvlog
echo divagcv:Mesh files aready exist, hope they are correct: otherwise exectute divamesh >> $divagcvlog
echo divagcv:=========================================================================== >> $divagcvlog
else
divamesh
fi
else
echo divagcv:Need to provide gcvsampling.dat in ./input ! >> $divagcvlog
echo divagcv:Need to provide gcvsampling.dat in ./input !
fi
ijm=0
for gcv in `cat ./input/gcvsampling.dat`
do
echo ' ' >> $divagcvlog
echo ============================================= >> $divagcvlog
echo divagcv:============================================= >> $divagcvlog
echo divagcv:Generalized Cross Validation  with value $gcv >> $divagcvlog
echo divagcv:============================================= >> $divagcvlog
let ijm=$ijm+1
head -17 ./input/param.par.ori > bidon
echo 1 >> bidon
echo   >> bidon
echo 1 >> bidon
echo   >> bidon
echo -99 >> bidon
echo >> bidon
echo $gcv >> bidon
#tail -2 ./input/param.par.ori >> bidon
# no error field
echo >> bidon
echo 0 >> bidon
mv bidon ./input/param.par

divacalc
 cat  $divagcvlog ./output/divacalc.log > bidon
 mv bidon $divagcvlog

FILENAME=./divawork/fort.77
{ 
read gcvval 
} < $FILENAME
FILENAME=bidon
echo $gcv > bidon
{ 
read gcv 
} < $FILENAME
rm bidon
echo divagcv:$gcvval >> $divagcvlog
echo divagcv:$gcv $gcvval >> $divagcvlog

echo $gcv $gcvval >> ./output/gcv.dat
########for testing
itestGCV=0
itestsingle=0
if [ "$itestGCV" != "0" ] 
then
cp ./output/fieldatdatapoint.anl ./divawork/fort.71
cp ./input/data.dat ./divawork/fort.20
cd ./divawork
../input/GCVtest/exactgcv.a
cat fort.30 >> ../input/GCVtest/exactgcv.dat
cd ..
fi
if [ "$itestsingle" != "0" ]
then
cat ./output/fieldatdatapoint.anl >> ./input/GCVtest/localvalue.dat
fi
########end testing
echo divagcv:============================================= >> $divagcvlog
echo divagcv:Finished working with value $gcv >> $divagcvlog
echo divagcv:============================================= >> $divagcvlog
echo ' ' >> $divagcvlog
done
mv ./input/param.par.ori ./input/param.par
if [ -f ./input/valatxy.coord.ori ]
then
mv ./input/valatxy.coord.ori ./input/valatxy.coord
fi
cp ./output/gcv.dat ./divawork/fort.11
cd divawork
echo divagcv:Looking for the minimum of GCV  >> $divagcvlog
echo ' ' >> $divagcvlog
if [ -f ../input/gcvsampling.dat ] 
then 
../../bin/findmin.a >> ../output/diva.log
if [ $? -ne 0 ];then
echo ' '
echo --------------------------------------------
echo A problem was encountered during execution !
echo          divagcv      findmin.a
echo Check execution track
echo --------------------------------------------
echo ' ' >> ../$divagcvlog
echo -------------------------------------------- >> ../$divagcvlog
echo A problem was encountered during execution ! >> ../$divagcvlog
echo          divagcv      findmin.a >> ../$divagcvlog
echo Check execution track >> ../$divagcvlog
echo -------------------------------------------- >> ../$divagcvlog
echo ' ' >> ../output/diva.log
echo -------------------------------------------- >> ../output/diva.log
echo A problem was encountered during execution ! >> ../output/diva.log
echo          divagcv      findmin.a  >> ../output/diva.log
echo Check execution track >> ../output/diva.log
echo -------------------------------------------- >> ../output/diva.log
fi
else
echo ' ' >> ../$divagcvlog
echo -------------------------------------------- >> ../$divagcvlog
echo A problem was encountered during execution ! >> ../$divagcvlog
echo Check execution track >> ../$divagcvlog
echo -------------------------------------------- >> ../$divagcvlog
echo ' '
echo --------------------------------------------
echo A problem was encountered during execution !
echo Check execution track
echo --------------------------------------------
fi
mv fort.12 ../output/gcvsnvar.dat
echo ' ' >> ../$divagcvlog
echo ---------------------------------------- >> ../$divagcvlog
echo 'GCV finished' >> ../$divagcvlog
echo 'Estimated value of SNR = ' $(awk 'FNR == 2 { print; exit }' ../output/gcvsnvar.dat)
echo Results written in ./output/gcvsnvar.dat >> ../$divagcvlog
echo ---------------------------------------- >> ../$divagcvlog
echo ' ' >> ../$divagcvlog
echo ----------------------------------------------------- >> ../$divagcvlog
echo 'Creating adapted param.par in ./output/param.par.gcv' >> ../$divagcvlog
echo ----------------------------------------------------- >> ../$divagcvlog
head -23 ../input/param.par  > ../output/param.par.gcv
head -2 ../output/gcvsnvar.dat | tail -1 >> ../output/param.par.gcv
head -25 ../input/param.par | tail -1 >> ../output/param.par.gcv
head -4 ../output/gcvsnvar.dat  | tail -1 >> ../output/param.par.gcv
if [ "$1" == "-r" ]
then
echo divagcv:======================================================= >> ../$divagcvlog
echo divagcv:Replacing SNR by new value from GCV in param.par  >> ../$divagcvlog
echo divagcv:=======================================================
echo divagcv:Replacing SNR by new value from GCV in param.par 
cd ..
cp -v ./input/param.par ./input/param.par.old
cp -v ./output/param.par.gcv ./input/param.par
echo =======================================================
else
cd ..
fi
