|
From: <de...@us...> - 2003-04-01 08:22:45
|
Update of /cvsroot/fudaa/fudaa_devel/dodico/idl/code
In directory sc8-pr-cvs1:/tmp/cvs-serv16271/dodico/idl/code
Added Files:
tr.idl
Log Message:
fichier idl commun pour reflux et telemac
--- NEW FILE: tr.idl ---
/*
* @file tr.idl
* @creation 2003-02-19
* @modification $Date: 2003/04/01 08:22:39 $
* @license GNU General Public License 2
* @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
* @mail de...@fu...
*/
#ifndef _TR_IDL
#define _TR_IDL
#include "general/geometrie.idl"
/**
* Module commun a Reflux et Telemac. Definit les elements de bases pour
* l'hydraulique 2D.
* TODO :Remommer ce fichier lorsque le nom du prepro sera choisi
* TODO :Deplacer ce module dans la partie metier. Probleme: la partie metier
* n'utilise que des interfaces ( couteuses en memoire).
* Convention pour les codes ( champs code ou terminant par Code).
* code 0 : non initialise
* code 1 : libre
* code 2 : imposée
* negatif : transitoire. Pour reflux,indique le numero de la courbe correspondante.
*
* @version $Id: tr.idl,v 1.1 2003/04/01 08:22:39 deniger Exp $
* @author Fred Deniger
*/
module tr
{
enum LTrTypeBord
{
SOLIDE,//Le bord est ferme.
LIQUIDE_DEBIT_IMPOSE,
LIQUIDE,//Dans ce cas, u,v,h peuvent etre fixes ou libres
LIQUIDE_ONDE_INCIDENCE //pour telemac uniquement.ce cas doit provoquer
//une erreur.
};
enum LTrTypeProjet
{
COURANTOLOGIE_2D,
COURANTOLOGIE_2D_LMG,
COURANTOLOGIE_3D,
TRANSPORT_2D
};
enum LTrCodeCalcul
{
REFLUX,
TELEMAC
};
enum LTrSchemaResolution
{
STATIONNAIRE,
EULER,
KAWAHARA
};
enum LTrMethodeResolution
{
LINEAIRE,
NEWTON_RAPHSON,
NEWTON_RAPHSON_CD,
SELECT_LUMPING,
SELECT_LUMPING_CD
};
/**
* Structure definissant les conditions limites pour chaque point frontiere.
*/
struct STrConditionLimite
{
LTrTypeBord typeBord;
entier uCode;
reel u;
entier vCode;
reel v;
entier hCode;
reel h;
//Traceur (telemac)
entier traceurCode;
reel traceur;
//Relfux : un frottement peut etre libre,permanent ou transitoire.
entier frottementCode;
reel frottement;
reel tCoeffa;
reel tCoeffb;
//debit lineique
entier qCode;
reel q;
//la normale
//utiliser par reflux indique la normale au segment dans le repere global
//Cette valeur sera toujours comprise en -360 et 360. Une valeur
//en dehors de cette plage indique que la normale n'est pas initialisee.
reel normale;
entier indexsPt;
};
typedef sequence<STrConditionLimite> VSTrConditionLimite;
/**
* Definition d'une valeur pour un point donne.
*/
struct STrProprieteNodaleValeur
{
//l'index du point concerne
entier index;
reel valeur;
};
typedef sequence<STrProprieteNodaleValeur> VSTrProprieteNodaleValeur;
/**
* Definition d'une propriete nodale pour tous les points du probleme.
*/
struct STrProprieteNodale
{
chaine nom;
chaine unite;
//certaines proprietes nodales sont constantes. Ce champ evite de construire
//des structures inutiles.
reel valeurParDefaut;
//les points restants ont une valeur donnee.... super commentaire !
VSTrProprieteNodaleValeur valeurs;
};
typedef sequence<STrProprieteNodale> VSTrProprieteNodale;
/**
* Definition d'une valeur pour un groupe d'elements.
*/
struct STrProprieteElementaireValeur
{
entier indexElement;
reel valeur;
};
typedef sequence<STrProprieteElementaireValeur> VSTrProprieteElementaireValeur;
struct STrProprieteElementaireTransitoire
{
entier indexElement;
//Ce chiffre sera negatif et respecte la specification generale ( cf commentaire
//du module)
entier indexCode;
};
typedef sequence<STrProprieteElementaireTransitoire> VSTrProprieteElementaireTransitoire;
struct STrProprieteElementaire
{
chaine nom;
chaine unite;
//certaines proprietes elementaires sont constantes. Ce champ evite de construire
//des structures inutiles.
reel valeurParDefaut;
//typique reflux. La propriete peut-etre libre pour les elementaires
//dont l'index appartient au tableau suivant.
ventier elementsLibres;
//les elements avec une valeurs donnee.
VSTrProprieteElementaireValeur valeurs;
//les elements transitoires
VSTrProprieteElementaireTransitoire valeursTransitoires;
};
typedef sequence<STrProprieteElementaire> VSTrProprieteElementaire;
struct STrEvolution
{
chaine nom;
vreel x;
vreel y;
};
typedef sequence<STrEvolution> VSTrEvolution;
struct STrGroupeTemps
{
LTrMethodeResolution methode;
LTrSchemaResolution schema;
entier nbPasTemps;
reel valeurPasTemps;
reel coefSchema;
reel relaxation;
reel precision;
reel precisionBancCouvrantDecouvrant;
entier nombreIterationMax;
entier frequenceImpression;
vreel coefficientsContribution;
};
typedef sequence<STrGroupeTemps> VSTrGroupeTemps;
struct STrParametresCalcul
{
vchaine impressions;
};
struct STrProjetH2d
{
chaine version;
LTrTypeProjet typeProjet;
LTrCodeCalcul codeCalcul;
//le maillage
geometrie::SMaillageIndex maillage;
//les conditions limites.
VSTrConditionLimite conditionsLimites;
//La condition limite par defaut. Elle ne devrait pas etre
//transitoire avoir ...
STrConditionLimite conditionLimiteParDefaut;
//Si true, les normales ont ete definies.
booleen normalesDefinies;
//les proprietes par elements (reflux uniquement).
//3 proprietes seront specifiques reflux
//RUGOSITE
//VISCOSITE
//PERTE_CHARGE
VSTrProprieteElementaire proprietesElementaires;
VSTrProprieteNodale proprietesNodales;
//Reflux les courbes pour les parametres transitoire.
VSTrEvolution courbesTemporelles;
//les chaines utilisées pour l'impression.
STrParametresCalcul parametresCalcul;
VSTrGroupeTemps parametresTemporels;
};
};
#endif
|