Example #1
0
    def Calc_champ(champ, contexte, numeros, phenomene, options=None):

        para = {
            'reuse': contexte.resultat,
            'RESULTAT': contexte.resultat,
            'MODELE': contexte.modele,
            #'OPTION'       : champ.nom,
            'CHAM_MATER': contexte.cham_mater,
            'NUME_ORDRE': tuple(numeros),
            phenomene: champ.nom
        }

        if contexte.cara_elem:
            para['CARA_ELEM'] = contexte.cara_elem

        # Options supplementaires passees a la commande
        if options:
            for cle in options.keys():
                para[cle] = options[cle]

        # Lancement de la commande
        try:
            CALC_CHAMP(**para)
        except aster.error, err:
            UTMESS('A', 'STANLEY_4', valk=[str(err)])
Example #2
0
    def dechargePSC(self, RESU):
        from code_aster.Cata.Commands import (CALC_CHAMP, POST_RELEVE_T,
                                              DEFI_FONCTION, AFFE_CHAR_MECA)
        coeur = self.coeur

        CALC_CHAMP(
            reuse=RESU,
            RESULTAT=RESU,
            INST=coeur.temps_simu['T8'],
            FORCE=('FORC_NODA', ),
        )

        __SPRING = POST_RELEVE_T(ACTION=_F(
            INTITULE='FORCES',
            GROUP_NO=('PMNT_S'),
            RESULTAT=RESU,
            NOM_CHAM='FORC_NODA',
            NOM_CMP=('DX', ),
            REPERE='GLOBAL',
            OPERATION='EXTRACTION',
        ), )

        tab2 = __SPRING.EXTR_TABLE()
        valeurs = tab2.values()

        inst = valeurs['INST'][-1]
        fx = valeurs['DX']
        noeuds = valeurs['NOEUD']

        listarg = []
        for el in zip(fx, noeuds):
            listarg.append(_F(NOEUD=el[1], FX=el[0]))

        assert (inst == coeur.temps_simu['T8'])

        _LI2 = DEFI_FONCTION(
            NOM_PARA='INST',
            PROL_DROITE='CONSTANT',
            VALE=(coeur.temps_simu['T8'], 1., coeur.temps_simu['T8b'], 0.),
        )

        _F_EMB2 = AFFE_CHAR_MECA(
            MODELE=self.model,
            FORCE_NODALE=listarg,
        )

        return (_LI2, _F_EMB2)
def compute_nodal_reaction_from_field_on_group(field,
                                               model,
                                               mat,
                                               group,
                                               charg,
                                               char_cine=None):
    """
    Compute nodal reaction from a displacement field on a specific group.
    Input:
        -field: aster displacement field
        -model: aster model,
        -mat: assigned material on a mesh
        -char_cine: dirichlet boundary conditions
        -group: group where the nodal reaction has to be computed
    Output:
        -asterField instance
    """
    ### Create result concept from the displacement field
    #resu = create_resu(field,model,mat,char_cine)

    if char_cine:
        resu = CREA_RESU(OPERATION='AFFE',
                         TYPE_RESU='EVOL_ELAS',
                         NOM_CHAM='DEPL',
                         EXCIT=_F(CHARGE=charg),
                         AFFE=_F(
                             CHAM_GD=field,
                             MODELE=model,
                             CHAM_MATER=mat,
                             INST=0.,
                         ))
    else:
        resu = CREA_RESU(OPERATION='AFFE',
                         TYPE_RESU='EVOL_ELAS',
                         NOM_CHAM='DEPL',
                         AFFE=_F(
                             CHAM_GD=field,
                             MODELE=model,
                             CHAM_MATER=mat,
                             INST=0.,
                         ))

    resu = CALC_CHAMP(
        FORCE='REAC_NODA',
        reuse=resu,
        MODELE=model,
        CHAM_MATER=mat,
        EXCIT=_F(CHARGE=charg),
        TOUT='OUI',
        RESULTAT=resu,
    )
    AsterIter = AsterCount.__next__()
    o[AsterIter] = CREA_CHAMP(
        OPERATION='EXTR',
        NOM_CHAM='REAC_NODA',
        TYPE_CHAM='NOEU_DEPL_R',
        RESULTAT=resu,
        INST=0.,
    )
    nodalrea = CREA_CHAMP(
        OPERATION='ASSE',
        TYPE_CHAM='NOEU_DEPL_R',
        MODELE=model,
        ASSE=_F(CHAM_GD=o[AsterIter], GROUP_MA=group),
    )

    DETRUIRE(CONCEPT=(_F(NOM=nodalrea), _F(NOM=resu)))
    return o[AsterIter]
Example #4
0
def char_grad_impo_ops(self, RESU_H2, TINIT, TFIN, RESUMECA, GRMAVOL, DIME,
                       Ctot0, CHARGRD0, Vh, R, T, INFO, **args):
    # macro pour calculer le chargement thermique specfique a la diffusion H2

    import numpy as NP
    import aster
    from code_aster.Cata.Syntax import _F
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
    #    Le concept sortant dans le contexte de la macro
    self.DeclareOut('chth', self.sd)

    # On importe les definitions des commandes a utiliser dans la macro
    CREA_CHAMP = self.get_cmd('CREA_CHAMP')
    AFFE_CHAR_THER = self.get_cmd('AFFE_CHAR_THER')
    CALC_CHAMP = self.get_cmd('CALC_CHAMP')
    CALC_CHAM_ELEM = self.get_cmd('CALC_CHAM_ELEM')

    dt = TFIN - TINIT

    # Recuperation du modele a partir du resultat
    iret, ibid, __n_modele = aster.dismoi('MODELE', RESU_H2.nom, 'RESULTAT',
                                          'F')
    __n_modele = __n_modele.rstrip()
    __MOTH = self.get_concept(__n_modele)

    # Recuperation du maillage a partir du resultat
    iret, ibid, nom_ma = aster.dismoi('NOM_MAILLA', RESU_H2.nom, 'RESULTAT',
                                      'F')
    __MAIL = self.get_concept(nom_ma.strip())

    # Recuperation du modele mecanique a partir du resultat
    iret, ibid, nom_momec = aster.dismoi('MODELE', RESUMECA.nom, 'RESULTAT',
                                         'F')
    __MOME = self.get_concept(nom_momec.rstrip())

    # extraction du champ de cl instant -
    __C20 = CREA_CHAMP(OPERATION='EXTR',
                       TYPE_CHAM='NOEU_TEMP_R',
                       RESULTAT=RESU_H2,
                       NOM_CHAM='TEMP',
                       INST=TINIT,
                       INFO=INFO)

    # on suppose que les noeuds du maillage thermique et mecaniqeu sont les
    # memes (pour eviter un PROJ_CHAMP)
    lc_t0 = __C20.EXTR_COMP('TEMP', [], 1)
    c_t0 = lc_t0.valeurs
    node_th = lc_t0.noeud
    nbnode = len(node_th)

    # contruction du terme Grad SigmaH
    # trace de sigma aux noeuds
    __SIEQN2 = CALC_CHAMP(INST=TFIN,
                          RESULTAT=RESUMECA,
                          CRITERES='SIEQ_NOEU',
                          INFO=INFO)
    __SIEQN = PROJ_CHAMP(METHODE='COLLOCATION',
                         RESULTAT=__SIEQN2,
                         MODELE_1=__MOME,
                         MODELE_2=__MOTH,
                         NOM_CHAM='SIEQ_NOEU',
                         TOUT_ORDRE='OUI')
    __SIEQ = CREA_CHAMP(OPERATION='EXTR',
                        TYPE_CHAM='NOEU_SIEF_R',
                        RESULTAT=__SIEQN,
                        NOM_CHAM='SIEQ_NOEU',
                        INST=TFIN,
                        INFO=INFO)

    # on renome la CMP pour pouvoir calculer le flux "thermique"
    __TRSIG = CREA_CHAMP(OPERATION='ASSE',
                         TYPE_CHAM='NOEU_TEMP_R',
                         MODELE=__MOTH,
                         ASSE=(_F(CHAM_GD=__SIEQ,
                                  GROUP_MA=GRMAVOL,
                                  NOM_CMP='TRSIG',
                                  NOM_CMP_RESU='TEMP',
                                  COEF_R=1. / 3.), ),
                         INFO=INFO)
    # calcul du gradient de Trace(Sigma)
    __MAT1 = DEFI_MATERIAU(THER=_F(LAMBDA=-1., RHO_CP=0.))
    __CMT1 = AFFE_MATERIAU(
        MAILLAGE=__MAIL,
        AFFE=_F(
            TOUT='OUI',
            MATER=__MAT1,
        ),
    )
    __GRSH = CALC_CHAM_ELEM(MODELE=__MOTH,
                            CHAM_MATER=__CMT1,
                            GROUP_MA=GRMAVOL,
                            OPTION='FLUX_ELGA',
                            TEMP=__TRSIG)

    gradsighe = __GRSH.EXTR_COMP('FLUX', [], 1)
    gradsighx = gradsighe.valeurs
    gradsighy = __GRSH.EXTR_COMP('FLUY', [], 0).valeurs
    if (DIME == 3):
        gradsighz = __GRSH.EXTR_COMP('FLUZ', [], 0).valeurs

    fx = NP.zeros(nbnode)
    fy = NP.zeros(nbnode)
    if (DIME == 3):
        fz = NP.zeros(nbnode)
    for ino, node in enumerate(node_th):
        cl = c_t0[ino]
        grsigx = gradsighx[ino]
        grsigy = gradsighy[ino]
        if (DIME == 3):
            grsigz = gradsighz[ino]
            fx[ino], fx[ino], fz[ino] = FLUX(cl, grsigx, grsigy, DIME, grsigz,
                                             Vh, R, T)
        else:
            grsigz = 0.
            fx[ino], fx[ino] = FLUX(cl, grsigx, grsigy, DIME, grsigz, Vh, R, T)

    # pour gagner du temps on evite la construction du mot-cle PRE_GRAD_TEMP
    nomvale = CHARGRD0.nom.ljust(8) + '.CHTH.GRAIN.VALE'
    nomlima = CHARGRD0.nom.ljust(8) + '.CHTH.GRAIN.LIMA'
    nomdesc = CHARGRD0.nom.ljust(8) + '.CHTH.GRAIN.DESC'
    tabvale = aster.getvectjev(nomvale)
    tabdesc = aster.getvectjev(nomdesc)
    dicolima = aster.getcolljev(nomlima)

    nbrvale = len(tabvale)
    champ = NP.zeros(nbrvale)
    bidon = NP.zeros(nbrvale)

    nommai = __MAIL.sdj.NOMMAI.get()
    connex = __MAIL.sdj.CONNEX.get()
    groupma = __MAIL.sdj.GROUPEMA.get()[GRMAVOL.ljust(24)]
    nbzone = tabdesc[1]
    #   print "tabdesc",tabdesc
    #   print "tablima",dicolima

    for izone in dicolima.keys():

        # chaque maille du groupe est affectee
        for index, ima in enumerate(dicolima[izone]):
            if ima == 0:
                break
            if ima in groupma:
                # ATTENTION : dans Python, les tableaux commencent a 0
                # mais dans la connectivite, les noeuds commencent a 1!
                lnoeu = NP.array(connex[ima]) - 1
                nbno = len(lnoeu)

                # calcul de la moyenne par maille de fx
                lflux = fx[lnoeu]
                flux = NP.add.reduce(lflux)
                flux = flux / nbno

                lfluy = fy[lnoeu]
                fluy = NP.add.reduce(lfluy)
                fluy = fluy / nbno
                numa = index
                #              print 'essai, numa, ima',numa, ima, groupma, lnoeu, nbno
                champ[9 * (numa - 1) + 1] = -flux
                champ[9 * (numa - 1) + 2] = -fluy

    aster.putvectjev(nomvale, nbrvale, tuple(range(1, nbrvale + 1)),
                     tuple(champ), tuple(bidon), 1)
Example #5
0
def champ_detoile_ops(self, RESU_H2, TINIT, TFIN, RESUMECA, GRMAVOL, DIME,
                      Ctot0, Nl, Kt, a1, a2, a3, INFO, **args):
    # macro pour calculer le chargement thermique specfique a la diffusion H2

    import numpy as NP
    import aster
    from code_aster.Cata.Syntax import _F
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
    #    Le concept sortant dans le contexte de la macro
    self.DeclareOut('NEUTG', self.sd)

    # On importe les definitions des commandes a utiliser dans la macro
    DETRUIRE = self.get_cmd('DETRUIRE')
    CREA_CHAMP = self.get_cmd('CREA_CHAMP')
    CALC_CHAMP = self.get_cmd('CALC_CHAMP')

    # Recuperation du modele a partir du resultat
    iret, ibid, __n_modele = aster.dismoi('MODELE', RESU_H2.nom, 'RESULTAT',
                                          'F')
    __n_modele = __n_modele.rstrip()
    __MOTH = self.get_concept(__n_modele)

    # Recuperation du maillage a partir du resultat
    iret, ibid, nom_ma = aster.dismoi('NOM_MAILLA', RESU_H2.nom, 'RESULTAT',
                                      'F')
    __MAIL = self.get_concept(nom_ma.strip())

    # Recuperation du modele mecanique a partir du resultat
    iret, ibid, nom_momec = aster.dismoi('MODELE', RESUMECA.nom, 'RESULTAT',
                                         'F')
    __MOME = self.get_concept(nom_momec.rstrip())

    # extraction du champ de Cl instant -
    __C20 = CREA_CHAMP(OPERATION='EXTR',
                       TYPE_CHAM='NOEU_TEMP_R',
                       RESULTAT=RESU_H2,
                       NOM_CHAM='TEMP',
                       INST=TINIT,
                       INFO=INFO)
    __EPEQN2 = CALC_CHAMP(INST=(TINIT, TFIN),
                          RESULTAT=RESUMECA,
                          VARI_INTERNE='VARI_NOEU')
    __EPEQN = PROJ_CHAMP(METHODE='COLLOCATION',
                         RESULTAT=__EPEQN2,
                         MODELE_1=__MOME,
                         MODELE_2=__MOTH,
                         NOM_CHAM='VARI_NOEU',
                         TOUT_ORDRE='OUI')
    __VINT1 = CREA_CHAMP(OPERATION='EXTR',
                         TYPE_CHAM='NOEU_VAR2_R',
                         RESULTAT=__EPEQN,
                         NOM_CHAM='VARI_NOEU',
                         INST=TFIN,
                         INFO=INFO)

    # recopie du champ C20 pour initialiser le futur champ source
    __chtmp = CREA_CHAMP(OPERATION='AFFE',
                         TYPE_CHAM='NOEU_NEUT_R',
                         MAILLAGE=__MAIL,
                         AFFE=(_F(
                             VALE=0.,
                             GROUP_MA=GRMAVOL,
                             NOM_CMP='X1',
                         ), ))
    nomcham = __chtmp.sdj.nomj()

    # on suppose que les noeuds du maillage thermique et mecaniqeu sont les
    # memes (pour eviter un PROJ_CHAMP)
    lc_t0 = __C20.EXTR_COMP('TEMP', [], 1)
    c_t0 = lc_t0.valeurs
    node_th = lc_t0.noeud
    lp_t1 = __VINT1.EXTR_COMP('V1', [], 1)
    p_t1 = lp_t1.valeurs
    node_me = lp_t1.noeud
    nbnode = len(node_th)
    assert (nbnode == len(node_me))
    detoile = NP.zeros(nbnode)
    bidon = NP.zeros(nbnode)
    for ino, node in enumerate(node_th):
        Cl = c_t0[ino]
        p1 = p_t1[ino]
        detoile[ino] = DETOILE(Cl, p1, Ctot0, Nl, Kt, a1, a2, a3)

    nomvect = '%-19s.VALE' % __chtmp.nom
    aster.putvectjev(nomvect, nbnode, tuple(range(1, nbnode + 1)),
                     tuple(detoile), tuple(bidon), 1)
    NEUTG = CREA_CHAMP(OPERATION='DISC',
                       TYPE_CHAM='ELNO_NEUT_R',
                       MODELE=__MOTH,
                       PROL_ZERO='OUI',
                       CHAM_GD=__chtmp,
                       INFO=INFO)
