#!/bin/sh
#============================================================================
#
#                    Code_Saturne version 1.3
#                    ------------------------
#
#
#     This file is part of the Code_Saturne Kernel, element of the
#     Code_Saturne CFD tool.
#
#     Copyright (C) 1998-2007 EDF S.A., France
#
#     contact: saturne-support@edf.fr
#
#     The Code_Saturne Kernel is free software; you can redistribute it
#     and/or modify it under the terms of the GNU General Public License
#     as published by the Free Software Foundation; either version 2 of
#     the License, or (at your option) any later version.
#
#     The Code_Saturne Kernel is distributed in the hope that it will be
#     useful, but WITHOUT ANY WARRANTY; without even the implied warranty
#     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#     GNU General Public License for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with the Code_Saturne Kernel; if not, write to the
#     Free Software Foundation, Inc.,
#     51 Franklin St, Fifth Floor,
#     Boston, MA  02110-1301  USA
#
#============================================================================
#
#=================================================
#     Script de generation d'un cas Code_Saturne
#=================================================
         
usage() {
    echo
    echo "   usage : cree_sat -etude nom_etude [nom_cas1 nom_cas2 ...][-noihm]"
    echo "               creation d'une etude complete"
    echo "           cree_sat -cas nom_cas1 nom_cas2 ...[-noihm]"
    echo "              creation de nouveaux sous-cas pour une etude"
    echo "           cree_sat -noihm"
    echo "              fonctionnement sans IHM Code_Saturne "
    echo "              (-noihm est obligatoirement le premier ou le dernier argument"
    echo "                      et n apparait qu une seule fois)"
    echo 
    echo "           cree_sat -h pour une information plus detaillee ou directement :"
    echo "            xpdf ${DOC_UTILISATION}"
    echo; exit
}


enleve_test() {
NTEST=0
NTEST=`grep -c TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_DEBUT $1`
while [ $NTEST -gt 0 ] ; do  
  NDEB=`grep -n TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_DEBUT $1 \
    | head -1 | awk -F: '{print $1}'`
  if [ "$NDEB" != "" ]; then
    NFIN=`grep -n TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_FIN $1 \
    | head -1 | awk -F: '{print $1}'`
    sed "${NDEB},${NFIN}d" $1 > ${1}.tmp
    mv ${1}.tmp $1 
  fi
  NTEST=`grep -c TEST_A_ENLEVER_POUR_UTILISER_LE_SOUS_PROGRAMME_DEBUT $1`
done
}

commente_exemple() {
NTEST=0
NTEST=`grep -c CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_DEBUT $1`
while [ $NTEST -gt 0 ] ; do  
  NDEB=`grep -n CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_DEBUT $1 \
    | head -1 | awk -F: '{print $1}'`
  if [ "$NDEB" != "" ]; then
    NFIN=`grep -n CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_FIN $1 \
    | head -1 | awk -F: '{print $1}'` 
#   veiller a modifier la chaine recherchee, sinon on boucle a l'infini
    sed "${NDEB}s/DEBUT/debut/" $1 > ${1}.tmp
    mv ${1}.tmp $1 
    sed "${NFIN}s/FIN/fin/" $1 > ${1}.tmp
    mv ${1}.tmp $1 
    sed "${NDEB},${NFIN}s/^/Cex/" $1 > ${1}.tmp
    mv ${1}.tmp $1 
  fi
  NTEST=`grep -c CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_DEBUT $1`
done
}

enleve_commentaire() {
NTEST=0
NTEST=`grep -c CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_DEBUT $1`
if [ $NTEST -gt 0 ] 
then  
  DEB=CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_DEBUT
  FIN=CODE_FOURNI_COMME_EXEMPLE_A_ADAPTER_PAR_L_UTILISATEUR_FIN
  sed "/${DEB}/d" $1 > ${1}.tmp
  mv ${1}.tmp $1 
  sed "/${FIN}/d" $1 > ${1}.tmp
  mv ${1}.tmp $1 
fi
}

cree_etude() {
ETUDE="$1"
if [ -d "$ETUDE" ]; then
   echo "l'etude $ETUDE existe deja"
   exit
fi
mkdir $ETUDE
mkdir ${ETUDE}/MAILLAGE
mkdir ${ETUDE}/POST
etude=`echo $ETUDE |tr "[:upper:]" "[:lower:]"`
}


cree_cas() {
IHM=$1
shift
ETUDE=$1
shift
REPBASE=`pwd`
for i in $*
do
  CAS="${i}"
  CAS=`echo $CAS | tr "[:lower:]" "[:upper:]"`
  REPBASECAS=$REPBASE/$CAS
  echo; echo "Creation du cas $CAS en cours..."
  if [ -d "$CAS" -o -f "$CAS" ]; then
     echo " le cas $CAS existe deja"
     continue
  fi
  etude=`echo $ETUDE |tr "[:upper:]" "[:lower:]"`
  cas=`echo $CAS |tr "[:upper:]" "[:lower:]"`

  mkdir ${CAS}
  mkdir ${CAS}/DATA
  mkdir ${CAS}/FORT
  mkdir ${CAS}/RESU
  mkdir ${CAS}/SCRIPTS

#Recuperation du CS_HOME
  FICCSHOMEBKSLH=$CAS/SCRIPTS/.cshomebkslh
  echo $CS_HOME | sed -e "s/\//\\\\\//g" > $FICCSHOMEBKSLH
  CSHOMEBCKSLH=`cat $FICCSHOMEBKSLH`
  rm $FICCSHOMEBKSLH

#Recuperation du CSGUI_HOME
  FICCSGUIHOMEBKSLH=$CAS/SCRIPTS/.csguihomebkslh
  echo $CSGUI_HOME | sed -e "s/\//\\\\\//g" > $FICCSGUIHOMEBKSLH
  CSGUIHOMEBCKSLH=`cat $FICCSGUIHOMEBKSLH`
  rm $FICCSGUIHOMEBKSLH

# recopie des donnees (uniquement les utiles)
  thch=THCH
  mkdir ${CAS}/DATA/$thch
  for var in dp_C3P dp_C3PSJ dp_ELE dp_FCP ; do
    cp -f $CS_HOME/data/thch/$var $CAS/DATA/$thch/.
  done

  gui=SaturneGUI
  if [ "$IHM" = "ihm" ] ; then
    cp -f $SCRIPT_HOME/$gui ${CAS}/DATA/.
    sed "s/NOMCSGUIHOME/$CSGUIHOMEBCKSLH/g"  $CAS/DATA/$gui  >cas.tmp
    mv -f cas.tmp $CAS/DATA/$gui
    chmod +x $CAS/DATA/$gui
  fi

# recopie des src  utilisateur et masquage des repertoires CVS
  users=USERS
  cp -Rf $CS_HOME/users $CAS/FORT/$users
  listedircvs=`find $CAS/FORT/$users -name CVS -print`
  for dir in $listedircvs ; do
    mv $dir `dirname ${dir}`/.CVS
  done

# sur cluster, le nom est limite a 15 caracteres
  NOMETCAS=`echo ${etude}${cas}|cut -c1-15`

  cp -f $SCRIPT_HOME/lance         $CAS/SCRIPTS
  cp -f $SCRIPT_HOME/lance.help    $CAS/SCRIPTS
  FICREPBASECASBKSLH=$CAS/SCRIPTS/.repbasecasbkslh
  echo $REPBASECAS | sed -e "s/\//\\\\\//g" > $FICREPBASECASBKSLH
  REPBASECASBCKSLH=`cat $FICREPBASECASBKSLH`
  rm $FICREPBASECASBKSLH
  sed -e "s/nometcas/$NOMETCAS/g" \
      -e "s/NOMET/$ETUDE/g" \
      -e "s/NOMCAS/$CAS/g" \
      -e "s/NOMREPBASE/$REPBASECASBCKSLH/g" \
      -e "s/NOMCSHOME/$CSHOMEBCKSLH/g" \
      -e "s/nomet/${etude}/g"  $CAS/SCRIPTS/lance         >cas.tmp
  mv cas.tmp         $CAS/SCRIPTS/lance

  for fich in $CAS/FORT/$users/*/*.[F]
  do 
    if [ -f $fich ] ; then
      if [ "$IHM" = "ihm" ] ; then 
        commente_exemple $fich
      else
        enleve_commentaire $fich
      fi
    fi
  done
  for fich in $CAS/FORT/$users/*/*.[F,c] $CAS/SCRIPTS/lance
  do
    if [ -f $fich ] ; then
      enleve_test $fich
    fi
  done
  chmod +x $CAS/SCRIPTS/lance
  echo "Creation du cas $CAS terminee"
done
exit
}


#===  MAIN ===

clear
echo "================================================================="
echo "               Generation d'un cas Saturne                       " 
echo "                        version 1.3                              "
echo "================================================================="
echo

if [ -z "$CS_HOME" ]; then
  echo
  tput bold ; 
  echo " ATTENTION : La variable CS_HOME n'est pas positionnee"
  tput rmso ; tput sgr0
  echo " Session terminee"; echo
  exit
fi

USER=`whoami`
SCRIPT_HOME=$CS_HOME/bin
FICHE_HOME=$CS_HOME/doc/FICHE
DOC_UTILISATION=$CS_HOME/doc/UTILISATION/saturne.pdf

NNOIHM=0
for i in $*
do
  if [ "${i}" = "-noihm" ]
  then
     NNOIHM=`echo $NNOIHM |awk '{printf($1+1)}' `
  fi
done
if [ $NNOIHM -eq 1 ]
then 
  FIRST=$1
  LAST=`echo $* | awk '{print $NF}'`
  if [ "$FIRST" != "-noihm" -a "$LAST" != "-noihm" ]
  then 
    usage
  else
    IHM=noihm
  fi  
elif [ $NNOIHM -eq 0 ]
then
  IHM=ihm
else
  usage 
fi

if [ "$1" = "-noihm" ]
then
  shift
fi

TYPE=""
case $1 in
  -etude) TYPE="etude";shift;;
  -cas) TYPE="cas";shift;;
  *) usage;;
esac

if [ $# = 0 -o "$1" = "-noihm" ]
then
  usage
fi

if [ $TYPE = "etude" ]
then
  ETUDE=$1
  shift
  ETUDE=`echo $ETUDE |tr "[:lower:]" "[:upper:]"`
  cree_etude $ETUDE
  cd $ETUDE
else
  ETUDE=`basename ${PWD}`
fi

if [ $# = 0 -o "$1" = "-noihm" ]
then
  CAS="CAS1"
else  
  CAS=""
  for i in $*
  do
    if [ "${i}" = "-noihm" ]
    then
       continue
    else
      CAS="$CAS ${i}"
    fi
  done
fi

cree_cas $IHM $ETUDE $CAS

exit






syntax highlighted by Code2HTML, v. 0.9.1