+++ /dev/null
-#@ MODIF macr_adap_mail_ops Macro DATE 05/10/2004 AUTEUR CIBHHLV L.VIVAN
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
-#
-def macr_adap_mail_ops ( self,
- INFO, VERSION_HOMARD, LANGUE,
- NOMBRE, QUALITE, CONNEXITE, TAILLE, INTERPENETRATION,
- NON_SIMPLEXE, MAILLAGE_FRONTIERE,
- **args):
- """
- Ecriture des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
- Remarque : on ne mentionne explicitement que les mots-clés communs aux
- deux macros. Les autres sont dans le dictionnaire args
- """
-#
-# 1. args est le dictionnaire des arguments
-# args.keys() est la liste des mots-clés
-# args.keys()[0] est la premiere valeur de cette liste
-# args.keys()[1:] est la liste des valeurs suivantes dans cette liste
-# args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
-#
-### print args
-### print args.keys()
-### if len (args.keys())>0 : print args.keys()[0]
-### print args["MAILLAGE"]
-#
-# 2. Les caractéristiques d'un passage sont conservées dans un dictionnaire. Il y a autant de
-# dictionnaires que de sollicitations pour une série d'adaptation. L'ensemble de ces dictionnaires
-# est conservé dans la liste Liste_Passages. Cette liste est nécessairement globale pour pouvoir
-# la retrouver à chaque nouveau passage.
-# Description du dictionnaire de passages :
-# dico["Maillage_0"] = o ; string ; nom du concept du maillage initial de la série d'adaptation
-# dico["Maillage_NP1"] = o ; string ; nom du concept du dernier maillage adapté
-# dico["Rep_Calc_HOMARD_global"] = o ; string ; Nom global du répertoire de calcul pour HOMARD
-# dico["Rep_Calc_HOMARD_local"] = o ; string ; Nom local du répertoire de calcul pour HOMARD
-# depuis le répertoire de calcul pour ASTER
-# dico["niter"] = o ; entier ; numéro d'itération
-#
-# 3. Les caractéristiques d'un maillage sont conservées dans un dictionnaire. Il y a autant de
-# dictionnaires que de maillages manipulés. L'ensemble de ces dictionnaires est conservé
-# dans la liste Liste_Maillages.
-# Description du dictionnaire de maillages :
-# dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1" ou "MAILLAGE_FRONTIERE"
-# dico["Nom_ASTER"] = o ; concept ASTER associé
-# dico["Action"] = o ; string ; "A_ecrire" ou "A_lire"
-# dico["NOM_MED"] = o ; string ; Nom MED du maillage
-#
-# 4. Les caractéristiques d'un champ sont conservées dans un dictionnaire. Il y a autant de
-# dictionnaires que de champs manipulés. L'ensemble de ces dictionnaires est conservé
-# dans la liste Liste_Champs.
-# Description du dictionnaire de champs :
-# dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP"
-# dico["RESULTAT"] = o ; concept ASTER du résutat associé
-# dico["NOM_CHAM"] = o ; string ; Nom ASTER du champ
-# dico["COMPOSANTE"] = f ; string ; Nom ASTER de la composante (dans le cas de l'indicateur)
-# dico["NUME_ORDRE"] = f ; entier ; Numéro d'ordre du champ
-# dico["INST"] = f ; entier ; Instant du champ
-# dico["PRECISION"] = f ; entier ; Précision sur l'instant du champ
-# dico["CRITERE"] = f ; entier ; Critère de précision sur l'instant du champ
-# dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpolé sur le nouveau maillage
-# dico["NOM_MED"] = o ; string ; Nom MED du champ
-#
- from Accas import _F
- import aster
- import string
- import types
- import os
-#
- global Liste_Passages
-#
-#--------------------------------------------------------------------
-# 1. Préalables
-#--------------------------------------------------------------------
-#
-# 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
-#
- self.set_icmd(1)
-#
-# 1.2. ==> Numéro du passage dans cette macro
-#
- try :
- self.jdc.indice_macro_homard = self.jdc.indice_macro_homard + 1
- except :
- self.jdc.indice_macro_homard = 1
- Liste_Passages = []
- Numero_Passage_Fonction = self.jdc.indice_macro_homard
-### print "Numero_Passage_Fonction = ",Numero_Passage_Fonction
-#
-# 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
-#
- DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
- IMPR_RESU = self.get_cmd("IMPR_RESU")
- EXEC_LOGICIEL = self.get_cmd("EXEC_LOGICIEL")
- IMPR_FICO_HOMA = self.get_cmd("IMPR_FICO_HOMA")
- LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
- LIRE_CHAMP = self.get_cmd("LIRE_CHAMP")
- DETRUIRE = self.get_cmd('DETRUIRE')
-#
-# 1.4. ==> Le nom du programme HOMARD à lancer
-#
- repertoire_outils = aster.repout()
- homard = repertoire_outils + "homard"
-#
-# 1.5. ==> Initialisations
-#
- codret = 0
- codret_partiel = [0]
- Rep_Calc_ASTER = os.getcwd()
-#
- Liste_Maillages = []
- Liste_Champs = []
- dico_indi = {}
-#
- ADAPTATION = None
- MAJ_CHAM = None
-#
- unite = 71
-#
-#--------------------------------------------------------------------
-# 2. Décodage des arguments de la macro-commande
-#--------------------------------------------------------------------
-# 2.1. ==> Données de pilotage de l'adaptation
-#
- if ( self.nom == "MACR_ADAP_MAIL" ) :
-#
- modhom = "ADAP"
-#
- ADAPTATION = args["ADAPTATION"]
- if args.has_key("MAJ_CHAM") :
- MAJ_CHAM = args["MAJ_CHAM"]
-#
-# 2.1.1. ==> Les concepts "maillage"
-#
- for mot_cle in ["MAILLAGE_N","MAILLAGE_NP1"] :
- dico = {}
- dico["Type_Maillage"] = mot_cle
- dico["Nom_ASTER"] = ADAPTATION[mot_cle]
- if ( mot_cle == "MAILLAGE_N" ) :
- dico["Action"] = "A_ecrire"
- else :
- dico["Action"] = "A_lire"
- Liste_Maillages.append(dico)
-#
-# 2.1.2. ==> L'éventuel indicateur d'erreur
-#
- if ADAPTATION["LIBRE"] != None :
- dico = {}
- dico["Type_Champ"] = "INDICATEUR"
- dico["RESULTAT"] = ADAPTATION["RESULTAT_N"]
- dico["NOM_CHAM"] = ADAPTATION["INDICATEUR"]
- dico["COMPOSANTE"] = ADAPTATION["NOM_CMP_INDICA"]
- if ( ADAPTATION["NUME_ORDRE"] != None ) :
- dico["NUME_ORDRE"] = ADAPTATION["NUME_ORDRE"]
- if ( ADAPTATION["INST"] != None ) :
- dico["INST"] = ADAPTATION["INST"]
- for cle in [ "PRECISION", "CRITERE" ] :
- if ( ADAPTATION[cle] != None ) :
- dico[cle] = ADAPTATION[cle]
- dico["NOM_MED"] = aster.mdnoch ( dico["RESULTAT"].nom , dico["NOM_CHAM"] )
- Liste_Champs.append(dico)
- dico_indi = dico
-### print dico
-#
-# 2.1.3. ==> Les champs à mettre à jour
-#
- if ( MAJ_CHAM != None ) :
-#
- for maj_cham in MAJ_CHAM :
-### print maj_cham
-#
- dico = {}
- dico["Type_Champ"] = "CHAMP"
- for cle in [ "CHAM_MAJ", "TYPE_CHAM", "RESULTAT", "NOM_CHAM" ] :
- dico[cle] = maj_cham[cle]
- if ( maj_cham["NUME_ORDRE"] != None ) :
- dico["NUME_ORDRE"] = maj_cham["NUME_ORDRE"]
- elif ( maj_cham["INST"] != None ) :
- dico["INST"] = maj_cham["INST"]
- for cle in [ "PRECISION", "CRITERE" ] :
- if ( maj_cham[cle] != None ) :
- dico[cle] = maj_cham[cle]
- dico["NOM_MED"] = aster.mdnoch ( dico["RESULTAT"].nom , dico["NOM_CHAM"] )
-#
-### print dico
- Liste_Champs.append(dico)
-#
-# 2.2. ==> Données de pilotage de l'information
-#
- else :
-#
- modhom = "INFO"
-#
- dico = {}
- dico["Type_Maillage"] = "MAILLAGE_N"
- dico["Nom_ASTER"] = args["MAILLAGE"]
- dico["Action"] = "A_ecrire"
- Liste_Maillages.append(dico)
-#
-# 2.3. ==> Suivi de frontière
-#
- if ( MAILLAGE_FRONTIERE != None ) :
-#
- dico = {}
- dico["Type_Maillage"] = "MAILLAGE_FRONTIERE"
- dico["Nom_ASTER"] = MAILLAGE_FRONTIERE
- dico["Action"] = "A_ecrire"
- Liste_Maillages.append(dico)
-#
-#--------------------------------------------------------------------
-# 3. Préparation du lancement des commandes
-#--------------------------------------------------------------------
-#
-# 3.1. ==> . Elaboration des noms MED des concepts de maillage
-# . Memorisation des noms ASTER du maillage en entrée et en sortie (sous forme string)
-# On crée une nouvelle liste des dictionnaires décrivant les maillages
-# et à la fin on écrase l'ancienne liste par cette nouvelle.
-#
- L = []
- for dico in Liste_Maillages :
- dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
- L.append(dico)
- if ( dico["Type_Maillage"] == "MAILLAGE_N" ) :
- Nom_Concept_Maillage_N = dico["Nom_ASTER"].nom
- elif ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
- Nom_Concept_Maillage_NP1 = dico["Nom_ASTER"].nom
- Liste_Maillages = L
-#
-# 3.2. ==> Recherche du numéro d'itération et du répertoire de travail
-#
-# 3.2.1. ==> Par défaut :
-# . le numéro d'itération est nul
-# . le nom du répertoire de lancement de HOMARD est construit sur le nom
-# du maillage en entrée et le numéro de passage dans la fonction
-#
- niter = 0
- Nom_Rep_local = Nom_Concept_Maillage_N + "_" + modhom + "_" + str(Numero_Passage_Fonction)
- Rep_Calc_HOMARD_local = os.path.join(".",Nom_Rep_local)
- Rep_Calc_HOMARD_global = os.path.join(Rep_Calc_ASTER,Nom_Rep_local)
-### print "Rep_Calc_HOMARD_local = ", Rep_Calc_HOMARD_local
-### print "Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
-#
-# 3.2.2. ==> En adaptation :
-#
- if ( modhom == "ADAP" ) :
-#
-# 3.2.2.1. ==> On recherche si dans les passages déjà effectués, il en existe un
-# dont le maillage d'arrivée était l'actuel maillage d'entrée. Si c'est
-# le cas, cela veut dire que l'adaptation en cours est la suite d'une
-# précédente. On doit donc utiliser le meme répertoire. Le numéro
-# d'itération est celui de l'adaptation précédente augmenté de 1.
-#
- for dico in Liste_Passages :
- if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
- niter = dico["niter"] + 1
- Rep_Calc_HOMARD_local = dico["Rep_Calc_HOMARD_local"]
- Rep_Calc_HOMARD_global = dico["Rep_Calc_HOMARD_global"]
-#
-# 3.2.2.2. ==> Memorisation de ce passage
-#
-# 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
-#
- if ( niter == 0 ) :
- dico = {}
- dico["Maillage_0"] = Nom_Concept_Maillage_N
- dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
- dico["Rep_Calc_HOMARD_local"] = Rep_Calc_HOMARD_local
- dico["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
- dico["niter"] = niter
- Liste_Passages.append(dico)
-#
-# 3.2.2.2.2. ==> Modification du cas en cours
-#
- else :
- L = []
- for dico in Liste_Passages :
- if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
- dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
- dico["niter"] = niter
- L.append(dico)
- Liste_Passages = L
-#
-### print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
-#
-#--------------------------------------------------------------------
-# 4. Ecriture des commandes
-#--------------------------------------------------------------------
-#
-# 4.1. ==> Création du répertoire pour homard
-# attention : on ne fait cette creation qu'une seule fois par cas
-# d'adaptation ou d'information
-#
- if ( niter == 0 ) :
-#
- try :
- os.mkdir(Rep_Calc_HOMARD_global)
- except os.error,codret_partiel :
- self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
- self.cr.fatal("<F> <MACR_ADAP_MAIL> Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global)
- codret = codret + 1
-#
-# 4.2. ==> Ecriture des commandes de creation des donnees MED
-#
-# On doit écrire : le maillage,
-# le champ d'indicateur d'erreur
-# les champs à convertir
-# Remarque : on met tout dans le meme fichier
-#
-# Chacune de ces écritures est optionnelle selon le contexte.
-#
- if ( INFO > 1 ) : infomail = "OUI"
- else : infomail = "NON"
-#
-# 4.2.1. ==> Noms des fichiers d'ASTER vers HOMARD et éventuellement de HOMARD vers ASTER
-# Remarque : aujourd'hui, les écritures ou les lectures au format MED se font obligatoirement sur
-# un fichier de nom fort.n, placé dans le répertoire de calcul
-# Dans le fichier de configuration, on donne comme nom MAILL.(niter).MED en entrée et
-# MAILL.(niter+1).MED en sortie (cf. adhc00)
-# Tant que les E/S MED n'ont pas évolué, on fait un lien pour assurer la cohérence.
-#
-# 4.2.1.1. ==> D'ASTER vers HOMARD
-#
- Unite_Fichier_ASTER_vers_HOMARD = 1787 + 2*Numero_Passage_Fonction
- Fichier_ASTER_vers_HOMARD = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_ASTER_vers_HOMARD))
- Fichier_HOMARD_Entree = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter)+".MED")
-### print "Fichier_ASTER_vers_HOMARD = ",Fichier_ASTER_vers_HOMARD
-### print "Fichier_HOMARD_Entree = ",Fichier_HOMARD_Entree
- try :
- os.symlink(Fichier_ASTER_vers_HOMARD,Fichier_HOMARD_Entree)
- except os.error,codret_partiel :
- self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
- self.cr.fatal("<F> <MACR_ADAP_MAIL> Probleme au lien entre " + Fichier_ASTER_vers_HOMARD + " et " + Fichier_HOMARD_Entree)
- codret = codret + 1
-#
-# 4.2.1.2. ==> De HOMARD vers ASTER
-#
- if ( modhom == "ADAP" ) :
- Unite_Fichier_HOMARD_vers_ASTER = Unite_Fichier_ASTER_vers_HOMARD + 1
- Fichier_HOMARD_vers_ASTER = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_HOMARD_vers_ASTER))
- Fichier_HOMARD_Sortie = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter+1)+".MED")
-### print "Fichier_HOMARD_vers_ASTER = ",Fichier_HOMARD_vers_ASTER
-### print "Fichier_HOMARD_Sortie = ",Fichier_HOMARD_Sortie
- try :
- os.symlink(Fichier_HOMARD_vers_ASTER,Fichier_HOMARD_Sortie)
- except os.error,codret_partiel :
- self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
- self.cr.fatal("<F> <MACR_ADAP_MAIL> Probleme au lien entre " + Fichier_HOMARD_vers_ASTER + " et " + Fichier_HOMARD_Sortie)
- codret = codret + 1
-#
-# 4.2.2. La définition du fichier de ASTER vers HOMARD
-#
- DEFI_FICHIER ( ACTION= "ASSOCIER",
- UNITE = Unite_Fichier_ASTER_vers_HOMARD,
- TYPE = "LIBRE",
- INFO = INFO )
-#
-# 4.2.3. Le(s) maillage(s)
-# Le maillage de calcul et l'éventuel maillage de la frontiere sont écrits
-# dans le meme fichier MED
-# En fait, on pourrait s'en passer au dela de la 1ère itération
-# car HOMARD a mémorisé. Mais dès que l'on écrit un champ,
-# les conventions MED imposent la présence du maillage dans le fichier.
-# Donc on va toujours écrire.
-#
- for dico in Liste_Maillages :
- if ( dico["Action"] == "A_ecrire" ) :
- motscsi={}
- motscsi["MAILLAGE"] = dico["Nom_ASTER"]
- motscfa={}
- motscfa["RESU"]=_F( INFO_MAILLAGE=infomail,
- **motscsi )
-#
- IMPR_RESU ( INFO = INFO,
- FORMAT ='MED', UNITE = Unite_Fichier_ASTER_vers_HOMARD,
- **motscfa )
-#
-# 4.2.4. Le(s) champ(s)
-# Attention : il se peut que l'on demande la mise à jour du champ qui a servi comme
-# indicateur d'erreur. Si c'est le cas, il ne faut pas demander son
-# impression sinon il y a plantage d'IMPR_RESU qui ne sait pas substituer
-# deux champs. D'ailleurs, c'est plus économique ainsi !
-# Remarque : pour l'adaptation, on ne demande a priori qu'une composante du champ d'indicateur.
-# s'il y a demande de mise à jour, toutes les composantes sont concernées. Il faut
-# donc dans ce cas imprimer le champ total.
-# dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP"
-# dico["RESULTAT"] = o ; concept ASTER du résutat associé
-# dico["NOM_CHAM"] = o ; string ; Nom ASTER du champ
-# dico["COMPOSANTE"] = f ; string ; Nom ASTER de la composante (dans le cas de l'indicateur)
-# dico["NUME_ORDRE"] = f ; entier ; Numéro d'ordre du champ
-# dico["INST"] = f ; entier ; Instant du champ
-# dico["PRECISION"] = f ; entier ; Précision sur l'instant du champ
-# dico["CRITERE"] = f ; entier ; Critère de précision sur l'instant du champ
-# dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpolé sur le nouveau maillage
-# dico["NOM_MED"] = o ; string ; Nom MED du champ
-#
-# 4.2.4.1. Recherche d'un doublon éventuel sur le champ d'indicateur d'erreur
-#
- if len(dico_indi) > 0 :
- imprime_indic = 0
- else :
- imprime_indic = 1
-#
- Liste_Champs_imprime = []
- for dico in Liste_Champs :
-# Pour un champ à mettre à jour, on a toujours impression
- if ( dico["Type_Champ"] == "CHAMP" ) :
- Liste_Champs_imprime.append(dico)
-# Si le champ d'indicateur n'a pas été repéré comme champ à mettre à jour :
- if not imprime_indic :
-# Est-ce le meme champ ?
- ok = 1
- for cle in [ "RESULTAT", "NOM_CHAM" ] :
- if ( dico_indi[cle] != dico[cle] ) :
- ok = 0
- break
-# Si oui, est-ce au meme moment ? (remarque : si rien n'est désigné, c'est qu'il n'y a qu'un
-# seul instant ... donc c'est le meme ! En revanche, on ne sait pas comparer une donnée
-# en numéro d'ordre et une donnée en instant. On croise les doigts.)
- if ok :
- for cle in [ "NUME_ORDRE", "INST" ] :
- if dico.has_key(cle) :
- if ( dico[cle] != None ) :
- if dico_indi.has_key(cle) :
- if ( dico_indi[cle] != dico[cle] ) :
- ok = 0
- break
- if ok : imprime_indic = 1
-# Si le champ d'indicateur n'a pas été repéré comme champ à mettre à jour, il faut
-# l'inclure dans les champs à imprimer
- if not imprime_indic : Liste_Champs_imprime.append(dico_indi)
-#
-# 4.2.4.2. Impressions après le filtrage précédent
-#
- for dico in Liste_Champs_imprime :
- motscsi={}
- for cle in [ "RESULTAT", "NOM_CHAM", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
- if dico.has_key(cle) :
- if ( dico[cle] != None ) :
- motscsi[cle] = dico[cle]
- if dico.has_key("COMPOSANTE") :
- motscsi["NOM_CMP"] = dico["COMPOSANTE"]
- motscfa={}
- motscfa["RESU"]=_F( INFO_MAILLAGE=infomail,
- **motscsi
- )
-#
- IMPR_RESU ( INFO = INFO,
- FORMAT ='MED', UNITE = Unite_Fichier_ASTER_vers_HOMARD,
- **motscfa )
-#
-# 4.3. ==> Ecriture de la commande d'écriture des fichiers de données pour HOMARD
-#
- motscfa={}
-#
-# 4.3.1. ==> Le traitement
-#
- motscsi={}
-#
-# 4.3.1.1. ==> Le type de traitement
-#
- if ( modhom == "ADAP" ) :
- if ( ADAPTATION["UNIFORME"] != None ) :
- motscsi["UNIFORME"] = ADAPTATION["UNIFORME"]
- else :
- motscsi["ADAPTATION"] = ADAPTATION["LIBRE"]
- else :
- motscsi["INFORMATION"] = "OUI"
-#
-# 4.3.1.2. ==> Les noms med des maillages
-#
- for dico in Liste_Maillages :
-### print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
- motscsi[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
-#
-# 4.3.1.3. ==> Les caracteristiques de l'éventuel indicateur d'erreur
-#
- for dico in Liste_Champs :
- if ( dico["Type_Champ"] == "INDICATEUR" ) :
- Liste_aux = [ "NOM_MED", "COMPOSANTE" ]
- if dico.has_key("NUME_ORDRE") :
- Liste_aux.append("NUME_ORDRE")
- else :
- for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
- Liste_aux.append(cle)
- for cle in Liste_aux :
- if dico.has_key(cle) :
- if ( dico[cle] != None ) :
- motscsi[cle] = dico[cle]
-#
-# 4.3.1.4. ==> Les critères de raffinement et les niveaux extremes
-#
- if ( modhom == "ADAP" ) :
- Liste_aux = [ ]
- if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "RAFFINEMENT" ) :
- Liste_aux.append("CRIT_RAFF_ABS")
- Liste_aux.append("CRIT_RAFF_REL")
- Liste_aux.append("CRIT_RAFF_PE")
- if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "DERAFFINEMENT" ) :
- Liste_aux.append("CRIT_DERA_ABS")
- Liste_aux.append("CRIT_DERA_REL")
- Liste_aux.append("CRIT_DERA_PE")
- niveau = 0
- if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "RAFFINEMENT" or ADAPTATION["UNIFORME"] == "RAFFINEMENT" ) :
- Liste_aux.append("NIVE_MAX")
- niveau = niveau + 1
- if ( ADAPTATION["LIBRE"] == "RAFF_DERA" or ADAPTATION["LIBRE"] == "DERAFFINEMENT" or ADAPTATION["UNIFORME"] == "DERAFFINEMENT" ) :
- Liste_aux.append("NIVE_MIN")
- niveau = niveau + 2
- for mot_cle in Liste_aux :
- if ( ADAPTATION[mot_cle] != None ) :
- motscsi[mot_cle] = ADAPTATION[mot_cle]
-#
- if ( niveau == 2 ) :
- if ( ADAPTATION["NIVE_MIN"] > ADAPTATION["NIVE_MAX"] ) :
- self.cr.fatal("<F> <MACR_ADAP_MAIL> Le niveau minimum doit etre inferieur au niveau maximum.")
- codret = codret + 1
-#
-# 4.3.1.5. ==> Numéro d'itération
-#
- if ( modhom == "ADAP" ) :
- motscsi["NITER"] = niter
-#
-# 4.3.1.6. ==> Suivi de la frontiere
-#
- if args.has_key("GROUP_MA") :
- if ( args["GROUP_MA"] != None ) :
- motscsi["GROUP_MA"] = args["GROUP_MA"]
-#
-# 4.3.1.7. ==> Bilan
-#
- motscfa["TRAITEMENT"] = _F(**motscsi)
-#
-# 4.3.2. ==> L'analyse
-#
- motscsi={}
- if ( NOMBRE != None ) : motscsi["NOMBRE" ] = NOMBRE
- if ( QUALITE != None ) : motscsi["QUALITE" ] = QUALITE
- if ( CONNEXITE != None ) : motscsi["CONNEXITE" ] = CONNEXITE
- if ( TAILLE != None ) : motscsi["TAILLE" ] = TAILLE
- if ( INTERPENETRATION != None ) : motscsi["INTERPENETRATION" ] = INTERPENETRATION
-#
- motscfa["ANALYSE"] = _F(**motscsi)
-#
-# 4.3.3. ==> La mise à jour de champs
-#
- prem = 1
- for dico in Liste_Champs :
- motscsi={}
- if ( dico["Type_Champ"] == "CHAMP" ) :
- Liste_aux = [ "NOM_MED", "COMPOSANTE" ]
- if dico.has_key("NUME_ORDRE") :
- Liste_aux.append("NUME_ORDRE")
- else :
- for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
- Liste_aux.append(cle)
- for cle in Liste_aux :
- if dico.has_key(cle) :
- if ( dico[cle] != None ) :
- motscsi[cle] = dico[cle]
-### print motscsi
- if prem :
- motscfa["MAJ_CHAM"] = [_F(**motscsi),]
- prem = 0
- else :
- motscfa["MAJ_CHAM"].append(_F(**motscsi))
-#
-# 4.3.4. ==> La commande
-#
-# 4.3.4.1. ==> Les fichiers annexes
-#
- dico = {}
-#
- Nom_Fichier_Configuration = "HOMARD.Configuration"
- Fichier_Configuration = os.path.join(Rep_Calc_HOMARD_local,Nom_Fichier_Configuration)
- dico[Fichier_Configuration] = ("HOMARD_CONFIG","UNITE_CONF",unite)
-#
- if ( modhom != "ADAP" ) :
- unite = unite + 1
- Nom_Fichier_Donnees = "HOMARD.Donnees"
- Fichier_Donnees = os.path.join(Rep_Calc_HOMARD_local,Nom_Fichier_Donnees)
-# 1234567890123456
- dico[Fichier_Donnees] = ("HOMARD_DONN","UNITE_DONN",unite)
-#
-# 4.3.4.2. ==> L'ouverture de ces fichiers
-#
- for fic in dico.keys() :
- DEFI_FICHIER ( ACTION= "ASSOCIER", FICHIER = fic, UNITE = dico[fic][2],
- TYPE = "ASCII", ACCES = "NEW", INFO = INFO )
- motscfa[dico[fic][1]] = dico[fic][2]
-#
-# 4.3.4.3. ==> Ecriture
-#
-### print motscfa
- IMPR_FICO_HOMA ( INFO=INFO, LANGUE = LANGUE, NON_SIMPLEXE = NON_SIMPLEXE, **motscfa )
-#
-### for fic in dico.keys() :
-### print "\nContenu de ", fic
-### fichier = open (fic,"r")
-### les_lignes = fichier.readlines()
-### fichier.close()
-### for ligne in les_lignes :
-### print ligne[:-1]
-#
-# 4.3.4.4. ==> La fermeture des fichiers locaux
-# Remarque : il faut le faire ici pour que le gestionnaire de DEFI_FICHIER soit à jour
-# Remarque : aujourd'hui on est obligé de passer par le numéro d'unité logique
-#
- for fic in dico.keys() :
- DEFI_FICHIER ( ACTION= "LIBERER", UNITE = dico[fic][2], INFO = INFO )
-#
-# 4.4. ==> Ecriture de la commande d'exécution de homard
-# Remarque : dans la donnée de la version de HOMARD, il faut remplacer
-# le _ de la donnee par un ., qui
-# est interdit dans la syntaxe du langage de commandes ASTER
-# Remarque : il faut remplacer le N majuscule de la donnee par
-# un n minuscule, qui est interdit dans la syntaxe du langage
-# de commandes ASTER
-# Remarque : pour le nommage des fichiers d'échange entre ASTER et HOMARD, on utilise
-# la convention implicite du fort.n des entrees/sorties au format MED
-#
- VERSION_HOMARD=string.replace(VERSION_HOMARD,"_",".")
- VERSION_HOMARD=string.replace(VERSION_HOMARD,"N","n")
- if ( VERSION_HOMARD[-6:]=="_PERSO" ):
-# motscsi["ARGUMENT"]=_F("TYPEXE"="-PERSO")
- VERSION_HOMARD=VERSION_HOMARD[:-6]
-#
- if ( modhom == "ADAP" ) :
- Nom_Fichier_Donnees = "0"
-#
- EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_HOMARD_global), # nom du repertoire
- _F(NOM_PARA=VERSION_HOMARD), # version de homard
- _F(NOM_PARA=str(INFO)), # niveau d information
- _F(NOM_PARA=Nom_Fichier_Donnees), # fichier de données HOMARD
- ),
- LOGICIEL = homard
- )
-#
-# 4.5. ==> Ecriture de la commande de lecture des resultats med
-# Remarque :
-# La fonction self.DeclareOut(a,b) focntionne ainsi :
-# a est une chaine de caracteres
-# b est la variable déclarée dans la commande
-# le but est de associer le contenu de b à la variable locale qui sera désignée par a
-# Exemple :
-# self.DeclareOut("maillage_np1",ADAPTATION["MAILLAGE_NP1"])
-# ==> la variable maillage_np1 est identifiée à l'argument "MAILLAGE_NP1" du mot-clé ADAPTATION
-#
- if ( modhom == "ADAP" ) :
-#
-# 4.5.1. ==> Le maillage
-#
- self.DeclareOut("maillage_np1",ADAPTATION["MAILLAGE_NP1"])
- for dico in Liste_Maillages :
- if ( dico["Action"] == "A_lire" ) :
- maillage_np1 = LIRE_MAILLAGE ( UNITE = Unite_Fichier_HOMARD_vers_ASTER,
- FORMAT = "MED",
- NOM_MED = dico["NOM_MED"],
- VERI_MAIL = _F(VERIF="NON"), INFO_MED = INFO, INFO = INFO )
-#
-# 4.5.2. ==> Les champs
-#
- for dico in Liste_Champs :
- if ( dico["Type_Champ"] == "CHAMP" ) :
-### print dico
- self.DeclareOut("champ_maj",dico["CHAM_MAJ"])
- motscsi={}
- for cle in [ "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
- if dico.has_key(cle) :
- if ( dico[cle] != None ) :
- motscsi[cle] = dico[cle]
- if dico.has_key("NUME_ORDRE") :
- motscsi["NUME_PT"] = dico["NUME_ORDRE"]
- champ_maj = LIRE_CHAMP ( UNITE = Unite_Fichier_HOMARD_vers_ASTER, FORMAT = "MED",
- MAILLAGE = maillage_np1,
- NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
- INFO = INFO, **motscsi )
-#
-#--------------------------------------------------------------------
-# 5. Menage des fichiers MED et HOMARD devenus inutiles
-#--------------------------------------------------------------------
-#
- fic = os.path.join(Rep_Calc_HOMARD_global,"MAILL."+str(niter)+".HOM")
- Liste_aux = [ Fichier_ASTER_vers_HOMARD, Fichier_HOMARD_Entree, fic ]
- if ( modhom == "ADAP" ) :
- Liste_aux.append(Fichier_HOMARD_vers_ASTER)
- Liste_aux.append(Fichier_HOMARD_Sortie)
-#
- for fic in Liste_aux :
- if ( INFO > 1 ) : print "Destruction du fichier ", fic
- if os.path.islink(fic) :
- try :
- os.unlink(fic)
- except os.error,codret_partiel :
- self.cr.warn("Code d'erreur de unlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
- self.cr.warn("Impossible d'enlever le lien sur le fichier : "+fic)
- codret = codret + 1
- if os.path.isfile(fic) :
- try :
- os.remove(fic)
- except os.error,codret_partiel :
- self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
- self.cr.warn("Impossible de détruire le fichier : "+fic)
- codret = codret + 1
-### print os.listdir(Rep_Calc_ASTER)
-### print os.listdir(Rep_Calc_HOMARD_global)
-#
-#--------------------------------------------------------------------
-# 6. C'est fini !
-#--------------------------------------------------------------------
-#
- return codret
+++ /dev/null
-#@ MODIF macr_ascouf_calc_ops Macro DATE 08/02/2005 AUTEUR CIBHHLV L.VIVAN
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
- FOND_FISS,CHARGE,RESU_THER,AFFE_MATERIAU,
- PRES_REP,ECHANGE,TORS_P1,COMP_INCR,COMP_ELAS,
- SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
- INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args):
- """
- Ecriture de la macro MACR_ASCOUF_CALC
- """
- from Accas import _F
- import types
- import math
- import aster
- from math import pi,sin,cos,sqrt,atan2
- ier=0
-# On recopie les mots cles affe_materiau et impr_table pour les proteger
- mc_AFFE_MATERIAU=AFFE_MATERIAU
- mc_IMPR_TABLE =IMPR_TABLE
- # On importe les definitions des commandes a utiliser dans la macro
- AFFE_MODELE =self.get_cmd('AFFE_MODELE' )
- AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU' )
- AFFE_CARA_ELEM =self.get_cmd('AFFE_CARA_ELEM' )
- AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
- THER_LINEAIRE =self.get_cmd('THER_LINEAIRE' )
- AFFE_CHAR_MECA =self.get_cmd('AFFE_CHAR_MECA' )
- STAT_NON_LINE =self.get_cmd('STAT_NON_LINE' )
- CALC_ELEM =self.get_cmd('CALC_ELEM' )
- IMPR_RESU =self.get_cmd('IMPR_RESU' )
- IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
- DEFI_FOND_FISS =self.get_cmd('DEFI_FOND_FISS' )
- CALC_THETA =self.get_cmd('CALC_THETA' )
- CALC_G_THETA_T =self.get_cmd('CALC_G_THETA_T' )
- CALC_G_LOCAL_T =self.get_cmd('CALC_G_LOCAL_T' )
- POST_RCCM =self.get_cmd('POST_RCCM' )
- POST_RELEVE_T =self.get_cmd('POST_RELEVE_T' )
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-#------------------------------------------------------------------
-# DATA
- GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2')
-#------------------------------------------------------------------
-#
- if CL_BOL_P2_GV!=None :
- if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' :
- print '<A> <MACR_ASCOUF_CALC> la condition aux limites sur bol a section conique'
- print ' est ignoree pour un coude avec sous-epaisseurs'
- elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASCOUF_CALC> mot-cle AZIMUT non autorise dans le cas d''un coude sain""")
- return ier
-#
- if mc_IMPR_TABLE!=None :
- FLAG = 0
- if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASCOUF_CALC> POSI_ANGUL POSI_CURV_LONGI est obligatoire""")
- return ier
- if (mc_IMPR_TABLE['NOM_PARA']!=None) :
- impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA']
- for impt in impr_table_nom_para :
- if impt in ('SI_LONG','SI_CIRC','SI_RADI') :
- FLAG = 1
- if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR' ]==None)) or
- ((impt['ANGLE']==None) and (impt['R_CINTR' ]==None) and (impt['POSI_CURV_LONGI']==None)) ) :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASCOUF_CALC> il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI""")
- return ier
- if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
- if not FLAG : print '<A> <MACR_ASCOUF_CALC> ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas'
-#
-#------------------------------------------------------------------
-#
-# --- commande AFFE_MODELE ---
-#
- self.DeclareOut('modele',MODELE)
- mcfact=[]
- if (PRES_REP!=None) and (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
- mcfact.append(_F(GROUP_MA=GRMAIL ,PHENOMENE='MECANIQUE',MODELISATION='3D' ))
- else:
- mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D' ))
- if TORS_P1!=None :
- mcfact.append(_F(GROUP_MA='P1' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
- if CL_BOL_P2_GV==None :
- mcfact.append(_F(GROUP_MA='P2' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
- modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
- AFFE = mcfact )
- if ECHANGE!=None : # modele thermique
- __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
- AFFE = _F(TOUT ='OUI',
- PHENOMENE ='THERMIQUE',
- MODELISATION='3D' ) )
-#------------------------------------------------------------------
-#
-# --- commande AFFE_MATERIAU ---
-#
- if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER)
- mcfact=[]
- for mater in mc_AFFE_MATERIAU :
- if mater['TOUT']!=None :
- mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- rccmat = mater['MATER']
- else :
- mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- if mater['GROUP_MA'][:5]=='COUDE' :
- if TORS_P1!=None :
- mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
- mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) :
- mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
- MODELE = modele ,
- AFFE = mcfact )
-#------------------------------------------------------------------
-#
-# --- commande AFFE_CARA_ELEM ---
-#
- if (TORS_P1!=None) or (CL_BOL_P2_GV==None) :
- if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
- motscles={}
- motscles['DISCRET']=[]
- if (TORS_P1!=None) : motscles['DISCRET'].append(_F( GROUP_MA='P1' ,
- CARA ='K_TR_D_N',
- VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
- if (CL_BOL_P2_GV==None) : motscles['DISCRET'].append(_F( GROUP_MA='P2' ,
- CARA ='K_TR_D_N',
- VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
-
- carael = AFFE_CARA_ELEM( MODELE = modele ,**motscles)
-#
- if ECHANGE!=None :
-#------------------------------------------------------------------
-#
-# --- commande AFFE_CHAR_THER_F ---
-# condition aux limites
-#
- __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
- ECHANGE= _F(GROUP_MA='PEAUINT',
- COEF_H =ECHANGE['COEF_H'],
- TEMP_EXT=ECHANGE['TEMP_EXT'],), )
-#------------------------------------------------------------------
-#
-# --- calcul thermique ---
-#
- if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
- mcsimp={}
- if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
- if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
- mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
- resuth = THER_LINEAIRE( MODELE = __modthe ,
- CHAM_MATER = affmat ,
- TEMP_INIT = _F(STATIONNAIRE='OUI',),
- EXCIT = _F(CHARGE=__chther,),
- INCREMENT = mcfact, )
-#
- if CHARGE!=None : self.DeclareOut('chmeth',CHARGE)
- chmeth = AFFE_CHAR_MECA( MODELE = modele ,
- TEMP_CALCULEE = resuth )
-#------------------------------------------------------------------
-#
-# --- commande AFFE_CHAR_MECA ---
-# condition aux limites de type raccord 3d-poutre
-# ou bien blocage de mouvements rigides en cas d embout
-# a section conique, bol de type gv
-#
- motscles={}
- motscles['LIAISON_ELEM']=[]
- if TORS_P1!=None :
- motscles['LIAISON_ELEM'].append(_F( OPTION ='3D_POU' ,
- GROUP_MA_1='EXTUBE',
- GROUP_NO_2='P1') )
- if CL_BOL_P2_GV==None :
- motscles['LIAISON_ELEM'].append(_F( OPTION ='3D_POU' ,
- GROUP_MA_1='CLGV',
- GROUP_NO_2='P2') )
- motscles['DDL_IMPO' ]=_F( GROUP_NO ='P2' ,
- DX = 0.0 ,
- DY = 0.0 ,
- DZ = 0.0 ,
- DRX = 0.0 ,
- DRY = 0.0 ,
- DRZ = 0.0 , )
- else :
- motscles['FACE_IMPO' ]=_F( GROUP_MA ='CLGV' ,
- DNOR = 0.0 , )
- ALPHA = CL_BOL_P2_GV['ANGLE' ]
- AZIM = CL_BOL_P2_GV['AZIMUT']
- ALPHAR = ALPHA*pi/180.0
- AZIMR = AZIM *pi/180.0
- DDLB1 = []
- COEFB1 = []
- if (AZIM!=0.0) and (AZIM!=180.0) and (ALPHA!=90.0) :
- DDLB1.append('DX')
- COEFB1.append(SIN(AZIMR)*COS(ALPHAR))
- if (AZIM!=90.0) :
- DDLB1.append('DY')
- COEFB1.append(COS(AZIMR))
- if (AZIM!=0.) and (AZIM!=180.) and (ALPHA!=0.):
- DDLB1.append('DZ')
- COEFB1.append(-SIN(AZIMR)*SIN(ALPHAR))
- POINT=['BOUT1',]*len(DDLB1)
- motscles['LIAISON_DDL']=_F( GROUP_NO = POINT ,
- DDL = DDLB1 ,
- COEF_MULT = COEFB1 ,
- COEF_IMPO = 0.0 , )
-
- __conlim = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
-#
-# --- commande AFFE_CHAR_MECA ---
-# chargement mecanique : pres_rep, effet de fond
-#
- if PRES_REP!=None :
- motscles={}
- if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
- motscles['PRES_REP']=_F( GROUP_MA = ('PEAUINT','FACE1','FACE2') ,
- PRES = PRES_REP['PRES'] ,)
- else :
- motscles['PRES_REP']=_F( GROUP_MA = 'PEAUINT',
- PRES = PRES_REP['PRES'] ,)
- if PRES_REP['EFFE_FOND_P1']!=None :
- motscles['EFFE_FOND']=_F( GROUP_MA_INT = 'BORDTU' ,
- GROUP_MA = 'EXTUBE' ,
- PRES = PRES_REP['PRES'] ,)
-#
- __chpres = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
-#
-# --- commande AFFE_CHAR_MECA ---
-# chargement mecanique : torseur d efforts
-#
- if TORS_P1!=None :
- __chtor = [None]*6
- i=0
- for tors in TORS_P1:
- mcsimp={}
- if tors['FX']!=None : mcsimp['FX']=tors['FX']
- if tors['FY']!=None : mcsimp['FY']=tors['FY']
- if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
- if tors['MX']!=None : mcsimp['MX']=tors['MX']
- if tors['MY']!=None : mcsimp['MY']=tors['MY']
- if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
- mcfact=_F(GROUP_NO='P1',**mcsimp)
- __chtor[i] = AFFE_CHAR_MECA( MODELE = modele ,
- FORCE_NODALE = mcfact , )
- i=i+1
-#
-# --- commande STAT_NON_LINE ---
-#
- motscles={}
-#
- mcfex=[] # mot clé facteur EXCIT
- mcfex.append(_F(CHARGE=__conlim,))
- if ECHANGE!=None :
- mcfex.append(_F(CHARGE=chmeth,))
- if PRES_REP!=None:
- if PRES_REP['FONC_MULT']!=None :
- mcfex.append(_F(CHARGE=__chpres,FONC_MULT=PRES_REP['FONC_MULT']))
- else :
- mcfex.append(_F(CHARGE=__chpres,))
- if TORS_P1!=None:
- i=0
- for tors in TORS_P1 :
- if tors['FONC_MULT']!=None :
- mcfex.append(_F(CHARGE=__chtor[i],FONC_MULT=tors['FONC_MULT']))
- else :
- mcfex.append(_F(CHARGE=__chtor[i],))
- i=i+1
- motscles['EXCIT'] =mcfex
-#
- mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
- if COMP_INCR!=None :
- mcfci.append(_F(TOUT='OUI' ,RELATION=COMP_INCR['RELATION']))
- elif COMP_ELAS!=None :
- motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
- if TORS_P1!=None : mcfci.append( _F(GROUP_MA='P1',RELATION='ELAS'))
- if CL_BOL_P2_GV==None: mcfci.append( _F(GROUP_MA='P2',RELATION='ELAS'))
- motscles['COMP_INCR'] =mcfci
-#
- dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- for i in dSolveur.keys():
- if dSolveur[i]==None : del dSolveur[i]
-#
- dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
- for i in dConverg.keys():
- if dConverg[i]==None : del dConverg[i]
-#
- dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
- for i in dNewton.keys():
- if dNewton[i]==None : del dNewton[i]
-#
- dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
- for i in dRechlin.keys():
- if dRechlin[i]==None : del dRechlin[i]
-#
- dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
- for i in dIncrem.keys():
- if dIncrem[i]==None : del dIncrem[i]
-#
- if TITRE!=None :
- motscles['TITRE' ] =TITRE
- motscles ['SOLVEUR' ] =dSolveur
- motscles ['CONVERGENCE' ] =dConverg
- motscles ['NEWTON' ] =dNewton
- motscles ['RECH_LINEAIRE'] =dRechlin
- motscles ['INCREMENT' ] =dIncrem
- self.DeclareOut('nomres',self.sd)
- nomres = STAT_NON_LINE( MODELE = modele ,
- CHAM_MATER = affmat ,
- CARA_ELEM = carael ,
- INFO = INFO , **motscles)
-#
-# --- commande CALC_ELEM ---
-#
- nomres = CALC_ELEM( reuse = nomres,
- RESULTAT = nomres ,
- MODELE = modele ,
- TOUT_ORDRE = 'OUI' ,
- OPTION = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
- INFO = INFO ,)
-#
-# --- post-traitements ---
-#
- if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
-#
-# --- post traitement sous-epaisseurs: ligaments ---
-#
- if mc_IMPR_TABLE!=None:
-#
- SECT=('MI','TU','GV')
- LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
- if mc_IMPR_TABLE['POSI_ANGUL']==None:
- ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
- else :
- ASEP=mc_IMPR_TABLE['POSI_ANGUL']
-#
-# moyenne_rccm, invariant et moyenne sur les ligaments dans
-# l epaisseur
-#
- l_grno=MAILLAGE.LIST_GROUP_NO()
- tabprl=[None]*4
- tablig=[None]*4
-#
-# prelevements des ligaments circonferentiels et longitudinaux
-# de la sous-epaisseur
-#
- lgrno=[]
- for tgrno in l_grno :
- if tgrno[0][:3] in ('CIR','LON') : lgrno.append(tgrno[0])
- elif tgrno[0][:5]=='PCENT' : lgrno.append(tgrno[0])
- elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
-#
- motscles={}
- motscles['ACTION']=[]
- for grno in lgrno :
- motscles['ACTION'].append(_F(RESULTAT=nomres,
- NOM_CHAM='SIEF_ELNO_ELGA',
- TOUT_CMP='OUI',
- INTITULE=grno,
- GROUP_NO=grno,
- OPERATION='EXTRACTION',))
- motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
- tabprl[1]=POST_RELEVE_T(**motscles)
- tablig[1]=POST_RCCM(MATER = rccmat,
- TYPE_RESU_MECA = 'EVOLUTION',
- OPTION = 'PM_PB',
- TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
-#
- motscles={}
- motscles['ACTION']=[]
- for tgrno in lgrno :
- motscles['ACTION'].append(_F(RESULTAT=nomres,
- NOM_CHAM='SIEF_ELNO_ELGA',
- INTITULE=tgrno,
- GROUP_NO=tgrno,
- INVARIANT='OUI',
- OPERATION='EXTRACTION',))
- motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
-
- tablig[2]=POST_RELEVE_T(**motscles)
-#
- motscles={}
- nommail=MAILLAGE.nom
- coord =aster.getvectjev(nommail.ljust(8)+'.COORDO .VALE')
- linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
- collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
-
- motscles['ACTION']=[]
- for tgrno in lgrno :
- if tgrno[:3]!='LON' :
- if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
- else : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
- else :
- if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
- else :
- grpn=collgrno['FGAUTU ']
- LT1=coord[3*(grpn[0]-1)+2]
- for node in grpn:
- X = coord[3*(node-1)]
- Y = coord[3*(node-1)+1]
- Z = coord[3*(node-1)+2]
- RCIN = mc_IMPR_TABLE['R_CINTR']
- if Z<LT1 : ANGSEC=0.
- elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
- else :
- VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
- VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
- ANGSEC = atan2(VSIN,VCOS)
- vecty=(sin(ANGSEC),0.,cos(ANGSEC))
- motscles['ACTION'].append(_F(RESULTAT=nomres,
- NOM_CHAM='SIEF_ELNO_ELGA',
- INTITULE=tgrno,
- GROUP_NO=tgrno,
- NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
- REPERE='LOCAL',
- VECT_Y=vecty,
- OPERATION='MOYENNE',))
- motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
- tablig[3]=POST_RELEVE_T(**motscles)
-#
-# prelevements des ligaments sur les sections MI,TU et GV
-# les 8 ligaments sont tous les 45 degres
-#
- ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
- secprl=[None]*3
- secrcm=[None]*3
- secinv=[None]*3
- secmoy=[None]*3
- for i in range(3):
- if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
- else :
- if i==0 : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
- if i==1 : vecty=(0.,0.,1.)
- if i==2 : vecty=(sin(ACOUR),0.,cos(ACOUR))
- motscles = {}
- motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
-#
-# moyenne RCCM sur les sections MI,TU et GV
-#
- motscles={}
- motscles['ACTION']=[]
- for j in range(8) :
- motscles['ACTION'].append(_F(RESULTAT=nomres,
- NOM_CHAM='SIEF_ELNO_ELGA',
- TOUT_CMP='OUI',
- INTITULE=LIG[j]+SECT[i],
- GROUP_NO=LIG[j]+SECT[i],
- OPERATION='EXTRACTION',))
- motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
- secprl[i]=POST_RELEVE_T(**motscles)
- secrcm[i]=POST_RCCM(MATER = rccmat,
- TYPE_RESU_MECA = 'EVOLUTION',
- OPTION = 'PM_PB',
- TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
-#
-# invariants sur les sections MI,TU et GV
-#
- motscles = {}
- motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
- motscles['ACTION']=[]
- for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
- GROUP_NO =LIG[j]+SECT[i],
- RESULTAT =nomres,
- NOM_CHAM ='SIEF_ELNO_ELGA',
- INVARIANT='OUI',
- OPERATION='EXTRACTION'))
- secinv[i] = POST_RELEVE_T(**motscles)
-#
-# moyennes contraintes sur les sections MI,TU et GV
-#
- motscles = {}
- motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
- motscles['ACTION']=[]
- for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
- REPERE ='LOCAL',
- VECT_Y =vecty,
- GROUP_NO =LIG[j]+SECT[i],
- RESULTAT =nomres,
- NOM_CHAM ='SIEF_ELNO_ELGA',
- NOM_CMP =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
- OPERATION='MOYENNE'))
- secmoy[i] = POST_RELEVE_T(**motscles)
-
-#
-# impression des valeurs maximales pour chaque sous-epaisseur
-#
- if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
- list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
- else : list_para=mc_IMPR_TABLE['NOM_PARA']
- if 'TRESCA_MEMBRANE' in list_para:
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE = _F( NOM_PARA ='PM', CRIT_COMP ='MAXI'),
- NOM_PARA = ('INTITULE','PM'));
- if 'TRESCA_MFLE' in list_para:
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE =(_F( NOM_PARA ='LIEU',VALE_K ='ORIG'),
- _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
- NOM_PARA = ('INTITULE','PMB'));
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE =(_F( NOM_PARA='LIEU', VALE_K ='EXTR'),
- _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
- NOM_PARA = ('INTITULE','PMB'));
- if 'SI_RADI' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
- _F( NOM_PARA ='SIXX', CRIT_COMP='MAXI'),),
- NOM_PARA = ('INTITULE','SIXX'));
- if 'SI_LONG' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
- _F( NOM_PARA ='SIYY', CRIT_COMP='MAXI'),),
- NOM_PARA = ('INTITULE','SIYY'));
- if 'SI_CIRC' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
- _F( NOM_PARA ='SIZZ', CRIT_COMP='MAXI'),),
- NOM_PARA = ('INTITULE','SIZZ'));
- if 'TRESCA' in list_para:
- IMPR_TABLE(TABLE = tablig[2],
- NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
- PAGINATION = 'INTITULE',
- FILTRE = _F( NOM_PARA = 'TRESCA',
- CRIT_COMP = 'MAXI' ) ) ;
-#
-# impression des resultats pour chaque sous-epaisseur
-#
- if 'TRESCA_MEMBRANE' in list_para:
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
- NOM_PARA = ('INTITULE','PM'));
- if 'TRESCA_MFLE' in list_para:
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
- NOM_PARA = ('INTITULE','PMB'));
- IMPR_TABLE(TABLE = tablig[1],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
- NOM_PARA = ('INTITULE','PMB'));
- if 'SI_RADI' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIXX'));
- if 'SI_LONG' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIYY'));
- if 'SI_CIRC' in list_para:
- IMPR_TABLE(TABLE = tablig[3],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIZZ'));
- if 'TRESCA' in list_para:
- IMPR_TABLE(TABLE = tablig[2],
- NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
- PAGINATION = 'INTITULE');
-#
-# impression des resultats pour les sections MI, TU et GV
-#
- for k in range(3):
- if 'TRESCA_MEMBRANE' in list_para:
- IMPR_TABLE(TABLE = secrcm[k],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
- NOM_PARA = ('INTITULE','PM'));
- if 'TRESCA_MFLE' in list_para:
- IMPR_TABLE(TABLE = secrcm[k],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
- NOM_PARA = ('INTITULE','PMB'));
- IMPR_TABLE(TABLE = secrcm[k],
- FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
- NOM_PARA = ('INTITULE','PMB'));
- if 'SI_RADI' in list_para:
- IMPR_TABLE(TABLE = secmoy[k],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIXX'));
- if 'SI_LONG' in list_para:
- IMPR_TABLE(TABLE = secmoy[k],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIYY'));
- if 'SI_CIRC' in list_para:
- IMPR_TABLE(TABLE = secmoy[k],
- FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
- NOM_PARA = ('INTITULE','SIZZ'));
- if 'TRESCA' in list_para:
- IMPR_TABLE(TABLE = secinv[k],
- NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
- PAGINATION = 'INTITULE');
-#
- if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
-#
-# --- post traitement fissure : calcul de g ----
-#
- motscles = {}
- if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
- if TYPE_MAILLAGE =='FISS_COUDE' :
- motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
- motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
- motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
- else :
- motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
- GROUP_NO_ORIG='PFOR',
- GROUP_MA_ORIG='MAIL_ORI')
- fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
- LEVRE_SUP=_F(GROUP_MA='FACE1'),
- LEVRE_INF=_F(GROUP_MA='FACE2'),
- INFO=2,**motscles
- );
- if THETA_3D!=None :
- for thet in THETA_3D:
- _nothet=CALC_THETA(MODELE=modele,
- FOND_FISS=fonfis,
- THETA_3D=_F(TOUT = 'OUI',
- MODULE = 1.,
- R_INF = thet['R_INF'],
- R_SUP = thet['R_SUP'],),
- );
- motscles = {}
- if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
- if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
- _nogthe=CALC_G_THETA_T(
- RESULTAT =nomres,
- TOUT_ORDRE ='OUI',
- THETA =_nothet,
- **motscles
- );
-#
- IMPR_TABLE(TABLE=_nogthe,);
-#
- for thet in THETA_3D:
- motscles = {}
- if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
- if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
- if TYPE_MAILLAGE =='FISS_COUDE' :
- motscles['LISSAGE_THETA']='LEGENDRE'
- motscles['LISSAGE_G'] ='LEGENDRE'
- elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
- motscles['LISSAGE_THETA']='LAGRANGE'
- motscles['LISSAGE_G'] ='LAGRANGE'
- _nogloc=CALC_G_LOCAL_T(MODELE =modele,
- RESULTAT =nomres,
- TOUT_ORDRE ='OUI',
- CHAM_MATER =affmat,
- FOND_FISS =fonfis,
- DEGRE = 4,
- R_INF = thet['R_INF'],
- R_SUP = thet['R_SUP'],
- **motscles
- );
-
- IMPR_TABLE(TABLE=_nogloc,);
-#
-# --- commande IMPR_RESU ---
-#
- if IMPRESSION!=None:
- mcfresu =[]
- motscles={}
- if IMPRESSION['FORMAT']=='IDEAS' :
- motscles['VERSION' ]= IMPRESSION['VERSION']
- if IMPRESSION['FORMAT']=='CASTEM' :
- motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
- mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
- if ECHANGE!=None:
- motscles={}
- if IMPRESSION['FORMAT']=='IDEAS' :
- motscles['VERSION' ]= IMPRESSION['VERSION']
- if IMPRESSION['FORMAT']=='CASTEM' :
- motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
- mcfresu.append(_F(RESULTAT=resuth,))
- IMPR_RESU( MODELE = modele,
- RESU = mcfresu,
- FORMAT=IMPRESSION['FORMAT'],**motscles)
-#
- return ier
+++ /dev/null
-#@ MODIF macr_ascouf_mail_ops Macro DATE 09/05/2005 AUTEUR LEBOUVIE F.LEBOUVIER
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
-
-# ------------------------------------------------------------------------------
-def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
- """
- FONCTION F(CP)=CC
- OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
- ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
- """
- AZIMR = AZIM*2.*pi/360.
- if POS=='DEB_INT': X = RM-EP/2.
- else : X = RM+EP/2.
- if abs(ORIEN-45.0)<0.01: SIG = 1.
- else : SIG = -1.
- f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * ( \
- log ( RM/X+RM/RC*(cos(AZIMR)- \
- sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) + \
- sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)- \
- sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 ) \
- ) \
- - log ( RM/X+RM/RC*cos(AZIMR) \
- + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
- ) ) \
- - SIG*X*RC/(2.*RM*SIN(AZIMR)) * \
- ( ( RM/X+RM/RC* ( cos(AZIMR)- \
- sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) ) \
- ) * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)- \
- sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 ) \
- - ( RM/X+RM/RC*COS(AZIMR) ) \
- * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
- ) \
- - 2.0*AXEC
- return f_ASCFON
-
-# ------------------------------------------------------------------------------
-def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
- AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
- """
- MACR_ASCOUF_MAIL ASCFIS
- taille initiale du defaut fissure sur la plaque en
- fonction des donnees sur le coude ou le tube suivant la
- transformation choisie
-
- ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-
- ALPHA = ANGLE DU COUDE
- RM = RAYON MOYEN DU COUDE
- RC = RAYON DE CINTRAGE DU COUDE
- EP = EPAISSEUR DU COUDE
- SUREP = VALEUR DE LA SUREPAISSEUR
- GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
- AXEA = PROFONDEUR FISSURE (DEMI PETIT AXE)
- AXEC = DEMI GRAND AXE FISSURE
- AZIM = POSITION AZIMUTALE DU CENTRE DE LA FISSURE
- POS = POSITION EN PEAU (EXTERNE OU INTERNE)
- SF = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
- DSF = BOOLEEN EXPRESSION POSITION CENTRE FISSURE
- BETA = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
- ORIEN = ORIENTATION DE LA FISSURE
-
- -----------------DONNEES RENVOYEES-----------------------
-
- AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
- AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
- SFP = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
- SUR LA PLAQUE
-
- """
- from Utilitai import funct_root
- if POS=='DEB_INT':
- if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
- else: X = RM-EP/2.0
- else: X = RM+EP/2.0
- AZIMR = AZIM*2.0*pi/360.0
-#
-# -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
-# DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
-# ANGULAIRE
-#
- if DSF:
- if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
- else : SFP = SF
- else :
- BETAR = BETA*2.0*pi/360.0
- if (GEOM=='COUDE'):
- SF = BETAR*(RC+X*cos(AZIMR))
- SFP = SF/(1.0+X/RC*cos(AZIMR))
- else:
- SF = BETAR*RC
- SFP = SF
- if (GEOM=='COUDE'): print 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f'%SF
- if (GEOM=='TUBE') : print 'COTE AXIALE CENTRE FISSURE SUR TUBE : %.2f'%SF
- print 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
-#
-# ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
-# DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
-# PARTIE RESTANT DANS LE COUDE.
-#
- if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
- else : DIST = ALPHA*2.0*pi/360.0*RC
- BCOUD = 0.0
- BEMB = 0.0
- if abs(ORIEN)<0.01:
-# -- FISSURE LONGITUDINALE (0 DEGRE)
- BSUP = SF + AXEC
- BINF = SF - AXEC
- if BSUP>DIST:
- BCOUD = DIST - BINF
- BEMB = BSUP - DIST
- elif BINF<0. :
- BCOUD = BSUP
- BEMB = abs(BINF)
- elif (BINF>=0. and BSUP<=DIST):
- BCOUD = 2.0*AXEC
- elif abs(ORIEN-90.)<0.01:
-# -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
- BSUP = SF
- BINF = SF
- if BSUP>DIST:
- BCOUD = DIST - BINF
- BEMB = BSUP - DIST
- elif BINF<0. :
- BCOUD = BSUP
- BEMB = abs(BINF)
- elif (BINF>=0. and BSUP<=DIST):
- BCOUD = 2.0*AXEC
- else:
-# -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
- BSUP = SF + sqrt(2.0)/2.0*AXEC
- BINF = SF - sqrt(2.0)/2.0*AXEC
- if BSUP>DIST:
- BCOUD = (DIST - BINF)*sqrt(2.0)
- BEMB = (BSUP - DIST)*sqrt(2.0)
- elif BINF<0. :
- BCOUD = BSUP *sqrt(2.0)
- BEMB = abs(BINF)*sqrt(2.0)
- elif (BINF>=0. and BSUP<=DIST):
- BCOUD = 2.0*AXEC
- print 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f'%BCOUD
- print 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f'%BEMB
-#
-# -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
-#
- NEWT=0
- if abs(ORIEN)<0.01:
-# -- FISSURE LONGITUDINALE (0 DEGRE)
- if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
- else : AXECP = BCOUD + BEMB
- elif abs(ORIEN-90.)<0.01:
-# -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
- AXECP = (BCOUD+BEMB)*RM/X
- else :
- if GEOM=='COUDE':
-# ------- TRANSFORMATION COUDE
- if AZIM in (0.,180.):
-# -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
- AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
- BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
- else :
-# -- FISSURE A +/- 45 DEGRES AILLEURS
- AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
- AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
- AXECC = ASCFON(AXECP)+BCOUD
- NEWT=1
- elif GEOM=='TUBE':
- AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 )
- else :
- AXECP = BCOUD + BEMB
-#
- if GEOM=='COUDE':
- print 'TAILLE GRAND AXE COUDE DONNE : %.2f'%(2.*AXEC)
- elif GEOM=='TUBE':
- print 'TAILLE GRAND AXE TUBE DONNE : %.2f'%(2.*AXEC)
- print 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f'%AXECP
- if NEWT:
- print 'METHODE DE NEWTON FISSURE A 45 DEGRES -->'
- print 'TAILLE GRAND AXE COUDE RECALCULE : %.2f'%AXECC
- if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
- SFP = ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
- print 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT'
- print 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
- if GEOM=='COUDE' and BEMB>0. and BINF<0. :
- SFP = + AXECP/2. - BEMB
- print 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT'
- print 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
-#
-# -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
-# LA ZONE DE SUREPAISSEUR
-#
- ALPHAR = ALPHA*2.*pi/360.
- ZSUR1 = ALPHAR*RC/10.
- ZSUR2 = ALPHAR*RC*9./10.
- YFISS = (AZIMR-pi/2.)*RM
- MU = 0.
- if (AZIM>=120.) and (AZIM<=240.):
- if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
- elif (SFP<=ZSUR1): MU = SFP/ZSUR1
- elif (SFP>ZSUR2): MU = (ALPHAR*RC-SFP)/ZSUR1
- elif (AZIM>=90.) and (AZIM<=120.):
- if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM)
- elif (SFP<=ZSUR1): MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
- elif (SFP>ZSUR2): MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
- elif (AZIM>=240.) and (AZIM<=270.):
- if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM)
- elif (SFP<=ZSUR1): MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
- elif (SFP>ZSUR2): MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
-#
- if SUREP!=0.:
- AXEAP = AXEA * EP / ( EP + MU*SUREP )
- print '--> CORRECTION DUE A LA SUREPAISSEUR'
- print '--> TAILLE PETIT AXE PLAQUE : %.2f'%AXEAP
- else: AXEAP = AXEA
-#
- return AXEAP,AXECP,SFP
-
-
-# ------------------------------------------------------------------------------
-def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
- """
- MACR_ASCOUF_MAIL ASCSEP
- taille initiale sur la plaque des sous-epaisseurs
-
- ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-
- ALPHA = ANGLE DU COUDE
- RM = RAYON MOYEN DU COUDE
- RC = RAYON DE CINTRAGE DU COUDE
- EP = EPAISSEUR DU COUDE
- GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
- SYME = QUART DE STRUCTURE SI 'OUI'
-
- """
- ier=0
- CG=pi/180.
-#
-# --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
-#
- i=0
- for ssep in MCL_SOUS_EPAIS :
- i=i+1
- print '-------------------------------------'
- print 'SOUS-EPAISSEUR NUMERO %d'%i
- print '-------------------------------------'
-#
-# --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES
-#
- if ssep['TYPE']=='AXIS':
- print 'SOUS-EPAISSEUR AXISYMETRIQUE : '
- print 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)'
- ssep.ICIRP = 2.*pi*RM
- ssep.ISCP = pi*RM
- ssep.IPHIC = 180.
- AZIMC = pi
- else:
-#
-# -- CALCUL DE L ABSCISSE CURVILIGNE CIRCONF.SUR LA PLAQUE
-# EN FONCTION DE L AZIMUT OU DE L ABSCISSE CURVIL.CIRCONF
-# SUR LE COUDE DU CENTRE DE LA SOUS-EPAISSEUR
-# NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
-#
- if ssep['POSI_CURV_CIRC']!=None:
- ssep.ISCP = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
- AZIMC = ssep.ISCP/RM
- ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
- print 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f'%ssep.IPHIC
- else:
- ssep.ISCP = ssep['AZIMUT']*pi*RM/180.
- AZIMC = ssep['AZIMUT']*pi/180.
- print 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f'%(AZIMC*(RM+EP/2.))
-#
-# PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
-# CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS
-#
- if ssep.ISCP>(3.*pi*RM/2.): ssep.ISCP = ssep.ISCP - 3.*pi*RM/2.
- else: ssep.ISCP = ssep.ISCP + pi*RM/2.
- print 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ISCP
-#
-# -- CALCUL DE LA TAILLE CIRCONFERENTIELLE
-# NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
-#
- ssep.ICIRP = ssep['AXE_CIRC']*(RM/(RM+EP/2.))
- if ssep.ICIRP>(2.*pi*RM) :
- print ' <MACR_ASCOUF_MAIL> ASCSEP valeur hors domaine'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero : %d'%i
- print ' <MACR_ASCOUF_MAIL> taille axe circonferentiel : %.2f'%ssep.ICIRP
- print ' <MACR_ASCOUF_MAIL> bord plaque : %.2f'%2*pi*RM
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- print 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ICIRP
- print '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f'%(ssep.ICIRP*360./(2.*pi*RM))
-#
-# -- CALCUL COTE AXIALE DU CENTRE SOUS-EPAISSEUR SUR LA PLAQUE
-# EN FONCTION DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE
-# OU DE LA POSITION ANGULAIRE
-# NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
-#
- if ssep['POSI_CURV_LONGI']!=None:
- if GEOM=='COUDE':
- ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
- AZIML = ssep.ISLP/RC
- print 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f'%(AZIML*180./pi)
- else :
- ssep.ISLP = ssep['POSI_CURV_LONGI']
- if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
- print ' <MACR_ASCOUF_MAIL> ASCSEP cas de symetrie :'
- print ' <MACR_ASCOUF_MAIL> la sous-epaisseur doit etre dans la section mediane du coude !'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- else :
- if GEOM=='COUDE':
- print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC)))
- AZIML = (ssep.BETA)*CG
- else :
- print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE : %.2f'%((ssep.BETA)*CG*RC)
- ssep.ISLP = (ssep.BETA)*CG*RC
- if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
- print ' <MACR_ASCOUF_MAIL> ASCSEP cas de symetrie :'
- print ' <MACR_ASCOUF_MAIL> la sous-epaisseur doit etre dans la section mediane du coude !'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ISLP
-#
-# -- CALCUL DE LA TAILLE LONGITUDINALE
-# NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
-#
-# ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
-# DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
-# PARTIE RESTANT DANS LE COUDE.
-#
- if GEOM=='COUDE' : DIST = ALPHA*CG*(RC+(RM+EP/2.)*cos(AZIMC))
- else : DIST = ALPHA*CG*RC
- if ssep['POSI_CURV_LONGI']!=None:
- BSUP = ssep['POSI_CURV_LONGI']+ssep['AXE_LONGI']/2.
- BINF = ssep['POSI_CURV_LONGI']-ssep['AXE_LONGI']/2.
- else:
- if GEOM=='COUDE' :
- BSUP = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))+ssep['AXE_LONGI']/2.
- BINF = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))-ssep['AXE_LONGI']/2.
- else:
- BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
- BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
- BCOUD1 = 0.
- BCOUD2 = 0.
- BEMB1 = 0.
- BEMB2 = 0.
- if BINF<0. and BSUP>DIST :
- BCOUD1 = DIST
- BEMB1 = abs(BINF) + BSUP-DIST
- elif BSUP>DIST :
- BCOUD1 = DIST - BINF
- BEMB1 = BSUP - DIST
- elif BINF<0 :
- BCOUD2 = BSUP
- BEMB2 = abs(BINF)
- elif (BINF>=0. and BSUP<=DIST) :
- BCOUD1 = ssep['AXE_LONGI']
- BCOUD = BCOUD1+ BCOUD2
- BEMB = BEMB1 + BEMB2
- if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
- else : BPLAQ = BCOUD
- ssep.ILONP = BPLAQ+BEMB
- if BEMB1>0.:
- ssep.ISLP = ALPHA*CG*RC - ssep.ILONP/2. + BEMB1
- print 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT'
- print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ISLP
- if BEMB2>0.:
- ssep.ISLP = ssep.ILONP/2. - BEMB2
- print 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT'
- print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ISLP
- if ssep.ISLP<0. : ssep.ISLP = 0.
- if (ssep.ISLP>ALPHA*CG*RC) : ssep.ISLP = ALPHA*CG*RC
-#
-# SI LE CENTRE DE LA SOUS-EP CALCULE SUR LA PLAQUE EST DANS L EMBOUT
-# ON CORRIGE SA POSITION EN LE METTANT A L INTERFACE SINON CA PLANTE
-# DANS LA PROC DE MAILLAGE (A AMELIORER)
-#
- print 'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ILONP
- print '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f'%(ssep.ILONP*360/(2*pi*RC))
-#
- return ier
-
-# ------------------------------------------------------------------------------
-def ASCTCI(MCL_SOUS_EPAIS,RM):
- """
- MACR_ASCOUF_MAIL ASCTCI
- APPELEE DANS : ASCSYM et ASCPRE
- CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
-
- ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-
- RM = RAYON MOYEN DU COUDE
-
- -----------------DONNEES RENVOYEES-----------------------
-
- IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
- IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
- COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
- COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
-
- """
-#
-# --- tri du tableau des abscisses curvilignes circonf. plaque
-#
- TAMPON = []
- COORXG = []
- COORYG = []
- i=0
- for ssep in MCL_SOUS_EPAIS :
- i=i+1
- if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
- print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
- print ' <MACR_ASCOUF_MAIL> ABSC. CURV. CIRCONF. :%.2f'%ssep.ISCP
- print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :%.2f'%(2.*pi*RM)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- TAMPON.append((ssep.ISCP,i))
- TAMPON.sort()
- IABSC1=[]
- for j in range(i):
- IABSC1.append(TAMPON[j][1])
- print
- print 'TRI DES CENTRES ABSC. CURV. CIRCONF. :'
- print '------------------------------------'
- i=0
- for ssep in TAMPON :
- i=i+1
- print '%d) SOUS-EP NO %d <> XC = %.2f'%(i,ssep[1],ssep[0])
-#
-# --- calcul des abcisses droites et gauches des sous-epaisseurs
-#
- COORXD=[]
- COORXG=[]
- for bid in TAMPON :
- XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
- if XG<0. : XG=XG+2.*pi*RM
- COORXG.append(XG)
- XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
- if XD>2.*pi*RM : XD=XD-2.*pi*RM
- COORXD.append(XD)
-#
-# --- tri des bornes d'intervalles en abscisse
-#
- TAMPON = []
- for j in range(len(MCL_SOUS_EPAIS)):
- TAMPON.append((COORXG[j],2*j+1))
- TAMPON.append((COORXD[j],2*j+2))
- TAMPON.sort()
- IABSC2=[]
- for j in range(2*len(MCL_SOUS_EPAIS)):
- IABSC2.append(TAMPON[j][1])
- print
- print 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :'
- print '-----------------------------------------------'
- for j in range(2*len(MCL_SOUS_EPAIS)):
- if fmod(IABSC2[j],2):
- print '%d) SOUS-EP NO %d <> XG = %.2f'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0])
- else:
- print '%d) SOUS-EP NO %d <> XD = %.2f'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0])
-#
- return TAMPON,IABSC1,IABSC2,COORXD,COORXG
-
-# ------------------------------------------------------------------------------
-def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
- """
- MACR_ASCOUF_MAIL ASCTLO
- APPELEE DANS : ASCSYM et ASCPRE
- CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
-
- ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-
- RC = RAYON MOYEN DU COUDE
- ALPHA = ANGLE DU COUDE
- LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
- LTCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
-
- -----------------DONNEES RENVOYEES-----------------------
-
- IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
- IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
- COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
- COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
-
- """
-#
-# tri du tableau des abscisses curvilignes axiales plaque
-#
- ALPHAR = 2.*ALPHA*pi/360.
- TAMPON = []
- i=0
- for ssep in MCL_SOUS_EPAIS :
- i=i+1
- if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
- print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
- print ' <MACR_ASCOUF_MAIL> ABSC. CURV. LONGIT. :%.2f'%ssep.ISLP
- print ' <MACR_ASCOUF_MAIL> BORDS PLAQUE :%.2f'%(ALPHAR*RC)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- TAMPON.append((ssep.ISLP,i))
- TAMPON.sort()
- IORDO1=[]
- for j in range(i):
- IORDO1.append(TAMPON[j][1])
- print
- print 'TRI DES CENTRES ABSC. CURV. LONGIT. :'
- print '------------------------------------'
- i=0
- for ssep in TAMPON :
- i=i+1
- print '%d) SOUS-EP NO %d <> YC = %.2f'%(i,ssep[1],ssep[0])
-#
-# calcul des abscisses sup. et inf. des sous-ep.
-#
- COORYI=[]
- COORYS=[]
- EPS=0.000000000001
- for bid in TAMPON :
- i=i+1
- YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
- YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
- if fabs(bid[0])<EPS :
- YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
- YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
- if fabs(bid[0]-ALPHAR*RC)<EPS :
- YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
- YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
- if YI<(-LTCHAR):
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
- print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :',bid[1]
- print ' <MACR_ASCOUF_MAIL> BORD INFERIEUR :',YI
- print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :',-LTCHAR
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if YS>(ALPHAR*RC+LTCLIM):
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
- print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :',bid[1]
- print ' <MACR_ASCOUF_MAIL> BORD INFERIEUR :',YS
- print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :',ALPHAR*RC+LTCLIM
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- COORYI.append(YI)
- COORYS.append(YS)
-#
-# tri des bornes d'intervalles en abscisse
-#
- TAMPON = []
- for j in range(len(MCL_SOUS_EPAIS)):
- TAMPON.append((COORYI[j],2*j+1))
- TAMPON.append((COORYS[j],2*j+2))
- TAMPON.sort()
- IORDO2=[]
- for j in range(2*len(MCL_SOUS_EPAIS)):
- IORDO2.append(TAMPON[j][1])
- print
- print 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. :'
- print '-----------------------------------------------'
- for j in range(2*len(MCL_SOUS_EPAIS)):
- if fmod(IORDO2[j],2):
- print '%d) SOUS-EP NO %d <> YI = %.2f'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0])
- else:
- print '%d) SOUS-EP NO %d <> YS = %.2f'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0])
-#
- return TAMPON,IORDO1,IORDO2,COORYI,COORYS
-#
-#
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL ASCNBE
-# APPELEE DANS : ASCSYM et ASCPRE
-# CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
-#
-#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-#
-# COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
-# COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
-# COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
-# COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
-# BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
-# BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
-# BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
-# BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
-# DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
-# DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
-# INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
-# INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
-# RM = RAYON MOYEN DU COUDE
-# RC = RAYON DE CINTRAGE DU COUDE
-# IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
-# IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
-#
-#----------------------DONNEES RENVOYEES-----------------------
-#
-# NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
-# NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
-#
-# ------------------------------------------------------------------------------
-def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
- INDSEX,INDSEY,IABSC1,IORDO1):
-#
-# calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
-#
- print
- print 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :'
- print '------------------------------------------------------------'
- NLX=[0]*len(MCL_SOUS_EPAIS)
- NLY=[0]*len(MCL_SOUS_EPAIS)
- for j in range(len(BD)):
- if INDSEX[j]!=0:
-# calcul au passage du nombre d'elements sur chaque zone circonf.
- RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
- RNBEL2 = RNBEL - floor(RNBEL)
- if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
- else : NBEL=int(floor(RNBEL))+1
- if NBEL <= 1 : NBEL=2
-# calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
- for i in range(len(MCL_SOUS_EPAIS)):
- l=IABSC1[i]-1
- if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
- or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
- NLX[i]=NLX[i]+NBEL
- print 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
-
- for j in range(len(BS)):
- if INDSEY[j]!=0:
-# calcul au passage du nombre d'elements sur chaque zone longi.
- RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
- RNBEL2 = RNBEL - floor(RNBEL)
- if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
- else : NBEL=int(floor(RNBEL))+1
- if NBEL <= 1 : NBEL=2
-# calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
- i=0
- for i in range(len(MCL_SOUS_EPAIS)):
- l=IORDO1[i]-1
- if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
- NLY[i]=NLY[i]+NBEL
- print 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
-
- for j in range(len(NLX)):
- print 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d'%(j+1,NLX[j])
- print 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI. : %d'%(j+1,NLY[j])
-
-#
- return NLX,NLY
-#
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL ASCSYM
-# PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
-# SOUS-EPAISSEURS :
-# CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE
-# CONSTRUCTION D UN QUART DU MAILLAGE
-# - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
-# - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
-#
-#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-#
-# RM = RAYON MOYEN DU COUDE
-# RC = RAYON DE CINTRAGE DU COUDE
-# ALPHA = ANGLE DU COUDE
-# LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
-# LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
-# NBSEP = NOMBRE DE SOUS-EPAISSEURS
-#
-#----------------------DONNEES RENVOYEES-----------------------
-#
-# NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
-# NZONEY = NOMBRE DE ZONES LONGITUDINALES
-#
-# ------------------------------------------------------------------------------
-def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
- ier=0
- DERAFC = 18.
- DERAFL = 5.
- INDSEX = []
- INDSEY = []
- BG = []
- BD = []
- INDBG = []
- INDBD = []
- DNX = []
-
-#
-# --- tri des donnees sous-ep. en circonferentiel
- TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
-#
-# --- calcul des zones en circonferentiel
-#
- ssep=MCL_SOUS_EPAIS[0]
- if (ssep.ISCP<pi*RM) :
-#
-# le centre sous-ep est dans la zone flanc droit/extrados/flanc
-# gauche, on preleve pi*RM a droite de la sous-epaisseur
-#
-# zone (centre sous-ep , bord droit)
-#
- BG.append(ssep.ISCP)
- BG.append(ssep.ISCP+ssep.ICIRP/2.)
- BD.append(ssep.ISCP+ssep.ICIRP/2.)
- BD.append(ssep.ISCP+pi*RM)
- INDBG.append(0)
- INDBG.append(1)
- INDBD.append(0)
- INDBD.append(0)
- DNX.append(ssep.IDENC)
- DNX.append(0)
- DNX.append(DERAFC)
- DNX.append(0)
- INDSEX.append(1)
- INDSEX.append(0)
- elif (ssep.ISCP+pi*RM==2.*pi*RM) :
-#
-# sous-ep axisymetrique : on preleve pi*RM a droite
-#
-# zone (centre sous-ep , bord droit)
-#
- BG.append(ssep.ISCP)
- BD.append(ssep.ISCP+ssep.ICIRP/2.)
- INDBG.append(0)
- INDBD.append(0)
- DNX.append(ssep.IDENC)
- DNX.append(0)
- INDSEX.append(1)
- INDSEX.append(0)
- else :
-#
-# le centre sous-ep est dans la zone flanc gauche/intrados/flanc
-# droit : on preleve pi*RM a gauche de la sous-epaisseur
-#
-# zone (centre -pi*RM, bord gauche)
-#
- BG.append(ssep.ISCP-pi*RM)
- BG.append(ssep.ISCP-ssep.ICIRP/2.)
- BD.append(ssep.ISCP-ssep.ICIRP/2.)
- BD.append(ssep.ISCP)
- INDBG.append(0)
- INDBG.append(0)
- INDBD.append(1)
- INDBD.append(0)
- DNX.append(DERAFC)
- DNX.append(0)
- DNX.append(ssep.IDENC)
- DNX.append(0)
- INDSEX.append(0)
- INDSEX.append(1)
-
-
- print
- print 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :'
- print '---------------------------------------------'
- EPS=0.000000000001
- NZONEX=len(BG)
- for j in range(NZONEX) :
- if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
- print 'ZONE NO %d BORNE GAUCHE = %.2f'\
- ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j])
- else:
- print 'ZONE NO %d BORNE GAUCHE = %.2f'\
- ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j])
-
-
-# tri des donnees sous-epaisseurs en axial
- TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
-
-# calcul des zones en axial:
- BI = []
- BS = []
- INDBI = []
- INDBS = []
- DNY = []
- INDSEY = []
- ssep = MCL_SOUS_EPAIS[0]
- BI.append(0.)
- BI.append(ssep.ISLP-ssep.ILONP/2.)
- BS.append(ssep.ISLP-ssep.ILONP/2.)
- BS.append(ssep.ISLP)
- INDBI.append(0)
- INDBI.append(0)
- INDBS.append(1)
- INDBS.append(0)
- DNY.append(DERAFL)
- DNY.append(0)
- DNY.append(ssep.IDENL)
- DNY.append(0)
- INDSEY.append(0)
- INDSEY.append(1)
- print
- print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
- print '-----------------------------------------------'
- NZONEY=len(BI)
- for j in range(NZONEY) :
- if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
- print 'ZONE NO %d <> BORNE INF. = %.2f'\
- ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j])
- else:
- print 'ZONE NO %d <> BORNE INF. = %.2f'\
- ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j])
-
-# calcul du nombre d'elements longi. et circonf. dans les soue-ep
- NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
- DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
-
- return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
-################################################################################
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL ASCPRE
-# PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE
-# SOUS-EPAISSEURS :
-# - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
-# - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
-#
-#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
-#
-# RM = RAYON MOYEN DU COUDE
-# RC = RAYON DE CINTRAGE DU COUDE
-# ALPHA = ANGLE DU COUDE
-# LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
-# LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
-# NBSEP = NOMBRE DE SOUS-EPAISSEURS
-# SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
-#
-#----------------------DONNEES RENVOYEES-----------------------
-#
-# NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
-# NZONEY = NOMBRE DE ZONES LONGITUDINALES
-#
-# ------------------------------------------------------------------------------
-def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
- ier=0
- ALPHAR = 2.*ALPHA*pi/360.
- DERAFC = 18.
- DERAFL = 5.
- EPSI = 0.001
- NBSEP = len(MCL_SOUS_EPAIS)
- print 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n'
-
-# tri des donnees sous-epaisseurs en circonferentiel
- TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
-# --- calcul des recouvrements de zones en circonferentiel
-#
- NZONEX=0
- j=0
- ICE=1
- NBGAU=0
- NBDRO=0
- TYPG=0
- TYPD=0
- go10=1
- go20=1
-#
- BG =[]
- BD =[]
- INDBG =[]
- INDBD =[]
- DNX =[]
- INDSEX=[]
-#
-
- while go10:
-
- j=j+1
-#
-# definition de la zone courante (borne gauche, borne droite)
-#
-# TYPG = type de la borne:
-# 0 : borne gauche sous-epaisseur
-# 1 : borne droite sous-epaisseur
-# 2 : centre sous-epaisseur
-#
- if j>2*NBSEP and ICE<NBSEP :
-# cas ou il ne reste plus que des centres a caser
- MING = MIND
- TYPG = TYPD
- NUMG = NUMD
- MIND = 2.*pi*RM+1
- elif TYPD==2 :
-# cas ou la borne droite de la zone precedente etait un centre
- MING = MIND
- TYPG = TYPD
- NUMG = NUMD
- MIND = TAMPON[j-1][0]
- if fmod(IABSC2[j-1],2):
- TYPD = 0
- NUMD = IABSC1[IABSC2[j-1]/2]
- else:
- TYPD = 1
- NUMD = IABSC1[IABSC2[j-1]/2-1]
- j=j-1
- else:
- if j>= 2*NBSEP :
- MIND = TAMPON[2*NBSEP-1][0]
- MING = MIND
- if fmod(IABSC2[2*NBSEP-1],2):
- TYPG = 0
- NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
- else:
- TYPG = 1
- NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
- TYPD=TYPG
- NUMD=NUMG
- else:
- MING=TAMPON[j-1][0]
- MIND=TAMPON[j][0]
- if fmod(IABSC2[j-1],2):
- TYPG = 0
- NUMG = IABSC1[IABSC2[j-1]/2]
- else:
- TYPG = 1
- NUMG = IABSC1[IABSC2[j-1]/2-1]
- if fmod(IABSC2[j],2):
- TYPD = 0
- NUMD = IABSC1[IABSC2[j]/2]
- else:
- TYPD = 1
- NUMD = IABSC1[IABSC2[j]/2-1]
- if fabs(MING-MIND)<EPSI :
- if j==2*NBSEP:break
- else:continue
- if j>2*NBSEP and ICE>=NBSEP:
- break #on sort de la boucle
-
- while go20:
- i=ICE
- if i<=NBSEP:
-# recherche des centres a intercaler
- INDC=IABSC1[i-1]
- if i>1:
-# le centre est deja le meme que precedent
- if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
- ICE=ICE+1
- continue
- if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
-# le centre est la nouvelle borne gauche
- j=j-1
- MIND = MING
- TYPD = TYPG
- NUMD = NUMG
- MING = MCL_SOUS_EPAIS[INDC-1].ISCP
- TYPG = 2
- NUMG = INDC
- ICE = ICE+1
- elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND :
-# le centre est la nouvelle borne droite
- MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
- TYPD = 2
- NUMD = INDC
- ICE = ICE+1
- continue
- else:pass
- NZONEX=NZONEX+1
-#
-# codes d'intervalles de zones
-# 0 0 = zone sous-ep.
-# 0 1 = sous-ep. a droite de la zone
-# 1 0 = sous-ep. a gauche de la zone
-# 1 1 = sous-ep. a droite et a gauche de la zone
-#
-# cas ou la premiere zone ne commence pas au bord de la plaque
- if MING>0. and NZONEX==1 :
- BG.append(0.)
- BD.append(MING)
- if TYPG==0:
- INDBG.append(0)
- INDBD.append(1)
- DNX.append(DERAFC)
- DNX.append(0)
- INDSEX.append(0)
- elif TYPG==1 or TYPG==2:
- INDBG.append(0)
- INDBD.append(0)
- DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMG)
- else: pass
- NZONEX=NZONEX+1
-#
- BG.append(MING)
- BD.append(MIND)
-#
- if TYPG == 0:
-# borne gauche zone = borne gauche ssep
- NBGAU=NBGAU+1
- INDBG.append(0)
- INDBD.append(0)
- if TYPD == 0:
-# borne droite zone = borne gauche ssep
- DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMG)
- elif TYPD == 1 or TYPD == 2:
-# borne droite zone = borne droite ssep : TYPD=1
-# borne droite zone = centre ssep : TYPD=2
- LTMP=[]
- LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
- LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
- LTMP.sort()
- DNX.append(LTMP[0][0])
- DNX.append(0)
- INDSEX.append(LTMP[0][1])
- else: pass
-#
- elif TYPG == 1:
-# borne gauche zone = borne droite ssep
- NBDRO = NBDRO+1
- if TYPD == 0:
-# borne droite zone = borne gauche ssep
- if NBDRO==NBGAU:
- INDBG.append(1)
- INDBD.append(1)
- DNX.append(DERAFC)
- DNX.append(0)
- INDSEX.append(0)
- else:
-# cas tordu: une sous-ep enveloppe le tout
- INDBG.append(0)
- INDBD.append(0)
- DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMG)
- elif TYPD == 1 or TYPD == 2:
-# borne droite zone = borne droite ssep : TYPD=1
-# borne droite zone = centre ssep : TYPD=2
- INDBG.append(0)
- INDBD.append(0)
- DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMD)
- else: pass
-#
- elif TYPG == 2:
-# borne gauche zone = centre ssep
- INDBG.append(0)
- INDBD.append(0)
- if TYPD == 0:
-# borne droite zone = borne gauche ssep
- DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMG)
- elif TYPD == 1 or TYPD == 2:
-# borne droite zone = borne droite ssep : TYPD=1
-# borne droite zone = centre ssep : TYPD=2
- LTMP=[]
- LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
- LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
- LTMP.sort()
- DNX.append(LTMP[0][0])
- DNX.append(0)
- INDSEX.append(LTMP[0][1])
- else:pass
- else:pass
- if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
- iout=0
- break #on retourne dans la boucle go10
- else :
- iout=1
- break #on sort definitivement
- if iout:break
-
- if MIND<2.*pi*RM:
- NZONEX=NZONEX+1
- BG.append(MIND)
- BD.append(2.*pi*RM)
- if TYPD==0 or TYPD==2:
- INDBG.append(0)
- INDBD.append(0)
- DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
- DNX.append(0)
- INDSEX.append(NUMD)
- elif TYPD==1:
- INDBG.append(1)
- INDBD.append(0)
- DNX.append(DERAFC)
- DNX.append(0)
- INDSEX.append(0)
- else:pass
-
-# au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
-# un centre de sous-ep.
- if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
-
- print
- print 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :'
- print '-----------------------------------------------'
- for j in range(NZONEX) :
- if INDBG[j]==0 and INDBD[j]==0 :
- print 'ZONE NO',j+1,'<> BORNE GAUCHE = %.2f'\
- ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(BG[j],BD[j])
- else:
- print 'ZONE NO',j+1,'<> BORNE GAUCHE = %.2f'\
- ' / BORNE DROITE = %.2f'%(BG[j],BD[j])
-
-
-# --- tri des donnees sous-ep. en axial
- TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
-
- BI = []
- BS = []
- INDBI = []
- INDBS = []
- DNY = []
- INDSEY = []
-
- if SYME == 'DEMI':
-# calcul des zones en axial :
-# zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
- ssep = MCL_SOUS_EPAIS[0]
- BI.append(0.)
- BI.append(ssep.ISLP-ssep.ILONP/2.)
- BS.append(ssep.ISLP-ssep.ILONP/2.)
- BS.append(ssep.ISLP)
- INDBI.append(0)
- INDBI.append(0)
- INDBS.append(1)
- INDBS.append(0)
- DNY.append(DERAFL)
- DNY.append(0)
- DNY.append(ssep.IDENL)
- DNY.append(0)
- INDSEY.append(0)
- INDSEY.append(1)
- NZONEY=1
-#
- else:
-#
-# calcul des recouvrements de zones en axial
- j = 0
- ICE = 1
- NBINF = 0
- NBSUP = 0
- TYPI=0
- TYPS=0
- go40=1
- go50=1
- NZONEY=0
-#
- while go40:
- j=j+1
-#
-# definition de la zone courante (borne inf, borne sup)
-#
-# typi = type de la borne
-# 0 : borne inf. sous-ep.
-# 1 : borne sup. sous-ep.
-# 2 : centre sous-ep.
-#
- if TYPS==2:
-# cas ou la borne sup. de la zone prec. etait un centre
- MINI=MINS
- TYPI=TYPS
- NUMI=NUMS
- MINS=TAMPON[j-1][0]
- if fmod(IORDO2[j-1],2):
- TYPS = 0
- NUMS = IORDO1[IORDO2[j-1]/2]
- else:
- TYPS = 1
- NUMS = IORDO1[IORDO2[j-1]/2-1]
- j=j-1
- else:
- if j>= 2*NBSEP :
- MINI = TAMPON[2*NBSEP-1][0]
- MINS = MINI
- if fmod(IORDO2[2*NBSEP-1],2):
- TYPI = 0
- NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
- else:
- TYPI = 1
- NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
- TYPS=TYPI
- NUMS=NUMI
- else:
- MINI=TAMPON[j-1][0]
- MINS=TAMPON[j][0]
- if fmod(IORDO2[j-1],2):
- TYPI = 0
- NUMI = IORDO1[IORDO2[j-1]/2]
- else:
- TYPI = 1
- NUMI = IORDO1[IORDO2[j-1]/2-1]
- if fmod(IORDO2[j],2):
- TYPS = 0
- NUMS = IORDO1[IORDO2[j]/2]
- else:
- TYPS = 1
- NUMS = IORDO1[IORDO2[j]/2-1]
- if fabs(MINI-MINS)<EPSI:
- if j==2*NBSEP:break
- else:continue
-
- while go50:
- i=ICE
- if i<=NBSEP:
-# recherche des centres a intercaler
- INDC=IORDO1[i-1]
- if i>1:
-# le centre est deja le meme que le precedent
- if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
- ICE=ICE+1
- continue
- if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
-# le centre est la nouvelle borne inf.
- j=j-1
- MINS = MINI
- TYPS = TYPI
- NUMS = NUMI
- MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
- TYPI = 2
- NUMI = INDC
- ICE = ICE+1
- elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
-# le centre est la nouvelle borne sup.
- MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
- TYPS = 2
- NUMS = INDC
- ICE = ICE+1
- continue
- else:pass
- NZONEY=NZONEY+1
-#
-# code d'intervalles de zone
-# 0 0 = ZONE SOUS-EPAISSEUR
-# 0 1 = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
-# 1 0 = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
-# 1 1 = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
-#
-# cas ou la premiere zone ne commence pas au bord de la plaque
- if MINI>0. and NZONEY==1:
- first=0
- BI.append(0.)
- BS.append(MINI)
- if TYPI==0:
- INDBI.append(0)
- INDBS.append(1)
- DNY.append(DERAFL)
- DNY.append(0)
- INDSEY.append(0)
- elif TYPI==1 or TYPI==2:
- INDBI.append(0)
- INDBS.append(0)
- DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMI)
- else:pass
- NZONEY = NZONEY+1
-#
- BI.append(MINI)
- BS.append(MINS)
-
- if TYPI==0:
-# borne inferieure zone = borne inferieure ssep
- NBINF = NBINF+1
- INDBI.append(0)
- INDBS.append(0)
- if TYPS==0:
-# borne superieure zone = borne inferieur ssep
- DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMI)
- elif TYPS==1 or TYPS==2:
-# borne superieure zone = borne superieure ssep:TYPS==1
-# borne superieure zone = centre ssep:TYPS==2
- LTMP=[]
- LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
- LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
- LTMP.sort()
- DNY.append(LTMP[0][0])
- DNY.append(0)
- INDSEY.append(LTMP[0][1])
- else:pass
- elif TYPI==1:
-# borne inferieure zone=borne superieure ssep
- NBSUP = NBSUP+1
- if TYPS==0:
-# borne superieure zone = borne inferieur ssep
- if NBSUP==NBINF:
- INDBI.append(1)
- INDBS.append(1)
- DNY.append(DERAFL)
- DNY.append(0)
- INDSEY.append(0)
- else:
-# cas tordu: une sous-ep. enveloppe le tout
- INDBI.append(0)
- INDBS.append(0)
- DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMI)
- elif TYPS==1 or TYPS==2:
-# borne superieure zone = borne superieure ssep:TYPS==1
-# borne superieure zone = centre ssep:TYPS==2
- INDBI.append(0)
- INDBS.append(0)
- DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMS)
- else:pass
- elif TYPI==2:
-# borne inferieure zone = centre ssep
- INDBI.append(0)
- INDBS.append(0)
- if TYPS==0:
-# borne superieure zone = borne inferieure ssep
- DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMI)
- elif TYPS==1 or TYPS==2:
-# borne superieure zone = borne superieure ssep
- LTMP=[]
- LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
- LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
- LTMP.sort()
- DNY.append(LTMP[0][0])
- DNY.append(0)
- INDSEY.append(LTMP[0][1])
- else:pass
- else:pass
- if j<=(2*NBSEP-2) or TYPS==2:
- iout=0
- break #on retourne dans la boucle go40
- else:
- iout=1
- break #on sort definitivement
- if iout:break
-
-# cas ou la derniere zone ne finit pas au bout de la plaque
- if MINS<ALPHAR*RC:
- NZONEY=NZONEY+1
- BI.append(MINS)
- BS.append(ALPHAR*RC)
- if TYPS==0 or TYPS==2:
- INDBI.append(0)
- INDBS.append(0)
- DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
- DNY.append(0)
- INDSEY.append(NUMS)
- elif TYPS==1:
- INDBI.append(1)
- INDBS.append(0)
- DNY.append(DERAFL)
- DNY.append(0)
- INDSEY.append(0)
- else:pass
-
- print
- print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
- print '-----------------------------------------------'
-
- for j in range(NZONEY) :
- if INDBI[j]==0 and INDBS[j]==0 :
- print 'ZONE NO',j+1,'<> BORNE INF. = %.2f'\
- ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(BI[j],BS[j])
- else:
- print 'ZONE NO',j+1,'<> BORNE INF. = %.2f'\
- ' / BORNE SUP. = %.2f '%(BI[j],BS[j])
-
-# calcul du nombre d'elements longi. et circonf. dans les sous-ep
- NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
- DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
-
-
- return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_file_dgib_ASCFDO
-#
-# ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE
-# "PLAQUE FISSUREE"
-#
-
-# ------------------------------------------------------------------------------
-def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
- TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
- SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
-
- if TYPBOL!= None:
- if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
- if TYPBOL=='GV' : TYPEMB = 'typegv'
- if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
- else:
- TYPEMB =' '
-
- if POSIT =='DEB_INT' :
- POSIT2 = 'interne'
- else:
- POSIT2 = 'externe'
- if SYME[:6]=='ENTIER' : ZSYME = 'entier'
- elif SYME[:5]=='QUART' : ZSYME = 'quart'
- else : ZSYME = 'demi'
- C=AXECP/2.
- TETAF=AZIM*pi/180.
-
- POIVIR = ' ;\n'
- texte='* DEBUT PARAMETRES UTILISATEUR\n'
- texte=texte+'*\n'
- texte=texte+'c = '+str(C) +POIVIR
- texte=texte+'a = '+str(AXEAP) +POIVIR
- texte=texte+'nt = '+str(NT) +POIVIR
- texte=texte+'ns = '+str(NS) +POIVIR
- texte=texte+'nc = '+str(NC) +POIVIR
- texte=texte+'rm = '+str(RM) +POIVIR
- texte=texte+'rc = '+str(RC) +POIVIR
- texte=texte+'alphac = '+str(ALPHA) +POIVIR
- texte=texte+'nbtranep = '+str(NBTRAN) +POIVIR
- texte=texte+'ep1 = '+str(EP1) +POIVIR
- texte=texte+'ep2 = '+str(EP2) +POIVIR
- texte=texte+'epi = '+str(EPI) +POIVIR
- texte=texte+'teta1 = '+str(TETA1) +POIVIR
- texte=texte+'teta2 = '+str(TETA2) +POIVIR
- texte=texte+'ltran = '+str(LTRAN) +POIVIR
- texte=texte+'posfis = '+str(SFP) +POIVIR
- texte=texte+'ksiref = '+str(ORIEN) +POIVIR
- texte=texte+'surep = '+str(SUREP) +POIVIR
- texte=texte+'teta_f = '+str(TETAF) +POIVIR
- texte=texte+'rc0 = '+str(RC0) +POIVIR
- texte=texte+'rc2 = '+str(RC2) +POIVIR
- texte=texte+'rc3 = '+str(RC3) +POIVIR
- texte=texte+"pos = '"+POSIT2+"'" +POIVIR
- texte=texte+'lt = '+str(LTCHAR) +POIVIR
- texte=texte+'lgv = '+str(LTCLIM) +POIVIR
- texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
- texte=texte+"zsyme = '"+ZSYME+"'" +POIVIR
- texte=texte+'epsif = '+str(EPSI) +POIVIR
- texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+'*\n'
- texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'ascouf_fiss_v4.datg'+"';\n"
- fdgib=open(nomFichierDATG,'w')
- fdgib.write(texte)
- fdgib.close()
-
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_file_dgib_ASCSQO
-#
-# ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
-# "PLAQUE SOUS-EPAISSEUR"
-#
-#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
-#
-# RM = RAYON MOYEN DU COUDE
-# RC = RAYON DE CINTRAGE DU COUDE
-# ALPHA = ANGLE DU COUDE
-# NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
-# EP1 = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
-# EP2 = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
-# EPI = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
-# TETA1 = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
-# TETA2 = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
-# LTRAN = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
-# LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
-# LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
-# GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
-# SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
-# NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
-# NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
-# NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
-
-# ------------------------------------------------------------------------------
-def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
- EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
- SYME,NBEP,NLX,NLY,NIVMAG,loc_datg) :
-
- ssep= MCL_SOUS_EPAIS[0]
- POIVIR = ' ;\n'
- texte=' nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
- texte=texte+'*\n'
- texte=texte+'coory = table '+POIVIR
- texte=texte+'coorz = table '+POIVIR
- texte=texte+'prof = table '+POIVIR
- texte=texte+'posit = table '+POIVIR
- texte=texte+'axisym = table '+POIVIR
- texte=texte+'axecir = table '+POIVIR
- texte=texte+'axelon = table '+POIVIR
- texte=texte+'sousep = table '+POIVIR
- texte=texte+'coorzc = table '+POIVIR
- texte=texte+'axelonc = table '+POIVIR
- texte=texte+'*\n'
- texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
- texte=texte+'*\n'
- texte=texte+'* parametres generaux\n'
- texte=texte+'*\n'
- texte=texte+' pirad = '+str(pi) +POIVIR
- texte=texte+' rm = '+str(RM) +POIVIR
- texte=texte+' rc = '+str(RC) +POIVIR
- texte=texte+' alpha = '+str(ALPHA) +POIVIR
- texte=texte+' lt1 = '+str(LTCHAR) +POIVIR
- texte=texte+' lt2 = '+str(LTCLIM) +POIVIR
- texte=texte+' nbtranep = '+str(NBTRAN) +POIVIR
- texte=texte+' ep1 = '+str(EP1) +POIVIR
- texte=texte+' ep2 = '+str(EP2) +POIVIR
- texte=texte+' epI = '+str(EPI) +POIVIR
- texte=texte+' teta1 = '+str(TETA1) +POIVIR
- texte=texte+' teta2 = '+str(TETA2) +POIVIR
- texte=texte+' ltran = '+repr(LTRAN) +POIVIR
- if GEOM == 'COUDE':
- texte=texte+" zcoude = 'oui' "+POIVIR
- else:
- texte=texte+" zcoude = 'non' "+POIVIR
- if SYME == 'ENTIER':
- texte=texte+" zsyme = 'entier' "+POIVIR
- elif SYME == 'QUART':
- texte=texte+" zsyme = 'quart' "+POIVIR
- else:
- texte=texte+" zsyme = 'demi' "+POIVIR
- if TYPELE == 'CU20':
- texte=texte+" zquad = 'oui' "+POIVIR
- else:
- texte=texte+" zquad = 'non' "+POIVIR
- SCP=pi*RM
- texte=texte+' nxep = '+str(NBEP) +POIVIR
- texte=texte+'*\n'
- texte=texte+'* Caracteristiques de la sous-epaisseur\n'
- texte=texte+'*\n'
- texte=texte+' tysep = '+str(ssep.ICIRP) +POIVIR
- texte=texte+' tzsep = '+str(ssep.ILONP) +POIVIR
- texte=texte+' prof . 1 = '+str(ssep['PROFONDEUR']) +POIVIR
- texte=texte+' ycsep = '+str(SCP-pi*RM) +POIVIR
- texte=texte+' theta = '+str(ssep.IPHIC) +POIVIR
- texte=texte+' zcsep = '+repr(ssep.ISLP) +POIVIR
-
- texte=texte+" posit . 1 = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
- texte=texte+' nby = '+str(int(NLX[0])) +POIVIR
- texte=texte+' nbz = '+str(int(NLY[0])) +POIVIR
- texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI']) +POIVIR
- texte=texte+' axelonc . 1 = '+str(ssep['AXE_LONGI'])+POIVIR
- if ssep['POSI_CURV_LONGI']!=None:
- texte=texte+' coorzc . 1 = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
- else:
- DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
- texte=texte+' coorzc . 1 = '+repr(DZC)+POIVIR
- if ssep['TYPE']=='AXIS':
- texte=texte+" zaxis = 'oui' "+POIVIR
- else:
- texte=texte+" zaxis = 'non' "+POIVIR
- if ssep['EMPREINTE'] == 'OUI':
- texte=texte+" sousep . 1 = 'oui'"+POIVIR
- else:
- texte=texte+" sousep . 1 = 'non'"+POIVIR
- texte=texte+'*\n'
- texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'ascouf_ssep_mono_v1.datg'+"'"+POIVIR
- fdgib=open(nomFichierDATG,'w')
- fdgib.write(texte)
- fdgib.close()
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_subpart_file_pgib_POST
-#
-# APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
-# DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
-# FICHIER GIBI DE POST-TRAITEMENTS
-#
-#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
-#
-# NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
-# NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
-#
-#-----------------DONNEE RENVOYEE PAR ASTER--------------------
-#
-# texte = chaine de caracteres contenant des instructions gibi
-# de post-traitements
-#
-# ------------------------------------------------------------------------------
-def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
- CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
-
- POIVIR = ' ;\n'
- texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
- texte=texte+'*\n'
- issep=0
- for ssep in MCL_SOUS_EPAIS:
- issep=issep+1
- texte=texte+'*\n'
- texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
- texte=texte+'*\n'
- if ssep['TYPE'] == 'ELLI':
- texte=texte+'*\n'
- texte=texte+'* plans circonf longi et colonne centrale \n'
- texte=texte+'*\n'
- texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
- texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
- texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
- texte=texte+'*\n'
- texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
- texte=texte+'*\n'
- texte=texte+'isep = '+str( issep)+POIVIR
- for k in range(8):
- texte=texte+'ilig = '+str(k+1)+POIVIR
- texte=texte+'rlig = ilig/10. + isep'+POIVIR
- texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
- if ssep['TYPE'] == 'ELLI':
- texte=texte+'*\n'
- texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
- texte=texte+'*\n'
- texte=texte+'isep = '+str(issep)+POIVIR
- for k in range(2*NLX[issep-1]+1):
- texte=texte+'ilig = '+str(k+1)+POIVIR
- texte=texte+'rlig = ilig/100. + isep'+POIVIR
- texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
- texte=texte+'*\n'
- texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"
- texte=texte+'* \n'
- for k in range(2*NLY[issep-1]+1):
- texte=texte+'ilig = '+str(k+1)+POIVIR
- texte=texte+'rlig = ilig/100. + isep'+POIVIR
- texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
- texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
- return texte
-
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_file_pgib_ASCSQ2
-#
-# ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
-# "PLAQUE SOUS-EPAISSEURS"
-# IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
-#
-#
-#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
-#
-# NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
-# NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
-
-# ------------------------------------------------------------------------------
-def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
- POIVIR = ' ;\n'
- texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
- texte=texte+'*\n'
- texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
- texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
- texte=texte+'ma = coude et p1 et p2'+POIVIR
- texte=texte+"opti sauv form 'fort.8'"+POIVIR
- texte=texte+'sort ma'+POIVIR
- texte=texte+'sauv form ma'+POIVIR
- texte=texte+'fin'+POIVIR
- fpgib=open('fort.71','w')
- fpgib.write(texte)
- fpgib.close()
-
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_file_pgib_ASCSP1
-#
-# ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
-# "PLAQUE SOUS-EPAISSEURS"
-# IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
-#
-#
-# ------------------------------------------------------------------------------
-def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
-
- POIVIR = ' ;\n'
- texte=' nivmag = '+str(NIVMAG)+POIVIR
- texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
- texte=texte+'*\n'
- texte=texte+'bg = table '+POIVIR
- texte=texte+'bd = table '+POIVIR
- texte=texte+'bi = table '+POIVIR
- texte=texte+'bs = table '+POIVIR
- texte=texte+'indbg = table '+POIVIR
- texte=texte+'indbd = table '+POIVIR
- texte=texte+'indbi = table '+POIVIR
- texte=texte+'indbs = table '+POIVIR
- texte=texte+'axecir = table '+POIVIR
- texte=texte+'axelon = table '+POIVIR
- texte=texte+'axelonc = table '+POIVIR
- texte=texte+'coorzc = table '+POIVIR
- texte=texte+'prof = table '+POIVIR
- texte=texte+'posit = table '+POIVIR
- texte=texte+'coory = table '+POIVIR
- texte=texte+'coorz = table '+POIVIR
- texte=texte+'deny = table '+POIVIR
- texte=texte+'nbely = table '+POIVIR
- texte=texte+'denz = table '+POIVIR
- texte=texte+'nbelz = table '+POIVIR
- texte=texte+'axisym = table '+POIVIR
- texte=texte+'sousep = table '+POIVIR
- texte=texte+'* \n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'ascouf_ssep_mult_v1.datg'+"';\n"
- fdgib=open(nomFichierDATG,'w')
- fdgib.write(texte)
- fdgib.close()
-
-################################################################################
-################################################################################
-################################################################################
-# MACR_ASCOUF_MAIL write_file_pgib_ASCSDO
-#
-# ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
-# "PLAQUE SOUS-EPAISSEURS"
-#
-#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
-#
-# RM = RAYON MOYEN DU COUDE
-# RC = RAYON DE CINTRAGE DU COUDE
-# ALPHA = ANGLE DU COUDE
-# EP = EPAISSEUR DU COUDE
-# LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
-# LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
-# GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
-# SYME = QUART DE STRUCTURE SI 'OUI'
-# INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
-# INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
-# BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
-# BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
-# BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
-# BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
-# INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
-# INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
-# INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
-# INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
-# DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
-# DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
-# NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
-# NZONEY = NOMBRE DE ZONES LONGITUDINALES
-#
-# ------------------------------------------------------------------------------
-def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,
- NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
- DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
-
- POIVIR = ' ;\n'
- NY=20
- DELTAY=2.*pi*RM/NY
-
- def nint(x):
- if 0<ceil(x)-x<=0.5:
- return int(ceil(x))
- else:
- return int(floor(x))
-
-# conversion des densites de raffinement des embout en degres par rapport
-# a l'angle du coude
- RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
- DENSTU = RTMP*360./(2.*pi*RC)
- DENSGV = DENSTU
- NZT=0
- NZGV=0
-
- texte='* DEBUT PARAMETRES UTILISATEUR \n'
- texte=texte+'*\n'
- texte=texte+'* parametres generaux\n'
- texte=texte+'*\n'
- texte=texte+'rm = '+str(RM) +POIVIR
- texte=texte+'rc = '+str(RC) +POIVIR
- texte=texte+'alphac = '+str(ALPHA) +POIVIR
- texte=texte+'epc = '+str(EP) +POIVIR
- texte=texte+'pirad = '+str(pi) +POIVIR
- texte=texte+'lgv = '+str(LTCLIM) +POIVIR
- texte=texte+'lt = '+str(LTCHAR) +POIVIR
- texte=texte+'lcoude = '+str(ALPHA*pi/180.*RC) +POIVIR
- if GEOM == 'COUDE':
- texte=texte+"zcoude = 'oui' " +POIVIR
- else:
- texte=texte+"zcoude = 'non' " +POIVIR
- if SYME == 'ENTIER':
- texte=texte+"zsyme = 'entier' " +POIVIR
- elif SYME == 'QUART':
- texte=texte+"zsyme = 'quart' " +POIVIR
- else:
- texte=texte+"zsyme = 'demi' " +POIVIR
- texte=texte+'nxep = '+str(NBEP) +POIVIR
- texte=texte+'nzt = '+str(NZT) +POIVIR
- texte=texte+'nzgv = '+str(NZGV) +POIVIR
- texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
- texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
- texte=texte+'*\n'
-
- texte=texte+'* Zones couvertes en circonference\n'
- texte=texte+'*\n'
- for j in range(NZONEX):
- texte=texte+'bg .' +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM) +POIVIR
- texte=texte+'bd .' +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM) +POIVIR
- texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j]) +POIVIR
- texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j]) +POIVIR
- texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j]) +POIVIR
- texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
- texte=texte+'*\n'
-
- texte=texte+'* Zones couvertes longitudinalement\n'
- texte=texte+'*\n'
- for j in range(NZONEY):
- texte=texte+'bi .' +str(j+1).rjust(23)+' = '+str(BI[j]) +POIVIR
- texte=texte+'bs .' +str(j+1).rjust(23)+' = '+str(BS[j]) +POIVIR
- texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j]) +POIVIR
- texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j]) +POIVIR
- texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j]) +POIVIR
- texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
- texte=texte+'*\n'
-
- texte=texte+'* Caracteristiques des sous-epaisseurs\n'
- texte=texte+'*\n'
- issep=0
- for ssep in MCL_SOUS_EPAIS:
- issep=issep+1
- texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP) +POIVIR
- texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP) +POIVIR
- texte=texte+'prof .' +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
- texte=texte+'coory .' +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM) +POIVIR
- texte=texte+'coorz .' +str(issep).rjust(23)+' = '+str(ssep.ISLP) +POIVIR
- texte=texte+'posit .' +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
- texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
- if ssep['POSI_CURV_LONGI']!=None:
- texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
- else:
- DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
- texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
- if ssep['TYPE']=='AXIS':
- texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
- else:
- texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
- if ssep['EMPREINTE'] == 'OUI':
- texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
- else:
- texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
- texte=texte+'* \n'
- texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
- fpgib=open('fort.71','w')
- fpgib.write(texte)
- fpgib.close()
-
-
-
-################################################################################
-################################################################################
-################################################################################
-
-# ------------------------------------------------------------------------------
-def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
-
- POIVIR = ' ;\n'
- texte='*\n'
- texte=texte+'coude extube bord1 clgv bord2 peauext peauint placoude platube\n'
- texte=texte+'plagv longi circo centr bou1 bou3 ligmed ligtub liggv lig45\n'
- texte=texte+'ligcir liglon bordtu\n'
- texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
- texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
- texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
- texte=texte+'daxhtu daxhgv nzt nzgv zcoude'+POIVIR
- texte=texte+'fdromi = ligmed . 1'+POIVIR
- texte=texte+'exdrmi = ligmed . 2'+POIVIR
- texte=texte+'extrmi = ligmed . 3'+POIVIR
- texte=texte+'exgami = ligmed . 4'+POIVIR
- texte=texte+'fgaumi = ligmed . 5'+POIVIR
- texte=texte+'ingami = ligmed . 6'+POIVIR
- texte=texte+'intrmi = ligmed . 7'+POIVIR
- texte=texte+'indrmi = ligmed . 8'+POIVIR
- texte=texte+'fdrotu = ligtub . 1'+POIVIR
- texte=texte+'exdrtu = ligtub . 2'+POIVIR
- texte=texte+'extrtu = ligtub . 3'+POIVIR
- texte=texte+'exgatu = ligtub . 4'+POIVIR
- texte=texte+'fgautu = ligtub . 5'+POIVIR
- texte=texte+'ingatu = ligtub . 6'+POIVIR
- texte=texte+'intrtu = ligtub . 7'+POIVIR
- texte=texte+'indrtu = ligtub . 8'+POIVIR
- texte=texte+"si (ega zsyme 'entier')"+POIVIR
- texte=texte+' fdrogv = liggv . 1'+POIVIR
- texte=texte+' exdrgv = liggv . 2'+POIVIR
- texte=texte+' extrgv = liggv . 3'+POIVIR
- texte=texte+' exgagv = liggv . 4'+POIVIR
- texte=texte+' fgaugv = liggv . 5'+POIVIR
- texte=texte+' ingagv = liggv . 6'+POIVIR
- texte=texte+' intrgv = liggv . 7'+POIVIR
- texte=texte+' indrgv = liggv . 8'+POIVIR
- texte=texte+'finsi'+POIVIR
- texte=texte+'*\n'
-
- text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
- texte=texte+text2
-
- texte=texte+'*\n'
- texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
- texte=texte+'*trac oeil cach coude'+POIVIR
- texte=texte+'*opti donn 5' +POIVIR
- texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
- texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
- texte=texte+'ma = coude et p1 et p2'+POIVIR
- texte=texte+'sort ma'+POIVIR
- texte=texte+'neu = nbno ma'+POIVIR
- texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
- texte=texte+"opti sauv form 'fort.8'"+POIVIR
- texte=texte+'sauv form ma'+POIVIR
- texte=texte+'fin'+POIVIR
- fpgib=open('fort.71','a')
- fpgib.write(texte)
- fpgib.close()
-
-################################################################################
-################################################################################
-################################################################################
-
-# ------------------------------------------------------------------------------
-def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
- LTCLIM,LTCHAR,NBEP,loc_datg):
-
- NY=20
- CZ=ALPHA*RC*pi/180.
- NZC=int((ALPHA+0.00001)/5.)
- DELTAY=2.*pi*RM/20
- DELTAZ=CZ/NZC
- DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
- NZT=0
- NZGV=0
-
- if TYPBOL!=None:
- if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
- if TYPBOL=='GV' : TYPEMB = 'typegv'
- if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
- else:
- TYPEMB =' '
-
- POIVIR = ' ;\n'
- texte='* DEBUT PARAMETRES UTILISATEUR\n'
- texte=texte+'*\n'
- texte=texte+'* Parametres generaux\n'
- texte=texte+'*\n'
- texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
- texte=texte+'rm = '+str(RM) +POIVIR
- texte=texte+'rc = '+str(RC) +POIVIR
- texte=texte+'alphac = '+str(ALPHA) +POIVIR
- texte=texte+'epc = '+str(EP) +POIVIR
- texte=texte+'surep = '+str(SUREP) +POIVIR
- texte=texte+'lgv = '+str(LTCLIM) +POIVIR
- texte=texte+'lt = '+str(LTCHAR) +POIVIR
- texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
- texte=texte+'nx = '+str(NBEP) +POIVIR
- texte=texte+'ny = '+str(NY) +POIVIR
- texte=texte+"pos = 'bidon'" +POIVIR
- texte=texte+'l1 = 0.' +POIVIR
- texte=texte+'lbloc = 0.' +POIVIR
- texte=texte+'crit = 0.0001' +POIVIR
- texte=texte+'crit2 = 0.01' +POIVIR
- texte=texte+'epsit = 1.e-3' +POIVIR
- texte=texte+'pirad = '+str(pi) +POIVIR
- texte=texte+'nzc = '+str(NZC) +POIVIR
- texte=texte+'teta_f = '+str(pi/2.) +POIVIR
- texte=texte+'zpp31 = '+str(CZ) +POIVIR
- texte=texte+'daxbtu = '+str(DENEXT) +POIVIR
- texte=texte+'daxhtu = '+str(DELTAZ) +POIVIR
- texte=texte+'daxbgv = '+str(DELTAZ) +POIVIR
- texte=texte+'daxhgv = '+str(DENEXT) +POIVIR
- texte=texte+'nzt = '+str(NZT) +POIVIR
- texte=texte+'nzgv = '+str(NZGV) +POIVIR
- texte=texte+'*\n'
- texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'ascouf_regl_v1.datg'+"';\n"
- fdgib=open(nomFichierDATG,'w')
- fdgib.write(texte)
- fdgib.close()
-
-################################################################################
-################################################################################
-################################################################################
-# ------------------------------------------------------------------------------
-def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
- SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
- FISS_COUDE,IMPRESSION,INFO,**args):
- """
- Ecriture de la macro MACR_ASCOUF_MAIL
- """
- from Accas import _F
- import types
- import aster
-
- ier=0
-
-# On importe les definitions des commandes a utiliser dans la macro
- EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
- PRE_GIBI =self.get_cmd('PRE_GIBI')
- LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
- DEFI_GROUP =self.get_cmd('DEFI_GROUP')
- MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
- AFFE_MODELE =self.get_cmd('AFFE_MODELE')
- CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
- DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
- IMPR_RESU =self.get_cmd('IMPR_RESU')
-
-# La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
-
- TYPELE = TYPE_ELEM
- NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
- PRECIS = 0.01
- CRITER = 'RELATIF'
- CAR3 = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
- CAR4 = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
- CAR5 = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
- CAR6 = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
- SECT = ('MI','TU','GV')
-
-#
-################################################################################
-# --- caracteristiques du coude ---
-################################################################################
-#
- GEOM =COUDE['TRANSFORMEE']
- ALPHA =COUDE['ANGLE']
- RC =COUDE['R_CINTR']
- LTCHAR =COUDE['L_TUBE_P1']
- LTCLIM =COUDE['L_TUBE_P2']
- NBEP =COUDE['NB_ELEM_EPAIS']
- SYME =COUDE['SYME']
- SUREP =0.0
- TYPBOL = None
-#
- if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
- SUREP=COUDE['SUR_EPAIS']
- TYPBOL =COUDE['BOL_P2']
- DEXT = COUDE['DEXT']
- EP1 = COUDE['EPAIS']
- EP2 = EP1
- EPI = 0.0
- TETA1 = 0.0
- TETA2 = 0.0
- LTRAN = 0.0
- NBTRAN = 0
- else:
- NBTRAN = 1
- if COUDE['SYME']!='ENTIER':
- print ' <MACR_ASCOUF_MAIL> les quart et demi structure'
- print ' <MACR_ASCOUF_MAIL> ne peuvent etre realisees '
- print ' <MACR_ASCOUF_MAIL> sur un modele comportant une transition '
- print ' <MACR_ASCOUF_MAIL> d epaisseur '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
- DEXT = COUDE['DEXT_T1']
- EP1 = COUDE['EPAIS_T1']
- EP2 = COUDE['EPAIS_T2']
- TETA1 = COUDE['ANGL_TETA1']
- TETA2 = 0.0
- EPI = 0.0
- if COUDE['ANGL_TETA2']!=None :
- NBTRAN = 2
- TETA2 = COUDE['ANGL_TETA2']
- EPI = COUDE['EPAIS_TI']
-#
- if COUDE['ABSC_CURV_TRAN']!=None :
- LTRAN = COUDE['ABSC_CURV_TRAN']
- else :
- LTRAN = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
-#
- RM = (DEXT-EP1)/2.0
- RM2 = RM + (EP2-EP1)/2.0
- R1 = RC
- R2 = RM
- E = EP1
-#
- if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
- print ' <MACR_ASCOUF_MAIL> les deux embouts doivent etre'
- print ' <MACR_ASCOUF_MAIL> de meme longueur pour les cas de symetrie '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
- LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
- if LTCHAR<LAMOR :
- print ' <MACR_ASCOUF_MAIL> longueur d embout P1 inferieure'
- print ' <MACR_ASCOUF_MAIL> a la longueur d amortissement = ',LAMOR
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
-#
- LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
- if LTCLIM<LAMOR :
- print ' <MACR_ASCOUF_MAIL> longueur d embout P2 inferieure'
- print ' <MACR_ASCOUF_MAIL> a la longueur d amortissement = ',LAMOR
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
-#
- if TYPBOL!=None:
- if TYPBOL[:1]=='GV' :
- print ' <MACR_ASCOUF_MAIL> la condition aux limites raccord'
- print ' <MACR_ASCOUF_MAIL> 3d-poutre appliquee avec la macro de calcul'
- print ' <MACR_ASCOUF_MAIL> ascouf n est pas licite avec un embout'
- print ' <MACR_ASCOUF_MAIL> de type conique'
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
-#
-################################################################################
-# --- caracteristiques de la fissure ---
-################################################################################
-#
- if FISS_COUDE!=None:
- if NBEP!=3:
- print ' <MACR_ASCOUF_MAIL> le nombre d elements dans l epaisseur'
- print ' <MACR_ASCOUF_MAIL> du coude n est pas parametrable pour'
- print ' <MACR_ASCOUF_MAIL> un coude avec fissure'
- print ' <MACR_ASCOUF_MAIL> mot-cle NB_ELEM_EPAIS ignore'
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
- FPROF = FISS_COUDE['PROFONDEUR']
- FAXI = FISS_COUDE['AXIS']
- if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
- print ' <MACR_ASCOUF_MAIL> pour les fissures non axisymetriques'
- print ' <MACR_ASCOUF_MAIL> la longueur doit etre specifiee '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
- print ' <MACR_ASCOUF_MAIL> la fissure est axisymetrique : on ne'
- print ' <MACR_ASCOUF_MAIL> tient pas compte de la longueur specifiee'
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
- if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
- if FAXI=='OUI' :
-#### on prend une marge de securite a cause des modifs dans ascfis
- FLONG = 2.0 * pi * (RM + EP1)
- if FISS_COUDE['ABSC_CURV']!=None :
- SF = FISS_COUDE['ABSC_CURV']
- LDEFAU = SF
- BETA = 0.0
- else:
- SF = 0.0
- BETA = FISS_COUDE['POSI_ANGUL']
- LDEFAU = BETA * RC * pi / 180.0
- AZIM = FISS_COUDE['AZIMUT']
- ORIEN = FISS_COUDE['ORIEN']
- POSIT = FISS_COUDE['FISSURE']
- NT = FISS_COUDE['NB_TRANCHE']
- NS = FISS_COUDE['NB_SECTEUR']
- NC = FISS_COUDE['NB_COURONNE']
- if FISS_COUDE['RAYON_TORE']!=None : RC0 = FISS_COUDE['RAYON_TORE']
- else : RC0 = 0.
- if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
- else : RC2 = 0.
- if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
- else : RC3 = 0.
- EPSI = FISS_COUDE['ANGL_OUVERTURE']
- OR = ORIEN
- AZ = AZIM
- POS = POSIT
- DGAXEC = FLONG/2.0
- DC = DGAXEC
- if ORIEN!=90.0 and NBTRAN!=0 :
- print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
- print ' <MACR_ASCOUF_MAIL> la fissure doit obligatoirement etre transverse '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ORIEN!=90.0 and NBTRAN!=0 :
- print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
- print ' <MACR_ASCOUF_MAIL> la fissure doit obligatoirement etre transverse '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
- print ' <MACR_ASCOUF_MAIL> l orientation de la fissure doit'
- print ' <MACR_ASCOUF_MAIL> etre transverse (orien : 90.) pour modeliser '
- print ' <MACR_ASCOUF_MAIL> un quart ou une demi structure '
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ORIEN!=90.0 and FAXI=='OUI' :
- print ' <MACR_ASCOUF_MAIL> la fissure est axisymetrique : son'
- print ' <MACR_ASCOUF_MAIL> orientation doit etre transverse (ORIEN : 90.)'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-################################################################################
-# --- caracteristiques des sous epaisseurs ---
-################################################################################
-#
- isep = 0
- MCL_SOUS_EPAIS = None
- if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
- if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
- if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
- print ' <MACR_ASCOUF_MAIL> il ne peut pas y avoir plusieurs'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseurs en meme temps qu une'
- print ' <MACR_ASCOUF_MAIL> transition d epaisseur : si une seule'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur utiliser sous_epais_coude'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
- print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
- print ' <MACR_ASCOUF_MAIL> il doit obligatoirement y avoir un defaut'
- print ' <MACR_ASCOUF_MAIL> soit une fissure soit une sous-epaisseur'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if MCL_SOUS_EPAIS!=None :
- AZIM = 90.0
- if MCL_SOUS_EPAIS.__class__.__name__ !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
- if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
- print ' <MACR_ASCOUF_MAIL> ne modeliser qu une seule'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur pour un quart ou demi-coude'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- for ssep in MCL_SOUS_EPAIS :
- isep=isep+1
- if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
- print ' <MACR_ASCOUF_MAIL> vous ne pouvez declarer la sous-'
- print ' <MACR_ASCOUF_MAIL> epaisseur comme axisymetrique et donner'
- print ' <MACR_ASCOUF_MAIL> une taille d axe circonferentiel'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
- print ' <MACR_ASCOUF_MAIL> vous devez donner une taille d axe'
- print ' <MACR_ASCOUF_MAIL> circonferentiel pour une sous-epaisseur de'
- print ' <MACR_ASCOUF_MAIL> type elliptique'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ssep['POSI_CURV_LONGI']!=None:
- if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
- print ' <MACR_ASCOUF_MAIL> abscisse curv. longit. :',ssep['POSI_CURV_LONGI']
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',(ALPHA*RC*pi/180.0)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
- BETA = 0.0
- else:
- BETA=ssep['POSI_ANGUL']
- if (BETA<0.) or (BETA>ALPHA) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
- print ' <MACR_ASCOUF_MAIL> position angulaire centre sous-ep :',BETA
- print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',ALPHA
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
-#
- if ssep['POSI_CURV_CIRC']!=None:
- if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
- print ' <MACR_ASCOUF_MAIL> abscisse curv. circonf. :',ssep['POSI_CURV_CIRC']
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',(2*pi*RM)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
- print ' <MACR_ASCOUF_MAIL> le centre d une sous-epaisseur'
- print ' <MACR_ASCOUF_MAIL> axisymetrique est impose en intrados (pi*RM)'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- else:
- ssep.IPHIC=ssep['AZIMUT']
- if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
- print ' <MACR_ASCOUF_MAIL> le centre d une sous-epaisseur'
- print ' <MACR_ASCOUF_MAIL> axisymetrique est impose en intrados'
- print ' <MACR_ASCOUF_MAIL> l azimut est fixe a 180 degres'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-# l_ITYPE.append(ssep['TYPE' ])
-# l_ICIRC.append(ssep['AXE_CIRC' ])
-# l_ILONC.append(ssep['AXE_LONGI' ])
-# l_IPROC.append(ssep['PROFONDEUR' ])
-# l_ISLC.append( ssep['POSI_CURV_LONGI'])
-# l_IBETC.append(BETA)
- ssep.BETA=BETA
-# l_ISCC.append( ssep['POSI_CURV_CIRC' ])
-# l_IPHIC.append(ssep['AZIMUT' ])
-# l_IPOS.append( ssep['SOUS_EPAIS' ])
-# l_INBEL.append(ssep['NB_ELEM_LONGI' ])
-# l_INBEC.append(ssep['NB_ELEM_CIRC' ])
-# l_IEVID.append(ssep['EMPREINTE' ])
-
- if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
- print ' <MACR_ASCOUF_MAIL> le nombre d elements dans l'
- print ' <MACR_ASCOUF_MAIL> epaisseur du coude n est pas parametrable pour'
- print ' <MACR_ASCOUF_MAIL> la version 2 de la procedure de plaque avec sous'
- print ' <MACR_ASCOUF_MAIL> -epaisseur : mot-cle NB_ELEM_EPAIS ignore'
- print ' <A> <MACR_ASCOUF_MAIL> alarme'
-#
-################################################################################
-# --- verifications de coherences ---
-################################################################################
-#
-# donnees globales
- if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
- if SUREP<0. or SUREP>(RM-EP1/2.0):
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> surepaisseur :',SUREP
- print ' <MACR_ASCOUF_MAIL> valeur limite autorisee (RM-EP1/2) :',(RM-EP1/2.0)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if RC<=(RM+EP1/2.0):
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> le rayon de cintrage :',RC
- print ' <MACR_ASCOUF_MAIL> doit etre superieur a (RM+EP1/2) :',(RM+EP1/2.0)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-# coude fissure
-#
- if FISS_COUDE!=None:
- if (RM/EP1)<5. or (RM/EP1)>50.:
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite (5,50)'
- print ' <MACR_ASCOUF_MAIL> rapport RM/EP1 :',(RM/EP1)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if FISS_COUDE['ABSC_CURV']!=None:
- if SF<0. or SF>(ALPHA*RC*pi/180.0) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> abscisse curviligne centre fissure :',SF
- print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',(ALPHA*RC*pi/180.0)
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (NT-2*(NT/2))!=0:
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> nombre de tranches :',NT
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> position angulaire centre fissure :',BETA
- print ' <MACR_ASCOUF_MAIL> posi_angul doit etre >= 0 et <= ',ALPHA
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-# transition d epaisseur
-#
- if NBTRAN!=0:
- LCOUDE = ALPHA * RC * pi / 180.0
- DEXT = 2.0*RM + EP1
- if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> debut transition d epaisseur :',LTRAN
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',LDEFAU
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',LCOUDE
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (TETA1<0.) or (TETA1>30.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> angle de transition TETA1 :',TETA1
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',0.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',30.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-# transition d epaisseur a une pente
-#
- if NBTRAN==1:
- if (EP1<12.) or (EP1>80.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> epaisseur avant la transition :',EP1
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',12.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',80.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP2<20.) or (EP2>110.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> epaisseur apres la transition :',EP2
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',20.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',110.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP1>EP2) :
- print ' <MACR_ASCOUF_MAIL> l epaisseur avant la transition'
- print ' <MACR_ASCOUF_MAIL> doit etre inferieure '
- print ' <MACR_ASCOUF_MAIL> a celle apres la transition'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
- if (LTRANF>LCOUDE) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> fin transition d epaisseur :',LTRANF
- print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',LCOUDE
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if DEXT<112. or DEXT>880. :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> diam ext du tube avant transition:',DEXT
- print ' <MACR_ASCOUF_MAIL> valeur minimum autorisee :',112.
- print ' <MACR_ASCOUF_MAIL> valeur maximum autorisee :',880.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-# transition d epaisseur a une pente
-#
- else:
- if (TETA2<0.) or (TETA2>45.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> angle de transition TETA2 :',TETA2
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',0.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',45.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP1<7.) or (EP1>35.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> epaisseur avant 1ere transition :',EP1
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',7.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',35.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP2<15.) or (EP2>40.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> epaisseur avant 2eme transition :',EP2
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',15.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',40.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EPI<15.) or (EPI>40.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> epaisseur intermediaire :',EPI
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',15.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',40.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP1>EPI) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> l epaisseur avant la transition'
- print ' <MACR_ASCOUF_MAIL> doit etre inferieure a l epaisseur intermediaire'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (EP2<EPI) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> l epaisseur apres la transition'
- print ' <MACR_ASCOUF_MAIL> doit etre inferieure a l epaisseur intermediaire'
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1))
- LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
- if (LTRANF>LCOUDE) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> fin transition d epaisseur :',LTRANF
- print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',LCOUDE
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- if (DEXT<77.) or (DEXT>355.) :
- print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
- print ' <MACR_ASCOUF_MAIL> diam ext du tube avant transition:',LTRANF
- print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',77.
- print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',355.
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
- ier = ier+1
- return ier
-#
-################################################################################
-# --- calcul taille initiale des defauts sur la plaque ---
-################################################################################
-#
-#
- if FISS_COUDE!=None:
- DSF=(FISS_COUDE['ABSC_CURV']!=None)
- AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
- DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
- elif MCL_SOUS_EPAIS!=None :
- ier= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
- for ssep in MCL_SOUS_EPAIS:
- ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
- ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
- if SYME=='QUART' :
-# quart de structure
- ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
- = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
- else :
-# demi-structure ou entiere
- ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
- = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
-#
-#
- loc_gibi=aster.repout()
- logiel = EXEC_MAILLAGE['LOGICIEL' ]
- UNITD = EXEC_MAILLAGE['UNITE_DATG']
- UNITP = EXEC_MAILLAGE['UNITE_MGIB']
- if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
- elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
- else :
- self.cr.fatal("<F> <MACR_ASCOUF_MAIL> seuls gibi98 et gibi2000 sont appelableS")
- ier = ier+1
- return ier
-#
-# --- ecriture sur le fichier .datg de la procedure ---
-#
-# Nom du fichier de commandes pour GIBI
- nomFichierDATG = 'fort.'+str(UNITD)
-# Nom du fichier de maillage GIBI
- nomFichierGIBI = 'fort.'+str(UNITP)
- loc_datg = aster.repdex()
-#
- if FISS_COUDE!=None:
-# procedure coude fissure (MOT-CLE FISS_COUDE)
- write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
- TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
- ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
- elif MCL_SOUS_EPAIS!=None :
- if SOUS_EPAIS_MULTI==None :
-# procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)
- write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
- EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
- SYME,NBEP,NLX,NLY,NIVMAG,loc_datg)
- write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
- else:
-# procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
- write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
- write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,
- NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
- DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
- write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
- else:
-# procedure coude regle
- write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
- LTCLIM,LTCHAR,NBEP,loc_datg)
-
-
-# GIBI
- EXEC_LOGICIEL( LOGICIEL = logiel ,
- ARGUMENT = ( _F(NOM_PARA=nomFichierDATG),
- _F(NOM_PARA=nomFichierGIBI), ), )
-# PRE_GIBI
- PRE_GIBI()
-
- if SYME == 'QUART' : self.DeclareOut('nomres',self.sd)
-# LIRE_MAILLAGE
- nomres=LIRE_MAILLAGE(INFO=INFO)
-
-# DEFI_GROUP 1
-
- motscles={}
- l_CREA_GROUP_NO=[]
- l_CREA_GROUP_NO.append('BORD1')
- l_CREA_GROUP_NO.append('CLGV')
- l_CREA_GROUP_NO.append('BORD2')
- l_CREA_GROUP_NO.append('PEAUINT')
- l_CREA_GROUP_NO.append('PEAUEXT')
-
-# cas des fissures axisymetriques
- if FISS_COUDE!=None:
- if FISS_COUDE['AXIS']=='OUI':
- motscles['CREA_GROUP_MA']=[]
- motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
- NOM = 'MAIL_ORI',
- POSITION = 'INIT' , ),)
-
-# conversion des groupes de mailles en groupes du bloc fissure
- if FISS_COUDE!=None:
- if SYME == 'ENTIER':
- l_CREA_GROUP_NO.append('NOLIG1')
- l_CREA_GROUP_NO.append('FACE1')
- l_CREA_GROUP_NO.append('NOLIG2')
- l_CREA_GROUP_NO.append('FACE2')
- l_CREA_GROUP_NO.append('FONDFISS')
-
- motscles['CREA_GROUP_NO']=[]
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
-
-# conversion des groupes de mailles en groupes de noeuds pour les
-# ligaments des sous-ep.
- if MCL_SOUS_EPAIS!=None:
- issep=0
- for ssep in MCL_SOUS_EPAIS:
- issep=issep+1
- if ssep['TYPE']=='ELLI':
- for k in range(2*NLX[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='CIR'+chtmp
- ch2='ICI'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
- GROUP_MA = ch1,),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'IPCEN'+str(issep),
- GROUP_MA = 'PCENT'+str(issep),),)
- for k in range(2*NLY[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='LON'+chtmp
- ch2='ILO'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
- GROUP_MA = ch1,),)
- for k in range(2*NLX[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='ICI'+chtmp
- ch2='OCI'+chtmp
- ch3='ECI'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
- INTERSEC = ('PEAUEXT',ch1),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
- INTERSEC = ('PEAUINT',ch1),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'OPCEN'+str(issep),
- INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'EPCEN'+str(issep),
- INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
- for k in range(2*NLY[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='ILO'+chtmp
- ch2='OLO'+chtmp
- ch3='ELO'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
- INTERSEC = ('PEAUEXT',ch1),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
- INTERSEC = ('PEAUINT',ch1),),)
- for k in range(2*NLX[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='CIR'+chtmp
- ch2='ICI'+chtmp
- ch3='OCI'+chtmp
- ch4='ECI'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
- NOM = ch1,
- GROUP_NO = ch2,
- GROUP_NO_ORIG = ch3,
- GROUP_NO_EXTR = ch4,
- PRECISION = PRECIS,
- CRITERE = CRITER,),)
- motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
- NOM = 'PCENT'+str(issep),
- GROUP_NO = 'IPCEN'+str(issep),
- GROUP_NO_ORIG = 'OPCEN'+str(issep),
- GROUP_NO_EXTR = 'EPCEN'+str(issep),
- PRECISION = PRECIS,
- CRITERE = CRITER,),)
- for k in range(2*NLY[issep-1]+1):
- chtmp=str(issep)+'_'+str(k+1)
- ch1='LON'+chtmp
- ch2='ILO'+chtmp
- ch3='OLO'+chtmp
- ch4='ELO'+chtmp
- motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
- NOM = ch1,
- GROUP_NO = ch2,
- GROUP_NO_ORIG = ch3,
- GROUP_NO_EXTR = ch4,
- PRECISION = PRECIS,
- CRITERE = CRITER,),)
-# 1/ noms intermediaires des groupes de noeuds representant les ligaments
-# des sections: TU,MI,GV et sous-ep.
- for k in range(8):
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[k]+str(issep),
- GROUP_MA = CAR6[k]+str(issep),),)
-
- for k in range(3):
- if SYME == 'ENTIER' or k!=2:
- for j in range(8):
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[j]+SECT[k],
- GROUP_MA = CAR6[j]+SECT[k],),)
-
-# 2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
-# representant les ligaments de la ou des sections: sous-ep.
- issep=0
- for ssep in MCL_SOUS_EPAIS:
- issep=issep+1
- for k in range(8):
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[k]+str(issep),
- INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[k]+str(issep),
- INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)
-# 3/ nommage final des groupes de noeuds representant les ligaments
-# de la ou des sections: sous-ep.
- for k in range(8):
- motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
- NOM = CAR6[k]+str(issep),
- GROUP_NO = CAR3[k]+str(issep),
- GROUP_NO_ORIG = CAR4[k]+str(issep),
- GROUP_NO_EXTR = CAR5[k]+str(issep),
- PRECISION = PRECIS,
- CRITERE = CRITER,),)
-
-# 4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
-# representant les ligaments des sections: TU,MI,GV
- for k in range(3):
- if SYME == 'ENTIER' or k!=2:
- for j in range(8):
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[j]+SECT[k],
- INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),)
- motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[j]+SECT[k],
- INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),)
-# 5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV
- for j in range(8):
- motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
- NOM = CAR6[j]+SECT[k],
- GROUP_NO = CAR3[j]+SECT[k],
- GROUP_NO_ORIG = CAR4[j]+SECT[k],
- GROUP_NO_EXTR = CAR5[j]+SECT[k],
- PRECISION = PRECIS,
- CRITERE = CRITER,),)
-
-
- nomres=DEFI_GROUP(reuse =nomres,
- MAILLAGE=nomres,
- **motscles )
-#
-# DEFI_GROUP 2
- if FISS_COUDE!=None:
-# creation des groupes petit axe et grand axe fissure par
-# intersection de groupes existants
- motscles={}
- motscles['CREA_GROUP_NO']=[]
- l_peau=[]
- l_intersec=[]
- if POSIT == 'DEB_INT':
- l_peau.append('PEAUINT')
- else:
- l_peau.append('PEAUEXT')
-
- if SYME == 'ENTIER' :
- l_intersec.append('FACE1')
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_1',
- INTERSEC = ('NOLIG1','FACE1'),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_1',
- INTERSEC = tuple(l_peau+l_intersec),),)
- l_intersec=[]
- l_intersec.append('FACE2')
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_2',
- INTERSEC = ('NOLIG2','FACE2'),),)
- motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_2',
- INTERSEC = tuple(l_peau+l_intersec),),)
-
- nomres=DEFI_GROUP(reuse =nomres,
- MAILLAGE=nomres,
- **motscles )
-
-# AFFE_MODELE
- __MODELE=AFFE_MODELE( MAILLAGE=nomres,
- AFFE=_F( GROUP_MA = 'COUDE' ,
- PHENOMENE = 'MECANIQUE' ,
- MODELISATION = '3D' , )
- )
-
-# MODI_MAILLAGE 1
- motscles={}
- if GEOM == 'COUDE':
- motscles['TUBE_COUDE']=[]
- motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
- R_CINTR=RC,
- L_TUBE_P1=LTCHAR),)
- motscles['PLAQ_TUBE']=[]
- D_PLAQ_TUBE={}
- D_PLAQ_TUBE['DEXT']=DEXT
- D_PLAQ_TUBE['EPAIS']=EP1
- D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
- if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
- if FISS_COUDE!=None:
- D_PLAQ_TUBE['AZIMUT']=AZIM
- elif SOUS_EPAIS_COUDE!=None :
- D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
- else:pass
- motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),)
- nomres=MODI_MAILLAGE( reuse =nomres,
- MAILLAGE=nomres,
- **motscles )
-
-# MODI_MAILLAGE 2
- motscles={}
- motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
- if FISS_COUDE!=None:
- if FISS_COUDE['FISSURE'] == 'DEB_INIT':
- motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)
- nomres=MODI_MAILLAGE(reuse =nomres,
- MAILLAGE=nomres,
- MODELE =__MODELE,
- **motscles)
-
-# CREA_MAILLAGE
- if SYME != 'QUART':
- self.DeclareOut('nomre2',self.sd)
- motscles={}
- motscles['CREA_POI1']=[]
- motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
- GROUP_NO='P1'),)
- if TYPBOL == None :
- motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
- GROUP_NO='P2'),)
- nomre2=CREA_MAILLAGE( MAILLAGE=nomres,
- **motscles)
- else:
- nomre2=nomres
-
-
-# IMPRESSSION
- if IMPRESSION!=None:
- if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
- for impr in IMPRESSION :
-#
- motscles={}
- if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
- if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
- if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
- impr_resu = _F( MAILLAGE = nomre2,)
-#
- IMPR_RESU( RESU = impr_resu,
- FORMAT= impr['FORMAT'],**motscles)
-
-
-
- return ier
-
-
+++ /dev/null
-#@ MODIF macr_aspic_calc_ops Macro DATE 08/02/2005 AUTEUR CIBHHLV L.VIVAN
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
- FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,AFFE_MATERIAU,EQUILIBRE,
- PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS,
- THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
- INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE ,**args):
- """
- Ecriture de la macro MACR_ASPIC_CALC
- """
- from Accas import _F
- import types
- ier=0
-#------------------------------------------------------------------
- # On recopie le mot cle affe_materiau pour le proteger
- mc_AFFE_MATERIAU=AFFE_MATERIAU
-#------------------------------------------------------------------
- # On importe les definitions des commandes a utiliser dans la macro
- AFFE_MODELE =self.get_cmd('AFFE_MODELE' )
- AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU' )
- AFFE_CARA_ELEM =self.get_cmd('AFFE_CARA_ELEM' )
- AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
- THER_LINEAIRE =self.get_cmd('THER_LINEAIRE' )
- AFFE_CHAR_MECA =self.get_cmd('AFFE_CHAR_MECA' )
- STAT_NON_LINE =self.get_cmd('STAT_NON_LINE' )
- CALC_ELEM =self.get_cmd('CALC_ELEM' )
- POST_RELEVE_T =self.get_cmd('POST_RELEVE_T' )
- IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
- POST_RCCM =self.get_cmd('POST_RCCM' )
- DEFI_FOND_FISS =self.get_cmd('DEFI_FOND_FISS' )
- CALC_THETA =self.get_cmd('CALC_THETA' )
- CALC_G_THETA_T =self.get_cmd('CALC_G_THETA_T' )
- CALC_G_LOCAL_T =self.get_cmd('CALC_G_LOCAL_T' )
- IMPR_RESU =self.get_cmd('IMPR_RESU' )
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
-#------------------------------------------------------------------
-# data
- GRMAIL= ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP')
- NOMNOE= ('P1_CORP','P2_CORP','P_TUBU ')
- IMPRT1= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
- 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
- 'SIXX' ,'SIXY' ,'SIXZ' )
- IMPRT2= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
- 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
- 'SIYY' ,'SIXY' ,'SIYZ' )
- IMPRT3= ('NUME_ORDRE','INTITULE','RESU' ,'NOM_CHAM',
- 'ABSC_CURV' ,'COOR_X' ,'COOR_Y','COOR_Z' ,
- 'TEMP' )
- APPRES= ('PEAUINT ','LEVRTUBU','LEVRCORP')
-#------------------------------------------------------------------
-#
- i=0
- for mate in mc_AFFE_MATERIAU:
- if mate['RCCM']=='OUI' :
- i=i+1
- MRCCM=mate['MATER']
- if i>1 :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> vous affectez plus d un materiau contenant l option rccm""")
- return ier
-#
- if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> pour les piquages sains, TUBULURE doit etre renseigne""")
- return ier
-#
- if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> EQUILIBRE[NOEUD] : on attend 'P1_CORP ' ou 'P2_CORP'""")
- return ier
-#
- if PRES_REP['EFFE_FOND']=='OUI' :
- if PRES_REP['NOEUD']==None :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> il faut preciser un noeud pour EFFE_FOND""")
- return ier
- if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> PRES_REP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""")
- return ier
- if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> on ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloque""")
- return ier
-#
- if TORS_CORP!=None :
- for tors in TORS_CORP :
- if tors['NOEUD'] not in ('P1_CORP','P2_CORP') :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> TORS_CORP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""")
- return ier
- if tors['NOEUD']==EQUILIBRE['NOEUD'] :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> on ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloque""")
- return ier
-#
- if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> si TYPE_MAILLAGE SAIN : mecanique de la rupture impossible""")
- return ier
-#
- if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') :
- if BORNES==None :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> mot-clef <BORNES> obligatoire avec cette option""")
- return ier
-#
- if IMPRESSION!=None :
- if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
- if IMPRESSION['NOM_CHAM']==None :
- ier=ier+1
- self.cr.fatal("""<E> <MACR_ASPIC_CALC> impression de resultats demandée sans preciser le nom des champs
- cf. la documentation utilisateur : U4.PC.20.""")
- return ier
-#
-#------------------------------------------------------------------
-#
-# --- commande AFFE_MODELE ---
-#
- if MODELE!=None : self.DeclareOut('modele',MODELE)
- mcfact=[]
- if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
- mcfact.append(_F(GROUP_MA=GRMAIL, PHENOMENE='MECANIQUE',MODELISATION='3D' ))
- else:
- mcfact.append(_F(GROUP_MA=GRMAIL[:-2],PHENOMENE='MECANIQUE',MODELISATION='3D' ))
- mcfact.append( _F(GROUP_MA='P1_CORP' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
- mcfact.append( _F(GROUP_MA='P2_CORP' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
- mcfact.append( _F(GROUP_MA='P_TUBU' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
- modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
- AFFE = mcfact )
- if ECHANGE!=None : # modele thermique
- __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
- AFFE = _F(GROUP_MA =GRMAIL[:-2],
- PHENOMENE ='THERMIQUE',
- MODELISATION='3D' ) )
-#
-# --- commande AFFE_MATERIAU ---
-#
- if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER)
- mcfact=[]
- for mater in mc_AFFE_MATERIAU :
- if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
- affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
- MODELE = modele ,
- AFFE = mcfact )
-#
-# --- commande AFFE_CARA_ELEM ---
-#
- if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
- carael = AFFE_CARA_ELEM( MODELE = modele ,
- DISCRET = ( _F( GROUP_MA='P1_CORP' ,
- CARA ='K_TR_D_N',
- VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
- _F( GROUP_MA='P2_CORP' ,
- CARA ='K_TR_D_N',
- VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
- _F( GROUP_MA='P_TUBU' ,
- CARA ='K_TR_D_N',
- VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ), ) )
-#
-# --- commande AFFE_CHAR_THER_F ---
-# condition aux limites
-#
- if ECHANGE!=None :
- __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
- ECHANGE=( _F(GROUP_MA='PEAUTUBU',
- COEF_H =ECHANGE['COEF_H_TUBU'],
- TEMP_EXT=ECHANGE['TEMP_EXT'],),
- _F(GROUP_MA='PEAUCORP',
- COEF_H =ECHANGE['COEF_H_CORP'],
- TEMP_EXT=ECHANGE['TEMP_EXT'],),))
-#
-# --- calcul thermique ---
-#
- if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
- mcsimp={}
- if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
- if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
- mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
- resuth = THER_LINEAIRE( MODELE = __modthe ,
- CHAM_MATER = affmat ,
- TEMP_INIT = _F(STATIONNAIRE='OUI',),
- EXCIT = _F(CHARGE=__chther,),
- INCREMENT = mcfact, )
-#
- if CHARGE!=None : self.DeclareOut('chmeth',CHARGE)
- chmeth = AFFE_CHAR_MECA( MODELE = modele ,
- TEMP_CALCULEE = resuth )
-#
-# --- commande AFFE_CHAR_MECA ---
-# condition aux limites
-#
- if EQUILIBRE['NOEUD']=='P1_CORP' :
- NENCAS = EQUILIBRE['NOEUD']
- AEFOCO = 'EXCORP2'
- ATORCO = 'P2_CORP'
- LINTC = 'L_INT_C2'
- elif EQUILIBRE['NOEUD']=='P2_CORP' :
- NENCAS = EQUILIBRE['NOEUD']
- AEFOCO = 'EXCORP1'
- ATORCO = 'P1_CORP'
- LINTC = 'L_INT_C1'
- __conlim = AFFE_CHAR_MECA( MODELE = modele ,
- LIAISON_ELEM = ( _F( OPTION ='3D_POU' ,
- GROUP_MA_1='EXCORP1',
- GROUP_NO_2='P1_CORP'),
- _F( OPTION ='3D_POU' ,
- GROUP_MA_1='EXCORP2' ,
- GROUP_NO_2='P2_CORP'),
- _F( OPTION ='3D_POU' ,
- GROUP_MA_1='EXTUBU',
- GROUP_NO_2='P_TUBU'), ),
- DDL_IMPO = _F( GROUP_NO = NENCAS ,
- DX = 0.0 ,
- DY = 0.0 ,
- DZ = 0.0 ,
- DRX = 0.0 ,
- DRY = 0.0 ,
- DRZ = 0.0 , ) )
-#
-# --- commande AFFE_CHAR_MECA ---
-# chargement mecanique : pres_rep, effet de fond
-#
- motscles={}
- if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
- motscles['PRES_REP' ]= _F(GROUP_MA=APPRES, PRES=PRES_REP['PRES'])
- else :
- motscles['PRES_REP' ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES'])
- if PRES_REP['EFFE_FOND' ]!=None :
- motscles['EFFE_FOND' ]=(_F(GROUP_MA ='EXTUBU ',
- GROUP_MA_INT='L_INT_TU',
- PRES =PRES_REP['PRES']),
- _F(GROUP_MA =AEFOCO,
- GROUP_MA_INT=LINTC,
- PRES =PRES_REP['PRES']))
- __chpres = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
-#
-# --- commande AFFE_CHAR_MECA ---
-# chargement mecanique : torseur sur le corps
-#
- if TORS_CORP!=None:
- __chtrc = [None]*6
- i=0
- for tors in TORS_CORP :
- mcsimp={}
- if tors['FX']!=None : mcsimp['FX']=tors['FX']
- if tors['FY']!=None : mcsimp['FY']=tors['FY']
- if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
- if tors['MX']!=None : mcsimp['MX']=tors['MX']
- if tors['MY']!=None : mcsimp['MY']=tors['MY']
- if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
- mcfact=_F(GROUP_NO=ATORCO,**mcsimp)
- __chtrc[i] = AFFE_CHAR_MECA( MODELE = modele ,
- FORCE_NODALE = mcfact , )
- i=i+1
-#
-# --- commande AFFE_CHAR_MECA ---
-# chargement mecanique : torseur sur la tubulure
-#
- if TORS_TUBU!=None:
- __chtrt = [None]*6
- i=0
- for tors in TORS_TUBU :
- mcsimp={}
- if tors['FX']!=None : mcsimp['FX']=tors['FX']
- if tors['FY']!=None : mcsimp['FY']=tors['FY']
- if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
- if tors['MX']!=None : mcsimp['MX']=tors['MX']
- if tors['MY']!=None : mcsimp['MY']=tors['MY']
- if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
- mcfact=_F(GROUP_NO='P_TUBU ',**mcsimp)
- __chtrt[i] = AFFE_CHAR_MECA( MODELE = modele ,
- FORCE_NODALE = mcfact , )
- i=i+1
-#
-# --- commande STAT_NON_LINE ---
-#
- motscles={}
-#
- mcfex=[] # mot clé facteur EXCIT
- mcfex.append(_F(CHARGE=__conlim,))
- if ECHANGE!=None :
- mcfex.append(_F(CHARGE=chmeth,))
- if PRES_REP['FONC_MULT']!=None :
- mcfex.append(_F(CHARGE=__chpres,FONC_MULT=PRES_REP['FONC_MULT']))
- else :
- mcfex.append(_F(CHARGE=__chpres,))
- if TORS_CORP!=None:
- i=0
- for tors in TORS_CORP :
- if tors['FONC_MULT']!=None :
- mcfex.append(_F(CHARGE=__chtrc[i],FONC_MULT=tors['FONC_MULT']))
- else :
- mcfex.append(_F(CHARGE=__chtrc[i],))
- i=i+1
- if TORS_TUBU!=None:
- i=0
- for tors in TORS_TUBU :
- if tors['FONC_MULT']!=None :
- mcfex.append(_F(CHARGE=__chtrt[i],FONC_MULT=tors['FONC_MULT']))
- else :
- mcfex.append(_F(CHARGE=__chtrt[i],))
- i=i+1
- motscles['EXCIT'] =mcfex
-#
- mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
- if COMP_INCR!=None :
- mcfci.append(_F(TOUT ='OUI' ,RELATION=COMP_INCR['RELATION']))
- mcfci.append( _F(GROUP_MA=NOMNOE,RELATION='ELAS'))
- motscles['COMP_INCR'] =mcfci
-#
- if COMP_ELAS!=None :
- motscles['COMP_ELAS'] =_F(GROUP_MA=GRMAIL[:-2] ,RELATION=COMP_ELAS['RELATION'])
-#
- dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- for i in dSolveur.keys():
- if dSolveur[i]==None : del dSolveur[i]
-#
- dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
- for i in dConverg.keys():
- if dConverg[i]==None : del dConverg[i]
-#
- dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
- for i in dNewton.keys():
- if dNewton[i]==None : del dNewton[i]
-#
- dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
- for i in dRechlin.keys():
- if dRechlin[i]==None : del dRechlin[i]
-#
- dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
- for i in dIncrem.keys():
- if dIncrem[i]==None : del dIncrem[i]
-#
- if TITRE!=None :
- motscles['TITRE' ] =TITRE
- motscles ['SOLVEUR' ] =dSolveur
- motscles ['CONVERGENCE' ] =dConverg
- motscles ['NEWTON' ] =dNewton
- motscles ['RECH_LINEAIRE'] =dRechlin
- motscles ['INCREMENT' ] =dIncrem
- self.DeclareOut('nomres',self.sd)
- nomres = STAT_NON_LINE( MODELE = modele ,
- CHAM_MATER = affmat ,
- CARA_ELEM = carael ,
- INFO = INFO , **motscles)
-#
- nomres = CALC_ELEM( reuse = nomres,
- RESULTAT = nomres ,
- TOUT_ORDRE = 'OUI' ,
- OPTION = ('SIEF_ELNO_ELGA','VARI_ELNO_ELGA','EQUI_ELNO_SIGM') ,
- INFO = INFO ,)
-#
-#-----------------------------------------------------------------------
- if TYPE_MAILLAGE[:4]=='SAIN' :
-#-----------------------------------------------------------------------
-#
-# --- post traitement : POST_RELEVE_T --- azimuts droits
-#
-# ---- champs de contrainte SI, SII ET SIII ----
-#
- if TYPE_MAILLAGE=='SAIN_GROS' : NBAZIM = 40
- else : NBAZIM = 48
- mcfact=[]
- TYPSOU=None
- if TUBULURE!=None : TYPSOU = TUBULURE['TYPE']
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- if TYPSOU=='TYPE_1':
- mcsimp['REPERE' ]='CYLINDRIQUE',
- mcsimp['ORIGINE']=( 0.0 , 0.0 , 0.0 )
- mcsimp['AXE_Z' ]=( 0.0 , 0.0 , 1.0 )
- INTITD = 'AZI_'+NUME+'_D-REP_CYL'
- else:
- mcsimp['REPERE' ]='LOCAL'
- mcsimp['VECT_Y' ]=( 0.0 , 0.0 , 1.0 )
- INTITD = 'AZI_'+NUME+'_D-REP_LOC'
- mcsimp['INTITULE' ]=INTITD
- mcsimp['GROUP_NO' ]='LD'+str(i)
- mcfact.append( _F( RESULTAT = nomres,
- TOUT_ORDRE ='OUI',
- NOM_CHAM ='SIEF_ELNO_ELGA',
- PRECISION =55.E-1,
- TOUT_CMP ='OUI',
- OPERATION ='EXTRACTION',**mcsimp))
- __noposd=POST_RELEVE_T(ACTION = mcfact,
- TITRE = '-- TRAITEMENT DES AZIMUTS DROITS --')
-#
-# --- IMPR_TABLE dans un repere cylindrique ou local
-# des champs de contrainte SI, SII ET SIII
-#
- if TYPSOU=='TYPE_1' : nompara=IMPRT1
- else : nompara=IMPRT2
- IMPR_TABLE(TABLE = __noposd,
- NOM_PARA = nompara )
-#
-# ---- Pm, Pm+Pb sur les lignes de depouillement ----
-#
- if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['INTITULE' ]='LD'+str(i)
- mcsimp['GROUP_NO' ]='LD'+str(i)
- mcsimp['RESULTAT' ]=nomres
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='SIEF_ELNO_ELGA'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['OPERATION' ]='EXTRACTION'
- mcfact.append( _F(**mcsimp) )
- __prelsd=POST_RELEVE_T(ACTION=mcfact)
- __pmpbsd=POST_RCCM(OPTION = 'PM_PB',
- TYPE_RESU_MECA = 'EVOLUTION',
- TYPE_RESU = 'VALE_MAX',
- MATER = MRCCM,
- TRANSITOIRE = _F(TABL_RESU_MECA = __prelsd,),
- TITRE = '-- TRAITEMENT DES AZIMUTS DROITS --',)
- IMPR_TABLE(TABLE = __pmpbsd, )
-#
-# ---- champ de temperature, si il a ete calcule, sur les lignes de depouillement ----
-#
- if ECHANGE!=None :
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['GROUP_NO' ]='LD'+str(i)
- mcsimp['RESULTAT' ]=resuth
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='TEMP'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['INTITULE' ]='AZI_'+NUME+'_D'
- mcsimp['OPERATION' ]='EXTRACTION'
- mcfact.append( _F(**mcsimp) )
- __rthazd=POST_RELEVE_T(ACTION=mcfact)
- IMPR_TABLE(TABLE = __rthazd, )
-#
-# ---- parametres caracterisant la distribution de temperature,
-# si elle a ete calculee, dans l epaisseur du ligament ----
-#
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['GROUP_NO' ]='LD'+str(i)
- mcsimp['RESULTAT' ]=resuth
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='TEMP'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['INTITULE' ]='AZI_'+NUME+'_D'
- mcsimp['OPERATION' ]='MOYENNE'
- mcfact.append( _F(**mcsimp) )
- __rmothd=POST_RELEVE_T(ACTION=mcfact)
- IMPR_TABLE(TABLE = __rmothd, )
-#
-#-----------------------------------------------------------------------
-#
-# --- post traitement : POST_RELEVE_T --- azimuts inclines
-# --- champs de contrainte SI, SII ET SIII ----
-#
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['GROUP_NO' ]='LI'+str(i)
- mcsimp['RESULTAT' ]=nomres
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='SIEF_ELNO_ELGA'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['REPERE' ]='LOCAL'
- mcsimp['VECT_Y' ]=( 0.0 , 0.0 , 1.0 )
- mcsimp['INTITULE' ]='AZI_'+NUME+'_I-REP_LOC'
- mcsimp['OPERATION' ]='EXTRACTION'
- mcfact.append( _F(**mcsimp) )
- __noposi=POST_RELEVE_T(ACTION=mcfact)
- IMPR_TABLE(TABLE = __noposi, )
-#
-# ---- Pm, Pm+Pb sur les lignes de depouillement ----
-#
- if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['INTITULE' ]='LI'+str(i)
- mcsimp['GROUP_NO' ]='LI'+str(i)
- mcsimp['RESULTAT' ]=nomres
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='SIEF_ELNO_ELGA'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['OPERATION' ]='EXTRACTION'
- mcfact.append( _F(**mcsimp) )
- __prelsi=POST_RELEVE_T(ACTION=mcfact)
- __pmpbsi=POST_RCCM(OPTION = 'PM_PB',
- TYPE_RESU_MECA = 'EVOLUTION',
- TYPE_RESU = 'VALE_MAX',
- MATER = MRCCM,
- TRANSITOIRE = _F(TABL_RESU_MECA = __prelsi,),
- TITRE = '-- TRAITEMENT DES AZIMUTS INCLINES --',)
- IMPR_TABLE(TABLE = __pmpbsi, )
-#
-# ---- champs de temperature,si il a ete calcule, sur les lignes de depouillement ----
-#
- if ECHANGE!=None :
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['GROUP_NO' ]='LI'+str(i)
- mcsimp['RESULTAT' ]=resuth
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='TEMP'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['INTITULE' ]='AZI_'+NUME+'_I'
- mcsimp['OPERATION' ]='EXTRACTION'
- mcfact.append( _F(**mcsimp) )
- __rthazi=POST_RELEVE_T(ACTION=mcfact)
- IMPR_TABLE(TABLE = __rthazi,
- NOM_PARA = IMPRT3 )
-#
-# ---- parametres caracterisant la distribution de temperature,
-# si elle a ete calculee, dans l epaisseur du ligament ----
-#
- mcfact=[]
- for i in range(1,NBAZIM+1,PAS_AZIMUT):
- if i<10 : NUME = '0'+str(i)
- else : NUME = str(i)
- mcsimp={}
- mcsimp['GROUP_NO' ]='LI'+str(i)
- mcsimp['RESULTAT' ]=resuth
- mcsimp['TOUT_ORDRE' ]='OUI'
- mcsimp['NOM_CHAM' ]='TEMP'
- mcsimp['PRECISION' ]=55.E-1
- mcsimp['TOUT_CMP' ]='OUI'
- mcsimp['INTITULE' ]='AZI_'+NUME+'_I'
- mcsimp['OPERATION' ]='MOYENNE'
- mcfact.append( _F(**mcsimp) )
- __rmothi=POST_RELEVE_T(ACTION=mcfact)
- IMPR_TABLE(TABLE = __rmothi, )
-#
-#-----------------------------------------------------------------------
- elif TYPE_MAILLAGE[:4]=='FISS' :
-#-----------------------------------------------------------------------
-#
- NOMGRO=[]
- NOMGRE=[]
- TABMA8=[]
- NOMMA =[]
- if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB','FISS_AXIS_DEB','FISS_COUR_NONDEB') :
- NBFIS = 1
- NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
- NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
- TABMA8.append('FONDFISS')
- if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB') : FERME=0
- else :
- FERME=1
- NOMMA.append('MAIL_ORI')
- elif TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
- NBFIS = 2
- NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
- NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
- NOMGRO.append(('PI_FON1','PI_FIS1'),)
- NOMGRE.append(('PI_FON2','PI_FIS2'),)
- TABMA8.append('FOND_SUP')
- TABMA8.append('FOND_INF')
- if TYPE_MAILLAGE=='FISS_LONG_NONDEB' : FERME=0
- else :
- FERME=1
- NOMMA.append('MA_ORI_S')
- NOMMA.append('MA_ORI_I')
-#
- if ECHANGE!=None:
-#
-# ---- champs de temperature en fond de fissure
-# si il a ete calcule, cas 1 fond de fissure ----
-#
- if NBFIS==1:
- __rthfis=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FONDFISS',
- RESULTAT =resuth,
- TOUT_ORDRE ='OUI',
- NOM_CHAM ='TEMP',
- PRECISION =55.E-1,
- TOUT_CMP ='OUI',
- INTITULE ='FONDFISS',
- OPERATION ='EXTRACTION',))
- IMPR_TABLE(TABLE = __rthfis, )
-#
-# ---- champs de temperature en fond de fissure
-# si il a ete calcule, cas 2 fonds de fissure ----
-#
- elif NBFIS==2:
-#
- __rthfis1=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FOND_SUP',
- RESULTAT =resuth,
- TOUT_ORDRE ='OUI',
- NOM_CHAM ='TEMP',
- PRECISION =55.E-1,
- TOUT_CMP ='OUI',
- INTITULE ='FOND_SUP',
- OPERATION ='EXTRACTION',))
- IMPR_TABLE(TABLE = __rthfis1, )
- __rthfis2=POST_RELEVE_T(ACTION=_F(GROUP_NO ='FOND_INF',
- RESULTAT =resuth,
- TOUT_ORDRE ='OUI',
- NOM_CHAM ='TEMP',
- PRECISION =55.E-1,
- TOUT_CMP ='OUI',
- INTITULE ='FOND_INF',
- OPERATION ='EXTRACTION',))
- IMPR_TABLE(TABLE = __rthfis2, )
-#
-# boucle sur le nombre de fond de fissure
-#
- fond3d = [None]*2
- for j in range(NBFIS):
- if FOND_FISS_1!=None : self.DeclareOut('fond3d_0',FOND_FISS_1)
- if FOND_FISS_2!=None : self.DeclareOut('fond3d_1',FOND_FISS_2)
-#
-# --- commande DEFI_FOND_FISS ---
-#
- motscles={}
- if not FERME:
- motscles['FOND_FISS']=_F(GROUP_MA =TABMA8[j],
- GROUP_NO_ORIG=NOMGRO[j][0],
- GROUP_NO_EXTR=NOMGRE[j][0],)
- motscles['VECT_GRNO_ORIG']=NOMGRO[j]
- motscles['VECT_GRNO_EXTR']=NOMGRE[j]
- else:
- if TYPE_MAILLAGE.find('AXIS')!=-1 : grnoorig=NOMGRE[j][0]
-# si AXIS, P_FON1 est remplace par P_FON2 pour
-# fermer le fond de fissure
- else : grnoorig=NOMGRO[j][0]
- motscles['FOND_FERME']=_F(GROUP_MA =TABMA8[j],
- GROUP_NO_ORIG=grnoorig,
- GROUP_MA_ORIG=NOMMA[j],)
- fond3d[j]=DEFI_FOND_FISS( MAILLAGE = MAILLAGE,
- LEVRE_SUP = _F(GROUP_MA='LEVRCORP',),
- LEVRE_INF = _F(GROUP_MA='LEVRTUBU',),**motscles)
- if THETA_3D!=None:
- for tht3d in THETA_3D :
-#
-# --- commande CALC_THETA ---
-#
- __theta = CALC_THETA( MODELE = modele,
- FOND_FISS = fond3d[j],
- THETA_3D = _F( TOUT = 'OUI',
- MODULE = 1.0 ,
- R_INF = tht3d['R_INF'],
- R_SUP = tht3d['R_SUP'], ) )
-#
-# --- commande CALC_G_THETA_T ---
-#
- montit = 'G_THETA AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
- motscles={}
- if COMP_ELAS!=None: motscles['COMP_ELAS']= _F(TOUT = 'OUI',
- RELATION = COMP_ELAS['RELATION'],)
- if COMP_INCR!=None: motscles['COMP_INCR']= _F(RELATION = COMP_INCR['RELATION'],)
- print motscles
- __gtheta = CALC_G_THETA_T( MODELE = modele,
- CHAM_MATER = affmat,
- THETA = __theta,
- RESULTAT = nomres,
- TOUT_ORDRE = 'OUI',
- TITRE = montit,**motscles)
- IMPR_TABLE(TABLE = __gtheta, )
-#
-# recherche du g max
-#
- if OPTION=='CALC_G_MAX' :
- if BORNES!=None:
- mcfact=[]
- for born in BORNES :
- mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
- VALE_MIN = born['VALE_MIN' ] ,
- VALE_MAX = born['VALE_MAX' ] ) )
- __gbil = CALC_G_THETA_T( MODELE = modele,
- CHAM_MATER = affmat,
- THETA = __theta,
- RESULTAT = nomres,
- TOUT_ORDRE = 'OUI',
- COMP_ELAS = _F(TOUT = 'OUI',
- RELATION = COMP_ELAS['RELATION'],),
- TITRE = montit,
- OPTION = OPTION,
- BORNES = mcfact,)
- IMPR_TABLE(TABLE = __gbil, )
-#
-# --- commande CALC_G_LOCAL_T ---
-#
- montit = 'G_LOCAL AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
- motscles={}
- if COMP_ELAS!=None: motscles['COMP_ELAS' ]= _F(TOUT = 'OUI',
- RELATION = COMP_ELAS['RELATION'],)
- if FERME:
- motscles['LISSAGE_THETA']= 'LAGRANGE'
- motscles['LISSAGE_G' ]= 'LAGRANGE'
- __glocal = CALC_G_LOCAL_T( MODELE = modele,
- CHAM_MATER = affmat,
- FOND_FISS = fond3d[j],
- RESULTAT = nomres,
- TOUT_ORDRE = 'OUI',
- R_INF = tht3d['R_INF'],
- R_SUP = tht3d['R_SUP'],
- TITRE = montit,**motscles)
-#
-# recherche du g max local
-#
- if OPTION=='CALC_G_MAX_LOCAL' :
- if BORNES!=None:
- motscles={}
- mcfact=[]
- if FERME:
- motscles['LISSAGE_THETA']= 'LAGRANGE'
- motscles['LISSAGE_G' ]= 'LAGRANGE'
- for born in BORNES :
- mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
- VALE_MIN = born['VALE_MIN' ] ,
- VALE_MAX = born['VALE_MAX' ] ) )
- motscles['BORNES']=mcfact
- __glbil = CALC_G_LOCAL_T( MODELE = modele,
- CHAM_MATER = affmat,
- FOND_FISS = fond3d[j],
- RESULTAT = nomres,
- TOUT_ORDRE = 'OUI',
- COMP_ELAS = _F(TOUT = 'OUI',
- RELATION = COMP_ELAS['RELATION'],),
- TITRE = montit,
- OPTION = 'CALC_G_MAX',
- R_INF = tht3d['R_INF'],
- R_SUP = tht3d['R_SUP'],**motscles)
- IMPR_TABLE(TABLE = __glbil, )
-#
-# --- commande IMPR_RESU ---
-#
- if IMPRESSION!=None:
- mcfresu =[]
- motscles={}
- motsclei={}
- if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
- ncham =[]
- if IMPRESSION['NOM_CHAM']!=None :
- if type(IMPRESSION['NOM_CHAM']) in (types.TupleType,types.ListType) : ncham= IMPRESSION['NOM_CHAM']
- else : ncham=[IMPRESSION['NOM_CHAM'],]
- if len(ncham)==3 : motscles['NOM_CHAM' ]=('DEPL','EQUI_ELNO_SIGM')
- elif (len(ncham)==1) and (ncham[0][:4]!='TEMP') :
- motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
- elif (len(ncham)==2) and (ncham[0][:4]!='TEMP') and (ncham[1][:4]!='TEMP') :
- motscles['NOM_CHAM' ]=(ncham[0]['NOM_CHAM'],ncham[1]['NOM_CHAM'])
- elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
- motscles['NOM_CHAM' ]= ncham[1]['NOM_CHAM']
- elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
- motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
- if IMPRESSION['TOUT_ORDRE']!=None :
- motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
- elif IMPRESSION['NUME_ORDRE']!=None :
- motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
- elif IMPRESSION['INST']!=None :
- motscles['INST' ]= IMPRESSION['INST']
- if IMPRESSION['FORMAT']=='IDEAS' :
- motsclei['VERSION' ]= IMPRESSION['VERSION']
- if IMPRESSION['FORMAT']=='CASTEM' :
- motsclei['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
- mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,**motscles))
- if ECHANGE!=None:
- motscles={}
- if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
- if len(ncham)==3 : motscles['NOM_CHAM' ]=('TEMP',)
- elif (len(ncham)==1) and (ncham[0][:4]=='TEMP') :
- motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
- elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
- motscles['NOM_CHAM' ]= ncham[0]['NOM_CHAM']
- elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
- motscles['NOM_CHAM' ]= ncham[1]['NOM_CHAM']
- if IMPRESSION['TOUT_ORDRE']!=None :
- motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
- elif IMPRESSION['NUME_ORDRE']!=None :
- motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
- elif IMPRESSION['INST']!=None :
- motscles['INST' ]= IMPRESSION['INST']
- if IMPRESSION['FORMAT']=='IDEAS' :
- motsclei['VERSION' ]= IMPRESSION['VERSION']
- if IMPRESSION['FORMAT']=='CASTEM' :
- motsclei['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
- mcfresu.append(_F(RESULTAT=nomres,**motscles))
- IMPR_RESU( MODELE = modele,
- RESU = mcfresu,
- FORMAT=IMPRESSION['FORMAT'],**motsclei)
-#
- return ier
+++ /dev/null
-#@ MODIF macr_aspic_mail_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-from math import sqrt,cos,sin,pi,pow,tan
-
-# Ecriture du fichier GIBI principal (dgib) - ASPID0
-def write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
- ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
- ITYPSO, DPENE, NIVMAG, loc_datg) :
-
-# Ouverture du fichier d'entrée de commandes
- fdgib=open(nomFichierDATG,'w')
- POIVIR = ' ; \n'
- texte='****************************************************************\n'
- texte=texte+'opti echo 0 ; \n'
- texte=texte+'epT1 = '+str(EPT1) +POIVIR
- texte=texte+'DeT1 = '+str(DET1) +POIVIR
- texte=texte+'d1 = '+str(D1) +POIVIR
- texte=texte+'d2 = '+str(D2) +POIVIR
- texte=texte+'epT2 = '+str(EPT2) +POIVIR
- texte=texte+'DeT2 = '+str(DET2) +POIVIR
- texte=texte+'Zmax = '+str(ZMAX) +POIVIR
- texte=texte+'type_s = '+str(ITYPSO) +POIVIR
- texte=texte+'d_pene = '+str(DPENE) +POIVIR
- texte=texte+'h = '+str(H) +POIVIR
- texte=texte+'angl_s = '+str(ALPHA) +POIVIR
- texte=texte+'jeu = '+str(JEU) +POIVIR
- texte=texte+'epC = '+str(EPC) +POIVIR
- texte=texte+'DeC = '+str(DEC) +POIVIR
- texte=texte+'Xmax = '+str(XMAX) +POIVIR
- texte=texte+'typmai = MOT '+TYPMAI +POIVIR
- texte=texte+'theta = '+str(THETA) +POIVIR
- texte=texte+'typele = MOT '+TYPELE +POIVIR
- texte=texte+'typ_eque = MOT '+'SAINE' +POIVIR
- texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+'* \n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'aspic.datg'+"';\n"
- print texte
- fdgib.write(texte)
- fdgib.close()
-
-# Ecriture du fichier GIBI principal (dgib) - ASPID1
-def write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
- ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
- A,C,EPS, RC0, NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
- TFISS,ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
-
-# Ouverture du fichier d'entrée de commandes
- fdgib=open(nomFichierDATG,'w')
- POIVIR = ' ; \n'
- texte='****************************************************************\n'
- texte=texte+'opti echo 0 ; \n'
- texte=texte+'epT1 = '+str(EPT1) +POIVIR
- texte=texte+'DeT1 = '+str(DET1) +POIVIR
- texte=texte+'d1 = '+str(D1) +POIVIR
- texte=texte+'d2 = '+str(D2) +POIVIR
- texte=texte+'epT2 = '+str(EPT2) +POIVIR
- texte=texte+'DeT2 = '+str(DET2) +POIVIR
- texte=texte+'Zmax = '+str(ZMAX) +POIVIR
- texte=texte+'type_s = '+str(ITYPSO) +POIVIR
- texte=texte+'d_pene = '+str(DPENE) +POIVIR
- texte=texte+'h = '+str(H) +POIVIR
- texte=texte+'angl_s = '+str(ALPHA) +POIVIR
- texte=texte+'jeu = '+str(JEU) +POIVIR
- texte=texte+'epC = '+str(EPC) +POIVIR
- texte=texte+'DeC = '+str(DEC) +POIVIR
- texte=texte+'Xmax = '+str(XMAX) +POIVIR
- texte=texte+'typmai = MOT '+TYPMAI +POIVIR
- texte=texte+'theta = '+str(THETA) +POIVIR
- texte=texte+'a = '+str(A) +POIVIR
- texte=texte+'c = '+str(C) +POIVIR
- texte=texte+'zeta = '+str(ZETA) +POIVIR
- texte=texte+'eps = '+str(EPS) +POIVIR
- texte=texte+'rc0 = '+str(RC0) +POIVIR
- texte=texte+'ns = '+str(NS) +POIVIR
- texte=texte+'nc = '+str(NC) +POIVIR
- texte=texte+'nt = '+str(NT) +POIVIR
- texte=texte+'dir_fiss = MOT '+POSI +POIVIR
- texte=texte+'pos_fiss = MOT '+TFISS +POIVIR
- texte=texte+'ndt = '+str(NDT) +POIVIR
- texte=texte+'f_etir_f = '+str(FETIRF) +POIVIR
- texte=texte+'f_etir_p = '+str(FETIRP) +POIVIR
- texte=texte+'typ_eque = MOT '+'FISS_LON' +POIVIR
- texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+'* \n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'aspic_v2.datg'+"';\n"
- print texte
- fdgib.write(texte)
- fdgib.close()
-
-# Ecriture du fichier GIBI principal (dgib) - ASPID2
-def write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
- H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
- THETA, A, C, EPS, RC0, RC1, RC2, RC3,
- ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
- ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
-#
- CALPHA = cos(ALPHA*pi/180.)
- SALPHA = sin(ALPHA*pi/180.)
- CTHETA = cos(THETA*pi/180.)
- STHETA = sin(THETA*pi/180.)
-#
- AOLD = A
-#
- if (ITYPSO == 1) :
-# PIQUAGE TYPE 1
- if (POSI == 'DROIT') :
-# PIQUAGE DROIT
- if (TFISS == 'DEB_INT') :
-# POSITION INTERNE
- SGAMMA = STHETA * (DET1/2.0)/( (DEC/2.0) -EPC)
- SGAMME = STHETA * (DET1/2.0)/( (DEC/2.0) )
- RAPPA = sqrt(1.0 - pow(SGAMMA,2))
- RAPPE = sqrt(1.0 - pow(SGAMME,2))
- AP = A - (1.0 - RAPPA)*A
- RAPP = (AP/EPC*RAPPE) + (1.0-(AP/EPC))*RAPPA
- XA = (DET1/2.0) * CTHETA
- YA = (DET1/2.0) * STHETA
- ZA = ((DEC/2.0) -EPC) * sqrt(1.0 - pow(SGAMMA,2))
- ZA0 = (DEC/2.0) - EPC
- XA0 = DET1/2.0
- XN0 = XA0
- YN0 = 0.0
- ZN0 = ZA0 + A
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - (SGAMN*SGAMN))
- D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
- DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
- RAPP = D0N0 / DN
- ECART = (1.0 - RAPP) * D0N0
- A = A - ECART
- elif (TFISS == 'DEB_EXT') :
-# POSITION EXTERNE
- SGAMME = STHETA * (DET1/2.0)/ (DEC/2.0)
- RAPPE = sqrt(1.0 - pow(SGAMME,2))
- A = A -(1.0 - RAPPE)*A
-
- elif (POSI == 'INCLINE') :
-# PIQUAGE INCLINE
- SGAMMA = STHETA * (DET1/2.0)/ ( (DEC/2.0) -EPC)
- XA = (DET1/2.0) * CTHETA
- YA = (DET1/2.0) * STHETA
- ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
- ZA0 = (DEC/2.0) - EPC
- ZD0 = DEC/2.0
- XA0 = DET1/2.0
- XD0 = XA0 + (tan(ALPHA*pi/180.0) * EPC)
- A0D0 = sqrt( pow((ZD0 - ZA0),2) + pow((XD0 - XA0),2) )
- EPSIL = STHETA * tan(ALPHA*pi/180.0)
- PHI = (EPSIL * ZA) - YA
- DELTA = pow(PHI,2) - ((1 + pow(EPSIL,2))*(pow(PHI,2) - (pow((DEC/2.0),2)*pow(EPSIL,2))))
- if (THETA > 0) :
- YD = ( sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
- else :
- YD = ( -1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
-
- ZD = sqrt(pow((DEC/2.0),2) - pow(YD,2))
-
- if ( (abs(THETA - 0.0) < 1.e-3) or ((abs(THETA - 180.0)) < 1.e-3) ) :
- XD = CTHETA * XD0
- else :
- XD = YD / tan(THETA*pi/180.0)
-
- AD = sqrt( pow((XA - XD),2) + pow((YA - YD),2) + pow((ZA - ZD),2) )
- RAPP = A0D0 / AD
-
- if (TFISS == 'DEB_EXT') :
- XN0 = XD0 - A*SALPHA
- YN0 = 0.0
- ZN0 = ZD0 - A*CALPHA
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
- D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
- DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )
- RAPP = D0N0 / DN
- ECART = (RAPP - 1.0) * D0N0
- A = A + ECART
-
- if (TFISS == 'DEB_INT') :
- XN0 = XA0 + A*SALPHA
- YN0 = 0.0
- ZN0 = ZA0 + A*CALPHA
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
- D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
- DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
- RAPP = D0N0 / DN
- ECART = (RAPP - 1.0) * D0N0
- A = A + ECART
-
- elif (ITYPSO == 2) :
-# PIQUAGE TYPE 2
- if (POSI == 'DROIT') :
-# PIQUAGE DROIT
- SGAMMI = STHETA * ((DET1/2.0) - EPT1)/(DEC/2.0)
- XI = ((DET1/2.0) - EPT1) * CTHETA
- YI = ((DET1/2.0) - EPT1) * STHETA
- ZI = (DEC/2.0) * sqrt(1.0 - pow(SGAMMI,2))
- XI0 = (DET1/2.0) -EPT1
- YI0 = 0.0
- ZI0 = (DEC/2.0)
-
- SGAMMA = STHETA * (DET1/2.0)/((DEC/2.0) -EPC)
- YA = (DET1/2.0) * STHETA
- ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
- TGALP = H / EPC
- EPSIL = STHETA * TGALP
- PHI = (EPSIL * ZA) - YA
- DELTA = pow(PHI,2) - (1.0 + pow(EPSIL,2))*(pow(PHI,2) - pow((DEC/2.0),2)*pow(EPSIL,2))
- if (THETA > 0) :
- YD = (sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
- else :
- YD = (-1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
-
- ZD = sqrt( pow((DEC/2.0),2) - pow(YD,2) )
- if ( (abs(THETA - 0.0) < 1.0e-3) or
- (abs(THETA - 180.0) < 1.0e-3) or
- (abs(THETA + 180.0) < 1.0e-3) or
- (abs(THETA + 90.0) < 1.0e-3) or
- (abs(THETA - 90.0) < 1.0e-3) ) :
- XD = CTHETA * ((DET1/2.0) + H)
- else :
- XD = YD / (tan(THETA*pi/180.0))
-
- XD0 = (DET1/2.0) + H
- YD0 = 0.0
- ZD0 = (DEC/2.0)
-
- if (TFISS == 'DEB_EXT') :
- XN0 = XD0 - A
- YN0 = 0.0
- ZN0 = ZI0
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- DZID = abs(ZI - ZD)
- DXYID = sqrt( pow((XD - XI),2) + pow((YD - YI),2) )
- DXYIN = sqrt( pow((XN - XI),2) + pow((YN - YI),2) )
- DZIN = (DXYIN * DZID) / DXYID
- ZN = ZI - DZIN
- D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
- DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )
- RAPP = D0N0 / DN
- ECART = DN - D0N0
- A = A - ECART
-
- if (TFISS == 'DEB_INT') :
- XN0 = XI0 + A
- YN0 = 0.0
- ZN0 = ZI0
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
- I0N0 = sqrt( pow((XI0 - XN0),2) + pow((ZI0 - ZN0),2) )
- IN = sqrt( pow((XI - XN),2) + pow((YI - YN),2) + pow((ZI - ZN),2) )
- RAPP = I0N0 / IN
- ECART = I0N0 * ( 1.0 - RAPP )
- A = A - ECART
-
- elif (POSI == 'INCLINE') :
-# PIQUAGE INCLINE
- TGALPHA = SALPHA/CALPHA
- REPB = (DEC/2.0) + JEU + (EPT1*TGALPHA)
- SGAMB = (STHETA * DET1/2.0 ) / REPB
- CGAMB = sqrt(1.0 - pow(SGAMB,2))
- XB = (DET1/2.0) * CTHETA
- YB = (DET1/2.0) * STHETA
- ZB = ( (DEC/2.0) + JEU + (EPT1*TGALPHA) ) * CGAMB
- XB0 = (DET1/2.0)
- YB0 = 0.0
- ZB0 = (DEC/2.0) + JEU + (EPT1*TGALPHA)
-#
- RIT1 = (DET1/2.0) - EPT1
- REPG = (DEC/2.0) + JEU
- SGAMG = ((STHETA ) * RIT1) / REPG
- CGAMG = sqrt(1.0 - pow(SGAMG,2))
- XG = RIT1 * CTHETA
- YG = RIT1 * STHETA
- ZG = ((DEC/2.0) + JEU) * CGAMG
- XG0 = RIT1
- YG0 = 0.0
- ZG0 = (DEC/2.0) + JEU
-#
- if (TFISS == 'DEB_INT') :
- XN0 = XG0 + A*CALPHA
- YN0 = 0.0
- ZN0 = ZG0 + A*SALPHA
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
- G0N0 = sqrt( pow((XG0 - XN0),2) + pow((ZG0 - ZN0),2) )
- GN = sqrt( pow((XG - XN),2) + pow((YG - YN),2) + pow((ZG - ZN),2) )
- RAPP = G0N0 / GN
- ECART = (RAPP - 1.0) * G0N0
- A = A + ECART
-
- if (TFISS == 'DEB_EXT') :
- XN0 = XB0 - A*CALPHA
- YN0 = 0.0
- ZN0 = ZB0 - A*SALPHA
- XN = XN0 * CTHETA
- YN = XN0 * STHETA
- SGAMN = YN / ZN0
- ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
- B0N0 = sqrt( pow((XB0 - XN0),2) + pow((ZB0 - ZN0),2) )
- BN = sqrt( pow((XB - XN),2) + pow((YB - YN),2) + pow((ZB - ZN),2) )
- RAPP = B0N0 / BN
- ECART = (RAPP - 1.0) * B0N0
- A = A + ECART
-
- print ' <MACR_ASPIC_MAIL> CORRECTION PROFONDEUR DEFAUT'
- print ' PROFONDEUR SUR PIQUAGE : ', AOLD
- print ' PROFONDEUR SUR EQUERRE : ', A
-
-# Ouverture du fichier d'entrée de commandes
-
- fdgib=open(nomFichierDATG,'w')
- POIVIR = ' ; \n'
- texte='****************************************************************\n'
- texte=texte+'opti echo 0 ; \n'
- texte=texte+'epT1 = '+str(EPT1) +POIVIR
- texte=texte+'DeT1 = '+str(DET1) +POIVIR
- texte=texte+'d1 = '+str(D1) +POIVIR
- texte=texte+'d2 = '+str(D2) +POIVIR
- texte=texte+'epT2 = '+str(EPT2) +POIVIR
- texte=texte+'DeT2 = '+str(DET2) +POIVIR
- texte=texte+'Zmax = '+str(ZMAX) +POIVIR
- texte=texte+'type_s = '+str(ITYPSO) +POIVIR
- texte=texte+'d_pene = '+str(DPENE) +POIVIR
- texte=texte+'h = '+str(H) +POIVIR
- texte=texte+'angl_s = '+str(ALPHA) +POIVIR
- texte=texte+'jeu = '+str(JEU) +POIVIR
- texte=texte+'epC = '+str(EPC) +POIVIR
- texte=texte+'DeC = '+str(DEC) +POIVIR
- texte=texte+'Xmax = '+str(XMAX) +POIVIR
- texte=texte+'typmai = MOT '+TYPMAI +POIVIR
- texte=texte+'theta = '+str(THETA) +POIVIR
- texte=texte+'a = '+str(A) +POIVIR
- texte=texte+'c = '+str(C) +POIVIR
- texte=texte+'zeta = '+str(ZETA) +POIVIR
- texte=texte+'eps = '+str(EPS) +POIVIR
- texte=texte+'rc0 = '+str(RC0) +POIVIR
- texte=texte+'rc1 = '+str(RC1) +POIVIR
- texte=texte+'rc2 = '+str(RC2) +POIVIR
- texte=texte+'rc3 = '+str(RC3) +POIVIR
- texte=texte+'alpha = '+str(ALP) +POIVIR
- texte=texte+'beta = '+str(BETA) +POIVIR
- texte=texte+'ns = '+str(NS) +POIVIR
- texte=texte+'nc = '+str(NC) +POIVIR
- texte=texte+'nt = '+str(NT) +POIVIR
- texte=texte+'dir_fiss = MOT '+POSI +POIVIR
- texte=texte+'pos_fiss = MOT '+TFISS +POIVIR
- texte=texte+'ndt = '+str(NDT) +POIVIR
- texte=texte+'nsdt = '+str(NSDT) +POIVIR
- texte=texte+'typ_eque = MOT '+'FISS_COU' +POIVIR
- texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
- texte=texte+'* \n'
- texte=texte+'list epc ;\n'
- texte=texte+'opti donn '
- texte=texte+"'"+loc_datg+'aspic.datg'+"';\n"
- print texte
- fdgib.write(texte)
- fdgib.close()
-
-def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
- SOUDURE,CORPS,FISS_SOUDURE,IMPRESSION,INFO,
- **args):
- """
- Ecriture de la macro MACR_ASPIC_MAIL
- """
- from Accas import _F
- import types
- import aster
- ier=0
-
-# On importe les definitions des commandes a utiliser dans la macro
- EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
- PRE_GIBI =self.get_cmd('PRE_GIBI')
- LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
- DEFI_GROUP =self.get_cmd('DEFI_GROUP')
- MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
- AFFE_MODELE =self.get_cmd('AFFE_MODELE')
- CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
- IMPR_RESU =self.get_cmd('IMPR_RESU')
-
-# La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
- TYPELE = TYPE_ELEM
- NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
-#
-# --- raffinement maillage ---
-#
- TYPMAI = RAFF_MAIL
- GROS = (TYPMAI=='GROS')
- if GROS : NBAZIT = 40
- else : NBAZIT = 48
-#
-# --- caracteristiques de la tubulure ---
-#
- EPT1 = TUBULURE['E_BASE' ]
- DET1 = TUBULURE['DEXT_BASE']
- D1 = TUBULURE['L_BASE' ]
- D2 = TUBULURE['L_CHANF' ]
- EPT2 = TUBULURE['E_TUBU' ]
- DET2 = TUBULURE['DEXT_TUBU']
- ZMAX = TUBULURE['Z_MAX' ]
- TYPSOU= TUBULURE['TYPE' ]
- DPENE = TUBULURE['L_PENETR' ]
- if TYPSOU=='TYPE_2' and DPENE>0.0 :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> les piquages penetrants sont autorises uniquement avec les soudures de type 1")
- ier = ier+1
- return ier
- if TYPSOU=='TYPE_2' :
- ITYPSO = 2
- else :
- ITYPSO = 1
-#
-# --- caracteristiques de la soudure ---
-#
- H = SOUDURE['H_SOUD' ]
- ALPHA = SOUDURE['ANGL_SOUD']
- JEU = SOUDURE['JEU_SOUD' ]
-#
-# --- caracteristiques du corps ---
-#
- EPC = CORPS ['E_CORP' ]
- DEC = CORPS ['DEXT_CORP']
- XMAX = CORPS ['X_MAX' ]
- EPSI = 1.E-03
- RMB = ( DET1 - EPT1 ) / 2.0
- VAL1 = 1.5 * sqrt( RMB**3 / EPT1 )
- VAL3 = 3.0 * sqrt( RMB * EPT1 )
- RMT = ( DET2 - EPT2 ) / 2.0
- VAL2 = 1.5 * sqrt( RMT**3 / EPT2 )
- VAL4 = 3.0 * sqrt( RMT * EPT2 )
- LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
- ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
- LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) )
- if not LOK :
- print ' <MACR_ASPIC_MAIL> erreur donnees'
- print ' <MACR_ASPIC_MAIL> Z_MAX FOURNIE : ', ZMAX
- print ' <MACR_ASPIC_MAIL> Z_MAX CALCULEE : ', ZMAXC
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- RMC = ( DEC - EPC ) / 2.0
- VAL1 = 1.5 * sqrt( RMC**3 / EPC )
- VAL2 = 3.0 * sqrt( RMC * EPC )
- LXMAX = max( VAL1 , VAL2 )
- XMAXC = LXMAX + ( DET1 / 2.0 )
- LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) )
- if not LOK :
- print ' <MACR_ASPIC_MAIL> erreur donnees'
- print ' <MACR_ASPIC_MAIL> Z_MAX FOURNIE : ', ZMAX
- print ' <MACR_ASPIC_MAIL> Z_MAX CALCULEE : ', ZMAXC
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- print ' MACR_ASPIC_MAIL / X_MAX CALCULEE : ',XMAX
- print ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : ',XMAXC
-#
-# --- caracteristiques de la fissure ---
-#
- SAIN = 0
- FISLON = 0
- FISCOU = 0
- THETA = 0.0
- TFISS = None
- if FISS_SOUDURE==None :
- SAIN = 1
- else :
- if FISS_SOUDURE['TYPE']=='LONGUE' : FISLON = 1
- elif FISS_SOUDURE['TYPE']=='COURTE' : FISCOU = 1
- THETA = FISS_SOUDURE['AZIMUT' ]
- EPS = FISS_SOUDURE['ANGL_OUVERTURE']
- AXIS = FISS_SOUDURE['AXIS' ]
- POSI = FISS_SOUDURE['POSITION' ]
- TFISS = FISS_SOUDURE['FISSURE' ]
- A = FISS_SOUDURE['PROFONDEUR' ]
- if FISS_SOUDURE['LONGUEUR' ]!=None :
- C = FISS_SOUDURE['LONGUEUR' ]
- N1 = 1
- else : N1 = 0
- if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) :
- print ' <MACR_ASPIC_MAIL> erreur donnees'
- print ' <MACR_ASPIC_MAIL> dans le cas de fissures'
- print ' <MACR_ASPIC_MAIL> inclinees debouchant en peau interne avec'
- print ' <MACR_ASPIC_MAIL> piquage penetrant le jeu doit etre nul'
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- ZETA = 0.5
- if TFISS not in ('DEB_INT','DEB_EXT') :
- if FISS_SOUDURE['LIGA_INT']==None :
- print ' <MACR_ASPIC_MAIL> erreur donnees'
- print ' <MACR_ASPIC_MAIL> dans le cas de fissures internes'
- print ' <MACR_ASPIC_MAIL> (NON_DEB) le ligament inferieur est obligatoire'
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
- ier = ier+1
- return ier
- LIGA = FISS_SOUDURE['LIGA_INT']
- if POSI=='DROIT' :
- if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
- else : ZETA = (A+LIGA)/(EPT1+H)
- else :
- if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
- else : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
- if ZETA < 0.1 :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
- ier = ier+1
- return ier
- if ZETA > 0.9 :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
- ier = ier+1
- return ier
- if LIGA < 0.1*EPC :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
- ier = ier+1
- return ier
- if (LIGA + 2.0*A) > 0.9*EPC :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
- ier = ier+1
- return ier
- if N1==0 :
- if FISCOU :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures courte il faut preciser la longueur ")
- ier = ier+1
- return ier
- if AXIS=='NON' :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ")
- ier = ier+1
- return ier
- C = 0.0
- else :
- if AXIS=='OUI' : print '<A> <MACR_ASPIC_MAIL> fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigne'
- C = 0.5 * C
- LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
-#
-# LPIQ est une valeur qui depend theoriquement de la fissure. la valeur
-# ci-dessous est approchee car elle ne sert qu'a calculer les facteurs d'etirement
-#
- LPIQ=pi*(DET1)
- if AXIS=='OUI' : C=100.0*LPIQ
- RAPL=LEQU/LPIQ
- if FISCOU :
- RAP=A/C
- CAS1=RAP<0.3499
- CAS3=RAP>0.4999
- CAS2= not (CAS1 or CAS3)
- if CAS1 : ALP=0.8
- if CAS2 : ALP=0.4
- if CAS3 : ALP=0.0
- BETA=1.0
- if GROS and not CAS1 :
- NDT=1
- NSDT=2
- else :
- NDT=2
- NSDT=4
-#
- if FISLON :
- if GROS :
- NDT=2
- FETIRF=30.*RAPL
- FETIRP=60.*RAPL
- else :
- NDT=3
- FETIRF=15.*RAPL
- FETIRP=30.*RAPL
-#
- RC0 = FISS_SOUDURE['RAYON_TORE']
- if (FISCOU and RC0==None) :
- if GROS : RC0=0.12
- else : RC0=0.10
- if CAS1 : RC0=0.08
- RC0=RC0*A
- if (FISLON and RC0==None) : RC0=A/(NDT+1)
-#
- RC1 = FISS_SOUDURE['COEF_MULT_RC1']
- if (FISCOU and RC1==None) :
- if GROS : RC1=1.2
- else : RC1=1.0
-#
- RC2 = FISS_SOUDURE['COEF_MULT_RC2']
- if (FISCOU and RC2==None) :
- if GROS : RC2=1.4
- else : RC2=1.2
-#
- RC3 = FISS_SOUDURE['COEF_MULT_RC3']
- if (FISCOU and RC3==None) :
- if GROS :
- if CAS1 : RC3=2.5
- else : RC3=1.0 # valeur non utilisee
- else :
- if CAS3 : RC3=2.2
- else : RC3=2.0
-#
- NT = FISS_SOUDURE['NB_TRANCHE']
- if (FISCOU and NT==None) :
- if GROS : NT = 8
- else : NT = 16
- if CAS1 : NT = NT*2
- if (FISLON and NT==None) : NT=0
-#
- NS = FISS_SOUDURE['NB_SECTEUR']
- if (FISCOU and NS==None) :
- if GROS : NS = 2
- else : NS = 4
- if (FISLON and NS==None) :
- if GROS : NS = 2
- else : NS = 4
-#
- NC = FISS_SOUDURE['NB_COURONNE']
- if (FISCOU and NC==None) :
- if GROS : NC = 3
- else : NC = 4
- if (FISLON and NC==None) :
- if GROS : NC = 3
- else : NC = 4
-#
- loc_gibi=aster.repout()
- logiel = EXEC_MAILLAGE['LOGICIEL' ]
- UNITD = EXEC_MAILLAGE['UNITE_DATG']
- UNITS = EXEC_MAILLAGE['UNITE_MGIB']
- if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
- elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
- else :
- self.cr.fatal("<F> <MACR_ASPIC_MAIL> seuls gibi98 et gibi2000 sont appelableS")
- ier = ier+1
- return ier
-#
-# --- ecriture sur le fichier .datg de la procedure ---
-#
-# Nom du fichier de commandes pour GIBI
- nomFichierDATG = 'fort.'+str(UNITD)
-# Nom du fichier de maillage GIBI
- nomFichierGIBI = 'fort.'+str(UNITS)
- loc_datg = aster.repdex()
- if SAIN : write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
- ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
- ITYPSO, DPENE, NIVMAG,loc_datg)
- if FISLON : write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
- ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
- A,C,EPS, RC0,NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
- TFISS,ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
- if FISCOU : write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
- H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
- THETA, A, C, EPS, RC0, RC1, RC2, RC3,
- ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
- ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
-#
- EXEC_LOGICIEL( LOGICIEL = logiel ,
- ARGUMENT = ( _F(NOM_PARA=nomFichierDATG),
- _F(NOM_PARA=nomFichierGIBI), ), )
-#
- PRE_GIBI()
-#
- __MAPROV=LIRE_MAILLAGE(INFO=INFO)
-#
- motscles={}
- motscles['CREA_GROUP_MA']=[]
- l_CREA_GROUP_NO=[]
- if SAIN :
- l_CREA_GROUP_NO.append('S_LAT1')
- l_CREA_GROUP_NO.append('S_LAT2')
- else :
- l_CREA_GROUP_NO.append('S_LAT1_C')
- l_CREA_GROUP_NO.append('S_LAT2_C')
- l_CREA_GROUP_NO.append('S_LAT1_T')
- l_CREA_GROUP_NO.append('S_LAT2_T')
- if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
- l_CREA_GROUP_NO.append('PFONDINF')
- l_CREA_GROUP_NO.append('PFONDSUP')
- else :
- l_CREA_GROUP_NO.append('PFONDFIS')
- if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
- motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
- NOM = 'MAIL_ORI',
- POSITION = 'INIT' ))
- if (TFISS[:4]=='DEB_') and (AXIS=='OUI') :
- motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
- NOM = 'MAIL_ORI',
- POSITION = 'INIT' ))
- if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
- motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_SUP',
- NOM = 'MA_ORI_S',
- POSITION = 'INIT' ))
- motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_INF',
- NOM = 'MA_ORI_I',
- POSITION = 'INIT' ))
- l_CREA_GROUP_NO.append('S_FOND1')
- l_CREA_GROUP_NO.append('S_FOND2')
- l_CREA_GROUP_NO.append('EQUERRE')
- motscles['CREA_GROUP_NO']=_F(GROUP_MA=l_CREA_GROUP_NO)
-#
- __MAPROV=DEFI_GROUP(reuse =__MAPROV,
- MAILLAGE=__MAPROV,
- **motscles )
-#
- if not SAIN :
- motscles={}
- motscles['CREA_GROUP_NO']=[]
- if not (TFISS=='NON_DEB') :
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
- if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
- __MAPROV=DEFI_GROUP(reuse =__MAPROV,
- MAILLAGE=__MAPROV,
- **motscles )
-#
- __MAPROV=MODI_MAILLAGE(reuse =__MAPROV,
- MAILLAGE=__MAPROV,
- EQUE_PIQUA=_F( GROUP_NO = 'EQUERRE' ,
- E_BASE = EPT1 ,
- DEXT_BASE = DET1 ,
- L_BASE = D1 ,
- L_CHANF = D2 ,
- TYPE = TYPSOU,
- H_SOUD = H ,
- ANGL_SOUD = ALPHA ,
- JEU_SOUD = JEU ,
- E_CORP = EPC ,
- DEXT_CORP = DEC ,
- AZIMUT = THETA ,
- RAFF_MAIL = TYPMAI,
- X_MAX = XMAX , )
- )
-#
- __MODELE=AFFE_MODELE( MAILLAGE=__MAPROV,
- AFFE=_F( GROUP_MA = ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU'),
- PHENOMENE = 'MECANIQUE' ,
- MODELISATION = '3D' , )
- )
-#
- motscles={}
- if TFISS=='DEB_INT' :
- motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
- else :
- motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
- __MAPROV=MODI_MAILLAGE(reuse =__MAPROV,
- MAILLAGE=__MAPROV,
- MODELE =__MODELE,
- **motscles
- )
-#
- if SAIN :
- __MAPROV=DEFI_GROUP(reuse = __MAPROV,
- MAILLAGE = __MAPROV,
- CREA_GROUP_NO = _F(GROUP_MA=('NIDXT','NEDXT','NIIXT','NEIXT')) )
-#
- for i in range(1,NBAZIT+1):
- prec = EPC / 5.0
- __MAPROV=DEFI_GROUP(reuse = __MAPROV,
- MAILLAGE = __MAPROV,
- CREA_GROUP_NO = ( _F( NOM = 'NID'+str(i) ,
- GROUP_NO = 'NIDXT' ,
- NUME_INIT = i ,
- NUME_FIN = i ,),
- _F( NOM = 'NED'+str(i) ,
- GROUP_NO = 'NEDXT' ,
- NUME_INIT = i ,
- NUME_FIN = i ,),
- _F( NOM = 'NII'+str(i) ,
- GROUP_NO = 'NIIXT' ,
- NUME_INIT = i ,
- NUME_FIN = i ,),
- _F( NOM = 'NEI'+str(i) ,
- GROUP_NO = 'NEIXT' ,
- NUME_INIT = i ,
- NUME_FIN = i ,),
- _F( NOM = 'LDN'+str(i) ,
- GROUP_MA = 'LD' +str(i) ,),
- _F( NOM = 'LD' +str(i) ,
- GROUP_NO = 'LDN'+str(i) ,
- OPTION = 'SEGM_DROI_ORDO',
- PRECISION = prec ,
- CRITERE = 'ABSOLU' ,
- GROUP_NO_ORIG = 'NID'+str(i),
- GROUP_NO_EXTR = 'NED'+str(i),),
- _F( NOM = 'LIN'+str(i) ,
- GROUP_MA = 'LI' +str(i) ,),
- _F( NOM = 'LI' +str(i) ,
- GROUP_NO = 'LIN'+str(i) ,
- OPTION = 'SEGM_DROI_ORDO',
- PRECISION = prec ,
- CRITERE = 'ABSOLU' ,
- GROUP_NO_ORIG = 'NII'+str(i),
- GROUP_NO_EXTR = 'NEI'+str(i),),))
-#
-#
-# --- commande CREA_MAILLAGE ---
-#
- self.DeclareOut('nomres',self.sd)
- nomres=CREA_MAILLAGE( MAILLAGE=__MAPROV,
- CREA_POI1 = ( _F( NOM_GROUP_MA = 'P1_CORP ' ,
- GROUP_NO = 'P1_CORP ' , ),
- _F( NOM_GROUP_MA = 'P2_CORP ' ,
- GROUP_NO = 'P2_CORP ' , ),
- _F( NOM_GROUP_MA = 'P_TUBU ' ,
- GROUP_NO = 'P_TUBU ' , ),)
- )
-#
- if IMPRESSION!=None:
- for impr in IMPRESSION :
-#
- motscles={}
- if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
- if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI']=impr['NIVE_GIBI']
- if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
- impr_resu = _F( MAILLAGE = nomres,)
-#
- IMPR_RESU( RESU = impr_resu,
- FORMAT = impr['FORMAT'],**motscles )
-#
- return ier
-
+++ /dev/null
-#@ MODIF macr_cabri_calc_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-
-def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER,
- CHAR_MECA,RESU_THER,
- AFFE_MATERIAU,DEFI_CHAR_THER,DEFI_CHAR_MECA,RELATION,SOLVEUR,CONVERGENCE,NEWTON,
- INCREMENT,CHAM_MATER,**args):
- """
- Ecriture de la macro MACR_CABRI_CALC
- """
-
- #################################################################
- ########## PREPARATION MACRO
- #################################################################
-
- from Accas import _F
-
- ier =0
-
- # On met certains mots-clefs dans des variables locales pour les proteger
- affemateriau = AFFE_MATERIAU
- mail = MAILLAGE
-
-
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- DEFI_GROUP = self.get_cmd('DEFI_GROUP')
- AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU')
- AFFE_MODELE = self.get_cmd('AFFE_MODELE')
- MODI_MAILLAGE = self.get_cmd('MODI_MAILLAGE')
- AFFE_CHAR_THER_F = self.get_cmd('AFFE_CHAR_THER_F')
- AFFE_CHAR_THER = self.get_cmd('AFFE_CHAR_THER')
- AFFE_CHAR_MECA_F = self.get_cmd('AFFE_CHAR_MECA_F')
- AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA')
- DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
- DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
- THER_LINEAIRE = self.get_cmd('THER_LINEAIRE')
- STAT_NON_LINE = self.get_cmd('STAT_NON_LINE')
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
- # Le concept sortant (de type evol_noli) est nomme 'resumeca' dans
- # le contexte de la macro
- self.DeclareOut('resumeca',self.sd)
- self.DeclareOut('mail',MAILLAGE)
-
- #################################################################
- ########## PREPARATION DES MODELES
- #################################################################
-
- # Definition des groupes
- mail=DEFI_GROUP(reuse =mail,MAILLAGE=mail,
- CREA_GROUP_NO=(
- _F(GROUP_MA='M_GOU',NOM='N_M_GOU',),
- _F(GROUP_MA='M_JOI',NOM='N_M_JOI',),
- _F(GROUP_MA='SCBJ',NOM='N_SCBJ',),
- _F(GROUP_MA='SCJB',NOM='N_SCJB',),
- _F(GROUP_MA='M_L_AA',NOM='N_M_L_AA',),
- _F(GROUP_MA='SCEG',NOM='N_SCEG',),
- _F(GROUP_MA='SCGE',NOM='N_SCGE',),),)
-
- # Creation du modele thermique
- if MODELE_THER != None:
- self.DeclareOut('modther',MODELE_THER)
-
- modther=AFFE_MODELE(MAILLAGE=mail,
- AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
- 'M_L_AA','M_INT','M_L_SA','M_EXT','SCEG','SCGE',),
- PHENOMENE='THERMIQUE',
- MODELISATION='3D_DIAG',),
- );
-
- # Creation du modele mecanique
- if MODELE_MECA != None:
- self.DeclareOut('modmeca',MODELE_MECA)
-
- modmeca = AFFE_MODELE(MAILLAGE=mail,
- AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
- 'M_L_AA','M_L_SA','SCEG','SCGE','M_INT','M_EXT',),
- PHENOMENE='MECANIQUE',
- MODELISATION='3D',),
- );
-
- # Orientation des mailles
- mail=MODI_MAILLAGE(reuse =mail,
- MAILLAGE=mail,
- ORIE_PEAU_3D=(_F(GROUP_MA=('M_INT','M_TUB',),),
- _F(GROUP_MA=('M_L_AA','M_JOI','M_L_SA',),),),
- MODELE=modmeca,);
-
-
-
- # Affectation des materiaux
- if CHAM_MATER != None:
- self.DeclareOut('_cham',CHAM_MATER)
- motscles={}
- motscles['AFFE']=[]
- for mat in affemateriau:
- if mat['TOUT'] == None:
- # Creation de mots-cles pour les AFFE_CHAR_MECA
- motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
- MATER = mat['MATER'],
- TEMP_REF = mat['TEMP_REF'],) )
- else:
- # Creation de mots-cles pour les AFFE_CHAR_MECA
- motscles['AFFE'].append(_F(TOUT='OUI',
- MATER = mat['MATER'],
- TEMP_REF = mat['TEMP_REF'],) )
-
- _cham = AFFE_MATERIAU(MAILLAGE=mail,
- MODELE=modther,
- AFFE=motscles['AFFE'],
- )
-
- #################################################################
- ########## CONDITIONS AUX LIMITES THERMIQUES
- #################################################################
- # Recuperation des parametres thermiques
-
- if DEFI_CHAR_THER != None:
- temp_ini = DEFI_CHAR_THER['TEMP_INIT']
- if DEFI_CHAR_THER['COEF_H_FLUI']!=None:
- coef_int = DEFI_CHAR_THER['COEF_H_FLUI']
- else:
- coef_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.016,
- 7200.0,0.016,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None:
- temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI']
- else:
- temp_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
- 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- if DEFI_CHAR_THER['COEF_H_AIR']!=None:
- coef_ext = DEFI_CHAR_THER['COEF_H_AIR']
- else:
- coef_ext = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,1e-05,7200.0,1e-05,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
-
- if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None:
- temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR']
- else:
- temp_ext = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,20.0,7200.0,20.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- if DEFI_CHAR_THER['LIST_INST']!=None:
- transi1 = DEFI_CHAR_THER['LIST_INST']
- else:
- transi1 = DEFI_LIST_REEL(DEBUT=0.0,
- INTERVALLE=(_F(JUSQU_A=1.0,
- NOMBRE=1,),
- _F(JUSQU_A=11.0,
- NOMBRE=10,),
- _F(JUSQU_A=600.0,
- NOMBRE=10,),
- _F(JUSQU_A=610.0,
- NOMBRE=30,),
- _F(JUSQU_A=1800.0,
- NOMBRE=30,),
- _F(JUSQU_A=7200.0,
- NOMBRE=10,),),);
- else:
- temp_ini = DEFI_CHAR_THER['TEMP_INIT']
- coef_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.016,
- 7200.0,0.016,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- temp_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
- 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- coef_ext = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,1e-05,7200.0,1e-05,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- temp_ext = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,20.0,7200.0,20.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- transi1 = DEFI_LIST_REEL(DEBUT=0.0,
- INTERVALLE=(_F(JUSQU_A=1.0,
- NOMBRE=1,),
- _F(JUSQU_A=11.0,
- NOMBRE=10,),
- _F(JUSQU_A=600.0,
- NOMBRE=10,),
- _F(JUSQU_A=610.0,
- NOMBRE=30,),
- _F(JUSQU_A=1800.0,
- NOMBRE=30,),
- _F(JUSQU_A=7200.0,
- NOMBRE=10,),),);
- # Que sauver ?
- if CHAR_THER != None:
- for m in CHAR_THER:
- if m['TYPE']=="BRIDE_FLUIDE":
- self.DeclareOut('cl_th1',m['CHARGE'])
- if m['TYPE']=="BRIDE_AIR":
- self.DeclareOut('cl_th2',m['CHARGE'])
- if m['TYPE']=="ECROU_GOUJON":
- self.DeclareOut('cl_th3',m['CHARGE'])
- if m['TYPE']=="BRIDE_JOINT":
- self.DeclareOut('cl_th4',m['CHARGE'])
-
- # Echanges thermiques internes entre le fluide et la bride
- cl_th1=AFFE_CHAR_THER_F(MODELE=modther,
- ECHANGE=_F(GROUP_MA = 'M_INT',
- COEF_H = coef_int,
- TEMP_EXT = temp_int,),);
-
- # Echanges thermiques externes entre bride et air ambiant
- cl_th2=AFFE_CHAR_THER_F(MODELE=modther,
- ECHANGE=_F(GROUP_MA='M_EXT',
- COEF_H=coef_ext,
- TEMP_EXT=temp_ext,),);
-
- # Echanges thermiques entre ecrou et goujon
- cl_th3=AFFE_CHAR_THER(MODELE=modther,
- LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
- GROUP_NO_2='N_SCGE',
- DDL_1='TEMP',
- COEF_MULT_1=1.0,
- DDL_2='TEMP',
- COEF_MULT_2=-1.0,
- COEF_IMPO=0.0,),);
-
- # Echanges thermiques entre bride et joint
- cl_th4=AFFE_CHAR_THER(MODELE=modther,
- LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ',
- GROUP_NO_2='N_SCJB',
- DDL_1='TEMP',
- COEF_MULT_1=1.0,
- DDL_2='TEMP',
- COEF_MULT_2=-1.0,
- COEF_IMPO=0.0,),);
-
-
-
- #################################################################
- ########## CALCUL THERMIQUE
- #################################################################
- if RESU_THER != None:
- self.DeclareOut('resuther',RESU_THER)
-
- resuther=THER_LINEAIRE(MODELE=modther,
- CHAM_MATER=_cham,
- EXCIT=(_F(CHARGE=cl_th1,),
- _F(CHARGE=cl_th2,),
- _F(CHARGE=cl_th3,),
- _F(CHARGE=cl_th4,),),
- INCREMENT=_F(LIST_INST=transi1,),
- TEMP_INIT=_F(VALE=temp_ini,),
- TITRE='CABRI THERMIQUE &DATE &HEURE',);
-
- #################################################################
- ########## CONDITIONS AUX LIMITES MECANIQUES
- #################################################################
- # Recuperation des parametres mecaniques
- if DEFI_CHAR_MECA != None:
- if DEFI_CHAR_MECA['PRETENS']!=None:
- f_pret = DEFI_CHAR_MECA['PRETENS']
- else:
- f_pret=DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.0,1.0,-0.02,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- if DEFI_CHAR_MECA['PRES_REP']!=None:
- pre_int = DEFI_CHAR_MECA['PRES_REP']
- else:
- pre_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- if DEFI_CHAR_MECA['EFFE_FOND']!=None:
- eff_fond = DEFI_CHAR_MECA['EFFE_FOND']
- else:
- eff_fond=DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- else:
- f_pret=DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.0,1.0,-0.02,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
-
- pre_int = DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
-
- eff_fond=DEFI_FONCTION(NOM_PARA='INST',
- VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
- PROL_DROITE='CONSTANT',
- PROL_GAUCHE='CONSTANT',);
- # Que sauver ?
- if CHAR_MECA != None:
- for m in CHAR_MECA:
- if m['TYPE']=="BLOC_BAS_GOUJ":
- self.DeclareOut('cl_me1',m['CHARGE'])
- if m['TYPE']=="BLOC_BAS_JOINT":
- self.DeclareOut('cl_me2',m['CHARGE'])
- if m['TYPE']=="BLOC_LAT_ALES":
- self.DeclareOut('cl_me3',m['CHARGE'])
- if m['TYPE']=="BLOC_LAT_NALES":
- self.DeclareOut('cl_me4',m['CHARGE'])
- if m['TYPE']=="PLAN_TUBE":
- self.DeclareOut('cl_me5',m['CHARGE'])
- if m['TYPE']=="PRES_FLU":
- self.DeclareOut('cl_me6',m['CHARGE'])
- if m['TYPE']=="EFFET_FOND":
- self.DeclareOut('cl_me7',m['CHARGE'])
- if m['TYPE']=="CONT_JOINT":
- self.DeclareOut('cl_me8',m['CHARGE'])
- if m['TYPE']=="DEFO_THER":
- self.DeclareOut('cl_me9',m['CHARGE'])
- if m['TYPE']=="SERR_ECROU_1":
- self.DeclareOut('cl_me10',m['CHARGE'])
- if m['TYPE']=="SERR_ECROU_2":
- self.DeclareOut('cl_me11',m['CHARGE'])
-
-
- # Blocage bas du goujon
- cl_me1=AFFE_CHAR_MECA(MODELE=modmeca,
- DDL_IMPO=_F(GROUP_NO='N_M_GOU',
- DZ=0.0,),
- INFO=2,);
- # Blocage bas du joint
- cl_me2=AFFE_CHAR_MECA(MODELE=modmeca,
- DDL_IMPO=_F(GROUP_NO='N_M_JOI',
- DZ=0.0,),
- INFO=2,);
-
- # Blocage lateral, face laterale avec alesage
- cl_me3=AFFE_CHAR_MECA(MODELE=modmeca,
- DDL_IMPO=_F(GROUP_NO='N_M_L_AA',
- DY=0.0,),
- INFO=2,);
-
- # Face laterale sans alesage
- cl_me4=AFFE_CHAR_MECA(MODELE=modmeca,
- FACE_IMPO=_F(GROUP_MA='M_L_SA',
- DNOR=0.0,),
- INFO=2,);
-
- # Condition de planeite de la face de coupe du tube
- cl_me5=AFFE_CHAR_MECA(MODELE=modmeca,
- LIAISON_UNIF=_F(GROUP_MA='M_TUB',
- DDL='DZ',),
- INFO=2,);
- # Pression due au fluide
- cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca,
- PRES_REP=_F(GROUP_MA='M_INT',
- PRES=pre_int,),
- INFO=2,);
-
- # Effet de fond
- cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca,
- PRES_REP=_F(GROUP_MA='M_TUB',
- PRES=eff_fond,),
- INFO=2,);
-
- # Contact zone de joint
- cl_me8=AFFE_CHAR_MECA(MODELE=modmeca,
- CONTACT=_F(GROUP_MA_MAIT='SCBJ',
- GROUP_MA_ESCL='SCJB',),
- INFO=2,);
- # Deformation thermique
- cl_me9=AFFE_CHAR_MECA( MODELE=modmeca,
- TEMP_CALCULEE=resuther,
- INFO=2,);
-
- # Serrage ecrou/goujon (pre-tensionnement)
- cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca,
- LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
- GROUP_NO_2='N_SCGE',
- DDL_1='DZ',
- COEF_MULT_1=1.0,
- DDL_2='DZ',
- COEF_MULT_2=-1.0,
- COEF_IMPO=f_pret,),
- INFO=2,);
-
- cl_me11=AFFE_CHAR_MECA(MODELE=modmeca,
- LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
- GROUP_NO_2='N_SCGE',
- DDL_1='DX',
- COEF_MULT_1=1.0,
- DDL_2='DX',
- COEF_MULT_2=-1.0,
- COEF_IMPO=0.0,),
- INFO=2,);
-
-
- #################################################################
- ########## CALCUL MECANIQUE
- #################################################################
- # Options de convergence
- solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
-
- # Elimination des valeurs "None"
- for i in solveur.keys():
- if solveur[i]==None : del solveur[i]
-
-
- transi2 = DEFI_LIST_REEL(DEBUT=0.0,
- INTERVALLE=(_F(JUSQU_A=1.0,
- NOMBRE=2,),
- _F(JUSQU_A=11.0,
- NOMBRE=20,),
- _F(JUSQU_A=600.0,
- NOMBRE=20,),
- _F(JUSQU_A=610.0,
- NOMBRE=20,),
- _F(JUSQU_A=1800.0,
- NOMBRE=20,),
- _F(JUSQU_A=7200.0,
- NOMBRE=20,),),);
-
- # Options d'incrementation
- if INCREMENT != None:
- if INCREMENT['LIST_INST'] != None:
- listinst = INCREMENT['LIST_INST']
- else:
- listinst = transi2
-
- increment=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
-
- # Elimination des valeurs "None"
- for i in increment.keys():
- if increment[i]==None : del increment[i]
-
- increment['LIST_INST'] = listinst
-
- else:
- listinst = transi2
- increment =_F(
- LIST_INST = listinst,
- ),
-
- # Options de Newton
- newton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
- # Elimination des valeurs "None"
- for i in newton.keys():
- if newton[i]==None : del newton[i]
-
- # Options de convergence
- convergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
- # Elimination des valeurs "None"
- for i in convergence.keys():
- if convergence[i]==None : del convergence[i]
-
- # Options de comportement
- # Type incremental (=1) ou elastique (=0)
- comp_incr = 0
- if RELATION:
- relation=RELATION
- if relation == 'VMIS_ISOT_TRAC':
- comp_incr = 1
- else:
- comp_incr = 0
- else:
- relation = 'ELAS'
- comp_incr = 0
-
-
- # Parametres du calcul
- if comp_incr == 1:
- resumeca=STAT_NON_LINE(MODELE=modmeca,
- CHAM_MATER=_cham,
- EXCIT=(_F(CHARGE=cl_me1,),
- _F(CHARGE=cl_me2,),
- _F(CHARGE=cl_me3,),
- _F(CHARGE=cl_me4,),
- _F(CHARGE=cl_me5,),
- _F(CHARGE=cl_me6,),
- _F(CHARGE=cl_me7,),
- _F(CHARGE=cl_me8,),
- _F(CHARGE=cl_me9,),
- _F(CHARGE=cl_me10,),
- _F(CHARGE=cl_me11,),
- ),
- SOLVEUR = solveur,
- COMP_INCR =_F(RELATION=relation,),
- NEWTON = newton,
- INCREMENT = increment,
- CONVERGENCE = convergence,
- TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
- else:
- resumeca=STAT_NON_LINE(MODELE=modmeca,
- CHAM_MATER=_cham,
- EXCIT=(_F(CHARGE=cl_me1,),
- _F(CHARGE=cl_me2,),
- _F(CHARGE=cl_me3,),
- _F(CHARGE=cl_me4,),
- _F(CHARGE=cl_me5,),
- _F(CHARGE=cl_me6,),
- _F(CHARGE=cl_me7,),
- _F(CHARGE=cl_me8,),
- _F(CHARGE=cl_me9,),
- _F(CHARGE=cl_me10,),
- _F(CHARGE=cl_me11,),
- ),
- SOLVEUR = solveur,
- COMP_ELAS =_F(RELATION=relation,),
- NEWTON = newton,
- INCREMENT = increment,
- CONVERGENCE = convergence,
- TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
-
- return ier
-
+++ /dev/null
-#@ MODIF macr_cabri_mail_dat Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-# Données pour les brides standards
-
-
-
-# Pour ajouter une bride x:
-# Définir un dico_bride_x comme ci-dessous puis ajoutez-le à dico_bride_std
-
-# dictionnaire pour la description des variables
-dico_var_geo = {'nbgouj':'Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)',
- 'dint':'Diamètre intérieur de la bride (BRID_D_INT)',
- 'dex1':'Diamétre extérieur de la conduite (TUBU_D_EXT)',
- 'dex2':'Position (diamètre) du congé de la bride (BRID_D_CONGE)',
- 'dex3':'Diamètre de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_D_EPAUL)',
- 'dtrou':'Position des alésages de la bride permettant l''introduction des goujons (BRID_P_ALESAG)',
- 'dext':'Diamètre extérieur de la bride (BRID_D_EXT)',
- 'dt':'Diamètre des alésages de la bride permettant l''introduction des goujons (BRID_D_ALESAG)',
- 'drd':'Diamètre de la rondelle (GOUJ_D_RONDEL)',
- 'dg':'Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)',
- 'dec':'Diamètre de l''écrou (GOUJ_D_ECROU)',
- 'rcong':'Rayon du congé de la bride (BRID_R_CONGE)',
- 'he':'Epaisseur de la rondelle (GOUJ_E_RONDEL)',
- 'e':'Epaisseur de l''écrou (GOUJ_E_ECROU)',
- 'hc1':'Hauteur de la bride (BRID_H)',
- 'hcg1':'Hauteur de conduite (TUBU_H)',
- 'hb':'Hauteur de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_H_EPAUL)',
- 'htrou':'Hauteur des alésages de la bride permettant l''introduction des goujons (BRID_H_ALESAG)',
- 'pf':'Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)',
- 'j':'Epaisseur du joint au niveau de l''interface d''étanchéité (ETAN_E_JOINT)'}
-
-dico_var_msh = {'nrad':'Nombre d''éléments radiaux (NBR_RAD)',
- 'ncir':'Nombre d''éléments circonférentiels (NBR_CIR)',
- 'nver':'Nombre d''éléments verticaux (NBR_VER)',
- 'nsect':'Nombre d''éléments de l''alésage (NBR_ALE)',
- 'temps':'Temps d''analyse'}
-
-# dictionnaires des brides standards
-dico_bride_A = {'nbgouj': 4,
- 'dint': 15.76,
- 'dex1': 21.3,
- 'dex2': 38.,
- 'dex3': 48.,
- 'dtrou': 67.,
- 'dext': 95.,
- 'dt': 14.,
- 'drd': 25.,
- 'dg': 12.,
- 'dec': 18.,
- 'rcong': 3.,
- 'he': 12.,
- 'e': 2.5,
- 'hc1': 46.5,
- 'hcg1': 20,
- 'hb': 1.5,
- 'htrou': 20.,
- 'pf': 1.5,
- 'j': 2}
-
-dico_bride_AA = {'nbgouj': 32,
- 'dint': 336.5,
- 'dex1': 355.6,
- 'dex2': 395.,
- 'dex3': 415.,
- 'dtrou': 460.,
- 'dext': 515.,
- 'dt': 22.,
- 'drd': 36.,
- 'dg': 20.,
- 'dec': 30.,
- 'rcong': 5.,
- 'he': 20.,
- 'e': 3.,
- 'hc1': 115.,
- 'hcg1': 115./2.,
- 'hb': 3.,
- 'htrou': 47.,
- 'pf': 2.2,
- 'j': 2}
-
-dico_bride_B = {'nbgouj': 4,
- 'dint': 26.64,
- 'dex1': 33.4,
- 'dex2': 53.,
- 'dex3': 63.,
- 'dtrou': 88.,
- 'dext': 123.,
- 'dt': 16.,
- 'drd': 27.,
- 'dg': 14.,
- 'dec': 21.,
- 'rcong': 4.,
- 'he': 14.,
- 'e': 2.5,
- 'hc1': 59.,
- 'hcg1': 59./2.,
- 'hb': 1.5,
- 'htrou': 27.5,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_B1 = {'nbgouj': 4,
- 'dint': 24.3,
- 'dex1': 33.4,
- 'dex2': 53.,
- 'dex3': 63.,
- 'dtrou': 88.,
- 'dext': 123.,
- 'dt': 16.,
- 'drd': 27.,
- 'dg': 14.,
- 'dec': 21.,
- 'rcong': 4.,
- 'he': 14.,
- 'e': 2.5,
- 'hc1': 59.,
- 'hcg1': 59./2.,
- 'hb': 1.5,
- 'htrou': 27.5,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_C = {'nbgouj': 8,
- 'dint': 52.48,
- 'dex1': 60.3,
- 'dex2': 84.,
- 'dex3': 100.,
- 'dtrou': 127.,
- 'dext': 165.,
- 'dt': 18.,
- 'drd': 30,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 4.,
- 'he': 16.,
- 'e': 3,
- 'hc1': 70.,
- 'hcg1': 70./2.,
- 'hb': 1.5,
- 'htrou': 21.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_D = {'nbgouj': 8,
- 'dint': 42.9,
- 'dex1': 60.3,
- 'dex2': 84.,
- 'dex3': 100.,
- 'dtrou': 127.,
- 'dext': 165.,
- 'dt': 18.,
- 'drd': 30,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 87.6,
- 'hcg1': 87.6/2.,
- 'hb': 1.5,
- 'htrou': 38.5,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_D1 = {'nbgouj': 8,
- 'dint': 49.22,
- 'dex1': 60.3,
- 'dex2': 84.,
- 'dex3': 100.,
- 'dtrou': 127.,
- 'dext': 165.,
- 'dt': 18.,
- 'drd': 30,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 87.6,
- 'hcg1': 87.6/2.,
- 'hb': 1.5,
- 'htrou': 38.5,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_E = {'nbgouj': 8,
- 'dint': 83.1,
- 'dex1': 88.9,
- 'dex2': 117.5,
- 'dex3': 135.,
- 'dtrou': 165.,
- 'dext': 209.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 80.,
- 'hcg1': 80./2.,
- 'hb': 2.,
- 'htrou': 27.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_F = {'nbgouj': 8,
- 'dint': 73.66,
- 'dex1': 88.9,
- 'dex2': 117.5,
- 'dex3': 135.,
- 'dtrou': 165.,
- 'dext': 209.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 89.,
- 'hcg1': 89./2.,
- 'hb': 2.,
- 'htrou': 36.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_FF = {'nbgouj': 32,
- 'dint': 396.99,
- 'dex1': 406.4,
- 'dex2': 440.,
- 'dex3': 455.,
- 'dtrou': 485.,
- 'dext': 535.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 99.,
- 'hcg1': 99./2.,
- 'hb': 3.,
- 'htrou': 40.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_G = {'nbgouj': 12,
- 'dint': 66.7,
- 'dex1': 88.9,
- 'dex2': 117.5,
- 'dex3': 135.,
- 'dtrou': 165.,
- 'dext': 209.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 98.,
- 'hcg1': 98./2.,
- 'hb': 2.,
- 'htrou': 45.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_GG = {'nbgouj': 36,
- 'dint': 381.,
- 'dex1': 406.4,
- 'dex2': 445.,
- 'dex3': 460.,
- 'dtrou': 495.,
- 'dext': 545.,
- 'dt': 22.,
- 'drd': 36,
- 'dg': 20.,
- 'dec': 30.,
- 'rcong': 5.,
- 'he': 20.,
- 'e': 3.,
- 'hc1': 129.,
- 'hcg1': 129./2.,
- 'hb': 3.,
- 'htrou': 63.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_H = {'nbgouj': 12,
- 'dint': 108.2,
- 'dex1': 114.3,
- 'dex2': 146.,
- 'dex3': 157.,
- 'dtrou': 190.,
- 'dext': 225.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 89.,
- 'hcg1': 89./2.,
- 'hb': 2.,
- 'htrou': 33.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_H1 = {'nbgouj': 12,
- 'dint': 102.6,
- 'dex1': 114.3,
- 'dex2': 146.,
- 'dex3': 157.,
- 'dtrou': 190.,
- 'dext': 225.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 89.,
- 'hcg1': 89./2.,
- 'hb': 2.,
- 'htrou': 33.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_I = {'nbgouj': 18,
- 'dint': 92.1,
- 'dex1': 114.3,
- 'dex2': 146.,
- 'dex3': 160.,
- 'dtrou': 200.,
- 'dext': 255.,
- 'dt': 20.,
- 'drd': 32.,
- 'dg': 18.,
- 'dec': 27.,
- 'rcong': 5.,
- 'he': 18.,
- 'e': 3.,
- 'hc1': 99.,
- 'hcg1': 99./2.,
- 'hb': 2.,
- 'htrou': 43.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_J = {'nbgouj': 18,
- 'dint': 87.34,
- 'dex1': 114.3,
- 'dex2': 146.,
- 'dex3': 160.,
- 'dtrou': 200.,
- 'dext': 255.,
- 'dt': 20.,
- 'drd': 32.,
- 'dg': 18.,
- 'dec': 27.,
- 'rcong': 5.,
- 'he': 18.,
- 'e': 3.,
- 'hc1': 111.,
- 'hcg1': 111./2.,
- 'hb': 2.,
- 'htrou': 55.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_J1 = {'nbgouj': 18,
- 'dint': 87.3,
- 'dex1': 114.3,
- 'dex2': 146.,
- 'dex3': 160.,
- 'dtrou': 200.,
- 'dext': 255.,
- 'dt': 22.,
- 'drd': 36.,
- 'dg': 20.,
- 'dec': 30.,
- 'rcong': 5.,
- 'he': 20.,
- 'e': 3.,
- 'hc1': 111.,
- 'hcg1': 111./2.,
- 'hb': 2.,
- 'htrou': 55.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_K = {'nbgouj': 8,
- 'dint': 161.5,
- 'dex1': 168.3,
- 'dex2': 192.,
- 'dex3': 210.,
- 'dtrou': 235.,
- 'dext': 280.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 84.,
- 'hcg1': 84./2.,
- 'hb': 2.,
- 'htrou': 28.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_L = {'nbgouj': 16,
- 'dint': 154.8,
- 'dex1': 168.3,
- 'dex2': 206.,
- 'dex3': 220.,
- 'dtrou': 255.,
- 'dext': 317.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 96.,
- 'hcg1': 96./2.,
- 'hb': 2.,
- 'htrou': 40.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_L1 = {'nbgouj': 16,
- 'dint': 154.8,
- 'dex1': 168.3,
- 'dex2': 206.,
- 'dex3': 220.,
- 'dtrou': 255.,
- 'dext': 317.,
- 'dt': 20.,
- 'drd': 32.,
- 'dg': 18.,
- 'dec': 27.,
- 'rcong': 5.,
- 'he': 18.,
- 'e': 3.,
- 'hc1': 96.,
- 'hcg1': 96./2.,
- 'hb': 2.,
- 'htrou': 40.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_M = {'nbgouj': 16,
- 'dint': 139.7,
- 'dex1': 168.3,
- 'dex2': 206.,
- 'dex3': 220.,
- 'dtrou': 250.,
- 'dext': 290.,
- 'dt': 24.,
- 'drd': 40.,
- 'dg': 22.,
- 'dec': 32.,
- 'rcong': 5.,
- 'he': 22.,
- 'e': 3.,
- 'hc1': 135.,
- 'hcg1': 135./2.,
- 'hb': 3.,
- 'htrou': 62.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_N = {'nbgouj': 12,
- 'dint': 131.9,
- 'dex1': 168.3,
- 'dex2': 220.,
- 'dex3': 240.,
- 'dtrou': 290.,
- 'dext': 365.,
- 'dt': 30.,
- 'drd': 48.,
- 'dg': 27.,
- 'dec': 41.,
- 'rcong': 5.,
- 'he': 27.,
- 'e': 4.,
- 'hc1': 148.,
- 'hcg1': 148./2.,
- 'hb': 3.,
- 'htrou': 75.,
- 'pf': 2.6,
- 'j': 2}
-dico_bride_O = {'nbgouj': 12,
- 'dint': 211.58,
- 'dex1': 219.1,
- 'dex2': 248.,
- 'dex3': 260.,
- 'dtrou': 292.,
- 'dext': 335.,
- 'dt': 20.,
- 'drd': 32.,
- 'dg': 18.,
- 'dec': 27.,
- 'rcong': 5.,
- 'he': 18.,
- 'e': 3.,
- 'hc1': 87.,
- 'hcg1': 87./2.,
- 'hb': 3.,
- 'htrou': 30.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_P = {'nbgouj': 16,
- 'dint': 202.74,
- 'dex1': 219.1,
- 'dex2': 248.,
- 'dex3': 260.,
- 'dtrou': 292.,
- 'dext': 335.,
- 'dt': 20.,
- 'drd': 32,
- 'dg': 18.,
- 'dec': 27.,
- 'rcong': 5.,
- 'he': 18.,
- 'e': 3.,
- 'hc1': 99.,
- 'hcg1': 99./2.,
- 'hb': 3.,
- 'htrou': 42.,
- 'pf': 2.2,
- 'j': 2}
-dico_bride_S = {'nbgouj': 16,
- 'dint': 264.62,
- 'dex1': 273.,
- 'dex2': 305.,
- 'dex3': 315.,
- 'dtrou': 350.,
- 'dext': 390.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 89.,
- 'hcg1': 89./2.,
- 'hb': 3.,
- 'htrou': 32.,
- 'pf': 1.7,
- 'j': 2}
-dico_bride_T = {'nbgouj': 16,
- 'dint': 254.56,
- 'dex1': 273.,
- 'dex2': 320.,
- 'dex3': 340.,
- 'dtrou': 385.,
- 'dext': 444.,
- 'dt': 27.,
- 'drd': 45.,
- 'dg': 24.,
- 'dec': 36.,
- 'rcong': 5.,
- 'he': 24.,
- 'e': 4.,
- 'hc1': 128.,
- 'hcg1': 128./2.,
- 'hb': 3.,
- 'htrou': 55.,
- 'pf': 2.6,
- 'j': 2}
-dico_bride_W = {'nbgouj': 28,
- 'dint': 314.76,
- 'dex1': 323.9,
- 'dex2': 360.,
- 'dex3': 385.,
- 'dtrou': 415.,
- 'dext': 460.,
- 'dt': 18.,
- 'drd': 30.,
- 'dg': 16.,
- 'dec': 24.,
- 'rcong': 5.,
- 'he': 16.,
- 'e': 3.,
- 'hc1': 96.,
- 'hcg1': 96./2.,
- 'hb': 3.,
- 'htrou': 37.,
- 'pf': 1.7,
- 'j': 2}
-
-
-# dictionnaire pour faire le lien entre l'option de bride et les valeurs normalisées
-dico_bride_std = {'AA':dico_bride_AA,
- 'A':dico_bride_A,
- 'B':dico_bride_B,
- 'B1':dico_bride_B1,
- 'C':dico_bride_C,
- 'D':dico_bride_D,
- 'D1':dico_bride_D1,
- 'E':dico_bride_E,
- 'F':dico_bride_F,
- 'FF':dico_bride_FF,
- 'G':dico_bride_G,
- 'GG':dico_bride_GG,
- 'H':dico_bride_H,
- 'H1':dico_bride_H1,
- 'I':dico_bride_I,
- 'J':dico_bride_J,
- 'J1':dico_bride_J1,
- 'K':dico_bride_K,
- 'L':dico_bride_L,
- 'L1':dico_bride_L1,
- 'M':dico_bride_M,
- 'N':dico_bride_N,
- 'O':dico_bride_O,
- 'P':dico_bride_P,
- 'S':dico_bride_S,
- 'T':dico_bride_T,
- 'W':dico_bride_W}
+++ /dev/null
-#@ MODIF macr_cabri_mail_ops Macro DATE 07/02/2005 AUTEUR MABBAS M.ABBAS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-import os
-
-def macr_cabri_mail_ops(self,EXEC_MAILLAGE,RAFF_MAILLAGE,VERI_MAIL,GEOM_BRID,
- IMPRESSION,**args):
- """
- Ecriture de la macro MACR_CABRI_MAIL
- """
- import types
- from Accas import _F
-
- ier=0
-
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- EXEC_LOGICIEL = self.get_cmd('EXEC_LOGICIEL')
- LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
- PRE_GIBI = self.get_cmd('PRE_GIBI')
- IMPR_RESU = self.get_cmd('IMPR_RESU')
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
- # Le concept sortant (de type mail) est nommé 'nomres' dans
- # le contexte de la macro
-
- self.DeclareOut('nomres',self.sd)
-
- # Chemin de Gibi
- import aster
- loc_gibi=aster.repout()
- gibi2000=loc_gibi+'gibi'
-
- # Unité pour le fichier maillage produit (format GIBI)
- unite_mgib = EXEC_MAILLAGE['UNITE_MGIB']
- # Unité pour le fichier de commandes GIBI
- unite_datg = EXEC_MAILLAGE['UNITE_DATG']
- # Niveau gibi
- niveau_gibi = EXEC_MAILLAGE['NIVE_GIBI']
-
- # Verif mail
- ver_apla = VERI_MAIL['APLAT']
- ver_veri = VERI_MAIL['VERIF']
-
- # Impression
- if IMPRESSION['UNITE']!=None:
- imp_unit = IMPRESSION['UNITE']
- imp_unitF = 1
- else:
- imp_unitF = 0
- if IMPRESSION['FORMAT']!=None:
- imp_form = IMPRESSION['FORMAT']
- imp_formF = 1
- else:
- imp_formF = 0
-# if IMPRESSION['FICHIER']!=None:
-# imp_fich = IMPRESSION['FICHIER']
-# imp_fichF = 1
-# else:
-# imp_fichF = 0
-
- # Maillage
- nrad = RAFF_MAILLAGE['NB_RADIAL']
- ncir = RAFF_MAILLAGE['NB_CIRCONF']
- nver = RAFF_MAILLAGE['NB_VERTICAL']
- nsect = RAFF_MAILLAGE['NB_ALESAGE']
- temps = 5.
-
- maillage = {'nrad': nrad,
- 'ncir': ncir,
- 'nver': nver,
- 'nsect': nsect,
- 'temps' : temps,}
-
- # Création du fichier datg
-
- if GEOM_BRID['NORME'] == 'OUI':
- # Bride standard
- type_bride = GEOM_BRID['TYPE']
- ### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
- write_file_dgib_STD(unite_mgib,unite_datg,maillage,type_bride)
- else:
- # Bride quelconque
- geo_bride_qqe = {'nbgouj': GEOM_BRID['GOUJ_N_GOUJON'],
- 'dint': GEOM_BRID['BRID_D_INT'],
- 'dex1': GEOM_BRID['TUBU_D_EXT'],
- 'dex2': GEOM_BRID['BRID_D_CONGE'],
- 'dex3': GEOM_BRID['BRID_D_EPAUL'],
- 'dtrou': GEOM_BRID['BRID_P_ALESAG'],
- 'dext': GEOM_BRID['BRID_D_EXT'],
- 'dt': GEOM_BRID['BRID_D_ALESAG'],
- 'drd': GEOM_BRID['GOUJ_D_RONDEL'],
- 'dg': GEOM_BRID['GOUJ_D_GOUJON'],
- 'dec': GEOM_BRID['GOUJ_D_ECROU'],
- 'rcong': GEOM_BRID['BRID_R_CONGE'],
- 'he': GEOM_BRID['GOUJ_E_ECROU'],
- 'e': GEOM_BRID['GOUJ_E_RONDEL'],
- 'hc1': GEOM_BRID['BRID_H'],
- 'hcg1': GEOM_BRID['TUBU_H'],
- 'hb': GEOM_BRID['BRID_H_EPAUL'],
- 'htrou': GEOM_BRID['BRID_H_ALESAG'],
- 'pf': GEOM_BRID['GOUJ_E_FILET'],
- 'j': GEOM_BRID['ETAN_E_JOINT']}
- ### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
- write_file_dgib_QQE(unite_mgib,unite_datg,maillage,geo_bride_qqe)
-
- fichier_datg = 'fort.'+str(unite_datg)
- fichier_mgib = 'fort.'+str(unite_mgib)
-
- # Lancement de GIBI
- EXEC_LOGICIEL(
- LOGICIEL=gibi2000,
- ARGUMENT=(_F(NOM_PARA=fichier_datg),
- _F(NOM_PARA=fichier_mgib),
- )
- )
- # Lecture du maillage GIBI dans ASTER
- PRE_GIBI(
- UNITE_GIBI = unite_mgib,
- )
-
- nomres = LIRE_MAILLAGE(VERI_MAIL=_F(APLAT = ver_apla,
- VERIF = ver_veri ),)
-
-# if (imp_fichF == 1):
-# print imp_fich
- if (imp_formF == 1):
- print imp_form
- if (imp_unitF == 1):
- print imp_unit
- # Impression du fichier maillage
- if (imp_formF == 1):
- if (imp_form == 'CASTEM'):
- imp_ngib = IMPRESSION['NIVE_GIBI']
- IMPR_RESU( RESU = _F(MAILLAGE=nomres, ),
- FORMAT = 'CASTEM', NIVE_GIBI = imp_ngib )
- if (imp_form == 'IDEAS'):
- imp_nver = IMPRESSION['VERSION']
- IMPR_RESU(RESU = _F(MAILLAGE=nomres,),
- FORMAT = 'IDEAS', VERSION = imp_nver )
-
- return ier
-
-
-##############################################################################################
-# Liste des fonctions
-##############################################################################################
-
-#############
-## EXTERNES (appelables depuis l'extérieur)
-#############
-
-### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-# null = write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-# null = write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-# null = print_bride_std(nom_fichier)
-
-### Catalogue complet des brides standards disponibles
-# txt = bride_std()
-
-#############
-## INTERNES (réservées au travail interne)
-#############
-
-### Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-# NomFichier(txt) = name_file_mgib(unite_mgib):
-
-### Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-# NomFichier(txt) = name_file_datg(unite_datg):
-
-### Récupère un fichier texte DATG
-# Txt = text_datg(fichier_datg):
-
-### Génération du texte pour les variables
-# Txt = para_text(dico_var,var):
-
-
-
-#=============================================================================================
-# Importation des modules Python
-#=============================================================================================
-
-from Macro.macr_cabri_mail_dat import dico_var_geo,dico_var_msh,dico_bride_std
-
-#=============================================================================================
-# Fonctions principales
-#=============================================================================================
-# Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-def write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride):
-
- # Nom du fichier maillage produit par GIBI
- nomFichierMGIB = name_file_mgib(unite_mgib)
-
- # Nom du fichier de commandes pour GIBI
- nomFichierDATG = name_file_datg(unite_datg)
-
- # Ouverture du fichier d'entrée de commandes
- fdgib=open(nomFichierDATG,'w')
-
- # En-tete
- text = "**************************************************************\n"
- text = text + "* Fichier GIBI pour le maillage d'une bride \n"
- text = text + "**************************************************************\n"
- text = text + "\n"
- text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
- text = text + "* Ne pas modifier\n"
- text = text + "\n"
- text = text + "**************************************************************\n"
- text = text + "* Type bride: Bride standard \n"
- text = text + "**************************************************************\n"
- text = text + "titre '"+"Bride standard"+"';\n"
- text = text + "** Type bride standard: "+geo_bride+"\n"
-
- text = text + "\n"
- text = text + "nomfich = CHAINE \n"
- if len(nomFichierMGIB)>72:
- raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \
- 'pour GIBI) :\n',nomFichierMGIB
- elif len(nomFichierMGIB)<=69:
- text = text + "'"+nomFichierMGIB+"';\n"
- else:
- text = text + "'"+nomFichierMGIB[:69]+"'\n" \
- + "'"+nomFichierMGIB[69:]+"';\n"
- text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n"
- text = text + "dens 1;\n"
- text = text + "\n"
- fdgib.write(text)
-
- # Procédures internes supplémentaires
- text = "**************************************************************\n"
- text = text + "* Procédures supplémentaires \n"
- text = text + "**************************************************************\n"
- text = text + text_datg_pro()
- fdgib.write(text)
-
- # Début de procédure de création du maillage
- text = "**************************************************************\n"
- text = text + "**************************************************************\n"
- text = text + "********* Début de procédure de création du maillage *********\n"
- text = text + "**************************************************************\n"
- text = text + "**************************************************************\n"
- text = text + "\n debproc constru;\n"
- fdgib.write(text)
-
- # Paramètres géométriques
- car_bride = dico_bride_std[geo_bride]
- text = "**************************************************************\n"
- text = text + "* Paramètres géométriques \n"
- text = text + "**************************************************************\n"
- text = text + para_text(dico_var_geo,car_bride)
- fdgib.write(text)
-
- # Paramètres du maillage
- text = "**************************************************************\n"
- text = text + "* Paramètres physiques \n"
- text = text + "**************************************************************\n"
- text = text + para_text(dico_var_msh,msh_bride)
- fdgib.write(text)
-
- # Algorithme du maillage
- text = "**************************************************************\n"
- text = text + "* Algorithme de maillage \n"
- text = text + "**************************************************************\n"
- text = text + text_datg_std()
- fdgib.write(text)
-
- # Fermeture du fichier maillage
- fdgib.close()
-
-
-# Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-def write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride):
-
- # Nom du fichier maillage produit par GIBI
- nomFichierMGIB = name_file_mgib(unite_mgib)
-
- # Nom du fichier de commandes pour GIBI
- nomFichierDATG = name_file_datg(unite_datg)
-
- # Ouverture du fichier d'entree de commandes
- fdgib=open(nomFichierDATG,'w')
-
- # En-tete
- text = "**************************************************************\n"
- text = text + "* Fichier GIBI pour le maillage d'une bride \n"
- text = text + "**************************************************************\n"
- text = text + "\n"
- text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
- text = text + "* Ne pas modifier\n"
- text = text + "\n"
- text = text + "**************************************************************\n"
- text = text + "* Type bride: Bride quelconque\n"
- text = text + "**************************************************************\n"
- text = text + "titre '"+"Bride Quelconque"+"';\n"
- text = text + "\n"
- text = text + "nomfich = CHAINE \n"
- if len(nomFichierMGIB)>72:
- raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \
- 'pour GIBI) :\n',nomFichierMGIB
- elif len(nomFichierMGIB)<=69:
- text = text + "'"+nomFichierMGIB+"';\n"
- else:
- text = text + "'"+nomFichierMGIB[:69]+"'\n" \
- + "'"+nomFichierMGIB[69:]+"';\n"
- text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n"
- text = text + "dens 1;\n"
- text = text + "\n"
- fdgib.write(text)
-
- # Procédures internes supplémentaires
- text = "**************************************************************\n"
- text = text + "* Procédures supplémentaires \n"
- text = text + "**************************************************************\n"
- text = text + text_datg_pro()
- fdgib.write(text)
-
- # Début de procédure de création du maillage
- text = "**************************************************************\n"
- text = text + "**************************************************************\n"
- text = text + "********* Début de procédure de création du maillage *********\n"
- text = text + "**************************************************************\n"
- text = text + "**************************************************************\n"
- text = text + "\n debproc constru;\n"
- fdgib.write(text)
-
- # Paramètres géométriques
- text = "**************************************************************\n"
- text = text + "* Paramètres géométriques \n"
- text = text + "**************************************************************\n"
- text = text + para_text(dico_var_geo,geo_bride)
- fdgib.write(text)
-
- # Paramètres du maillage
- text = "**************************************************************\n"
- text = text + "* Paramètres physiques \n"
- text = text + "**************************************************************\n"
- text = text + para_text(dico_var_msh,msh_bride)
- fdgib.write(text)
-
- # Algorithme du maillage
- text = "**************************************************************\n"
- text = text + "* Algorithme de maillage \n"
- text = text + "**************************************************************\n"
- text = text + text_datg_qqe()
- fdgib.write(text)
-
- # Fermeture du fichier maillage
- fdgib.close()
-
-# Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-def name_file_mgib(unite_mgib):
- cur_dir = os.getcwd()
- nomFichier = cur_dir+'/fort.'+str(unite_mgib)
- return nomFichier
-
-
-# Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-def name_file_datg(unite_datg):
- cur_dir = os.getcwd()
- nomFichier = cur_dir+'/fort.'+str(unite_datg)
- return nomFichier
-
-# Récupère un fichier texte DATG: texte GIBI pour procédures
-def text_datg_pro():
- import aster
- loc_datg = aster.repdex()
- datg_bridePro = loc_datg+"macr_cabri_mail_proc.datg"
- fproc=open(datg_bridePro,'r')
- procText = fproc.read()
- fproc.close()
-
- return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride quelconque
-def text_datg_qqe():
- import aster
- loc_datg = aster.repdex()
- datg_brideQqe = loc_datg+"macr_cabri_mail_qqe.datg"
- fproc=open(datg_brideQqe,'r')
- procText = fproc.read()
- fproc.close()
-
- return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride standard
-def text_datg_std():
- import aster
- loc_datg = aster.repdex()
- datg_brideStd = loc_datg+"macr_cabri_mail_std.datg"
- fproc=open(datg_brideStd,'r')
- procText = fproc.read()
- fproc.close()
-
- return procText
-
-# Génération du texte pour les variables
-def para_text(dico_var,var):
- text = '\n'
- for nom_var in var.keys():
- text = text+"* "+dico_var[nom_var]+"\n"
- text = text+nom_var+" = "+`var[nom_var]`+";\n"
- return text
-
-#=============================================================================================
-# Accès au catalogue des brides standards
-# (les brides standards sont décrites dans le fichier Data_Brides.py)
-#=============================================================================================
-
-
-
-# Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-def print_bride_std(nom_fichier):
- text = bride_std()
- # Ouverture du fichier
- finfo=open(nom_fichier,'w')
- # Ecriture des infos
- finfo.write(text)
- # Fermeture du fichier
- finfo.close()
-
-# Catalogue complet des brides standards disponibles
-def bride_std():
- # Ligne d'info
- text = "Liste des brides standards avec leurs dimensions\n"
- # Première ligne
- text = text+"\t"
- for nom_variable in dico_var_geo.keys():
- text = text + nom_variable+"\t\t"
- text = text + "\n"
- # Lignes suivantes
- for nom_bride in dico_bride_std.keys():
- bride = dico_bride_std[nom_bride]
- text = text + nom_bride + '\t'
- for nom_var in dico_var_geo.keys():
- chaine = "%f" % (bride[nom_var])
- text = text+chaine+"\t"
- text = text + "\n"
- return text
+++ /dev/null
-#@ MODIF macr_cara_poutre_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-# RESPONSABLE JMBHH01 J.M.PROIX
-
-def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
- GROUP_MA,ORIG_INER,**args):
- """
- Ecriture de la macro MACR_CARA_POUTRE
- """
- import types
- from Accas import _F
- ier=0
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
- DEFI_GROUP =self.get_cmd('DEFI_GROUP')
- CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
- AFFE_MODELE =self.get_cmd('AFFE_MODELE')
- DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
- AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
- DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
- DEFI_CONSTANTE =self.get_cmd('DEFI_CONSTANTE')
- AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
- AFFE_CHAR_THER_F=self.get_cmd('AFFE_CHAR_THER_F')
- THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
- CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
- CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
- NUME_DDL =self.get_cmd('NUME_DDL')
- ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
- POST_ELEM =self.get_cmd('POST_ELEM')
- CALC_ELEM =self.get_cmd('CALC_ELEM')
- INTE_MAIL_2D =self.get_cmd('INTE_MAIL_2D')
- POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
- IMPR_TABLE =self.get_cmd('IMPR_TABLE')
- IMPR_CO =self.get_cmd('IMPR_CO')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- # Le concept sortant (de type tabl_cara_geom) est nommé 'nomres' dans
- # le contexte de la macro
-
- self.DeclareOut('nomres',self.sd)
-
-# if GROUP_MA_BORD and GROUP_MA:
-# if not LIAISON:
-# ier=ier+1
-# self.cr.fatal("<F> <MACR_CARA_POUTRE> Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU")
-# return ier
-#
- __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,)
-
- __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='MECANIQUE',
- MODELISATION='D_PLAN',), )
-
- __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
-
-
- __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
- AFFE=_F(TOUT='OUI',
- MATER=__nomdma,), )
-
-# --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
-# ------------------------------------------------------
-
- motsimps={}
- if GROUP_MA : motsimps['GROUP_MA'] = GROUP_MA
- if SYME_X : motsimps['SYME_X'] = SYME_X
- if SYME_Y : motsimps['SYME_Y'] = SYME_Y
- motsimps['ORIG_INER'] = ORIG_INER
- mfact=_F(TOUT='OUI',**motsimps)
- nomres=POST_ELEM(MODELE=__nomamo,
- CHAM_MATER=__nomama,
- CARA_GEOM=mfact )
-
-# nb : si GROUP_MA n existe pas : le mot clé est ignoré
-
-#
-# ==================================================================
-# --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE =
-# --- = OU DU CENTRE DE TORSION/CISAILLEMENT =
-# --- = DES COEFFICIENTS DE CISAILLEMENT =
-# --- = ET DE L INERTIE DE GAUCHISSEMENT =
-# --- = DU RAYON DE TORSION SUR TOUT LE MAILLAGE
-# --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION =
-# --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
-# ==================================================================
-
- if GROUP_MA_BORD and not GROUP_MA:
-# --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
-# --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
-# ---------------------------------------------------------
- motscles={}
- if type(GROUP_MA_BORD)==types.StringType:
- motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
- else:
- motscles['CREA_GROUP_NO']=[]
- for grma in GROUP_MA_BORD:
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=grma,))
- __nomlma=DEFI_GROUP(reuse=__nomlma,
- MAILLAGE=__nomlma,
- **motscles)
-
-
-
-# --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
-# --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
-# --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
-# ---------------------------------------------------------------
-
- __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
- REPERE=_F(TABLE=nomres,
- NOM_ORIG='CDG', ), )
-
-# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
-# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
-# ------------------------------------------------------
-
- __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='THERMIQUE',
- MODELISATION='PLAN',), )
-
-# --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
-# --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
-# --- LAMBDA = 1, RHO*CP = 0 :
-# ----------------------
-
- __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
-
-# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
-# ---------------------------------------------------------
-
- __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
- AFFE=_F(TOUT='OUI',
- MATER=__nomath,), )
-
-#
-# ------------------------------------------------------------
-# --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
-# --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
-# --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
-# --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
-# --- - PHI = 0 SUR LE CONTOUR : -
-# ------------------------------------------------------------
-#
-# --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
-# --- DE LA SECTION
-# --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
-# -------------------------------------------------------
-
- motscles={}
- if args.has_key('GROUP_MA_INTE'):
- if args['GROUP_MA_INTE'] != None :
- motscles['LIAISON_UNIF']=_F(GROUP_MA=args['GROUP_MA_INTE'],DDL='TEMP'),
- __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
- TEMP_IMPO =_F(GROUP_NO=GROUP_MA_BORD,
- TEMP=0. ),
- SOURCE =_F(TOUT='OUI',
- SOUR=2.0),
- **motscles )
-
-# --- POUR CHAQUE TROU DE LA SECTION :
-# --- .ON A IMPOSE QUE PHI EST CONSTANT SUR LE CONTOUR INTERIEUR
-# --- EN FAISANT LE LIAISON_UNIF DANS LE AFFE_CHAR_THER PRECEDENT
-# --- .ON IMPOSE EN PLUS D(PHI)/DN = 2*AIRE(TROU)/L(TROU)
-# --- OU D/DN DESIGNE LA DERIVEE PAR RAPPORT A LA
-# --- NORMALE ET L DESIGNE LA LONGUEUR DU BORD DU TROU :
-# -------------------------------------------------------
-
- if args.has_key('GROUP_MA_INTE'):
- lgmaint=args['GROUP_MA_INTE']
- if lgmaint != None :
- __tbaire=POST_ELEM(MODELE=__nomoth,
- AIRE_INTERNE=_F(GROUP_MA_BORD=args['GROUP_MA_INTE'],), )
-
- motscles={}
- motscles['FLUX_REP']=[]
-
- if type(lgmaint)==types.StringType:
- motscles['FLUX_REP']=_F(GROUP_MA=args['GROUP_MA_INTE'],CARA_TORSION=__tbaire)
- else:
- motscles['FLUX_REP']=[]
- for grma in lgmaint:
- motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
- __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -2
-# --- AVEC PHI = 0 SUR LE CONTOUR :
-# ----------------------------------------
-
- motscles={}
- motscles['EXCIT']=[_F(CHARGE=__chart1,),]
- if args.has_key('GROUP_MA_INTE'):
- if lgmaint != None :
- motscles['EXCIT'].append(_F(CHARGE=__chart2,))
- __tempe1=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- SOLVEUR=_F(STOP_SINGULIER='NON',),
- **motscles )
-
-#
-# ----------------------------------------------
-# --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
-# --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
-# ----------------------------------------------
-#
-# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
-# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
-# --- PAR UNE FONCTION EGALE A Y :
-# --------------------------
-
- __fnsec1=DEFI_FONCTION(NOM_PARA='X',
- VALE=(0.,0.,10.,10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE',
- )
-
- __fnsec0=DEFI_CONSTANTE(VALE=0.,)
-
-# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
-# --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
-# --------------------------------------------------
-
-
- motscles={}
- if args.has_key('NOEUD'):
- motscles['TEMP_IMPO']=(_F(NOEUD=args['NOEUD'],TEMP=__fnsec0))
- __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
- SOURCE=_F(TOUT='OUI',
- SOUR=__fnsec1,),
- **motscles )
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -Y
-# --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
-# ------------------------------------------------
-
- __tempe2=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- EXCIT=_F(CHARGE=__chart2,),
- SOLVEUR=_F(STOP_SINGULIER='NON',),
- )
-
-# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
-# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
-# --- PAR UNE FONCTION EGALE A Z :
-# --------------------------
-
- __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
- VALE=(0.,0.,10.,10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE',
- )
-
-# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
-# --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
-# --------------------------------------------------
-
- motscles={}
- if args.has_key('NOEUD'):
- motscles['TEMP_IMPO']=_F(NOEUD=args['NOEUD'],TEMP=__fnsec0)
- __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
- SOURCE=_F(TOUT='OUI',
- SOUR=__fnsec2,),
- **motscles)
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -Z
-# --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
-# ------------------------------------------------
-
- __tempe3=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- EXCIT=_F(CHARGE=__chart3,),
- SOLVEUR=_F(STOP_SINGULIER='NON',),
- )
-
-# --- CALCUL DU RAYON DE TORSION :
-# --------------------------
-
-# CALCUL DU RAYON DE TORSION EXTERNE : rtext
-
- __tempe1=CALC_ELEM(reuse=__tempe1,
- RESULTAT=__tempe1,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- TOUT_ORDRE='OUI',
- OPTION='FLUX_ELNO_TEMP',
- )
-
- __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
- DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
- INFO=2,)
-
- __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
- CHEMIN=__chem,
- RESULTAT=__tempe1,
- NOM_CHAM='FLUX_ELNO_TEMP',
- TRAC_NOR='OUI',
- NOM_CMP=('FLUX','FLUY'),
- OPERATION='MOYENNE'))
-
- __m1=abs(__flun['TRAC_NOR',3])
- __m2=abs(__flun['TRAC_NOR',4])
- __rtext=max(__m1,__m2)
-
- # CALCUL DU RAYON DE TORSION : rt
- # rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
-
- if args.has_key('GROUP_MA_INTE'):
- if args['GROUP_MA_INTE'] != None :
- if type(args['GROUP_MA_INTE'])==types.StringType :
- l_group_ma_inte=[args['GROUP_MA_INTE'],]
- else:
- l_group_ma_inte=args['GROUP_MA_INTE']
- for i in range(0,len(l_group_ma_inte)):
- __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
- DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[i]),
- INFO=2,)
- __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
- CHEMIN=__chem,
- RESULTAT=__tempe1,
- NOM_CHAM='FLUX_ELNO_TEMP',
- TRAC_NOR='OUI',
- NOM_CMP=('FLUX','FLUY'),
- OPERATION='MOYENNE'))
- __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
- if __m1 > __rtext :
- __rtext=__m1
-
- __rt=__rtext
-
-# --- CALCUL DE LA CONSTANTE DE TORSION :
-# ---------------------------------
-
- motscles={}
- if args.has_key('GROUP_MA_INTE'):
- lgmaint=args['GROUP_MA_INTE']
- if lgmaint != None :
- motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
- LAPL_PHI=__tempe1,
- RT=__rt,
- TOUT='OUI',
- OPTION='CARA_TORSION',
- GROUP_MA_INTE=args['GROUP_MA_INTE'],)
- else:
- motscles['CARA_POUTRE']=_F(CARA_GEOM=nomres,
- LAPL_PHI=__tempe1,
- RT=__rt,
- TOUT='OUI',
- OPTION='CARA_TORSION', )
- nomres=POST_ELEM(reuse=nomres,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- **motscles )
-
-
-# --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
-# --- CENTRE DE CISAILLEMENT/TORSION :
-# ------------------------------
-
- nomres=POST_ELEM(reuse=nomres,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- CARA_POUTRE=_F(CARA_GEOM=nomres,
- LAPL_PHI_Y=__tempe2,
- LAPL_PHI_Z=__tempe3,
- TOUT='OUI',
- OPTION='CARA_CISAILLEMENT',), )
-
-
-#
-# ------------------------------------------------------------
-# --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION DE -
-# --- - LAPLACIEN(OMEGA) = 0 DANS LA SECTION -
-# --- - AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE -
-# --- - CONTOUR DE LA SECTION -
-# --- - NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL -
-# --- - A CE CONTOUR -
-# --- - ET SOMME_S(OMEGA.DS) = 0 -
-# --- - OMEGA EST LA FONCTION DE GAUCHISSEMENT -
-# --- - L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS) -
-# ------------------------------------------------------------
-#
-# --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
-# --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
-# --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
-# --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
-# --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
-# --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
-# --- A CHANGER) :
-# ----------
-
- __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
- REPERE=_F(TABLE=nomres,
- NOM_ORIG='TORSION',) )
-
-# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
-# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
-# ------------------------------------------------------
-
- __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='THERMIQUE',
- MODELISATION='PLAN', ) )
-
-# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
-# ---------------------------------------------------------
-
- __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
- AFFE=_F(TOUT='OUI',
- MATER=__nomath, ), )
-
-# --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
-# --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
-# --- PAR UNE FONCTION EGALE A -X :
-# ---------------------------
-
- __fnsec3=DEFI_FONCTION(NOM_PARA='X',
- VALE=(0.,0.,10.,-10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE',
- )
-
-# --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
-# --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
-# --- PAR UNE FONCTION EGALE A Y :
-# --------------------------
-
- __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
- VALE=(0.,0.,10.,10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE',
- )
-
-# --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
-# --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
-# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
-# --- N = 0, N ETANT L EFFORT NORMAL)
-# --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
-# --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
-# --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
-# --- LA RELATION LINEAIRE A IMPOSER.
-# --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
-# -----------------------------------------------------------
-
- __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
- SOURCE=_F(TOUT='OUI',
- SOUR=1.0), )
-
-# --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
-# --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
-# --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
-# --------------------------------------------------
-
- __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
- OPTION='CHAR_THER'
- )
-
-# --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
-# --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
-# --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
-# --- RELATION LINEAIRE ENTRE DDLS :
-# ----------------------------
-
- __matel=CALC_MATR_ELEM(MODELE=__nomot2,
- CHAM_MATER=__chmat2,
- CHARGE=__chart4,
- OPTION='RIGI_THER',)
-
-# --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
-# --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
-# --- RELATION LINEAIRE ENTRE DDLS :
-# ----------------------------
-
- __numddl=NUME_DDL(MATR_RIGI=__matel,
- METHODE='LDLT', )
-
-# --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
-# --- RELATION LINEAIRE ENTRE DDLS :
-# ----------------------------
-
- __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
- NUME_DDL=__numddl, )
-
-# --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
-# --- SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
-# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
-# --- N = 0, N ETANT L EFFORT NORMAL)
-# --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
-# --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
-# --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
-# ---------------------------------------------
-
- __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
- LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
- COEF_IMPO=0.), )
-
-# --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
-# --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
-# --- SELON LA DIRECTION NORMALE AU CONTOUR :
-# -------------------------------------
-
- __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
- FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
- FLUX_X =__fnsec4,
- FLUX_Y =__fnsec3,), )
-
-# --- RESOLUTION DE LAPLACIEN(OMEGA) = 0
-# --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ SUR LE CONTOUR DE LA SECTION
-# --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
-# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
-# --- N = 0, N ETANT L EFFORT NORMAL) :
-# -------------------------------
-
- __tempe4=THER_LINEAIRE(MODELE=__nomot2,
- CHAM_MATER=__chmat2,
- EXCIT=(_F(CHARGE=__chart5,),
- _F(CHARGE=__chart6,),),
- SOLVEUR=_F(METHODE='LDLT',
- RENUM='SANS',
- STOP_SINGULIER='NON',), )
-
-# --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
-# -------------------------------------
-
- nomres=POST_ELEM(reuse=nomres,
- MODELE=__nomot2,
- CHAM_MATER=__chmat2,
- CARA_POUTRE=_F(CARA_GEOM=nomres,
- LAPL_PHI=__tempe4,
- TOUT='OUI',
- OPTION='CARA_GAUCHI'), )
-
-
-#
-# ==================================================================
-# --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE =
-# --- = ET DU RAYON DE TORSION SUR CHAQUE GROUPE =
-# --- = DU CENTRE DE TORSION/CISAILLEMENT =
-# --- = DES COEFFICIENTS DE CISAILLEMENT =
-# ==================================================================
-
-
-#
-
-
- if GROUP_MA_BORD and GROUP_MA:
-
- if type(GROUP_MA_BORD)==types.StringType :
- l_group_ma_bord=[GROUP_MA_BORD,]
- else:
- l_group_ma_bord= GROUP_MA_BORD
- if type(GROUP_MA)==types.StringType :
- l_group_ma=[GROUP_MA,]
- else:
- l_group_ma= GROUP_MA
-
- if args.has_key('NOEUD'):
- if type(args['NOEUD'])==types.StringType :
- l_noeud=[args['NOEUD'],]
- else:
- l_noeud= args['NOEUD']
-
- if len(l_group_ma)!=len(l_group_ma_bord):
- ier=ier+1
- self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et GROUP_MA_BORD incoherents")
- return ier
- if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)):
- ier=ier+1
- self.cr.fatal("<F> <MACR_CARA_POUTRE> GROUP_MA et NOEUD incoherents")
- return ier
-
- for i in range(0,len(l_group_ma_bord)):
-
-# --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
-# --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
-# ---------------------------------------------------------
-
- __nomlma=DEFI_GROUP(reuse=__nomlma,
- MAILLAGE=__nomlma,
- CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],) )
-
-
-# --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
-# --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
-# --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
-# ---------------------------------------------------------------
-
- __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
- REPERE=_F(TABLE=nomres,
- NOM_ORIG='CDG',
- GROUP_MA=l_group_ma[i], ), )
-
-# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
-# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
-# ------------------------------------------------------
-
- __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
- AFFE=_F(GROUP_MA=l_group_ma[i],
- PHENOMENE='THERMIQUE',
- MODELISATION='PLAN', ) )
-
-# --- POUR LA CONSTRUCTION DU LAPLACIEN, ON DEFINIT UN
-# --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
-# --- LAMBDA = 1, RHO*CP = 0 :
-# ----------------------
-
- __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
- RHO_CP=0.0, ), )
-
-# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
-# ---------------------------------------------------------
-
- __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
- AFFE=_F(TOUT='OUI',
- MATER=__nomath ), )
-
-#
-# ------------------------------------------------------------
-# --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION -
-# --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2 -
-# --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION : -
-# --- - LAPLACIEN(PHI) = -2 DANS LA SECTION -
-# --- - PHI = 0 SUR LE CONTOUR : -
-# ------------------------------------------------------------
-#
-# --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
-# --- DE LA SECTION
-# --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
-# -------------------------------------------------------
-
- __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
- TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
- TEMP=0.0 ),
- SOURCE=_F(TOUT='OUI',
- SOUR=2.0 ) )
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -2
-# --- AVEC PHI = 0 SUR LE CONTOUR :
-# ----------------------------------------
-
- __tempe1=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- EXCIT=_F(CHARGE=__chart1, ),
- SOLVEUR=_F(STOP_SINGULIER='NON',) )
-
-#
-# ----------------------------------------------
-# --- - CALCUL DU CENTRE DE TORSION/CISAILLEMENT -
-# --- - ET DES COEFFICIENTS DE CISAILLEMENT : -
-# ----------------------------------------------
-#
-# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
-# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
-# --- PAR UNE FONCTION EGALE A Y :
-# --------------------------
-
- __fnsec1=DEFI_FONCTION(NOM_PARA='X',
- VALE=(0.,0.,10.,10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE', )
-
- __fnsec0=DEFI_CONSTANTE(VALE=0.,)
-
-# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
-# --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
-# --------------------------------------------------
-
- __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
- TEMP_IMPO=_F(NOEUD=l_noeud[i],
- TEMP=__fnsec0),
- SOURCE=_F(TOUT='OUI',
- SOUR=__fnsec1) )
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -Y
-# --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
-# ------------------------------------------------
-
- __tempe2=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- EXCIT=_F(CHARGE=__chart2, ),
- SOLVEUR=_F(STOP_SINGULIER='NON',) )
-
-# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
-# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
-# --- PAR UNE FONCTION EGALE A Z :
-# --------------------------
-
- __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
- VALE=(0.,0.,10.,10.),
- PROL_DROITE='LINEAIRE',
- PROL_GAUCHE='LINEAIRE', )
-
-# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
-# --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
-# --------------------------------------------------
-
- __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
- TEMP_IMPO=_F(NOEUD=l_noeud[i],
- TEMP=__fnsec0),
- SOURCE=_F(TOUT='OUI',
- SOUR=__fnsec2) )
-
-# --- RESOLUTION DE LAPLACIEN(PHI) = -Z
-# --- AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
-# ------------------------------------------------
-
- __tempe3=THER_LINEAIRE(MODELE=__nomoth,
- CHAM_MATER=__chmath,
- EXCIT=_F(CHARGE=__chart3, ),
- SOLVEUR=_F(STOP_SINGULIER='NON',) )
-
-# --- CALCUL DU RAYON DE TORSION :
-# --------------------------
-
-# CALCUL DU RAYON DE TORSION EXTERNE : rtext
-
- __tempe1=CALC_ELEM(reuse=__tempe1,
- RESULTAT=__tempe1,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- TOUT_ORDRE='OUI',
- OPTION='FLUX_ELNO_TEMP',
- )
-
- __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
- DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
- INFO=2,)
-
- __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
- CHEMIN=__chem,
- RESULTAT=__tempe1,
- NOM_CHAM='FLUX_ELNO_TEMP',
- TRAC_NOR='OUI',
- NOM_CMP=('FLUX','FLUY'),
- OPERATION='MOYENNE'))
-
- __m1=abs(__flun['TRAC_NOR',3])
- __m2=abs(__flun['TRAC_NOR',4])
- __rtext=max(__m1,__m2)
-
-# CALCUL DU RAYON DE TORSION : rt
-# rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
-
- if args.has_key('GROUP_MA_INTE'):
- if args['GROUP_MA_INTE'] != None :
- if type(args['GROUP_MA_INTE'])==types.StringType :
- l_group_ma_inte=[args['GROUP_MA_INTE'],]
- else:
- l_group_ma_inte=args['GROUP_MA_INTE']
- for j in range(0,len(l_group_ma_inte)):
- __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
- DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
- INFO=2,)
- __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
- CHEMIN=__chem,
- RESULTAT=__tempe1,
- NOM_CHAM='FLUX_ELNO_TEMP',
- TRAC_NOR='OUI',
- NOM_CMP=('FLUX','FLUY'),
- OPERATION='MOYENNE'))
- __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
- if __m1 > __rtext :
- __rtext=__m1
-
- __rt=__rtext
-
-# --- CALCUL DE LA CONSTANTE DE TORSION :
-# ---------------------------------
-
- nomres=POST_ELEM(reuse=nomres,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- CARA_POUTRE=_F(CARA_GEOM=nomres,
- LAPL_PHI=__tempe1,
- RT=__rt,
- GROUP_MA=l_group_ma[i],
- OPTION='CARA_TORSION' ), )
-
-# --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
-# --- CENTRE DE CISAILLEMENT/TORSION :
-# ------------------------------
-
- nomres=POST_ELEM(reuse=nomres,
- MODELE=__nomoth,
- CHAM_MATER=__chmath,
- CARA_POUTRE=_F(CARA_GEOM=nomres,
- LAPL_PHI_Y=__tempe2,
- LAPL_PHI_Z=__tempe3,
- GROUP_MA=l_group_ma[i],
- LONGUEUR=args['LONGUEUR'],
- MATERIAU=args['MATERIAU'],
- LIAISON =args['LIAISON'],
- OPTION='CARA_CISAILLEMENT' ), )
- IMPR_TABLE(TABLE=nomres)
-
- return ier
+++ /dev/null
-#@ MODIF macr_ecla_pg_ops Macro DATE 09/11/2004 AUTEUR VABHHTS J.PELLET
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-########################################################################
-def macr_ecla_pg_ops(self,RESULTAT,MAILLAGE,RESU_INIT,MODELE_INIT,
- TOUT, GROUP_MA, MAILLE,
- SHRINK, TAILLE_MIN,
- NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,
- **args):
- """
- Ecriture de la macro macr_ecla_pg
- """
- import os, string
- from Accas import _F
- from Noyau.N_utils import AsType
- ier=0
-
- # On importe les definitions des commandes a utiliser dans la macro
- CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
- CREA_RESU =self.get_cmd('CREA_RESU')
-
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
-
- # Appel à CREA_MAILLAGE :
- motscles={}
- if TOUT : motscles['TOUT'] =TOUT
- if GROUP_MA : motscles['GROUP_MA'] =GROUP_MA
- if MAILLE : motscles['MAILLE'] =MAILLE
-
- self.DeclareOut('ma2',MAILLAGE)
- ma2=CREA_MAILLAGE(ECLA_PG=_F( MODELE = MODELE_INIT, NOM_CHAM=NOM_CHAM,
- SHRINK = SHRINK, TAILLE_MIN=TAILLE_MIN, **motscles ));
-
-
-
- # Appel à CREA_RESU :
- typ2=AsType(RESU_INIT).__name__
- if TOUT_ORDRE : motscles['TOUT_ORDRE'] =TOUT_ORDRE
- if NUME_ORDRE : motscles['NUME_ORDRE'] =NUME_ORDRE
- if LIST_ORDRE : motscles['LIST_ORDRE'] =LIST_ORDRE
- if LIST_INST : motscles['LIST_INST'] =LIST_INST
- if INST : motscles['INST'] =INST
- if TOUT_ORDRE : motscles['TOUT_ORDRE'] =TOUT_ORDRE
-
- self.DeclareOut('resu2',RESULTAT)
- resu2=CREA_RESU( OPERATION='ECLA_PG', TYPE_RESU=string.upper(typ2),
- ECLA_PG=_F( MODELE_INIT= MODELE_INIT, RESU_INIT=RESU_INIT, NOM_CHAM=NOM_CHAM,
- MAILLAGE= ma2, **motscles ));
- return ier
-############################################################################################
-
+++ /dev/null
-#@ MODIF macr_fiab_impr_ops Macro DATE 24/01/2005 AUTEUR DURAND C.DURAND
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
-#
-def macr_fiab_impr_ops(self, INFO,
- TABLE_CIBLE, NOM_PARA_CIBLE, GRADIENTS, **args):
-#
-#
-# 1. args est le dictionnaire des arguments
-# args.keys() est la liste des mots-clés
-# args.keys()[0] est la premiere valeur de cette liste
-# args.keys()[1:] est la liste des valeurs suivantes dans cette liste
-# args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
-#
- """ Macro-commande réalisant l'impression des valeurs pour le logiciel de fiabilite. """
-#
-# On charge les modules nécessaires
- from Accas import _F
-#
-#____________________________________________________________________
-#
-# 1. Préalables
-#____________________________________________________________________
-#
- erreur = 0
-#
-# 1.1 ==> La macro compte pour 1 dans l'exécution des commandes
-#
- self.set_icmd(1)
-#
-# 1.2 ==> On importe les définitions des commandes Aster utilisées
-# dans la macro
-#
- DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
- IMPR_TABLE = self.get_cmd("IMPR_TABLE")
-#
-# 1.3. ==> Des constantes
-# Atention : le numéro d'unité utilisé ici et celui
-# utlisé dans le python d'échange lance_aster_5
-# doivent correspondre.
-#
- Unite_Fichier_ASTER_vers_FIABILITE = 91
- Nom_Symbolique_Fichier_ASTER_vers_FIABILITE = "ASTER_vers_FIABILITE"
- FORMAT_R="1PE17.10"
-#____________________________________________________________________
-#
-# 2. Définition d'un fichier d'échange
-#____________________________________________________________________
-#
- DEFI_FICHIER ( ACTION= "ASSOCIER",
-# FICHIER = Nom_Symbolique_Fichier_ASTER_vers_FIABILITE,
- UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
- TYPE = "ASCII",
- INFO = INFO )
-#____________________________________________________________________
-#
-# 4. Ecriture de la valeur cible
-#____________________________________________________________________
-#
- IMPR_TABLE ( TABLE = TABLE_CIBLE,
- NOM_PARA = NOM_PARA_CIBLE,
- UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
- FORMAT_R = FORMAT_R,
- INFO = INFO )
-#____________________________________________________________________
-#
-# 5. Ecritures des gradients
-#____________________________________________________________________
-#
- if GRADIENTS is not None :
-#
- for val in GRADIENTS :
-#
- IMPR_TABLE ( TABLE = val["TABLE"],
- SENSIBILITE = val["PARA_SENSI"],
- NOM_PARA = (val["NOM_PARA"]),
- UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
- FORMAT_R = FORMAT_R,
- INFO = INFO )
-#____________________________________________________________________
-#
-# 6. Libération du fichier d'échange
-#____________________________________________________________________
-#
- DEFI_FICHIER ( ACTION= "LIBERER",
- UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
- INFO = INFO )
-#
-#--------------------------------------------------------------------
-# 7. C'est fini !
-#--------------------------------------------------------------------
-#
- return erreur
+++ /dev/null
-#@ MODIF macr_fiabilite_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-# RESPONSABLE GNICOLAS G.NICOLAS
-#
-def macr_fiabilite_ops(self, INFO,
- LOGICIEL, VERSION,
- UNITE_ESCL, MESS_ASTER,
- SEUIL, SEUIL_TYPE,
- VARIABLE,
- **args ) :
-#
-# args est le dictionnaire des arguments optionnels
-# args.keys() est la liste des mots-clés
-# args.keys()[0] est la premiere valeur de cette liste
-# args.keys()[1:] est la liste des valeurs suivantes dans cette liste
-# args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
-### print args
-### print args.keys()
-### if len (args.keys())>0 : print args.keys()[0]
-#
- """ Macro-commande réalisant le pilotage du logiciel de fiabilite. """
-#
-# On charge les modules nécessaires
- from Accas import _F
- from Macro import fiabilite_mefisto
- import aster
- import os
- import string
- import sys
- import Numeric
-#
-#____________________________________________________________________
-#
-# 1. Préalables
-#____________________________________________________________________
-#
-# 1.1 ==> La macro compte pour 1 dans l'exécution des commandes
-#
- self.set_icmd(1)
-#
-# 1.2 ==> On importe les définitions des commandes Aster utilisées
-# dans la macro
-#
- EXEC_LOGICIEL = self.get_cmd("EXEC_LOGICIEL")
- DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
-#
-# 1.3 ==> Le nom du programme de fiabilite à lancer
-#
- repertoire_outils = aster.repout()
- fiabilite = repertoire_outils + "fiabilite"
-#
-# 1.4 ==> Initialisations
-#
- erreur = 0
- erreur_partiel = [0]
- Rep_Calc_ASTER = os.getcwd()
- Nom_Exec_ASTER = sys.executable
-#
- messages_erreur = { 0 : "Tout va bien",
- 1 : "Impossible de créer le répertoire de travail pour le logiciel de fiabilité.",
- 2 : "Probleme d'ouverture du fichier.",
- 10 : "Erreur dans le choix du logiciel de fiabilité.",
- 11 : "Erreur dans la création des données pour le logiciel de fiabilité.",
- 100 : "Erreur." }
-#
- while not erreur :
-#
-#____________________________________________________________________
-#
-# 2. Répertoires et fichiers
-#____________________________________________________________________
-#
-# 2.1. ==> Création du répertoire pour l'exécution du logiciel de fiabilité
-#
- Nom_Rep_local = "tmp_fiabilite"
- Rep_Calc_LOGICIEL_local = os.path.join(".",Nom_Rep_local)
- Rep_Calc_LOGICIEL_global = os.path.join(Rep_Calc_ASTER,Nom_Rep_local)
-#
- try :
- os.mkdir(Rep_Calc_LOGICIEL_global)
- except os.error,erreur_partiel :
- self.cr.warn("Code d'erreur de mkdir : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
- self.cr.fatal("Impossible de créer le répertoire de travail pour le logiciel de fiabilité : "+Rep_Calc_LOGICIEL_global)
- erreur = erreur + 1
- break
-#
-# 2.2. ==> On crée un fichier annexe pour transmettre des données à la procédure
-# de lancement des calculs ASTER par le LOGICIEL.
-# Ce fichier est créé dans le répertoire d'exécution du logiciel de fiabilité.
-# On fait ainsi car les arguments passés ont du mal à transiter via l'exécutable.
-# On stocke :
-# 1. Le niveau d'information
-# 2. L'unité logique associée au jeu de commandes déterministes
-# 3. La gestion des sorties ASTER
-# 4. Le nom de l'exécutable ASTER
-# 5. Le type de seuil du problème (maximum ou minimum)
-#
- fic_Info_ASTER = os.path.join(Rep_Calc_LOGICIEL_global,"InfoExecASTER")
- try :
- f_execAster = open(fic_Info_ASTER, "w")
- except os.error,erreur_partiel :
- self.cr.warn("Fichier : "+fic_Info_ASTER)
- self.cr.warn("Code d'erreur de open : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
- erreur = 2
- break
-#
- f_execAster.write(str(INFO)+"\n")
- f_execAster.write(str(UNITE_ESCL)+"\n")
- f_execAster.write(str(MESS_ASTER)+"\n")
- f_execAster.write(str(Nom_Exec_ASTER)+"\n")
- f_execAster.write(str(SEUIL_TYPE))
- f_execAster.close()
- fichier = open (fic_Info_ASTER,"r")
-#
- if INFO >= 2 :
- print "\nContenu du fichier " + fic_Info_ASTER," :"
- les_lignes = fichier.readlines()
- fichier.close()
- print les_lignes, "\n"
-#
-#____________________________________________________________________
-#
-# 3. Les variables par defaut
-#____________________________________________________________________
-#
-# 3.1. ==> Dictionnaire des valeurs physiques et liées à la loi
-#
- valeurs_lois = { }
-#
- for m in VARIABLE :
-#
- v_moy_physique = None
- v_moy_loi = None
- v_min_loi = None
- v_max_loi = None
- sigma_loi = None
-#
-# 3.1.1. ==> loi uniforme : transfert des min et max
-# on définit une moyennne comme étant la médiane des extremes.
-#
- if m["LOI"] == "UNIFORME" :
- v_moy_physique = 0.5 * ( m["VALE_MIN"] + m["VALE_MAX"] )
- v_min_loi = m["VALE_MIN"]
- v_max_loi = m["VALE_MAX"]
-#
-# 3.1.2. ==> loi normale : transfert des moyennne et écart-type.
-#
- elif m["LOI"] == "NORMALE" :
- v_moy_loi = m["VALE_MOY"]
- v_moy_physique = v_moy_loi
- sigma_loi = m["ECART_TYPE"]
-#
-# 3.1.3. ==> loi lognormale : identité du min, conversion pour le reste
-#
- elif m["LOI"] == "LOGNORMALE" :
- v_min_loi = m["VALE_MIN"]
- if m["VALE_MOY_PHY"] is None :
- v_moy_loi = m["VALE_MOY"]
- sigma_loi = m["ECART_TYPE"]
- aux = Numeric.exp(0.5*sigma_loi*sigma_loi+v_moy_loi)
- v_moy_physique = v_min_loi + aux
- else :
- v_moy_physique = m["VALE_MOY_PHY"]
- aux = m["ECART_TYPE_PHY"]/(m["VALE_MOY_PHY"]-m["VALE_MIN"])
- aux1 = 1. + aux*aux
- aux2 = Numeric.sqrt(aux1)
- v_moy_loi = Numeric.log((m["VALE_MOY_PHY"]-m["VALE_MIN"])/aux2)
- aux2 = Numeric.log(aux1)
- sigma_loi = Numeric.sqrt(aux2)
-#
-# 3.1.4. ==> loi normale tronquée : transfert des moyenne, mini/maxi et écart-type
-# on définit une moyennne comme étant la médiane des extremes.
-#
- else :
- v_moy_loi = m["VALE_MOY"]
- v_min_loi = m["VALE_MIN"]
- v_max_loi = m["VALE_MAX"]
- sigma_loi = m["ECART_TYPE"]
- v_moy_physique = 0.5 * ( m["VALE_MIN"] + m["VALE_MAX"] )
-#
- d = { }
- d["v_moy_physique"] = v_moy_physique
- d["v_moy_loi"] = v_moy_loi
- d["v_min_loi"] = v_min_loi
- d["v_max_loi"] = v_max_loi
- d["sigma_loi"] = sigma_loi
- valeurs_lois[m] = d
-#
-#____________________________________________________________________
-#
-# 4. Création des fichiers pour le logiciel de fiabilite
-#____________________________________________________________________
-#
- if ( LOGICIEL == "MEFISTO" ) :
-#
-# 4.1. ==> MEFISTO
-#
- erreur = fiabilite_mefisto.fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
- INFO, VERSION,
- SEUIL, SEUIL_TYPE,
- VARIABLE,
- valeurs_lois,
- **args )
-#
-# 4.2. ==> Erreur si autre logiciel
-#
- else :
-#
- self.cr.warn("Logiciel de fiabilité : "+LOGICIEL)
- erreur = 10
-#
-# 4.3. ==> Arret en cas d'erreur
-#
- if erreur :
- break
-#
-#____________________________________________________________________
-#
-# 5. Ecriture de la commande d"exécution du logiciel de fiabilité
-#
-# Remarque : dans la donnée de la version du logiciel de fiabilité, il faut remplacer
-# le _ de la donnée par un ., qui
-# est interdit dans la syntaxe du langage de commandes ASTER
-# Remarque : il faut remplacer le N majuscule de la donnee par
-# un n minuscule, qui est interdit dans la syntaxe du langage
-# de commandes ASTER
-#____________________________________________________________________
-#
-#
- VERSION=string.replace(VERSION,"_",".")
- VERSION=string.replace(VERSION,"N","n")
-#
- EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_LOGICIEL_global), # nom du repertoire
- _F(NOM_PARA=LOGICIEL), # nom du logiciel de fiabilité
- _F(NOM_PARA=VERSION), # version du logiciel de fiabilité
- ),
- LOGICIEL = fiabilite
- )
-#
-#--------------------------------------------------------------------
-# 6. C'est fini !
-#--------------------------------------------------------------------
-#
- break
-#
-# 6.1. ==> Arret en cas d'erreur
-#
- if erreur :
- if not messages_erreur.has_key(erreur) :
- erreur = 100
- self.cr.fatal(messages_erreur[erreur])
-#
-# 6.2. ==> Si tout va bien, on crée une liste de réels pour le retour
-# A terme, il serait intéressant d'y mettre les résultats
-# de l'analyse fiabiliste. Pour le moment, on se contente de
-# mettre une valeur nulle qui permet de faire un test dans
-# les commandes appelantes.
-#
- aux = [float(erreur)]
-#
- self.DeclareOut("nomres",self.sd)
- nomres = DEFI_LIST_REEL( VALE = aux , INFO = 1 )
-#
- return
-#
-########################## Fin de la fonction##################################
-#
-########################## Auto-test##################################
-#
-if __name__ == "__main__" :
-#
- import os
- import sys
- import tempfile
-#
- Rep_Calc_LOGICIEL_global = tempfile.mktemp()
- os.mkdir(Rep_Calc_LOGICIEL_global)
-#
- classe = None
- INFO = 2
- LOGICIEL = "MEFISTO"
- VERSION = "V3_2"
- UNITE_ESCL = 38
- MESS_ASTER = "DERNIER"
- SEUIL = 1789.
- SEUIL_TYPE = "MAXIMUM"
- VARIABLE = []
- args = {}
-#
- lr8 = macr_fiabilite_ops(classe, INFO,
- LOGICIEL, VERSION,
- UNITE_ESCL, MESS_ASTER,
- SEUIL, SEUIL_TYPE,
- VARIABLE,
- **args )
-### print "lr8 = ", lr8
- Liste = os.listdir(Rep_Calc_LOGICIEL_global)
-#
- for nomfic in Liste :
- fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
- os.chmod (fic_total,0755)
- os.remove (fic_total)
- os.rmdir (Rep_Calc_LOGICIEL_global)
-#
- sys.exit("blabla")
+++ /dev/null
-#@ MODIF macr_lign_coupe_ops Macro DATE 14/02/2005 AUTEUR DURAND C.DURAND
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-########################################################################
-# script PYTHON de creation d un maillage de ligne de coupe
-
-def crea_mail_lig_coup(dimension,lignes,groups):
-
- import os,sys,copy
-
-# construction du maillage au format Aster des segments de lignes de coupe
-
- nblig=len(lignes)
- nbngr=len(groups)
-
- resu='TITRE\n'
- titre='Maillage ligne de coupe'+'\n'
- resu=resu+'FINSF\n'
- resu=resu+'COOR_'+str(dimension)+'D\n'
-
-# creation des noeuds
- nbno=0
- for i in range(nblig):
- pt1 = lignes[i][0]
- pt2 = lignes[i][1]
- nbp_lig_coupe = lignes[i][2]
- for j in range(nbp_lig_coupe):
- if dimension==2:
- x=pt1[0]+j*(pt2[0]-pt1[0])/(nbp_lig_coupe-1)
- y=pt1[1]+j*(pt2[1]-pt1[1])/(nbp_lig_coupe-1)
- nbno=nbno+1
- noeud=' N'+str(nbno)+' '+str(x)+' '+str(y)+'\n'
- resu=resu+noeud
- elif dimension==3:
- x=pt1[0]+j*(pt2[0]-pt1[0])/(nbp_lig_coupe-1)
- y=pt1[1]+j*(pt2[1]-pt1[1])/(nbp_lig_coupe-1)
- z=pt1[2]+j*(pt2[2]-pt1[2])/(nbp_lig_coupe-1)
- nbno=nbno+1
- noeud=' N'+str(nbno)+' '+str(x)+' '+str(y)+' '+str(z)+'\n'
- resu=resu+noeud
- for i in range(nbngr):
- for pt in groups[i][1:]:
- if dimension==2:
- nbno=nbno+1
- noeud=' N'+str(nbno)+' '+str(pt[0])+' '+str(pt[1])+'\n'
- resu=resu+noeud
- elif dimension==3:
- nbno=nbno+1
- noeud=' N'+str(nbno)+' '+str(pt[0])+' '+str(pt[1])+' '+str(pt[2])+'\n'
- resu=resu+noeud
- resu=resu+'FINSF\n'
-
-# creation des mailles
- nbma=0
- for i in range(nblig):
- nbp_lig_coupe = lignes[i][2]
- resu=resu+'SEG2\n'
- for j in range(nbp_lig_coupe-1):
- nbma=nbma+1
- maille=' M'+str(nbma)+' N'+str(nbma+i)+' N'+str(nbma+1+i)+'\n'
- resu=resu+maille
- resu=resu+'FINSF\n'
- for i in range(nbngr):
- resu=resu+'SEG2\n'
- for pt in groups[i][1:-1]:
- nbma=nbma+1
- maille=' M'+str(nbma)+' N'+str(nbma+nblig+i)+' N'+str(nbma+nblig+1+i)+'\n'
- resu=resu+maille
- resu=resu+'FINSF\n'
-
-# creation des groupes de mailles (1 par ligne de coupe)
- nbma=0
- for i in range(nblig):
- resu=resu+'GROUP_MA\n'
- resu=resu+' LICOU'+str(i+1)
- nbp_lig_coupe = lignes[i][2]
- for j in range(nbp_lig_coupe-1):
- nbma=nbma+1
- resu=resu+' M'+str(nbma)+'\n'
- resu=resu+'\n'
- resu=resu+'FINSF\n'
- for i in range(nbngr):
- resu=resu+'GROUP_MA\n'
- resu=resu+groups[i][0]
- nbp_lig_coupe = len(groups[i])-1
- for j in range(nbp_lig_coupe-1):
- nbma=nbma+1
- resu=resu+' M'+str(nbma)+'\n'
- resu=resu+'\n'
- resu=resu+'FINSF\n'
- resu=resu+'FIN\n'
-
- return resu
-
-
-########################################################################
-def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM,MODELE,**args):
- """
- Ecriture de la macro MACR_LIGN_COUPE
- """
- import os,string,types
- from Accas import _F
- from Noyau.N_utils import AsType
- import aster
- ier=0
-
- # On importe les definitions des commandes a utiliser dans la macro
- LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
- DEFI_GROUP =self.get_cmd('DEFI_GROUP')
- AFFE_MODELE =self.get_cmd('AFFE_MODELE')
- PROJ_CHAMP =self.get_cmd('PROJ_CHAMP')
- POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
- CREA_TABLE =self.get_cmd('CREA_TABLE')
-
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- nomresu=RESULTAT.nom
- l_modele=aster.getvectjev(nomresu.ljust(19)+'.MODL')
- n_modele=string.strip(l_modele[0])
- if n_modele=='' :
- if MODELE==None:
- ier=ier+1
- self.cr.fatal("<F> <MACR_LIGN_COUPE> nom du modele absent dans le concept resultat "+nomresu)
- return ier
- else : n_modele=MODELE.nom
- l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE .NOMA')
- n_mailla=string.strip(l_mailla[0])
- dime=aster.getvectjev(n_mailla.ljust(8)+'.DIME')[5]
- collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO')
-
- lignes=[]
- groups=[]
- minidim=dime
- for m in LIGN_COUPE :
- if m['NB_POINTS'] !=None :
- lignes.append((m['COOR_ORIG'],m['COOR_EXTR'],m['NB_POINTS']))
- minidim=min(minidim,len(m['COOR_ORIG']),len(m['COOR_EXTR']))
- elif m['GROUP_NO']!=None :
- ngrno=m['GROUP_NO'].ljust(8).upper()
- if ngrno not in collgrno.keys() :
- ier=ier+1
- self.cr.fatal("<F> <MACR_LIGN_COUPE> le group_no "+ngrno+" n est pas dans le maillage "+n_mailla)
- return ier
- grpn=collgrno[ngrno]
- l_coor_group=[ngrno,]
- for node in grpn:
- l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO .VALE',3*(node-1),3))
- groups.append(l_coor_group)
-
- if minidim!=dime:
- ier=ier+1
- self.cr.fatal("<F> <MACR_LIGN_COUPE> dimensions de maillage et de coordonnees incoherentes")
- return ier
-
-
- # Création du maillage des NB_POINTS segments entre COOR_ORIG et COOR_EXTR
- # ainsi que des segments reliant les noeuds issus des group_no demandés
- # par appel au script python crea_mail_lig_coup
- # le maillage est ensuite recopié dans l unité logique UNITE_MAILLAGE
-
- resu_mail=crea_mail_lig_coup(dime,lignes,groups)
- cur_dir=os.getcwd()
- nomFichierSortie =cur_dir+'/fort.'+str(UNITE_MAILLAGE)
- fproc=open(nomFichierSortie,'w')
- fproc.write(resu_mail)
- fproc.close()
-
- # Lecture du maillage de seg2 contenant toutes les lignes de coupe
-
- __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,);
-
- motscles={}
- iocc=1
- motscles['CREA_GROUP_NO']=[]
- for m in LIGN_COUPE :
- if m['NB_POINTS'] !=None :
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA='LICOU'+str(iocc),) )
- iocc=iocc+1
- elif m['GROUP_NO']!=None :
- motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=m['GROUP_NO'].ljust(8).upper(),) )
- __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou , **motscles );
-
- if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
- __mocou=AFFE_MODELE(MAILLAGE=__macou,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='MECANIQUE',
- MODELISATION='BARRE',),);
- elif AsType(RESULTAT).__name__ in ('evol_ther',) :
- __mocou=AFFE_MODELE(MAILLAGE=__macou,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='THERMIQUE',
- MODELISATION='PLAN',),);
-
- __recou=PROJ_CHAMP(METHODE='ELEM',
- RESULTAT=RESULTAT,
- MODELE_1=self.jdc.current_context[n_modele],
- MODELE_2=__mocou,
- TYPE_CHAM='NOEU',
- NOM_CHAM=NOM_CHAM,);
-
- # Production d'une table pour toutes les lignes de coupe
-
- ioc2=0
- mcACTION=[]
- for m in LIGN_COUPE :
- if m['NB_POINTS'] !=None :
- ioc2=ioc2+1
- groupe='LICOU'+str(ioc2)
- if m['INTITULE'] !=None : intitl=m['INTITULE']
- else : intitl='l.coupe'+str(ioc2)
- elif m['GROUP_NO']!=None :
- groupe=m['GROUP_NO'].ljust(8).upper()
- if m['INTITULE'] !=None : intitl=m['INTITULE']
- else : intitl=groupe
- mcACTION.append( _F(INTITULE = intitl,
- RESULTAT = __recou,
- GROUP_NO = groupe,
- NOM_CHAM = NOM_CHAM,
- TOUT_CMP = 'OUI',
- OPERATION = 'EXTRACTION', ) )
-
- __tabitm=POST_RELEVE_T(ACTION=mcACTION,);
-
- # on repasse par les tables python pour supprimer les paramètres inutiles
- # NOEUD (car il est propre au maillage de la ligne) et RESU
-
- self.DeclareOut('nomres',self.sd)
- dictab=__tabitm.EXTR_TABLE()
- listpara=dictab.para
- listpara.remove('NOEUD')
- listpara.remove('RESU')
-
- coltab=[]
- for key in listpara :
- val=dictab[key].values()[key]
- if type(val[0])==types.IntType :
- coltab.append(_F(PARA=key,LISTE_I=val))
- elif type(val[0])==types.FloatType :
- coltab.append(_F(PARA=key,LISTE_R=val))
- elif type(val[0])==types.StringType :
- coltab.append(_F(PARA=key,LISTE_K=val,TYPE_K='K16'))
- nomres=CREA_TABLE(LISTE=coltab)
-
- return ier
+++ /dev/null
-#@ MODIF macr_recal_ops Macro DATE 14/03/2005 AUTEUR DURAND C.DURAND
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
- ITER_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
- GRAPHIQUE, **args ):
- """Macro commande réalisant le recalage de modèles Aster""",
- # Initialisation du compteur d'erreurs
- ier=0
- # On essaie d'importer Numeric -> ERREUR FATALE
- try:
- import Numeric
- except ImportError:
- ier=ier+1
- self.cr.fatal("<F> <MACR_RECAL> Le module Numeric de Python n'a pu etre chargé")
- return ier
- # On essaie d'importer Gnuplot -> PAS DE GRAPHIQUE
- try:
- import Gnuplot
- gnuplot=1
- except ImportError:
- gnuplot=0
- import string
- import copy
- import types
- import Macro
- from Cata import cata
- from Cata.cata import DEFI_LIST_REEL
- from Macro.recal import gestion,transforme_list_Num,calcul_F,graphique
- from Macro import reca_message
- from Macro import reca_algo
- from Macro import reca_interp
- # La macro compte pour 1 dans l'execution des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- self.DeclareOut('nomres',self.sd)
-
- #_______________________________________________
- #
- # GESTION DE L'OPTION FACULTATIVE POUR LES POIDS
- #_______________________________________________
- if( POIDS == None):
- POIDS=Numeric.ones(len(RESU_EXP))
-
- #_____________________________________________
- #
- # GESTION DES ERREURS DE SYNTAXE
- #_____________________________________________
- texte_erreur = gestion(UNITE_ESCL,LIST_PARA,RESU_CALC,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU)
- if (texte_erreur != ""):
- ier=ier+1
- texte_erreur='<F> <MACR_RECAL>'+texte_erreur
- self.cr.fatal(texte_erreur)
- return ier
-
- #_____________________________________________
- #
- # DECLARATION DE TOUTES LES COMMANDES ASTER
- #_____________________________________________
- for k,v in cata.__dict__.items() :
- if type(v)==types.InstanceType:
- if v.__class__.__name__ in ('OPER','MACRO'):
- self.current_context[k]= v
- self.current_context['_F']=cata.__dict__['_F']
-
- #_____________________________________________
- #
- # INITIALISATIONS
- #_____________________________________________
- iter = 0
- restant,temps_iter=0.,0.
- restant,temps_iter,err=reca_algo.temps_CPU(self,restant,temps_iter)
- para,val,borne_inf,borne_sup = transforme_list_Num(LIST_PARA,RESU_EXP)
- val_init = copy.copy(val)
- L_init = calcul_F(self,UNITE_ESCL,para,val,RESU_CALC)
- #instance de la classe gérant l'affichage des resultats du calcul de l'optimisation
- Mess = reca_message.Message(para,RESU_EXP,copy.copy(val_init),UNITE_RESU)
- #instances des classes pour le calcul de l'erreur et le dimensionnemnt/adim
- Simul = reca_interp.Sim_exp(RESU_EXP,POIDS)
- Dim = reca_algo.Dimension(copy.copy(val_init),para)
- L_J_init,erreur = Simul.multi_interpole(L_init, RESU_CALC)
- J_init = Simul.norme_J(copy.copy(L_J_init),copy.copy(L_J_init),UNITE_RESU)
- J = J_init
- A = Simul.sensibilite(self,UNITE_ESCL,L_init,val,para,RESU_CALC,PARA_DIFF_FINI,UNITE_RESU)
- A = Dim.adim_sensi(A)
- l = reca_algo.lambda_init(Numeric.matrixmultiply(Numeric.transpose(A),A))
- gradient_init =reca_algo.calcul_gradient(A,erreur) #utile pour le test de convergence, on prend les valeurs dimensionnées
- residu = reca_algo.test_convergence(gradient_init,erreur,A,Numeric.zeros(len(gradient_init),Numeric.Float))
- Mess.affiche_result_iter(iter,J,val,residu,Numeric.array([]),UNITE_RESU)
- # On teste un manque de temps CPU
- restant,temps_iter,err=reca_algo.temps_CPU(self,restant,temps_iter)
- if (err==1):
- ier=ier+1
- return ier
-
- #_____________________________________________
- #
- # BOUCLE PRINCIPALE DE L'ALGORITHME
- #_____________________________________________
- epsilon = 10.*RESI_GLOB_RELA
- while((residu > RESI_GLOB_RELA) & (iter<ITER_MAXI)):
- iter = iter +1
- new_val, s, l, Act = reca_algo.Levenberg_bornes(self,val,Dim,val_init,borne_inf,borne_sup,A,erreur,l,UNITE_RESU)
- L_F = calcul_F(self,UNITE_ESCL,para,new_val,RESU_CALC)
- new_L_J,new_erreur = Simul.multi_interpole(L_F, RESU_CALC)
- new_J = Simul.norme_J(L_J_init,new_L_J,UNITE_RESU)
- l = reca_algo.actualise_lambda(l,Dim.adim(val),Dim.adim(new_val),A,erreur,new_J,J)
- val = copy.copy(new_val)
- erreur = copy.copy(new_erreur)
- J = new_J
- A = Simul.sensibilite(self,UNITE_ESCL,L_F,val,para,RESU_CALC,PARA_DIFF_FINI,UNITE_RESU)
- A = Dim.adim_sensi(A)
- residu = reca_algo.test_convergence(gradient_init,erreur,A,s)
- Mess.affiche_result_iter(iter,J,val,residu,Act,UNITE_RESU)
- if (gnuplot):
- if (GRAPHIQUE):
- GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
- interactif=(GRAPHIQUE['INTERACTIF']=='OUI')
- graphique(L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,interactif)
- # On teste un manque de temps CPU
- restant,temps_iter,err=reca_algo.temps_CPU(self,restant,temps_iter)
- if (err==1):
- ier=ier+1
- return ier
- #_____________________________________________
- #
- # FIN DES ITERATIONS
- # CONVERGENCE OU ECHEC
- #_____________________________________________
- Mess.affiche_etat_final_convergence(iter,ITER_MAXI,RESI_GLOB_RELA,residu,Act,UNITE_RESU)
- reca_algo.calcul_etat_final(para,A,iter,ITER_MAXI,RESI_GLOB_RELA,residu,Mess,UNITE_RESU)
- #_____________________________________________
- #
- # CREATIONS DE LA LISTE DE REELS CONTENANT
- # LES VALEURS DES PARAMETRES A CONVERGENCE
- #_____________________________________________
- lival=[]
- for i in range(len(val)):
- lival.append(val[i])
- nomres=DEFI_LIST_REEL(VALE=lival)
- return
+++ /dev/null
-#@ MODIF macro_elas_mult_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
- CHAR_MECA_GLOBAL,CHAR_CINE_GLOBAL,LIAISON_DISCRET,
- CAS_CHARGE,SOLVEUR,**args):
- """
- Ecriture de la macro MACRO_ELAS_MULT
- """
- ier=0
- import types
- from Accas import _F
-
- # On met le mot cle NUME_DDL dans une variable locale pour le proteger
- numeddl=NUME_DDL
- # On importe les definitions des commandes a utiliser dans la macro
- CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
- NUME_DDL =self.get_cmd('NUME_DDL')
- ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
- FACT_LDLT =self.get_cmd('FACT_LDLT')
- CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
- ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
- RESO_LDLT =self.get_cmd('RESO_LDLT')
- CREA_RESU =self.get_cmd('CREA_RESU')
- CALC_ELEM =self.get_cmd('CALC_ELEM')
- CALC_NO =self.get_cmd('CALC_NO')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
- # 'nomres' dans le contexte de la macro
-
- self.DeclareOut('nomres',self.sd)
-
- ielas = 0
- ifour = 0
- for m in CAS_CHARGE:
- if m['NOM_CAS']:
- ielas=1 # mot clé NOM_CAS présent sous CAS_CHARGE
- tyresu = 'MULT_ELAS'
- else:
- ifour=1 # mot clé MODE_FOURIER présent sous CAS_CHARGE
- tyresu = 'FOURIER_ELAS'
- if ielas==1 and ifour==1:
- ier=ier+1
- self.cr.fatal("""<F> <MACRO_ELAS_MULT> On ne peut avoir a la fois NOM_CAS et MODE_FOURIER""")
- return ier
-
- if (numeddl in self.sdprods) or (numeddl==None):
- # Si le concept numeddl est dans self.sdprods ou n est pas nommé
- # il doit etre produit par la macro
- # il faudra donc appeler la commande NUME_DDL
- lnume = 1
- else:
- lnume = 0
-
- if ielas==1 :
- motscles={}
- if CHAR_MECA_GLOBAL: motscles['CHARGE'] =CHAR_MECA_GLOBAL
- elif CHAR_CINE_GLOBAL: motscles['CHARGE'] =CHAR_CINE_GLOBAL
- if CHAM_MATER : motscles['CHAM_MATER']=CHAM_MATER
- if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
- __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
-
- if lnume:
- # On peut passer des mots cles egaux a None. Ils sont ignores
- motscles={}
- if SOLVEUR:
- motscles['METHODE'] =SOLVEUR['METHODE']
- motscles['RENUM'] =SOLVEUR['RENUM']
- else:
- motscles['METHODE'] ='MULT_FRONT'
- motscles['RENUM'] ='METIS'
- if numeddl!=None:
- self.DeclareOut('num',numeddl)
- num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
- else:
- _num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
- num=_num
- else:
- num=numeddl
-
- __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
-
- __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
-
-#####################################################################
-# boucle sur les items de CAS_CHARGE
-
- nomchn=[]
- iocc=0
- for m in CAS_CHARGE:
- iocc=iocc+1
-
- if ifour:
- motscles={}
- if CHAR_MECA_GLOBAL: motscles['CHARGE'] =CHAR_MECA_GLOBAL
- elif CHAR_CINE_GLOBAL: motscles['CHARGE'] =CHAR_CINE_GLOBAL
- if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
- if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
- motscles['MODE_FOURIER'] =m['MODE_FOURIER']
- __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
-
- if lnume:
- _num=NUME_DDL(MATR_RIGI=__nomrig,METHODE=SOLVEUR['METHODE'],RENUM=SOLVEUR['RENUM'])
- num=_num
- lnume=0
-
- __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
-
- __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
-
-
- if m['VECT_ASSE']==None :
- motscles={}
- if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
- if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
- if ifour : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
- if m['CHAR_MECA'] : motscles['CHARGE'] =m['CHAR_MECA']
- elif m['CHAR_CINE'] : motscles['CHARGE'] =m['CHAR_CINE']
- __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
- __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
- else :
- __nomasv=m['VECT_ASSE']
-
-
- __nomchn=RESO_LDLT(MATR_FACT=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
- nomchn.append(__nomchn)
-
-# fin de la boucle sur les items de CAS_CHARGE
-#####################################################################
-
- motscles={}
- iocc=0
- motscle2={}
- if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
- if CARA_ELEM : motscle2['CARA_ELEM']=CARA_ELEM
- if CHAM_MATER or CARA_ELEM :
- if ielas :
- motscles['AFFE']=[]
- for m in CAS_CHARGE:
- motscles['AFFE'].append(_F(MODELE=MODELE,
- CHAM_GD=nomchn[iocc],
- NOM_CAS=m['NOM_CAS'],
- **motscle2) )
- iocc=iocc+1
- else :
- motscles['AFFE']=[]
- for m in CAS_CHARGE:
- motscles['AFFE'].append(_F(MODELE=MODELE,
- CHAM_GD=nomchn[iocc],
- NUME_MODE=m['MODE_FOURIER'],
- TYPE_MODE=m['TYPE_MODE'],
- **motscle2) )
- iocc=iocc+1
- else:
- if ielas :
- motscles['AFFE']=[]
- for m in CAS_CHARGE:
- motscles['AFFE'].append(_F(MODELE=MODELE,
- CHAM_GD=nomchn[iocc],
- NOM_CAS=m['NOM_CAS'],) )
- iocc=iocc+1
- else :
- motscles['AFFE']=[]
- for m in CAS_CHARGE:
- motscles['AFFE'].append(_F(MODELE=MODELE,
- CHAM_GD=nomchn[iocc],
- NUME_MODE=m['MODE_FOURIER'],
- TYPE_MODE=m['TYPE_MODE'],) )
- iocc=iocc+1
-
-
- nomres=CREA_RESU(OPERATION='AFFE',TYPE_RESU=tyresu,NOM_CHAM='DEPL',**motscles)
-
-#####################################################################
-# boucle sur les items de CAS_CHARGE pour CALC_ELEM ete CALC_NO
-
- iocc=0
- for m in CAS_CHARGE:
- iocc=iocc+1
-
- if m['OPTION']:
- nbel=0
- nbno=0
- liste_el=[]
- liste_no=[]
- if type(m['OPTION'])==types.StringType:
- if m['OPTION'] in ('FORC_NODA','REAC_NODA',
- 'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
- 'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
- nbno=nbno+1
- liste_no.append(m['OPTION'])
- else:
- nbel=nbel+1
- liste_el.append(m['OPTION'])
- else:
- for opt in m['OPTION']:
- if opt in ('FORC_NODA','REAC_NODA',
- 'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
- 'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
- nbno=nbno+1
- liste_no.append(opt)
- else:
- nbel=nbel+1
- liste_el.append(opt)
-
- lreac=0
- if nbel:
- motscles={}
- if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
- if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
- if ielas:
- motscles['NOM_CAS']=m['NOM_CAS']
- else:
- motscles['NUME_MODE']=m['MODE_FOURIER']
- motscles['EXCIT']=[]
- if m['CHAR_MECA'] :
- for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
- elif m['CHAR_CINE'] :
- for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
- if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
- elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
- CALC_ELEM(reuse=nomres,
- RESULTAT=nomres,
- MODELE=MODELE,
- NIVE_COUCHE=m['NIVE_COUCHE'],
- NUME_COUCHE=m['NUME_COUCHE'],
- OPTION=tuple(liste_el),
- **motscles)
- if nbno:
- motscles={}
- if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
- if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
- if ielas:
- motscles['NOM_CAS']=m['NOM_CAS']
- else:
- motscles['NUME_MODE']=m['MODE_FOURIER']
- motscles['EXCIT']=[]
- if m['CHAR_MECA'] :
- for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
- elif m['CHAR_CINE'] :
- for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
- if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL))
- elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL))
- CALC_NO(reuse=nomres,
- RESULTAT=nomres,
- MODELE=MODELE,
- OPTION=tuple(liste_no),
- **motscles)
-
-# fin de la boucle sur les items de CAS_CHARGE
-#####################################################################
- return ier
-
+++ /dev/null
-#@ MODIF macro_matr_ajou_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATION,MODE_MECA,DEPL_IMPO,
- NUME_DDL_GENE,MODELE_GENE,MATR_MASS_AJOU,MATR_AMOR_AJOU,MATR_RIGI_AJOU,
- NOEUD_DOUBLE,FLUIDE,DDL_IMPO,DIST_REFE,SOLVEUR,INFO,AVEC_MODE_STAT,
- MODE_STAT,MONO_APPUI,
- FORC_AJOU,ECOULEMENT,**args):
- """
- Ecriture de la macro MACRO_MATR_AJOU
- """
- from Accas import _F
- import types
- ier=0
-
- # On importe les definitions des commandes a utiliser dans la macro
- DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
- AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
- AFFE_MODELE =self.get_cmd('AFFE_MODELE')
- AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
- CALC_MATR_AJOU =self.get_cmd('CALC_MATR_AJOU')
- THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
- CALC_FORC_AJOU =self.get_cmd('CALC_FORC_AJOU')
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.set_icmd(1)
-
- if len(FLUIDE)==1 :
- print '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE'
- print ' sera affecte par la masse volumique RHO = ',FLUIDE['RHO']
- if FLUIDE['GROUP_MA']!=None :
- print '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse'
- print 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE.'
- else :
- for flu in FLUIDE :
- if flu['GROUP_MA']==None :
- self.cr.fatal("<F> <MACRO_MATR_AJOU> cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez la masse volumique RHO.")
- ier=ier+1
- return ier
-
- IOCFLU=len(FLUIDE)
-
-# ---------------------------------------------------------------
-# definition du materiau fluide par caracteristique
-# thermique equivalente
-
-# CAS FLUIDE SIMPLE
- if IOCFLU==1 :
- __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
- RHO_CP = FLUIDE[0]['RHO']))
- __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
- AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
- MATER = __NOMMAT), )
-
-# ---------------------------------------------------------------
-# cas fluides multiples
- else :
- affmat=[]
- for flu in FLUIDE:
- __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
- RHO_CP = flu['RHO']))
- mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
- affmat.append(mfact)
-
- __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
- AFFE = affmat )
-
-# ---------------------------------------------------------------
-# commande AFFE_MODELE modele fluide
- __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
- AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
- MODELISATION = MODELISATION,
- PHENOMENE = 'THERMIQUE' ), )
-
-# ---------------------------------------------------------------
-# commande AFFE_MODELE modele interface
- __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
- AFFE = _F( GROUP_MA = GROUP_MA_INTERF,
- MODELISATION = MODELISATION,
- PHENOMENE = 'THERMIQUE' ), )
-
-# ---------------------------------------------------------------
-# commande AFFE_CHAR_THER condition de pression imposee
-# en un point ou un groupe du fluide
- affimp=[]
- nflui=0
- for DDL in DDL_IMPO :
- if DDL['PRES_FLUIDE']!=None :
- nflui=nflui+1
- if DDL['NOEUD'] !=None : mfact=_F(NOEUD =DDL['NOEUD'], TEMP=DDL['PRES_FLUIDE'])
- if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
- affimp.append(mfact)
- if nflui==0:
- self.cr.fatal("<F> <MACRO_MATR_AJOU> PRES_FLUIDE obligatoire une fois")
- ier=ier+1
- return ier
-
- __CHARGE=AFFE_CHAR_THER( MODELE = __NOMFLU,
- TEMP_IMPO = affimp )
-
-# ---------------------------------------------------------------
-# calcul des masses, rigidites et amortissements ajoutes en theorie
-# potentielle
-# commande CALC_MATR_AJOU, calcul de la masse ajoutee
-
- if MATR_MASS_AJOU!=None :
- self.DeclareOut('MASSAJ',MATR_MASS_AJOU)
- solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- mostcles={}
- if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
- if INFO !=None : mostcles['INFO'] =INFO
- if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
- elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
- elif MODELE_GENE !=None :
- mostcles['MODELE_GENE'] =MODELE_GENE
- mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
- mostcles['DIST_REFE'] =DIST_REFE
- if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
-
- MASSAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
- MODELE_INTERFACE = __NOMINT,
- CHARGE = __CHARGE,
- CHAM_MATER = __NOMCMA,
- OPTION = 'MASS_AJOU',
- SOLVEUR = solveur,
- **mostcles)
-
-# ---------------------------------------------------------------
-# calcul de l amortissement ajoute
- if (MATR_AMOR_AJOU!=None ) or (MATR_RIGI_AJOU!=None ):
-
-# ---------------------------------------------------------------
-# on definit un nouveau modele fluide pour calculer
-# le potentiel stationnaire - AFFE_MODELE
- grma=[GROUP_MA_FLUIDE,]
- if ECOULEMENT!=None :
- grma.append(ECOULEMENT['GROUP_MA_1'])
- grma.append(ECOULEMENT['GROUP_MA_2'])
- __NOFLUI=AFFE_MODELE( MAILLAGE = MAILLAGE,
- AFFE = _F( GROUP_MA = grma,
- MODELISATION = MODELISATION,
- PHENOMENE = 'THERMIQUE' ), )
- affimp=[]
- for DDL in DDL_IMPO :
- if DDL['PRES_SORTIE']!=None :
- if DDL['NOEUD'] !=None : mfact=_F(NOEUD =DDL['NOEUD'], TEMP=DDL['PRES_SORTIE'])
- if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_SORTIE'])
- affimp.append(mfact)
-
- affecl=[]
- for ECL in ECOULEMENT :
- mfact=_F(GROUP_MA=ECL['GROUP_MA_1'],FLUN=ECL['VNOR_1'])
- affecl.append(mfact)
- mfact=_F(GROUP_MA=ECL['GROUP_MA_2'],FLUN=ECL['VNOR_2'])
- affecl.append(mfact)
- __CHARG2=AFFE_CHAR_THER( MODELE = __NOFLUI,
- TEMP_IMPO = affimp ,
- FLUX_REP = affecl )
-
- __POTEN = THER_LINEAIRE( MODELE = __NOFLUI,
- CHAM_MATER = __NOMCMA ,
- EXCIT = _F( CHARGE = __CHARG2 ) )
-
-# ---------------------------------------------------------------
-# calcul amortissement proprement dit
- if MATR_AMOR_AJOU!=None :
- self.DeclareOut('AMORAJ',MATR_AMOR_AJOU)
- solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- mostcles={}
- if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
- if INFO !=None : mostcles['INFO'] =INFO
- if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
- elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
- else :
- self.cr.fatal("<F> <MACRO_MATR_AJOU> amortissement ajoute sur modele generalise non encore implante")
- ier=ier+1
- return ier
-
- AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
- MODELE_INTERFACE = __NOMINT,
- CHARGE = __CHARGE,
- CHAM_MATER = __NOMCMA,
- OPTION = 'AMOR_AJOU',
- SOLVEUR = solveur,
- POTENTIEL = __POTEN,
- **mostcles)
-
-# ---------------------------------------------------------------
-# calcul de la rigidite ajoutee
- if MATR_RIGI_AJOU!=None :
- self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
- solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- mostcles={}
- if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
- if INFO !=None : mostcles['INFO'] =INFO
- if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
- elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
- else :
- self.cr.fatal("<F> <MACRO_MATR_AJOU> rigidite ajoutee sur modele generalise non encore implante")
- ier=ier+1
- return ier
-
- RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
- MODELE_INTERFACE = __NOMINT,
- CHARGE = __CHARGE,
- CHAM_MATER = __NOMCMA,
- OPTION = 'RIGI_AJOU',
- SOLVEUR = solveur,
- POTENTIEL = __POTEN,
- **mostcles)
-
-# ---------------------------------------------------------------
-# boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
- if FORC_AJOU!=None :
- for FORCAJ in FORC_AJOU:
- self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
- solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
- mostcles={}
- if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
- if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
- elif MODELE_GENE !=None :
- mostcles['MODELE_GENE'] =MODELE_GENE
- mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
- mostcles['DIST_REFE'] =DIST_REFE
- if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
- if MODE_STAT !=None :
- mostcles['MODE_STAT'] =MODE_STAT
- if FORCAJ['NOEUD'] !=None : mostcles['NOEUD'] =FORCAJ['NOEUD']
- if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO'] =FORCAJ['GROUP_NO']
- else :
- mostcles['MONO_APPUI'] =MONO_APPUI
-
- VECTAJ = CALC_FORC_AJOU(DIRECTION = FORCAJ['DIRECTION'],
- MODELE_FLUIDE = __NOMFLU,
- MODELE_INTERFACE = __NOMINT,
- CHARGE = __CHARGE,
- CHAM_MATER = __NOMCMA,
- SOLVEUR = solveur,
- **mostcles)
-
-
- return ier
+++ /dev/null
-#@ MODIF macro_matr_asse_ops Macro DATE 01/04/2005 AUTEUR VABHHTS J.PELLET
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
- SOLVEUR,NUME_DDL,CHARGE,INST,**args):
- """
- Ecriture de la macro MACRO_MATR_ASSE
- """
- ier=0
-
- # On met le mot cle NUME_DDL dans une variable locale pour le proteger
- numeddl=NUME_DDL
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
- NUME_DDL =self.get_cmd('NUME_DDL')
- ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- if SOLVEUR:
- methode=SOLVEUR['METHODE']
- if methode=='LDLT':
- if SOLVEUR['RENUM']:
- renum=SOLVEUR['RENUM']
- else:
- renum='RCMK'
- if renum not in ('SANS','RCMK'):
- ier=ier+1
- self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
- return ier
- elif methode=='MULT_FRONT':
- if SOLVEUR['RENUM']:
- renum=SOLVEUR['RENUM']
- else:
- renum='MDA'
- if renum not in ('MDA','MD','METIS'):
- ier=ier+1
- self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
- return ier
- elif methode=='MUMPS':
- if SOLVEUR['RENUM']:
- renum=SOLVEUR['RENUM']
- else:
- renum='SANS'
- if renum not in ('SANS',):
- ier=ier+1
- self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode MUMPS, RENUM doit etre SANS.")
- return ier
- elif methode=='GCPC':
- if SOLVEUR['RENUM']:
- renum=SOLVEUR['RENUM']
- else:
- renum='SANS'
- if renum not in ('SANS','RCMK'):
- ier=ier+1
- self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
- return ier
- else:
- methode='MULT_FRONT'
- renum ='MDA'
-
- if numeddl in self.sdprods:
- # Si le concept numeddl est dans self.sdprods
- # il doit etre produit par la macro
- # il faudra donc appeler la commande NUME_DDL
- lnume = 1
- else:
- lnume = 0
- lrigel = 0
- lmasel = 0
-
-# decalage eventuel en premiere position dans la liste de l occurence de MATR_ASSE contenant
-# l option de rigidite
- try :
- for m in MATR_ASSE:
- option=m['OPTION']
- if option in ('RIGI_MECA','RIGI_MECA_LAGR','RIGI_THER','RIGI_ACOU') :
- decal=m
- MATR_ASSE.remove(decal)
- MATR_ASSE.insert(0,decal)
- break
- except: pass
-
- iocc=0
- for m in MATR_ASSE:
- iocc=iocc+1
- option=m['OPTION']
- if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
- 'RIGI_THER','RIGI_ACOU') :
- ier=ier+1
- self.cr.fatal("<F> <MACRO_MATR_ASSE> UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
- return ier
-
-
- motscles={'OPTION':option}
- if option == 'AMOR_MECA':
- if (not lrigel or not lmasel):
- ier=ier+1
- self.cr.fatal("""<F> <MACRO_MATR_ASSE> POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
- RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
- return ier
- if CHAM_MATER != None:
- motscles['RIGI_MECA'] =rigel
- motscles['MASS_MECA'] =masel
- if CHARGE != None:
- if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
- motscles['CHARGE'] =CHARGE
- if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER
- if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM
- if INST != None: motscles['INST'] =INST
-
- try : motscles['SIEF_ELGA'] =m['SIEF_ELGA']
- except IndexError : pass
-
- try : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
- except IndexError : pass
-
- try : motscles['THETA'] =m['THETA']
- except IndexError : pass
-
- try : motscles['PROPAGATION'] =m['PROPAGATION']
- except IndexError : pass
- print motscles
- __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
-
- if option == 'RIGI_MECA':
- rigel = __a
- lrigel = 1
- if option == 'MASS_MECA':
- masel = __a
- lmasel = 1
-
- if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
- self.DeclareOut('num',numeddl)
- # On peut passer des mots cles egaux a None. Ils sont ignores
- num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
- else:
- num=numeddl
-
- self.DeclareOut('mm',m['MATRICE'])
- mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
- return ier
+++ /dev/null
-#@ MODIF macro_miss_3d_ops Macro DATE 03/11/2004 AUTEUR ACBHHCD G.DEVESA
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
- UNITE_MODELE_SOL,UNITE_RESU_IMPE,
- PROJET,REPERTOIRE,OPTION,VERSION,**args):
- """
- Ecriture de la macro MACRO_MISS_3D
- """
- import types
- from Accas import _F
-
- ier=0
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
- EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- DEFI_FICHIER(ACTION='LIBERER',UNITE=UNITE_IMPR_ASTER)
-
- import aster
- loc_fic=aster.repout()
- miss3d=loc_fic+'miss3d'
- #miss3d='/home/acbhhcd/MISS3D/V6.4/miss3d.csh'
-
- if OPTION['TOUT']!=None:
- MODUL2='COMPLET'
- elif OPTION['MODULE']=='MISS_IMPE':
- MODUL2='CALC_IMPE'
- elif OPTION['MODULE']=='MISS_EVOL':
- MODUL2='MISS_PTAS'
- elif OPTION['MODULE']=='PRE_MISS':
- MODUL2='GTASTER'
-
- ETUDE = PROJET
- BASE = REPERTOIRE
- paste = 'fort.'+str(UNITE_IMPR_ASTER)
- popti = 'fort.'+str(UNITE_OPTI_MISS)
- pdsol = 'fort.'+str(UNITE_MODELE_SOL)
- primp = 'fort.'+str(UNITE_RESU_IMPE)
-
- EXEC_LOGICIEL(
- LOGICIEL=miss3d,
- ARGUMENT=(_F(NOM_PARA=MODUL2),
- _F(NOM_PARA=ETUDE),
- _F(NOM_PARA=BASE),
- _F(NOM_PARA=paste),
- _F(NOM_PARA=popti),
- _F(NOM_PARA=pdsol),
- _F(NOM_PARA=primp),
- _F(NOM_PARA=VERSION), ),
- )
-
- return ier
+++ /dev/null
-#@ MODIF macro_mode_meca_ops Macro DATE 30/11/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
- VERI_MODE,NORM_MODE,FILTRE_MODE,IMPRESSION,**args):
- """
- Ecriture de la macro MACRO_MODE_MECA
- """
- from Accas import _F
- ier=0
-
- # on protege le contenu du mot cle NORM_MODE pour eviter les confusions
- # avec la commande du meme nom
-
- normode=NORM_MODE
-
- # On importe les definitions des commandes a utiliser dans la macro
- MODE_ITER_SIMULT =self.get_cmd('MODE_ITER_SIMULT')
- NORM_MODE =self.get_cmd('NORM_MODE')
- IMPR_RESU =self.get_cmd('IMPR_RESU')
- EXTR_MODE =self.get_cmd('EXTR_MODE')
- DETRUIRE =self.get_cmd('DETRUIRE')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- nompro=None
- iocc=0
- if CALC_FREQ['FREQ']:
- nnfreq=len(CALC_FREQ['FREQ'])
- else:
- lborne=[]
- nnfreq= CALC_FREQ['NB_BLOC_FREQ']+1
- zlborn=(CALC_FREQ['FREQ_MAX']-CALC_FREQ['FREQ_MIN'])/(nnfreq-1)
- for i in range(0,nnfreq):
- lborne.append(CALC_FREQ['FREQ_MIN']+i*zlborn)
-
- motscles={}
- motscles['FILTRE_MODE']=[]
- for i in range(0,nnfreq-1):
- motscit={}
- motscfa={}
- if CALC_FREQ['DIM_SOUS_ESPACE']: motscfa['DIM_SOUS_ESPACE']=CALC_FREQ['DIM_SOUS_ESPACE']
- if CALC_FREQ['COEF_DIM_ESPACE']: motscfa['COEF_DIM_ESPACE']=CALC_FREQ['COEF_DIM_ESPACE']
- if CALC_FREQ['FREQ']:
- motscfa['FREQ']=(CALC_FREQ['FREQ'][i],CALC_FREQ['FREQ'][i+1])
- else:
- motscfa['FREQ']=(lborne[i],lborne[i+1])
- motscit['CALC_FREQ']=_F(OPTION ='BANDE',
- SEUIL_FREQ =CALC_FREQ['SEUIL_FREQ'],
- NPREC_SOLVEUR =CALC_FREQ['NPREC_SOLVEUR'],
- NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
- PREC_SHIFT =CALC_FREQ['PREC_SHIFT'],
- **motscfa)
- motscit['VERI_MODE']=_F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
- SEUIL =VERI_MODE['SEUIL'],
- STURM =VERI_MODE['STURM'],
- PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
- motscit['STOP_FREQ_VIDE']=CALC_FREQ['STOP_FREQ_VIDE']
-
- if METHODE=='TRI_DIAG':
- if args.has_key('NMAX_ITER_ORTHO'):
- motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
- if args.has_key('PREC_ORTHO'):
- motscit['PREC_ORTHO'] =args['PREC_ORTHO']
- if args.has_key('PREC_LANCZOS'):
- motscit['PREC_LANCZOS'] =args['PREC_LANCZOS']
- if args.has_key('MAX_ITER_QR'):
- motscit['NMAX_ITER_QR'] =args['NMAX_ITER_QR']
- elif METHODE=='JACOBI':
- if args.has_key('NMAX_ITER_BATHE'):
- motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
- if args.has_key('PREC_BATHE'):
- motscit['PREC_BATHE'] =args['PREC_BATHE']
- if args.has_key('NMAX_ITER_JACOBI'):
- motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
- if args.has_key('PREC_JACOBI'):
- motscit['PREC_JACOBI'] =args['PREC_JACOBI']
- elif METHODE=='SORENSEN':
- if args.has_key('NMAX_ITER_SOREN'):
- motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
- if args.has_key('PARA_ORTHO_SOREN'):
- motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
- if args.has_key('PREC_SOREN'):
- motscit['PREC_SOREN'] =args['PREC_SOREN']
-
- __nomre0=MODE_ITER_SIMULT(MATR_A =MATR_A,
- MATR_B =MATR_B,
- INFO =INFO,
- METHODE =METHODE,
- OPTION =OPTION,
- **motscit)
-
- __nomre0=NORM_MODE(reuse =__nomre0,
- MASS_INER =normode['MASS_INER'],
- MODE =__nomre0,
- NORME =normode['NORME'],
- INFO =normode['INFO'],)
-
- if IMPRESSION['TOUT_PARA']=='OUI':
- IMPR_RESU(RESU=_F(RESULTAT=__nomre0,
- TOUT_ORDRE='OUI',
- TOUT_CHAM ='NON',
- TOUT_PARA ='OUI',) )
-
- if FILTRE_MODE :
- motscles['FILTRE_MODE'].append(_F(MODE =__nomre0,
- CRIT_EXTR =FILTRE_MODE['CRIT_EXTR'],
- SEUIL =FILTRE_MODE['SEUIL'], ))
- else:
- motscles['FILTRE_MODE'].append(_F(MODE =__nomre0,
- TOUT_ORDRE='OUI',) )
-
-
- motscles['IMPRESSION']=_F(CUMUL =IMPRESSION['CUMUL'],
- CRIT_EXTR=IMPRESSION['CRIT_EXTR'],)
- self.DeclareOut('nomres',self.sd)
- nomres=EXTR_MODE(**motscles)
- DETRUIRE(CONCEPT=_F(NOM='__nomre0',),ALARME='NON')
- return ier
+++ /dev/null
-#@ MODIF macro_proj_base_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,**args):
- """
- Ecriture de la macro MACRO_PROJ_BASE
- """
- ier=0
- # On importe les definitions des commandes a utiliser dans la macro
- NUME_DDL_GENE =self.get_cmd('NUME_DDL_GENE')
- PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
- PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=PROFIL)
- if MATR_ASSE_GENE:
- for m in MATR_ASSE_GENE:
- motscles={}
- if m['MATR_ASSE'] : motscles['MATR_ASSE'] =m['MATR_ASSE']
- elif m['MATR_ASSE_GENE']: motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
- else:
- ier=ier+1
- self.cr.fatal("<F> <MACRO_PROJ_BASE> MATR_ASSE et MATR_ASSE_GENE absents")
- return ier
- self.DeclareOut('mm',m['MATRICE'])
- mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
-
- if VECT_ASSE_GENE:
- _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=PROFIL)
- for v in VECT_ASSE_GENE:
- motscles={}
- if v['VECT_ASSE'] : motscles['VECT_ASSE'] =v['VECT_ASSE']
- elif v['VECT_ASSE_GENE']: motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
- else:
- ier=ier+1
- self.cr.fatal("<F> <MACRO_PROJ_BASE>MATR_ASSE et MATR_ASSE_GENE absents")
- return ier
- motscles['TYPE_VECT']=v['TYPE_VECT']
- self.DeclareOut('vv',v['VECTEUR'])
- vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
-
- return ier
+++ /dev/null
-#@ MODIF reca_algo Macro DATE 14/03/2005 AUTEUR DURAND C.DURAND
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-import Numeric
-from Numeric import take
-import copy,os
-import LinearAlgebra
-from Cata.cata import INFO_EXEC_ASTER
-from Cata.cata import DETRUIRE
-from Accas import _F
-
-
-def calcul_gradient(A,erreur):
- grad = Numeric.dot(Numeric.transpose(A),erreur)
- return grad
-
-
-#-------------------------------------------
-#classe gérant l'adimensionnement et le dimensionnemnt
-class Dimension:
- #le constructeur calcul la matrice D et son inverse
- def __init__(self,val_initiales,para):
- self.val_init = val_initiales
- dim =len(self.val_init)
- self.D = Numeric.zeros((dim,dim),Numeric.Float)
- for i in range(dim):
- self.D[i][i] = self.val_init[i]
- self.inv_D=LinearAlgebra.inverse(self.D)
-
-
- def adim_sensi(self,A):
- for i in range(A.shape[0]):
- for j in range(A.shape[1]):
- A[i,j] = A[i,j] * self.val_init[j]
- return A
-
-
-
- def redim_sensi(self,A):
- for i in range(A.shape[0]):
- for j in range(A.shape[1]):
- A[i,j] = A[i,j] / self.val_init[j]
- return A
-
-
- def adim(self,tab):
- tab_adim = Numeric.dot(self.inv_D,copy.copy(tab))
- return tab_adim
-
-
- def redim(self,tab_adim):
- tab = Numeric.dot(self.D,tab_adim)
- return tab
-
-#------------------------------------------
-def cond(matrix):
- e1=LinearAlgebra.eigenvalues(matrix)
- e=map(abs,e1)
- size=len(e)
- e=Numeric.sort(e)
- try:
- condi=e[size-1]/e[0]
- except ZeroDivisionError:
- condi=0.0
- return condi,e[size-1],e[0]
-
-#-----------------------------------------
-def norm(matrix):
- e=LinearAlgebra.Heigenvalues(matrix)
- size=len(e)
- e=Numeric.sort(e)
- norm=e[size-1]
- return norm
-
-#-----------------------------------------
-def lambda_init(matrix):
-# Routine qui calcule la valeur initial du parametre
-# de regularisation l.
- condi,emax,emin=cond(matrix)
- id=Numeric.identity(matrix.shape[0])
- if (condi==0.0):
- l=1.e-3*norm(matrix)
- elif (condi<=10000):
- l=1.e-16*norm(matrix)
- elif (condi>10000):
- l=abs(10000.*emin-emax)/10001.
- return l
-
-#-----------------------------------------
-
-
-def temps_CPU(self,restant_old,temps_iter_old):
- # Fonction controlant le temps CPU restant
- CPU=INFO_EXEC_ASTER(LISTE_INFO = ("CPU_RESTANT",))
- TEMPS=CPU['CPU_RESTANT',1]
- DETRUIRE(CONCEPT=_F(NOM='CPU'),INFO=1)
- err=0
- # Indique une execution interactive
- if (TEMPS>1.E+9):
- return 0.,0.,0
- # Indique une execution en batch
- else:
- restant=TEMPS
- # Initialisation
- if (restant_old==0.):
- temps_iter=-1.
- else:
- # Première mesure
- if (temps_iter_old==-1.):
- temps_iter=(restant_old-restant)
- # Mesure courante
- else:
- temps_iter=(temps_iter_old + (restant_old-restant))/2.
- if ((temps_iter>0.96*restant)or(restant<0.)):
- err=1
- self.cr.fatal("<F> <MACR_RECAL> Arret de MACR_RECAL par manque de temps CPU")
- return restant,temps_iter,err
-
-
-
-
-def Levenberg_bornes(self,val,Dim,val_init,borne_inf,borne_sup,A,erreur,l,ul_out):
- # on resoud le système par contraintes actives:
- # Q.dval + s + d =0
- # soumis à :
- # borne_inf < dval < borne_sup
- # 0 < s
- # s.(borne_inf - dval)=0
- # s.(borne_sup - dval)=0
- dim = len(val)
- id = Numeric.identity(dim)
- # Matrice du système
- Q=Numeric.matrixmultiply(Numeric.transpose(A),A) +l*id
- # Second membre du système
- d=Numeric.matrixmultiply(Numeric.transpose(A),erreur)
- # Ens. de liaisons actives
- Act=Numeric.array([])
- k=0
- done=0
- # Increment des parametres
- dval=Numeric.zeros(dim,Numeric.Float)
- while done <1 :
- k=k+1
- I=Numeric.ones(dim)
- for i in Act:
- I[i]=0
- I=Numeric.nonzero(Numeric.greater(I,0))
- s=Numeric.zeros(dim,Numeric.Float)
- for i in Act:
- # test sur les bornes (on stocke si on est en butée haute ou basse)
- if (val[i]+dval[i]>=borne_sup[i]):
- dval[i]=borne_sup[i]-val[i]
- s[i]=1.
- if (val[i]+dval[i]<=borne_inf[i]):
- dval[i]=borne_inf[i]-val[i]
- s[i]=-1.
- if (len(I)!=0):
- # xi=-Q(I)-1.(d(I)+Q(I,Act).dval(Act))
- xi=-LinearAlgebra.solve_linear_equations(take(take(Q,I),I,1),(take(d,I)+Numeric.dot(take(take(Q,I),Act,1),take(Dim.adim(dval),Act))))
- for i in Numeric.arange(len(I)):
- dval[I[i]]=xi[i]*val_init[I[i]]
- if (len(Act)!=0):
- # s(Av)=-d(Act)-Q(Act,:).dval
- sa=-take(d,Act)-Numeric.dot(take(Q,Act),Dim.adim(dval))
- for i in range(len(Act)):
- if (s[Act[i]]==-1.):
- s[Act[i]]=-sa[i]
- else:
- s[Act[i]]=sa[i]
- # Nouvel ens. de liaisons actives
- Act=Numeric.concatenate((Numeric.nonzero(Numeric.greater(dval,borne_sup-val)),Numeric.nonzero(Numeric.less(dval,borne_inf-val)),Numeric.nonzero(Numeric.greater(s,0.))))
- done=(max(val+dval-borne_sup)<=0)&(min(val+dval-borne_inf)>=0)&(min(s)>=0.0)
- # Pour éviter le cyclage
- if (k>50):
- try:
- l=l*2
- Q=Numeric.matrixmultiply(Numeric.transpose(A),A) +l*id
- k=0
- except:
- res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
- res.write('\n\nQ = \n'+Numeric.array2string(Q-l*id,array_output=1,separator=','))
- res.write('\n\nd = '+Numeric.array2string(d,array_output=1,separator=','))
- res.write('\n\nval = '+Numeric.array2string(val,array_output=1,separator=','))
- res.write('\n\nval_ini= '+Numeric.array2string(val_init,array_output=1,separator=','))
- res.write('\n\nborne_inf= '+Numeric.array2string(borne_inf,array_output=1,separator=','))
- res.write('\n\nborne_sup= '+Numeric.array2string(borne_sup,array_output=1,separator=','))
- self.cr.fatal("<F> <MACR_RECAL> Erreur dans l'algorithme de bornes de MACR_RECAL")
- return
- newval=copy.copy(val+dval)
- return newval,s,l,Act
-
-
-def actualise_lambda(l,val,new_val,A,erreur,new_J,old_J):
- dim = len(val)
- id = Numeric.identity(dim)
- # Matrice du système
- Q=Numeric.matrixmultiply(Numeric.transpose(A),A) +l*id
- # Second membre du système
- d=Numeric.matrixmultiply(Numeric.transpose(A),erreur)
- old_Q=old_J
- new_Q=old_J+0.5*Numeric.dot(Numeric.transpose(new_val-val),Numeric.dot(Q,new_val-val))+Numeric.dot(Numeric.transpose(new_val-val),d)
- # Ratio de la décroissance réelle et de l'approx. quad.
- try:
- R=(old_J-new_J)/(old_Q-new_Q)
- if (R<0.25):
- l = l*10.
- elif (R>0.75):
- l = l/15.
- except ZeroDivisionError:
- if (old_J>new_J):
- l = l*10.
- else:
- l = l/10.
- return l
-
-
-def test_convergence(gradient_init,erreur,A,s):
- gradient = calcul_gradient(A,erreur)+s
- epsilon = Numeric.dot(gradient,gradient)/Numeric.dot(gradient_init,gradient_init)
- epsilon = epsilon**0.5
- return epsilon
-
-
-# fonction appellée quand la convergence est atteinte
-# on calcule le Hessien et les valeurs propres et vecteurs
-# propre associés au Hessien
-# A = sensibilite
-# At*A = hessien
-def calcul_etat_final(para,A,iter,max_iter,prec,residu,Messg,ul_out):
- if ((iter < max_iter) or (residu < prec)):
- Hessien = Numeric.matrixmultiply(Numeric.transpose(A),A)
- valeurs_propres,vecteurs_propres = LinearAlgebra.eigenvectors(Hessien)
- sensible=Numeric.nonzero(Numeric.greater(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-1))
- insensible=Numeric.nonzero(Numeric.less(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-2))
- Messg.affiche_calcul_etat_final(para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible,ul_out)
-
-
-
-
-
+++ /dev/null
-#@ MODIF reca_interp Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-import os
-import Numeric
-import Macro
-from Macro.recal import calcul_F
-
-#===========================================================================================
-
-
-# INTERPOLATION, CALCUL DE SENSIBILITE, ETC....
-
-#--------------------------------------
-class Sim_exp :
-
- def __init__ (self,result_exp,poids) :
- self.resu_exp = result_exp
- self.poids = poids
-
-# Distance verticale d'un point M à une ligne brisée composée de n points
-
- def DistVertAdimPointLigneBrisee (self, M, points) :
- # M = Point (2 colonnes, 1 ligne)
- # points = Tableau de n points (2 colonnes, n lignes)
- # on suppose qu'il existe au moins 2 points,
- # et que les points sont classés selon les abscisses croissantes
- n = len(points)
- if ( M[0] < points[0][0] ) or ( M[0] > points[n-1][0] ) :
- return 0.
- i = 1
- while M[0] > points[i][0] :
- i = i+1
- y_proj_vert = (M[0]-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]
- d = (M[1] - y_proj_vert)
- # Attention: la distance n'est pas normalisée
- # Attention: problème si points[0][0] = points[1][0] = M[0]
- # Attention: problème si M[1] = 0
- return d
-
-
-# La Fonction Interpole ,interpole une et une seule F_calc sur F_exp et renvoie l'erreur seulement
- def Interpole (self, F_calc,experience,poids) : #ici on passe en argument "une" experience
- n = 0
- resu_num = F_calc
- n_exp = len(experience) # nombre de points sur la courbe expérimentale num.i
- stockage = Numeric.ones(n_exp, Numeric.Float) # matrice de stockage des erreurs en chaque point
- for j in xrange(n_exp) :
- d = self.DistVertAdimPointLigneBrisee(experience[j], resu_num)
- try:
- stockage[n] = d/experience[j][1]
- except ZeroDivisionError:
- stockage[n] = d
- n = n + 1 # on totalise le nombre de points valables
- err = Numeric.ones(n, Numeric.Float)
- for i in xrange(n) :
- err[i] = poids*stockage[i]
- return err
-
- #cette fonction appelle la fonction interpole et retourne les sous fonctionnelle J et l'erreur
- def multi_interpole(self,L_F, reponses): #on interpole toutes les reponses une à une en appelent la methode interpole
- L_erreur=[]
- for i in range(len(reponses)):
- err = self.Interpole(L_F[i],self.resu_exp[i],self.poids[i])
- L_erreur.append(err)
- #on transforme L_erreur en tab num
- dim=[]
- J=[]
- for i in range(len(L_erreur)):
- dim.append(len(L_erreur[i]))
- dim_totale = Numeric.sum(dim)
- L_J = self.calcul_J(L_erreur)
- a=0
- erreur = Numeric.zeros((dim_totale),Numeric.Float)
- for n in range(len(L_erreur)):
- for i in range(dim[n]):
- erreur[i+a] = L_erreur[n][i]
- a = dim[n]
- del(L_erreur) #on vide la liste puisqu'on n'en a plus besoin
- return L_J,erreur
-
- #cette fonction retourne seulement l'erreur ,je l'appelle dans la methode sensibilité
- #on interpole toutes les reponses une à une en appelent la methode interpole
- def multi_interpole_sensib(self,L_F,reponses):
- L_erreur=[]
- for i in range(len(reponses)):
- err = self.Interpole(L_F[i],self.resu_exp[i],self.poids[i])
- L_erreur.append(err)
- #on transforme L_erreur en tab num
- return L_erreur
-
- def calcul_J(self,L_erreur):
- L_J = []
- for i in range(len(L_erreur)):
- total = 0
- for j in range(len(L_erreur[i])):
- total = total + L_erreur[i][j]**2
- L_J.append(total)
- return L_J
-
- def norme_J(self,L_J_init,L_J,unite_resu):
- #cette fonction calcul une valeur normée de J
- for i in range(len(L_J)):
- try:
- L_J[i] = L_J[i]/L_J_init[i]
- except ZeroDivisionError:
- fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
- fic.write('\n Problème de division par zéro dans la normalisation de la fonctionnelle.')
- fic.write('\n Une des valeurs de la fonctionnelle initiale est nulle ou inférieure à la précision machine :'+ str(L_J_init))
- fic.close()
- self.cr.fatal("<F> <MACR_RECAL> Problème de division par zéro dans la normalisation de la fonctionnelle.\nUne des valeurs de la fonctionnelle initiale est nulle ou inférieure à la précision machine :"+ str(L_J_init))
- return
-
- J = Numeric.sum(L_J)
- J = J/len(L_J)
- return J
-
- def sensibilite(self,objet,UL,F,val,para,reponses,pas,unite_resu):
- F_interp=self.multi_interpole_sensib(F, reponses) #F_interp est une liste contenant des tab num des reponses interpolés
- L_A=[] #creation de la liste des matrices de sensibilités
- for i in range(len(reponses)):
- L_A.append(Numeric.zeros((len(self.resu_exp[i]),len(val)),Numeric.Float) )
- #calcul de la sensibilité
- fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
- fic.write('\nCalcul de la sensibilité par rapport à :')
- fic.close()
- for k in range(len(val)): #pour une colone de A
- h = val[k]*pas
- val[k] = val[k] + h
- F_perturbe = calcul_F(objet,UL,para,val,reponses)
- fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
- fic.write(' '+para[k])
- fic.close()
- F_perturbe_interp =self.multi_interpole_sensib(F_perturbe, reponses)
- val[k] = val[k] - h
- for j in range(len(reponses)):
- for i in range(len(self.resu_exp[j])):
- try:
- L_A[j][i,k] = -1*(F_interp[j][i] - F_perturbe_interp[j][i])/h
- except ZeroDivisionError:
- fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
- fic.write('\n Probleme de division par zéro dans le calcul de la matrice de sensiblité')
- fic.write('\n Le parametre '+para[k]+'est nul ou plus petit que la précision machine')
- fic.close()
- self.cr.fatal("<F> <MACR_RECAL> Probleme de division par zéro dans le calcul de la matrice de sensiblité.\n Le parametre "+para[k]+"est nul ou plus petit que la précision machine")
- return
- #on construit la matrice de sensiblité sous forme d'un tab num
- dim =[]
- for i in range(len(L_A)):
- dim.append(len(L_A[i]))
- dim_totale = Numeric.sum(dim)
- a=0
- A = Numeric.zeros((dim_totale,len(val)),Numeric.Float)
- for n in range(len(L_A)):
- for k in range(len(val)):
- for i in range(dim[n]):
- A[i+a][k] = L_A[n][i,k]
- a=dim[n]
- del(L_A) #on ecrase tout ce qu'il y a dans L_A puisqu'on n'en a plus besoin
- return A
-
-
-
+++ /dev/null
-#@ MODIF reca_message Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-import os,Numeric
-
-#===========================================================================================
-
-
-# AFFICHAGE DES MESSAGES
-
-class Message :
- """classe gérant l'affichage des messages concernant le déroulement de l'optmisation """
- #Constructeur de la classe
- def __init__(self,para,val_init,resu_exp,ul_out):
- self.nom_para = para
- self.res_exp = resu_exp
- res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
- res.write(' <INFO> MACR_RECAL V1.1 \n\n\n')
- res.close()
-
-
- def affiche_result_iter(self,iter,J,val,residu,Act,ul_out):
- res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
- res.write('\n=======================================================\n')
- res.write('Iteration '+str(iter)+' :\n')
- res.write('\n=> Fonctionnelle = '+str(J))
- res.write('\n=> Résidu = '+str(residu))
- res.write('\n=> Paramètres = ')
- for i in range(len(val)):
- res.write('\n '+ self.nom_para[i]+' = '+str(val[i]) )
- if (len(Act)!=0):
- if (len(Act)==1):
- res.write('\n\n Le paramètre ')
- else:
- res.write('\n\n Les paramètres ')
- for i in Act:
- res.write(self.nom_para[i]+' ')
- if (len(Act)==1):
- res.write('\n est en butée sur un bord de leur domaine admissible.')
- else:
- res.write('\n sont en butée sur un bord de leur domaine admissible.')
- res.write('\n=======================================================\n\n')
- res.close()
-
- def affiche_etat_final_convergence(self,iter,max_iter,prec,residu,Act,ul_out):
- res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
- if ((iter < max_iter) or (residu < prec)):
- res.write('\n=======================================================\n')
- res.write(' CONVERGENCE ATTEINTE ')
- if (len(Act)!=0):
- res.write("\n\n ATTENTION : L'OPTIMUM EST ATTEINT AVEC ")
- res.write("\n DES PARAMETRES EN BUTEE SUR LE BORD ")
- res.write("\n DU DOMAINE ADMISSIBLE ")
- res.write('\n=======================================================\n')
- res.close()
- else:
- res.write("\n=======================================================\n")
- res.write(' CONVERGENCE NON ATTEINTE ')
- res.write("\n Le nombre maximal d'itération ("+str(max_iter)+") a été dépassé")
- res.write('\n=======================================================\n')
- res.close()
-
- def affiche_calcul_etat_final(self,para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible,ul_out):
- res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
- res.write('\n\nValeurs propres du Hessien:\n')
- res.write(str( valeurs_propres))
- res.write('\n\nVecteurs propres associés:\n')
- res.write(str( vecteurs_propres))
- res.write('\n\n --------')
- res.write('\n\nOn peut en déduire que :')
- # Paramètres sensibles
- if (len(sensible)!=0):
- res.write('\n\nLes combinaisons suivantes de paramètres sont prépondérantes pour votre calcul :\n')
- k=0
- for i in sensible:
- k=k+1
- colonne=vecteurs_propres[:,i]
- numero=Numeric.nonzero(Numeric.greater(abs(colonne/max(abs(colonne))),1.E-1))
- res.write('\n '+str(k)+') ')
- for j in numero:
- res.write('%+3.1E ' %colonne[j]+'* '+para[j]+' ')
- res.write('\n associée à la valeur propre %3.1E \n' %valeurs_propres[i])
- # Paramètres insensibles
- if (len(insensible)!=0):
- res.write('\n\nLes combinaisons suivantes de paramètres sont insensibles pour votre calcul :\n')
- k=0
- for i in insensible:
- k=k+1
- colonne=vecteurs_propres[:,i]
- numero=Numeric.nonzero(Numeric.greater(abs(colonne/max(abs(colonne))),1.E-1))
- res.write('\n '+str(k)+') ')
- for j in numero:
- res.write('%+3.1E ' %colonne[j]+'* '+para[j]+' ')
- res.write('\n associée à la valeur propre %3.1E \n' %valeurs_propres[i])
- res.close()
-
-
-
+++ /dev/null
-#@ MODIF recal Macro DATE 14/03/2005 AUTEUR DURAND C.DURAND
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-
-import string
-import copy
-import Numeric
-import types
-import Gnuplot
-import Cata
-from Cata.cata import INCLUDE,DETRUIRE
-from Accas import _F
-
-import os
-
-
-#_____________________________________________
-#
-# DIVERS UTILITAIRES POUR LA MACRO
-#_____________________________________________
-
-
-# Transforme les donneés entrées par l'utilsateur en tableau Numeric
-def transforme_list_Num(parametres,res_exp):
- dim_para = len(parametres) #donne le nb de parametres
- val_para = Numeric.zeros(dim_para,Numeric.Float)
- borne_inf = Numeric.zeros(dim_para,Numeric.Float)
- borne_sup = Numeric.zeros(dim_para,Numeric.Float)
- para = []
- for i in range(dim_para):
- para.append(parametres[i][0])
- val_para[i] = parametres[i][1]
- borne_inf[i] = parametres[i][2]
- borne_sup[i] = parametres[i][3]
- return para,val_para,borne_inf,borne_sup
-
-def mes_concepts(list_concepts=[],base=None):
- # Fonction qui liste les concepts créés
- for e in base.etapes:
- if e.nom in ('INCLUDE','MACR_RECAL',) :
- list_concepts=list(mes_concepts(list_concepts=list_concepts,base=e))
- elif (e.sd != None) and (e.parent.nom=='INCLUDE') :
- nom_concept=e.sd.get_name()
- if not(nom_concept in list_concepts):
- list_concepts.append( nom_concept )
- return tuple(list_concepts)
-
-
-def detr_concepts(self):
- liste_concepts=mes_concepts(base=self.parent)
- for e in liste_concepts:
- nom = string.strip(e)
- DETRUIRE( CONCEPT =self.g_context['_F'](NOM = nom),INFO=1)
- if self.jdc.g_context.has_key(nom) : del self.jdc.g_context[nom]
- del(liste_concepts)
-
-
-def calcul_F(self,UL,para,val,reponses):
- fic = open('fort.'+str(UL),'r')
- #On stocke le contenu de fort.UL dans la variable fichier qui est un string
- fichier=fic.read()
- #On stocke le contenu initial de fort.UL dans la variable fichiersauv
- fichiersauv=copy.copy(fichier)
- fic.close()
-
- #Fichier_Resu est une liste ou l'on va stocker le fichier modifié
- #idée générale :on délimite des 'blocs' dans fichier
- #on modifie ou non ces blocs suivant les besoins
- #on ajoute ces blocs dans la liste Fichier_Resu
- Fichier_Resu=[]
-
- try:
- #cherche l'indice de DEBUT()
- index_deb=string.index(fichier,'DEBUT(')
- while( fichier[index_deb]!='\n'):
- index_deb=index_deb+1
- #on restreind fichier en enlevant 'DEBUT();'
- fichier = fichier[index_deb+1:]
- except :
- #on va dans l'except si on a modifié le fichier au moins une fois
- pass
-
- try:
- #cherche l'indice de FIN()
- index_fin = string.index(fichier,'FIN(')
- #on restreind fichier en enlevant 'FIN();'
- fichier = fichier[:index_fin]
- except : pass
- #--------------------------------------------------------------------------------
- #on cherche à délimiter le bloc des parametres dans le fichier
- #Tout d'abord on cherche les indices d'apparition des paras dans le fichier
- #en effet l'utilisateur n'est pas obligé de rentrer les paras dans optimise
- #avec le meme ordre de son fichier de commande
- index_para = Numeric.zeros(len(para))
- for i in range(len(para)):
- index_para[i] = string.index(fichier,para[i])
- #On range les indices par ordre croissant afin de déterminer
- #les indice_max et indice_min
- index_para = Numeric.sort(index_para)
- index_first_para = index_para[0]
- index_last_para = index_para[len(index_para)-1]
-
-
- #on va délimiter les blocs intermédiaires entre chaque para "utiles" à l'optimsation
- bloc_inter ='\n'
- for i in range(len(para)-1):
- j = index_para[i]
- k = index_para[i+1]
- while(fichier[j]!= '\n'):
- j=j+1
- bloc_inter=bloc_inter + fichier[j:k] + '\n'
-
- #on veut se placer sur le premier retour chariot que l'on trouve sur la ligne du dernier para
- i = index_last_para
- while(fichier[i] != '\n'):
- i = i + 1
- index_last_para = i
- #on délimite les blocs suivants:
- pre_bloc = fichier[:index_first_para] #fichier avant premier parametre
- post_bloc = fichier[ index_last_para+ 1:] #fichier après dernier parametre
-
- #on ajoute dans L tous ce qui est avant le premier paramètre
- Fichier_Resu.append(pre_bloc)
- Fichier_Resu.append('\n')
- #On ajoute la nouvelle valeur des parametres
- dim_para=len(para)
- for j in range(dim_para):
- Fichier_Resu.append(para[j]+'='+str(val[j]) + ';' + '\n')
- #On ajoute à Fichier_Resu tous ce qui est entre les parametres
- Fichier_Resu.append(bloc_inter)
-
- Fichier_Resu.append(post_bloc)
- #--------------------------------------------------------------------------------
- #on va ajouter la fonction d'extraction du numarray de la table par la méthode Array
- #et on stocke les réponses calculées dans la liste Lrep
- #qui va etre retournée par la fonction calcul_F
- self.g_context['Lrep'] = []
- Fichier_Resu.append('Lrep=[]'+'\n')
- for i in range(len(reponses)):
- Fichier_Resu.append('t'+str(reponses[i][0])+'='+str(reponses[i][0])+'.EXTR_TABLE()'+'\n')
- Fichier_Resu.append('F = '+'t'+str(reponses[i][0])+'.Array('+"'"+str(reponses[i][1])+"'"+','+"'"+str(reponses[i][2])+"'"+')'+'\n')
- Fichier_Resu.append('Lrep.append(F)'+'\n')
-
- #ouverture du fichier fort.3 et mise a jour de celui ci
- x=open('fort.'+str(UL),'w')
- x.writelines('from Accas import _F \nfrom Cata.cata import * \n')
- x.writelines(Fichier_Resu)
- x.close()
- del(Fichier_Resu)
- del(pre_bloc)
- del(post_bloc)
- del(fichier)
-
- INCLUDE(UNITE = UL)
- detr_concepts(self)
- # on remet le fichier dans son etat initial
- x=open('fort.'+str(UL),'w')
- x.writelines(fichiersauv)
- x.close()
- return self.g_context['Lrep']
-
-#_____________________________________________
-#
-# IMPRESSIONS GRAPHIQUES
-#_____________________________________________
-
-def graphique(L_F,res_exp,reponses,iter,UL_out,interactif):
- graphe=[]
- impr=Gnuplot.Gnuplot()
- Gnuplot.GnuplotOpts.prefer_inline_data=1
- impr('set data style linespoints')
- impr('set grid')
- impr('set pointsize 2.')
- impr('set terminal postscript color')
- impr('set output "fort.'+str(UL_out)+'"')
- for i in range(len(L_F)):
- if interactif:
- graphe.append(Gnuplot.Gnuplot(persist=0))
- graphe[i]('set data style linespoints')
- graphe[i]('set grid')
- graphe[i]('set pointsize 2.')
- graphe[i].xlabel(reponses[i][1])
- graphe[i].ylabel(reponses[i][2])
- graphe[i].title(reponses[i][0]+' Iteration '+str(iter))
- graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
- graphe[i]('pause 5')
-#
- impr.xlabel(reponses[i][1])
- impr.ylabel(reponses[i][2])
- impr.title(reponses[i][0]+' Iteration '+str(iter))
- impr.plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
-
-
-#_____________________________________________
-#
-# CONTROLE DES ENTREES UTILISATEUR
-#_____________________________________________
-
-def erreur_de_type(code_erreur,X):
- #code_erreur ==0 --> X est une liste
- #code erreur ==1 --> X est un char
- #code erreur ==2 --> X est un float
- #test est un boolean (test = 0 défaut et 1 si un test if est verifier
- txt=""
- if(code_erreur == 0 ):
- if type(X) is not types.ListType:
- txt="\nCette entrée: " +str(X)+" n'est pas une liste valide"
- if(code_erreur == 1 ):
- if type(X) is not types.StringType:
- txt="\nCette entrée: " +str(X)+" n'est pas une chaine de caractère valide ; Veuillez la ressaisir en lui appliquant le type char de python"
- if(code_erreur == 2 ):
- if type(X) is not types.FloatType:
- txt="\nCette entrée: " +str(X)+" n'est pas une valeur float valide ; Veuillez la ressaisir en lui appliquant le type float de python"
- return txt
-
-
-def erreur_dimension(PARAMETRES,REPONSES):
-#On verifie que la dimension de chaque sous_liste de parametre est 4
-#et que la dimension de chaque sous_liste de REPONSES est 3
- txt=""
- for i in range(len(PARAMETRES)):
- if (len(PARAMETRES[i]) != 4):
- txt=txt + "\nLa sous-liste de la variable paramètre numéro " + str(i+1)+" n'est pas de longueur 4"
- for i in range(len(REPONSES)):
- if (len(REPONSES[i]) != 3):
- txt=txt + "\nLa sous-liste de la variable réponse numéro " + str(i+1)+" n'est pas de longueur 3"
- return txt
-
-
-def compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP):
- # X et Y sont deux arguments qui doivent avoir la meme dimension
- # pour éviter l'arret du programme
- txt=""
- if( len(REPONSES) != len(RESU_EXP)):
- txt="\nVous avez entré " +str(len(REPONSES))+ " réponses et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de réponses que de résultats expérimentaux"
- return txt
-
-def compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP):
- # POIDS et Y sont deux arguments qui doivent avoir la meme dimension
- # pour éviter l'arret du programme
- txt=""
- if( len(POIDS) != len(RESU_EXP)):
- txt="\nVous avez entré " +str(len(POIDS))+ " poids et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de poids que de résultats expérimentaux"
- return txt
-
-
-def verif_fichier(UL,PARAMETRES,REPONSES):
-#On verifie les occurences des noms des PARAMETRES et REPONSES
-#dans le fichier de commande ASTER
- txt=""
- fichier = open('fort.'+str(UL),'r')
- fic=fichier.read()
- for i in range(len(PARAMETRES)):
- if((string.find(fic,PARAMETRES[i][0])==-1) or ((string.find(fic,PARAMETRES[i][0]+'=')==-1) and (string.find(fic,PARAMETRES[i][0]+' ')==-1))):
- txt=txt + "\nLe paramètre "+PARAMETRES[i][0]+" que vous avez entré pour la phase d'optimisation n'a pas été trouvé dans votre fichier de commandes ASTER"
- for i in range(len(REPONSES)):
- if((string.find(fic,REPONSES[i][0])==-1) or ((string.find(fic,REPONSES[i][0]+'=')==-1) and (string.find(fic,REPONSES[i][0]+' ')==-1))):
- txt=txt + "\nLa réponse "+REPONSES[i][0]+" que vous avez entrée pour la phase d'optimisation n'a pas été trouvée dans votre fichier de commandes ASTER"
- return txt
-
-
-def verif_valeurs_des_PARAMETRES(PARAMETRES):
-#On verifie que pour chaque PARAMETRES de l'optimisation
-# les valeurs entrées par l'utilisateur sont telles que :
-# val_inf<val_sup
-# val_init appartient à [borne_inf, borne_sup]
-# val_init!=0
-# borne_sup!=0
-# borne_inf!=0
- txt=""
- #verification des bornes
- for i in range(len(PARAMETRES)):
- if( PARAMETRES[i][2] >PARAMETRES[i][3]):
- txt=txt + "\nLa borne inférieure "+str(PARAMETRES[i][2])+" de "+PARAMETRES[i][0]+ "est plus grande que sa borne supérieure"+str(PARAMETRES[i][3])
- #verification de l'encadrement de val_init
- for i in range(len(PARAMETRES)):
- if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
- txt=txt + "\nLa valeur initiale "+str(PARAMETRES[i][1])+" de "+PARAMETRES[i][0]+ " n'est pas dans l'intervalle [borne_inf,born_inf]=["+str(PARAMETRES[i][2])+" , "+str(PARAMETRES[i][3])+"]"
- #verification que val_init !=0
- for i in range(len(PARAMETRES)):
- if (PARAMETRES[i][1] == 0. ):
- txt=txt + "\nProblème de valeurs initiales pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur initiale nulle mais un ordre de grandeur."
- #verification que borne_sup !=0
- for i in range(len(PARAMETRES)):
- if (PARAMETRES[i][3] == 0. ):
- txt=txt + "\nProblème de borne supérieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
- #verification que borne_inf !=0
- for i in range(len(PARAMETRES)):
- if (PARAMETRES[i][2] == 0. ):
- txt=txt + "\nProblème de borne inférieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
- return txt
-
-
-def verif_UNITE(GRAPHIQUE,UNITE_RESU):
- # On vérifie que les unités de résultat et
- # de graphique sont différentes
- txt=""
- GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
- if (GRAPHE_UL_OUT==UNITE_RESU):
- txt=txt + "\nLes unités logiques des fichiers de résultats graphiques et de résultats d'optimisation sont les memes."
- return txt
-
-
-
-def gestion(UL,PARAMETRES,REPONSES,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU):
- #Cette methode va utiliser les methodes de cette classe declarée ci_dessus
- #test est un boolean: test=0 -> pas d'erreur
- # test=1 -> erreur détectée
-
- texte=""
- #On vérifie d'abord si PARAMETRES, REPONSES, RESU_EXP sont bien des listes au sens python
- #test de PARAMETRES
- texte = texte + erreur_de_type(0,PARAMETRES)
- #test de REPONSES
- texte = texte + erreur_de_type(0,REPONSES)
- #test de RESU_EXP
- texte = texte + erreur_de_type(0,RESU_EXP)
-
- #On vérifie si chaque sous liste de PARAMETRES, REPONSES, possède le type adéquat
- #test des sous_listes de PARAMETRES
- for i in range(len(PARAMETRES)):
- texte = texte + erreur_de_type(0,PARAMETRES[i])
- #test des sous_listes de REPONSES
- for i in range(len(REPONSES)):
- texte = texte + erreur_de_type(0,REPONSES[i])
-
- #On verifie si la dimension de chaque sous-liste de : PARAMETRES, REPONSES
- #il faut que:la dimension d'une sous-liste de PARAMETRES = 4
- #et que la dimension d'une sous liste de REPONSES = 3
- texte = texte + erreur_dimension(PARAMETRES,REPONSES)
-
- #on verifie que l'on a autant de réponses que de résultats expérimentaux
- texte = texte + compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP)
- #on verifie que l'on a autant de poids que de résultats expérimentaux
- texte = texte + compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP)
-
- #on verifie les types des arguments de chaque sous liste de PARAMETRES et REPONSES
- #verification du type stringet type float des arguments de PARAMETRES
- for i in range(len(PARAMETRES)):
- texte = texte + erreur_de_type(1,PARAMETRES[i][0])
- for k in [1,2,3]:
- texte = texte + erreur_de_type(2,PARAMETRES[i][k])
-
- #verification du type string pour les arguments de REPONSES
- for i in range(len(REPONSES)):
- for j in range(len(REPONSES[i])):
- texte = texte + erreur_de_type(1,REPONSES[i][j])
-
- #verification du fichier de commndes ASTER
- texte = texte + verif_fichier(UL,PARAMETRES,REPONSES)
-
- #verifiaction des valeurs des PARAMETRES entrées par l'utilisteur
- texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
-
- #verifiaction des unités logiques renseignées par l'utilisateur
- texte = texte + verif_UNITE(GRAPHIQUE,UNITE_RESU)
-
- return texte
-
-
+++ /dev/null
-#@ MODIF stanley_ops Macro DATE 30/11/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-
-
-def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,**args):
-
- """
- Importation et lancement de Stanley
- """
-
- import os,string
- import aster
- from Accas import _F
- from Noyau.N_utils import AsType
- from Utilitai.Utmess import UTMESS
-
- ier=0
-
- # La macro compte pour 1 dans la numerotation des commandes
- self.icmd=1
-
-
- # On ne lance Stanley que si la variable DISPLAY est définie
- if os.environ.has_key('DISPLAY'):
-
- import Stanley
- from Stanley import stanley
-
- if (RESULTAT and MODELE and CHAM_MATER):
- _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .NOMA ' )
- _MAIL = string.strip(_MAIL[0])
- MAILLAGE = self.jdc.g_context[_MAIL]
- if CARA_ELEM:
- stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM)
- else:
- stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,None)
- else:
- stanley.PRE_STANLEY()
-
- else:
- UTMESS('A','STANLEY',
- """Aucune variable d'environnement DISPLAY définie !
- STANLEY ne pourra pas fonctionner. On l'ignore.
-
- Si vous etes en Interactif, cochez le bouton Suivi Interactif
- dans ASTK.""")
-
- return ier
+++ /dev/null
-#@ MODIF test_fichier_ops Macro DATE 03/11/2004 AUTEUR MCOURTOI M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-#-------------------------------------------------------------------------------
-def test_fichier_ops(self, UNITE, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args):
- """
- Macro TEST_FICHIER permettant de tester la non-regression d'un fichier
- 'a une tolerance' pres pour les nombres reels en calculant
- le md5sum.
- """
- import aster
- from Accas import _F
- ier=0
- # La macro compte pour 1 dans la numerotation des commandes
- #self.icmd=1
- self.set_icmd(1)
-
- # On importe les definitions des commandes a utiliser dans la macro
- # Le nom de la variable doit etre obligatoirement le nom de la commande
- INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
- DETRUIRE = self.get_cmd('DETRUIRE')
- CREA_TABLE = self.get_cmd('CREA_TABLE')
- TEST_TABLE = self.get_cmd('TEST_TABLE')
-
- import os.path
- import re
- from types import StringType
- from Macro.test_fichier_ops import md5file
-
- # vérifie la syntaxe des expressions régulières fournies
- l_regexp=[]
- if args['EXPR_IGNORE']:
- if type(args['EXPR_IGNORE']) is StringType:
- lexp = [args['EXPR_IGNORE']]
- else:
- lexp = args['EXPR_IGNORE']
- for exp in lexp:
- try:
- obj=re.compile(exp)
- except re.error, s:
- print '<F> <TEST_FICHIER> <INVALID_REGEXP> '+str(s)+' pour "'+exp+'"'
- else:
- l_regexp.append(exp)
- if len(l_regexp) < len(lexp):
- self.cr.fatal(' <F> <TEST_FICHIER> Expression régulière invalide (voir <INVALID_REGEXP>)')
-
-
- is_ok=0
-
- # vérifier que le fichier a été fermé
- tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
-
- if tinfo__['ETAT_UNITE',1].find('OUVERT')>-1:
- print "<A> <TEST_FICHIER> LE FICHIER N'A PAS ETE FERME :\n",FICHIER
-
- # fichier correctement fermé
- else:
- # calcule le md5sum du fichier
- ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO)
- if ier != 0:
- if ier==4:
- texte_erreur='Fichier inexistant : '+FICHIER
- else:
- texte_erreur='Erreur dans md5file, code retour = '+str(ier)
- texte_erreur='<S> <TEST_FICHIER> '+texte_erreur
- # aujourd'hui, je ne sais pas déclencher autre chose que <F>...
- self.cr.fatal(texte_erreur)
- return ier
-
- # comparaison a la reference
- if INFO > 0 :
- print ' %-20s : %32s' % ('REFERENCE',VALE_K)
- print
-
- if mdsum == VALE_K:
- is_ok=1
-
- # produit le TEST_TABLE
- tab1__=CREA_TABLE(LISTE=(_F(PARA='TEST',
- TYPE_K='K8',
- LISTE_K='VALEUR ',),
- _F(PARA='BOOLEEN',
- LISTE_I=is_ok,),),)
- if args['REFERENCE'] == 'NON_REGRESSION':
- TEST_TABLE(UNITE=UNITE,
- TABLE=tab1__,
- FILTRE=_F(NOM_PARA='TEST',
- VALE_K='VALEUR ',),
- NOM_PARA='BOOLEEN',
- VALE_I=1,
- PRECISION=1.e-3,
- CRITERE='ABSOLU',
- REFERENCE=args['REFERENCE'],
- VERSION=args['VERSION'],)
- else:
- TEST_TABLE(UNITE=UNITE,
- TABLE=tab1__,
- FILTRE=_F(NOM_PARA='TEST',
- VALE_K='VALEUR ',),
- NOM_PARA='BOOLEEN',
- VALE_I=1,
- PRECISION=1.e-3,
- CRITERE='ABSOLU',
- REFERENCE=args['REFERENCE'],)
-
- DETRUIRE(CONCEPT=_F(NOM=('tinfo__','tab1__'),),
- ALARME='NON',INFO=1,)
- return ier
-
-
-#-------------------------------------------------------------------------------
-def md5file(fich,nbch,epsi,regexp_ignore=[],info=0):
- """
- Cette methode retourne le md5sum d'un fichier en arrondissant les nombres
- reels a la valeur significative.
- IN :
- fich : nom du fichier
- nbch : nombre de decimales significatives
- epsi : valeur en deca de laquelle on prend 0
- regexp_ignore : liste d'expressions régulières permettant d'ignorer
- certaines lignes
- OUT :
- code retour : 0 si ok, >0 sinon
- md5sum
- """
- import os.path
- import re
- import string
- import math
- import md5
- # 1 Mo 10 Mo 100 Mo
- # v0 2.6 s 20.4 s 196.6 s
- # v1 2.0 s 10.3 s 94.9 s (pas de distinction entier/reel)
- # remplacer le try/except par if re.search(...), 80% plus lent
- if not os.path.isfile(fich):
- return 4, ''
- f=open(fich,'r')
- format_float='%'+str(nbch+7)+'.'+str(nbch)+'g'
- m=md5.new()
- i=0
- for ligne in f:
- i=i+1
- if info>=2:
- print 'LIGNE',i,
- keep=True
- for exp in regexp_ignore:
- if re.search(exp,ligne):
- keep=False
- if info>=2:
- print ' >>>>>>>>>> IGNOREE <<<<<<<<<<',
- break
- if keep:
- #r=string.split(ligne)
- # découpe des nombres collés : 1.34E-142-1.233D+09
- r=string.split(re.sub('([0-9]+)\-','\g<1> -',ligne))
- for x in r:
- try:
- if abs(float(x))<epsi:
- s='0'
- else:
- s=format_float % float(x)
- except ValueError:
- s=x
- if info>=2:
- print (' %'+str(nbch+7)+'s') % s,
- m.update(s)
- if info>=2:
- print
- f.close()
- md5sum=m.hexdigest()
- if info>=1:
- form=' %-20s : %32s'
- print form % ('Fichier',fich)
- print form % ('Nombre de lignes',str(i))
- print form % ('Format des reels',format_float)
- print form % ('Epsilon',str(epsi))
- print form % ('md5sum',md5sum)
- return 0, md5sum