Le fichier des spécifications de simulation


Ce fichier est lu (et son contenu exploité) par un appel à la fonction ParseSimulationFile, avant l'exécution de la simulation. Cette fonction prend en argument le nom physique du fichier.
Cet appel peut figurer dans le programme principal ... :
int main(int argc,  char* argv[]) {
  ...
  ParseParameterFile(argv[1]);
  ParseSimulationFile(argv[2]);
  ...
  pCurrentSim->Run();
  ...
}

..., auquel cas le nom du fichier peut être passé en argument de la ligne de commande :

./main  sim1.par  sim1.sim ...

L'appel peut aussi résulter d'une directive de simulation écrite sur un fichier externe (voir le lien 'Les fichiers des directives de la simulation'), auquel cas le nom du fichier sera un des éléments de la directive.

Le fichier des spécifications de simulation est une suite de phrases, dont la syntaxe est la suivante :

<fichier>      ::= <phrase>*
<phrase>       ::= <ligne_trace> | <comment> | <set_ivar> 
                   <init_rand>   |  <init_sim>   |  <open_file>

<ligne_trace>  ::= TRACE <mode_trace> <fin>
<mode_trace>   ::= PARSING | NO_PARSING

<comment>      ::= <l_comment> | <ls_comment>
<l_comment>    ::= <symb_comment> <any>
<symb_comment> ::= // | # 
<any>          ::= .* 
<ls_comment>   ::= '/''*'(<any>\n)*<any>'/''*'

<set_ivar>     ::= <ref_ivar> = <int_expr> <fin> 
<entier>       ::= [0-9]+
<int_expr>     ::= <entier> | <ref_ivar> | <ref_iparam> |
                   <int_expr> <op> <int_expr> |
                   (<int_expr>) |
                   RANDOM(<int_expr>)
<op>           ::= < | <= | > | >=
<ref_ivar>     ::= {i<entier>}
<ref_iparam>   ::= '<'pi'>' '<' <param_str> <param_str> <'>'
<param_str>    ::= <chaine> | <multichaine>

<init_rand>    ::= INITRAND <entier> <fin> |
                   INITRAND <ref_iparam> <fin> |
                   INITRAND <fin>

<init_sim>     ::= INITIALISATION SIMULATION <spec>+ <fin>
<spec>         ::= <spec_unite>|<spec_step>|<spec_beg>|<spec_end>|
                   <spec_in>|<spec_out>

<spec_unite>   ::= UNITE_TPS <unite_tps> <fin>
<unite_tps>    ::= DAY ...
<spec_step>    ::= NB_UNITE_TPS <entier> <fin>
<spec_beg>     ::= DATE_DEBUT <date> <fin>
<spec_end>     ::= DATE_FIN <date> <fin>
<date>         ::= <entier> <mois> <entier> [<entier> <entier> <entier>] 
<mois>         ::= JAN .... DEC  
<spec_in>      ::= IN_DIR <dir_path> <fin>
<spec_out>     ::= OUT_DIR <dir_path> <fin>
<dir_path>     ::= "[(~ | . | .. |)/<etage>]*"
<etage>        ::= <chaine_rep>/
<chaine>       ::= [a-zA-Z][a-zA-Z0-9\_\.]*
<chaine_rep>   ::= [a-zA-Z][a-zA-Z0-9\_\.\:]*
<multichaine>  ::= "(<chaine>" ")*<chaine>"

<open_file>    ::= OUVERTURE <file_type> <spec_file>+ <fin>
<file_type>    ::= FICHIER_SERIEL|FICHIER_SEQUENTIEL
<spec_file>    ::= <spec_nom>|<spec_fkey>|<spec_fdata>|<spec_f>|
                   <spec_com>|<spec_skip>
<spec_nom_s>   ::= NOM_SIMPLE_FICHIER <simple_name> <fin>
<simple_name>  ::= "<chaine>" | <ref_svar>
<ref_svar>     ::= "<chaine>"
<spec_nom_c>   ::= NOM_COMPLET_FICHIER <full_name> <fin>
<full_name>    ::= "<dir_path><simple_name>"
<spec_fkey>    ::= FORMAT_CLES <format> <fin> 
<spec_fdata>   ::= FORMAT_DONNEES <format> <fin> 
<spec_f>       ::= FORMAT_CHAMPS <format> <fin>
<spec_com>     ::= LIGNES_ENTETE <entier> <fin>
<spec_skip>    ::= SKIP_ENTETE <fin>
<format>       ::= "<chaine>"

<fin>          ::= ; 

Des exemples valides pour <dir_path> sont : "/home/anyuser/dir","~/dir/", "dir/", "../dir/", "./dir/". Si la chaîne entre les guillemets (non compris) est une spécification absolue (commençant par un /), elle constitue directement le chemin complet du répertoire des fichiers de sortie. Si c'est une spécification relative, elle est interprétée relativement au répertoire courant.

Toute fin de ligne après // ou # est ignorée, de même que tout passage entre / et /.

Un exemple de fichier de spécification de la simulation est le suivant :

//TRACE NO_PARSING;
{i1} = 97;
INITIALISATION SIMULATION
     UNITE_TPS MINUTE;
     NB_UNITE_TPS 1;
     //UNITE_TPS SECOND;
     //NB_UNITE_TPS 30;
     DATE_DEBUT 1 JAN {i1}  
                <pi><Simulation "heure deb"> <pi><Simulation "minut deb"> 0;
     DATE_FIN   1 JAN {i1} 
                <pi><Simulation "heure fin"> <pi><Simulation "minut fin"> 0;
     OUT_DIR "../out/minute/";
     OUVERTURE FICHIER_SEQUENTIEL FICHIER_METEO
         NOM_PHYSIQUE  "../in/meteo_alenya.15min.txt";
         FORMAT_CHAMPS "%d %d %d %d %lf %lf %lf %lf %lf";
         LIGNES_ENTETE 1;
         //SKIP_ENTETE;  // le saut est programmé ailleurs
     ;
;

This page was generated with the help of DOC++.