* DEADUTIL PROCEDUR GOUNAND 26/01/12 21:15:02 12448 ************************************************************************ * NOM : DEADUTIL * DESCRIPTION : * * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 05/04/2006, version initiale * HISTORIQUE : v1, 05/04/2006, création * HISTORIQUE : 2018/01/22 : chgt nom composante hors diago G21 au lieu * de G12 pour QEQU et QISO * HISTORIQUE : 2018/10/10 : NLINP au lieu de NLIN * HISTORIQUE : * HISTORIQUE : ************************************************************************ * Prière de PRENDRE LE TEMPS de compléter les commentaires * en cas de modification de ce sous-programme afin de faciliter * la maintenance ! ************************************************************************ * * * * 'SI' ('NON' ('EXISTE' lmotcle motcle)) ; 'FINSI' ; * 'SI' ('EGA' motcle 'AXI?') ; laxi = ('EGA' vmod 'AXIS') 'OU' ('EGA' vmod 'UNIDAXIS') 'OU' ('EGA' vmod 'UNIDAXISAXDZ') 'OU' ('EGA' vmod 'UNIDAXISAXCZ') 'OU' ('EGA' vmod 'UNIDAXISAXGZ') ; 'RESPRO' laxi ; 'FINSI' ; * 'SI' ('EGA' motcle 'SPH?') ; lsph = 'EGA' vmod 'UNIDSPHE' ; 'RESPRO' lsph ; 'FINSI' ; * 'SI' ('EGA' motcle 'DIMM') ; 'ARGUMENT' mt*'MAILLAGE' ; tabdim = 'TABLE' ; 'PYR5' 'PY13' 'CU27' 'PR21' 'TE15' 'PY19' ; fidim = FAUX ; dim = -1 ; 'SI' ('EGA' nelem 0) ; *1027 2 *Une donnee de type %M1:8 est vide 'FINSI' ; * 'REPETER' ielem nelem ; melem = 'EXTRAIRE' lelem &ielem ; 'REPETER' itdim 4 ; idim = ('-' &itdim 1) ; lli = tabdim . idim ; * id = ISINLIS melem lli ; * 'SI' ('NEG' id 0) ; id = 'EXISTE' lli melem ; 'SI' id ; 'SI' fidim ; 'SI' ('NEG' dim idim) ; cherr = 'CHAINE' 'Composite mesh not allowed' ; 'ERREUR' cherr ; 'FINSI' ; 'SINON' ; dim = idim ; fidim = VRAI ; 'FINSI' ; 'FINSI' ; 'FIN' itdim ; 'FIN' ielem ; * 'SI' ('NON' fidim) ; cherr = 'CHAINE' 'No known elements in this mesh' ; 'ERREUR' cherr ; 'FINSI' ; * 'RESPRO' dim ; 'FINSI' ; * * * 'SI' ('EGA' motcle 'TYPM') ; 'ARGUMENT' mt*'MAILLAGE' ; tabtyp = 'TABLE' ; * fityp = FAUX ; typ = -1 ; 'SI' ('EGA' nelem 0) ; *1027 2 *Une donnee de type %M1:8 est vide 'FINSI' ; * 'REPETER' ielem nelem ; melem = 'EXTRAIRE' lelem &ielem ; 'REPETER' ittyp 3 ; ityp = &ittyp ; lli = tabtyp . ityp ; * id = ISINLIS melem lli ; * 'SI' ('NEG' id 0) ; id = 'EXISTE' lli melem ; 'SI' id ; 'SI' fityp ; 'SI' ('NEG' typ ityp) ; cherr = 'CHAINE' 'Composite mesh not allowed' ; 'ERREUR' cherr ; 'FINSI' ; 'SINON' ; typ = ityp ; fityp = VRAI ; 'FINSI' ; 'FINSI' ; 'FIN' ittyp ; 'FIN' ielem ; * 'SI' ('NON' fityp) ; cherr = 'CHAINE' 'No known elements in this mesh' ; 'ERREUR' cherr ; 'FINSI' ; * mtyp = 'EXTRAIRE' listyp typ ; 'RESPRO' mtyp ; 'FINSI' ; * * QISO PROCEDUR GOUNAND 06/04/06 17:53:15 5371 ************************************************************************ * NOM : QISO * DESCRIPTION : Critère de qualité d'un maillage : alignement * (= isotropie) * * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 11/05/2007, version initiale * HISTORIQUE : v1, 11/05/2007, création * HISTORIQUE : 2018/01/22 : chgt nom composante hors diago G21 au lieu * de G12 * HISTORIQUE : 2025/11/20 : mutualisation avec QEQU * HISTORIQUE : ************************************************************************ * Prière de PRENDRE LE TEMPS de compléter les commentaires * en cas de modification de ce sous-programme afin de faciliter * la maintenance ! ************************************************************************ * * * * 'REPE' bmcle ; 'SI' ('NON' indicok) ; lindic2 = lindic2 'ET' mindic ; 'SINO' ; lindic = lindic 'ET' mindic ; 'FINS' ; 'FIN' bmcle ; 'SINO' ; 'REPE' bmcle ; lindic2 = lindic2 'ET' mindic ; 'FIN' bmcle ; 'FINS' ; * 'ARGUMENT' mail*'MAILLAGE' ; * *lmotcle2 = 'MOTS' 'METR' 'DISG' 'METG' 'DENS' ; * lchad = FAUX ; lchp = FAUX ; ldisg = FAUX ; lmg = FAUX ; lmetdisc = faux ; * * lmc = 'EXISTE' lmotcle2 motcle2 ; 'SI' ('NON' lmc) ; *1052 2 *Mot-cle incorrect "%M1:4". Voici la liste des valeurs admises : %M5:40 * 'ERRE' 1052 'AVEC' ('CHAI' motcle2 'METR DISG METG DENS') ; 'FINSI' ; * 'SI' ('EGA' motcle2 'METR') ; itai2 = tai '**' -2 ; chp = chpt ; lchp = vrai ; lchad = faux ; 'SINO' ; 'ARGUMENT' chad/'MCHAML' ; lchad = 'EXISTE' chad ; 'SI' ('NON' lchad) ; 'ARGUMENT' chp/'CHPOINT' ; lchp = 'EXISTE' chp ; 'SI' lchp ; 'FINS' ; 'SINON' ; lchp = FAUX ; 'FINSI' ; 'FINS' ; 'FINS' ; * 'SI' ('EGA' motcle2 'DENS') ; * 'ARGUMENT' chp*'CHPOINT' ; * chp = 'REDU' chp mail ; * kmodl1 = 'MODE' mail 'THERMIQUE' ; * chad = 'CHAN' 'CHAM' kmodl1 chp ; * chad = (chad ** -2) 'NOMC' 'G' ; * lchad = VRAI ; * lchp = FAUX ; * 'FINSI' ; * 'SI' ('EGA' motcle2 'DISG') ; ldisg = VRAI ; 'FINSI' ; * 'SI' ('EGA' motcle2 'METG') ; lmg = VRAI ; 'FINSI' ; * 'FIN' imcle2 ; lmet = 'OU' lchad lchp ; * * Initialisations * * 'SI' ('OU' ('<' idim 1) ('>' idim 3)) ; * 709 2 Fonction indisponible en dimension %i1. 'ERREUR' 709 'AVEC' idim ; 'FINSI' ; 'SI' (('EGA' imod 'AXIS') 'OU' ('EGA' imod 'UNIDAXIS') 'OU' ('EGA' imod 'FOUR') 'OU' ('EGA' imod 'SPHE')) ; *-105 0 Mode de calcul actuel %m1:32 * 710 2 Fonction indisponible pour ce mode de calcul 'FINSI' ; * vquaf = ('EGA' vtyp 'QUAF') ; 'SI' ('ET' ldisg ('NON' vquaf)) ; 'MESS' 'DISG option :' ; * 66 2 L'objet %m1:8 doit etre de type %m9:16 'FINSI' ; * * Maillage * *'SI' vquaf ; _mt = mail ; *'SINON' ; * _mt = 'CHANGER' mail 'QUAF' ; *'FINSI' ; * * Inconnus et discrétisation * 'SI' ('NON' lmg) ; 'SI' ('EGA' vtyp 'LINE') ; 'SINON' ; methgau = 'GAM2' ; 'FINSI' ; 'FINSI' ; 'SI' ('NON' ldisg) ; gdisc = vtyp ; 'FINSI' ; * * Métrique * ncmet = '/' ('*' idim ('+' idim 1)) 2 ; 'SI' lmet; 'SI' lchad ; metdisc = gdisc ; 'FINSI' ; 'SI' lchp ; chpmet = chp ; 'SI' ('NON' lmetdisc) ; metdisc = gdisc ; 'FINS' ; 'FINSI' ; 'SI' ('EGA' dncom 1) ; 'SINO' ; 'FINS' ; chpmett = chpmet ; 'SI' ('>' idim 1) ; chpmet0 = chpmet '*' 0. ; 'FINS' ; 'SI' ('>' idim 2) ; 'FINS' ; 'FINS' ; 'MESS' 'Noms de composantes metrique pas OK :' ; 'LIST' lncom ; 'FINS' ; 'FINSI' ; * 'SI' ('NON' ldisg) ; 'SINO' ; 'FINS' ; 'REPE' ilindic dlindic ; 'SI' ('EGA' nomindic 'TOPO') ; 'SI' lmet ; 'SINO' ; 'FINS' ; icomp = &iicomp ; 'SI' ('EGA' icomp 1) ; 'SINO' ; 'FINS' ; ncompn = ncompn 'ET' ncompi ; 'FIN' iicomp ; * Homogene a une longueur * 'SI' ('>' vdim 2) ; * vfonc = '**' vfonc ('/' 1. ('-' vdim 1)) ; * 'FINS' ; 'SINO' ; 'FINS' ; 'FINS' ; 'SI' ('EGA' nomindic 'EQLT') ; lmet2 = FAUX ; 'SINO' ; lmet2 = lmet ; 'FINS' ; * * Calcul de la fonctionnelle * numop = 1 ; numvar = 1 ; numder = vdim ; numdat = 0 ; numcof = 0 ; * A . 'VAR' . 1 . 'VALEUR' = 1.D0 ; * numvar = 1 ; numdat = ncmet ; numcof = 1 ; B . 'VAR' . 1 . 'VALEUR' = 1.D0 ; * idat = 0 ; 'REPETER' idi idim ; nomdat = 'CHAINE' 'G' &idi &idi ; * 'MESSAGE' ('CHAINE' 'nomdat=' nomdat) ; idat = '+' idat 1 ; 'SI' lmet2 ; B . 'DAT' . idat . 'DISC' = metdisc ; 'SINON' ; B . 'DAT' . idat . 'VALEUR' = 1.D0 ; 'FINSI' ; 'FIN' idi ; 'REPETER' idi idim ; nj = '-' idim &idi ; * 'MESSAGE' ('CHAINE' 'nj=' nj) ; 'SI' ('>EG' nj 1) ; 'REPETER' jdi nj ; * Mise en cohérence avec Castem * nomdat = 'CHAINE' 'G' &idi ('+' &idi &jdi) ; nomdat = 'CHAINE' 'G' ('+' &idi &jdi) &idi ; * 'MESSAGE' ('CHAINE' 'nomdat=' nomdat) ; idat = '+' idat 1 ; 'SI' lmet2 ; B . 'DAT' . idat . 'DISC' = metdisc ; 'SINON' ; B . 'DAT' . idat . 'VALEUR' = 0.D0 ; 'FINSI' ; 'FIN' jdi ; 'FINSI' ; 'FIN' idi ; * B . 'COF' . 1 . 'COMPOR' = loi ; B . 'COF' . 1 . 'LDAT' = lisdat ; * A . 1 . 1 . 0 = 0 ; B . 1 . 1 . 0 = 1 ; * 'SI' ('NON' ldisg) ; vfonc = NLINP gdisc _mt A B 'ERF1' 'CHAM' methgau ; 'SINO' ; vfonc = NLINP gdisc _mt A B 'ERF1' methgau ; 'FINS' ; * * 'LIST' nomindic ; * 'LIST' lmet2 ; * 'LIST' vfonc ; * * Homogene a une longueur 'SI' ('>' vdim 1) ; vfonc = '**' vfonc ('/' 1. vdim) ; 'FINS' ; * On remet les valeurs entre 0 et 1 pvfonc = 1. '-' mvfonc ; ivfonc = '**' vfonc -1 ; vfonc = '+' ('*' mvfonc ivfonc) ('*' pvfonc vfonc) ; 'SINO' ; 'SI' ('EGA' tvfonc 'CHPOINT') ; 'SINO' ; * 'LIST' 'RESU' vfonc ; * 'LIST' 'RESU' ('EXTR' vfonc 'MAIL') ; * On utilise un modele MECANIQUE car le modele THERMIQUE ne supporte pas les QUAFs 'FINS' ; * Facteur de ponderation dependant du type d'element car l'element * de reference est equilateral d'arete 1, mais pas de volume 1 fac = '/' rvelemr rvfonc ; * 'MESS' 'FACTEUR EQU=' fac ; vfonc = '*' vfonc fac ; 'FINS' ; 'FINS' ; * On remet les valeurs entre 1 et +inf * 'SI' ('EXIS' ('MOTS' 'COHE' 'EQLT') nomindic) ; vfonc = '**' vfonc -1 ; 'FINS' ; 'FINS' ; cindict = cindict 'ET' cindic ; 'FIN' ilindic ; * 'RESPRO' cindict ; 'FINSI' ; * * * End of procedure file DEADUTIL * 'FINPROC' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales