* fichier : sine_bumpBM.dgibi
******************************************************************
* CALCUL DE L'ECOULEMENT SUBSONIQUE STATIONNAIRE DANS UN CANAL *
* AVEC SINE-SHAPED BUMP *
* FORMULATION VF COMPRESSIBLE EXPLICITE/IMPLICIT *
* *
* H. PAILLERE/P. GALON TTMF AOUT 1997 *
* *
* MODIF BECCANTINI MARS 97 *
* *
* BECCANTINI NOVEMBRE 98 *
* Low Mach AUSM+ scheme is used for computation *
******************************************************************
'MESSAGE' 'A mettre a jours' ;
'FIN' ;
* GRAPH = VRAI ;
GRAPH = FAUX ;
COMPLET = FAUX ;
'SI' complet ;
NRAFF = 3 ;
'SINON' ;
NRAFF = 1 ;
'FINSI' ;
ENTERR = 0.00001D0 ;
TYEL = 'QUA4' ;
'OPTION' 'DIME' 2 'ELEM' TYEL 'ISOV' 'SULI'
'ECHO' 1 'TRAC' 'X';
*
*** C.L. et initiales
*
RO_INF = 1.4D0 ;
P_INF = 1.0D0 ;
U_INF = 0.001D0 ;
GAMSCAL = 1.4D0;
************************************************************************
************************************************************************
***************** PARTIE PROCEDURES ************************************
************************************************************************
************************************************************************
*******************************************************
***** PROCEDURE TO COMPUTE CONSERVATIVE VARIABLES *****
*******************************************************
'DEBPROC' CONS ;
'ARGUMENT' RN*'CHPOINT' VN* 'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;
RVN = RN '*' VN ;
LMOT = 'MOTS' 'UX' 'UY' ;
RECIN = 0.5 '*' (RVN 'PSCA' VN LMOT LMOT) ;
RETER = PN '/' (GAMN '-' 1.0) ;
REN = RETER '+' RECIN ;
'RESPRO' RVN REN ;
'FINPROC' ;
*****************************************************
*****************************************************
** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
*****************************************************
*****************************************************
*
* RV . 'UN' = les inconnues
*
* RV . 'CLIM' = logique qui me dit si existe une procedure pour le
* calcul de conditions limits
*
* RV . 'DOMINT' = (a definir si RV . 'CLIM')
* spg des incunnues (sans les cellules fantomes)
*
* RV . 'MAIFAN' = (a definir si RV . 'CLIM')
* les cellules fantomes
*
* RV . 'INST' = logique qui me dit si on fait un calcul stationaire
* ou instationaire. Si FAUX, le temps n'est pas une
* variable du probleme
*
* RV . 'CONS' = (à definir dans le cas d'un calcul instationaire)
* logique qui me dit si on fait une correction
* conservative à la fin des iterations internes
*
* RV . 'TFINAL' = (à definir dans le cas d'un calcul instationaire)
* le temps final
*
* RV . 'NITMAEX' = (à definir dans le cas d'un calcul instationaire)
* le numero d'iteration externes
*
* N.B. Si RV . 'TFINAL' et RV . 'NITMAEX' sont les deux specifiés, on
* s'arrete quand un des deux criteres et satisfait
*
* RV . 'FEXT' = (à definir dans le cas d'un calcul instationaire)
* indice de frequence d'impression pour les
* iterations externes
*
* RV . 'MATIDE' = (à definir dans le cas d'un calcul instationaire)
* MATRIK identité
* N.B. (RV . 'MATIDE') '*' (RV . 'UN') =
* (RV . 'UN')
*
* RV . 'LISTOPER' = liste des operateurs (ou des procedures) qui
* interviennent dans le calcul (chaque operateur a un
* table associée), qui s'appelle &NOMPER ou
* & = position de l'operateur dedans cette liste
* NOMPER = noms de l'operateur ou de la procedure
*
* RV . 'NITMAIN' = (à definir dans le cas d'un calcul implicite)
* le numero max d'iteration internes
* RV . 'NITMIIN' = (à definir dans le cas d'un calcul implicite)
* le numero min d'iteration internes
*
* RV . 'EPSINT' = (à definir dans le cas d'un calcul implicite)
* l'erreur pour le critere de convergence sur les
* iterations internes
*
* RV . 'FINT' = (à definir dans le cas d'un calcul implicite)
* indice de frequence d'impression pour les
* iterations internes
*
* RV . 'MATHINV' = (a definir sans la cas d'un calcul implicite)
* table de SOUSTYPE 'TYPINV' pour l'inversion de
* MATRIK (pour l'operateur 'KRES')
*
* RV . 'PBASMACH' = (à definir si on veut faire du preconditionnement
* BASMACH)
* LOGIQUE = VRAI '/' FAUX
* Dans le cas VRAI, il faut utiliser la procedure BMAC
* et remplir la table 'BASMACH'.
*
*--------------------------------------------------------------------------
'DEBPROC' EXEXIM ;
'ARGUMENT' RV*TABLE ;
'MESSAGE' ;
'MESSAGE' 'PROCEDURE EXEXIM' ;
*
**** Initialisation d'un CHPOINT 'ET' d'une MATRIK vide
*
CHPVID MATVID = 'KOPS' 'MATRIK' ;
*
**** Les inconnues
*
'SI' ('NON' ('EXISTE' RV 'UN')) ;
'MESSAGE' 'UN = ???' ;
'ERREUR' 21 ;
'FINSI' ;
*
**** Existence d'une procédure pour imposer le conditions aux limites
* à chaque iteration (interne ou externe)
*
'SI' ('NON' ('EXISTE' RV 'CLIM')) ;
'MESSAGE' 'CLIM = ???' ;
'ERREUR' 21 ;
'FINSI' ;
* Par securité, on les impose tout de suite
'SI' (RV . 'CLIM') ;
'SI' ('NON' ('EXISTE' RV 'DOMINT')) ;
'MESSAGE' 'DOMINT = ???' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ('NON' ('EXISTE' RV 'MAIFAN')) ;
'MESSAGE' 'MAIFAN = ???' ;
'ERREUR' 21 ;
'FINSI' ;
* On impose une variation de l'incrément nul sur les
* cellules fantômes
DUCLIM = 0.0 '*' ('REDU' (RV . 'UN') (RV . 'MAIFAN')) ;
* 'MESS' 'PROLIM at the beginning' ;
RV . 'UN' = PROLIM RV ;
'SINON' ;
DUCLIM = 'COPIER' CHPVID ;
'FINSI' ;
*
**** Stationnaire ou instationnaire ?
*
'SI' ('NON' ('EXISTE' RV 'INST')) ;
'MESSAGE' 'INST = ???' ;
'ERREUR' 21 ;
'SINON' ;
'SI' ('NEG' ('TYPE' (RV . 'INST')) 'LOGIQUE') ;
'MESSAGE' 'INST = ???' ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
LOGINS = RV . 'INST' ;
'SI' LOGINS ;
'SI' ('NON' ('EXISTE' RV 'CONS')) ;
'MESSAGE' 'CONS = ???' ;
'ERREUR' 21 ;
'SINON' ;
LOGCC = RV . 'CONS' ;
'FINSI' ;
'SINON' ;
'SI' ('EXISTE' RV 'CONS') ;
'SI' (RV . 'CONS') ;
'MESSAGE' 'Calcul stationnaire' ;
'MESSAGE' 'Correction conservative impossible !!!' ;
'MESSAGE' 'CONS = ???' ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
*
**** BASMACH?
*
'SI' ('EXISTE' RV 'PBASMACH') ;
LOGBM = RV . 'PBASMACH' ;
'SINON' ;
LOGBM = FAUX ;
'FINSI' ;
'SI' ('EGA' LOGBM VRAI) ;
'MESSAGE' ;
'MESSAGE' 'Dual time stepping avec preconditionnement bas mach' ;
'MESSAGE' ;
'FINSI' ;
*
**** Iterations externes et/ou temps final
* La table 'PASDETPS'
*
'SI' LOGINS ;
'MESSAGE' 'Calcul instationnaire' ;
'MESSAGE' ;
'SI' ('NON'
(('EXISTE' RV 'NITMAEX') 'OU' ('EXISTE' RV 'TFINAL'))) ;
'MESSAGE' 'NITMAEX = ???' ;
'MESSAGE' 'ou' ;
'MESSAGE' 'TFINAL = ???' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ('NON' ('EXISTE' RV 'MATIDE')) ;
'MESSAGE' 'MATIDE 1 = ???' ;
'ERREUR' 21 ;
'SINON' ;
'SI' ('NON' LOGBM) ;
****** Compatibilité matrice identité - vecteur des inconnues
CELL = 'KOPS' (RV . 'MATIDE') 'MULT' (RV . 'UN') ;
CELL = CELL '-' (RV . 'UN') ;
CELL = 'MAXIMUM' CELL 'ABS' ;
'SI' (CELL > 1.0D-14) ;
'MESSAGE' 'MATIDE 2 = ???' ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
'SI' ('NON' ('EXISTE' RV 'PASDETPS')) ;
RV . 'PASDETPS' = 'TABLE' ;
'FINSI' ;
KTPS = RV . 'PASDETPS' ;
* Initialisation éventuelle de la table
'SI' ('NON' ('EXISTE' KTPS 'NUPASDT')) ;
KTPS . 'NUPASDT' = 0 ;
KTPS . 'TPSM' = 0.0D0 ;
KTPS . 'TPS' = 0.0D0 ;
'SINON' ;
'SI' ('EGA' ( KTPS . 'NUPASDT' ) 0) ;
KTPS . 'TPSM' = 0.0D0 ;
KTPS . 'TPS' = 0.0D0 ;
'FINSI' ;
'FINSI' ;
*
* Dans le cas instationnaire, KTPS contient
*
* KTPS . 'NUPASDT' = numero de pas de TPS actuel dans les itérations
* internes
*
* KTPS . 'TPSM' = le TPS aprés (KTPS . 'NUPASDT' '-' 2) itérations
* KTPS . 'TPS' = le TPS aprés (KTPS . 'NUPASDT' '-' 1) itérations
* KTPS . 'TPSP' = le TPS aprés (KTPS . 'NUPASDT') itérations, i.e. à
* la fin de l'itération actuelle
*
*
'SINON' ;
'MESSAGE' ;
'MESSAGE' 'Calcul stationnaire' ;
'MESSAGE' ;
'FINSI' ;
*
****** Initialisation du CHPOINT DELTAU pour 'KRES'
*
DELTAU = 'COPIER' CHPVID ;
**************************************************
**************************************************
**** Itérations externes ***********************
**************************************************
**************************************************
LOGEXP = VRAI ;
* LOGEXP = variable logique qui me dit si on est en explicite ;
* on l'initialise = VRAI
LOGQIE = FAUX 'OU' ('NON' LOGINS) ;
*
**** Boucle qui s'arrête quand LOGQIE = VRAI ; i.e.
*
* -dans le cas instationnaire, quand
* (KTPS . NUPASDT) = (RV . 'NITMAEX')
* ou
* (KTPS . 'TPS') = (RV . 'TFINAL');
*
* -dans le cas stationnaire on ne fait que une itération
* externe
*
ALPDT = 0.0 ;
'REPETER' BLEX -1 ;
'SI' LOGINS ;
KTPS . 'NUPASDT' = (KTPS . 'NUPASDT') '+' 1 ;
'SI' ('EXISTE' RV 'NITMAEX') ;
'SI' ( (KTPS . 'NUPASDT') '>EG' (RV . 'NITMAEX')) ;
LOGQIE = VRAI ;
'FINSI' ;
'FINSI' ;
*
****** Impression evenctuelle
*
ICEL = (KTPS . 'NUPASDT') '/' (RV . 'FEXT') ;
LOGPRI = 'EGA' (ICEL '*' (RV . 'FEXT')) (KTPS . 'NUPASDT') ;
'SI' (LOGPRI) ;
'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
'MESSAGE' ;
'FINSI' ;
'FINSI' ;
*
*** Objets MATRIK et CHPOINTs vides
* LISTREEL de DT_i * ALPHA_i
* UNM = (RV . 'UN') à l'iteration precedente
*
RESIMP = 'COPIER' CHPVID ;
MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
RESEXP = 'COPIER' CHPVID ;
UNM = ('COPIER' (RV . 'UN')) ;
LREEDT = 'PROG' ;
*
***********************************************
********* Boucle sur les operateurs ***********
***********************************************
*** On calcule: LREEDT
* RESEXP
* (RESIMP)
* (MATASS)
*
'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
* 'MESSAGE' ('CHAINE' 'pervaya' NOMPER NOTABLE ) ;
JACO RESIDU ALPHADT THETA = ('TEXTE' NOMPER) (RV . NOTABLE) ;
* 'MESSAGE' ('CHAINE' 'vtoraya' NOMPER NOTABLE ) ;
*
* JACO = objet de type MATRIK (éventuellement vide)
* RESIDU = " RESIDU "
* ALPHADT = " LISTREEL "
* THETA = " REEL
*
******* On controlle la compatibilité E/S (pour chaque &BLEX)
*
NCOMP = 'DIME' ('EXTRAIRE' RESIDU 'COMP') ;
* NCOMP = 0 si RESIDU = CHPOINT vide
'SI' (NCOMP > 0) ;
LOGEXP = LOGEXP 'ET' ('EGA' THETA 0.0D0) ;
'SI' (('NON' LOGINS) 'ET' ('NEG' THETA 1.0D0)) ;
'MESSAGE' 'INST = FAUX ' ;
'MESSAGE' ('CHAINE' NOMPER ' . THETA != 1') ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
*
******* On calcule LREEDT
*
LREEDT = LREEDT 'ET' ALPHADT ;
*
******* On calcule MATASS, RESEXP, RESIMP
*
MATASS = MATASS 'ET' ('KOPS' 'MULT' (-1.0D0 '*' THETA)
JACO ) ;
RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
RESEXP = RESEXP 'ET' ( RESIDU '*'(1.0D0 '-' THETA)) ;
'FIN' BLOP ;
***********************************************
***** Fin de la boucle sur les operateurs ****
***********************************************
*
******* On controlle la compatibilité E/S (si &BLEX = 1)
*
'SI' ('EGA' &BLEX 1) ;
*
**** Dans le cas implicite, on verifie l'existence
* des parametres pour les itérations internes
*
'SI' ('NON' LOGEXP) ;
'SI' ('NON' (('EXISTE' RV 'NITMAIN') 'ET'
('EXISTE' RV 'EPSINT') 'ET' ('EXISTE' RV 'NITMIIN'))) ;
'MESSAGE' 'NITMAIN = ??? ' ;
'MESSAGE' 'NITMIIN = ??? ' ;
'MESSAGE' 'EPSINT = ??? ' ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
*
******* Fin contrôle compatibilité E/S
*
*
*** Mise a jour de la table RV . 'PASDETPS' au debu du calcul
*
'SI' LOGINS ;
ALPDT = 'MINIMUM' LREEDT ;
ALPDT1 = (RV . 'TFINAL') '-' (KTPS . 'TPS') ;
'SI' (ALPDT < ALPDT1) ;
KTPS . 'TPSP' = (KTPS . 'TPS') '+' ALPDT ;
'SINON' ;
KTPS . 'TPSP' = (RV . 'TFINAL') ;
ALPDT = ALPDT1 ;
LOGQIE = VRAI ;
'FINSI' ;
'FINSI' ;
*
'SI' LOGEXP ;
*
****** Explicite
*
RV . 'UN' = UNM '+' (RESEXP '*' ALPDT) ;
'SI' (RV . 'CLIM') ;
* 'MESSAGE' 'PROLIM after an explicit iteration' ;
RV . 'UN' = PROLIM RV ;
'FINSI' ;
'SINON' ;
*
****** Implicite
*
'SI' LOGINS ;
UNEXP = UNM '+' (ALPDT '*' RESEXP) ;
UNIMP = (ALPDT '*' RESIMP) '-' (RV . 'UN') ;
'SINON' ;
UNEXP = RESEXP ;
UNIMP = RESIMP ;
'FINSI' ;
**********************************************
****** Les iterations internes ***************
**********************************************
'REPETER' BLINT (RV . 'NITMAIN') ;
'SI' LOGINS ;
MATASS = ('KOPS' 'MULT' ALPDT MATASS)
'ET' (RV . 'MATIDE') ;
'FINSI' ;
DRESTOT = UNEXP '+' UNIMP ;
*
********* Pour l'inversion de MATRIK
*
RV . 'MATINV' . 'MATASS' = MATASS ;
RV . 'MATINV' . 'MAPREC' = MATASS ;
RV . 'MATINV' . 'XINIT' = DELTAU ;
RV . 'MATTOT' = 'KOPS' 'MULT' 1.0 MATASS ;
DELTAU = 'KRES' MATASS
'TYPI' (RV . 'MATINV')
'CLIM' DUCLIM
'SMBR' DRESTOT
'IMPR' 0 ;
RV . 'UN' = (RV . 'UN') '+' DELTAU ;
'SI' (RV . 'CLIM') ;
* 'MESSAGE' 'PROLIM after the matrix inversion' ;
RV . 'UN' = PROLIM RV ;
'FINSI' ;
*
********* Boucle sur les operateurs implicites pour calculer RESIMP
* et MATASS de RV . 'UN'
RESIMP = 'COPIER' CHPVID ;
MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
'SI' (RV . NOTABLE . 'IMPL') ;
JACO RESIDU ALPHADT THETA =
('TEXTE' NOMPER) (RV . NOTABLE) ;
MATASS = MATASS 'ET' ('KOPS' 'MULT'
(-1.0D0 '*' THETA)
JACO ) ;
RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
'FINSI' ;
'FIN' BLOP ;
*
********* Test de convergence
*
'SI' LOGINS ;
UNIMP = (ALPDT '*' RESIMP) '-' (RV . 'UN') ;
'SINON' ;
UNIMP = RESIMP ;
'FINSI' ;
'SI' (RV . 'CLIM') ;
ERRN = 'REDU' (UNEXP '+' UNIMP) (RV . 'DOMINT') ;
'SINON' ;
ERRN = UNEXP '+' UNIMP ;
'FINSI' ;
ERRO = 'MAXIMUM' ERRN 'ABS' ;
*
********* Impression evenctuelle
*
ICEL = &BLINT '/' (RV . 'FINT') ;
'SI' ( 'EGA' (ICEL '*' (RV . 'FINT')) &BLINT );
'SI' LOGINS ;
'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
'FINSI' ;
'MESSAGE'
('CHAINE' 'ITERIN = ' &BLINT ' ERREUR = ' ERRO) ;
'MESSAGE' ;
'FINSI' ;
'SI' ((ERRO '<' (RV . 'EPSINT')) 'ET'
(&BLINT '>' (RV . 'NITMIIN'))) ;
'QUITTER' BLINT ;
'FINSI' ;
'FIN' BLINT ;
**********************************************
****** Fin boucle iterations internes ********
**********************************************
*
****** Non convergence
*
'SI' (ERRO > (RV . 'EPSINT')) ;
'MESSAGE' ;
'MESSAGE' 'Iteration internes: probleme de convergence' ;
'SI' LOGINS ;
'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
'FINSI' ;
'MESSAGE' ('CHAINE' 'ITERIN = ' &BLINT ' ERRO = ' ERRO) ;
'MESSAGE' ;
'SINON' ;
*
********* Correction conservative
*
'SI' LOGINS ;
'SI' LOGCC ;
RESIMP = 'COPIER' CHPVID ;
'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
NOTABLE = 'MOT'
('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
'SI' (RV . NOTABLE . 'IMPL') ;
JACO RESIDU ALPHADT THETA =
('TEXTE' NOMPER) (RV . NOTABLE) ;
RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
'FINSI' ;
'FIN' BLOP ;
*
RV . 'UN' = UNEXP '+' (ALPDT '*' RESIMP) ;
'SI' (RV . 'CLIM') ;
* 'MESSAGE' 'PROLIM after the conservative correction'
;
RV . 'UN' = PROLIM RV ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
*
'FINSI' ;
*
'FINSI' ;
*
*** Mise a jour de la table RV . 'PASDETPS' à la fin du calcul
*
'SI' LOGINS ;
KTPS . 'TPSM' = KTPS . 'TPS' ;
KTPS . 'TPS' = KTPS . 'TPSP' ;
'FINSI' ;
*
**** Dernier commande de BLEX
*
'SI' LOGQIE ;
'QUITTER' BLEX ;
'FINSI' ;
'FIN' BLEX ;
'FINPROC' ;
*****************************************************
*****************************************************
** FIN PROCEDURE EXEX **
*****************************************************
*****************************************************
*****************************************************
*****************************************************
** PROCÉDURE PKON **
*****************************************************
*****************************************************
* Il faut définir:
*
* *KKONV . 'EQEX' = table générale, qui contient toutes les
* informations sur le calcul qu'on va faire.
* Dans ce table, on ne prend que:
* - l'information concernant le pas de temps pour
* l'étape de prédiction (dans le cas de prédiction
* correction à la van Leer - Hanel);
* - les inconnues du problème
* (KKONV . 'EQEX' . 'UN'
*
* *KKONV . 'GAZ' = le modelé de gaz qu'on considère
* - si KKONV . 'GAZ' = 'PERFMONO', alors
* on considère un gaz parfait mono-espèce
* polytropique; dans se cas on doit définir le
* gamma , i.e.
* KKONV . 'GAMN'
* -si KKONV . 'GAZ' = 'PERFTEMP', alors
* on considère un gaz parfait; dans se cas on
* doit définir la table de proprietés de gaz,
* i.e. KKONV . 'PGAZ'
*
* *KKONV . 'DOMA' = table domaine
*
* *KKONV . 'LISTINCO' = les noms des inconnues
* - en 2D (3D) 'PERFMONO'
* la première composante est le nom de la densité;
* la deuxième, la troisième (la quatrième) sont le
* noms des composantes du momentum;
* la quatrième (cinquième) est le nom de l'énergie
* total.
* - en 2D (3D) 'PERFTEMP' on peut avoir aussi:
* les especes dans le meme ordre que en
* KKONV . 'PGAZ' . 'ESPEULE'
* les scalaires passifs dans le meme ordre que en
* KKONV . 'PGAZ' . 'SCALPASS'
*
*
* *KKONV . 'METHODE' = méthode pour le calcul du flux convectif
*
* *KKONV . 'ORDREESP' = ordre en espace (1 ou 2) ;
*
* *KKONV . 'LIMITEUR' = limiteur utilisé
*
* *KKONV . 'PREDCOR' = logique à définir dans le cas explicite. Si
* égal à VRAI, on fait la prediction-correction
* de van Leer - Hancock
*
* *KKONV . 'IMPL' = calcul implicite ou non ?
*
* *KKONV . 'TYPEJACO' = 'VLHJACO1', si implicitation of VLH (1er ordre)
* 'AUSMJAC1', si implicitation of AUSM+ (1er ordre)
* 'VLHJACO2', si implicitation of VLH (2em ordre)
* 'AUSMJAC2', si implicitation of AUSM+ (2em ordre)
* 'AUSMLMJ1', si implicitation of AUSM+(P)(1st ordre)
* 'CENJACO1', si implicitation of VLH (1er ordre)*
*
* *KKONV . 'THETA' = paramètre entre 0 et 1 à définir dans le cas
* de calcul implicite.
* N.B.
* a) Dans le cas explicite, il ne faut pas le
* définir.
* b) Dans les autre cas:
* - si égal à 0, la méthode degenere au cas
* explicite;
* - si égal à 1, on a le cas implicite
* - si égal à 0.5, on a Cranck-Nicholson
*
* *KKONV . 'ALPHA' = coefficient de securité pour le quel on
* multiplie le pas de tps determiné par un
* condition de type CFL.
* Il peut etre:
* - un flottant
* - une mot que veut 'INF'
*
* *KKONV . 'GRADRN'
* *KKONV . 'GRADVN'
* *KKONV . 'GRADPN'
* *KKONV . 'GRADYN'
* *KKONV . 'GRADSN' = MCHAMLs pour calculer les gradients de densité,
* vitesse, pression, fractions massiques,
* scalaires passifs
*
* *KKON . 'FACELIM' = maillage de centres de face ou on compute pas
* le flux convectif
'DEBPROC' PKON ;
'ARGUMENT' KKONV * TABLE ;
METO = KKONV . 'METHODE' ;
RV = KKONV . 'EQEX' ;
LOGIMP = KKONV . 'IMPL';
LOGEXP = 'NON' LOGIMP ;
'SI' LOGIMP ;
THETA = KKONV . 'THETA' ;
'SINON' ;
THETA = 0.0 ;
'FINSI' ;
'SI' ((THETA > 1.0) 'OU' (THETA < 0.0)) ;
'MESSAGE' 'PKON . THETA = ???' ;
'ERREUR' 21 ;
'FINSI' ;
ORDESP = KKONV . 'ORDREESP' ;
$DOMA = KKONV . 'DOMA' ;
*
**** Si on ne fait pas de l'explicite, on ne peux
* pas fair de predictor correcteur
*
'SI' (LOGEXP 'ET' ('EGA' ORDESP 2)) ;
'SI' (KKONV . 'PREDCOR') ;
ORDTPS = 2 ;
'SINON' ;
ORDTPS = 1 ;
'FINSI' ;
'SINON' ;
ORDTPS = 1 ;
'FINSI' ;
'SI' (('NEG' (KKONV . 'ALPHA') 'INF') 'ET'
('NEG' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT)) ;
'MESSAGE' 'PKON . ALPHA = ???' ;
'ERREUR' 21 ;
'FINSI' ;
UN = 'REDU' (RV . 'UN') ($DOMA . 'CENTRE') ;
'SI' ('EGA' (KKONV . 'GAZ') 'PERFMONO') ;
***************************************************************************
******** EULER, monoespece, "calorically perfect" (cv = constant) *********
***************************************************************************
*
**** Type de jacobien
*
'SI' LOGIMP ;
ITJACO = 0 ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'CENJACO1') ;
ITJACO = 4 ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'VLHJACO1') ;
ITJACO = 1 ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'VLHJACO2') ;
ITJACO = -1 ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMJAC1') ;
ITJACO = 2 ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMJAC2') ;
ITJACO = -2 ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMLMJ1') ;
ITJACO = 3 ;
'FINSI' ;
'SI' (ITJACO 'EGA' 0) ;
'MESSAGE' 'KKONV . TYPEJACO ???' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ((ITJACO '<' 0) 'ET' (ORDESP 'EGA' 1)) ;
'MESSAGE' 'KKONV . ORDREESP ???' ;
'MESSAGE' 'KKONV . TYPEJACO ???' ;
'ERREUR' 21 ;
'FINSI' ;
'FINSI' ;
*
***** Les variables conservatives
*
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
'SI' ('EGA' ('VALE' DIME) 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
*
***** On calcule les variables primitive
*
GAMN = 'COPIER' (KKONV . 'GAMN') ;
VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS $DOMA
RN VN PN GAMN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT' (KKONV . 'LIMITEUR')
VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS
$DOMA
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
GAMN ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS
$DOMA
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
GAMN
(DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
'SI' (ITJACO '>' 0) ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
(KKONV . 'LISTINCO')
$DOMA ROF VITF PF GAMF
(KKONV . 'FACELIM') KKONV . 'UINF' KKONV . 'UPRI'
(KKONV . 'TYPEJACO') RN VN PN GAMN
* (KKONV . 'FACELIM')
;
* 'MESSAGE' ('CHAINE' 'zdes') ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
(KKONV . 'LISTINCO')
$DOMA ROF VITF PF GAMF
(KKONV . 'TYPEJACO') RN VN PN GAMN
GRADR GRADV GRADP
ALR ALV ALP
(KKONV . 'GRADRN') (KKONV . 'GRADVN') (KKONV . 'GRADPN')
(KKONV . 'VLIM')
(KKONV . 'FACELIM')
;
'FINSI' ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
(KKONV . 'LISTINCO')
$DOMA ROF VITF PF GAMF
(KKONV . 'FACELIM')
;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' VN ;
'DETR' PN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' VN ;
'OUBL' PN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'DETR' GAMF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
'OUBL' GAMF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'GAZ') 'PERFMULT') ;
****************************************************************************
******** EULER, multiespece, "calorically perfect" (cv = constant) *********
****************************************************************************
IPGAZ = KKONV . 'PGAZ' ;
NESP = 'DIME' (IPGAZ . 'ESPEULE') ;
*
***** Les variables conservatives
*
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
IDIM = 'VALE' 'DIME' ;
'SI' ('EGA' IDIM 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' (IDIM '+' 3) 'PAS' 1 (IDIM '+' 2 '+' NESP)) ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
RYN = 'EXCO' LMOT3 UN (IPGAZ . 'ESPEULE') ;
*
***** On calcule les variables primitive
*
VN PN TN YN GAMN = 'PRIM' 'PERFMULT' IPGAZ
RN GN RETN RYN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF YF GAMF = 'PRET' 'PERFMULT'
1 1 $DOMA RN VN PN YN GAMN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT' (KKONV . 'LIMITEUR')
VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
YN 'GRADGEO' (KKONV . 'GRADYN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
CELL = ALY ;
ALY = ALY '-' ALYLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF YF GAMF = 'PRET' 'PERFMULT' ORDESP ORDTPS
$DOMA IPGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY
GAMN ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF YF GAMF = 'PRET' 'PERFMULT' ORDESP ORDTPS
$DOMA IPGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY
GAMN
(DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMULT' 'RESI' METO
(KKONV . 'LISTINCO')
$DOMA ROF VITF PF GAMF YF IPGAZ
(KKONV . 'TYPEJACO') RN VN PN GAMN IYN ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMULT' 'RESI' METO
(KKONV . 'LISTINCO')
$DOMA ROF VITF PF GAMF YF IPGAZ ;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' VN ;
'DETR' PN ;
'DETR' YN ;
'DETR' RYN ;
'DETR' TN ;
'DETR' GAMN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' VN ;
'OUBL' PN ;
'OUBL' YN ;
'OUBL' RYN ;
'OUBL' TN ;
'OUBL' GAMN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'DETR' GAMF ;
'DETR' YF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
'OUBL' GAMF ;
'OUBL' YF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' GRADY ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV;
'DETR' ALY;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' GRADY ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'OUBL' ALY;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' (KKONV . 'GAZ') 'PERFTEMP') ;
***************************************************************************
******** EULER, "thermally perfect" *********
***************************************************************************
PGAZ = KKONV . 'PGAZ' ;
'SI' ('EXISTE' PGAZ 'ESPEULE') ;
NESP = 'DIME' (PGAZ . 'ESPEULE') ;
LOGESP = VRAI ;
'SINON' ;
NESP = 0 ;
LOGESP = FAUX ;
'FINSI' ;
'SI' ('EXISTE' PGAZ 'SCALPASS') ;
NSCA = 'DIME' (PGAZ . 'SCALPASS') ;
LOGSCA = VRAI ;
'SINON' ;
NSCA = 0 ;
LOGSCA = FAUX ;
'FINSI' ;
*
*** Quatre cas differents
*
* a) LOGESP 'ET' LOGSCA
* b) LOGESP 'ET' ('NON' LOGSCA)
* c) ('NON' LOGESP) 'ET' ('NON' LOGSCA)
* d) ('NON' LOGESP) 'ET' LOGSCA
*
* a) LOGESP 'ET' LOGSCA
'SI' (LOGESP 'ET' LOGSCA) ;
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
NDIM = 'VALE' 'DIME' ;
'SI' ('EGA' NDIM 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' (3+NDIM) 'PAS' 1 'NPAS' (NESP '-' 1)) ;
LMOT4 = (PGAZ . 'ESPEULE') ;
LMOT5 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' (3+NDIM+NESP) 'PAS' 1 'NPAS'
(NSCA '-' 1)) ;
LMOT6 = (PGAZ . 'SCALPASS') ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
RYN = 'EXCO' LMOT3 UN LMOT4 ;
RSN = 'EXCO' LMOT5 UN LMOT6 ;
*
***** On calcule les variables primitive
*
VN PN TN YN SN GAMN = 'PRIM' 'PERFTEMP'
PGAZ RN GN RETN RYN RSN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
PGAZ RN VN PN YN SN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
(KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') YN 'GRADGEO' (KKONV . 'GRADYN') ;
GRADS ALS = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') SN 'GRADGEO' (KKONV . 'GRADSN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
ALSLEV = ('REDU' ALS (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
CELL = ALY ;
ALY = ALY '-' ALYLEV ;
'DETR' CELL ;
CELL = ALS ;
ALS = ALS '-' ALSLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY
SN GRADS ALS ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY
SN GRADS ALS
GAMN (DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
'ERREUR' 21 ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
$DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF YF SF ;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' RYN ;
'DETR' RSN ;
'DETR' VN ;
'DETR' PN ;
'DETR' YN ;
'DETR' SN ;
'DETR' GAMN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' RYN ;
'OUBL' RSN ;
'OUBL' VN ;
'OUBL' PN ;
'OUBL' YN ;
'OUBL' SN ;
'OUBL' GAMN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'DETR' YF ;
'DETR' SF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
'OUBL' YF ;
'OUBL' SF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' GRADY ;
'DETR' GRADS ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV ;
'DETR' ALY ;
'DETR' ALS ;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' GRADY ;
'OUBL' GRADS ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'OUBL' ALY ;
'OUBL' ALS ;
'FINSI' ;
'FINSI' ;
* b) LOGESP 'ET' ('NON' LOGSCA)
'SI' (LOGESP 'ET' ('NON' LOGSCA)) ;
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
NDIM = 'VALE' 'DIME' ;
'SI' ('EGA' NDIM 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' (3+NDIM) 'PAS' 1 'NPAS' (NESP '-' 1)) ;
LMOT4 = (PGAZ . 'ESPEULE') ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
RYN = 'EXCO' LMOT3 UN LMOT4 ;
*
***** On calcule les variables primitive
*
VN PN TN YN GAMN = 'PRIM' 'PERFTEMP'
PGAZ RN GN RETN RYN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
PGAZ RN VN PN YN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
(KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') YN 'GRADGEO' (KKONV . 'GRADYN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
CELL = ALY ;
ALY = ALY '-' ALYLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
YN GRADY ALY
GAMN (DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
'ERREUR' 21 ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
$DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF YF ;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' RYN ;
'DETR' VN ;
'DETR' PN ;
'DETR' YN ;
'DETR' GAMN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' RYN ;
'OUBL' VN ;
'OUBL' PN ;
'OUBL' YN ;
'OUBL' GAMN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'DETR' YF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
'OUBL' YF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' GRADY ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV ;
'DETR' ALY ;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' GRADY ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'OUBL' ALY ;
'FINSI' ;
'FINSI' ;
* c) ('NON' LOGESP) 'ET' ('NON' LOGSCA)
'MESSAGE' ;
'MESSAGE' 'Ciao' ;
'SI' (('NON' LOGESP) 'ET' ('NON' LOGSCA)) ;
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
NDIM = 'VALE' 'DIME' ;
'SI' ('EGA' NDIM 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
*
***** On calcule les variables primitive
*
VN PN TN GAMN = 'PRIM' 'PERFTEMP'
PGAZ RN GN RETN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
PGAZ RN VN PN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
(KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
GAMN (DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
'ERREUR' 21 ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
$DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF ;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' VN ;
'DETR' PN ;
'DETR' GAMN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' VN ;
'OUBL' PN ;
'OUBL' GAMN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV ;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' GRADY ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'FINSI' ;
'FINSI' ;
* d) ('NON' LOGESP) 'ET' LOGSCA
'SI' (('NON' LOGESP) 'ET' LOGSCA) ;
MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
NDIM = 'VALE' 'DIME' ;
'SI' ('EGA' NDIM 2) ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 ) ;
LMOT2 = 'MOTS' 'UX' 'UY' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
'SINON' ;
LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' 2 3 4) ;
LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
'FINSI' ;
LMOT5 = 'EXTRAIRE' (KKONV . 'LISTINCO')
('LECT' (3+NDIM) 'PAS' 1 'NPAS'
(NSCA '-' 1)) ;
LMOT6 = (PGAZ . 'SCALPASS') ;
RN = 'EXCO' MOT1 UN ;
GN = 'EXCO' LMOT1 UN LMOT2 ;
RETN = 'EXCO' MOT2 UN ;
RSN = 'EXCO' LMOT5 UN LMOT6 ;
*
***** On calcule les variables primitive
*
VN PN TN SN GAMN = 'PRIM' 'PERFTEMP'
PGAZ RN GN RETN RSN ;
*
***** On calcule les variables aux faces
*
'SI' (ORDESP 'EGA' 1) ;
*
********* Ordre 1 en espace
*
ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
PGAZ RN VN PN SN ;
'SINON' ;
*
********* Ordre 2 en espace
*
GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
(KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
'GRADGEO' (KKONV . 'GRADVN') ;
GRADS ALS = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
(KKONV . 'LIMITEUR') SN 'GRADGEO' (KKONV . 'GRADSN') ;
'SI' ('EXISTE' RV 'MAIFAN') ;
ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
ALSLEV = ('REDU' ALS (RV . 'MAIFAN')) ;
CELL = ALR ;
ALR = ALR '-' ALRLEV ;
'DETR' CELL ;
CELL = ALP ;
ALP = ALP '-' ALPLEV ;
'DETR' CELL ;
CELL = ALV ;
ALV = ALV '-' ALVLEV ;
'DETR' CELL ;
CELL = ALS ;
ALS = ALS '-' ALSLEV ;
'DETR' CELL ;
'FINSI' ;
'SI' (ORDTPS 'EGA' 1);
*
********* Ordre 1 en temps
*
ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
SN GRADS ALS ;
'SINON' ;
*
********* Ordre 2 en temps (en explicite)
*
DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
(RV . 'PASDETPS' . 'TPSM') ;
ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
$DOMA PGAZ
RN GRADR ALR
VN GRADV ALV
PN GRADP ALP
SN GRADS ALS
GAMN (DELTAM1 '/' 2.0);
'FINSI' ;
'FINSI' ;
'SI' LOGIMP ;
'ERREUR' 21 ;
'SINON' ;
JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
$DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF SF ;
'FINSI' ;
*
**** On detrui les choses qui ne servent plus
*
'DETR' UN ;
'OUBL' UN ;
'DETR' RN ;
'DETR' GN ;
'DETR' RETN ;
'DETR' RSN ;
'DETR' VN ;
'DETR' PN ;
'DETR' SN ;
'DETR' GAMN ;
'OUBL' RN ;
'OUBL' GN ;
'OUBL' RETN ;
'OUBL' RSN ;
'OUBL' VN ;
'OUBL' PN ;
'OUBL' SN ;
'OUBL' GAMN ;
*
**** Les MCHAML faces
*
'DETR' ROF ;
'DETR' VITF ;
'DETR' PF ;
'DETR' SF ;
'OUBL' ROF ;
'OUBL' VITF ;
'OUBL' PF ;
'OUBL' SF ;
*
**** Les pentes et les limiteurs
*
'SI' (ORDESP 'EGA' 2);
'DETR' GRADR ;
'DETR' GRADP ;
'DETR' GRADV ;
'DETR' GRADS ;
'DETR' ALR ;
'DETR' ALP ;
'DETR' ALV ;
'DETR' ALS ;
'OUBL' GRADR ;
'OUBL' GRADP ;
'OUBL' GRADV ;
'OUBL' GRADS ;
'OUBL' ALR ;
'OUBL' ALP ;
'OUBL' ALV;
'OUBL' ALS ;
'FINSI' ;
'FINSI' ;
'FINSI' ;
'SI' ('EGA' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT) ;
ALPDT = 'PROG' ((KKONV . 'ALPHA') '*' DELTAT) ;
'SINON' ;
ALPDT = 'PROG' ;
'FINSI' ;
KKONV . 'DT' = DELTAT ;
'FINPROC' JACO RESIDU ALPDT THETA ;
*****************************************************
*****************************************************
** FIN PROCEDURE PKON **
*****************************************************
*****************************************************
*****************************************************
*****************************************************
***** PROCEDURE PROLIM *****
*****************************************************
*****************************************************
*
*
**** Cas Euler mono-esp�èce
*
'DEBPROC' PROLIM ;
'ARGUMENT' RV * TABLE ;
UN = RV . 'UN' ;
UNLIM = RV . 'UNLIM' ;
MAILLIM = 'EXTRAIRE' UNLIM 'MAILLAGE' ;
UNLEV = 'REDU' UN MAILLIM '*' (-1.0) ;
UN = UN '+' UNLEV '+' UNLIM ;
'FINPROC' UN ;
*****************************************************
*****************************************************
***** FIN PROCEDURE PROLIM *****
*****************************************************
*****************************************************
*********************************************************************
**** Procedure CALC *************************************************
*********************************************************************
*
* Cette procédure, utilisée comme un opérateur, calcule la différence
* entre deux pas de temps toutes les (RVX . 'FCALC') itérations.
* L'evolution de cette différence (erreur absolue) au cours du temps
* est conservée en vue d'un post-traitement.
*
*
'DEBP' CALC ;
'ARGU' RVX*'TABLE' ;
*
RV = RVX . 'EQEX' ;
UN = RV . 'UN' ;
RN = 'EXCO' UN 'RN' ;
RUX = 'EXCO' UN 'RUX' ;
RUY = 'EXCO' UN 'RUY' ;
MOMSQ = (RUX '*' RUX) '+' (RUY '*' RUY) ;
MOM = MOMSQ '**' 0.5 ;
*
'SI' ( 'EXIS' RVX 'COMPT') ;
RVX . 'COMPT' = RVX . 'COMPT' + 1 ;
'SINON' ;
RVX . 'COMPT' = 1 ;
RVX . 'IT' = 'PROG' ;
RVX . 'TPS' = 'PROG' ;
RVX . 'ER' = 'PROG' ;
RVX . 'RN0' = 'COPI' RN ;
'FINSI' ;
*******************************************
DD = RVX . 'COMPT' ;
COMBIEN = RVX . 'FCALC' ;
NN = DD '/' COMBIEN ;
LO = (DD '-' (COMBIEN '*' NN)) 'EGA' 0 ;
'SI' LO ;
ERR = MOM '-' (RVX . 'RN0') ;
RVX . 'RN0' = 'COPI' MOM ;
ERRINF = 'MAXI' ERR 'ABS' ;
ELI = ('LOG' (ERRINF + 1.0E-50))/('LOG' 10.) ;
'MESSAGE' ;
'MESSAGE' 'Erreur de convergence' ;
'MESS' 'ITERATION ' (RVX . 'COMPT') ' LOG10 ERREUR ' ELI ;
'MESSAGE' ;
IT = 'PROG' RVX . 'COMPT' ;
ER = 'PROG' ELI ;
TPS = 'PROG' (RV . 'PASDETPS' . 'TPS') ;
RVX . 'IT' = (RVX . 'IT') 'ET' IT ;
RVX . 'ER' = (RVX . 'ER') 'ET' ER ;
RVX . 'TPS' = (RVX . 'TPS') 'ET' TPS ;
'FINS' ;
IRESU IJACO ='KOPS' 'MATRIK' ;
IALPDT = 'PROG' ;
THETA = 0.0 ;
***************************************************
RV . 'MATIDE' = 'KOPS' 'MATIDE' ('MOTS' 'RN' 'RUX' 'RUY' 'RETN')
($DOMTOT . 'CENTRE') 'MATRIK' ;
***************************************************
*****************************************************************
LMOT = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
RN = 'EXCO' 'RN' (RV . 'UN') ;
GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
RETN = 'EXCO' 'RETN' (RV . 'UN') ;
****************
VN PN = 'PRIM' 'PERFMONO'
RN GN RETN GAMN ;
***************************************************
'MENAGE' ;
'RESPRO' IJACO IRESU IALPDT THETA ;
'FINP' ;
************************************************************************
************************************************************************
***************** FIN PARTIE PROCEDURES ********************************
************************************************************************
************************************************************************
**********************************************************************
* CALCUL DE L'ECOULEMENT SUBSONIQUE ISENTROPIQUE STATIONNAIRE DANS *
* UN CANAL MAILLAGE -------- MAILLAGE ----- *-------------------------------------------------------------------
* GRAPH = VRAI ;
******************
**** MAILLAGE ****
******************
NY = 4 ;
NX1 = NY ;
NX2 = 2 '*' NX1 ;
NX3 = NX1 ;
NX = NX1 '+' NX2 '+' NX3 ;
DX = 4.0 '/' NX ;
* NRAFF = 2 ;
A0 = -2.0 0.0 ;
A1 = -1.0 0.0 ;
A2 = 1.0 0.0 ;
A3 = 2.0 0.0 ;
A4 = 2.0 1.0 ;
A5 = -2.0 1.0 ;
*
**** LIGB
*
LIGB1 = A0 'DROIT' NX1 A1 ;
* LIGB2 (On utilise un propriete de 'ET' ; si 'ET' change ?)
xcel = ('COORDONNEE' 1 A1) '+' DX ;
ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
ACEL = xcel ycel ;
LIGB2 = A1 'DROIT' 1 ACEL ;
'REPETER' BL1 (NX2 '-' 2) ;
ACEL0 = ACEL ;
xcel = xcel '+' DX ;
ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
ACEL = xcel ycel ;
LIGB2 = LIGB2 'ET' (ACEL0 'DROIT' 1 ACEL) ;
'FIN' BL1;
LIGB2 = LIGB2 'ET' (ACEL 'DROIT' 1 A2) ;
LIGB3 = A2 'DROIT' NX3 A3 ;
LIGB = LIGB1 'ET' LIGB2 'ET' LIGB3 ;
*
**** LIGH
*
LIGH = A4 'DROIT' NX A5 ;
*
*** LIGG
*
LIGG = A5 'DROIT' NY A0 ;
*
**** LIGD
*
LIGD = A3 'DROIT' NY A4 ;
LIGT = LIGB 'ET' LIGD 'ET' LIGH 'ET' LIGG ;
*
**** Le domaine
*
DOMINT = LIGT 'SURFACE' 'PLANE' ;
DOMINT = 'DEDU' DOMINT LIGT LIGT 'REGU' ;
*
**** Le rafinement
*
*
**** C'est la Perle qui a fait ça quand il etait encore tres brillant!!!
* (Avant la lettre de l'Arme!!!)
* Mais il va bientot etre un vrai homme!!!
*
DOMCEL = DOMINT ;
'SI' (nraff > 0) ;
'REPETER' bcl nraff ;
mttemp = 'CHANGER' DOMCEL 'QUADRATIQUE' ;
$mtt = 'DOMA' mttemp 'MACRO' ;
DOMCEL = ($mtt . 'MAILLAGE') ;
'OUBLIER' mttemp ;
'OUBLIER' $mtt ;
DOMINT = DOMCEL ;
LIGCON = 'CONTOUR' DOMINT ;
*
**** Je doit transler le points du BUMP (operateur FORME)
*
NLIGB2 = LIGCON 'ELEM' 'COMPRIS' A1 A2 ;
MAILB = 'CHANGER' NLIGB2 'POI1';
MAILB0 = MAILB 'PLUS' (0.0D0 0.0D0);
* Listreels des deplacements
NP = 'NBNO' MAILB ;
LISTX = 'PROG' NP '*' 0.0 ;
LISTY = 'PROG' NP '*' 0.0 ;
'REPETER' BL1 ('NBNO' MAILB) ;
xcel ycel0 = 'COORDONNEE' (MAILB 'POIN' &BL1);
ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
'REMPLACER' LISTY &BL1 (ycel '-' ycel0) ;
'FIN' BL1 ;
DEPCH = 'MANUEL' 'CHPO' MAILB 2 'UX' LISTX 'UY' LISTY ;
'FORME' DEPCH ;
'FIN' bcl ;
DX = DX '/' (NRAFF '*' 2.0 ) ;
'SINON' ;
LIGCON = 'CONTOUR' DOMINT ;
'FINSI' ;
'MENAGE' ;
*
**** Les C.L.
*
NLIGD = LIGCON 'ELEM' 'COMPRIS' A3 A4 ;
NLIGG = LIGCON 'ELEM' 'COMPRIS' A5 A0 ;
'OPTION' 'ELEM' 'QUA4' ;
FG = (NLIGG 'TRANSLATION' 1 ((-1.0 '*' DX) 0.0)) 'COULEUR' 'ROUGE' ;
FD = (NLIGD 'TRANSLATION' 1 (DX 0.0)) 'COULEUR' 'ROUGE' ;
FRONT = FG 'ET' FD ;
*
**** Domaine '+' CL
*
DOMTOT = DOMINT 'ET' FG 'ET' FD ;
'ELIMINATION' DOMTOT 0.0001 ;
*********************
*** TABLE DOMAINE ***
*********************
$DOMTOT = 'DOMA' DOMTOT ;
$DOMINT = 'DOMA' DOMINT 'INCL' $DOMTOT ;
$FG = 'DOMA' FG 'INCL' $DOMTOT ;
$FD = 'DOMA' FD 'INCL' $DOMTOT ;
$FRONT = 'DOMA' FRONT 'INCL' $DOMTOT ;
'DOMA' $DOMINT 'XXNORMAF' ;
CHPONOR = $DOMINT . 'XXNORMAF' ;
MOD1 = 'MODELISER' ($DOMTOT . 'MAILLAGE' ) 'THERMIQUE';
*
**** On doit imposer un'entree subsonic (u>0 i.e. 3 condition a imposer) et une
* sortie subsonic (1 condition)
*
*
**** Maillage entree subsonic
*
POIN0 = NLIGG 'POIN' 1;
X1 Y1 = 'COORDONNEE' POIN0;
'REPETER' BLLIM (('NBNO' NLIGG) '-' 1) ;
X0 = X1 ;
Y0 = Y1 ;
POIN0 = NLIGG 'POIN' (&BLLIM '+' 1) ;
X1 Y1 = 'COORDONNEE' POIN0 ;
XFAC = (X0 '+' X1) '/' 2 ;
YFAC = (Y0 '+' Y1) '/' 2 ;
PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
'LARGEMENT' PFAC ;
GEOFAC2 = ($FG . 'FACEL') 'ELEM' 'APPUYE'
'LARGEMENT' PFAC ;
*
**** Tranformation en POI1
*
GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
PCEL11 = GEO1POI1 'POIN' 1 ;
PCEL12 = GEO1POI1 'POIN' 2 ;
GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
PCEL21 = GEO2POI1 'POIN' 1 ;
PCEL22 = GEO2POI1 'POIN' 2 ;
*
**** Il faur verifier que PFAC = PCEL12 = PCEL22
* ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
*
'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( ('NBEL' GEO2POI1) 'NEG' 2);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( PCEL12 'NEG' PFAC);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( PCEL22 'NEG' PFAC);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
*
*** Creation d'un maillage SEG2
*
'SI' (&BLLIM 'EGA' 1);
BONCONNE = 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' ;
MAILNOR = 'MANUEL' PCEL21 'POI1' ;
LISTVX = 'PROG' ('EXTRAIRE' CHPONOR PCEL12 'UX') ;
LISTVY = 'PROG' ('EXTRAIRE' CHPONOR PCEL12 'UY') ;
'SINON' ;
BONCONNE = BONCONNE 'ET'
( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' );
MAILNOR = MAILNOR 'ET' PCEL21 ;
LISTVX = LISTVX 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
'UX')) ;
LISTVY = LISTVY 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
'UY')) ;
'FINSI' ;
'FIN' BLLIM ;
*
**** Maillage sortie subsonic
*
POIN0 = NLIGD 'POIN' 1;
X1 Y1 = 'COORDONNEE' POIN0;
'REPETER' BLLIM (('NBNO' NLIGD) '-' 1) ;
X0 = X1 ;
Y0 = Y1 ;
POIN0 = NLIGD 'POIN' (&BLLIM '+' 1) ;
X1 Y1 = 'COORDONNEE' POIN0 ;
XFAC = (X0 '+' X1) '/' 2 ;
YFAC = (Y0 '+' Y1) '/' 2 ;
PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
'LARGEMENT' PFAC ;
GEOFAC2 = ($FD . 'FACEL') 'ELEM' 'APPUYE'
'LARGEMENT' PFAC ;
*
**** Tranformation en POI1
*
GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
PCEL11 = GEO1POI1 'POIN' 1 ;
PCEL12 = GEO1POI1 'POIN' 2 ;
GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
PCEL21 = GEO2POI1 'POIN' 1 ;
PCEL22 = GEO2POI1 'POIN' 2 ;
*
**** Il faur verifier que PFAC = PCEL12 = PCEL22
* ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
*
'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( ('NBEL' GEO2POI1) 'NEG' 2);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( PCEL12 'NEG' PFAC);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( PCEL22 'NEG' PFAC);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation du domaine entree subsonique';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
*
*** Creation d'un maillage SEG2
*
BONCONNE = BONCONNE 'ET'
( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' );
MAILNOR = MAILNOR 'ET' PCEL21 ;
LISTVX = LISTVX 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
'UX')) ;
LISTVY = LISTVY 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
'UY')) ;
'FIN' BLLIM ;
CHNORM = 'MANUEL' 'CHPO' MAILNOR 2 'UX' LISTVX 'UY' LISTVY ;
*
* N.B.:
* CHNORM = normales sortantes du domaine!!!
*
TITOLO = ('CHAINE'
'Maillage et con. aux bords (+ norm. sort.). NBEL = '
('NBNO' ($DOMTOT . 'CENTRE'))) ;
'SI' GRAPH ;
VECTN = 'VECTEUR' CHNORM .1 'UX' 'UY' 'BLEU' ;
'TRACER' VECTN (DOMTOT 'ET' BONCONNE)
'TITRE' TITOLO ;
'FINSI' ;
*******************************************
****** LIGNE de Post-traitement ***********
*******************************************
LIGB = LIGCON 'ELEM' 'COMPRIS' A0 A3 ;
POIN0 = LIGB 'POIN' 1;
X1 Y1 = 'COORDONNEE' POIN0 ;
'REPETER' BLLIM (('NBNO' LIGB) '-' 1) ;
X0 = X1 ;
Y0 = Y1 ;
POIN0 = LIGB 'POIN' (&BLLIM '+' 1) ;
X1 Y1 = 'COORDONNEE' POIN0 ;
XFAC = (X0 '+' X1) '/' 2 ;
YFAC = (Y0 '+' Y1) '/' 2 ;
PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
'LARGEMENT' PFAC ;
*
**** Tranformation en POI1
*
GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
PCEL11 = GEO1POI1 'POIN' 1 ;
PCEL12 = GEO1POI1 'POIN' 2 ;
*
**** Il faur verifier que PFAC = PCEL12 = PCEL22
* ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
*
'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation de la ligne pour le post.';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
'SI' ( PCEL12 'NEG' PFAC);
'MESSAGE' ;
'MESSAGE'
'Probleme dans la creation de la ligne pour le post.';
'MESSAGE' ;
'ERREUR' 21 ;
'FINSI' ;
*
*** Creation d'un maillage SEG2
*
'SI' (&BLLIM 'EGA' 1);
PCEN0 = PCEL11 ;
'SINON' ;
'SI' (&BLLIM 'EGA' 2);
LIGPOST = 'MANUEL' 'SEG2' PCEN0 PCEL11 ;
PCEN0 = PCEL11 ;
'SINO' ;
LIGPOST = LIGPOST 'ET' ('MANUEL' 'SEG2' PCEN0 PCEL11) ;
PCEN0 = PCEL11 ;
'FINSI' ;
'FINSI' ;
'FIN' BLLIM ;
*****************************************************
* CALCUL DE L'ECOULEMENT SUBSONIQUE ISENTROPIQUE STATIONNAIRE DANS *
* UN CANAL *
* *
* INITIAL CONDITIONS ------ INITIAL CONDITIOINS
*********************************************************************
* GRAPH = VRAI ;
***************************************************************
***** PROCEDURE POUR CALCULER LES VARIABLES CONSERVATIVES *****
***************************************************************
'DEBPROC' CONS ;
'ARGUMENT' RN*'CHPOINT' VN*'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;
RVN = RN '*' VN ('MOTS' 'SCAL' 'SCAL') ('MOTS' 'UX' 'UY')
('MOTS' 'UX' 'UY') ;
CELL = 'PSCAL' RVN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
RECIN = 0.5 '*' CELL ;
REIN = PN '/' (GAMN '-' 1.0) ;
RETN = RECIN '+' REIN ;
DETR CELL ;
DETR RECIN ;
DETR REIN ;
'RESPRO' RVN RETN ;
'FINPROC' ;
***************************************************************
***************************************************************
***************************************************************
RN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' RO_INF
'NATURE' 'DISCRET' ;
VN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 2 'UX' U_INF
'UY' 0.0 'NATURE' 'DISCRET' ;
PN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' P_INF
'NATURE' 'DISCRET' ;
GAMN = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' GAMSCAL
'NATURE' 'DISCRET' ;
GN0 RETN0 = CONS RN0 VN0 PN0 GAMN ;
VN20 = 'PSCAL' VN0 VN0 ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
CN20 = GAMSCAL '*' (PN0 '/' RN0) ;
MACHN20 = VN20 '/' CN20 ;
MACHN0 = MACHN20 '**' 0.5 ;
MOD1 = 'MODELISER' ($DOMTOT . 'MAILLAGE' ) 'THERMIQUE';
'SI' GRAPH ;
CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN0 ;
CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN0 ;
CHM_VN = 'KCHA' $DOMTOT 'CHAM' VN0 ;
CHM_MACH = 'KCHA' $DOMTOT 'CHAM' MACHN0 ;
'TRACER' CHM_RN MOD1
'TITR' ('CHAINE' 'RN at t=' 0.0);
'TRACER' CHM_PN MOD1
'TITR' ('CHAINE' 'PN at t=' 0.0);
'TRACER' CHM_MACH MOD1
'TITR' ('CHAINE' 'MACHN at t=' 0.0);
'TRACER' CHM_VN MOD1
'TITR' ('CHAINE' 'VN at t=' 0.0);
'FINSI' ;
UN =
('NOMC' 'RN' RN0 'NATURE' 'DISCRET') 'ET'
('EXCO' ('MOTS' 'UX' 'UY') GN0 ('MOTS' 'RUX' 'RUY')
'NATURE' 'DISCRET') 'ET'
('NOMC' 'RETN' RETN0 'NATURE' 'DISCRET') ;
UNLIM0 = 'REDU' UN ($FRONT . 'CENTRE') ;
*****************************************************
*****************************************************
*****************************************************
*****************************************************
**************** La table RV **********************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
UINF = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' U_INF
'NATURE' 'DISCRET' ;
UPRI = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' 0.0
'NATURE' 'DISCRET' ;
RV = 'TABLE' ;
RV . 'UN' = UN ;
**** Le domaine interne
RV . 'DOMINT' = $DOMINT . 'CENTRE' ;
*
RV . 'CLIM' = VRAI ;
*
RV . 'INST' = VRAI ;
RV . 'CONS' = FAUX ;
*
RV . 'TFINAL' = 1.D6 ;
RV . 'NITMAEX' = 40 ;
*
RV . 'NITMAIN' = 2 ;
RV . 'NITMIIN' = 1 ;
RV . 'EPSINT' = 1.0D-3 ;
***********************************
*****************************************************************
LMOT = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
RN = 'EXCO' 'RN' (RV . 'UN') ;
GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
RETN = 'EXCO' 'RETN' (RV . 'UN') ;
****************
VN PN = 'PRIM' 'PERFMONO'
RN GN RETN GAMN ;
**************************************
RV . 'MATIDE' = 'KOPS' 'MATIDE' ('MOTS' 'RN' 'RUX' 'RUY' 'RETN')
($DOMTOT . 'CENTRE') 'MATRIK' ;
******************************************************************
*
RV . 'FEXT' = 20 ;
RV . 'FINT' = 1 ;
*
RV . 'LISTOPER' = 'MOTS' 'CALC' 'PKON' ;
*
**** Parametres de la procedure PROLIM
*
RV . 'MAIFAN' = $FRONT . 'CENTRE' ;
RV . 'UNLIM' = 'REDU' UNLIM0 ($FRONT . 'CENTRE') ;
******************************************************
** Here is the information for the BC
******************************************************
RV . 'CONNECT' = BONCONNE ;
RV . 'NORM' = CHNORM ;
RV . 'GAMSCAL' = GAMSCAL ;
*
VITFAN = 'MANUEL' 'CHPO' ($FRONT . 'CENTRE') 2
'UX' U_INF 'UY' 0.0 ;
VNORMFAN = 'PSCAL' VITFAN CHNORM ('MOTS' 'UX' 'UY')
('MOTS' 'UX' 'UY') ;
SIGNVN = (2.0 '*' ('MASQUE' VNORMFAN 'SUPERIEUR' 0.0))
'-' 1.0 ;
SN_INF = P_INF '/' (RO_INF '**' GAMSCAL) ;
CELL_INF = (2.0 '/' (GAMSCAL '-' 1.0)) '*'
((GAMSCAL '*' P_INF '/' RO_INF) '**' 0.5) ;
RV . 'R1INF' = (VNORMFAN '*' SIGNVN) '-' CELL_INF ;
RV . 'R3INF' = (VNORMFAN '*' SIGNVN) '+' CELL_INF ;
RV . 'R2INF' = SN_INF ;
RV . 'UTINF' = 'MANUEL' 'CHPO' ($FRONT . 'CENTRE')
1 'SCAL' 0.0 ;
********************************************************
*** End of the information for the BC
********************************************************
*****************
** CALCUL *******
*****************
RV . '1CALC' = 'TABLE' ;
RV . '1CALC' . 'EQEX' = RV ;
RV . '1CALC' . 'FCALC' = RV . 'NITMAIN' ;
RV . '1CALC' . 'IMPL' = VRAI ;
*****************
* PKON **********
*****************
RV . '2PKON' = 'TABLE' ;
****************************************
* Alberto's strange things.....
****************************************
ACEL = 0.0 0.0 ;
M1 = 'MANU' 'POI1' ACEL ;
M2 = 'MANU' 'POI1' ACEL ;
RV . '2PKON' . 'FACELIM' = 'DIFF' M1 M2 ;
***************************************
RV . '2PKON' . 'UINF' = UINF ;
RV . '2PKON' . 'UPRI' = UPRI ;
RV . '2PKON' . 'EQEX' = RV ;
RV . '2PKON' . 'GAZ' = 'PERFMONO' ;
RV . '2PKON' . 'GAMN' = GAMN ;
RV . '2PKON' . 'DOMA' = $DOMTOT ;
RV . '2PKON' . 'LISTINCO' = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
RV . '2PKON' . 'METHODE' = AUSMPLM ;
RV . '2PKON' . 'IMPL' = VRAI ;
RV . '2PKON' . 'TYPEJACO' = 'AUSMLMJ1' ;
RV . '2PKON' . 'THETA' = 1.0 ;
*
*
RV . '2PKON' . 'ORDREESP' = 2 ;
RV . '2PKON' . 'LIMITEUR' = 'NOLIMITE' ;
RV . '2PKON' . 'PREDCOR' = FAUX ;
RV . '2PKON' . 'ALPHA' = 1000000.0 ;
*
**** Dans le cas explicite, on doit faire beaucoup
* plus d'iterations
*
'SI' ('NON' ( RV . '2PKON' . 'IMPL' )) ;
RV . 'NITMAEX' = (RV . 'NITMAEX') '*' 1 ;
'FINSI' ;
*
*
**** Les gradients
*
'SI' ((RV . '2PKON' . 'ORDREESP') 'EGA' 2) ;
CACCA PIPI = 'KOPS' 'MATRIK' ;
RN = 'EXCO' 'RN' UN ;
GN = 'EXCO' ('MOTS' 'RUX' 'RUY') UN ('MOTS' 'UX' 'UY') ;
RETN = 'EXCO' 'RETN' UN ;
VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
GRADR ALR COEFR = 'PENT' $DOMTOT 'CENTRE' 'EULESCAL' 'NOLIMITE'
RN ;
GRADP ALP COEFP = 'PENT' $DOMTOT 'CENTRE' 'EULESCAL' 'NOLIMITE'
PN ;
GRADV ALV COEFV = 'PENT' $DOMTOT 'CENTRE' 'EULEVECT' 'NOLIMITE'
VN 'CLIM' CACCA ;
RV . '2PKON' . 'GRADRN' = COEFR ;
RV . '2PKON' . 'GRADPN' = COEFP ;
RV . '2PKON' . 'GRADVN' = COEFV ;
RV . '2PKON' . 'VLIM' = CACCA ;
'FINSI' ;
***********************************
* Inversion de la matrice *********
***********************************
RV . 'MATINV' = 'TABLE' 'METHINV' ;
MATTAB = RV . 'MATINV' ;
MATTAB . 'TYPINV' = 5 ;
MATTAB . 'IMPINV' = 0 ;
*
* Matrice pour assurer que la matrice à inverser est correctement
* assemblé
*
* MATTAB . 'MATASS' definie en EXEXIM
* MATTAB . 'MAPREC' "
* MATTAB . 'XINIT' "
*
* Methode de numerotation de DDL
MATTAB . 'TYRENU' = 'SLOA' ;
MATTAB . 'PCMLAG' = 'APR2' ;
MATTAB . 'GMRESTRT' = 50 ;
* ILU
MATTAB . 'PRECOND' = 3 ;
MATTAB . 'NITMAX' = 3000 ;
MATTAB . 'RESID' = 1.D-6 ;
******************************************************************
******************************************************************
******************************************************************
******************************************************************
******************************************************************
******************************************************************
******************************************************************
******************************************************************
*
**** Exexcution EXEXIM
*
'TEMPS' 'ZERO' ;
EXEXIM RV ;
'TEMPS' ;
'MENAGE' ;
'SI' ('NON' (RV . 'INST')) ;
CELL = 'INF' ;
'SINON' ;
CELL = ((RV . '2PKON' . 'ALPHA')) ;
'FINSI' ;
********************************************************************
********** POSTTREATMENT-------------------------------------------
********************************************************************
* GRAPH = VRAI ;
*****************************************************
*************** SOLUTIONS ***************************
*****************************************************
*****************************************************
*
**** Le noms de la procedure PKON
*
LISTOPER = RV . 'LISTOPER' ;
'REPETER' BL1 ('DIME' LISTOPER) ;
NOMPER = 'EXTRAIRE' LISTOPER &BL1 ;
'SI' ('EGA' NOMPER 'PKON') ;
KKON = RV . ('MOT' ('TEXTE' ('CHAINE' &BL1 NOMPER) )) ;
'FINSI' ;
'FIN' BL1 ;
ORD_ESP = KKON . 'ORDREESP' ;
'SI' (RV . 'INST') ;
ALPDT = KKON . 'ALPHA' ;
TFIN = RV . 'PASDETPS' . 'TPS' ;
'SINON' ;
ALPDT = 'INF' ;
TFIN = 'INF' ;
'FINSI' ;
NTOTEL = 'NBNO' ($DOMINT . 'CENTRE') ;
*
**** Les variables conservatives
*
RN = 'EXCO' 'RN' (RV . 'UN') ;
GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
RETN = 'EXCO' 'RETN' (RV . 'UN') ;
*
**** Les variables primitives
*
VN PN = 'PRIM' 'PERFMONO'
RN GN RETN GAMN ;
CSON2 = (GAMN '*' PN) '/' RN ;
VN2 = 'PSCAL' VN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
MACHN2 = VN2 '/' CSON2 ;
MACHN = MACHN2 '**' 0.5 ;
*
*** GRAPHIQUE DES SOLUTIONS
*
MOD1 = 'MODELISER' $DOMTOT 'THERMIQUE';
'SI' GRAPH ;
'TRACER' DOMTOT 'TITRE' ('CHAINE' 'Maillage, NBEL =' NTOTEL) ;
'FINSI' ;
TITOLO = ('CHAINE' METO ', OE = ' ORD_ESP ', ALPDT =' ALPDT
', TFIN =' TFIN ', NBEL = ' NTOTEL) ;
* 'SI' GRAPH ;
CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN ;
CHM_VN = 'KCHA' $DOMTOT 'CHAM' VN ;
CHM_MACH = 'KCHA' $DOMTOT 'CHAM' MACHN ;
SN = (PN '/' (RN '**' GAMSCAL)) ;
ERSN = 'ABS' (SN '-' ((P_INF '/' (RO_INF '**' GAMSCAL)))) ;
CHM_ERSN = 'KCHA' $DOMTOT 'CHAM' ERSN ;
'SI' GRAPH ;
'TRACER' CHM_RN MOD1 ('CONTOUR' DOMTOT)
'TITR' ('CHAINE' 'RN : ' TITOLO) ;
'TRACER' CHM_PN MOD1 ('CONTOUR' DOMTOT)
'TITR' ('CHAINE' 'PN : ' TITOLO) ;
'TRACER' CHM_MACH MOD1 ('CONTOUR' DOMTOT)
'TITR' ('CHAINE' 'MACHN : ' TITOLO);
'TRACER' CHM_VN MOD1 ('CONTOUR' DOMTOT)
'TITR' ('CHAINE' 'VN : ' TITOLO) ;
'TRACER' CHM_ERSN MOD1 ('CONTOUR' DOMTOT)
'TITR' ('CHAINE' 'ERSN : ' TITOLO) ;
'SI' (RV . 'INST') ;
TITOLO1 = 'CHAINE' 'Convergence : ' TITOLO ;
EVER = 'EVOL' 'MANU' 'Niter' (RV . '1CALC' . 'IT') 'Log_10(Linf)'
(RV . '1CALC' . 'ER') ;
'DESSIN' EVER 'TITRE' TITOLO1 ;
EVER1 = 'EVOL' 'MANU' 'tps' (RV . '1CALC' . 'TPS') 'Log_10(Linf)'
(RV . '1CALC' . 'ER') ;
'DESSIN' EVER1 'TITRE' TITOLO1 ;
'FINSI' ;
MNC = 'ELNO' $DOMINT ('KCHT' $DOMINT 'SCAL' 'CENTRE' MACHN) ;
'OPTION' 'ISOV' 'LIGN' ;
'TRACER' DOMINT MNC ('CONTOUR' DOMINT)
'TITR' ('CHAINE' 'MACHN : ' TITOLO) 55 ;
'FINSI' ;
XLIGPOST = 'COORDONNEE' 1 LIGPOST ;
EVCOOR = 'EVOL' 'CHPO' XLIGPOST 'SCAL' LIGPOST ;
LISTX = 'EXTRAIRE' EVCOOR 'ORDO' ;
EVMACH = 'EVOL' 'CHPO' MACHN 'SCAL' LIGPOST ;
LISTMACH = 'EXTRAIRE' EVMACH 'ORDO' ;
EVMACH = 'EVOL' 'MANU' 'x' LISTX 'Mach' LISTMACH ;
'SI' GRAPH ;
'DESSIN' EVMACH 'MIMA' 'TITRE' TITOLO ;
'FINSI' ;
*
**** Entropie
*
EVSN = 'EVOL' 'CHPO' SN 'SCAL' LIGPOST ;
LISTSN = 'EXTRAIRE' EVSN 'ORDO' ;
EVSN = 'EVOL' 'MANU' 'x' LISTX 'SN' LISTSN ;
'SI' GRAPH ;
'DESSIN' EVSN 'MIMA' 'TITRE' TITOLO ;
'FINSI' ;
EVERSN = 'EVOL' 'CHPO' ERSN 'SCAL' LIGPOST ;
LISTERSN = 'EXTRAIRE' EVERSN 'ORDO' ;
EVERSN = 'EVOL' 'MANU' 'x' LISTX 'SN' LISTERSN ;
EVMAX = 'MAXIMUM' LISTERSN ;
'SI' ( EVMAX > ENTERR ) ;
'ERREUR' 5 ;
'FINSI' ;
'SI' GRAPH ;
'DESSIN' EVERSN 'MIMA' 'TITRE' TITOLO ;
'FINSI' ;
PCEL1 = -2.0 0.99 ;
PCEL2 = 2.0 0.99 ;
LIGTRA = PCEL1 'DROIT' (2 '*' NRAFF '*' ('NBNO' LIGH)) PCEL2 ;
PCEL12 = ($DOMINT . 'CENTRE') 'POIN' 'PROC' PCEL1 ;
LIGNEW = ('MANUEL' 'POI1' PCEL12) ;
'REPETER' BL1 (('NBNO' LIGTRA) '-' 1) ;
PCEL11= PCEL12 ;
PCEL13 = LIGTRA 'POIN' (&BL1 '+' 1) ;
PCEL13 = ($DOMINT . 'CENTRE') 'POIN' 'PROC' PCEL13 ;
'SI' (PCEL13 'NEG' PCEL11) ;
PCEL12 = PCEL13 ;
LIGNEW = LIGNEW 'ET' ('MANUEL' 'POI1' PCEL12) ;
'FINSI' ;
'FIN' BL1 ;
LIGNEW = 'QUELCONQUE' 'SEG2' LIGNEW ;
EVRN1 = 'EVOL' 'CHPO' MACHN 'SCAL' LIGNEW ;
LISTRN1 = 'EXTRAIRE' EVRN1 'ORDO' ;
LISTX1 = 'EVOL' 'CHPO' ('COORDONNEE' 1 LIGNEW) 'SCAL' LIGNEW ;
LISTX1 = 'EXTRAIRE' LISTX1 'ORDO' ;
EVERRN1 = 'EVOL' 'MANU' 'x' LISTX1 'RN' LISTRN1 ;
'SI' GRAPH ;
'DESSIN' EVERRN1 'MIMA' 'TITRE' TITOLO ;
'FINSI' ;
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer