From: eficas <> Date: Tue, 7 Jun 2005 08:38:51 +0000 (+0000) Subject: on change macro de place X-Git-Tag: CC_param_poursuite~113 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=bda750dc2a43fb5e974daf4604b780f0893e89f1;p=modules%2Feficas.git on change macro de place --- diff --git a/Aster/Cata/Macro/macr_adap_mail_ops.py b/Aster/Cata/Macro/macr_adap_mail_ops.py deleted file mode 100644 index 16625395..00000000 --- a/Aster/Cata/Macro/macr_adap_mail_ops.py +++ /dev/null @@ -1,727 +0,0 @@ -#@ 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(" 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(" 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(" 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(" 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 diff --git a/Aster/Cata/Macro/macr_ascouf_calc_ops.py b/Aster/Cata/Macro/macr_ascouf_calc_ops.py deleted file mode 100644 index 4c7c9b96..00000000 --- a/Aster/Cata/Macro/macr_ascouf_calc_ops.py +++ /dev/null @@ -1,690 +0,0 @@ -#@ 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 ' 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(""" 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(""" 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(""" 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 ' 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=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 ' ASCSEP valeur hors domaine' - print ' sous-epaisseur numero : %d'%i - print ' taille axe circonferentiel : %.2f'%ssep.ICIRP - print ' bord plaque : %.2f'%2*pi*RM - self.cr.fatal(" 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 ' ASCSEP cas de symetrie :' - print ' la sous-epaisseur doit etre dans la section mediane du coude !' - self.cr.fatal(" 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 ' ASCSEP cas de symetrie :' - print ' la sous-epaisseur doit etre dans la section mediane du coude !' - self.cr.fatal(" 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 ' valeur hors domaine' - print ' SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep) - print ' ABSC. CURV. CIRCONF. :%.2f'%ssep.ISCP - print ' BORD PLAQUE :%.2f'%(2.*pi*RM) - self.cr.fatal(" 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 ' valeur hors domaine' - print ' SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep) - print ' ABSC. CURV. LONGIT. :%.2f'%ssep.ISLP - print ' BORDS PLAQUE :%.2f'%(ALPHAR*RC) - self.cr.fatal(" 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]) valeur hors domaine' - print ' SOUS-EPAISSEUR NUMERO :',bid[1] - print ' BORD INFERIEUR :',YI - print ' BORD PLAQUE :',-LTCHAR - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if YS>(ALPHAR*RC+LTCLIM): - print ' valeur hors domaine' - print ' SOUS-EPAISSEUR NUMERO :',bid[1] - print ' BORD INFERIEUR :',YS - print ' BORD PLAQUE :',ALPHAR*RC+LTCLIM - self.cr.fatal(" 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]=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 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= 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)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]) 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)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)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 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 les quart et demi structure' - print ' ne peuvent etre realisees ' - print ' sur un modele comportant une transition ' - print ' d epaisseur ' - self.cr.fatal(" 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 ' les deux embouts doivent etre' - print ' de meme longueur pour les cas de symetrie ' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier -# - LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1) - if LTCHAR longueur d embout P1 inferieure' - print ' a la longueur d amortissement = ',LAMOR - print ' alarme' -# - LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2) - if LTCLIM longueur d embout P2 inferieure' - print ' a la longueur d amortissement = ',LAMOR - print ' alarme' -# - if TYPBOL!=None: - if TYPBOL[:1]=='GV' : - print ' la condition aux limites raccord' - print ' 3d-poutre appliquee avec la macro de calcul' - print ' ascouf n est pas licite avec un embout' - print ' de type conique' - print ' alarme' -# -################################################################################ -# --- caracteristiques de la fissure --- -################################################################################ -# - if FISS_COUDE!=None: - if NBEP!=3: - print ' le nombre d elements dans l epaisseur' - print ' du coude n est pas parametrable pour' - print ' un coude avec fissure' - print ' mot-cle NB_ELEM_EPAIS ignore' - print ' alarme' - FPROF = FISS_COUDE['PROFONDEUR'] - FAXI = FISS_COUDE['AXIS'] - if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None : - print ' pour les fissures non axisymetriques' - print ' la longueur doit etre specifiee ' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None : - print ' la fissure est axisymetrique : on ne' - print ' tient pas compte de la longueur specifiee' - print ' 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 ' avec une transition d epaisseur' - print ' la fissure doit obligatoirement etre transverse ' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ORIEN!=90.0 and NBTRAN!=0 : - print ' avec une transition d epaisseur' - print ' la fissure doit obligatoirement etre transverse ' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' : - print ' l orientation de la fissure doit' - print ' etre transverse (orien : 90.) pour modeliser ' - print ' un quart ou une demi structure ' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ORIEN!=90.0 and FAXI=='OUI' : - print ' la fissure est axisymetrique : son' - print ' orientation doit etre transverse (ORIEN : 90.)' - self.cr.fatal(" 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 ' il ne peut pas y avoir plusieurs' - print ' sous-epaisseurs en meme temps qu une' - print ' transition d epaisseur : si une seule' - print ' sous-epaisseur utiliser sous_epais_coude' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 : - print ' avec une transition d epaisseur' - print ' il doit obligatoirement y avoir un defaut' - print ' soit une fissure soit une sous-epaisseur' - self.cr.fatal(" 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 ' ne modeliser qu une seule' - print ' sous-epaisseur pour un quart ou demi-coude' - self.cr.fatal(" 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 ' vous ne pouvez declarer la sous-' - print ' epaisseur comme axisymetrique et donner' - print ' une taille d axe circonferentiel' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' : - print ' vous devez donner une taille d axe' - print ' circonferentiel pour une sous-epaisseur de' - print ' type elliptique' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ssep['POSI_CURV_LONGI']!=None: - if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) : - print ' valeur hors domaine de validite' - print ' sous-epaisseur numero :',isep - print ' abscisse curv. longit. :',ssep['POSI_CURV_LONGI'] - print ' valeur maximale autorisee :',(ALPHA*RC*pi/180.0) - self.cr.fatal(" 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 ' valeur hors domaine de validite' - print ' sous-epaisseur numero :',isep - print ' position angulaire centre sous-ep :',BETA - print ' valeur limite autorisee :',ALPHA - self.cr.fatal(" 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 ' valeur hors domaine de validite' - print ' sous-epaisseur numero :',isep - print ' abscisse curv. circonf. :',ssep['POSI_CURV_CIRC'] - print ' valeur maximale autorisee :',(2*pi*RM) - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS': - print ' le centre d une sous-epaisseur' - print ' axisymetrique est impose en intrados (pi*RM)' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - else: - ssep.IPHIC=ssep['AZIMUT'] - if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS': - print ' le centre d une sous-epaisseur' - print ' axisymetrique est impose en intrados' - print ' l azimut est fixe a 180 degres' - self.cr.fatal(" 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 ' le nombre d elements dans l' - print ' epaisseur du coude n est pas parametrable pour' - print ' la version 2 de la procedure de plaque avec sous' - print ' -epaisseur : mot-cle NB_ELEM_EPAIS ignore' - print ' 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 ' valeur hors domaine de validite' - print ' surepaisseur :',SUREP - print ' valeur limite autorisee (RM-EP1/2) :',(RM-EP1/2.0) - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if RC<=(RM+EP1/2.0): - print ' valeur hors domaine de validite' - print ' le rayon de cintrage :',RC - print ' doit etre superieur a (RM+EP1/2) :',(RM+EP1/2.0) - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier -# -# coude fissure -# - if FISS_COUDE!=None: - if (RM/EP1)<5. or (RM/EP1)>50.: - print ' valeur hors domaine de validite (5,50)' - print ' rapport RM/EP1 :',(RM/EP1) - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if FISS_COUDE['ABSC_CURV']!=None: - if SF<0. or SF>(ALPHA*RC*pi/180.0) : - print ' valeur hors domaine de validite' - print ' abscisse curviligne centre fissure :',SF - print ' valeur limite autorisee :',(ALPHA*RC*pi/180.0) - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (NT-2*(NT/2))!=0: - print ' valeur hors domaine de validite' - print ' nombre de tranches :',NT - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)): - print ' valeur hors domaine de validite' - print ' position angulaire centre fissure :',BETA - print ' posi_angul doit etre >= 0 et <= ',ALPHA - self.cr.fatal(" 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 (LTRANLCOUDE) : - print ' valeur hors domaine de validite' - print ' debut transition d epaisseur :',LTRAN - print ' valeur minimale autorisee :',LDEFAU - print ' valeur maximale autorisee :',LCOUDE - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (TETA1<0.) or (TETA1>30.) : - print ' valeur hors domaine de validite' - print ' angle de transition TETA1 :',TETA1 - print ' valeur minimale autorisee :',0. - print ' valeur maximale autorisee :',30. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier -# -# transition d epaisseur a une pente -# - if NBTRAN==1: - if (EP1<12.) or (EP1>80.) : - print ' valeur hors domaine de validite' - print ' epaisseur avant la transition :',EP1 - print ' valeur minimale autorisee :',12. - print ' valeur maximale autorisee :',80. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP2<20.) or (EP2>110.) : - print ' valeur hors domaine de validite' - print ' epaisseur apres la transition :',EP2 - print ' valeur minimale autorisee :',20. - print ' valeur maximale autorisee :',110. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP1>EP2) : - print ' l epaisseur avant la transition' - print ' doit etre inferieure ' - print ' a celle apres la transition' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1))) - if (LTRANF>LCOUDE) : - print ' valeur hors domaine de validite' - print ' fin transition d epaisseur :',LTRANF - print ' valeur limite autorisee :',LCOUDE - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if DEXT<112. or DEXT>880. : - print ' valeur hors domaine de validite' - print ' diam ext du tube avant transition:',DEXT - print ' valeur minimum autorisee :',112. - print ' valeur maximum autorisee :',880. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier -# -# transition d epaisseur a une pente -# - else: - if (TETA2<0.) or (TETA2>45.) : - print ' valeur hors domaine de validite' - print ' angle de transition TETA2 :',TETA2 - print ' valeur minimale autorisee :',0. - print ' valeur maximale autorisee :',45. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP1<7.) or (EP1>35.) : - print ' valeur hors domaine de validite' - print ' epaisseur avant 1ere transition :',EP1 - print ' valeur minimale autorisee :',7. - print ' valeur maximale autorisee :',35. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP2<15.) or (EP2>40.) : - print ' valeur hors domaine de validite' - print ' epaisseur avant 2eme transition :',EP2 - print ' valeur minimale autorisee :',15. - print ' valeur maximale autorisee :',40. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EPI<15.) or (EPI>40.) : - print ' valeur hors domaine de validite' - print ' epaisseur intermediaire :',EPI - print ' valeur minimale autorisee :',15. - print ' valeur maximale autorisee :',40. - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP1>EPI) : - print ' valeur hors domaine de validite' - print ' l epaisseur avant la transition' - print ' doit etre inferieure a l epaisseur intermediaire' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (EP2 valeur hors domaine de validite' - print ' l epaisseur apres la transition' - print ' doit etre inferieure a l epaisseur intermediaire' - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1)) - LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2)) - if (LTRANF>LCOUDE) : - print ' valeur hors domaine de validite' - print ' fin transition d epaisseur :',LTRANF - print ' valeur limite autorisee :',LCOUDE - self.cr.fatal(" erreur donnees ") - ier = ier+1 - return ier - if (DEXT<77.) or (DEXT>355.) : - print ' valeur hors domaine de validite' - print ' diam ext du tube avant transition:',LTRANF - print ' valeur minimale autorisee :',77. - print ' valeur maximale autorisee :',355. - self.cr.fatal(" 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(" 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 - - diff --git a/Aster/Cata/Macro/macr_aspic_calc_ops.py b/Aster/Cata/Macro/macr_aspic_calc_ops.py deleted file mode 100644 index 5426c395..00000000 --- a/Aster/Cata/Macro/macr_aspic_calc_ops.py +++ /dev/null @@ -1,827 +0,0 @@ -#@ 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(""" 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(""" 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(""" 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(""" 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(""" PRES_REP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""") - return ier - if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] : - ier=ier+1 - self.cr.fatal(""" 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(""" TORS_CORP[NOEUD] : on attend 'P1_CORP' ou 'P2_CORP'""") - return ier - if tors['NOEUD']==EQUILIBRE['NOEUD'] : - ier=ier+1 - self.cr.fatal(""" 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(""" 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(""" mot-clef 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(""" 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 diff --git a/Aster/Cata/Macro/macr_aspic_mail_ops.py b/Aster/Cata/Macro/macr_aspic_mail_ops.py deleted file mode 100644 index 296cab1d..00000000 --- a/Aster/Cata/Macro/macr_aspic_mail_ops.py +++ /dev/null @@ -1,845 +0,0 @@ -#@ 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 ' 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(" 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 ' erreur donnees' - print ' Z_MAX FOURNIE : ', ZMAX - print ' Z_MAX CALCULEE : ', ZMAXC - self.cr.fatal(" 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 ' erreur donnees' - print ' Z_MAX FOURNIE : ', ZMAX - print ' Z_MAX CALCULEE : ', ZMAXC - self.cr.fatal(" 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 ' erreur donnees' - print ' dans le cas de fissures' - print ' inclinees debouchant en peau interne avec' - print ' piquage penetrant le jeu doit etre nul' - self.cr.fatal(" 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 ' erreur donnees' - print ' dans le cas de fissures internes' - print ' (NON_DEB) le ligament inferieur est obligatoire' - self.cr.fatal(" 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(" 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(" 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(" 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(" 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(" dans le cas de fissures courte il faut preciser la longueur ") - ier = ier+1 - return ier - if AXIS=='NON' : - self.cr.fatal(" 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 ' fissure axisymetrique : le mot clef 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(" 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 - diff --git a/Aster/Cata/Macro/macr_cabri_calc_ops.py b/Aster/Cata/Macro/macr_cabri_calc_ops.py deleted file mode 100644 index a829425f..00000000 --- a/Aster/Cata/Macro/macr_cabri_calc_ops.py +++ /dev/null @@ -1,542 +0,0 @@ -#@ 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 - diff --git a/Aster/Cata/Macro/macr_cabri_mail_dat.py b/Aster/Cata/Macro/macr_cabri_mail_dat.py deleted file mode 100644 index 7d673257..00000000 --- a/Aster/Cata/Macro/macr_cabri_mail_dat.py +++ /dev/null @@ -1,630 +0,0 @@ -#@ 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} diff --git a/Aster/Cata/Macro/macr_cabri_mail_ops.py b/Aster/Cata/Macro/macr_cabri_mail_ops.py deleted file mode 100644 index 92154545..00000000 --- a/Aster/Cata/Macro/macr_cabri_mail_ops.py +++ /dev/null @@ -1,461 +0,0 @@ -#@ 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 diff --git a/Aster/Cata/Macro/macr_cara_poutre_ops.py b/Aster/Cata/Macro/macr_cara_poutre_ops.py deleted file mode 100644 index e0849aff..00000000 --- a/Aster/Cata/Macro/macr_cara_poutre_ops.py +++ /dev/null @@ -1,816 +0,0 @@ -#@ 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(" 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(" 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(" 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 diff --git a/Aster/Cata/Macro/macr_ecla_pg_ops.py b/Aster/Cata/Macro/macr_ecla_pg_ops.py deleted file mode 100644 index 8bfada76..00000000 --- a/Aster/Cata/Macro/macr_ecla_pg_ops.py +++ /dev/null @@ -1,71 +0,0 @@ -#@ 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 -############################################################################################ - diff --git a/Aster/Cata/Macro/macr_fiab_impr_ops.py b/Aster/Cata/Macro/macr_fiab_impr_ops.py deleted file mode 100644 index 08ac8d10..00000000 --- a/Aster/Cata/Macro/macr_fiab_impr_ops.py +++ /dev/null @@ -1,110 +0,0 @@ -#@ 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 diff --git a/Aster/Cata/Macro/macr_fiabilite_ops.py b/Aster/Cata/Macro/macr_fiabilite_ops.py deleted file mode 100644 index 62a10eba..00000000 --- a/Aster/Cata/Macro/macr_fiabilite_ops.py +++ /dev/null @@ -1,324 +0,0 @@ -#@ 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") diff --git a/Aster/Cata/Macro/macr_lign_coupe_ops.py b/Aster/Cata/Macro/macr_lign_coupe_ops.py deleted file mode 100644 index 107ec4a2..00000000 --- a/Aster/Cata/Macro/macr_lign_coupe_ops.py +++ /dev/null @@ -1,265 +0,0 @@ -#@ 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(" 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(" 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(" 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 diff --git a/Aster/Cata/Macro/macr_recal_ops.py b/Aster/Cata/Macro/macr_recal_ops.py deleted file mode 100644 index 17597e90..00000000 --- a/Aster/Cata/Macro/macr_recal_ops.py +++ /dev/null @@ -1,161 +0,0 @@ -#@ 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(" 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=' '+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 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 - diff --git a/Aster/Cata/Macro/macro_matr_ajou_ops.py b/Aster/Cata/Macro/macro_matr_ajou_ops.py deleted file mode 100644 index 34595923..00000000 --- a/Aster/Cata/Macro/macro_matr_ajou_ops.py +++ /dev/null @@ -1,260 +0,0 @@ -#@ 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 ' 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 ' 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(" 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(" 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(" 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(" 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 diff --git a/Aster/Cata/Macro/macro_matr_asse_ops.py b/Aster/Cata/Macro/macro_matr_asse_ops.py deleted file mode 100644 index 4c7f99f1..00000000 --- a/Aster/Cata/Macro/macro_matr_asse_ops.py +++ /dev/null @@ -1,163 +0,0 @@ -#@ 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(" 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(" 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(" 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(" 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(" 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(""" 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 diff --git a/Aster/Cata/Macro/macro_miss_3d_ops.py b/Aster/Cata/Macro/macro_miss_3d_ops.py deleted file mode 100644 index 0d5d360b..00000000 --- a/Aster/Cata/Macro/macro_miss_3d_ops.py +++ /dev/null @@ -1,76 +0,0 @@ -#@ 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 diff --git a/Aster/Cata/Macro/macro_mode_meca_ops.py b/Aster/Cata/Macro/macro_mode_meca_ops.py deleted file mode 100644 index efbd4db3..00000000 --- a/Aster/Cata/Macro/macro_mode_meca_ops.py +++ /dev/null @@ -1,139 +0,0 @@ -#@ 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 diff --git a/Aster/Cata/Macro/macro_proj_base_ops.py b/Aster/Cata/Macro/macro_proj_base_ops.py deleted file mode 100644 index edfee029..00000000 --- a/Aster/Cata/Macro/macro_proj_base_ops.py +++ /dev/null @@ -1,63 +0,0 @@ -#@ 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(" 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(" 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 diff --git a/Aster/Cata/Macro/reca_algo.py b/Aster/Cata/Macro/reca_algo.py deleted file mode 100644 index 65e02bd1..00000000 --- a/Aster/Cata/Macro/reca_algo.py +++ /dev/null @@ -1,259 +0,0 @@ -#@ 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(" 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(" 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) - - - - - diff --git a/Aster/Cata/Macro/reca_interp.py b/Aster/Cata/Macro/reca_interp.py deleted file mode 100644 index 00ad62d2..00000000 --- a/Aster/Cata/Macro/reca_interp.py +++ /dev/null @@ -1,180 +0,0 @@ -#@ 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(" 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(" 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 - - - diff --git a/Aster/Cata/Macro/reca_message.py b/Aster/Cata/Macro/reca_message.py deleted file mode 100644 index 0691b785..00000000 --- a/Aster/Cata/Macro/reca_message.py +++ /dev/null @@ -1,115 +0,0 @@ -#@ 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(' 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() - - - diff --git a/Aster/Cata/Macro/recal.py b/Aster/Cata/Macro/recal.py deleted file mode 100644 index 591614c8..00000000 --- a/Aster/Cata/Macro/recal.py +++ /dev/null @@ -1,379 +0,0 @@ -#@ 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_infPARAMETRES[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 - - diff --git a/Aster/Cata/Macro/stanley_ops.py b/Aster/Cata/Macro/stanley_ops.py deleted file mode 100644 index a38f2808..00000000 --- a/Aster/Cata/Macro/stanley_ops.py +++ /dev/null @@ -1,66 +0,0 @@ -#@ 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 diff --git a/Aster/Cata/Macro/test_fichier_ops.py b/Aster/Cata/Macro/test_fichier_ops.py deleted file mode 100644 index 5f4ac116..00000000 --- a/Aster/Cata/Macro/test_fichier_ops.py +++ /dev/null @@ -1,195 +0,0 @@ -#@ 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 ' '+str(s)+' pour "'+exp+'"' - else: - l_regexp.append(exp) - if len(l_regexp) < len(lexp): - self.cr.fatal(' Expression régulière invalide (voir )') - - - 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 " 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=' '+texte_erreur - # aujourd'hui, je ne sais pas déclencher autre chose que ... - 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))=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