Example #6
0
def tr_a2e_vmis_john_cook(__VARICO, ico, gr_ma, mod, __VARI, nume_ordre, resu):
    """
        Transformation pour VMIS_JOHN_COOK ASTER vers EPX
    """

    CALC_CHAMP(reuse=resu,
               RESULTAT=resu,
               CRITERES='SIEQ_ELGA',
               NUME_ORDRE=nume_ordre)
    CALC_CHAMP(reuse=resu,
               CHAM_UTIL=_F(NOM_CHAM='SIEF_ELGA',
                            CRITERE='TRACE',
                            NUME_CHAM_RESU=1),
               NUME_ORDRE=nume_ordre,
               RESULTAT=resu)

    __TRACE = CREA_CHAMP(
        OPERATION='EXTR',
        TYPE_CHAM='ELGA_NEUT_R',
        RESULTAT=resu,
        NOM_CHAM='UT01_ELGA',
        PROL_ZERO='OUI',
        NUME_ORDRE=nume_ordre,
    )

    __VMIS = CREA_CHAMP(
        OPERATION='EXTR',
        TYPE_CHAM='ELGA_SIEF_R',
        RESULTAT=resu,
        NOM_CHAM='SIEQ_ELGA',
        NUME_ORDRE=nume_ordre,
    )

    #cel =numpy.sqrt(E_b*(1-Nu_b)/(rho_b*(1+Nu_b)*(1-2*Nu_b)))

    __AFFE = CREA_CHAMP(
        OPERATION='AFFE',
        TYPE_CHAM='ELGA_NEUT_R',
        MODELE=mod,
        PROL_ZERO='OUI',
        AFFE=(
            _F(
                GROUP_MA=gr_ma,
                NOM_CMP=('X1', 'X2', 'X3', 'X4', 'X5'),
                #VALE=(1.0E-6, cel, 0.,0.,0.)),
                VALE=(1.0E-6, 0., 0., 0., 0.)), ))

    __VARICO[ico] = CREA_CHAMP(
        OPERATION='ASSE',
        MODELE=mod,
        TYPE_CHAM='ELGA_VARI_R',
        PROL_ZERO='OUI',
        ASSE=(
            _F(
                CHAM_GD=__TRACE,
                GROUP_MA=gr_ma,
                NOM_CMP='X1',
                NOM_CMP_RESU='V1',
                COEF_R=1.0 / 3,
            ),
            _F(
                CHAM_GD=__VMIS,
                GROUP_MA=gr_ma,
                NOM_CMP='VMIS',
                NOM_CMP_RESU='V2',
            ),
            _F(
                CHAM_GD=__VARI,
                GROUP_MA=gr_ma,
                NOM_CMP='V1',
                NOM_CMP_RESU='V3',
            ),
            _F(
                CHAM_GD=__VMIS,
                GROUP_MA=gr_ma,
                NOM_CMP='VMIS',
                NOM_CMP_RESU='V4',
            ),
            _F(
                CHAM_GD=__AFFE,
                GROUP_MA=gr_ma,
                NOM_CMP=('X1', 'X2', 'X3', 'X4', 'X5'),
                NOM_CMP_RESU=('V4', 'V5', 'V6', 'V7', 'V8'),
                CUMUL='OUI',
            ),
        ),
    )