* fichier : kops_rima.dgibi 'OPTI' echo 0 ; ************************************************************************ * NOM : KOPS_RIMA * DESCRIPTION : On vérifie que KOPS RIMA donne des résultats corrects * * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 03/01/2013, version initiale * HISTORIQUE : v1, 03/01/2013, création * HISTORIQUE : * HISTORIQUE : ************************************************************************ * interact = FAUX ; graph=FAUX; * *BEGINPROCEDUR gdiv ************************************************************************ * NOM : GDIV * DESCRIPTION : * * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 08/03/2006, version initiale * HISTORIQUE : v1, 08/03/2006, création * 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 ! ************************************************************************ * * 'DEBPROC' GDIV ; 'ARGUMENT' _mt*'MAILLAGE' ; 'ARGUMENT' gdisc*'MOT ' ; 'ARGUMENT' discv*'MOT ' ; 'ARGUMENT' discp*'MOT ' ; 'ARGUMENT' coef/'FLOTTANT' ; 'SI' ('NON' ('EXISTE' coef)) ; 'ARGUMENT' coef2/'CHPOINT ' ; 'SI' ('NON' ('EXISTE' coef2)) ; 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ; 'SINON' ; coef = coef2 ; 'ARGUMENT' discc*'MOT ' ; 'FINSI' ; 'SINON' ; discc = 'CSTE' ; 'FINSI' ; 'ARGUMENT' methgau/'MOT ' ; 'SI' ('NON' ('EXISTE' methgau)) ; methgau = 'GAU7' ; 'FINSI' ; * vdim = 'VALEUR' 'DIME' ; vmod = 'VALEUR' 'MODE' ; idim = 0 ; lpp = 'MOTS' 'LX' ; ldp = 'MOTS' 'FLX' ; 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ; lpv = 'MOTS' 'UX' 'UY' ; ldv = 'MOTS' 'FX' 'FY' ; idim = 2 ; iaxi = FAUX ; 'FINSI' ; 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ; lpv = 'MOTS' 'UR' 'UZ' ; ldv = 'MOTS' 'FR' 'FZ' ; idim = 2 ; iaxi = VRAI ; 'FINSI' ; 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ; lpv = 'MOTS' 'UX' 'UY' 'UZ' ; ldv = 'MOTS' 'FX' 'FY' 'FZ' ; idim = 3 ; iaxi = FAUX ; 'FINSI' ; 'SI' ('EGA' idim 0) ; 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ; 'FINSI' ; 'SI' iaxi ; dp = ('*' PI 2.D0) ; rmt = 'COORDONNEE' 1 _mt ; 'FINSI' ; * numop = 1 ; numder = idim ; mmp = 'MOTS' nomp ; numvar = idim ; 'SI' iaxi ; numdat = 3 ; numcof = 3 ; 'SINON' ; numdat = 1 ; numcof = 1 ; 'FINSI' ; * A = ININLIN numop numvar numdat numcof numder ; 'REPETER' iidim idim ; A . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lpv &iidim) ; A . 'VAR' . &iidim . 'DISC' = discv ; 'FIN' iidim ; A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ; A . 'DAT' . 1 . 'DISC' = discc ; A . 'DAT' . 1 . 'VALEUR' = coef ; A . 'COF' . 1 . 'COMPOR' = 'IDEN' ; A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ; 'SI' iaxi ; A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ; A . 'DAT' . 2 . 'DISC' = 'CSTE' ; A . 'DAT' . 2 . 'VALEUR' = dp ; A . 'COF' . 2 . 'COMPOR' = 'IDEN' ; A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ; A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ; A . 'DAT' . 3 . 'DISC' = gdisc ; A . 'DAT' . 3 . 'VALEUR' = rmt ; A . 'COF' . 3 . 'COMPOR' = 'IDEN' ; A . 'COF' . 3 . 'LDAT' = 'LECT' 3 ; 'FINSI' ; * 'SI' iaxi ; 'REPETER' iidim idim ; A . 1 . &iidim . &iidim = 'LECT' 1 2 3 ; 'FIN' iidim ; A . 1 . 1 . 0 = 'LECT' 1 2 ; 'SINON' ; 'REPETER' iidim idim ; A . 1 . &iidim . &iidim = 'LECT' 1 ; 'FIN' iidim ; 'FINSI' ; * numvar = 1 ; numdat = 0 ; numcof = 0 ; B = ININLIN numop numvar numdat numcof numder ; B . 'VAR' . 1 . 'NOMDDL' = ldp ; B . 'VAR' . 1 . 'DISC' = discp ; B . 1 . 1 . 0 = 'LECT' ; * mgdiv = 'NLIN' gdisc _mt A B methgau ; * 'RESPRO' mgdiv ; 'FINPROC' ; * * End of procedure file GDIV * *ENDPROCEDUR gdiv *BEGINPROCEDUR gmass ************************************************************************ * NOM : GMASS * DESCRIPTION : Une matrice de masse * * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v2, 14/03/2006, mise à jour NLIN évolué * VERSION : v1, 13/05/2004, version initiale * HISTORIQUE : v1, 13/05/2004, création * 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 ! ************************************************************************ * * 'DEBPROC' GMASS ; 'ARGUMENT' _mt*'MAILLAGE' ; 'ARGUMENT' gdisc*'MOT ' ; 'ARGUMENT' nomt*'MOT ' ; 'ARGUMENT' disct*'MOT ' ; 'ARGUMENT' nomq*'MOT ' ; 'ARGUMENT' discq*'MOT ' ; 'ARGUMENT' coef/'FLOTTANT' ; 'SI' ('NON' ('EXISTE' coef)) ; 'ARGUMENT' coef2/'CHPOINT ' ; 'SI' ('NON' ('EXISTE' coef2)) ; 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ; 'SINON' ; coef = coef2 ; 'ARGUMENT' discc*'MOT ' ; 'FINSI' ; 'SINON' ; discc = 'CSTE' ; 'FINSI' ; 'ARGUMENT' methgau/'MOT ' ; 'SI' ('NON' ('EXISTE' methgau)) ; methgau = 'GAU7' ; 'FINSI' ; 'ARGUMENT' chpop/'CHPOINT' ; 'ARGUMENT' chpod/'CHPOINT' ; * vdim = 'VALEUR' 'DIME' ; vmod = 'VALEUR' 'MODE' ; idim = 0 ; 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ; idim = 2 ; iaxi = FAUX ; 'FINSI' ; 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ; idim = 2 ; iaxi = VRAI ; 'FINSI' ; 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ; idim = 3 ; iaxi = FAUX ; 'FINSI' ; 'SI' ('EGA' vdim 1) ; idim = 1 ; iaxi = FAUX ; 'FINSI' ; 'SI' ('EGA' idim 0) ; 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ; 'FINSI' ; 'SI' iaxi ; dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ; 'FINSI' ; numop = 1 ; numder = idim ; mmt = 'MOTS' nomt ; mmq = 'MOTS' nomq ; numvar = 1 ; numdat = 1 ; numcof = 1 ; * A = ININLIN numop numvar numdat numcof numder ; A . 'VAR' . 1 . 'NOMDDL' = mmt ; A . 'VAR' . 1 . 'DISC' = disct ; 'SI' ('EXISTE' chpop) ; A . 'VAR' . 1 . 'VALEUR' = chpop ; 'FINSI' ; A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ; A . 'DAT' . 1 . 'DISC' = discc ; A . 'DAT' . 1 . 'VALEUR' = coef ; A . 'COF' . 1 . 'COMPOR' = 'IDEN' ; A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ; * A . 1 . 1 . 0 = 'LECT' 1 ; * 'SI' iaxi ; numdat = 1 ; numcof = 1 ; 'SINON' ; numdat = 0 ; numcof = 0 ; 'FINSI' ; B = ININLIN numop numvar numdat numcof numder ; B . 'VAR' . 1 . 'NOMDDL' = mmq ; B . 'VAR' . 1 . 'DISC' = discq ; 'SI' ('EXISTE' chpod) ; B . 'VAR' . 1 . 'VALEUR' = chpod ; 'FINSI' ; * 'SI' iaxi ; B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ; B . 'DAT' . 1 . 'DISC' = gdisc ; B . 'DAT' . 1 . 'VALEUR' = dprmt ; B . 'COF' . 1 . 'COMPOR' = 'IDEN' ; B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ; 'FINSI' ; 'SI' iaxi ; B . 1 . 1 . 0 = 'LECT' 1 ; 'SINON' ; B . 1 . 1 . 0 = 'LECT' ; 'FINSI' ; * mgmass = 'NLIN' gdisc _mt A B methgau ; * 'RESPRO' mgmass ; 'FINPROC' ; * * End of procedure file GMASS * *ENDPROCEDUR gmass * * ************************************************************************ * NOM : ERRREL * DESCRIPTION : erreur relative entre 2 chpoints * 'DEBPROC' ERRREL ; 'ARGUMENT' ch*'CHPOINT' ; 'ARGUMENT' chref*'CHPOINT' ; * val = 'MAXIMUM' ('RESULT' ('ABS' ('-' ch chref))) ; valref = 'MAXIMUM' ('RESULT' ('ABS' chref)) ; * 'SI' ('<' ('ABS' valref) 1.D-10) ; echref = 1.D0 ; 'SINON' ; echref = valref ; 'FINSI' ; * errabs = '/' val echref ; * 'RESPRO' errabs ; * * End of procedure file ERRREL * 'FINPROC' ; * * 'OPTION' 'DIME' 2 'ELEM' QUA8 ; * * Maillage quelconque * pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ; l1 = pA 'DROIT' 2 pB ; l2 = pB 'DROIT' 4 pC ; l3 = pC 'DROIT' 3 pD ; l4 = pD 'DROIT' 5 pA ; mt = 'SURFACE' (l1 'ET' l2 'ET' l3 'ET' l4) ; _mt = 'CHANGER' mt 'QUAF' ; disct = 'LINE' ; $mt = 'MODELISER' _mt 'NAVIER_STOKES' disct ; mt = 'DOMA' $mt 'MAILLAGE' ; * * * Construction d'une matrice de masse * rv = 'EQEX' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'ZONE' $mt 'OPER' 'DFDT' 1.4 'T' 1. 'INCO' 'T' ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'T' = 'KCHT' $mt 'SCAL' 'SOMMET' 0.D0 ; dummy mmassk = 'DFDT' (rv . '1DFDT') ; * * Autres façons * mmass = gmass _mt 'LINE' 'T' disct 'T' disct 1.4 ; mmassk2 = 'KOPS' 'RIMA' mmass ; mmass2 = 'KOPS' 'RIMA' mmassk ; mmass3 = 'KOPS' 'RIMA' mmassk2 ; mmassk3 = 'KOPS' 'RIMA' mmass2 ; * tmass = 'TABLE' ; tmass . 1 = mmass ; tmass . 2 = mmassk ; tmass . 3 = mmass2 ; tmass . 4 = mmassk2 ; tmass . 5 = mmass3 ; tmass . 6 = mmassk3 ; * cq = 'NOMC' 'T' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 mt) ; * dmass = 'DIME' tmass ; tchpo = 'TABLE' ; 'REPETER' imass dmass ; tchpo . &imass = '*' (tmass . &imass) cq ; 'FIN' imass ; ok1 = vrai ; 'REPETER' imass ('-' dmass 1) ; err = ERRREL (tchpo . &imass) (tchpo . (&imass '+' 1)) ; 'MESSAGE' ('CHAINE' 'imass=' &imass ' err=' err) ; ok1 = 'ET' ok1 ('<' err 1.D-12) ; 'FIN' imass ; 'LISTE' ok1 ; * * Construction d'une matrice de divergence * rv = 'EQEX' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'CENTRE' 'ZONE' $mt 'OPER' 'KMAB' 1.4 'INCO' 'UN' 'PN' ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0.D0 0.D0) ; rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' 'CENTRE' 0.D0 ; dummy mdivk = 'KMAB' (rv . '1KMAB') ; * * Autres façons * mdiv = gdiv _mt 'LINE' 'LINE' 'CSTE' 1.4 ; mdiv = 'CHANGER' 'INCO' mdiv ('MOTS' 'UX' 'UY' 'LX') ('MOTS' '1UN' '2UN' 'PN') ('MOTS' 'FX' 'FY' 'FLX') ('MOTS' '1UN' '2UN' 'PN') 'MULT' ; mdivk2 = 'KOPS' 'RIMA' mdiv ; mdiv2 = 'KOPS' 'RIMA' mdivk ; mdiv3 = 'KOPS' 'RIMA' mdivk2 ; mdivk3 = 'KOPS' 'RIMA' mdiv2 ; * tdiv = 'TABLE' ; tdiv . 1 = mdiv ; tdiv . 2 = mdivk ; tdiv . 3 = mdiv2 ; tdiv . 4 = mdivk2 ; tdiv . 5 = mdiv3 ; tdiv . 6 = mdivk3 ; * c1 = 'NOMC' '1UN' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 mt) ; c2 = 'NOMC' '2UN' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 mt) ; cq = c1 '+' c2 ; * ddiv = 'DIME' tdiv ; tchpo = 'TABLE' ; 'REPETER' idiv ddiv ; tchpo . &idiv = '*' (tdiv . &idiv) cq ; 'FIN' idiv ; ok2 = vrai ; 'REPETER' idiv ('-' ddiv 1) ; err = ERRREL (tchpo . &idiv) (tchpo . (&idiv '+' 1)) ; 'MESSAGE' ('CHAINE' 'idiv=' &idiv ' err=' err) ; ok2 = 'ET' ok2 ('<' err 1.D-12) ; 'FIN' idiv ; 'LISTE' ok2 ; * * * Construction d'une matrice de divergence et sa transposée * rv = 'EQEX' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'CENTRE' 'ZONE' $mt 'OPER' 'KBBT' -1.4 'INCO' 'UN' 'PN' ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0.D0 0.D0) ; rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' 'CENTRE' 0.D0 ; dummy mdivk = 'KBBT' (rv . '1KBBT') ; * * Autres façons * mdiv = gdiv _mt 'LINE' 'LINE' 'CSTE' 1.4 ; mdiv = 'CHANGER' 'INCO' mdiv ('MOTS' 'UX' 'UY' 'LX') ('MOTS' '1UN' '2UN' 'PN') ('MOTS' 'FX' 'FY' 'FLX') ('MOTS' '1UN' '2UN' 'PN') 'MULT' ; mdiv = mdiv 'ET' ('KOPS' 'TRANSPOS' mdiv) ; mdivk2 = 'KOPS' 'RIMA' mdiv ; mdiv2 = 'KOPS' 'RIMA' mdivk ; mdiv3 = 'KOPS' 'RIMA' mdivk2 ; mdivk3 = 'KOPS' 'RIMA' mdiv2 ; * tdiv = 'TABLE' ; tdiv . 1 = mdiv ; * On ne met pas la suivante car le produit ne prend pas en compte * la transposée (par contre, KOPS RIMA, oui) *tdiv . 6 = mdivk ; tdiv . 2 = mdiv2 ; tdiv . 3 = mdivk2 ; tdiv . 4 = mdiv3 ; tdiv . 5 = mdivk3 ; * c1 = 'NOMC' '1UN' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 mt) ; c2 = 'NOMC' '2UN' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 mt) ; c3 = 'NOMC' 'PN' ('BRUIT' 'BLAN' 'UNIF' 0.6 0.7 ('DOMA' $mt 'CENTRE')) ; cq = c1 '+' c2 '+' c3 ; * ddiv = 'DIME' tdiv ; tchpo = 'TABLE' ; 'REPETER' idiv ddiv ; tchpo . &idiv = '*' (tdiv . &idiv) cq ; 'FIN' idiv ; ok3 = vrai ; 'REPETER' idiv ('-' ddiv 1) ; err = ERRREL (tchpo . &idiv) (tchpo . (&idiv '+' 1)) ; 'MESSAGE' ('CHAINE' 'idiv=' &idiv ' err=' err) ; ok3 = 'ET' ok3 ('<' err 1.D-12) ; 'FIN' idiv ; 'LISTE' ok3 ; * 'MESSAGE' ('CHAINE' 'ok1 = ' ok1) ; 'MESSAGE' ('CHAINE' 'ok2 = ' ok2) ; 'MESSAGE' ('CHAINE' 'ok3 = ' ok3) ; * 'SI' interact ; 'OPTION' 'DONN' 5 ; 'FINSI' ; 'SI' ('NON' (ok1 'ET' ok2 'ET' ok3)) ; 'ERREUR' 5 ; 'SINON' ; 'MESSAGE' 'Tout sest bien passe' ; 'FINSI' ; * * End of dgibi file KOPS_RIMA * 'FIN' ;