Download vari-youn-1.dgibi

Back to the list

* fichier :  vari-youn-1.dgibi
**************************************************************
*
*   C'est un k-test dont le but est de tester le fonctionnement
*   de PASAPAS avec la variation des données matérielles.
*
*   Il s'agit d'une barre en traction simple. Son module de Young
*   dépend linéairement du déplacement u de son extrémité :
*
*               E = E_0 + E_1 * u
*
*   Pour résoudre ce problème, on remet à jour le chargement
*   dans la procédure PERSO1. Étant donné que PERSO1 est appelé
*   une fois par incrément (dans PASAPAS) et non pour chaque
*   incrément d'incrément (dans INCREME) la précision dépend
*   du nombre de pas.
*
*   Voici les résultats obtenus avec la version de développement
*   (avril '96) :
*
*            Nombre d'itérations | Erreur maxi en déplacement
*            ------------------------------------------------
*                      1         |       0.40500
*            ------------------------------------------------
*                      2         |       0.33509
*            ------------------------------------------------
*                      5         |       0.25095
*            ------------------------------------------------
*                     10         |       0.19571
*            ------------------------------------------------
*                     20         |       0.14850
*            ------------------------------------------------
*                     50         |       9.83953E-02
*            ------------------------------------------------
*                    100         |       6.91983E-02
*            ------------------------------------------------
*                    200         |       4.67212E-02
*            ------------------------------------------------
*                    500         |       2.58769E-02
*            ------------------------------------------------
*                   1000         |       1.56041E-02
*            ------------------------------------------------
*                   2000         |       8.94707E-03
*            ------------------------------------------------
*                   5000         |       4.01039E-03
*            ------------------------------------------------
*
*   Cette solution peut être comparéee avec une solution
*   analytique et (si l'utilisateur le désire, voir la variable
*   calc_nl) avec un calcul itératif utilisant la méthode de
*   substitution.
*
**************************************************************

*** Options ...

    opti dime 2 mode plan defo elem seg2 echo 1 ;

    graph = faux ;
    calc_nl = faux ;

*** Paramètres ...

    L = 10. ;
    H =  1. ;
    S = H * 1. ;

    E_0 = 2.E+11 ;
*    E_1 = (2.0 * E_0) / (0.01 * L) ;
    E_1 = (-0.5 * E_0) / (0.1 * L) ;

*    F = 1.E+10 ;
    F = 9.9E+9 ;

    nbdiv = 1 ;

*** Critère d'existence de la solution ...

    delta = (E_0 * E_0) + (4 * E_1 * F * L / S) ;
    deltan = delta / (E_0 * E_0) ;
    mess 'Delta "normalisé" vaut ' deltan ;
    si(deltan < 0) ;
       mess 'Pas de soltution envisageable !!!' ;
       opti donn 5 ;
    finsi ;

*** Points ...

    dens (L / nbdiv) ;

    p1 = 0 0 ;
    p2 = 0 H ;

*** Ligne ...

    li1 = p1 d 1 p2 ;

*** Surface ...

    opti elem qua4 ;

    vectx = L 0 ;
    su1 = li1 tran nbdiv vectx ;
    pu = su1 poin proc vectx ;

    titr 'Le maillage du modele' ;
    si(graph) ;
       trac su1 ;
    finsi ;

*** Modèle ...

    listdepl = prog (-0.1 * L) (0.1 * L) ;
    listyoun = prog ;
    lon = dime listdepl ;
    repeter surdpl lon ;
       valdep = extr listdepl &surdpl ;
       valyou = E_0 + (E_1 * valdep) ;
       listyoun = listyoun et (prog valyou) ;
    fin surdpl ;
    titr 'Module de Young (deplacement)' ;
    evyou = evol manu LDPL listdepl YOUN listyoun ;
    si(graph) ;
       dess evyou ;
    finsi ;

    mo1 = mode su1 mecanique elastique ;
    ma1 = mate mo1 NU 0.0 YOUN evyou ;

*** Préparation de la table pour PASAPAS ...

    tabnl = table ;
*    tabnl . GRANDS_DEPLACEMENTS = vrai ;
    tabnl . MODELE = mo1 ;
    tabnl . CARACTERISTIQUES = ma1 ;
    cl1 = (bloq ux li1) et (bloq uy  p1) ;
    tabnl . BLOCAGES_MECANIQUES = cl1 ;


    ldpl0 = manu CHML mo1 LDPL 0.0 STRESSES ;
    evconst = evol manu 't'    (prog 0. 1000.)
                        'f(t)' (prog 1.    1.) ;
    chavar0 = char LDPL ldpl0 evconst ;

    fobid = forc fx F (cote 3 su1) ;
    lr1 = prog 0. 1. ;
    lr2 = prog 0. 1. ;
    evbid = evol manu 't' lr1 'f(t)' lr2 ;
    chabid = char fobid evbid MECA ;
    tabnl . CHARGEMENT = chavar0 et chabid ;
    tabnl . CHAR0      = chabid ;

    tabnl . PROCEDURE_PERSO1 = vrai ;
    debp perso1 tabnl*table ;
       depact = tabnl . 'ESTIMATION'.'DEPLACEMENTS' ;
       ledepl = extr depact UX pu ;
       ldepl1 = manu CHML mo1 LDPL ledepl STRESSES ;
       chavar = char LDPL ldepl1 evconst ;
       tabnl . 'WTABLE'.CHARGEMENT = (tabnl . CHAR0) et chavar ;
       tabnl . 'WTABLE'.CHARGEMENT_I = (tabnl . CHAR0) et chavar ;
    finp ;

    nb_dt = 5 ;
    dt = 1.0 / nb_dt ;
    tabnl . TEMPS_CALCULES = prog 0. PAS dt 1. ;

*** Le calcul ...

    pasapas tabnl ;

*** Petit post-traitement ...

    listt  = prog ;
    listux = prog ;
    listuxt = prog ;
    listuxs = prog ;
    listfx = prog ;
    nbpas = dime (tabnl . TEMPS) ;
    repeter surpas nbpas ;
       lindice = &surpas - 1 ;
       listt = listt et (prog (tabnl . TEMPS . lindice)) ;
       laforc = F * (tabnl . TEMPS . lindice) ;
       listfx = listfx et (prog laforc) ;
       uxbid  = racp (-1*laforc*L/S) E_0 E_1 ;
       uxbid = uxbid extr 1;
       listuxt = listuxt et (prog uxbid) ;
       depact = tabnl . DEPLACEMENTS . lindice ;
       ledepl = extr depact UX pu ;
       listux = listux et (prog ledepl) ;
       chtit = chai 'Contrainte XX fournie par PASAPAS,'
                    ' temps ' (tabnl . TEMPS . lindice) ;
       titr chtit ;
*       trac (exco smxx (tabnl . CONTRAINTES . lindice)) mo1 ;
*------------- calcul nonlin à la main -------------------------------------
    si(calc_nl) ;
       critconv = 1. ;
*       omega = 0.7 ;
       omega = 1.2 ;
       mate0 = mate mo1 YOUN E_0 NU 0.0 ;
       rigin = rigi mo1 mate0 ;
       forc0 = forc fx laforc (cote 3 su1) ;
       residu = 1.0 * forc0 ;
       deptot = manu chpo su1 2 UX 0 UY 0 nature DIFFUS ;
       mess 'On va chercher la soln pour F = ' laforc ;
       repeter tanqrnn ;
          depln = reso (rigin et cl1) residu ;
          deptot = deptot + (omega * depln) ;
          deptst =  extr deptot ux pu ;
*          mess 'deptot au bout = ' deptst ;
          E_n = E_0 + (E_1 * deptst) ;
          maten = mate mo1 YOUN E_n NU 0.0 ;
          rigin = rigi mo1 maten ;
          residu = forc0 - ((rigin * deptot) - (reac cl1 deptot)) ;
           normres = (xtx residu) ** 0.5 ;
           mess 'Itération ' &tanqrnn ', ||résidu|| = ' normres ;
           si(normres < critconv) ;
              mess '   => Convergence, déplt obtenu = ' deptst ;
              quit tanqrnn ;
           finsi ;
       fin tanqrnn ;
       listuxs = listuxs et (prog deptst) ;
       sitst = sigm mo1 maten deptot ;
       chtit = chai 'Contrainte XX fournie par ma méthode,'
                    ' temps ' (tabnl . TEMPS . lindice) ;
       titr chtit ;
*       trac (exco smxx sitst) mo1 ;
    finsi;
*---------------------------------------------------------------------------
    fin surpas ;

    titr 'La deformee' ;
    defo0 = defo su1 depact 0.0 ;
    defo1 = defo su1 depact ROUG ;
    si(graph) ;
       trac (defo0 et defo1) ;
    finsi ;

    titr 'Courbe de traction provenant de PASAPAS' ;
    courbetr = evol manu 'FX' listfx 'UX' listux ;
    si(graph) ;
       dess courbetr ;
    finsi ;

    titr 'Courbes de traction PASAPAS + théorique' ;
    courbteo = evol ROUG manu 'FX' listfx 'UX' listuxt ;
    si(graph) ;
       dess (courbetr et courbteo) ;
    finsi ;

    si(calc_nl) ;
       titr 'Courbe obtenue par calc nonlin a la main' ;
       courbs = evol BLEU manu 'FX' listfx 'UX' listuxs ;
       si(graph) ;
          dess (courbetr et courbteo et courbs) ;
       finsi ;
    finsi ;

*** Vérification de la précision du calcul ...

    chtit = chai 'Difference entre le depl. fourni par PASAPAS'
            ' et le depl. analytique' ;
    titr chtit ;
    ladiff = courbetr - courbteo ;
    ladiff = evol manu (extr ladiff ABSC) (abs (extr ladiff ORDO)) ;
    si(graph) ;
       dess ladiff ;
    finsi ;
    precis = maxi (extr ladiff ORDO) ;
    mess 'Écart maxi = ' precis ;

    listpas  = prog 1 2 5 10 20 50 100 200 500 1000 2000 5000 ;
    listprec = prog 0.40500  0.33509 0.25095 0.19571 0.14850
        9.83953E-02 6.91983E-02 4.67212E-02 2.58769E-02 1.56041E-02
        8.94707E-03 4.01039E-03 ;
    titr 'Precision en fonction du nombre de pas' ;
    evprec = evol manu 'nb_pas' listpas 'prec' listprec ;
    si(graph) ;
       dess evprec LOGX ;
    finsi ;

    prec_att = ipol nb_dt listpas listprec ;
    mess 'Valeur attendue de la précision = ' prec_att ;

* On se donne 10% de tolérance ...

    si(precis > (1.1 * prec_att)) ;
       erre 5 ;
    finsi ;

*** Bye ...

    fin ;


 

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer