--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+
+install ( FILES
+ aide_gui.py aide_objets.py index_aide.py __init__.py viewer.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/AIDE
+ )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
def go(fichier=None,master=None):
if not fichier :
- fichier=os.path.join(os.path.dirname(__file__),"fichiers","index.html")
+ fichier=os.path.join(os.path.dirname(__file__),"../Aide/fichiers_ASTER","index.html")
+ print fichier
o=viewer.HTMLViewer(master)
o.display(fichier)
return o
if ext == ".html":
parser=HTMLParser(fmt)
else:
- parser=DumbParser(fmt)
+ #parser=DumbParser(fmt)
+ parser=HTMLParser(fmt)
parser.feed(data)
parser.close()
self.text.config(state="disabled")
from Noyau import N_REGLE
from Validation import V_AU_PLUS_UN
+from Ihm import I_REGLE
-class AU_PLUS_UN(V_AU_PLUS_UN.AU_PLUS_UN,N_REGLE.REGLE):
+class AU_PLUS_UN(V_AU_PLUS_UN.AU_PLUS_UN,I_REGLE.REGLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
nécessaire d'expliciter son initialiseur car
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+from Noyau import N_REGLE
+from Ihm import I_REGLE, I_AVANT
+
+class AVANT(I_AVANT.I_AVANT,I_REGLE.REGLE,N_REGLE.REGLE):
+ """
+ La classe utilise l'initialiseur de REGLE. Il n'est pas
+ nécessaire d'expliciter son initialiseur car
+ I_AVANT.I_AVANT n'en a pas
+ """
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py
+ PATTERN CVS EXCLUDE
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
from A_EXCLUS import EXCLUS
from A_ENSEMBLE import ENSEMBLE
from A_A_CLASSER import A_CLASSER
+from A_AVANT import AVANT
from A_ASSD import ASSD,assd
from A_ASSD import GEOM,geom
from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
from A_VALIDATOR import CardVal, InstanceVal
-#from A_VALIDATOR import VerifTypeTuple
+from A_VALIDATOR import VerifTypeTuple, VerifExiste
# On remplace la factory des validateurs initialement dans Noyau par celle
# de A_VALIDATOR
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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.
+# ======================================================================
+
+
+"""
+ Ce package contient les classes qui seront effectivement utilisees dans les applications.
+ C'est dans ce package que sont realisees les combinaisons de classes de base
+ avec les classes MIXIN qui implementent les fonctionnalites qui ont ete separees
+ du noyau pour des raisons de modularite afin de faciliter la maintenance et
+ l'extensibilite.
+
+ De plus toutes les classes utilisables par les applications sont remontees au
+ niveau du package afin de rendre le plus independant possible l'utilisation des
+ classes et leur implementation.
+"""
+
+# permet de se proteger de l'oubli de carte coding
+# ce warning deviendra fatal en python 2.4
+import warnings
+warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning)
+
+from A_JDC_CATA import JDC_CATA
+from A_OPER import OPER
+from A_PROC import PROC
+from A_MACRO import MACRO
+from A_FORM import FORM
+from A_BLOC import BLOC
+from A_FACT import FACT
+from A_SIMP import SIMP
+from A_EVAL import EVAL
+from A_NUPLET import NUPL
+
+from A_JDC import JDC
+from A_ETAPE import ETAPE
+from A_PROC_ETAPE import PROC_ETAPE
+from A_MACRO_ETAPE import MACRO_ETAPE
+from A_FORM_ETAPE import FORM_ETAPE
+from A_MCFACT import MCFACT
+from A_MCLIST import MCList
+from A_MCBLOC import MCBLOC
+from A_MCSIMP import MCSIMP
+
+# Les règles
+from A_AU_MOINS_UN import AU_MOINS_UN
+from A_AU_PLUS_UN import AU_PLUS_UN
+from A_UN_PARMI import UN_PARMI
+from A_PRESENT_PRESENT import PRESENT_PRESENT
+from A_PRESENT_ABSENT import PRESENT_ABSENT
+from A_EXCLUS import EXCLUS
+from A_ENSEMBLE import ENSEMBLE
+from A_A_CLASSER import A_CLASSER
+from A_AVANT import AVANT
+
+from A_ASSD import ASSD,assd
+from A_ASSD import GEOM,geom
+# Pour le moment on laisse fonction (ceinture et bretelles)
+from A_ASSD import FONCTION, fonction
+from A_ASSD import formule
+from A_ASSD import formule_c
+from A_ASSD import CO
+
+from Noyau.N__F import _F
+
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+from A_VALIDATOR import OrVal,AndVal
+from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
+from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
+from A_VALIDATOR import CardVal, InstanceVal
+from A_VALIDATOR import VerifTypeTuple
+
+# On remplace la factory des validateurs initialement dans Noyau par celle
+# de A_VALIDATOR
+import A_VALIDATOR
+import Noyau.N_ENTITE
+Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory
+
+from A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE
+
+from Extensions.niveau import NIVEAU
+from Extensions.etape_niveau import ETAPE_NIVEAU
+from Extensions.commentaire import COMMENTAIRE
+from Extensions.parametre import PARAMETRE
+from Extensions.parametre_eval import PARAMETRE_EVAL
+from Extensions.commande_comm import COMMANDE_COMM
+from Extensions.mcnuplet import MCNUPLET
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Open TURNS
+if (WITH_OPENTURNS)
+ install ( FILES eficas_OPENTURNS_STUDY.adp
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+ )
+ add_subdirectory ( fichiers_OPENTURNS_STUDY )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+ install ( FILES eficas_ASTER.adp
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+ )
+ add_subdirectory ( fichiers_ASTER )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+ <assistantconfig version="3.2.0">
+ <DCF ref="eficas_aster.html"
+ title="Eficas pour Aster ">
+ </DCF>
+ </assistantconfig>
--- /dev/null
+ <assistantconfig version="3.2.0">
+ <DCF ref="eficas_openturns.html"
+ title="Eficas pour OPENTURNS ">
+ </DCF>
+ </assistantconfig>
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+ install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+ FILES_MATCHING PATTERN *.txt PATTERN *.html
+ PATTERN CMakeLists.txt EXCLUDE
+ PATTERN CVS EXCLUDE
+ )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+
+<TITLE> Installation Standard d Eficas </TITLE>
+</head>
+
+<body>
+
+<H1>
+1- Installation standard
+</H1>
+
+Pour installer EFICAS a partir de la distribution : <nom_distrib>.tgz<BR>
+faire :<BR>
+<dd>tar xzvf <nom_distrib>.tgz<BR> </dd><BR>
+
+ce qui a pour effet de créer un répertoire de nom V1EficasV1_16a4AsterSTA9.
+<BR><BR>
+
+Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader,
+les catalogues, il faut modifier le fichier
+<BR> editeur.ini <BR>
+dans le répertoire Aster ou utiliser le sous-menu "Parametres Eficas" du men Options .
+<BR><BR>
+ATTENTION : <BR>
+Si Eficas est installé dans un répertoire particulier d'administration
+dans lequel les utilisateurs n'ont pas le droit d'écriture,<BR>
+ il faut que l'administrateur lance Eficas pour générer
+les fichiers et catalogues compilés .pyc
+<BR><BR>
+
+
+2- Utilisation d'Eficas
+<BR>
+<BR>
+Pour utiliser Eficas, aller dans le répertoire Aster et faire :
+<BR> python eficas_aster.py
+<BR>
+<BR>
+3- Installation avec un noyau pré-installé
+<BR>
+<BR>
+Aller dans le répertoire Aster du répertoire Eficas
+et modifier le fichier prefs.py comme suit :
+Mettre dans la variable CODE_PATH le chemin absolu vers
+le répertoire contenant les deux répertoires Noyau et Validation que vous voulez
+utiliser à la place de ceux fournis dans la livraison d'Eficas
+<BR>
+Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster
+</body>
+</html>
--- /dev/null
+Version 2.O (12/2009):
+<BR>
+ fusion des versions d Eficas pour Code_Aster, Outils Metiers et OpenTURNS
+<BR>
+Version 1.17 (12/2009):
+<BR>
+ Mise en synchronisation avec la version 10.0 de Code_Aster de décembre 2009.
+<BR>
+ Version en QT4
+<BR>
+ La version TK est figee
+<BR> <BR>
+
+Version 1.16 (6/2009):
+<BR>
+ Mise en synchronisation avec la version 9.3 de Code_Aster de mai 2007.
+<BR> <BR>
+
+
+Version 1.13 (6/2008):
+<BR>
+ Mise en synchronisation avec la version 9.2 de Code_Aster de mai 2007.
+<BR> <BR>
+
+Version 1.12 (6/2007):
+<BR>
+ Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007.
+<BR> <BR>
+
+Version 1.11 (12/2006):
+<BR>
+ Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006.
+ Première version du Traducteur de V7 en V8
+<BR> <BR>
+
+Version 1.10 (6/2006):
+<BR>
+ Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006.
+<BR> <BR>
+
+Version 1.9 (12/2005):
+<BR>
+ Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005.
+<BR> <BR>
+
+Version 1.8 (6/2005):
+<BR>
+ Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005.
+ Les includes et poursuites peuvent etre édités. Introduction de la notation
+ scientifique pour les flottants.
+<BR> <BR>
+
+Version 1.7 : (12/2004)
+<BR>
+ Mise en synchronisation avec la version STA7 de Code_Aster (7.4).
+ Les formules changent et deviennent des formules au sens python.
+ Disparition des PARAMETRE-EVAL
+ Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py.
+<BR> <BR>
+
+Version 1.6 : (05/2004)
+<BR>
+ Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26)
+ Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) :
+ - Saisie des valeurs sous forme de tuple.
+ - Si une valeur est selectionnée, l'insertion se fera après cette valeur
+ et non en fin de liste
+<BR> <BR>
+
+Version 1.5 (10/2003):
+<BR>
+ Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2)
+ Introduction des validateurs de mots cles simples
+<BR> <BR>
+
+Version 1.4 (5/2003):
+<BR>
+ Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
+ Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
+ Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
+ Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447)
+ Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
+<BR> <BR>
+
+Version 1.3 (11/2002):
+<BR>
+ Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
+ Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
+ sur click droit de la souris sur l'icone de la commande)
+ Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
+ Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
+ Corrections diverses
+<BR> <BR>
+
+Version 1.2 (5/2002):
+<BR>
+ Reconception de la version 1.1 : décomposition en packages Python
+ Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
+<BR> <BR>
--- /dev/null
+<BR>
+-------------------------------------------------------------------------------------------------------------
+ FAQs et Limitations d'EFICAS
+-------------------------------------------------------------------------------------------------------------
+
+<BR>
+<BR>
+
+1. Mots réservés :
+<BR>
+
+ Tous les mots du langage Python sont des mots réservés.
+ On ne peut donc pas appeler une variable ou un concept 'fin' ou 'dir'
+ Pour la liste complète de ces mots-clés, veuillez vous référer à la
+ documentation Python
+<BR>
+<BR>
+
+2. Concepts réentrants :
+<BR>
+
+ Ne pas indiquer par un '&' devant son nom qu'un concept est utilisé comme
+ concept réentrant. En effet EFICAS le sait !
+<BR> <BR>
+
+3. Carte commentaire :
+<BR>
+
+ La carte commentaire est désormais le '#' (dièse) au lieu du '%' (pourcent)
+ Les commentaires sont gérés comme des objets de même niveau que les
+ commandes ; il n'est plus possible de placer des commentaires "dans"
+ une commande. Attention, lors de la traduction d'un fichier de version 5
+ en 6, les commentaires "dans" les commandes seront perdus.
+
+<BR> <BR>
+4. Nommer le concept produit par un opérateur :
+<BR>
+
+ Vous ne pouvez nommer le concept produit d'un opérateur que lorsque
+ celui-ci aura été entièrement et correctement rempli.
+
+<BR> <BR>
+5. Règle de rémanence dans les mots-clés facteurs répétés :
+
+ La règle de rémanence qui permettait pour certains mots-clés facteurs
+ et pour certains de leurs mots-clés simples de ne pas répeter la valeur
+ de ces derniers dans toutes les occurrences du mot-clé facteur n'est pas
+ connue d'EFICAS.
+ En conséquence, vous devez répéter les mots-clés simples concernés dans
+ toutes les occurrences des mots-clés facteurs.
+
+<BR> <BR>
+6. Besoin d'aide ?
+<BR>
+
+ La documentation d'utilisation d'EFICAS a pris un peu de retard sur le produit ...
+ Néanmoins, vous disposez sur la plupart des panneaux contextuels ( les panneaux à
+ droite de l'arbre) d'une aide en ligne que vous pouvez activer en maintenant le
+ bouton droit de votre souris enfoncé.
--- /dev/null
+Les macros INCLUDE, INCLUDE_MATERIAU et POURSUITE ont un fonctionnement spécial.<BR>
+Les concepts produits par ces macros sont obtenus par une interpretation séparée
+du fichier de commandes correspondant. Les concepts produits sont ensuite inclus
+dans le contexte du jeu de commandes principal.<BR>
+La mise à jour du jeu de commandes et de ses includes et poursuites
+est presque complètement automatique. Cependant dans quelques cas particuliers
+le mécanisme de mise à jour peut être pris en défaut.
+
+<BR> <BR>
+Les principes retenus sont les suivants :
+<BR> <BR>
+
+1- Un fichier invalide n'est pas du tout pris en compte meme si quelques
+commandes de ce fichier sont valides
+<BR><BR>
+
+2- Il est possible de visualiser (bouton droit de la souris sur l'icone de
+la macro -> menu View) le contenu de ces types de macros. Le bouton (icone
+loupe) permet de visualiser le source du fichier inclus.
+<BR><BR>
+
+3- Les fichiers inclus sont mémorisés en fonction de leur UNITE
+pour les INCLUDE, du nom de matériau pour les INCLUDE_MATERIAU et comme poursuite
+pour une POURSUITE (il n'est pas possible d'avoir plus d'une POURSUITE par fichier).
+ATTENTION : comme on s'appuie sur l'UNITE pour memoriser les fichers inclus il est
+conseillé d'utiliser des numéros d'UNITE différents sinon la reactualisation sera
+faite avec le meme fichier pour des INCLUDE différents.
+<BR><BR>
+
+4- Pour changer les fichiers inclus, il faut passer par l'onglet FICHIER, modifier
+le nom du fichier et appuyer sur le bouton Valider. Il est possible en passant par
+cet onglet de forcer la prise en compte d'un fichier include partiellement valide
+ce qui n'est pas possible lors de l'import initial. Pour changer un fichier INCLUDE
+contenu dans un INCLUDE ou dans une POURSUITE, il faut editer l'INCLUDE ou la POURSUITE
+englobante (voir 6.) et passer par l'onglet FICHIER.
+<BR><BR>
+
+5- Le nom d'un fichier INCLUDE_MATERIAU est construit à partir des valeurs des mots-clés
+de la commande, il n'est donc jamais demandé explicitement à l'utilisateur.
+
+<BR><BR>
+6- Il est possible d'editer un fichier include ou poursuite. Pour cela, il suffit d'utiliser
+l'entrée "Edit" du menu contextuel de l'étape en question (bouton droit de la souris).
+Le fichier include ou poursuite en cours d'edition apparaitra dans un onglet distinct.
+Les modifications dans un fichier include ou poursuite sont normalement propagées au fichier
+principal et aux autres includes et poursuites. Il est cependant possible que quelques cas
+tordus ne soient pas correctement traités. Dans le doute, une demande de rapport de validation
+peut permettre de réactualiser l'état des différents fichiers.
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+<HEAD>
+<TITLE>EFICAS</TITLE>
+</HEAD>
+
+<BODY TEXT="#000000" BGCOLOR="#F7F3FF" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">
+
+<H1>EFICAS</H1>
+<HR>
+
+<P> <A HREF="NEWS.txt">Evolution des versions</A>
+<P> <A HREF="faqs.txt">FAQ</A>
+<P> <A HREF="includes.txt">Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE</A>
+
+</BODY>
+</HTML>
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Open TURNS
+if (WITH_OPENTURNS)
+ install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+ FILES_MATCHING PATTERN *.txt PATTERN *.html
+ PATTERN CMakeLists.txt EXCLUDE
+ PATTERN CVS EXCLUDE
+ )
+endif (WITH_OPENTURNS)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+<TITLE> What is the EFICAS Graphical User Interface? </TITLE>
+</head>
+
+<h2 align="center">
+ What is the EFICAS Graphical User Interface?
+</h2>
+<body>
+<BR>
+EFICAS is an open source software which proposes a graphical user interface to OpenTURNS. <BR>
+EFICAS enables to the User to lead an uncertainty study without having to learn the python statements.<BR>
+<BR>
+Eficas is structured in two parts : <BR>
+<ul>
+<li>1. Part 1 defines the calculus function (the wrapper definition);</li>
+<li>2. Part 2 defines the uncertainty study using a previously defined model.</li>
+</ul>
+note that Part 1 must be fulfilled before Part 2.<BR>
+<BR>
+<BR>
+It has been made with the following objectives :
+<ul>
+<li>1. to ease the use of Open TURNS, avoiding to the User writing the python statements;</li>
+<li>2. to ease the learning of the python statements by generating the python script after the study has been graphically defined.</li>
+</ul>
+<BR>
+<BR>
+When used, the EFICAS GUI generates :<BR>
+</ul>
+<li>1. the file.comm which contains all the information declared in the EFICAS GUI. </li>
+<li>2. the file.py which is the python script associated to the study and that can be launched through a python session.</li>
+</ul>
+
+</body>
+</html>
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+<TITLE> DEFINITION OF THE UNCERTAINTY STUDY
+</TITLE>
+</head>
+
+
+<h2 align="center">
+ DEFINITION OF THE UNCERTAINTY STUDY
+</h2>
+<body>
+
+<h3>
+Limitations of the EFICAS GUI<BR>
+</h3>
+EFICAS version 2.0 has the following limitations :
+<ul>
+ <li> on models : <ul>
+ <li>- the calculus fucntion f has to have a scalar output variable, which means that f : R^n --> R;</li>
+ <li>- only one model can be defined within a study;</li>
+ </li><\ul>
+ <li> on the input random vector : the probabilistic input variables must be independent or with a normal copula dependence structure;</li>
+ <li> on sample manipulation : there is no statistical functionalities except the evaluation of some correlation coefficients whithin the Central Uncertainty criteria evaluation;</li>
+ <li> on response surface tools : there is no possibility to create a polynomial response surface nor a polynomial chaos expansion.</li>
+ <li> on CRITERIA : only one criteria can be defined within a study.</l>
+</ul>
+<BR>
+
+<h3> Define your uncertainty study</h3>
+
+To perform a uncertainty study through the EFICAS Graphical User Interface, you need to follow these steps.
+As some concepts need other ones to be created, you have to respect the given order in the study definition. Note that only the two first steps (Step 1 and Step 2) may be exchanged.
+
+
+<ul>
+<li> Step 1 : Define the 1D distribution pool you'll need within the study.<BR>
+This step defines all the 1D distributions that will be affected to probabilistic variables of the uncertainty study. To have information on distributions, see the Use Cases guide or User Manual Guide.
+<BR>
+ <ul> <li> - create a DISTRIBUTION :
+ <ul><li> 1. click on SansNom (which is the case study which still has no named until you save it);</li>
+ <li> 2. click on "Nouvelle Commande" on the upright of the board;</li>
+ <li> 3. click on DISTRIBUTION.
+ </ul></li>
+<BR>
+ <li> - fulfill the DISTRIBUTION :
+<ul><li> 1. click on Kind and choose a probabilistic distribution;</li>
+<li> 2. click on the just created field named by the chosen distribution; </li>
+<li>3. give some values to each parameter of the distribution. In the Histogram case, give one by one the couples (class bandwith, class height) by typing : class bandwith, class height.</li>
+ </ul></li>
+<BR>
+ <li> name the DISTRIBUTION :
+<ul><li>1. click on DISTRIBUTION; </li>
+<li>2. click on "Name Concept" on the upright of the board; </li>
+<li>3. give a name to the DISTRIBUTION</li>
+ </ul></li>
+<BR>
+ <li>- create another DISTRIBUTION : <ul><li>1. click on the last DISTRIBUTION you created;</li>
+<li> 2. click on "Nouvelle Commande" on the upright of the board; </li>
+<li>3. click on DISTRIBUTION.</li>
+ </ul></li>
+<BR>
+ <li> - visualise the probabilistic density function of the DISTRIBUTION :
+<ul><li>1. right click on DISTRIBUTION; </li>
+<li>2. click on Graphique.</li>
+ </ul></li>
+</ul>
+<BR>
+<BR>
+
+
+<li> Step 2 : Define your model.<BR>
+This step gives the link towards the calculus function through which uncertainties will be propagated. The model is described thanks to an xml file To have information on wrappers, see Wrapper Guide.
+<ul><li> - create a MODEL :
+ <ul><li>1. click on the last DISTRIBUTION you created; </li>
+ <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+ <li>3. click on MODEL.</li> </ul>
+</li>
+<BR>
+<li> - fulfill the MODEL :
+ <ul><li>1. click on FileName; </li>
+ <li>2. give the adress of the file.xml corresponding to your calculus function.
+</li></ul></li>
+</ul>
+
+<BR>
+<BR>
+
+
+<li> Step 3 : Define the probabilistic input variables.<BR>
+This step associates a probabilistic distribution function previously defined in Step 1 to each variable defined in the model.
+<ul><li> - create a VARIABLE :
+ <ul><li>1. click on the last DISTRIBUTION you created; </li>
+ <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+ <li>3. click on VARIABLE.</li>
+ </ul> </li> <BR>
+ <li> - fulfill the VARIABLE :
+ <ul><li>1. click on ModelVariable; </li>
+ <li>2. choose a variable within the list of the variables coming from the previously defined model; </li>
+ <li>3. click on Distribution; </li>
+ <li>4. choose a distribution among the ones previously defined in Step 1 (correctly fulfilled and named).</li>
+ </ul></li> <BR>
+ <li> - create another VARIABLE :
+ <ul><li>1. click on the last VARIABLE you created; </li>
+ <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+ <li>3. click on VARIABLE.</li>
+ </ul></li>
+</ul><BR>
+
+<li> Step 4 : Define the dependance structure of the probabilistic input variables.<BR>
+This step defines the structure dependence of the probabilistic input variables previously declared.
+<ul>
+<li> - create a CORRELATION : <ul><li>1. click on the last VARIABLE you created; </li>
+<li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+<li>3. click on CORRELATION.</li></ul><BR>
+<li> - fulfill the CORRELATION : <ul><li>1. click on Copula; </li>
+<li>2. choose a copula within Normal copula and Independent one; </li>
+<li>3. In case of Normal copula, give the correlation matrix by clicking on CorrelationMatrix.</li>
+</ul></li><BR></ul>
+
+
+<li> Step 5 : Define the criteria you will evaluate.<BR>
+This step defines the criteria which will be evakluated by the uncertainty study. To have more information on criterias, see the Reference Guide.<BR>
+<ul><li>
+ - create a CRITERIA : <ul><li>1. click on the last VaRIABLE you created; </li>
+ <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+ <li>3. click on CRITERIA;</li></ul>
+ <li> - fulfill the CRITERIA : <ul><li>1. click on CRITERIA; </li>
+ <li>2. choose a specific criteria among the three proposed ones.</li><BR></ul>
+The following steps are described just below.</li><BR>
+
+<li>CRITERIA MinMax : <BR>
+This criteria aims at evaluating some extreme values of the output variable of interest, which is the output variable of the model. To have more information on the different methods, see the Use Cases Guide.
+<ul>
+ <li> - 3. click on MinMax; </li>
+ <li> - 4. click on the just created field Method which defines how input probabilistic variables will be generated;</li>
+ <li> - 5. click on the just created field corresponding to the chosen Method; </li>
+ <li> - 6. fulfill the required fields;</li>
+ <li> - 7. The Results are the extreme values evaluated on the output variable onf interest.</li>
+</ul></li><BR>
+
+<li>CRITERIA Central Uncertainty : <BR>
+This criteria aims at evaluating some central probabilistic carateristics of the output variable of interest. To have more information on the different methods, see the Use Cases Guide.
+<ul><li> - 3. click on CentralUncertainty; </li>
+ <li>- 4. click on the just created field Method which defines how the central probabilistic caracteristics will be evaluated and choose one; </li>
+ <li>- 5. click on the just created field corresponding to the chosen Method;</li>
+ <li>- 6. fulfill the required fields;</li>
+ <li>- 7. The Results are the mean, standard deviation whatever the chosen Method and in the case of a Radom sampling Method, also some empirical quantiles previoulsy defined, the evaluation of some correlation coefficients (PCC, PRCC, SRC and SRRC) and the kernel smoothing of the probabilistic density function of the output variable of interest.</li>
+</ul><BR></li>
+
+
+<li>CRITERIA Threshold Exceedance : <BR>
+This criteria aims at evaluating the probability that the ouput variable of interest exceeds or remaines under a define threshold. To have more information on the different methods, see the Use Cases Guide.
+<ul><li>- 3. click on Threshold Exceedence; </li>
+ <li>- 4. click on the just created field Method which defines how the central probabilistic caracteristics will be evaluated;</li>
+ <li>- 5. define the Event : click on Threshold and fulfill it; click on the ComparisonOperator and fulfill it; </li>
+ <li>- 6. define the probability evaluation Method : click on Method and choose one;</li>
+ <li>- 7. fulfill the required fields. In the FORM and SORM cases, it is possible to perform some importance sampling around the design point : the importance distribution is the standard Normal distribution defined int he stansard space, with independent components, unit variance and centered around the design point.</li>
+ <li>- 8. The Results are the following ones :<BR> in the case of a Simulation Method, the probability evaluation with the standard deviation and the coefficient of vrariation of its estimator, the confidence interval defined previously, the final number of simulation used for the evaluation, the convergence graph of the estimator; in the case of a FORM Method, the probability evaluation, the associated design point, the Hasofer reliability index, the importance factors also drawed in a graph, the sensitivity factors evaluated on the FORM probability estimation and on the Hasofer reliability index and the calls number of the model; in the case of a SORM Method, the probability evaluation, the associated design point, the Hasofer, Tvedt and HohenBichler reliability indexes, the importance factors also drawed in a graph, the sensitivity factors evaluated on the Hasofer reliability index and the calls number of the model.
+</li>
+</ul><BR></ul>
+
+<h3>
+General rules
+</h3>
+<ul>
+<li> To erase a concept, right click on it and click on Supprimer.</li>
+<li> While the concept is not colored in green, you have not completely fulfilled the concepts. The orange color means a concept needs to be named.</li>
+<li> To fulfill a list of values (v1, v2, ..., vn), type the whole values separated by coma. For example, to fulfill (1,2,3) in the field Levels of an Experiment plane, type : 1,2,3.</li>
+<li> To fulfill a list of list of values, type one by one each list of values as previously described. For example, ((v1,v2), (v3,v4)), type : v1,v2 then "entered", v3,v4 then 'entered". This is the case in the Histogramm distribution.</li>
+<li> Files names or graphics impression are given without their extensions. Open TURNS will authomatically provide the .eps, .png and .fig formats.</li>
+</ul>
+<BR><BR>
+
+
+<h3>
+Save and Run your uncertainty study
+</h3>
+Once correctly fulfilled, the study can be saved under a specific name chosen by the User, for example "myStudy".<BR>
+Then, two files are authomatically created :
+<ul>
+<li>- a myStudy.comm which contains all the information declared in the EFICAS GUI. This file myStudy.comm may be opened once more within EFICAS.</li>
+<li>- a myStudy.py which is the corresponding python script. The python script is generated given that each concept has been correctly and entirely fulfilled. </li>
+</ul>
+To run your uncertainty analyses, you nedd to type "python myStudy.py" or "python -i myStudy.py" in your shell. All the graphs are created in the repertory where the python session has been launched.
+To have more information on how to modify the python script, see the Use Cases Guide.
+<BR>
+
+</body>
+</html>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+<HEAD>
+<TITLE>EFICAS</TITLE>
+</HEAD>
+
+<BODY TEXT="#000000" BGCOLOR="#F7F3FF" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">
+
+<H1>EFICAS</H1>
+<HR>
+
+<P> <A HREF="EficasGui.txt">What is the EFICAS Graphical User Interface</A>
+<P> <A HREF="UncertaintyStudy.txt">Definition of the uncertainty study</A>
+
+</BODY>
+</HTML>
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ configuration_ASTER.py __init__.py prefs_ASTER.py prefs.py
+ properties.py qtEficas_aster.py qtGroup.py style.py
+ editeur_salome.ini editeur.ini eficas_aster.py
+ LICENSE.TERMS
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster
+ )
+add_subdirectory (Cata)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ __init__.py cataSTA8c_clefs_docu cataSTA9c_clefs_docu
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster/Cata
+ )
+install (
+ DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Utilitai
+ ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA10
+ ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA9
+ ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA8
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster/Cata
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+#@ MODIF __init__ Macro DATE 20/09/2004 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.
+#
+#
+# ======================================================================
--- /dev/null
+#@ MODIF calc_ecrevisse_ops Macro DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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.
+# ======================================================================
+
+
+# ------------------OUTILS ------------------------------
+
+# Determination de la direction de la fissure
+# a partir du points initial et final :
+# theta : angle par rapport a la verticale ascendente (degres)
+# positif si sens horaire
+# -180< theta <=180
+# beta : angle par rapport a la horizontale (degres)
+# positif si sens anti-horaire
+# -180< beta <=180
+def dirfiss(Xa,Ya,Xb,Yb) :
+ from math import atan2, degrees
+
+ xia = Xa[0]
+ yia = Ya[0]
+ xea = Xa[-1]
+ yea = Ya[-1]
+ xib = Xb[0]
+ yib = Yb[0]
+ xeb = Xb[-1]
+ yeb = Yb[-1]
+
+ xi = (xia+xib)/2.
+ yi = (yia+yib)/2.
+ xe = (xea+xeb)/2.
+ ye = (yea+yeb)/2.
+
+ dx = xe -xi
+ dy = ye -yi
+
+ try :
+ tangA= dy/dx
+ except ZeroDivisionError :
+ if (dy>0.) :
+ theta = 0.
+ beta = 90.
+ else :
+ theta = 180.
+ beta = -90.
+ else :
+ beta = atan2(dy,dx)
+ beta = degrees(beta)
+ theta = 90.-beta
+ if (theta>180.):
+ theta=theta-360.
+
+ if (abs(beta)<45. or abs(beta)>135.) :
+ DIR_PREV = 'X'
+ else:
+ DIR_PREV = 'Y'
+
+ if (round(abs(beta))==0. or round(abs(beta))==180.):
+ DIR_FISS = 'X'
+ elif (round(abs(beta))==90.):
+ DIR_FISS = 'Y'
+ else :
+ DIR_FISS = 'GEN'
+
+ return DIR_FISS, DIR_PREV, beta, theta, xi, yi
+
+
+# Determination de l ouverture de la fissure
+def ouvFiss(DIR_FISS,beta,Xa,Ya,Xb,Yb) :
+ from math import sin, cos, sqrt, radians
+
+ if DIR_FISS=='X' :
+ Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+ Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+ elif DIR_FISS=='Y' :
+ Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+ Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+ else :
+ xi = (Xa[0]+Xb[0])*0.5
+ yi = (Ya[0]+Yb[0])*0.5
+ Xa1 = [x-y for (x,y) in zip(Xa,[xi]*len(Xa))]
+ Ya1 = [x-y for (x,y) in zip(Ya,[yi]*len(Ya))]
+ Xb1 = [x-y for (x,y) in zip(Xb,[xi]*len(Xb))]
+ Yb1 = [x-y for (x,y) in zip(Yb,[yi]*len(Yb))]
+ Xa2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xa,Ya)]
+ Ya2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xa,Ya)]
+ Xb2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xb,Yb)]
+ Yb2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xb,Yb)]
+ Ouv = map(lambda x,y: abs(y-x), Ya2, Yb2)
+ Gli = map(lambda x,y: abs(y-x), Xa2, Xb2)
+ return Ouv, Gli
+
+
+
+
+
+# ------------------DEBUT MACRO ------------------------------
+# Debut de la macro, on impose en parametre les donnees placer
+# dans T_EC, l'appel a ecrevisse
+def calc_ecrevisse_ops(self,
+ CHARGE_MECA,
+ CHARGE_THER1,
+ CHARGE_THER2,
+ TABLE,
+ DEBIT,
+ MODELE_MECA,
+ MODELE_THER,
+ RESULTAT,
+ FISSURE,
+ ECOULEMENT,
+ MODELE_ECRE,
+ CONVERGENCE,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ IMPRESSION,
+ INFO,
+ COURBES,
+ **args):
+
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Recuperation du profil de la fissure , appel de MACR_ECRE_CALC,
+ creation des tableaux de resultats et des chargements pour AsterGeneration par Aster
+ """
+
+ import os, string, types, shutil
+ import aster
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ from Utilitai.Table import Table, merge
+ from copy import copy
+ from math import atan, pi, sqrt, atan2, degrees, sin, cos
+
+ ier=0
+
+ # Concepts sortant
+ self.DeclareOut('__TAB',TABLE)
+ self.DeclareOut('__ECR_F1',CHARGE_THER1)
+ self.DeclareOut('__ECR_F2',CHARGE_THER2)
+ self.DeclareOut('__ECR_P',CHARGE_MECA)
+ self.DeclareOut('__DEB',DEBIT)
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Parametres debug
+ debug = False
+
+ # Fonctionnalitees cachees :
+ # 1- oldVersion : "=True" permet de retourner un chargement thermique defini selon l'ancien mode (flux thermique)
+ # ATTENTION!! L'ancienne version ne marche que avec la fissure orientee dans la direction Y,
+ # et avec le point initila en y=0!!
+ # 2- chargeLin : "=True" permet d'appliquer le chargement d'Ecrevisse avec interpolation lineaire sur le mailles,
+ # et non constant par maille, comme c'est par defaut
+ oldVersion = False
+ chargeLin = False
+
+
+ # Parametres developpeur
+ tmp_ecrevisse = "tmp_ecrevisse"
+
+ # Info
+ info2 = (INFO==2)
+ InfoAster = 1
+ if debug :
+ info2=True
+
+ # IMPORTATION DE COMMANDES ASTER
+ DEFI_GROUP = self.get_cmd("DEFI_GROUP")
+ POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
+ MACR_ECRE_CALC = self.get_cmd("MACR_ECRE_CALC")
+ IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ DETRUIRE = self.get_cmd("DETRUIRE")
+ IMPR_CO = self.get_cmd("IMPR_CO")
+ DEFI_FONCTION = self.get_cmd("DEFI_FONCTION")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+ IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ CO = self.get_cmd("CO")
+ AFFE_CHAR_THER_F = self.get_cmd("AFFE_CHAR_THER_F")
+ AFFE_CHAR_MECA_F = self.get_cmd("AFFE_CHAR_MECA_F")
+ DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
+ DEFI_CONSTANTE = self.get_cmd("DEFI_CONSTANTE")
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+ dRESULTAT=RESULTAT[0].cree_dict_valeurs(RESULTAT[0].mc_liste)
+ for i in dRESULTAT.keys():
+ if dRESULTAT[i]==None : del dRESULTAT[i]
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+
+ # INSTANTS
+ _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
+ if dRESULTAT.has_key('INST'):
+ Inst_Ecrevisse = dRESULTAT['INST']
+ else:
+ pass
+
+
+ # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
+ # liste des mots cles facteurs de PRES_REP pour chaque fissure
+ l_PRES_REP = []
+ if oldVersion :
+ # liste des mots cles facteurs de FLUX_REP pour le flux F1/F2
+ # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+ l_FLUX_REP_F1 = []
+ l_FLUX_REP_F2 = []
+ else :
+ # liste des mots cles facteurs de ECHANGE pour le flux F1/F2
+ # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+ l_ECHANGE_F1 = []
+ l_ECHANGE_F2 = []
+
+
+
+ # ON CREE LES GROUP_NO ORDONNES DES LEVRES DE FISSURE
+ # Liste des noms des groupes de noeuds du maillage :
+ _lgno = map(lambda x: x[0], MODELE_MECA['MAILLAGE'].LIST_GROUP_NO() )
+
+ for k, fissure in enumerate(FISSURE):
+ dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+
+ # On cree les group_no correspondant aux group_ma des levres de la fissure dans le cas ou ils n'existent pas deja
+ if not dFISSURE['GROUP_MA'][0] in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),),);
+
+ if not dFISSURE['GROUP_MA'][1] in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),),);
+
+ # Test sur le nombre de caracteres du nom des group_ma
+ if (len(dFISSURE['GROUP_MA'][0]) >7 or len(dFISSURE['GROUP_MA'][1]) >7):
+ sys.exit(1)
+
+ # Creation des group_no ordonnes des levres des fissures
+ _nom_gno_1 = '_' + dFISSURE['GROUP_MA'][0]
+ if not _nom_gno_1 in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+ NOM=_nom_gno_1,
+ GROUP_NO=dFISSURE['GROUP_MA'][0],
+ GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][0],
+ GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][0],
+ PRECISION=0.01,
+ CRITERE='RELATIF',),
+ INFO=InfoAster,);
+
+ _nom_gno_2 = '_' + dFISSURE['GROUP_MA'][1]
+ if not _nom_gno_2 in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+ NOM=_nom_gno_2,
+ GROUP_NO=dFISSURE['GROUP_MA'][1],
+ GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][1],
+ GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][1],
+ PRECISION=0.01,
+ CRITERE='RELATIF',),
+ INFO=InfoAster,);
+
+
+
+ # EXTRACTIONS DE QUANTITES NECESSAIRES DES RESULTATS THERMIQUE ET MECANIQUE
+ # On cree les chargements Aster --> Ecrevisse :
+ # ouverture de fissure et temperature sur le materiau
+
+ # premiere levre de fissure
+ _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
+ GROUP_NO=_nom_gno_1,
+ RESULTAT=dRESULTAT['MECANIQUE'],
+ NOM_CHAM='DEPL',
+ NOM_CMP=('DX','DY',),
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),
+ );
+
+ _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
+ GROUP_NO=_nom_gno_1,
+ RESULTAT=dRESULTAT['THERMIQUE'],
+ NOM_CHAM='TEMP',
+ TOUT_CMP='OUI',
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ # deuxieme levre de la fissure
+ _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
+ GROUP_NO=_nom_gno_2,
+ RESULTAT=dRESULTAT['MECANIQUE'],
+ NOM_CHAM='DEPL',
+ NOM_CMP=('DX','DY',),
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
+ GROUP_NO=_nom_gno_2,
+ RESULTAT=dRESULTAT['THERMIQUE'],
+ NOM_CHAM='TEMP',
+ TOUT_CMP='OUI',
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ if ( debug ) :
+ print '_T_DPL ==================================================='
+ print _T_DPL.EXTR_TABLE()
+ print '_T_DPL_B ================================================='
+ print _T_DPL_B.EXTR_TABLE()
+ print '_T_TEMP ================================================='
+ print _T_TEMP.EXTR_TABLE()
+ print '_T_TEMP_B ==============================================='
+ print _T_TEMPB.EXTR_TABLE()
+
+ # Extraction des tables Temperatures + deplacement levres fissure
+ _tbl_temp = _T_TEMP.EXTR_TABLE()
+ _tbl_dpl = _T_DPL.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=(_T_DPL,_T_TEMP,)),INFO=1,ALARME='NON')
+ _tbl_dpl_b = _T_DPL_B.EXTR_TABLE()
+ _tbl_temp_b = _T_TEMPB.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=(_T_DPL_B,_T_TEMPB,)),INFO=1,ALARME='NON')
+
+
+ # --Determination des cotes a donner a ecrevisse--
+ # a partir des resultats mecanique et thermique :
+ _l_tang = _tbl_dpl.values()['ABSC_CURV']
+ _l_tang_b = _tbl_dpl_b.values()['ABSC_CURV']
+ try :
+ _l_absz_m = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
+ except TypeError :
+ UTMESS('F','ECREVISSE0_40')
+ #
+ _l_tang_t = _tbl_temp.values()['ABSC_CURV']
+ _l_tang_t_b = _tbl_temp_b.values()['ABSC_CURV']
+ _l_absz_t = map(lambda x,y: 0.5*(x+y), _l_tang_t,_l_tang_t_b)
+
+
+ # Coordonnees des points des levres (initiales et a l instant actuel
+ _X0 = _tbl_dpl.values()['COOR_X']
+ _Y0 = _tbl_dpl.values()['COOR_Y']
+ _X0_b = _tbl_dpl_b.values()['COOR_X']
+ _Y0_b = _tbl_dpl_b.values()['COOR_Y']
+ _X = [x + y for (x,y) in zip(_tbl_dpl.values()['DX'],_X0)]
+ _Y = [x + y for (x,y) in zip(_tbl_dpl.values()['DY'],_Y0)]
+ _X_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DX'],_X0_b)]
+ _Y_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DY'],_Y0_b)]
+
+
+ # Determination de la direction de la fissure
+ (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
+ if oldVersion :
+ (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
+
+ if (DIR_FISS == 'GEN') and oldVersion :
+ UTMESS('F','ECREVISSE0_23', valr=[theta])
+
+ # --Calcul de l ouverture de fissure--
+ # une fissure refermee a une ouverture
+ # egale a l'ouverture remanente
+ (_l_ouv0,_l_gli0) = ouvFiss(DIR_FISS,beta,_X0,_Y0,_X0_b,_Y0_b)
+ for i in range(len(_l_ouv0)) :
+ if _l_ouv0[i] < dFISSURE['OUVERT_REMANENTE'] :
+ UTMESS('A','ECREVISSE0_39')
+
+
+ (_l_ouv,_l_gli) = ouvFiss(DIR_FISS,beta,_X,_Y,_X_b,_Y_b)
+ if dFISSURE['OUVERT_REMANENTE'] :
+ _l_ouv = map(lambda x: max(dFISSURE['OUVERT_REMANENTE'],x), _l_ouv)
+ if info2 :
+ nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
+ if nbOuvRem != 0 :
+ UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
+
+
+
+ # Controle sur l entite du glissement entre les levres
+ DeltaMaille = [abs(y-x) for (x,y) in zip(_l_absz_m[1:len(_l_absz_m)], _l_absz_m[0:len(_l_absz_m)-1])]
+ for i in range(len(DeltaMaille)) :
+ deltamai = DeltaMaille[i]
+ if (deltamai <= _l_gli[i]) or (deltamai <= _l_gli[i+1]) :
+ UTMESS('A', 'ECREVISSE0_38')
+ break
+
+
+ # -- Calcul de la temperature sur le materiau (levres de la fissure) --
+ # on fait la moyenne des temperatures des deux levres
+ _l_t2 = _tbl_temp.values()['TEMP']
+ _l_t2_b = _tbl_temp_b.values()['TEMP']
+ _l_temp_aster = map(lambda x,y: 0.5*(x+y), _l_t2_b,_l_t2)
+
+
+ # Infos / Debug : fichier .mess ou .resu
+ if (info2) :
+ UTMESS('I', 'ECREVISSE0_1', valk=["Premiere levre"],
+ valr=[Inst_Ecrevisse, min(_l_tang_t), max(_l_tang_t), min(_l_t2), max(_l_t2), min(_l_tang), max(_l_tang)])
+ UTMESS('I', 'ECREVISSE0_1',valk=["Deuxieme levre"],
+ valr=[Inst_Ecrevisse,min(_l_tang_t_b), max(_l_tang_t_b), min(_l_t2_b), max(_l_t2_b), min(_l_tang_b), max(_l_tang_b)])
+ UTMESS('I', 'ECREVISSE0_2',
+ valr=[Inst_Ecrevisse, min(_l_absz_t), max(_l_absz_t), min(_l_temp_aster), max(_l_temp_aster), min(_l_absz_m), max(_l_absz_m), min(_l_ouv), max(_l_ouv), min(_l_gli),max(_l_gli)])
+
+
+ if ( debug ) :
+ print "\n INFORMATIONS DE DEBUG: "
+ print 'Inst_Ecrevisse=', Inst_Ecrevisse
+ print 'theta:', theta
+ print 'beta:', beta
+ print 'DIR_FISS:', DIR_FISS
+ print 'DIR_PREV:', DIR_PREV
+ print 'point initial de la fissure: (xi,yi) :', _xi,_yi
+ print len(_X0), '_X0 =', _X0
+ print len(_X0_b), '_X0_b=', _X0_b
+ print len(_Y0), '_Y0 =', _Y0
+ print len(_Y0_b), '_Y0_b=', _Y0_b
+ print len(_X), '_X =', _X
+ print len(_Y), '_Y =', _Y
+ print len(_X_b), '_X_b =', _X_b
+ print len(_Y_b), '_Y_b =', _Y_b
+ print 'Controle sur les abszisses curvilignes (mecaniques/thermiques) '
+ print '_l_absz_m==_l_absz_t?', _l_absz_m==_l_absz_t
+ print '_l_absz_m=', len(_l_absz_m),_l_absz_m
+ print '_l_absz_t=', len(_l_absz_t),_l_absz_t
+ print '_l_temp_aster=', len(_l_temp_aster),_l_temp_aster
+ print '_l_ouv=', len(_l_ouv),_l_ouv
+ print '_l_gli=', len(_l_gli),_l_gli
+ print '_l_tang=', _l_tang
+ print '_l_tang_b=', _l_tang
+
+
+# ----------------------------------------------------------------------------
+# PREPARATION ET LANCEMENT D ECREVISSE
+
+ # TESTS de non divergence, les messages sont assez explicites :
+ # Si toutes les listes sont bien definies
+ if len(_l_absz_m)*len(_l_ouv)*len(_l_absz_t)*len(_l_temp_aster) == 0:
+ UTMESS('F','ECREVISSE0_3', valr=[Inst_Ecrevisse])
+ __TAB = None
+ break
+ # Si les ouvertures ne sont pas trop faibles
+ elif min(_l_ouv) < 1e-20:
+ UTMESS('F','ECREVISSE0_4', valr=[Inst_Ecrevisse, min(_l_ouv)])
+ __TAB = None
+ break
+ elif max(_l_t2) > 700:
+ UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
+ __TAB = None
+ break
+ elif max(_l_t2_b) > 700:
+ UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
+ __TAB = None
+ break
+ elif min(_l_t2) < 0:
+ UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
+ __TAB = None
+ break
+ elif min(_l_t2_b) < 0:
+ UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
+ __TAB = None
+ break
+ elif abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) )< 5:
+ UTMESS('F','ECREVISSE0_7', valr=[Inst_Ecrevisse, abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) ) ] )
+ __TAB = None
+ break
+ # On lance Ecrevisse!
+ else:
+ UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
+
+ # On efface le rep
+ try:
+ for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
+ try:
+ os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
+ except:
+ pass
+ except:
+ pass
+
+ # Recalcul des cotes par rapport a la tortuoiste
+ tort = dFISSURE['TORTUOSITE']
+ try :
+ _l_absz_m = [x/tort for x in _l_absz_m]
+ _l_absz_t = [x/tort for x in _l_absz_t]
+ except ZeroDivisionError :
+ UTMESS('F','ECREVISSE0_42')
+
+
+ if dFISSURE.has_key('LISTE_COTES_BL'):
+ __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
+ else:
+ __LISTE_COTES_BL = (0., max(_l_absz_m))
+
+ # Mot-cle ECOULEMENT
+ txt = {}
+ txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
+ 'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
+ 'FLUIDE_ENTREE' : dECOULEMENT['FLUIDE_ENTREE'],
+ }
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [1, 3, 4, 6]:
+ txt['TEMP_ENTREE'] = dECOULEMENT['TEMP_ENTREE']
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [2, 5]:
+ txt['TITR_MASS'] = dECOULEMENT['TITR_MASS']
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [4, 5]:
+ txt['PRES_PART'] = dECOULEMENT['PRES_PART']
+
+
+ # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
+ # Mot-cle MODELE_ECRE
+ txt2 = {}
+ txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
+ if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
+ txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
+
+ txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
+
+ if int(dMODELE_ECRE['FROTTEMENT']) in [-4,-3,-2,-1] :
+ txt2['REYNOLDS_LIM'] = dMODELE_ECRE['REYNOLDS_LIM']
+ txt2['FROTTEMENT_LIM'] = dMODELE_ECRE['FROTTEMENT_LIM']
+
+ txt2['TRANSFERT_CHAL'] = dMODELE_ECRE['TRANSFERT_CHAL']
+ if int(dMODELE_ECRE['TRANSFERT_CHAL']) in [-2,-1] :
+ txt2['XMINCH'] = dMODELE_ECRE['XMINCH']
+ txt2['XMAXCH'] = dMODELE_ECRE['XMAXCH']
+
+ try :
+ if dMODELE_ECRE['IVENAC'] in [0, 1]:
+ txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
+ else :
+ txt2['IVENAC'] = 0
+ except :
+ txt2['IVENAC'] = 0
+
+ motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
+
+ DETRUIRE(OBJET=_F(CHAINE = '_TAB2' ),INFO=1,ALARME='NON')
+ DETRUIRE(OBJET=_F(CHAINE = '_DEB2' ),INFO=1,ALARME='NON')
+ __TAB_i = CO('_TAB2')
+ __DEB_i = CO('_DEB2')
+
+ MACR_ECRE_CALC(TABLE = __TAB_i,
+ DEBIT = __DEB_i,
+ ENTETE = ENTETE,
+ COURBES = COURBES,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ FISSURE = _F(LONGUEUR = max(_l_absz_m),
+ ANGLE = theta,
+ RUGOSITE = dFISSURE['RUGOSITE'],
+ ZETA = dFISSURE['ZETA'],
+ SECTION = dFISSURE['SECTION'],
+ LISTE_COTES_AH = _l_absz_m,
+ LISTE_VAL_AH = _l_ouv,
+ LISTE_COTES_BL = __LISTE_COTES_BL,
+ LISTE_VAL_BL = dFISSURE['LISTE_VAL_BL'],
+ ),
+ TEMPERATURE=_F(GRADIENT = 'FOURNI',
+ LISTE_COTES_TEMP = _l_absz_t,
+ LISTE_VAL_TEMP = _l_temp_aster,
+ ),
+ CONVERGENCE=_F(KGTEST = dCONVERGENCE['KGTEST'],
+ ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
+ CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
+ ),
+ **motscle2
+ );
+
+
+#-------------------------------------------------------------
+# EXTRACTION DES RESULTATS D ECREVISSE
+
+
+
+ # Creation de la table
+ __TABFISS_i = __TAB_i.EXTR_TABLE()
+
+ nb_lignes_table = len(__TABFISS_i["COTES"])
+ # Re-definition des cotes utilisateur (on elimine l effet de la tortuosite)
+ _lst_c = __TABFISS_i.COTES.values()
+ _l_cotes = [x*tort for x in _lst_c]
+ dictTab = __TABFISS_i.dict_CREA_TABLE()['LISTE']
+
+ __TABFISS_i = CREA_TABLE(LISTE = (
+ _F(PARA = "COTES", LISTE_R = _l_cotes,),
+ _F(PARA = "FLUX", LISTE_R = dictTab[1]['LISTE_R'],),
+ _F(PARA = "PRESSION", LISTE_R = dictTab[2]['LISTE_R'],),
+ _F(PARA = "TEMP", LISTE_R = dictTab[3]['LISTE_R'],),
+ _F(PARA = "COEF_CONV", LISTE_R = dictTab[4]['LISTE_R'],),
+ ),)
+
+ DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
+ DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
+
+ if ( debug ):
+ os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+ if dFISSURE['PREFIXE_FICHIER'] :
+ pref_fic = dFISSURE['PREFIXE_FICHIER']
+ else :
+ pref_fic = 'FISSURE'+str(k+1)
+
+ ## Ecriture du fichier debits en fonction du temps:
+ #try:
+ ## on lit le fichier debit produit par ecrevisse
+ #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+ #_txt = f_ast.read()
+ #f_ast.close()
+ #nomfic = str(pref_fic) + '_debits'
+ ## on concatene
+ #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
+ #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
+ #fw.close()
+ ## On recopie le fichier debits pour reprise ulterieure
+ #nomfic2 = 'debits_dernier'
+ #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic2, 'w')
+ #fw.write( _txt )
+ #fw.close()
+ #except Exception, e:
+ #print e
+
+ # CREATION DES COURBES:
+ if COURBES != "AUCUNE":
+ # Pour masquer certaines alarmes
+
+ MasquerAlarme('TABLE0_6')
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_flux'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','FLUX',),
+ TITRE='Flux de chaleur a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Flux (W/m2)',
+ COULEUR = 1,
+ MARQUEUR = 1,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_temperature'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','TEMP',),
+ TITRE='Temperature a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Temperature (degres C)',
+ COULEUR = 2,
+ MARQUEUR = 2,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_coeffconv'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','COEF_CONV',),
+ TITRE='Coefficient de convection a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Coefficient de convection (W/m2/K)',
+ COULEUR = 3,
+ MARQUEUR = 3,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_pression'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','PRESSION',),
+ TITRE='Pression a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Pression (Pa)',
+ COULEUR = 4,
+ MARQUEUR = 4,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ # Pour la gestion des alarmes
+ RetablirAlarme('TABLE0_6')
+
+
+
+ # On recopie dans REPE_OUT les fichiers resultats d'Ecrevisse
+ tmp_ecrevisse_absolu = os.path.join(os.getcwd(),tmp_ecrevisse)
+ repe_out_absolu = os.path.join(os.getcwd(),'REPE_OUT')
+ for file in os.listdir(tmp_ecrevisse_absolu):
+ if not file in ['ecrevisse', 'ecrevisse.sh']:
+ old_file = os.path.join(tmp_ecrevisse_absolu, file)
+ new_file = os.path.join(repe_out_absolu, str(pref_fic) + '_' + file + '_' + str(Inst_Ecrevisse))
+ shutil.copy(old_file, new_file)
+
+ # Creation de la table resultat sur toutes les fissures :
+ # Nom de la fissure
+ nom_fiss = dFISSURE['GROUP_MA'][0] + "-" + dFISSURE['GROUP_MA'][1]
+ __TABFISS_i = __TABFISS_i.EXTR_TABLE()
+ __DEBFISS_i = __DEB_i.EXTR_TABLE()
+ __TABFISS_i["FISSURE"] = [nom_fiss]*nb_lignes_table
+ __DEBFISS_i["FISSURE"] = [nom_fiss]
+
+ if k==0 :
+ __TABFISS_tot = __TABFISS_i
+ __DEBFISS_tot = __DEBFISS_i
+ else :
+ __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
+ __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
+
+
+ if ( debug ):
+ os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+#--------------------------------------------------------------
+# CREATIONS DES CHARGEMENTS ASTER
+
+ # Recuperation des valeurs dans la table (voir si il y a plus simple)
+ _lst_c = __TABFISS_i.COTES.values()
+ _lst_f = __TABFISS_i.FLUX.values()
+ _lst_p = __TABFISS_i.PRESSION.values()
+ _lst_t = __TABFISS_i.TEMP.values()
+ _lst_cc = __TABFISS_i.COEF_CONV.values()
+
+
+ try:
+ a=len(_lst_c)
+ except:
+ _lst_c = []
+ _lst_f = []
+ _lst_p = []
+ _lst_t = []
+ _lst_cc = []
+ try:
+ if _lst_c[1]==0:
+ _lst_c = []
+ _lst_f = []
+ _lst_p = []
+ _lst_t = []
+ _lst_cc = []
+ except:
+ pass
+
+
+
+ # ------------------------------------------------------
+ # Extraction des conditions limites du calcul Ecrevisse
+ #
+ if len(_lst_c)>=2:
+ if not chargeLin :
+ nbCotes = len(_l_absz_m)
+ nbCotesEcre = nbCotes-1
+
+ # epsilon pour le decalage :
+ # le chargement est uniforme par maille
+ if _X0[1]>=_X0[0] :
+ epsx = 1.e-8
+ else :
+ epsx = -1.e-8
+ if _Y0[1]>=_Y0[0] :
+ epsy = 1.e-8
+ else :
+ epsy = -1.e-8
+
+ _lst_x0 = []
+ _lst_y0 = []
+ _lst_x0_b = []
+ _lst_y0_b = []
+ ly = []
+ ly2 = []
+ ly3 = []
+ ly4 = []
+
+ _lst_x0.append(_X0[0])
+ _lst_y0.append(_Y0[0])
+ _lst_x0_b.append(_X0_b[0])
+ _lst_y0_b.append(_Y0_b[0])
+ ly.append( _lst_f[0] )
+ ly2.append( _lst_p[0] )
+ ly3.append( _lst_t[0] )
+ ly4.append( _lst_cc[0] )
+
+ for i in range(nbCotes-2):
+ x = _X0[i+1]
+ y = _Y0[i+1]
+ toto1 = x - epsx
+ toto2 = x + epsx
+
+ _lst_x0.append( x - epsx )
+ _lst_x0.append( x + epsx )
+ _lst_y0.append( y - epsy )
+ _lst_y0.append( y + epsy )
+ x = _X0_b[i+1]
+ y = _Y0_b[i+1]
+ _lst_x0_b.append( x - epsx )
+ _lst_x0_b.append( x + epsx )
+ _lst_y0_b.append( y - epsy )
+ _lst_y0_b.append( y + epsy )
+ ly.append( _lst_f[i] )
+ ly.append( _lst_f[i+1] )
+ ly2.append( _lst_p[i] )
+ ly2.append( _lst_p[i+1] )
+ ly3.append( _lst_t[i] )
+ ly3.append( _lst_t[i+1] )
+ ly4.append( _lst_cc[i] )
+ ly4.append( _lst_cc[i+1] )
+
+ _lst_x0.append( _X0[nbCotes-1] )
+ _lst_y0.append( _Y0[nbCotes-1] )
+ _lst_x0_b.append( _X0_b[nbCotes-1] )
+ _lst_y0_b.append( _Y0_b[nbCotes-1] )
+ ly.append( _lst_f[nbCotesEcre-1] )
+ ly2.append( _lst_p[nbCotesEcre-1] )
+ ly3.append( _lst_t[nbCotesEcre-1] )
+ ly4.append( _lst_cc[nbCotesEcre-1] )
+ _lst_f = ly
+ _lst_p = ly2
+ _lst_t = ly3
+ _lst_cc = ly4
+ else :
+ _lst_x0 = [(x1+x2)*0.5 for (x1,x2) in zip(_X0[0:len(_X0)-1],_X0[1:len(_X0)])]
+ _lst_y0 = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0[0:len(_Y0)-1],_Y0[1:len(_Y0)])]
+ _lst_x0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_X0_b[0:len(_X0_b)-1],_X0_b[1:len(_X0_b)])]
+ _lst_y0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0_b[0:len(_Y0_b)-1],_Y0_b[1:len(_Y0_b)])]
+ _lst_x0.append(_X0[-1])
+ _lst_x0_b.append(_X0_b[-1])
+ _lst_y0.append(_Y0[-1])
+ _lst_y0_b.append(_Y0_b[-1])
+
+ # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
+ if(oldVersion) :
+ alpha = round(theta)
+ if DIR_FISS == 'X' :
+ levre1pos = ((_Y0[0]-_yi)>=0.)
+ if alpha == -90. :
+ _lst_x0.reverse()
+ _lst_p.reverse()
+ _lst_f.reverse()
+ _lst_dir = _lst_x0
+ else :
+ levre1pos = ((_X0[0]-_xi)>=0.)
+ if abs(alpha) == 180. :
+ _lst_y0.reverse()
+ _lst_p.reverse()
+ _lst_f.reverse()
+ _lst_dir = _lst_y0
+
+ # Creation des listes pour les chargements aster :
+ # (x1, y1, x2, y2, ...)
+ _tmp1=[]
+ _tmp2=[]
+ _tmp3=[]
+
+ for i in range(len(_lst_p)) :
+ _tmp1.append( _lst_dir[i] )
+ _tmp2.append( _lst_dir[i] )
+ _tmp3.append( _lst_dir[i] )
+
+ _tmp2.append( _lst_p[i] )
+ if levre1pos :
+ #_tmp1.append( -1*_lst_f[i] )
+ #_tmp3.append( _lst_f[i] )
+ _tmp1.append( _lst_f[i] )
+ _tmp3.append( -1*_lst_f[i] )
+ else :
+ #_tmp1.append( _lst_f[i] )
+ #_tmp3.append( -1*_lst_f[i] )
+ _tmp1.append( -1*_lst_f[i] )
+ _tmp3.append( _lst_f[i] )
+
+
+
+ # Flux en provenance d'Ecrevisse
+ _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+ VALE=_tmp1,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE');
+
+ _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+ VALE=_tmp3,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE' );
+
+ if DIR_FISS == 'X':
+ l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ FLUX_Y=_L_F1,))
+ l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ FLUX_Y=_L_F2,))
+ else :
+ l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ FLUX_X=_L_F1,))
+ l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ FLUX_X=_L_F2,))
+
+ # Pressions en provenance d'Ecrevisse
+ _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
+ VALE = _tmp2,
+ PROL_GAUCHE = 'LINEAIRE',
+ PROL_DROITE = 'LINEAIRE');
+
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
+ PRES=_L_P,))
+
+
+
+ # NOUVELLE VERSION
+ else :
+ # Creation des deux listes (x1, y1, x2, y2, ...)
+ # On cree trois/six listes :
+ # Les valeurs sont constant par maille sur les levres de la fissure,
+ # _tmp1/_tmp2 = temperature
+ # _tmp3/_tmp4 = coefficient d echange
+ # _tmp5/_tmp6 = pression
+ _tmp1=[]
+ _tmp2=[]
+ _tmp3=[]
+ _tmp4=[]
+ _tmp5=[]
+ _tmp6=[]
+
+ for i in range(len(_lst_f)) :
+ ix = copy(i)
+ iy = copy(i)
+ if _X0[1]<_X0[0] :
+ ix = len(_lst_f)-1-i
+ if _Y0[1]<_Y0[0] :
+ iy = len(_lst_f)-1-i
+
+ if (DIR_PREV=='X'):
+ _tmp1.append( _lst_x0[ix] )
+ _tmp1.append( _lst_t[ix] )
+ _tmp3.append( _lst_x0[ix] )
+ _tmp3.append( _lst_cc[ix] )
+ _tmp5.append( _lst_x0[ix] )
+ _tmp5.append( _lst_p[ix] )
+ _tmp2.append( _lst_x0_b[ix] )
+ _tmp2.append( _lst_t[ix] )
+ _tmp4.append( _lst_x0_b[ix] )
+ _tmp4.append( _lst_cc[ix] )
+ _tmp6.append( _lst_x0_b[ix] )
+ _tmp6.append( _lst_p[ix] )
+ else :
+ _tmp1.append( _lst_y0[iy] )
+ _tmp1.append( _lst_t[iy] )
+ _tmp3.append( _lst_y0[iy] )
+ _tmp3.append( _lst_cc[iy] )
+ _tmp5.append( _lst_y0[iy] )
+ _tmp5.append( _lst_p[iy] )
+ _tmp2.append( _lst_y0_b[iy] )
+ _tmp2.append( _lst_t[iy] )
+ _tmp4.append( _lst_y0_b[iy] )
+ _tmp4.append( _lst_cc[iy] )
+ _tmp6.append( _lst_y0_b[iy] )
+ _tmp6.append( _lst_p[iy] )
+
+
+
+
+
+ # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
+ _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp1,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp2,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp3,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp4,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ TEMP_EXT=_L_T1,
+ COEF_H=_L_CC2))
+
+ l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ TEMP_EXT=_L_T2,
+ COEF_H=_L_CC2))
+
+ # Couplage mecanique : Pressions en provenance d'Ecrevisse
+ _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp5,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp6,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
+ PRES=_L_P1,))
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
+ PRES=_L_P2,))
+
+ # Fin extraction des conditions limites du calcul Ecrevisse
+ # ----------------------------------------------------------
+
+ if debug :
+ print ('FISSURE-'+str(k+1))
+ print '_lst_c:', len(_lst_c), _lst_c
+ print '_lst_f:', len(_lst_f), _lst_f
+ print '_lst_p:', len(_lst_p), _lst_p
+ print '_lst_t:', len(_lst_t), _lst_t
+ print '_lst_cc:', len(_lst_cc), _lst_cc
+ print '_lst_x0:', len(_lst_x0), _lst_x0
+ print '_lst_x0_b :', len(_lst_x0_b), _lst_x0_b
+ print '_lst_y0:', len(_lst_y0), _lst_y0
+ print '_lst_y0_b :', len(_lst_y0_b), _lst_y0_b
+ print '_tmp1 :', len(_tmp1), _tmp1
+ print '_tmp2 :', len(_tmp2), _tmp2
+ print '_tmp3 :', len(_tmp3), _tmp3
+ if (not oldVersion) :
+ print '_tmp4 :', len(_tmp4), _tmp4
+ print '_tmp5 :', len(_tmp5), _tmp5
+ print '_tmp6 :', len(_tmp6), _tmp6
+
+ #Fin du boucle sur la fissure for k
+
+
+ # Assemblage des concepts sortants
+ if(oldVersion) :
+ __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ FLUX_REP=l_FLUX_REP_F1);
+
+ __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ FLUX_REP=l_FLUX_REP_F2);
+ else:
+ __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ ECHANGE=l_ECHANGE_F1);
+
+ __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ ECHANGE=l_ECHANGE_F2);
+
+ __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
+ PRES_REP=l_PRES_REP);
+
+ # Table resultat
+ try:
+ dprod = __TABFISS_tot.dict_CREA_TABLE()
+ __TAB = CREA_TABLE(**dprod)
+ debprod = __DEBFISS_tot.dict_CREA_TABLE()
+ __DEB = CREA_TABLE(**debprod)
+ except:
+ UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])
--- /dev/null
+#@ MODIF calc_essai_ops Macro DATE 28/01/2010 AUTEUR BODEL C.BODEL
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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.
+# ======================================================================
+
+## \package calc_essai_ops Implémentation de la macro CALC_ESSAI
+#
+# Ce module contient la partie controle de la macro CALC_ESSAI
+# l'implémetation de cette macro se trouve dans les modules
+# meidee_help, meidee_mac, meidee_massamor, meidee_turbulent
+# on utilise aussi une librairie de support
+# pour la gestion de l'interface graphique dans meidee_iface
+
+
+def calc_essai_ops( self,
+ INTERACTIF = None,
+ #UNITE_FIMEN = None,
+ UNITE_RESU = None,
+ EXPANSION = None,
+ #MEIDEE_FLUDELA = None,
+ #MEIDEE_TURBULENT = None,
+ IDENTIFICATION = None,
+ MODIFSTRUCT = None,
+ TRAITEMENTSIG = None,
+ GROUP_NO_CAPTEURS = None,
+ GROUP_NO_EXTERIEUR = None,
+ #RESU_FLUDELA = None,
+ #RESU_TURBULENT = None,
+ RESU_IDENTIFICATION = None,
+ RESU_MODIFSTRU = None,
+ **args):
+ import aster
+ from Meidee.meidee_cata import MeideeObjects
+ ier = 0
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ prev = aster.onFatalError()
+
+ # gestion des concepts sortants de la macro, declares a priori
+ table = []
+ table_fonction = []
+ mode_mec = []
+
+
+ if not RESU_MODIFSTRU:
+ out_modifstru = {}
+ else:
+ out_modifstru = RESU_MODIFSTRU[0] # max=1 dans le capy
+
+
+ if not RESU_IDENTIFICATION:
+ RESU_IDENTIFICATION = []
+ else:
+ for res in RESU_IDENTIFICATION:
+ table_fonction.append(res['TABLE'])
+ out_identification = {"DeclareOut" : self.DeclareOut,
+ "TypeTables" : 'TABLE_FONCTION',
+ "ComptTable" : 0,
+ "TablesOut" : table_fonction}
+
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+## if not RESU_FLUDELA:
+## RESU_FLUDELA = []
+## else:
+## for res in RESU_FLUDELA:
+## table.append(res['TABLE'])
+## out_fludela = {"DeclareOut" : self.DeclareOut,
+## "TypeTables" : 'TABLE',
+## "ComptTable" : 0,
+## "TablesOut" : table}
+##
+## if not RESU_TURBULENT:
+## RESU_TURBULENT = []
+## else:
+## for res in RESU_TURBULENT:
+## table_fonction.append(res['FONCTION'])
+## out_meideeturb = {"DeclareOut" : self.DeclareOut,
+## "FoncOut" : table_fonction}
+
+ # Mode interactif : ouverture d'une fenetre Tk
+ if INTERACTIF == "OUI":
+ aster.onFatalError('EXCEPTION')
+
+ create_interactive_window(self,
+ #UNITE_FIMEN,
+ #out_fludela,
+ #out_meideeturb,
+ out_identification,
+ out_modifstru,
+ )
+ else:
+ from Meidee.meidee_calcul import MessageBox
+ from Meidee.meidee_test import TestMeidee
+ mess = MessageBox(UNITE_RESU)
+ mess.disp_mess("Mode non intéractif")
+
+ objects = MeideeObjects(self, mess)
+
+ # importation des concepts aster existants de la memoire jeveux
+ TestMeidee(self,
+ mess,
+ #out_fludela,
+ #out_meideeturb,
+ out_identification,
+ out_modifstru,
+ objects,
+ EXPANSION,
+ #MEIDEE_FLUDELA,
+ #MEIDEE_TURBULENT,
+ IDENTIFICATION,
+ MODIFSTRUCT,
+ GROUP_NO_CAPTEURS,
+ GROUP_NO_EXTERIEUR
+ )
+
+ mess.close_file()
+ aster.onFatalError(prev)
+ return ier
+
+
+
+def create_tab_mess_widgets(tk):
+ """Construits les objects table et boîte à messages."""
+ try:
+ from Pmw import PanedWidget
+ except ImportError:
+ PanedWidget = None
+
+ from Meidee.meidee_iface import MessageBoxInteractif, TabbedWindow
+
+ tabsw = tk
+ msgw = tk
+ tk.rowconfigure(0, weight=2)
+ tk.rowconfigure(1, weight=1)
+
+ tabs = TabbedWindow(tabsw, ["Expansion de modeles",
+ "Modification structurale",
+ #"MEIDEE mono-modal fludela",
+ #"MEIDEE mono-modal turbulent",
+ "Identification de chargement",
+ "Traitement du signal",
+ "Parametres de visualisation",
+ ])
+
+ tabs.grid(row=0, column=0, sticky='nsew')
+ # pack(side='top',expand=1,fill='both')
+
+ # ecriture des message dans un fichier message
+ mess = MessageBoxInteractif(msgw)
+ mess.grid(row=1, column=0, sticky='nsew')
+
+ return tabs, mess
+
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##def get_fimen_files(UNITE_FIMEN, FIMEN=None):
+## """Fichiers fimen éventuels associés aux unités logiques en entrée"""
+## # XXX FIMEN is not defined (should it be included in the macro)
+## from Utilitai.UniteAster import UniteAster
+## fichiers_fimen = []
+## print "FIMEN:", UNITE_FIMEN
+##
+## if UNITE_FIMEN:
+## if type(FIMEN)==int:
+## UNITE_FIMEN= [ UNITE_FIMEN ]
+## for unit in UNITE_FIMEN:
+## UL = UniteAster()
+## fichiers_fimen.append( (unit, UL.Nom(unit)) )
+##
+## return fichiers_fimen
+
+
+class FermetureCallback:
+ """Opérations à appliquer lors de la fermeture de la
+ fenêtre Tk.
+ """
+
+ def __init__(self, main_tk, turbulent):
+ self.main_tk = main_tk
+ self.turbulent = turbulent
+
+ def apply(self):
+ """Enlève les fichiers temporaires de Xmgrace"""
+ if self.turbulent.param_visu.logiciel_courbes is not None:
+ self.turbulent.param_visu.logiciel_courbes.fermer()
+ self.main_tk.quit()
+
+
+def create_interactive_window(macro,
+ #UNITE_FIMEN,
+ #out_fludela,
+ #out_meideeturb,
+ out_identification,
+ out_modifstru,
+ ):
+ """Construit la fenêtre interactive comprenant une table pour
+ les 4 domaines de Meidee."""
+ from Tkinter import Tk
+
+ from Meidee.meidee_cata import MeideeObjects
+ from Meidee.meidee_correlation import InterfaceCorrelation
+ from Meidee.meidee_modifstruct import InterfaceModifStruct
+ from Meidee.meidee_turbulent import InterfaceTurbulent
+ from Meidee.meidee_parametres import InterfaceParametres
+ from Meidee.meidee_calc_spec import InterfaceCalcSpec
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+## from Meidee.meidee_fludela import InterfaceFludela, InterfaceTurbMonomod
+
+ # fenetre principale
+ tk = Tk()
+ tk.rowconfigure(0, weight=1)
+ tk.columnconfigure(0,weight=1)
+ tk.title("CALC_ESSAI")
+
+ tabs, mess = create_tab_mess_widgets(tk)
+ main = tabs.root()
+
+ # importation des concepts aster de la memoire jeveux
+ objects = MeideeObjects(macro, mess)
+ tabs.set_objects(objects)
+
+ param_visu = InterfaceParametres(main, mess)
+
+ iface = InterfaceCorrelation(main, objects, macro, mess,
+ param_visu)
+ imodifstruct = InterfaceModifStruct(main, objects, macro,
+ mess, out_modifstru, param_visu)
+ identification = InterfaceTurbulent(main, objects, mess, out_identification, param_visu)
+
+ calc_spec= InterfaceCalcSpec(main,objects,mess,param_visu)
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+## fludelamonomod = InterfaceFludela(main, objects,
+## get_fimen_files(UNITE_FIMEN), mess, out_fludela, param_visu)
+## turbmonomod = InterfaceTurbMonomod(main, objects,get_fimen_files(UNITE_FIMEN) ,mess, out_meideeturb, param_visu)
+
+
+ tabs.set_tab("Expansion de modeles", iface.main)
+ tabs.set_tab("Modification structurale", imodifstruct.main)
+ tabs.set_tab("Identification de chargement", identification)
+ tabs.set_tab("Traitement du signal", calc_spec)
+ tabs.set_tab("Parametres de visualisation", param_visu)
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+## tabs.set_tab("MEIDEE mono-modal fludela", fludelamonomod )
+## tabs.set_tab("MEIDEE mono-modal turbulent", turbmonomod )
+
+
+ tabs.set_current_tab("Expansion de modeles")
+
+ tk.protocol("WM_DELETE_WINDOW", FermetureCallback(tk, identification).apply)
+
+ try:
+ tk.mainloop()
+ except :
+ print "MEIDEE : *ERREUR*"
+
+
--- /dev/null
+#@ MODIF calc_europlexus_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 ASSIRE A.ASSIRE
+
+#-----------------------------------------------------------------------
+#----------------------------- Importation des modules ----------------
+#-----------------------------------------------------------------------
+
+# unite associe au fichier ou le pos-traitement CASTE2000 est fait en commandes epx
+# unite_cast2000 = 0 # il ne fait pas le pos-traitement
+# __temp
+unite_cast2000 = 95
+
+debug = False
+dryrun = False
+
+import types,string
+import os
+import numpy
+import math
+import copy
+
+# Protection pour Eficas
+try:
+ import aster
+ from Accas import _F
+ from Utilitai.partition import MAIL_PY
+ from Utilitai.Utmess import UTMESS
+except:
+ pass
+
+#----------------------------- Precision -------------------------------
+tst = 1.0E-10
+
+#-----------------------------------------------------------------------
+#----------------------------- Fonctions de calcul vectoriel -----------
+#-----------------------------------------------------------------------
+
+def norme(u) :
+ return numpy.sqrt(numpy.dot(u,u))
+
+def vecteurs_egaux(v1,v2):
+ diff = v1-v2
+ #print 'v1',v1
+ #print 'v2',v2
+ for v in diff:
+ if abs(v) > tst : return False
+ return True
+
+#-----------------------------------------------------------------------
+#----------------------------- Operateur de la Macro-commande ----------
+#-----------------------------------------------------------------------
+
+
+def calc_europlexus_ops(self,MODELE,CARA_ELEM,CHAM_MATER,EXCIT,FONC_PARASOL=None,
+ DIME=None,OBSERVATION=None,ARCHIVAGE=None,COURBE=None,
+ CALCUL=None,DOMAINES=None,INTERFACES=None,INFO=1,**args):
+
+# import aster
+# from Accas import _F
+
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ 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
+
+ global _F,INFO_EXEC_ASTER,DETRUIRE,IMPR_RESU,DEFI_FICHIER,LIRE_RESU,CREA_MAILLAGE
+ global DEFI_GROUP,LIRE_MAILLAGE,CREA_TABLE,IMPR_TABLE,AFFE_MODELE,EXEC_LOGICIEL
+ global LIRE_CHAMP,CREA_CHAMP,CREA_RESU,FORMULE
+
+ INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+ IMPR_RESU = self.get_cmd('IMPR_RESU')
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
+ LIRE_RESU = self.get_cmd('LIRE_RESU')
+ CREA_MAILLAGE = self.get_cmd('CREA_MAILLAGE')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+ LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ IMPR_TABLE = self.get_cmd('IMPR_TABLE')
+ AFFE_MODELE = self.get_cmd('AFFE_MODELE')
+ EXEC_LOGICIEL = self.get_cmd('EXEC_LOGICIEL')
+ LIRE_CHAMP = self.get_cmd('LIRE_CHAMP')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ CREA_RESU = self.get_cmd('CREA_RESU')
+ FORMULE = self.get_cmd('FORMULE')
+
+ # Pour la gestion des Exceptions
+ prev_onFatalError = aster.onFatalError()
+ aster.onFatalError('EXCEPTION')
+
+
+ # Pour masquer certaines alarmes
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ MasquerAlarme('MED_1')
+ MasquerAlarme('MED_54')
+
+ # Ligne de commande d'Europlexus
+ if args.has_key('LOGICIEL'): EXEC = args['LOGICIEL']
+ else: EXEC = '/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'
+ if debug: print 'args_keys : %s'%args.keys()
+ if args.has_key('PAS_NBRE_COURBE') :
+ if debug: print 'PAS NBRE COURBE = ok (%s)'%args['PAS_NBRE_COURBE']
+ else :
+ if debug: print 'PAS NBRE COURBE = nook'
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # classs Europlexus permettant de faire le chainage avec le Code_Aster
+ EPX = EUROPLEXUS(MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,
+# AA ECRITURE,CALCUL,REPE='REPE_OUT',EXEC=EXEC)
+ OBSERVATION,ARCHIVAGE,COURBE,CALCUL,DOMAINES,INTERFACES,
+ REPE='REPE_OUT',EXEC=EXEC, INFO=INFO, args=args)
+
+ # Eriture du fichier de commande Europlexus
+ EPX.ecrire_fichier()
+
+ # Si dryrun alors on ne lance pas le calcul Europlexus
+ if dryrun: return ier
+
+ # Lancement du calcul Europlexus
+ EPX.lancer_calcul()
+
+ # Recuperer le resulat Europlexus a l'aide d'un concept aster de type evol_noli
+ fichier_med = 'auto'
+ fichier_pun = 'auto'
+# if debug :
+# fichier_med='fort.81'
+# fichier_pun ='fort.85'
+
+ self.DeclareOut('resu',self.sd) # Le concept sortant (de type evol_noli) est nomme 'resu'
+ global resu # pour que le nom du concept prenne celui defini par l'utilisateur
+ EPX.get_resu(fichier_med=fichier_med)
+
+ #Recuperer les concepts table
+ if COURBE is not None:
+ global table
+ # icourbe = 0
+ # for fonc in COURBE['TABLE'] :
+ # icourbe += 1
+ self.DeclareOut('table',args['TABLE_COURBE'])
+ EPX.get_table()
+ # EPX.get_table(icourbe=icourbe,fichier=fichier_pun)
+
+
+ # Pour la gestion des Exceptions
+ aster.onFatalError(prev_onFatalError)
+
+ # Pour la gestion des alarmes
+ RetablirAlarme('MED_1')
+ RetablirAlarme('MED_54')
+
+ return ier
+
+#-----------------------------------------------------------------------
+#----------------------------- class EUROPLEXUS ------------------------
+#-----------------------------------------------------------------------
+
+class EUROPLEXUS:
+# AA def __init__(self,MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,ECRITURE,CALCUL,REPE,EXEC,**args):
+ def __init__(self,MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,OBSERVATION,ARCHIVAGE,COURBE,CALCUL,DOMAINES,INTERFACES,REPE,EXEC,INFO,args):
+
+ if debug: print 'args_key %s'%args.keys()
+ # Mettre toutes les entrees en attributs
+ self.DIME = DIME
+ self.MODELE = MODELE
+ self.CARA_ELEM = CARA_ELEM
+ self.CHAM_MATER = CHAM_MATER
+ self.FONC_PARASOL = FONC_PARASOL
+ self.EXCIT = EXCIT
+# self.ECRITURE = ECRITURE
+ self.OBSERVATION = OBSERVATION
+ self.ARCHIVAGE = ARCHIVAGE
+ self.COURBE = COURBE
+ self.CALCUL = CALCUL
+ self.DOMAINES = DOMAINES
+ self.INTERFACES = INTERFACES
+ self.INFO = INFO
+
+ # Repertoire de calcul Europlexus
+ self.REPE = REPE
+ # Commande d'execution de Europlexus
+ self.EXEC = EXEC
+
+ if args.has_key('UNITE_COURBE'): self.UNITE_COURBE = args['UNITE_COURBE']
+ else: self.UNITE_COURBE = None
+
+ if args.has_key('PAS_INST_COURBE'): self.PAS_INST_COURBE = args['PAS_INST_COURBE']
+ else: self.PAS_INST_COURBE = None
+
+ if args.has_key('PAS_NBRE_COURBE'): self.PAS_NBRE_COURBE = args['PAS_NBRE_COURBE']
+ else: self.PAS_NBRE_COURBE = None
+
+ if args.has_key('TABLE_COURBE'): self.TABLE_COURBE = args['TABLE_COURBE']
+ else: self.TABLE_COURBE = None
+ # Dictionnaire contenant le texte associé au fichier de commande Europlexus
+ self.epx = {}
+
+ if debug: print 'pas nbre courbe = %s'%self.PAS_NBRE_COURBE
+
+ # Concept pour un nouveau maillage si on utilise RIGI_PARASOL ou
+ # si on regroupe separement les mailles tria3 et quad4
+ self.NEW_MA = None
+
+ # Nom des fichiers de Europlexus (commande et sorties)
+ self.nom_fichiers = {'COMMANDE' : 'commandes.epx',
+ 'MAILLAGE' : 'maillage_epx',
+ 'ALIT' : 'champ.alit',
+ 'MED' : 'champ.e2m',
+ 'PUN' : 'courbes.pun',
+ }
+
+ # Chemin du repertoire courant ou le calcul Aster est lance
+ self.pwd = os.getcwd() + os.sep
+
+
+
+#-----------------------------------------------------------------------
+ def get_unite_libre(self,):
+
+ _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
+ unite=_UL['UNITE_LIBRE',1]
+ DETRUIRE(CONCEPT=(_F(NOM=_UL),), INFO=1)
+ return(unite)
+
+
+#-----------------------------------------------------------------------
+ def reupere_structure(self,concept,mot_cle=None):
+
+ try : structure = concept.etape.valeur
+ except : UTMESS('F','PLEXUS_1')
+
+ if mot_cle :
+ if structure.has_key(mot_cle) : return structure[mot_cle]
+ else : return None
+ return structure
+#-----------------------------------------------------------------------
+ def get_motcle(self,fact,mot_cle,code_mess='F'):
+ try :
+ out = fact[mot_cle]
+ except :
+ out = None
+ if not out is None : return out
+ if not code_mess is None and code_mess: UTMESS(code_mess,'PLEXUS_2',valk=mot_cle)
+ return None
+
+#-----------------------------------------------------------------------
+ def get_group_ma(self,fact):
+ group_ma = self.get_motcle(fact,'GROUP_MA',code_mess='F')
+ if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,)
+ # elif types.TypeType(group_ma) == types.ListType : group_ma = tupel(group_ma)
+ return group_ma
+
+#-----------------------------------------------------------------------
+ def get_group_ma_f(self,fact):
+ group_ma = self.get_motcle(fact,'GROUP_MA',None)
+ if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,)
+ # elif types.TypeType(group_ma) == types.ListType : group_ma = tupel(group_ma)
+ if not group_ma : group_ma=[]
+ return group_ma
+
+#-----------------------------------------------------------------------
+ def setlist(self,fact):
+ #print 'types.TypeType(fact)',types.TypeType(fact)
+ if fact is None : return fact
+ #if not types.TypeType(fact) in [types.ListType,types.TupleType] : fact= [fact]
+ if not (isinstance(fact,types.ListType) or isinstance(fact,types.TupleType)) : fact= [fact]
+ return fact
+
+#-----------------------------------------------------------------------
+ def lire_fichier(self,fichier,):
+ fd = open(fichier,'r')
+ lignes = fd.readlines()
+ fd.close()
+ valeurs = []
+ commentaires = ['#','%','$','*']
+ for ll in lignes:
+ add = 1
+ for comment in commentaires :
+ if string.find(ll,comment) != -1 : add = 0;break
+ if add :
+ data = [val for val in ll.split(None)]
+ valeurs.append(data)
+ return valeurs
+
+#-----------------------------------------------------------------------
+ def fichier2dic(self,fichier):
+ valeurs = self.lire_fichier(fichier)
+ dic = {}
+ mot_cle = None
+ for ll in valeurs:
+ if len(ll) > 1 :
+ for mot in ll :
+ try :
+ val = float(mot)
+ if not mot_cle is None : dic[mot_cle].append(val)
+ except :
+ mot_cle = mot
+ dic[mot_cle] = []
+
+ return dic
+
+#-----------------------------------------------------------------------
+ def lire_pun(self,fichier):
+ if debug: print 'lire_pun : fichier = %s'%fichier
+ data = self.lire_fichier(fichier)
+ icourbe = 0
+ courbes = {}
+ for ligne in data:
+ if debug: print 'lire_pun : %s'%ligne
+ if ligne[0] in ('VALEURS','VALUES'):
+ icourbe += 1;
+ nb = int(ligne[1])
+ courbes[icourbe] = []
+ else:
+ ligne_vale = [float(val) for val in ligne]
+ courbes[icourbe].append(ligne_vale)
+ for courbe in courbes :
+ courbes[courbe]=numpy.transpose(numpy.array(courbes[courbe]))
+ return courbes
+
+#-----------------------------------------------------------------------
+ def export_DEBUT(self):
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'DEBUT'
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE] = ['*--FICHIER CREE PAR CALC_EUROPLEXUS/Code_Aster']
+
+ # Texte declarant le debut
+ epx[MODULE].append('TITRE')
+ epx[MODULE].append('ECHO')
+ options = 'TRID NONL'
+# AA champ_fact = self.ECRITURE['CHAMP']
+ champ_fact = self.ARCHIVAGE
+ if champ_fact is not None : options += ' MEDE'
+ epx[MODULE].append(options)
+ epx[MODULE].append('\n')
+
+ # __temp
+ fichier_cast2000 = 'fort.%i' %unite_cast2000
+ if unite_cast2000 and os.path.isfile(fichier_cast2000) :
+ sorite_cast2000 = self.pwd + 'REPE_OUT/post.k2000'
+ epx[MODULE].append('OPNF 12')
+ epx[MODULE].append(2*' ' + "'%s'" %sorite_cast2000)
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def export_MAILLAGE(self,format='CASTEM'):
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'MAILLAGE'
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE] = ['*--LECTURE MAILLAGE']
+
+ # Recuperer la concept maillage modifie ou initial
+ if self.NEW_MA is None :
+ concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ else :
+ concept_maillage = copy.copy(self.NEW_MA)
+
+ # Ecrire le maillage, qui peut etre a ete enrichi avec des commandes Aster, sous le format souhaite (MED ou CASTEM)
+ unite = self.get_unite_libre()
+
+ # Extensions des formats de maillage
+ extension = {'CASTEM' : '.mgib', 'MED':'.med'}
+
+ # donner un nom au fichier de maillage parce que le fort.unite peut etre ecrase par d'autre operation d'ecriture
+ nom_fichier = self.REPE + os.sep + self.nom_fichiers['MAILLAGE'] + extension[format]
+ DEFI_FICHIER(UNITE=unite,FICHIER=nom_fichier,ACTION='ASSOCIER')
+ IMPR_RESU(UNITE=unite,
+ FORMAT=format,
+ RESU = _F(MAILLAGE=concept_maillage)
+ )
+ DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');
+
+ # Ecriture de la commande Europlexus associee
+ fichier_maillage = self.pwd + nom_fichier
+
+ #epx[MODULE].append('OPNF FORMAT 9')
+ epx[MODULE].append('%s '%format)
+ epx[MODULE].append("'%s' TOUT" %fichier_maillage)
+ #epx[MODULE].append('CASTEM 9 TOUT')
+
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def export_DIME(self,):
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'DIME'
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE] = ['*--DIMENSIONNEMENT']
+ epx[MODULE].append('\n')
+
+ # Test si des parametres de dime seront introuduites à l'aide d'un fichier externe
+ try : unite_dime = self.DIME['UNITE_DIME']
+ except : unite_dime = None
+
+ # Recuperer le dictionnaire issu du fichier associe à UNITE_DIME (s'il existe)
+ if unite_dime is not None :
+ fort = 'fort.%i' %unite_dime
+ dic_fichier = self.fichier2dic(fort)
+ else:
+ dic_fichier = {}
+
+ # mettre a jour les cles definis dans le fichier par celles qui sont
+ # definies directement sous le mot-cle facteur DIME
+ cles = ['Q4GS', 'FORCE', 'PT6L', 'ZONE', 'POUT',
+ 'ECRO', 'APPU', 'BLOQ', 'PRESS', 'PMAT',
+ 'FTAB', 'DKT3', 'DEPL', 'FNOM', 'TABLE',
+ 'LIAI', 'MTTI', 'PT1L','NEPE']
+
+ for cle in cles:
+ try:
+ if self.DIME[cle] is not None :
+ dic_fichier[cle] = self.DIME[cle]
+ except : pass
+
+ # Imprimer les mot-cles et leurs dans epx
+ epx[MODULE].append('DIME')
+ for cle in dic_fichier:
+ vale = dic_fichier[cle]
+ st = 5*' ' + cle
+ for v in vale:
+ st += ' %i' %v
+ epx[MODULE].append(st)
+ epx[MODULE].append('TERM')
+
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def export_MODELE(self):
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'MODELE'
+
+ epx[MODULE] = ['*--DEFINITION DE LA GEOMETRIE']
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE].append('GEOMETRIE')
+
+ # Recuperer la structure sous le mot_cle facteur AFFE de AFFE_MODELE
+ affe_modele = self.reupere_structure(self.MODELE,'AFFE')
+ affe_modele = self.setlist(affe_modele)
+
+
+ # Correspondance de modelisation aster/europlexus
+ dic_modele = {'DKT':'DKT3','DKTG':'Q4GS','POU_D_E':'POUT'}
+
+ # Correspondance de modelisation europlexus/aster
+ dic_modele_epx = {}
+ for cle in dic_modele.keys():
+ dic_modele_epx[dic_modele[cle]] = cle
+
+ # initialisation du dictioannaire qui contient les group_ma en fonction de la modelisation
+ dic_gma = {}
+ for cle in dic_modele.values():
+ dic_gma[cle] = []
+
+ for affe in affe_modele:
+ modelisation = affe['MODELISATION']
+ phenomene = affe['PHENOMENE']
+ if phenomene == 'MECANIQUE' and modelisation in dic_modele.keys():
+ if affe.has_key('GROUP_MA') :
+ group_ma = self.get_group_ma(affe)
+ dic_gma[dic_modele[modelisation]].extend(group_ma)
+ else :
+ UTMESS('F','PLEXUS_3')
+
+ # Regrouper separement les mailles tria3 et quad4 de la modilisation DKT (s'il y a lieu)
+ # parce que leurs modilisations dans europlexus sont differentes:
+ # tria3 : DKT3
+ # quad4 : Q4GS
+
+ # Initialisation du dictionnaire contenant les elements du modele de type TRIA3 et QUAD4
+ nom_groups= {'TRIA3':[],'QUAD4':[]}
+
+ if len(dic_gma['DKT3']) > 0:
+ concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ class_dkt = DKT(MAILLAGE=concept_maillage,)
+ nom_groups = class_dkt.aster2epx(groups=dic_gma['DKT3'])
+ if debug: print 'nom_groups = %s'%nom_groups
+ # mettre a jour les groups de chaque modelisation
+ dic_gma['DKT3'] = nom_groups['TRIA3']
+ dic_gma['Q4GS'].extend(nom_groups['QUAD4'])
+
+
+ # liste comportant les modelisations definis dans le module GEOMETRIE
+ # cette liste va servir à determiner les indices des champs stockes dans le fichier med (get_resu)
+ self.modelisations = []
+ # Ecriture sous format europlexus
+ for modelisation in dic_gma.keys() :
+ len_groups = len(dic_gma[modelisation])
+ if len_groups > 0 :
+ self.modelisations.append(modelisation)
+ epx[MODULE].append(5*' ' + modelisation + 2*' ' + dic_gma[modelisation][0])
+ if len_groups > 1 :
+ for ig in range(1,len_groups) :
+ group_ma = dic_gma[modelisation][ig]
+ epx[MODULE].append((len(modelisation)+5+2)*' ' + group_ma)
+
+
+
+ # Mettre a jour le modele dans le cas ou le maillage a ete modifie pour la seperation de TRIA3 et QUAD4
+ # ce modele va etre utilise dans la lecture du fichier med (get_resu)
+ if len(nom_groups['QUAD4']) == 0 :
+ self.NEW_MODELE = copy.copy(self.MODELE)
+ else :
+ affe_model = []
+ for modelisation in self.modelisations :
+ affe_model.append({'GROUP_MA':dic_gma[modelisation],
+ 'MODELISATION': dic_modele_epx[modelisation],
+ 'PHENOMENE':'MECANIQUE' })
+
+ __MO = AFFE_MODELE(MAILLAGE = concept_maillage,
+ AFFE = affe_model,
+ );
+
+ self.NEW_MODELE = copy.copy(__MO);
+
+ # Utiliser dans Ecriture des elements et points du fichier med
+ self.dic_gma = dic_gma
+ # Il y a une suite dans RIGI_PARSOL
+
+ #epx[MODULE].append('TERM')
+ #epx[MODULE].append('\n')
+
+
+ #-----------------------------------------------------------------------
+ def export_CARA_ELEM(self):
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'CARA_ELEM'
+
+ # Recuperer la structure du concept sorti de AFFE_CARA_ELEM
+ cara_elem_struc = self.reupere_structure(self.CARA_ELEM)
+
+ epx[MODULE] = ['*--CARACTERISTIQUES DES ELEMENTS DE STRUCTURE']
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE].append('COMPLEMENT')
+
+ # Dictionnaire conteant les donnees associees aux differents elements de structure
+ dic_elem = {}
+ for cle in ['DISCRET','COQUE','POUTRE','RIGI_PARASOL']:
+ if cara_elem_struc.has_key(cle):
+ fact = cara_elem_struc[cle]
+ if fact :
+ dic_elem[cle] = self.setlist(fact)
+
+ # traduire les masses concentrees si elles existent
+ cle = 'DISCRET'
+ self.discretParasol = {}
+ if dic_elem.has_key(cle):
+ epx[MODULE].append('\n')
+ epx[MODULE].append('*--MASSES AJOUTEES')
+ for elem in dic_elem[cle]:
+ if elem['CARA'] == 'M_T_D_N' :
+ group_ma = self.get_group_ma(elem)
+ vale = elem['VALE']
+ epx[MODULE].append('MASSE 123456 %s' %vale)
+ epx[MODULE].append(7*' ' + 'LECT')
+ for group in group_ma:
+ epx[MODULE].append(11*' '+group)
+ epx[MODULE].append(7*' ' + 'TERM')
+ if elem['CARA'] == 'K_TR_D_N' :
+ group_ma = self.get_group_ma(elem)
+ vale = elem['VALE']
+ for gma in group_ma :
+ self.discretParasol[gma] = vale
+
+ # traduire les elements coques s'ils existent
+ cle = 'COQUE'
+ self.dicOrthotropie={}
+ self.listEpais=[]
+ self.listEpais2=[]
+ if dic_elem.has_key(cle):
+ epx[MODULE].append('\n')
+ epx[MODULE].append('*--ELEMENTS COQUES')
+ for elem in dic_elem[cle]:
+# print elem
+ group_ma = self.get_group_ma(elem)
+ epais = elem['EPAIS']
+ if self.ARCHIVAGE['CONT_GENER'] == 'OUI' :
+ self.listEpais.append({'VALE' : epais, 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X21'})
+ self.listEpais2.append({'VALE' : epais**2/6., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X22'})
+ else :
+ self.listEpais.append({'VALE' : 1., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X21'})
+ self.listEpais2.append({'VALE' : 1., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X22'})
+ st = 'EPAIS %s ' %epais
+ #ajouter les group_ma qui ont ete affecte par ces caracteristiques
+ epx[MODULE].append(st+'LECT')
+ for group in group_ma:
+ epx[MODULE].append((len(st)+4)*' '+group)
+ epx[MODULE].append((len(st))*' '+'TERM')
+ if elem.has_key('VECTEUR'):
+# AA if elem['VECTEUR'] :
+ for group in group_ma :
+ self.dicOrthotropie[group] = elem['VECTEUR']
+
+ # traduire les elements poutres s'ils existent
+ cle = 'POUTRE'
+ if dic_elem.has_key(cle):
+ concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ #class permettant de calculer et verifier les vecteurs de poutre dans Europlexus
+ class_poutre = POUTRE(MAILLAGE=concept_maillage,CARA_ELEM=self.CARA_ELEM)
+ epx[MODULE].append('\n')
+ epx[MODULE].append('*--ELEMENTS POUTRES')
+ for elem in dic_elem[cle]:
+ group_ma = self.get_group_ma(elem)
+ vecteurs = class_poutre.getvecteurs(group_ma,verif='non')
+ vect_y = vecteurs[group_ma[0]]
+ type_section = elem['SECTION']
+ st = 'GEOP %s ' %type_section
+ if type_section == 'RECTANGLE' :
+ # Correspondance de caracteristique de poutre aster/europlexus
+ dic_corresp = {'HY':'AY','HZ':'AZ'}
+ epx[MODULE].append(st)
+ # ajouter le vecteur definisant l'orientation de la section
+ epx[MODULE].append(len(st)*' ' + 'VX %s' %vect_y[0])
+ epx[MODULE].append(len(st)*' ' + 'VY %s' %vect_y[1])
+ epx[MODULE].append(len(st)*' ' + 'VZ %s' %vect_y[2])
+ # ajouter les caracteristiques de la poutre
+ cara = elem['CARA']
+ vale = elem['VALE']
+ for icar in range(len(cara)):
+ car = cara[icar]
+ val = vale[icar]
+ car_epx = dic_corresp[car]
+ epx[MODULE].append(len(st)*' ' + '%s %s' %(car_epx,val))
+ # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+ epx[MODULE].append(5*' '+'LECT')
+ for group in group_ma:
+ epx[MODULE].append(len(st)*' '+group)
+ epx[MODULE].append(5*' '+'TERM')
+ else :
+ UTMESS('A','PLEXUS_4',valk=type_section)
+
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def export_RIGI_PARASOL(self):
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'RIGI_PARASOL'
+ concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ self.MApyt = MAIL_PY()
+ self.MApyt.FromAster(concept_maillage)
+
+ # Recuperer la structure du concept sorti de AFFE_CARA_ELEM
+ cara_elem_struc = self.reupere_structure(self.CARA_ELEM)
+
+ # Recuperer la structure RIGI_PARASOL si elles existe
+ list_rigi_parasol = None
+ if cara_elem_struc.has_key('RIGI_PARASOL'):
+ fact = cara_elem_struc['RIGI_PARASOL']
+ if fact :list_rigi_parasol = self.setlist(fact)
+
+ # Traduction des fonctions definies dans FONC_PARASOL
+ #dic_fonc_parasol = self.get_FONC_PARASOL(list_rigi_parasol)
+ dic_fonc_parasol = self.get_FONC_PARASOL()
+# if not dic_fonc_parasol: return
+
+ epx[MODULE] = ['*--SUPPORT ELASTIQUE']
+
+ # si l'utilisateur a lui meme fourni des GROUP_MA de discrets : on commence par la
+ gmaParasol=self.get_group_ma_f(self.FONC_PARASOL)
+ group_union = ''
+ for gma in gmaParasol :
+ if gma not in self.discretParasol :
+ if debug: print gma
+ if debug: print self.discretParasol.keys()
+ raise 'Discret non defini'
+ vale = self.discretParasol[gma]
+ epx[MODULE].append('SUPPORT')
+ epx[MODULE].append(6*' '+'KX %s KY %s KZ %s'%(vale[0],vale[1],vale[2]))
+ epx[MODULE].append(6*' '+'KRX %s KRY %s KRZ %s'%(vale[3],vale[4],vale[5]))
+ for cle_fonc_parasol in dic_fonc_parasol.keys() :
+ epx[MODULE].append(6*' ' + '%s %i' %(cle_fonc_parasol,dic_fonc_parasol[cle_fonc_parasol]) )
+ epx[MODULE].append(6*' '+'LECT %s TERM'% gma)
+ group_union += '%s '% gma
+ if len(gmaParasol) > 0 :
+ epx['MODELE'].append(5*' ' + 'APPU ' + group_union)
+
+ # concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ # DEFI_GROUP(reuse = concept_maillage,
+ # MAILLAGE = concept_maillage,
+ # CREA_GROUP_NO = _F(GROUP_MA = gmaParasol),
+ # );
+
+
+
+ # traduire les rigi_parasol
+# AA if list_rigi_parasol :
+ if list_rigi_parasol and dic_fonc_parasol:
+ # changement de module parce que les supports issus de RIGI_PARASOL doivent etre imprimes apres les materiaux
+ # fichiers_parasol = []
+ # cles_oblig = ['UNITE_EUROPLEXUS','GROUP_MA_POI1']
+ # for elem in list_rigi_parasol:
+ # elem_cara = elem['CARA']
+ # if elem_cara == 'K_TR_D_N':
+ # for cle_test in cles_oblig:
+ # if not elem.has_key(cle_test):
+ # pass
+ # unite = elem['UNITE_EUROPLEXUS']
+ # fichier = 'fort.%i' %unite
+ # if fichier not in fichiers_parasol : fichiers_parasol.append(fichier)
+ # else :
+ # pass
+ # Lecture des valeurs de rigidites generees par aster a partir des rigidites globales definis dans PARA_RIGISOL
+ # ressorts = []
+ # for fichier in fichiers_parasol :
+ # ressorts.extend(self.lire_fichier(fichier))
+ ressorts = self.CARA_ELEM.toEPX()
+ # Creer un maillage qui, pour chaque noeud de l'interface utilisee dans rigi_parsol, asscocie un group_ma asscie
+ # parce que on n'a pas les memes numeros des noeuds dans Europlexus
+ crea_poi1 = []
+ dic_gma = {}
+ igr = -1
+ # Liste des group_ma associes au noeuds ou le RIGI_PARSOL a ete applique
+ groups_parasol = []
+
+ for noeud in ressorts.keys() :
+ # noeud = ressor[0]
+ if not dic_gma.has_key(noeud):
+ igr += 1
+ group_ma = 'SUP%i' %igr
+ dic_gma[noeud] = group_ma
+ groups_parasol.append(group_ma)
+ crea_poi1.append(_F(NOEUD=noeud,NOM_GROUP_MA=group_ma))
+
+ # ATTENTION : a deplacer
+ # crea_maillage a faire de facon centraliser pour RIGI_PARASOL et le POST-TRAITEMENT ailleurs
+ courbe_fact = self.COURBE
+ if courbe_fact is None: courbe_fact = []
+ lnoeuds=set()
+ lmailles=set()
+ dicma=[]
+ for courbe in courbe_fact :
+ if courbe['GROUP_NO'] != None :
+ noeuds = courbe['GROUP_NO']
+ if type(noeuds) == tuple :
+ for el in noeuds :
+ lnoeuds.add(el)
+ else :
+ lnoeuds.add(noeuds)
+ if courbe['GROUP_MA'] != None :
+ mailles = courbe['GROUP_MA']
+ if type(mailles) == tuple :
+ for el in mailles :
+ lmailles.add(el)
+ else :
+ lmailles.add(mailles)
+ for maille in lmailles :
+ dicma.append({'NOM' : maille, 'MAILLE' : maille})
+
+ for no in lnoeuds :
+ if not self.MApyt.gno.has_key(no) :
+ crea_poi1.append(_F(NOEUD=no,NOM_GROUP_MA=no))
+
+ __NEW = CREA_MAILLAGE(MAILLAGE=concept_maillage,
+ CREA_POI1 = crea_poi1,
+ );
+ self.NEW_MA = copy.copy(__NEW)
+
+ # Ecriture sous format europlexus
+ # Indices des composantes
+ indices_comps = {'KX':1,'KY':2,'KZ':3,'KRX':4,'KRY':5,'KRZ':6}
+ for noeud in ressorts :
+ valeurs = ressorts[noeud]
+ epx[MODULE].append('SUPPORT')
+ # ecriture des composantes et de leurs valeurs associees
+ for comp in indices_comps.keys():
+ if debug: print len(valeurs),indices_comps[comp]-1
+ vale = valeurs[indices_comps[comp]-1]
+ epx[MODULE].append(3*' ' + '%s %s' %(comp,vale))
+ # caracteristiques des translations et des rotations
+ for cle_fonc_parasol in dic_fonc_parasol.keys() :
+ epx[MODULE].append(3*' ' + '%s %i' %(cle_fonc_parasol,dic_fonc_parasol[cle_fonc_parasol]) )
+
+ # ecriture du group_ma associe
+ # noeud = ressor[0]
+ group_ma = dic_gma[noeud]
+ epx[MODULE].append(3*' ' + 'LECT %s TERM' % group_ma)
+
+ epx[MODULE].append('\n')
+
+ group_union = 'PARASOL'
+ dicma.append({'NOM' : group_union, 'UNION' : groups_parasol})
+ __NEW = DEFI_GROUP(reuse = __NEW,
+ MAILLAGE = __NEW,
+ CREA_GROUP_MA = dicma
+ )
+
+ # Mettre a jour le module modele qd les ressorts existent
+ epx['MODELE'].append(5*' ' + 'APPU ' + group_union)
+
+ # Fermer le module modele dans tous les cas
+ self.multidomaine = 0
+ listInterfaces = self.INTERFACES
+ self.gmaInterfaces=[]
+ if listInterfaces :
+ i=0
+ self.multidomaine = 1
+ for interface in listInterfaces :
+ Lgma1 = self.setlist(interface['GROUP_MA_1'])
+ Lgma2 = self.setlist(interface['GROUP_MA_2'])
+ self.gmaInterfaces.extend(Lgma1)
+ self.gmaInterfaces.extend(Lgma2)
+ for gma in Lgma1 :
+ if i==0 :
+ epx['MODELE'].append(5*' ' + 'CL3L' + 2*' ' + gma)
+ else :
+ epx['MODELE'].append(11*' ' + gma)
+ for gma in Lgma2 :
+ epx['MODELE'].append(11*' ' + gma)
+ i+=1
+ epx['MODELE'].append('TERM')
+ epx['MODELE'].append('\n')
+
+ if self.gmaInterfaces :
+ epx['CHAM_MATER'].append('FANTOME 0. LECT')
+ for gma in self.gmaInterfaces :
+ epx['CHAM_MATER'].append(15*' '+'%s'% gma)
+ epx['CHAM_MATER'].append(' TERM')
+ epx['CHAM_MATER'].append('\n')
+
+
+ # DEFINITION REPERES ORTHOTROPIE QUI DOIT ETRE APRES LES SUPPORTS
+ for gma in self.gmaGLRC :
+ if gma not in self.dicOrthotropie :
+ raise "Erreur : %s non affecte par un repere d'orthotropie : ajouter le mot-cle 'VECTEUR' dans AFFE_CARA_ELEM"% gma
+ vale = self.dicOrthotropie[gma]
+ epx[MODULE].append('COMP ORTS %s %s %s'%(vale[0],vale[1],vale[2]))
+ epx[MODULE].append(3*' '+'LECT')
+ epx[MODULE].append(7*' '+'%s'% gma)
+ epx[MODULE].append(3*' '+'TERM')
+
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def get_FONC_PARASOL(self,list_rigi_parasol=None) :
+
+ epx = self.epx
+
+ MODULE = 'FONC_PARASOL'
+ if list_rigi_parasol is not None :
+ if self.FONC_PARASOL is None : UTMESS('F','PLEXUS_12')
+ # else : return None
+
+ epx[MODULE] = ['*--DEFINITIONS DES FONCTIONS']
+
+ # Entete de la commande europlexus
+ epx[MODULE].append('FONC')
+
+ # Cles de FONC_PARASOL dans l'ordre
+ cles = ['NFKT','NFKR']
+ # Dictionnaire faisant la correspondance entre la fonction et son numero europlexus
+ dic_fonc = {}
+ try :
+ ifonc = self.ifonc
+ if debug: print 'self.ifonc = %s'%ifonc
+ except :
+ self.ifonc=0
+ ifonc = self.ifonc
+ if debug: print 'ifonc = %s'%ifonc
+ if epx.has_key('FONC_MATER') :
+ epx[MODULE].extend(epx['FONC_MATER'])
+ for cle in cles:
+ ifonc += 1
+ dic_fonc[cle] = ifonc
+ fonction = self.get_motcle(self.FONC_PARASOL,cle,code_mess=None)
+ if not fonction: return {} # Si les mots-cles sont manquants on passe
+ (temps,valeurs) = fonction.Valeurs()
+ # imprimer les valeurs de la table
+ epx[MODULE].append(5*' ' +'NOPA %i TABLE %i' %(ifonc,len(temps)) )
+ for ival in range(len(temps)):
+# epx[MODULE].append(17*' ' +'%s %s' %(temps[ival],valeurs[ival]))
+ epx[MODULE].append(17*' ' +'%s %s' %(temps[ival],valeurs[ival]))
+ self.ifonc = ifonc
+ self.dic_fonc = dic_fonc
+ epx[MODULE].append('\n')
+ return dic_fonc
+
+#-----------------------------------------------------------------------
+ def export_CHAM_MATER(self):
+
+ epx = self.epx
+
+ # CLe identifiant
+ MODULE = 'CHAM_MATER'
+
+ epx[MODULE] = ['*--DEFINITION DES MATERIAUX']
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE].append('MATERIAUX')
+
+ # Recuperer la structure sous le mot_cle facteur AFFE de AFFE_MATER
+ affe_mater = self.reupere_structure(self.CHAM_MATER,'AFFE')
+ affe_mater = self.setlist(affe_mater)
+
+ # Dictionnaire stoquant les caracteristiques mecaniques et les group_ma associe a chaque materiau
+ dic_mater = {}
+ typMat = {}
+ # GLRC impose de définir l'orientation : on stocke dans gmaGLRC les GMA dont il faudra retrouver l'orientation dans MODI_MAILLAGE/ORIE_NORM_COQUE
+ self.gmaGLRC = []
+ epx['FONC_MATER'] = []
+ ref_fonc=[]
+ for affe in affe_mater :
+ # Recuperer le concept du materiau defini par DEFI_MATERIAU
+ concept_mater = affe['MATER']
+ # Recuperer le nom du materiau
+ nom_mater = concept_mater.get_name()
+ # Recuperer le group_ma concerne
+ group_ma = self.get_group_ma(affe)
+ if debug: print 'type(group_ma) = %s'%type(group_ma)
+ if not dic_mater.has_key(nom_mater):
+ dic_mater[nom_mater] = {'GROUP_MA':[]}
+ # Recuperer les caracteristiques elastiques du materiau
+ elas = self.reupere_structure(concept_mater,'ELAS')
+ if elas :
+ typMat[nom_mater] = 'ELAS'
+ for car in ['E','RHO','NU']:
+ dic_mater[nom_mater][car] = elas[car]
+ for car in ['AMOR_ALPHA','AMOR_BETA'] :
+ if elas.has_key(car) :
+ dic_mater[nom_mater][car] = elas[car]
+ else :
+ dic_mater[nom_mater][car] = None
+ beton = self.reupere_structure(concept_mater,'BETON')
+ if beton :
+ typMat[nom_mater] = 'GLRC'
+ self.gmaGLRC.extend(group_ma)
+ dic_mater[nom_mater]['LINER']=[]
+ dic_mater[nom_mater]['NAPPE']=[]
+ materBeton = beton['MATER']
+ elasBeton = self.reupere_structure(materBeton,'ELAS')
+ dic_mater[nom_mater]['BETON']={}
+ for car in ['E','RHO','NU']:
+ dic_mater[nom_mater]['BETON'][car] = self.get_motcle(elasBeton,car)
+ for car in ['AMOR_ALPHA','AMOR_BETA']:
+ dic_mater[nom_mater]['BETON'][car] = self.get_motcle(elasBeton,car,None)
+ ecroBeton = self.reupere_structure(materBeton,'BETON_ECRO_LINE')
+ for car in ['SYT','SYC']:
+ dic_mater[nom_mater]['BETON'][car] = self.get_motcle(ecroBeton,car,None)
+ for car in ['EPAIS','GAMMA','QP1','QP2','C1N1','C1N2','C1N3','C2N1','C2N2','C2N3','C1M1','C1M2','C1M3','C2M1','C2M2','C2M3'] :
+ dic_mater[nom_mater]['BETON'][car] = self.get_motcle(beton,car)
+ for car in ['OMT','EAT','BT1','BT2'] :
+ dic_mater[nom_mater]['BETON'][car] = self.get_motcle(beton,car,None)
+ for car in ['MP1X','MP1Y','MP2X','MP2Y'] :
+ car_temp = self.get_motcle(beton,car,None)
+ if debug: print 'type(car_temp) = %s'%type(car_temp)
+ dic_mater[nom_mater]['BETON'][car] = None
+ if car_temp :
+ if isinstance(car_temp, float) :
+ dic_mater[nom_mater]['BETON'][car] = car_temp
+ else :
+ if debug: print dir(car_temp)
+ try :
+ ifonc = self.ifonc
+ except :
+ self.ifonc=0
+ ifonc = self.ifonc
+ ifonc += 1
+ val = car_temp.Valeurs()
+ x = val[:len(val):2]
+ y = val[1:len(val):2]
+ # imprimer les valeurs de la table
+ epx['FONC_MATER'].append(5*' ' +'%i LSQU 2 TABLE %i' %(ifonc,len(x)) )
+ for ival in range(len(x)):
+# epx['FONC_MATER'].append(17*' ' +'%s %s' %(x[ival],y[ival]))
+ epx['FONC_MATER'].append(17*' ' +'%s %s' %(x[ival],y[ival]))
+ dic_mater[nom_mater]['BETON'][car] = 'FONC %i'%ifonc
+ self.ifonc=ifonc
+
+
+ cable = self.reupere_structure(concept_mater,'CABLE_PREC')
+ if cable :
+ materCable = cable['MATER']
+ elasCable = self.reupere_structure(materCable,'ELAS')
+ ecroCable = self.reupere_structure(materCable,'ECRO_LINE')
+ dic_mater[nom_mater]['CABLE']={}
+ for car in ['E','NU']:
+ dic_mater[nom_mater]['CABLE'][car] = elasCable[car]
+ for car in ['SY']:
+ dic_mater[nom_mater]['CABLE'][car] = ecroCable[car]
+ for car in ['OMX','OMY','RX','RY','PREX','PREY'] :
+ dic_mater[nom_mater]['CABLE'][car] = cable[car]
+ Lnappes = self.setlist(self.reupere_structure(concept_mater,'NAPPE'))
+ if Lnappes :
+ for nappe in Lnappes :
+ dic_tmp = {}
+ materNappe = nappe['MATER']
+ elasNappe = self.reupere_structure(materNappe,'ELAS')
+ ecroNappe = self.reupere_structure(materNappe,'ECRO_LINE')
+ for car in ['E','NU']:
+ dic_tmp[car] = elasNappe[car]
+ for car in ['SY']:
+ if ecroNappe :
+ dic_tmp[car] = ecroNappe[car]
+ else :
+ dic_tmp[car] = None
+ for car in ['OMX','OMY','RX','RY'] :
+ dic_tmp[car] = nappe[car]
+ for car in ['FS',] :
+ if nappe.has_key(car) :
+ dic_tmp[car] = nappe[car]
+ else :
+ dic_tmp[car] = None
+ dic_mater[nom_mater]['NAPPE'].append(dic_tmp)
+ Lliners = self.setlist(self.reupere_structure(concept_mater,'LINER'))
+ if Lliners :
+ for liner in Lliners :
+ dic_tmp = {}
+ materLiner = liner['MATER']
+ elasLiner = self.reupere_structure(materLiner,'ELAS')
+ ecroLiner = self.reupere_structure(materLiner,'ECRO_LINE')
+ for car in ['E','NU']:
+ dic_tmp[car] = elasLiner[car]
+ for car in ['SY']:
+ dic_tmp[car] = ecroLiner[car]
+ for car in ['OML','RLR'] :
+ dic_tmp[car] = liner[car]
+ dic_mater[nom_mater]['LINER'].append(dic_tmp)
+
+
+ if debug: print 'MATER = %s \n type = %s \n dic = %s'%(nom_mater,typMat, dic_mater[nom_mater])
+ dic_mater[nom_mater]['GROUP_MA'].extend(group_ma)
+
+ # if gmaGLRC :
+ # concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+ # if debug: print 'ETAPES MAILLAGES'
+ # if debug: print dir(concept_maillage)
+ # if debug: print concept_maillage.executed
+ # if debug: print concept_maillage.etape
+ # if debug: print dir(concept_maillage.etape)
+ # if debug: print concept_maillage.etape.get_liste_etapes()
+ # if debug: print concept_maillage.etape.valeur
+
+
+ # Impression au format Europlexus
+
+ for nom_mater in dic_mater.keys():
+ epx[MODULE].append('*--MATERIAU %s' %nom_mater)
+ # mot cle indicant qu'il s'agit des caracteristiques lineaires du materiau
+ if typMat[nom_mater] == 'ELAS' :
+ dic_corresp = {'E':'YOUNG','NU':'NU','RHO':'RO'}
+ dic_corresp2 ={'AMOR_ALPHA':'KRAY','AMOR_BETA':'MRAY'}
+ epx[MODULE].append('LINE')
+ for car_aster in dic_corresp.keys():
+ vale = dic_mater[nom_mater][car_aster]
+ car_epx = dic_corresp[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ for car_aster in dic_corresp2.keys():
+ vale = dic_mater[nom_mater][car_aster]
+ car_epx = dic_corresp2[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ else : #GLRC
+ dic_corres1 = {'RHO':'RO','EPAIS':'H','E':'EB','NU':'NUB'}
+ dic_corresNapp = {'E' : 'EA','SY':'FY','OMX':'OMX','OMY':'OMY','RX':'RX','RY':'RY','FS':'FS'}
+ dic_corresPrec = {'E' : 'EA','SY':'FY','OMX':'OMX','OMY':'OMY','RX':'RX','RY':'RY'}
+ dic_corresLinr = {'E' : 'EA','SY':'FY','OML':'OMLR','NU':'NULR','RLR':'RLR'}
+ dic_corres2 = {'OMT' : 'OMT','EAT':'EAT','BT1':'BT1','BT2':'BT2','SYT' : 'FT','GAMMA':'GAMM','QP1':'QP1','QP2':'QP2','C1N1':'C1N1','C1N2':'C1N2','C1N3':'C1N3','C2N1':'C2N1','C2N2':'C2N2','C2N3':'C2N3','C1M1':'C1M1','C1M2':'C1M2','C1M3':'C1M3','C2M1':'C2M1','C2M2':'C2M2','C2M3':'C2M3','SYC':'FC'}
+ dic_corres2b = {'MP1X':'MP1X','MP2X':'MP2X','MP1Y':'MP1Y','MP2Y':'MP2Y',}
+ dic_corres3 = {'PREX' : 'PREX', 'PREY' : 'PREY'}
+ dic_corres4 = {'AMOR_ALPHA':'KRAY','AMOR_BETA':'MRAY'}
+ epx[MODULE].append('GLRC DAMA')
+ for car_aster in dic_corres1.keys():
+ vale = dic_mater[nom_mater]['BETON'][car_aster]
+ car_epx = dic_corres1[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ nlit = len(dic_mater[nom_mater]['NAPPE'])+len(dic_mater[nom_mater]['LINER'])
+ if dic_mater[nom_mater].has_key('CABLE') :
+ nlit+=1
+ if nlit :
+ epx[MODULE].append('%s %s' %('NLIT',nlit))
+ for nappe in dic_mater[nom_mater]['NAPPE'] :
+ epx[MODULE].append('NAPP')
+ for car_aster in dic_corresNapp.keys():
+ if nappe.has_key(car_aster) :
+ vale = nappe[car_aster]
+ car_epx = dic_corresNapp[car_aster]
+ if vale is not None:
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ if dic_mater[nom_mater].has_key('CABLE') :
+ epx[MODULE].append('PREC')
+ for car_aster in dic_corresPrec.keys():
+ vale = dic_mater[nom_mater]['CABLE'][car_aster]
+ car_epx = dic_corresPrec[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ for liner in dic_mater[nom_mater]['LINER'] :
+ epx[MODULE].append('LINR')
+ for car_aster in dic_corresLinr.keys():
+ vale = liner[car_aster]
+ car_epx = dic_corresLinr[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ for car_aster in dic_corres2.keys():
+ vale = dic_mater[nom_mater]['BETON'][car_aster]
+ car_epx = dic_corres2[car_aster]
+ if vale is not None :
+ if isinstance(vale, float) :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ else :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ for car_aster in dic_corres2b.keys():
+ vale = dic_mater[nom_mater]['BETON'][car_aster]
+ car_epx = dic_corres2b[car_aster]
+ if vale is not None :
+ if isinstance(vale, float) :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ else :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ if dic_mater[nom_mater].has_key('CABLE') :
+ for car_aster in dic_corres3.keys():
+ vale = dic_mater[nom_mater]['CABLE'][car_aster]
+ car_epx = dic_corres3[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+ for car_aster in dic_corres4.keys():
+ vale = dic_mater[nom_mater]['BETON'][car_aster]
+ car_epx = dic_corres4[car_aster]
+ if vale is not None :
+ epx[MODULE].append('%s %s' %(car_epx,vale))
+
+ # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+ epx[MODULE].append(3*' '+'LECT')
+ for group in dic_mater[nom_mater]['GROUP_MA']:
+ epx[MODULE].append(7*' '+group)
+ epx[MODULE].append(3*' '+'TERM')
+
+
+ return epx
+
+#-----------------------------------------------------------------------
+ def export_EXCIT(self):
+
+ epx = self.epx
+
+ # CLe identifiant
+ MODULE = 'EXCIT'
+
+ epx[MODULE] = ['*--DEFINITION DES CHARGEMENTS et DES CONDITIONS AUX LIMITES']
+
+ # Entete de la commande Europlexus courante
+ #epx[MODULE].append('CHARGEMENT')
+
+ try :
+ test = self.EXCIT[0]
+ excit_list = self.EXCIT
+ except :
+ excit_list = self.setlist(self.EXCIT)
+
+ #print '<INFO> excit_list = ',excit_list
+ #print '<INFO> type(excit_list) = ', type(excit_list)
+
+ # Traduction de ddl_impo
+ dic_ddl_impo = {'DX':1,'DY':2,'DZ':3,'DRZ':4,'DRY':5,'DRZ':6}
+
+ # Initialisation des variables decrivant le chargement et les conditions de blocage
+ CHARGEMENT = []
+ LIAISON = []
+
+ for excit in excit_list:
+ concept_charge = excit['CHARGE']
+ pres_rep_list = self.reupere_structure(concept_charge,'PRES_REP')
+ ddl_impo_list = self.reupere_structure(concept_charge,'DDL_IMPO')
+ pres_rep_list = self.setlist(pres_rep_list)
+ ddl_impo_list = self.setlist(ddl_impo_list)
+ # PRES_REP
+ if pres_rep_list :
+ if len(CHARGEMENT) == 0 :
+ CHARGEMENT = ['CHARGEMENT']
+ CHARGEMENT.append(2*' ' + '1 FACTO 2')
+ fonction = self.get_motcle(excit,'FONC_MULT',code_mess='A')
+ if fonction is None:
+ UTMESS('F','PLEXUS_7')
+ (temps,valeurs) = fonction.Valeurs()
+ for pres_rep in pres_rep_list :
+ pression = pres_rep['PRES']
+ group_ma = self.get_group_ma(pres_rep)
+ CHARGEMENT.append(6*' ' +'PRESS COQU %s' %pression)
+ # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+ CHARGEMENT.append(6*' '+'LECT')
+ for group in group_ma:
+ CHARGEMENT.append(10*' '+group)
+ CHARGEMENT.append(6*' '+'TERM')
+ # imprimer les valeurs de la table
+ CHARGEMENT.append(6*' ' +'TABLE %i' %len(temps))
+ for ival in range(len(temps)):
+ CHARGEMENT.append(10*' ' +'%s %s' %(temps[ival],valeurs[ival]))
+ # DDL_IMPO
+ #if debug: print 'ddl_impo_list',ddl_impo_list
+ if ddl_impo_list :
+ #UTMESS('A','PLEXUS_8')
+# AA if len(LIAISON) == 0 : LIAISON = ['LIAISON']
+ if len(LIAISON) == 0 : LIAISON = ['LINK']
+
+ for ddl_impo in ddl_impo_list:
+ blocage = ''
+
+ # DDL_IMPO / DX
+ for cle in dic_ddl_impo.keys() :
+ vale = self.get_motcle(ddl_impo,cle,code_mess=None)
+ if vale is not None:
+ if vale != 0 : UTMESS('F','PLEXUS_13')
+ else :
+ blocage += `dic_ddl_impo[cle]`
+
+ # LIAISON / ENCASTRE
+ if ddl_impo.has_key('LIAISON'):
+ if ddl_impo['LIAISON']=='ENCASTRE':
+ blocage += ' 123456'
+
+ # recupere les entites geometriques
+ for entite in ['GROUP_MA','GROUP_NO'] :
+ group_ma = self.get_motcle(ddl_impo,entite,code_mess=None)
+ if group_ma is not None :
+ group_ma = self.setlist(group_ma);break
+ LIAISON.append(' '*2 + 'BLOQ %s' %blocage)
+ # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+ LIAISON.append(6*' '+'LECT')
+ for group in group_ma:
+ LIAISON.append(10*' '+group)
+ LIAISON.append(6*' '+'TERM')
+
+ if not ddl_impo_list and not pres_rep_list :
+ UTMESS('F','PLEXUS_9')
+
+ # Transmettre les commandes a la liste global epx
+ for var in [CHARGEMENT,LIAISON] :
+ if len(var) > 0 :
+ epx[MODULE].append('\n')
+ for ligne in var : epx[MODULE].append(ligne)
+
+ epx[MODULE].append('\n')
+#-----------------------------------------------------------------------
+ def Correspondance_champ(self):
+
+ # Dictionnaire de passage de champs Aster --> Europlexus
+ dic_champ = {'DEPL':'DEPLACEMENT','VITE':'VITESSE','ACCE':'ACCELERATION',
+ 'SIEF_ELGA':'CONT','EPSI_ELGA':'EPST','VARI_ELGA':'ECRO'}
+
+ # Dictionnaire de passage de composantes Aster --> Europlexus
+ dic_cmp = {}
+ for cham in ['DEPL','VITE','ACCE'] :
+ dic_cmp[cham] = {'DX' : 1,'DY':2,'DZ':3,'DRX':4,'DRY':5,'DRZ':6}
+
+ dic_cmp['SIEF_ELGA'] = {'SIXX':1,'SIYY':2,'SIZZ':3,'SIXY':4,'SIXZ':5,'SIYZ':6,'NXX':1,'NYY':2,'NXY':3,'MXX':4,'MYY':5,'MXY':6,'QX':7,'QY':8}
+ dic_cmp['VARI_ELGA'] = {}
+ for ii in range(1,25):
+ dic_cmp['VARI_ELGA']['V%i'%ii] = ii
+
+ self.dic_champ = dic_champ
+ self.dic_cmp = dic_cmp
+
+
+#-----------------------------------------------------------------------
+ def export_ECRITURE(self):
+
+ epx = self.epx
+
+ self.Correspondance_champ()
+
+ # CLe identifiant
+ MODULE = 'ECRITURE'
+
+ dcles_freq = {'FREQ':'PAS_NBRE', 'TFREQ':'PAS_INST'}
+
+ def get_freq(fact):
+ for cle_freq in dcles_freq.keys():
+# AA vale_freq = self.get_motcle(fact,cle_freq,code_mess=None)
+ vale_freq = self.get_motcle(fact,dcles_freq[cle_freq],code_mess=None)
+ if vale_freq is not None : break
+ return cle_freq,vale_freq
+
+ def get_freq2() :
+ if self.PAS_NBRE_COURBE :
+ return 'FREQ',self.PAS_NBRE_COURBE
+ elif self.PAS_INST_COURBE :
+ return 'TFREQ',self.PAS_INST_COURBE
+ else :
+ raise 'Erreur programmation'
+
+
+ def string2list(var) :
+ if types.TypeType(var) == types.StringType : var = (var,)
+ return var
+
+
+ epx[MODULE] = ['*--ECRITURES DES RESULTATS']
+ epx[MODULE] = ['opti K2GP']
+ # Entete de la commande Europlexus courante
+ epx[MODULE].append('ECRITURE')
+
+
+ # Traitement du mot-cle facteur OBSERVATION (EPX = LISTING)
+# AA listing_fact = self.ECRITURE['LISTING']
+ listing_fact = self.OBSERVATION
+ nom_cham = string2list(listing_fact['NOM_CHAM'])
+
+ cle_freq_listing, vale_freq_listing = get_freq(listing_fact)
+# AA cles_entite = ['POINTS','ELEMEMTS']
+ dcles_entite = {'POINT':'GROUP_NO', 'ELEM':'GROUP_MA'}
+# AA dcles_tout = {'POINTS':'TOUT_GROUP_NO', 'ELEMEMTS':'GROUP_MA'}
+ cles_entite = dcles_entite.keys()
+
+ # Ecriture format Europlexus
+
+ # Ecriture LISTING
+ st = 2*' '
+ for cham_aster in nom_cham:
+ cham_epx = self.dic_champ[cham_aster]
+ st += '%s ' % cham_epx
+ st += ' %s %s' % (cle_freq_listing,vale_freq_listing)
+ st += ' NOPO NOEL'
+ epx[MODULE].append(st)
+ for cle in cles_entite:
+# AA for cle in cles_entite :
+# AA entite_geo = self.get_motcle(listing_fact ,cle, code_mess=None)
+# AA entite_geo = string2list(entite_geo)
+
+ entite_geo = string2list(listing_fact[dcles_entite[cle]])
+ # if listing_fact['TOUT_%s' % dcles_entite[cle]] == 'OUI': epx[MODULE].append(2*' ' +'%s TOUS ' % cle)
+ # elif entite_geo is None: epx[MODULE].append(2*' ' +'NO%s' % cle)
+ # else:
+ # epx[MODULE].append(2*' ' +'%s LECT' %cle)
+ # for group in entite_geo :
+ # epx[MODULE].append(6*' '+group)
+ # epx[MODULE].append(2*' '+'TERM')
+
+# if entite_geo is None :
+# epx[MODULE].append(2*' ' +'NO%s' %cle)
+# elif entite_geo[0] == 'TOUS' :
+# epx[MODULE].append(2*' ' +'%s TOUS ' %cle)
+# else :
+# epx[MODULE].append(2*' ' +'%s LECT' %cle)
+# for group in entite_geo :
+# epx[MODULE].append(6*' '+group)
+# epx[MODULE].append(2*' '+'TERM')
+#
+
+ # Ecriture FICHIER ALICE UTILISE par le mot-cle facteur COURBE
+# AA courbe_fact = self.ECRITURE['COURBE']
+ courbe_fact = self.COURBE
+ if courbe_fact is not None :
+
+ # dcourbe=[]
+ # for j in courbe_fact:
+ # dcourbe.append(j.cree_dict_valeurs(j.mc_liste))
+ # for i in dcourbe[-1].keys():
+ # if dcourbe[-1][i]==None : del dcourbe[-1][i]
+
+ # if debug: print 'dcourbe=', dcourbe
+
+ cle_freq, vale_freq = get_freq2()
+ fichier_alit = self.pwd + self.REPE + os.sep + self.nom_fichiers['ALIT']
+ epx[MODULE].append(2*' ' + "FICH ALIT 11 %s %s" %(cle_freq,vale_freq))
+
+ # Liste les noeuds a postraiter
+ lnoeuds=set()
+ lmailles=set()
+ for courbe in courbe_fact :
+ if courbe['GROUP_NO'] != None :
+ noeuds = courbe['GROUP_NO']
+ if debug: print type(noeuds)
+ # liste de noeud ou un seul noeud ?
+ if type(noeuds) == tuple :
+ for el in noeuds :
+ lnoeuds.add(el)
+ else :
+ lnoeuds.add(noeuds)
+ elif courbe['GROUP_MA'] != None :
+ mailles = courbe['GROUP_MA']
+ if debug: print type(mailles)
+ # liste de mailles ou une seule maille ?
+ if type(mailles ) == tuple :
+ for el in mailles :
+ lmailles.add(el)
+ else :
+ lmailles.add(mailles)
+ else :
+ raise 'Erreur ni noeud ni maille'
+ # sys.exit()
+ # tables = self.get_motcle(courbe_fact,'TABLE',code_mess='F')
+ # tables = self.setlist(tables)
+
+ # icourbe = 0
+ # for table in tables:
+ # icourbe += 1
+ # noeud = table['NOEUD']
+ # list_noeuds.append(noeud)
+ # Ecriture la liste des noeuds sous format epx
+ if lnoeuds :
+ epx[MODULE].append(4*' ' +'POINTS')
+ epx[MODULE].append(6*' ' +'LECT ')
+ for noeud in lnoeuds :
+ epx[MODULE].append(8*' '+noeud)
+ epx[MODULE].append(6*' '+'TERM')
+ if lmailles :
+ epx[MODULE].append(4*' ' +'ELEM')
+ epx[MODULE].append(6*' ' +'LECT ')
+ for maille in lmailles :
+ epx[MODULE].append(8*' '+maille)
+ epx[MODULE].append(6*' '+'TERM')
+
+
+ # Pas besoin d'elements
+ # epx[MODULE].append(4*' ' + 'NOELEMENTS')
+
+ # Ecriture fichier MED representant les champs aux noeuds et aux points de gauss
+ # Traitement du mot-cle facteur ARCHIVAGE
+# # Traitement du mot-cle facteur CHAMP
+# champ_fact = self.ECRITURE['CHAMP']
+ champ_fact = self.ARCHIVAGE
+ if champ_fact is not None :
+ cle_freq_champ,vale_freq_champ = get_freq(champ_fact)
+ epx[MODULE].append(2*' ' + 'FICHIER MED')
+ # chemin complet du fichier med
+ fichier_med = self.pwd + self.REPE + os.sep + self.nom_fichiers['MED']
+ epx[MODULE].append(2*' ' + "'%s'" %fichier_med)
+ cle_freq,vale_freq = get_freq(champ_fact)
+ epx[MODULE].append(2*' ' + ' %s %s' %(cle_freq_champ,vale_freq_champ))
+
+ # groupes de mailles du modele
+ entite_geo={}
+ entite_geo['ELEM'] = []
+ for model in ['DKT3','Q4GS'] :
+ if model in self.modelisations :
+ entite_geo['ELEM'].extend(self.dic_gma[model])
+ entite_geo['POINT'] = []
+ for model in ['DKT3','Q4GS','POUT'] :
+ if model in self.modelisations :
+ entite_geo['POINT'].extend(self.dic_gma[model])
+ for cle in cles_entite :
+ epx[MODULE].append(2*' ' +'%s LECT' %cle)
+ for group in entite_geo[cle] :
+ epx[MODULE].append(6*' '+group)
+ epx[MODULE].append(2*' '+'TERM')
+
+
+ # ecriture CAST2000
+ # __temp
+ fichier_cast2000 = 'fort.%i' %unite_cast2000
+ if unite_cast2000 and os.path.isfile(fichier_cast2000) :
+ # titre
+ epx[MODULE].append('\n*-- CAST2000')
+ fd = open(fichier_cast2000,'r')
+ lst = fd.readlines()
+ fd.close()
+ for st in lst :
+ st = string.replace(st,'\n','')
+ epx[MODULE].append(st)
+
+ # Une ligne de saut
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+
+ def export_POST_COURBE(self):
+
+ # Suite de postraitement permettant d'ecrire des fichiers ASCII
+ # des grandeurs demandees
+
+ # Tester si le mot_cle facteur COURBE a ete renseigne
+# AA courbe_fact = self.ECRITURE['COURBE']
+ courbe_fact = self.COURBE
+ if courbe_fact is None : return
+
+ epx = self.epx
+
+ # Cle identifiant
+ MODULE = 'POST_COURBE'
+
+ # Ecriture fort Europlexus
+ # Entete de la commande courante
+ epx[MODULE] = ['SUITE\n']
+ # epx[MODULE].append("'TITRE'")
+# unite_alit = self.get_motcle(courbe_fact,'UNITE_ALIT',code_mess=None)
+# if debug: print 'unite_alit=', unite_alit
+ if self.UNITE_COURBE: fichier_courbes = os.path.join(self.pwd, 'fort.%s' % str(self.UNITE_COURBE))
+ else: fichier_courbes = self.pwd + self.REPE + os.sep + self.nom_fichiers['PUN']
+ fichier_alit = self.pwd + self.REPE + os.sep + self.nom_fichiers['ALIT']
+ epx[MODULE].append("RESULTAT ALICE TEMPS 11")
+ epx[MODULE].append("OPNF FORMAT 17 '%s'" %fichier_courbes)
+ epx[MODULE].append("SORTIES GRAPHIQUES")
+ # epx[MODULE].append("PERFO '%s'"%fichier_courbes)
+ epx[MODULE].append("AXTEMPS 1. 'TEMPS(s)'")
+
+ # recuperer le mot-cle facteur COURBE
+# AA courbe_fact = self.ECRITURE['COURBE']
+ courbe_fact = self.COURBE
+ # recuperer les mot_cle TABLE
+ # tables = self.get_motcle(courbe_fact,'TABLE',code_mess='F')
+ #tables = self.setlist(tables)
+
+ # Dictionnaire decrivant les legendes des abscisses et ordodonnees des courbes imprimees
+ # etl utilisee dans get_tables
+ self.legend_courbes = {}
+ entites_courbe = ['GROUP_NO','GROUP_MA']
+ entite_EPX={'GROUP_NO' : 'NOEUD', 'GROUP_MA' : 'ELEM'}
+ icourbe = 0
+ # for table in tables:
+ lnoeuds = []
+ for table in courbe_fact :
+ for entite_type in entites_courbe :
+ try : entite = table[entite_type]
+ except : entite = None
+ if entite is not None :
+ cham_aster = table['NOM_CHAM']
+ cmp_aster = table['NOM_CMP']
+ cham_epx = self.dic_champ[cham_aster]
+ cmp_epx = self.dic_cmp[cham_aster][cmp_aster]
+ ylabel = cham_aster + '_' + cmp_aster
+ #ylabel = cmp_aster
+ if type(entite) is not tuple : entite = [entite,]
+ for el in entite :
+ icourbe+=1
+ label = ylabel + '_%s'%el
+ if entite_type == 'GROUP_MA' :
+ label = label+'_%s'%table['NUM_GAUSS']
+ st = "COURBE %i '%s' %s COMP %i "% (icourbe,label,cham_epx,cmp_epx)
+ if entite_type == 'GROUP_MA' :
+ st=st+"GAUSS %i "%table['NUM_GAUSS']
+ st=st+"%s LECT %s TERM"%(entite_EPX[entite_type],el)
+ if debug: print 'st = %s'%st
+ epx[MODULE].append(st)
+ # epx[MODULE].append("LIST %i AXES 1. '%s'" % (icourbe,ylabel))
+ st = "LIST %s AXES 1. '%s'" % (icourbe,label)
+ if debug: print 'st = %s'%st
+ epx[MODULE].append(st)
+ self.legend_courbes[icourbe] = ['TEMPS',label]
+
+
+
+ # Une ligne de saut
+ epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------
+ def export_CALCUL(self):
+
+ epx = self.epx
+
+ # CLe identifiant
+ MODULE = 'CALCUL'
+
+ # Entete de la commande Europlexus courante
+ epx[MODULE] = ['*--OPTION DE CALCUL']
+ epx[MODULE].append('')
+ type_discr = self.CALCUL['TYPE_DISCRETISATION']
+
+ epx[MODULE].append('OPTION PAS %s' %type_discr)
+
+ if type_discr == 'AUTO':
+ cstab = self.CALCUL['CSTAB']
+ epx[MODULE].append(7*' ' + 'CSTAB %s' %cstab)
+
+ listInterfaces = self.INTERFACES
+ listDomaines = self.DOMAINES
+ domaineInterfaces = {}
+ if listDomaines :
+ epx[MODULE].append('\n')
+ epx[MODULE].append('*--DEFINITION DES SOUS DOMAINES')
+ epx[MODULE].append('')
+ epx[MODULE].append('STRUCTURE %s'%len(listDomaines))
+ for interface in listInterfaces :
+ Lgma1 = self.setlist(interface['GROUP_MA_1'])
+ Lgma2 = self.setlist(interface['GROUP_MA_2'])
+ idS1 = interface['IDENT_DOMAINE_1']
+ idS2 = interface['IDENT_DOMAINE_2']
+ if not domaineInterfaces.has_key(idS1) :
+ domaineInterfaces[idS1]= []
+ if not domaineInterfaces.has_key(idS2) :
+ domaineInterfaces[idS2]= []
+ domaineInterfaces[idS1].extend(Lgma1)
+ domaineInterfaces[idS2].extend(Lgma2)
+ else :
+ listDomaines = []
+ for domaine in listDomaines :
+ Lgma = self.setlist(domaine['GROUP_MA'])
+ id = domaine['IDENTIFIANT']
+ epx[MODULE].append(3*' '+'DOMA LECT')
+ for gma in Lgma :
+ epx[MODULE].append(12*' '+gma)
+ for gma in domaineInterfaces[id] :
+ epx[MODULE].append(12*' '+gma)
+ epx[MODULE].append(8*' '+'TERM')
+ epx[MODULE].append(8*' '+'IDENTIFIANT %s\n'%id)
+
+
+ if listInterfaces :
+ epx[MODULE].append('')
+ epx[MODULE].append('INTERFACE %s'%len(listInterfaces))
+ else :
+ listInterfaces = []
+ for interface in listInterfaces :
+ Lgma1 = self.setlist(interface['GROUP_MA_1'])
+ Lgma2 = self.setlist(interface['GROUP_MA_2'])
+ idS1 = interface['IDENT_DOMAINE_1']
+ idS2 = interface['IDENT_DOMAINE_2']
+ tole = interface['TOLE']
+ epx[MODULE].append(3*' '+'MORTAR TOLE %s'%tole)
+ epx[MODULE].append(7*' '+'DOMA %s LECT'%idS1)
+ for gma in Lgma1 :
+ epx[MODULE].append(13*' '+gma)
+ epx[MODULE].append(10*' '+'TERM')
+ epx[MODULE].append(7*' '+'DOMA %s LECT'%idS2)
+ for gma in Lgma2 :
+ epx[MODULE].append(13*' '+gma)
+ epx[MODULE].append(10*' '+'TERM')
+
+ epx[MODULE].append('\n')
+ epx[MODULE].append('*--LANCEMENT DE CALCUL')
+ epx[MODULE].append('')
+ calcul = 'CALCUL'
+# AAA cles = ['INST_INIT','PASFIX','INST_FIN','DTMAX']
+ cles = ['INST_INIT','PASFIX','INST_FIN']
+ dcles = {'INST_INIT':'TINI', 'PASFIX':'PASFIX', 'INST_FIN':'TFIN'}
+ for cle in dcles.keys():
+ try : calcul += ' %s %s' %(dcles[cle], self.CALCUL[cle])
+ except : pass
+ # Doit etre mis en entier
+ try : calcul += ' %s %d' %('NMAX',self.CALCUL['NMAX'])
+ except : pass
+ epx[MODULE].append(calcul)
+ epx[MODULE].append('\n')
+ #epx[MODULE].append('FIN')
+
+
+#-----------------------------------------------------------------------
+ def ecrire_fichier(self,):
+
+ fichier = self.REPE + os.sep + self.nom_fichiers['COMMANDE']
+
+ # ordre des modules de definition du modele EPX
+ modules = ['DEBUT','MAILLAGE','DIME','MODELE','CARA_ELEM','FONC_PARASOL','CHAM_MATER','RIGI_PARASOL','EXCIT','ECRITURE','CALCUL','POST_COURBE']
+
+ #les modules MODELE et RIGI_PARASOL doivent etre executes avant MAILLAGE
+ # car le maillage peut etre modifie dans ces modules
+ modules_exe = []
+ modules_exe.extend(modules)
+ modules_exe.remove('MAILLAGE')
+ modules_exe.append('MAILLAGE')
+
+ # Excecution des differentes modules
+ for module in modules_exe:
+ fct = 'export_%s' %module
+ if hasattr(self,fct) :
+ eval('self.'+fct+'()')
+ else :
+ print 'module %s pas encore developpe' %fct
+
+ # Ecriture du fichier texte contenant toutes les commandes Europlexus
+ fd = open(fichier,'w')
+ for module in modules :
+ if self.epx.has_key(module) :
+ for ll in self.epx[module]:
+ if debug: print 'EPX : %s'%ll
+ fd.write('%s\n'%ll)
+ # Fin du fichier de commandes epx
+ fd.write('FIN')
+ fd.close()
+
+#-----------------------------------------------------------------------
+ def get_table(self,icourbe=1,fichier='auto') :
+
+ global table
+
+ if not hasattr(self,'courbes'):
+ if fichier == 'auto' : fichier = self.pwd + self.REPE + os.sep + self.nom_fichiers['PUN']
+ if not os.path.isfile(fichier) : return
+ self.courbes = self.lire_pun(fichier=fichier)
+
+ if not os.path.isfile(fichier) : return
+ if debug: print self.courbes,type(self.courbes)
+ nc = 0
+ para_ordonnee = []
+ dico = []
+ for icourbe in self.courbes :
+ valeurs = self.courbes[icourbe]
+ if debug: print 'icourbe = %s ; valeurs = %s'%(icourbe, valeurs)
+ if nc == 0 :
+ para_abscisse = self.legend_courbes[icourbe][0]
+ vale_abscisse = valeurs[0,:].tolist()
+ assert (len(para_abscisse)<17)
+ dico.append({'TYPE_K':'K16','LISTE_R' : vale_abscisse , 'PARA' : para_abscisse})
+ para_ordonnee = self.legend_courbes[icourbe][1]
+ vale_ordonnee = valeurs[1,:].tolist()
+ assert (len(para_ordonnee)<17)
+ dico.append({'TYPE_K':'K16','LISTE_R' : vale_ordonnee , 'PARA' : para_ordonnee})
+ nc=1
+ else :
+ if ((self.legend_courbes[icourbe][0] == para_abscisse) and (vale_abscisse == valeurs[0,:].tolist())) :
+ para_ordonnee = self.legend_courbes[icourbe][1]
+ vale_ordonnee = valeurs[1,:].tolist()
+ assert (len(para_ordonnee)<17)
+ dico.append({'TYPE_K':'K16','LISTE_R' : vale_ordonnee , 'PARA' : para_ordonnee})
+ else :
+ raise 'Table non compatible'
+
+ table = CREA_TABLE( LISTE =dico
+ );
+
+ if 0 :
+ unite = self.get_unite_libre()
+ unite = 90
+ DEFI_FICHIER(UNITE=unite,ACTION='ASSOCIER');
+
+ IMPR_TABLE(UNITE = unite,
+ FORMAT = 'XMGRACE',
+ TABLE = table,
+ LEGENDE_X = para_abscisse,
+ LEGENDE_Y = para_ordonnee,
+ LEGENDE = 'test'
+ );
+
+ os.system('xmgrace fort.%i' %unite)
+
+ DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');
+
+
+#-----------------------------------------------------------------------
+ def get_resu(self,fichier_med='auto'):
+
+ # Rendre global le resu pour qu'il soit accepte dans self.DeclareOut
+ global resu
+
+ if fichier_med == 'auto' : fichier_med = self.REPE + os.sep + self.nom_fichiers['MED']
+
+ if debug: print fichier_med
+ if not os.path.isfile(fichier_med) :
+ print "Pas de fichier MED !"
+ return
+
+ # Format med des champs depl, vite et acce
+ format_med =[_F(NOM_CHAM_MED='CHAMP___DEPLACEMENT___001',
+ NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+ NOM_CMP_MED=('UX','UY','UZ','RX','RY','RZ'),
+ NOM_CHAM ='DEPL' ),
+ _F(NOM_CHAM_MED='CHAMP___VITESSE___001',
+ NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+ NOM_CMP_MED=('VX','VY','VZ','RX','RY','RZ'),
+ NOM_CHAM ='VITE' ),
+ _F(NOM_CHAM_MED='CHAMP___ACCELERATION___001',
+ NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+ NOM_CMP_MED=('GX','GY','GZ','RX','RY','RZ'),
+ NOM_CHAM ='ACCE' ),
+ ]
+
+ # Dicionnaire permettant de faire la correspondance des champs aux pts de gauss entre le med de europlexus et aster
+ dic_cmp_gauss = {}
+
+ dic_cmp_gauss['CONTRAINTE'] = {'DKT3': {'NOM_CMP' : ('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
+ 'NOM_CMP_MED' : ('SIG1','SIG2','SIG3','SIG4','SIG5','SIG6',),},
+ 'Q4GS': {'NOM_CMP' : ('NXX','NYY','NXY','MXX','MYY','MXY','QX','QY'),
+ 'NOM_CMP_MED' : ('SIG1','SIG2','SIG3','SIG4','SIG5','SIG6','SIG7','SIG8'),},
+ 'POUT' : {}
+
+ }
+
+ dic_cmp_gauss['DEFORMATION'] = {'DKT3': {'NOM_CMP' : ('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),
+ 'NOM_CMP_MED' : ('EPS1','EPS2','EPS3','EPS4','EPS5','EPS6',),},
+ 'Q4GS': {'NOM_CMP' : ('EXX','EYY','EXY','KXX','KYY','KXY','GAX','GAY'),
+ 'NOM_CMP_MED' : ('EPS1','EPS2','EPS3','EPS4','EPS5','EPS6','EPS7','EPS8'),},
+ 'POUT' : {}
+
+ }
+
+ dic_cmp_gauss['ECROUISSAGE'] = {'DKT3': {'NOM_CMP' : ('V1','V2','V3','V4','V5','V6','V7','V8','V9','V10','V11','V12','V13','V14','V15','V16','V17','V18','V19'),
+ 'NOM_CMP_MED' : ('VAR1','VAR2','VAR3','VAR4','VAR5','VAR6','VAR7','VAR8','VAR9','VAR10','VAR11','VAR12','VAR13','VAR14','VAR15','VAR16','VAR17','VAR18','VAR19'),},
+ 'Q4GS' : {'NOM_CMP' : ('V1','V2','V3','V4','V5','V6','V7','V8','V9','V10','V11','V12','V13','V14','V15','V16','V17','V18','V19'),
+ 'NOM_CMP_MED' : ('VAR1','VAR2','VAR3','VAR4','VAR5','VAR6','VAR7','VAR8','VAR9','VAR10','VAR11','VAR12','VAR13','VAR14','VAR15','VAR16','VAR17','VAR18','VAR19'),},
+ 'POUT' : {}
+
+ }
+ tupVar = ('X1','X2','X3','X4','X5','X6','X7','X8','X9','X10','X11','X12','X13','X14','X15','X16','X17','X18','X19')
+
+ # Dictionnaire permettant de traduire le champ epx en med au nom asscie dans aster
+# AA epx2aster = {'CONTRAINTE':'SIEF_ELGA','ECROUISSAGE':'VARI_ELGA'}
+ epx2aster = {'CONTRAINTE':'SIEF_ELGA','DEFORMATION':'EPSI_ELGA_DEPL','ECROUISSAGE':'VARI_ELGA'}
+
+# AA : desactive pour le moment
+# # Enrichir la liste format_med par les champs aux pts de gauss
+# imode = 0
+# if debug: print 'self.modelisations',self.modelisations
+# for modelisation in self.modelisations :
+# #if modelisation in ['Q4GS','DKT3'] :
+# imode += 1
+# numero = string.replace('%3.i' %imode,' ','0')
+# for champ in dic_cmp_gauss.keys():
+# if len(dic_cmp_gauss[champ][modelisation]) > 0 :
+# nom_cham_med = 'CHAMP___'+ champ + (13-len(champ))*'_' + numero
+# nom_cham = epx2aster[champ]
+# nom_cmp = dic_cmp_gauss[champ][modelisation]['NOM_CMP']
+# nom_cmp_med = dic_cmp_gauss[champ][modelisation]['NOM_CMP_MED']
+# # ajouer a la list format_med
+# format_med.append(_F(NOM_CHAM_MED=nom_cham_med,NOM_CMP=nom_cmp,
+# NOM_CMP_MED=nom_cmp_med,NOM_CHAM=nom_cham)
+# )
+
+ # Lire le fichier med avec les options choisies dans la liste format_med
+ unite = self.get_unite_libre()
+ DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');
+ fort = 'fort.%i' %unite
+ if os.path.isfile(fort) : os.remove(fort)
+
+ os.symlink(fichier_med,fort)
+
+ # Regeneration des mots-cles EXCIT passés en argument de la macro
+ dExcit=[]
+ for j in self.EXCIT :
+ dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dExcit[-1].keys():
+ if dExcit[-1][i]==None : del dExcit[-1][i]
+ resu = LIRE_RESU(TYPE_RESU='EVOL_NOLI',
+# VERI_ELGA='NON',
+ FORMAT='MED',
+ MODELE=self.NEW_MODELE,
+ FORMAT_MED=format_med,
+ UNITE=unite,
+ CHAM_MATER=self.CHAM_MATER,
+ CARA_ELEM=self.CARA_ELEM,
+ TOUT_ORDRE='OUI',
+ EXCIT=dExcit,
+ INFO=self.INFO,
+ );
+
+ __EPN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = self.listEpais,
+ )
+ __EPN2 = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = self.listEpais2,
+ )
+ __UNN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = _F(VALE=(1.,1.), TOUT='OUI', NOM_CMP=('X21','X22')),
+ )
+ __UNDEU = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = _F(VALE=(1.,1./2.), TOUT='OUI', NOM_CMP=('X21','X22')),
+ )
+ __FONC1 = FORMULE(VALE='X1*X21',NOM_PARA=('X1','X21'))
+ __FONC2 = FORMULE(VALE='X2*X21',NOM_PARA=('X2','X21'))
+ __FONC3 = FORMULE(VALE='X3*X21',NOM_PARA=('X3','X21'))
+ __FONC4 = FORMULE(VALE='X4*X22',NOM_PARA=('X4','X22'))
+ __FONC5 = FORMULE(VALE='X5*X22',NOM_PARA=('X5','X22'))
+ __FONC6 = FORMULE(VALE='X6*X22',NOM_PARA=('X6','X22'))
+ __FONC7 = FORMULE(VALE='X7*X21',NOM_PARA=('X7','X21'))
+ __FONC8 = FORMULE(VALE='X8*X21',NOM_PARA=('X8','X21'))
+ __FONC11 = FORMULE(VALE='X11*X21',NOM_PARA=('X11','X21'))
+ __FONC12 = FORMULE(VALE='X12*X21',NOM_PARA=('X12','X21'))
+ __FONC13 = FORMULE(VALE='X13*X21',NOM_PARA=('X13','X21'))
+ __FONC14 = FORMULE(VALE='X14*X22',NOM_PARA=('X14','X22'))
+ __FONC15 = FORMULE(VALE='X15*X22',NOM_PARA=('X15','X22'))
+ __FONC16 = FORMULE(VALE='X16*X22',NOM_PARA=('X16','X22'))
+ __FONC17 = FORMULE(VALE='X17*X21',NOM_PARA=('X17','X21'))
+ __FONC18 = FORMULE(VALE='X18*X21',NOM_PARA=('X18','X21'))
+
+ __FONE1 = FORMULE(VALE='X1*X21',NOM_PARA=('X1','X21'))
+ __FONE2 = FORMULE(VALE='X2*X21',NOM_PARA=('X2','X21'))
+ __FONE3 = FORMULE(VALE='X3*X22',NOM_PARA=('X3','X22'))
+ __FONE4 = FORMULE(VALE='X4*X21',NOM_PARA=('X4','X21'))
+ __FONE5 = FORMULE(VALE='X5*X21',NOM_PARA=('X5','X21'))
+ __FONE6 = FORMULE(VALE='X6*X22',NOM_PARA=('X6','X22'))
+ __FONE7 = FORMULE(VALE='X7*X21',NOM_PARA=('X7','X21'))
+ __FONE8 = FORMULE(VALE='X8*X21',NOM_PARA=('X8','X21'))
+ __FONE9 = FORMULE(VALE='X9*X21',NOM_PARA=('X9','X21'))
+ __FONE10 = FORMULE(VALE='X10*X21',NOM_PARA=('X10','X21'))
+ __FONE11 = FORMULE(VALE='X11*X21',NOM_PARA=('X11','X21'))
+ __FONE12 = FORMULE(VALE='X12*X21',NOM_PARA=('X12','X21'))
+ __FONE13 = FORMULE(VALE='X13*X21',NOM_PARA=('X13','X21'))
+ __FONE14 = FORMULE(VALE='X14*X21',NOM_PARA=('X14','X21'))
+ __FONE15 = FORMULE(VALE='X15*X21',NOM_PARA=('X15','X21'))
+ __FONE16 = FORMULE(VALE='X16*X21',NOM_PARA=('X16','X21'))
+ __FONE17 = FORMULE(VALE='X17*X21',NOM_PARA=('X17','X21'))
+ __FONE18 = FORMULE(VALE='X18*X21',NOM_PARA=('X18','X21'))
+ __FONE19 = FORMULE(VALE='X19*X21',NOM_PARA=('X19','X21'))
+
+ __FONCC = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_F',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = _F(
+ TOUT = 'OUI',
+ NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8','X11','X12','X13','X14','X15','X16','X17','X18'),
+ VALE_F = (__FONC1,__FONC2,__FONC3,__FONC4,__FONC5,__FONC6,__FONC7,__FONC8,__FONC11,__FONC12,__FONC13,
+ __FONC14,__FONC15,__FONC16,__FONC17,__FONC18)),
+ )
+ __FONCC2 = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_F',
+ OPERATION = 'AFFE',
+ MODELE = self.NEW_MODELE,
+ PROL_ZERO = 'OUI',
+ AFFE = _F(
+ TOUT = 'OUI',
+ NOM_CMP = tupVar,
+ # VALE_F = (__FONE1,__FONE2)
+ VALE_F = (__FONE1,__FONE2,__FONE3,__FONE4,__FONE5,__FONE6,__FONE7,__FONE8,__FONE9,__FONE10,__FONE11,__FONE12,__FONE13,__FONE14,__FONE15,__FONE16,__FONE17,__FONE18,__FONE19)
+ ),
+ )
+ listEffg = []
+ i=0
+ listType=[]
+ __SIG11 = [None]*10
+ __SIG21 = [None]*10
+ __ECR11 = [None]*10
+
+ # Pour masquer certaines alarmes
+ from Utilitai.Utmess import MasquerAlarme, RetablirAlarme
+ MasquerAlarme('MED_83')
+ MasquerAlarme('MED_98')
+
+ while 1:
+ # index=1
+ # pas = self.ARCHIVAGE['PAS_NBRE']
+ # dicDetr=[]
+ # if 'Q4GS' in self.modelisations :
+ err = 0
+ try :
+ __SIG11[i] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_SIEF_R',
+ UNITE = 99,
+ NUME_PT = 0,
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___CONTRAINTE___00%d'%(i+1),
+ NOM_CMP = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP_MED'])
+ # dicDetr.append({'NOM' : __SIG11})
+ DETRUIRE(CONCEPT=_F(NOM = __SIG11[i]), INFO=1)
+ listType.append('Q4GS')
+ # index=2
+ except :
+ err+=1
+ try :
+ __SIG21[i] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_SIEF_R',
+ UNITE = 99,
+ NUME_PT = 0,
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___CONTRAINTE___00%d'%(i+1),
+ NOM_CMP = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED']),
+ DETRUIRE(CONCEPT=_F(NOM = __SIG21[i]), INFO=1)
+ if len(listType)<i+1 :
+ listType.append('DKT3')
+ except :
+ err+=1
+ if err<2 :
+ i+=1
+ else :
+ break
+ # if 'DKT3' in self.modelisations :
+ # try :
+ # __SIG21 = LIRE_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_SIEF_R',
+ # UNITE = 99,
+ # NUME_PT = i*pas,
+ # MODELE = self.NEW_MODELE,
+ # MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ # PROL_ZERO = 'OUI',
+ # NOM_MED = 'CHAMP___CONTRAINTE___00%d'%index,
+ # NOM_CMP = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+ # NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED']),
+ # dicDetr.append({'NOM' : __SIG21})
+
+ # except :
+ # err +=1
+ # if err > 1 :
+ # break
+ # DETRUIRE(CONCEPT=dicDetr)
+ # i+=1
+
+ # Pour la gestion des alarmes
+ RetablirAlarme('MED_83')
+ RetablirAlarme('MED_98')
+
+
+ nbChamp = i
+
+ listVari = [0]*nbChamp
+
+ for i in xrange(nbChamp) :
+ if listType[i] == 'Q4GS' :
+ try :
+ __ECR11[i] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_VARI_R',
+ UNITE = 99,
+ NUME_PT = 0,
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___ECROUISSAGE__00%d'%(i+1),
+ NOM_CMP = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP_MED'])
+ # dicDetr.append({'NOM' : __SIG11})
+ DETRUIRE(CONCEPT=_F(NOM = __ECR11[i]), INFO=1)
+ listVari[i]=1
+ except :
+ err+=1
+ elif listType[i] == 'DKT3' :
+ try :
+ __ECR11[i] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_VARI_R',
+ UNITE = 99,
+ NUME_PT = 0,
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___ECROUISSAGE__00%d'%(i+1),
+ NOM_CMP = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP_MED'])
+ # dicDetr.append({'NOM' : __SIG11})
+ DETRUIRE(CONCEPT=_F(NOM = __ECR11[i]), INFO=1)
+ listVari[i]=1
+ except :
+ err+=1
+
+
+
+ itot=len(resu.LIST_PARA()['INST'])
+ __EFFG=[None]*itot
+ # __EPSG=[None]*itot
+ __ECRG=[None]*itot
+ __SIG1 = [None]*nbChamp
+ __SIG2 = [None]*nbChamp
+ __ECR1 = [None]*nbChamp
+ __ECR2 = [None]*nbChamp
+ for i in xrange(itot) :
+ dicAffe=[]
+ dicAffe2=[]
+ dicAffe3=[]
+ index=1
+ pas = self.ARCHIVAGE['PAS_NBRE']
+ dicAsse = [{'TOUT' : 'OUI', 'CHAM_GD' : __EPN, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+ dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPN2, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+ dicAsse2 = [{'TOUT' : 'OUI', 'CHAM_GD' : __UNN, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+ dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __UNN, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+ dicAsse3 = [{'TOUT' : 'OUI', 'CHAM_GD' : __UNDEU, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+ dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __UNDEU, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+ dicDetr=[]
+ # if 'Q4GS' in self.modelisations :
+ for j in xrange(nbChamp) :
+ if listType[j] == 'Q4GS' :
+ __SIG1[j] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_SIEF_R',
+ UNITE = 99,
+ NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___CONTRAINTE___00%d'%(j+1),
+ NOM_CMP = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP_MED'],
+ )
+ dicDetr.append({'NOM' : __SIG1[j]})
+ dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __SIG1[j], 'NOM_CMP' : tuple(dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP']),
+ 'NOM_CMP_RESU' : ('X1','X2','X3','X4','X5','X6','X7','X8'), 'CUMUL' : 'OUI','COEF_R':1.})
+ # __EPS1 = LIRE_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_EPSI_R',
+ # UNITE = 99,
+ # NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ # MODELE = self.NEW_MODELE,
+ # MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ # PROL_ZERO = 'OUI',
+ # NOM_MED = 'CHAMP___DEFORM_TOT___001',
+ # NOM_CMP = dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP'],
+ # NOM_CMP_MED = dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP_MED'])
+ if listVari[j] :
+ __ECR1[j] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_VARI_R',
+ UNITE = 99,
+ NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___ECROUISSAGE__00%d'%(j+1),
+ NOM_CMP = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP_MED'])
+ dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __ECR1[j], 'NOM_CMP' : tuple(dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP']),
+ 'NOM_CMP_RESU' : tupVar, 'CUMUL' : 'OUI','COEF_R':1.})
+ dicDetr.append({'NOM' : __ECR1[j]})
+ # dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPS1, 'NOM_CMP' : tuple(dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP']),
+ # 'NOM_CMP_RESU' : ('X1','X2','X3','X4','X5','X6','X7','X8'), 'CUMUL' : 'OUI','COEF_R':1.})
+ else :
+ __SIG2[j] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_SIEF_R',
+ UNITE = 99,
+ NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___CONTRAINTE___00%d'%(j+1),
+ NOM_CMP = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED'],
+ )
+ dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __SIG2[j], 'NOM_CMP' : tuple(dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP']),
+ 'NOM_CMP_RESU' : ('X11','X12','X13','X14','X15','X16'), 'CUMUL' : 'OUI','COEF_R':1.})
+ dicDetr.append({'NOM' : __SIG2[j]})
+ # __EPS2 = LIRE_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_EPSI_R',
+ # UNITE = 99,
+ # NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ # MODELE = self.NEW_MODELE,
+ # MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ # PROL_ZERO = 'OUI',
+ # NOM_MED = 'CHAMP___DEFORM_TOT___00%d'%index,
+ # NOM_CMP = dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP'],
+ # NOM_CMP_MED = dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP_MED']),
+ if listVari[j] :
+
+ __ECR2[j] = LIRE_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_VARI_R',
+ UNITE = 99,
+ NUME_PT = resu.LIST_PARA()['NUME_ORDRE'][i],
+ MODELE = self.NEW_MODELE,
+ MAILLAGE = self.reupere_structure(self.MODELE,'MAILLAGE'),
+ PROL_ZERO = 'OUI',
+ NOM_MED = 'CHAMP___ECROUISSAGE__00%d'%(j+1),
+ NOM_CMP = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP'],
+ NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP_MED'])
+ dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __ECR2[j], 'NOM_CMP' : tuple(dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP']),
+ 'NOM_CMP_RESU' : tupVar, 'CUMUL' : 'OUI','COEF_R':1.})
+ dicDetr.append({'NOM' : __ECR2[j]})
+ # dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPS2, 'NOM_CMP' : tuple(dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP']),
+ # 'NOM_CMP_RESU' : ('X11','X12','X13','X14','X15','X16'), 'CUMUL' : 'OUI','COEF_R':1.})
+ # dicDetr.append({'NOM' : __EPS2})
+# dicDetr.append({'NOM' : __ECR2})
+ # dicDetr.append({'NOM' : __EPS1})
+# dicDetr.append({'NOM' : __ECR1})
+ # if 'DKT3' in self.modelisations:
+
+ __SIGN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = self.NEW_MODELE,
+ ASSE = dicAsse,
+ )
+ # __EPSN = CREA_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_NEUT_R',
+ # OPERATION = 'ASSE',
+ # PROL_ZERO = 'OUI',
+ # MODELE = self.NEW_MODELE,
+ # ASSE = dicAsse2)
+ __ECRN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = self.NEW_MODELE,
+ ASSE = dicAsse3)
+ dicDetr.append({'NOM' : __SIGN})
+ # dicDetr.append({'NOM' : __EPSN})
+ dicDetr.append({'NOM' : __ECRN})
+ __EFFGN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'EVAL',
+ CHAM_F = __FONCC,
+ CHAM_PARA = (__SIGN),
+ )
+ # __EPSGN = CREA_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_NEUT_R',
+ # OPERATION = 'EVAL',
+ # CHAM_F = __FONCC,
+ # CHAM_PARA = (__EPSN))
+ __ECRGN = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_NEUT_R',
+ OPERATION = 'EVAL',
+ CHAM_F = __FONCC2,
+ CHAM_PARA = (__ECRN))
+ dicDetr.append({'NOM' : __EFFGN})
+ # dicDetr.append({'NOM' : __EPSGN})
+ dicDetr.append({'NOM' : __ECRGN})
+ __EFFG[i] = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_SIEF_R',
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = self.NEW_MODELE,
+ ASSE = _F(
+ TOUT = 'OUI',
+ CHAM_GD = __EFFGN,
+ NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8')+('X11','X12','X13','X14','X15','X16'),
+ NOM_CMP_RESU = tuple(dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP']+dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'])),
+ )
+ # __EPSG[i] = CREA_CHAMP(
+ # INFO = self.INFO,
+ # TYPE_CHAM = 'ELGA_EPSI_R',
+ # OPERATION = 'ASSE',
+ # PROL_ZERO = 'OUI',
+ # MODELE = self.NEW_MODELE,
+ # ASSE = _F(
+ # TOUT = 'OUI',
+ # CHAM_GD = __EPSGN,
+ # NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8')+('X11','X12','X13','X14','X15','X16'),
+ # NOM_CMP_RESU = tuple(dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP']+dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP'])))
+ __ECRG[i] = CREA_CHAMP(
+ INFO = self.INFO,
+ TYPE_CHAM = 'ELGA_VARI_R',
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = self.NEW_MODELE,
+ ASSE = _F(
+ TOUT = 'OUI',
+ CHAM_GD = __ECRGN,
+ NOM_CMP = tupVar,
+ NOM_CMP_RESU = tuple(dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'])))
+# AA dicAffe.append({'CHAM_GD' : __EFFG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+ dicAffe.append({'CHAM_GD' : __EFFG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER, 'CARA_ELEM' : self.CARA_ELEM, 'INST': resu.LIST_PARA()['INST'][i]})
+ # dicAffe2.append({'CHAM_GD' : __EPSG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+# AA dicAffe3.append({'CHAM_GD' : __ECRG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+ dicAffe3.append({'CHAM_GD' : __ECRG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER, 'CARA_ELEM' : self.CARA_ELEM, 'INST': resu.LIST_PARA()['INST'][i]})
+ DETRUIRE(CONCEPT=dicDetr, INFO=1)
+ resu = CREA_RESU(reuse=resu,
+ OPERATION = 'AFFE',
+ TYPE_RESU = 'EVOL_NOLI',
+ NOM_CHAM = 'SIEF_ELGA',
+ AFFE = dicAffe,
+ )
+ # resu = CREA_RESU(reuse=resu,
+ # OPERATION = 'AFFE',
+ # TYPE_RESU = 'EVOL_NOLI',
+ # NOM_CHAM = 'EPSI_ELGA_DEPL',
+ # AFFE = dicAffe2)
+ resu = CREA_RESU(reuse=resu,
+ OPERATION = 'AFFE',
+ TYPE_RESU = 'EVOL_NOLI',
+ NOM_CHAM = 'VARI_ELGA',
+ AFFE = dicAffe3,
+ )
+
+ DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');
+
+ os.remove(fort)
+
+#-----------------------------------------------------------------------
+ def lancer_calcul(self,fichier_med='auto'):
+
+ fichier_epx = self.nom_fichiers['COMMANDE']
+ EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+ CODE_RETOUR_MAXI=-1,
+ INFO=2)
+
+
+#------------------------------------------------------------------------
+#----------------------------- FIN class EUROPLEXUS ---------------------
+#------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------
+#----------------------------- class POUTRE -----------------------------
+#------------------------------------------------------------------------
+
+class POUTRE:
+ def __init__(self,MAILLAGE,CARA_ELEM):
+
+ # recuperer les infos du maillage sous format python
+ self.MApyt = MAIL_PY()
+ self.MApyt.FromAster(MAILLAGE)
+ self.CARA_ELEM = CARA_ELEM
+ # un dictionnaire stockant tous orientations definis dans AFF_CARA_ELEM
+ self.dic_gma = self.orientation_cara_elem()
+
+#------------------------------------------------------------------------
+ def getvecteurs(self,groupes_poutres,verif='non'):
+ vecteurs = {}
+ ig = 0
+ message = 0
+ for gr in groupes_poutres :
+ ig += 1
+ if not self.dic_gma.has_key(gr): self.dic_gma[gr] = {'ANGL_VRIL':0.0}
+ vecteurs[gr] = self.get_vecty_group_ma(gr)
+ if verif == 'oui':
+ if ig > 1 :
+ if not vecteurs_egaux(vecteurs[gr],vect_old) : message = 1
+ vect_old = vecteurs[gr]
+
+ if message : UTMESS('F','PLEXUS_10',valk=groupes_poutres)
+
+ return vecteurs
+
+#------------------------------------------------------------------------
+ def orientation_cara_elem(self,):
+
+ dic_gma = {}
+ etapes = self.CARA_ELEM.etape.valeur
+
+ if not etapes.has_key('ORIENTATION') : return dic_gma
+
+ orientation = etapes['ORIENTATION']
+ try :
+ test = orientation [0]
+ except :
+ orientation = [orientation]
+
+ for ll in orientation :
+ cara = ll['CARA']
+ if cara in ['ANGL_VRIL','ANGL_NAUT','VECT_Y'] :
+ if ll.has_key('GROUP_MA') :
+ group_ma = ll['GROUP_MA']
+ if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,)
+ a = ll['VALE']
+ for gr in group_ma:
+ if not dic_gma.has_key(gr): dic_gma[gr] = {}
+ dic_gma[gr][cara] = a
+
+ for gr in dic_gma.keys() :
+ if not dic_gma[gr].has_key('VECT_Y'):
+ if not dic_gma[gr].has_key('ANGL_VRIL') : dic_gma[gr]['ANGL_VRIL'] = 0.0
+ if dic_gma[gr].has_key('ANGL_NAUT'):
+ if len(dic_gma[gr]['ANGL_NAUT']) == 2 :
+ dic_gma[gr]['ANGL_NAUT'] = list(dic_gma[gr]['ANGL_NAUT']) + [dic_gma[gr]['ANGL_VRIL']]
+
+ return(dic_gma)
+
+#------------------------------------------------------------------------
+ def get_vecty_group_ma(self,group_ma):
+
+ #if debug: print '*'*10
+ #if debug: print 'Test de group_ma',group_ma
+ #if debug: print '*'*10
+
+ message = 0
+
+ if self.dic_gma[group_ma].has_key('VECT_Y') : return self.dic_gma[group_ma]['VECT_Y']
+
+ if not self.dic_gma[group_ma].has_key('ANGL_NAUT'):calcul_angle = 1
+ else: calcul_angle = 0
+
+ mailles = self.MApyt.gma[string.rstrip(group_ma)]
+
+ for imaille in range(len(mailles)):
+ maille = mailles[imaille]
+ if calcul_angle:
+ alpha,beta = self.calcul_angles_naut(maille)
+ angl = [alpha,beta,self.dic_gma[group_ma]['ANGL_VRIL']]
+ else:
+ angl = self.dic_gma[group_ma]['ANGL_NAUT']
+
+ vect_y = self.angle2vecty(angl)
+ if imaille > 1 :
+ if not vecteurs_egaux(vect_y0,vect_y) : message = 1
+ vect_y0 = vect_y
+
+ self.dic_gma[group_ma]['VECT_Y'] = vect_y
+
+ if message :
+ #if debug: print 'group_ma',group_ma
+ UTMESS('F','PLEXUS_11',valk=group_ma)
+
+ return vect_y
+
+#------------------------------------------------------------------------
+ def angle2vecty(self,angl):
+ #transformer en rd
+ for iangl in range(len(angl)):
+ angl[iangl] = numpy.pi*angl[iangl]/180.
+
+ cosa = math.cos( angl[0] )
+ sina = math.sin( angl[0] )
+ cosb = math.cos( angl[1] )
+ sinb = math.sin( angl[1] )
+ cosg = math.cos( angl[2] )
+ sing = math.sin( angl[2] )
+ vect = [ sing*sinb*cosa - cosg*sina , cosg*cosa + sing*sinb*sina , sing*cosb ]
+ for ii in range(len(vect)):
+ if abs(vect[ii]) <= tst : vect[ii] = 0.0
+ vect = numpy.array(vect)
+ vect = vect/norme(vect)
+ return vect
+
+#------------------------------------------------------------------------
+ def get_coor_nodes_maille(self,maille):
+ node1,node2 = self.MApyt.co[maille]
+ coor1 = self.MApyt.cn[node1]
+ coor2 = self.MApyt.cn[node2]
+ return [coor1,coor2]
+
+#------------------------------------------------------------------------
+ def calcul_angles_naut(self,maille):
+
+ # Angles directeurs d'une poutre (nautiques)
+
+ a,b = self.get_coor_nodes_maille(maille)
+
+ gx = [ b[0]-a[0] , b[1]-a[1] , b[2]-a[2] ]
+
+ if( (abs(gx[1]) < tst) and (abs(gx[0]) <= tst) ):
+ alpha = 0.0
+ else:
+ alpha = math.atan2(gx[1],gx[0])
+
+ p = math.sqrt( gx[0]*gx[0] + gx[1]*gx[1] )
+ if( (abs(gx[2]) < tst ) and (abs(p) <=tst) ):
+ beta = 0.0
+ else:
+ beta = -math.atan2(gx[2],p)
+
+ # alpha et Beta en degre
+ alpha = alpha*180./math.pi
+ beta = beta*180./math.pi
+
+ return alpha,beta
+
+#------------------------------------------------------------------------
+#----------------------------- FIN class POUTRE -------------------------
+#------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------
+#----------------------------- class DKT --------------------------------
+#------------------------------------------------------------------------
+
+class DKT:
+
+ def __init__(self,MAILLAGE):
+
+ self.MAILLAGE = MAILLAGE
+ # recuperer les infos du maillage sous format python
+ self.MApyt = MAIL_PY()
+ self.MApyt.FromAster(MAILLAGE)
+
+ def aster2epx(self,groups):
+
+ # initialisations du dic contenant les mailles de tria3 et quad4
+ dic_groups = {}
+ for cle in ['TRIA3','QUAD4']:
+ dic_groups[cle] = []
+ # placer les mailles dans le champ associe
+ for gr in groups:
+ mailles = self.MApyt.gma[string.rstrip(gr)]
+ for maille in mailles:
+ code_maille = self.MApyt.tm[maille]
+ type_maille = self.MApyt.nom[code_maille]
+ maille_initiale = string.rstrip(self.MApyt.correspondance_mailles[maille])
+ if not maille_initiale in dic_groups[type_maille] :
+ dic_groups[type_maille].append(maille_initiale)
+
+ # creer le mot-cle facteur permettant de creer les groupes de mailles associes au TRIA3 et QUAD4
+ crea_group_ma = []
+ # dictionnair contenant les noms des groups qui vont etre creer au besoin
+ nom_groups = {}
+ for cle in dic_groups.keys() :
+ if len(dic_groups[cle]) > 0 :
+ crea_group_ma.append({'MAILLE':dic_groups[cle],'NOM':cle})
+ nom_groups[cle] = [cle]
+ else:
+ nom_groups[cle] = []
+ # ce n'est pas necessaire de creer les group_ma si on n'a pas de quad4
+ if len(dic_groups['QUAD4']) >0:
+
+ #global DEFI_GROUP
+
+ DEFI_GROUP(reuse = self.MAILLAGE,
+ MAILLAGE = self.MAILLAGE,
+ CREA_GROUP_MA = crea_group_ma,
+ );
+
+ else :
+ # on affecte au TRIA les groupes deja fournis en argument
+ nom_groups['TRIA3'] = groups
+
+ return nom_groups
+
+#------------------------------------------------------------------------
+#----------------------------- FIN class DKT ----------------------------
+#------------------------------------------------------------------------
--- /dev/null
+#@ MODIF calc_fonction_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 copy
+import traceback
+
+
+def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
+ SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION,
+ ENVELOPPE,FRACTILE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
+ NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
+ PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC,
+ PROL_GAUCHE_FONC,INFO,**args):
+ """
+ Ecriture de la macro CALC_FONCTION
+ """
+ ier=0
+ from Cata_Utils.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \
+ FonctionError, ParametreError, InterpolationError, ProlongementError, enveloppe, fractile
+ from Utilitai import liss_enveloppe
+ from Macro.defi_inte_spec_ops import tocomplex
+ from Accas import _F
+ from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c
+ from Utilitai.Utmess import UTMESS
+ import aster_fonctions
+ EnumTypes = (list, tuple)
+
+ ### On importe les definitions des commandes a utiliser dans la macro
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+ IMPR_FONCTION = self.get_cmd('IMPR_FONCTION')
+ DEFI_NAPPE = self.get_cmd('DEFI_NAPPE')
+
+ ### Comptage commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('C_out',self.sd)
+
+ # éléments de contexte
+ ctxt = Context()
+ ### l'ensemble est dans un try/except pour recuperer les erreurs du module t_fonction
+ try:
+ ###
+ if (INTEGRE != None):
+ __ff=INTEGRE['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ if INTEGRE['METHODE']=='TRAPEZE' :
+ __ex=__ff.trapeze(INTEGRE['COEF'])
+ elif INTEGRE['METHODE']=='SIMPSON' :
+ __ex=__ff.simpson(INTEGRE['COEF'])
+ ###
+ if (DERIVE != None):
+ __ff=DERIVE['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ __ex=__ff.derive()
+ ###
+ if (INVERSE != None):
+ __ff=INVERSE['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ __ex=__ff.inverse()
+ ###
+ if (ABS != None):
+ __ff=ABS['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ __ex=__ff.abs()
+ ###
+ if (COMPOSE != None):
+ __ff=COMPOSE['FONC_RESU'].convert()
+ __fg=COMPOSE['FONC_PARA'].convert()
+ ctxt.f = [__ff.nom, __fg.nom]
+ __ex=__ff[__fg]
+ ###
+ if (ASSE != None):
+ __f0=ASSE['FONCTION'][0].convert()
+ __f1=ASSE['FONCTION'][1].convert()
+ ctxt.f = [__f0.nom, __f1.nom]
+ __ex=__f0.cat(__f1,ASSE['SURCHARGE'])
+ ###
+ if (COMB != None):
+ list_fonc=[]
+ if isinstance(self.sd,nappe_sdaster):
+ for mcfact in COMB :
+ list_fonc.append(mcfact['FONCTION'].convert())
+ ctxt.f = [f.nom for f in list_fonc]
+ list_fonc = homo_support_nappe(list_fonc)
+ elif isinstance(self.sd,fonction_sdaster):
+ for mcfact in COMB :
+ __ex=mcfact['FONCTION'].convert()
+ list_fonc.append(__ex)
+
+ __ex = 0.
+ for item, comb in zip(list_fonc, COMB):
+ ctxt.f = item.nom
+ __ex = item * comb['COEF'] + __ex
+ # on prend les paramètres de la 1ère fonction
+ __ex.para = copy.copy(list_fonc[0].para)
+ ###
+ if (COMB_C != None):
+ list_fonc=[]
+ if isinstance(self.sd,nappe_sdaster):
+ for mcfact in COMB_C:
+ list_fonc.append(mcfact['FONCTION'].convert())
+ ctxt.f = [f.nom for f in list_fonc]
+ list_fonc = homo_support_nappe(list_fonc)
+ elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c):
+ for mcfact in COMB_C :
+ __ex=mcfact['FONCTION'].convert(arg='complex')
+ list_fonc.append(__ex)
+
+ __ex = 0.
+ for item, comb in zip(list_fonc, COMB_C):
+ if comb['COEF_R'] != None:
+ coef = complex(comb['COEF_R'])
+ elif comb['COEF_C'] != None:
+ if type(comb['COEF_C']) in EnumTypes:
+ coef = tocomplex(comb['COEF_C'])
+ else:
+ coef = comb['COEF_C']
+ ctxt.f = item.nom
+ __ex = item * coef + __ex
+ # on prend les paramètres de la 1ère fonction
+ __ex.para = copy.copy(list_fonc[0].para)
+
+ ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C
+ if (COMB != None) or (COMB_C != None) :
+ if (args['LIST_PARA'] != None) :
+ __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs())
+ ###
+ if (PUISSANCE != None):
+ __ff=PUISSANCE['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ __ex=__ff
+ for i in range(PUISSANCE['EXPOSANT']-1):
+ __ex=__ex*__ff
+ ###
+ if (EXTRACTION != None):
+ if EXTRACTION['PARTIE']=='REEL':
+ __ex=EXTRACTION['FONCTION'].convert(arg='real')
+ if EXTRACTION['PARTIE']=='IMAG':
+ __ex=EXTRACTION['FONCTION'].convert(arg='imag')
+ if EXTRACTION['PARTIE']=='MODULE':
+ __ex=EXTRACTION['FONCTION'].convert(arg='modul')
+ if EXTRACTION['PARTIE']=='PHASE':
+ __ex=EXTRACTION['FONCTION'].convert(arg='phase')
+ ###
+ if (ENVELOPPE != None):
+ list_fonc=[]
+ l_env=ENVELOPPE['FONCTION']
+ if type(l_env) not in EnumTypes:
+ l_env=(l_env,)
+ if isinstance(self.sd,nappe_sdaster):
+ for f in l_env:
+ list_fonc.append(f.convert())
+ ctxt.f = [f.nom for f in list_fonc]
+ list_fonc = homo_support_nappe(list_fonc)
+ vale_para=list_fonc[0].vale_para
+ para =list_fonc[0].para
+ l_fonc_f =[]
+ for i in range(len(vale_para)):
+ __ff=list_fonc[0].l_fonc[i]
+ for nap in list_fonc[1:] :
+ ctxt.f = nap.l_fonc[i].nom
+ __ff=enveloppe([__ff,nap.l_fonc[i]], ENVELOPPE['CRITERE'])
+ l_fonc_f.append(__ff)
+ __ex=t_nappe(vale_para,l_fonc_f,para)
+ elif isinstance(self.sd,fonction_sdaster):
+ for f in l_env:
+ list_fonc.append(f.convert())
+ ctxt.f = [f.nom for f in list_fonc]
+ __ex = enveloppe(list_fonc, ENVELOPPE['CRITERE'])
+ ###
+ if (FRACTILE != None):
+ list_fonc=[]
+ l_frac=FRACTILE['FONCTION']
+ if type(l_frac) not in EnumTypes:
+ l_frac=(l_frac,)
+ if isinstance(self.sd,nappe_sdaster):
+ for f in l_frac:
+ list_fonc.append(f.convert())
+ ctxt.f = [f.nom for f in list_fonc]
+ list_fonc = homo_support_nappe(list_fonc)
+ vale_para=list_fonc[0].vale_para
+ para =list_fonc[0].para
+ l_fonc_f =[]
+ for i in range(len(vale_para)):
+ ctxt.f = [nap.l_fonc[i].nom for nap in list_fonc]
+ __ff=fractile([nap.l_fonc[i] for nap in list_fonc], FRACTILE['FRACT'])
+ l_fonc_f.append(__ff)
+ __ex=t_nappe(vale_para,l_fonc_f,para)
+ elif isinstance(self.sd,fonction_sdaster):
+ for f in l_frac:
+ list_fonc.append(f.convert())
+ __ex=list_fonc[0]
+ for f in list_fonc[1:]:
+ ctxt.f = [__ex.nom, f.nom]
+ __ex = fractile(list_fonc, FRACTILE['FRACT'])
+ ###
+ if (CORR_ACCE != None):
+ __ex=CORR_ACCE['FONCTION'].convert()
+ ctxt.f = __ex.nom
+ para=copy.copy(__ex.para)
+ # suppression de la tendance de l accelero
+ __ex=__ex.suppr_tend()
+ # calcul de la vitesse
+ __ex=__ex.trapeze(0.)
+ # calcul de la tendance de la vitesse : y = a1*x +a0
+ __ex=__ex.suppr_tend()
+ if CORR_ACCE['CORR_DEPL']=='OUI':
+ # suppression de la tendance deplacement
+ # calcul du deplacement : integration
+ __ex=__ex.trapeze(0.)
+ # calcul de la tendance du déplacement : y = a1*x +a0
+ __ex=__ex.suppr_tend()
+ # regeneration de la vitesse : derivation
+ __ex=__ex.derive()
+ # regeneration de l accelero : derivation
+ __ex=__ex.derive()
+ __ex.para=para
+ ###
+ if (FFT != None):
+ if isinstance(self.sd,fonction_c):
+ __ff=FFT['FONCTION'].convert()
+ ctxt.f = __ff.nom
+ __ex=__ff.fft(FFT['METHODE'])
+ if isinstance(self.sd,fonction_sdaster):
+ __ff=FFT['FONCTION'].convert(arg='complex')
+ ctxt.f = __ff.nom
+ __ex=__ff.fft(FFT['METHODE'],FFT['SYME'])
+ ###
+ if (SPEC_OSCI != None):
+ if SPEC_OSCI['AMOR_REDUIT']==None:
+ l_amor=[0.02, 0.05, 0.1]
+ UTMESS('I','FONCT0_31',valr=l_amor)
+ else:
+ if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes :
+ l_amor=[SPEC_OSCI['AMOR_REDUIT'],]
+ else:
+ l_amor= SPEC_OSCI['AMOR_REDUIT']
+ if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None:
+ l_freq=[]
+ for i in range(56):
+ l_freq.append( 0.2+0.050*i)
+ for i in range( 8):
+ l_freq.append( 3.0+0.075*i)
+ for i in range(14):
+ l_freq.append( 3.6+0.100*i)
+ for i in range(24):
+ l_freq.append( 5.0+0.125*i)
+ for i in range(28):
+ l_freq.append( 8.0+0.250*i)
+ for i in range( 6):
+ l_freq.append(15.0+0.500*i)
+ for i in range( 4):
+ l_freq.append(18.0+1.000*i)
+ for i in range(10):
+ l_freq.append(22.0+1.500*i)
+ texte=[]
+ for i in range(len(l_freq)/5) :
+ texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5]))
+ UTMESS('I','FONCT0_32',valk=os.linesep.join(texte))
+ elif SPEC_OSCI['LIST_FREQ']!=None:
+ l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs()
+ elif SPEC_OSCI['FREQ']!=None:
+ if type(SPEC_OSCI['FREQ']) not in EnumTypes:
+ l_freq=[SPEC_OSCI['FREQ'],]
+ else:
+ l_freq= SPEC_OSCI['FREQ']
+ if min(l_freq)<1.E-10 :
+ UTMESS('S','FONCT0_43')
+ if abs(SPEC_OSCI['NORME'])<1.E-10 :
+ UTMESS('S','FONCT0_33')
+ if SPEC_OSCI['NATURE_FONC']!='ACCE' :
+ UTMESS('S','FONCT0_34')
+ if SPEC_OSCI['METHODE']!='NIGAM' :
+ UTMESS('S','FONCT0_35')
+ eps=1.e-6
+ for amor in l_amor :
+ if amor>(1-eps) :
+ UTMESS('S','FONCT0_36')
+ __ff=SPEC_OSCI['FONCTION'].convert()
+ ctxt.f = __ff.nom
+
+ # appel à SPEC_OSCI
+ spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor)
+
+ # construction de la nappe
+ vale_para = l_amor
+ para = { 'INTERPOL' : ['LIN','LOG'],
+ 'NOM_PARA_FONC' : 'FREQ',
+ 'NOM_PARA' : 'AMOR',
+ 'PROL_DROITE' : 'EXCLU',
+ 'PROL_GAUCHE' : 'EXCLU',
+ 'NOM_RESU' : SPEC_OSCI['NATURE'] }
+ para_fonc = { 'INTERPOL' : ['LOG','LOG'],
+ 'NOM_PARA' : 'FREQ',
+ 'PROL_DROITE' : 'CONSTANT',
+ 'PROL_GAUCHE' : 'EXCLU',
+ 'NOM_RESU' : SPEC_OSCI['NATURE'] }
+ if SPEC_OSCI['NATURE']=='DEPL':
+ ideb = 0
+ elif SPEC_OSCI['NATURE']=='VITE':
+ ideb = 1
+ else:
+ ideb = 2
+ l_fonc = []
+ for iamor in range(len(l_amor)) :
+ l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc))
+ __ex=t_nappe(vale_para,l_fonc,para)
+ ###
+ if (LISS_ENVELOP!= None):
+ __ff=LISS_ENVELOP['NAPPE'].convert()
+ sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="")
+ sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS'])
+ para_fonc=__ff.l_fonc[0].para
+ l_fonc=[]
+ for val in sp_lisse.listTable:
+ l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc))
+ __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
+
+ except InterpolationError, msg:
+ UTMESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg)))
+ except ParametreError, msg:
+ UTMESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg)))
+ except ProlongementError, msg:
+ UTMESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg)))
+ except FonctionError, msg:
+ UTMESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc()))
+
+ ### creation de la fonction produite par appel à DEFI_FONCTION
+ ### on récupère les paramètres issus du calcul de __ex
+ ### et on les surcharge par ceux imposés par l'utilisateur
+
+ if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c):
+ para=__ex.para
+ if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA
+ if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU
+ if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE
+ if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE
+ if INTERPOL !=None : para['INTERPOL'] =INTERPOL
+ if isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul()
+ elif isinstance(__ex,t_fonction) : para['VALE'] = __ex.tabul()
+ C_out=DEFI_FONCTION(**para)
+ elif isinstance(__ex,t_nappe):
+ def_fonc=[]
+ for f in __ex.l_fonc :
+ para=f.para
+ def_fonc.append(_F(VALE =f.tabul(),
+ INTERPOL =f.para['INTERPOL'],
+ PROL_DROITE=f.para['PROL_DROITE'],
+ PROL_GAUCHE=f.para['PROL_GAUCHE'],))
+ para=__ex.para
+ if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA
+ if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU
+ if PROL_DROITE !=None : para['PROL_DROITE']=PROL_DROITE
+ if PROL_GAUCHE !=None : para['PROL_GAUCHE']=PROL_GAUCHE
+ if NOM_PARA_FONC !=None : para['NOM_PARA_FONC'] =INTERPOL
+ if INTERPOL_FONC !=None : para['INTERPOL'] =INTERPOL
+ C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para)
+ if INFO > 1:
+ IMPR_FONCTION(FORMAT='TABLEAU',
+ UNITE=6,
+ COURBE=_F(FONCTION=C_out),)
+ return ier
+
+
+
+class Context(object):
+ """Permet de stocker des éléments de contexte pour aider au
+ diagnostic lors de l'émission de message.
+ usage :
+ context = Context()
+ context.f = 'nomfon'
+ print context.f
+ """
+ def __init__(self):
+ self.__nomf = None
+
+ def get_val(self):
+ """Retourne le texte formatté.
+ """
+ nomf = self.__nomf
+ if type(nomf) not in (list, tuple):
+ nomf = [nomf,]
+ pluriel = ''
+ if len(nomf) > 1:
+ pluriel = 's'
+ try:
+ res = """Fonction%(s)s concernée%(s)s : %(nomf)s""" % {
+ 's' : pluriel,
+ 'nomf' : ', '.join(nomf),
+ }
+ except:
+ res = 'erreur de programmation !'
+ return res
+
+ def set_val(self, value):
+ self.__nomf = value
+
+ def del_val(self):
+ del self.__nomf
+
+ f = property(get_val, set_val, del_val, "")
--- /dev/null
+#@ AJOUT calc_miss_ops Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+
+
+def calc_miss_ops(self, OPTION, **kwargs):
+ """Macro CALC_MISS :
+ Préparation des données et exécution d'un calcul MISS3D
+ """
+ from Utilitai.Utmess import UTMESS, MessageError
+ from Miss.miss_utils import MISS_PARAMETER
+ from Miss.miss_calcul import CalculMissFactory
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # conteneur des paramètres du calcul
+ param = MISS_PARAMETER(initial_dir=os.getcwd(), **kwargs)
+
+ # création de l'objet CALCUL_MISS_xxx
+ option_calcul = "TOUT"
+ if OPTION["TOUT"] != "OUI":
+ option_calcul = OPTION["MODULE"]
+ calcul = CalculMissFactory(option_calcul, self, param)
+
+ try:
+ calcul.prepare_donnees()
+ calcul.execute()
+ calcul.post_traitement()
+ except MessageError, err:
+ UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+
--- /dev/null
+#@ MODIF calc_modal_ops Macro DATE 27/04/2009 AUTEUR NISTOR I.NISTOR
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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.
+# ======================================================================
+#-*- coding: iso-8859-1 -*-
+
+
+def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
+ SOLVEUR,CHARGE,INST,METHODE,CALC_FREQ, MODE_RIGIDE,
+ VERI_MODE,INFO,**args):
+ """
+ Ecriture de la macro CALC_MODAL
+ """
+ from Accas import _F
+ ier=0
+ from Utilitai.Utmess import UTMESS
+
+ # 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')
+ MODE_ITER_SIMULT =self.get_cmd('MODE_ITER_SIMULT')
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+
+ # on defini la liste des mots cle pour les appels aux CALC_MATR_ELEM
+ motsclece={}
+ if CHARGE != None: motsclece['CHARGE'] =CHARGE
+ if CHAM_MATER != None: motsclece['CHAM_MATER'] =CHAM_MATER
+ if CARA_ELEM != None: motsclece['CARA_ELEM'] =CARA_ELEM
+ if INST != None: motsclece['INST'] =INST
+
+ #c'est avec le mot cle AMORTISSEMENT qu'on decide si on calcule la matrice C
+ # d'amortissement
+
+
+ _a=CALC_MATR_ELEM(MODELE=MODELE, OPTION='RIGI_MECA', **motsclece)
+ _b=CALC_MATR_ELEM(MODELE=MODELE, OPTION='MASS_MECA', **motsclece)
+ if AMORTISSEMENT=='OUI':
+ _c=CALC_MATR_ELEM(MODELE=MODELE, OPTION='AMOR_MECA',
+ RIGI_MECA=_a, MASS_MECA=_b,**motsclece)
+
+ #on produit en local le concept NUME_DDL, il n'est pas visible pour l'utilisateur
+
+ # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+ methode=SOLVEUR['METHODE']
+ renum=SOLVEUR['RENUM']
+
+ _num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=INFO)
+
+ #assemblages des matrices
+ _rigas=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=_num)
+ _masas=ASSE_MATRICE(MATR_ELEM=_b,NUME_DDL=_num)
+ if AMORTISSEMENT=='OUI':
+ _amoras=ASSE_MATRICE(MATR_ELEM=_c,NUME_DDL=_num)
+
+ #lancement du calcul des modes propres
+ # on defini la liste des mots cle pour l'appel au MODE_ITER_SIMULT
+
+ motscit={}
+ motscfa={}
+
+ 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']
+ elif METHODE=='QZ':
+ if args.has_key('TYPE_QZ'):
+ motscit['TYPE_QZ'] =args['TYPE_QZ']
+
+ 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['OPTION']=='PLUS_PETITE':
+ motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
+
+ if CALC_FREQ['OPTION']=='CENTRE':
+ motscfa['FREQ']=CALC_FREQ['FREQ']
+ if CALC_FREQ['AMOR_REDUIT']: motscfa['AMOR_REDUIT']=CALC_FREQ['AMOR_REDUIT']
+ motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
+
+ if CALC_FREQ['OPTION']=='BANDE':
+ motscfa['FREQ']=CALC_FREQ['FREQ']
+
+ motscit['CALC_FREQ'] = _F(OPTION =CALC_FREQ['OPTION'],
+ 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'],
+ APPROCHE =CALC_FREQ['APPROCHE'],
+ **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 MODE_RIGIDE=='OUI':
+ mode_rigi='MODE_RIGIDE'
+ elif MODE_RIGIDE=='NON':
+ mode_rigi='SANS'
+
+ self.DeclareOut('modes',self.sd)
+
+ if AMORTISSEMENT=='NON':
+ modes=MODE_ITER_SIMULT(MATR_A =_rigas,
+ MATR_B =_masas,
+ METHODE =METHODE,
+ OPTION =mode_rigi,
+ INFO =INFO,
+ **motscit)
+ elif AMORTISSEMENT=='OUI':
+ modes=MODE_ITER_SIMULT(MATR_A =_rigas,
+ MATR_B =_masas,
+ MATR_C =_amoras,
+ METHODE =METHODE,
+ OPTION =mode_rigi,
+ INFO =INFO,
+ **motscit)
+
+ return ier
--- /dev/null
+#@ MODIF calc_mode_rotation_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 Mohamed TORKHANI
+
+from Accas import _F
+from types import ListType, TupleType
+
+
+def calc_mode_rotation_ops(self,MATR_A, MATR_B, MATR_AMOR, MATR_GYRO,
+ VITE_ROTA,METHODE,CALC_FREQ,VERI_MODE,**args):
+# Macro pour calculer les frequences et modes en fonction des vitesses de rotation
+# MATR_A, matrice de raideur
+# MATR_B, matrice de masse
+# MATR_AMOR, matrice d'amortissement
+# MATR_GYRO, matrice de gyroscopie
+# VITE_ROTA, liste de vitesses de rotation
+# METHODE, methode de calcul, QZ par defaut ou SORENSEN
+# CALC_FREQ
+# VERI_MODE
+ from Utilitai.Table import Table
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ MODE_ITER_SIMULT =self.get_cmd('MODE_ITER_SIMULT')
+ COMB_MATR_ASSE =self.get_cmd('COMB_MATR_ASSE')
+ IMPR_RESU =self.get_cmd('IMPR_RESU')
+ DETRUIRE =self.get_cmd('DETRUIRE')
+ CREA_TABLE =self.get_cmd('CREA_TABLE')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ motscit={}
+ if METHODE=='QZ':
+ motscit['CALC_FREQ']=_F(OPTION ='PLUS_PETITE',
+ NMAX_FREQ =CALC_FREQ['NMAX_FREQ'])
+
+ if METHODE=='SORENSEN':
+ motscit['CALC_FREQ']=_F(OPTION ='CENTRE',
+ NMAX_FREQ =CALC_FREQ['NMAX_FREQ'],
+ FREQ =CALC_FREQ['FREQ'])
+
+ motscit['VERI_MODE']=_F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
+ SEUIL =VERI_MODE['SEUIL'],
+ STURM =VERI_MODE['STURM'],
+ PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
+
+
+ self.DeclareOut('tab_out',self.sd)
+
+ NBV=len(VITE_ROTA);
+
+ _mod=[None]*NBV;
+
+ tab=Table()
+ for ii in range(0,NBV):
+ OM=VITE_ROTA[ii]
+ nom = 'OM_'+str(ii)
+
+ # ----------------------------------
+ # Ajout des effets gyroscopiques w*G
+ # dans la matrice d amortissement C
+ # ----------------------------------
+
+
+ GYOM=COMB_MATR_ASSE(COMB_R=(_F(MATR_ASSE=MATR_GYRO, COEF_R=OM,),
+ _F(MATR_ASSE=MATR_AMOR, COEF_R=1.,),))
+
+ _mod[ii]=MODE_ITER_SIMULT(MATR_A=MATR_A,
+ MATR_B=MATR_B,
+ MATR_C=GYOM,
+ METHODE=METHODE,
+ **motscit)
+
+ DETRUIRE(CONCEPT=_F(NOM=GYOM),INFO=1,)
+ tab.append({'NUME_VITE' : ii, 'VITE_ROTA' : OM, 'NOM_OBJET': 'MODE_MECA', 'TYPE_OBJET': 'MODE_MECA', 'NOM_SD' : _mod[ii].nom})
+
+ motcles=tab.dict_CREA_TABLE()
+ tab_out=CREA_TABLE(TYPE_TABLE = 'TABLE_CONTENEUR', **motcles);
+ return ier
--- /dev/null
+#@ MODIF calc_precont_ops Macro DATE 23/03/2010 AUTEUR COURTOIS 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 ASSIRE A.ASSIRE
+
+def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
+ CABLE_BP,CABLE_BP_INACTIF,
+ COMP_INCR,ETAT_INIT,NEWTON,RECH_LINEAIRE,
+ CONVERGENCE,INCREMENT,SOLVEUR,
+ INFO,TITRE,**args):
+
+
+ """
+ Ecriture de la macro CALC_PRECONT
+ """
+ import copy
+ import aster
+ import string
+ import types
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ AFFE_MODELE = self.get_cmd('AFFE_MODELE')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA')
+ DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+ STAT_NON_LINE = self.get_cmd('STAT_NON_LINE')
+ CALC_NO = self.get_cmd('CALC_NO')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+ RECU_TABLE = self.get_cmd('RECU_TABLE')
+ DEFI_MATERIAU = self.get_cmd('DEFI_MATERIAU')
+ AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type evol_noli) est nomme RES dans
+ # le contexte de la macro
+
+ self.DeclareOut('RES',self.sd)
+
+ # -------------------------------------------------------------
+ # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE
+ # ------------------------------------------------------------
+
+
+ # 1.1 Recuperation de la liste d'instants, de l'instant initial et final
+ # Creation de la nouvelle liste d'instants
+ # ----------------------------------------------------------
+
+ dIncrement=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
+
+ __prec = dIncrement['PRECISION']
+ __L0 = dIncrement['LIST_INST']
+ __L1 = __L0.Valeurs()
+
+ # Traitement de l'etat initial
+ if ETAT_INIT:
+ dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+ for i in dEtatInit.keys():
+ if dEtatInit[i]==None : del dEtatInit[i]
+
+ __EVINIT = dEtatInit['EVOL_NOLI']
+ else :
+ dEtatInit=None
+
+ # Teste si INST_INIT est donné ou bien recalcule __TMIN
+ if dIncrement['INST_INIT'] == None:
+ if self.reuse == None:
+ __TMIN = __L1[0]
+ else:
+ __dico = __EVINIT.LIST_VARI_ACCES()
+ __TMIN = __dico['INST'][-1]
+ else:
+ __TMIN = dIncrement['INST_INIT']
+
+ # Teste si INST_FIN est donné ou bien recalcule __TMAX
+ if dIncrement['INST_FIN'] == None:
+ __TMAX = __L1[-1]
+ else:
+ __TMAX = dIncrement['INST_FIN']
+
+ # Teste si INST_INIT est bien plus petit que INST_FIN
+ if __TMAX <= __TMIN:
+ UTMESS('F','CABLE0_1')
+
+ # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant
+ # un instant supplementaire __TINT
+ __L2=[]
+ for m in __L1:
+ if m>=__TMIN and m<=__TMAX:
+ __L2.append(m)
+
+ __TINT = (9.*__L2[-1] + __L2[-2])/10.
+ __L2[-1:-1] = [__TINT]
+
+ # __LST0 est la liste d'instants utilisée pour l'etape 1
+ __LST0=DEFI_LIST_REEL( DEBUT = __TMIN,
+ INTERVALLE = _F(JUSQU_A = __TMAX, NOMBRE = 1),)
+
+ # __LST et __FCT sont utilisés pour les etapes 2 et 3
+ __LST=DEFI_LIST_REEL(VALE=__L2,);
+ __FCT=DEFI_FONCTION(INTERPOL=('LIN','LIN'),
+ NOM_PARA='INST',
+ VALE=(__TMIN,0.0,__TINT,1.0,__TMAX,1.0),);
+
+ for i in dIncrement.keys():
+ if dIncrement[i]==None : del dIncrement[i]
+ dIncrement['LIST_INST']= __LST
+ dIncrement['INST_FIN'] = __TINT
+
+
+
+ # 1.2 Recuperation des parametres pour STAT_NON_LINE
+ # -------------------------------------------------------
+
+ dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+ for i in dNewton.keys():
+ if dNewton[i]==None : del dNewton[i]
+
+ dConvergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dConvergence.keys():
+ if dConvergence[i]==None : del dConvergence[i]
+
+ dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+ for i in dSolveur.keys():
+ if dSolveur[i]==None : del dSolveur[i]
+
+ if RECH_LINEAIRE:
+ dRech_lin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
+ for i in dRech_lin.keys():
+ if dRech_lin[i]==None : del dRech_lin[i]
+ else :
+ dRech_lin=None
+
+
+ # 1.3 Creation des mots-cles pour les 3 AFFE_CHAR_MECA
+ # Recuperation des cables dans les concepts CABLE_BP
+ # et CABLE_BP_INACTIF
+ # ------------------------------------------------------
+ if type(CABLE_BP) is not types.NoneType:
+ if type(CABLE_BP) is not types.TupleType:
+ CABLE_BP0 = CABLE_BP
+ CABLE_BP = []
+ CABLE_BP.append ( CABLE_BP0 )
+
+ if type(CABLE_BP_INACTIF) is not types.NoneType:
+ if type(CABLE_BP_INACTIF) is not types.TupleType:
+ CABLE_BP_INACTIF0 = CABLE_BP_INACTIF
+ CABLE_BP_INACTIF = []
+ CABLE_BP_INACTIF.append ( CABLE_BP_INACTIF0 )
+
+ motscles={}
+ motscles['RELA_CINE_BP']=[]
+ motscle2={}
+ motscle2['RELA_CINE_BP']=[]
+ motscle3={}
+ motscle3['RELA_CINE_BP']=[]
+ __GROUP_MA_A=[]
+ Result = [[None]*1]
+ for mcabl in CABLE_BP:
+ # Creation de mots-cles pour les AFFE_CHAR_MECA
+ motscles['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+ SIGM_BPEL = 'OUI',
+ RELA_CINE = 'NON',) )
+ motscle2['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+ SIGM_BPEL = 'NON',
+ RELA_CINE = 'OUI',) )
+ motscle3['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+ SIGM_BPEL = 'OUI',
+ RELA_CINE = 'OUI',) )
+
+ # Creation de __GROUP_MA_A : liste des noms des cables contenus
+ # dans chaque concept CABLE_BP = cables a activer
+ __TCAB = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
+ __nb = 0
+ while 1:
+ try:
+ Result[__nb][0] = __TCAB['NOM_CABLE',__nb+1]
+ __CAB = __TCAB['NOM_CABLE',__nb+1]
+ if __nb == 0:
+ __GROUP_MA_A.append(__CAB)
+ else:
+ i = 0
+ # enlève les doublons
+ for m in __GROUP_MA_A:
+ i=i+1
+ if __CAB == m:
+ break
+ if i == len(__GROUP_MA_A):
+ __GROUP_MA_A.append(__CAB)
+
+ __nb = __nb + 1
+ Result.append([None]*1)
+ # Si on a lu toutes les valeurs alors on sort de la boucle
+ except KeyError:
+ break
+
+ # Creation de __GROUP_MA_I : liste des noms des cables contenus
+ # dans chaque CABLE_BP_INACTIF
+ # __GROUP_MA_CABLE = liste des cables actifs et inactifs
+ Result = [[None]*1]
+ __GROUP_MA_I=[]
+
+ if CABLE_BP_INACTIF:
+ for mcabl in CABLE_BP_INACTIF:
+ __TCA0 = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
+ __nb = 0
+ while 1:
+ try:
+ Result[__nb][0] = __TCA0['NOM_CABLE',__nb+1]
+ __CA0 = __TCA0['NOM_CABLE',__nb+1]
+ if __nb == 0:
+ __GROUP_MA_I.append(__CA0)
+ else:
+ i = 0
+ # enlève les doublons
+ for m in __GROUP_MA_I:
+ i=i+1
+ if __CA0 == m:
+ break
+ if i == len(__GROUP_MA_I):
+ __GROUP_MA_I.append(__CA0)
+
+ __nb = __nb + 1
+ Result.append([None]*1)
+ # Si on a lu toutes les valeurs alors on sort de la boucle
+ except KeyError:
+ break
+ motscle6={}
+ motscle6['RELA_CINE_BP']=[]
+ for mcabl in CABLE_BP_INACTIF:
+ # Creation de mots-cles pour les AFFE_CHAR_MECA
+ motscle6['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+ SIGM_BPEL = 'NON',
+ RELA_CINE = 'OUI',) )
+
+ __GROUP_MA_CABLES = __GROUP_MA_A + __GROUP_MA_I
+
+
+ # 1.4 Creation des mots-clés facteurs COMP_INCR
+ # pour étape 2 (dComp_incr0) et étape 3 (dComp_incr1)
+ # ------------------------------------------------------
+
+ dComp_incr=[]
+ for j in COMP_INCR :
+ dComp_incr.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dComp_incr[-1].keys():
+ if dComp_incr[-1][i]==None : del dComp_incr[-1][i]
+
+ PARM_THETA=0.
+ for j in range(len(COMP_INCR)) :
+ if dComp_incr[j]['RELATION'] == 'ELAS':
+ PARM_THETA=dComp_incr[j]['PARM_THETA']
+
+ if PARM_THETA == 0:
+ PARM_THETA=dComp_incr[0]['PARM_THETA']
+
+ dComp_incr0=copy.copy(dComp_incr)
+ dComp_incr1=copy.copy(dComp_incr)
+
+ dComp_incr0.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_CABLES,) )
+ if __GROUP_MA_I:
+ dComp_incr1.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_I,) )
+
+
+ # 1.5 Modele contenant uniquement les cables de precontrainte
+ # ---------------------------------------------------------
+
+ __MOD = string.ljust(MODELE.nom,8)
+ __MOD =__MOD+'.MODELE .LGRF '
+ __LMAIL = aster.getvectjev(__MOD)
+ __MAIL = string.strip(__LMAIL[0])
+
+ objma=self.get_sd_avant_etape(__MAIL,self)
+
+ __M_CA=AFFE_MODELE( MAILLAGE=objma,
+ AFFE =_F( GROUP_MA = __GROUP_MA_A,
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'BARRE') )
+
+
+ # 1.6 Blocage de tous les noeuds des cables actifs
+ # --------------------------------------------------
+
+ _B_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
+ DDL_IMPO= _F( GROUP_MA = __GROUP_MA_A,
+ DX = 0.,
+ DY = 0.,
+ DZ = 0.),)
+
+
+ # 1.7 Chargements concernant les cables
+ # -------------------------------------
+ _C_CN=AFFE_CHAR_MECA(MODELE=__M_CA,**motscles)
+ _C_CA=AFFE_CHAR_MECA(MODELE=MODELE,**motscle2)
+ _C_CT=AFFE_CHAR_MECA(MODELE=MODELE,**motscle3)
+ if CABLE_BP_INACTIF:
+ _C_CI=AFFE_CHAR_MECA(MODELE=MODELE,**motscle6)
+
+
+
+ # -------------------------------------------------------------
+ # 2. CALCULS
+ # ------------------------------------------------------------
+
+
+ #-------------------------------------------------------------------
+ # 2.1 Premiere etape : calcul sur le(s) cable(s) et
+ # recuperation des _F_CAs aux noeuds
+ # on travaile entre tmin et tmax
+ #-------------------------------------------------------------------
+
+ __EV1=STAT_NON_LINE(
+ MODELE = __M_CA,
+ CHAM_MATER = CHAM_MATER,
+ CARA_ELEM = CARA_ELEM,
+ EXCIT =(_F(CHARGE = _B_CA),
+ _F(CHARGE = _C_CN),),
+ COMP_INCR =_F( RELATION = 'ELAS',
+ DEFORMATION = 'PETIT',
+ PARM_THETA = PARM_THETA,
+ TOUT = 'OUI'),
+ INCREMENT =_F(LIST_INST = __LST0,
+ PRECISION = __prec),
+ SOLVEUR = dSolveur,
+ INFO =INFO,
+ TITRE = TITRE, )
+
+ __EV1 = CALC_NO( reuse = __EV1,
+ RESULTAT = __EV1,
+ GROUP_MA = __GROUP_MA_A,
+ OPTION = 'FORC_NODA' )
+
+ __REA = CREA_CHAMP (
+ TYPE_CHAM = 'NOEU_DEPL_R',
+ OPERATION = 'EXTR',
+ RESULTAT = __EV1,
+ NOM_CHAM = 'FORC_NODA',
+ INST = __TMAX);
+
+ __REAC = CREA_CHAMP (TYPE_CHAM='NOEU_DEPL_R',
+ OPERATION = 'ASSE',
+ MODELE = MODELE,
+ ASSE= _F(GROUP_MA=__GROUP_MA_A,
+ CHAM_GD=__REA,
+ COEF_R = -1.), )
+
+ _F_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
+ VECT_ASSE = __REAC )
+
+
+
+ #-----------------------------------------------------------------------
+ # 2.2 Deuxieme etape : application de la precontrainte sur le beton
+ # en desactivant les cables
+ #-----------------------------------------------------------------------
+
+ # Regeneration des mots-cles EXCIT passés en argument de la macro
+ dExcit=[]
+ for j in EXCIT :
+ dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dExcit[-1].keys():
+ if dExcit[-1][i]==None : del dExcit[-1][i]
+
+ if CABLE_BP_INACTIF:
+ dExcit.append(_F(CHARGE=_C_CI),)
+
+ # Creation du mots-cle EXCIT pour le STAT_NON_LINE
+ dExcit1=copy.copy(dExcit)
+ dExcit1.append(_F(CHARGE=_C_CA),)
+ dExcit1.append(_F(CHARGE = _F_CA,
+ FONC_MULT=__FCT ),)
+
+ motscle4={}
+ if self.reuse:
+ motscle4['reuse'] = self.reuse
+
+ RES=STAT_NON_LINE(
+ MODELE =MODELE,
+ CARA_ELEM =CARA_ELEM,
+ CHAM_MATER = CHAM_MATER,
+ COMP_INCR=dComp_incr0,
+ INCREMENT=dIncrement,
+ ETAT_INIT = dEtatInit,
+ NEWTON =dNewton,
+ CONVERGENCE=dConvergence,
+ RECH_LINEAIRE = dRech_lin,
+ SOLVEUR = dSolveur,
+ ARCHIVAGE = _F(INST = __TINT),
+ INFO =INFO,
+ TITRE = TITRE,
+ EXCIT = dExcit1,
+ **motscle4)
+
+ # Recuperation du dernier numero d'ordre pour pouvoir l'écraser dans RES
+ __dico2 = RES.LIST_VARI_ACCES()
+ __no = __dico2['NUME_ORDRE'][-1]
+
+
+ #-----------------------------------------------------------------------
+ # 2.2 Troisieme etape : on remet la tension dans les cables
+ #-----------------------------------------------------------------------
+
+ # Creation du mots-cles EXCIT pour le STAT_NON_LINE
+ dExcit2=copy.copy(dExcit)
+ dExcit2.append(_F(CHARGE=_C_CT,) )
+
+ # Calcul sur un seul pas (de __TINT a __TMAX)
+ RES=STAT_NON_LINE( reuse = RES,
+ ETAT_INIT = _F(EVOL_NOLI =RES),
+ MODELE = MODELE,
+ CHAM_MATER = CHAM_MATER,
+ CARA_ELEM = CARA_ELEM,
+ COMP_INCR=dComp_incr1,
+ INCREMENT=_F(LIST_INST = __LST,
+ PRECISION = __prec),
+ NEWTON =dNewton,
+ RECH_LINEAIRE = dRech_lin,
+ CONVERGENCE=dConvergence,
+ SOLVEUR = dSolveur,
+ ARCHIVAGE = _F(NUME_INIT = __no,
+ DETR_NUME_SUIV = 'OUI' ),
+ INFO =INFO,
+ TITRE = TITRE,
+ EXCIT =dExcit2,
+ )
+
+ return ier
+
--- /dev/null
+#@ MODIF calc_spec_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 copy
+import types
+from SD.sd_fonction import sd_fonction
+
+# -----------------------------------------------------------------------------
+class FonctionError(Exception): pass
+class ParametreError(FonctionError): pass # probleme de NOM_PARA
+class InterpolationError(FonctionError): pass
+class ProlongementError(FonctionError): pass
+
+# -----------------------------------------------------------------------------
+
+
+def calc_spec_ops(self,TAB_ECHANT,ECHANT,INTERSPE,TRANSFERT,TITRE,INFO,**args):
+# ------------------------------------------------------------------
+# Calcul d'une matrice interspectrale
+# a partir de fonctions reelles
+
+ import aster
+ from types import ListType, TupleType
+ EnumTypes = (ListType, TupleType)
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ import numpy
+ import numpy.fft as FFT
+
+ commande='CALC_SPEC'
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou derive) est tab
+ self.DeclareOut('tabout', self.sd)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+
+#--- Verifications sur les entrees --#
+
+ if (ECHANT==None and TAB_ECHANT==None) :
+ raise FonctionError, 'Vous devez specifier des fonctions en entree'
+
+ if TAB_ECHANT==None : TAB_ECHANT=[]
+ if ECHANT==None : ECHANT=[]
+ if INTERSPE==None : INTERSPE=[]
+ if TRANSFERT==None : TRANSFERT=[]
+ if len(TAB_ECHANT)*len(ECHANT) !=0 :
+ raise FonctionError, 'Vous pouvez specifier une table_fonction ou' + ' une liste de fonctions en entree, mais pas les deux'
+ if len(TRANSFERT)*len(INTERSPE) !=0 :
+ raise FonctionError, 'Vous ne pouvez specifier qu' +"'"+'un type de calcul par appel'
+
+
+
+#-- Recuperation des entrees --#
+
+ l_f=[]
+ l_t=[]
+ l_G=[]
+ l_H=[]
+# for occ in TAB_ECHANT :
+# l_t.append(('TAB_ECHANT',occ))
+ if TAB_ECHANT: #MC
+ l_t = TAB_ECHANT.List_F()[0]
+
+ for occ in ECHANT :
+ l_f.append(('ECHANT',occ))
+ for occ in INTERSPE :
+ l_G.append(('INTERSPE',occ))
+ for occ in TRANSFERT :
+ l_H.append(('TRANSFERT',occ))
+
+
+# Pour dimensionner les fenetres :
+# Cas ECHANT : on recupere simplement la premiere fonction
+# Cas_TAB_ECHANT : on recupere toutes les fonctions
+
+ if len(l_f) >0 :
+ vale_sig=l_f[0][1]['FONCTION'].Valeurs();
+ l_ech=len(vale_sig[0])
+ dt=vale_sig[0][1]-vale_sig[0][0]
+ print "test : l_ech = ", l_ech
+ else :
+ #tab_ast=l_t[0][1]['NOM_TAB'];
+ tab_ast=l_t['NOM_TAB'] #MC
+ tab_py=tab_ast.EXTR_TABLE();
+
+ nom_fonc= tab_py['FONCTION'].values()['FONCTION']
+ fonc_py = [sd_fonction(fonc) for fonc in nom_fonc]
+ temp=fonc_py[0].VALE.get();
+ dt=temp[1]-temp[0];
+
+ l_ech_temp=l_t['LONGUEUR_ECH'];
+ recouvr_temp=l_t['RECOUVREMENT'];
+
+ l_ech_t=[l_ech_temp[0]['DUREE'] , l_ech_temp[0]['POURCENT'],l_ech_temp[0]['NB_PTS'] ];
+ recouvr_t=[recouvr_temp[0]['DUREE'] , recouvr_temp[0]['POURCENT'],recouvr_temp[0]['NB_PTS'] ];
+
+ if l_ech_t.count(None)==3 : l_ech=len(temp)/2;
+ if recouvr_t.count(None)==3 : recouvr=0;
+ if l_ech_t.count(None)<2 :
+ raise FonctionError, 'Vous ne pouvez utiliser qu'+"'"+ 'un mot clef pour definir la longueur des echantillons'
+ if recouvr_t.count(None)<2 :
+ raise FonctionError, 'Vous ne pouvez utiliser qu'+"'"+'un mot clef pour definir la longueur de recouvrement des echantillons'
+ for i1 in range(3) :
+ if l_ech_t[i1] !=None :
+ if i1 == 0 :
+ l_ech=int(numpy.floor(l_ech_t[i1]/dt));
+ elif i1 == 1 :
+ l_ech=int(numpy.floor((len(temp)/2)*l_ech_t[i1]*0.01));
+ elif i1 == 2 :
+ l_ech=int(numpy.floor(l_ech_t[i1]))
+ if l_ech > len(temp)/2 :
+ raise FonctionError, 'Vous devez specifier une longueur d'+"'"+'echantillon inferieure a la longueur totale de l'+"'"+'acquisition'
+ for i1 in range(3) :
+ if recouvr_t[i1] !=None :
+ if i1 == 0 :
+ recouvr=int(numpy.floor(recouvr_t[i1]/dt));
+ elif i1 == 1 :
+ recouvr=int(numpy.floor((l_ech)*recouvr_t[i1]*0.01));
+ elif i1 == 2 :
+ recouvr=int(numpy.floor(recouvr_t[i1]))
+ if recouvr > l_ech :
+ raise FonctionError, 'La longueur de recouvrement ne peut exceder la longueur '
+ print "test2 : l_ech = ", l_ech
+
+#-- Recuperation des fenetres
+
+
+ for occ in l_G+l_H :
+ if occ[1]['FENETRE'] == 'RECT' :
+ fene=[1.]*l_ech
+ elif occ[1]['FENETRE'] == 'HAMM' :
+ fene=[0.54-0.46*numpy.cos(2*numpy.pi*i1/(l_ech-1)) for i1 in range(l_ech)]
+ elif occ[1]['FENETRE'] == 'HANN' :
+ fene=[0.5-0.5*numpy.cos(2*numpy.pi*i1/(l_ech-1)) for i1 in range(l_ech)]
+ elif occ[1]['FENETRE'] == 'EXPO' :
+ para=occ[1]['DEFI_FENE']
+ if len(para) != 2 :
+ raise FonctionError, 'Erreur de taille dans DEFI_FENE : ' + 'la fenetre exponentielle est definie par exactement deux valeurs'
+ fene=[1.]*int(para[0])+[numpy.exp(para[1]*(i1-int(para[0]-1))*dt) for i1 in range(int(para[0]),l_ech)]
+ elif occ[1]['FENETRE'] == 'PART' :
+ fene=occ[1]['DEFI_FENE']
+ if len(fene) != l_ech :
+ raise FonctionError, 'Erreur de taille dans DEFI_FENE : ' + 'La fenetre doit etre definie avec le meme nombre de points que les echantillons'
+
+ # normalisation de la fenetre
+ fene=numpy.divide(fene,numpy.sqrt(numpy.sum(numpy.multiply(fene,fene)))).tolist()
+
+ if len(TRANSFERT)+len(INTERSPE) == 0 : #-- on ne rentre rien : interspectre par defaut - fenetre rectangulaire
+ fene=[1.]*l_ech
+ INTERSPE=1.;
+
+
+#-- Recuperation des signaux --#
+#-- Verifications et transformations de Fourier --#
+#-- Entrees sous formes de table --#
+
+ tmp=[];
+ lt=[];
+ frq=[];
+ fft=[];
+ df=[];
+ num_ord=[];
+ num_mes=[];
+
+
+ if TAB_ECHANT : # Cas TAB_ECHANT
+ num_mes_temp= tab_py['NUME_MES'].values()['NUME_MES']
+ max_mes=numpy.maximum.reduce(num_mes_temp);
+ num_ord_temp= tab_py['NUME_ORDRE_I'].values()['NUME_ORDRE_I']
+ long_fonc=[len(fonc_py[i1].VALE.get()) for i1 in range(len(fonc_py))]
+
+ N_fen=int(numpy.floor((numpy.minimum.reduce(long_fonc)/2-l_ech)/(l_ech-recouvr))+1)
+
+ sig=[];
+ dt=[];
+ for i1 in range(len(fonc_py)) :
+ vale=fonc_py[i1].VALE.get();
+ temp=(list(vale[0:int(len(vale)/2)]));
+ sig.append(list(vale[int(len(vale)/2):]));
+ test_pas=numpy.subtract(temp[1:],temp[0:-1])
+ crit=test_pas.tolist();
+ crit.sort();
+ dt.append(crit[-1]);
+ if abs((crit[-1]-crit[0])/crit[-1]) > 1.e-5 :
+ raise FonctionError, 'L'+"'"+'echantillonage doit etre fait a pas constant'
+
+ for j1 in range(N_fen) :
+ for i1 in range(len(fonc_py)) :
+ fft.append(FFT.fft(numpy.multiply(sig[i1][j1*(l_ech-recouvr):(j1*(l_ech-recouvr)+l_ech)],fene)))
+ if j1 == 0 : df.append(1./(dt[i1])/l_ech);
+ num_mes.append(num_mes_temp[i1]+max_mes*j1);
+ num_ord.append(num_ord_temp[i1]);
+
+ if len(df)>1 :
+ test_df=numpy.subtract(df[1:],df[0:-1])
+ test_df=test_df.tolist();
+ test_df.sort();
+ if abs(test_df[-1]) > 1.e-5 :
+ raise FonctionError, 'Toutes les fonctions doivent etre definies ' + 'avec la meme frequence d'+"'"+'echantillonage'
+
+ frq = [df[-1]*i1 for i1 in range(l_ech)]
+
+
+#-- Recuperation des signaux --#
+#-- Verifications et transformations de Fourier --#
+#-- Entrees sous formes de fonction --#
+
+ if ECHANT:
+ for occ in l_f :
+ vale_sig=occ[1]['FONCTION'].Valeurs();
+ #-- pour les tests ulterieurs --#
+ lt.append(len(vale_sig[0]))
+ if len(vale_sig[0]) != len(vale_sig[1]) :
+ raise FonctionError, 'Les vecteurs associes au temps '+'et aux echantillons doivent etre de meme longueur'
+ num_mes.append(occ[1]['NUME_MES'])
+ num_ord.append(occ[1]['NUME_ORDRE_I'])
+
+ tmp.append(vale_sig[0])
+ test_pas=numpy.subtract(vale_sig[0][1:],vale_sig[0][0:-1])
+ crit=test_pas.tolist();
+ crit.sort();
+ if abs((crit[-1]-crit[0])/crit[-1]) > 1.e-5 :
+ raise FonctionError, 'L'+"'"+'echantillonage doit etre fait a pas constant'
+ print "vale_sig[1]= ", len(vale_sig[1]), vale_sig[1]
+ print " fene = ",len(fene), fene
+ fft.append(FFT.fft(numpy.multiply(vale_sig[1],fene)))
+ df.append(1./(crit[-1])/len(vale_sig[0]));
+
+
+ #-- Verification des longueurs --#
+
+ test_long=numpy.subtract(lt[1:],lt[0:-1])
+ test_long=test_long.tolist();
+ test_long.sort();
+ if (test_long[-1]-test_long[0]) != 0 :
+ raise FonctionError, 'Toutes les fonctions doivent etre definies avec le meme nombre de points'
+
+ if len(df) > 1 :
+ test_df=numpy.subtract(df[1:],df[0:-1])
+ test_df=test_df.tolist();
+ test_df.sort();
+ if abs(test_df[-1]) > 1.e-5 :
+ raise FonctionError, 'Toutes les fonctions doivent etre definies '+'avec la meme frequence d'+"'"+'echantillonage'
+
+ frq = [df[-1]*i1 for i1 in range(lt[-1])]
+
+
+#-- index des numeros d'ordre pour le moyennage
+
+ uu=[];
+ vv=[];
+ uu=uu+num_ord;
+ vv=vv+num_ord;
+ uu.sort();
+ ind_ord=[];
+ list_ord=[];
+ while len(uu) > 0 :
+ list_ord.append(uu[0])
+ tt=[];
+ for i1 in range(uu.count(uu[0])) :
+ tt.append(vv.index(uu[0]))
+ vv[tt[-1]]=0
+ ind_ord.append(tt)
+ uu=uu[int(uu.count(uu[0])):]
+
+#-- Calcul de la matrice inter spectrale
+
+ if len(INTERSPE) != 0 :
+ nb_ord = len(list_ord)
+ dimh = (nb_ord*(nb_ord+1))/2
+ l_fc=[];
+ nume_i1=[]
+ nume_j1=[]
+
+ for i1 in range(nb_ord) :
+ for j1 in range(i1,nb_ord) :
+ #-- on ne calcule les spectres que pour des numeros de mesures correspondants
+ #-- Ca n'a a priori pas de sens de calculer l'interspectre entre deux signaux acquis a des instants differents
+ #-- Par contre, on peut moyenner deux interspectres obtenus a des instants differents, sous reserve
+ #-- de stationnarite et d'ergodicite du signal
+ mes_i1=[num_mes[k1] for k1 in ind_ord[i1]]
+ mes_j1=[num_mes[k1] for k1 in ind_ord[j1]]
+ ind_mes=[];
+ #-- recuperation des indices des fft a prendre en compte pour l'interspectre
+ for k1 in range(len(mes_i1)) :
+ if mes_i1[k1] in mes_j1 :
+ ind_mes.append([ind_ord[i1][k1],
+ ind_ord[j1][mes_j1.index(mes_i1[k1])]])
+
+ #-- Calcul des interspectres
+ dsp=[0.j]*l_ech;
+ if len(ind_mes) > 0 :
+ for l1 in range(len(ind_mes)) :
+ dsp_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][0]]),fft[ind_mes[l1][1]])
+ dsp_t=numpy.divide(dsp_t,l_ech*len(ind_mes))
+ dsp=numpy.add(dsp,dsp_t)
+ dsp=dsp.tolist();
+ dsp_r=[];
+
+ for k1 in range(int(numpy.floor(l_ech/2))) :
+ dsp_r=dsp_r+[frq[k1],dsp[k1].real,dsp[k1].imag]
+
+ _fonc = DEFI_FONCTION(NOM_PARA='FREQ',VALE_C=dsp_r,);
+ l_fc.append(_fonc.nom)
+ nume_i1.append(list_ord[i1])
+ nume_j1.append(list_ord[j1])
+
+ mcfact=[]
+ mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K='DSP' ,NUME_LIGN=(1,) ))
+ mcfact.append(_F(PARA='OPTION' ,LISTE_K='TOUT' ,NUME_LIGN=(1,) ))
+ mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dimh,) ,NUME_LIGN=(1,) ))
+ mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i1 ,NUME_LIGN=range(2,dimh+2) ))
+ mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j1 ,NUME_LIGN=range(2,dimh+2) ))
+ mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fc ,NUME_LIGN=range(2,dimh+2)))
+ self.DeclareOut('tab_inte',self.sd)
+ tab_inte=CREA_TABLE(LISTE=mcfact,
+ TITRE='',
+ TYPE_TABLE='TABLE_FONCTION')
+
+
+
+
+#-- Calcul des transferts
+
+ if len(TRANSFERT) != 0 :
+
+ l_fc=[];
+ nume_i1=[]
+ nume_j1=[]
+
+ #-- test sur les entrees pour les references --#
+ if type(l_H[0][1]['REFER'])==int :
+ refer=[];
+ refer.append(l_H[0][1]['REFER'])
+ elif type(l_H[0][1]['REFER'])==tuple :
+ refer=list(l_H[0][1]['REFER'])
+
+ ind_refer=[];
+ dimh = len(refer)*(len(list_ord)-len(refer))
+ for k1 in range(len(refer)) :
+ for l1 in range(len(list_ord)) :
+ if refer[k1] == list_ord[l1] : ind_refer.append(l1);
+
+ #-- H1 : interspectre / autospectre
+ #-- H2 : autospectre / interspectre
+ #-- CO : coherence entre H1 et H2.
+
+ if l_H[0][1]['ESTIM']!='HV' :
+ for i1 in range(len(refer)) :
+ for j1 in range(len(list_ord)) :
+ if refer[i1] != list_ord[j1] :
+ mes_i1=[num_mes[k1] for k1 in ind_ord[ind_refer[i1]]] #-- mesures des efforts
+ mes_j1=[num_mes[k1] for k1 in ind_ord[j1]] #-- mesures des reponses
+
+ ind_mes=[];
+ #-- recuperation des indices des mesures a predre en compte pour les spectres
+ for k1 in range(len(mes_i1)) :
+ if mes_i1[k1] in mes_j1 :
+ ind_ord[j1][mes_j1.index(mes_i1[k1])]
+ ind_mes.append([ind_ord[ind_refer[i1]][k1],ind_ord[j1][mes_j1.index(mes_i1[k1])]])
+
+ #-- Calcul des FRF
+ Guu=[0.j]*l_ech;
+ Gyy=[0.j]*l_ech;
+ Gyu=[0.j]*l_ech;
+ if len(ind_mes) > 0 :
+ for l1 in range(len(ind_mes)) :
+ Guu_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][0]]),fft[ind_mes[l1][0]])
+ Guu=numpy.add(Guu,Guu_t)
+ Gyu_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][1]]),fft[ind_mes[l1][0]])
+ Gyu=numpy.add(Gyu,Gyu_t)
+ Gyy_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][1]]),fft[ind_mes[l1][1]])
+ Gyy=numpy.add(Gyy,Gyy_t)
+
+ if l_H[0][1]['ESTIM']=='H1' :
+ frf=numpy.divide(numpy.conjugate(Gyu),Guu);
+ nom_frf='FRF-H1';
+ elif l_H[0][1]['ESTIM']=='H2' :
+ frf=numpy.divide(Gyy,Gyu);
+ nom_frf='FRF-H2';
+ elif l_H[0][1]['ESTIM']=='CO' :
+ H1=numpy.divide(numpy.conjugate(Gyu),Guu);
+ H2=numpy.divide(Gyy,Gyu);
+ frf=numpy.divide(H1,H2);
+ nom_frf='FRF-COH';
+
+ frf=frf.tolist();
+ frf_r=[];
+
+ for k1 in range(int(numpy.floor(l_ech/2))) :
+ frf_r=frf_r+[frq[k1],frf[k1].real,frf[k1].imag]
+
+ _fonc = DEFI_FONCTION(NOM_PARA='FREQ',VALE_C=frf_r,);
+ l_fc.append(_fonc.nom)
+ nume_i1.append(refer[i1])
+ nume_j1.append(list_ord[j1])
+
+ #-- On remplit la table_fonction avec tout ce qui va bien
+
+ mcfact=[]
+ mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=nom_frf ))
+ mcfact.append(_F(PARA='OPTION' ,LISTE_K='TOUT' ))
+ mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dimh,) ))
+ mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i1 ))
+ mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j1 ))
+ mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fc ))
+ self.DeclareOut('tab_inte',self.sd)
+ tab_inte=CREA_TABLE(LISTE=mcfact,
+ TITRE='',
+ TYPE_TABLE='TABLE_FONCTION')
+
--- /dev/null
+#@ MODIF calc_table_ops Macro DATE 26/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 COURTOIS M.COURTOIS
+
+def calc_table_ops(self, TABLE, ACTION, INFO, **args):
+ """
+ Macro CALC_TABLE permettant de faire des opérations sur une table
+ """
+ import aster
+
+ macro = 'CALC_TABLE'
+ from Accas import _F
+ from Cata.cata import table_sdaster, table_fonction, table_jeveux
+ from Utilitai.Utmess import UTMESS
+ from Utilitai import transpose
+ from Utilitai.Table import Table, merge
+ from Utilitai.utils import get_titre_concept
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou dérivé) est tabout
+ self.DeclareOut('tabout', self.sd)
+ if self.sd.__class__ == table_fonction:
+ typ_tabout = 'TABLE_FONCTION'
+ else:
+ typ_tabout = 'TABLE'
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+ # 0. faut-il utiliser une table dérivée
+ form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
+ if args['SENSIBILITE']:
+ ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, args['SENSIBILITE'].nom)
+ sdtab = table_jeveux(ncomp)
+ tab = sdtab.EXTR_TABLE()
+ else:
+ tab = TABLE.EXTR_TABLE()
+
+ # Réinitialiser le titre si on n'est pas réentrant
+ if self.reuse is None:
+ tab.titr = get_titre_concept(self.sd)
+
+ #----------------------------------------------
+ # Boucle sur les actions à effectuer
+ for fOP in ACTION:
+ occ = fOP.cree_dict_valeurs(fOP.mc_liste)
+ for mc, val in occ.items():
+ if val == None:
+ del occ[mc]
+
+ #----------------------------------------------
+ # 1. Traitement du FILTRE
+ # format pour l'impression des filtres
+ form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
+ if occ['OPERATION'] == 'FILTRE':
+ # peu importe le type, c'est la meme méthode d'appel
+ opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)]
+ kargs = {}
+ for k in ('CRITERE','PRECISION'):
+ if occ.has_key(k):
+ kargs[k] = occ[k]
+
+ col = getattr(tab, occ['NOM_PARA'])
+ tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs)
+
+ # trace l'operation dans le titre
+ #if FORMAT in ('TABLEAU','ASTER'):
+ tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \
+ ' '.join([str(v) for v in opts]))
+
+ #----------------------------------------------
+ # 2. Traitement de EXTR
+ if occ['OPERATION'] == 'EXTR':
+ lpar = occ['NOM_PARA']
+ if type(lpar) not in (list, tuple):
+ lpar = [lpar]
+ for p in lpar:
+ if not p in tab.para:
+ UTMESS('F','TABLE0_2',valk=[p,TABLE.nom])
+ tab = tab[occ['NOM_PARA']]
+
+ #----------------------------------------------
+ # 3. Traitement de SUPPRIME
+ if occ['OPERATION'] == 'SUPPRIME':
+ lpar = occ['NOM_PARA']
+ if type(lpar) not in (list, tuple):
+ lpar = [lpar]
+ keep = []
+ for p in tab.para:
+ if not p in lpar:
+ keep.append(p)
+ tab = tab[keep]
+
+ #----------------------------------------------
+ # 4. Traitement de RENOMME
+ if occ['OPERATION'] == 'RENOMME':
+ try:
+ tab.Renomme(*occ['NOM_PARA'])
+ except KeyError, msg:
+ UTMESS('F','TABLE0_3',valk=msg)
+
+ #----------------------------------------------
+ # 5. Traitement du TRI
+ if occ['OPERATION'] == 'TRI':
+ tab.sort(CLES=occ['NOM_PARA'], ORDRE=occ['ORDRE'])
+
+ #----------------------------------------------
+ # 6. Traitement de COMB
+ if occ['OPERATION'] == 'COMB':
+ tab2 = occ['TABLE'].EXTR_TABLE()
+ lpar = []
+ if occ.get('NOM_PARA') != None:
+ lpar = occ['NOM_PARA']
+ if type(lpar) not in (list, tuple):
+ lpar = [lpar]
+ for p in lpar:
+ if not p in tab.para:
+ UTMESS('F','TABLE0_2',valk=[p, TABLE.nom])
+ if not p in tab2.para:
+ UTMESS('F','TABLE0_2',valk=[p,occ['TABLE'].nom] )
+ restrict = occ.get('RESTREINT') == 'OUI'
+ tab = merge(tab, tab2, lpar, restrict=restrict)
+
+ #----------------------------------------------
+ # 7. Traitement de OPER
+ if occ['OPERATION'] == 'OPER':
+ # ajout de la colonne dans la table
+ tab.fromfunction(occ['NOM_PARA'], occ['FORMULE'])
+ if INFO == 2:
+ vectval = getattr(tab, occ['NOM_PARA']).values()
+ aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n')
+
+ #----------------------------------------------
+ # 8. Traitement de AJOUT
+ if occ['OPERATION'] == 'AJOUT':
+ if len(occ['NOM_PARA']) != len(occ['VALE']):
+ UTMESS('F', 'TABLE0_14')
+ dnew = dict(zip(occ['NOM_PARA'], occ['VALE']))
+ # ajout de la ligne avec vérification des types
+ tab.append(dnew)
+
+ #----------------------------------------------
+ # 99. Création de la table_sdaster résultat
+ # cas réentrant : il faut détruire l'ancienne table_sdaster
+ if self.reuse is not None:
+ DETRUIRE(CONCEPT=_F(NOM=TABLE,), INFO=1)
+
+ dprod = tab.dict_CREA_TABLE()
+ if INFO == 2:
+ echo_mess = []
+ echo_mess.append( '@-'*30+'\n' )
+ echo_mess.append( tab )
+ from pprint import pformat
+ echo_mess.append( pformat(dprod) )
+ echo_mess.append( '@-'*30+'\n' )
+ texte_final = ' '.join(echo_mess)
+ aster.affiche('MESSAGE', texte_final)
+
+ # surcharge par le titre fourni
+ tit = args['TITRE']
+ if tit != None:
+ if type(tit) not in (list, tuple):
+ tit = [tit]
+ dprod['TITRE'] = tuple(['%-80s' % lig for lig in tit])
+ # type de la table de sortie à passer à CREA_TABLE
+ tabout = CREA_TABLE(TYPE_TABLE=typ_tabout,
+ **dprod)
+
+ return ier
+
--- /dev/null
+#@ MODIF creation_donnees_homard Macro DATE 15/03/2010 AUTEUR GNICOLAS G.NICOLAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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
+"""
+Cette classe crée le fichier de configuration permettant de lancer HOMARD
+depuis Code_Aster.
+"""
+__revision__ = "V1.5"
+__all__ = [ ]
+
+import os
+import os.path
+from types import ListType, TupleType
+EnumTypes = (ListType, TupleType)
+
+try:
+ from Utilitai.Utmess import UTMESS
+except ImportError:
+ def UTMESS(code, idmess, valk=(), vali=(), valr=()):
+ """Clone de utmess si on ne reussit pas é le charger
+ """
+ fmt = '\n <%s> <%s> %s %s %s\n\n'
+ print fmt % (code, idmess, valk, vali, valr)
+
+# ------------------------------------------------------------------------------
+class creation_donnees_homard:
+ """Cette classe crée les données permettant de lancer HOMARD depuis Code_Aster.
+ Ce sont :
+ . le fichier de configuration
+ . le fichier des données dans le cas d'information
+
+ Arguments (stockés en tant qu'attribut) :
+ . nom_macro : nom de la macro-commande qui appelle :
+ 'MACR_ADAP_MAIL' pour une adaptation
+ 'MACR_INFO_MAIL' pour une information sur un maillage
+ . mots_cles : mots-clés de la macro-commande
+ . dico_configuration : dictionnaire des options
+
+ Attributs :
+ . Nom_Fichier_Configuration : nom du fichier de configuration (immuable)
+ . Nom_Fichier_Donnees : nom du fichier de données (immuable)
+ . mode_homard : le mode pour filtrer ici ("ADAP" ou "INFO")
+ . mode_homard_texte : le mode d'utilisation, en francais ("ADAPTATION" ou "INFORMATION")
+ . mailles_incompatibles : que faire des mailles incompatibles avec HOMARD
+ """
+# ------------------------------------------------------------------------------
+ def __init__(self, nom_macro, mots_cles, dico_configuration ) :
+ """Construction + valeurs par défaut des attributs
+ """
+#
+# 1. Vérification de la macro qui appelle
+#
+ d_aux = {}
+ d_aux["MACR_ADAP_MAIL"] = ( "ADAP", "ADAPTATION" )
+ d_aux["MACR_INFO_MAIL"] = ( "INFO", "INFORMATION" )
+ if d_aux.has_key(nom_macro) :
+ self.mode_homard = d_aux[nom_macro][0]
+ self.mode_homard_texte = d_aux[nom_macro][1]
+ else :
+ UTMESS("F", 'HOMARD0_1')
+#
+# 2. Données générales de cette initialisation
+#
+#gn for mot_cle in mots_cles.keys() :
+#gn print "mots_cles[", mot_cle, "] = ", mots_cles[mot_cle]
+#gn for mot_cle in dico_configuration.keys() :
+#gn print "dico_configuration[", mot_cle, "] = ", dico_configuration[mot_cle]
+#
+ self.nom_macro = nom_macro
+ self.mots_cles = mots_cles
+ self.dico_configuration = dico_configuration
+#
+# 3. Quel type de traitement des mailles incompatibles
+#
+ if mots_cles.has_key("ELEMENTS_NON_HOMARD") :
+ d_aux = {}
+ d_aux["REFUSER"] = "TOUS"
+ d_aux["IGNORER"] = "IGNORE_QUAD"
+ self.mailles_incompatibles = d_aux[mots_cles["ELEMENTS_NON_HOMARD"]]
+ else :
+ self.mailles_incompatibles = None
+#
+# 4. Attributs immuables
+#
+ self.Nom_Fichier_Configuration = "HOMARD.Configuration"
+ self.Nom_Fichier_Donnees = "HOMARD.Donnees"
+#
+# ------------------------------------------------------------------------------
+ def int_to_str2 (self, entier) :
+ """
+ Transforme un entier compris entre 0 et 99 en une chaine sur deux caractéres
+ """
+# print "\nArguments a l'entree de", __name__, ":", entier
+#
+ try:
+ la_chaine = '%02d' % entier
+ except TypeError:
+ la_chaine = None
+#
+ return la_chaine
+# ------------------------------------------------------------------------------
+ def quel_mode (self) :
+ """Informe sur le mode de lancement de HOMARD
+ """
+### print self.mode_homard_texte
+ print "Lancement de creation_donnees_homard en mode", self.mode_homard_texte
+ return
+# ------------------------------------------------------------------------------
+ def creation_configuration (self) :
+ """Crée les données nécessaires é la configuration
+ """
+#
+ message_erreur = None
+#
+ while message_erreur is None :
+#
+# 1. Les chaines liées aux numéros d'itération
+#
+ if self.mode_homard == "ADAP" :
+ niter = self.dico_configuration["niter"]
+ self.str_niter = self.int_to_str2 (niter)
+ self.str_niterp1 = self.int_to_str2 (niter+1)
+ self.niter_vers_niterp1 = self.str_niter + ".vers." + self.str_niterp1
+#
+# 2. La liste standard
+#
+ if self.mode_homard == "INFO" :
+ aux = "Liste.info"
+ else :
+ aux = "Liste." + self.niter_vers_niterp1
+ self.ListeStd = aux
+#
+# 3. Le mode de pilotage
+#
+ if self.mode_homard == "INFO" :
+ self.ModeHOMA = 2
+ self.Action = "info"
+ else :
+ if self.mots_cles["ADAPTATION"] == "MODIFICATION" :
+ self.ModeHOMA = 3
+ self.Action = "modi"
+ self.ModDegre = "non"
+ self.CreJoint = "non"
+ else :
+ self.ModeHOMA = 1
+ self.Action = "homa"
+ self.TypeRaff = "non"
+ self.TypeDera = "non"
+ self.critere_raffinement = None
+ self.critere_deraffinement = None
+ self.niveau = []
+#
+# 4. Le type de bilan : il faut convertir la donnée textuelle en un entier,
+# produit de nombres premiers.
+# Si rien n'est demandé, on met 1.
+#
+ aux = 1
+ dico_aux = {}
+ dico_aux["INTERPENETRATION"] = 3
+ dico_aux["NOMBRE"] = 7
+ dico_aux["QUALITE"] = 5
+ dico_aux["CONNEXITE"] = 11
+ dico_aux["TAILLE"] = 13
+ dico_aux["PROP_CALCUL"] = 17
+ l_aux = dico_aux.keys()
+ for choix in l_aux :
+ if self.mots_cles.has_key(choix) :
+ if self.mots_cles[choix] == "OUI" :
+ aux = aux * dico_aux[choix]
+ if aux == 1 :
+ aux = 0
+ self.TypeBila = aux
+#
+# 5. Les entrées/sorties au format MED
+#
+ self.CCNoMN__ = self.dico_configuration["NOM_MED_MAILLAGE_N"]
+ if self.mode_homard == "ADAP" :
+ self.CCNoMNP1 = self.dico_configuration["NOM_MED_MAILLAGE_NP1"]
+ if self.dico_configuration.has_key("NOM_MED_MAILLAGE_NP1_ANNEXE") :
+ self.CCMaiAnn = self.dico_configuration["NOM_MED_MAILLAGE_NP1_ANNEXE"]
+ else :
+ self.CCMaiAnn = None
+#
+# 6. Les entrées/sorties au format HOMARD
+#
+ if self.mode_homard == "ADAP" :
+ self.fic_homard_niter = "maill." + self.str_niter + ".hom.med"
+ self.fic_homard_niterp1 = "maill." + self.str_niterp1 + ".hom.med"
+ else :
+ self.fic_homard_niter = None
+ self.fic_homard_niterp1 = None
+#
+# 7. Le pilotage de l'adaptation
+#
+ if self.ModeHOMA == 1 :
+#
+# 7.1. Le type d'adaptation
+#
+ if self.mots_cles["ADAPTATION"] == "RAFFINEMENT" or self.mots_cles["ADAPTATION"] == "RAFFINEMENT_ZONE" :
+ self.TypeRaff = "libre"
+ self.TypeDera = "non"
+ elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT" :
+ self.TypeRaff = "non"
+ self.TypeDera = "libre"
+ elif self.mots_cles["ADAPTATION"] == "RAFF_DERA" :
+ self.TypeRaff = "libre"
+ self.TypeDera = "libre"
+ elif self.mots_cles["ADAPTATION"] == "RAFFINEMENT_UNIFORME" :
+ self.TypeRaff = "uniforme"
+ self.TypeDera = "non"
+ elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT_UNIFORME" :
+ self.TypeRaff = "non"
+ self.TypeDera = "uniforme"
+ elif self.mots_cles["ADAPTATION"] == "RIEN" :
+ self.TypeRaff = "non"
+ self.TypeDera = "non"
+#gn print "... self.TypeRaff = ",self.TypeRaff
+#gn print "... self.TypeDera = ",self.TypeDera
+#
+# 7.2. L'éventuel seuil de raffinement
+#
+ if self.TypeRaff == "libre" and self.mots_cles["ADAPTATION"] != "RAFFINEMENT_ZONE" :
+ d_aux = {}
+ d_aux["CRIT_RAFF_ABS"] = ("SeuilHau", 1)
+ d_aux["CRIT_RAFF_REL"] = ("SeuilHRe", 100)
+ d_aux["CRIT_RAFF_PE" ] = ("SeuilHPE", 100)
+ l_aux = d_aux.keys()
+ for mot_cle in l_aux :
+ if self.mots_cles[mot_cle] is not None :
+ aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+ self.critere_raffinement = (d_aux[mot_cle][0], aux)
+#gn print "... self.critere_raffinement = ", self.critere_raffinement
+#
+# 7.3. L'éventuel seuil de déraffinement
+#
+ if self.TypeDera == "libre" :
+ d_aux = {}
+ d_aux["CRIT_DERA_ABS"] = ("SeuilBas", 1)
+ d_aux["CRIT_DERA_REL"] = ("SeuilBRe", 100)
+ d_aux["CRIT_DERA_PE" ] = ("SeuilBPE", 100)
+ l_aux = d_aux.keys()
+ for mot_cle in l_aux :
+ if self.mots_cles[mot_cle] is not None :
+ aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+ self.critere_deraffinement = (d_aux[mot_cle][0], aux)
+#gn print "... self.critere_deraffinement = ", self.critere_deraffinement
+#
+# 7.4. Les niveaux extremes
+#
+ for mot_cle in [ "NIVE_MIN", "NIVE_MAX" ] :
+ if self.mots_cles.has_key(mot_cle) :
+ if self.mots_cles[mot_cle] is not None :
+ if mot_cle == "NIVE_MIN" :
+ aux = "NiveauMi"
+ else :
+ aux = "NiveauMa"
+ self.niveau.append((aux, self.mots_cles[mot_cle]))
+ if len(self.niveau) == 2 :
+#gn print self.mots_cles["NIVE_MIN"]
+#gn print self.mots_cles["NIVE_MAX"]
+ if self.mots_cles["NIVE_MIN"] >= self.mots_cles["NIVE_MAX"] :
+ message_erreur = "Le niveau mini ,"+str(self.mots_cles["NIVE_MIN"])+\
+ ", doit etre < au niveau maxi, "+str(self.mots_cles["NIVE_MAX"])+"."
+ break
+#
+# 7.5. Les éventuelles zones de raffinement
+#
+ if self.dico_configuration.has_key("Zones_raffinement") :
+ iaux = 0
+ for zone in self.dico_configuration["Zones_raffinement"] :
+ iaux = iaux + 1
+ s_aux_1 = "Zone numero "+str(iaux)+" : "
+ s_aux_2 = ", doit etre < au "
+ if zone.has_key("X_MINI") :
+ if zone["X_MINI"] > zone["X_MAXI"] :
+ message_erreur = s_aux_1+"X mini ,"+str(zone["X_MINI"])+s_aux_2+"X maxi, "+str(zone["X_MAXI"])+"."
+ if zone["Y_MINI"] > zone["Y_MAXI"] :
+ message_erreur = s_aux_1+"Y mini ,"+str(zone["Y_MINI"])+s_aux_2+"Y maxi, "+str(zone["Y_MAXI"])+"."
+ if zone.has_key("Z_MINI") :
+ if zone["Z_MINI"] > zone["Z_MAXI"] :
+ message_erreur = s_aux_1+"Z mini ,"+str(zone["Z_MINI"])+s_aux_2+"Z maxi, "+str(zone["Z_MAXI"])+"."
+#
+# 8. Le pilotage de la modification
+#
+ if self.ModeHOMA == 3 :
+ mot_cle = "DEGRE"
+ if self.mots_cles.has_key(mot_cle) :
+ if self.mots_cles[mot_cle] is not None :
+ self.ModDegre = self.mots_cles[mot_cle]
+#
+ mot_cle = "JOINT"
+ if self.mots_cles.has_key(mot_cle) :
+ if self.mots_cles[mot_cle] is not None :
+ self.CreJoint = self.mots_cles[mot_cle]
+#gn print self.ModDegre, self.CreJoint
+#
+# 9. Options annexes
+#
+ info = self.dico_configuration["INFO"]
+ if ( info == 2 ) :
+ self.MessInfo = 2
+ elif ( info > 2 ) :
+ self.MessInfo = 30
+ else :
+ self.MessInfo = None
+
+#
+ break
+#
+ if message_erreur is not None :
+ UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+ return self.fic_homard_niter, self.fic_homard_niterp1
+# ------------------------------------------------------------------------------
+ def ouvre_fichier (self, nomfic_local) :
+ """Ouvre en écriture un fichier aprés l'avoir éventuellement détruit
+ """
+ codret_partiel = [0]
+### print nomfic_local
+ Rep_Calc_HOMARD_global = self.dico_configuration["Rep_Calc_HOMARD_global"]
+ nomfic = os.path.join ( Rep_Calc_HOMARD_global , nomfic_local )
+#
+ if os.path.isfile (nomfic) :
+ try :
+ os.remove (nomfic)
+ except os.error, codret_partiel :
+ print "Probleme au remove, erreur numéro ", codret_partiel[0], ":", codret_partiel[1]
+ UTMESS("F", 'HOMARD0_3', valk=nomfic)
+#
+ fichier = open (nomfic,"w")
+ self.fichier = fichier
+#
+ return fichier, nomfic
+# ------------------------------------------------------------------------------
+ def ecrire_ligne_configuration_0 (self, commentaire) :
+ """Ecrit une ligne de commentaires du fichier de configuration
+ Arguments :
+ . commentaire : le commentaire é écrire
+ """
+#
+ ligne = "#\n"
+ ligne = ligne + "# " + commentaire + "\n"
+ ligne = ligne + "#\n"
+ self.fichier.write(ligne)
+#
+ return
+# ------------------------------------------------------------------------------
+ def ecrire_ligne_configuration_1 (self, texte) :
+ """Ecrit une ligne brute du fichier de configuration
+ Arguments :
+ . texte : le texte a ecrire
+ """
+#
+# print texte
+# ligne = texte + "\n"
+ ligne = texte
+# print "==> ",ligne
+ self.fichier.write(ligne)
+#
+ return
+# ------------------------------------------------------------------------------
+ def ecrire_ligne_configuration_2 (self, motcle, valeur) :
+ """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur
+ Arguments :
+ . motcle : le mot-cle HOMARD a ecrire
+ . valeur : la valeur associee
+ """
+#
+ ligne = motcle + " " + str(valeur) + "\n"
+ self.fichier.write(ligne)
+#
+ return
+# ------------------------------------------------------------------------------
+ def ecrire_ligne_configuration_3 (self, motcle, valeur1, valeur2) :
+ """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur1 + valeur2
+ Arguments :
+ . motcle : le mot-cle HOMARD a ecrire
+ . valeur : la valeur associee
+ """
+#
+ ligne = motcle + " " + str(valeur1) + " " + str(valeur2) + "\n"
+ self.fichier.write(ligne)
+#
+ return
+# ------------------------------------------------------------------------------
+ def ecrire_fichier_configuration (self) :
+ """Ecrit le fichier de configuration
+ """
+ message_erreur = None
+#
+ while message_erreur is None :
+#
+# 1. Ouverture du fichier
+#
+ fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Configuration)
+#
+# 2. Généralités
+#
+ self.ecrire_ligne_configuration_0("Generalites")
+ self.ecrire_ligne_configuration_2("ModeHOMA", self.ModeHOMA)
+ self.ecrire_ligne_configuration_2("Action", self.Action)
+ self.ecrire_ligne_configuration_2("ListeStd", self.ListeStd)
+ self.ecrire_ligne_configuration_2("TypeBila", self.TypeBila)
+ self.ecrire_ligne_configuration_2("CCAssoci", "MED")
+ self.ecrire_ligne_configuration_2("NumeIter", self.dico_configuration["niter"])
+#
+# 3. Les fichiers externes
+#
+ self.ecrire_ligne_configuration_0("Les fichiers de Code_Aster, au format MED")
+ self.ecrire_ligne_configuration_2("CCNoMN__", self.CCNoMN__)
+ self.ecrire_ligne_configuration_2("CCMaiN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+ if self.mode_homard == "ADAP" :
+ self.ecrire_ligne_configuration_2("CCNoMNP1", self.CCNoMNP1)
+ self.ecrire_ligne_configuration_2("CCMaiNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+#
+ self.ecrire_ligne_configuration_0("Le répertoire des fichiers de bilan")
+ self.ecrire_ligne_configuration_2("RepeInfo", self.dico_configuration["Rep_Calc_HOMARD_global"])
+#
+# 4. Les fichiers HOMARD
+#
+ self.ecrire_ligne_configuration_0("Les fichiers de HOMARD, au format MED")
+ if self.mode_homard == "ADAP" :
+ self.ecrire_ligne_configuration_3("HOMaiN__", "M_"+self.str_niter , self.fic_homard_niter )
+ self.ecrire_ligne_configuration_3("HOMaiNP1", "M_"+self.str_niterp1, self.fic_homard_niterp1)
+ aux = "oui"
+ else :
+ aux = "non"
+ self.ecrire_ligne_configuration_2("EcriFiHO", aux)
+#
+# 5. Le pilotage de l'adaptation
+#
+ if self.mode_homard == "ADAP" :
+#
+ self.ecrire_ligne_configuration_0("Le pilotage de l'adaptation")
+#
+# 5.1. Type d'adaptation
+#
+ self.ecrire_ligne_configuration_2("TypeRaff", self.TypeRaff)
+ if self.critere_raffinement is not None :
+ self.ecrire_ligne_configuration_2(self.critere_raffinement[0], self.critere_raffinement[1])
+ self.ecrire_ligne_configuration_2("TypeDera", self.TypeDera)
+ if self.critere_deraffinement is not None :
+ self.ecrire_ligne_configuration_2(self.critere_deraffinement[0], self.critere_deraffinement[1])
+#
+# 5.2. L'eventuel indicateur d'erreur
+#
+ if self.dico_configuration.has_key("Indicateur") :
+#
+ self.ecrire_ligne_configuration_0("L'indicateur d'erreur")
+ self.ecrire_ligne_configuration_2("CCIndica", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+ self.ecrire_ligne_configuration_2("CCNoChaI", self.dico_configuration["Indicateur"]["NOM_MED"])
+ for saux in self.dico_configuration["Indicateur"]["COMPOSANTE"] :
+ self.ecrire_ligne_configuration_2("CCCoChaI", saux)
+ if self.dico_configuration["Indicateur"].has_key("NUME_ORDRE") :
+ self.ecrire_ligne_configuration_2("CCNumOrI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+ self.ecrire_ligne_configuration_2("CCNumPTI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+ if self.mots_cles.has_key("TYPE_VALEUR_INDICA") :
+ self.ecrire_ligne_configuration_2("CCUsCmpI", self.mots_cles["TYPE_VALEUR_INDICA"])
+#
+# 5.3. Les éventuelles zones de raffinement
+#
+ if self.dico_configuration.has_key("Zones_raffinement") :
+ dico_zone = {}
+ dico_zone["X_MINI"] = "ZoRaXmin"
+ dico_zone["X_MAXI"] = "ZoRaXmax"
+ dico_zone["Y_MINI"] = "ZoRaYmin"
+ dico_zone["Y_MAXI"] = "ZoRaYmax"
+ dico_zone["Z_MINI"] = "ZoRaZmin"
+ dico_zone["Z_MAXI"] = "ZoRaZmax"
+ dico_zone["X_CENTRE"] = "ZoRaXCen"
+ dico_zone["Y_CENTRE"] = "ZoRaYCen"
+ dico_zone["Z_CENTRE"] = "ZoRaZCen"
+ dico_zone["RAYON"] = "ZoRaRayo"
+ dico_zone["RAYON_INT"] = "ZoRaRayI"
+ dico_zone["RAYON_EXT"] = "ZoRaRayE"
+ dico_zone["X_AXE"] = "ZoRaXAxe"
+ dico_zone["Y_AXE"] = "ZoRaYAxe"
+ dico_zone["Z_AXE"] = "ZoRaZAxe"
+ dico_zone["X_BASE"] = "ZoRaXBas"
+ dico_zone["Y_BASE"] = "ZoRaYBas"
+ dico_zone["Z_BASE"] = "ZoRaZBas"
+ dico_zone["HAUTEUR"] = "ZoRaHaut"
+ l_aux = dico_zone.keys()
+ dico_zone["TYPE"] = "ZoRaType"
+ dico_zone["RECTANGLE"] = 1
+ dico_zone["BOITE"] = 2
+ dico_zone["DISQUE"] = 3
+ dico_zone["SPHERE"] = 4
+ dico_zone["CYLINDRE"] = 5
+ dico_zone["DISQUE_PERCE"] = 6
+ dico_zone["TUYAU"] = 7
+ iaux = 0
+ for zone in self.dico_configuration["Zones_raffinement"] :
+ iaux = iaux + 1
+ self.ecrire_ligne_configuration_0("Zone de raffinement numéro "+str(iaux))
+ jaux = dico_zone[zone["TYPE"]]
+ self.ecrire_ligne_configuration_3(dico_zone["TYPE"], iaux, jaux)
+ for aux in l_aux :
+ if zone.has_key(aux) :
+ self.ecrire_ligne_configuration_3(dico_zone[aux], iaux, zone[aux])
+#
+# 5.4. Les niveaux extremes
+#
+ for aux in self.niveau :
+ self.ecrire_ligne_configuration_2(aux[0], aux[1])
+#
+# 5.5. L'usage de l'indicateur
+#
+ if self.mots_cles.has_key("TYPE_OPER_INDICA") :
+ if self.mots_cles["TYPE_OPER_INDICA"] is not None :
+ self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["TYPE_OPER_INDICA"])
+#
+# 5.6. Les éventuels groupes de filtrage du raffinement/deraffinement
+#
+ for cle in ( "GROUP_MA", "GROUP_NO" ) :
+ if self.mots_cles.has_key(cle) :
+ if self.mots_cles[cle] is not None :
+ if not type(self.mots_cles[cle]) in EnumTypes :
+ self.ecrire_ligne_configuration_2("CCGroAda", self.mots_cles[cle])
+ else :
+ for group in self.mots_cles[cle] :
+ self.ecrire_ligne_configuration_2("CCGroAda", group)
+#
+# 5.7. Les modifications
+#
+ if self.ModeHOMA == 3 :
+ self.ecrire_ligne_configuration_2("ModDegre", self.ModDegre)
+ self.ecrire_ligne_configuration_2("CreJoint", self.CreJoint)
+#
+# 5.8. L'éventuel maillage annexe
+#
+ if self.CCMaiAnn is not None :
+ self.ecrire_ligne_configuration_0("Maillage d'autre degré")
+ self.ecrire_ligne_configuration_2("ModDegre", "oui")
+ self.ecrire_ligne_configuration_2("CCNoMAnn", self.CCMaiAnn)
+ self.ecrire_ligne_configuration_2("CCMaiAnn", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+#
+# 6. Les éventuels champs à mettre à jour
+#
+ if self.dico_configuration.has_key("Champs") :
+ self.ecrire_ligne_configuration_0("Champs à mettre à jour")
+ self.ecrire_ligne_configuration_2("CCSolN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+ self.ecrire_ligne_configuration_2("CCSolNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+ iaux = 0
+ for maj_champ in self.dico_configuration["Champs"] :
+ iaux = iaux + 1
+ self.ecrire_ligne_configuration_0("Mise à jour du champ numéro "+str(iaux))
+ self.ecrire_ligne_configuration_3("CCChaNom", iaux, maj_champ["NOM_MED"])
+ if maj_champ.has_key("NUME_ORDRE") :
+ self.ecrire_ligne_configuration_3("CCChaNuO", iaux, maj_champ["NUME_ORDRE"])
+ self.ecrire_ligne_configuration_3("CCChaPdT", iaux, maj_champ["NUME_ORDRE"])
+ elif maj_champ.has_key("INST") :
+ self.ecrire_ligne_configuration_3("CCChaIns", iaux, maj_champ["INST"])
+#
+# 7. L'éventuel suivi de frontière
+#
+ SuivFron = 1
+#
+# 7.1. A partir d'un maillage de la frontière
+#
+ if self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") :
+ SuivFron = SuivFron * 2
+ self.ecrire_ligne_configuration_0("Maillage de frontière")
+ self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+ self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"])
+ if self.mots_cles.has_key("GROUP_MA_FRONT") :
+ if self.mots_cles["GROUP_MA_FRONT"] is not None :
+ if not type(self.mots_cles["GROUP_MA_FRONT"]) in EnumTypes :
+ self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA_FRONT"])
+ else :
+ for group_ma in self.mots_cles["GROUP_MA_FRONT"] :
+ self.ecrire_ligne_configuration_2("CCGroFro", group_ma)
+#
+# 7.2. A partir d'une definition analytique
+#
+ if self.dico_configuration.has_key("Frontiere_analytique") :
+ SuivFron = SuivFron * 3
+ dico_frontiere = {}
+ dico_frontiere["RAYON"] = "FARayon"
+ dico_frontiere["X_CENTRE"] = "FAXCen"
+ dico_frontiere["Y_CENTRE"] = "FAYCen"
+ dico_frontiere["Z_CENTRE"] = "FAZCen"
+ dico_frontiere["X_AXE"] = "FAXAxe"
+ dico_frontiere["Y_AXE"] = "FAYAxe"
+ dico_frontiere["Z_AXE"] = "FAZAxe"
+ l_aux = dico_frontiere.keys()
+ dico_frontiere["GROUP_MA"] = "FAGroupe"
+ dico_frontiere["TYPE"] = "FAType"
+ dico_frontiere["CYLINDRE"] = 1
+ dico_frontiere["SPHERE"] = 2
+ iaux = 0
+ for frontiere in self.dico_configuration["Frontiere_analytique"] :
+ if not type(frontiere["GROUP_MA"]) in EnumTypes :
+ lt_aux = [ frontiere["GROUP_MA"] ]
+ else :
+ lt_aux = frontiere["GROUP_MA"]
+ for group_ma in lt_aux :
+ iaux = iaux + 1
+ self.ecrire_ligne_configuration_0("Description de la frontiere analytique numero "+str(iaux))
+ jaux = dico_frontiere[frontiere["TYPE"]]
+ self.ecrire_ligne_configuration_3(dico_frontiere["TYPE"], iaux, jaux)
+ self.ecrire_ligne_configuration_3(dico_frontiere["GROUP_MA"], iaux, group_ma)
+ for aux in l_aux :
+ if frontiere.has_key(aux) :
+ self.ecrire_ligne_configuration_3(dico_frontiere[aux], iaux, frontiere[aux])
+#
+# 7.3. Activation de la fonction
+#
+ if ( self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") or self.dico_configuration.has_key("Frontiere_analytique") ) :
+ self.ecrire_ligne_configuration_2("SuivFron", SuivFron)
+#
+# 8. Options particuliéres
+#
+ self.ecrire_ligne_configuration_0("Autres options")
+ if self.mots_cles.has_key("LANGUE") :
+ self.ecrire_ligne_configuration_2("Langue", self.mots_cles["LANGUE"])
+ if self.MessInfo is not None :
+ self.ecrire_ligne_configuration_2("MessInfo", self.MessInfo)
+ if self.dico_configuration["version_perso"] :
+ VERSION_HOMARD = self.dico_configuration["VERSION_HOMARD"]
+ self.ecrire_ligne_configuration_2("DicoOSGM", "$HOMARD_USER/"+VERSION_HOMARD+"/CONFIG/typobj.stu")
+#
+# 9. L'usage des mailles incompatibles avec HOMARD
+#
+ if self.mailles_incompatibles is not None :
+ self.ecrire_ligne_configuration_0("Les mailles incompatibles avec HOMARD")
+ self.ecrire_ligne_configuration_2("TypeElem", self.mailles_incompatibles)
+#
+# 10. L'éventuel complement
+#
+ if self.dico_configuration.has_key("fichier_conf_suppl") :
+ nomfic = self.dico_configuration["fichier_conf_suppl"]
+# print nomfic
+ if os.path.isfile(nomfic) :
+ fichier_bis = open (nomfic, "r")
+ les_lignes = fichier_bis.readlines()
+ fichier_bis.close()
+# print les_lignes
+ for ligne in les_lignes :
+ self.ecrire_ligne_configuration_1(ligne)
+#
+# 11. Fermeture du fichier
+#
+ fichier.close()
+ break
+#
+ if message_erreur is not None :
+ message_erreur = "Ecriture de "+nomfic_global+". "+message_erreur
+ UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+ return
+# ------------------------------------------------------------------------------
+ def ecrire_fichier_donnees (self) :
+ """Ecrit le fichier des donnees dans le cas d'une demande d'information
+ """
+ message_erreur = None
+#
+ while message_erreur is None :
+#
+# 1. Ouverture du fichier
+#
+ fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Donnees)
+#
+# 2. On ne demande rien pour le moment
+#
+ fichier.write("0\n")
+ fichier.write("0\n")
+ fichier.write("0\n")
+ fichier.write("q\n")
+#
+# n. Fermeture du fichier
+#
+ fichier.close()
+ break
+#
+ if message_erreur is not None :
+ UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+ return nomfic_global
--- /dev/null
+#@ MODIF defi_cable_bp_ops Macro DATE 06/07/2009 AUTEUR COURTOIS 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 ASSIRE A.ASSIRE
+
+# ===========================================================================
+# CORPS DE LA MACRO "DEFI_CABLE_BP"
+# -------------------------------------
+# USAGE :
+# Entrée :
+# - MODELE
+# - CABLE
+# - CHAM_MATER
+# - CARA_ELEM
+# - GROUP_MA_BETON
+# - DEFI_CABLE
+# - TYPE_ANCRAGE
+# - TENSION_INIT
+# - RECUL_ANCRAGE
+# - RELAXATION
+# - CONE
+# RAYON
+# LONGUEUR
+# PRESENT OUI ou NON deux fois
+# - TITRE
+# - INFO 1 / 2
+#
+# ===========================================================================
+
+
+
+def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
+ DEFI_CABLE,TYPE_ANCRAGE,TENSION_INIT,RECUL_ANCRAGE,
+ RELAXATION,CONE,TITRE,INFO,**args):
+
+ """
+ Ecriture de la macro DEFI_CABLE_BP
+ """
+ from Accas import _F
+ import aster,string, types
+ from Utilitai.Utmess import UTMESS
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+ IMPR_RESU = self.get_cmd('IMPR_RESU')
+ DEFI_CABLE_OP = self.get_cmd('DEFI_CABLE_OP')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type char_meca) est nomme CHCABLE dans
+ # le contexte de la macro
+
+ self.DeclareOut('__DC',self.sd)
+
+ # ---------------------------------------------------------------------------- #
+ # Début de la Macro :
+
+ motscles={}
+
+ # RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE"
+
+ if CONE:
+ dCONE=CONE[0].cree_dict_valeurs(CONE[0].mc_liste)
+ for i in dCONE.keys():
+ if dCONE[i]==None : del dCONE[i]
+
+ RAYON = dCONE['RAYON']
+ LONGUEUR = dCONE['LONGUEUR']
+
+ motscles['CONE']=[]
+ motscles['CONE'].append( dCONE )
+
+ # RECUPERATION DU MAILLAGE A PARTIR DU MODELE
+ __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .LGRF ' )
+ __MAIL= __MAIL[0].strip()
+ MAILLAGE = self.get_sd_avant_etape(__MAIL,self)
+
+ # DEFINITION DU NOM DES GROUP_NO
+ __NOM = 'AN__'
+ __LGNO = MAILLAGE.LIST_GROUP_NO()
+ __LGN1 = []
+ for i in __LGNO :
+ __LGN1.append( i[0][:len(__NOM)] )
+
+ __NB = __LGN1.count(__NOM)
+
+# FIN RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE"
+
+
+ # RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "DEFI_CABLE"
+
+ dDEFI_CABLE=[]
+ for j in DEFI_CABLE :
+ dDEFI_CABLE.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dDEFI_CABLE[-1].keys():
+ if dDEFI_CABLE[-1][i]==None : del dDEFI_CABLE[-1][i]
+
+
+ # BOUCLE SUR LES FACTEURS DU MOT-CLE "DEFI_CABLE"
+
+ motscles['DEFI_CABLE']=[]
+
+ for i in dDEFI_CABLE:
+
+ # CAS OU L'ON A DEFINI LE MOT-CLE "CONE"
+ if CONE:
+
+ # CREATION DU PREMIER TUNNEL
+
+ if dCONE['PRESENT'][0] == 'OUI':
+ __NB = __NB + 1
+ __NOM1 = __NOM + str( int(__NB) )
+
+ motscle2={}
+ motscle2['CREA_GROUP_NO']=[]
+
+ if i.has_key('GROUP_MA') == 1:
+ __CAB = i['GROUP_MA']
+
+ if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
+ else: gma = [ GROUP_MA_BETON ]
+ gma.insert(0, __CAB)
+
+ motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM1}]}
+ if i.has_key('MAILLE') == 1:
+ UTMESS('F','CABLE0_2')
+ if i.has_key('GROUP_NO_ANCRAGE') == 1:
+ __PC1 = i['GROUP_NO_ANCRAGE'][0]
+ motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
+ if i.has_key('NOEUD_ANCRAGE') == 1:
+ __PC1 = i['NOEUD_ANCRAGE'][0]
+ motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
+
+ DEFI_GROUP( reuse=MAILLAGE,
+ MAILLAGE=MAILLAGE,
+ INFO=INFO,
+ ALARME='NON',
+ **motscle2
+ ) ;
+
+ # CREATION DU DEUXIEME TUNNEL
+
+ if dCONE['PRESENT'][1] == 'OUI':
+ __NB = __NB + 1
+ __NOM2 = __NOM + str( int(__NB) )
+
+ motscle2={}
+ motscle2['CREA_GROUP_NO']=[]
+
+ if i.has_key('GROUP_MA') == 1:
+ __CAB = i['GROUP_MA']
+
+ if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
+ else: gma = [ GROUP_MA_BETON ]
+ gma.insert(0, __CAB)
+
+ motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM2}]}
+ if i.has_key('MAILLE') == 1:
+ UTMESS('F','CABLE0_2')
+ if i.has_key('GROUP_NO_ANCRAGE') == 1:
+ __PC1 = i['GROUP_NO_ANCRAGE'][1]
+ motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
+ if i.has_key('NOEUD_ANCRAGE') == 1:
+ __PC1 = i['NOEUD_ANCRAGE'][1]
+ motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
+
+ DEFI_GROUP( reuse=MAILLAGE,
+ MAILLAGE=MAILLAGE,
+ INFO=INFO,
+ ALARME='NON',
+ **motscle2
+ ) ;
+
+
+ # CREATION DES NOUVEAUX FACTEURS DU MOT-CLE "DEFI_CABLE" POUR DEFI_CABLE_BP
+
+ if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'OUI':
+ if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
+ if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
+
+ if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'NON':
+ if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM1, ), ), )
+ if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM1, ), ), )
+
+ if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'OUI':
+ if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM2, ), ), )
+ if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+ GROUP_NO_FUT=( __NOM2, ), ), )
+
+ if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'NON':
+ if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+ if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+
+ # CAS OU L'ON A PAS DEFINI LE MOT-CLE "CONE"
+ else:
+ if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+
+ if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+ if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
+ GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+
+ if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+ motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
+ NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+
+# FIN BOUCLE sur i in DEFI_CABLE
+
+
+ # LANCEMENT DE DEFI_CABLE_BP
+
+ if RELAXATION:
+ dRelaxation=RELAXATION[0].cree_dict_valeurs(RELAXATION[0].mc_liste)
+ for i in dRelaxation.keys():
+ if dRelaxation[i]==None : del dRelaxation[i]
+
+ __DC=DEFI_CABLE_OP(MODELE=MODELE,
+ CHAM_MATER=CHAM_MATER,
+ CARA_ELEM=CARA_ELEM,
+ GROUP_MA_BETON=GROUP_MA_BETON,
+ TYPE_ANCRAGE=TYPE_ANCRAGE,
+ TENSION_INIT=TENSION_INIT,
+ RECUL_ANCRAGE=RECUL_ANCRAGE,
+ RELAXATION=dRelaxation,
+ INFO=INFO,
+ **motscles
+ );
+
+ else:
+
+ __DC=DEFI_CABLE_OP(MODELE=MODELE,
+ CHAM_MATER=CHAM_MATER,
+ CARA_ELEM=CARA_ELEM,
+ GROUP_MA_BETON=GROUP_MA_BETON,
+ TYPE_ANCRAGE=TYPE_ANCRAGE,
+ TENSION_INIT=TENSION_INIT,
+ RECUL_ANCRAGE=RECUL_ANCRAGE,
+ INFO=INFO,
+ **motscles
+ );
+
+ return ier
--- /dev/null
+#@ MODIF defi_fonc_elec_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 cos,exp,pi
+
+def FcompletGR1(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2) :
+ fxt= 4.E-7 * I1 * I2
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+ return fxt
+
+def FcontinuGR1(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) :
+ ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+ ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+ ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+ fxt= 4.E-7 * I1 * I2 * ft1
+ return fxt
+
+def FcompletGR2(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2,D) :
+ fxt= 4.E-7 * I1 * I2 / D
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+ return fxt
+
+def FcontinuGR2(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2,D) :
+ ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+ ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+ ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+ fxt= 4.E-7 * I1 * I2 * ft1 / D
+ return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcompletGR2R(T,I1R,I2R,FR,TRR,PHIR1,PHI2R,TAU1R,TAU2R,D) :
+ fxt= 4.E-7 * I1R * I2R / D
+ fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI1R*pi/180.)-exp(-(T-TRR)/TAU1R)*cos(PHI1R*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI2R*pi/180.)-exp(-(T-TRR)/TAU2R)*cos(PHI2R*pi/180.))
+ return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcontinuGR2R(T,I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,D) :
+ ft1= exp(-(T-TRR)*(1./TAU1R+1./TAU2R))
+ ft1= ft1*cos(PHI1R*pi/180.)*cos(PHI2R*pi/180.)
+ ft1= ft1+0.5*cos(PHI2R*pi/180.-PHI1R*pi/180.)
+ fxt= 4.E-7 * I1R * I2R * ft1 / D
+ return fxt
+
+
+
+def defi_fonc_elec_ops(self,FREQ,SIGNAL,COUR,COUR_PRIN,COUR_SECO,**args):
+ ier=0
+ from Utilitai.Utmess import UTMESS
+ import numpy
+
+ # 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_FONCTION =self.get_cmd('DEFI_FONCTION')
+ FORMULE =self.get_cmd('FORMULE')
+ CALC_FONC_INTERP =self.get_cmd('CALC_FONC_INTERP')
+
+ ### Comptage commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('C_out',self.sd)
+#
+ if COUR :
+ TINI =COUR[ 0]['INST_CC_INIT']
+ TFIN =COUR[-1]['INST_CC_FIN']
+ pas_t=1./(40.*FREQ)
+#
+ temps = []
+ fff = []
+#
+ T2moins = COUR[0]['INST_CC_FIN']
+ TR = COUR[0]['INST_CC_INIT']
+ premier = 1
+ for k_cour in COUR :
+ I1 = k_cour['INTE_CC_1']
+ I2 = k_cour['INTE_CC_2']
+ PHI1 = k_cour['PHI_CC_1']
+ PHI2 = k_cour['PHI_CC_2']
+ TAU1 = k_cour['TAU_CC_1']
+ TAU2 = k_cour['TAU_CC_2']
+ T1 = k_cour['INST_CC_INIT']
+ T2 = k_cour['INST_CC_FIN']
+ if (abs(T1-T2moins)<1.E-7) : pass
+ elif (premier==1) : pass
+ else :
+ TR=T1
+ temps.append(T2moins)
+ fff.append(0.)
+ T2moins=T2
+ premier=0
+ t_k_cour=numpy.arange((T2-T1)/pas_t)
+ t_k_cour=t_k_cour*pas_t
+ t_k_cour=t_k_cour+T1
+ t_k_cour=t_k_cour.tolist()
+ print T1,T2,FREQ
+ temps=temps+t_k_cour
+ if SIGNAL=='CONTINU' :
+ for t in t_k_cour :
+ fff.append( FcontinuGR1(t,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) )
+ elif SIGNAL=='COMPLET' :
+ for t in t_k_cour :
+ fff.append(FcompletGR1(t,I1,I2,FREQ,TR,PHI1,PHI2,TAU1,TAU2))
+#
+ elif COUR_PRIN :
+ TINI =COUR_PRIN[0]['INST_CC_INIT']
+ TFIN =COUR_PRIN[0]['INST_CC_FIN']
+#
+ TINIR = COUR_PRIN[0]['INST_RENC_INIT']
+ TFINR = COUR_PRIN[0]['INST_RENC_FIN']
+#
+ pas_t=1./(40.*FREQ)
+#
+ temps = []
+ fff = []
+ T2moins = max(TFIN,TFINR)
+ TR = COUR_PRIN[0]['INST_CC_INIT']
+ TRR = COUR_PRIN[0]['INST_RENC_INIT']
+ I1 = COUR_PRIN[0]['INTE_CC_1']
+ I1R = COUR_PRIN[0]['INTE_RENC_1']
+ PHI1 = COUR_PRIN[0]['PHI_CC_1']
+ PHI1R = COUR_PRIN[0]['PHI_RENC_1']
+ TAU1 = COUR_PRIN[0]['TAU_CC_1']
+ TAU1R = COUR_PRIN[0]['TAU_RENC_1']
+#
+ fff.append(0.)
+#
+ if (abs(TR-T2moins)<1.E-7) : pass
+ else :
+ temps.append(0)
+ t_k_cour=numpy.arange((T2moins-TR)/pas_t)
+ t_k_cour=t_k_cour*pas_t
+ t_k_cour=t_k_cour+TR
+ t_k_cour=t_k_cour.tolist()
+ temps=temps+t_k_cour
+#
+ for k_cour in COUR_SECO :
+ I2 = k_cour['INTE_CC_2']
+ PHI2 = k_cour['PHI_CC_2']
+ TAU2 = k_cour['TAU_CC_2']
+ I2R = k_cour['INTE_RENC_2']
+ PHI2R = k_cour['PHI_RENC_2']
+ TAU2R = k_cour['TAU_RENC_2']
+ DIST = k_cour['DIST']
+#
+ if SIGNAL=='CONTINU' :
+ for i in range(len(temps)) :
+ if temps[i]>TINI :
+ if temps[i]<TFIN :
+ fff[i]=fff[i]+FcontinuGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+ if temps[i]>TINIR :
+ if temps[i]<TFINR :
+ fff[i]=fff[i]+FcontinuGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+ if SIGNAL=='COMPLET' :
+ for i in range(len(temps)) :
+ if temps[i]>TINI :
+ if temps[i]<TFIN :
+ fff[i]=fff[i]+FcompletGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+ if temps[i]>TINIR :
+ if temps[i]<TFINR :
+ fff[i]=fff[i]+FcompletGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+ vale=[]
+ for i in range(len(temps)) :
+ vale.append(temps[i])
+ vale.append(fff[i])
+ vale.append(temps[-1]+2*pas_t)
+ vale.append(0.)
+#
+ C_out=DEFI_FONCTION(NOM_PARA='INST',NOM_RESU='ELEC',
+ VALE=vale,
+ PROL_DROITE='CONSTANT',
+ PROL_GAUCHE='CONSTANT',)
+ return ier
--- /dev/null
+#@ MODIF defi_inte_spec_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 math
+
+def tocomplex(arg):
+ if arg[0]=='RI' : return complex(arg[1], arg[2])
+ if arg[0]=='MP' : return complex(arg[1]*math.cos(arg[2]), arg[1]*math.sin(arg[2]))
+
+
+def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
+ CONSTANT,TITRE,INFO,**args):
+# ------------------------------------------------------------------
+# Définition d'une matrice interspectrale
+# à partir de fonctions complexes
+
+ import aster
+ from types import ListType, TupleType
+ EnumTypes = (ListType, TupleType)
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ import numpy
+
+ commande='DEFI_INTE_SPEC'
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou dérivé) est tab
+ self.DeclareOut('tabout', self.sd)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+
+#--- Vérifications
+
+ if PAR_FONCTION==None : PAR_FONCTION=[]
+ if KANAI_TAJIMI==None : KANAI_TAJIMI=[]
+ if CONSTANT ==None : CONSTANT =[]
+
+ nfntot = len(PAR_FONCTION)+len(KANAI_TAJIMI)+len(CONSTANT)
+ dimh = (DIMENSION*(DIMENSION+1))/2
+ if dimh!=nfntot :
+ UTMESS('F','SPECTRAL0_1')
+
+ l_f=[]
+ for occ in PAR_FONCTION : l_f.append(('PAR_FONCTION',occ))
+ for occ in KANAI_TAJIMI : l_f.append(('KANAI_TAJIMI',occ))
+ for occ in CONSTANT : l_f.append(('CONSTANT' ,occ))
+ for occ in l_f :
+ if occ[0]!='PAR_FONCTION' and occ[1]['FREQ_MAX']<occ[1]['FREQ_MIN'] :
+ UTMESS('F','SPECTRAL0_2',valk=occ[0])
+ l_is=[occ[1]['NUME_ORDRE_I'] for occ in l_f]
+ l_js=[occ[1]['NUME_ORDRE_J'] for occ in l_f]
+ iis=sum(l_is)
+ ijs=sum(l_js)
+
+#--- pour une matrice hermitienne ---
+ l_ih=[k*(DIMENSION-k+1) for k in range(1,DIMENSION+1)]
+ l_jh=[k*k for k in range(1,DIMENSION+1)]
+ ih=sum(l_ih)
+ jh=sum(l_jh)
+ if ((iis!=ih) or (ijs!=jh)) :
+ UTMESS('F','SPECTRAL0_3')
+
+#--- Construction de la liste de fonctions complexes
+ l_fc=[]
+ for occ in l_f :
+
+#--- PAR_FONCTION
+
+ if occ[0]=='PAR_FONCTION' :
+ l_fc.append(occ[1]['FONCTION'].nom)
+
+#--- KANAI_TAJIMI et CONSTANT
+
+ if occ[0] in ('KANAI_TAJIMI','CONSTANT') :
+ if occ[1]['VALE_R']!=None :
+ valr=occ[1]['VALE_R']
+ vali=0.
+ elif occ[1]['VALE_C']!=None :
+ cmpl=tocomplex(occ[1]['VALE_C'])
+ valr=cmpl.real
+ vali=cmpl.imag
+ else :
+ valr=1.
+ vali=0.
+ x1=numpy.arange(occ[1]['FREQ_MIN'],occ[1]['FREQ_MAX'],occ[1]['PAS'])
+ x1=x1.tolist()+[occ[1]['FREQ_MAX'],]
+ valc=[]
+ for absc in x1 : valc=valc+[absc,valr,vali]
+
+#--- KANAI_TAJIMI
+
+ if occ[0]=='KANAI_TAJIMI' :
+ amor = occ[1]['AMOR_REDUIT']
+ frqmoy = occ[1]['FREQ_MOY']
+ x11 =numpy.array([4*(amor**2)*(frqmoy**2)*FREQ**2 \
+ for FREQ in x1 ])
+ xnum =x11+frqmoy**4
+ denom=numpy.array([ (frqmoy**2-FREQ**2)**2 \
+ for FREQ in x1 ])
+ denom=denom+x11
+ g0=numpy.array([valr]*len(denom))
+ g0=g0*xnum/denom
+ valc=[]
+ for i in range(len(x1)): valc=valc+[x1[i],g0[i],0.]
+ if occ[0] in ('KANAI_TAJIMI','CONSTANT') :
+ _f=DEFI_FONCTION(PROL_GAUCHE=occ[1]['PROL_GAUCHE'],
+ PROL_DROITE=occ[1]['PROL_DROITE'],
+ INTERPOL =occ[1]['INTERPOL'],
+ VALE_C =valc,
+ NOM_PARA ='FREQ',
+ NOM_RESU ='DSP' )
+ l_fc.append(_f.nom)
+
+ mcfact=[]
+ mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K='DSP' ))
+ mcfact.append(_F(PARA='OPTION' ,LISTE_K='TOUT' ))
+ mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(DIMENSION,) ))
+ tabout=CREA_TABLE(LISTE=mcfact, TITRE='',
+ TYPE_TABLE='TABLE_FONCTION')
+ mcfact=[]
+ mcfact.append(_F(PARA='NUME_ORDRE_I' ,LISTE_I=l_is ))
+ mcfact.append(_F(PARA='NUME_ORDRE_J' ,LISTE_I=l_js ))
+ mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fc ,TYPE_K='K24' ))
+ __l_fonc=CREA_TABLE(LISTE=mcfact, TITRE='')
+ tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
+ TITRE=self.sd.nom+' : interspectre obtenu par DEFI_INTE_SPEC',
+ ACTION=_F(OPERATION='COMB',TABLE=__l_fonc,))
+
+ return ier
--- /dev/null
+#@ MODIF defi_part_feti_ops Macro DATE 06/07/2009 AUTEUR COURTOIS 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 ASSIRE A.ASSIRE
+
+
+# ===========================================================================
+# CORPS DE LA MACRO "DEFI_PART_FETI"
+# -------------------------------------
+# USAGE :
+# MAILLAGE maillage a partitionner
+# MODELE modele (facultatif)
+# NB_PART nb de sous-domaines
+# EXCIT liste des chargements
+# METHODE PMETIS, KMETIS ou AUTRE
+# LOGICIEL si AUTRE alors on attend un chemin complet vers executable
+# NOM_GROUP_MA Un nom de base pour les group_ma contenant les SD
+# INFO 1,2
+#
+# ===========================================================================
+# script PYTHON : lancement de DEFI_PART_PA_OPS et de DEFI_PART_OPS
+
+
+def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTION_CONNEX,INFO,**args):
+
+ import aster, string, sys
+
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+
+ from Utilitai import partition
+
+ # DEBUT DE LA MACRO
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ DEFI_PART_OPS = self.get_cmd('DEFI_PART_OPS')
+ INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
+ DEFI_PART_PA_OPS = self.get_cmd('DEFI_PART_PA_OPS')
+
+ nompro='DEFI_PART_FETI'
+
+ # Maillage
+ if args.has_key('MODELE'):
+ if args['MODELE'] != None:
+ __MOD = string.ljust(args['MODELE'].nom,8)
+ __MOD =__MOD+'.MODELE .LGRF '
+ __LMAIL = aster.getvectjev(__MOD)
+ __MAIL = string.strip(__LMAIL[0])
+ MAILLAGE=self.get_sd_avant_etape(__MAIL,self)
+ else:
+ MAILLAGE=args['MAILLAGE']
+
+ # Nom des GROUP_MA générés
+ NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
+
+ # Test sur le nombre de caractères de NOM_GROUP_MA
+ if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
+ ln=7-len(str(NB_PART))
+ UTMESS('F','FETI0_1',vali=ln)
+
+ # Verification que des GROUP_MA ne portent pas deja les memes noms
+ _lst = []
+ for i in MAILLAGE.LIST_GROUP_MA():
+ _lst.append( string.strip(i[0]) )
+ for i in range(NB_PART):
+ if ( NOM_GROUP_MA+str(i) in _lst ):
+ ngrma=NOM_GROUP_MA+str(i)
+ UTMESS('F','FETI0_2',valk=ngrma)
+ if args.has_key('NOM_GROUP_MA_BORD') :
+ if args['NOM_GROUP_MA_BORD'] != None :
+ if ( args['NOM_GROUP_MA_BORD']+str(i) in _lst ):
+ ngrma=args['NOM_GROUP_MA_BORD']+str(i)
+ UTMESS('F','FETI0_2',valk=ngrma)
+
+ # Le concept sortant dans le contexte de la macro
+ self.DeclareOut('_SDFETI',self.sd)
+
+ # Debut :
+
+ # Regeneration des mots-cles GROUPAGE passés en argument de la macro
+ motscle1= {}
+ if args.has_key('GROUPAGE'):
+ if args['GROUPAGE'] != None :
+ dGroup=[]
+ for j in args['GROUPAGE']:
+ dGroup.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dGroup[-1].keys():
+ if dGroup[-1][i]==None : del dGroup[-1][i]
+ motscle1['GROUPAGE']=dGroup
+
+ # Regeneration des mots-cles POIDS_MAILLES passés en argument de la macro
+ if args.has_key('POIDS_MAILLES'):
+ if args['POIDS_MAILLES'] != None :
+ dEval=[]
+ for j in args['POIDS_MAILLES']:
+ dEval.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dEval[-1].keys():
+ if dEval[-1][i]==None : del dEval[-1][i]
+ motscle1['POIDS_MAILLES']=dEval
+
+ # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD
+ if args.has_key('GROUP_MA_BORD'):
+ if args['GROUP_MA_BORD'] != None :
+ motscle1['GROUP_MA_BORD']=args['GROUP_MA_BORD']
+
+ # Y a t'il présence du mot clé : LOGICIEL
+ if args.has_key('LOGICIEL'):
+ if args['LOGICIEL'] != None :
+ motscle1['LOGICIEL']=args['LOGICIEL']
+
+ # Y a t'il présence du mot clé : MODELE
+ if args.has_key('MODELE'):
+ if args['MODELE'] != None :
+ motscle1['MODELE']=args['MODELE']
+
+ # Partitionnement
+ DEFI_PART_PA_OPS(
+ MAILLAGE=MAILLAGE,
+ INFO=INFO,
+ METHODE=METHODE,
+ NB_PART=NB_PART,
+ CORRECTION_CONNEX=CORRECTION_CONNEX,
+ TRAITER_BORDS=TRAITER_BORDS,
+ NOM_GROUP_MA=NOM_GROUP_MA,
+ **motscle1
+ );
+
+ # Liste des groupes de mailles du maillage
+ _LST_GMA = MAILLAGE.LIST_GROUP_MA()
+ _LST_GMA = map(lambda x: x[0], _LST_GMA)
+
+ # Creation de la SDFETI
+ if args.has_key('MODELE'):
+ if args['MODELE'] != None :
+ _tmp = []
+ for i in range(NB_PART):
+ txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
+ _tmp.append( txt )
+
+ if args.has_key('NOM_GROUP_MA_BORD') :
+ if args['NOM_GROUP_MA_BORD'] != None :
+ if ( args['NOM_GROUP_MA_BORD']+str(i) in _LST_GMA ):
+ txt['GROUP_MA_BORD'] = string.strip(args['NOM_GROUP_MA_BORD']) + str(i)
+ _tmp.append( txt )
+
+ motscle2= {'DEFI': _tmp }
+
+ # Regeneration des mots-cles EXCIT passés en argument de la macro
+ if args.has_key('EXCIT'):
+ if args['EXCIT'] != None :
+ dExcit=[]
+ for j in args['EXCIT']:
+ dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+ for i in dExcit[-1].keys():
+ if dExcit[-1][i]==None : del dExcit[-1][i]
+ motscle2['EXCIT']=dExcit
+
+ _SDFETI=DEFI_PART_OPS(NOM='SDD',
+ MODELE=args['MODELE'],
+ INFO=1,
+ **motscle2
+ );
+ else:
+ _SDFETI=None
+
+ else:
+ _SDFETI=None
+
+
+ # Fin :
+
+ return ier
--- /dev/null
+#@ AJOUT defi_sol_miss_ops Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+
+def defi_sol_miss_ops(self, MATERIAU, COUCHE, TITRE, INFO, **args):
+ """Macro DEFI_SOL_MISS :
+ définir les caractéristiques du sol pour un calcul MISS3D
+ """
+ import aster
+
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster) est tabout
+ self.DeclareOut("tabout", self.sd)
+
+ # 1. Création des dictionnaires des MATERIAUX
+ l_mate = []
+ for Mi in MATERIAU:
+ dM = Mi.cree_dict_valeurs(Mi.mc_liste)
+ l_mate.append(dM)
+ nb_mate = len(l_mate)
+
+ # 2. Création des dictionnaires des COUCHES
+ l_couche = []
+ n_substr = 0
+ for Ci in COUCHE:
+ dC = Ci.cree_dict_valeurs(Ci.mc_liste)
+ if dC.get("SUBSTRATUM") == "OUI":
+ n_substr += 1
+ l_couche.append(dC)
+ if n_substr != 1:
+ UTMESS("F", "MISS0_3")
+ nb_couche = len(l_couche)
+
+ # 3. définition de la table
+ # para/typ pré-trie les colonnes
+ tab = Table(para=["NUME_COUCHE", "EPAIS", "RHO", "E", "NU", "AMOR_HYST", "RECEPTEUR", "SOURCE", "NUME_MATE", "SUBSTRATUM"],
+ typ=["I", "R", "R", "R", "R", "R", "K8", "K8", "I", "K8"])
+ idc = 0
+ for couche in l_couche:
+ idc += 1
+ id_mate = couche["NUME_MATE"]
+ if id_mate > nb_mate:
+ UTMESS("F", "MISS0_4", vali=(idc, nb_mate, id_mate))
+ id_mate = id_mate - 1
+ couche["NUME_COUCHE"] = idc
+ couche.update(l_mate[id_mate])
+ if couche.get("SUBSTRATUM") is None:
+ del couche["SUBSTRATUM"]
+ if couche["EPAIS"] is None:
+ couche["EPAIS"] = 0.
+ tab.append(couche)
+
+ # 4. surcharge par le titre fourni
+ if TITRE != None:
+ if type(TITRE) not in (list, tuple):
+ TITRE = [TITRE]
+ tab.titr = os.linesep.join(TITRE)
+
+ if INFO == 2:
+ print tab
+
+ # 5. création de la table
+ dprod = tab.dict_CREA_TABLE()
+ tabout = CREA_TABLE(**dprod)
+
+
--- /dev/null
+#@ MODIF dyna_iss_vari_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNITE_RESU_FORC,
+ NB_FREQ, PAS, UNITE_RESU_IMPE, TYPE, MATR_GENE , OPTION,INFO,
+ **args):
+ """
+ Macro DYNA_ISS_VARI
+ """
+ ier=0
+ import numpy as NP
+ from numpy import linalg
+ import aster
+ from Accas import _F
+ from Utilitai.Table import Table
+ from Utilitai.Utmess import UTMESS
+
+ def get_group_coord(group):
+ """Retourne les coordonnees des noeuds du groupe 'group'
+ """
+ l_ind = NP.array(coll_grno.get('%-8s' % group, [])) - 1
+ return NP.take(t_coordo, l_ind, axis=0)
+
+
+ # On importe les definitions des commandes a utiliser dans la macro
+
+ COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')
+ LIRE_IMPE_MISS = self.get_cmd('LIRE_IMPE_MISS')
+ LIRE_FORC_MISS = self.get_cmd('LIRE_FORC_MISS')
+ COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')
+
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ DYNA_LINE_HARM = self.get_cmd('DYNA_LINE_HARM')
+ DETRUIRE= self.get_cmd('DETRUIRE')
+
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+
+ # Comptage commandes + declaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('tab_out', self.sd)
+ macro='DYNA_ISS_VARI'
+#--------------------------------------------------------
+ dgene = MATR_GENE[0].cree_dict_valeurs(MATR_GENE[0].mc_liste)
+ if dgene['MATR_AMOR'] != None:
+ aster.affiche('MESSAGE',' MATR_AMOR existe')
+ __ma_amort = MATR_GENE['MATR_AMOR']
+ else:
+ __ma_amort=COMB_MATR_ASSE(CALC_AMOR_GENE=_F(MASS_GENE = MATR_GENE['MATR_MASS'] ,
+ RIGI_GENE = MATR_GENE['MATR_RIGI'] ,
+ AMOR_REDUIT= ( 0.0,),
+ ),
+ );
+ aster.affiche('MESSAGE',' MATR_AMOR pas donnee, on prend AMOR_REDUIT=0.0,')
+# dint = INTERF[0].cree_dict_valeurs(INTERF[0].mc_liste)
+# dcoh = MATR_COHE[0].cree_dict_valeurs(MATR_COHE[0].mc_liste)
+
+ from SD.sd_maillage import sd_maillage
+ from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+ from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+ from SD.sd_mode_meca import sd_mode_meca
+ from SD.sd_resultat import sd_resultat
+ from SD.sd_cham_gene import sd_cham_gene
+
+ v_refa_rigi = MATR_GENE['MATR_RIGI'].REFA.get()
+ v_refa_mass = MATR_GENE['MATR_MASS'].REFA.get()
+ # MAILLAGE
+ nom_bamo = v_refa_rigi[0]
+ nume_ddl = aster.getvectjev(nom_bamo[0:8] + ' .REFD ' )[3]
+ nom_mail = aster.getvectjev( nume_ddl[0:19] + '.REFN ' )[0]
+ maillage = sd_maillage(nom_mail)
+ # MODELE, DDLGENE
+ nom_ddlgene = v_refa_rigi[1]
+ nom_modele = aster.getvectjev( nume_ddl[0:19] + '.LILI ' )[1]
+ resultat = self.get_concept(nom_bamo)
+ nume_ddlgene = self.get_concept(nom_ddlgene)
+ modele = self.get_concept(nom_modele[0:8])
+
+ #TEST base modale
+ nom_bamo2 = v_refa_mass[0]
+ if nom_bamo.strip() != nom_bamo2.strip():
+ UTMESS('F','ALGORITH5_42')
+
+ nbnot, nbl, nbma, nbsm, nbsmx, dime = maillage.DIME.get()
+
+ # coordonnees des noeuds
+ l_coordo = maillage.COORDO.VALE.get()
+ t_coordo = NP.array(l_coordo)
+ t_coordo.shape = nbnot, 3
+ # groupes de noeuds
+ coll_grno = maillage.GROUPENO.get()
+ GROUP_NO_INTER=INTERF['GROUP_NO_INTERF']
+ noe_interf = get_group_coord(GROUP_NO_INTER)
+ nbno, nbval = noe_interf.shape
+ if INFO==2:
+ aster.affiche('MESSAGE','NBNO INTERFACE : '+str(nbno))
+ # MODES
+ iret,nbmodt,kbid=aster.dismoi('F','NB_MODES_TOT',nom_bamo,'RESULTAT')
+ iret,nbmodd,kbid=aster.dismoi('F','NB_MODES_DYN',nom_bamo,'RESULTAT')
+ iret,nbmods,kbid=aster.dismoi('F','NB_MODES_STA',nom_bamo,'RESULTAT')
+
+ nbmodt2 = MATR_GENE['MATR_RIGI'].DESC.get()[1]
+ if nbmodt2 != nbmodt:
+ UTMESS('F','ALGORITH5_42')
+
+ if INFO==2:
+ texte = 'NOMBRE DE MODES: '+str(nbmodt)+' MODES DYNAMIQUES: '+str(nbmodd)+' MODES STATIQUES: '+str(nbmods)
+ aster.affiche('MESSAGE',texte)
+ aster.affiche('MESSAGE','COMPOSANTE '+NOM_CMP)
+ SPEC = NP.zeros((NB_FREQ,nbmodt,nbmodt)) + 1j
+#
+#---------------------------------------------------------------------
+ # BOUCLE SUR LES FREQUENCES
+ VITE_ONDE = MATR_COHE['VITE_ONDE']
+ alpha = MATR_COHE['PARA_ALPHA']
+ abscisse = [None]*NB_FREQ
+
+ for k in range(0,NB_FREQ):
+ freqk=FREQ_INIT+PAS*k
+ aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk))
+
+ # Matrice de coherence
+ XX=noe_interf[:,0]
+ YY=noe_interf[:,1]
+
+ XN=NP.repeat(XX,nbno)
+ YN=NP.repeat(YY,nbno)
+ XR=NP.reshape(XN,(nbno,nbno))
+ YR=NP.reshape(YN,(nbno,nbno))
+ XRT=NP.transpose(XR)
+ YRT=NP.transpose(YR)
+ DX=XR-XRT
+ DY=YR-YRT
+ DIST=DX**2+DY**2
+ COHE=NP.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.))
+
+ # On desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
+ aster.matfpe(-1)
+ eig, vec =linalg.eig(COHE)
+ vec = NP.transpose(vec) # les vecteurs sont en colonne dans numpy
+ aster.matfpe(1)
+ eig=eig.real
+ vec=vec.real
+ # on rearrange selon un ordre decroissant
+ eig = NP.where(eig < 1.E-10, 0.0, eig)
+ order = (NP.argsort(eig)[::-1])
+ eig = NP.take(eig, order)
+ vec = NP.take(vec, order, 0)
+
+ #-----------------------
+ # Nombre de modes POD a retenir
+ etot=NP.sum(NP.diag(COHE))
+ ener=0.0
+ nbme=0
+
+ if INFO==2:
+ aster.affiche('MESSAGE','ETOT :'+str(etot))
+ while nbme < nbno:
+ ener= eig[nbme]+ener
+ prec=ener/etot
+ nbme=nbme+1
+ if INFO==2:
+ aster.affiche('MESSAGE','VALEUR PROPRE '+str(nbme)+' : '+str(eig[nbme-1]))
+ if prec > PRECISION :
+ break
+
+ aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme))
+ aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec))
+
+ PVEC=NP.zeros((nbme,nbno))
+ for k1 in range(0,nbme):
+ PVEC[k1, 0:nbno]=NP.sqrt(eig[k1])*vec[k1]
+ # CALCUL DE FS variable-------------------------------
+ XO=NP.zeros((nbme,nbmods))
+ if NOM_CMP=='DX':
+ COMP = 1
+ elif NOM_CMP=='DY':
+ COMP = 2
+ elif NOM_CMP=='DZ':
+ COMP = 3
+
+ #---------MODES interface
+ # ----- boucle sur les modes statiques
+ for mods in range(0,nbmods):
+ nmo = nbmodd+mods+1
+ __CHAM=CREA_CHAMP( TYPE_CHAM='NOEU_DEPL_R',
+ OPERATION='EXTR',
+ NUME_ORDRE=nmo,
+ RESULTAT = resultat ,
+ NOM_CHAM = 'DEPL'
+ );
+ MCMP =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER]).valeurs
+
+ NNO =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER], topo=1).noeud
+
+
+ som=NP.sum(MCMP)
+ max1=NP.max(MCMP)
+ min1=NP.min(MCMP)
+ maxm=NP.max([NP.abs(max1), NP.abs(min1)])
+ #CALCUL DE XO
+# on recupere la composante COMP (dx,dy,dz) des modes et on projete
+ # CAS 1: MODES DE CORPS RIGIDE
+ if INTERF['MODE_INTERF'] =='CORP_RIGI':
+ for modp in range(0,nbme):
+ #modes de translation
+ if mods+1 <=3:
+ if NP.abs(som)<10.E-6:
+ XO[modp,mods]=0.0
+ else :
+ fact=1./som
+ XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+ #modes de rotation
+ else:
+ if maxm<10.E-6:
+ if som<10.E-6:
+ XO[modp,mods]=0.0
+ else :
+ UTMESS('F','ALGORITH6_86')
+ else :
+ fact = 1./(nbno)
+ XO[modp,mods]=1./(maxm**2.)*fact*NP.inner(MCMP,PVEC[modp])
+
+ # CAS 2: MODES EF
+ if INTERF['MODE_INTERF'] =='TOUT':
+ for modp in range(0,nbme):
+ if NP.abs(som)<10.E-6:
+ if maxm<10.E-6:
+ XO[modp,mods]=0.0
+ else:
+ UTMESS('F','UTILITAI5_89')
+ else:
+ fact=1./som
+ XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+
+ DETRUIRE(CONCEPT=_F(NOM=(__CHAM)),INFO=1)
+
+ #----Impedances etc.-----------------------------------------------------------------
+
+ if k>0:
+ DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1)
+
+ __impe = LIRE_IMPE_MISS(BASE=resultat,
+ TYPE=TYPE,
+ NUME_DDL_GENE=nume_ddlgene,
+ UNITE_RESU_IMPE= UNITE_RESU_IMPE,
+ FREQ_EXTR=freqk,
+ );
+ __rito=COMB_MATR_ASSE(COMB_C=(
+ _F(MATR_ASSE=__impe,
+ COEF_C=1.0+0.j,),
+ _F(MATR_ASSE=MATR_GENE['MATR_RIGI'],
+ COEF_C=1.0+0.j,),
+ ),
+ SANS_CMP='LAGR',
+ );
+ __fosi = LIRE_FORC_MISS(BASE=resultat,
+ NUME_DDL_GENE=nume_ddlgene,
+ NOM_CMP=NOM_CMP,
+ NOM_CHAM='DEPL',
+ UNITE_RESU_FORC = UNITE_RESU_FORC,
+ FREQ_EXTR=freqk,);
+ # impedance
+ MIMPE=__impe.EXTR_MATR_GENE()
+ # extraction de la partie modes interface
+ KRS = MIMPE[nbmodd:nbmodt,nbmodd:nbmodt]
+
+ # force sismique pour verif
+# FS0=__fosi.EXTR_VECT_GENE_C()
+# FSE=FS0[nbmodd:nbmodt][:]
+ SP=NP.zeros((nbmodt,nbmodt))
+ for k1 in range(0,nbme):
+ # calcul de la force sismique mode POD par mode POD
+ FS = NP.dot(KRS,XO[k1])
+ Fzero=NP.zeros((1,nbmodd))
+ FS2=NP.concatenate((Fzero,NP.reshape(FS,(1,nbmods))),1)
+ # Calcul harmonique
+ __fosi.RECU_VECT_GENE_C(FS2[0])
+ __dyge = DYNA_LINE_HARM(MODELE=modele,
+ MATR_MASS = MATR_GENE['MATR_MASS'],
+ MATR_RIGI = __rito,
+ FREQ = freqk,
+ MATR_AMOR = __ma_amort,
+ EXCIT =_F ( VECT_ASSE = __fosi,
+ COEF_MULT= 1.0,
+ ),
+ );
+ # recuperer le vecteur modal depl calcule par dyge
+ desc = __dyge.DESC.get()
+ assert desc[0].strip() == 'DEPL', 'Champ DEPL non trouvé'
+ nomcham = __dyge.TACH.get()[1][0].strip()
+ cham = sd_cham_gene(nomcham)
+ RS = NP.array(cham.VALE.get())
+ SP=SP+RS*NP.conj(RS[:,NP.newaxis])
+ DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1)
+
+ SPEC[k]=SP
+
+ abscisse[k]= freqk
+##---------------------------------------------------------------------
+# Ecriture des tables
+#---------------------------------------------------------------------
+# ------ CREATION DE L OBJET TABLE
+ tab = Table()
+ tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT', 'DIMENSION' : nbmodt})
+ for k2 in range(nbmodt):
+ if OPTION =='DIAG' : # on ecrit uniquement les termes diagonaux (autospectres) de la matrice
+ foncc=[]
+ for k in range(NB_FREQ) :
+ foncc.append(abscisse[k])
+ foncc.append(SPEC[k][k2,k2].real)
+ foncc.append(SPEC[k][k2,k2].imag)
+ _f = DEFI_FONCTION(NOM_PARA='FREQ',
+ NOM_RESU='SPEC',
+ VALE_C = foncc )
+ # Ajout d'une ligne dans la Table
+ tab.append({'NUME_ORDRE_I' : k2+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+
+ else: # on ecrit tout
+ for k1 in range(k2+1):
+ foncc=[]
+ for k in range(NB_FREQ) :
+ foncc.append(abscisse[k])
+ foncc.append(SPEC[k][k1,k2].real)
+ foncc.append(SPEC[k][k1,k2].imag)
+ _f = DEFI_FONCTION(NOM_PARA='FREQ',
+ NOM_RESU='SPEC',
+ VALE_C = foncc )
+ # Ajout d'une ligne dans la Table
+ tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+
+ # Creation du concept en sortie
+ dict_keywords = tab.dict_CREA_TABLE()
+ tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION',
+ **dict_keywords)
+ return ier
--- /dev/null
+#@ MODIF exec_logiciel_ops Macro DATE 15/03/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 COURTOIS M.COURTOIS
+
+import os
+import os.path as osp
+import traceback
+import shutil
+from types import ListType, TupleType
+EnumTypes = (ListType, TupleType)
+
+# ------------------------------------------------------------------------------
+def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO, **args):
+ """
+ Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
+ colonnes de table...
+ Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
+ """
+ macro='EXEC_LOGICIEL'
+ import aster
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.System import ExecCommand
+ from Utilitai.UniteAster import UniteAster
+
+ PRE_GMSH = self.get_cmd("PRE_GMSH")
+ PRE_GIBI = self.get_cmd("PRE_GIBI")
+ LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
+
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ #----------------------------------------------
+ # constantes des modes d'exécution
+ CMD_EXTERNE = 1
+ EXECFILE = 2
+ mode_lancement = None
+
+ # paramètres nécessaires pour écrire la ligne de commande
+ # !! d_para['options'] est une liste !!
+ d_para = {'prog' : '', 'options' : ''}
+
+ l_args = []
+ if ARGUMENT != None:
+ l_args = ARGUMENT[:]
+ if type(l_args) not in EnumTypes:
+ l_args = [l_args,]
+
+ #----------------------------------------------
+ # 1. Préparation des données
+ # 1.1. EXEC_LOGICIEL standard
+ if MAILLAGE == None:
+ mode_lancement = CMD_EXTERNE
+ cmd = '%(prog)s %(options)s'
+
+ # 1.2. Cas "lancement d'un mailleur"
+ else:
+ mcf = MAILLAGE[0]
+ dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
+ d_para['fichIN'] = 'fort.%d' % dMCF['UNITE_GEOM']
+ d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
+ if osp.exists(d_para['fichOUT']):
+ os.remove(d_para['fichOUT'])
+
+ if dMCF['FORMAT'] == 'GMSH':
+ mode_lancement = CMD_EXTERNE
+ cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
+ d_para['prog'] = osp.join(aster.repout(), 'gmsh')
+ d_para['options'] = ('-3',)
+
+ elif dMCF['FORMAT'] == 'GIBI':
+ mode_lancement = CMD_EXTERNE
+ cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
+ d_para['prog'] = osp.join(aster.repout(), 'gibi')
+
+ elif dMCF['FORMAT'] == 'SALOME':
+ mode_lancement = EXECFILE
+ if len(l_args) < 1:
+ UTMESS('F','EXECLOGICIEL0_1')
+ else:
+ d_para['fichMED'] = l_args[0]
+
+ else:
+ UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT'])
+
+
+ #----------------------------------------------
+ # 2. lecture des mots-clés
+ if LOGICIEL != None:
+ d_para['prog'] = LOGICIEL
+
+ if len(l_args) > 0:
+ d_para['options'] = l_args
+ d_para['options'] = ' '.join(d_para['options'])
+
+ #----------------------------------------------
+ # 3. Exécution
+ # 3a. Lancement d'une commande externe
+ if mode_lancement == CMD_EXTERNE:
+ scmd = cmd % d_para
+ comment = "Lancement de la commande :\n%s" % scmd
+ iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, separated_stderr=True)
+ erreur = iret > CODE_RETOUR_MAXI
+ if CODE_RETOUR_MAXI == -1: erreur = False
+
+ # output
+ if INFO > 0 or erreur:
+ UTMESS('I', 'EXECLOGICIEL0_11', vali=(iret, CODE_RETOUR_MAXI))
+ UTMESS('I', 'EXECLOGICIEL0_9', valk=output)
+
+ # en cas d'erreur, on dump tout dans le .resu + .erre
+ if INFO == 2 or erreur:
+ UTMESS('I', 'EXECLOGICIEL0_8', valk=scmd, print_as='E')
+ UTMESS('I', 'EXECLOGICIEL0_10', valk=error, print_as='E')
+
+ if erreur:
+ UTMESS('F', 'EXECLOGICIEL0_3', vali=[CODE_RETOUR_MAXI, iret])
+
+ #----------------------------------------------
+ # 3b. Exécution d'un fichier Python
+ elif mode_lancement == EXECFILE:
+ if d_para['prog'] != '':
+ UTMESS('A', 'EXECLOGICIEL0_4')
+ context={}
+ try:
+ execfile(d_para['fichIN'], context)
+ except:
+ traceback.print_exc()
+ txt = open(d_para['fichIN'], 'r').read()
+ UTMESS('F', 'EXECLOGICIEL0_5', valk=txt)
+
+ if not osp.exists(d_para['fichMED']):
+ UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED'])
+ else:
+ # copie fichMED vers fichOUT pour pouvoir le récupérer
+ shutil.copyfile(d_para['fichMED'], d_para['fichOUT'])
+
+ else:
+ UTMESS('F','EXECLOGICIEL0_7',valk=mode_lancement)
+
+ #----------------------------------------------
+ # 4. Conversion du maillage
+ if MAILLAGE != None:
+ UL = UniteAster()
+ umail = UL.Libre(action='ASSOCIER',
+ nom='exec_logiciel.%s2mail' % dMCF['FORMAT'].lower())
+
+ if not osp.exists(d_para['fichOUT']):
+ UTMESS('F', 'EXECLOGICIEL0_13', valk=dMCF['FORMAT'])
+
+ # déclaration du concept maillage en sortie
+ self.DeclareOut('mail', dMCF['MAILLAGE'])
+
+ lire_mail_opts = {}
+ if dMCF['FORMAT'] == 'GMSH':
+ PRE_GMSH(UNITE_GMSH = dMCF['UNITE'],
+ UNITE_MAILLAGE = umail)
+
+ elif dMCF['FORMAT'] == 'GIBI':
+ PRE_GIBI(UNITE_GIBI = dMCF['UNITE'],
+ UNITE_MAILLAGE = umail)
+
+ elif dMCF['FORMAT'] == 'SALOME':
+ # ici l'unité en entrée de LIRE_MAILLAGE ne correspond pas au .mail
+ # mais au fichier MED en sortie du execfile.
+ umail = dMCF['UNITE']
+ etat = UL.Etat(umail, etat='O', TYPE='LIBRE', nom=d_para['fichMED'])
+ lire_mail_opts['FORMAT'] = 'MED'
+ lire_mail_opts['INFO_MED'] = INFO
+
+ mail = LIRE_MAILLAGE(UNITE = umail,
+ INFO = INFO,
+ **lire_mail_opts)
+
+ UL.EtatInit()
+ return ier
+
--- /dev/null
+#@ MODIF externe_mess Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 sys
+"""
+Définition de la méthode UTMESS pour reca_xxxx.py, Graph.py, Table.py
+"""
+def UTMESS(code,sprg,texte):
+ fmt='\n <%s> <%s> %s\n\n'
+ print fmt % (code,sprg,texte)
+ if code=='F': sys.exit()
--- /dev/null
+#@ MODIF fiabilite_fichier 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
+#
+class fiabilite_fichier :
+#
+ """ Classe des fichiers de données des logiciels fiabilistes
+ Cette classe a été mise au point pour le couplage entre
+ Code_ASTER et MEFISTO, mais pourrait servir ailleurs.
+ """
+#
+#
+#====
+# 1. Le constructeur
+#====
+#
+#
+ def __init__ ( self, jdc, Rep_Calc_LOGICIEL_global, nomfic, info = 1 ) :
+#
+# jdc : le jeu de commandes en cours de traitement
+#
+ self.jdc = jdc
+#
+# Rep_Calc_LOGICIEL_global : le répertoire d'exécution du logiciel de fiabilité
+#
+ self.Rep_Calc_LOGICIEL_global = Rep_Calc_LOGICIEL_global
+#
+# nomfic : nom local du fichier à créer
+#
+ self.nomfic = nomfic
+#
+# messages_erreur : messages d'erreur
+#
+ self.messages_erreur = { 0 : "Tout va bien",
+ 1 : "==> Ce fichier est inconnu.",
+ 2 : "==> Ce type d'ouverture est inconnu.",
+ 10 : "==> Problème à l'ouverture.",
+ 11 : "==> Problème à la fermeture.",
+ 20 : "==> Problème à l'impression." }
+#
+# info : niveau d'information au sens ASTER
+#
+ self.info = info
+#
+# ligne_sep : ligne de séparation
+#
+ self.ligne_sep = "========================================================="
+ self.ligne_commentaire = "#" + self.ligne_sep + "\n"
+#
+ if info >= 2 :
+ print "Création du fichier : "+self.nomfic
+#
+#====
+# 2. Ouverture du fichier
+#====
+#
+ def Ouvre_Fichier ( self, type_ouvr ) :
+#
+# 2.0. ==> Préalables
+#
+ """
+ Ouvre le fichier en lecture ou écriture.
+ 0 : tout s'est bien passé
+ 1 : on veut ouvrir en lecture un fichier qui n'existe pas
+ 2 : le mode d'ouverture est inconnu
+ 10 : impossible d'ouvrir
+ """
+#
+ import os
+#
+# 2.1. ==> Le nom global du fichier
+#
+ self.nomfic_global = os.path.join(self.Rep_Calc_LOGICIEL_global,self.nomfic)
+#
+# 2.2. ==> Controles
+#
+ erreur = 0
+#
+ if ( type_ouvr == "w" or type_ouvr == "r" ) :
+#
+ if ( type_ouvr == "r" ) :
+ if not os.path.isfile(self.nomfic_global) :
+ erreur = 1
+
+ else :
+#
+ self.jdc.cr.warn("Type d'ouverture : "+type_ouvr)
+ erreur = 2
+#
+# 2.3. ==> Ouverture vraie
+#
+ if not erreur :
+#
+ erreur_partiel = [0]
+ try :
+ self.fic = open( self.nomfic_global, type_ouvr )
+ except os.error,erreur_partiel :
+ self.jdc.cr.warn("Code d'erreur de open : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+ erreur = 10
+#
+# 2.4. ==> C'est fini
+#
+ if erreur :
+ self.jdc.cr.warn("Fichier : "+self.nomfic)
+ self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+ return erreur
+#
+#====
+# 3. Fermeture du fichier
+#====
+#
+ def Ferme_Fichier ( self ) :
+#
+# 3.0. ==> Préalables
+#
+ """
+ Ferme le fichier.
+ 0 : tout s'est bien passé
+ 20 : impossible d'imprimer
+ """
+#
+ import os
+#
+# 3.1. ==> Controles
+#
+ erreur = 0
+#
+ if not os.path.isfile(self.nomfic_global) :
+ erreur = 1
+#
+# 3.2. ==> Fermeture vraie
+#
+ if not erreur :
+#
+ erreur_partiel = [0]
+ try :
+ self.fic.close( )
+ except os.error,erreur_partiel :
+ self.jdc.cr.warn("Code d'erreur de close : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+ erreur = 11
+#
+# 3.3. ==> C'est fini
+#
+ if erreur :
+ self.jdc.cr.warn("Fichier : "+self.nomfic)
+ self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+ return erreur
+#
+#====
+# 4. Impression du contenu du fichier
+#====
+#
+ def Imprime_Fichier ( self ) :
+#
+# 4.0. ==> Préalables
+#
+ """
+ Imprime le fichier.
+ 0 : tout s'est bien passé
+ 20 : impossible d'imprimer
+ """
+#
+# 4.1. ==> Lecture
+#
+ erreur = self.Ouvre_Fichier ( "r" )
+ if not erreur :
+ les_lignes = self.fic.readlines()
+ erreur = self.Ferme_Fichier ( )
+#
+# 4.2. ==> Impression
+#
+ if not erreur :
+#
+ print "\n"+self.ligne_sep
+ print "Contenu du fichier " + self.nomfic," :"
+ for ligne in les_lignes :
+ print ligne[:-1]
+ print self.ligne_sep+"\n"
+#
+# 4.4. ==> C'est fini
+#
+ if erreur :
+ erreur = 20
+ self.jdc.cr.warn("Fichier : "+self.nomfic)
+ self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+ return erreur
+#
+#====
+# 5. Ecriture de lignes de commentaires
+#====
+#
+ def Ecrit_Commentaires ( self, comm ) :
+#
+ """
+ Liste = commentaires à écrire
+ Soit c'est une chaine qu'on écrit sur une ligne ;
+ Soit c'est une liste, qu'on écrit à raison de une par ligne.
+ Remarque : cela suppose que le fichier est ouvert en écriture
+ """
+#
+ if type(comm) == type([ ]) :
+ Liste = comm
+ else :
+ Liste = [comm]
+#
+ for ligne in Liste :
+ self.fic.write("# "+str(ligne)+"\n")
+#
+#====
+# 6. Ecriture de lignes de titres
+#====
+#
+ def Ecrit_Titre ( self, comm ) :
+#
+ """
+ Liste = commentaires à écrire, encadrés par des séparateurs
+ Soit c'est une chaine qu'on écrit sur une ligne ;
+ Soit c'est une liste, qu'on écrit à raison de une par ligne.
+ Remarque : cela suppose que le fichier est ouvert en écriture
+ """
+#
+ self.fic.write(self.ligne_commentaire)
+ self.Ecrit_Commentaires(comm)
+ self.fic.write(self.ligne_commentaire)
+#
+#====
+# 7. Ecriture d'une ligne de valeurs
+#====
+#
+ def Ecrit_Valeurs ( self, val ) :
+#
+ """
+ Liste = liste des valeurs à écrire, représenatn une ligne
+ Remarque : cela suppose que le fichier est ouvert en écriture
+ """
+#
+ if type(val) == type([ ]) :
+ ligne = " "
+ for aux in val :
+ ligne = ligne + " " + str(aux)
+ else :
+ ligne = str(val)
+#
+ self.fic.write(ligne+"\n")
+#
+#
+#=======================================================================================
+#=======================================================================================
+
+
+#
+#
+if __name__ == "__main__" :
+#
+ import os
+ import sys
+ import tempfile
+#
+# 1. ==> Préalable
+#
+ Rep_Calc_LOGICIEL_global = tempfile.mktemp()
+ os.mkdir(Rep_Calc_LOGICIEL_global)
+#
+ jdc = None
+#
+# 2. ==> Création de la classe
+#
+ nomfic = "dataGrad"
+ fic = fiabilite_fichier ( jdc, Rep_Calc_LOGICIEL_global , nomfic )
+#
+# 3. ==> Ouverture du fichier
+#
+ erreur = fic.Ouvre_Fichier ( "w" )
+#
+# 4. ==> Remplissage du fichier
+#
+ if not erreur :
+ aux = ["Titre 1", "Titre 2"]
+ fic.Ecrit_Titre (aux)
+ aux = ["Ligne 1", "Ligne 2"]
+ fic.Ecrit_Commentaires (aux)
+ aux = "Ligne en forme de chaine"
+ fic.Ecrit_Commentaires (aux)
+ aux = 1789.1792
+ fic.Ecrit_Commentaires (aux)
+ aux = [1, 0.0]
+ fic.Ecrit_Valeurs (aux)
+ aux = 1958.
+ fic.Ecrit_Valeurs (aux)
+#
+# 5. ==> Fermeture du fichier
+#
+ if not erreur :
+ erreur = fic.Ferme_Fichier ( )
+#
+# 4. ==> Impression du fichier
+#
+ if not erreur :
+ erreur = fic.Imprime_Fichier ( )
+#
+# 4. ==> La fin
+#
+ 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)
+#
+ if erreur :
+ mess = "Erreur " + str(erreur)
+ else :
+ mess = "Fin normale."
+ sys.exit(mess)
--- /dev/null
+#@ MODIF fiabilite_mefisto Macro DATE 11/05/2010 AUTEUR COURTOIS 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
+
+import os
+
+
+def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
+ INFO, VERSION,
+ SEUIL, SEUIL_TYPE,
+ VARIABLE,
+ valeurs_lois,
+ **args ) :
+#
+# valeurs_lois est un dictionnaire indexé sur les variables.
+# Chaque case, valeurs_lois[m], est un dictionnaire contenant :
+# d["v_moy_physique"] = valeur moyenne physique
+# d["v_moy_loi"] = valeur moyenne de la loi
+# d["v_min_loi"] = valeur minimale de la loi
+# d["v_max_loi"] = valeur maximale de la loi
+# d["sigma_loi"] = ecart type de la loi
+#
+# 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.
+#
+ """ Ecriture des données spécifiques à MEFISTO. """
+#
+ import numpy
+ from Macro import fiabilite_fichier
+ from Utilitai.Utmess import UTMESS
+#
+#____________________________________________________________________
+#
+# 1. Préalables
+#____________________________________________________________________
+#
+#
+ messages_erreur = { 0 : "Tout va bien",
+ 1 : "Fichier inconnu.",
+ 2 : "Problème d'ouverture de fichier.",
+ 10 : "Problème d'ouverture de fichier.",
+ 11 : "Problème de fermeture de fichier.",
+ 20 : "Problème d'impression de fichier.",
+ 50 : "Donnée inacceptable.",
+ 100 : "Erreur." }
+#
+ trad_oui_non = { "OUI" : 1,
+ "NON" : 0 }
+#
+ erreur = 0
+#
+ while not erreur :
+#
+#____________________________________________________________________
+#
+# 2. Les fichiers pour le logiciel de fiabilité
+# Ils sont créés dans le répertoire d'exécution du logiciel de fiabilité, avec leurs noms officiels
+#____________________________________________________________________
+#
+#
+ fic_dataMenu = "dataMenu"
+ fic_dataStoch = "dataStoch"
+ fic_dataNum = "dataNum"
+ fic_dataGrad = "dataGrad"
+#
+#____________________________________________________________________
+#
+# 3. Construction du fichier 'dataMenu'
+#____________________________________________________________________
+#
+# 3.1 ==> Ouverture du fichier
+#
+ f_menu = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataMenu, INFO )
+ erreur = f_menu.Ouvre_Fichier ( "w" )
+ if erreur :
+ break
+#
+# 3.2 ==> Ecriture des données nécessaires
+#
+ f_menu.Ecrit_Titre ("MENU DU PROGRAMME MEFISTO")
+ f_menu.Ecrit_Titre ("1 <=> OUI et 0 <=> NON (entiers)")
+#
+ f_menu.Ecrit_Titre ("Recherche du point de conception")
+ aux = trad_oui_non[args["RECH_PT_CONCEPT"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("First Order Reliability Analyses")
+ aux = trad_oui_non[args["METHODE_FORM"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Second Order Reliability Analyses")
+ aux = trad_oui_non[args["METHODE_SORM"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Importance Sampling Analyses")
+ aux = trad_oui_non[args["TIRAGE_IMPORTANCE"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Optimality Test (1) : Hessian Test")
+ aux = trad_oui_non[args["T_HESSIEN"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Optimality Test (2) : Sphere Test")
+ aux = trad_oui_non[args["T_SPHERE"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Optimality Test (3) : Strong Max Test")
+ aux = trad_oui_non[args["T_MAXIMUM_FORT"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Experiment Plan")
+ aux = trad_oui_non[args["PLAN_EXPERIENCE"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+ f_menu.Ecrit_Titre ("Polynomial Taylor Approximation (order 2)")
+ aux = trad_oui_non[args["POLYNOME_TAYLOR"]]
+ f_menu.Ecrit_Valeurs (aux)
+#
+# 3.3 ==> Fermeture du fichier
+#
+ erreur = f_menu.Ferme_Fichier ( )
+ if erreur :
+ break
+#
+ if INFO >= 2 :
+ erreur = f_menu.Imprime_Fichier ( )
+ if erreur :
+ break
+#
+#____________________________________________________________________
+#
+# 4. Construction du fichier "dataStoch"
+#____________________________________________________________________
+#
+# 4.1 ==> Ouverture du fichier
+#
+ f_stoch = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataStoch, INFO )
+ erreur = f_stoch.Ouvre_Fichier ( "w" )
+ if erreur :
+ break
+#
+# 4.2 ==> Nombre d'occurence de VARIABLE
+#
+ nb_occu_variable = len(VARIABLE)
+#
+# 4.3 ==> Ecriture des données nécessaires
+#
+ f_stoch.Ecrit_Titre ("Code name")
+ aux=VERSION.replace("_",".")
+ aux=aux.replace("N","n")
+ aux=aux.replace("V","v")
+ f_stoch.Ecrit_Valeurs ( "aster_" + aux )
+#
+ aux = [ "Gradients evaluated by the code" ]
+ aux.append("1 : Au moins 1 ; 0 : aucun")
+ f_stoch.Ecrit_Titre (aux)
+ gradient = 0
+ for m in VARIABLE :
+ if m["GRADIENT"] == "OUI" : gradient = 1
+ f_stoch.Ecrit_Valeurs (gradient)
+#
+ f_stoch.Ecrit_Titre ("Variates number")
+ f_stoch.Ecrit_Valeurs ( nb_occu_variable )
+#
+ aux = [ "Stochastic Variates" ]
+ aux.append("1: Uniforme (min, max)")
+ aux.append("2: Normal (mean, std dev)")
+ aux.append("3: LogNormal (mean, std dev, min)")
+ aux.append("4: Normal Truncated (mean, std dev, min, max)")
+ f_stoch.Ecrit_Titre (aux)
+#
+ for m in VARIABLE :
+#
+ d = valeurs_lois[m]
+ if m["LOI"] == "UNIFORME" :
+ f_stoch.Ecrit_Valeurs ( [ m["NOM"], 1 , d["v_min_loi"] , d["v_max_loi"] ] )
+ elif m["LOI"] == "NORMALE" :
+ f_stoch.Ecrit_Valeurs ( [ m["NOM"], 2 , d["v_moy_loi"] , d["sigma_loi"] ] )
+ elif m["LOI"] == "LOGNORMALE" :
+ f_stoch.Ecrit_Valeurs ( [ m["NOM"], 3 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] ] )
+ elif m["LOI"] == "NORMALE_TRONQUEE" :
+ f_stoch.Ecrit_Valeurs ( [ m["NOM"], 4 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] , d["v_max_loi"] ] )
+ else :
+ erreur = 50
+#
+ if erreur :
+ break
+#
+ f_stoch.Ecrit_Titre ("Initial Points")
+ for m in VARIABLE :
+ if m["POINT_INI"] is None :
+ aux = valeurs_lois[m]["v_moy_physique"]
+ else :
+ aux = m["POINT_INI"]
+ f_stoch.Ecrit_Valeurs ( aux )
+#
+ f_stoch.Ecrit_Titre ("Reference Points")
+ for m in VARIABLE :
+ if m["POINT_REF"] is None :
+ aux = valeurs_lois[m]["v_moy_physique"]
+ else :
+ aux = m["POINT_REF"]
+ f_stoch.Ecrit_Valeurs ( aux )
+#
+ f_stoch.Ecrit_Titre ("Design Points")
+ for m in VARIABLE :
+ if args["RECH_PT_CONCEPT"] == "OUI" :
+ aux = 1792.
+ elif m["POINT_CONCEPT"] is None :
+ aux = valeurs_lois[m]["v_moy_physique"]
+ else :
+ aux = m["POINT_CONCEPT"]
+ f_stoch.Ecrit_Valeurs ( aux )
+#
+ f_stoch.Ecrit_Titre ("Correlation matrix fictive")
+# if args.has_key('MATRICE'):
+ if args["MATRICE"] != None:
+ if len(args["MATRICE"]) != nb_occu_variable**2:
+# +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
+# +str(nb_occu_variable**2))
+ UTMESS('F','FIABILITE0_1',vali=nb_occu_variable**2)
+ for m in range(nb_occu_variable) :
+ aux = [ ]
+ for n in range(nb_occu_variable) :
+ aux.append(args["MATRICE"][n + m*nb_occu_variable])
+ f_stoch.Ecrit_Valeurs ( aux )
+ else:
+ aux=numpy.identity(nb_occu_variable)
+ aux=numpy.concatenate(aux)
+ aux=aux.tolist()
+ f_stoch.Ecrit_Valeurs ( aux )
+#
+ f_stoch.Ecrit_Titre ("Parameter threshold value")
+ if SEUIL_TYPE == "MAXIMUM" :
+ aux = SEUIL
+ else :
+ aux = -SEUIL
+ f_stoch.Ecrit_Valeurs ( aux )
+#
+# 4.4 ==> Fermeture du fichier
+#
+ erreur = f_stoch.Ferme_Fichier ( )
+ if erreur :
+ break
+#
+ if INFO >= 2 :
+ erreur = f_stoch.Imprime_Fichier ( )
+ if erreur :
+ break
+#
+#____________________________________________________________________
+#
+# 5. Construction du fichier 'dataNum'
+#____________________________________________________________________
+#
+# 5.1 ==> Ouverture du fichier
+#
+ f_num = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataNum, INFO )
+ erreur = f_num.Ouvre_Fichier ( "w" )
+ if erreur :
+ break
+#
+# 5.2 ==> Ecriture des données nécessaires
+#
+ f_num.Ecrit_Titre ("Parameters : EpsU, EpsG, Tau, Omega, iterMax")
+ if args["RECH_PT_CONCEPT"] == "OUI" :
+ f_num.Ecrit_Valeurs (args["EPSILON_U"])
+ f_num.Ecrit_Valeurs (args["EPSILON_G"])
+ f_num.Ecrit_Valeurs (args["TAU"])
+ f_num.Ecrit_Valeurs (args["OMEGA"])
+ f_num.Ecrit_Valeurs (args["ITER_MAX"])
+ else :
+ aux = 0.1848
+ for k in range(5) :
+ f_num.Ecrit_Valeurs (aux)
+#
+ f_num.Ecrit_Titre ("Parameters : hgrad, hhess")
+ f_num.Ecrit_Valeurs (args["HGRAD"])
+ f_num.Ecrit_Valeurs (args["HHESS"])
+#
+ aux = [ "Parameter Optimality Test(sphere)" ]
+ aux.append("1: Parametric Method (Point Number in each direction)")
+ aux.append("2: Gaussian Method (Total Point Number)")
+ aux.append("3: Rejection Method (Total Point Number)")
+ f_num.Ecrit_Titre (aux)
+#
+ if args["T_SPHERE"] == "OUI" :
+#
+ if args["METHODE_TEST"] == "PARAMETRIQUE" :
+ aux1 = 1
+ elif args["METHODE_TEST"] == "GAUSSIENNE" :
+ aux1 = 2
+ elif args["METHODE_TEST"] == "REJECTION" :
+ aux1 = 3
+ else :
+ self.cr.warn("METHODE DE TEST : "+args["METHODE_TEST"])
+ erreur = 50
+ break
+#
+ aux2 = args["NB_POINT"]
+#
+ else :
+#
+# remarque : il faut mettre une valeur plausible en aux1, sinon plantage violent ...
+ aux1 = 1
+ aux2 = 1789
+#
+ f_num.Ecrit_Valeurs ( [ aux1 , aux2 ] )
+#
+ aux = [ "Parameters : alpha, beta" ]
+ aux.append("alpha: common net")
+ aux.append("beta: extreme net")
+ f_num.Ecrit_Titre (aux)
+ if args["PLAN_EXPERIENCE"] == "OUI" :
+ aux1 = args["ALPHA"]
+ aux2 = args["BETA"]
+ else :
+ aux1 = 1789.0
+ aux2 = 1789.0
+ f_num.Ecrit_Valeurs ( aux1 )
+ f_num.Ecrit_Valeurs ( aux2 )
+#
+ f_num.Ecrit_Titre ("Parameters Strong Max Test : cosLim, dProb")
+ if args["T_MAXIMUM_FORT"] == "OUI" :
+ aux1 = args["COS_LIM"]
+ aux2 = args["DPROB"]
+ else :
+ aux1 = 0.1789
+ aux2 = 0.1789
+ f_num.Ecrit_Valeurs ( aux1 )
+ f_num.Ecrit_Valeurs ( aux2 )
+#
+ f_num.Ecrit_Titre ("Parameter Importance Samplings : Simulation Number")
+ if args["TIRAGE_IMPORTANCE"] == "OUI" :
+ aux = args["NB_SIMULATION"]
+ else :
+ aux = 1945
+ f_num.Ecrit_Valeurs ( aux )
+#
+# 5.3 ==> Fermeture du fichier
+#
+ erreur = f_num.Ferme_Fichier ( )
+ if erreur :
+ break
+#
+ if INFO >= 2 :
+ erreur = f_num.Imprime_Fichier ( )
+ if erreur :
+ break
+#
+#____________________________________________________________________
+#
+# 6. Construction du fichier 'dataGrad'
+#____________________________________________________________________
+#
+# 6.1 ==> Création du fichier
+#
+ f_grad = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataGrad, INFO )
+ erreur = f_grad.Ouvre_Fichier ( "w" )
+ if erreur :
+ break
+#
+# 6.2 ==> Ecriture des données nécessaires
+#
+ f_grad.Ecrit_Titre ("Commentaires")
+#
+ for m in VARIABLE :
+ f_grad.Ecrit_Commentaires (m["NOM"])
+ if m["GRADIENT"] == "OUI" :
+ gradient = 1
+ increment = 0.0
+ else :
+ gradient = 0
+ increment = m["INCREMENT"]
+ aux = [gradient,increment]
+ f_grad.Ecrit_Valeurs (aux)
+#
+# 6.3 ==> Fermeture du fichier
+#
+ erreur = f_grad.Ferme_Fichier ( )
+ if erreur :
+ break
+#
+ if INFO >= 2 :
+ erreur = f_grad.Imprime_Fichier ( )
+ if erreur :
+ break
+#
+#____________________________________________________________________
+#
+# 7. C'est fini !
+#____________________________________________________________________
+#
+ break
+#
+ if erreur :
+ if not messages_erreur.has_key(erreur) :
+ erreur = 100
+ self.cr.warn(messages_erreur[erreur])
+ erreur = 11
+#
+ return erreur
+#
+########################## 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)
+#
+ INFO = 2
+ VERSION = "V3_2"
+ SEUIL = 1789.
+ SEUIL_TYPE = "MAXIMUM"
+ VARIABLE = []
+ args = {}
+ valeurs = {}
+#
+ erreur = fiabilite_mefisto ( None, Rep_Calc_LOGICIEL_global,
+ INFO, VERSION,
+ SEUIL, SEUIL_TYPE,
+ VARIABLE,
+ valeurs,
+ **args )
+### print "Erreur = ", erreur
+ Liste = os.listdir(Rep_Calc_LOGICIEL_global)
+#
+ for nomfic in Liste :
+ fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
+ os.chmod (fic_total,0755)
+ os.remove (fic_total)
+ os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+ sys.exit("blabla")
--- /dev/null
+#@ MODIF gene_vari_alea_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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,log,exp,pi,atan2,tan
+
+def gene_vari_alea_ops(self,**args):
+ self.set_icmd(1)
+ return 0
+
+def gene_vari_alea_init(self,d):
+ from Utilitai.Utmess import UTMESS
+ a =self.etape['BORNE_INF']
+ moyen =self.etape['VALE_MOY' ]
+ TYPE =self.etape['TYPE']
+ if self['INIT_ALEA']!=None :
+ jump =self.etape['INIT_ALEA' ]
+ self.iniran(jump)
+ if TYPE=='EXP_TRONQUEE' :
+ b =self.etape['BORNE_SUP']
+ if (a>=b) :
+ UTMESS('F','PROBA0_1',valr=[a,b])
+ elif (moyen<=a)or(moyen>=b) :
+ UTMESS('F','PROBA0_2',valr=[a,moyen,b])
+ k=1./(moyen-a)
+ if (exp(-b*k)<1.E-12) :
+ UTMESS('F','PROBA0_3')
+ # résolution par point fixe
+ eps =1.E-4
+ nitmax=100000
+ test =0.
+ while abs((test-k)/k)>eps :
+ test = k
+ k = 1./(moyen-(a*exp(-a*k) - b*exp(-b*k))/(exp(-a*k) - exp(-b*k)))
+ # génération de la variable aléatoire
+ alpha = exp(-a*k) - exp(-b*k)
+ self.sd.valeur=-( log(exp(-a*k)-alpha*self.getran()[0] ) ) /k
+ elif TYPE=='EXPONENTIELLE' :
+ if (moyen<=a) :
+ UTMESS('F','PROBA0_4',valr=[moyen,a])
+ v = moyen-a
+ u=self.getran()[0]
+ x = -log(1-u)
+ self.sd.valeur=a + v*x
+ elif TYPE=='GAMMA' :
+ delta =self.etape['COEF_VAR' ]
+ if (moyen<=a) :
+ UTMESS('F','PROBA0_4',valr=[moyen,a])
+ v = moyen-a
+ alpha = 1./(delta**2)
+ if (alpha<=1.) :
+ UTMESS('F','PROBA0_5')
+ gamma2 = alpha-1.
+ gamm1 = 1./gamma2
+ beta = sqrt(2.*alpha-1.)
+ beta2 = 1./(beta**2)
+ f0 = 0.5+(1./pi)*atan2(-gamma2/beta,1.)
+ c1 = 1.-f0
+ c2 = f0-0.5
+ vref = 0.
+ vv = -1.
+#
+ while (-vv>vref) :
+ u=self.getran()[0]
+ gamdev = beta*tan(pi*(u*c1+c2))+gamma2
+ unif=self.getran()[0]
+ if unif<0. :
+ UTMESS('F','PROBA0_6')
+ vv= -log(unif)
+ vref = log(1+beta2*((gamdev-gamma2)**2))+gamma2*log(gamdev*gamm1)-gamdev+gamma2
+#
+ if vv<=0. :
+ UTMESS('F','PROBA0_7')
+ self.sd.valeur = a + v*(delta**2)*gamdev
--- /dev/null
+#@ MODIF impr_diag_campbell_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 Mohamed TORKHANI
+
+
+
+def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_camp, TYP_PREC, TYP_TRI,
+ UNIT_FLE, UNIT_TOR, UNIT_LON, UNIT_TOT, UNIT_INT,L_S, **args) :
+# Macro permettant de tracer le diagramme de Campbell suivant
+# le type de suivi des modes et le type de calcul de la precession
+#Type de suivi, 0 SANS_TRI, 1 TRI_PREC, 2 TRI_FORM_MOD
+#Type de precession, 1 somme, 2 grande orbite
+
+ import numpy
+ from math import pi
+ import aster
+ from Accas import _F
+ from Noyau.N_types import is_float
+
+ from Macro.impr_diag_campbell_utils import (
+ CLASS_MODES, EXTR_FREQ, TRI_MODE_MACf, TRI_MODE_MACt, TRI_MODE_MACl, CALC_MACf,
+ CALC_MACt, CALC_MACl, CALC_PREC, TRI_MODE_PREC_DI, affiche_tab, affiche_tabint,
+ calc_pas, color_camp, sup_redon_list, sup_redon_listv, save_intersec
+ )
+
+
+ # On importe les definitions des commandes a utiliser dans la macro
+
+ POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
+ EXTR_MODE =self.get_cmd('EXTR_MODE')
+ NORM_MODE =self.get_cmd('NORM_MODE')
+ RECU_TABLE =self.get_cmd('RECU_TABLE')
+ MAC_MODES =self.get_cmd('MAC_MODES')
+ DEFI_LIST_REEL =self.get_cmd('DEFI_LIST_REEL')
+ DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
+ EXTR_TABLE =self.get_cmd('EXTR_TABLE')
+ IMPR_FONCTION =self.get_cmd('IMPR_FONCTION')
+ IMPR_RESU =self.get_cmd('IMPR_RESU')
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE')
+ DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
+ DETRUIRE =self.get_cmd('DETRUIRE')
+
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+
+ lvit=[None]
+ # Extraire les vitesses de rotation
+ nb_temp=0
+ while 1 :
+ try:
+ print 'nb_temp', nb_temp
+ lvit[nb_temp] = MODES['VITE_ROTA' ,nb_temp+1];
+ nb_temp=nb_temp+1;
+ lvit.append([None]);
+ except KeyError:
+ break
+
+ VITE_ROTA = lvit[0:nb_temp];
+ num_vit_tri=sup_redon_listv(VITE_ROTA);
+ # Recupere les modes suivant l'ordre de la liste des vitesses de rotation
+ nbV1=len(VITE_ROTA);
+ lmo=[None]*nbV1
+ for ii in range(0,nbV1):
+ itri = num_vit_tri[ii];
+ lmo[ii]=EXTR_TABLE(TYPE_RESU='MODE_MECA',
+ TABLE=MODES,
+ NOM_PARA='NOM_SD',
+ FILTRE=_F(NOM_PARA='NUME_VITE',VALE_I=itri),);
+
+ L_VIT1=[];
+
+ if type(VITE_ROTA)==list:
+ L_VIT1=VITE_ROTA;
+ elif type(VITE_ROTA)==tuple:
+ L_VIT1=list(VITE_ROTA);
+ elif is_float(VITE_ROTA):
+ L_VIT1.append(VITE_ROTA);
+
+
+ nbV=len(L_VIT1);
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Liste triee des vitesses en rad/s'
+ aster.affiche('RESULTAT', chaine)
+ for ii in range(nbV):
+ chaine= '%15.5E' %L_VIT1[ii];
+ aster.affiche('RESULTAT', chaine)
+
+
+ #-------------------------------------------------------------------------
+ # Tester le nombre de frequences calculees pour chaque vitesse de rotation
+ #-------------------------------------------------------------------------
+
+ nb_FREQ=[];
+ for ii in range(nbV):
+ # frequences totales
+ tabfreq = RECU_TABLE(CO= lmo[ii],NOM_PARA='FREQ',);
+ tab2=tabfreq.EXTR_TABLE();
+ tabf=tab2.FREQ;
+ nb_FREQ_prec=nb_FREQ;
+ nb_FREQ.append(len(tabf));
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabfreq)),INFO=1)
+
+ nbf_max=max(nb_FREQ);
+ nbf_min=min(nb_FREQ);
+ NFREQ =nbf_min;
+ if nbf_max!=nbf_min:
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Les nombres de frequences sont differents pour les vitesses de rotation.'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Pour poursuivre le calcul, NFREQ = %d' %NFREQ
+ aster.affiche('RESULTAT', chaine)
+ else:
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Nombre de valeurs propres detectees est %d' %NFREQ
+ aster.affiche('RESULTAT', chaine)
+ if NFREQ_camp > NFREQ:
+ chaine='Nombre de frequences demandees pour le trace %d' %NFREQ_camp
+ aster.affiche('RESULTAT', chaine)
+ NFREQ_camp = NFREQ-4;
+ chaine='Nombre de frequences pour le trace %d' %NFREQ_camp
+ aster.affiche('RESULTAT', chaine)
+ else:
+ chaine='Nombre de frequences demandees pour le trace %d' %NFREQ_camp
+ aster.affiche('RESULTAT', chaine)
+ if NFREQ_camp <=0 :
+ chaine='Le trace du diagramme de Campbell s''arrete !.'
+ aster.affiche('RESULTAT', chaine)
+
+
+ if NFREQ_camp>0:
+
+# ------------------------------------------------------------------
+# Classe les modes en flexion, en torsion , en traction/ compression
+# ------------------------------------------------------------------
+ Mf=[];
+ Mt=[];
+ Ml=[];
+
+
+ # Recuperer les noeuds du maillage
+ # construction des vecteurs jeveux
+ nom_mail=MAILLAGE.nom
+ lenm=len(nom_mail)
+ nom_mail=nom_mail+' '*(8-lenm)
+ vectnoeu=nom_mail+'.NOMNOE'
+ L_GR_NOEUD=aster.getvectjev(vectnoeu)
+
+
+ NOEU=len(L_GR_NOEUD);
+ C_MODES=CLASS_MODES(self,lmo,NFREQ,NFREQ_camp,L_GR_NOEUD,L_VIT1);
+
+ NFREQ_f=C_MODES[0];
+ NFREQ_t=C_MODES[1];
+ NFREQ_l=C_MODES[2];
+ Mf=C_MODES[3];
+ Mt=C_MODES[4];
+ Ml=C_MODES[5];
+
+ # Initialisation des tableaux de connexion apres classement
+ # en gardant la numerotation globale des modes
+ NVT=C_MODES[6];
+ NVTf_int=C_MODES[7];
+ NVTt_int=C_MODES[8];
+ NVTl_int=C_MODES[9];
+ NFREQ_fc=C_MODES[10];
+ NFREQ_tc=C_MODES[11];
+ NFREQ_lc=C_MODES[12];
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Nombre de frequences totale :' + str(NFREQ)
+ aster.affiche('RESULTAT', chaine)
+ chaine='Nombre de frequences en flexion :' + str(NFREQ_f) + ' ' + str(NFREQ_fc)
+ aster.affiche('RESULTAT', chaine)
+ chaine='Nombre de frequences torsion :' + str(NFREQ_t) + ' ' + str(NFREQ_tc)
+ aster.affiche('RESULTAT', chaine)
+ chaine='Nombre de frequences traction/compression :' + str(NFREQ_l) + ' ' + str(NFREQ_lc)
+ aster.affiche('RESULTAT', chaine)
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Initialisation des tableaux de connexion'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Modes non classes'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVT,NFREQ, nbV);
+ if NFREQ_f>0:
+ chaine='Modes de flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTf_int,NFREQ_f, nbV);
+ if NFREQ_t>0:
+ chaine='Modes de torsion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTt_int,NFREQ_t, nbV);
+ if NFREQ_l>0:
+ chaine='Modes de traction/compression'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTl_int,NFREQ_l, nbV);
+
+ #-----------------------
+ #Extraire les frequences
+ #-----------------------
+ FREQ=EXTR_FREQ(self,lmo,Mf,Mt,Ml, NFREQ, NFREQ_f, NFREQ_t, NFREQ_l);
+ FRQ=FREQ[0]
+ FRQf=FREQ[1]
+ FRQt=FREQ[2]
+ FRQl=FREQ[3]
+ FRQ_max=FREQ[4]
+ AMOf=FREQ[5]
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Frequences totales'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(FRQ,NFREQ, nbV);
+ if NFREQ_f>0:
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Frequences en flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(FRQf,NFREQ_f, nbV);
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Amortissement reduit'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(AMOf,NFREQ_f, nbV);
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ if NFREQ_t>0:
+ chaine='Frequences en torsion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(FRQt,NFREQ_t, nbV);
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ if NFREQ_l>0:
+ chaine='Frequences en traction/compression'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(FRQl,NFREQ_l, nbV);
+
+ # Initialisation des tableaux de connexion
+ # nouveau numerotation de modes par type de mode
+ # Sans tri
+ if NFREQ_f>0 :
+ NVTf =numpy.zeros((NFREQ_f, nbV), int);
+ for ii in range(nbV):
+ for jj in range(NFREQ_f):
+ NVTf[jj][ii]=jj+1;
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion initial en flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTf,NFREQ_f, nbV);
+
+ if NFREQ_t>0 :
+ NVTt =numpy.zeros((NFREQ_t, nbV), int);
+ for ii in range(nbV):
+ for jj in range(NFREQ_t):
+ NVTt[jj][ii]=jj+1;
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion initial en torsion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTt,NFREQ_t, nbV);
+
+ if NFREQ_l>0 :
+ NVTl =numpy.zeros((NFREQ_l, nbV), int);
+ for ii in range(nbV):
+ for jj in range(NFREQ_l):
+ NVTl[jj][ii]=jj+1;
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion initial en traction/compression'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTl,NFREQ_l, nbV);
+
+ # ------------------------------------------------------------------
+ # Tri par forme des modes
+ # Tri des frequences par calcul des coefficients MAC
+ # Remplissage du tableau de connexion
+ # ------------------------------------------------------------------
+ if TYP_TRI==2 :
+ # ------------------------------------------------------------------
+ # Calcul de la matrice MAC entre les bases successives en flexion
+ # ------------------------------------------------------------------
+ if NFREQ_f>0:
+ LMACf=CALC_MACf(self, Mf, NFREQ_f) ;
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine=' Tri par forme des modes TRI_FORM_MOD'
+ aster.affiche('RESULTAT', chaine)
+
+ for ii in range(nbV-1):
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ iv=nbV-ii-2
+ NVTf_mac=TRI_MODE_MACf(self, LMACf[iv],NFREQ_f, NVTf, iv);
+
+ OMIN = L_VIT1[0];
+ if(OMIN==0) :
+ for ii in range(NFREQ_f):
+ NVTf_mac[ii][0]=NVTf_mac[ii][1] ;
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion en flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTf_mac,NFREQ_f, nbV);
+
+ # ------------------------------------------------------------------
+ # Calcul de la matrice MAC entre les bases successives en torsion
+ # ------------------------------------------------------------------
+ if NFREQ_t>0:
+ LMACt=CALC_MACt(self, Mt, NFREQ_t) ;
+
+ for ii in range(nbV-1):
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ iv=nbV-ii-2
+ NVTt=TRI_MODE_MACt(self, LMACt[iv],NFREQ_t, NVTt, iv);
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion en torsion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTt,NFREQ_t, nbV);
+
+ # ----------------------------------------------------------------------------
+ # Calcul de la matrice MAC entre les bases successives en traction/compression
+ # ----------------------------------------------------------------------------
+ if NFREQ_l>0:
+ LMACl=CALC_MACl(self, Ml, NFREQ_l) ;
+
+ for ii in range(nbV-1):
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ iv=nbV-ii-2
+ NVTl=TRI_MODE_MACl(self, LMACl[iv],NFREQ_l, NVTl, iv);
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion en traction/compression'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTl,NFREQ_l, nbV);
+
+
+ #--------------------------------------------------------------------------
+ # Calcul le sens de precession pour les modes en flexion a une vitesse de rotation donnee
+ #--------------------------------------------------------------------------
+ if NFREQ_f>0:
+ SENS=CALC_PREC(self, Mf,NFREQ_f,L_GR_NOEUD, TYP_PREC);
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Sens de precession pour les modes en flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(SENS,NFREQ_f, nbV);
+
+ # ------------------------------------------------------------------
+ # Tri des modes en flexion par une methode de proche en proche
+ # avec verification du sens de precession
+ # Remplissage du tableau de connexion
+ # ------------------------------------------------------------------
+ if TYP_TRI==1 :
+ if NFREQ_f>0:
+ OMIN = L_VIT1[0]
+ PREC_DI=TRI_MODE_PREC_DI (SENS,NFREQ_f, NVTf, nbV, OMIN);
+ nb_prec_dir=PREC_DI[0];
+ nb_prec_inv=PREC_DI[1];
+ NVTf_prec=PREC_DI[2];
+
+
+
+ # --------------------------------
+ # Trace du diagramme de campbell
+ # --------------------------------
+ chaine='Trace du diagramme de campbell'
+ aster.affiche('RESULTAT', chaine)
+
+ #Conversion de la vitesse de rotation en tr/mn pour l'affichage
+ OM = L_VIT1;
+ for ii in range(nbV):
+ OM[ii] = OM[ii]*30./pi;
+
+ Vitesse_min = min(OM);
+ Vitesse_max = max(OM);
+
+ OM_int=[OM[ii] for ii in range(len(OM))]; # pour le calcul des points d'intersection
+
+ legende_x= 'Vitesse (tr/mn)';
+ if Vitesse_min<0:
+ if abs(Vitesse_min) > abs(Vitesse_max):
+ legende_x= 'Vitesse negative, en abscisse la valeur absolue de la vitesse (tr/mn)';
+ for ii in range(nbV):
+ OM[ii] = abs(OM[ii]);
+
+ __FX=DEFI_LIST_REEL(VALE=OM);
+
+ # Mise en page graphique
+ Vmin=min(OM);
+ Vmax=max(OM);
+
+
+
+ # Determination de la frequence maximale
+ Fmax=0.0;
+ for jf in range(NFREQ_fc):
+ for iv in range(nbV):
+ if TYP_TRI==0:
+ jf1=NVTf[jf][iv]-1;
+ if TYP_TRI==1:
+ jf1=NVTf_prec[jf][iv]-1;
+ if TYP_TRI==2:
+ jf1=NVTf_mac[jf][iv]-1;
+ F1=FRQf[jf1][iv];
+ if Fmax<F1:
+ Fmax=F1;
+
+ for jf in range(NFREQ_tc):
+ for iv in range(nbV):
+ jf1=NVTt[jf][iv]-1;
+ F1=FRQt[jf1][iv];
+ if Fmax<F1:
+ Fmax=F1;
+
+ for jf in range(NFREQ_lc):
+ for iv in range(nbV):
+ jf1=NVTl[jf][iv]-1;
+ F1=FRQl[jf1][iv];
+ if Fmax<F1:
+ Fmax=F1;
+
+ Fmin=0.0;
+ Fmax=Fmax*1.1;
+
+ # Calcul des bornes et pas de la grille pour les vitesses de rotation
+ BV = calc_pas(Vmin, Vmax);
+ BVmin = BV[0];
+ BVmax = BV[1];
+ pasV = BV[2];
+
+ print 'BVmin, BVmax, pasV', BVmin, BVmax, pasV
+ # Calcul des bornes et pas de la grille pour les frequences
+ BF = calc_pas(Fmin, Fmax);
+ BFmin = BF[0];
+ BFmax = BF[1];
+ pasF = BF[2];
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Fmax ' + str(Fmax) + ' BFmax ' + str(BFmax)
+ aster.affiche('RESULTAT', chaine)
+
+ TITRE1 = 'Diagramme de Campbell';
+ TITRE2 = 'Modes en flexion'
+
+ DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_FLE,)
+ DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_TOR,)
+ DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_LON,)
+ DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_TOT,)
+ # ---------------------------------------------------
+ # Trace du diagramme de campbell des modes en flexion
+ # ---------------------------------------------------
+ EPSI=1.E-7
+ LFONC =[];
+ FON1 =[];
+ mfac1 ={};
+ ll =0;
+ if NFREQ_fc>0:
+ for jf in range(NFREQ_fc):
+ for iv in range(nbV-1):
+ OM3 = -1. # OM3 different de -1, Changement de precession
+ OM4 = -1. # OM4 different de -1, Changement de stabilite
+ if TYP_TRI==0:
+ jf1=NVTf[jf][iv]-1;
+ jf2=NVTf[jf][iv+1]-1;
+ if TYP_TRI==1:
+ jf1=NVTf_prec[jf][iv]-1;
+ jf2=NVTf_prec[jf][iv+1]-1;
+ if TYP_TRI==2:
+ jf1=NVTf_mac[jf][iv]-1;
+ jf2=NVTf_mac[jf][iv+1]-1;
+
+ # Frequences
+ if jf1>=0 and jf2>=0:
+ F1=FRQf[jf1][iv];
+ F2=FRQf[jf2][iv+1];
+ A1=AMOf[jf1][iv];
+ A2=AMOf[jf2][iv+1];
+
+ # Vitesses
+ OM1=OM[iv];
+ OM2=OM[iv+1];
+ S1=SENS[jf1][iv];
+ S2=SENS[jf2][iv+1];
+
+ if OM1==0.0 :
+ S1=S2;
+ if S1*S2<0 : # Changement de precession
+ OM3=(OM1+OM2)/2;
+ F3 =(F1+F2)/2;
+
+ A0 = abs(EPSI*(F1+F2)/2)
+ if ((A1-A0)*(A2-A0) <0): # Changement de stabilite
+ OM4 = (A2*OM1 - A1*OM2) / (A2 -A1)
+ aa = (F2 - F1) / (OM2 -OM1)
+ bb = (F2*OM1 - F1*OM2) / (OM1 -OM2)
+ F4 = aa* OM4 + bb
+
+ # OM4 en dehors de OM1, OM2
+ if OM4 >=OM2:
+ OM4=-1;
+
+ if OM4 <=OM1:
+ OM4=-1;
+
+ if (A1 <0) and (abs(A1) < A0):
+ A1 = 0.0
+ if (A2 <0) and (abs(A2) < A0):
+ A2 = 0.0
+
+ # Tracer le segment pour chaque intervalle avec le code de couleur et
+ # de style adequats
+
+ # 1 cas, Pas de changement sur la plage de vitesse
+ if ((OM3 == -1) and (OM4 == -1)):
+ FX1=DEFI_LIST_REEL(VALE=[OM1,OM2]);
+ FY1=DEFI_LIST_REEL(VALE=[F1,F2]);
+ CS2=color_camp(S2,A1);
+ ICS2=CS2[0];
+ IST2=CS2[1];
+ IMA2=CS2[2];
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS2;
+ DICO["STYLE"] =IST2;
+ DICO["MARQUEUR"]=IMA2;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1)),INFO=1);
+
+ # 2 cas, Changement de sens de precession
+ elif (OM3 >=0) and (OM4 == -1):
+ FX1=DEFI_LIST_REEL(VALE=[OM1,OM3]); # Premiere partie
+ FY1=DEFI_LIST_REEL(VALE=[F1,F3]);
+ FX2=DEFI_LIST_REEL(VALE=[OM3,OM2]); # Deuxieme partie
+ FY2=DEFI_LIST_REEL(VALE=[F3,F2]);
+ CS1=color_camp(S1,A1);
+ ICS1=CS1[0];
+ IST1=CS1[1];
+ IMA1=CS1[2];
+ CS2=color_camp(S2,A1);
+ ICS2=CS2[0];
+ IST2=CS2[1];
+ IMA2=CS2[2];
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS1;
+ DICO["STYLE"] =IST1;
+ DICO["MARQUEUR"]=IMA1;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS2;
+ DICO["STYLE"] =IST2;
+ DICO["MARQUEUR"]=IMA2;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2)),INFO=1);
+
+ # 3 cas, de changement de stabilite
+ elif (OM3 == -1) and (OM4 >= 0):
+
+ FX1=DEFI_LIST_REEL(VALE=[OM1,OM4]); # Premiere partie
+ FY1=DEFI_LIST_REEL(VALE=[F1,F4]);
+ FX2=DEFI_LIST_REEL(VALE=[OM4,OM2]); # Deuxieme partie
+ FY2=DEFI_LIST_REEL(VALE=[F4,F2]);
+ CS1=color_camp(S2,A1);
+ ICS1=CS1[0];
+ IST1=CS1[1];
+ IMA1=CS1[2];
+ CS2=color_camp(S2,A2);
+ ICS2=CS2[0];
+ IST2=CS2[1];
+ IMA2=CS2[2];
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS1;
+ DICO["STYLE"] =IST1;
+ DICO["MARQUEUR"]=IMA1;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS2;
+ DICO["STYLE"] =IST2;
+ DICO["MARQUEUR"]=IMA2;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2)),INFO=1);
+
+ # 4 et 5 cas de changement de sens de precession et de stabilite
+ elif (OM3 >= 0) and (OM4 >= 0):
+ # 4 eme cas
+ if (OM4 < OM3):
+ FX1=DEFI_LIST_REEL(VALE=[OM1,OM4]); # Premiere partie
+ FY1=DEFI_LIST_REEL(VALE=[F1,F4]);
+ FX2=DEFI_LIST_REEL(VALE=[OM4,OM3]); # Deuxieme partie
+ FY2=DEFI_LIST_REEL(VALE=[F4,F3]);
+ FX3=DEFI_LIST_REEL(VALE=[OM3,OM2]); # Troisieme partie
+ FY3=DEFI_LIST_REEL(VALE=[F3,F2]);
+ CS1=color_camp(S1,A1);
+ ICS1=CS1[0];
+ IST1=CS1[1];
+ IMA1=CS1[2];
+ CS2=color_camp(S1,A2);
+ ICS2=CS2[0];
+ IST2=CS2[1];
+ IMA2=CS2[2];
+ CS3=color_camp(S2,A2);
+ ICS3=CS3[0];
+ IST3=CS3[1];
+ IMA3=CS3[2];
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS1;
+ DICO["STYLE"] =IST1;
+ DICO["MARQUEUR"]=IMA1;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS2;
+ DICO["STYLE"] =IST2;
+ DICO["MARQUEUR"]=IMA2;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX3,VALE_FONC=FY3);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS3;
+ DICO["STYLE"] =IST3;
+ DICO["MARQUEUR"]=IMA3;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2, FX3,FY3)),INFO=1);
+
+ # 5 eme cas
+ else:
+ FX1=DEFI_LIST_REEL(VALE=[OM1,OM3]); # Premiere partie
+ FY1=DEFI_LIST_REEL(VALE=[F1,F3]);
+ FX2=DEFI_LIST_REEL(VALE=[OM3,OM4]); # Deuxieme partie
+ FY2=DEFI_LIST_REEL(VALE=[F3,F4]);
+ FX3=DEFI_LIST_REEL(VALE=[OM4,OM2]); # Troisieme partie
+ FY3=DEFI_LIST_REEL(VALE=[F4,F2]);
+ CS1=color_camp(S1,A1);
+ ICS1=CS1[0];
+ IST1=CS1[1];
+ IMA1=CS1[2];
+ CS2=color_camp(S2,A1);
+ ICS2=CS2[0];
+ IST2=CS2[1];
+ IMA2=CS2[2];
+ CS3=color_camp(S2,A2);
+ ICS3=CS3[0];
+ IST3=CS3[1];
+ IMA3=CS3[2];
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS1;
+ DICO["STYLE"] =IST1;
+ DICO["MARQUEUR"]=IMA1;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS2;
+ DICO["STYLE"] =IST2;
+ DICO["MARQUEUR"]=IMA2;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ FON1.append([]);
+ ll=len(FON1)-1;
+ FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX3,VALE_FONC=FY3);
+ DICO={};
+ DICO["FONCTION"]=FON1[ll];
+ DICO["COULEUR"] =ICS3;
+ DICO["STYLE"] =IST3;
+ DICO["MARQUEUR"]=IMA3;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2, FX3, FY3)),INFO=1);
+
+
+
+ mfac1["COURBE"]=LFONC;
+
+ IMPR_FONCTION(
+ UNITE = UNIT_FLE,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+ IMPR_FONCTION(
+ UNITE = UNIT_TOT,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+ nbll = len(FON1)
+ for ii in range(nbll):
+ DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+ del(LFONC)
+ del(mfac1, DICO)
+
+
+
+ # ---------------------------------------------------
+ # Trace du diagramme de campbell des modes en torsion
+ # ---------------------------------------------------
+ TITRE2 = 'Modes en Torsion'
+ if NFREQ_tc>0:
+ LFONC =[];
+ FON1 =[0]*NFREQ_tc;
+ mfac1={};
+ for jj in range(NFREQ_tc):
+
+ FY1=DEFI_LIST_REEL(VALE=[FRQt[int(NVTt[jj][ii]-1)][ii] for ii in range(nbV)]);
+ FON1[jj]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=__FX,VALE_FONC=FY1);
+
+
+ DICO={};
+ DICO["FONCTION"]=FON1[jj];
+ DICO["COULEUR"] =1;
+ DICO["STYLE"] =6;
+ DICO["MARQUEUR"]=0;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FY1)),INFO=1);
+
+ mfac1["COURBE"]=LFONC;
+ IMPR_FONCTION(
+ UNITE = UNIT_TOR,
+ FORMAT ='XMGRACE',
+ BORNE_X =(BVmin,BVmax),
+ BORNE_Y =(BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+ IMPR_FONCTION(
+ UNITE = UNIT_TOT,
+ FORMAT ='XMGRACE',
+ BORNE_X =(BVmin,BVmax),
+ BORNE_Y =(BFmin,BFmax),
+ TITRE = TITRE1,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+
+
+ for ii in range(NFREQ_tc):
+ DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+ del(LFONC)
+ del(mfac1, DICO)
+
+
+ # ----------------------------------------------------------------
+ # Trace du diagramme de campbell des modes en traction/compression
+ # ----------------------------------------------------------------
+ TITRE2 = 'Modes en traction/compression'
+ if NFREQ_lc>0:
+ LFONC =[];
+ FON1 =[0]*NFREQ_lc;
+ mfac1={};
+ for jj in range(NFREQ_lc):
+
+ FY1=DEFI_LIST_REEL(VALE=[FRQl[int(NVTl[jj][ii]-1)][ii] for ii in range(nbV)]);
+ FON1[jj]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=__FX,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[jj];
+ DICO["COULEUR"] =8;
+ DICO["STYLE"] =8;
+ DICO["MARQUEUR"]=0;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FY1)),INFO=1);
+
+ mfac1["COURBE"]=LFONC;
+ IMPR_FONCTION(
+ UNITE = UNIT_LON,
+ FORMAT ='XMGRACE',
+ BORNE_X =(BVmin,BVmax),
+ BORNE_Y =(BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+ IMPR_FONCTION(
+ UNITE = UNIT_TOT,
+ FORMAT ='XMGRACE',
+ BORNE_X =(BVmin,BVmax),
+ BORNE_Y =(BFmin,BFmax),
+ TITRE = TITRE1,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+
+
+ for ii in range(NFREQ_lc):
+ DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+ del(LFONC)
+ del(mfac1, DICO);
+
+ if NFREQ_f>0:
+ for jj in range(nbV):
+ DETRUIRE(CONCEPT=_F(NOM=(Mf[jj])),INFO=1)
+ if NFREQ_t>0:
+ for jj in range(nbV):
+ DETRUIRE(CONCEPT=_F(NOM=(Mt[jj])),INFO=1)
+ if NFREQ_l>0:
+ for jj in range(nbV):
+ DETRUIRE(CONCEPT=_F(NOM=(Ml[jj])),INFO=1)
+
+
+
+#------------------------------------------------------------------------------------
+
+ # -----------------------------
+ # Trace des droites de pentes S
+ # -----------------------------
+
+ # Pour S=1, on le trace automatiquement
+ S=1.0;
+ L_S1=[];
+
+ if type(L_S)==list:
+ L_S1=L_S;
+ elif type(L_S)==tuple:
+ L_S1=list(L_S);
+ elif is_float(L_S):
+ L_S1.append(L_S);
+ L_S1.append(S);
+
+ # Supprimer la redondance dans la liste
+ sup_redon_list(L_S1);
+
+
+ # Faire une dictionnaire de courbe
+ # Constituer de liste de dictionnaire de fonctions
+ LFONC =[];
+ FON1 =[0]*len(L_S1);
+ mfac1={};
+ for ii in range(len(L_S1)):
+ F1 =BVmin*L_S1[ii]/60.
+ F2 =BVmax*L_S1[ii]/60.
+ FX1=DEFI_LIST_REEL(VALE=[BVmin,BVmax]);
+ FY1=DEFI_LIST_REEL(VALE=[F1,F2]);
+
+ FON1[ii]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+ DICO={};
+ DICO["FONCTION"]=FON1[ii];
+ DICO["COULEUR"] =1;
+ DICO["STYLE"] =1;
+ DICO["MARQUEUR"]=0;
+ DICO["LEGENDE"] ='';
+ LFONC.append(DICO);
+
+ DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1)),INFO=1);
+
+ mfac1["COURBE"]=LFONC;
+ if NFREQ_fc>0:
+ TITRE2 = 'Modes en flexion'
+ IMPR_FONCTION(
+ UNITE = UNIT_FLE,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+ if NFREQ_tc>0:
+ TITRE2 = 'Modes en Torsion'
+ IMPR_FONCTION(
+ UNITE = UNIT_TOR,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+ if NFREQ_lc>0:
+ TITRE2 = 'Modes en traction/compression'
+ IMPR_FONCTION(
+ UNITE = UNIT_LON,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ SOUS_TITRE = TITRE2,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+ IMPR_FONCTION(
+ UNITE = UNIT_TOT,
+ FORMAT = 'XMGRACE',
+ BORNE_X = (BVmin,BVmax),
+ BORNE_Y = (BFmin,BFmax),
+ TITRE = TITRE1,
+ GRILLE_X = pasV,
+ GRILLE_Y = pasF,
+ LEGENDE_X = legende_x,
+ LEGENDE_Y = 'FREQ (Hz)',
+ **mfac1);
+
+ for ii in range(len(L_S1)):
+ DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+
+ del(LFONC)
+ del(mfac1, DICO)
+
+ DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_FLE,)
+ DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_TOR,)
+ DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_LON,)
+ DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_TOT,)
+
+#------------------------------------------------------------------------------------
+
+ # --------------------------------------------------------------
+ # Determination des points d'intersection avec les droites Y=AX
+ # Calcul des coordonnees des points
+ # --------------------------------------------------------------
+
+
+ # Ecrire dans un fichier texte en sortie
+ DEFI_FICHIER(TYPE='ASCII', UNITE=UNIT_INT,);
+ nomfic='fort.'+str(UNIT_INT);
+ FINT1=open(nomfic, 'w')
+
+ INTERSEC =[];
+ # Modes en flexion
+
+ for ii in range(len(L_S1)):
+ DICO={};
+ DICO["pente"]=L_S1[ii];
+ ll=0;
+ XY=[[None]*2];
+ for jf in range(NFREQ_fc):
+ for iv in range(nbV-1):
+ if TYP_TRI==0:
+ jf1=NVTf[jf][iv]-1;
+ jf2=NVTf[jf][iv+1]-1;
+ if TYP_TRI==1:
+ jf1=NVTf_prec[jf][iv]-1;
+ jf2=NVTf_prec[jf][iv+1]-1;
+ if TYP_TRI==2:
+ jf1=NVTf_mac[jf][iv]-1;
+ jf2=NVTf_mac[jf][iv+1]-1;
+ if jf1>=0 and jf2>=0:
+ X1 = OM[iv];
+ Y1 = FRQf[jf1][iv];
+ X2 = OM[iv+1];
+ Y2 = FRQf[jf2][iv+1];
+ A = (Y1-Y2)/(X1-X2);
+ B = Y1-(A*X1);
+ pente = L_S1[ii];
+ P1 = B*60./(pente-A*60.);
+ P2 = P1*pente/60.;
+
+ if P1 >=X1 and P1<=X2:
+ if P2 >= Fmin and P2<=Fmax :
+ if OM_int[iv]<=0 and OM_int[iv+1]<0 : # Vitesse negative
+ P1=-P1;
+ XY[ll][0]=P1;
+ XY[ll][1]=P2;
+ # On ajoute une ligne supplementaire
+ XY.append([None]*2);
+ ll=ll+1;
+
+
+ L_XY=XY[0:ll];
+ DICO["point"]=L_XY;
+ INTERSEC.append(DICO);
+
+ # Sauvegarde des points d'intersection
+ FINT1.write('\n')
+ chaine = 'Mode en flexion'
+ FINT1.write(chaine)
+ save_intersec(INTERSEC, FINT1);
+
+ del(XY, L_XY)
+ del(INTERSEC, DICO)
+
+ INTERSEC =[];
+ # Modes en torsion
+ for ii in range(len(L_S1)):
+ DICO={};
+ DICO["pente"]=L_S1[ii];
+ ll=0;
+ XY=[[None]*2];
+ for jf in range(NFREQ_tc):
+ for iv in range(nbV-1):
+ jf1=NVTt[jf][iv]-1;
+ jf2=NVTt[jf][iv+1]-1;
+ if jf1>=0 and jf2>=0:
+ X1 = OM[iv];
+ Y1 = FRQt[jf1][iv];
+ X2 = OM[iv+1];
+ Y2 = FRQt[jf2][iv+1];
+ A = (Y1-Y2)/(X1-X2);
+ B = Y1-(A*X1);
+ pente = L_S1[ii];
+ P1 = B*60./(pente-A*60.);
+ P2 = P1*pente/60.;
+
+ if P1 >=X1 and P1<=X2:
+ if P2 >= Fmin and P2<=Fmax :
+ if OM_int[iv]<=0 and OM_int[iv+1]<0 : # Vitesse negative
+ P1=-P1;
+ XY[ll][0]=P1;
+ XY[ll][1]=P2;
+ # On ajoute une ligne supplementaire
+ XY.append([None]*2);
+ ll=ll+1;
+
+ L_XY=XY[0:ll];
+ DICO["point"]=L_XY;
+ INTERSEC.append(DICO);
+
+ # Sauvegarde des points d'intersection
+ FINT1.write('\n')
+ FINT1.write('\n')
+ chaine = 'Mode en Torsion'
+ FINT1.write(chaine)
+ save_intersec(INTERSEC, FINT1);
+
+ del(XY, L_XY)
+ del(INTERSEC, DICO)
+
+
+#------------------------------------------------------------------------------------
+
+ INTERSEC =[];
+ # Modes en traction / compression
+ for ii in range(len(L_S1)):
+ DICO={};
+ DICO["pente"]=L_S1[ii];
+ ll=0;
+ XY=[[None]*2];
+ for jf in range(NFREQ_lc):
+ for iv in range(nbV-1):
+ jf1=NVTl[jf][iv]-1;
+ jf2=NVTl[jf][iv+1]-1;
+ if jf1>=0 and jf2>=0:
+ X1 = OM[iv];
+ Y1 = FRQl[jf1][iv];
+ X2 = OM[iv+1];
+ Y2 = FRQl[jf2][iv+1];
+ A = (Y1-Y2)/(X1-X2);
+ B = Y1-(A*X1);
+ pente = L_S1[ii];
+ P1 = B*60./(pente-A*60.);
+ P2 = P1*pente/60.;
+
+ if P1 >=X1 and P1<=X2:
+ if P2 >= Fmin and P2<=Fmax :
+ if OM_int[iv]<=0 and OM_int[iv+1]<0 : # Vitesse negative
+ P1=-P1;
+ XY[ll][0]=P1;
+ XY[ll][1]=P2;
+ # On ajoute une ligne supplementaire
+ XY.append([None]*2);
+ ll=ll+1;
+
+ L_XY=XY[0:ll];
+ DICO["point"]=L_XY;
+ INTERSEC.append(DICO);
+
+ # Sauvegarde des points d'intersection
+ FINT1.write('\n')
+ FINT1.write('\n')
+ chaine = 'Mode en traction / compression'
+ FINT1.write(chaine)
+ save_intersec(INTERSEC, FINT1);
+
+ del(XY, L_XY)
+ del(INTERSEC, DICO)
+ nbl=len(L_S1)
+ for ii in range(nbl):
+ il =nbl-ii-1;
+ del L_S1[il];
+ FINT1.close()
+
--- /dev/null
+#@ MODIF impr_diag_campbell_utils Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 TORKHANI M.TORKHANI
+
+import numpy
+import aster
+from Accas import _F
+
+# "self" est l'objet MACRO
+
+
+def CLASS_MODES(self,L_MODES, NFREQ, NFREQ_camp, L_GR_NOEUD, VITE_ROTA) :
+ """Classification des modes en flexion, en torsion et en traction/compression"""
+
+ POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
+ EXTR_MODE =self.get_cmd('EXTR_MODE')
+ NORM_MODE =self.get_cmd('NORM_MODE')
+ DETRUIRE =self.get_cmd('DETRUIRE')
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE')
+
+ NFREQ_f=0;
+ NFREQ_t=0;
+ NFREQ_l=0;
+
+ nbF_f=[];
+ nbF_t=[];
+ nbF_l=[];
+ lflex={};
+ ltors={};
+ llong={};
+
+ NBV=len(L_MODES);
+
+ Ntot =numpy.zeros((NFREQ));
+ Nflex=numpy.zeros((NFREQ));
+ Ntors=numpy.zeros((NFREQ));
+ Nlong=numpy.zeros((NFREQ));
+
+ RESULT=[];
+
+ NBV=len(L_MODES);
+ NOEU=len(L_GR_NOEUD);
+ Mf=[0]*NBV ;
+ Mt=[0]*NBV ;
+ Ml=[0]*NBV ;
+ NVT =numpy.zeros((NFREQ, NBV));
+
+ NVT_f=0
+ NVT_l=0
+ NVT_t=0
+
+ for ii in range(NBV):
+ # -------------------------------------------------------------------
+ # Extraire les modes en module, definir les differents types de modes
+ # -------------------------------------------------------------------
+
+ tabmoN=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_MODULE',
+ NOEUD=L_GR_NOEUD,
+ RESULTAT=L_MODES[ii],
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ', 'DRX', 'DRY', 'DRZ'),
+ FORMAT_C='MODULE',
+ OPERATION='EXTRACTION',),);
+ jj =0;
+ for jj in range(NFREQ):
+ Ntot[jj] =0.0
+ Nflex[jj] =0.0
+ Ntors[jj] =0.0
+ Nlong[jj] =0.0
+ for ll in range(NOEU):
+ nmod=NOEU*jj+ll
+ dx = tabmoN['DX' ,nmod+1]
+ dy = tabmoN['DY' ,nmod+1]
+ dz = tabmoN['DZ' ,nmod+1]
+ drx = tabmoN['DRX',nmod+1]
+ dry = tabmoN['DRY',nmod+1]
+ drz = tabmoN['DRZ',nmod+1]
+ Ntot1 = dx**2+dy**2+dz**2+drx**2+dry**2+drz**2
+ Nflex1 = dy**2+dz**2+dry**2+drz**2
+ Ntors1 = drx**2
+ Nlong1 = dx**2
+ Ntot[jj] = Ntot[jj] + Ntot1
+ Nflex[jj] = Nflex[jj] + Nflex1
+ Ntors[jj] = Ntors[jj] + Ntors1
+ Nlong[jj] = Nlong[jj] + Nlong1
+
+ Ntot[jj] = numpy.sqrt(Ntot[jj])
+ if Ntot[jj] > 0:
+ Nflex[jj] = numpy.sqrt(Nflex[jj])/ Ntot[jj]
+ Ntors[jj] = numpy.sqrt(Ntors[jj])/ Ntot[jj]
+ Nlong[jj] = numpy.sqrt(Nlong[jj])/ Ntot[jj]
+
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabmoN)),INFO=1)
+
+ jf=0;
+ jt=0;
+ jl=0;
+
+ for jj in range(NFREQ):
+ NVT[jj][ii]=jj+1;
+ if (Nflex[jj]> Ntors[jj]) and (Nflex[jj]> Nlong[jj]):
+ lflex[(ii,jf)]=jj+1;
+ jf=jf+1;
+
+
+ elif (Ntors[jj]> Nflex[jj]) and (Ntors[jj]> Nlong[jj]):
+ ltors[(ii,jt)]=jj+1;
+ jt=jt+1;
+
+
+ elif (Nlong[jj]> Nflex[jj]) and (Nlong[jj]> Ntors[jj]):
+ llong[(ii,jl)]=jj+1;
+ jl=jl+1;
+
+ nbF_f.append(jf);
+ nbF_t.append(jt);
+ nbF_l.append(jl);
+
+ NFREQ_f = min(nbF_f)
+ NFREQ_t = min(nbF_t)
+ NFREQ_l = min(nbF_l)
+
+ if NFREQ_f>0:
+ NVT_f =numpy.zeros((NFREQ_f, NBV), int);
+ l_f =numpy.zeros((NBV, NFREQ_f), int);
+ if NFREQ_t>0:
+ NVT_t =numpy.zeros((NFREQ_t, NBV), int);
+ l_t =numpy.zeros((NBV, NFREQ_t), int);
+ if NFREQ_l>0:
+ NVT_l =numpy.zeros((NFREQ_l, NBV), int);
+ l_l =numpy.zeros((NBV, NFREQ_l), int);
+ else:
+ NVT_l = 0;
+
+ for ii in range(NBV):
+ for jj in range(NFREQ_f):
+ NVT_f[jj][ii]=lflex[ii,jj];
+ l_f[ii][jj] =lflex[ii,jj];
+
+ for jj in range(NFREQ_t):
+ NVT_t[jj][ii]=ltors[ii,jj];
+ l_t[ii][jj] =ltors[ii,jj];
+
+ for jj in range(NFREQ_l):
+ NVT_l[jj][ii]=llong[ii,jj];
+ l_l[ii][jj] =llong[ii,jj];
+
+ for ii in range(NBV):
+ # ----------------------------------------------
+ # Extraire la base des modes en flexion
+ # ----------------------------------------------
+ if NFREQ_f >0:
+ lmodef =list(l_f[ii]);
+ Mf[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii],
+ NUME_MODE = lmodef)
+ );
+
+ Mf[ii]= NORM_MODE (MODE=Mf[ii],
+ reuse = Mf[ii],
+ NORME='TRAN',
+ );
+
+ # ----------------------------------------------
+ # Extraire la base des modes en torsion
+ # ----------------------------------------------
+ if NFREQ_t >0:
+ lmodet =list(l_t[ii]);
+ Mt[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii],
+ NUME_MODE = lmodet)
+ );
+ Mt[ii]= NORM_MODE (MODE=Mt[ii],
+ reuse = Mt[ii],
+ AVEC_CMP=('DRX','DRY', 'DRZ'),
+ );
+
+ # ----------------------------------------------
+ # Extraire la base des modes en longi
+ # ----------------------------------------------
+ if NFREQ_l >0:
+ lmodel =list(l_l[ii]);
+ Ml[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii],
+ NUME_MODE = lmodel)
+ );
+
+ Ml[ii]= NORM_MODE (MODE=Ml[ii],
+ reuse = Ml[ii],
+ NORME='TRAN',
+ );
+
+ # -----------------------------------------------------------
+ # Nombre de frequences par type pour le diagramme de Campbell
+ # -----------------------------------------------------------
+ NFREQ_fc=0;
+ for jj in range(NFREQ_f):
+ if NVT_f[jj][NBV-1]<= NFREQ_camp:
+ NFREQ_fc=NFREQ_fc+1;
+
+ NFREQ_tc=0;
+ for jj in range(NFREQ_t):
+ if NVT_t[jj][NBV-1]<= NFREQ_camp:
+ NFREQ_tc=NFREQ_tc+1;
+
+ NFREQ_lc=0;
+ for jj in range(NFREQ_l):
+ if NVT_l[jj][NBV-1]<= NFREQ_camp:
+ NFREQ_lc=NFREQ_lc+1;
+
+ RESULT =[NFREQ_f,NFREQ_t,NFREQ_l,Mf,Mt,Ml,NVT,NVT_f,NVT_t,NVT_l,NFREQ_fc,NFREQ_tc,NFREQ_lc]
+
+ return RESULT
+
+
+#------------------------------------------------------------------------------------------------
+def EXTR_FREQ(self,L_MODES, L_MODEf,L_MODEt,L_MODEl, NFREQ, NFREQ_f, NFREQ_t, NFREQ_l) :
+ """Extraire les frequences"""
+ RECU_TABLE =self.get_cmd('RECU_TABLE')
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE')
+ DETRUIRE =self.get_cmd('DETRUIRE')
+
+ RESULT=[];
+
+ NBV =len(L_MODES);
+ FRQ =numpy.zeros((NFREQ,NBV));
+ FRQ_f =numpy.zeros((NFREQ_f,NBV));
+ FRQ_t =numpy.zeros((NFREQ_t,NBV));
+ FRQ_l =numpy.zeros((NFREQ_l,NBV));
+ AMO_f =numpy.zeros((NFREQ_f,NBV));
+ FRQ_max = 0.0;
+ EPSI =1.E-10;
+ for ii in range(NBV):
+
+ # frequences totales
+ tabfreq = RECU_TABLE(CO=L_MODES[ii],NOM_PARA=('NUME_MODE','FREQ','AMOR_REDUIT'),);
+
+ for jj in range(NFREQ):
+ FRQ[jj][ii]=tabfreq['FREQ',jj+1]
+ if FRQ_max < FRQ[jj][ii]:
+ FRQ_max=FRQ[jj][ii];
+
+ if NFREQ_f>0:
+ # frequences des modes en flexion
+ tabfr_f = RECU_TABLE(CO=L_MODEf[ii],NOM_PARA=('FREQ','AMOR_REDUIT'),)
+ for jj in range(NFREQ_f):
+ FRQ_f[jj][ii]=tabfr_f['FREQ',jj+1];
+ AMO_f[jj][ii]=tabfr_f['AMOR_REDUIT',jj+1];
+ if abs(AMO_f[jj][ii])<EPSI:
+ AMO_f[jj][ii]=0.0;
+ DETRUIRE(CONCEPT=_F(NOM=(tabfr_f)),INFO=1)
+
+ if NFREQ_t>0:
+ # frequences des modes en torsion
+ tabfr_t = RECU_TABLE(CO=L_MODEt[ii],NOM_PARA='FREQ',)
+
+ for jj in range(NFREQ_t):
+ FRQ_t[jj][ii]=tabfr_t['FREQ',jj+1]
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabfr_t)),INFO=1)
+
+ if NFREQ_l>0:
+ # frequences des modes en traction / compression
+ tabfr_l = RECU_TABLE(CO=L_MODEl[ii],NOM_PARA='FREQ',)
+
+ for jj in range(NFREQ_l):
+ FRQ_l[jj][ii]=tabfr_l['FREQ',jj+1]
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabfr_l)),INFO=1)
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabfreq)),INFO=1)
+
+
+ RESULT = [FRQ,FRQ_f,FRQ_t, FRQ_l, FRQ_max, AMO_f];
+ return RESULT
+
+
+#------------------------------------------------------------------------------------------------
+
+def TRI_MODE_MACf(self, MACf,NFREQ_f, NVT_f, IV) :
+ """Tri des frequences par calcul des coefficients MAC"""
+
+
+ DETRUIRE =self.get_cmd('DETRUIRE')
+
+ # base mode 1
+ tmacf =numpy.zeros((NFREQ_f,NFREQ_f));
+
+ for jj in range(NFREQ_f):
+ # base mode 2
+ for ll in range(NFREQ_f):
+ nmac= NFREQ_f*jj+ll
+ tmacf[jj][ll]=MACf['MAC',nmac+1]
+ chaine='MAC Modes de flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(tmacf,NFREQ_f, NFREQ_f);
+
+ for j2 in range(NFREQ_f):
+ XMAX=0.0
+ JREC=int(NVT_f[j2][IV+1]-1);
+ for j1 in range(NFREQ_f):
+
+ if tmacf[j1][JREC] > XMAX:
+ XMAX=tmacf[j1][JREC]
+ I1B=j1+1
+ # test d'existance de I1B dans le tableau de connexion
+ I1B_exist =0;
+ for jj in range(j2):
+ if I1B == NVT_f[jj][IV]:
+ I1B_exist =1;
+ if I1B_exist ==0: # IB1 n'existe pas
+ NVT_f[j2][IV]= I1B;
+ else:
+ NVT_f[j2][IV]=0;
+
+ DETRUIRE(CONCEPT=_F(NOM=(MACf)),INFO=1);
+
+ return NVT_f
+
+#------------------------------------------------------------------------------------------------
+
+def TRI_MODE_MACt(self, MACt,NFREQ_t, NVT_t, IV) :
+ """Tri des frequences par calcul des coefficients MAC"""
+
+
+ DETRUIRE =self.get_cmd('DETRUIRE')
+
+ # base mode 1
+ tmact =numpy.zeros((NFREQ_t,NFREQ_t));
+
+ for jj in range(NFREQ_t):
+ # base mode 2
+ for ll in range(NFREQ_t):
+ nmac= NFREQ_t*jj+ll
+ tmact[jj][ll]=MACt['MAC',nmac+1]
+ chaine='MAC Modes en torsion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(tmact,NFREQ_t, NFREQ_t);
+
+ for j2 in range(NFREQ_t):
+ XMAX=0.0
+ JREC=int(NVT_t[j2][IV+1]-1);
+ for j1 in range(NFREQ_t):
+
+ if tmact[j1][JREC] > XMAX:
+ XMAX=tmact[j1][JREC]
+ I1B=j1+1
+ # test d'existance de I1B dans le tableau de connexion
+ I1B_exist =0;
+ for jj in range(j2):
+ if I1B == NVT_t[jj][IV]:
+ I1B_exist =1; # IB1 existe deja
+ if I1B_exist ==0: # IB1 n'existe pas
+ NVT_t[j2][IV]= I1B;
+ else:
+ NVT_t[j2][IV]=0;
+
+ DETRUIRE(CONCEPT=_F(NOM=(MACt)),INFO=1);
+
+ return NVT_t
+
+#------------------------------------------------------------------------------------------------
+def TRI_MODE_MACl(self, MACl,NFREQ_l, NVT_l, IV) :
+ """Tri des frequences par calcul des coefficients MAC"""
+
+ DETRUIRE =self.get_cmd('DETRUIRE')
+
+ # base mode 1
+ tmacl =numpy.zeros((NFREQ_l,NFREQ_l));
+
+ for jj in range(NFREQ_l):
+ # base mode 2
+ for ll in range(NFREQ_l):
+ nmac= NFREQ_l*jj+ll
+ tmacl[jj][ll]=MACl['MAC',nmac+1]
+ chaine='MAC Modes en traction/compression'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tab(tmacl,NFREQ_l, NFREQ_l);
+
+ for j2 in range(NFREQ_l):
+ XMAX=0.0
+ JREC=int(NVT_l[j2][IV+1]-1);
+ for j1 in range(NFREQ_l):
+
+ if tmacl[j1][JREC] > XMAX:
+ XMAX=tmacl[j1][JREC]
+ I1B=j1+1
+ # test d'existance de I1B dans le tableau de connexion
+ I1B_exist =0;
+ for jj in range(j2):
+ if I1B == NVT_l[jj][IV]:
+ I1B_exist =1; # IB1 existe deja
+ if I1B_exist ==0: # IB1 n'existe pas
+ NVT_l[j2][IV]= I1B;
+ else:
+ NVT_l[j2][IV]=0;
+
+ DETRUIRE(CONCEPT=_F(NOM=(MACl)),INFO=1);
+
+ return NVT_l
+
+
+#------------------------------------------------------------------------------------------------
+def CALC_MACf(self, L_MODEf, NFREQ_f) :
+ """Calcul de la matrice MAC entre les deux bases successives"""
+
+ MAC_MODES =self.get_cmd('MAC_MODES')
+
+ NBV=len(L_MODEf);
+ tmacf =numpy.zeros((NFREQ_f,NFREQ_f));
+ MACf=[0]*NBV
+
+ for ii in range(NBV-1):
+ if NFREQ_f>0:
+ MACf[ii]=MAC_MODES(BASE_1=L_MODEf[ii],
+ BASE_2=L_MODEf[ii+1],
+ INFO =2,
+ );
+ return MACf
+
+
+#------------------------------------------------------------------------------------------------
+def CALC_MACt(self, L_MODEt, NFREQ_t) :
+ """Calcul de la matrice MAC entre les deux bases successives"""
+
+ MAC_MODES =self.get_cmd('MAC_MODES')
+
+ NBV=len(L_MODEt);
+ tmact =numpy.zeros((NFREQ_t,NFREQ_t));
+ MACt=[0]*NBV
+
+ for ii in range(NBV-1):
+ if NFREQ_t>0:
+ MACt[ii]=MAC_MODES(BASE_1=L_MODEt[ii],
+ BASE_2=L_MODEt[ii+1],
+ INFO =1,
+ );
+ return MACt
+
+#-----------------------------------------------------------------------------------------------
+def CALC_MACl(self, L_MODEl, NFREQ_l) :
+ """Calcul de la matrice MAC entre les deux bases successives """
+
+ MAC_MODES =self.get_cmd('MAC_MODES')
+
+ NBV=len(L_MODEl);
+ tmacl =numpy.zeros((NFREQ_l,NFREQ_l));
+ MACl=[0]*NBV
+
+ for ii in range(NBV-1):
+ if NFREQ_l>0:
+ MACl[ii]=MAC_MODES(BASE_1=L_MODEl[ii],
+ BASE_2=L_MODEl[ii+1],
+ INFO =1,
+ );
+ return MACl
+
+#-----------------------------------------------------------------------------------------------
+def CALC_PREC(self,Mf,NFREQ_f,L_GR_NOEUD, typ_prec) :
+ """Calcul le sens de precession pour un mode a une vitesse de rotation donnee
+ Type de precession, 1 somme, 2 grande orbite"""
+
+ POST_RELEVE_T =self.get_cmd('POST_RELEVE_T')
+ DETRUIRE =self.get_cmd('DETRUIRE')
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE')
+
+ XSMIN=1e-2;
+ NBV=len(Mf);
+ NOEU=len(L_GR_NOEUD);
+ SENS=numpy.zeros((NFREQ_f, NBV));
+ for ii in range(NBV):
+ # -------------------------------------------------------------------------
+ # Extraire les parties reelles, imaginaires et modules des modes en flexion
+ # -------------------------------------------------------------------------
+
+ tabmoR_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_REEL',
+ NOEUD=L_GR_NOEUD,
+ RESULTAT=Mf[ii],
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ'),
+ FORMAT_C='REEL',
+ OPERATION='EXTRACTION',),);
+ tabmoI_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_IMAG',
+ NOEUD=L_GR_NOEUD,
+ RESULTAT=Mf[ii],
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ'),
+ FORMAT_C='IMAG',
+ OPERATION='EXTRACTION',),);
+ tabmoN_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_MODULE',
+ NOEUD=L_GR_NOEUD,
+ RESULTAT=Mf[ii],
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ'),
+ FORMAT_C='MODULE',
+ OPERATION='EXTRACTION',),);
+
+
+ for jj in range(NFREQ_f):
+ #Sens de precesion pour un mode a une vitesse donne
+ modul1 =0.0;
+ sens1 =0.0;
+ for ll in range(NOEU):
+ nmod=NOEU*jj+ll
+ dy_r = tabmoR_f['DY' ,nmod+1];
+ dz_r = tabmoR_f['DZ' ,nmod+1];
+ dy_i = tabmoI_f['DY' ,nmod+1];
+ dz_i = tabmoI_f['DZ' ,nmod+1];
+ dy_m = tabmoN_f['DY' ,nmod+1];
+ dz_m = tabmoN_f['DZ' ,nmod+1];
+
+ if typ_prec == 1 :
+ #Sens parcours pour un noeud
+ preces = dy_r*dz_i-dy_i*dz_r ;
+ #Sens de precession dominant dans une mode
+ if preces >0:
+ sens1=sens1+ dy_m + dz_m;
+ elif preces <0:
+ sens1=sens1- dy_m - dz_m;
+ else:
+ #Sens de precession associe au plus grand orbite
+ lk= numpy.sqrt(dy_m*dy_m + dz_m*dz_m);
+ if lk > modul1:
+ # demi diagonale
+ modul1=lk
+ preces = dy_r*dz_i-dy_i*dz_r ;
+ if preces >0:
+ sens1=modul1;
+ elif preces <0:
+ sens1=-modul1;
+
+ XS=abs(sens1);
+ if XS>XSMIN:
+ SENS[jj][ii]=sens1/XS;
+ else:
+ SENS[jj][ii]=0.0;
+
+ DETRUIRE(CONCEPT=_F(NOM=(tabmoR_f, tabmoI_f, tabmoN_f)),INFO=1)
+
+ return SENS
+
+#------------------------------------------------------------------------------------------------
+def TRI_MODE_PREC_DI (SENS,NFREQ_f, NVT_f, NBV, OMIN) :
+ """Tri des modes par une methode de proche en proche avec verification du sens de precession"""
+ # base mode 1
+ chaine='TRI_MODE_PREC_DI'
+ aster.affiche('RESULTAT', chaine)
+
+ NVT_fdir =numpy.zeros((NFREQ_f, NBV));
+ NVT_finv =numpy.zeros((NFREQ_f, NBV));
+ nb_prec_dir =NFREQ_f;
+ nb_prec_inv =NFREQ_f;
+ for nb in range(NBV):
+ nbv1=NBV-nb-1;
+ jd=0;
+ ji=0;
+ for jj in range(NFREQ_f):
+ if SENS[jj][nbv1]>=0.:
+ NVT_fdir[jd][nbv1]=jj+1;
+ jd=jd+1;
+ elif SENS[jj][nbv1]<0.:
+ NVT_finv[ji][nbv1]=jj+1;
+ ji=ji+1;
+ # Calcul de nombre minimum de precession directe pour les vitesses
+ # Calcul de nombre minimum de precession inverse pour les vitesses
+
+ if jd>0:
+ if nb_prec_dir >jd:
+ nb_prec_dir =jd;
+ if ji>0:
+ if nb_prec_inv >ji:
+ nb_prec_inv= ji;
+
+ if(OMIN==0.0) :
+ for ii in range(NFREQ_f):
+ NVT_fdir[ii][0]=NVT_fdir[ii][1]
+ NVT_finv[ii][0]=NVT_finv[ii][1]
+
+ chaine='nb_prev_dir ' + str(nb_prec_dir);
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion des Modes de flexion precession directe'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVT_fdir,NFREQ_f, NBV);
+
+ chaine='nb_prev_inv ' + str(nb_prec_inv);
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion des Modes de flexion precession inverse'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVT_finv,NFREQ_f, NBV);
+
+ # Rassembler les tableaux de connexion
+ NVTf_prec =numpy.zeros((NFREQ_f, NBV), int);
+ for jj in range(NFREQ_f):
+ jf=0;
+ jf=int(NVT_fdir[jj][NBV-1]);
+ if jf>0:
+ for iv in range(NBV):
+ NVTf_prec[jf-1][iv]= NVT_fdir[jj][iv];
+ jf=0;
+ jf=int(NVT_finv[jj][NBV-1]);
+ if jf>0:
+ for iv in range(NBV):
+ NVTf_prec[jf-1][iv]= NVT_finv[jj][iv];
+
+ chaine='\n'
+ aster.affiche('RESULTAT', chaine)
+ chaine='Tableau de connexion des Modes de flexion'
+ aster.affiche('RESULTAT', chaine)
+ affiche_tabint(NVTf_prec,NFREQ_f, NBV);
+
+ RESULT = [nb_prec_dir,nb_prec_inv, NVTf_prec];
+
+ return RESULT
+
+
+#----------------------------------------------------------------------------------------
+def affiche_tab(tab1,nbligne, nbcol) :
+ """affiche un taleau tab1 de nbligne lignes et nbcol colonnes"""
+ for jj in range(nbligne):
+ chaine=''
+ for ii in range(nbcol):
+ str1 = '%15.5E' %tab1[jj][ii]
+ chaine=chaine + ' '+ str1
+ aster.affiche('RESULTAT', chaine)
+
+
+#----------------------------------------------------------------------------------------
+def affiche_tabint(tab1,nbligne, nbcol) :
+ """affiche un taleau tab1 de nbligne lignes et nbcol colonnes"""
+ for jj in range(nbligne):
+ chaine=''
+ for ii in range(nbcol):
+ str1 = '%5d' %tab1[jj][ii]
+ chaine=chaine + ' '+ str1
+ aster.affiche('RESULTAT', chaine)
+
+
+#----------------------------------------------------------------------------------------
+def calc_pas(xmin, xmax) :
+ """calcul de l'echelle valeurs mini-maxi et le pas
+ On impose entre 5 et 10 intervalles
+ En entree xmin, xmax valeurs mini-maxi, xmin et xmax superieurs ou egaux a zero
+ En sortie VAL1, VAL2 et PAS valeurs mini-maxi de l'echelle et le pas
+ """
+ diff=xmax-xmin;
+ PAS=1.;
+ VAL1=0.;
+ C10=10.;
+
+ # diff < 5.
+ while diff<5.:
+ diff=diff*C10;
+ PAS = PAS/C10;
+
+ # diff > 50.
+ while diff<50.:
+ diff=diff/C10;
+ PAS = PAS*C10;
+
+ # 5 <= diff <= 50.
+ N=int(diff);
+ if N>=11 and N<=20 :
+ N=N/2;
+ PAS=PAS*2.;
+ elif N>=21 and N<=30 :
+ N=N/3;
+ PAS=PAS*3.;
+ elif N>=31 and N<=40 :
+ N=N/4;
+ PAS=PAS*4.;
+ elif N>=41 and N<=50 :
+ N=N/5;
+ PAS=PAS*5.;
+
+ # Calcul des valeurs mini-maxi de l'echelle
+ while abs(xmin-VAL1)>PAS:
+ VAL1=VAL1 + PAS;
+
+ VAL2=VAL1 + (N*PAS);
+ while VAL2 <= xmax:
+ VAL2=VAL2 + PAS;
+
+ RESULT=[VAL1, VAL2, PAS];
+
+ return RESULT
+
+#----------------------------------------------------------------------------------------
+def color_camp(sens, amortis) :
+ """determine la couleur et le style du trait
+ en entree le sens de precession
+ en sortir la couleur, le style du trait ICS IST et le marqueur
+ DIRECTE,STABLE vert
+ DIRECTE,INSTABLE rouge
+ INDIRECTE,STABLE bleu
+ INDIRECTE,INSTABLE magenta
+ """
+
+ if sens<0: # precession inverse
+ if amortis<0.0: # instable
+ ICS = 10; # magenta
+ IST = 4; # tiret
+ IMA = 9; # croix
+ else: # stable
+ ICS = 4; # bleu
+ IST = 4; # tiret
+ IMA = 0;
+ else: # precession directe
+ if amortis<0.0: # instable
+ ICS = 2; # rouge
+ IST = 1; # trait continu
+ IMA = 8; # plus
+ else: # stable
+ ICS = 3; # vert
+ IST = 1; # trait continu
+ IMA = 0;
+ RESULT= [ICS,IST,IMA];
+
+ return RESULT
+
+#----------------------------------------------------------------------------------------
+def sup_redon_list(LS):
+ """Supprimer la redondace dans une liste de reel"""
+ LS.sort();
+ LS_min=min(LS);
+ LS_max=max(LS);
+ if LS_min<0:
+ if abs(LS_min) > abs(LS_max):
+ LS.reverse();
+ ii=0
+ len_list=len(LS);
+ while ii < len_list-1:
+ icount = LS.count(LS[ii]);
+ if icount >1:
+ for jj in range(ii+icount-1, ii,-1):
+ LS.pop(jj);
+ ii=ii+1
+ len_list=len(LS);
+
+
+#----------------------------------------------------------------------------------------
+def sup_redon_listv(LS):
+ """Supprimer la redondace dans une liste de vitesses"""
+
+ LS_init=[LS[ii] for ii in range(len(LS))]; # Liste de vitesses initiale sans rangement
+ LS.sort();
+ LS_min=min(LS);
+ LS_max=max(LS);
+ if LS_min<0:
+ if abs(LS_min) > abs(LS_max):
+ LS.reverse();
+
+ ii=0
+ len_list=len(LS);
+ while ii < len_list-1:
+ icount = LS.count(LS[ii]);
+ if icount >1:
+ for jj in range(ii+icount-1, ii,-1):
+ LS.pop(jj);
+ ii=ii+1
+ len_list=len(LS);
+
+
+ nbV1=len_list;
+ num_vit_tri =numpy.zeros((nbV1), int);
+ for ii in range(0,nbV1):
+ vit = LS[ii];
+ num_vit_tri[ii] = LS_init.index(vit);
+
+ print 'LS', LS
+ print 'LS_init', LS_init
+ return num_vit_tri
+
+
+#----------------------------------------------------------------------------------------
+def save_intersec(L_INTER, FINT):
+ """Sauvegarde dans un fichier les points d'intersection des courbes du diagramme de Campbell
+ avec les droites de pente S
+ """
+ chaine='\n'
+ FINT.write(chaine)
+ chaine='Points d'' intersection avec les droites Y=SX'
+ FINT.write(chaine)
+ for ii in range(len(L_INTER)):
+ chaine='\n'
+ FINT.write(chaine)
+ chaine = 'S = %10.2F' %L_INTER[ii]["pente"]
+ FINT.write(chaine)
+ chaine='\n'
+ FINT.write(chaine)
+ L_POINT = L_INTER[ii]["point"]
+ for jj in range(len(L_POINT)):
+ chaine = 'Vitesse = %10.2F tr/mn' %L_POINT[jj][0]
+ FINT.write(chaine)
+ FINT.write('\n')
+ chaine = 'Frequence = %10.2F HZ' %L_POINT[jj][1]
+ FINT.write(chaine)
+ FINT.write('\n')
+
+ chaine='----------------------------'
+ FINT.write(chaine)
+ chaine='\n'
+ chaine=' '
+
--- /dev/null
+#@ MODIF impr_fonction_ops Macro DATE 06/07/2009 AUTEUR COURTOIS 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 MCOURTOI M.COURTOIS
+
+import os.path
+
+# ------------------------------------------------------------------------------
+def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
+ """
+ Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
+ colonnes de table...
+ Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
+ """
+ macro='IMPR_FONCTION'
+ import pprint
+ import aster
+ from Accas import _F
+ from Cata.cata import nappe_sdaster, fonction_c, formule, formule_c
+ from Utilitai import Graph
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.UniteAster import UniteAster
+
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ 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
+ CALC_FONC_INTERP = self.get_cmd('CALC_FONC_INTERP')
+ DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+ #----------------------------------------------
+ # 0. Traitement des arguments, initialisations
+ # unité logique des fichiers réservés
+ ul_reserve=(8,)
+ UL = UniteAster()
+
+ # 0.1. Fichier
+ nomfich=None
+ if args['UNITE'] and args['UNITE']!=6:
+ nomfich=UL.Nom(args['UNITE'])
+ if INFO==2:
+ aster.affiche('MESSAGE', ' Nom du fichier :'+nomfich)
+ if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size!=0:
+ if FORMAT=='XMGRACE':
+ niv='A'
+ else:
+ niv='I'
+ UTMESS(niv, 'FONCT0_1', valk=nomfich)
+
+ # 0.2. Récupération des valeurs sous COURBE
+ unparmi=('FONCTION','LIST_RESU','FONC_X','ABSCISSE')
+
+ # i0 : indice du mot-clé facteur qui contient LIST_PARA, sinon i0=0
+ i0=0
+ Courbe=[]
+ iocc=-1
+ for Ci in COURBE:
+ iocc+=1
+ dC = Ci.cree_dict_valeurs(Ci.mc_liste)
+ if dC.has_key('LIST_PARA') and dC['LIST_PARA']!=None and i0==0:
+ i0=iocc
+ for mc in dC.keys():
+ if dC[mc]==None: del dC[mc]
+ Courbe.append(dC)
+ if INFO==2:
+ aster.affiche('MESSAGE',' Nombre de fonctions à analyser : '+str(len(Courbe)))
+
+ # 0.3. Devra-t-on interpoler globalement ?
+ # Dans ce cas, linter__ est le LIST_PARA
+ # ou, à défaut, les abscisses de la première courbe
+ interp=False
+ if FORMAT=='TABLEAU':
+ interp=True
+ dCi=Courbe[i0]
+ if dCi.has_key('LIST_PARA'):
+ linter__=dCi['LIST_PARA']
+ else:
+ obj=None
+ for typi in unparmi:
+ if dCi.has_key(typi):
+ obj=dCi[typi]
+ break
+ if obj==None:
+ UTMESS('S', 'SUPERVIS_56')
+ if typi=='FONCTION':
+ if isinstance(obj, nappe_sdaster):
+ lpar,lval=obj.Valeurs()
+ linterp=lval[0][0]
+ else:
+ linterp=obj.Valeurs()[0]
+ elif typi=='FONC_X':
+ lbid,linterp=obj.Valeurs()
+ elif typi=='ABSCISSE':
+ linterp=obj
+ linter__=DEFI_LIST_REEL(VALE=linterp)
+ if INFO==2:
+ aster.affiche('MESSAGE', ' Interpolation globale sur la liste :')
+ aster.affiche('MESSAGE', pprint.pformat(linter__.Valeurs()))
+
+
+ #----------------------------------------------
+ # 1. Récupération des valeurs des N courbes sous forme
+ # d'une liste de N listes
+ #----------------------------------------------
+ graph=Graph.Graph()
+ iocc=-1
+ for dCi in Courbe:
+ iocc+=1
+
+ # 1.1. Type d'objet à traiter
+ obj=None
+ for typi in unparmi:
+ if dCi.has_key(typi):
+ obj=dCi[typi]
+ break
+ if not dCi.has_key('LEGENDE') and hasattr(obj,'get_name'):
+ dCi['LEGENDE']=obj.get_name()
+ if obj==None:
+ UTMESS('S', 'SUPERVIS_56')
+
+ # 1.2. Extraction des valeurs
+
+ # 1.2.1. Mot-clé FONCTION
+ if typi=='FONCTION':
+ # formule à un paramètre seulement
+ if isinstance(obj, formule):
+ dpar = obj.Parametres()
+ if len(dpar['NOM_PARA']) != 1:
+ UTMESS('S', 'FONCT0_50', valk=obj.nom, vali=len(dpar['NOM_PARA']))
+
+ if isinstance(obj, nappe_sdaster):
+ lpar,lval=obj.Valeurs()
+ dico,ldicf=obj.Parametres()
+ Leg=dCi['LEGENDE']
+ for i in range(len(lpar)):
+ p=lpar[i]
+ lx=lval[i][0]
+ ly=lval[i][1]
+ # sur quelle liste interpoler chaque fonction
+ if i==0:
+ if interp:
+ li__=linter__
+ elif dCi.has_key('LIST_PARA'):
+ li__=dCi['LIST_PARA']
+ else:
+ li__=DEFI_LIST_REEL(VALE=lx)
+ # compléter les paramètres d'interpolation
+ dic=dico.copy()
+ dic.update(ldicf[i])
+
+ if (interp or dCi.has_key('LIST_PARA')) and i>0:
+ ftmp__=CALC_FONC_INTERP(
+ FONCTION=obj,
+ VALE_PARA=p,
+ LIST_PARA_FONC=li__,
+ **dic
+ )
+ pv,lv2=ftmp__.Valeurs()
+ lx=lv2[0][0]
+ ly=lv2[0][1]
+ # on stocke les données dans le Graph
+ nomresu=dic['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+ dicC={
+ 'Val' : [lx,ly],
+ 'Lab' : [dic['NOM_PARA_FONC'],nomresu]
+ }
+ # ajoute la valeur du paramètre
+ dCi['LEGENDE'] = '%s %s=%g' % (Leg,dic['NOM_PARA'].strip(),p)
+ Graph.AjoutParaCourbe(dicC, args=dCi)
+ graph.AjoutCourbe(**dicC)
+ DETRUIRE(OBJET=_F(CHAINE=('li__','ftmp__'),),ALARME='NON',INFO=1)
+ else:
+ ftmp__=obj
+ dpar=ftmp__.Parametres()
+ # pour les formules à un paramètre (test plus haut)
+ if type(dpar['NOM_PARA']) in (list, tuple):
+ dpar['NOM_PARA'] = dpar['NOM_PARA'][0]
+ if interp:
+ ftmp__=CALC_FONC_INTERP(
+ FONCTION=obj,
+ LIST_PARA=linter__,
+ **dpar
+ )
+ elif dCi.has_key('LIST_PARA'):
+ ftmp__=CALC_FONC_INTERP(
+ FONCTION=obj,
+ LIST_PARA=dCi['LIST_PARA'],
+ **dpar
+ )
+ lval=list(ftmp__.Valeurs())
+ lx=lval[0]
+ lr=lval[1]
+ if isinstance(obj, (fonction_c, formule_c)) and dCi.get('PARTIE') == 'IMAG':
+ lr=lval[2]
+ # on stocke les données dans le Graph
+ if isinstance(obj, (fonction_c, formule_c)) and not dCi.has_key('PARTIE'):
+ nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+ dicC={
+ 'Val' : lval,
+ 'Lab' : [dpar['NOM_PARA'],nomresu+'_R',nomresu+'_I']
+ }
+ else:
+ nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+ dicC={
+ 'Val' : [lx,lr],
+ 'Lab' : [dpar['NOM_PARA'],nomresu]
+ }
+ Graph.AjoutParaCourbe(dicC, args=dCi)
+ graph.AjoutCourbe(**dicC)
+
+ # 1.2.2. Mot-clé LIST_RESU
+ elif typi=='LIST_RESU':
+ if interp and iocc>0:
+ UTMESS('S', 'FONCT0_2')
+ lx=dCi['LIST_PARA'].Valeurs()
+ lr=obj.Valeurs()
+ if len(lx)!=len(lr):
+ UTMESS('S', 'FONCT0_3')
+ # on stocke les données dans le Graph
+ dicC={
+ 'Val' : [lx,lr],
+ 'Lab' : [dCi['LIST_PARA'].get_name(),obj.get_name()]
+ }
+ Graph.AjoutParaCourbe(dicC, args=dCi)
+ graph.AjoutCourbe(**dicC)
+
+ # 1.2.3. Mot-clé FONC_X
+ # exemple : obj(t)=sin(t), on imprime x=sin(t), y=cos(t)
+ # ob2(t)=cos(t)
+ elif typi=='FONC_X':
+ ob2=dCi['FONC_Y']
+ # peut-on blinder au niveau du catalogue
+ if isinstance(obj, nappe_sdaster) or isinstance(ob2, nappe_sdaster):
+ UTMESS('S', 'FONCT0_4')
+ if interp and iocc>0:
+ UTMESS('S', 'FONCT0_5')
+ ftmp__=obj
+ dpar=ftmp__.Parametres()
+ ftm2__=ob2
+ dpa2=ftm2__.Parametres()
+ intloc=False
+ if interp and not dCi.has_key('LIST_PARA'):
+ # dans ce cas, linter__ contient les ordonnées de FONC_X
+ intloc=False
+ li__=linter__
+ elif dCi.has_key('LIST_PARA'):
+ intloc=True
+ li__=dCi['LIST_PARA']
+ if intloc:
+ ftmp__=CALC_FONC_INTERP(
+ FONCTION=obj,
+ LIST_PARA=li__,
+ **dpar
+ )
+ lt,lx=ftmp__.Valeurs()
+ ftm2__=CALC_FONC_INTERP(
+ FONCTION=ob2,
+ LIST_PARA=li__,
+ **dpa2
+ )
+ else:
+ lt,lx=ftmp__.Valeurs()
+ li__=DEFI_LIST_REEL(VALE=lt)
+ ftm2__=CALC_FONC_INTERP(
+ FONCTION=ob2,
+ LIST_PARA=li__,
+ **dpa2
+ )
+
+ lbid,ly=ftm2__.Valeurs()
+ # on stocke les données dans le Graph
+ # on imprime la liste des paramètres seulement si LIST_PARA
+ if intloc:
+ nomresur=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+ nomresu2=dpa2['NOM_RESU'].strip()+'_'+str(len(graph.Legendes)+1)
+ dicC={
+ 'Val' : [lt,lx,ly],
+ 'Lab' : [dpar['NOM_PARA'],nomresur,nomresu2]
+ }
+ else:
+ nomresur=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+ nomresu2=dpa2['NOM_RESU'].strip()+'_'+str(len(graph.Legendes)+1)
+ dicC={
+ 'Val' : [lx,ly],
+ 'Lab' : [nomresur,nomresu2]
+ }
+ Graph.AjoutParaCourbe(dicC, args=dCi)
+ graph.AjoutCourbe(**dicC)
+
+ # 1.2.4. Mot-clé ABSCISSE / ORDONNEE
+ elif typi=='ABSCISSE':
+ if interp and iocc>0:
+ UTMESS('S', 'FONCT0_6')
+ lx=obj
+ lr=dCi['ORDONNEE']
+ if len(lx)!=len(lr):
+ UTMESS('S', 'FONCT0_7')
+ # on stocke les données dans le Graph
+ dicC={
+ 'Val' : [lx,lr],
+ 'Lab' : ['Absc','Ordo']
+ }
+ Graph.AjoutParaCourbe(dicC, args=dCi)
+ graph.AjoutCourbe(**dicC)
+
+ # 1.2.9. ménage
+ DETRUIRE(OBJET=_F(CHAINE=('li__','ftmp__','ftm2__'),),ALARME='NON',INFO=1)
+
+ # 1.2.99. ménage hors boucle
+ DETRUIRE(OBJET=_F(CHAINE='linter__',), ALARME='NON',INFO=1)
+
+ # 1.3. dbg
+ if INFO==2:
+ message='\n'+'-'*70+'\n Contenu du Graph : \n'+'-'*70+'\n'
+ message=message+graph.__repr__()
+ message=message+'-'*70+'\n'
+ aster.affiche('MESSAGE',message)
+
+ #----------------------------------------------
+ # 2. Impression du 'tableau' de valeurs
+ #----------------------------------------------
+
+ # 2.0. Surcharge des propriétés du graphique et des axes
+ # (bloc quasiment identique dans Table)
+ if args['TITRE']!=None: graph.Titre=args['TITRE']
+ if args['SOUS_TITRE']!=None: graph.SousTitre=args['SOUS_TITRE']
+ if FORMAT in ('XMGRACE','AGRAF'):
+ if args['BORNE_X']!=None:
+ graph.Min_X=args['BORNE_X'][0]
+ graph.Max_X=args['BORNE_X'][1]
+ if args['BORNE_Y']!=None:
+ graph.Min_Y=args['BORNE_Y'][0]
+ graph.Max_Y=args['BORNE_Y'][1]
+ if args['LEGENDE_X']!=None: graph.Legende_X=args['LEGENDE_X']
+ if args['LEGENDE_Y']!=None: graph.Legende_Y=args['LEGENDE_Y']
+ if args['ECHELLE_X']!=None: graph.Echelle_X=args['ECHELLE_X']
+ if args['ECHELLE_Y']!=None: graph.Echelle_Y=args['ECHELLE_Y']
+ if args['GRILLE_X']!=None: graph.Grille_X=args['GRILLE_X']
+ if args['GRILLE_Y']!=None: graph.Grille_Y=args['GRILLE_Y']
+
+ kargs={
+ 'FORMAT' : FORMAT,
+ 'FICHIER' : nomfich,
+ }
+
+ # 2.1. au format TABLEAU
+ if FORMAT=='TABLEAU':
+ # surcharge par les formats de l'utilisateur
+ kargs['dform']={
+ 'csep' : args['SEPARATEUR'],
+ 'ccom' : args['COMMENTAIRE'],
+ 'ccpara' : args['COMM_PARA'],
+ 'cdeb' : args['DEBUT_LIGNE'],
+ 'cfin' : args['FIN_LIGNE'],
+ }
+
+ # 2.2. au format AGRAF
+ elif FORMAT=='AGRAF':
+ nomdigr=None
+ if args['UNITE_DIGR']!=6:
+ nomdigr=UL.Nom(args['UNITE_DIGR'])
+ kargs['FICHIER']=[nomfich, nomdigr]
+ kargs['dform']={ 'formR' : '%12.5E' }
+
+ # 2.3. au format XMGRACE et dérivés
+ elif FORMAT=='XMGRACE':
+ kargs['dform']={ 'formR' : '%.8g' }
+ kargs['PILOTE']=args['PILOTE']
+
+ # 2.39. Format inconnu
+ else:
+ UTMESS('S', 'FONCT0_8', valk=FORMAT)
+
+ # Traiter le cas des UL réservées
+ if args['UNITE'] and args['UNITE'] in ul_reserve:
+ UL.Etat(args['UNITE'], etat='F')
+ if FORMAT=='AGRAF' and args['UNITE_DIGR']!=args['UNITE'] \
+ and args['UNITE_DIGR'] in ul_reserve:
+ UL.Etat(args['UNITE_DIGR'], etat='F')
+
+ # 2.4. On trace !
+ graph.Trace(**kargs)
+
+ # 99. Traiter le cas des UL réservées
+ UL.EtatInit()
+
+ return ier
--- /dev/null
+#@ MODIF impr_oar_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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.
+# ======================================================================
+
+# protection pour eficas
+try:
+ import aster
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table
+ from Utilitai.partition import MAIL_PY
+except:
+ pass
+
+def buildTabString(tabLevel):
+ """
+ Construit une chaine de tabulation
+ """
+ chaine = ''
+ for i in range(0, tabLevel) :
+ chaine += '\t'
+
+ return chaine
+
+def getBornes(listIn, valTest) :
+ """
+ Retourne un doublet de valeurs qui correspond aux valeurs de la liste qui encadrent la valeur (valTest)
+ Si val n'est pas encadrée par des valeurs de la liste, une des valeurs du doublet est None
+ """
+ v1 = None
+ v2 = None
+ for val in listIn :
+ if valTest > val : v1 = val
+ if valTest < val : v2 = val
+
+ # traitement des cas limites
+ if valTest == listIn[0] : v1 = listIn[0]
+ if valTest == listIn[len(listIn)-1] : v2 = listIn[len(listIn)-1]
+
+ return (v1, v2)
+
+def interpoleLin(listDoublet, X) :
+ """
+ Interpole linéairement entre deux bornes définies par listDoublets[(X0, Y0), (X1, Y1)] la valeur Y en X
+ """
+ X0 = listDoublet[0][0]
+ Y0 = listDoublet[0][1]
+ X1 = listDoublet[1][0]
+ Y1 = listDoublet[1][1]
+
+ return Y0 + (X - X0) * (Y1 - Y0) / (X1 - X0)
+
+class interpolationError(Exception) :
+ def __init__(self) :
+ self.mess = 'Interpolation sur une valeur hors bornes'
+ self.otherExcept = Exception()
+
+ def getMess(self) :
+ """
+ retourne le message associé à l'erreur
+ """
+ # Analyse les différents cas d'erreurs
+ if self.otherExcept == IOError :
+ self.mess += "\nProblème à l'ouverture du fichier\n"
+
+ return self.mess
+
+class XMLNode :
+ """
+ Classe gérant un noeud de l'arborescence XML
+ Un noeud possède :
+ - un nom de balise
+ - un commentaire (optionnel)
+ - un ensemble de "paramètres" (optionnels)
+ - une liste d'élément ou d'autres noeuds (optionnels/possibilité de balises vides) :
+
+ La classe propose :
+ - une méthode "buildTree" qui parcoure le liste de manière récursive pour
+ produire l'arborescence XML en vu de son enregistrement ou son impression
+ - (TO DO) une methode statique "loadTree" qui produit un arbre XML à partir d'un fichier
+ """
+ def __init__(self, nomBalise, valeur = None, commentaire = None, **listOpt) :
+ self.nomBalise = nomBalise
+ self.commentaire = commentaire
+ self.param = listOpt
+ self.arbre=list()
+ if valeur != None : self.addValue(valeur) # None n'est pas 0 !
+
+ def getCommentaire(self) : return self.commentaire
+
+ def setCommentaire(sel, commentaire) : self.commentaire = commentaire
+
+ def getParametres(self) : return self.param
+
+ def setParametres(self, parametres) : self.param = parametres
+
+ def append(self, nodeName, valeur=None, commentaire = None, **listOpt) :
+ """
+ Ajoute un noeud à l'arborescence et retourne une référence sur ce noeud
+ On peut ajouter directement la valeur, si simple, associée à la balise
+ """
+ node = XMLNode(nodeName, valeur, commentaire)
+
+ self.arbre.append(node)
+
+ return self.arbre[len(self.arbre)-1]
+
+ def addValue(self, valeur):
+ """
+ Ajoute un élément "simple" (nombre, texte) à l'arborescence
+ """
+ self.arbre.append(valeur)
+
+ def buildTree(self, tabLevel=0) :
+ """
+ Construit l'arborescence XML en parcourant récursivement la structure de donnée
+ et la retourne sous la forme d'une chaine de caractères
+
+ tabLevel permet de gérer l'indentation
+ """
+ # Construction de la chaine de tabulations nécessaire à une bonne lecture du fichier XML
+ tabString = buildTabString(tabLevel)
+
+ XMLString = ''
+
+ try :
+ # listOpt contient les paramètres optionnels de la balise
+ chaine = ''
+ for v in self.param.keys() :
+ chaine = chaine + ' ' + v + '=' + self.param[v]
+ except : pass
+
+ baliseOuverture=tabString + "<" + self.nomBalise + chaine +">\n"
+ XMLString += baliseOuverture
+
+ if self.commentaire :
+ XMLString = XMLString + tabString + "\t<!--"+self.commentaire+"-->\n"
+
+ for elem in self.arbre :
+ try :
+ XMLString += elem.buildTree(tabLevel+1)
+ except : # l'élément n'est pas un noeud
+ XMLString = XMLString + tabString + '\t' + str(elem) + '\n'
+
+ XMLString = XMLString + tabString + "</"+self.nomBalise+">\n"
+
+ return XMLString
+
+ def save(self, fileObj) :
+ """
+ Construit le l'arborescence XML et l'écrit dans un fichier
+ pointé par le handler passé en paramètres
+ """
+ try :
+ fileObj.write(self.buildTree())
+ except : pass
+
+class OAR_element :
+ """
+ Classe de base des éléments manipulés par IMPR_OAR
+ """
+ def __init__(self) :
+ self.nodeComp = None
+
+ def buildTree(self) : pass
+
+ def getNode(self) :
+ """
+ Renvoie le noeud XML construit par buildTree
+ """
+ return self.nodeComp
+
+
+class composant(OAR_element) :
+ """
+ Classe permettant de traiter les composants
+
+ NB :
+ 1. L utilisateur est suppose faire la meme coupe pour le calcul mecanique et le calcul thermo-mecanique
+ 2. Dans le cas d'un revetement, l'utilisateur est supposé définir son plan de coupe de telle sorte
+ que la coupe de la structure et la coupe du revetement se raccordent
+ """
+ def __init__(self, **args) :
+ self.nodeComp = XMLNode("COMPOSANT") # Racine de l'arborescence composant
+
+ self.diametre = args['DIAMETRE']
+ self.origine = args['ORIGINE']
+ self.coef_u = args['COEF_U']
+ self.angle_c = args['ANGLE_C']
+ self.revet = args['REVET']
+
+ self.lastAbscisse = None # Permet de gerer le recouvrement des points de coupe entre revetement et structure
+ self.num_char = -1
+ self.type_char = ''
+ self.tabAbscisses = list()
+ self.tabAbscisses_S = None
+ self.dictMeca = dict()
+ self.dictMeca_S = None # Pas créé car optionnel
+ self.epaisseur = 0.0
+ self.epaisseur_R = 0.0
+
+ # dictionnaire gérant le résultat contraintes en fonction des instants et des abscisses
+ self.dictInstAbscSig = dict()
+ self.dictInstAbscSig_S = None # Création si nécessaire
+ # dictionnaire gérant le résultat température en fonction des instants et des abscisses
+ self.dictInstAbscTemp = dict()
+ self.dictInstAbscTemp_S = None # facultatif
+ self.list_inst = None
+ self.num_tran = None
+
+ self.noResuMeca = False
+ self.noResuTher = False
+
+ # 1. resultat mecanique
+ try :
+ # On ne construit qu'une table des abscisses et une table des contraintes.
+ # Le revetement est obligatoirement en interne on commence par lui
+ para_resu_meca = args['RESU_MECA']
+ self.num_char = para_resu_meca['NUM_CHAR']
+ self.type_char = para_resu_meca['TYPE']
+
+ if self.revet == 'OUI' :
+ # Construction de la table complementaire si revetement
+ self.dictMeca_S = dict()
+ self.tabAbscisses_S = list()
+ self.buildTablesMeca('TABLE_S', para_resu_meca, self.tabAbscisses_S, self.dictMeca_S)
+ self.epaisseur_R = abs(self.tabAbscisses_S[len(self.tabAbscisses_S)-1] - self.tabAbscisses_S[0])
+
+ self.buildTablesMeca('TABLE', para_resu_meca, self.tabAbscisses, self.dictMeca, offset=self.epaisseur_R)
+
+ if self.revet == 'OUI' :
+ self.mergeDictMeca() # merge les tableaux resultats du revetement et de la structure
+
+ # Calcul de l'épaisseur de la coupe.
+ self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0])
+
+ except :
+ self.noResuMeca = True
+
+ # 2. Résultat thermique
+ try :
+ para_resu_ther = RESU_THER
+ self.num_tran = para_resu_ther['NUM_TRAN']
+ self.tabAbscisses = list()
+ self.tabAbscisses_S = None
+
+ listInst = list()
+ if self.revet == 'OUI' :
+ # Le revetement est obligatoirement en interne on commence par lui
+ # 1. Construction champ temperature
+ self.dictInstAbscTemp_S = dict()
+ self.buildTemp('TABLE_ST', para_resu_ther, self.dictInstAbscTemp_S)
+
+ # 2. Construction de la "table" des contraintes
+ self.dictInstAbscSig_S = dict()
+ self.tabAbscisses_S = list()
+ self.buildTablesTher('TABLE_S', para_resu_ther, self.tabAbscisses_S, self.dictInstAbscSig_S)
+
+ # 3. calcul de l'épaisseur
+ self.epaisseur_R = abs(self.tabAbscisses_S[len(self.tabAbscisses_S)-1] - self.tabAbscisses_S[0])
+
+ # Pour la structure
+ # 1. Construction champ température
+ self.buildTemp('TABLE_TEMP', para_resu_ther, self.dictInstAbscTemp, self.epaisseur_R)
+
+ # 2. Construction de la table des contraintes
+ self.buildTablesTher('TABLE_T', para_resu_ther, self.tabAbscisses, self.dictInstAbscSig, offset=self.epaisseur_R)
+
+ if self.revet == 'OUI' :
+ self.mergeDictTher() # merge les tableaux resultats du revetement et de la structure
+
+ if not(self.compareListAbscTher()) :
+ UTMESS('F','OAR0_1')
+
+ try :
+ self.interpoleInstants() # Interpolation des instants de la table des température sur celle de la table mécanique
+ except interpolationError, err:
+ UTMESS('F','OAR0_2',valk=err.getMess())
+
+ # 3. Calcul de l'épaisseur de la coupe.
+ self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0])
+
+ except :
+ self.noResuTher = True
+
+ # Construction de l arborescence
+ self.buildTree()
+
+
+ def getAbscisses(self, dicoTable, tableAbsc, offset=0.0) :
+ """
+ Récupère la liste des abscisses
+ """
+ # récupération des abscisses
+ ABSCISSES = dicoTable['ABSC_CURV']
+
+ valeurAbsc = 0.0
+ for val in ABSCISSES :
+ valeurAbsc = val + offset
+ tableAbsc.append(valeurAbsc)
+
+ def buildTablesMeca(self, label, para_resu, tableAbsc, dictMeca, offset=0.0) :
+ """
+ Construction des tableaux mécanique
+ """
+ sigma_xml = ( 'S_RR', 'S_TT', 'S_ZZ', 'S_RT', 'S_TZ', 'S_ZR' )
+
+ table_meca = para_resu[label].EXTR_TABLE()
+
+ # Utilisation des méthodes de la classe table
+ dictTable = table_meca.values()
+
+ # récupération des abscisses
+ self.getAbscisses(dictTable, tableAbsc, offset)
+
+ # Construction de la table mécanique principale
+ for val in sigma_xml :
+ dictMeca[val] = list()
+
+ S_XX = dictTable['SIXX']
+ S_YY = dictTable['SIYY']
+ S_ZZ = dictTable['SIZZ']
+ S_XY = dictTable['SIXY']
+ S_YZ = dictTable['SIYZ']
+ S_XZ = dictTable['SIXZ']
+ for v1, v2, v3, v4, v5, v6 in zip(S_XX, S_YY, S_ZZ, S_XY, S_YZ, S_XZ) :
+ dictMeca['S_RR'].append(v1)
+ dictMeca['S_TT'].append(v2)
+ dictMeca['S_ZZ'].append(v3)
+ dictMeca['S_RT'].append(v4)
+ dictMeca['S_TZ'].append(v5)
+ dictMeca['S_ZR'].append(v6)
+
+ def mergeDictMeca(self) :
+ """
+ Merge des résultats mécaniques issus de la structure et du revetement
+ """
+ # Merge des listes d'abscisses
+ # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
+ if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
+ UTMESS('F','OAR0_3')
+
+ # On construit une table des abscisses tempopraire
+ tableAbscTemp = self.tabAbscisses_S
+
+ # On recopie la table des abscisses en sautant le premier
+ debut = True
+ for val in self.tabAbscisses :
+ if debut :
+ debut = False
+ continue
+ tableAbscTemp.append(val)
+
+ self.tabAbscisses = tableAbscTemp
+
+ # On construit des listes de travail intermédiaires que l'on commence par remplir avec les tables "supplémentaires"
+ dictMecaBis = self.dictMeca_S
+
+ # On recopie les éléments de la structure dans le tableau
+ debut = True
+ for v1, v2, v3, v4, v5, v6 in zip(self.dictMeca['S_RR'], self.dictMeca['S_TT'], self.dictMeca['S_ZZ'], self.dictMeca['S_RT'], self.dictMeca['S_TZ'], self.dictMeca['S_ZR']) :
+ if debut :
+ debut = False
+ continue
+ dictMecaBis['S_RR'].append(v1)
+ dictMecaBis['S_TT'].append(v2)
+ dictMecaBis['S_ZZ'].append(v3)
+ dictMecaBis['S_RT'].append(v4)
+ dictMecaBis['S_TZ'].append(v5)
+ dictMecaBis['S_ZR'].append(v6)
+
+ # On restitue ensuite la liste globale dans self.dictMeca
+ self.dictMeca = dictMecaBis
+
+
+ def buildTemp(self, label, para_resu, dictInstAbscTemp, offset=0.0):
+ """
+ Récupération du champ température aux noeuds avec interpolation sur les "instants" du calcul mécanique
+ """
+ table_temp = para_resu[label].EXTR_TABLE()
+
+ # Utilisation des méthodes de la classe table
+ dictTable = table_temp.values()
+
+ # On construit un dictionnaire associant un "instant" avec un couple ("abscisse", "température")
+
+ # 1. Récupération de la liste des instants
+ INSTANTS = dictTable['INST']
+ for val in INSTANTS :
+ dictInstAbscTemp[val] = 0 # On crée juste les clés du dictionnaire
+
+ listTables = list() # liste de tables contenant une table pas instant
+ for inst in dictInstAbscTemp.keys():
+ listTables.append(table_temp.INST == inst)
+
+ # 2. Récupération des abscisses
+ tableAbsc = list()
+ self.getAbscisses(listTables[0].values(), tableAbsc, offset)
+
+ # 3. Récupération des températures
+ tableTemp = list() # liste de liste de température (1 par instant)
+ for tb in listTables :
+ TEMPERATURE = tb.values()['TEMP']
+ tableTemp.append(TEMPERATURE)
+
+ # 4. Construction de dictInstAbscTemp
+ for i in range(0, len(dictInstAbscTemp.keys())):
+ listDoublets = list()
+ for absc, temp in zip(tableAbsc, tableTemp[i]) :
+ listDoublets.append((absc,temp))
+
+ inst = dictInstAbscTemp.keys()[i]
+ dictInstAbscTemp[inst] = listDoublets
+
+ def buildTablesTher(self, label, para_resu, tabAbscisses, dictInstAbscSig, offset=0.0) :
+ """
+ Construction des tableaux thermo-mécanique
+ listDictTher contient un dictionnaire par numéro d'ordre
+ """
+ table_temp = para_resu[label].EXTR_TABLE()
+
+ # On construit un dictionnaire associant un "instant" avec une liste de couples ("abscisse", liste de "sigma")
+
+ # Utilisation des méthodes de la classe table
+ dictTable = table_temp.values()
+
+ # On construit un dictionnaire associant un "instant" avec un couple ("abscisse", "température")
+
+ # 1. Récupération de la liste des instants
+ INSTANTS = dictTable['INST']
+ for val in INSTANTS :
+ dictInstAbscSig[val] = 0 # On crée juste les clés du dictionnaire
+
+ listTables = list() # liste de tables contenant une table pas instant
+ for inst in dictInstAbscSig.keys():
+ listTables.append(table_temp.INST == inst)
+
+ # 2. Récupération des abscisses
+ self.getAbscisses(listTables[0].values(), tabAbscisses, offset)
+
+ # 3. Récupération des listes de sigma
+ listListListSigAbscInst = list() # liste des sigma par abscisse par instant
+ for tbl in listTables:
+ listListSigAbscInst = list()
+
+ # On crée une table pour chaque instant
+ S_XX = tbl.values()['SIXX']
+ S_YY = tbl.values()['SIYY']
+ S_ZZ = tbl.values()['SIZZ']
+ S_XY = tbl.values()['SIXY']
+ S_YZ = tbl.values()['SIYZ']
+ S_XZ = tbl.values()['SIXZ']
+ for v1, v2, v3, v4, v5, v6 in zip(S_XX, S_YY, S_ZZ, S_XY, S_YZ, S_XZ) :
+ listSigAbsc = list() # Liste des sigmas pour une abscisse
+ listSigAbsc.append(v1)
+ listSigAbsc.append(v2)
+ listSigAbsc.append(v3)
+ listSigAbsc.append(v4)
+ listSigAbsc.append(v5)
+ listSigAbsc.append(v6)
+
+ listListSigAbscInst.append(listSigAbsc)
+
+ listListListSigAbscInst.append(listListSigAbscInst)
+
+ # 4. Assemblage du dictionnaire
+ for i in range(0, len(dictInstAbscSig.keys())) :
+ listDoublet = list()
+ for j in range(0, len(tabAbscisses)) :
+ listDoublet.append((tabAbscisses[j], listListListSigAbscInst[i][j]))
+
+ dictInstAbscSig[dictInstAbscSig.keys()[i]] = listDoublet
+
+ def mergeDictTher(self) :
+ """
+ Merge les resultats issus de la coupe du revetement avec ceux issus de la coupe de la structure
+ """
+ # Merge des listes d'abscisses
+ # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
+ if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
+ UTMESS('F','OAR0_3')
+
+ # On construit une table des abscisses tempopraire
+ tableAbscTemp = self.tabAbscisses_S
+
+ # On recopie la table des abscisses en sautant le premier
+ debut = True
+ for val in self.tabAbscisses :
+ if debut :
+ debut = False
+ continue
+ tableAbscTemp.append(val)
+
+ self.tabAbscisses = tableAbscTemp
+
+ # On construit des listes de travail intermédiaires que l'on commence par remplir avec les tables "supplémentaires"
+ dictInstAbscSigBis = self.dictInstAbscSig_S
+ dictInstAbscTempBis = self.dictInstAbscTemp_S
+
+ # On recopie les élément thermiques de la structure principale en sautant la première abscisse de la structure
+ for key in dictInstAbscTempBis.keys() : # Les dictionnaires partagent les memes instants
+ debut = True
+ for valTher in self.dictInstAbscTemp[key] :
+ if debut :
+ debut = False
+ continue
+ dictInstAbscTempBis[key].append(valTher)
+
+ # On recopie les élément mécaniques de la structure principale en sautant la première abscisse de la structure
+ for key in dictInstAbscSigBis.keys() : # Les dictionnaires partagent les memes instants
+ debut = True
+ for valSig in self.dictInstAbscSig[key] :
+ if debut :
+ debut = False
+ continue
+ dictInstAbscSigBis[key].append(valSig)
+
+ # On restitue ensuite la liste globale dans self.dictInstAbscSig
+ self.dictInstAbscSig = dictInstAbscSigBis
+ self.dictInstAbscTemp = dictInstAbscTempBis
+
+ def compareListAbscTher(self) :
+ """
+ Vérifie que la coupe du champ thermique et la coupe mécanique partagent les memes abscisses
+ """
+ # 1. Récupération des abscisses associées aux températures
+ listAbsc = list()
+ lstDoublet = self.dictInstAbscTemp[self.dictInstAbscTemp.keys()[0]]
+ for val in lstDoublet :
+ listAbsc.append(val[0])
+
+ # 2. Comparaison des deux listes
+ for A1, A2 in zip(self.tabAbscisses, listAbsc) :
+ if A1 != A2 : return False
+
+ return True
+
+ def interpoleInstants(self) :
+ """
+ Interpole les résultats thermique sur les instants des résultats mécaniques
+ """
+ # 1. récupération des instants des deux tables
+ listInstTher = self.dictInstAbscTemp.keys()
+ listInstMeca = self.dictInstAbscSig.keys()
+
+ # 2. calcul de la liste des bornes de la table thermique qui encadrent les résultats mécaniques
+ dictInstAbscTemp = dict()
+ listAbscTemp = list()
+ listBornes = list()
+ for inst in listInstMeca :
+ bornes = getBornes(listInstTher, inst)
+ # Si une des bornes n'est pas définie, on lance une exception
+ if not(bornes[0]) or not(bornes[1]) : raise interpolationError
+
+ abscTempInf = self.dictInstAbscTemp[bornes[0]] # Liste de doublet (abscisse, temperature) pour la borne inférieure
+ abscTempSup = self.dictInstAbscTemp[bornes[1]] # Liste de doublet (abscisse, temperature) pour la borne supérieure
+
+ listAbscTemp = list() # liste de couples abscisses/Température
+ for A1, A2 in zip(abscTempInf, abscTempSup) : # A1 et A2 sont des doublets abscisse/Temperature
+ temperature = interpoleLin( ((bornes[0], A1[1]), (bornes[1], A2[1])), inst)
+ listAbscTemp.append((A1[0], temperature)) # on aurait pu tout aussi bien prendre A2[0] (c est pareil ...)
+
+ dictInstAbscTemp[inst] = listAbscTemp
+
+ # remplacement de l'ancienne table par la nouvelle
+ self.dictInstAbscTemp = dictInstAbscTemp
+
+ def buildTree(self) :
+ """
+ Construction (en mémoire) de l'arborescence du document XML
+ """
+ sigma_xml = ( 'S_RR', 'S_TT', 'S_ZZ', 'S_RT', 'S_TZ', 'S_ZR' )
+
+ # Création de l'arborescence "géométrie"
+ nodeGeomComp = self.nodeComp.append("GEOM_COMPO")
+ nodeGeomComp.append("REVETEMENT", valeur=self.revet)
+ if self.revet == 'OUI' :
+ nodeGeomComp.append("EP_REVET", valeur=self.epaisseur_R)
+ nodeLigneCoupe = nodeGeomComp.append("LIGNE_COUPE")
+ nodeLigneCoupe.append("EPAISSEUR_EF", valeur=self.epaisseur)
+ nodeLigneCoupe.append("DIAM_EXT_EF", valeur=self.diametre)
+ nodeLigneCoupe.append("ORI_ABSC", valeur=self.origine)
+
+ if self.noResuMeca == False :
+ # Création des abscisses
+ for val in self.tabAbscisses :
+ nodeLigneCoupe.append("ABSCISSE", val)
+
+ nodeLigneCoupe.append('PSI', self.angle_c)
+
+ # Création des résultats mécaniques
+ nodeSigma_u = self.nodeComp.append("SIGMA_UNITE")
+ nodeSigma_u.append("NUM_MECA", valeur=self.num_char)
+ nodeSigma_u.append("NOM_MECA", valeur=self.type_char)
+ nodeSigma_meca = nodeSigma_u.append("SIGMA_MECA")
+
+ for i in range(0, len(self.tabAbscisses)) :
+ for val in self.dictMeca.keys() :
+ nodeSigma_meca.append(val, valeur = self.dictMeca[val][i])
+
+ # Création de l'arborescence "résultat thermo_mécanique"
+ if self.noResuTher == False :
+ # Création des abscisses
+ listDoublet = self.dictInstAbscTemp[self.dictInstAbscTemp.keys()[0]]
+ for val in listDoublet :
+ nodeLigneCoupe.append("ABSCISSE", val[0])
+
+ nodeLigneCoupe.append('PSI', self.angle_c)
+
+ # Création des résultats mécaniques
+ nodeSigma_ther_c = self.nodeComp.append("SIGMA_THER_C")
+ nodeSigma_ther_c.append("NUM_TRANSI_THER", valeur=self.num_tran)
+
+ for inst in self.dictInstAbscTemp.keys() : # boucle sur les instants
+ nodeSigma_ther = nodeSigma_ther_c.append("SIGMA_THER")
+ nodeSigma_ther.append("INSTANT", valeur=inst)
+
+ # boucle sur les abscisses
+ for doubletAbscSig, doubletAbscTemp in zip(self.dictInstAbscSig[inst], self.dictInstAbscTemp[inst]) :
+ nodeSigma_point = nodeSigma_ther.append("SIGMA_POINT")
+ for val, label in zip(doubletAbscSig[1], sigma_xml) :
+ nodeSigma_point.append(label, valeur = val)
+
+ nodeSigma_point.append("TEMPERATURE", doubletAbscTemp[1])
+
+class tuyauterie(OAR_element) :
+ """
+ Classe permettant de traiter les tuyauteries
+ """
+ def __init__(self, **args) :
+ self.nodeComp = XMLNode("TUYAUTERIE")
+ try :
+ self.para_resu_meca = args['RESU_MECA']
+ self.num_char = self.para_resu_meca['NUM_CHAR']
+
+ #Gestion du maillage
+ self.maillage = self.para_resu_meca['MAILLAGE']
+ mapy = MAIL_PY()
+ mapy.FromAster(self.maillage)
+
+ self.ma = [val.rstrip() for val in mapy.correspondance_mailles]
+ self.no = [val.rstrip() for val in mapy.correspondance_noeuds]
+
+ self.dictMailleNoeuds = dict()
+ for val in self.ma :
+ self.dictMailleNoeuds[val] = list()
+
+ for i in range(0, len(mapy.co)) :
+ self.dictMailleNoeuds[self.ma[i]].append(self.no[mapy.co[i][0]])
+ self.dictMailleNoeuds[self.ma[i]].append(self.no[mapy.co[i][1]])
+
+ self.dictNoeudValTorseur = dict()
+ self.buildTableTorseur()
+
+ except :
+ UTMESS('F','OAR0_4')
+
+ # Construction de l arborescence
+ self.buildTree()
+
+
+ def buildTableTorseur(self) :
+ """
+ Construit un dictionnaire associant un noeud à un torseur exprimé sous la forme d'une liste de valeurs
+ """
+ table_temp = self.para_resu_meca['TABLE'].EXTR_TABLE()
+
+ # Utilisation des méthodes de la classe table
+ dictTable = table_temp.values()
+
+ # 1. Récupération de la liste des noeuds
+ NOEUDS = dictTable['NOEUD']
+ for val in NOEUDS :
+ self.dictNoeudValTorseur[val.rstrip()] = list() # On crée juste les clés du dictionnaire
+
+ N = dictTable['N']
+ VY = dictTable['VY']
+ VZ = dictTable['VZ']
+ MT = dictTable['MT']
+ MFY = dictTable['MFY']
+ MFZ = dictTable['MFZ']
+
+ for no, n, vy, vz, mt, mfy, mfz in zip(NOEUDS, N, VY, VZ, MT, MFY, MFZ):
+ no = no.rstrip()
+ self.dictNoeudValTorseur[no].append(n)
+ self.dictNoeudValTorseur[no].append(vy)
+ self.dictNoeudValTorseur[no].append(vz)
+ self.dictNoeudValTorseur[no].append(mt)
+ self.dictNoeudValTorseur[no].append(mfy)
+ self.dictNoeudValTorseur[no].append(mfz)
+
+
+ def buildTree(self) :
+ """
+ Construction (en mémoire) de l'arborescence du document XML
+ """
+ torseur_XML = ( 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ' )
+
+ # Création de l'arborescence "torseur"
+ nodeTMG = self.nodeComp.append("TORSEUR_MECA-GRP")
+ nodeTM = nodeTMG.append("TORSEUR_MECA")
+ nodeTM.append("oar:CHAR-REF", self.num_char)
+ nodeMTG = nodeTM.append("MAILLE_TORSEUR-GRP")
+ nodeMT = nodeMTG.append("MAILLE_TORSEUR")
+ for MA in self.dictMailleNoeuds.keys() : # Boucle sur les mailles
+ nodeMT.append("oar:MAILLE-REF", MA)
+ for NO in self.dictMailleNoeuds[MA] : # 2 noeuds
+ nodeTorseur = nodeMT.append("oar:TORSEUR")
+ for val, cle in zip(self.dictNoeudValTorseur[NO], torseur_XML) : # 6 valeurs
+ nodeTorseur.append(cle, val)
+
+
+
+def impr_oar_ops(self, TYPE_CALC, **args) :
+ """
+ Macro IMPR_OAR
+ Ecrit des fichiers au format XML selon la DTD OAR Fichier
+
+ IMPR_OAR va etre utilise en deux fois d abord calcul mecanique,
+ ensuite calcul thermique ce qui implique qu il ne peut y avoir qu'une seule des deux options a la fois
+ """
+ # La macro compte pour 1 dans la numérotation des commandes
+ self.set_icmd(1)
+
+ obj = None
+
+ if TYPE_CALC=='COMPOSANT' :
+ obj = composant(**args)
+ elif TYPE_CALC=='MEF' :
+ UTMESS('F','OAR0_5')
+ elif TYPE_CALC=='TUYAUTERIE' :
+ obj = tuyauterie(**args)
+ else :
+ UTMESS('F','OAR0_6')
+
+ # Ecriture dans le fichier
+ # Récupération de la LU du fichier de sortie
+ try :
+ unite = args['UNITE']
+ except :
+ unite = 38
+
+ try :
+ ajout=args['AJOUT']
+ except :
+ ajout='NON'
+
+ name = 'fort.'+str(unite)
+ try :
+ if ajout=='NON' : # nouveau fichier
+ fileObj = open(name, 'wt')
+ else : # extension du fichier existant
+ fileObj = open(name, 'a+t')
+ except IOError :
+ UTMESS('F','OAR0_7')
+ else :
+ obj.getNode().save(fileObj)
+ fileObj.close()
--- /dev/null
+#@ MODIF impr_table_ops Macro DATE 10/11/2009 AUTEUR COURTOIS 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 MCOURTOI M.COURTOIS
+
+import os.path
+import re
+
+
+def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
+ """
+ Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
+ Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
+ """
+ macro='IMPR_TABLE'
+ import aster
+ from Accas import _F
+ from Cata.cata import table_jeveux
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.UniteAster import UniteAster
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ 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
+ DETRUIRE = self.get_cmd('DETRUIRE')
+ RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+
+ #----------------------------------------------
+ # 0. Traitement des arguments, initialisations
+ # unité logique des fichiers réservés
+ ul_reserve=(8,)
+ UL = UniteAster()
+
+ # 0.1. Fichier
+ nomfich=None
+ if args['UNITE'] and args['UNITE']<>6:
+ nomfich=UL.Nom(args['UNITE'])
+ if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size<>0:
+ if FORMAT=='XMGRACE':
+ UTMESS('A','TABLE0_6',valk=nomfich)
+
+ # 0.2. Création des dictionnaires des FILTRES
+ Filtre=[]
+ if args['FILTRE']:
+ for Fi in args['FILTRE']:
+ dF = Fi.cree_dict_valeurs(Fi.mc_liste)
+ for mc in dF.keys():
+ if dF[mc]==None: del dF[mc]
+ Filtre.append(dF)
+ # format pour l'impression des filtres
+ form_filtre='\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
+
+ # 0.3. Création de la liste des tables (une seule sans SENSIBILITE)
+ form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
+ ltab=[]
+ if args['SENSIBILITE']:
+ lps=args['SENSIBILITE']
+ if not type(lps) in (list, tuple):
+ lps=[lps,]
+ for ps in lps:
+ ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom)
+ if ncomp != None:
+ sdtab = table_jeveux(ncomp)
+ tabs = sdtab.EXTR_TABLE()
+ tabs.titr = TABLE.TITRE() + tabs.titr + form_sens % (ps.get_name(), ncomp)
+ ltab.append([tabs, sdtab])
+ else:
+ ltab.append([TABLE.EXTR_TABLE(), TABLE])
+
+ if len(ltab)<1:
+ return ier
+
+ # 0.4.1. liste des paramètres à conserver
+ nom_para=ltab[0][0].para
+ if args['NOM_PARA']:
+ nom_para=args['NOM_PARA']
+ if not type(nom_para) in (list, tuple):
+ nom_para=[nom_para,]
+
+ # 0.4.2. Traiter le cas des UL réservées
+ if args['UNITE'] and args['UNITE'] in ul_reserve:
+ UL.Etat(args['UNITE'], etat='F')
+
+ #----------------------------------------------
+ # Boucle sur les tables
+ for tab, sdtab in ltab:
+
+ # ----- 1. Infos de base
+ if INFO==2:
+ print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()
+
+ if args['TITRE']:
+ tab.titr=args['TITRE'] + '\n' + tab.titr
+
+ # ----- 2. Filtres
+ for Fi in Filtre:
+ col = getattr(tab, Fi['NOM_PARA'])
+ # peu importe le type
+ opts=[Fi[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if Fi.has_key(k)]
+ kargs={}
+ for k in ('CRITERE','PRECISION'):
+ if Fi.has_key(k):
+ kargs[k]=Fi[k]
+ tab = tab & ( getattr(col, Fi['CRIT_COMP'])(*opts,**kargs) )
+ # trace l'operation dans le titre
+ #if FORMAT in ('TABLEAU','ASTER'):
+ tab.titr+=form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'], \
+ ' '.join([str(v) for v in opts]))
+
+ # ----- 3. Tris
+ if args['TRI']:
+ # une seule occurence de TRI
+ T0=args['TRI'][0]
+ dT=T0.cree_dict_valeurs(T0.mc_liste)
+ tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])
+
+ # ----- 4. Impression
+ # vérification des paramètres
+ for p in nom_para:
+ if not p in tab.para:
+ UTMESS('A','TABLE0_7',valk=p)
+
+ # sélection des paramètres et suppression des colonnes vides
+ timp = tab.SansColonneVide(nom_para)
+
+ # passage des mots-clés de mise en forme à la méthode Impr
+ kargs=args.copy()
+ kargs.update({
+ 'FORMAT' : FORMAT,
+ 'FICHIER' : nomfich,
+ 'dform' : {},
+ })
+ # pour l'impression des fonctions
+ kfonc={
+ 'FORMAT' : FORMAT,
+ 'FICHIER' : nomfich,
+ }
+
+ # 4.1. au format TABLEAU
+ if FORMAT=='TABLEAU':
+ # surcharge par les formats de l'utilisateur
+ kargs['dform']={
+ 'csep' : args['SEPARATEUR'],
+ 'ccom' : args['COMMENTAIRE'],
+ 'ccpara' : args['COMM_PARA'],
+ 'cdeb' : args['DEBUT_LIGNE'],
+ 'cfin' : args['FIN_LIGNE'],
+ }
+
+ # 4.2. au format AGRAF
+ elif FORMAT=='AGRAF':
+ kargs['dform']={ 'formR' : '%12.5E' }
+ kfonc['FORMAT']='TABLEAU'
+
+ # 4.3. au format XMGRACE et dérivés
+ elif FORMAT=='XMGRACE':
+ kargs['dform']={ 'formR' : '%.8g' }
+ kargs['PILOTE']=args['PILOTE']
+ kfonc['PILOTE']=args['PILOTE']
+
+ # 4.4. format spécifié dans les arguments
+ if args['FORMAT_R']:
+ kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
+
+ # 4.5. regroupement par paramètre : PAGINATION
+ if args['PAGINATION']:
+ l_ppag=args['PAGINATION']
+ if not type(l_ppag) in (list, tuple):
+ l_ppag=[l_ppag,]
+ kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
+ l_para_err = [p for p in l_ppag if not p in nom_para]
+ if len(l_para_err)>0:
+ UTMESS('A','TABLE0_8',valk=l_para_err)
+
+ timp.Impr(**kargs)
+
+ # ----- 5. IMPR_FONCTION='OUI'
+ if args['IMPR_FONCTION'] == 'OUI':
+ # cherche parmi les cellules celles qui contiennent un nom de fonction
+ dfon = []
+ p_extr = set(['FONCTION', 'FONCTION_C'])
+ p_extr.intersection_update(timp.para)
+ if len(p_extr) > 0:
+ # on réduit timp aux colonnes FONCTION et FONCTION_C
+ textr = timp.__getitem__(list(p_extr))
+ for row in textr:
+ for par,cell in row.items():
+ if type(cell) in (str, unicode):
+ cell = cell.strip()
+ if aster.getvectjev('%-19s.PROL' % cell) != None:
+ dfon.append(['%-19s' % cell, par])
+ # impression des fonctions trouvées
+ for f,par in dfon:
+ __fonc=RECU_FONCTION(
+ TABLE=sdtab,
+ FILTRE=_F(
+ NOM_PARA=par,
+ VALE_K=f,
+ ),
+ NOM_PARA_TABL=par,
+ TITRE = 'Fonction %s' % f,
+ )
+ __fonc.Trace(**kfonc)
+ DETRUIRE(CONCEPT=_F(NOM=(__fonc,),), ALARME='NON', INFO=1,)
+
+ # 99. Traiter le cas des UL réservées
+ UL.EtatInit()
+ return ier
+
+
+def fmtF2PY(fformat):
+ """Convertit un format Fortran en format Python (printf style).
+ Gère uniquement les fortrans réels, par exemple : E12.5, 1PE13.6, D12.5...
+ """
+ fmt=''
+ matP=re.search('([0-9]+)P',fformat)
+ if matP:
+ fmt+=' '*int(matP.group(1))
+ matR=re.search('([eEdDfFgG]{1})([\.0-9]+)',fformat)
+ if matR:
+ fmt+='%'+matR.group(2)+re.sub('[dD]+','E',matR.group(1))
+ try:
+ s=fmt % -0.123
+ except (ValueError, TypeError), msg:
+ fmt='%12.5E'
+ print 'Error :',msg
+ print 'Format par défaut utilisé :',fmt
+ return fmt
--- /dev/null
+#@ MODIF info_fonction_ops Macro DATE 16/11/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
+ """
+ Ecriture de la macro INFO_FONCTION
+ """
+ ier=0
+ import string
+ from Cata_Utils.t_fonction import t_fonction,t_fonction_c,t_nappe
+ import math
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ import types
+ from types import ListType, TupleType
+ EnumTypes = (ListType, TupleType)
+
+ ### On importe les definitions des commandes a utiliser dans la macro
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ IMPR_TABLE = self.get_cmd('IMPR_TABLE')
+ CALC_FONCTION = self.get_cmd('CALC_FONCTION')
+
+ ### Comptage commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('C_out',self.sd)
+
+ ### type de traitement
+
+ ###
+ if (MAX != None):
+ if type(MAX['FONCTION']) not in EnumTypes : l_fonc=[MAX['FONCTION'],]
+ else : l_fonc=MAX['FONCTION']
+ __tmfonc=[None]*3
+ k=0
+ mfact=[]
+ ltyfo=[]
+ lpara=[]
+ lresu=[]
+ lfnom=[]
+ for fonc in l_fonc :
+ __ff=fonc.convert()
+ __ex=__ff.extreme()
+ ltyfo.append(__ff.__class__)
+ lpara.append(__ff.para['NOM_PARA'])
+ lresu.append(__ff.para['NOM_RESU'])
+ lfnom.append(fonc.nom)
+ n_mini=len(__ex['min'])
+ n_maxi=len(__ex['max'])
+ listeMCF=[_F(LISTE_K=[fonc.nom]*(n_mini+n_maxi),PARA='FONCTION'),
+ _F(LISTE_K=['MINI',]*n_mini+['MAXI',]*n_maxi,PARA='TYPE'),]
+ n_resu=__ff.para['NOM_RESU']
+ if isinstance(__ff,t_nappe) :
+ listeMCF=listeMCF+[\
+ _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
+ _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_PARA_FONC']),\
+ _F(LISTE_R=[i[2] for i in __ex['min']]+[i[2] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
+ else :
+ listeMCF=listeMCF+[\
+ _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
+ _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
+ __tmfonc[k]=CREA_TABLE(LISTE=listeMCF)
+ if k!=0 :
+ mfact.append(_F(OPERATION = 'COMB',TABLE=__tmfonc[k]))
+ k=k+1
+ ltyfo=dict([(i,0) for i in ltyfo]).keys()
+ lpara=dict([(i,0) for i in lpara]).keys()
+ lresu=dict([(i,0) for i in lresu]).keys()
+ if len(ltyfo)>1 :
+# n'est pas homogène en type (fonctions et nappes) ''')
+ UTMESS('F','FONCT0_37')
+ if len(lpara)>1 :
+# n'est pas homogène en label NOM_PARA :'''+' '.join(lpara))
+ UTMESS('F','FONCT0_38',valk=' '.join(lpara))
+ if len(lresu)>1 :
+# n'est pas homogène en label NOM_RESU : '''+' '.join(lresu))
+ UTMESS('F','FONCT0_39',valk=' '.join(lresu))
+ __tab=CALC_TABLE(TABLE = __tmfonc[0],
+ ACTION = mfact )
+ __min=CALC_TABLE(TABLE = __tab,
+ ACTION = _F(OPERATION = 'FILTRE',
+ CRIT_COMP = 'MINI',
+ NOM_PARA = lresu[0] ), )
+ __max=CALC_TABLE(TABLE = __tab,
+ ACTION = _F(OPERATION = 'FILTRE',
+ CRIT_COMP = 'MAXI',
+ NOM_PARA = lresu[0] ), )
+ print __min.EXTR_TABLE()
+ print __max.EXTR_TABLE()
+ C_out=CALC_TABLE(TABLE = __min,
+ TITRE = 'Calcul des extrema sur fonction '+' '.join(lfnom),
+ ACTION = _F(OPERATION = 'COMB',
+ TABLE=__max ), )
+ print C_out.EXTR_TABLE()
+
+ ###
+ if (ECART_TYPE != None):
+ __ff=ECART_TYPE['FONCTION'].convert()
+ if ECART_TYPE['INST_INIT']!=None : tini=ECART_TYPE['INST_INIT']
+ else : tini=__ff.vale_x[0]
+ if ECART_TYPE['INST_FIN' ]!=None : tfin=ECART_TYPE['INST_FIN' ]
+ else : tfin=__ff.vale_x[-1]
+ __ff=__ff.cut(tini,__ff.vale_x[-1],ECART_TYPE['PRECISION'],ECART_TYPE['CRITERE'])
+ __ff=__ff.cut(__ff.vale_x[0],tfin,ECART_TYPE['PRECISION'],ECART_TYPE['CRITERE'])
+ if ECART_TYPE['METHODE' ]=='SIMPSON' : __ex=__ff.simpson(0.)
+ if ECART_TYPE['METHODE' ]=='TRAPEZE' : __ex=__ff.trapeze(0.)
+ fmoy=__ex.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0])
+ __ff=__ff+(-1*fmoy)
+ __ff=__ff*__ff
+ if ECART_TYPE['METHODE' ]=='SIMPSON' : __ez=__ff.simpson(0.)
+ if ECART_TYPE['METHODE' ]=='TRAPEZE' : __ez=__ff.trapeze(0.)
+ sigma=math.sqrt(__ez.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0]))
+ C_out=CREA_TABLE(LISTE=(_F(LISTE_K=ECART_TYPE['FONCTION'].nom,PARA='FONCTION'),
+ _F(LISTE_K=ECART_TYPE['METHODE'] ,PARA='METHODE'),
+ _F(LISTE_R=fmoy ,PARA='MOYENNE'),
+ _F(LISTE_R=sigma ,PARA='ECART_TYPE'),
+ _F(LISTE_R=tini ,PARA='INST_INIT'),
+ _F(LISTE_R=tfin ,PARA='INST_FIN'),)
+ )
+
+ ###
+ if (RMS != None):
+ RMS =list(RMS)
+ sigm =[]
+ tmpi =[]
+ tmpf =[]
+ nomf =[]
+ meth =[]
+ for i_rms in RMS :
+ __ff=i_rms['FONCTION'].convert()
+ if i_rms['INST_INIT']!=None : tini=i_rms['INST_INIT']
+ else : tini=__ff.vale_x[0]
+ if i_rms['INST_FIN' ]!=None : tfin=i_rms['INST_FIN' ]
+ else : tfin=__ff.vale_x[-1]
+ __ff=__ff.cut(tini,__ff.vale_x[-1],i_rms['PRECISION'],i_rms['CRITERE'])
+ __ff=__ff.cut(__ff.vale_x[0],tfin,i_rms['PRECISION'],i_rms['CRITERE'])
+ __ff=__ff*__ff
+ if i_rms['METHODE' ]=='SIMPSON' : __ez=__ff.simpson(0.)
+ if i_rms['METHODE' ]=='TRAPEZE' :
+ __ez=__ff.trapeze(0.)
+ sigm.append(math.sqrt(__ez.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0])))
+ tmpi.append(tini)
+ tmpf.append(tfin)
+ nomf.append(i_rms['FONCTION'].nom)
+ meth.append(i_rms['METHODE'])
+ C_out=CREA_TABLE(LISTE=(_F(LISTE_K=nomf ,PARA='FONCTION'),
+ _F(LISTE_K=meth ,PARA='METHODE'),
+ _F(LISTE_R=tmpi ,PARA='INST_INIT'),
+ _F(LISTE_R=tmpf ,PARA='INST_FIN'),
+ _F(LISTE_R=sigm ,PARA='RMS'), )
+ )
+
+ ###
+ if (NORME != None):
+ __ff=NORME['FONCTION'].convert()
+ norme=[]
+ for __fi in __ff.l_fonc :
+ norme.append(__fi.normel2())
+ nom=[NORME['FONCTION'].nom,]*len(norme)
+ C_out=CREA_TABLE(LISTE=(_F(LISTE_R=norme ,PARA='NORME'),
+ _F(LISTE_K=nom ,PARA='FONCTION'), )
+ )
+
+ ###
+ if (NOCI_SEISME != None):
+ l_table=[]
+ if NOCI_SEISME['SPEC_OSCI'] !=None :
+ ### cas intensité spectrale d'une nappe de SRO
+ ### la seule option licite est INTE_SPEC
+#intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \
+#porte le calcul, ceci peut etre une source d erreurs.''')
+ UTMESS('I','FONCT0_40')
+ amor=NOCI_SEISME['AMOR_REDUIT']
+ fini=NOCI_SEISME['FREQ_INIT' ]
+ ffin=NOCI_SEISME['FREQ_FIN' ]
+ __sp =NOCI_SEISME['SPEC_OSCI'].convert()
+ vale_x=__sp.l_fonc[0].vale_x
+ vale_y=[__sp(amor,f) for f in vale_x]
+ para =__sp.l_fonc[0].para
+ __srov=t_fonction(vale_x,vale_y,para)
+ if NOCI_SEISME['NATURE']=='DEPL' :
+ __srov.vale_y=(__srov.vale_y/__srov.vale_x)*2.*math.pi
+ elif NOCI_SEISME['NATURE']=='VITE' :
+ __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+ elif NOCI_SEISME['NATURE']=='ACCE' :
+ __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+ __srov.vale_y=__srov.vale_y/__srov.vale_x/2./math.pi
+ __srov=__srov.cut(fini,ffin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ insp=__srov.trapeze(0.).vale_y[-1]
+ l_table.append(_F(LISTE_R=fini ,PARA='FREQ_INIT' ))
+ l_table.append(_F(LISTE_R=ffin ,PARA='FREQ_FIN' ))
+ l_table.append(_F(LISTE_R=amor ,PARA='AMOR_REDUIT'))
+ l_table.append(_F(LISTE_R=insp ,PARA='INTE_SPECT' ))
+ if NOCI_SEISME['FONCTION'] !=None :
+ ### cas fonction
+ l_table.append(_F(LISTE_K=NOCI_SEISME['FONCTION'].nom,PARA='FONCTION'))
+ __ac=NOCI_SEISME['FONCTION'].convert()
+ option= NOCI_SEISME['OPTION']
+ if NOCI_SEISME['INST_INIT']!=None : tdeb=NOCI_SEISME['INST_INIT']
+ else : tdeb=__ac.vale_x[0]
+ if NOCI_SEISME['INST_FIN' ]!=None : tfin=NOCI_SEISME['INST_FIN' ]
+ else : tfin=__ac.vale_x[-1]
+ # calcul de la vitesse :
+ __vi=__ac.trapeze(NOCI_SEISME['COEF'])
+ # calcul du déplacement :
+ __de=__vi.trapeze(NOCI_SEISME['COEF'])
+ # calcul de |acceleration| :
+ __aa=__ac.abs()
+ # calcul de integrale(|acceleration|) :
+ ### on "coupe" la fonction entre tdeb et tfin
+ __ac=__ac.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ __vi=__vi.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ __de=__de.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ __aa=__aa.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ if NOCI_SEISME['FREQ' ]!=None : l_freq=NOCI_SEISME['FREQ']
+ elif NOCI_SEISME['LIST_FREQ']!=None : l_freq=NOCI_SEISME['LIST_FREQ'].Valeurs()
+ else :
+ # fréquences par défaut
+ l_freq=[]
+ for i in range(56) : l_freq.append( 0.2+0.050*i)
+ for i in range( 8) : l_freq.append( 3.0+0.075*i)
+ for i in range(14) : l_freq.append( 3.6+0.100*i)
+ for i in range(24) : l_freq.append( 5.0+0.125*i)
+ for i in range(28) : l_freq.append( 8.0+0.250*i)
+ for i in range( 6) : l_freq.append(15.0+0.500*i)
+ for i in range( 4) : l_freq.append(18.0+1.000*i)
+ for i in range(10) : l_freq.append(22.0+1.500*i)
+ if option in('TOUT','MAXI','ACCE_SUR_VITE') :
+ # calcul du max des valeurs absolues
+ maxa_ac=__ac.abs().extreme()['max'][0][1]
+ maxa_vi=__vi.abs().extreme()['max'][0][1]
+ maxa_de=__de.abs().extreme()['max'][0][1]
+ l_table.append(_F(LISTE_R=maxa_ac,PARA='ACCE_MAX'))
+ l_table.append(_F(LISTE_R=maxa_vi,PARA='VITE_MAX'))
+ l_table.append(_F(LISTE_R=maxa_de,PARA='DEPL_MAX'))
+ l_table.append(_F(LISTE_R=maxa_ac/maxa_vi,PARA='ACCE_SUR_VITE'))
+ if option in('TOUT','INTE_ARIAS') :
+ __a2=__ac*__ac
+ inte_arias=__a2.trapeze(0.).vale_y[-1]
+ inte_arias=inte_arias*math.pi/NOCI_SEISME['PESANTEUR']/2.
+ l_table.append(_F(LISTE_R=inte_arias,PARA='INTE_ARIAS'))
+ if option in('TOUT','POUV_DEST') :
+ __v2=__vi*__vi
+ pouv_dest=__v2.trapeze(0.).vale_y[-1]
+ pouv_dest=pouv_dest*(math.pi)**3/NOCI_SEISME['PESANTEUR']/2.
+ l_table.append(_F(LISTE_R=pouv_dest,PARA='POUV_DEST'))
+ if option in('TOUT','VITE_ABSO_CUMU') :
+ __vc=__aa.trapeze(0.)
+ vite_abso=__vc.vale_y[-1]
+ l_table.append(_F(LISTE_R=vite_abso,PARA='VITE_ABSO_CUMU'))
+ if option in('TOUT','INTE_SPEC') :
+ amor=NOCI_SEISME['AMOR_REDUIT']
+ fini=NOCI_SEISME['FREQ_INIT' ]
+ ffin=NOCI_SEISME['FREQ_FIN' ]
+ __so= CALC_FONCTION(SPEC_OSCI=_F(
+ NATURE ='VITE',
+ NATURE_FONC='ACCE',
+ FONCTION =NOCI_SEISME['FONCTION'],
+ METHODE ='NIGAM',
+ NORME =NOCI_SEISME['NORME'],
+ FREQ =l_freq,
+ AMOR_REDUIT=(amor,)
+ ), )
+ __srov=__so.convert().l_fonc[0]
+ __srov=__srov.cut(fini,ffin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+ __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+ insp=__srov.trapeze(0.).vale_y[-1]
+ l_table.append(_F(LISTE_R=fini ,PARA='FREQ_INIT' ))
+ l_table.append(_F(LISTE_R=ffin ,PARA='FREQ_FIN' ))
+ l_table.append(_F(LISTE_R=amor ,PARA='AMOR_REDUIT'))
+ l_table.append(_F(LISTE_R=insp ,PARA='INTE_SPECT' ))
+ if option in('TOUT','DUREE_PHAS_FORT') :
+ __a2=__ac*__ac
+ __i2=__a2.trapeze(0.)
+ arias = __i2.vale_y[-1]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+ valinf = arias * NOCI_SEISME['BORNE_INF']
+ valsup = arias * NOCI_SEISME['BORNE_SUP']
+ for i in range(len(__i2.vale_x)) :
+ ariask = __i2.vale_y[i]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+ if ariask>=valinf : break
+ for j in range(len(__i2.vale_x)-1,-1,-1) :
+ ariask = __i2.vale_y[j]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+ if ariask<=valsup : break
+ dphfor = __i2.vale_x[j] - __i2.vale_x[i]
+ l_table.append(_F(LISTE_R=dphfor,PARA='DUREE_PHAS_FORT'))
+ C_out=CREA_TABLE(LISTE=l_table)
+
+ if INFO > 1:
+ IMPR_TABLE(UNITE=6,
+ TABLE=C_out)
+ return ier
--- /dev/null
+#@ MODIF lire_fonction_ops Macro DATE 11/05/2010 AUTEUR COURTOIS 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.
+# ======================================================================
+
+import os.path as osp
+import numpy
+
+class LectureBlocError(Exception):
+ pass
+
+# ------------------------------------------------------------------------------
+def lire_blocs(nomfich, SEPAR):
+ """Retourne la liste des blocs
+ """
+ def info(ib, nlig, ncol):
+ """Affiche les infos d'un bloc"""
+ print " . Bloc %2d : %6d lignes, %6d colonnes" % (ib, nlig, ncol)
+ print " Lecture des blocs du fichier '%s'" % nomfich
+ fich=open(nomfich, 'r')
+ if SEPAR == 'None':
+ SEPAR=None
+ blocs = []
+ lignes = []
+ llen=0
+ il=0
+ for line in fich:
+ il+=1
+ try:
+ if line.strip()=='':
+ raise ValueError
+ splin = line.split(SEPAR)
+ lignes.append(map(float, splin))
+ if llen==0:
+ llen=len(splin)
+ elif len(splin) != llen:
+ raise LectureBlocError, 'Ligne %d : %d champs au lieu de %d attendus' % (il, len(splin), llen)
+ except ValueError:
+ if lignes==[]:
+ pass # dans ce cas, on a plusieurs lignes délimitant 2 fonctions
+ else:
+ blocs.append(numpy.array(lignes))
+ info(len(blocs), len(lignes), llen)
+ lignes=[]
+ llen=0
+ fich.close()
+ if len(lignes) > 0 :
+ blocs.append(numpy.array(lignes))
+ info(len(blocs), len(lignes), llen)
+ return blocs
+
+# ------------------------------------------------------------------------------
+def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR):
+ """Méthode de construction du VALE pour le format libre
+ format LIBRE
+ Les lignes contenant autre chose que des séquences de nombres
+ réels et de séparateurs sont considérées comme délimitant deux
+ fonctions différentes. Cette situation correspond à l exception
+ ValueError levée par le map de float. Le deuxieme indice de
+ INDIC_PARA et INDIC_RESU est l indice permettant de pointer sur la
+ fonction voulue, au sens de ce découpage.
+ """
+ from Utilitai.transpose import transpose
+ blocs = lire_blocs(nomfich, SEPAR)
+
+ # vérifications de cohérences lignes et colonnes
+ nb_blocs = len(blocs)
+ bloc_para = INDIC_PARA[0]
+ col_para = INDIC_PARA[1]
+ bloc_resu = INDIC_RESU[0]
+ col_resu = INDIC_RESU[1]
+ if bloc_para > nb_blocs :
+ raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+ if bloc_resu > nb_blocs:
+ raise LectureBlocError, "Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu)
+
+ if col_para > len(blocs[bloc_para-1][0]):
+ raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+ (bloc_para, len(blocs[bloc_para-1][0]), col_para)
+ if col_resu > len(blocs[bloc_resu-1][0]):
+ raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \
+ (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu)
+
+ # construction du VALE de la fonction par recherche des indices
+ # de colonnes et de fonctions dans le tableau blocs
+ vale_para = blocs[bloc_para-1][:,col_para-1]
+ vale_resu = blocs[bloc_resu-1][:,col_resu-1]
+ if len(vale_para) != len(vale_resu) :
+ print 'VALE_PARA =', vale_para
+ print 'VALE_RESU =', vale_resu
+ message="""Les deux colonnes extraites n'ont pas la meme longueur
+ %d lignes pour PARA
+ %d lignes pour RESU""" % (len(vale_para), len(vale_resu))
+ raise LectureBlocError, message
+
+ laux=transpose([vale_para, vale_resu])
+ liste_vale=[]
+ for v in laux:
+ liste_vale.extend(v)
+ return liste_vale
+
+# ------------------------------------------------------------------------------
+def liste_simple(nomfich,INDIC_PARA,SEPAR):
+ """recherche d'une liste simple
+ """
+ blocs = lire_blocs(nomfich, SEPAR)
+
+ # vérifications de cohérences lignes et colonnes
+ nb_blocs = len(blocs)
+ bloc_para = INDIC_PARA[0]
+ col_para = INDIC_PARA[1]
+ if bloc_para > nb_blocs :
+ raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+ if col_para > len(blocs[bloc_para-1][0]):
+ raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+ (bloc_para, len(blocs[bloc_para-1][0]), col_para)
+
+ # construction du VALE de la fonction par recherche des indices
+ # de colonnes et de fonctions dans le tableau l_fonc
+ vale_1=blocs[bloc_para-1][:,col_para-1]
+ return vale_1.tolist()
+
+# ------------------------------------------------------------------------------
+def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
+ NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
+ PROL_GAUCHE,VERIF,INFO,TITRE,**args):
+ """Méthode corps de la macro
+ """
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.UniteAster import UniteAster
+
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # On recopie le mot cle defi_fonction pour le proteger
+ if TYPE=='NAPPE' :
+ mc_DEFI_FONCTION=args['DEFI_FONCTION']
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
+ DEFI_NAPPE =self.get_cmd('DEFI_NAPPE')
+
+ nompro='LIRE_FONCTION'
+
+ # Lecture de la fonction dans un fichier d unité logique UNITE
+ UL = UniteAster()
+ nomfich=UL.Nom(UNITE)
+ if not osp.isfile(nomfich):
+ UTMESS('F','FONCT0_41',valk=nomfich)
+
+ # fonction(_c) ou nappe en sortie
+ self.DeclareOut('ut_fonc',self.sd)
+
+ if TYPE=='FONCTION':
+ # mise en forme de la liste de valeurs suivant le format choisi :
+ try:
+ liste_vale = liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR)
+ except LectureBlocError, message:
+ UTMESS('F', 'FONCT0_42', valk=message)
+
+ # création de la fonction ASTER :
+ ut_fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
+ NOM_RESU =NOM_RESU,
+ PROL_DROITE=PROL_DROITE,
+ PROL_GAUCHE=PROL_GAUCHE,
+ INTERPOL =INTERPOL,
+ INFO =INFO,
+ TITRE =TITRE,
+ VERIF =VERIF,
+ VALE =liste_vale,)
+
+ elif TYPE=='FONCTION_C':
+ # mise en forme de la liste de valeurs suivant le format choisi :
+ if 'INDIC_REEL' in args :
+ indic1=args['INDIC_REEL']
+ indic2=args['INDIC_IMAG']
+ if 'INDIC_MODU' in args :
+ indic1=args['INDIC_MODU']
+ indic2=args['INDIC_PHAS']
+ try:
+ liste_vale_r = liste_double(nomfich,INDIC_PARA,indic1,SEPAR)
+ except LectureBlocError, message:
+ UTMESS('F', 'FONCT0_42', valk=message)
+
+ try:
+ liste_vale_i = liste_double(nomfich,INDIC_PARA,indic2,SEPAR)
+ except LectureBlocError, message:
+ UTMESS('F', 'FONCT0_42', valk=message)
+
+ liste=[]
+ if 'INDIC_REEL' in args :
+ for i in range(len(liste_vale_r)/2) :
+ liste.extend([liste_vale_r[2*i],liste_vale_r[2*i+1],liste_vale_i[2*i+1]])
+ elif 'INDIC_MODU' in args :
+ for i in range(len(liste_vale_r)/2) :
+ module=liste_vale_r[2*i+1]
+ phase =liste_vale_i[2*i+1]
+ liste.extend([liste_vale_r[2*i],module*cos(phase),module*sin(phase)])
+
+ # création de la fonction ASTER :
+ ut_fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
+ NOM_RESU =NOM_RESU,
+ PROL_DROITE =PROL_DROITE,
+ PROL_GAUCHE =PROL_GAUCHE,
+ INTERPOL =INTERPOL,
+ INFO =INFO,
+ TITRE =TITRE,
+ VERIF =VERIF,
+ VALE_C =liste,)
+
+ elif TYPE=='NAPPE':
+
+ # création de la nappe ASTER :
+ motscles={}
+ motscles['DEFI_FONCTION']=[]
+ for elem in mc_DEFI_FONCTION:
+ try:
+ liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR)
+ except LectureBlocError, message:
+ UTMESS('F', 'FONCT0_42', valk=message)
+
+ motscles['DEFI_FONCTION'].append( _F( VALE =liste_vale,
+ INTERPOL =args['INTERPOL_FONC'],
+ PROL_DROITE=args['PROL_DROITE_FONC'],
+ PROL_GAUCHE=args['PROL_GAUCHE_FONC'] ) )
+ try:
+ liste_para = liste_simple(nomfich,INDIC_PARA,SEPAR)
+ except LectureBlocError, message:
+ UTMESS('F', 'FONCT0_42', valk=message)
+
+ # création de la nappe
+ ut_fonc=DEFI_NAPPE( PARA =liste_para,
+ NOM_PARA =NOM_PARA,
+ NOM_PARA_FONC =args['NOM_PARA_FONC'],
+ NOM_RESU =NOM_RESU,
+ PROL_DROITE =PROL_DROITE,
+ PROL_GAUCHE =PROL_GAUCHE,
+ INTERPOL =INTERPOL,
+ INFO =INFO,
+ TITRE =TITRE,
+ VERIF =VERIF,
+ **motscles)
+ # remet UNITE dans son état initial
+ UL.EtatInit()
+ return ier
--- /dev/null
+#@ MODIF lire_inte_spec_ops Macro DATE 26/03/2008 AUTEUR BODEL C.BODEL
+# -*- 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 lire_inte_spec_ops(self,
+ UNITE = None,
+ FORMAT = None,
+ FORMAT_C = None,
+ NOM_PARA = None,
+ NOM_RESU = None,
+ INTERPOL = None,
+ PROL_DROITE = None,
+ PROL_GAUCHE = None,
+ TITRE = None,
+ INFO = None,
+ **args):
+ ier=0
+
+ from Accas import _F
+ import os
+ from math import cos,sin,sqrt
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.UniteAster import UniteAster
+ # On importe les definitions des commandes a utiliser dans la macro
+ DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
+ CREA_TABLE =self.get_cmd('CREA_TABLE')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+ nompro='LIRE_INTE_SPEC'
+
+ # Lecture de la fonction dans un fichier d unité logique UNITE
+ UL = UniteAster()
+ nomfich=UL.Nom(UNITE)
+ if not os.path.isfile(nomfich):
+ UTMESS('F','SPECTRAL0_4',valk=nomfich)
+ file=open(nomfich,'r')
+ texte=file.read()
+ file.close()
+
+
+ if FORMAT == 'IDEAS':
+ # fabrication d'une liste de data sets 58
+ list_fonc = texte.split(' -1')
+ j = 0
+ for ind_fonc in range(len(list_fonc)):
+ try:
+ tmp = list_fonc[j].split()
+ if tmp[0] == '58':
+ j = j+1
+ else:
+ list_fonc.pop(j)
+ except IndexError:
+ list_fonc.pop(j)
+
+ nb_fonc = len(list_fonc)
+ if nb_fonc == 0:
+ UTMESS('F', 'SPECTRAL0_9')
+
+ l_fonc = []
+ l_noi = []
+ l_noj = []
+ l_cmpi = []
+ l_cmpj = []
+ for ind_fonc in range(nb_fonc):
+ # Extraction des en-tete : nom des noeuds, composantes (=ddl), de leur sens
+ fonc = list_fonc[ind_fonc]
+ ligne = fonc.split('\n')
+
+ record_6 = ligne[7].split()
+ if record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9' :
+ UTMESS('F', 'SPECTRAL0_10')
+ nono = record_6[4] # nom du noeud
+ nuno = int(record_6[5]) # numero
+ ddlno = float(record_6[6])/10 # DDL
+ noref = record_6[7] # nom du noeud de reference
+ nuref = int(record_6[8]) # numero
+ ddlref = float(record_6[9])/10 # DDL
+ # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des capteurs.
+ sens_no,ddl_no = comp(ddlno)
+ sens_ref,ddl_ref = comp(ddlref)
+ signe = sens_no*sens_ref
+
+ # On ne garde que la triang sup de la matrice inter-spectrale
+ crit1 = nuno + ddlno
+ crit2 = nuref + ddlref
+ if crit1 > crit2:
+ continue
+ record_7 = ligne[8].split()
+ nbpairs = int(record_7[1])
+ if record_7[2] == 0:
+ UTMESS('F', 'SPECTRAL0_11')
+ f0 = float(record_7[3])
+ df = float(record_7[4])
+
+ # Liste des valeurs
+ liste = fonc.split('\n')
+ valeurs = ''
+ for ind in range(13):
+ liste.pop(0)
+ for ind_lign in range(len(liste)):
+ valeurs = valeurs + liste[ind_lign]
+ tmp = valeurs.split()
+ valeurs = [signe*float(tmp[ind]) for ind in range(len(tmp))]
+
+ liste = []
+ freq = f0
+ for ind_freq in range(nbpairs):
+ liste.append(freq)
+ liste.append(valeurs[2*ind_freq])
+ liste.append(valeurs[2*ind_freq+1])
+ freq = freq + df
+
+ # création de la fonction ASTER :
+ _fonc=DEFI_FONCTION( NOM_PARA = NOM_PARA,
+ NOM_RESU = NOM_RESU,
+ PROL_DROITE= PROL_DROITE,
+ PROL_GAUCHE= PROL_GAUCHE,
+ INTERPOL = INTERPOL,
+ INFO = INFO,
+ TITRE = TITRE,
+ VALE_C = liste,)
+ l_fonc.append(_fonc.nom) # Liste des fonctions
+ l_noi.append('N'+str(nuno)) # Liste des noeuds de mesure
+ l_cmpi.append(ddl_no) # DDL associes
+ l_noj.append('N'+str(nuref)) # Liste des noeuds de ref
+ l_cmpj.append(ddl_ref) # DDL associes
+
+ # Verification a posteriori de la dimension de l'inter-spectre
+ tmp = 0.5*(-1+sqrt(1+8*len(l_fonc)))
+ dim = int(tmp)
+ nb_fonc = 0.5*dim*(dim+1)
+
+ if dim != tmp :
+ UTMESS('F', 'SPECTRAL0_6')
+
+
+ mcfact=[]
+ mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim) ,NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='NOEUD_I' ,LISTE_K=l_noi ,NUME_LIGN=range(2,nb_fonc+2)))
+ mcfact.append(_F(PARA='NOM_CMP_I' ,LISTE_K=l_cmpi ,NUME_LIGN=range(2,nb_fonc+2)))
+ mcfact.append(_F(PARA='NOEUD_J' ,LISTE_K=l_noj ,NUME_LIGN=range(2,nb_fonc+2)))
+ mcfact.append(_F(PARA='NOM_CMP_J' ,LISTE_K=l_cmpj ,NUME_LIGN=range(2,nb_fonc+2)))
+ mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,nb_fonc+2)))
+ self.DeclareOut('tab_inte',self.sd)
+ tab_inte=CREA_TABLE(LISTE=mcfact,
+ TITRE=TITRE,
+ TYPE_TABLE='TABLE_FONCTION')
+
+
+ elif FORMAT == 'ASTER':
+ list_fonc=texte.split('FONCTION_C')
+ entete=list_fonc.pop(0)
+ try :
+ entete=entete[entete.index('DIM'):]
+ dim=int(entete[entete.index('=')+1:entete.index('\n')])
+ except ValueError :
+ UTMESS('F', 'SPECTRAL0_5')
+
+ if len(list_fonc)!=(dim*(dim+1)/2):
+ UTMESS('F', 'SPECTRAL0_6')
+
+ nume_i=[]
+ nume_j=[]
+ l_fonc=[]
+ for i in range(dim*(dim+1)/2):
+ numi=list_fonc[i][list_fonc[i].index('I =')+3:]
+ numi=numi[:numi.index('\n')]
+ nume_i.append(int(numi))
+ numj=list_fonc[i][list_fonc[i].index('J =')+3:]
+ numj=numj[:numj.index('\n')]
+ nume_j.append(int(numj))
+ try :
+ vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
+ vale_fonc=vale_fonc.replace('\n',' ')
+ vale_fonc=map(float,vale_fonc.split())
+ except ValueError :
+ UTMESS('F', 'SPECTRAL0_7')
+
+ liste=[]
+ if FORMAT_C=='REEL_IMAG':
+ liste=vale_fonc
+ elif FORMAT_C=='MODULE_PHASE':
+ for i in range(len(vale_fonc)/3) :
+ module=vale_fonc[3*i+1]
+ phase =vale_fonc[3*i+2]
+ liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
+
+
+ # création de la fonction ASTER :
+ _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
+ NOM_RESU =NOM_RESU,
+ PROL_DROITE=PROL_DROITE,
+ PROL_GAUCHE=PROL_GAUCHE,
+ INTERPOL =INTERPOL,
+ INFO =INFO,
+ TITRE =TITRE,
+ VALE_C =liste,)
+ l_fonc.append(_fonc.nom)
+
+ nume_ib=[]
+ nume_jb=[]
+ for i in range(dim):
+ for j in range(i,dim):
+ nume_ib.append(i+1)
+ nume_jb.append(j+1)
+ if nume_i!=nume_ib or nume_j!=nume_jb :
+ UTMESS('F', 'SPECTRAL0_3')
+ mcfact=[]
+ mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,)))
+ mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2)))
+ mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2)))
+ mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2)))
+ self.DeclareOut('tab_inte',self.sd)
+ tab_inte=CREA_TABLE(LISTE=mcfact,
+ TITRE=TITRE,
+ TYPE_TABLE='TABLE_FONCTION')
+
+ else:
+ # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR !
+ UTMESS('F', 'SPECTRAL0_12')
+
+
+ # remet UNITE dans son état initial
+ UL.EtatInit()
+ return ier
+
+
+
+def comp(ddlno):
+ sens = 1
+ if ddlno < 0:
+ sens = -1
+ if ddlno == .1:return sens,'DX'
+ elif ddlno == .2:return sens,'DY'
+ elif ddlno == .3:return sens,'DZ'
+ elif ddlno == .4:return sens,'DRX'
+ elif ddlno == .5:return sens,'DRY'
+ elif ddlno == .6:return sens,'DRZ'
+ else:
+ print "Probleme pour l'attribution des composantes"
+
+
+
--- /dev/null
+#@ MODIF lire_table_ops Macro DATE 15/03/2010 AUTEUR COURTOIS 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.
+# ======================================================================
+
+import os
+import re
+
+# ------------------------------------------------------------------------------
+def msplit(chaine, separ):
+ """Equivalent de chaine.split(separ) en acceptant une ou plusieurs
+ occurrences du séparateur.
+ """
+ return re.split('%s+' % re.escape(separ), chaine.strip(separ))
+
+# ------------------------------------------------------------------------------
+def lecture_table(texte, nume, separ):
+ """Méthode de construction de l'objet Table à partir d'un texte d'une table
+ au format ASTER.
+ """
+ from Utilitai.transpose import transpose
+ from Utilitai.Table import Table
+ from Utilitai.Utmess import UTMESS
+
+ tab_lue = {}
+ nume_lign = []
+ idt_deb = '#DEBUT_TABLE\n'
+ idt_fin = '#FIN_TABLE\n'
+ idt_tit = '#TITRE'
+ id_vide = '-'
+
+ # expression régulière pour découper les N tables du fichier
+ exp = re.compile(re.escape(idt_deb) + '(.*?)' + re.escape(idt_fin),
+ re.MULTILINE | re.DOTALL)
+ l_txt = exp.findall(texte)
+ nbbloc = len(l_txt)
+ if nume > nbbloc:
+ UTMESS('F', 'TABLE0_10', vali=(nume, nbbloc))
+ txttab = l_txt[nume - 1]
+
+ # expression régulière pour extraire le titre
+ exp = re.compile(re.escape(idt_tit) + '(.*)$', re.MULTILINE)
+ titre_tab = os.linesep.join([s.strip(separ) for s in exp.findall(txttab)])
+
+ # restent dans la table les lignes non vides qui ne sont pas des titres
+ txttab = [line for line in txttab.splitlines() \
+ if line.strip(separ) != '' and not line.startswith(idt_tit)]
+
+ # ligne des paramètres et des types
+ list_para = msplit(txttab.pop(0), separ)
+ list_type = msplit(txttab.pop(0), separ)
+ nb_para = len(list_type)
+
+ # format de lecture
+ fmt = {
+ 'I' : '([0-9\-\+]+)',
+ 'R' : '([0-9\.,\-\+eEdD]+)',
+ 'K' : '(.{%(len)s})'
+ }
+ lfmt = ('%s+' % re.escape(separ)).join(
+ [fmt[typ[0]] % { 'len' : typ[1:] } for typ in list_type]
+ )
+
+ # construction des lignes de la Table
+ l_rows = []
+ for i, line in enumerate(txttab):
+ mat = re.search(lfmt, line)
+ if mat is None or nb_para != len(mat.groups()):
+ UTMESS('F+', 'TABLE0_11', vali=i + 1)
+ if mat is not None:
+ UTMESS('F+', 'TABLE0_12', vali=len(mat.groups()))
+ UTMESS('F', 'TABLE0_13', vali=nb_para)
+ dico = {}
+ for para, typ, ch in zip(list_para, list_type, mat.groups()):
+ ch = ch.strip()
+ if ch != id_vide:
+ if typ == 'I':
+ val = int(ch)
+ elif typ == 'R':
+ val = float(ch)
+ else:
+ val = ch
+ dico[para] = val
+ l_rows.append(dico)
+
+ tab = Table(l_rows, list_para, list_type, titre_tab)
+ return tab
+
+
+# ------------------------------------------------------------------------------
+def lire_table_ops(self, **args):
+ """Méthode corps de la macro LIRE_TABLE
+ """
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.UniteAster import UniteAster
+
+ ier = 0
+ nompro = 'LIRE_TABLE'
+ ### On importe les definitions des commandes a utiliser dans la macro
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ UNITE = self['UNITE']
+ FORMAT = self['FORMAT']
+ NUME_TABLE = self['NUME_TABLE']
+ SEPARATEUR = self['SEPARATEUR']
+ PARA = self['PARA']
+ TITRE = self['TITRE']
+
+ ### La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ ### Lecture de la table dans un fichier d unité logique UNITE
+ UL = UniteAster()
+ nomfich=UL.Nom(UNITE)
+ if not os.path.isfile(nomfich):
+ UTMESS('F', 'FONCT0_41', valk=nomfich)
+
+ texte = open(nomfich,'r').read()
+ # remet UNITE dans son état initial
+ UL.EtatInit()
+
+ ### mise en forme de la liste de valeurs suivant le format choisi :
+ # pour le moment uniquement ASTER
+ if FORMAT=='ASTER':
+ tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR)
+ else:
+ pass
+
+ ### création de la table ASTER :
+ self.DeclareOut('ut_tab', self.sd)
+ motscles = tab_lue.dict_CREA_TABLE()
+ ut_tab=CREA_TABLE(**motscles)
+
+ return ier
--- /dev/null
+#@ MODIF macr_adap_mail_ops Macro DATE 15/03/2010 AUTEUR GNICOLAS G.NICOLAS
+# -*- 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
+#
+"""
+Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
+"""
+__revision__ = "V1.3"
+#
+def macr_adap_mail_ops ( self,
+ INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
+ **args):
+ """
+ Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
+ """
+#
+# 1. args est le dictionnaire des arguments
+# args.keys() est la liste des mots-cles
+# 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) represente le contenu de la variable mot_cle dans la macro appelante.
+#
+### print 'glop'
+### print args
+### print args.keys()
+### if len (args.keys())>0 : print args.keys()[0]
+### print args["MAILLAGE"]
+#
+# 2. Les caracteristiques d'un passage sont conservees dans un dictionnaire. Il y a autant de
+# dictionnaires que de sollicitations pour une serie d'adaptation. L'ensemble de ces dictionnaires
+# est conserve dans la liste Liste_Passages. Cette liste est necessairement globale pour pouvoir
+# la retrouver e chaque nouveau passage.
+# Description du dictionnaire de passages :
+# dico["Maillage_0"] = o ; string ; nom du concept du maillage initial de la serie d'adaptation
+# dico["Maillage_NP1"] = o ; string ; nom du concept du dernier maillage adapte
+# dico["Rep_Calc_HOMARD_global"] = o ; string ; Nom global du repertoire de calcul pour HOMARD
+# dico["Rep_Calc_HOMARD_local"] = o ; string ; Nom local du repertoire de calcul pour HOMARD
+# depuis le repertoire de calcul pour ASTER
+# dico["niter"] = o ; entier ; numero d'iteration
+#
+# 3. Les caracteristiques d'un maillage sont conservees dans un dictionnaire. Il y a autant de
+# dictionnaires que de maillages manipules. L'ensemble de ces dictionnaires est conserve
+# dans la liste liste_maillages.
+# Description du dictionnaire de maillages :
+# dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1", "MAILLAGE_NP1_ANNEXE" ou "MAILLAGE_FRONTIERE"
+# dico["Nom_ASTER"] = o ; concept ASTER associe
+# dico["Action"] = o ; string ; "A_ecrire" ou "A_lire"
+# dico["NOM_MED"] = o ; string ; Nom MED du maillage
+#
+# 4. Les caracteristiques d'un champ sont conservees dans un dictionnaire. Il y a autant de
+# dictionnaires que de champs manipules. L'ensemble de ces dictionnaires est conserve
+# dans la liste liste_champs.
+# Description du dictionnaire de champs :
+# dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
+# dico["RESULTAT"] = f ; concept ASTER du resutat associe
+# dico["NOM_CHAM"] = f ; string ; Nom ASTER du champ
+# dico["CHAM_GD"] = f ; concept ASTER du champ de grandeur associee
+# dico["COMPOSANTE"] = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+# dico["NUME_ORDRE"] = f ; entier ; Numero d'ordre du champ
+# dico["INST"] = f ; entier ; Instant du champ
+# dico["PRECISION"] = f ; entier ; Precision sur l'instant du champ
+# dico["CRITERE"] = f ; entier ; Critere de precision sur l'instant du champ
+# dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
+# dico["NOM_MED"] = o ; string ; Nom MED du champ
+# dico["SENSIBILITE"] = f ; string ; Nom du parametre sensible associe
+#
+# 5. Signification de INFO
+# INFO = 1 : aucun message
+# INFO = 2 : les messages des commandes annexes (DEFI_FICHIER, IMPR_RESU, LIRE_MAILLAGE, LIRE_CHAMP)
+# INFO = 3 : aucun message pour les commandes annexes
+# 1er niveau de message pour l'execution de HOMARD
+# INFO = 4 : aucun message pour les commandes annexes
+# 2nd niveau de message pour l'execution de HOMARD
+#
+ from Accas import _F
+ from Macro import creation_donnees_homard
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ import aster
+ import string
+ import os
+ from types import ListType, TupleType
+ EnumTypes = (ListType, TupleType)
+#gn import shutil
+#
+ global Liste_Passages
+#
+#====================================================================
+# 1. Prealables
+#====================================================================
+#
+# 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
+#
+ self.set_icmd(1)
+#
+# 1.2. ==> Numero 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")
+ LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
+ LIRE_CHAMP = self.get_cmd("LIRE_CHAMP")
+#
+# 1.4. ==> Le nom du programme HOMARD a lancer
+#
+ repertoire_outils = aster.repout()
+ homard = repertoire_outils + "homard"
+#
+# 1.5. ==> Initialisations
+#
+ codret_partiel = [0]
+ Rep_Calc_ASTER = os.getcwd()
+#
+ liste_maillages = []
+ liste_champs = []
+ liste_zones = []
+ liste_front_analytiques = []
+ dico_indi = {}
+#
+ LISTE_ADAPTATION_LIBRE = ("RAFF_DERA" , "RAFFINEMENT" , "DERAFFINEMENT")
+#
+ if ( INFO == 2 ) :
+ infomail = "OUI"
+ infocomm = 2
+ else :
+ infomail = "NON"
+ infocomm = 1
+#
+#====================================================================
+# 2. Decodage des arguments de la macro-commande
+#====================================================================
+# 2.1. ==> Donnees de pilotage de l'adaptation
+#
+ if ( self.nom == "MACR_ADAP_MAIL" ) :
+#
+ if args["ADAPTATION"] == "MODIFICATION" :
+ mode_homard = "MODI"
+ else :
+ mode_homard = "ADAP"
+#
+# 2.1.1. ==> Les concepts "maillage"
+#
+#gn print "\n.. Debut de 2.1.1"
+# for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1"] :
+ for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1" , "MAILLAGE_NP1_ANNEXE"] :
+#gn print "\nmot_cle = ",mot_cle
+ dico = {}
+ dico["Type_Maillage"] = mot_cle
+ if ( args[mot_cle] != None ) :
+#gn print "==> args[",mot_cle,"] = ",args[mot_cle]
+ dico["Nom_ASTER"] = args[mot_cle]
+ if ( mot_cle == "MAILLAGE_N" ) :
+ dico["Action"] = "A_ecrire"
+ else :
+ dico["Action"] = "A_lire"
+ else :
+ dico["Action"] = "Rien"
+#gn print "dico = ",dico
+ liste_maillages.append(dico)
+#
+# 2.1.2. ==> L'eventuel indicateur d'erreur
+#
+#gn print "\n.. Debut de 2.1.2"
+#gn print "args = ", args
+ if args["ADAPTATION"] in LISTE_ADAPTATION_LIBRE :
+ dico = {}
+ dico["Type_Champ"] = "INDICATEUR"
+ if ( args["RESULTAT_N"] != None ) :
+ lresu = 1
+ dico["RESULTAT"] = args["RESULTAT_N"]
+ noresu = dico["RESULTAT"].nom
+ dico["NOM_CHAM"] = args["INDICATEUR"]
+ nomsym = dico["NOM_CHAM"]
+ if ( args["NUME_ORDRE"] != None ) :
+ dico["NUME_ORDRE"] = args["NUME_ORDRE"]
+ if ( args["INST"] != None ) :
+ dico["INST"] = args["INST"]
+ for cle in [ "PRECISION", "CRITERE" ] :
+ if ( args[cle] != None ) :
+ dico[cle] = args[cle]
+ if ( args["SENSIBILITE"] != None ) :
+ dico["SENSIBILITE"] = args["SENSIBILITE"]
+ else :
+ lresu = 0
+ dico["CHAM_GD"] = args["CHAM_GD"]
+ noresu = dico["CHAM_GD"].nom
+ nomsym = " "
+#gn print "dico = ", dico
+#
+ if dico.has_key("SENSIBILITE") :
+ nopase = dico["SENSIBILITE"].nom
+ else :
+ nopase = " "
+#gn print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
+ dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
+#gn print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
+#
+ if args.has_key("NOM_CMP_INDICA") :
+ if args["NOM_CMP_INDICA"] is not None :
+ if not type(args["NOM_CMP_INDICA"]) in EnumTypes :
+ l_aux = [args["NOM_CMP_INDICA"]]
+ else :
+ l_aux = []
+ les_composantes = args["NOM_CMP_INDICA"]
+ for composante in les_composantes :
+ l_aux.append(composante)
+ dico["COMPOSANTE"] = l_aux
+#
+ liste_champs.append(dico)
+ dico_indi = dico
+### print dico
+#
+# 2.1.3. ==> Les champs a mettre a jour
+#
+#gn print "\n.. Debut de 2.1.3."
+#
+ if args.has_key("MAJ_CHAM") :
+#
+ if args["MAJ_CHAM"] is None :
+ les_champs = []
+ else :
+ les_champs = args["MAJ_CHAM"]
+#
+ for maj_cham in les_champs :
+#gn print maj_cham
+#gn print type(maj_cham)
+#
+ dico = {}
+ dico["Type_Champ"] = "CHAMP_MAJ"
+ l_aux = [ "CHAM_MAJ", "TYPE_CHAM" ]
+ if ( maj_cham["RESULTAT"] != None ) :
+ lresu = 1
+ l_aux.append("RESULTAT")
+ l_aux.append("NOM_CHAM")
+ 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]
+ noresu = maj_cham["RESULTAT"].nom
+ nomsym = maj_cham["NOM_CHAM"]
+ if ( maj_cham["SENSIBILITE"] != None ) :
+ dico["SENSIBILITE"] = maj_cham["SENSIBILITE"]
+ else :
+ lresu = 0
+ l_aux.append("CHAM_GD")
+ noresu = maj_cham["CHAM_GD"].nom
+ nomsym = " "
+ for cle in l_aux :
+ dico[cle] = maj_cham[cle]
+#gn print "dico = ", dico
+#
+ if dico.has_key("SENSIBILITE") :
+ nopase = dico["SENSIBILITE"].nom
+ else :
+ nopase = " "
+#gn print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
+ dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
+#gn print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
+#
+### print dico
+ liste_champs.append(dico)
+#
+# 2.1.4. ==> Les zones de raffinement
+#
+### print "\n.. Debut de 2.1.4."
+#
+ if args.has_key("ZONE") :
+#
+ if args["ZONE"] is not None :
+ l_aux = ['TYPE', 'X_MINI', 'X_MAXI', 'Y_MINI', 'Y_MAXI', 'Z_MINI', 'Z_MAXI', 'X_CENTRE', 'Y_CENTRE', 'Z_CENTRE', 'RAYON', 'RAYON_INT', 'RAYON_EXT', 'X_AXE', 'Y_AXE', 'Z_AXE', 'X_BASE', 'Y_BASE', 'Z_BASE', 'HAUTEUR' ]
+ les_zones = args["ZONE"]
+#
+ for zone in les_zones :
+### print zone
+### print type(zone)
+ dico = {}
+ for aux in l_aux :
+ if ( zone[aux] != None ) :
+ dico[aux] = zone[aux]
+### print dico
+ liste_zones.append(dico)
+#
+### print liste_zones
+#
+# 2.2. ==> Donnees de pilotage de l'information
+#
+ else :
+#
+ mode_homard = "INFO"
+#
+ dico = {}
+ dico["Type_Maillage"] = "MAILLAGE_N"
+ dico["Nom_ASTER"] = args["MAILLAGE"]
+ dico["Action"] = "A_ecrire"
+ liste_maillages.append(dico)
+#
+# 2.3. ==> Suivi d'une frontiere
+# 2.3.1. ==> Suivi d'une frontiere maillee
+#
+#gn print "\n.. Debut de 2.3.1."
+#
+ if ( MAILLAGE_FRONTIERE != None ) :
+#
+ dico = {}
+ dico["Type_Maillage"] = "MAILLAGE_FRONTIERE"
+ dico["Nom_ASTER"] = MAILLAGE_FRONTIERE
+ dico["Action"] = "A_ecrire"
+ liste_maillages.append(dico)
+#
+# 2.3.2. ==> Suivi d'une frontiere analytique
+#
+#gn print "\n.. Debut de 2.3.2."
+#
+ if args.has_key("FRONTIERE_ANALYTIQUE") :
+#
+ if args["FRONTIERE_ANALYTIQUE"] is None :
+ les_front_analytiques = []
+ else :
+ les_front_analytiques = args["FRONTIERE_ANALYTIQUE"]
+#
+ for frontiere in les_front_analytiques :
+ l_aux = [ "TYPE", "GROUP_MA", "RAYON", "X_CENTRE", "Y_CENTRE", "Z_CENTRE"]
+ if ( frontiere["TYPE"] == "CYLINDRE" ) :
+ l_aux.append("X_AXE")
+ l_aux.append("Y_AXE")
+ l_aux.append("Z_AXE")
+ dico = {}
+ for aux in l_aux :
+ dico[aux] = frontiere[aux]
+#gn print dico
+#
+ liste_front_analytiques.append(dico)
+#
+# 2.4. ==> Le numero de version de HOMARD
+# Remarque : dans la donnee 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
+#
+#gn print "\n.. Debut de 2.4. avec VERSION_HOMARD = ", VERSION_HOMARD
+ VERSION_HOMARD = string.replace(VERSION_HOMARD,"_" , ".")
+ VERSION_HOMARD = string.replace(VERSION_HOMARD,"N" , "n")
+#
+ if ( VERSION_HOMARD[-6:]==".PERSO" ):
+ VERSION_HOMARD = VERSION_HOMARD[:-6]
+ version_perso = 1
+ else :
+ version_perso = 0
+#gn print ".... VERSION_HOMARD = ", VERSION_HOMARD
+#gn print ".... version_perso = ", version_perso
+#
+# 2.54. ==> Les messages d'information
+#
+#gn print "\n.. Debut de 2.5."
+#gn print args["INTERPENETRATION"]
+ if ( args["INTERPENETRATION"] == "OUI" ) :
+ if ( mode_homard == "INFO" ) :
+ UTMESS('I','HOMARD0_6')
+ else :
+ UTMESS('A','HOMARD0_7')
+# UTMESS('I','HOMARD0_6',valk='glop')
+#
+#====================================================================
+# 3. Preparation du lancement des commandes
+#====================================================================
+#
+# 3.1. ==> . Elaboration des noms MED des concepts de maillage
+# . Memorisation des noms ASTER du maillage en entree et en sortie (sous forme string)
+#
+# On cree une nouvelle liste des dictionnaires decrivant les maillages
+# et e la fin on ecrase l'ancienne liste par cette nouvelle.
+#
+#gn print "\n.. Debut de 3.1."
+#
+ Nom_Concept_Maillage_NP1_ANNEXE = None
+ l_aux = []
+ for dico in liste_maillages :
+#gn print "\ndico avant = ",dico
+ if ( dico["Action"] != "Rien" ) :
+ dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
+ l_aux.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
+ elif ( dico["Type_Maillage"] == "MAILLAGE_NP1_ANNEXE" ) :
+ Nom_Concept_Maillage_NP1_ANNEXE = dico["Nom_ASTER"].nom
+#gn print "\ndico apres = ",dico
+ liste_maillages = l_aux
+#
+# 3.2. ==> Recherche du numero d'iteration et du repertoire de travail
+#
+# 3.2.1. ==> Par defaut :
+# . le numero d'iteration est nul
+# . le nom du repertoire de lancement de HOMARD est construit sur le nom
+# du maillage en entree et le numero de passage dans la fonction
+#
+#gn print "\.. Debut de 3.2.1."
+#
+ niter = 0
+ Nom_Rep_local = Nom_Concept_Maillage_N + "_" + mode_homard + "_" + 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)
+#gn print "Rep_Calc_HOMARD_local = ", Rep_Calc_HOMARD_local
+#gn print "Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
+#
+# 3.2.2. ==> En adaptation : il faut repartir du repertoire de l'iteration precedente
+#
+#gn print "\.. Debut de 3.2.2."
+#
+ if ( mode_homard == "ADAP" ) :
+#
+# 3.2.2.1. ==> On recherche si dans les passages deja effectues, il en existe un
+# dont le maillage d'arrivee etait l'actuel maillage d'entree. Si c'est
+# le cas, cela veut dire que l'adaptation en cours est la suite d'une
+# precedente. On doit donc utiliser le meme repertoire. Le numero
+# d'iteration est celui de l'adaptation precedente augmente de 1.
+#
+#gn print "\.. Debut de 3.2.2.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
+#
+#gn print "\.. Debut de 3.2.2.2."
+#
+# 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["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
+ 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_aux = []
+ for dico in Liste_Passages :
+ if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
+ dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+ dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
+ dico["niter"] = niter
+ l_aux.append(dico)
+ Liste_Passages = l_aux
+#
+### print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
+#
+# 3.2.3. Creation du repertoire pour homard
+# attention : on ne fait cette creation qu'une seule fois par cas
+# d'adaptation ou d'information
+#
+#gn print "\.. Debut de 3.2.3."
+#
+ 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])
+ UTMESS("F", 'HOMARD0_4', valk=Rep_Calc_HOMARD_global)
+#
+#====================================================================
+# 4. Ecriture des commandes de creation des donnees MED
+#====================================================================
+#
+#gn print "\.. Debut de 4."
+#
+# On doit ecrire : le maillage,
+# le champ d'indicateur d'erreur
+# les champs e convertir
+# Remarque : on met tout dans le meme fichier
+#
+# Chacune de ces ecritures est optionnelle selon le contexte.
+#
+# 4.1. ==> Noms des fichiers d'ASTER vers HOMARD et eventuellement de HOMARD vers ASTER
+# Remarque : aujourd'hui, les ecritures ou les lectures au format MED se font obligatoirement sur
+# un fichier de nom fort.n, place dans le repertoire de calcul
+##
+# 4.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))
+### print "fichier_aster_vers_homard = ",fichier_aster_vers_homard
+#
+# 4.1.2. ==> De HOMARD vers ASTER
+#
+ if ( mode_homard in [ "ADAP", "MODI" ] ) :
+ 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))
+### print "fichier_homard_vers_aster = ",fichier_homard_vers_aster
+#
+# 4.2. La definition du fichier de ASTER vers HOMARD
+#
+ DEFI_FICHIER ( ACTION= "ASSOCIER",
+ UNITE = unite_fichier_aster_vers_homard,
+ TYPE = "LIBRE",
+ INFO = infocomm )
+#
+# 4.3. Le(s) maillage(s)
+# Le maillage de calcul et l'eventuel maillage de la frontiere sont ecrits
+# dans le meme fichier MED
+# En fait, on pourrait s'en passer au dela de la 1ere iteration
+# car HOMARD a memorise. Mais des que l'on ecrit un champ,
+# les conventions MED imposent la presence du maillage dans le fichier.
+# Donc on va toujours ecrire.
+#
+ 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 = infocomm,
+ FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
+ **motscfa )
+#
+# 4.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 economique ainsi !
+# Remarque : pour l'adaptation, on peut ne demander qu'un nombre reduit de composante du
+# champ d'indicateur.
+# s'il y a demande de mise a jour, toutes les composantes sont concernees. Il faut
+# donc dans ce cas imprimer le champ total.
+# dico["Type_Champ"] = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
+# dico["RESULTAT"] = f ; concept ASTER du resutat associe
+# dico["NOM_CHAM"] = f ; string ; Nom ASTER du champ
+# dico["CHAM_GD"] = f ; concept ASTER du champ de grandeur associee
+# dico["COMPOSANTE"] = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+# dico["NUME_ORDRE"] = f ; entier ; Numero d'ordre du champ
+# dico["INST"] = f ; entier ; Instant du champ
+# dico["PRECISION"] = f ; entier ; Precision sur l'instant du champ
+# dico["CRITERE"] = f ; entier ; Critere de precision sur l'instant du champ
+# dico["CHAM_MAJ"] = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
+# dico["NOM_MED"] = o ; string ; Nom MED du champ
+# dico["SENSIBILITE"] = f ; string ; Nom du parametre sensible associe
+#
+# 4.4.1. Recherche d'un doublon eventuel sur le champ d'indicateur d'erreur
+#
+#gn print "dico_indi = ",dico_indi
+ if len(dico_indi) > 0 :
+ indic_est_deja_imprime = 0
+ if dico_indi.has_key("RESULTAT") :
+ l_aux = [ "RESULTAT", "NOM_CHAM" ]
+ else :
+ l_aux = [ "CHAM_GD" ]
+ else :
+ indic_est_deja_imprime = 1
+ l_aux = [ ]
+#gn print ".. Au debut de la boucle, l_aux = ",l_aux
+#gn print ".. Au debut de la boucle, indic_est_deja_imprime = ",indic_est_deja_imprime
+#
+ liste_champs_imprime = []
+ for dico in liste_champs :
+### print "\n.... dico = ",dico
+# Pour un champ e mettre e jour, on a toujours impression
+ if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+ liste_champs_imprime.append(dico)
+# Si le champ d'indicateur n'a toujours pas ete repere comme champ e mettre e jour :
+ if not indic_est_deja_imprime :
+# Est-ce le meme champ ?
+ on_a_le_champ = 1
+ for cle in l_aux :
+ if ( dico.has_key(cle) ) :
+### print "...... dico_indi[cle] = ",dico_indi[cle]
+### print "...... dico[cle] = ",dico[cle]
+ if ( dico_indi[cle] != dico[cle] ) :
+ on_a_le_champ = 0
+ break
+ else :
+ on_a_le_champ = 0
+ break
+# Si oui, est-ce un champ sensible ou non ?
+ if on_a_le_champ :
+ cle = "SENSIBILITE"
+ if dico.has_key(cle) :
+ if ( dico[cle] != None ) :
+ if dico_indi.has_key(cle) :
+ if ( dico_indi[cle] != dico[cle] ) :
+ on_a_le_champ = 0
+ break
+ else :
+ on_a_le_champ = 0
+ break
+# Si oui, est-ce au meme moment ? (remarque : si rien n'est designe, c'est qu'il n'y a qu'un
+# seul instant ... donc c'est le meme ! En revanche, on ne sait pas comparer une donnee
+# en numero d'ordre et une donnee en instant. On croise les doigts.)
+ if on_a_le_champ :
+ 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] ) :
+ on_a_le_champ = 0
+ break
+ if on_a_le_champ :
+ indic_est_deja_imprime = 1
+### print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
+# Si le champ d'indicateur n'a pas ete repere comme champ e mettre e jour, il faut
+# l'inclure dans les champs e imprimer
+ if not indic_est_deja_imprime :
+ liste_champs_imprime.append(dico_indi)
+#
+# 4.4.2. Impressions apres le filtrage precedent
+#gn print "\n.... Debut de 4.2.4.2."
+#
+ for dico in liste_champs_imprime :
+ motscsi = {}
+ for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
+ if dico.has_key(cle) :
+ if ( dico[cle] != None ) :
+ motscsi[cle] = dico[cle]
+ if dico.has_key("COMPOSANTE") :
+ if ( len(dico["COMPOSANTE"]) == 1 ) :
+ motscsi["NOM_CMP"] = dico["COMPOSANTE"][0]
+ else :
+ motscsi["NOM_CMP"] = dico["COMPOSANTE"]
+ if dico.has_key("SENSIBILITE") :
+ motscsi["SENSIBILITE"] = dico["SENSIBILITE"]
+ motscfa = {}
+ motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
+ **motscsi
+ )
+#gn print ".. motscfa = ",motscfa
+#
+ IMPR_RESU ( INFO = infocomm,
+ FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
+ **motscfa )
+#
+#====================================================================
+# 5. ==> Creation des fichiers de donnees pour HOMARD
+#====================================================================
+#
+#gn print "\.. Debut de 5."
+#
+ dico_configuration = {}
+#
+# 5.1. ==> Les generalites
+#
+ dico_configuration["INFO"] = INFO
+#
+ dico_configuration["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
+ dico_configuration["VERSION_HOMARD"] = VERSION_HOMARD
+ dico_configuration["version_perso"] = version_perso
+ if args.has_key("UNITE") :
+ UNITE = args["UNITE"]
+ fichier_conf_suppl = os.path.join(Rep_Calc_ASTER,"fort." + str(UNITE))
+ dico_configuration["fichier_conf_suppl"] = fichier_conf_suppl
+#
+ dico_configuration["niter"] = niter
+ dico_configuration["Fichier_ASTER_vers_HOMARD"] = fichier_aster_vers_homard
+ if ( mode_homard in [ "ADAP", "MODI" ] ) :
+ dico_configuration["Fichier_HOMARD_vers_ASTER"] = fichier_homard_vers_aster
+#
+# 5.2. ==> Les noms med des maillages
+#
+ for dico in liste_maillages :
+#gn print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
+ dico_configuration[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
+#gn print dico_configuration
+#
+# 5.3. ==> Les caracteristiques de l'eventuel indicateur d'erreur
+#
+ for dico in liste_champs :
+ dico_aux = {}
+ if ( dico["Type_Champ"] == "INDICATEUR" ) :
+ l_aux = [ "NOM_MED", "COMPOSANTE" ]
+ if dico.has_key("NUME_ORDRE") :
+ l_aux.append("NUME_ORDRE")
+ for cle in l_aux :
+ if ( dico[cle] != None ) :
+ dico_aux[cle] = dico[cle]
+ dico_configuration["Indicateur"] = dico_aux
+#gn if dico_configuration.has_key("Indicateur") :
+#gn print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"]
+#
+# 5.4. ==> Les eventuelles zones de raffinement
+#
+ prem = 1
+ for dico in liste_zones :
+ if prem :
+ l_aux = [dico]
+ prem = 0
+ else :
+ l_aux = dico_configuration["Zones_raffinement"]
+ l_aux.append(dico)
+ dico_configuration["Zones_raffinement"] = l_aux
+### if dico_configuration.has_key("Zones_raffinement") :
+### print "dico_configuration[Zones_raffinement] = ", dico_configuration["Zones_raffinement"]
+#
+# 5.5. ==> La mise a jour de champs
+#
+ prem = 1
+ for dico in liste_champs :
+ dico_aux = {}
+ if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+ l_aux = [ "NOM_MED", "COMPOSANTE" ]
+ if dico.has_key("NUME_ORDRE") :
+ l_aux.append("NUME_ORDRE")
+ else :
+ for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
+ l_aux.append(cle)
+ for cle in l_aux :
+ if dico.has_key(cle) :
+ if ( dico[cle] != None ) :
+ dico_aux[cle] = dico[cle]
+#gn print dico_aux
+ if prem :
+ l_aux = [dico_aux]
+ prem = 0
+ else :
+ l_aux = dico_configuration["Champs"]
+ l_aux.append(dico_aux)
+ dico_configuration["Champs"] = l_aux
+#gn if dico_configuration.has_key("Champs") :
+#gn print "dico_configuration[Champs] = ", dico_configuration["Champs"]
+#
+# 5.6. ==> Les eventuelles frontieres analytiques
+#
+ prem = 1
+ for dico in liste_front_analytiques :
+ if prem :
+ l_aux = [dico]
+ prem = 0
+ else :
+ l_aux = dico_configuration["Frontiere_analytique"]
+ l_aux.append(dico)
+ dico_configuration["Frontiere_analytique"] = l_aux
+#gn if dico_configuration.has_key("Frontiere_analytique") :
+#gn print "dico_configuration[Frontiere_analytique] = ", dico_configuration["Frontiere_analytique"]
+#
+# 5.7. ==> Appel de la fonction de creation
+#
+ donnees_homard = creation_donnees_homard.creation_donnees_homard ( self.nom, args, dico_configuration )
+ if ( INFO >= 4 ) :
+ donnees_homard.quel_mode ( )
+ fic_homard_niter, fic_homard_niterp1 = donnees_homard.creation_configuration ( )
+ donnees_homard.ecrire_fichier_configuration ( )
+ if ( mode_homard == "INFO" ) :
+ Nom_Fichier_Donnees = donnees_homard.ecrire_fichier_donnees ( )
+ else :
+ Nom_Fichier_Donnees = "0"
+#
+# 5.8. ==> Impression eventuelle des fichiers crees
+#
+#gn print "Repertoire ",Rep_Calc_HOMARD_global
+#gn os.system("ls -la "+Rep_Calc_HOMARD_global)
+ if ( INFO >= 4 ) :
+ l_aux = ["HOMARD.Donnees" , "HOMARD.Configuration"]
+ else :
+ l_aux = [ ]
+ for nomfic in l_aux :
+ fic = os.path.join(Rep_Calc_HOMARD_global, nomfic)
+ if os.path.isfile (fic) :
+ print "\n\n=============================================================="
+ print "Contenu de", nomfic
+ fichier = open (fic,"r")
+ les_lignes = fichier.readlines()
+ fichier.close()
+ for ligne in les_lignes :
+ print ligne[:-1]
+ print "==============================================================\n"
+#gn if ( mode_homard == "ADAP" ) :
+#gn if args.has_key("MAJ_CHAM") :
+#gn if args["MAJ_CHAM"] is not None :
+#gn import time
+#gn time.sleep(3600)
+#
+#====================================================================
+# 6. Ecriture de la commande d'execution de homard
+#====================================================================
+#
+#
+#gn print "\.. Debut de 6."
+#gn os.system("cp " + Rep_Calc_HOMARD_global + "/../fort.17* $HOME/aster")
+#gn os.system("cp " + Rep_Calc_HOMARD_global + "/HOMARD.Configuration $HOME/aster/HOMARD.Configuration"+str(niter))
+#gn fichier_aster_vers_homard_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_aster_vers_homard))
+#gn shutil.copyfile(fichier_aster_vers_homard, fichier_aster_vers_homard_2)
+#
+ if ( INFO == 1 ) :
+ iaux = INFO
+ else :
+ iaux = 2
+ EXEC_LOGICIEL ( ARGUMENT = (Rep_Calc_HOMARD_global, # nom du repertoire
+ VERSION_HOMARD, # version de homard
+ str(INFO), # niveau d information
+ Nom_Fichier_Donnees, # fichier de donnees HOMARD
+ str(version_perso), # version personnelle de homard ?
+ ),
+ LOGICIEL = homard,
+ INFO = iaux,
+ )
+#gn import time
+#gn time.sleep(3600)
+#
+#gn if ( mode_homard == "ADAP" ) :
+#gn fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster))
+#gn shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2)
+#gn fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1")
+#gn os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_1+"</tmp/donn1")
+#gn fichier_homard_vers_aster_2_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".2")
+#gn os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_2+"</tmp/donn2")
+#
+#====================================================================
+# 7. ==> Ecriture de la commande de lecture des resultats med
+# Remarque :
+# La fonction self.DeclareOut(a,b) fonctionne ainsi :
+# a est une chaine de caracteres
+# b est la variable declaree dans la commande
+# le but est de associer le contenu de b e la variable locale qui sera designee par a
+# Exemple :
+# self.DeclareOut("maillage_a_lire",args["MAILLAGE_NP1"])
+# ==> la variable maillage_a_lire est identifiee e l'argument "MAILLAGE_NP1"
+#====================================================================
+#
+ if ( mode_homard in [ "ADAP", "MODI" ] ) :
+#
+# 7.1. ==> Le maillage
+# On inhibe l'alarme MODELISA5_49 qui apparait car on fait VERIF=NON
+#
+#gn print "args = ",args
+ for dico in liste_maillages :
+#gn print dico
+ if ( dico["Action"] == "A_lire" ) :
+#
+ MasquerAlarme('MODELISA5_49')
+#
+ self.DeclareOut("maillage_a_lire", dico["Nom_ASTER"])
+ maillage_a_lire = LIRE_MAILLAGE ( UNITE = unite_fichier_homard_vers_aster,
+ FORMAT = "MED",
+ NOM_MED = dico["NOM_MED"],
+ VERI_MAIL = _F(VERIF="NON"), INFO_MED = infocomm, INFO = infocomm )
+#
+ RetablirAlarme('MODELISA5_49')
+#
+#gn print "MAILLAGE = ",maillage_a_lire
+#gn print "NOM_MED = ",dico["NOM_MED"]
+ if ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
+ maillage_np1 = maillage_a_lire
+ maillage_np1_nom_med = dico["NOM_MED"]
+#
+# 7.2. ==> Les champs
+#gn import time
+#gn time.sleep(3600)
+#
+ for dico in liste_champs :
+ if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+#gn 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"]
+#gn print "MAILLAGE = ",maillage_np1
+#gn print "NOM_MAIL_MED = ",maillage_np1_nom_med
+#gn print "NOM_MED = ",dico["NOM_MED"]
+#gn print "TYPE_CHAM =", dico["TYPE_CHAM"]
+ champ_maj = LIRE_CHAMP ( UNITE = unite_fichier_homard_vers_aster, FORMAT = "MED",
+ MAILLAGE = maillage_np1, NOM_MAIL_MED=maillage_np1_nom_med,
+ NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
+ INFO = infocomm, **motscsi )
+#
+#====================================================================
+# 8. Menage des fichiers devenus inutiles
+# Il est important de faire le menage des fichiers MED, qui sont
+# les plus gros.
+# On doit imperativement garder le dernier fichier homard produit
+# En mode d'information, on garde egalement les fichiers textes
+#====================================================================
+#
+ l_aux = [fichier_aster_vers_homard]
+ if ( mode_homard in [ "ADAP", "MODI" ] ) :
+ l_aux.append(fichier_homard_vers_aster)
+#
+ l_aux_bis = os.listdir(Rep_Calc_HOMARD_global)
+ for fic in l_aux_bis :
+ fic_total = os.path.join(Rep_Calc_HOMARD_global, fic)
+ l_aux.append(fic_total)
+#
+ l_aux_bis = []
+ if ( mode_homard == "ADAP" ) :
+ fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niterp1)
+ l_aux_bis.append(fic)
+#gn os.system("cp " + Rep_Calc_HOMARD_global + "/* $HOME/aster")
+#
+ for fic in l_aux :
+ if ( INFO >= 3 ) :
+ print "Examen du fichier ", fic
+ if fic not in l_aux_bis :
+ if ( INFO >= 3 ) :
+ print "==> Destruction du fichier"
+ 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])
+ UTMESS("F", 'HOMARD0_5', valk=fic)
+#
+#gn print "Repertoire ",Rep_Calc_HOMARD_global
+#gn print os.listdir(Rep_Calc_HOMARD_global)
+#gn print "Repertoire ",Rep_Calc_ASTER
+#gn print os.listdir(Rep_Calc_ASTER)
+#
+#====================================================================
+# C'est fini !
+#====================================================================
+#
+### if ( mode_homard == "ADAP" and niter == 3 ) :
+### if ( niter == 2 ) :
+#gn import time
+#gn time.sleep(3600)
+#
+ return
--- /dev/null
+#@ MODIF macr_ascouf_calc_ops Macro DATE 22/12/2009 AUTEUR ABBAS M.ABBAS
+# -*- 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,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
+ from Utilitai.Utmess import UTMESS
+ 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')
+ DEFI_CONTACT =self.get_cmd('DEFI_CONTACT')
+ 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 =self.get_cmd('CALC_G' )
+ 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' :
+ message= ' la condition aux limites sur bol a section conique \n'
+ message=message+' est ignoree pour un coude avec sous-epaisseurs \n'
+ UTMESS('A','ASCOUF0_1')
+ elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
+ UTMESS('E','ASCOUF0_2')
+ #
+ 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) :
+ UTMESS('E','ASCOUF0_3')
+ 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)) ) :
+ UTMESS('E','ASCOUF0_4')
+ if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
+ if not FLAG : UTMESS('A','ASCOUF0_5')
+#
+#------------------------------------------------------------------
+#
+# --- commande AFFE_MODELE ---
+#
+ self.DeclareOut('modele',MODELE)
+ mcfact=[]
+ if (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 (thermique)---
+#
+ mcfact=[]
+ for mater in mc_AFFE_MATERIAU :
+ if mater['TOUT']!=None :
+ mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER']))
+ rccmat = mater['MATER']
+ else :
+ mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
+ if mater['GROUP_MA'][:5]=='COUDE' :
+ if TORS_P1!=None :
+ mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER']))
+ mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+ elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
+ mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+ elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) :
+ mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+
+ __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_INST_INIT']=INCREMENT['NUME_INST_INIT']
+ if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+ mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
+ resuth = THER_LINEAIRE( MODELE = __modthe ,
+ CHAM_MATER = __affmat ,
+ ETAT_INIT = _F(STATIONNAIRE='OUI',),
+ EXCIT = _F(CHARGE=__chther,),
+ INCREMENT = mcfact, )
+#
+#------------------------------------------------------------------
+#
+# --- commande AFFE_MATERIAU (mécanique)---
+#
+ if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
+ indther= ECHANGE
+ mcfact=[]
+ mcfac2=[]
+ for mater in mc_AFFE_MATERIAU :
+ if mater['TOUT']!=None :
+ mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],))
+ if indther:
+ mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+ rccmat = mater['MATER']
+ else :
+ mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
+ if indther:
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+ if mater['GROUP_MA'][:5]=='COUDE' :
+ if TORS_P1!=None :
+ mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],))
+ mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
+ if indther:
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P1',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_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'],))
+ if indther:
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+ elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) :
+ mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
+ if indther:
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+
+
+ affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+ MODELE = modele ,
+ AFFE = mcfact,
+ AFFE_VARC= mcfac2,)
+
+
+
+
+#------------------------------------------------------------------
+#
+# --- 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']!='NON' :
+ 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 AFFE_CHAR_MECA ---
+# chargement mecanique : verif contact levres
+#
+ if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+ _chcont = DEFI_CONTACT( MODELE = modele ,
+ FORMULATION = 'DISCRETE',
+ TOLE_INTERP = -1.E-6,
+ ZONE =_F(GROUP_MA_MAIT = 'FACE1',
+ GROUP_MA_ESCL = 'FACE2',
+ ALGO_CONT = 'VERIF',
+ GROUP_MA_FOND = 'FONDFISS'),)
+#
+# --- commande STAT_NON_LINE ---
+#
+ motscles={}
+#
+ mcfex=[] # mot clé facteur EXCIT
+ mcfex.append(_F(CHARGE=_conlim,))
+ 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
+
+ contact = None
+ if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+ contact = _chcont
+ 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 = {}
+ if RECH_LINEAIRE != None:
+ 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)
+
+ if contact==None:
+ nomres = STAT_NON_LINE( MODELE = modele ,
+ CHAM_MATER = affmth ,
+ CARA_ELEM = carael ,
+ INFO = INFO , **motscles)
+ else :
+ nomres = STAT_NON_LINE( MODELE = modele ,
+ CHAM_MATER = affmth ,
+ CARA_ELEM = carael ,
+ CONTACT = contact,
+ INFO = INFO , **motscles)
+#
+# --- commande CALC_ELEM ---
+#
+ nomres = CALC_ELEM( reuse = nomres,
+ RESULTAT = nomres ,
+ MODELE = modele ,
+ TOUT_ORDRE = 'OUI' ,
+ OPTION = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+ INFO = INFO ,)
+#
+# --- post-traitements ---
+#
+ if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
+#
+# --- post traitement sous-epaisseurs: ligaments ---
+#
+ if mc_IMPR_TABLE!=None:
+#
+ SECT=('MI','TU','GV')
+ LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
+ if mc_IMPR_TABLE['POSI_ANGUL']==None:
+ ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
+ else :
+ ASEP=mc_IMPR_TABLE['POSI_ANGUL']
+#
+# moyenne_rccm, invariant et moyenne sur les ligaments dans
+# l epaisseur
+#
+ l_grno=MAILLAGE.LIST_GROUP_NO()
+ tabprl=[None]*4
+ tablig=[None]*4
+#
+# prelevements des ligaments circonferentiels et longitudinaux
+# de la sous-epaisseur
+#
+ lgrno=[]
+ for tgrno in l_grno :
+ if tgrno[0][:3] in ('CIR','LON') : lgrno.append(tgrno[0])
+ elif tgrno[0][:5]=='PCENT' : lgrno.append(tgrno[0])
+ elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
+#
+ motscles={}
+ motscles['ACTION']=[]
+ for grno in lgrno :
+ motscles['ACTION'].append(_F(RESULTAT=nomres,
+ NOM_CHAM='SIEF_ELNO_ELGA',
+ TOUT_CMP='OUI',
+ INTITULE=grno,
+ GROUP_NO=grno,
+ OPERATION='EXTRACTION',))
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+ tabprl[1]=POST_RELEVE_T(**motscles)
+ tablig[1]=POST_RCCM(MATER = rccmat,
+ TYPE_RESU_MECA = 'EVOLUTION',
+ OPTION = 'PM_PB',
+ TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
+#
+ motscles={}
+ motscles['ACTION']=[]
+ for tgrno in lgrno :
+ motscles['ACTION'].append(_F(RESULTAT=nomres,
+ NOM_CHAM='SIEF_ELNO_ELGA',
+ INTITULE=tgrno,
+ GROUP_NO=tgrno,
+ INVARIANT='OUI',
+ OPERATION='EXTRACTION',))
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+
+ tablig[2]=POST_RELEVE_T(**motscles)
+#
+ motscles={}
+ nommail=MAILLAGE.nom
+ coord =aster.getvectjev(nommail.ljust(8)+'.COORDO .VALE')
+ linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
+ collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
+
+ motscles['ACTION']=[]
+ for tgrno in lgrno :
+ if tgrno[:3]!='LON' :
+ if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+ else : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
+ else :
+ if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+ else :
+ grpn=collgrno['FGAUTU ']
+ LT1=coord[3*(grpn[0]-1)+2]
+ for node in grpn:
+ X = coord[3*(node-1)]
+ Y = coord[3*(node-1)+1]
+ Z = coord[3*(node-1)+2]
+ RCIN = mc_IMPR_TABLE['R_CINTR']
+ if Z<LT1 : ANGSEC=0.
+ elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
+ else :
+ VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
+ VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
+ ANGSEC = atan2(VSIN,VCOS)
+ vecty=(sin(ANGSEC),0.,cos(ANGSEC))
+ motscles['ACTION'].append(_F(RESULTAT=nomres,
+ NOM_CHAM='SIEF_ELNO_ELGA',
+ INTITULE=tgrno,
+ GROUP_NO=tgrno,
+ NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
+ REPERE='LOCAL',
+ VECT_Y=vecty,
+ OPERATION='MOYENNE',))
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+ tablig[3]=POST_RELEVE_T(**motscles)
+#
+# prelevements des ligaments sur les sections MI,TU et GV
+# les 8 ligaments sont tous les 45 degres
+#
+ ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
+ secprl=[None]*3
+ secrcm=[None]*3
+ secinv=[None]*3
+ secmoy=[None]*3
+ for i in range(3):
+ if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+ else :
+ if i==0 : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
+ if i==1 : vecty=(0.,0.,1.)
+ if i==2 : vecty=(sin(ACOUR),0.,cos(ACOUR))
+ motscles = {}
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
+#
+# moyenne RCCM sur les sections MI,TU et GV
+#
+ motscles={}
+ motscles['ACTION']=[]
+ for j in range(8) :
+ motscles['ACTION'].append(_F(RESULTAT=nomres,
+ NOM_CHAM='SIEF_ELNO_ELGA',
+ TOUT_CMP='OUI',
+ INTITULE=LIG[j]+SECT[i],
+ GROUP_NO=LIG[j]+SECT[i],
+ OPERATION='EXTRACTION',))
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
+ secprl[i]=POST_RELEVE_T(**motscles)
+ secrcm[i]=POST_RCCM(MATER = rccmat,
+ TYPE_RESU_MECA = 'EVOLUTION',
+ OPTION = 'PM_PB',
+ TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
+#
+# invariants sur les sections MI,TU et GV
+#
+ motscles = {}
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
+ motscles['ACTION']=[]
+ for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
+ GROUP_NO =LIG[j]+SECT[i],
+ RESULTAT =nomres,
+ NOM_CHAM ='SIEF_ELNO_ELGA',
+ INVARIANT='OUI',
+ OPERATION='EXTRACTION'))
+ secinv[i] = POST_RELEVE_T(**motscles)
+#
+# moyennes contraintes sur les sections MI,TU et GV
+#
+ motscles = {}
+ motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
+ motscles['ACTION']=[]
+ for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
+ REPERE ='LOCAL',
+ VECT_Y =vecty,
+ GROUP_NO =LIG[j]+SECT[i],
+ RESULTAT =nomres,
+ NOM_CHAM ='SIEF_ELNO_ELGA',
+ NOM_CMP =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
+ OPERATION='MOYENNE'))
+ secmoy[i] = POST_RELEVE_T(**motscles)
+
+#
+# impression des valeurs maximales pour chaque sous-epaisseur
+#
+ if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
+ list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
+ else : list_para=mc_IMPR_TABLE['NOM_PARA']
+ if 'TRESCA_MEMBRANE' in list_para:
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE = _F( NOM_PARA ='PM', CRIT_COMP ='MAXI'),
+ NOM_PARA = ('INTITULE','PM'));
+ if 'TRESCA_MFLE' in list_para:
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE =(_F( NOM_PARA ='LIEU',VALE_K ='ORIG'),
+ _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
+ NOM_PARA = ('INTITULE','PMB'));
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE =(_F( NOM_PARA='LIEU', VALE_K ='EXTR'),
+ _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
+ NOM_PARA = ('INTITULE','PMB'));
+ if 'SI_RADI' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
+ _F( NOM_PARA ='SIXX', CRIT_COMP='MAXI'),),
+ NOM_PARA = ('INTITULE','SIXX'));
+ if 'SI_LONG' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
+ _F( NOM_PARA ='SIYY', CRIT_COMP='MAXI'),),
+ NOM_PARA = ('INTITULE','SIYY'));
+ if 'SI_CIRC' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
+ _F( NOM_PARA ='SIZZ', CRIT_COMP='MAXI'),),
+ NOM_PARA = ('INTITULE','SIZZ'));
+ if 'TRESCA' in list_para:
+ IMPR_TABLE(TABLE = tablig[2],
+ NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
+ PAGINATION = 'INTITULE',
+ FILTRE = _F( NOM_PARA = 'TRESCA',
+ CRIT_COMP = 'MAXI' ) ) ;
+#
+# impression des resultats pour chaque sous-epaisseur
+#
+ if 'TRESCA_MEMBRANE' in list_para:
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
+ NOM_PARA = ('INTITULE','PM'));
+ if 'TRESCA_MFLE' in list_para:
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
+ NOM_PARA = ('INTITULE','PMB'));
+ IMPR_TABLE(TABLE = tablig[1],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
+ NOM_PARA = ('INTITULE','PMB'));
+ if 'SI_RADI' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIXX'));
+ if 'SI_LONG' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIYY'));
+ if 'SI_CIRC' in list_para:
+ IMPR_TABLE(TABLE = tablig[3],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIZZ'));
+ if 'TRESCA' in list_para:
+ IMPR_TABLE(TABLE = tablig[2],
+ NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
+ PAGINATION = 'INTITULE');
+#
+# impression des resultats pour les sections MI, TU et GV
+#
+ for k in range(3):
+ if 'TRESCA_MEMBRANE' in list_para:
+ IMPR_TABLE(TABLE = secrcm[k],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
+ NOM_PARA = ('INTITULE','PM'));
+ if 'TRESCA_MFLE' in list_para:
+ IMPR_TABLE(TABLE = secrcm[k],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
+ NOM_PARA = ('INTITULE','PMB'));
+ IMPR_TABLE(TABLE = secrcm[k],
+ FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
+ NOM_PARA = ('INTITULE','PMB'));
+ if 'SI_RADI' in list_para:
+ IMPR_TABLE(TABLE = secmoy[k],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIXX'));
+ if 'SI_LONG' in list_para:
+ IMPR_TABLE(TABLE = secmoy[k],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIYY'));
+ if 'SI_CIRC' in list_para:
+ IMPR_TABLE(TABLE = secmoy[k],
+ FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
+ NOM_PARA = ('INTITULE','SIZZ'));
+ if 'TRESCA' in list_para:
+ IMPR_TABLE(TABLE = secinv[k],
+ NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
+ PAGINATION = 'INTITULE');
+#
+ if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+#
+# --- post traitement fissure : interpénétration des lèvres ----
+#
+ __tcont=POST_RELEVE_T( ACTION=_F( INTITULE = 'Contact levres',
+ GROUP_NO = 'FACE2',
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ NOM_CHAM = 'VALE_CONT',
+ NOM_CMP = 'CONT',
+ OPERATION = 'EXTRACTION'))
+ tcont=__tcont.EXTR_TABLE()
+ numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+ numo=dict([(i,0) for i in numo]).keys()
+ nbinst = len(numo)
+ for i in range(1,nbinst+1) :
+ tabi = tcont.NUME_ORDRE==i
+ nbtot = len(tabi)
+ cont_actif=tabi.CONT>0.
+ nb_no_cont = len(cont_actif)
+ if nb_no_cont > 0 :
+ UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
+#
+# --- post traitement fissure : calcul de g ----
+#
+ motscles = {}
+ if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
+ if TYPE_MAILLAGE =='FISS_COUDE' :
+ motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
+ motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
+ motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
+ else :
+ motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
+ GROUP_NO_ORIG='PFOR',
+ GROUP_MA_ORIG='MAIL_ORI')
+ fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
+ LEVRE_SUP=_F(GROUP_MA='FACE1'),
+ LEVRE_INF=_F(GROUP_MA='FACE2'),
+ INFO=INFO,**motscles
+ );
+ if THETA_3D!=None :
+ for thet in THETA_3D:
+ _nothet=CALC_THETA(MODELE=modele,
+ FOND_FISS=fonfis,
+ THETA_3D=_F(TOUT = 'OUI',
+ MODULE = 1.,
+ R_INF = thet['R_INF'],
+ R_SUP = thet['R_SUP'],),
+ );
+ motscles = {}
+ if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
+ if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
+ _nogthe=CALC_G( RESULTAT =nomres,
+ OPTION='CALC_G_GLOB',
+ TOUT_ORDRE ='OUI',
+ THETA =_F(THETA=_nothet),**motscles);
+#
+ IMPR_TABLE(TABLE=_nogthe,);
+#
+ for thet in THETA_3D:
+ motscles = {}
+ if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
+ if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
+ if TYPE_MAILLAGE =='FISS_COUDE' :
+ motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
+ LISSAGE_G='LEGENDRE',
+ DEGRE=4,)
+ elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
+ motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
+ LISSAGE_G='LAGRANGE',
+ DEGRE=4,)
+ _nogloc=CALC_G (RESULTAT =nomres,
+ TOUT_ORDRE ='OUI',
+ THETA=_F( FOND_FISS =fonfis,
+ R_INF = thet['R_INF'],
+ R_SUP = thet['R_SUP'],),**motscles);
+
+ IMPR_TABLE(TABLE=_nogloc,);
+#
+# --- commande IMPR_RESU ---
+#
+ if IMPRESSION!=None:
+ mcfresu =[]
+ motscles={}
+ if IMPRESSION['FORMAT']=='IDEAS' :
+ motscles['VERSION' ]= IMPRESSION['VERSION']
+ if IMPRESSION['FORMAT']=='CASTEM' :
+ motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+ mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
+ if ECHANGE!=None:
+ motscles={}
+ if IMPRESSION['FORMAT']=='IDEAS' :
+ motscles['VERSION' ]= IMPRESSION['VERSION']
+ if IMPRESSION['FORMAT']=='CASTEM' :
+ motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+ mcfresu.append(_F(RESULTAT=resuth,))
+ IMPR_RESU( MODELE = modele,
+ RESU = mcfresu,
+ FORMAT=IMPRESSION['FORMAT'],**motscles)
+#
+ return ier
--- /dev/null
+#@ MODIF macr_ascouf_mail_ops Macro DATE 19/11/2007 AUTEUR COURTOIS 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.
+# ======================================================================
+
+
+import os.path
+from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
+import string
+
+try:
+ import aster
+ from Utilitai.Utmess import UTMESS
+except:
+ pass
+
+# ------------------------------------------------------------------------------
+def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
+ """
+ FONCTION F(CP)=CC
+ OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
+ ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
+ """
+ AZIMR = AZIM*2.*pi/360.
+ if POS=='DEB_INT': X = RM-EP/2.
+ else : X = RM+EP/2.
+ if abs(ORIEN-45.0)<0.01: SIG = 1.
+ else : SIG = -1.
+ f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * ( \
+ log ( RM/X+RM/RC*(cos(AZIMR)- \
+ sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) + \
+ sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)- \
+ sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 ) \
+ ) \
+ - log ( RM/X+RM/RC*cos(AZIMR) \
+ + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
+ ) ) \
+ - SIG*X*RC/(2.*RM*SIN(AZIMR)) * \
+ ( ( RM/X+RM/RC* ( cos(AZIMR)- \
+ sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) ) \
+ ) * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)- \
+ sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 ) \
+ - ( RM/X+RM/RC*COS(AZIMR) ) \
+ * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
+ ) \
+ - 2.0*AXEC
+ return f_ASCFON
+
+# ------------------------------------------------------------------------------
+def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
+ AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
+ """
+ MACR_ASCOUF_MAIL ASCFIS
+ taille initiale du defaut fissure sur la plaque en
+ fonction des donnees sur le coude ou le tube suivant la
+ transformation choisie
+
+ ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+
+ ALPHA = ANGLE DU COUDE
+ RM = RAYON MOYEN DU COUDE
+ RC = RAYON DE CINTRAGE DU COUDE
+ EP = EPAISSEUR DU COUDE
+ SUREP = VALEUR DE LA SUREPAISSEUR
+ GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
+ AXEA = PROFONDEUR FISSURE (DEMI PETIT AXE)
+ AXEC = DEMI GRAND AXE FISSURE
+ AZIM = POSITION AZIMUTALE DU CENTRE DE LA FISSURE
+ POS = POSITION EN PEAU (EXTERNE OU INTERNE)
+ SF = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
+ DSF = BOOLEEN EXPRESSION POSITION CENTRE FISSURE
+ BETA = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
+ ORIEN = ORIENTATION DE LA FISSURE
+
+ -----------------DONNEES RENVOYEES-----------------------
+
+ AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
+ AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
+ SFP = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
+ SUR LA PLAQUE
+
+ """
+ from Utilitai import funct_root
+ echo_mess=['MACR_ASCOUF_MAIL ASCFIS \n',]
+ if POS=='DEB_INT':
+ if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
+ else: X = RM-EP/2.0
+ else: X = RM+EP/2.0
+ AZIMR = AZIM*2.0*pi/360.0
+#
+# -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
+# DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
+# ANGULAIRE
+#
+ if DSF:
+ if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
+ else : SFP = SF
+ else :
+ BETAR = BETA*2.0*pi/360.0
+ if (GEOM=='COUDE'):
+ SF = BETAR*(RC+X*cos(AZIMR))
+ SFP = SF/(1.0+X/RC*cos(AZIMR))
+ else:
+ SF = BETAR*RC
+ SFP = SF
+ if (GEOM=='COUDE'): echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f \n'%SF)
+ if (GEOM=='TUBE') : echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR TUBE : %.2f \n'%SF )
+ echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%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
+ echo_mess.append( 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f \n'%BCOUD)
+ echo_mess.append( 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f \n'%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':
+ echo_mess.append( 'TAILLE GRAND AXE COUDE DONNE : %.2f \n'%(2.*AXEC))
+ elif GEOM=='TUBE':
+ echo_mess.append( 'TAILLE GRAND AXE TUBE DONNE : %.2f \n'%(2.*AXEC))
+ echo_mess.append( 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f \n'%AXECP)
+ if NEWT:
+ echo_mess.append( 'METHODE DE NEWTON FISSURE A 45 DEGRES --> \n')
+ echo_mess.append( 'TAILLE GRAND AXE COUDE RECALCULE : %.2f \n'%AXECC)
+ if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
+ SFP = ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
+ echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
+ if GEOM=='COUDE' and BEMB>0. and BINF<0. :
+ SFP = + AXECP/2. - BEMB
+ echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%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 )
+ echo_mess.append( '--> CORRECTION DUE A LA SUREPAISSEUR \n' )
+ echo_mess.append( '--> TAILLE PETIT AXE PLAQUE : %.2f \n'%AXEAP )
+ else: AXEAP = AXEA
+#
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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.
+ echo_mess=['MACR_ASCOUF_MAIL ASCSEP \n',]
+#
+# --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
+#
+ i=0
+ for ssep in MCL_SOUS_EPAIS :
+ i=i+1
+ echo_mess.append( '-------------------------------------\n')
+ echo_mess.append( 'SOUS-EPAISSEUR NUMERO %d\n'%i)
+ echo_mess.append( '-------------------------------------\n')
+#
+# --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES
+#
+ if ssep['TYPE']=='AXIS':
+ echo_mess.append( 'SOUS-EPAISSEUR AXISYMETRIQUE : \n')
+ echo_mess.append( 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)\n')
+ 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
+ echo_mess.append( 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%ssep.IPHIC)
+ else:
+ ssep.ISCP = ssep['AZIMUT']*pi*RM/180.
+ AZIMC = ssep['AZIMUT']*pi/180.
+ echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%(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.
+ echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%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) :
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM])
+ echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
+ echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(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
+ echo_mess.append( 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%(AZIML*180./pi))
+ else :
+ ssep.ISLP = ssep['POSI_CURV_LONGI']
+ if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_7')
+ else :
+ if GEOM=='COUDE':
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
+ AZIML = (ssep.BETA)*CG
+ else :
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE : %.2f \n'%((ssep.BETA)*CG*RC) )
+ ssep.ISLP = (ssep.BETA)*CG*RC
+ if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_7')
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%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
+ echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
+ if BEMB2>0.:
+ ssep.ISLP = ssep.ILONP/2. - BEMB2
+ echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
+ echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%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)
+#
+ echo_mess.append( 'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ILONP)
+ echo_mess.append( '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f \n'%(ssep.ILONP*360/(2*pi*RC)))
+#
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ return ier,AZIMC
+
+# ------------------------------------------------------------------------------
+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
+#
+ echo_mess=['MACR_ASCOUF_MAIL ASCTCI \n',]
+ TAMPON = []
+ COORXG = []
+ COORYG = []
+ i=0
+ for ssep in MCL_SOUS_EPAIS :
+ i=i+1
+ if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) :
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM])
+ TAMPON.append((ssep.ISCP,i))
+ TAMPON.sort()
+ IABSC1=[]
+ for j in range(i):
+ IABSC1.append(TAMPON[j][1])
+ echo_mess.append( ' \n')
+ echo_mess.append( 'TRI DES CENTRES ABSC. CURV. CIRCONF. :\n ')
+ echo_mess.append( '------------------------------------\n')
+ i=0
+ for ssep in TAMPON :
+ i=i+1
+ echo_mess.append( '%d) SOUS-EP NO %d <> XC = %.2f \n'%(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])
+ echo_mess.append( '\n')
+ echo_mess.append( 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :\n')
+ echo_mess.append( '-----------------------------------------------\n' )
+ for j in range(2*len(MCL_SOUS_EPAIS)):
+ if fmod(IABSC2[j],2):
+ echo_mess.append( '%d) SOUS-EP NO %d <> XG = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0]))
+ else:
+ echo_mess.append( '%d) SOUS-EP NO %d <> XD = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0]))
+#
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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
+#
+ echo_mess=['MACR_ASCOUF_MAIL ASCTLO \n',]
+ 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.) :
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC])
+ TAMPON.append((ssep.ISLP,i))
+ TAMPON.sort()
+ IORDO1=[]
+ for j in range(i):
+ IORDO1.append(TAMPON[j][1])
+ echo_mess.append( '\n')
+ echo_mess.append( 'TRI DES CENTRES ABSC. CURV. LONGIT. : \n')
+ echo_mess.append( '------------------------------------ \n')
+ i=0
+ for ssep in TAMPON :
+ i=i+1
+ echo_mess.append( '%d) SOUS-EP NO %d <> YC = %.2f \n'%(i,ssep[1],ssep[0]))
+#
+# calcul des abscisses sup. et inf. des sous-ep.
+#
+ COORYI=[]
+ COORYS=[]
+ EPS=0.000000000001
+ for bid in TAMPON :
+ i=i+1
+ YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
+ YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
+ if fabs(bid[0])<EPS :
+ YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+ YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+ if fabs(bid[0]-ALPHAR*RC)<EPS :
+ YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
+ YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+ if YI<(-LTCHAR):
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR])
+ if YS>(ALPHAR*RC+LTCLIM):
+ texte_final=string.join(echo_mess)
+ aster.affiche("MESSAGE",texte_final)
+ UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM])
+ 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])
+ echo_mess.append( '\n')
+ echo_mess.append( 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. : \n')
+ echo_mess.append( '----------------------------------------------- \n')
+ for j in range(2*len(MCL_SOUS_EPAIS)):
+ if fmod(IORDO2[j],2):
+ echo_mess.append( '%d) SOUS-EP NO %d <> YI = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0]))
+ else:
+ echo_mess.append( '%d) SOUS-EP NO %d <> YS = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0]))
+#
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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:
+#
+ echo_mess=['MACR_ASCOUF_MAIL ASCNBE \n',]
+ echo_mess.append( '\n')
+ echo_mess.append( 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :\n')
+ echo_mess.append( '------------------------------------------------------------\n')
+ NLX=[0]*len(MCL_SOUS_EPAIS)
+ NLY=[0]*len(MCL_SOUS_EPAIS)
+ for j in range(len(BD)):
+ if INDSEX[j]!=0:
+# calcul au passage du nombre d'elements sur chaque zone circonf.
+ RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
+ RNBEL2 = RNBEL - floor(RNBEL)
+ if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
+ else : NBEL=int(floor(RNBEL))+1
+ if NBEL <= 1 : NBEL=2
+# calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
+ for i in range(len(MCL_SOUS_EPAIS)):
+ l=IABSC1[i]-1
+ if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
+ or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
+ NLX[i]=NLX[i]+NBEL
+ echo_mess.append( 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d \n'%(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
+ echo_mess.append( 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL) )
+
+ for j in range(len(NLX)):
+ echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d \n'%(j+1,NLX[j]))
+ echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI. : %d \n'%(j+1,NLY[j]))
+
+#
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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
+ echo_mess=['MACR_ASCOUF_MAIL ASCSYM \n',]
+ DERAFC = 18.
+ DERAFL = 5.
+ INDSEX = []
+ INDSEY = []
+ BG = []
+ BD = []
+ INDBG = []
+ INDBD = []
+ DNX = []
+
+#
+# --- tri des donnees sous-ep. en circonferentiel
+ TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
+#
+# --- calcul des zones en circonferentiel
+#
+ ssep=MCL_SOUS_EPAIS[0]
+ if (ssep.ISCP<pi*RM) :
+#
+# le centre sous-ep est dans la zone flanc droit/extrados/flanc
+# gauche, on preleve pi*RM a droite de la sous-epaisseur
+#
+# zone (centre sous-ep , bord droit)
+#
+ BG.append(ssep.ISCP)
+ BG.append(ssep.ISCP+ssep.ICIRP/2.)
+ BD.append(ssep.ISCP+ssep.ICIRP/2.)
+ BD.append(ssep.ISCP+pi*RM)
+ INDBG.append(0)
+ INDBG.append(1)
+ INDBD.append(0)
+ INDBD.append(0)
+ DNX.append(ssep.IDENC)
+ DNX.append(0)
+ DNX.append(DERAFC)
+ DNX.append(0)
+ INDSEX.append(1)
+ INDSEX.append(0)
+ elif (ssep.ISCP+pi*RM==2.*pi*RM) :
+#
+# sous-ep axisymetrique : on preleve pi*RM a droite
+#
+# zone (centre sous-ep , bord droit)
+#
+ BG.append(ssep.ISCP)
+ BD.append(ssep.ISCP+ssep.ICIRP/2.)
+ INDBG.append(0)
+ INDBD.append(0)
+ DNX.append(ssep.IDENC)
+ DNX.append(0)
+ INDSEX.append(1)
+ INDSEX.append(0)
+ else :
+#
+# le centre sous-ep est dans la zone flanc gauche/intrados/flanc
+# droit : on preleve pi*RM a gauche de la sous-epaisseur
+#
+# zone (centre -pi*RM, bord gauche)
+#
+ BG.append(ssep.ISCP-pi*RM)
+ BG.append(ssep.ISCP-ssep.ICIRP/2.)
+ BD.append(ssep.ISCP-ssep.ICIRP/2.)
+ BD.append(ssep.ISCP)
+ INDBG.append(0)
+ INDBG.append(0)
+ INDBD.append(1)
+ INDBD.append(0)
+ DNX.append(DERAFC)
+ DNX.append(0)
+ DNX.append(ssep.IDENC)
+ DNX.append(0)
+ INDSEX.append(0)
+ INDSEX.append(1)
+
+
+ echo_mess.append( '\n')
+ echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :\n')
+ echo_mess.append( '--------------------------------------------- \n')
+ EPS=0.000000000001
+ NZONEX=len(BG)
+ for j in range(NZONEX) :
+ if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
+ echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f'\
+ ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR \n'%(j+1,BG[j],BD[j]) )
+ else:
+ echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f \n'\
+ ' / BORNE DROITE = %.2f \n'%(j+1,BG[j],BD[j]))
+
+
+# tri des donnees sous-epaisseurs en axial
+ TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
+
+# calcul des zones en axial:
+ BI = []
+ BS = []
+ INDBI = []
+ INDBS = []
+ DNY = []
+ INDSEY = []
+ ssep = MCL_SOUS_EPAIS[0]
+ BI.append(0.)
+ BI.append(ssep.ISLP-ssep.ILONP/2.)
+ BS.append(ssep.ISLP-ssep.ILONP/2.)
+ BS.append(ssep.ISLP)
+ INDBI.append(0)
+ INDBI.append(0)
+ INDBS.append(1)
+ INDBS.append(0)
+ DNY.append(DERAFL)
+ DNY.append(0)
+ DNY.append(ssep.IDENL)
+ DNY.append(0)
+ INDSEY.append(0)
+ INDSEY.append(1)
+ echo_mess.append( '\n')
+ echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. : \n')
+ echo_mess.append( '----------------------------------------------- \n')
+ NZONEY=len(BI)
+ for j in range(NZONEY) :
+ if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
+ echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+ ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
+ else:
+ echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+ ' / 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)
+
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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
+ echo_mess=['MACR_ASCOUF_MAIL ASCPRE \n',]
+ ALPHAR = 2.*ALPHA*pi/360.
+ DERAFC = 18.
+ DERAFL = 5.
+ EPSI = 0.001
+ NBSEP = len(MCL_SOUS_EPAIS)
+ echo_mess.append( 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n' )
+
+# tri des donnees sous-epaisseurs en circonferentiel
+ TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
+# --- calcul des recouvrements de zones en circonferentiel
+#
+ NZONEX=0
+ j=0
+ ICE=1
+ NBGAU=0
+ NBDRO=0
+ TYPG=0
+ TYPD=0
+ go10=1
+ go20=1
+#
+ BG =[]
+ BD =[]
+ INDBG =[]
+ INDBD =[]
+ DNX =[]
+ INDSEX=[]
+#
+
+ while go10:
+
+ j=j+1
+#
+# definition de la zone courante (borne gauche, borne droite)
+#
+# TYPG = type de la borne:
+# 0 : borne gauche sous-epaisseur
+# 1 : borne droite sous-epaisseur
+# 2 : centre sous-epaisseur
+#
+ if j>2*NBSEP and ICE<NBSEP :
+# cas ou il ne reste plus que des centres a caser
+ MING = MIND
+ TYPG = TYPD
+ NUMG = NUMD
+ MIND = 2.*pi*RM+1
+ elif TYPD==2 :
+# cas ou la borne droite de la zone precedente etait un centre
+ MING = MIND
+ TYPG = TYPD
+ NUMG = NUMD
+ MIND = TAMPON[j-1][0]
+ if fmod(IABSC2[j-1],2):
+ TYPD = 0
+ NUMD = IABSC1[IABSC2[j-1]/2]
+ else:
+ TYPD = 1
+ NUMD = IABSC1[IABSC2[j-1]/2-1]
+ j=j-1
+ else:
+ if j>= 2*NBSEP :
+ MIND = TAMPON[2*NBSEP-1][0]
+ MING = MIND
+ if fmod(IABSC2[2*NBSEP-1],2):
+ TYPG = 0
+ NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
+ else:
+ TYPG = 1
+ NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
+ TYPD=TYPG
+ NUMD=NUMG
+ else:
+ MING=TAMPON[j-1][0]
+ MIND=TAMPON[j][0]
+ if fmod(IABSC2[j-1],2):
+ TYPG = 0
+ NUMG = IABSC1[IABSC2[j-1]/2]
+ else:
+ TYPG = 1
+ NUMG = IABSC1[IABSC2[j-1]/2-1]
+ if fmod(IABSC2[j],2):
+ TYPD = 0
+ NUMD = IABSC1[IABSC2[j]/2]
+ else:
+ TYPD = 1
+ NUMD = IABSC1[IABSC2[j]/2-1]
+ if fabs(MING-MIND)<EPSI :
+ if j==2*NBSEP:break
+ else:continue
+ if j>2*NBSEP and ICE>=NBSEP:
+ break #on sort de la boucle
+
+ while go20:
+ i=ICE
+ if i<=NBSEP:
+# recherche des centres a intercaler
+ INDC=IABSC1[i-1]
+ if i>1:
+# le centre est deja le meme que precedent
+ if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
+ ICE=ICE+1
+ continue
+ if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
+# le centre est la nouvelle borne gauche
+ j=j-1
+ MIND = MING
+ TYPD = TYPG
+ NUMD = NUMG
+ MING = MCL_SOUS_EPAIS[INDC-1].ISCP
+ TYPG = 2
+ NUMG = INDC
+ ICE = ICE+1
+ elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND :
+# le centre est la nouvelle borne droite
+ MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
+ TYPD = 2
+ NUMD = INDC
+ ICE = ICE+1
+ continue
+ else:pass
+ NZONEX=NZONEX+1
+#
+# codes d'intervalles de zones
+# 0 0 = zone sous-ep.
+# 0 1 = sous-ep. a droite de la zone
+# 1 0 = sous-ep. a gauche de la zone
+# 1 1 = sous-ep. a droite et a gauche de la zone
+#
+# cas ou la premiere zone ne commence pas au bord de la plaque
+ if MING>0. and NZONEX==1 :
+ BG.append(0.)
+ BD.append(MING)
+ if TYPG==0:
+ INDBG.append(0)
+ INDBD.append(1)
+ DNX.append(DERAFC)
+ DNX.append(0)
+ INDSEX.append(0)
+ elif TYPG==1 or TYPG==2:
+ INDBG.append(0)
+ INDBD.append(0)
+ DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMG)
+ else: pass
+ NZONEX=NZONEX+1
+#
+ BG.append(MING)
+ BD.append(MIND)
+#
+ if TYPG == 0:
+# borne gauche zone = borne gauche ssep
+ NBGAU=NBGAU+1
+ INDBG.append(0)
+ INDBD.append(0)
+ if TYPD == 0:
+# borne droite zone = borne gauche ssep
+ DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMG)
+ elif TYPD == 1 or TYPD == 2:
+# borne droite zone = borne droite ssep : TYPD=1
+# borne droite zone = centre ssep : TYPD=2
+ LTMP=[]
+ LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
+ LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
+ LTMP.sort()
+ DNX.append(LTMP[0][0])
+ DNX.append(0)
+ INDSEX.append(LTMP[0][1])
+ else: pass
+#
+ elif TYPG == 1:
+# borne gauche zone = borne droite ssep
+ NBDRO = NBDRO+1
+ if TYPD == 0:
+# borne droite zone = borne gauche ssep
+ if NBDRO==NBGAU:
+ INDBG.append(1)
+ INDBD.append(1)
+ DNX.append(DERAFC)
+ DNX.append(0)
+ INDSEX.append(0)
+ else:
+# cas tordu: une sous-ep enveloppe le tout
+ INDBG.append(0)
+ INDBD.append(0)
+ DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMG)
+ elif TYPD == 1 or TYPD == 2:
+# borne droite zone = borne droite ssep : TYPD=1
+# borne droite zone = centre ssep : TYPD=2
+ INDBG.append(0)
+ INDBD.append(0)
+ DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMD)
+ else: pass
+#
+ elif TYPG == 2:
+# borne gauche zone = centre ssep
+ INDBG.append(0)
+ INDBD.append(0)
+ if TYPD == 0:
+# borne droite zone = borne gauche ssep
+ DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMG)
+ elif TYPD == 1 or TYPD == 2:
+# borne droite zone = borne droite ssep : TYPD=1
+# borne droite zone = centre ssep : TYPD=2
+ LTMP=[]
+ LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
+ LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
+ LTMP.sort()
+ DNX.append(LTMP[0][0])
+ DNX.append(0)
+ INDSEX.append(LTMP[0][1])
+ else:pass
+ else:pass
+ if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
+ iout=0
+ break #on retourne dans la boucle go10
+ else :
+ iout=1
+ break #on sort definitivement
+ if iout:break
+
+ if MIND<2.*pi*RM:
+ NZONEX=NZONEX+1
+ BG.append(MIND)
+ BD.append(2.*pi*RM)
+ if TYPD==0 or TYPD==2:
+ INDBG.append(0)
+ INDBD.append(0)
+ DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
+ DNX.append(0)
+ INDSEX.append(NUMD)
+ elif TYPD==1:
+ INDBG.append(1)
+ INDBD.append(0)
+ DNX.append(DERAFC)
+ DNX.append(0)
+ INDSEX.append(0)
+ else:pass
+
+# au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
+# un centre de sous-ep.
+ if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
+
+ echo_mess.append( '\n')
+ echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. : \n')
+ echo_mess.append( '----------------------------------------------- \n')
+ for j in range(NZONEX) :
+ if INDBG[j]==0 and INDBD[j]==0 :
+ echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
+ ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j]))
+ else:
+ echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
+ ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j]))
+
+
+# --- tri des donnees sous-ep. en axial
+ TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
+
+ BI = []
+ BS = []
+ INDBI = []
+ INDBS = []
+ DNY = []
+ INDSEY = []
+
+ if SYME == 'DEMI':
+# calcul des zones en axial :
+# zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
+ ssep = MCL_SOUS_EPAIS[0]
+ BI.append(0.)
+ BI.append(ssep.ISLP-ssep.ILONP/2.)
+ BS.append(ssep.ISLP-ssep.ILONP/2.)
+ BS.append(ssep.ISLP)
+ INDBI.append(0)
+ INDBI.append(0)
+ INDBS.append(1)
+ INDBS.append(0)
+ DNY.append(DERAFL)
+ DNY.append(0)
+ DNY.append(ssep.IDENL)
+ DNY.append(0)
+ INDSEY.append(0)
+ INDSEY.append(1)
+ NZONEY=1
+#
+ else:
+#
+# calcul des recouvrements de zones en axial
+ j = 0
+ ICE = 1
+ NBINF = 0
+ NBSUP = 0
+ TYPI=0
+ TYPS=0
+ go40=1
+ go50=1
+ NZONEY=0
+#
+ while go40:
+ j=j+1
+#
+# definition de la zone courante (borne inf, borne sup)
+#
+# typi = type de la borne
+# 0 : borne inf. sous-ep.
+# 1 : borne sup. sous-ep.
+# 2 : centre sous-ep.
+#
+ if TYPS==2:
+# cas ou la borne sup. de la zone prec. etait un centre
+ MINI=MINS
+ TYPI=TYPS
+ NUMI=NUMS
+ MINS=TAMPON[j-1][0]
+ if fmod(IORDO2[j-1],2):
+ TYPS = 0
+ NUMS = IORDO1[IORDO2[j-1]/2]
+ else:
+ TYPS = 1
+ NUMS = IORDO1[IORDO2[j-1]/2-1]
+ j=j-1
+ else:
+ if j>= 2*NBSEP :
+ MINI = TAMPON[2*NBSEP-1][0]
+ MINS = MINI
+ if fmod(IORDO2[2*NBSEP-1],2):
+ TYPI = 0
+ NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
+ else:
+ TYPI = 1
+ NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
+ TYPS=TYPI
+ NUMS=NUMI
+ else:
+ MINI=TAMPON[j-1][0]
+ MINS=TAMPON[j][0]
+ if fmod(IORDO2[j-1],2):
+ TYPI = 0
+ NUMI = IORDO1[IORDO2[j-1]/2]
+ else:
+ TYPI = 1
+ NUMI = IORDO1[IORDO2[j-1]/2-1]
+ if fmod(IORDO2[j],2):
+ TYPS = 0
+ NUMS = IORDO1[IORDO2[j]/2]
+ else:
+ TYPS = 1
+ NUMS = IORDO1[IORDO2[j]/2-1]
+ if fabs(MINI-MINS)<EPSI:
+ if j==2*NBSEP:break
+ else:continue
+
+ while go50:
+ i=ICE
+ if i<=NBSEP:
+# recherche des centres a intercaler
+ INDC=IORDO1[i-1]
+ if i>1:
+# le centre est deja le meme que le precedent
+ if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
+ ICE=ICE+1
+ continue
+ if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
+# le centre est la nouvelle borne inf.
+ j=j-1
+ MINS = MINI
+ TYPS = TYPI
+ NUMS = NUMI
+ MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
+ TYPI = 2
+ NUMI = INDC
+ ICE = ICE+1
+ elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
+# le centre est la nouvelle borne sup.
+ MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
+ TYPS = 2
+ NUMS = INDC
+ ICE = ICE+1
+ continue
+ else:pass
+ NZONEY=NZONEY+1
+#
+# code d'intervalles de zone
+# 0 0 = ZONE SOUS-EPAISSEUR
+# 0 1 = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
+# 1 0 = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
+# 1 1 = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
+#
+# cas ou la premiere zone ne commence pas au bord de la plaque
+ if MINI>0. and NZONEY==1:
+ first=0
+ BI.append(0.)
+ BS.append(MINI)
+ if TYPI==0:
+ INDBI.append(0)
+ INDBS.append(1)
+ DNY.append(DERAFL)
+ DNY.append(0)
+ INDSEY.append(0)
+ elif TYPI==1 or TYPI==2:
+ INDBI.append(0)
+ INDBS.append(0)
+ DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMI)
+ else:pass
+ NZONEY = NZONEY+1
+#
+ BI.append(MINI)
+ BS.append(MINS)
+
+ if TYPI==0:
+# borne inferieure zone = borne inferieure ssep
+ NBINF = NBINF+1
+ INDBI.append(0)
+ INDBS.append(0)
+ if TYPS==0:
+# borne superieure zone = borne inferieur ssep
+ DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMI)
+ elif TYPS==1 or TYPS==2:
+# borne superieure zone = borne superieure ssep:TYPS==1
+# borne superieure zone = centre ssep:TYPS==2
+ LTMP=[]
+ LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
+ LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
+ LTMP.sort()
+ DNY.append(LTMP[0][0])
+ DNY.append(0)
+ INDSEY.append(LTMP[0][1])
+ else:pass
+ elif TYPI==1:
+# borne inferieure zone=borne superieure ssep
+ NBSUP = NBSUP+1
+ if TYPS==0:
+# borne superieure zone = borne inferieur ssep
+ if NBSUP==NBINF:
+ INDBI.append(1)
+ INDBS.append(1)
+ DNY.append(DERAFL)
+ DNY.append(0)
+ INDSEY.append(0)
+ else:
+# cas tordu: une sous-ep. enveloppe le tout
+ INDBI.append(0)
+ INDBS.append(0)
+ DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMI)
+ elif TYPS==1 or TYPS==2:
+# borne superieure zone = borne superieure ssep:TYPS==1
+# borne superieure zone = centre ssep:TYPS==2
+ INDBI.append(0)
+ INDBS.append(0)
+ DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMS)
+ else:pass
+ elif TYPI==2:
+# borne inferieure zone = centre ssep
+ INDBI.append(0)
+ INDBS.append(0)
+ if TYPS==0:
+# borne superieure zone = borne inferieure ssep
+ DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMI)
+ elif TYPS==1 or TYPS==2:
+# borne superieure zone = borne superieure ssep
+ LTMP=[]
+ LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
+ LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
+ LTMP.sort()
+ DNY.append(LTMP[0][0])
+ DNY.append(0)
+ INDSEY.append(LTMP[0][1])
+ else:pass
+ else:pass
+ if j<=(2*NBSEP-2) or TYPS==2:
+ iout=0
+ break #on retourne dans la boucle go40
+ else:
+ iout=1
+ break #on sort definitivement
+ if iout:break
+
+# cas ou la derniere zone ne finit pas au bout de la plaque
+ if MINS<ALPHAR*RC:
+ NZONEY=NZONEY+1
+ BI.append(MINS)
+ BS.append(ALPHAR*RC)
+ if TYPS==0 or TYPS==2:
+ INDBI.append(0)
+ INDBS.append(0)
+ DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
+ DNY.append(0)
+ INDSEY.append(NUMS)
+ elif TYPS==1:
+ INDBI.append(1)
+ INDBS.append(0)
+ DNY.append(DERAFL)
+ DNY.append(0)
+ INDSEY.append(0)
+ else:pass
+
+ echo_mess.append( '\n')
+ echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :\n')
+ echo_mess.append( '----------------------------------------------- \n')
+
+ for j in range(NZONEY) :
+ if INDBI[j]==0 and INDBS[j]==0 :
+ echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+ ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
+ else:
+ echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+ ' / BORNE SUP. = %.2f '%(j+1,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)
+
+
+ texte_final=string.join(echo_mess)
+ aster.affiche('MESSAGE',texte_final)
+ 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 + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
+ 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
+# SUREP = SUR 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,SUREP,AZIMC,loc_datg) :
+
+ ssep= MCL_SOUS_EPAIS[0]
+ print 'AZIMC', AZIMC;
+ 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
+ texte=texte+' surep = '+str(SUREP) +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+' azimc = '+str(AZIMC) +POIVIR
+ 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 + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
+ 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 + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
+ 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,SUREP,
+ NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
+ DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
+
+ POIVIR = ' ;\n'
+ NY=20
+ DELTAY=2.*pi*RM/NY
+
+ def nint(x):
+ if 0<ceil(x)-x<=0.5:
+ return int(ceil(x))
+ else:
+ return int(floor(x))
+
+# conversion des densites de raffinement des embout en degres par rapport
+# a l'angle du coude
+ RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
+ DENSTU = RTMP*360./(2.*pi*RC)
+ DENSGV = DENSTU
+ NZT=0
+ NZGV=0
+
+ texte='* DEBUT PARAMETRES UTILISATEUR \n'
+ texte=texte+'*\n'
+ texte=texte+'* parametres generaux\n'
+ texte=texte+'*\n'
+ texte=texte+'rm = '+str(RM) +POIVIR
+ texte=texte+'rc = '+str(RC) +POIVIR
+ texte=texte+'alphac = '+str(ALPHA) +POIVIR
+ texte=texte+'epc = '+str(EP) +POIVIR
+ texte=texte+'pirad = '+str(pi) +POIVIR
+ texte=texte+'lgv = '+str(LTCLIM) +POIVIR
+ texte=texte+'lt = '+str(LTCHAR) +POIVIR
+ texte=texte+'lcoude = '+str(ALPHA*pi/180.*RC) +POIVIR
+ if GEOM == 'COUDE':
+ texte=texte+"zcoude = 'oui' " +POIVIR
+ else:
+ texte=texte+"zcoude = 'non' " +POIVIR
+ if SYME == 'ENTIER':
+ texte=texte+"zsyme = 'entier' " +POIVIR
+ elif SYME == 'QUART':
+ texte=texte+"zsyme = 'quart' " +POIVIR
+ else:
+ texte=texte+"zsyme = 'demi' " +POIVIR
+ texte=texte+'nxep = '+str(NBEP) +POIVIR
+ texte=texte+'nzt = '+str(NZT) +POIVIR
+ texte=texte+'nzgv = '+str(NZGV) +POIVIR
+ texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
+ texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
+ texte=texte+'*\n'
+
+ texte=texte+'* Zones couvertes en circonference\n'
+ texte=texte+'*\n'
+ for j in range(NZONEX):
+ texte=texte+'bg .' +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM) +POIVIR
+ texte=texte+'bd .' +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM) +POIVIR
+ texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j]) +POIVIR
+ texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j]) +POIVIR
+ texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j]) +POIVIR
+ texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
+ texte=texte+'*\n'
+
+ texte=texte+'* Zones couvertes longitudinalement\n'
+ texte=texte+'*\n'
+ for j in range(NZONEY):
+ texte=texte+'bi .' +str(j+1).rjust(23)+' = '+str(BI[j]) +POIVIR
+ texte=texte+'bs .' +str(j+1).rjust(23)+' = '+str(BS[j]) +POIVIR
+ texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j]) +POIVIR
+ texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j]) +POIVIR
+ texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j]) +POIVIR
+ texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
+ texte=texte+'*\n'
+
+ texte=texte+'* Caracteristiques des sous-epaisseurs\n'
+ texte=texte+'*\n'
+ issep=0
+ for ssep in MCL_SOUS_EPAIS:
+ issep=issep+1
+ texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP) +POIVIR
+ texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP) +POIVIR
+ texte=texte+'prof .' +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
+ texte=texte+'coory .' +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM) +POIVIR
+ texte=texte+'coorz .' +str(issep).rjust(23)+' = '+str(ssep.ISLP) +POIVIR
+ texte=texte+'posit .' +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
+ texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
+ if ssep['POSI_CURV_LONGI']!=None:
+ texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
+ else:
+ DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
+ texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
+ if ssep['TYPE']=='AXIS':
+ texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
+ else:
+ texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
+ if ssep['EMPREINTE'] == 'OUI':
+ texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
+ else:
+ texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
+ texte=texte+'*\n'
+
+ texte=texte+'* Caracteristique de sur-epaisseur\n'
+ texte=texte+'surep = '+str(SUREP) +POIVIR
+ texte=texte+'* \n'
+ texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
+ fpgib=open('fort.71','w')
+ fpgib.write(texte)
+ fpgib.close()
+
+
+################################################################################
+################################################################################
+################################################################################
+
+# ------------------------------------------------------------------------------
+def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
+
+ POIVIR = ' ;\n'
+ texte='*\n'
+ texte=texte+'coude extube bord1 clgv bord2 peauext peauint placoude platube\n'
+ texte=texte+'plagv longi circo centr bou1 bou3 ligmed ligtub liggv lig45\n'
+ texte=texte+'ligcir liglon bordtu\n'
+ texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
+ texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
+ texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
+ texte=texte+'daxhtu daxhgv nzt nzgv zcoude surep'+POIVIR
+ texte=texte+'fdromi = ligmed . 1'+POIVIR
+ texte=texte+'exdrmi = ligmed . 2'+POIVIR
+ texte=texte+'extrmi = ligmed . 3'+POIVIR
+ texte=texte+'exgami = ligmed . 4'+POIVIR
+ texte=texte+'fgaumi = ligmed . 5'+POIVIR
+ texte=texte+'ingami = ligmed . 6'+POIVIR
+ texte=texte+'intrmi = ligmed . 7'+POIVIR
+ texte=texte+'indrmi = ligmed . 8'+POIVIR
+ texte=texte+'fdrotu = ligtub . 1'+POIVIR
+ texte=texte+'exdrtu = ligtub . 2'+POIVIR
+ texte=texte+'extrtu = ligtub . 3'+POIVIR
+ texte=texte+'exgatu = ligtub . 4'+POIVIR
+ texte=texte+'fgautu = ligtub . 5'+POIVIR
+ texte=texte+'ingatu = ligtub . 6'+POIVIR
+ texte=texte+'intrtu = ligtub . 7'+POIVIR
+ texte=texte+'indrtu = ligtub . 8'+POIVIR
+ texte=texte+"si (ega zsyme 'entier')"+POIVIR
+ texte=texte+' fdrogv = liggv . 1'+POIVIR
+ texte=texte+' exdrgv = liggv . 2'+POIVIR
+ texte=texte+' extrgv = liggv . 3'+POIVIR
+ texte=texte+' exgagv = liggv . 4'+POIVIR
+ texte=texte+' fgaugv = liggv . 5'+POIVIR
+ texte=texte+' ingagv = liggv . 6'+POIVIR
+ texte=texte+' intrgv = liggv . 7'+POIVIR
+ texte=texte+' indrgv = liggv . 8'+POIVIR
+ texte=texte+'finsi'+POIVIR
+ texte=texte+'*\n'
+
+ text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
+ texte=texte+text2
+
+ texte=texte+'*\n'
+ texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
+ texte=texte+'*trac oeil cach coude'+POIVIR
+ texte=texte+'*opti donn 5' +POIVIR
+ texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
+ texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
+ texte=texte+'ma = coude et p1 et p2'+POIVIR
+ texte=texte+'sort ma'+POIVIR
+ texte=texte+'neu = nbno ma'+POIVIR
+ texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
+ texte=texte+"opti sauv form 'fort.8'"+POIVIR
+ texte=texte+'sauv form ma'+POIVIR
+ texte=texte+'fin'+POIVIR
+ fpgib=open('fort.71','a')
+ fpgib.write(texte)
+ fpgib.close()
+
+################################################################################
+################################################################################
+################################################################################
+
+# ------------------------------------------------------------------------------
+def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
+ LTCLIM,LTCHAR,NBEP,loc_datg):
+
+ NY=20
+ CZ=ALPHA*RC*pi/180.
+ NZC=int((ALPHA+0.00001)/5.)
+ DELTAY=2.*pi*RM/20
+ DELTAZ=CZ/NZC
+ DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
+ NZT=0
+ NZGV=0
+
+ if TYPBOL!=None:
+ if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
+ if TYPBOL=='GV' : TYPEMB = 'typegv'
+ if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
+ else:
+ TYPEMB =' '
+
+ POIVIR = ' ;\n'
+ texte='* DEBUT PARAMETRES UTILISATEUR\n'
+ texte=texte+'*\n'
+ texte=texte+'* Parametres generaux\n'
+ texte=texte+'*\n'
+ texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
+ texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
+ texte=texte+'rm = '+str(RM) +POIVIR
+ texte=texte+'rc = '+str(RC) +POIVIR
+ texte=texte+'alphac = '+str(ALPHA) +POIVIR
+ texte=texte+'epc = '+str(EP) +POIVIR
+ texte=texte+'surep = '+str(SUREP) +POIVIR
+ texte=texte+'lgv = '+str(LTCLIM) +POIVIR
+ texte=texte+'lt = '+str(LTCHAR) +POIVIR
+ texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
+ texte=texte+'nx = '+str(NBEP) +POIVIR
+ texte=texte+'ny = '+str(NY) +POIVIR
+ texte=texte+"pos = 'bidon'" +POIVIR
+ texte=texte+'l1 = 0.' +POIVIR
+ texte=texte+'lbloc = 0.' +POIVIR
+ texte=texte+'crit = 0.0001' +POIVIR
+ texte=texte+'crit2 = 0.01' +POIVIR
+ texte=texte+'epsit = 1.e-3' +POIVIR
+ texte=texte+'pirad = '+str(pi) +POIVIR
+ texte=texte+'nzc = '+str(NZC) +POIVIR
+ texte=texte+'teta_f = '+str(pi/2.) +POIVIR
+ texte=texte+'zpp31 = '+str(CZ) +POIVIR
+ texte=texte+'daxbtu = '+str(DENEXT) +POIVIR
+ texte=texte+'daxhtu = '+str(DELTAZ) +POIVIR
+ texte=texte+'daxbgv = '+str(DELTAZ) +POIVIR
+ texte=texte+'daxhgv = '+str(DENEXT) +POIVIR
+ texte=texte+'nzt = '+str(NZT) +POIVIR
+ texte=texte+'nzgv = '+str(NZGV) +POIVIR
+ texte=texte+'*\n'
+ texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
+ texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
+ fdgib=open(nomFichierDATG,'w')
+ fdgib.write(texte)
+ fdgib.close()
+
+################################################################################
+################################################################################
+################################################################################
+# ------------------------------------------------------------------------------
+def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
+ SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
+ FISS_COUDE,IMPRESSION,INFO,**args):
+ """
+ Ecriture de la macro MACR_ASCOUF_MAIL
+ """
+ from Accas import _F
+ import types
+ import aster
+
+ ier=0
+
+# On importe les definitions des commandes a utiliser dans la macro
+ EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
+ PRE_GIBI =self.get_cmd('PRE_GIBI')
+ LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
+ DEFI_GROUP =self.get_cmd('DEFI_GROUP')
+ MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
+ CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+ DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
+ IMPR_RESU =self.get_cmd('IMPR_RESU')
+
+# La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+
+ TYPELE = TYPE_ELEM
+ NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
+ PRECIS = 0.01
+ CRITER = 'RELATIF'
+ CAR3 = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
+ CAR4 = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
+ CAR5 = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
+ CAR6 = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
+ SECT = ('MI','TU','GV')
+
+#
+################################################################################
+# --- caracteristiques du coude ---
+################################################################################
+#
+ GEOM =COUDE['TRANSFORMEE']
+ ALPHA =COUDE['ANGLE']
+ RC =COUDE['R_CINTR']
+ LTCHAR =COUDE['L_TUBE_P1']
+ LTCLIM =COUDE['L_TUBE_P2']
+ NBEP =COUDE['NB_ELEM_EPAIS']
+ SYME =COUDE['SYME']
+ SUREP =0.0
+ TYPBOL = None
+#
+ if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
+ SUREP=COUDE['SUR_EPAIS']
+ TYPBOL =COUDE['BOL_P2']
+ DEXT = COUDE['DEXT']
+ EP1 = COUDE['EPAIS']
+ EP2 = EP1
+ EPI = 0.0
+ TETA1 = 0.0
+ TETA2 = 0.0
+ LTRAN = 0.0
+ NBTRAN = 0
+ else:
+ NBTRAN = 1
+ if COUDE['SYME']!='ENTIER':
+ UTMESS('F','ASCOUF0_13')
+#
+ 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) :
+ UTMESS('F','ASCOUF0_14')
+#
+ LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
+ if LTCHAR<LAMOR :
+ UTMESS('A','ASCOUF0_15',valr=LAMOR)
+#
+ LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
+ if LTCLIM<LAMOR :
+ UTMESS('A','ASCOUF0_16',valr=LAMOR)
+#
+ if TYPBOL!=None:
+ if TYPBOL[:1]=='GV' :
+ UTMESS('A','ASCOUF0_17')
+#
+################################################################################
+# --- caracteristiques de la fissure ---
+################################################################################
+#
+ if FISS_COUDE!=None:
+ if NBEP!=3:
+ UTMESS('A','ASCOUF0_18')
+ FPROF = FISS_COUDE['PROFONDEUR']
+ FAXI = FISS_COUDE['AXIS']
+ if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
+ UTMESS('F','ASCOUF0_19')
+ if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
+ UTMESS('A','ASCOUF0_20')
+ 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 :
+ UTMESS('F','ASCOUF0_21')
+ if ORIEN!=90.0 and NBTRAN!=0 :
+ UTMESS('F','ASCOUF0_21')
+ if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
+ UTMESS('F','ASCOUF0_23')
+ if ORIEN!=90.0 and FAXI=='OUI' :
+ UTMESS('F','ASCOUF0_24')
+#
+################################################################################
+# --- 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 :
+ UTMESS('F','ASCOUF0_25')
+ if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
+ UTMESS('F','ASCOUF0_26')
+ 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' :
+ UTMESS('F','ASCOUF0_27')
+ for ssep in MCL_SOUS_EPAIS :
+ isep=isep+1
+ if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
+ UTMESS('F','ASCOUF0_28')
+ if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
+ UTMESS('F','ASCOUF0_29')
+ if ssep['POSI_CURV_LONGI']!=None:
+ if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
+ UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0])
+ LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
+ BETA = 0.0
+ else:
+ BETA=ssep['POSI_ANGUL']
+ if (BETA<0.) or (BETA>ALPHA) :
+ UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA])
+ 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) :
+ UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM])
+ if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
+ UTMESS('F','ASCOUF0_33')
+ else:
+ ssep.IPHIC=ssep['AZIMUT']
+ if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
+ UTMESS('F','ASCOUF0_34')
+# 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 :
+ UTMESS('A','ASCOUF0_35')
+#
+################################################################################
+# --- verifications de coherences ---
+################################################################################
+#
+# donnees globales
+ if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
+ if SUREP<0. or SUREP>(RM-EP1/2.0):
+
+ UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0)
+ if RC<=(RM+EP1/2.0):
+ UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0])
+#
+# coude fissure
+#
+ if FISS_COUDE!=None:
+ if (RM/EP1)<5. or (RM/EP1)>50.:
+ UTMESS('F','ASCOUF0_38',valr=RM/EP1)
+ if FISS_COUDE['ABSC_CURV']!=None:
+ if SF<0. or SF>(ALPHA*RC*pi/180.0) :
+ UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0])
+ if (NT-2*(NT/2))!=0:
+ UTMESS('F','ASCOUF0_40',vali=NT)
+ if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
+ UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA])
+#
+# transition d epaisseur
+#
+ if NBTRAN!=0:
+ LCOUDE = ALPHA * RC * pi / 180.0
+ DEXT = 2.0*RM + EP1
+ if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
+ UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE])
+ if (TETA1<0.) or (TETA1>30.) :
+ UTMESS('F','ASCOUF0_43',valr=[TETA1])
+#
+# transition d epaisseur a une pente
+#
+ if NBTRAN==1:
+ if (EP1<12.) or (EP1>80.) :
+ UTMESS('F','ASCOUF0_44',valr=[EP1])
+ if (EP2<20.) or (EP2>110.) :
+ UTMESS('F','ASCOUF0_45',valr=[EP2])
+ if (EP1>EP2) :
+ UTMESS('F','ASCOUF0_46')
+ LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
+ if (LTRANF>LCOUDE) :
+ UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE])
+ if DEXT<112. or DEXT>880. :
+ UTMESS('F','ASCOUF0_48',valr=[DEXT])
+#
+# transition d epaisseur a une pente
+#
+ else:
+ if (TETA2<0.) or (TETA2>45.) :
+ UTMESS('F','ASCOUF0_49',valr=[TETA2])
+ if (EP1<7.) or (EP1>35.) :
+ UTMESS('F','ASCOUF0_50',valr=[EP1])
+ if (EP2<15.) or (EP2>40.) :
+ UTMESS('F','ASCOUF0_51',valr=[EP2])
+ if (EPI<15.) or (EPI>40.) :
+ UTMESS('F','ASCOUF0_52',valr=[EPI])
+ if (EP1>EPI) :
+ UTMESS('F','ASCOUF0_53')
+ if (EP2<EPI) :
+ UTMESS('F','ASCOUF0_54')
+ LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1))
+ LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
+ if (LTRANF>LCOUDE) :
+ UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE])
+ if (DEXT<77.) or (DEXT>355.) :
+ UTMESS('F','ASCOUF0_56',valr=[LTRANF])
+#
+################################################################################
+# --- 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,AZIMC= 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 :
+ UTMESS('F','ASCOUF0_57')
+#
+# --- 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,SUREP,AZIMC,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,SUREP,
+ 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
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
+ EXEC_LOGICIEL( LOGICIEL = logiel ,
+ ARGUMENT = (nomFichierDATG,
+ nomFichierGIBI), )
+# PRE_GIBI
+ PRE_GIBI()
+
+# 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 )
+
+# 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,
+ **motscles)
+
+# CREA_MAILLAGE
+ 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)
+
+
+# IMPRESSSION
+ if IMPRESSION!=None:
+ if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
+ for impr in IMPRESSION :
+#
+ motscles={}
+ if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
+ if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
+ if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
+ impr_resu = _F( MAILLAGE = nomre2,)
+#
+ IMPR_RESU( RESU = impr_resu,
+ FORMAT= impr['FORMAT'],**motscles)
+
+
+
+ return ier
+
+
--- /dev/null
+#@ MODIF macr_aspic_calc_ops Macro DATE 22/12/2009 AUTEUR ABBAS M.ABBAS
+# -*- 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,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,BORNES ,**args):
+ """
+ Ecriture de la macro MACR_ASPIC_CALC
+ """
+ from Accas import _F
+ import types
+ from Utilitai.Utmess import UTMESS
+ 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')
+ DEFI_CONTACT =self.get_cmd('DEFI_CONTACT' )
+ 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 =self.get_cmd('CALC_G' )
+ 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 :
+ UTMESS('E','ASPIC0_1')
+#
+ if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) :
+ UTMESS('E','ASPIC0_2')
+#
+ if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ UTMESS('E','ASPIC0_3')
+#
+ if PRES_REP['EFFE_FOND']=='OUI' :
+ if PRES_REP['NOEUD']==None :
+ UTMESS('E','ASPIC0_4')
+ if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ UTMESS('E','ASPIC0_5')
+ if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] :
+ UTMESS('E','ASPIC0_6')
+#
+ if TORS_CORP!=None :
+ for tors in TORS_CORP :
+ if tors['NOEUD'] not in ('P1_CORP','P2_CORP') :
+ UTMESS('E','ASPIC0_7')
+ if tors['NOEUD']==EQUILIBRE['NOEUD'] :
+ UTMESS('E','ASPIC0_8')
+#
+ if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) :
+ UTMESS('E','ASPIC0_9')
+#
+ if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') :
+ if BORNES==None :
+ UTMESS('E','ASPIC0_10')
+#
+ if IMPRESSION!=None :
+ if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+ if IMPRESSION['NOM_CHAM']==None :
+ UTMESS('E','ASPIC0_11')
+#
+#------------------------------------------------------------------
+#
+# --- 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 (thermique)---
+#
+ mcfact=[]
+ for mater in mc_AFFE_MATERIAU :
+ if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER']))
+ else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
+ __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_INST_INIT']=INCREMENT['NUME_INST_INIT']
+ if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+ mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
+ resuth = THER_LINEAIRE( MODELE = __modthe ,
+ CHAM_MATER = __affmat ,
+ ETAT_INIT = _F(STATIONNAIRE='OUI',),
+ EXCIT = _F(CHARGE=__chther,),
+ INCREMENT = mcfact, )
+#
+# --- commande AFFE_MATERIAU (mécanique)---
+#
+ if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
+ indther=0
+ if ECHANGE!=None and RESU_THER!=None : indther=1
+ mcfact=[]
+ mcfac2=[]
+ for mater in mc_AFFE_MATERIAU :
+ if mater['TOUT']!=None :
+ mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],))
+ if indther==1:
+ mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),)
+ else:
+ mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
+ if indther==1:
+ mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
+ EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),)
+ affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+ MODELE = modele ,
+ AFFE = mcfact,
+ AFFE_VARC= mcfac2,)
+#
+# --- 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' ]=='OUI' :
+ 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 AFFE_CHAR_MECA ---
+# chargement mecanique : verif contact levres
+#
+ if TYPE_MAILLAGE[:4]=='FISS' :
+ if TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
+ mcfond = ('FOND_SUP','FOND_INF')
+ else :
+ mcfond = ('FONDFISS')
+ _chcont = DEFI_CONTACT( MODELE = modele ,
+ FORMULATION = 'DISCRETE',
+ TOLE_INTERP = -1.E-6,
+ ZONE =_F(GROUP_MA_MAIT = 'LEVRCORP',
+ GROUP_MA_ESCL = 'LEVRTUBU',
+ ALGO_CONT = 'VERIF',
+ GROUP_MA_FOND = mcfond,),)
+
+#
+# --- commande STAT_NON_LINE ---
+#
+ motscles={}
+#
+ mcfex=[] # mot clé facteur EXCIT
+ mcfex.append(_F(CHARGE=_conlim,))
+ 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
+
+ contact = None
+ if TYPE_MAILLAGE[:4]=='FISS' :
+ if mcfond == 'FONDFISS' :
+ contact = _chcont
+
+
+ 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 = {}
+ if RECH_LINEAIRE != None:
+ 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)
+
+
+ if contact==None:
+ nomres = STAT_NON_LINE( MODELE = modele ,
+ CHAM_MATER = affmth ,
+ CARA_ELEM = carael ,
+ INFO = INFO , **motscles)
+ else :
+ nomres = STAT_NON_LINE( MODELE = modele ,
+ CHAM_MATER = affmth ,
+ CARA_ELEM = carael ,
+ CONTACT = contact,
+ 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(('PS_FON1','PS_FIS1'),)
+ NOMGRO.append(('PI_FON1','PI_FIS1'),)
+ NOMGRE.append(('PS_FON2','PS_FIS2'),)
+ 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, )
+#
+# --- post traitement fissure : interpénétration des lèvres ----
+#
+
+ if TYPE_MAILLAGE[:4]=='FISS' :
+ __tcont=POST_RELEVE_T( ACTION=_F( INTITULE = 'Contact levres',
+ GROUP_NO = 'LEVRTUBU',
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ NOM_CHAM = 'VALE_CONT',
+ NOM_CMP = 'CONT',
+ OPERATION = 'EXTRACTION'))
+ tcont=__tcont.EXTR_TABLE()
+# print tcont
+ numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+ numo=dict([(i,0) for i in numo]).keys()
+ nbinst = len(numo)
+ for i in range(1,nbinst+1) :
+ tabi = tcont.NUME_ORDRE==i
+ nbtot = len(tabi)
+ cont_actif=tabi.CONT>0.
+ nb_no_cont = len(cont_actif)
+ if nb_no_cont > 0 :
+ UTMESS('A','ASPIC0_22',vali=[i,nbtot,nb_no_cont])
+
+
+#
+# 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 (3D GLOBAL) ---
+#
+ 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'],)
+ __gtheta = CALC_G ( THETA = _F(THETA=__theta),
+ OPTION = 'CALC_G_GLOB',
+ 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 = _F(THETA=__theta),
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ COMP_ELAS = _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],),
+ TITRE = montit,
+ OPTION = 'G_MAX_GLOB',
+ BORNES = mcfact,)
+ IMPR_TABLE(TABLE = __gbil, )
+#
+# --- commande CALC_G (3D LOCAL) ---
+#
+ 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']=_F(LISSAGE_THETA= 'LAGRANGE',
+ LISSAGE_G= 'LAGRANGE',)
+ __glocal = CALC_G( THETA=_F( FOND_FISS = fond3d[j],
+ R_INF = tht3d['R_INF'],
+ R_SUP = tht3d['R_SUP'],),
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ TITRE = montit,**motscles)
+ IMPR_TABLE(TABLE = __glocal, )
+#
+# recherche du g max local
+#
+ if OPTION=='CALC_G_MAX_LOCAL' :
+ if BORNES!=None:
+ motscles={}
+ mcfact=[]
+ if FERME:
+ motscles['LISSAGE']=_F(LISSAGE_THETA= 'LAGRANGE',
+ 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( THETA=_F( FOND_FISS = fond3d[j],
+ R_INF = tht3d['R_INF'],
+ R_SUP = tht3d['R_SUP'],),
+ RESULTAT = nomres,
+ TOUT_ORDRE = 'OUI',
+ COMP_ELAS = _F(TOUT = 'OUI',
+ RELATION = COMP_ELAS['RELATION'],),
+ TITRE = montit,
+ OPTION = 'G_MAX',**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]
+ elif (len(ncham)==2) and (ncham[0][:4]!='TEMP') and (ncham[1][:4]!='TEMP') :
+ motscles['NOM_CHAM' ]=(ncham[0],ncham[1])
+ elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[1]
+ elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]
+ 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]
+ elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[0]
+ elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+ motscles['NOM_CHAM' ]= ncham[1]
+ 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=resuth,**motscles))
+ IMPR_RESU( MODELE = modele,
+ RESU = mcfresu,
+ FORMAT=IMPRESSION['FORMAT'],**motsclei)
+#
+ return ier
--- /dev/null
+#@ MODIF macr_aspic_mail_ops Macro DATE 14/04/2008 AUTEUR GALENNE E.GALENNE
+# -*- 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.
+# ======================================================================
+
+
+import os.path
+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):
+ import aster
+# Ouverture du fichier d'entrée de commandes
+ fdgib=open(nomFichierDATG,'w')
+ texte = """
+****************************************************************
+opti echo 0;
+epT1 = %s;
+DeT1 = %s;
+d1 = %s;
+d2 = %s;
+epT2 = %s;
+DeT2 = %s;
+Zmax = %s;
+type_s = %s;
+d_pene = %s;
+h = %s;
+angl_s = %s;
+jeu = %s;
+epC = %s;
+DeC = %s;
+Xmax = %s;
+typmai = MOT %s;
+theta = %s;
+typele = MOT %s;
+typ_eque = MOT SAINE;
+nivmag = %s;
+****************************************************************
+""" % (EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, ITYPSO, DPENE, H,
+ ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE, NIVMAG)
+ aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+ texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
+ 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) :
+
+ import aster
+# 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'
+ aster.affiche('MESSAGE',texte + ' + aspic_v2.datg...\n')
+ texte = texte + open(os.path.join(loc_datg, 'aspic_v2.datg'), 'r').read()
+ 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) :
+#
+ import aster
+ 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 (STHETA > 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
+ DNXY = sqrt(pow(XD,2) + pow(YD,2)) - sqrt(pow(XN,2) + pow(YN,2))
+ DNXY0 = XD0 - XN0
+ RAPP = DNXY/DNXY0
+ # Correction necessaire dans le cas theta et/ou alpha grand
+ if (RAPP < 0.5) :
+ DXY = sqrt(pow(XD,2) + pow(YD,2) )
+ XN = XN * DXY/XD0
+ YN = YN * DXY/XD0
+ 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
+ # Correction necessaire dans le cas theta grand (cf. AL9679)
+ if ( abs(STHETA) > 0.8) :
+ DXY = sqrt(pow(XD,2) + pow(YD,2) )
+ XN = XN * DXY/XD0
+ YN = YN * DXY/XD0
+ 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 = (ECART + (RAPP - 1.0) * D0N0)/2
+ 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 (STHETA > 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
+
+ message= ' <MACR_ASPIC_MAIL> CORRECTION PROFONDEUR DEFAUT \n'
+ message=message+ ' PROFONDEUR SUR PIQUAGE : %.2f \n'%AOLD
+ message=message+ ' PROFONDEUR SUR EQUERRE : %.2f \n'%A
+ aster.affiche('MESSAGE',message)
+
+# 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'
+ aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+ texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
+ 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
+ from Utilitai.Utmess import UTMESS
+ 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')
+ CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+ IMPR_RESU =self.get_cmd('IMPR_RESU')
+ DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
+
+# 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 :
+ UTMESS('F','ASPIC0_12')
+ 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 = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) )
+ if not LOK :
+ UTMESS('A','ASPIC0_13',valr=[ZMAX,ZMAXC])
+ 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 = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) )
+ if not LOK :
+ UTMESS('A','ASPIC0_23',valr=[XMAX,XMAXC])
+ message= ' MACR_ASPIC_MAIL : X_MAX CALCULEE : %.2f X_MAX FOURNI : %.2f\n'%(XMAXC,XMAX)
+ message=message+ ' MACR_ASPIC_MAIL : Z_MAX CALCULEE : %.2f Z_MAX FOURNI : %.2f\n'%(ZMAXC,ZMAX)
+ aster.affiche('MESSAGE',message)
+#
+# --- 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) :
+ UTMESS('F','ASPIC0_14')
+ ZETA = 0.5
+ if TFISS not in ('DEB_INT','DEB_EXT') :
+ if FISS_SOUDURE['LIGA_INT']==None :
+ UTMESS('F','ASPIC0_15')
+ 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 :
+ UTMESS('F','ASPIC0_16')
+ if ZETA > 0.9 :
+ UTMESS('F','ASPIC0_17')
+ if LIGA < 0.1*EPC :
+ UTMESS('F','ASPIC0_16')
+ if (LIGA + 2.0*A) > 0.9*EPC :
+ UTMESS('F','ASPIC0_17')
+ if N1==0 :
+ if FISCOU :
+ UTMESS('F','ASPIC0_18')
+ if AXIS=='NON' :
+ UTMESS('F','ASPIC0_19')
+ C = 0.0
+ else :
+ if AXIS=='OUI' : UTMESS('A','ASPIC0_20')
+ 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 :
+ UTMESS('F','ASPIC0_21')
+#
+# --- 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)
+#
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
+ EXEC_LOGICIEL( LOGICIEL = logiel ,
+ ARGUMENT = (nomFichierDATG,
+ 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')
+ l_CREA_GROUP_NO.append('LEVRTUBU')
+ 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',),))
+ if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
+ motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
+ __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 , )
+ )
+#
+
+ motscles={}
+ if not SAIN :
+ 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,
+ **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 )
+#
+#
+# --- Verification profondeur fissure (courte débouchante) ---
+#
+ if FISCOU and not (TFISS=='NON_DEB') :
+ nomres=DEFI_GROUP( reuse=nomres,
+ MAILLAGE=nomres,
+ CREA_GROUP_NO=(_F( GROUP_MA = 'LEVRTUBU',),
+ _F( NOM = 'FONDORDO',
+ GROUP_MA = 'FONDFISS',
+ OPTION = 'NOEUD_ORDO',),),);
+
+ nommail=nomres.nom
+ coord =aster.getvectjev(nommail.ljust(8)+'.COORDO .VALE')
+ collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
+
+ grfo=collgrno['FONDORDO']
+ Nbno = len(grfo)
+ listx = [None]*Nbno
+ listy = [None]*Nbno
+ listz = [None]*Nbno
+ k = 0
+ for node in grfo:
+ listx[k] = coord[3*(node-1)]
+ listy[k] = coord[3*(node-1)+1]
+ listz[k] = coord[3*(node-1)+2]
+ k = k+1
+
+ XAB = listx[Nbno-1] - listx[0]
+ YAB = listy[Nbno-1] - listy[0]
+ ZAB = listz[Nbno-1] - listz[0]
+ AB = sqrt(XAB*XAB + YAB*YAB +ZAB*ZAB)
+ d = 0
+ for k in range(0,Nbno) :
+ XAM = listx[k] - listx[0]
+ YAM = listy[k] - listy[0]
+ ZAM = listz[k] - listz[0]
+ Xvect = YAB*ZAM-ZAB*YAM
+ Yvect = ZAB*XAM-XAB*ZAM
+ Zvect = XAB*YAM-YAB*XAM
+ AM = sqrt(Xvect*Xvect+ Yvect*Yvect +Zvect*Zvect)
+ dk = AM/AB
+ if dk > d :
+ XC = listx[k]
+ YC = listy[k]
+ ZC = listz[k]
+ d = max(dk, d)
+
+ grlev=collgrno['LEVRTUBU']
+ Nbnol = len(grlev)
+ listxl = [None]*Nbnol
+ listyl = [None]*Nbnol
+ listzl = [None]*Nbnol
+ k = 0
+ for node in grlev:
+ listxl[k] = coord[3*(node-1)]
+ listyl[k] = coord[3*(node-1)+1]
+ listzl[k] = coord[3*(node-1)+2]
+ k = k+1
+ dist = 0
+ for k in range(0,Nbnol) :
+ XAM = listxl[k] - listx[0]
+ YAM = listyl[k] - listy[0]
+ ZAM = listzl[k] - listz[0]
+ Scal = (XAB*XAM + YAB*YAM + ZAB*ZAM)/(AB*AB)
+ if (abs(Scal) < 0.51) and (abs(Scal) > 0.49) :
+ Xk = listxl[k] -XC
+ Yk = listyl[k] -YC
+ Zk = listzl[k] -ZC
+ dk = sqrt(Xk**2+ Yk**2 +Zk**2)
+ dist = max(dk, dist)
+
+ texte="<MACR_ASPIC_MAIL> PROFONDEUR DE LA FISSURE DANS LE MAILLAGE : %.2f \n"%dist
+ aster.affiche('MESSAGE',texte)
+#
+ return ier
+
+
--- /dev/null
+#@ MODIF macr_cara_poutre_ops Macro DATE 30/06/2008 AUTEUR FLEJOU J-L.FLEJOU
+# -*- 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,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
+ GROUP_MA,ORIG_INER,**args):
+ """
+ Ecriture de la macro MACR_CARA_POUTRE
+ """
+ import types,string
+ from Accas import _F
+ import aster
+ from Utilitai.Utmess import UTMESS
+ 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')
+ CREA_TABLE =self.get_cmd('CREA_TABLE')
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans le contexte de la macro
+ self.DeclareOut('nomres',self.sd)
+ #
+ if ( MAILLAGE != None ):
+ __nomlma=CREA_MAILLAGE(MAILLAGE=MAILLAGE)
+ elif ( args.has_key('UNITE') and args.has_key('FORMAT') ):
+ __nomlma=LIRE_MAILLAGE(UNITE=args['UNITE'],FORMAT=args['FORMAT'])
+ else:
+ assert False, "Erreur dans les options UNITE, FORMAT, 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)
+ __cageo=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=__cageo,
+ 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['NOEUD']!=None:
+ nthno = args['NOEUD']
+ if type(nthno)!=types.StringType : UTMESS('F','POUTRE0_3')
+ motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
+ if args['GROUP_NO']!=None:
+ collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+ nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+ l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+ if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+ nthno=nomnoe[l_no[0]-1]
+ motscles['TEMP_IMPO']=(_F(NOEUD=nthno,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['NOEUD']!=None:
+ nthno = args['NOEUD']
+ motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
+ if args['GROUP_NO']!=None:
+ collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+ nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+ l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+ if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+ nthno=nomnoe[l_no[0]-1]
+ motscles['TEMP_IMPO']=_F(NOEUD=nthno,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=__cageo,
+ LAPL_PHI=__tempe1,
+ RT=__rt,
+ TOUT='OUI',
+ OPTION='CARA_TORSION',
+ GROUP_MA_INTE=args['GROUP_MA_INTE'],)
+ else:
+ motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
+ LAPL_PHI=__tempe1,
+ RT=__rt,
+ TOUT='OUI',
+ OPTION='CARA_TORSION', )
+ __cator=POST_ELEM(MODELE=__nomoth,
+ CHAM_MATER=__chmath,
+ **motscles )
+
+
+# --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
+# --- CENTRE DE CISAILLEMENT/TORSION :
+# ------------------------------
+
+ __cacis=POST_ELEM(MODELE=__nomoth,
+ CHAM_MATER=__chmath,
+ CARA_POUTRE=_F(CARA_GEOM=__cator,
+ 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=__cacis,
+ 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(MODELE=__nomot2,
+ CHAM_MATER=__chmat2,
+ CARA_POUTRE=_F(CARA_GEOM=__cacis,
+ 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:
+
+# --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
+# ------------------------------------------------------
+
+ 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
+
+ l_noeud=None
+
+ if args['NOEUD']!=None:
+ if type(args['NOEUD'])==types.StringType :
+ l_noeud=[args['NOEUD'],]
+ else:
+ l_noeud= args['NOEUD']
+
+ if args['GROUP_NO']!=None:
+ collgrno=aster.getcolljev(string.ljust(__nomlma.nom,8)+'.GROUPENO')
+ nomnoe =aster.getvectjev(string.ljust(__nomlma.nom,8)+'.NOMNOE')
+ l_nu_no =[]
+ if type(args['GROUP_NO'])==types.StringType :
+ l_gr_no=[args['GROUP_NO'],]
+ else:
+ l_gr_no= args['GROUP_NO']
+ for grno in l_gr_no:
+ l_nu_no =l_nu_no+list(collgrno[string.ljust(grno,8)])
+ l_noeud =[nomnoe[no_i-1] for no_i in l_nu_no]
+
+ if len(l_group_ma)!=len(l_group_ma_bord):
+ UTMESS('F','POUTRE0_1')
+ if l_noeud!=None and (len(l_group_ma)!=len(l_noeud)):
+ UTMESS('F','POUTRE0_2')
+
+ __catp2=__cageo
+ 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=__cageo,
+ 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 :
+# ---------------------------------
+
+ __catp1=POST_ELEM(MODELE=__nomoth,
+ CHAM_MATER=__chmath,
+ CARA_POUTRE=_F(CARA_GEOM=__catp2,
+ 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 :
+# ------------------------------
+
+ __catp2=POST_ELEM(MODELE=__nomoth,
+ CHAM_MATER=__chmath,
+ CARA_POUTRE=_F(CARA_GEOM=__catp1,
+ 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=__catp2)
+ dprod = __catp2.EXTR_TABLE().dict_CREA_TABLE()
+ nomres = CREA_TABLE(**dprod)
+ if not GROUP_MA_BORD :
+ nomres=POST_ELEM(MODELE=__nomamo,
+ CHAM_MATER=__nomama,
+ CARA_GEOM=mfact )
+ IMPR_TABLE(TABLE=nomres)
+
+ return ier
--- /dev/null
+#@ MODIF macr_ecla_pg_ops Macro DATE 02/02/2010 AUTEUR PELLET 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 != None : motscles['NUME_ORDRE'] =NUME_ORDRE
+ if LIST_ORDRE : motscles['LIST_ORDRE'] =LIST_ORDRE
+ if LIST_INST : motscles['LIST_INST'] =LIST_INST
+ if INST != None : motscles['INST'] =INST
+
+ self.DeclareOut('resu2',RESULTAT)
+ resu2=CREA_RESU( OPERATION='ECLA_PG', TYPE_RESU=string.upper(typ2),
+ ECLA_PG=_F( MODELE_INIT= MODELE_INIT, RESU_INIT=RESU_INIT, NOM_CHAM=NOM_CHAM,
+ MAILLAGE= ma2, **motscles ));
+ return ier
+############################################################################################
+
--- /dev/null
+#@ MODIF macr_ecre_calc_ops Macro DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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_ecre_calc_ops(
+ self,
+ TABLE,
+ DEBIT,
+ FISSURE,
+ ECOULEMENT,
+ TEMPERATURE,
+ MODELE_ECRE,
+ CONVERGENCE,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ #COURBES,
+ IMPRESSION,
+ INFO,
+ **args):
+
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Generation par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+ """
+
+ import os, string, types, shutil
+ import aster
+ from Accas import _F
+ #from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.System import ExecCommand
+
+ ier=0
+
+
+ # PARAMETRES DEBUG
+ debug = True
+
+
+
+ # Concept sortant
+ self.DeclareOut('__TAB',TABLE)
+ self.DeclareOut('__DEB',DEBIT)
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Info
+ info2 = (INFO==2)
+ if debug :
+ info2=True
+
+ # Parametres Developpeur
+ tmp_ecrevisse = "tmp_ecrevisse"
+ fichier_data = "data.dat"
+ defaut = '00'
+
+ # IMPORTATION DE COMMANDES ASTER
+ EXEC_LOGICIEL = self.get_cmd("EXEC_LOGICIEL")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+# IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ IMPR_FONCTION = self.get_cmd("IMPR_FONCTION")
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+ dFISSURE=FISSURE[0].cree_dict_valeurs(FISSURE[0].mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dTEMPERATURE=TEMPERATURE[0].cree_dict_valeurs(TEMPERATURE[0].mc_liste)
+ for i in dTEMPERATURE.keys():
+ if dTEMPERATURE[i]==None : del dTEMPERATURE[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : del dMODELE_ECRE[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+ if debug:
+ print 'dFISSURE = ', dFISSURE
+ print 'dECOULEMENT = ', dECOULEMENT
+ print 'dTEMPERATURE = ', dTEMPERATURE
+ print 'dMODELE_ECRE = ', dMODELE_ECRE
+ print 'dCONVERGENCE = ', dCONVERGENCE
+ print 'ENTETE = ', ENTETE
+ print 'IMPRESSION = ', IMPRESSION
+ print 'INFO = ', INFO
+
+
+
+
+# ---------------------------------------------------------------------
+# CONSTRUCTION DU JEU DE PARAMETRES
+
+ d = {}
+ d[ 0 ] = ENTETE,
+
+ # FISSURE
+ d[ 1 ] = defaut,
+ d[ 2 ] = str(len(dFISSURE['LISTE_COTES_AH'])),
+ d[ 3 ] = dFISSURE['LISTE_COTES_AH'],
+ d[ 4 ] = dFISSURE['LISTE_VAL_AH'],
+ d[ 5 ] = str(len(dFISSURE['LISTE_COTES_BL'])),
+ d[ 6 ] = dFISSURE['LISTE_COTES_BL'],
+ d[ 7 ] = dFISSURE['LISTE_VAL_BL'],
+ d[ 8 ] = dFISSURE['LONGUEUR'],
+ d[ 9 ] = dFISSURE['ANGLE'],
+ d[ 10 ] = dFISSURE['RUGOSITE'],
+ d[ 11 ] = dFISSURE['ZETA'],
+ if dFISSURE['SECTION'] == 'ELLIPSE':
+ d[ 1 ] = 1,
+ if dFISSURE['SECTION'] == 'RECTANGLE':
+ d[ 1 ] = 2,
+
+ # ECOULEMENT
+ d[ 20 ] = dECOULEMENT['PRES_ENTREE'],
+ d[ 21 ] = dECOULEMENT['PRES_SORTIE'],
+ d[ 22 ] = dECOULEMENT['FLUIDE_ENTREE'],
+ d[ 23 ] = defaut,
+ d[ 24 ] = defaut,
+ d[ 25 ] = defaut,
+ if dECOULEMENT['FLUIDE_ENTREE'] in [1, 3, 4, 6]:
+ d[ 23 ] = dECOULEMENT['TEMP_ENTREE'],
+ if dECOULEMENT['FLUIDE_ENTREE'] in [2, 5]:
+ d[ 24 ] = dECOULEMENT['TITR_MASS'],
+ if dECOULEMENT['FLUIDE_ENTREE'] in [4, 5]:
+ d[ 25 ] = dECOULEMENT['PRES_PART'],
+
+ # TEMPERATURE
+ d[ 30 ] = defaut,
+ d[ 31 ] = defaut,
+ d[ 32 ] = defaut,
+ d[ 33 ] = defaut,
+ d[ 34 ] = defaut,
+ d[ 35 ] = defaut,
+ d[ 36 ] = defaut,
+ d[ 37 ] = defaut,
+ d[ 38 ] = defaut,
+ d[ 39 ] = defaut,
+ d[ 40 ] = defaut,
+ if dTEMPERATURE['GRADIENT'] == 'FOURNI':
+ d[ 30 ] = -1
+ d[ 31 ] = len(dTEMPERATURE['LISTE_COTES_TEMP'])
+ d[ 32 ] = dTEMPERATURE['LISTE_COTES_TEMP']
+ d[ 33 ] = dTEMPERATURE['LISTE_VAL_TEMP']
+ if dTEMPERATURE['GRADIENT'] == 'IMPOSE':
+ d[ 30 ] = 0
+ d[ 34 ] = dTEMPERATURE['TEMP1']
+ d[ 35 ] = dTEMPERATURE['TEMP2']
+ if dTEMPERATURE['GRADIENT'] == 'CALCULE':
+ d[ 30 ] = 1
+ d[ 36 ] = dTEMPERATURE['EPAISSEUR_PAROI']
+ d[ 37 ] = dTEMPERATURE['CONVECTION_AMONT']
+ d[ 38 ] = dTEMPERATURE['CONVECTION_AVAL']
+ d[ 39 ] = dTEMPERATURE['LAMBDA']
+ d[ 40 ] = dTEMPERATURE['TEMP_FLUIDE_AVAL']
+
+ # MODELE_ECRE
+ d[ 60 ] = defaut,
+ d[ 61 ] = defaut,
+ if dMODELE_ECRE['ECOULEMENT'] == 'SATURATION':
+ d[ 60 ] = 1,
+ if dMODELE_ECRE['ECOULEMENT'] == 'GELE':
+ d[ 60 ] = 2,
+ d[ 61 ] = dMODELE_ECRE['PRESS_EBULLITION'],
+
+ d[ 70 ] = dMODELE_ECRE['FROTTEMENT'],
+ d[ 71 ] = defaut,
+ d[ 72 ] = defaut,
+ d[ 73 ] = defaut,
+ d[ 74 ] = defaut,
+ d[ 75 ] = defaut,
+ if dMODELE_ECRE['FROTTEMENT'] < 0:
+ d[ 71 ] = dMODELE_ECRE['REYNOLDS_LIM'],
+ d[ 72 ] = dMODELE_ECRE['FROTTEMENT_LIM'],
+
+ d[ 73 ] = dMODELE_ECRE['TRANSFERT_CHAL'],
+
+ if dMODELE_ECRE['TRANSFERT_CHAL'] == 0: pass # Pour memoire 3 cas >0, =0, <0
+ if dMODELE_ECRE['TRANSFERT_CHAL'] > 0: pass # Pour memoire 3 cas >0, =0, <0
+ if dMODELE_ECRE['TRANSFERT_CHAL'] < 0:
+ d[74] = dMODELE_ECRE['XMINCH'],
+ d[75] = dMODELE_ECRE['XMAXCH'],
+
+ d[79] = dMODELE_ECRE['IVENAC'],
+
+ if IMPRESSION == 'OUI':
+ d[ 84 ] = 1,
+ if IMPRESSION == 'NON':
+ d[ 84 ] = 0,
+
+ # CONVERGENCE
+ d[ 88 ] = dCONVERGENCE['KGTEST'],
+ d[ 89 ] = dCONVERGENCE['ITER_GLOB_MAXI'],
+ d[ 90 ] = dCONVERGENCE['CRIT_CONV_DEBI'],
+
+ if debug: print d
+
+
+
+
+# ---------------------------------------------------------------------
+# GENERATION DU FICHIER DATA.DAT
+
+ txt = fichier_data_ecrevisse()
+
+ for num_param in d.keys():
+ if type(d[num_param]) in [int, float]:
+ txt0 = str(d[num_param])
+ elif type(d[num_param]) in [tuple, list]:
+ txt0 = str(d[num_param]).replace('(', '')
+ txt0 = txt0.replace(')', '')
+ txt0 = txt0.replace(',', '')
+ txt0 = txt0.replace("'", '')
+ txt0 = txt0.replace("[", '')
+ txt0 = txt0.replace("]", '')
+ else:
+ try: txt0 = str(d[num_param])
+ except: UTMESS('F','ECREVISSE0_11')
+
+ # On remplace la variable dans le fichier par sa valeur
+ txt = txt.replace( '$V['+str(num_param)+']', txt0 )
+
+ if debug : print txt
+
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DE L'ENVIRONNEMENT D'ETUDE POUR ECREVISSE
+
+
+ # Repertoire temporaire d'execution d'Ecrevisse
+ tmp_ecrevisse = os.path.join(os.getcwd(),tmp_ecrevisse)
+
+ if not os.path.isdir(tmp_ecrevisse) :
+ try :
+ os.mkdir(tmp_ecrevisse)
+ except os.error,erreur :
+ if debug :
+ print "Code d'erreur de mkdir : " + str(erreur[0]) + " : " + str(erreur[1])
+ UTMESS('F','ECREVISSE0_12',valk=[tmp_ecrevisse])
+
+ # On recopie eventuellement l'ancien fichier debits
+ src = os.path.join('.', 'REPE_OUT', 'debits_dernier')
+ dst = os.path.join(tmp_ecrevisse, 'debits')
+ if os.path.isfile(src):
+ try:
+ shutil.copyfile(src, dst)
+ except Exception, e:
+ UTMESS('F','ECREVISSE0_24',valk=[src, dst])
+ #print "ERREUR : copyfile %s -> %s" % (src, dst)
+
+ # Executable Ecrevisse
+ if LOGICIEL :
+ if not os.path.isfile(str(LOGICIEL)):
+ UTMESS('F','ECREVISSE0_13')
+ else:
+ chemin_executable = str(LOGICIEL)
+ else :
+ chemin_executable = os.path.join(aster.repout(), 'ecrevisse')
+ #chemin_executable = os.path.join(aster.repout(),version,'ecrevisse')
+ if debug :
+ print 'chemin_executable:',chemin_executable
+
+ # Soit on fait un lien symbolique (incompatible avec certaines plate-formes) soit on recopie l'executable
+ if not os.path.isfile(os.path.join(tmp_ecrevisse, 'ecrevisse')):
+ try:
+ os.symlink( chemin_executable, os.path.join(tmp_ecrevisse, 'ecrevisse') )
+ except:
+ UTMESS('A','ECREVISSE0_14')
+ cmd = 'cp ' + chemin_executable + ' ' + os.path.join(tmp_ecrevisse, 'ecrevisse')
+ res = os.system(cmd)
+ os.chmod( os.path.join(tmp_ecrevisse, 'ecrevisse') ,0755)
+ if (res!=0): UTMESS('F','ECREVISSE0_15')
+
+ # Ecriture du fichier de donnees pour Ecrevisse
+ fw = open(os.path.join(tmp_ecrevisse, fichier_data),'w')
+ fw.write(txt)
+ fw.close()
+
+ # Sauvegarde dans REPE_OUT du data.dat
+ os.system('cp ' + tmp_ecrevisse + '/data.dat REPE_OUT/')
+
+
+# ---------------------------------------------------------------------
+# EXECUTION D'ECREVISSE
+
+ # Choix du shell
+ cmd = '#!sh'
+ for shell in ['/bin/sh', '/bin/bash', '/usr/bin/sh']:
+ if os.path.isfile(shell):
+ cmd = '#!' + shell
+ break
+
+# #Ligne suivante a ajouter avec la version LINUX compilee avec GFORTRAN
+# cmd = cmd + '\nexport LD_LIBRARY_PATH=/logiciels/aster/Linux/GF4/public/gcc-4.1.1/lib:$LD_LIBRARY_PATH'
+
+ # Creation du contenu du script de lancement ecrevisse.sh
+ cmd = cmd + '\ncd ' + tmp_ecrevisse + '\n' + os.path.join(tmp_ecrevisse, 'ecrevisse') + ' ' + str(VERSION) + '\nset iret=$?\ncd ..\nexit $iret'
+ fw = open(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),'w')
+ fw.write(cmd)
+ fw.close()
+ os.chmod(os.path.join(tmp_ecrevisse, 'ecrevisse.sh') ,0755)
+
+ # Lancement d'Ecrevisse
+ UTMESS('I','ECREVISSE0_16')
+ res = ExecCommand(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),follow_output=True,verbose=True)
+ UTMESS('I','ECREVISSE0_17')
+
+
+ if info2: os.system('ls -al ' + tmp_ecrevisse)
+
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS DEPUIS ECREVISSE
+
+
+ # 1) 5 COLONNES (a partir de ECREVISSE 3.1.e)
+ # COTE z (m), FLUX THERMIQUE (W/m2), PRESSION TOTALE ABSOLUE (Pa),
+ # TEMPERATURE FLUIDE (degres C), COEFFICIENT DE CONVECTION (W/m2/K)
+ try:
+ f_ast = open(os.path.join(tmp_ecrevisse, 'pour_aster'),'r')
+ _txt = f_ast.read()
+ f_ast.close()
+ # transforme le texte en liste
+ _lst = _txt.split()
+ # transforme la liste de textes en liste de float
+ _lst = map( float, _lst )
+
+ # ATTENTION : les cotes _ecr_c sont celles des resultats ecrevisse,
+ # c'est a dire les points de milieu du maillage aster,
+ # eventuellement multiplies par 1/TORTUOSITE!
+ _ecr_c = _lst[1:len(_lst):5]
+ _ecr_f = _lst[2:len(_lst):5]
+ _ecr_p = _lst[3:len(_lst):5]
+ _ecr_t = _lst[4:len(_lst):5]
+ _ecr_cc = _lst[5:len(_lst):5]
+
+ except:
+ UTMESS('F','ECREVISSE0_18')
+ _ecr_c = [-1]
+ _ecr_f = [-1]
+ _ecr_p = [-1]
+ _ecr_t = [-1]
+ _ecr_cc = [-1]
+
+ else:
+ # On elimine les eventuels points en plus
+ # (cela arrive si la longueur de la fissure est plus grande de la derniere cotes)
+ # mais on considere quand meme la derniere cote du maillage aster
+ lx_ast = dFISSURE['LISTE_COTES_AH']
+ nbCotesEcre = len(lx_ast)
+ _ecr_c = _ecr_c[0:nbCotesEcre]
+ _ecr_f = _ecr_f[0:nbCotesEcre]
+ _ecr_p = _ecr_p[0:nbCotesEcre]
+ _ecr_t = _ecr_t[0:nbCotesEcre]
+ _ecr_cc = _ecr_cc[0:nbCotesEcre]
+
+
+
+ # 2) DEBIT - 5 COLONNES (a partir de ECREVISSE 3.1.e)
+ # DEBIT TOTAL (kg/s), DEBIT AIR (kg/s), DEBIT VAPEUR (kg/s),
+ # DEBIT LIQUIDE (kg/s), TYPE ECOULEMENT
+ try:
+ f_deb = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+ _tex = f_deb.read()
+ f_deb.close()
+ _lis = _tex.split()
+ _lis = map( float, _lis )
+
+ _dtot = _lis[0:len(_lis):5]
+ _dair = _lis[1:len(_lis):5]
+ _dvap = _lis[2:len(_lis):5]
+ _dliq = _lis[3:len(_lis):5]
+ _ecou = _lis[4:len(_lis):5]
+
+ except:
+ UTMESS('A','ECREVISSE0_18')
+ _dtot = [-1]
+ _dair = [-1]
+ _dvap = [-1]
+ _dliq = [-1]
+ _ecou = [-1]
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DES SD-TABLE DE RESULTATS
+
+ __TAB=CREA_TABLE(LISTE=(_F(LISTE_R=_ecr_c,
+ PARA='COTES'),
+ _F(LISTE_R=_ecr_f,
+ PARA='FLUX'),
+ _F(LISTE_R=_ecr_p,
+ PARA='PRESSION'),
+ _F(LISTE_R=_ecr_t,
+ PARA='TEMP'),
+ _F(LISTE_R=_ecr_cc,
+ PARA='COEF_CONV'),
+ ))
+
+ __DEB=CREA_TABLE(LISTE=(_F(LISTE_R=_dtot,
+ PARA='DEBTOT'),
+ _F(LISTE_R=_dair,
+ PARA='DEBAIR'),
+ _F(LISTE_R=_dvap,
+ PARA='DEBVAP'),
+ _F(LISTE_R=_dliq,
+ PARA='DEBLIQ'),
+ _F(LISTE_I=_ecou,
+ PARA='ECOULEMENT'),
+ ))
+
+
+
+
+# ---------------------------------------------------------------------
+# DEBUG
+ if debug :
+ print 'DEBUT DEBUG MACR_ECRE_CALC'
+ print 'Chargements donnes par Ecrevisse'
+ print 'cotes aster :', lx_ast
+ print '_ecr_c : min=', min(_ecr_c), ' / max=', max(_ecr_c), ' / ', _ecr_c
+ print '_ecr_f : min=', min(_ecr_f), ' / max=', max(_ecr_f), ' / ', _ecr_f
+ print '_ecr_p : min=', min(_ecr_p), ' / max=', max(_ecr_p), ' / ', _ecr_p
+ print '_ecr_t : min=', min(_ecr_t), ' / max=', max(_ecr_t), ' / ', _ecr_t
+ print '_ecr_cc : min=', min(_ecr_cc), ' / max=', max(_ecr_cc), ' / ', _ecr_cc
+ print '_dtot=', _dtot
+ print '_dair=', _dair
+ print '_dvap=', _dvap
+ print '_dliq=', _dliq
+ print '_ecou=', _ecou
+ print __DEB.EXTR_TABLE()
+ print __TAB.EXTR_TABLE()
+ print 'FIN DEBUG MACR_ECRE_CALC'
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS OPTIONNELS DEPUIS ECREVISSE
+# A finir
+# lst_fic = os.listdir(tmp_ecrevisse)
+
+
+
+# ---------------------------------------------------------------------
+# FIN MACR_ECRE_CALC
+ return ier
+
+
+
+
+# ---------------------------------------------------------------------
+def fichier_data_ecrevisse():
+
+ """
+ Modele du fichier data.dat a la syntaxe Ecrevisse 3.0
+ Cette chaine de caractere est l'exacte replique d'un fichier de donnees
+ Ecrevisse 3.0 dans lequel toutes les donnees numeriques ont ete
+ remplacees par $V[x].
+ """
+
+ txt = """$V[0]
+
+
+ DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+ *******************************************
+
+$V[1] is: type de section (is=1 ellipse is=2 rectangle)
+$V[2] nb points decrivant ah: grand axe (m)
+$V[3]
+$V[4]
+$V[5] nb points decrivant bl: petit axe (m)
+$V[6]
+$V[7]
+$V[8] zl: longueur totale de la fissure (m)
+$V[9] theta: angle par rapport a la verticale ascendante (en degres)
+$V[10] eps: rugosite absolu (m)
+$V[11] zeta: coefficient de la perte de charge singuliere a l'entree
+
+ DONNEES RELATIVES A L"ECOULEMENT
+ ********************************
+
+$V[20] pe: pression de stagnation a l'entree (Pa)
+$V[21] ps: pression de stagnation a la sortie (Pa)
+$V[22] iflow : condition du fluide a l'entree
+ iflow=1 : eau sous-refroidie ou saturee
+ iflow=2 : fluide diphasique
+ iflow=3 : vapeur saturee ou surchauffee
+ iflow=4 : air + vapeur surchauffee
+ iflow=5 : air + vapeur saturee
+ iflow=6 : air seul
+$V[23] te: temperature a l'entree (deg C) (utilise si iflow=1,3,4,6)
+$V[24] xe: titre m. eau vap/eau tot a l'entree (utilise si iflow=2 ou 5)
+$V[25] pae : pression partielle air en entree (Pa) (utilise si iflow>3)
+
+ DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+ *************************************************************
+
+$V[30] imograd : modele de calcul du gradient de temperature
+ imograd=-1/ distribution imposee de temperature (max 100pts)
+ imograd=0 : profil impose de la temperature
+ imograd=1 : calcul du profil
+$V[31] cas imograd = -1 : ntmat, nb de points donnes ensuite (max=100)
+$V[32]
+$V[33]
+$V[34] tm1: grad. temp. paroi le lg de l'ecoul.(utilise si imograd=0) (degC/m)
+$V[35] tm2: temperature de la paroi a l'entree (utilise si imograd=0) (degC)
+$V[36] epp: epaisseur de la paroi (utilise si imograd=1) (m)
+$V[37] alphe: coeff. convection face amont (utilise si imograd=1) (W/degC/m2)
+$V[38] alphs: coeff. convection face aval (utilise si imograd=1) (W/degC/m2)
+$V[39] lambd: conduct. thermique de la paroi (utilise si imograd=1) (W/degC/m)
+$V[40] ts: temperature du fluide cote aval (utilise si imograd=1) (degC)
+
+ CHOIX DES MODELES
+ *****************
+
+Modeles d'ecoulement diphasique
+-------------------------------
+$V[60] imod : type de modele d'ecoulement diphasique
+ imod=1 : modele d'ecoulement a saturation a l'entree
+ imod=2 : modele d'ecoulement 'gele' a l'entree
+$V[61] corrp: press. d'ebullition = corrp*psat(t)
+
+Choix des correlations de frottement et de transfert de chaleur
+---------------------------------------------------------------
+$V[70] ifrot : frottement (avec : ifrot=1 ou -1 ; sans : ifrot=0 )
+$V[71] cas ifrot=-1 : relim = Re limite
+$V[72] cas ifrot=-1 : frtlim = coeff frottement si Re > relim
+$V[73] ichal : transfert de chaleur (-2 <= ichal <= 2 ichal=0 ==> Pas d'echange de chaleur)
+$V[74] cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
+$V[75] cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
+
+Modelisation de la vena contracta
+---------------------------------
+$V[79] ivenac : avec = 1, sans = 0
+
+Procedure d'impression
+----------------------
+$V[84] iprint : impression profils ecran ( oui:1 non:0 )
+
+ DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+ ********************************************
+
+$V[88] kgtest (0 < kgtest < 1) tel que g=kgtest*gmax+(1-kgtest)*gmin
+$V[89] itnmax : nombre maximum iterations methode newton
+$V[90] precdb : critere de convergence en debit
+"""
+
+ return txt
--- /dev/null
+#@ MODIF macr_ecrevisse_ops Macro DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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_ecrevisse_ops(self,reuse,
+ CONV_CRITERE,
+ TABLE,
+ TEMPER,
+ DEBIT,
+ MODELE_MECA,
+ MODELE_THER,
+ FISSURE,
+ ECOULEMENT,
+ LIST_INST,
+ MODELE_ECRE,
+ CONVERGENCE_ECREVISSE,
+ COURBES,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ IMPRESSION,
+ CHAM_MATER,
+ CARA_ELEM,
+ CONTACT,
+ EXCIT_MECA,
+ EXCIT_THER,
+ COMP_INCR,
+ NEWTON,
+ CONVERGENCE,
+ ETAT_INIT,
+ INFO,
+ **args):
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Execution pour tous les pas de temps des calculs thermiques, mecaniques puis hydraulique
+ DecoupageGeneration par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+ """
+
+
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table, merge
+ from Accas import _F
+ import os, aster, copy
+
+ ier=0
+ #
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Parametres debug
+ debug = False
+
+ # Info
+ InfoAster = 1
+ info2 = (INFO==2)
+ if debug :
+ info2=True
+
+ # IMPORTATION DE COMMANDES ASTER
+ DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
+ THER_LINEAIRE = self.get_cmd("THER_LINEAIRE")
+ PROJ_CHAMP = self.get_cmd("PROJ_CHAMP")
+ DETRUIRE = self.get_cmd("DETRUIRE")
+ AFFE_MATERIAU = self.get_cmd("AFFE_MATERIAU")
+ STAT_NON_LINE = self.get_cmd("STAT_NON_LINE")
+ POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
+ CALC_ECREVISSE = self.get_cmd("CALC_ECREVISSE")
+ CO = self.get_cmd("CO")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+ CREA_RESU = self.get_cmd("CREA_RESU")
+ CREA_CHAMP = self.get_cmd("CREA_CHAMP")
+
+ # Concepts sortants
+ # TABLE creees par concatenation des tables sorties par CALC_ECREVISSE a chaque iteration
+ self.DeclareOut('TABL_RES',TABLE)
+ self.DeclareOut('DEB_RES',DEBIT)
+ # Concepts sortant: les resultats de STAT_NON_LINE et de THER_LINEAIRE valides vis-a-vis du calcul ecrevisse
+ self.DeclareOut('RTHERM',TEMPER)
+ self.DeclareOut('MECANIC', self.sd)
+
+ IsPoursuite = False
+ IsInit = True
+ # Traitement de l'etat initial en cas de poursuite
+ if ETAT_INIT:
+ dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+ for i in dEtatInit.keys():
+ if dEtatInit[i]==None : del dEtatInit[i]
+ __EVINIT = dEtatInit['EVOL_NOLI']
+ __THINIT = dEtatInit['EVOL_THER']
+ _nume_ordre = dEtatInit['NUME_ORDRE']
+ IsPoursuite= True
+ else :
+ dEtatInit=None
+
+ ## Valeur par defaut du mot cle LOGICIEL
+ #if not LOGICIEL: LOGICIEL = os.path.join(aster.repout(), 'ecrevisse')
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+
+ l_dFISSURE=[]
+ for fissure in FISSURE:
+ dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+ l_dFISSURE.append(dFISSURE)
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+ dCONVERGENCE_ECREVISSE=CONVERGENCE_ECREVISSE[0].cree_dict_valeurs(CONVERGENCE_ECREVISSE[0].mc_liste)
+ for i in dCONVERGENCE_ECREVISSE.keys():
+ if dCONVERGENCE_ECREVISSE[i]==None : del dCONVERGENCE_ECREVISSE[i]
+
+ dCOMP_INCR=COMP_INCR[0].cree_dict_valeurs(COMP_INCR[0].mc_liste)
+ for i in dCOMP_INCR.keys():
+ if dCOMP_INCR[i]==None : del dCOMP_INCR[i]
+
+ dNEWTON=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+ for i in dNEWTON.keys():
+ if dNEWTON[i]==None : del dNEWTON[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+ # Recuperation des infos pour la convergence de la macro
+ dMacr_Conv = CONV_CRITERE[0].cree_dict_valeurs(CONV_CRITERE[0].mc_liste)
+ for i in dMacr_Conv.keys():
+ if dMacr_Conv[i]==None : del dMacr_Conv[i]
+
+ motclefsCALC_ECREVISSE = {}
+ motclefsCALC_ECREVISSE['COURBES'] = COURBES,
+
+
+
+
+
+ # -----------------------------------------------------------------------------------------------------
+ # Debut de la macro
+
+ # Si LIST_INST est un DEFI_LIST_REEL :
+ _liste_inst = LIST_INST.Valeurs()
+ if (debug):
+ print 'liste des instants liste_inst = ', _liste_inst
+
+ # Drapeaux pour les 1ers calculs et les 1eres definitions
+ IsDefineMaterMeca = False
+ EcrevisseExe = False # si l'execution d'Ecrevisse n'a pas plantee ou a ete realisee
+
+ # Table python devant contenir toutes les tables Ecrevisse
+ T_TABL_RES = None
+ T_DEB_RES = None
+ # Precision demandee pour converger sur le critere de la macro
+ # Nombre de decoupages succesifs d'un pas de temps
+ # Pas de temps en dessous duquel on ne decoupe plus
+ if dMacr_Conv.has_key('SUBD_NIVEAU'):
+ MacrNbDecoupage = dMacr_Conv['SUBD_NIVEAU']
+ if dMacr_Conv.has_key('SUBD_PAS_MINI'):
+ MacrPasMini = dMacr_Conv['SUBD_PAS_MINI']
+ MacrTempRef = dMacr_Conv['TEMP_REF']
+ MacrPresRef = dMacr_Conv['PRES_REF']
+ MacrCritere = dMacr_Conv['CRITERE']
+ if dMacr_Conv.has_key('PREC_CRIT'):
+ MacrPrecisCritere = dMacr_Conv['PREC_CRIT']
+ else:
+ MacrPrecisCritere = None
+ if dMacr_Conv.has_key('NUME_ORDRE_MIN'):
+ MacrNumeOrdre = dMacr_Conv['NUME_ORDRE_MIN']
+
+ #
+ # il faut 2 pas au minimum dans la liste
+ if (len(_liste_inst) < 2 ):
+ UTMESS('F','ECREVISSE0_20', vali=[2])
+
+ if (not IsPoursuite) :
+ _nume_ordre = 0
+ else :
+ # Dans le cas d'une poursuite :
+ # n reconstruit une nouvelle liste d'instant composee de l'ancienne liste jusqu'a l'instant recherche,
+ # puis de la nouvelle a partir de cet instant
+ # ainsi le _nume_ordre de la nouvelle liste correspond au nume_ordre de l'ancienne
+ __dico1 = __THINIT.LIST_VARI_ACCES()
+ _list_precedente = __dico1['INST']
+ _inst_init = _list_precedente[_nume_ordre-1]
+ try:
+ # si l'instant est dans la liste, on recupere l'index
+ _idx = _liste_inst.index(_inst_init)
+ except:
+ # on cherche le plus proche
+ idx = 0
+ found = False
+ for t in _liste_inst:
+ if t > _inst_init:
+ found = True
+ idx += 1
+ break
+ idx += 1
+ new_list = _list_precedente[0:_nume_ordre] # liste precedent jusqu'a l'instant a recalculer (inclu, ca permet de gerer le cas ou l'instant a recalculer n'est pas dans la nouvelle liste : il sera ajoute)
+ new_list.extend( _liste_inst[_idx+1:] ) # on lui ajoute la nouvelle liste a partir du l'instant a recalculer
+ _liste_inst = copy.copy(new_list)
+
+ ########################################################################################
+ # Debut boucle sur la liste d'instant
+ ########################################################################################
+ FinBoucle = False
+ while ( not FinBoucle ):
+ _inst = _liste_inst[_nume_ordre]
+ if ( debug ):
+ print 'Instant debut boucle', _inst
+ # On boucle jusqu'a convergence
+ NbIter = 0
+ while True:
+
+
+ if ( (not IsPoursuite) or EcrevisseExe) :
+ # Le temps que l'on traite
+ _inst_p_un = _liste_inst[_nume_ordre+1]
+ IsInitEcre= False
+ # Construction de la liste des pas
+ LES_PAS = DEFI_LIST_REEL( VALE=_liste_inst, )
+ if (debug):
+ print '=====> ===== ===== ===== <===='
+ print 'Iteration numero : ', NbIter
+ print 'Instant : ', _inst
+ print 'Instant+1 : ', _inst_p_un
+ print 'nume_ordre : ', _nume_ordre+1
+ print 'Donnee Ecrevisse : ', EcrevisseExe
+
+ # ---------------------
+ # THERMIQUE
+ # ---------------------
+ # Recuperation des chargements thermiques
+ _dEXCIT_THER = []
+ if EXCIT_THER:
+ for excit_i in EXCIT_THER:
+ dEXCIT_THER_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+ for j in dEXCIT_THER_i.keys():
+ if dEXCIT_THER_i[j]==None : del dEXCIT_THER_i[j]
+ _dEXCIT_THER.append(dEXCIT_THER_i)
+
+ #
+ # Definition des chargements thermiques venant d Ecrevisse
+ if ( EcrevisseExe ):
+ _dEXCIT_THER.append( _F(CHARGE=FLU1ECR0) )
+ _dEXCIT_THER.append( _F(CHARGE=FLU2ECR0) )
+
+ # Definition de l'etat initial
+ motclefs = {}
+ if (_nume_ordre == 0) :
+ # On verifie que temp_ref est bien renseigne dans AFFE_MATERIAU
+ try:
+ tref = CHAM_MATER['AFFE_VARC']['VALE_REF']
+ except:
+ UTMESS('F','ECREVISSE0_22',)
+
+ motclefs['ETAT_INIT']=[_F(VALE=tref, NUME_ORDRE=_nume_ordre)]
+ if ( debug ):
+ print 'thermique initialise avec tref'
+ else:
+ if (IsInit) :
+ motclefs['reuse']=__THINIT
+ motclefs['ETAT_INIT']=[_F(EVOL_THER=__THINIT, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'thermique initialise avec etat_initial'
+ else :
+ motclefs['reuse']=RTHERM
+ motclefs['ETAT_INIT']=[_F(EVOL_THER=RTHERM, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'thermique initialise avec instant precedent'
+
+ if (debug):
+ print '====> THER_LINEAIRE <===='
+ print ' Les charges thermiques'
+ print EXCIT_THER
+ #
+ if IsPoursuite :
+ __THINIT = THER_LINEAIRE(
+ MODELE = MODELE_THER,
+ CHAM_MATER = CHAM_MATER,
+ EXCIT = _dEXCIT_THER,
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs )
+
+ RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+ VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+ INFO=2,
+ )
+ RTHERM=__THINIT
+ else :
+ RTHERM=THER_LINEAIRE(
+ MODELE = MODELE_THER,
+ CHAM_MATER = CHAM_MATER,
+ EXCIT = _dEXCIT_THER,
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs
+ )
+
+ # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
+ RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+ VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+ INFO=2,
+ )
+
+ # Definition du materiau pour la mecanique : a faire une seule fois
+ if ( not IsDefineMaterMeca ):
+ motclefmater = {}
+ motclefmater['AFFE'] = []
+ motclefmater['AFFE_VARC'] = []
+
+ for j in CHAM_MATER['AFFE_VARC'] :
+ dvarc = j.cree_dict_valeurs(j.mc_liste)
+ for mc, val in dvarc.items():
+ if val == None:
+ del dvarc[mc]
+ motclefmater['AFFE_VARC'].append(dvarc)
+
+ for j in CHAM_MATER['AFFE'] :
+ daffe = j.cree_dict_valeurs(j.mc_liste)
+ for mc, val in daffe.items():
+ if val == None:
+ del daffe[mc]
+ motclefmater['AFFE'].append(daffe)
+
+
+ dvarc['EVOL'] = RTHERMPJ
+ motclefmater['MAILLAGE'] = CHAM_MATER['MAILLAGE']
+ __MATMEC=AFFE_MATERIAU(
+ **motclefmater
+ )
+ IsDefineMaterMeca = True
+
+ # ---------------------
+ # MECANIQUE
+ # ---------------------
+ _dEXCIT_MECA = []
+ # Recuperation des chargements mecaniques
+ if EXCIT_MECA:
+ for excit_i in EXCIT_MECA:
+ dEXCIT_MECA_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+ for j in dEXCIT_MECA_i.keys():
+ if dEXCIT_MECA_i[j]==None : del dEXCIT_MECA_i[j]
+ _dEXCIT_MECA.append(dEXCIT_MECA_i)
+
+
+ # Definition des chargements venant d'Ecrevisse
+ if ( EcrevisseExe ):
+ _dEXCIT_MECA.append( _F(CHARGE=MECAECR0) )
+
+ motclefs = {}
+
+ if (not IsPoursuite) :
+ if (_nume_ordre != 0):
+ motclefs['reuse'] = MECANIC
+ motclefs['ETAT_INIT']=[_F(EVOL_NOLI=MECANIC, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'etat meca initial = pas precedent'
+ else:
+ if (debug):
+ print 'etat meca initial : vierge'
+ else:
+ motclefs['reuse']=__EVINIT
+ motclefs['ETAT_INIT']=[_F(EVOL_NOLI=__EVINIT, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'etat meca initial dReuseM', motclefs
+
+ if (debug):
+ print '====> STAT_NON_LINE <===='
+ if (debug):
+ print ' Les charges mecaniques'
+ print _dEXCIT_MECA
+
+
+ MECANIC=STAT_NON_LINE(
+ MODELE = MODELE_MECA,
+ CHAM_MATER = __MATMEC,
+ CARA_ELEM = CARA_ELEM,
+ CONTACT = CONTACT,
+ EXCIT = _dEXCIT_MECA,
+ COMP_INCR = _F(**dCOMP_INCR),
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ NEWTON = _F(**dNEWTON),
+ CONVERGENCE = _F(**dCONVERGENCE),
+ SOLVEUR = _F(SYME='OUI'),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs
+ )
+ # Destruction des concepts
+ # Thermique projete
+ # Liste des pas
+ DETRUIRE( CONCEPT=(_F(NOM=RTHERMPJ),_F(NOM=LES_PAS),),INFO=1,ALARME='NON',)
+
+ else :
+ # CAS OU LA MACRO EST REENTRANTE : ON RELANCE ECREVISSE POUR CONNAITRE
+ # LES CHARGEMENT A UTILISER POUR LES PROBLEMES THERMIQUES ET MECANIQUES
+ _inst_p_un=_inst
+ IsInitEcre = True
+
+ # -----------------------------------------------------------------------
+ # ECREVISSE : ATTENTION SI REPRISE CALCUL, ON RECALCULE LE DERNIER INSTANT
+ # -------------------------------------------------------------------------
+ # Si Ecrevisse a deja ete fait une fois.
+ # ==> Efface les concepts qui sont en sortie
+ if ( EcrevisseExe ):
+ DETRUIRE(
+ CONCEPT=(
+ _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),INFO=1,ALARME='NON',
+ )
+
+ # On remplace FONC_XXX par la valeur XXX correspondante a l'instant _inst_p_un
+ dECOULEMENT_ecrevisse = copy.copy(dECOULEMENT)
+ for fonc_name in ["PRES_ENTREE_FO", "PRES_SORTIE_FO", "PRES_PART_FO", "TITR_MASS_FO", "TEMP_ENTREE_FO"]:
+ if dECOULEMENT.has_key(fonc_name):
+ fonc = dECOULEMENT_ecrevisse.pop(fonc_name)
+ vale_name = fonc_name.replace('_FO', '')
+ dECOULEMENT_ecrevisse[vale_name] = fonc(_inst_p_un)
+
+
+ # Initialisation des concepts en sortie
+ MECAECR1=CO('MECAECR1')
+ FLU1ECR1=CO('FLU1ECR1')
+ FLU2ECR1=CO('FLU2ECR1')
+ TABLECR1=CO('TABLECR1')
+ DEBIECR1=CO('DEBIECR1')
+
+ if (debug):
+ print '====> ECREVISSE entree dans CALC_ECREVISSE <===='
+
+ if (not IsPoursuite) :
+
+ CALC_ECREVISSE(
+ CHARGE_MECA = MECAECR1,
+ CHARGE_THER1 = FLU1ECR1,
+ CHARGE_THER2 = FLU2ECR1,
+ TABLE = TABLECR1,
+ DEBIT = DEBIECR1,
+ MODELE_MECA = MODELE_MECA,
+ MODELE_THER = MODELE_THER,
+ ENTETE = ENTETE,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ RESULTAT=_F(THERMIQUE = RTHERM,
+ MECANIQUE = MECANIC,
+ INST = _inst_p_un, ),
+ # chemin d acces a Ecrevisse
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ # donnees necessaire pour ecrevisse
+ # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+ # activation eventuelle de TITR_VA et P_AIR
+
+ FISSURE=l_dFISSURE,
+ ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+ MODELE_ECRE=_F( **dMODELE_ECRE),
+
+ CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+ **motclefsCALC_ECREVISSE
+ );
+ else :
+ CALC_ECREVISSE(
+ CHARGE_MECA = MECAECR1,
+ CHARGE_THER1 = FLU1ECR1,
+ CHARGE_THER2 = FLU2ECR1,
+ TABLE = TABLECR1,
+ DEBIT = DEBIECR1,
+ MODELE_MECA = MODELE_MECA,
+ MODELE_THER = MODELE_THER,
+ ENTETE = ENTETE,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ RESULTAT=_F(THERMIQUE = __THINIT,
+ MECANIQUE = __EVINIT,
+ INST = _inst_p_un, ),
+ # chemin d acces a Ecrevisse
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ # donnees necessaire pour ecrevisse
+ # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+ # activation eventuelle de TITR_VA et P_AIR
+
+ FISSURE=l_dFISSURE,
+ ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+ MODELE_ECRE=_F( **dMODELE_ECRE),
+
+ CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+ **motclefsCALC_ECREVISSE
+ );
+
+ if (debug):
+ print '====> ECREVISSE sortie de CALC_ECREVISSE <===='
+
+
+ # Recuperation des infos de la table resultat Ecrevisse
+ T_TABL_TMP1 = TABLECR1.EXTR_TABLE()
+ T_DEB_TMP1 = DEBIECR1.EXTR_TABLE()
+# # On ajoute deux colonnes supplementaires
+# _nb_ligne = len(T_DEB_TMP1["DEBTOT"])
+# T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*_nb_ligne
+# T_DEB_TMP1["INST"] = [_inst_p_un]*_nb_ligne
+
+ # Le calcul Ecrevisse c'est bien passe ?
+ EcrevisseExe = ( T_TABL_TMP1.values()['COTES'][0] != -1 )
+ #
+ if ( not EcrevisseExe ):
+ # Destruction des concepts de sortie, et on arrete tout
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),
+ INFO=1,ALARME='NON',
+ )
+ if ( not IsInit ):
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR0),
+ _F(NOM=FLU1ECR0),
+ _F(NOM=FLU2ECR0),
+ _F(NOM=TABLECR0),
+ _F(NOM=DEBIECR0),
+ ),
+ INFO=1,ALARME='NON',
+ )
+ FinBoucle = True
+ break
+ #
+ # A t'on atteint la convergence
+ # TABLECR0 table Ecrevisse a _inst
+ # TABLECR1 table Ecrevisse a _inst_p_un
+ # --------------------
+
+ if ( not IsInit ):
+ # On recupere la liste des temperatures a t et t+1
+ lst_T_0 = T_TABL_TMP0.values()['TEMP']
+ lst_T_1 = T_TABL_TMP1.values()['TEMP']
+ # Le maximum des ecarts
+ lst_T_diff_01 = []
+ for v1, v2 in zip(lst_T_0,lst_T_1):
+ lst_T_diff_01.append(abs(v1-v2))
+ max_T_diff_01 = max(lst_T_diff_01)
+
+ # On recupere la liste des pressions a t et t+1
+ lst_P_0 = T_TABL_TMP0.values()['PRESSION']
+ lst_P_1 = T_TABL_TMP1.values()['PRESSION']
+ # Le maximum des ecarts
+ lst_P_diff_01 = []
+ for v1, v2 in zip(lst_P_0,lst_P_1):
+ lst_P_diff_01.append(abs(v1-v2))
+ max_P_diff_01 = max(lst_P_diff_01)
+ #
+ # "TEMP_PRESS","EXPLICITE","TEMP","PRESS"
+ ErreurT = (max_T_diff_01/MacrTempRef)
+ ErreurP = (max_P_diff_01/MacrPresRef)
+ ErreurG = (ErreurT**2+ErreurP**2)**0.5
+ if ( MacrCritere == 'TEMP' ):
+ Erreur = ErreurT
+ elif ( MacrCritere == 'PRESS' ):
+ Erreur = ErreurP
+ else:
+ Erreur = ErreurG
+
+ if ( MacrCritere != 'EXPLICITE' ):
+ Convergence = ( Erreur <= MacrPrecisCritere )
+ #
+ if info2 :
+ # Info Critere
+ UTMESS('I', 'ECREVISSE0_35', valr=[_inst_p_un], valk=[MacrCritere,MacrPrecisCritere,Convergence])
+ # Info Convergence
+ UTMESS('I', 'ECREVISSE0_34', valr=[_inst_p_un,ErreurT,max_T_diff_01,ErreurP,max_P_diff_01,ErreurG])
+
+ else:
+ Convergence = True
+ if info2 :
+ UTMESS('I', 'ECREVISSE0_36', valr=[_inst_p_un])
+ # --------------------
+ #
+
+
+ if ( MacrCritere == 'EXPLICITE' ):
+ Convergence = True
+ else:
+ if ( (_nume_ordre != 0) and (_nume_ordre+1 <= MacrNumeOrdre) ):
+ UTMESS('A','ECREVISSE0_33', vali=[_nume_ordre+1,MacrNumeOrdre],valr=[_inst_p_un])
+ Convergence = True
+
+ if ( Convergence ):
+ nb_lignes_t1 = len(T_TABL_TMP1["COTES"])
+ # Ajout de deux colonnes supplementaires
+ # POUR LA TABLE ECREVISSE
+ T_TABL_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_lignes_t1
+ T_TABL_TMP1["INST"] = [_inst_p_un]*nb_lignes_t1
+
+ # POUR LA TABLE DES DEBITS
+ nb_ligne_t2 = len(T_DEB_TMP1["DEBTOT"])
+ T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_ligne_t2
+ T_DEB_TMP1["INST"] = [_inst_p_un]*nb_ligne_t2
+
+ #
+ # Ajout des infos dans la table finale
+ if ( IsInit ):
+ T_TABL_RES = T_TABL_TMP1
+ T_DEB_RES = T_DEB_TMP1
+ else:
+ T_TABL_RES = merge(T_TABL_RES, T_TABL_TMP1)
+ T_DEB_RES = merge(T_DEB_RES, T_DEB_TMP1)
+ T_TABL_RES.titr = 'TABLE_SDASTER CHARGEMENT ECREVISSE'
+ T_DEB_RES.titr = 'TABLE_SDASTER DEBIT ECREVISSE'
+ #
+ # RAZ des compteurs de division
+ NbIter = 0
+ # On memorise les concepts valides
+ MECAECR0 = MECAECR1
+ FLU1ECR0 = FLU1ECR1
+ FLU2ECR0 = FLU2ECR1
+ TABLECR0 = TABLECR1
+ DEBIECR0 = DEBIECR1
+ #
+ T_TABL_TMP0 = T_TABL_TMP1
+ if (not IsInitEcre) :
+ IsInit = False
+ if (info2):
+ UTMESS('I','ECREVISSE0_37', valr=[_inst_p_un])
+ break
+
+ else:
+ NbIter += 1
+ # A t'on le droit de decouper, par rapport au nombre de division
+ if ( NbIter > MacrNbDecoupage ):
+ FinBoucle = True
+ UTMESS('A','ECREVISSE0_30', valr=[_inst,_inst_p_un],vali=[MacrNbDecoupage])
+ break
+ #
+ # on divise le pas de temps par 2
+ tmp = (_inst + _inst_p_un )*0.5
+ # A t'on le droit de continuer, par rapport au pas de temps minimum
+ if ( (tmp - _inst) <= MacrPasMini ):
+ FinBoucle = True
+ UTMESS('A','ECREVISSE0_31', valr=[_inst,_inst_p_un,tmp,MacrPasMini])
+ break
+ #
+ if ( info2 ):
+ UTMESS('A','ECREVISSE0_32', valr=[_inst,_inst_p_un,tmp],vali=[NbIter])
+ # on insere le nouveau temps dans la liste des instants avant "_inst_p_un"
+ _liste_inst.insert(_nume_ordre+1,tmp)
+
+
+ # Convergence atteinte, on passe au pas de temps suivant, s'il en reste
+ if IsInitEcre :
+ continue
+ elif (_nume_ordre + 2 < len(_liste_inst)):
+ _nume_ordre += 1
+ else:
+ # On a fait tous les pas de temps
+ FinBoucle = True
+ #######################################################################################
+ # Fin boucle sur les pas de temps
+ #######################################################################################
+
+ # Creation du concept de la table en sortie
+ if ( T_TABL_RES != None ):
+ dprod = T_TABL_RES.dict_CREA_TABLE()
+ TABL_RES = CREA_TABLE(**dprod)
+ if ( T_DEB_RES != None ):
+ debprod = T_DEB_RES.dict_CREA_TABLE()
+ DEB_RES = CREA_TABLE(**debprod)
+
+ # Destruction des concepts temporaires
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),
+ INFO=1,ALARME='NON',
+ )
+
+ if (_nume_ordre != 0 ):
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR0),
+ _F(NOM=FLU1ECR0),
+ _F(NOM=FLU2ECR0),
+ _F(NOM=TABLECR0),
+ _F(NOM=DEBIECR0),
+ ),
+ INFO=1,ALARME='NON',
+ )
+
+ return ier
--- /dev/null
+#@ MODIF macr_fiab_impr_ops Macro DATE 24/01/2005 AUTEUR DURAND C.DURAND
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+#
+def macr_fiab_impr_ops(self, INFO,
+ TABLE_CIBLE, NOM_PARA_CIBLE, GRADIENTS, **args):
+#
+#
+# 1. args est le dictionnaire des arguments
+# args.keys() est la liste des mots-clés
+# args.keys()[0] est la premiere valeur de cette liste
+# args.keys()[1:] est la liste des valeurs suivantes dans cette liste
+# args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
+#
+ """ Macro-commande réalisant l'impression des valeurs pour le logiciel de fiabilite. """
+#
+# On charge les modules nécessaires
+ from Accas import _F
+#
+#____________________________________________________________________
+#
+# 1. Préalables
+#____________________________________________________________________
+#
+ erreur = 0
+#
+# 1.1 ==> La macro compte pour 1 dans l'exécution des commandes
+#
+ self.set_icmd(1)
+#
+# 1.2 ==> On importe les définitions des commandes Aster utilisées
+# dans la macro
+#
+ DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
+ IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+#
+# 1.3. ==> Des constantes
+# Atention : le numéro d'unité utilisé ici et celui
+# utlisé dans le python d'échange lance_aster_5
+# doivent correspondre.
+#
+ Unite_Fichier_ASTER_vers_FIABILITE = 91
+ Nom_Symbolique_Fichier_ASTER_vers_FIABILITE = "ASTER_vers_FIABILITE"
+ FORMAT_R="1PE17.10"
+#____________________________________________________________________
+#
+# 2. Définition d'un fichier d'échange
+#____________________________________________________________________
+#
+ DEFI_FICHIER ( ACTION= "ASSOCIER",
+# FICHIER = Nom_Symbolique_Fichier_ASTER_vers_FIABILITE,
+ UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+ TYPE = "ASCII",
+ INFO = INFO )
+#____________________________________________________________________
+#
+# 4. Ecriture de la valeur cible
+#____________________________________________________________________
+#
+ IMPR_TABLE ( TABLE = TABLE_CIBLE,
+ NOM_PARA = NOM_PARA_CIBLE,
+ UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+ FORMAT_R = FORMAT_R,
+ INFO = INFO )
+#____________________________________________________________________
+#
+# 5. Ecritures des gradients
+#____________________________________________________________________
+#
+ if GRADIENTS is not None :
+#
+ for val in GRADIENTS :
+#
+ IMPR_TABLE ( TABLE = val["TABLE"],
+ SENSIBILITE = val["PARA_SENSI"],
+ NOM_PARA = (val["NOM_PARA"]),
+ UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+ FORMAT_R = FORMAT_R,
+ INFO = INFO )
+#____________________________________________________________________
+#
+# 6. Libération du fichier d'échange
+#____________________________________________________________________
+#
+ DEFI_FICHIER ( ACTION= "LIBERER",
+ UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+ INFO = INFO )
+#
+#--------------------------------------------------------------------
+# 7. C'est fini !
+#--------------------------------------------------------------------
+#
+ return erreur
--- /dev/null
+#@ MODIF macr_fiabilite_ops Macro DATE 11/05/2010 AUTEUR COURTOIS 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
+
+import os
+import sys
+
+
+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 numpy
+#
+#____________________________________________________________________
+#
+# 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 définit un fichier pour les résultats du calcul de fiabilité
+#
+ FIC_RESU_FIABILITE = os.path.join(Rep_Calc_LOGICIEL_global, "resu_fiabilite")
+#
+# 2.3. ==> 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 la_variable 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 la_variable["LOI"] == "UNIFORME" :
+ v_moy_physique = 0.5 * ( la_variable["VALE_MIN"] + la_variable["VALE_MAX"] )
+ v_min_loi = la_variable["VALE_MIN"]
+ v_max_loi = la_variable["VALE_MAX"]
+#
+# 3.1.2. ==> loi normale : transfert des moyennne et écart-type.
+#
+ elif la_variable["LOI"] == "NORMALE" :
+ v_moy_loi = la_variable["VALE_MOY"]
+ v_moy_physique = v_moy_loi
+ sigma_loi = la_variable["ECART_TYPE"]
+#
+# 3.1.3. ==> loi lognormale : identité du min, conversion pour le reste
+#
+ elif la_variable["LOI"] == "LOGNORMALE" :
+ v_min_loi = la_variable["VALE_MIN"]
+ if la_variable["VALE_MOY_PHY"] is None :
+ v_moy_loi = la_variable["VALE_MOY"]
+ sigma_loi = la_variable["ECART_TYPE"]
+ aux = numpy.exp(0.5*sigma_loi*sigma_loi+v_moy_loi)
+ v_moy_physique = v_min_loi + aux
+ else :
+ v_moy_physique = la_variable["VALE_MOY_PHY"]
+ aux = la_variable["ECART_TYPE_PHY"]/(la_variable["VALE_MOY_PHY"]-la_variable["VALE_MIN"])
+ aux1 = 1. + aux*aux
+ aux2 = numpy.sqrt(aux1)
+ v_moy_loi = numpy.log((la_variable["VALE_MOY_PHY"]-la_variable["VALE_MIN"])/aux2)
+ aux2 = numpy.log(aux1)
+ sigma_loi = numpy.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 = la_variable["VALE_MOY"]
+ v_min_loi = la_variable["VALE_MIN"]
+ v_max_loi = la_variable["VALE_MAX"]
+ sigma_loi = la_variable["ECART_TYPE"]
+ v_moy_physique = 0.5 * ( la_variable["VALE_MIN"] + la_variable["VALE_MAX"] )
+#
+ dico = { }
+ dico["v_moy_physique"] = v_moy_physique
+ dico["v_moy_loi"] = v_moy_loi
+ dico["v_min_loi"] = v_min_loi
+ dico["v_max_loi"] = v_max_loi
+ dico["sigma_loi"] = sigma_loi
+ valeurs_lois[la_variable] = dico
+#
+#____________________________________________________________________
+#
+# 4. Création des fichiers de donnees 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 = VERSION.replace("_", ".").replace("N", "n")
+#
+ EXEC_LOGICIEL ( ARGUMENT = (Rep_Calc_LOGICIEL_global, # nom du repertoire
+ LOGICIEL, # nom du logiciel de fiabilité
+ VERSION, # version du logiciel de fiabilité
+ FIC_RESU_FIABILITE, # fichier des résultats 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.
+# Si le fichier n'a pas été rempli, on met une valeur nulle unique.
+#
+ if os.path.isfile(FIC_RESU_FIABILITE) :
+ liste_reel = []
+ fic = open(FIC_RESU_FIABILITE, "r")
+ tout = fic.readlines()
+ fic.close
+ for ligne in tout:
+ liste_reel.append(float(ligne[:-1]))
+ else :
+ liste_reel = [0.]
+#
+ self.DeclareOut("nomres", self.sd)
+ nomres = DEFI_LIST_REEL( VALE = liste_reel , INFO = 1 )
+#
+# 6.3. ==> Menage du répertoire créé pour le calcul fiabiliste
+#
+ liste = os.listdir(Rep_Calc_LOGICIEL_global)
+## print liste
+#
+ for nomfic in liste :
+ fic_total = os.path.join(Rep_Calc_LOGICIEL_global, nomfic)
+#
+ if os.path.isdir(fic_total) :
+ liste_bis = os.listdir(fic_total)
+ for nomfic_bis in liste_bis :
+ fic_total_bis = os.path.join(fic_total, nomfic_bis)
+ if os.path.islink(fic_total_bis) :
+ os.unlink (fic_total_bis)
+ else :
+ os.chmod (fic_total_bis, 0755)
+ os.remove (fic_total_bis)
+ os.rmdir (fic_total)
+#
+ elif os.path.isfile(fic_total) :
+ os.chmod (fic_total, 0755)
+ os.remove (fic_total)
+#
+ os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+ return
+#
+########################## Fin de la fonction##################################
+#
+########################## Auto-test##################################
+#
+if __name__ == "__main__" :
+#
+ import os
+ import sys
+ import tempfile
+#
+ Rep_Calc_LOGICIEL_global = tempfile.mktemp()
+ os.mkdir(Rep_Calc_LOGICIEL_global)
+#
+ classe = None
+ INFO = 2
+ LOGICIEL = "MEFISTO"
+ VERSION = "V3_2"
+ UNITE_ESCL = 38
+ MESS_ASTER = "DERNIER"
+ SEUIL = 1789.
+ SEUIL_TYPE = "MAXIMUM"
+ VARIABLE = []
+ args = {}
+#
+ lr8 = macr_fiabilite_ops(classe, INFO,
+ LOGICIEL, VERSION,
+ UNITE_ESCL, MESS_ASTER,
+ SEUIL, SEUIL_TYPE,
+ VARIABLE,
+ **args )
+### print "lr8 = ", lr8
+ Liste = os.listdir(Rep_Calc_LOGICIEL_global)
+#
+ for nomfic in Liste :
+ fic_total = os.path.join(Rep_Calc_LOGICIEL_global, nomfic)
+ os.chmod (fic_total, 0755)
+ os.remove (fic_total)
+ os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+ sys.exit("blabla")
--- /dev/null
+#@ MODIF macr_lign_coupe_ops Macro DATE 13/04/2010 AUTEUR PELLET 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.
+# ======================================================================
+
+########################################################################
+# script PYTHON de creation du résultat local
+########################################################################
+
+########################################################################
+# verification que les points de la ligne de coupe sont dans la matiere
+def crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou):
+
+ import aster
+ import os,string,types
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+ import os
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+
+ motscles={}
+ if m['NOM_CMP']!=None:
+ motscles['NOM_CMP']=m['NOM_CMP']
+ else:
+ motscles['TOUT_CMP']='OUI'
+ motscles['OPERATION']='EXTRACTION'
+
+ __tab=POST_RELEVE_T(ACTION=_F( INTITULE=newgrp,
+ RESULTAT = __remodr,
+ NOM_CHAM=NOM_CHAM,
+ GROUP_NO = groupe,**motscles ))
+
+ # dictb=table initiale (contenant éventuellement des noeuds hors matière)
+ dictb=__tab.EXTR_TABLE()
+ # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
+ listenoe_b = dictb.NOEUD.values()
+ # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
+ # (attention, on perd l'ordre des noeuds)
+ lno_b2 = set(listenoe_b)
+
+ # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
+ if m['NOM_CMP']!=None:
+ dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
+ lno_c2 = set(dictc.NOEUD.values())
+ else:# TOUT_CMP='OUI'
+ # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
+ a_suppr = set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
+ new_para = set(dictb.para)
+ new_para.difference_update(a_suppr)
+
+ lno_c2 = set()
+ for comp in new_para.difference(['NOEUD']):
+ dictc = getattr(dictb, comp).NON_VIDE()
+ lno_c2.update(dictc.NOEUD.values())
+
+ # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
+ # l_horsmat=liste des noeuds hors matière
+ l_matiere = [j for j in listenoe_b if j in lno_c2]
+ nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
+ l_horsmat = [j for j in listenoe_b if j not in lno_c2]
+
+ # si on est en présence de noeuds hors matière,
+ # on emet une alarme pour informer l'utilisateur
+ nbpoin=m['NB_POINTS']
+ reste=nbpoin-len(l_matiere)
+ if len(l_horsmat) > 0:
+
+ nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
+ cnom = list(__macou.NOMNOE.get())
+ l_coor = __macou.COORDO.VALE.get()
+ indent=os.linesep+' '*12
+ l_surlig = []
+ l_horslig = []
+ for j in l_matiere[:nderm+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_surlig.append(text_coordo)
+ for j in l_horsmat[:nderh+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_horslig.append(text_coordo)
+ UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
+
+ elif reste > 0:
+
+ cnom = list(__macou.NOMNOE.get())
+ l_coor = __macou.COORDO.VALE.get()
+ indent=os.linesep+' '*12
+ l_surlig = []
+ for j in l_matiere[:nderm+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_surlig.append(text_coordo)
+ UTMESS('A','POST0_24',vali=[iocc,reste],valk=[indent.join(l_surlig)])
+
+ __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
+ CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
+
+ return
+
+def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
+
+ from Utilitai.Utmess import UTMESS
+ from math import pi,sqrt,atan2,asin
+ import os,string,types
+ import aster
+ from Accas import _F
+ MODI_REPERE = self.get_cmd('MODI_REPERE')
+
+ epsi=0.00000001
+
+ if NOM_CHAM == 'DEPL':
+ if dime == 2:
+ LCMP=['DX','DY']
+ TYPE_CHAM='VECT_2D'
+ elif dime ==3 :
+ LCMP=['DX','DY','DZ']
+ TYPE_CHAM='VECT_3D'
+ elif NOM_CHAM in ('SIGM_NOEU_DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):
+ if dime == 2:
+ LCMP=['SIXX','SIYY','SIZZ','SIXY']
+ TYPE_CHAM='TENS_2D'
+ elif dime ==3 :
+ LCMP=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+ TYPE_CHAM='TENS_3D'
+
+
+ if m['TYPE']=='SEGMENT' and m['REPERE'] != 'CYLINDRIQUE' :
+
+ if m['REPERE'] == 'LOCAL':
+ # --- determination des angles nautiques
+ cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0]
+ cx2=m['COOR_EXTR'][1]-m['COOR_ORIG'][1]
+ cx3=0.
+ if dime == 3:
+ cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2]
+ nvx=sqrt(cx1**2+cx2**2+cx3**2)
+ if abs(nvx) < epsi:
+ UTMESS('F','POST0_1')
+ cx1=cx1/nvx
+ cx2=cx2/nvx
+ cx3=cx3/nvx
+ cy1=m['VECT_Y'][0]
+ cy2=m['VECT_Y'][1]
+ cy3=0.
+ if dime == 3:
+ cy3=m['VECT_Y'][2]
+ nvy=sqrt(cy1**2+cy2**2+cy3**2)
+ if abs(nvy) < epsi:
+ UTMESS('F','POST0_2')
+ cy1=cy1/nvy
+ cy2=cy2/nvy
+ cy3=cy3/nvy
+ if ((abs(cx1-cy1)<epsi and abs(cx2-cy2)<epsi and abs(cx3-cy3)<epsi) or \
+ (abs(cx1+cy1)<epsi and abs(cx2+cy2)<epsi and abs(cx3+cy3)<epsi)):
+ UTMESS('F','POST0_3')
+ if abs(cx1*cy1+cx2*cy2+cx3*cy3) > epsi :
+ cz1=cx2*cy3-cx3*cy2
+ cz2=cx3*cy1-cx1*cy3
+ cz3=cx1*cy2-cx2*cy1
+ nvz=sqrt(cz1**2+cz2**2+cz3**2)
+ cz1=cz1/nvz
+ cz2=cz2/nvz
+ cz3=cz3/nvz
+ cy1=cz2*cx3-cz3*cx2
+ cy2=cz3*cx1-cz1*cx3
+ cy3=cz1*cx2-cz2*cx1
+ nvy=sqrt(cy1**2+cy2**2+cy3**2)
+ cy1=cy1/nvy
+ cy2=cy2/nvy
+ cy3=cy3/nvy
+ UTMESS('A','POST0_4',valr=[cy1,cy2,cy3])
+ else:
+ cz1=cx2*cy3-cx3*cy2
+ cz2=cx3*cy1-cx1*cy3
+ cz3=cx1*cy2-cx2*cy1
+ beta=0.
+ gamma=0.
+ if dime ==2:
+ alpha = atan2(cx2,cx1)
+ else:
+ if cx1**2 + cx2**2 > epsi :
+ alpha=atan2(cx2,cx1)
+ beta=-asin(cx3)
+ gamma=atan2(cy3,cz3)
+ else:
+ alpha=atan2(-cy1,cy2)
+ beta=-asin(cx3)
+ gamma=0.
+ alpha=alpha*180/pi
+ beta=beta*180/pi
+ gamma=gamma*180/pi
+
+ elif m['REPERE'] == 'UTILISATEUR':
+ alpha=m['ANGL_NAUT'][0]
+ beta =m['ANGL_NAUT'][1]
+ gamma=m['ANGL_NAUT'][2]
+
+ motscles={}
+ motscles['MODI_CHAM']=[]
+ motscles['DEFI_REPERE']=[]
+ motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+ ANGL_NAUT=[]
+ ANGL_NAUT.append(alpha)
+ if dime ==3:
+ ANGL_NAUT.append(beta)
+ ANGL_NAUT.append(gamma)
+ motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+ __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+
+
+ if m['TYPE']=='ARC':
+ if m['REPERE'] == 'CYLINDRIQUE' :
+ motscles={}
+ motscles['MODI_CHAM']=[]
+ motscles['DEFI_REPERE']=[]
+ motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+ ORIGINE=[]
+ ORIGINE.append(m['CENTRE'][0])
+ ORIGINE.append(m['CENTRE'][1])
+ if dime ==3:
+ ORIGINE.append(m['CENTRE'][2])
+ AXE_Z=[]
+ AXE_Z.append(m['DNOR'][0])
+ AXE_Z.append(m['DNOR'][1])
+ AXE_Z.append(m['DNOR'][2])
+ motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,AXE_Z=AXE_Z),)
+ elif dime ==2:
+ motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),)
+ __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+ else :
+ UTMESS('F','POST0_5',valk=[m['TYPE'],m['REPERE']])
+
+
+
+ if m['TYPE'][:5]=='GROUP' or m['TYPE']=='SEGMENT':
+
+ if m['TYPE'][:5]=='GROUP' and m['REPERE'] == 'LOCAL':
+ # determination du repère local (v1,v2,v3)
+ # ---------------------------------------
+ noma=mail.nom
+ collgrma=aster.getcolljev(noma.ljust(8)+'.GROUPEMA')
+ collcnx =aster.getcolljev(noma.ljust(8)+'.CONNEX')
+ coord =aster.getvectjev(noma.ljust(8)+'.COORDO .VALE')
+ cnom =aster.getvectjev(noma.ljust(8)+'.NOMNOE')
+
+ numa=collgrma[nomgrma.ljust(8)]
+ dictu={}
+# initialisations
+ for ima in numa:
+ n1=collcnx[ima][0]
+ n2=collcnx[ima][1]
+ dictu[n1]=[]
+ dictu[n2]=[]
+# determination du vecteur tangent (v1) + normalisation
+ for ima in numa:
+ vectu1=[]
+ vectu2=[]
+ n1=collcnx[ima][0]
+ n2=collcnx[ima][1]
+ ux=coord[3*(n2-1)]-coord[3*(n1-1)]
+ uy=coord[3*(n2-1)+1]-coord[3*(n1-1)+1]
+ vectu1.append(ux)
+ vectu1.append(uy)
+ vectu2.append(ux)
+ vectu2.append(uy)
+ if dime ==3 :
+ uz=coord[3*(n2-1)+2]-coord[3*(n1-1)+2]
+ vectu1.append(uz)
+ vectu2.append(uz)
+ dictu[n1].append(vectu1)
+ dictu[n2].append(vectu2)
+ for i in dictu:
+ if len(dictu[i])==2:
+ dictu[i][0][0]=dictu[i][0][0]+dictu[i][1][0]
+ dictu[i][0][1]=dictu[i][0][1]+dictu[i][1][1]
+ if dime==3:dictu[i][0][2]=dictu[i][0][2]+dictu[i][1][2]
+ del dictu[i][1]
+ for i in dictu:
+ if dime==2:
+ norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2)
+ dictu[i][0][0]=dictu[i][0][0]/norm
+ dictu[i][0][1]=dictu[i][0][1]/norm
+ elif dime==3:
+ norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2+dictu[i][0][2]**2)
+ dictu[i][0][0]=dictu[i][0][0]/norm
+ dictu[i][0][1]=dictu[i][0][1]/norm
+ dictu[i][0][2]=dictu[i][0][2]/norm
+# determination du vecteur normal (v2):
+# on projete VECT_Y sur le plan orthogonal au vecteur v1.
+# (ce vecteur normal est obtenu par 2 produits vectoriels successifs en 3D)
+ if dime==3:
+ norm=sqrt(m['VECT_Y'][0]**2+m['VECT_Y'][1]**2+m['VECT_Y'][2]**2)
+ tmpy=[m['VECT_Y'][0]/norm,m['VECT_Y'][1]/norm,m['VECT_Y'][2]/norm]
+ j=0
+ __resu=[None]*(len(dictu)+1)
+ __resu[0]=resin
+ for i in dictu:
+ j=j+1
+ vecty=[]
+ if dime==2:
+ vecty.append(-dictu[i][0][1])
+ vecty.append(dictu[i][0][0])
+ dictu[i].append(vecty)
+ elif dime==3:
+ # v3= v1 vectoriel vect_y
+ vectz=[]
+ vectz.append(dictu[i][0][1]*tmpy[2]-dictu[i][0][2]*tmpy[1])
+ vectz.append(dictu[i][0][2]*tmpy[0]-dictu[i][0][0]*tmpy[2])
+ vectz.append(dictu[i][0][0]*tmpy[1]-dictu[i][0][1]*tmpy[0])
+ normz=sqrt(vectz[0]**2+vectz[1]**2+vectz[2]**2)
+ vectz[0]=vectz[0]/normz
+ vectz[1]=vectz[1]/normz
+ vectz[2]=vectz[2]/normz
+ vecty.append(vectz[1]*dictu[i][0][2]-vectz[2]*dictu[i][0][1])
+ vecty.append(vectz[2]*dictu[i][0][0]-vectz[0]*dictu[i][0][2])
+ vecty.append(vectz[0]*dictu[i][0][1]-vectz[1]*dictu[i][0][0])
+ normy=sqrt(vecty[0]**2+vecty[1]**2+vecty[2]**2)
+ vecty[0]=vecty[0]/normy
+ vecty[1]=vecty[1]/normy
+ vecty[2]=vecty[2]/normy
+ dictu[i].append(vecty)
+ dictu[i].append(vectz)
+ cx1=dictu[i][0][0]
+ cx2=dictu[i][0][1]
+ cy1=dictu[i][1][0]
+ cy2=dictu[i][1][1]
+ if dime==3:
+ cx3=dictu[i][0][2]
+ cy3=dictu[i][1][2]
+ cz1=dictu[i][2][0]
+ cz2=dictu[i][2][1]
+ cz3=dictu[i][2][2]
+
+ # determination des angles nautiques (alpha,beta,gamma)
+ # ----------------------------------------------------
+ beta=0.
+ gamma=0.
+ if dime ==2:
+ alpha = atan2(cx2,cx1)
+ else:
+ if cx1**2 + cx2**2 > epsi :
+ alpha=atan2(cx2,cx1)
+ beta=-asin(cx3)
+ gamma=atan2(cy3,cz3)
+ else:
+ alpha=atan2(-cy1,cy2)
+ beta=-asin(cx3)
+ gamma=0.
+ alpha=alpha*180/pi
+ beta=beta*180/pi
+ gamma=gamma*180/pi
+ motscles={}
+ motscles['MODI_CHAM']=[]
+ motscles['DEFI_REPERE']=[]
+ noeu=dictu.keys()
+ motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM,NOEUD=cnom[noeu[j-1]-1]),)
+ ANGL_NAUT=[]
+ ANGL_NAUT.append(alpha)
+ if dime ==3:
+ ANGL_NAUT.append(beta)
+ ANGL_NAUT.append(gamma)
+ motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+ __resu[j]=MODI_REPERE(RESULTAT=__resu[j-1],**motscles)
+ __remodr=__resu[j]
+
+
+ motscles={}
+ motscles['MODI_CHAM']=[]
+ motscles['DEFI_REPERE']=[]
+ motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+ if m['REPERE'] == 'CYLINDRIQUE' :
+ if dime ==3:
+ motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],AXE_Z=m['AXE_Z']),)
+ elif dime ==2:
+ motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],),)
+ __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+ elif m['REPERE'] == 'UTILISATEUR':
+ alpha=m['ANGL_NAUT'][0]
+ beta =m['ANGL_NAUT'][1]
+ gamma=m['ANGL_NAUT'][2]
+ ANGL_NAUT=[]
+ ANGL_NAUT.append(alpha)
+ if dime ==3:
+ ANGL_NAUT.append(beta)
+ ANGL_NAUT.append(gamma)
+ motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+ __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+
+
+ return __remodr
+
+########################################################################
+# script PYTHON de creation des noeuds d'une ligne de coupe 'arc'
+
+def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
+ from Utilitai.Utmess import UTMESS
+ from math import pi,sin,cos,sqrt
+
+ a=pt1[0]-pt2[0]
+ b=pt1[1]-pt2[1]
+ eps=0.00000001
+ anglr=anglj*pi/180.
+ if dimension==2:
+ r=sqrt(a**2+b**2)
+ if abs(r)<eps:
+ UTMESS('F','POST0_6')
+ x=pt2[0]+a*cos(anglr)-b*sin(anglr)
+ y=pt2[1]+b*cos(anglr)+a*sin(anglr)
+ return x,y
+ elif dimension==3:
+ c=pt1[2]-pt2[2]
+ r=sqrt(a**2+b**2+c**2)
+ if abs(r)<eps:
+ UTMESS('F','POST0_6')
+ d1=dnor[0]
+ d2=dnor[1]
+ d3=dnor[2]
+ d=sqrt(d1**2+d2**2+d3**2)
+ if abs(r)<eps:
+ UTMESS('F','POST0_7')
+ x=pt2[0]+a*cos(anglr)+sin(anglr)*(c*d2-b*d3)/d
+ y=pt2[1]+b*cos(anglr)+sin(anglr)*(a*d3-c*d1)/d
+ z=pt2[2]+c*cos(anglr)+sin(anglr)*(b*d1-a*d2)/d
+ return x,y,z
+########################################################################
+# determination de la distance min entre 2 points consécutifs de la ligne de coupe
+
+def dist_min_deux_points(mail):
+ from math import sqrt
+ import aster
+ nno=aster.getvectjev(mail.nom.ljust(8)+'.DIME')[0]
+ l_coor1=[]
+ l_coor2=[]
+ for i in range(nno-1):
+ l_coor1=aster.getvectjev(mail.nom.ljust(8)+'.COORDO .VALE',3*(i),3)
+ l_coor2=aster.getvectjev(mail.nom.ljust(8)+'.COORDO .VALE',3*(i+1),3)
+ d=sqrt( (l_coor1[0]-l_coor2[0])**2+(l_coor1[1]-l_coor2[1])**2+(l_coor1[2]-l_coor2[2])**2)
+ if i == 0 : dist=d
+ else : dist=min(d,dist)
+ return dist
+
+########################################################################
+# script PYTHON de creation d un maillage de ligne de coupe
+
+def crea_mail_lig_coup(dimension,lignes,groups,arcs):
+
+ import os,sys,copy
+ from Utilitai.Utmess import UTMESS
+
+# construction du maillage au format Aster des segments de lignes de coupe
+
+ nblig=len(lignes)
+ nbngr=len(groups)
+ nbarc=len(arcs)
+
+ resu='TITRE\n'
+ titre='Maillage ligne de coupe'+'\n'
+ resu=resu+'FINSF\n'
+ resu=resu+'COOR_'+str(dimension)+'D\n'
+ epsi=0.00000001
+
+# 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
+ angles=[None]*nbarc
+ for i in range(nbarc):
+ pt1 = arcs[i][0]
+ pt2 = arcs[i][1]
+ nbp_lig_coupe = arcs[i][2]
+ angle = arcs[i][3]
+ if abs(angle-360.)<epsi: nbpt=nbp_lig_coupe+1
+ else : nbpt=nbp_lig_coupe
+ if dimension==3:dnor=arcs[i][4]
+ angles[i] = []
+ for j in range(nbp_lig_coupe):
+ anglj = j*angle/(nbpt-1)
+ angles[i].append(anglj)
+ if dimension==2:
+ nbno=nbno+1
+ x,y=crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor=[])
+ noeud=' N'+str(nbno)+' '+str(x)+' '+str(y)+'\n'
+ resu=resu+noeud
+ elif dimension==3:
+ nbno=nbno+1
+ x,y,z=crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor)
+ noeud=' N'+str(nbno)+' '+str(x)+' '+str(y)+' '+str(z)+'\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'
+ nprec=0
+
+ for i in range(nbarc):
+ nbp_lig_coupe = arcs[i][2]
+ angle = arcs[i][3]
+ resu=resu+'SEG2\n'
+ nbmai=nbma+nblig+nbngr+nprec+i+1
+ for j in range(nbp_lig_coupe-1):
+ nbma=nbma+1
+ maille=' M'+str(nbma)+' N'+str(nbma+nblig+nbngr+nprec+i)+' N'+str(nbma+nblig+nbngr+nprec+1+i)+'\n'
+ resu=resu+maille
+ if abs(angle-360.)<epsi:
+ nbma=nbma+1
+ maille=' M'+str(nbma)+' N'+str(nbma+nblig+nbngr+nprec+i)+' N'+str(nbmai)+'\n'
+ nprec=nprec-1
+ 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'
+ arcgma=[]
+ for i in range(nbarc):
+ resu=resu+'GROUP_MA\n'
+ k=nblig+i
+ resu=resu+' LICOU'+str(k+1)
+ arcgma.append('LICOU'+str(k+1))
+ nbp_lig_coupe = arcs[i][2]
+ angle = arcs[i][3]
+ if abs(angle-360.)<epsi: nbpt=nbp_lig_coupe+1
+ else : nbpt=nbp_lig_coupe
+ for j in range(nbpt-1):
+ nbma=nbma+1
+ resu=resu+' M'+str(nbma)+'\n'
+ resu=resu+'\n'
+ resu=resu+'FINSF\n'
+ resu=resu+'FIN\n'
+
+ return resu,arcgma,angles,nbno
+
+
+########################################################################
+def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,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,math
+ from Utilitai.UniteAster import UniteAster
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ 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')
+ CREA_RESU =self.get_cmd('CREA_RESU')
+ CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ #
+ MasquerAlarme('CALCULEL2_63')
+ MasquerAlarme('CALCULEL2_64')
+ MasquerAlarme('MODELISA5_53')
+
+ mcORDR={}
+
+ if RESULTAT != None:
+ if args['NUME_ORDRE'] != None :
+ mcORDR['NUME_ORDRE']=args['NUME_ORDRE']
+ elif args['LIST_ORDRE'] != None:
+ mcORDR['LIST_ORDRE']=args['LIST_ORDRE']
+ elif args['INST'] != None:
+ mcORDR['INST']=args['INST']
+ elif args['INST'] != None:
+ mcORDR['INST']=args['INST']
+ elif args['LIST_INST'] != None:
+ mcORDR['LIST_INST']=args['LIST_INST']
+ else :
+ mcORDR['TOUT_ORDRE']='OUI'
+
+ nomresu=RESULTAT.nom
+ iret,ibid,n_modele = aster.dismoi('F','MODELE',nomresu,'RESULTAT')
+ n_modele=n_modele.strip()
+ if n_modele=='' :
+ if MODELE==None:
+ UTMESS('F','POST0_9',valk=nomresu)
+ else : n_modele=MODELE.nom
+
+ elif CHAM_GD != None:
+ mcORDR['TOUT_ORDRE']='OUI'
+ if MODELE==None:
+ UTMESS('F','POST0_10')
+ else : n_modele=MODELE.nom
+ # récupération de la grandeur du champ
+ n_cham=CHAM_GD.nom
+ catagd=aster.getvectjev("&CATA.GD.NOMGD")
+ desc=aster.getvectjev(string.ljust(n_cham,19)+'.DESC')
+ if desc!= None:
+ nomgd=catagd[desc[0]-1]
+ else:
+ celd=aster.getvectjev(string.ljust(n_cham,19)+'.CELD')
+ nomgd=catagd[celd[0]-1]
+ # détermination du type de résultat à créer
+ if nomgd[:6] == 'TEMP_R' : TYPE_RESU='EVOL_THER'
+ elif nomgd[:6] == 'DEPL_R' : TYPE_RESU='EVOL_ELAS'
+ elif nomgd[:6] == 'EPSI_R' : TYPE_RESU='EVOL_ELAS'
+ elif nomgd[:6] == 'VAR2_R' : TYPE_RESU='EVOL_NOLI'
+ elif nomgd[:6] == 'VARI_R' : TYPE_RESU='EVOL_NOLI'
+ elif nomgd[:6] == 'SIEF_R' :
+ if NOM_CHAM[:4]=='SIGM':TYPE_RESU='EVOL_ELAS'
+ elif NOM_CHAM[:4]=='SIEF':TYPE_RESU='EVOL_NOLI'
+ # création d'un concept résultat à partir du champ CHAM_GD
+ __resuch=CREA_RESU(OPERATION='AFFE',
+ NOM_CHAM=NOM_CHAM, TYPE_RESU=TYPE_RESU,
+ AFFE=_F(CHAM_GD=CHAM_GD,INST=0.),)
+ RESULTAT=__resuch
+ l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE .LGRF')
+ n_mailla=string.strip(l_mailla[0])
+ # le maillage est-il 2D ou 3D ?
+ iret,dime,kbid = aster.dismoi('F','DIM_GEOM',n_mailla,'MAILLAGE')
+ collgrma=aster.getcolljev(n_mailla.ljust(8)+'.GROUPEMA')
+ typma=aster.getvectjev(n_mailla.ljust(8)+'.TYPMAIL')
+ connex=aster.getcolljev(n_mailla.ljust(8)+'.CONNEX')
+ ltyma =aster.getvectjev("&CATA.TM.NOMTM")
+
+ lignes=[]
+ groups=[]
+ arcs=[]
+ minidim=dime
+
+ for m in LIGN_COUPE :
+ if m['TYPE'] =='SEGMENT' :
+ lignes.append((m['COOR_ORIG'],m['COOR_EXTR'],m['NB_POINTS']))
+ minidim=min(minidim,len(m['COOR_ORIG']),len(m['COOR_EXTR']))
+ if minidim!=dime:
+ UTMESS('F','POST0_11')
+ elif m['TYPE'] =='ARC' :
+ minidim=min(minidim,len(m['COOR_ORIG']),len(m['CENTRE']))
+ if minidim!=dime:
+ UTMESS('F','POST0_11')
+ if dime==2:
+ arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],))
+ elif dime==3:
+ if str(m['DNOR'])=='None':
+ UTMESS('F','POST0_12')
+ arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],m['DNOR']))
+ elif m['TYPE']=='GROUP_NO':
+ ngrno=m['GROUP_NO'].ljust(8).upper()
+ collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO')
+ if ngrno not in collgrno.keys() :
+ UTMESS('F','POST0_13',valk=[ngrno,n_mailla])
+ 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)
+ elif m['TYPE']=='GROUP_MA':
+ ngrma=m['GROUP_MA'].ljust(8).upper()
+ if ngrma not in collgrma.keys() :
+ UTMESS('F','POST0_14',valk=[ngrma,n_mailla])
+ grpm=collgrma[ngrma]
+ for ma in grpm:
+ if ltyma[typma[ma-1]-1][:3] != 'SEG' :
+ nomma=aster.getvectjev(n_mailla.ljust(8)+'.NOMMAI')
+ UTMESS('F','POST0_15',valk=[ngrma,nomma[ma-1]])
+ __mailla=CREA_MAILLAGE(MAILLAGE= m['MAILLAGE'],)
+ __mailla=DEFI_GROUP( reuse=__mailla,MAILLAGE= __mailla,
+ CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',NOM=str(m['GROUP_MA']),GROUP_MA=m['GROUP_MA']),)
+ collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO')
+ grpn=collgrno[str(m['GROUP_MA']).ljust(8)]
+ l_coor_group=[ngrma,]
+ 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 arcs!=[] and (lignes!=[] or groups!=[]) :
+ UTMESS('F','POST0_16')
+
+ # 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,arcgma,angles,nbno=crea_mail_lig_coup(dime,lignes,groups,arcs)
+ UL = UniteAster()
+ nomFichierSortie = UL.Nom(UNITE_MAILLAGE)
+ fproc=open(nomFichierSortie,'w')
+ fproc.write(resu_mail)
+ fproc.close()
+ UL.EtatInit(UNITE_MAILLAGE)
+
+ # Lecture du maillage de seg2 contenant toutes les lignes de coupe
+ __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,);
+
+ # distance min entre 2 points de la ligne de coupe (utile pour PROJ_CHAMP)
+ dmin=dist_min_deux_points(__macou)
+
+ motscles={}
+ iocc=1
+ motscles['CREA_GROUP_NO']=[]
+ for m in LIGN_COUPE :
+ if m['TYPE'] in ('GROUP_NO','GROUP_MA') :
+ motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=m[m['TYPE']].ljust(8).upper(),) )
+ else :
+ motscles['CREA_GROUP_NO'].append(_F(GROUP_MA='LICOU'+str(iocc),) )
+ iocc=iocc+1
+
+ __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',),);
+
+ motscles={}
+ motscles['VIS_A_VIS']=[]
+ motscles[mcORDR.keys()[0]]=mcORDR.values()[0]
+ if args['VIS_A_VIS']!=None:
+ for v in args['VIS_A_VIS']:
+ if v['GROUP_MA_1']!=None:
+ motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),)
+ elif v['MAILLE_1']!=None:
+ motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),)
+
+ if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele]
+ else : MODELE_1=self.jdc.current_context[n_modele]
+
+
+ if NOM_CHAM[5:9]=='ELGA' : UTMESS('F','POST0_18',valk=[NOM_CHAM,])
+
+ __recou=PROJ_CHAMP(METHODE='ELEM',
+ RESULTAT=RESULTAT,
+ MODELE_1=MODELE_1,
+ DISTANCE_MAX=m['DISTANCE_MAX'],
+ MODELE_2=__mocou,
+ TYPE_CHAM='NOEU',
+ NOM_CHAM=NOM_CHAM, **motscles);
+
+ __remodr=__recou
+ icham=0
+ ioc2=0
+ mcACTION=[]
+ angtab=[]
+
+ if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
+
+ if NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
+ iocc=0
+ for m in LIGN_COUPE :
+
+ iocc=iocc+1
+ motscles={}
+ motscles['OPERATION']=m['OPERATION']
+ if m['NOM_CMP']!=None:
+ motscles['NOM_CMP']=m['NOM_CMP']
+ if m['TRAC_NOR']!=None:
+ motscles['TRAC_NOR']=m['TRAC_NOR']
+ elif m['TRAC_DIR']!=None:
+ motscles['TRAC_DIR']=m['TRAC_DIR']
+ motscles['DIRECTION']=m['DIRECTION']
+ elif m['INVARIANT']!=None:
+ motscles['INVARIANT']=m['INVARIANT']
+ elif m['RESULTANTE']!=None:
+ motscles['RESULTANTE']=m['RESULTANTE']
+ elif m['ELEM_PRINCIPAUX']!=None:
+ motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX']
+ else:
+ motscles['TOUT_CMP']='OUI'
+
+ # on définit le groupe de noeud pour post_releve_t
+ if m['TYPE'] in ('GROUP_NO','GROUP_MA'):
+ groupe=m[m['TYPE']].ljust(8).upper()
+ nomgrma=groupe
+ else:
+ ioc2=ioc2+1
+ groupe='LICOU'+str(ioc2)
+ nomgrma=' '
+ newgrp='LICOF'+str(ioc2)
+ crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
+ groupe=newgrp
+
+ # on definit l'intitulé
+ if m['INTITULE'] !=None : intitl=m['INTITULE']
+ elif m['TYPE'] in ('GROUP_NO','GROUP_MA') : intitl=groupe
+ else : intitl='l.coupe'+str(ioc2)
+
+
+ # Expression des contraintes aux noeuds ou des déplacements dans le repere local
+ if m['REPERE'] != 'GLOBAL':
+
+ if icham==1:
+
+ if m['REPERE']=='POLAIRE':
+ mcACTION.append( _F(INTITULE = intitl,
+ RESULTAT = __remodr,
+ REPERE = m['REPERE'],
+ GROUP_NO = groupe,
+ NOM_CHAM = NOM_CHAM,**motscles ),)
+ else:
+ __remodr=crea_resu_local(self,dime,NOM_CHAM,m,__recou,__macou,nomgrma)
+ mcACTION.append( _F(INTITULE = intitl,
+ RESULTAT = __remodr,
+ GROUP_NO = groupe,
+ NOM_CHAM = NOM_CHAM,**motscles ),)
+
+ else:
+ UTMESS('A','POST0_17',valk=[NOM_CHAM,m['REPERE']])
+ mcACTION.append( _F(INTITULE = intitl,
+ RESULTAT = __recou,
+ GROUP_NO = groupe,
+ NOM_CHAM = NOM_CHAM,**motscles ),)
+
+ # Expression des contraintes aux noeuds ou des déplacements dans le repere global
+ else:
+
+ mcACTION.append( _F(INTITULE = intitl,
+ RESULTAT = __recou,
+ GROUP_NO = groupe,
+ NOM_CHAM = NOM_CHAM,**motscles ),)
+
+
+ elif AsType(RESULTAT).__name__ in ('evol_ther',) :
+ iocc=0
+ for m in LIGN_COUPE :
+
+ iocc=iocc+1
+ motscles={}
+ motscles['OPERATION']=m['OPERATION']
+ if m['NOM_CMP']!=None:
+ motscles['NOM_CMP']=m['NOM_CMP']
+ if m['TRAC_NOR']!=None:
+ motscles['TRAC_NOR']=m['TRAC_NOR']
+ elif m['TRAC_DIR']!=None:
+ motscles['TRAC_DIR']=m['TRAC_DIR']
+ motscles['DIRECTION']=m['DIRECTION']
+ elif m['INVARIANT']!=None:
+ motscles['INVARIANT']=m['INVARIANT']
+ elif m['RESULTANTE']!=None:
+ motscles['RESULTANTE']=m['RESULTANTE']
+ elif m['ELEM_PRINCIPAUX']!=None:
+ motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX']
+ else:
+ motscles['TOUT_CMP']='OUI'
+
+ if m['TYPE'] not in ('GROUP_NO','GROUP_MA') :
+ ioc2=ioc2+1
+ groupe='LICOU'+str(ioc2)
+ newgrp='LICOF'+str(ioc2)
+ crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
+ groupe=newgrp
+ if m['INTITULE'] !=None : intitl=m['INTITULE']
+ else : intitl='l.coupe'+str(ioc2)
+ else:
+ groupe=m[m['TYPE']].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, **motscles ),)
+
+ __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()
+### Ajout de la colonne theta
+ if len(arcgma)>0:
+ coltab=[]
+ val = dictab['ABSC_CURV'].values()['ABSC_CURV']
+ nbi = len(val) / nbno
+ nba = len(angles)
+ tmp =[]
+ for k in range(nba) :
+ for j in range(nbi) :
+ for i in range(len(angles[k])) :
+ tmp.append(angles[k][i])
+ dictab['ANGLE']=tmp
+
+###
+
+ if 'RESU' in dictab.para:
+ del dictab['RESU']
+ if 'NOEUD' in dictab.para:
+ del dictab['NOEUD']
+ dprod = dictab.dict_CREA_TABLE()
+
+ nomres=CREA_TABLE(**dprod)
+
+ RetablirAlarme('CALCULEL2_63')
+ RetablirAlarme('CALCULEL2_64')
+ RetablirAlarme('MODELISA5_53')
+ return ier
--- /dev/null
+#@ MODIF macr_recal_ops Macro DATE 26/05/2010 AUTEUR ASSIRE A.ASSIRE
+# -*- 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.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+import os
+import sys
+import copy
+import math
+import glob
+
+import numpy as NP
+
+debug = False
+
+INFO = 1
+NOMPRO = 'MACR_RECAL'
+
+
+# --------------------------------------------------------------------------------------------------
+def Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess):
+ """ Sortie de la macro, on renvoie les parametres obtenus """
+
+ import Cata, aster, Macro
+ from Cata.cata import DEFI_LIST_REEL
+ from Accas import _F
+ from Macro import reca_message
+ from Macro import reca_algo
+ from Macro import reca_interp
+ from Macro import reca_utilitaires
+ from Macro import reca_calcul_aster
+ from Macro.reca_controles import gestion
+ from Utilitai.Utmess import UTMESS, MessageLog
+
+ UTMESS('I','RECAL0_39', valk=str(CALCUL_ASTER.evaluation_fonction), cc=Mess.get_filename())
+
+ LIST_NOM_PARA_ALPHA = [ para[0] for para in LIST_PARA ]
+ LIST_NOM_PARA_ALPHA.sort()
+ lival=[]
+ for i in LIST_NOM_PARA:
+ lival.append( val[ LIST_NOM_PARA_ALPHA.index(i) ] )
+ nomres = DEFI_LIST_REEL(VALE=lival)
+
+ return nomres
+
+
+# --------------------------------------------------------------------------------------------------
+def force_list(obj, typref=list):
+ """Retourne 'obj' sous forme d'une liste de 'typref'.
+ """
+ if type(obj) not in (list, tuple):
+ assert type(obj) == typref, '%s != %s' % (type(obj), typref)
+ obj = [obj,]
+ elif len(obj) > 0:
+ elt = obj[0]
+ if type(elt) != typref:
+ obj = [obj,]
+ return obj
+
+
+# --------------------------------------------------------------------------------------------------
+def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC, ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI, GRAPHIQUE, METHODE, INFO, **args ):
+ """ Macro commande realisant le recalage de modeles Aster """
+
+ # Initialisation du compteur d'erreurs
+ ier=0
+
+ import aster
+ import Macro
+ from Cata import cata
+ from Cata.cata import DEFI_LIST_REEL, CREA_TABLE, TEST_TABLE, INCLUDE
+ from Cata.cata import OPER, MACRO
+
+ from Macro import reca_message
+ from Macro import reca_algo
+ from Macro import reca_interp
+ from Macro import reca_utilitaires
+ from Macro import reca_calcul_aster
+ from Macro.reca_controles import gestion
+
+ # Gestion des Exceptions
+ prev_onFatalError = aster.onFatalError()
+ aster.onFatalError('EXCEPTION')
+
+ # La macro compte pour 1 dans l'execution des commandes
+ self.set_icmd(1)
+
+ # Concept en sortir
+ self.DeclareOut('nomres',self.sd)
+
+ # Declaration de toutes les commandes Aster
+ for k,v in cata.__dict__.items() :
+ if isinstance(v, (OPER, MACRO)):
+ self.current_context[k]= v
+ self.current_context['_F']=cata.__dict__['_F']
+
+ macr_recal(self, UNITE_ESCL, force_list(RESU_EXP, NP.ndarray), POIDS, force_list(LIST_PARA), force_list(RESU_CALC),
+ ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
+ GRAPHIQUE, METHODE, INFO, **args)
+
+ aster.onFatalError(prev_onFatalError)
+ return
+
+
+# --------------------------------------------------------------------------------------------------
+def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
+ ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
+ GRAPHIQUE, METHODE, INFO, **args ):
+
+ from Utilitai.Utmess import UTMESS
+ if os.environ.has_key('ASTER_ROOT'): ASTER_ROOT = os.environ['ASTER_ROOT']
+ else: ASTER_ROOT = os.path.join(aster.repout, '..')
+
+ try:
+ sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+ sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+ except: pass
+ try:
+ from asrun.profil import ASTER_PROFIL
+ except Exception, e:
+ print e
+ UTMESS('F','RECAL0_2')
+
+ import Macro, Utilitai
+ from Macro import reca_message
+ from Macro import reca_algo
+ from Macro import reca_interp
+ from Macro import reca_utilitaires
+ from Macro import reca_calcul_aster
+ from Macro import recal
+ from Macro.reca_controles import gestion
+ from Utilitai.optimize import fmin, line_search, line_search_BFGS, approx_fprime, approx_fhess_p, fminBFGS, fminNCG
+
+ import Macro
+ from Cata import cata
+ from Cata.cata import OPER, MACRO
+ from Accas import _F
+ #from Cata.cata import *
+ # Declaration de toutes les commandes Aster
+ import cata
+ for k,v in cata.__dict__.items() :
+ if isinstance(v, (OPER, MACRO)):
+ self.current_context[k]= v
+ self.current_context['_F']=cata.__dict__['_F']
+
+
+ #_____________________________________________
+ #
+ # RECUPERATION DU PROFIL DU CALCUL MAITRE
+ #_____________________________________________
+ # Lecture du fichier .export dans le repertoire temporaire d'execution
+ list_export = glob.glob('*.export')
+ if len(list_export) == 0: UTMESS('F','RECAL0_4')
+ elif len(list_export) >1: UTMESS('F','RECAL0_5')
+ prof = ASTER_PROFIL(list_export[0])
+
+
+ #_____________________________________________
+ #
+ # PARAMETRES
+ #_____________________________________________
+ TOLE_PARA = args['TOLE_PARA']
+ TOLE_FONC = args['TOLE_FONC']
+
+ # Pour les calculs esclaves
+ CALCUL_ESCLAVE = {}.fromkeys( ['LANCEMENT', 'MODE', 'MEMOIRE', 'TEMPS', 'CLASSE', 'ACTUALISATION', 'memjeveux_esclave', 'mem_aster', 'NMAX_SIMULT', ] )
+
+ dESCLAVE=args['CALCUL_ESCLAVE'][0].cree_dict_valeurs(args['CALCUL_ESCLAVE'][0].mc_liste)
+ for i in dESCLAVE.keys():
+ if dESCLAVE[i]==None : del dESCLAVE[i]
+
+ CALCUL_ESCLAVE['LANCEMENT'] = dESCLAVE['LANCEMENT']
+ if dESCLAVE.has_key('MODE'): CALCUL_ESCLAVE['MODE'] = dESCLAVE['MODE']
+ else: CALCUL_ESCLAVE['MODE'] = prof['mode'][0].upper()
+ if dESCLAVE.has_key('MEMOIRE'): CALCUL_ESCLAVE['MEMOIRE'] = dESCLAVE['MEMOIRE']
+ else: CALCUL_ESCLAVE['MEMOIRE'] = prof['memjob'][0]
+ if dESCLAVE.has_key('TEMPS'): CALCUL_ESCLAVE['TEMPS'] = dESCLAVE['TEMPS']
+ else: CALCUL_ESCLAVE['TEMPS'] = prof['tps_job'][0]
+ if dESCLAVE.has_key('CLASSE'): CALCUL_ESCLAVE['CLASSE'] = dESCLAVE['CLASSE']
+ if dESCLAVE.has_key('ACTUALISATION'): CALCUL_ESCLAVE['ACTUALISATION'] = dESCLAVE['ACTUALISATION']
+
+ LANCEMENT = CALCUL_ESCLAVE['LANCEMENT']
+
+ # Parametres de l'algorithme genetique
+ if args.has_key('NB_PARENTS'): NB_PARENTS = args['NB_PARENTS']
+ if args.has_key('NB_FILS'): NB_FILS = args['NB_FILS']
+ if args.has_key('ECART_TYPE'): ECART_TYPE = args['ECART_TYPE']
+ if args.has_key('ITER_ALGO_GENE'): ITER_ALGO_GENE = args['ITER_ALGO_GENE']
+ if args.has_key('RESI_ALGO_GENE'): RESI_ALGO_GENE = args['RESI_ALGO_GENE']
+
+ if args.has_key('GRAINE'):
+ UTMESS('A','RECAL0_43')
+ GRAINE = args['GRAINE']
+ else:
+ GRAINE = None
+
+ # Parametres concernant le recalage d'un modele dynamique
+ if args.has_key('DYNAMIQUE'): DYNAMIQUE = args['DYNAMIQUE']
+ else: DYNAMIQUE = None
+
+
+ #_____________________________________________
+ #
+ # VERIFICATION PREALABLE SUR GNUPLOT
+ #_____________________________________________
+
+ if GRAPHIQUE:
+ dGRAPHIQUE=GRAPHIQUE[0].cree_dict_valeurs(GRAPHIQUE[0].mc_liste)
+ if dGRAPHIQUE.has_key('FORMAT') and dGRAPHIQUE['FORMAT'] == 'GNUPLOT':
+ # On essaie d'importer Gnuplot -> PAS DE GRAPHIQUE
+ try:
+ import Gnuplot
+ except ImportError:
+ GRAPHIQUE == None
+ UTMESS('A','RECAL0_3')
+
+
+ #_____________________________________________
+ #
+ # VERIFICATION PREALABLE SUR MEM_ASTER
+ #_____________________________________________
+
+ if LANCEMENT == 'DISTRIBUTION':
+
+ # Recuperation des parametres mem_aster et memjeveux
+ try:
+ mem_aster = float(prof['mem_aster'][0])
+ except ValueError:
+ mem_aster = 100.0
+ memjeveux = prof.args.get('memjeveux')
+
+ if mem_aster in (0., 100.):
+ if CALCUL_ESCLAVE['MODE']=='INTERACTIF': UTMESS('A','RECAL0_6')
+ mem_aster = 0.
+ if not memjeveux:
+ UTMESS('F','RECAL0_7')
+
+ try:
+ if mem_aster == 0.:
+ memjeveux_esclave = float(memjeveux)
+ else:
+ memjeveux_esclave = float(memjeveux) / float(mem_aster) * 100. - float(memjeveux)
+ except:
+ UTMESS('F','RECAL0_8')
+
+ CALCUL_ESCLAVE['memjeveux_esclave'] = memjeveux_esclave
+ #CALCUL_ESCLAVE['mem_aster'] = mem_aster
+ UTMESS('I','RECAL0_9', valr=memjeveux_esclave)
+
+
+ if CALCUL_ESCLAVE['MODE']=='BATCH':
+ if CALCUL_ESCLAVE['CLASSE']: classe = CALCUL_ESCLAVE['CLASSE']
+ else: classe = ' -auto- '
+ UTMESS('I','RECAL0_69', valk=( str(CALCUL_ESCLAVE['TEMPS']), str(CALCUL_ESCLAVE['MEMOIRE']), classe ) )
+
+
+ #_____________________________________________
+ #
+ # INITIALISATIONS
+ #_____________________________________________
+
+ # Stocke l'ordre initial des parametres pour restituer dans le bon ordre les valeurs en sortie de la macro
+ LIST_NOM_PARA = [ para[0] for para in LIST_PARA ]
+
+ # On classe les parametres
+ LIST_PARA.sort()
+
+ # Pour les algorithmes d'optimize.py, on a des limitations
+ if METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG']:
+ # On ne peut tracer qu'a la derniere iteration
+ if GRAPHIQUE:
+ if GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION': UTMESS('I', 'RECAL0_10', valk=METHODE)
+ # Les bornes ne sont pas gerees
+ UTMESS('I','RECAL0_11', valk=METHODE)
+
+
+ #_______________________________________________
+ #
+ # GESTION DE L'OPTION FACULTATIVE POUR LES POIDS
+ #_______________________________________________
+
+ if( POIDS == None): POIDS = NP.ones(len(RESU_EXP))
+
+
+ #_____________________________________________
+ #
+ # GESTION DES ERREURS DE SYNTAXE
+ #_____________________________________________
+
+ texte_erreur, texte_alarme = gestion(UNITE_ESCL,LIST_PARA,RESU_CALC,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU,METHODE)
+ if (texte_erreur != ""): UTMESS('F', "RECAL0_12", valk=texte_erreur)
+ if (texte_alarme != ""): UTMESS('A', "RECAL0_12", valk=texte_alarme)
+
+
+ #_____________________________________________
+ #
+ # INITIALISATIONS
+ #_____________________________________________
+
+ iter = 0
+ restant, temps_iter =0., 0.
+ restant, temps_iter, err = reca_utilitaires.temps_CPU(restant, temps_iter)
+ para, val, borne_inf, borne_sup = reca_utilitaires.transforme_list_Num(LIST_PARA, RESU_EXP)
+ val_init = copy.copy(val)
+
+ # Fonctionnelle en sortie (vectorielle ou scalaire)
+ if METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG', 'GENETIQUE', 'HYBRIDE']: vector_output = False
+ else: vector_output = True
+
+ # OBJET "CALCUL"
+ CALCUL_ASTER = reca_calcul_aster.CALCUL_ASTER(
+ jdc = self,
+ METHODE = METHODE,
+ UNITE_ESCL = UNITE_ESCL,
+ UNITE_RESU = UNITE_RESU,
+ para = para,
+ reponses = RESU_CALC,
+ PARA_DIFF_FINI = PARA_DIFF_FINI,
+ vector_output = vector_output,
+ DYNAMIQUE = DYNAMIQUE,
+ #LANCEMENT = LANCEMENT,
+ CALCUL_ESCLAVE = CALCUL_ESCLAVE,
+ INFO = INFO,
+ )
+
+ CALCUL_ASTER.RESU_EXP = RESU_EXP
+ CALCUL_ASTER.RESU_CALC = RESU_CALC
+ CALCUL_ASTER.LIST_PARA = LIST_PARA
+
+
+ # Instances des classes pour le calcul de l'erreur et le dimensionnemnt/adim
+ Dim = reca_algo.Dimension(copy.copy(val_init))
+ CALCUL_ASTER.Simul = reca_interp.Sim_exp(RESU_EXP,POIDS)
+ CALCUL_ASTER.Dim = Dim
+ CALCUL_ASTER.reca_algo = reca_algo
+
+ if (GRAPHIQUE): CALCUL_ASTER.UNITE_GRAPHIQUE = GRAPHIQUE['UNITE']
+
+ # Dans le cas de la dynamique avec appariement manual des MAC, on passe la flag correspondant a True
+ if METHODE == 'HYBRIDE':
+ if (DYNAMIQUE!=None and DYNAMIQUE['APPARIEMENT_MANUEL']=='OUI'): CALCUL_ASTER.graph_mac=True
+
+ # 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)
+ Mess.initialise()
+
+# # Calcul de F
+# erreur = CALCUL_ASTER.calcul_F(val)
+# # Calcul de F et G
+# erreur, residu, A_nodim, A = CALCUL_ASTER.calcul_FG(val)
+# sys.exit()
+
+
+ # Mode INCLUDE : on doit executer les commandes PRE ici
+ if LANCEMENT=='INCLUSION':
+ UNITE_INCLUDE=UNITE_ESCL
+ recal.make_include_files(UNITE_INCLUDE=UNITE_INCLUDE, calcul=RESU_CALC, parametres=LIST_PARA)
+ pre = "fort.%s.pre" % UNITE_INCLUDE
+ #if os.path.isfile(pre): recal.execfile(filename)
+
+
+
+ #-------------------------------------------------------------------------------
+ # Pas d'optimisation (juste une evaluation de la fonctionnelle pour le point courant)
+ #-------------------------------------------------------------------------------
+ #
+ if ITER_MAXI<=0:
+ erreur = CALCUL_ASTER.calcul_F(val)
+ residu = 0
+ iter = 0
+ L_F = CALCUL_ASTER.Lcalc[0]
+ CALCUL_ASTER.evaluation_fonction = 1
+
+
+ #-------------------------------------------------------------------------------
+ # Algorithme FMIN (pas d'adimensionnement car n'utilise pas de gradient)
+ #-------------------------------------------------------------------------------
+ #
+ elif (METHODE == 'FMIN'):
+ UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+ val, fval, warnflag = fmin(CALCUL_ASTER.calcul_F, val, maxiter=ITER_MAXI, maxfun=ITER_FONC_MAXI, fulloutput=1)
+
+ iter_fonc = CALCUL_ASTER.evaluation_fonction
+ if warnflag==1: UTMESS('I','RECAL0_54', cc=Mess.get_filename())
+ if warnflag==2: UTMESS('I','RECAL0_55', cc=Mess.get_filename())
+ Mess.affiche_etat_final_convergence(iter,ITER_MAXI,iter_fonc,ITER_FONC_MAXI, RESI_GLOB_RELA,residu=0,Act=[])
+ Mess.affiche_fonctionnelle(fval)
+ Mess.affiche_valeurs(val)
+ nomres = Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess)
+ return
+
+
+ #-------------------------------------------------------------------------------
+ # Algorithme GENETIQUE (pas d'adimensionnement car n'utilise pas de gradient)
+ #-------------------------------------------------------------------------------
+ #
+ elif (METHODE == 'GENETIQUE'):
+ UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+ from Macro.reca_evol import evolutivo
+ nb_parents = NB_PARENTS
+ nb_fils = NB_FILS
+ nb_iter = ITER_ALGO_GENE
+ sigma = ECART_TYPE
+ err_min = RESI_ALGO_GENE
+ graine = GRAINE
+ val = evolutivo(CALCUL_ASTER,val,nb_iter,err_min,nb_parents,nb_fils,sigma, borne_inf, borne_sup,graine)
+ nomres = Sortie(LIST_NOM_PARA, LIST_PARA,val, CALCUL_ASTER, Mess)
+ return
+
+
+ #-------------------------------------------------------------------------------
+ # Pour tous les autres methodes, on adimensionne
+ #-------------------------------------------------------------------------------
+ #
+ else:
+
+ #-------------------------------------------------------------------------------
+ # Si METHODE=='HYBRIDE', on lance d'abord l'algo genetique et ensuite celui de
+ # Levenberg-Marquardt qui demarre avec le jeu de parametres issu de genetique
+ if (METHODE == 'HYBRIDE'):
+ from Macro.reca_evol import evolutivo
+ nb_parents = NB_PARENTS
+ nb_fils = NB_FILS
+ nb_iter = ITER_ALGO_GENE
+ sigma = ECART_TYPE
+ err_min = RESI_ALGO_GENE
+ graine = GRAINE
+ val_gene = evolutivo(CALCUL_ASTER,val,nb_iter,err_min,nb_parents,nb_fils,sigma, borne_inf, borne_sup,graine)
+ val = copy.copy(val_gene)
+ val_init = copy.copy(val)
+ # AA ? CALCUL_ASTER.graph_mac = True
+
+
+ # Calcul de F et G
+ erreur, residu, A_nodim, A = CALCUL_ASTER.calcul_FG(val)
+ E = recal.CALC_ERROR(experience=RESU_EXP, X0=val, calcul=RESU_CALC, poids=POIDS)
+ E.CalcError(CALCUL_ASTER.Lcalc)
+ E.CalcSensibilityMatrix(CALCUL_ASTER.Lcalc, val, dX=None, pas=PARA_DIFF_FINI)
+
+ L_init = E.L_init
+ L_J_init = E.L_J_init
+ J_init = E.J_init
+ J = E.J
+ A = E.A
+ A_nodim = E.A_nodim
+ erreur = E.erreur
+ residu = E.residu
+ gradient_init = E.gradient_init
+
+ # Calcul du lambda_init
+ l = reca_algo.lambda_init(NP.dot(NP.transpose(A),A))
+
+
+ Mess.affiche_result_iter(iter,J,val,residu,NP.array([]))
+
+ CALCUL_ASTER.L_init = L_init
+ CALCUL_ASTER.L_J_init = L_J_init
+ CALCUL_ASTER.J_init = J_init
+ CALCUL_ASTER.A_init = A
+ CALCUL_ASTER.gradient_init = gradient_init
+ CALCUL_ASTER.residu_init = residu
+
+ # On teste un manque de temps CPU
+ restant,temps_iter,err=reca_utilitaires.temps_CPU(restant,temps_iter)
+ if (err==1):
+ ier=ier+1
+ return ier
+
+
+ #-------------------------------------------------------------------------------
+ # Methode FMINBFGS et FMINNCG
+ #-------------------------------------------------------------------------------
+ #
+ if METHODE in ['FMINBFGS', 'FMINNCG']:
+
+ UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+
+ # Derivees
+ f = CALCUL_ASTER.calcul_F2
+ fprime = CALCUL_ASTER.calcul_G
+ warnflag=0
+
+ if args.has_key('GRADIENT') and args['GRADIENT'] == 'NON_CALCULE':
+ f = CALCUL_ASTER.calcul_F
+ fprime = None
+
+ if fprime: UTMESS('I','RECAL0_14')
+ else: UTMESS('I','RECAL0_15')
+
+ # Lancement de l'optimisation
+ if METHODE == 'FMINBFGS':
+ val, fval, func_calls, grad_calls, warnflag = fminBFGS(f=f, x0=val, fprime=fprime, maxiter=ITER_MAXI, avegtol=RESI_GLOB_RELA, fulloutput=1)
+
+ elif METHODE == 'FMINNCG':
+ val, fval, func_calls, grad_calls, hcalls, warnflag = fminNCG(f=f, x0=val, fprime=fprime, fhess_p=None, fhess=None, maxiter=ITER_MAXI, avextol=RESI_GLOB_RELA, fulloutput=1)
+
+ # Affichage des messages de sortie
+ iter_fonc = CALCUL_ASTER.evaluation_fonction
+ if warnflag: UTMESS('I','RECAL0_55', cc=Mess.get_filename())
+ Mess.affiche_etat_final_convergence(iter,ITER_MAXI,iter_fonc,ITER_FONC_MAXI, RESI_GLOB_RELA, residu=0, Act=[])
+ Mess.affiche_fonctionnelle(fval)
+ Mess.affiche_valeurs(val)
+
+ # Permet d'avoir un diagnostic NOOK pour le job
+ if warnflag: iter=ITER_MAXI
+
+ L_F = CALCUL_ASTER.L
+ residu = fval
+
+
+ #-------------------------------------------------------------------------------
+ # Methode Levenberg-Marquardt
+ #-------------------------------------------------------------------------------
+ elif METHODE in ['LEVENBERG', 'HYBRIDE']:
+
+ #___________________________________________________________
+ #
+ # BOUCLE PRINCIPALE DE L'ALGORITHME de Levenberg-Marquardt
+ #___________________________________________________________
+
+ UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+ epsilon = 10.*RESI_GLOB_RELA
+ while(iter<ITER_MAXI):
+ iter = iter +1
+ new_val, s, l, Act = reca_algo.Levenberg_bornes(val, Dim, val_init, borne_inf, borne_sup, A, erreur, l, UNITE_RESU)
+
+ # On teste la variation sur les parametres
+ ecart_para = reca_algo.calcul_norme2( NP.array(new_val) - NP.array(val) )
+ if debug: print "AA0/ecart para=%s\nAA0/oldpara/newpara=%s %s" % (ecart_para, val, new_val)
+ if ecart_para < TOLE_PARA:
+ UTMESS('I','RECAL0_51', valr=ecart_para, cc=Mess.get_filename())
+ break
+
+ # Calculs au point courant val et toutes les perturbations par differences finies (N+1 calculs distribues ou inclus)
+ CALCUL_ASTER.calcul_FG(new_val)
+
+ # Calcul de l'erreur et de la matrice des sensibilites
+ old_J = copy.copy(J)
+ E.CalcError(CALCUL_ASTER.Lcalc)
+ new_J = E.J
+
+ l = reca_algo.actualise_lambda(l,Dim.adim(val),Dim.adim(new_val),A,erreur,new_J,J)
+ E.CalcSensibilityMatrix(CALCUL_ASTER.Lcalc, new_val, dX=None, pas=PARA_DIFF_FINI)
+
+ L_F = CALCUL_ASTER.Lcalc[0]
+ A = E.A_nodim
+ val = copy.copy(new_val)
+ erreur = copy.copy(E.erreur)
+ J = E.J
+
+ if debug:
+ print "AA0/L_F=", L_F
+ print "AA0/l=", l
+ print "AA0/erreur=", erreur
+ print "AA0/J=", J
+ print "AA0/A_nodim=", A
+
+ # Calcul de la matrice des sensibilites
+ A = Dim.adim_sensi(A)
+
+ # Calcul du residu
+ residu = reca_algo.test_convergence(gradient_init,erreur,A,s)
+
+ if debug:
+ print "AA0/residu=", residu
+ print "AA0/new_val=", new_val
+ print "AA0/A=", A
+
+ # On calcule la variation sur la fonctionnelle
+ ecart_fonc = abs( new_J - old_J )
+
+ # Affichage iteration
+ Mess.affiche_result_iter(iter,J,val,residu,Act, ecart_para, ecart_fonc)
+
+ # On teste la variation sur la fonctionnelle
+ if ecart_fonc < TOLE_FONC:
+ UTMESS('I','RECAL0_52', valr=ecart_fonc, cc=Mess.get_filename())
+ break
+
+ if (GRAPHIQUE):
+ if GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION':
+ GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
+ pilote=GRAPHIQUE['PILOTE']
+ reca_utilitaires.graphique(GRAPHIQUE['FORMAT'], L_F, RESU_EXP, RESU_CALC, iter, GRAPHE_UL_OUT, pilote)
+
+ # On teste le residu
+ if residu <= RESI_GLOB_RELA:
+ UTMESS('I','RECAL0_50', valr=residu, cc=Mess.get_filename())
+ break
+
+ # On teste un manque de temps CPU
+ restant, temps_iter, err = reca_utilitaires.temps_CPU(restant, temps_iter)
+ if (err==1):
+ UTMESS('I','RECAL0_53', cc=Mess.get_filename())
+ break
+
+ #_____________________________________________
+ #
+ # FIN DES ITERATIONS
+ # CONVERGENCE OU ECHEC
+ #_____________________________________________
+ iter_fonc = CALCUL_ASTER.evaluation_fonction
+ Mess.affiche_etat_final_convergence(iter, ITER_MAXI, iter_fonc, ITER_FONC_MAXI, RESI_GLOB_RELA, residu, Act)
+ reca_algo.calcul_etat_final(para, A, iter, ITER_MAXI, RESI_GLOB_RELA, residu, Mess)
+
+
+ #-------------------------------------------------------------------------------
+
+
+ #_____________________________________________
+ #
+ # FIN DES ITERATIONS POUR TOUS LES ALGOS
+ #_____________________________________________
+
+ if (GRAPHIQUE):
+ fichier = None
+ # Pour les algorithmes d'optimize.py, on ne peut tracer qu'a la derniere iteration
+ if (GRAPHIQUE['AFFICHAGE']=='ITERATION_FINALE') or (METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG']) or (ITER_MAXI<=0):
+ UTMESS('I','RECAL0_17')
+ GRAPHE_UL_OUT = GRAPHIQUE['UNITE']
+ pilote = GRAPHIQUE['PILOTE']
+ reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,pilote,fichier)
+
+ # Si pas de convergence alors diagnostic NOOK_TEST_RESU
+ if (residu > RESI_GLOB_RELA) and (ecart_fonc > TOLE_FONC) and (ecart_para < TOLE_PARA):
+ from Cata.cata import CREA_TABLE, TEST_TABLE
+ _tmp = []
+ _tmp.append( { 'PARA': 'ITER_MAXI', 'LISTE_R': 0.0, } )
+ motscle = {'LISTE': _tmp }
+
+ TBL = CREA_TABLE(**motscle);
+
+ TEST_TABLE(TABLE=TBL,
+ TYPE_TEST='SOMM',
+ NOM_PARA='ITER_MAXI',
+ VALE=1.,);
+
+ #_____________________________________________
+ #
+ # CREATIONS DE LA LISTE DE REELS CONTENANT
+ # LES VALEURS DES PARAMETRES A CONVERGENCE
+ #_____________________________________________
+
+ nomres = Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess)
+ return
+
--- /dev/null
+#@ MODIF macr_spectre_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 Accas import _F
+import string
+
+try:
+ import aster
+ from Utilitai.Utmess import UTMESS
+except:
+ pass
+
+def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
+ FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
+ """
+ Ecriture de la macro MACR_SPECTRE
+ """
+ ier=0
+ import string
+ from types import ListType,TupleType,StringType
+ EnumType=(ListType,TupleType)
+
+ ### On importe les definitions des commandes a utiliser dans la macro
+ RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+ CALC_FONCTION = self.get_cmd('CALC_FONCTION')
+ IMPR_FONCTION = self.get_cmd('IMPR_FONCTION')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+
+ ### Comptage commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('tab',self.sd)
+ macro='MACR_SPECTRE'
+
+ ### construction de la liste des noeuds à traiter
+ planch_nodes={}
+ dic_gpno=aster.getcolljev(MAILLAGE.nom.ljust(8)+".GROUPENO")
+ l_nodes =aster.getvectjev(MAILLAGE.nom.ljust(8)+".NOMNOE")
+ l_plancher=[]
+ for plancher in PLANCHER :
+ liste_no=[]
+ if plancher['NOEUD']!=None :
+ if type(plancher['NOEUD'])==StringType :
+ liste_no.append(plancher['NOEUD'])
+ else :
+ for noeud in plancher['NOEUD'] :
+ liste_no.append(plancher['NOEUD'])
+ if plancher['GROUP_NO']!=None :
+ if type(plancher['GROUP_NO'])==StringType :
+ noms_no =[string.strip(l_nodes[n-1]) \
+ for n in dic_gpno[plancher['GROUP_NO'].ljust(8)]]
+ liste_no=liste_no+noms_no
+ else :
+ for group_no in plancher['GROUP_NO'] :
+ noms_no =[string.strip(l_nodes[n-1]) \
+ for n in dic_gpno[group_no.ljust(8)]]
+ liste_no=liste_no+noms_no
+ planch_nodes[plancher['NOM']]=liste_no
+ l_plancher.append(plancher['NOM'])
+
+ if AMOR_SPEC!=None and type(AMOR_SPEC) not in EnumType :
+ AMOR_SPEC=(AMOR_SPEC,)
+
+ if NOM_CHAM=='ACCE' : dico_glob={}
+ if NOM_CHAM=='DEPL' : dico_glob={'DX_max' :[] ,
+ 'DY_max' :[] ,
+ 'DZ_max' :[] ,
+ 'DH_max' :[] , }
+
+ ############################################################
+ ### boucle 1 sur les planchers
+ for plancher in l_plancher :
+
+ if NOM_CHAM=='ACCE' :
+ __moy_x=[None]*len(planch_nodes[plancher])
+ __moy_y=[None]*len(planch_nodes[plancher])
+ __moy_z=[None]*len(planch_nodes[plancher])
+ if NOM_CHAM=='DEPL' :
+ dicDmax={}
+ ############################################################
+ ### boucle 2 sur les noeuds du plancher
+ indexn=0
+ for node in planch_nodes[plancher] :
+
+ ############################################################
+ ### boucle 3 sur les directions (X,Y,Z)
+ for dd in ('X','Y','Z') :
+
+ ############################################################
+ ### boucle 4 sur les résultats
+ l_fonc=[]
+ for resu in RESU :
+ ### Récupération des fonctions
+ motscles={}
+ if resu['RESU_GENE']!=None :
+ if CALCUL=='ABSOLU' :
+ UTMESS('F','SPECTRAL0_8')
+ motscles['RESU_GENE'] = resu['RESU_GENE']
+
+ if resu['RESULTAT' ]!=None :
+ motscles['RESULTAT'] = resu['RESULTAT']
+
+ __spo=RECU_FONCTION(NOM_CHAM = NOM_CHAM,
+ TOUT_ORDRE = 'OUI',
+ NOM_CMP = 'D'+dd,
+ INTERPOL = 'LIN',
+ PROL_GAUCHE = 'CONSTANT',
+ PROL_DROITE = 'CONSTANT',
+ NOEUD = node , **motscles )
+
+ if NOM_CHAM=='ACCE' :
+ ### Accelerations relatives
+ if CALCUL=='RELATIF' :
+ ### Combinaison avec fonction d acceleration
+ motscles={}
+ if LIST_INST!=None : motscles['LIST_PARA']=LIST_INST
+ __spo=CALC_FONCTION(COMB=(_F(FONCTION=__spo,
+ COEF= 1.0 ),
+ _F(FONCTION=resu['ACCE_'+dd],
+ COEF= 1.0) ),**motscles )
+
+ ### Calcul des spectres d'oscillateur
+ motscles={}
+ if FREQ !=None : motscles['FREQ'] =FREQ
+ if LIST_FREQ!=None : motscles['LIST_FREQ']=LIST_FREQ
+ __spo=CALC_FONCTION(
+ SPEC_OSCI=_F(FONCTION = __spo,
+ AMOR_REDUIT = AMOR_SPEC,
+ NORME = args['NORME'],
+ **motscles ) )
+ l_fonc.append(__spo)
+
+ if NOM_CHAM=='DEPL' :
+ if CALCUL=='ABSOLU' :
+ ### On retranche les deplacements d entrainement
+ motscles={}
+ if LIST_INST!=None : motscles['LIST_PARA']=LIST_INST
+ __spo=CALC_FONCTION(COMB=(_F(FONCTION=__spo,
+ COEF= 1.0 ),
+ _F(FONCTION=resu['DEPL_'+dd],
+ COEF= -1.0) ),**motscles )
+
+ l_fonc.append(__spo)
+
+ ### fin boucle 4 sur les résultats
+ ############################################################
+
+ ############################################################
+ ### calcul de la moyenne sur les resultats à noeud et direction fixes
+ nbresu=len(RESU)
+ if NOM_CHAM=='ACCE' :
+ mcfCMBx=[]
+ mcfCMBy=[]
+ mcfCMBz=[]
+ for spo in l_fonc :
+ mcfCMBx.append(_F(FONCTION=spo,
+ COEF=1./float(nbresu),))
+ mcfCMBy.append(_F(FONCTION=spo,
+ COEF=1./float(nbresu),))
+ mcfCMBz.append(_F(FONCTION=spo,
+ COEF=1./float(nbresu),))
+ motscles={}
+ if LIST_FREQ!=None : motscles['LIST_PARA']=LIST_FREQ
+ if dd=='X' : __moy_x[indexn]=CALC_FONCTION(COMB=mcfCMBx,**motscles)
+ if dd=='Y' : __moy_y[indexn]=CALC_FONCTION(COMB=mcfCMBy,**motscles)
+ if dd=='Z' : __moy_z[indexn]=CALC_FONCTION(COMB=mcfCMBz,**motscles)
+
+ if NOM_CHAM=='DEPL' :
+ moy = 0.
+ for spo in l_fonc :
+ fspo = spo.convert()
+ aspo = fspo.abs()
+ vmax = aspo.extreme()['max']
+ moy = moy + vmax[-1][-1]
+ dicDmax[(node,dd)]=moy/nbresu
+
+ ### fin boucle 3 sur les directions
+ ############################################################
+
+ ################################
+ ### impressions en chaque noeud
+ if NOM_CHAM=='ACCE' and IMPRESSION!=None :
+ if IMPRESSION['TOUT']=='OUI' :
+ __moyxa=[None]*len(AMOR_SPEC)
+ __moyya=[None]*len(AMOR_SPEC)
+ __moyza=[None]*len(AMOR_SPEC)
+ for i in range(len(AMOR_SPEC)) :
+ amor = AMOR_SPEC[i]
+ __moyxa[i]=RECU_FONCTION(NAPPE = __moy_x[indexn],
+ VALE_PARA_FONC = AMOR_SPEC[i] )
+ __moyya[i]=RECU_FONCTION(NAPPE = __moy_y[indexn],
+ VALE_PARA_FONC = AMOR_SPEC[i] )
+ __moyza[i]=RECU_FONCTION(NAPPE = __moy_z[indexn],
+ VALE_PARA_FONC = AMOR_SPEC[i] )
+ motscles={}
+ dI = IMPRESSION[0].cree_dict_valeurs(IMPRESSION[0].mc_liste)
+ if dI.has_key('PILOTE') : motscles['PILOTE' ]=IMPRESSION['PILOTE']
+ if IMPRESSION['FORMAT']!='TABLEAU' : motscles['ECHELLE_X']='LOG'
+ if IMPRESSION['TRI']=='AMOR_SPEC' :
+ for i in range(len(AMOR_SPEC)) :
+ TITRE ='Spectres / Plancher = '+plancher+\
+ ' / amor='+str(AMOR_SPEC[i])+\
+ ' / noeud='+node
+ IMPR_FONCTION(
+ FORMAT=IMPRESSION['FORMAT'],
+ UNITE =IMPRESSION['UNITE' ],
+ COURBE=( _F(FONCTION=__moyxa[i], LEGENDE ='X',),
+ _F(FONCTION=__moyya[i], LEGENDE ='Y',),
+ _F(FONCTION=__moyza[i], LEGENDE ='Z',),),
+ TITRE =TITRE,
+ **motscles)
+ elif IMPRESSION['TRI']=='DIRECTION' :
+ lfonc=[]
+ for dd in ('X','Y','Z') :
+ TITRE ='Spectres / Plancher = '+plancher+\
+ ' / direction = '+dd+\
+ ' / noeud = '+node
+ if dd=='X' : l_fonc=[_F(FONCTION=__moyxa[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ if dd=='Y' : l_fonc=[_F(FONCTION=__moyya[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ if dd=='Z' : l_fonc=[_F(FONCTION=__moyza[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ IMPR_FONCTION(
+ FORMAT=IMPRESSION['FORMAT'],
+ UNITE =IMPRESSION['UNITE' ],
+ COURBE=l_fonc,
+ TITRE =TITRE,
+ **motscles)
+
+ ### increment de l'indice de noeud
+ indexn=indexn+1
+
+ ### fin boucle 2 sur les noeuds du plancher
+ ############################################################
+
+ ############################################################
+ ### Calcul des enveloppes des spectres ou des deplacements max
+ if NOM_CHAM=='ACCE' :
+ mcslx=[]
+ mcsly=[]
+ mcslz=[]
+ indexn=0
+ for node in planch_nodes[plancher] :
+ mcslx.append(__moy_x[indexn])
+ mcsly.append(__moy_y[indexn])
+ mcslz.append(__moy_z[indexn])
+ indexn=indexn+1
+ __snx=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcslx))
+ __sny=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcsly))
+ __snz=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcslz))
+ __snh=CALC_FONCTION(ENVELOPPE=_F(FONCTION=(__snx,__sny)))
+ if NOM_CHAM=='DEPL' :
+ DRmX = max([dicDmax[(node,'X')] for node in planch_nodes[plancher]])
+ DRmY = max([dicDmax[(node,'Y')] for node in planch_nodes[plancher]])
+ DRmZ = max([dicDmax[(node,'Z')] for node in planch_nodes[plancher]])
+ DRmH = max([DRmX,DRmY])
+
+ ############################################################
+ ### Renseignement de la table finale des résultats
+ if NOM_CHAM=='ACCE' :
+ nbind=len(AMOR_SPEC)
+ for i in range(nbind) :
+ dico_glob['FREQ' ]=__snx.Valeurs()[1][i][0]
+ dico_glob['eX_%d_%s' % (i, plancher)]=__snx.Valeurs()[1][i][1]
+ dico_glob['eY_%d_%s' % (i, plancher)]=__sny.Valeurs()[1][i][1]
+ dico_glob['eZ_%d_%s' % (i, plancher)]=__snz.Valeurs()[1][i][1]
+ dico_glob['eH_%d_%s' % (i, plancher)]=__snh.Valeurs()[1][i][1]
+ elif NOM_CHAM=='DEPL' :
+ dico_glob['DX_max'].append(DRmX)
+ dico_glob['DY_max'].append(DRmY)
+ dico_glob['DZ_max'].append(DRmZ)
+ dico_glob['DH_max'].append(DRmH)
+
+ ############################################################
+ ### Impression des courbes
+ if NOM_CHAM=='ACCE' and IMPRESSION!=None :
+ motscles={}
+ dI = IMPRESSION[0].cree_dict_valeurs(IMPRESSION[0].mc_liste)
+ if dI.has_key('PILOTE') : motscles['PILOTE']=IMPRESSION['PILOTE']
+ if IMPRESSION['FORMAT']!='TABLEAU' : motscles['ECHELLE_X']='LOG'
+ __snxa=[None]*len(AMOR_SPEC)
+ __snya=[None]*len(AMOR_SPEC)
+ __snza=[None]*len(AMOR_SPEC)
+ __snha=[None]*len(AMOR_SPEC)
+ for i in range(nbind) :
+ __snxa[i]=RECU_FONCTION(NAPPE = __snx,
+ VALE_PARA_FONC = AMOR_SPEC[i], )
+ __snya[i]=RECU_FONCTION(NAPPE = __sny,
+ VALE_PARA_FONC = AMOR_SPEC[i], )
+ __snza[i]=RECU_FONCTION(NAPPE = __snz,
+ VALE_PARA_FONC = AMOR_SPEC[i], )
+ __snha[i]=RECU_FONCTION(NAPPE = __snh,
+ VALE_PARA_FONC = AMOR_SPEC[i], )
+ if IMPRESSION['TRI']=='AMOR_SPEC' :
+ for i in range(nbind) :
+ TITRE ='Spectres moyens / Plancher = '+plancher+' / amor='+str(AMOR_SPEC[i])
+ IMPR_FONCTION(
+ FORMAT=IMPRESSION['FORMAT'],
+ UNITE =IMPRESSION['UNITE' ],
+ COURBE=( _F(FONCTION=__snxa[i], LEGENDE ='X',),
+ _F(FONCTION=__snya[i], LEGENDE ='Y',),
+ _F(FONCTION=__snza[i], LEGENDE ='Z',),
+ _F(FONCTION=__snha[i], LEGENDE ='H',),),
+ TITRE =TITRE,
+ **motscles
+ )
+ elif IMPRESSION['TRI']=='DIRECTION' :
+ for dd in ('X','Y','Z','H'):
+ TITRE ='Spectres moyens / Plancher = '+plancher+' / direction = '+dd
+ l_fonc =[]
+ if dd=='X' : l_fonc=[_F(FONCTION=__snxa[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ if dd=='Y' : l_fonc=[_F(FONCTION=__snya[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ if dd=='Z' : l_fonc=[_F(FONCTION=__snza[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ if dd=='H' : l_fonc=[_F(FONCTION=__snha[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+ for i in range(len(AMOR_SPEC)) ]
+ IMPR_FONCTION(
+ FORMAT=IMPRESSION['FORMAT'],
+ UNITE =IMPRESSION['UNITE' ],
+ COURBE=l_fonc,
+ TITRE =TITRE,
+ **motscles
+ )
+
+ ### fin boucle 1 sur les planchers
+ ############################################################
+
+ ############################################################
+ ### Renseignement de la table finale des résultats
+ lListe=[]
+ if NOM_CHAM=='DEPL' :
+ lListe.append(_F(LISTE_K=l_plancher,PARA='PLANCHER'))
+ titre = 'Calcul des spectres enveloppes'
+ if NOM_CHAM=='ACCE' :
+ titre = ['Calcul des spectres enveloppes par planchers pour les amortissements numérotés :',]
+ b=[' %d : %g ' % (i,AMOR_SPEC[i]) for i in range(len(AMOR_SPEC)) ]
+ titre.append('/'.join(b))
+ lkeys=dico_glob.keys()
+ lkeys.sort()
+ for key in lkeys :
+ lListe.append(_F(LISTE_R=dico_glob[key],PARA=key))
+ tab = CREA_TABLE(LISTE=lListe,TITRE=titre)
+ return ier
--- /dev/null
+#@ MODIF macro_elas_mult_ops Macro DATE 23/03/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+
+def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
+ CHAR_MECA_GLOBAL,LIAISON_DISCRET,
+ CAS_CHARGE,SOLVEUR,**args):
+ """
+ Ecriture de la macro MACRO_ELAS_MULT
+ """
+ ier=0
+ import types
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+
+ # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+ numeddl=NUME_DDL
+ # On importe les definitions des commandes a utiliser dans la macro
+ CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
+ NUME_DDL =self.get_cmd('NUME_DDL')
+ ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
+ FACTORISER =self.get_cmd('FACTORISER')
+ CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
+ ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
+ RESOUDRE =self.get_cmd('RESOUDRE')
+ CREA_RESU =self.get_cmd('CREA_RESU')
+ CALC_ELEM =self.get_cmd('CALC_ELEM')
+ CALC_NO =self.get_cmd('CALC_NO')
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
+ # 'nomres' dans le contexte de la macro
+
+ self.DeclareOut('nomres',self.sd)
+
+ ielas = 0
+ ifour = 0
+ for m in CAS_CHARGE:
+ if m['NOM_CAS']:
+ ielas=1 # mot clé NOM_CAS présent sous CAS_CHARGE
+ tyresu = 'MULT_ELAS'
+ else:
+ ifour=1 # mot clé MODE_FOURIER présent sous CAS_CHARGE
+ tyresu = 'FOURIER_ELAS'
+ if ielas==1 and ifour==1:
+ UTMESS('F','ELASMULT0_1')
+
+ 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
+ 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=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
+
+#####################################################################
+# boucle sur les items de CAS_CHARGE
+
+ nomchn=[]
+ lcharg=[]
+ iocc=0
+ for m in CAS_CHARGE:
+ iocc=iocc+1
+
+ # calcul de lcharg : liste des listes de char_meca (mots clé CHAR_MECA et CHAR_MECA_GLOBAL)
+ xx1=m['CHAR_MECA']
+ if type(xx1) != type((1,)) : xx1=(xx1,)
+ xx2=CHAR_MECA_GLOBAL
+ if type(xx2) != type((1,)) : xx2=(xx2,)
+ lchar1=[]
+ for chargt in (xx1+xx2) :
+ if chargt : lchar1.append(chargt)
+ lcharg.append(lchar1)
+ assert len(lchar1) > 0
+
+
+
+ if ifour:
+ motscles={}
+ if CHAR_MECA_GLOBAL: motscles['CHARGE'] =CHAR_MECA_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=FACTORISER(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 len(lchar1) > 0 : motscles['CHARGE'] =lchar1
+ __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
+ __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
+ else :
+ __nomasv=m['VECT_ASSE']
+
+
+ __nomchn=RESOUDRE(MATR=__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 ielas :
+ motscles['AFFE']=[]
+ for m in CAS_CHARGE:
+ if len(lcharg[iocc]) > 0 :
+ motscles['AFFE'].append(_F(MODELE=MODELE,
+ CHAM_GD=nomchn[iocc],
+ NOM_CAS=m['NOM_CAS'],
+ CHARGE=lcharg[iocc],
+ **motscle2) )
+ else :
+ 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:
+ if len(lcharg[iocc]) > 0 :
+ motscles['AFFE'].append(_F(MODELE=MODELE,
+ CHAM_GD=nomchn[iocc],
+ NUME_MODE=m['MODE_FOURIER'],
+ TYPE_MODE=m['TYPE_MODE'],
+ CHARGE=lcharg[iocc],
+ **motscle2) )
+ else :
+ motscles['AFFE'].append(_F(MODELE=MODELE,
+ CHAM_GD=nomchn[iocc],
+ NUME_MODE=m['MODE_FOURIER'],
+ TYPE_MODE=m['TYPE_MODE'],
+ **motscle2) )
+ iocc=iocc+1
+
+ if self.reuse:
+ motscles['reuse'] = self.reuse
+ nomres=CREA_RESU(OPERATION='AFFE',TYPE_RESU=tyresu,NOM_CHAM='DEPL',**motscles)
+
+#####################################################################
+# boucle sur les items de CAS_CHARGE pour CALC_ELEM et 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:
+ liste_option=(m['OPTION'],)
+ else :
+ liste_option=m['OPTION']
+ for option in liste_option :
+ if option in ( 'FORC_NODA','REAC_NODA',
+ 'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
+ 'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI',):
+ nbno=nbno+1
+ liste_no.append(option)
+ else:
+ nbel=nbel+1
+ liste_el.append(option)
+
+ if nbel:
+ motscles={}
+ if ielas:
+ motscles['NOM_CAS']=m['NOM_CAS']
+ else:
+ motscles['NUME_MODE']=m['MODE_FOURIER']
+ CALC_ELEM(reuse=nomres,
+ RESULTAT=nomres,
+ REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
+ NUME_COUCHE=m['NUME_COUCHE'],),
+ OPTION=tuple(liste_el),
+ **motscles)
+ if nbno:
+ motscles={}
+ if ielas:
+ motscles['NOM_CAS']=m['NOM_CAS']
+ else:
+ motscles['NUME_MODE']=m['MODE_FOURIER']
+ CALC_NO(reuse=nomres,
+ RESULTAT=nomres,
+ OPTION=tuple(liste_no),
+ **motscles)
+
+# fin de la boucle sur les items de CAS_CHARGE
+#####################################################################
+ return ier
+
--- /dev/null
+#@ MODIF macro_expans_ops Macro DATE 28/01/2010 AUTEUR BODEL C.BODEL
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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_expans_ops( self,
+ MODELE_CALCUL,
+ MODELE_MESURE,
+ NUME_DDL,
+ RESU_NX,
+ RESU_EX,
+ RESU_ET,
+ RESU_RD,
+ MODES_NUM=None,
+ MODES_EXP=None,
+ RESOLUTION=None,
+ *args
+ ):
+ """!macro MACRO_EXPANS """
+ from Accas import _F
+ from Cata.cata import CO, mode_meca, dyna_harmo
+ from Utilitai.Utmess import UTMESS
+ from types import ListType, TupleType
+ ier = 0
+
+ import aster
+ EXTR_MODE = self.get_cmd('EXTR_MODE')
+ PROJ_MESU_MODAL = self.get_cmd('PROJ_MESU_MODAL')
+ REST_GENE_PHYS = self.get_cmd('REST_GENE_PHYS')
+ PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+ NORM_MODE = self.get_cmd('NORM_MODE')
+
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ is_nume_num = is_nume_exp = 0
+ if MODELE_CALCUL['NUME_MODE'] or MODELE_CALCUL['NUME_ORDRE']:
+ # on cree un resultat RESU_NX par extraction de NUME_ORDREs
+ is_nume_num = 1
+ else:
+ if RESU_NX:
+ UTMESS('A','MEIDEE0_6',valk=['MODELE_MESURE','RESU_EX'])
+ if MODELE_MESURE['NUME_MODE'] or MODELE_MESURE['NUME_ORDRE']:
+ # On cree un RESU_EX par extraction de NUME_ORDREs
+ is_nume_exp = 1
+ else:
+ if RESU_EX: UTMESS('A','MEIDEE0_6',valk=['MODELE_CALCUL','RESU_NX'])
+
+ RESU_NUM = MODELE_CALCUL['BASE']
+ RESU_EXP = MODELE_MESURE['MESURE']
+
+ MOD_CALCUL = MODELE_CALCUL['MODELE']
+ MOD_MESURE = MODELE_MESURE['MODELE']
+
+ NOM_CHAM = MODELE_MESURE['NOM_CHAM']
+
+ # Extraction des modes numériques
+ # -------------------------------
+ if not is_nume_num:
+ resu_nx = RESU_NUM
+ else:
+ if RESU_NX:
+ self.DeclareOut( "RESU_NX", RESU_NX )
+ mfact = {'MODE':RESU_NUM}
+ if MODELE_CALCUL['NUME_MODE']:
+ mfact.update({'NUME_MODE':MODELE_CALCUL['NUME_MODE']})
+ elif MODELE_CALCUL['NUME_ORDRE']:
+ mfact.update({'NUME_ORDRE':MODELE_CALCUL['NUME_ORDRE']})
+
+ RESU_NX = EXTR_MODE( FILTRE_MODE = mfact )
+ resu_nx = RESU_NX
+
+
+ # Extraction des modes expérimentaux
+ # ----------------------------------
+ if not is_nume_exp:
+ resu_ex = RESU_EXP
+ else:
+ if RESU_EX:
+ self.DeclareOut( "RESU_EX", RESU_EX )
+ mfact = {'MODE':RESU_EXP}
+ if MODELE_MESURE['NUME_MODE']:
+ mfact.update({'NUME_MODE':MODELE_MESURE['NUME_MODE']})
+ elif MODELE_MESURE['NUME_ORDRE']:
+ mfact.update({'NUME_ORDRE':MODELE_MESURE['NUME_ORDRE']})
+
+ RESU_EX = EXTR_MODE( FILTRE_MODE = mfact )
+ resu_ex = RESU_EX
+
+
+
+ # Projection des modes experimentaux - on passe le mot-cle
+ # RESOLUTION directement à PROJ_MESU_MODAL
+ # --------------------------------------------------------
+
+ # Mot-clé facteur de résolution
+ for m in RESOLUTION:
+ if m['METHODE'] == 'SVD':
+ mfact={'METHODE':'SVD','EPS':m['EPS']}
+ if m['REGUL'] != 'NON':
+ mfact.update({'REGUL':m['REGUL']})
+ if m['COEF_PONDER']:
+ mfact.update({'COEF_PONDER':m['COEF_PONDER']})
+ if m['COEF_PONDER_F']:
+ mfact.update({'COEF_PONDER_F':m['COEF_PONDER_F']})
+ elif m['METHODE'] == 'LU':
+ mfact = {'METHODE':'LU'}
+
+ # Paramètres à garder : si on étend des mode_meca, on conserve les
+ # freq propres, amortissements réduits, et masses généralisées. Pour
+ # les dyna_harmo, on conserve les fréquences uniquement
+ if isinstance(RESU_EXP, mode_meca):
+ paras = ('FREQ','AMOR_REDUIT','MASS_GENE',)
+ elif isinstance(RESU_EXP, dyna_harmo):
+ paras = ('FREQ')
+ else:
+ paras = None
+ #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
+ UTMESS('A','MEIDEE0_1')
+
+
+ try:
+ __PROJ = PROJ_MESU_MODAL(MODELE_CALCUL = _F( BASE=resu_nx,
+ MODELE=MOD_CALCUL,
+ ),
+ MODELE_MESURE = _F( MESURE=resu_ex,
+ MODELE=MOD_MESURE,
+ NOM_CHAM=NOM_CHAM,
+ ),
+ RESOLUTION=mfact,
+ NOM_PARA=paras,
+ );
+ except Exception, err:
+ raise Exception, err
+
+ # Phase de reconstruction des donnees mesurees sur le maillage
+ # numerique
+ # ------------------------------------------------------------
+ if RESU_ET:
+ self.DeclareOut( "RESU_ET", RESU_ET )
+ RESU_ET = REST_GENE_PHYS( RESU_GENE = __PROJ,
+ TOUT_ORDRE = 'OUI',
+ NOM_CHAM = NOM_CHAM);
+
+
+
+ # Restriction des modes mesures etendus sur le maillage capteur
+ # -------------------------------------------------------------
+ if RESU_RD:
+ self.DeclareOut( "RESU_RD", RESU_RD )
+
+ nume=None
+ if resu_ex.REFD.get():
+ tmp = resu_ex.REFD.get()[3]
+ if tmp.strip() :
+ nume = self.get_concept(tmp)
+ elif NUME_DDL:
+ nume = NUME_DDL
+ if not nume :
+ UTMESS('A','MEIDEE0_5')
+ RESU_RD = PROJ_CHAMP( METHODE = 'ELEM',
+ RESULTAT = RESU_ET,
+ MODELE_1 = MOD_CALCUL,
+ MODELE_2 = MOD_MESURE,
+ NOM_CHAM = NOM_CHAM,
+ TOUT_ORDRE = 'OUI',
+ NUME_DDL = nume,
+ VIS_A_VIS =_F( TOUT_1='OUI',
+ TOUT_2='OUI',),
+ NOM_PARA = paras,
+ );
+
+
+ return ier
--- /dev/null
+#@ MODIF macro_matr_ajou_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
+# -*- 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
+ import aster
+ from Utilitai.Utmess import UTMESS
+ 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 :
+ message= '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE \n'
+ message=message+ ' sera affecte par la masse volumique RHO = '+str(FLUIDE['RHO'])+' \n'
+ aster.affiche('MESSAGE',message)
+ if FLUIDE['GROUP_MA']!=None :
+ message= '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse \n'
+ message=message+ 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE. \n'
+ aster.affiche('MESSAGE',message)
+ else :
+ for flu in FLUIDE :
+ if flu['GROUP_MA']==None :
+ UTMESS('F','MATRICE0_1')
+
+ 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:
+ UTMESS('F','MATRICE0_2')
+
+ __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 :
+ UTMESS('F','MATRICE0_3')
+
+ 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 :
+ UTMESS('F','MATRICE0_4')
+
+ RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
+ MODELE_INTERFACE = __NOMINT,
+ CHARGE = __CHARGE,
+ CHAM_MATER = __NOMCMA,
+ OPTION = 'RIGI_AJOU',
+ SOLVEUR = solveur,
+ POTENTIEL = __POTEN,
+ **mostcles)
+
+# ---------------------------------------------------------------
+# boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
+ if FORC_AJOU!=None :
+ for FORCAJ in FORC_AJOU:
+ self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
+ solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+ mostcles={}
+ if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
+ if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
+ elif MODELE_GENE !=None :
+ mostcles['MODELE_GENE'] =MODELE_GENE
+ mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
+ mostcles['DIST_REFE'] =DIST_REFE
+ if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
+ if MODE_STAT !=None :
+ mostcles['MODE_STAT'] =MODE_STAT
+ if FORCAJ['NOEUD'] !=None : mostcles['NOEUD'] =FORCAJ['NOEUD']
+ if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO'] =FORCAJ['GROUP_NO']
+ else :
+ mostcles['MONO_APPUI'] =MONO_APPUI
+
+ VECTAJ = CALC_FORC_AJOU(DIRECTION = FORCAJ['DIRECTION'],
+ MODELE_FLUIDE = __NOMFLU,
+ MODELE_INTERFACE = __NOMINT,
+ CHARGE = __CHARGE,
+ CHAM_MATER = __NOMCMA,
+ SOLVEUR = solveur,
+ **mostcles)
+
+
+ return ier
--- /dev/null
+#@ MODIF macro_matr_asse_ops Macro DATE 13/04/2010 AUTEUR PELLET 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,CHAR_CINE,INST,INFO,**args):
+ """
+ Ecriture de la macro MACRO_MATR_ASSE
+ """
+ ier=0
+ from Utilitai.Utmess import UTMESS
+
+ # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+ numeddl=NUME_DDL
+ info=INFO
+ # 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.set_icmd(1)
+
+ # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+ methode=SOLVEUR['METHODE']
+ renum=SOLVEUR['RENUM']
+
+ 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') :
+ UTMESS('F','MATRICE0_9')
+
+
+ motscles={'OPTION':option}
+ if option == 'RIGI_MECA_HYST':
+ if (not lrigel):
+ UTMESS('F','MATRICE0_10')
+ motscles['RIGI_MECA'] =rigel
+ if option == 'AMOR_MECA':
+ if (not lrigel or not lmasel):
+ UTMESS('F','MATRICE0_11')
+ 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'):
+ motscles['CHARGE'] =CHARGE
+ if CHAM_MATER != None and option != 'RIGI_GEOM' : 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
+ _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,INFO=info)
+ else:
+ num=numeddl
+
+ self.DeclareOut('mm',m['MATRICE'])
+ motscles={'OPTION':option}
+ if CHAR_CINE != None:
+ mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num,CHAR_CINE=CHAR_CINE)
+ else:
+ mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num)
+
+ return ier
--- /dev/null
+#@ MODIF macro_miss_3d_ops Macro DATE 16/02/2010 AUTEUR COURTOIS 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_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
+ UNITE_MODELE_SOL,UNITE_RESU_IMPE,
+ PROJET,REPERTOIRE,OPTION,VERSION,
+ UNITE_RESU_FORC,TABLE_SOL,PARAMETRE,**args):
+ """
+ Ecriture de la macro MACRO_MISS_3D
+ """
+ import types
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS, MessageError
+ from Utilitai.Table import Table
+ from Miss.miss_fichier_sol import fichier_sol
+
+ 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.set_icmd(1)
+
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=UNITE_IMPR_ASTER)
+
+ import aster
+ loc_fic=aster.repout()
+ tv = aster.__version__.split('.')
+ if len(tv) < 3:
+ tv.extend(['x']*(3-len(tv)))
+ elif len(tv) > 3:
+ tv = tv[:3]
+ vers = '%2s.%2s.%2s' % tuple(tv)
+
+ # if vers > ' 8. 3.11':
+ # miss3d='/aster/logiciels/MISS3D/NEW/miss3d.csh'
+ # else:
+ # miss3d=loc_fic+'miss3d'
+
+ miss3d=loc_fic+'miss3d'
+
+ # miss3d='/aster/logiciels/MISS3D/miss3d.csh-beta-modif'
+
+ # if VERSION=='V1_2':
+ # if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE':
+ # raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version")
+
+ 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)
+ prfor = 'fort.'+str(UNITE_RESU_FORC)
+
+ if TABLE_SOL != None :
+
+ tabsol = TABLE_SOL.EXTR_TABLE()
+ try:
+ texte = fichier_sol(tabsol)
+ except MessageError, err:
+ UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+ fdsol=open(pdsol,'w')
+ fdsol.write(texte)
+ fdsol.close()
+
+ l_para = ['FREQ_MIN','FREQ_MAX','FREQ_PAS','Z0','RFIC','SURF',
+ 'FICH_RESU_IMPE','FICH_RESU_FORC','TYPE','DREF','ALGO',
+ 'OFFSET_MAX','OFFSET_NB','SPEC_MAX','SPEC_NB','ISSF',
+ 'FICH_POST_TRAI','CONTR_NB','CONTR_LISTE','LFREQ_NB',
+ 'LFREQ_LISTE','DIRE_ONDE']
+ if PARAMETRE != None and PARAMETRE['LFREQ_NB'] != None:
+ if len(PARAMETRE['LFREQ_LISTE']) != PARAMETRE['LFREQ_NB']:
+ UTMESS('F','MISS0_1')
+ if PARAMETRE != None and PARAMETRE['CONTR_NB'] != None:
+ if len(PARAMETRE['CONTR_LISTE']) != 3*PARAMETRE['CONTR_NB']:
+ UTMESS('F','MISS0_2')
+
+ pndio = '0'
+ dpara = {}
+ for cle in l_para:
+ if cle in ('SURF', 'ISSF', ):
+ dpara[cle] = 'NON'
+ else:
+ dpara[cle] = '0'
+ if PARAMETRE != None and PARAMETRE[cle] != None:
+ if type(PARAMETRE[cle]) in (tuple, list):
+ dpara[cle] = repr(' '.join([str(s) for s in PARAMETRE[cle]]))
+ else:
+ dpara[cle] = str(PARAMETRE[cle])
+ if cle in ('DIRE_ONDE', ):
+ pndio = '1'
+ dpara['SURF'] = 'NON'
+
+ EXEC_LOGICIEL(
+ LOGICIEL=miss3d,
+ ARGUMENT=(MODUL2,
+ ETUDE,
+ BASE,
+ paste,
+ popti,
+ pdsol,
+ primp,
+ VERSION,
+ dpara['FREQ_MIN'],
+ dpara['FREQ_MAX'],
+ dpara['FREQ_PAS'],
+ dpara['Z0'],
+ dpara['SURF'],
+ dpara['RFIC'],
+ dpara['FICH_RESU_IMPE'],
+ dpara['FICH_RESU_FORC'],
+ dpara['DREF'],
+ dpara['ALGO'],
+ dpara['OFFSET_MAX'],
+ dpara['OFFSET_NB'],
+ dpara['SPEC_MAX'],
+ dpara['SPEC_NB'],
+ dpara['ISSF'],
+ dpara['FICH_POST_TRAI'],
+ dpara['CONTR_NB'],
+ dpara['CONTR_LISTE'],
+ dpara['LFREQ_NB'],
+ dpara['LFREQ_LISTE'],
+ dpara['TYPE'],
+ prfor,
+ pndio,
+ dpara['DIRE_ONDE'],
+ ),
+ INFO=1,)
+
+ return ier
--- /dev/null
+#@ MODIF macro_mode_meca_ops Macro DATE 06/07/2009 AUTEUR COURTOIS 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')
+ # La macro compte pour 1 dans la numerotation des commandes
+ 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,
+ 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)
+ return ier
--- /dev/null
+#@ MODIF macro_proj_base_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
+# -*- 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
+ from Utilitai.Utmess import UTMESS
+ # 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.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:
+ UTMESS('F','MODAL0_1')
+ 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:
+ UTMESS('F','MODAL0_1')
+ motscles['TYPE_VECT']=v['TYPE_VECT']
+ self.DeclareOut('vv',v['VECTEUR'])
+ vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
+
+ return ier
--- /dev/null
+#@ MODIF observation_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 observation_ops(self,
+ PROJECTION = None,
+ MODELE_1 = None,
+ MODELE_2 = None,
+ RESULTAT = None,
+ NUME_DDL = None,
+ MODI_REPERE = None,
+ NOM_CHAM = None,
+ FILTRE = None,
+ EPSI_MOYENNE = None,
+ **args):
+
+ """
+ Ecriture de la macro MACRO_OBSERVATION
+ """
+ ier=0
+
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # on transforme le mc MODI_REPERE pour ne pas le confondre avec l'operateur
+ # du meme nom
+ MODIF_REPERE = MODI_REPERE
+
+ # importation de commandes
+ import aster
+ from Accas import _F
+ from Utilitai.UniteAster import UniteAster
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table
+ from Cata.cata import mode_meca, dyna_harmo, evol_elas,dyna_trans
+ MODI_REPERE = self.get_cmd('MODI_REPERE')
+ PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ CREA_RESU = self.get_cmd('CREA_RESU')
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+ # dans **args, on range les options de PROJ_CHAMP facultatives, et dont on
+ # ne sert pas par la suite
+ mcfact = args
+
+ if NOM_CHAM == 'DEPL':
+ if isinstance( RESULTAT, dyna_harmo):
+ TYPE_CHAM = 'NOEU_DEPL_C'
+ else:
+ TYPE_CHAM = 'NOEU_DEPL_R'
+ elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+ if isinstance( RESULTAT, dyna_harmo):
+ TYPE_CHAM = 'NOEU_EPSI_C'
+ else:
+ TYPE_CHAM = 'NOEU_EPSI_R'
+ else:
+ UTMESS('F','ELEMENTS4_48',valk=[NOM_CHAM])
+
+ if isinstance( RESULTAT, evol_elas): TYPE_RESU='EVOL_ELAS'
+ if isinstance( RESULTAT, dyna_trans): TYPE_RESU='DYNA_TRANS'
+ if isinstance( RESULTAT, dyna_harmo): TYPE_RESU='DYNA_HARMO'
+ if isinstance( RESULTAT, mode_meca): TYPE_RESU='MODE_MECA'
+
+ self.DeclareOut( 'RESU', self.sd)
+ jdc = CONTEXT.get_current_step().jdc
+
+ # recuperation du maillage associe au modele numerique
+ _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE .LGRF' )
+ maillage = _maillag[0].strip()
+ mayanum = self.get_concept(maillage)
+
+ # modele numerique 2D ou 3D
+ typmod= mayanum.DIME.get()
+ typmod = typmod[5]
+
+ # recuperation du maillage associe au modele experimental
+ _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE .LGRF' )
+ maillage = _maillag[0].strip()
+ mayaexp = self.get_concept(maillage)
+
+ # cham_mater et cara_elem pour le resultat a projeter
+ iret,ibid,nom_cara_elem = aster.dismoi('F','CARA_ELEM',RESULTAT.nom,'RESULTAT')
+ if len(nom_cara_elem) > 0 :
+ assert nom_cara_elem.strip() != "#PLUSIEURS" , nom_cara_elem
+ if nom_cara_elem.strip() == "#AUCUN" :
+ cara_elem = None
+ else :
+ cara_elem = self.get_concept(nom_cara_elem.strip())
+ else:
+ cara_elem = None
+
+ iret,ibid,nom_cham_mater = aster.dismoi('F','CHAM_MATER',RESULTAT.nom,'RESULTAT')
+ if len(nom_cham_mater) > 0 :
+ assert nom_cham_mater.strip() != "#PLUSIEURS" , nom_cham_mater
+ if nom_cham_mater.strip() == "#AUCUN" :
+ cham_mater = None
+ else :
+ cham_mater = self.get_concept(nom_cham_mater.strip())
+ else:
+ cham_mater = None
+
+ # afreq pour les frequences propres
+ if isinstance( RESULTAT, mode_meca):
+ from Cata.cata import RECU_TABLE
+ __freq = RECU_TABLE(CO=RESULTAT,
+ NOM_PARA='FREQ',);
+ afreq = __freq.EXTR_TABLE().Array('NUME_ORDRE','FREQ')
+ else:
+ afreq = None
+
+ nume_ordr_demande = mcfact['NUME_ORDRE']
+ if type(nume_ordr_demande) != tuple :
+ nume_ordr_demande = [nume_ordr_demande]
+
+ num_max = len(RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE'])
+
+#***********************************************
+# PHASE DE CALCUL DE LA DEFORMATION MOYENNE AUX NOEUDS
+# CHAMP CALCULE SUR LE MODELE NUMERIQUE
+#***********************************************
+
+ if EPSI_MOYENNE != None :
+
+ if NOM_CHAM != 'EPSI_NOEU_DEPL':
+ __proj= RESULTAT
+ UTMESS('F','UTILITAI8_24',valk=['NOEU_EPSI',NOM_CHAM])
+ else:
+ if nume_ordr_demande[0]:
+ num_ordr = nume_ordr_demande
+ else:
+ num_ordr = RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE']
+
+ if isinstance( RESULTAT, evol_elas):
+ list_inst = RESULTAT.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_trans):
+ list_inst = RESULTAT.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_harmo):
+ list_freq = RESULTAT.LIST_VARI_ACCES()['FREQ']
+
+ liste = []
+
+ # il faut calculer le champ complet
+ if typmod == 2:
+ nom_cmps = ['EPXX','EPYY','EPZZ','EPXY',]
+ else:
+ nom_cmps = ['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',]
+
+ argsi = {'ACTION' : [], }
+ lnoeuds = { }
+ nb_mcfact = 0
+ seuil = []
+ masque = []
+ for epsi_moye in EPSI_MOYENNE :
+ mcfactr = { }
+ mcfacti = { }
+ l_noeud = None
+ val_masque = []
+ seuil_lu = epsi_moye['SEUIL_VARI']
+ if type(seuil_lu) == tuple :
+ val_seuil = seuil_lu[0]
+ else:
+ val_seuil = seuil_lu
+ seuil.append(val_seuil)
+ masque_lu = epsi_moye['MASQUE']
+ if type(masque_lu) != tuple :
+ val_masque.append(masque_lu)
+ else:
+ val_masque = masque_lu
+ masque.append(val_masque)
+ for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+ if epsi_moye[typ] != None:
+ l_noeud = find_no(mayanum, {typ : epsi_moye[typ]})
+ nb_mcfact = nb_mcfact + 1
+ for i in range(len(l_noeud)):
+ l_noeud[i]=l_noeud[i].strip()
+ lnoeuds[str(nb_mcfact)]=l_noeud
+
+ if l_noeud == None:
+ UTMESS('F','MODELISA3_13',valk=['EPSI_MOYENNE'])
+
+ if TYPE_CHAM[-1:] == 'C':
+ mcfactr = { 'NOM_CMP' : nom_cmps,
+ 'OPERATION' : 'EXTRACTION',
+ 'INTITULE' : str('R'+str(nb_mcfact)),
+ 'FORMAT_C' : 'REEL',
+ 'NOEUD' : l_noeud,
+ 'NOM_CHAM' : 'EPSI_NOEU_DEPL',
+ 'RESULTAT' : RESULTAT,
+ 'NUME_ORDRE' : num_ordr,
+ }
+ argsi['ACTION'].append(mcfactr)
+ mcfacti = { 'NOM_CMP' : nom_cmps,
+ 'OPERATION' : 'EXTRACTION',
+ 'INTITULE' : str('I'+str(nb_mcfact)),
+ 'FORMAT_C' : 'IMAG',
+ 'NOEUD' : l_noeud,
+ 'NOM_CHAM' : 'EPSI_NOEU_DEPL',
+ 'RESULTAT' : RESULTAT,
+ 'NUME_ORDRE' : num_ordr,
+ }
+ argsi['ACTION'].append(mcfacti)
+ else:
+ mcfactr = { 'NOM_CMP' : nom_cmps,
+ 'OPERATION' : 'EXTRACTION',
+ 'INTITULE' : str(nb_mcfact),
+ 'NOEUD' : l_noeud,
+ 'NOM_CHAM' : 'EPSI_NOEU_DEPL',
+ 'RESULTAT' : RESULTAT,
+ 'NUME_ORDRE' : num_ordr,
+ }
+ argsi['ACTION'].append(mcfactr)
+
+ _tepsi=POST_RELEVE_T(
+ **argsi)
+
+ table=_tepsi.EXTR_TABLE()
+
+ DETRUIRE( CONCEPT= _F( NOM = _tepsi ), INFO=1)
+
+ mcfact2 = { }
+ __chame = [None]*num_max
+ for ind in num_ordr:
+ argsa = {'AFFE' : [], }
+ for mcfacta in range(nb_mcfact):
+ l_noeud_mcfact = lnoeuds[str(mcfacta+1)]
+ l_vmoye=[]
+ l_cmp_vari=[]
+ seuil_mc=seuil[mcfacta]
+ masque_mc=masque[mcfacta]
+ for cmp in nom_cmps:
+ lur = 0
+ lui = 0
+ l_valr= []
+ l_vali= []
+ l_valc= []
+ l_val= []
+ for row in table.rows:
+ if TYPE_CHAM[-1:] == 'C':
+ if row['INTITULE'].strip() == str('R'+str(mcfacta+1)) \
+ and row['NUME_ORDRE'] == ind :
+ l_valr.append(row[cmp])
+ lur = 1
+ elif row['INTITULE'].strip() == str('I'+str(mcfacta+1)) \
+ and row['NUME_ORDRE'] == ind :
+ l_vali.append(row[cmp])
+ lui = 1
+
+ else:
+ if row['INTITULE'].strip() == str(mcfacta+1) \
+ and row['NUME_ORDRE'] == ind:
+ l_val.append(row[cmp])
+
+ if TYPE_CHAM[-1:] == 'C':
+ if lur and lui :
+ if len(l_valr) != len(l_vali):
+ UTMESS('F','POSTRELE_59')
+ for i in range(len(l_valr)):
+ l_valc.append(complex(l_valr[i],l_vali[i]))
+
+ lur = 0
+ lui = 0
+ else:
+ UTMESS('F','POSTRELE_59')
+
+ # on regarde a la fois la partie reelle et la partie imag pour les complexes
+ vmoyer = sum(l_valr)/len(l_valr)
+ vmoyei = sum(l_vali)/len(l_vali)
+ vmoye = sum(l_valc)/len(l_valc)
+ vminr = min(l_valr)
+ vmini = min(l_vali)
+ vmaxr = max(l_valr)
+ vmaxi = max(l_vali)
+ if vmoyer > 0:
+ if (vmaxr > vmoyer*(1.+seuil_mc)) or (vminr < vmoyer*(1-seuil_mc)):
+ l_cmp_vari.append(cmp)
+ if vmoyei > 0:
+ if (vmaxi > vmoyei*(1.+seuil_mc)) or (vmini < vmoyei*(1-seuil_mc)):
+ l_cmp_vari.append(cmp)
+ if vmoyer < 0:
+ if (vminr > vmoyer*(1.-seuil_mc)) or (vmaxr < vmoyer*(1+seuil_mc)):
+ l_cmp_vari.append(cmp)
+ if vmoyei < 0:
+ if (vmini > vmoyei*(1.-seuil_mc)) or (vmaxi < vmoyei*(1+seuil_mc)):
+ l_cmp_vari.append(cmp)
+ else:
+ vmoye = sum(l_val)/len(l_val)
+ vmin = min(l_val)
+ vmax = max(l_val)
+ if vmoye > 0:
+ if (vmax > vmoye*(1.+seuil_mc)) or (vmin < vmoye*(1-seuil_mc)):
+ l_cmp_vari.append(cmp)
+ if vmoye < 0:
+ if (vmin > vmoye*(1.-seuil_mc)) or (vmax < vmoye*(1+seuil_mc)):
+ l_cmp_vari.append(cmp)
+
+ l_vmoye.append(vmoye)
+
+ if len(l_cmp_vari) > 0:
+ for cmp in nom_cmps:
+ vu = 0
+ for cmp_vari in l_cmp_vari:
+ if cmp_vari not in masque_mc:
+ if cmp == cmp_vari and not vu:
+ if EPSI_MOYENNE[mcfacta]['MAILLE'] != None:
+ entite = str('MAILLE : '+str(PSI_MOYENNE[mcfacta]['MAILLE']))
+ if EPSI_MOYENNE[mcfacta]['GROUP_MA'] != None:
+ entite = str('GROUP_MA : '+str(EPSI_MOYENNE[mcfacta]['GROUP_MA']))
+ UTMESS('A','OBSERVATION_8',vali=[ind],valr=[seuil_mc],valk=[entite,cmp])
+ vu = 1
+
+
+ if TYPE_CHAM[-1:] == 'C':
+ mcfactc = { 'NOM_CMP' : nom_cmps,
+ 'NOEUD' : l_noeud_mcfact,
+ 'VALE_C' : l_vmoye,
+ }
+ else:
+ mcfactc = { 'NOM_CMP' : nom_cmps,
+ 'NOEUD' : l_noeud_mcfact,
+ 'VALE' : l_vmoye,
+ }
+
+ argsa['AFFE'].append(mcfactc)
+
+ __chame[ind-1] = CREA_CHAMP( OPERATION = 'AFFE',
+ MODELE = MODELE_1,
+ PROL_ZERO = 'OUI',
+ TYPE_CHAM = TYPE_CHAM,
+ OPTION = NOM_CHAM,
+ **argsa
+ );
+
+ if isinstance( RESULTAT, mode_meca):
+ mcfact2 = {'CHAM_GD' : __chame[ind-1],
+ 'MODELE' : MODELE_1,
+ 'NUME_MODE' : int(afreq[ind-1,0]),
+ 'FREQ' : afreq[ind-1,1],
+ }
+
+ if isinstance( RESULTAT, evol_elas):
+ mcfact2 = {'CHAM_GD' : __chame[ind-1],
+ 'MODELE' : MODELE_1,
+ 'INST' : list_inst[ind-1],
+ }
+
+ if isinstance( RESULTAT, dyna_trans):
+ mcfact2 = {'CHAM_GD' : __chame[ind-1],
+ 'MODELE' : MODELE_1,
+ 'INST' : list_inst[ind],
+ }
+
+ if isinstance( RESULTAT, dyna_harmo):
+ mcfact2 = {'CHAM_GD' : __chame[ind-1],
+ 'MODELE' : MODELE_1,
+ 'FREQ' : list_freq[ind-1],
+ }
+
+ if cham_mater is not None:
+ mcfact2['CHAM_MATER'] = cham_mater
+ if cara_elem is not None:
+ mcfact2['CARA_ELEM'] = cara_elem
+
+ liste.append(mcfact2)
+
+ __proj = CREA_RESU(
+ OPERATION = 'AFFE',
+ TYPE_RESU = TYPE_RESU,
+ NOM_CHAM = NOM_CHAM,
+ AFFE = liste,
+ );
+ else:
+ __proj= RESULTAT
+
+
+#***********************************************
+# PHASE DE PROJECTION
+#***********************************************
+
+ if PROJECTION == 'OUI':
+ __proj=PROJ_CHAMP(RESULTAT = __proj,
+ MODELE_1 = MODELE_1,
+ MODELE_2 = MODELE_2,
+ NUME_DDL = NUME_DDL,
+ NOM_CHAM = NOM_CHAM,
+ **mcfact
+ );
+
+ modele = MODELE_2
+ else:
+ modele = MODELE_1
+
+
+#***********************************************
+# PHASE DE CHANGEMENT DE REPERE
+#***********************************************
+# Le changement de repere se fait dans les routines exterieures crea_normale et crea_repere
+
+# On range dans le mcfact MODI_REPERE une liste de modifications. ex :
+# MODI_REPERE = ( _F( GROUP_NO = toto,
+# REPERE = 'NORMALE' ),
+# CONDITION = (1.0,0.0,0.0),
+# NOM_PARA = 'X')
+# _F( NOEUD = ('a','z','e'...),
+# REPERE = 'CYLINDRIQUE',
+# ORIGINE = (0.,0.,0.),
+# AXE_Z = (0.,1.,0.), ),
+# _F( GROUP_NO = titi,
+# REPERE = 'UTILISATEUR',
+# ANGL_NAUT = (alpha, beta, gamma), )
+# )
+
+
+ if MODIF_REPERE != None :
+ if nume_ordr_demande[0]:
+ num_ordr = nume_ordr_demande
+ else:
+ num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+ for modif_rep in MODIF_REPERE :
+ type_cham = modif_rep['TYPE_CHAM']
+ if type_cham == 'TENS_2D':
+ nom_cmp = ['EPXX','EPYY','EPZZ','EPXY',]
+ elif type_cham == 'TENS_3D':
+ nom_cmp = ['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',]
+ else:
+ nom_cmp = modif_rep['NOM_CMP']
+ mcfact1 = { 'NOM_CMP' : nom_cmp,
+ 'TYPE_CHAM' : type_cham,
+ 'NOM_CHAM' : NOM_CHAM }
+
+ mcfact2 = { }
+ modi_rep = modif_rep.val
+
+ if modi_rep['REPERE'] == 'DIR_JAUGE' :
+ vect_x = None
+ vect_y = None
+ if modi_rep.has_key('VECT_X'):
+ vect_x = modi_rep['VECT_X']
+ if modi_rep.has_key('VECT_Y'):
+ vect_y = modi_rep['VECT_Y']
+
+ # il faut des mailles pour les tenseurs d'ordre 2
+ taille = 0
+ for typ in ['MAILLE','GROUP_MA',]:
+ if modi_rep.has_key(typ) :
+ if PROJECTION == 'OUI':
+ maya = mayaexp
+ else:
+ maya = mayanum
+ list_ma = find_ma(maya, {typ : modi_rep[typ]})
+ taille = len(list_ma)
+
+ mcfact1.update({ 'MAILLE' : list_ma })
+ angl_naut = crea_repere_xy(vect_x, vect_y)
+
+ mcfact2.update({ 'REPERE' : 'UTILISATEUR',
+ 'ANGL_NAUT' : angl_naut })
+
+ args = {'MODI_CHAM' : mcfact1,
+ 'DEFI_REPERE' : mcfact2 }
+
+ __proj = MODI_REPERE( RESULTAT = __proj,
+ NUME_ORDRE = num_ordr,
+ **args)
+
+ if modi_rep['REPERE'] == 'NORMALE' :
+ # Cas ou l'utilisateur choisit de creer les reperes locaux
+ # selon la normale. On fait un changement de repere local
+ # par noeud
+ for option in ['VECT_X','VECT_Y','CONDITION_X','CONDITION_Y'] :
+ if modi_rep.has_key(option):
+ vect = { option : modi_rep[option] }
+ if len(vect) != 1 :
+ UTMESS('E','UTILITAI7_9')
+
+ chnorm = crea_normale(self, MODELE_1, MODELE_2, NUME_DDL,
+ cham_mater, cara_elem)
+ modele = MODELE_2
+ chnormx = chnorm.EXTR_COMP('DX',[],1)
+ ind_noeuds = chnormx.noeud
+ nom_allno = [mayaexp.NOMNOE.get()[k-1] for k in ind_noeuds]
+
+ # on met les noeuds conernes sous forme de liste et on va
+ # chercher les noeuds des mailles pour 'MAILLE' et 'GROUP_MA'
+ for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+ if modi_rep.has_key(typ) :
+ list_no_exp = find_no(mayaexp, {typ : modi_rep[typ]})
+
+ # boucle sur les noeuds pour modifier les reperes.
+ __bid = [None]*(len(list_no_exp) + 1)
+ __bid[0] = __proj
+ k = 0
+ for nomnoe in list_no_exp:
+ ind_no = nom_allno.index(nomnoe)
+ angl_naut = crea_repere(chnorm, ind_no, vect)
+
+ mcfact1.update({ 'NOEUD' : nomnoe })
+ mcfact2.update({ 'REPERE' : 'UTILISATEUR',
+ 'ANGL_NAUT' : angl_naut})
+ args = {'MODI_CHAM' : mcfact1,
+ 'DEFI_REPERE' : mcfact2 }
+ __bid[k+1] = MODI_REPERE( RESULTAT = __bid[k],
+ TOUT_ORDRE = 'OUI',
+ CRITERE = 'RELATIF',
+ **args)
+ k = k + 1
+
+ __proj = __bid[-1:][0]
+
+
+ if modi_rep['REPERE'] == 'UTILISATEUR' or modi_rep['REPERE'] == 'CYLINDRIQUE':
+
+ if type_cham == 'TENS_2D' or type_cham == 'TENS_3D' :
+ for typ in ['MAILLE','GROUP_MA',]:
+ if modi_rep.has_key(typ) :
+ mcfact1.update({typ : modi_rep[typ]})
+ else:
+ for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+ if modi_rep.has_key(typ) :
+ mcfact1.update({typ : modi_rep[typ]})
+
+ if modi_rep['REPERE'] == 'CYLINDRIQUE' :
+ origine = modi_rep['ORIGINE']
+ axe_z = modi_rep['AXE_Z']
+ mcfact2.update({ 'REPERE' : 'CYLINDRIQUE',
+ 'ORIGINE' : origine,
+ 'AXE_Z' : axe_z })
+
+ elif modi_rep['REPERE'] == 'UTILISATEUR' :
+ angl_naut = modi_rep['ANGL_NAUT']
+ mcfact2.update({ 'REPERE' : 'UTILISATEUR',
+ 'ANGL_NAUT' : angl_naut })
+
+ args = {'MODI_CHAM' : mcfact1,
+ 'DEFI_REPERE' : mcfact2 }
+
+ __bidon = MODI_REPERE( RESULTAT = __proj,
+ CRITERE = 'RELATIF',
+ **args)
+ DETRUIRE( CONCEPT= _F( NOM = __proj ), INFO=1)
+ __proj = __bidon
+
+
+#*************************************************
+# Phase de selection des DDL de mesure
+#*************************************************
+
+ if FILTRE != None:
+ if nume_ordr_demande[0]:
+ num_ordr = nume_ordr_demande
+ else:
+ num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+ __chamf = [None]*num_max
+ if isinstance( RESULTAT, evol_elas):
+ list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_trans):
+ list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_harmo):
+ list_freq_ini = RESULTAT.LIST_VARI_ACCES()['FREQ']
+
+ liste = []
+
+ for ind in num_ordr:
+ mcfact2 = { }
+ filtres = []
+ __chamex = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'EXTR',
+ RESULTAT = __proj,
+ NOM_CHAM = NOM_CHAM,
+ NUME_ORDRE = ind,);
+
+ for mcfiltre in FILTRE :
+ mcfact1 = {}
+ filtre = mcfiltre.val
+ for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+ if filtre.has_key(typ) :
+ mcfact1.update({typ : filtre[typ]})
+ mcfact1.update({'NOM_CMP' : filtre['DDL_ACTIF'],
+ 'CHAM_GD' : __chamex })
+ filtres.append(mcfact1)
+
+ if NOM_CHAM == 'DEPL':
+ __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'ASSE',
+ MODELE = modele,
+ ASSE = filtres
+ );
+
+ elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+ __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = modele,
+ ASSE = filtres,
+ );
+
+ else:
+ valk = []
+ valk.append(NOM_CHAM)
+ valk.append('DEPL')
+ valk.append('EPSI_NOEU_DEPL')
+ UTMESS('F','OBSERVATION_6',valk)
+
+ if isinstance( RESULTAT, mode_meca):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'NUME_MODE' : int(afreq[ind-1,0]),
+ 'FREQ' : afreq[ind-1,1],
+ }
+
+ if isinstance( RESULTAT, evol_elas):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'INST' : list_inst_ini[ind-1],
+ }
+
+ if isinstance( RESULTAT, dyna_trans):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'INST' : list_inst_ini[ind-1],
+ }
+
+ if isinstance( RESULTAT, dyna_harmo):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : MODELE_2,
+ 'FREQ' : list_freq_ini[ind-1],
+ }
+
+
+ if cham_mater is not None:
+ mcfact2['CHAM_MATER'] = cham_mater
+ if cara_elem is not None:
+ mcfact2['CARA_ELEM'] = cara_elem
+
+ liste.append(mcfact2)
+ DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+
+ __proj = CREA_RESU(
+ OPERATION = 'AFFE',
+ TYPE_RESU = TYPE_RESU,
+ NOM_CHAM = NOM_CHAM,
+ AFFE = liste,
+ );
+
+#*************************************************
+# Recopie des resultats (__proj) dans RESU
+#*************************************************
+
+ if nume_ordr_demande[0]:
+ num_ordr = nume_ordr_demande
+ else:
+ num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+ __chamf = [None]*num_max
+ if isinstance( RESULTAT, evol_elas):
+ list_inst = __proj.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_trans):
+ list_inst = __proj.LIST_VARI_ACCES()['INST']
+ if isinstance( RESULTAT, dyna_harmo):
+ list_freq = __proj.LIST_VARI_ACCES()['FREQ']
+
+ liste = []
+
+ for ind in num_ordr:
+ mcfact2 = { }
+ filtres = []
+ __chamex = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'EXTR',
+ RESULTAT = __proj,
+ NOM_CHAM = NOM_CHAM,
+ NUME_ORDRE = ind,);
+
+ mcfact1 = {}
+ mcfact1.update({'TOUT' : 'OUI',
+ 'CHAM_GD' : __chamex })
+ filtres.append(mcfact1)
+
+ if NOM_CHAM == 'DEPL':
+ __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'ASSE',
+ MODELE = modele,
+ ASSE = filtres
+ );
+
+ elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+ __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+ OPERATION = 'ASSE',
+ PROL_ZERO = 'OUI',
+ MODELE = modele,
+ ASSE = filtres,
+ );
+
+ else:
+ valk = []
+ valk.append(NOM_CHAM)
+ valk.append('DEPL')
+ valk.append('EPSI_NOEU_DEPL')
+ UTMESS('F','OBSERVATION_6',valk)
+
+ if isinstance( RESULTAT, mode_meca):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'NUME_MODE' : int(afreq[ind-1,0]),
+ 'FREQ' : afreq[ind-1,1],
+ }
+
+ if isinstance( RESULTAT, evol_elas):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'INST' : list_inst[ind-1],
+ }
+
+ if isinstance( RESULTAT, dyna_trans):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : modele,
+ 'INST' : list_inst[ind-1],
+ }
+
+ if isinstance( RESULTAT, dyna_harmo):
+ mcfact2 = {'CHAM_GD' : __chamf[ind-1],
+ 'MODELE' : MODELE_2,
+ 'FREQ' : list_freq[ind-1],
+ }
+
+
+ if cham_mater is not None:
+ mcfact2['CHAM_MATER'] = cham_mater
+ if cara_elem is not None:
+ mcfact2['CARA_ELEM'] = cara_elem
+
+ liste.append(mcfact2)
+ DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+
+ RESU = CREA_RESU(
+ OPERATION = 'AFFE',
+ TYPE_RESU = TYPE_RESU,
+ NOM_CHAM = NOM_CHAM,
+ AFFE = liste,
+ );
+
+ return ier
+
+
+
+
+#**********************************************
+# RECUPERATION DES NORMALES
+#**********************************************
+
+def crea_normale(self, modele_1, modele_2,
+ nume_ddl, cham_mater=None, cara_elem=None):
+ """Cree un champ de vecteurs normaux sur le maillage experimental, par
+ projection du champ de normales cree sur le maillage numerique
+ les mailles doivent etre des elements de <peau> (facettes)
+ """
+ PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ CREA_RESU = self.get_cmd('CREA_RESU')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+ import aster
+ from Accas import _F
+ # recherche du maillage associe au modele numerique
+ nom_modele_num = modele_1.nom
+ _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE .LGRF' )
+ maillage = _maillag[0].strip()
+ jdc = CONTEXT.get_current_step().jdc
+ mayanum = self.get_concept(maillage)
+
+
+ DEFI_GROUP( reuse = mayanum,
+ MAILLAGE = mayanum,
+ CREA_GROUP_MA = _F( NOM = '&&TOUMAI',
+ TOUT = 'OUI' )
+ );
+
+ __norm1 = CREA_CHAMP( MODELE = modele_1,
+ OPERATION = 'NORMALE',
+ TYPE_CHAM = 'NOEU_GEOM_R',
+ GROUP_MA = '&&TOUMAI',
+ );
+
+ DEFI_GROUP( reuse = mayanum,
+ MAILLAGE = mayanum,
+ DETR_GROUP_MA = _F( NOM = '&&TOUMAI' )
+ );
+
+
+ __norm2 = CREA_CHAMP( OPERATION = 'ASSE',
+ TYPE_CHAM = 'NOEU_DEPL_R',
+ MODELE = modele_1,
+ ASSE = _F( TOUT='OUI',
+ CHAM_GD=__norm1,
+ NOM_CMP=('X','Y','Z'),
+ NOM_CMP_RESU=('DX','DY','DZ')
+ )
+ );
+
+ affe_dct = {'CHAM_GD' : __norm2,
+ 'INST' : 1,
+ 'MODELE' : modele_1}
+ if cham_mater is not None:
+ affe_dct["CHAM_MATER"] = cham_mater
+ if cara_elem is not None:
+ affe_dct["CARA_ELEM"] = cara_elem
+
+ __norm3 = CREA_RESU( OPERATION = 'AFFE',
+ TYPE_RESU = 'EVOL_ELAS',
+ NOM_CHAM = 'DEPL',
+ AFFE = _F(**affe_dct)
+ );
+
+
+ __norm4 = PROJ_CHAMP( RESULTAT = __norm3,
+ MODELE_1 = modele_1,
+ MODELE_2 = modele_2,
+ NOM_CHAM = 'DEPL',
+ TOUT_ORDRE = 'OUI',
+ NUME_DDL = nume_ddl,
+ );
+
+ # __norm5 : toutes les normales au maillage au niveau des capteurs
+ __norm5 = CREA_CHAMP( RESULTAT = __norm4,
+ OPERATION = 'EXTR',
+ NUME_ORDRE = 1,
+ NOM_CHAM = 'DEPL',
+ TYPE_CHAM = 'NOEU_DEPL_R',
+ );
+
+
+ return __norm5
+
+#**********************************************************************
+# Calcul des angles nautiques pour le repere local associe a la normale
+#**********************************************************************
+
+def crea_repere(chnorm, ind_no, vect):
+
+ """Creation d'un repere orthonormal a partir du vecteur normale et
+ d'une equation supplementaire donnee par l'utilisateur sous forme
+ de trois parametres et du vecteur de base concerne.
+ """
+
+ import numpy
+
+ nom_para = vect.keys()[0] # nom_para = 'VECT_X' ou 'VECT_Y'
+ condition = list(vect[nom_para])
+
+ # 1) pour tous les noeuds du maillage experimental, recuperer la normale
+ # calculee a partir du maillage numerique
+ chnormx = chnorm.EXTR_COMP('DX',[],1)
+ chnormy = chnorm.EXTR_COMP('DY',[],1)
+ chnormz = chnorm.EXTR_COMP('DZ',[],1)
+
+ noeuds = chnormx.noeud
+ nbno = len(noeuds)
+
+ normale = [chnormx.valeurs[ind_no],
+ chnormy.valeurs[ind_no],
+ chnormz.valeurs[ind_no]]
+
+ # 2.1) soit l'utilisateur a donne un deuxieme vecteur explicitement
+ # (option VECT_X Ou VECT_Y). Dans ce cas la, le 3e est le produit
+ # vectoriel des deux premiers.
+ if nom_para == 'VECT_X' :
+ vect1 = numpy.array(list(vect[nom_para])) # vect x du reploc
+ vect2 = numpy.cross(normale,vect1)
+ reploc = numpy.array([vect1.tolist(), vect2.tolist(), normale])
+ reploc = numpy.transpose(reploc)
+
+ elif nom_para == 'VECT_Y' :
+ vect2 = numpy.array(list(vect[nom_para])) # vect y du reploc
+ vect1 = numpy.cross(vect2, normale)
+ reploc = numpy.array([vect1.tolist(), vect2.tolist(), normale])
+ reploc = numpy.transpose(reploc)
+
+ # 2.2) TODO : plutot que de donner explicitement un vecteur du repere
+ # local avec VECT_X/Y, on devrait aussi pouvoir donner une condition
+ # sous forme d'une equation sur un de ces vecteurs. Par exemple,
+ # CONDITION_X = (0.,1.,0.) signifierait que le vecteur X1 verifie
+ #x(X1) + y(X1) + z(X1) = 0
+ elif nom_para == 'CONDITION_X':
+ pass
+ elif nom_para == 'CONDITION_Y':
+ pass
+
+ # 3) Calcul de l'angle nautique associe au repere local
+ angl_naut = anglnaut(reploc)
+
+ return angl_naut
+
+
+#**********************************************************************
+# Calcul des angles nautiques pour le repere associe a VECT_X et VECT_Y
+#**********************************************************************
+
+def crea_repere_xy(vect_x, vect_y):
+
+ """Calcul des angles nautiques a partir des directions vect_x et vect_y.
+ Si vect_x != None et vect_y != None alors on impose le premier vecteur de base
+ colineaire a vect_x et le deuxieme vecteur dans le plan (vect_x,vect_y)
+ Si vect_x != None et vect_y == None alors on impose le premier vecteur de base
+ colineaire a vect_x
+ Si vect_x == None et vect_y != None alors on impose le deuxieme vecteur de base
+ colineaire a vect_y
+ Si vect_x == None et vect_y == None alors on ne fait rien
+ """
+
+ import numpy
+ from Utilitai.Utmess import UTMESS
+
+ if vect_x == None and vect_y == None:
+ angl_naut = (0.,0.,0.)
+ else:
+ if vect_x and vect_y:
+ vx = numpy.array(list(vect_x))
+ vy = numpy.array(list(vect_y))
+ vect1 = vx
+ vect3 = numpy.cross(vx,vy)
+ vect2 = numpy.cross(vect3,vx)
+
+ elif vect_x:
+ vx = numpy.array(list(vect_x))
+ vy1 = numpy.cross((1.,0.,0.),vx)
+ vy2 = numpy.cross((0.,1.,0.),vx)
+ vy3 = numpy.cross((0.,0.,1.),vx)
+ n1 = norm(vy1)
+ n2 = norm(vy2)
+ n3 = norm(vy3)
+ nmax = max(n1,n2,n3)
+ if nmax == n1:
+ vy = vy1
+ elif nmax == n2:
+ vy = vy2
+ elif nmax == n3:
+ vy = vy3
+ else:
+ UTMESS('F','UTILITAI_7')
+ vect3 = numpy.cross(vx,vy)
+ vect1 = vx
+ vect2 = numpy.cross(vect3,vect1)
+
+ elif vect_y:
+ vy = numpy.array(list(vect_y))
+ vx1 = numpy.cross((1.,0.,0.),vy)
+ vx2 = numpy.cross((0.,1.,0.),vy)
+ vx3 = numpy.cross((0.,0.,1.),vy)
+ n1 = norm(vx1)
+ n2 = norm(vx2)
+ n3 = norm(vx3)
+ nmax = max(n1,n2,n3)
+ if nmax == n1:
+ vx = vx1
+ elif nmax == n2:
+ vx = vx2
+ elif nmax == n3:
+ vx = vx3
+ else:
+ UTMESS('F','UTILITAI_7')
+ vect3 = numpy.cross(vx,vy)
+ vect2 = vy
+ vect1 = numpy.cross(vect2, vect3)
+
+
+ norm12=numpy.dot(vect1,vect1)
+ norm22=numpy.dot(vect2,vect2)
+ norm32=numpy.dot(vect3,vect3)
+ if norm12 == 0 or norm22 == 0 or norm32 == 0:
+ UTMESS('F','UTILITAI_7')
+ else:
+ reploc = numpy.array([vect1.tolist(),vect2.tolist(),vect3.tolist()])
+ reploc = numpy.transpose(reploc)
+ angl_naut = anglnaut(reploc)
+
+ return angl_naut
+
+#*****************************************************************************
+# Aller chercher une liste de noeuds pour un mot cle 'NOEUD', 'GROUP_NO'
+# 'MAILLE' ou 'GROUP_MA'
+#*****************************************************************************
+
+def find_no(maya,mcsimp):
+ """ Si on demande une liste de noeuds, c'est simple, on retourne les noeuds
+ Si on demande une liste de groupes de noeuds, on va chercher les noeuds
+ dans ces groupes, en faisant attention a ne pas etre redondant
+ Si on demande un liste de mailles, on va chercher dans le .CONNEX
+ du maillage les indices, puis les noms des noeuds concernes
+ etc...
+ """
+
+ import numpy
+
+ list_no = []
+ if mcsimp.has_key('GROUP_NO') and type(mcsimp['GROUP_NO']) != tuple :
+ mcsimp['GROUP_NO'] = [mcsimp['GROUP_NO']]
+ if mcsimp.has_key('MAILLE') and type(mcsimp['MAILLE']) != tuple :
+ mcsimp['MAILLE'] = [mcsimp['MAILLE']]
+ if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple :
+ mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']]
+
+ if mcsimp.has_key('NOEUD') :
+ list_no = list(mcsimp['NOEUD'])
+ elif mcsimp.has_key('GROUP_NO') :
+ for group in mcsimp['GROUP_NO'] :
+ list_ind_no = list(numpy.array(maya.GROUPENO.get()[group.ljust(8)])-1)
+ for ind_no in list_ind_no :
+ nomnoe = maya.NOMNOE.get()[ind_no]
+ if nomnoe not in list_no :
+ list_no.append(nomnoe)
+ elif mcsimp.has_key('MAILLE') :
+ for mail in mcsimp['MAILLE'] :
+ for index in range(len(maya.NOMMAI.get())):
+ if maya.NOMMAI.get()[index].strip() == mail:
+ nu_ma = index
+ for ind_no in maya.CONNEX.get()[nu_ma+1]:
+ nomnoe = maya.NOMNOE.get()[ind_no-1]
+ if nomnoe not in list_no:
+ list_no.append(nomnoe)
+ elif mcsimp.has_key('GROUP_MA') :
+ for group in mcsimp['GROUP_MA'] :
+ list_nu_ma = list(numpy.array(maya.GROUPEMA.get()
+ [group.ljust(8)]) - 1)
+ for nu_ma in list_nu_ma:
+ for ind_no in maya.CONNEX.get()[nu_ma+1]:
+ nomnoe = maya.NOMNOE.get()[ind_no-1]
+ if nomnoe not in list_no:
+ list_no.append(nomnoe)
+
+ return list_no
+
+#*****************************************************************************
+# Aller chercher une liste de mailles pour un mot cle 'MAILLE' ou 'GROUP_MA'
+#*****************************************************************************
+
+def find_ma(maya,mcsimp):
+ """ Si mot cle MAILLE, on retourne la liste des mailles
+ Si mot cle GROUP_MA, on va chercher les mailles dans ces groupes
+ """
+
+ import numpy
+
+ list_ma = []
+ if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple :
+ mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']]
+ if mcsimp.has_key('MAILLE') and type(mcsimp['MAILLE']) != tuple :
+ mcsimp['MAILLE'] = [mcsimp['MAILLE']]
+
+ if mcsimp.has_key('MAILLE') :
+ for mail in mcsimp['MAILLE'] :
+ list_ma.append(mail)
+ elif mcsimp.has_key('GROUP_MA') :
+ for group in mcsimp['GROUP_MA'] :
+ list_ind_ma = list(numpy.array(maya.GROUPEMA.get()[group.ljust(8)])-1)
+ for ind_ma in list_ind_ma :
+ nommail = maya.NOMMAI.get()[ind_ma]
+ if nommail not in list_ma :
+ list_ma.append(nommail)
+
+ return list_ma
+
+
+#************************************************************************************
+# Quelques utilitaires de calculs d'angles nautiques (viennent de zmat004a.comm
+#************************************************************************************
+
+def norm(x):
+ """Calcul de la norme euclidienne d'un vecteur"""
+ import numpy
+ tmp = numpy.sqrt(numpy.dot(x,x))
+ return tmp
+
+
+def anglnaut(P):
+
+
+ """Calcule les angles nautiques correspondant a un repere local
+ NB : seuls les deux premiers vecteurs de P (les images respectives
+ de X et Y) sont utiles pour le calcul des angles
+ """
+
+ import copy
+ import numpy
+ # expression des coordonnees globales des 3 vecteurs de base locale
+ x = numpy.array([1.,0.,0.])
+ y = numpy.array([0.,1.,0.])
+ z = numpy.array([0.,0.,1.])
+
+ xg = P[:,0]
+ yg = P[:,1]
+ zg = P[:,2]
+
+ # calcul des angles nautiques
+ x1=copy.copy(xg)
+ # x1 projection de xg sur la plan xy, non norme
+ x1[2]=0.
+ # produit scalaire X xg
+ normx = norm(x1)
+ if normx == 0.: # on impose alpha = 0 pour lever l'indetermination
+ COSA=1.
+ SINA=0.
+ else:
+ COSA=x1[0]/normx
+ #produit vectoriel X xg
+ SINA=x1[1]/normx
+ ar=numpy.arctan2(SINA,COSA)
+ alpha=ar*180/numpy.pi
+
+ COSB=norm(x1)
+ SINB=-xg[2]
+ beta=numpy.arctan2(SINB,COSB)*180/numpy.pi
+
+ P2=numpy.zeros((3,3))
+ P2[0,0]=numpy.cos(ar)
+ P2[1,0]=numpy.sin(ar)
+ P2[1,1]=numpy.cos(ar)
+ P2[0,1]=-numpy.sin(ar)
+ y1=numpy.dot(P2,y)
+ y1n=y1/norm(y1)
+
+ # calcul de gamma
+ COSG=numpy.dot(y1n,yg)
+ SING=numpy.dot(xg,numpy.cross(y1n,yg))
+ gamma=numpy.arctan2(SING,COSG)*180/numpy.pi
+
+ return alpha,beta,gamma
+
+
+## NB : Equations de passage : un vecteur de coordonnees globales (X,Y,Z) a pour
+## coordonnees locales (X1,Y1,Z1) avec
+## _ _ _ _ _ _ _ _ _ _
+## | 1 0 0 || cos(B) 0 -sin(B) || cos(A) sin(A) 0 || X | | X1 |
+## | 0 cos(G) sin(G) || 0 1 0 || -sin(A) cos(A) 0 || Y | = | Y1 |
+## |_0 -sin(G) cos(G)_||_sin(B) 0 cos(B)_||_ 0 0 1_||_Z_| |_Z1_|
+##
+## A (alpha), B(beta), gamma (G) sont les angle nautiques que l'on donne habituellemet
+## dans les MODI_REPERE. Les equations a resoudre sont les suivantes :
+## cos(A)cos(B) = reploc[0][0]
+## -cos(G)sin(A) + sin(G)cos(A)sin(B) = reploc[0][1]
+## sin(A)sin(G) + cos(A)sin(B)cos(G) = reploc[0][2]
+##
+## sin(A)cos(B) = reploc[1][0]
+## cos(A)cos(G) + sin(A)sin(B)sin(G) = reploc[1][1]
+## -cos(A)sin(G) + sin(A)sin(B)cos(G) = reploc[1][2]
+##
+## -sin(B) = reploc[2][0]
+## cos(B)sin(G) = reploc[2][1]
+## cos(B)cos(G) = reploc[2][2]
+
+
+
--- /dev/null
+#@ MODIF post_coque_ops Macro DATE 08/02/2010 AUTEUR DESROCHES X.DESROCHES
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 post_coque_ops(self,RESULTAT,COOR_POINT,CHAM,NUME_ORDRE,INST,
+ **args):
+ """
+ macro post_coque
+ """
+ import aster
+ import os, string
+ import Accas
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ from Utilitai.Table import Table
+ from Noyau.N_utils import AsType
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ MACR_LIGN_COUPE =self.get_cmd('MACR_LIGN_COUPE')
+ CREA_CHAMP =self.get_cmd('CREA_CHAMP')
+ CREA_TABLE =self.get_cmd('CREA_TABLE')
+ CALC_ELEM =self.get_cmd('CALC_ELEM')
+
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+ MasquerAlarme('MODELISA4_9')
+
+ # Le concept sortant (de type table) est nomme
+ # 'tabout' dans le contexte de la macro
+
+ self.DeclareOut('tabout',self.sd)
+ assert AsType(RESULTAT).__name__ in ('evol_elas','evol_noli',)
+ dico = RESULTAT.LIST_CHAMPS()
+ dico2 = RESULTAT.LIST_VARI_ACCES()
+ iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+ MODEL = self.get_concept(n_modele)
+ if INST != 0.0 :
+ if not INST in dico2['INST'] :
+ UTMESS('F','POST0_20',valr=INST)
+ else :
+ if not NUME_ORDRE in dico['SIEF_ELNO_ELGA'] :
+ if NUME_ORDRE in dico['DEPL'] :
+ CALC_ELEM(RESULTAT=RESULTAT,reuse=RESULTAT,OPTION='SIEF_ELNO_ELGA',
+ NUME_ORDRE=NUME_ORDRE)
+ else :
+ UTMESS('F','POST0_19',vali=NUME_ORDRE)
+ dico = RESULTAT.LIST_CHAMPS()
+
+ # Calcul des deformations sur les peaux inf et sup :
+ if CHAM=='DEFORMATION':
+ if NUME_ORDRE:
+ __ressup=CALC_ELEM(RESULTAT=RESULTAT,
+ OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+ NUME_ORDRE=NUME_ORDRE)
+ __resinf=CALC_ELEM(RESULTAT=RESULTAT,
+ OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+ NUME_ORDRE=NUME_ORDRE)
+ __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
+ OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+ NUME_ORDRE=NUME_ORDRE)
+ __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
+ OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+ NUME_ORDRE=NUME_ORDRE)
+ else :
+ __ressup=CALC_ELEM(RESULTAT=RESULTAT,
+ OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+ INST=INST)
+ __resinf=CALC_ELEM(RESULTAT=RESULTAT,
+ OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+ INST=INST)
+ __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
+ OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+ INST=INST)
+ __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
+ OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+ INST=INST)
+
+
+ # Appel MACR_LIGN_COUPE :
+ motscles={}
+ if CHAM=='EFFORT' : motscles['NOM_CHAM'] ='SIEF_ELNO_ELGA'
+ if CHAM=='DEFORMATION' : motscles['NOM_CHAM'] ='EPSI_ELNO_DEPL'
+
+ if CHAM=='EFFORT' :
+ motscles['LIGN_COUPE']=[]
+ iocc=0
+ for m in COOR_POINT:
+ iocc=iocc+1
+ lst=m['COOR']
+ if len(lst)==4 :
+ if lst[3]!=0. :
+ UTMESS('A','POST0_21',vali=iocc,valr=lst[3])
+ lst=lst[0:3]
+ motscles['LIGN_COUPE'].append(_F(TYPE='SEGMENT',
+ NB_POINTS=2,
+ COOR_ORIG=lst,
+ COOR_EXTR=lst,
+ DISTANCE_MAX=10.0,),)
+ __tabl=MACR_LIGN_COUPE(RESULTAT=RESULTAT,**motscles)
+
+ if CHAM=='DEFORMATION' :
+ tab2=Table()
+ iocc=0
+ for m in COOR_POINT:
+ motscles['LIGN_COUPE']=[]
+ iocc=iocc+1
+ lst=m['COOR']
+ if len(lst)!=4 :
+ UTMESS('F','POST0_22',vali=iocc,)
+ elif (lst[3]>1.) or (lst[3]<-1.) :
+ UTMESS('F','POST0_23',vali=iocc,valr=lst[3],)
+ coesup=0.5+lst[3]*0.5
+ coeinf=0.5-lst[3]*0.5
+ __epsz=CREA_CHAMP(TYPE_CHAM='ELNO_EPSI_R',OPERATION='ASSE',
+ MODELE=MODEL,
+ ASSE=(
+ _F(TOUT='OUI',
+ CHAM_GD=__epsinf,
+ CUMUL='OUI',
+ COEF_R=coeinf,),
+ _F(TOUT='OUI',
+ CHAM_GD=__epssup,
+ CUMUL='OUI',
+ COEF_R=coesup,),),);
+ lst=lst[0:3]
+ motscles['LIGN_COUPE'].append(_F(TYPE='SEGMENT',
+ NB_POINTS=2,
+ COOR_ORIG=lst,
+ COOR_EXTR=lst,
+ DISTANCE_MAX=10.0,),)
+ __tab=MACR_LIGN_COUPE(CHAM_GD=__epsz,MODELE=MODEL,**motscles)
+ __tab2=__tab.EXTR_TABLE()
+ for ligne in __tab2:
+ tab2.append(ligne)
+ tab2=tab2[__tab2.para]
+
+ if CHAM=='EFFORT' :
+ tab2=__tabl.EXTR_TABLE()
+ tab3=(tab2.INST==INST)
+ tab2=tab3
+
+ tab4=Table()
+ ilig=0
+ for ligne in tab2:
+ ilig=ilig+1
+ if(ilig%2)==0:
+ tab4.append(ligne)
+ tab4=tab4[tab2.para]
+ dprod = tab4.dict_CREA_TABLE()
+ tabout = CREA_TABLE(TYPE_TABLE='TABLE',
+ **dprod)
+ RetablirAlarme('MODELISA4_9')
+ return ier
+
--- /dev/null
+#@ MODIF post_dyna_alea_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 random
+from types import ListType, TupleType
+from math import pi,sqrt,log,exp
+
+EnumTypes = (ListType, TupleType)
+
+
+def post_dyna_alea_ops(self,INTE_SPEC, FRAGILITE,TITRE,INFO,**args):
+ import numpy as NP
+ import aster
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from Cata_Utils.t_fonction import t_fonction
+ from Utilitai.Table import Table
+
+ commande='POST_DYNA_ALEA'
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou dérivé) est tab
+ self.DeclareOut('tabout', self.sd)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ IMPR_TABLE = self.get_cmd('IMPR_TABLE')
+ RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+ IMPR_FONCTION = self.get_cmd('IMPR_FONCTION')
+ DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+ CALC_FONCTION = self.get_cmd('CALC_FONCTION')
+
+
+# ------------------------------------------------------------------
+#---------algorithme d'optimisation pour le maximum de vraisemblance
+ def vrais(x):
+ am=x[0]
+ beta=x[1]
+# assert am >0.000, 'optimize.py: beta negatif'
+# assert am >0.000, 'optimize.py: am negatif'
+ if am <=0.000:
+ am=0.01
+ if beta <=0.000:
+ beta=0.001
+ res=1.0
+ for k in range(Nbval):
+ ai=liste_indic[k]
+ xi=float(liste_def[k])
+ val=log(ai/am)
+ pfa=normcdf(val/beta)
+ f0=pfa**xi*(1.-pfa)**(1-xi)
+ res=res*f0
+ return -res
+
+ def boot_vrais(x):
+ am=x[0]
+ beta=x[1]
+ res=1.0
+ for k in range(Nbval):
+ ai=liste_indic[list_rand[k]]
+ xi=float(liste_def[list_rand[k]])
+ val=log(ai/am)
+ pfa=normcdf(val/beta)
+ f0=pfa**xi*(1.-pfa)**(1-xi)
+ res=res*f0
+ return -res
+
+# ------------------------------------------------------------------
+# OPTION FRAGILITE
+# ------------------------------------------------------------------
+ if FRAGILITE !=None :
+ from Utilitai.optimize import fmin
+ from Utilitai.stats import normcdf
+
+ if FRAGILITE['LIST_PARA'] != None :
+ liste_a = FRAGILITE['LIST_PARA'].VALE.get()
+ elif FRAGILITE['VALE'] != None :
+ liste_a =FRAGILITE['VALE']
+
+
+ Nba=len(liste_a)
+ lpfa=[]
+ tab2 = FRAGILITE['TABL_RESU'].EXTR_TABLE()
+ dicta = tab2.values()
+
+ if dicta.has_key('DEFA') :
+ liste_def = dicta['DEFA']
+ else:
+ UTMESS('F','TABLE0_1',valk=('DEFA'))
+ if dicta.has_key('PARA_NOCI') :
+ liste_indic = dicta['PARA_NOCI']
+ else:
+ UTMESS('F','TABLE0_1',valk=('PARA_NOCI'))
+
+ Nbval=len(liste_indic)
+
+ test1 = NP.equal(None,liste_indic)
+ test2 = NP.equal(None,liste_def)
+ if test1.any() or test2.any():
+ UTMESS('F','TABLE0_15')
+
+ # estimation paramètres
+ x0 = [FRAGILITE['AM_INI'],FRAGILITE['BETA_INI']]
+ xopt = fmin(vrais,x0)
+
+ texte='PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+ aster.affiche('MESSAGE',texte) #print 'parametres Am, beta estimes: ', xopt
+
+ #courbe de fragilité
+ vec_a=NP.array(liste_a)
+ vecval=(NP.log(vec_a/xopt[0]))/xopt[1]
+ for m in range(Nba):
+ lpfa.append(normcdf(vecval[m]))
+
+ # table sortie
+
+ mcfact=[]
+ if TITRE !=None :
+ mcfact.append(_F(PARA= 'TITRE' , LISTE_K= TITRE ))
+
+ mcfact.append(_F(PARA= 'AM' ,LISTE_R=xopt[0] ))
+ mcfact.append(_F(PARA= 'BETA' ,LISTE_R=xopt[1] ))
+ mcfact.append(_F(PARA= 'PARA_NOCI' ,LISTE_R =liste_a ))
+ mcfact.append(_F(PARA= 'PFA' ,LISTE_R = lpfa ))
+
+
+ # si calcul de fractiles (intervalles de confiance) par bootstrap
+
+ x0 = xopt
+ if FRAGILITE['FRACTILE']!= None :
+ if INFO==2 :
+ texte='FRACTILES A CALCULER PAR BOOTSTRAP '+ str(FRAGILITE['FRACTILE']) +'\n'
+ aster.affiche('MESSAGE',texte)
+ if FRAGILITE['NB_TIRAGE']!= None :
+ Nboot = FRAGILITE['NB_TIRAGE']
+ if Nboot > Nbval :
+ UTMESS('F','PROBA0_11') #assert Nboot <= Nbval , 'ERREUR: nombre de tirages demandes trop grand'
+ else:
+ Nboot = Nbval
+
+ list_fonc = []
+ lfract =FRAGILITE['FRACTILE']
+ __F1=[None]*Nbval
+ __ABS=[None]*Nbval
+ __ORDO=[None]*Nbval
+
+ for kb in range(Nboot) : #in range(Nbval)
+
+ lpfa = []
+ list_rand = []
+
+ for kb2 in range(Nbval) :
+ list_rand.append(random.randint(0,Nbval-1))
+
+ xopt = fmin(boot_vrais,x0)
+ if INFO==2 :
+ texte1='BOOTSTRAP TIRAGE '+ str(kb+1)
+ texte2=' PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+ aster.affiche('MESSAGE',texte1)
+ aster.affiche('MESSAGE',texte2)
+ vecval=(NP.log(vec_a/xopt[0]))/xopt[1]
+ for m in range(Nba):
+ lpfa.append(normcdf(vecval[m]))
+
+ __ABS[kb]=DEFI_LIST_REEL( VALE = liste_a );
+ __ORDO[kb]=DEFI_LIST_REEL( VALE = lpfa );
+
+ __F1[kb]=DEFI_FONCTION( NOM_PARA='PGAZ',
+ NOM_RESU = 'PFA',
+ VALE_PARA = __ABS[kb],
+ VALE_FONC = __ORDO[kb],);
+ list_fonc.append(__F1[kb],)
+
+
+ #__FRACTILE = [None]*len(lfract)
+ liste = [None]*len(lfract)
+ for kb in range(len(lfract)):
+ __FRACTILE=CALC_FONCTION(FRACTILE=_F(FONCTION=(list_fonc),
+ FRACT=lfract[kb]), );
+ liste[kb]= __FRACTILE.Ordo()
+ mcfact.append(_F(PARA= str(lfract[kb]) ,LISTE_R =liste[kb] ))
+
+
+ # fin FRAGILITE
+ tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom)
+
+# ------------------------------------------------------------------
+
+
+# ------------------------------------------------------------------
+# OPTION INTESPEC
+# ------------------------------------------------------------------
+ if INTE_SPEC !=None :
+
+ TOUT_ORDRE = args['TOUT_ORDRE']
+ NUME_VITE_FLUI=args['NUME_VITE_FLUI']
+
+ NUME_ORDRE_I=args['NUME_ORDRE_I']
+ NOEUD_I=args['NOEUD_I']
+ OPTION=args['OPTION']
+
+ MOMENT=args['MOMENT']
+
+ intespec=INTE_SPEC.EXTR_TABLE()
+ # pour la clarté !
+ NUME_VITE_FLUI_present = 'NUME_VITE_FLUI' in intespec.para
+ NUME_ORDRE_I_present = 'NUME_ORDRE_I' in intespec.para
+ NOEUD_I_present = 'NOEUD_I' in intespec.para
+
+ # table résultat
+ tabres = Table(titr='POST_DYNA_ALEA concept : %s' % self.sd.nom)
+
+# ------------------------------------------------------------------
+# Liste des moments spectraux
+# repérer le type de l'interspectre et son nom
+# 1- concept interspectre
+# 2- table de table d interspectre
+
+ if NUME_VITE_FLUI_present :
+ if TOUT_ORDRE != None :
+ jvite = list(set(intespec.NUME_VITE_FLUI.not_none_values()))
+ jvite.sort()
+ else :
+ jvite=[NUME_VITE_FLUI,]
+ else :
+ jvite =[None]
+
+# ------------------------------------------------------------------
+# Repérer les couples d'indices selectionnés
+# vérification de l'égalité du nombre d indices en i et j
+
+ if NUME_ORDRE_I!=None :
+ l_ind_i=NUME_ORDRE_I
+ l_ind_j=args['NUME_ORDRE_J']
+ if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+ if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+ if len(l_ind_i)!=len(l_ind_j) :
+ UTMESS('F','PROBA0_8')
+ # paramètres fixes de la table
+ tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+ elif NOEUD_I!=None :
+ l_ind_i=NOEUD_I
+ l_ind_j=args['NOEUD_J']
+ l_cmp_i=args['NOM_CMP_I']
+ l_cmp_j=args['NOM_CMP_J']
+ if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i]
+ if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j]
+ if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+ if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+ if len(l_ind_i)!=len(l_ind_j) :
+ UTMESS('F','PROBA0_8')
+ if len(l_cmp_i)!=len(l_cmp_j) :
+ UTMESS('F','PROBA0_9')
+ if len(l_ind_i)!=len(l_cmp_i) :
+ UTMESS('F','PROBA0_10')
+ # paramètres fixes de la table
+ tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+# ------------------------------------------------------------------
+# Cas de tous les indices centraux
+
+ elif OPTION!=None :
+ if NUME_VITE_FLUI_present :
+ intespec = intespec.NUME_VITE_FLUI == jvite[0]
+
+ if NUME_ORDRE_I_present :
+ imode = list(set(intespec.NUME_ORDRE_I.not_none_values()))
+ l_ind_i=imode
+ l_ind_j=imode
+ # paramètres fixes de la table
+ tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+ else :
+ l_ind_i = intespec.NOEUD_I.values()
+ l_ind_j = intespec.NOEUD_J.values()
+ if len(l_ind_i) != len(l_ind_j) :
+ UTMESS('F','PROBA0_8')
+ l_cmp_i = intespec.NOM_CMP_I.values()
+ l_cmp_j = intespec.NOM_CMP_J.values()
+ if (len(l_ind_i) != len(l_cmp_i) or len(l_ind_j) != len(l_cmp_j)) :
+ UTMESS('F','PROBA0_10')
+ l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j))
+ l_ind_i=[]
+ l_ind_j=[]
+ l_cmp_i=[]
+ l_cmp_j=[]
+ for ai,aj in l_l :
+ if ai==aj :
+ l_ind_i.append(ai[0])
+ l_ind_j.append(aj[0])
+ l_cmp_i.append(ai[1])
+ l_cmp_j.append(aj[1])
+ # paramètres fixes de la table
+ tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+ if jvite[0]!=None :
+ tabres.add_para('NUME_VITE_FLUI', 'I')
+
+
+# ------------------------------------------------------------------
+# Liste des moments spectraux
+
+ l_moments=[0,1,2,3,4]
+ if MOMENT!=None :
+ l_moments.extend(list(MOMENT))
+ l_moments=list(set(l_moments))
+
+# ------------------------------------------------------------------
+# Boucle sur les fonctions
+
+ if NOEUD_I_present :
+ l_ind=zip(l_ind_i,l_ind_j, l_cmp_i,l_cmp_j)
+ else :
+ l_ind=zip(l_ind_i, l_ind_j )
+
+
+ # pour la présentation de la table finale, on stocke le nbre de paramètres "initiaux"
+ nbpara0 = len(tabres.para)
+
+ for vite in jvite :
+ if INFO==2 :
+ texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n'
+ aster.affiche('MESSAGE',texte)
+ for ind in l_ind :
+ dlign = {}
+ mcfact=[]
+ if vite!=None :
+ dlign['NUME_VITE_FLUI'] = vite
+ mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite))
+ if NOEUD_I_present :
+ i_foncstat = ind[0] == ind[1] and ind[2] == ind[3]
+ dlign['NOEUD_I'], dlign['NOEUD_J'], dlign['NOM_CMP_I'], dlign['NOM_CMP_J'] = \
+ ind[0], ind[1], ind[2], ind[3]
+ mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0]))
+ mcfact.append(_F(NOM_PARA='NOEUD_J',VALE_K=ind[1]))
+ mcfact.append(_F(NOM_PARA='NOM_CMP_I',VALE_K=ind[2]))
+ mcfact.append(_F(NOM_PARA='NOM_CMP_J',VALE_K=ind[3]))
+ if INFO==2 :
+ aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1])
+ aster.affiche('MESSAGE','INDICES :'+ind[2]+' - '+ind[3]+'\n')
+ else :
+ i_foncstat = ind[0] == ind[1]
+ dlign['NUME_ORDRE_I'], dlign['NUME_ORDRE_J'] = ind[0], ind[1]
+ mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0]))
+ mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1]))
+ if INFO==2 :
+ aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\
+ +str(ind[1])+'\n')
+
+ __fon1=RECU_FONCTION(TABLE = INTE_SPEC,
+ NOM_PARA_TABL= 'FONCTION_C',
+ FILTRE = mcfact, )
+
+ val = __fon1.Valeurs()
+ fvalx= NP.array(val[0])
+ fvaly= NP.array(val[1])
+ frez = fvalx[0]
+
+ # -- moments spectraux
+
+ val_mom={}
+ for i_mom in l_moments :
+ n = len(fvaly)
+ trapz = NP.zeros(n)
+ trapz[0] = 0.
+ valy = fvaly*(2*pi*fvalx)**i_mom
+ trapz[1:n] = (valy[1:n]+valy[:-1])/2*(fvalx[1:n]-fvalx[:-1])
+ prim_y = NP.cumsum(trapz)
+ val_mom[i_mom] = prim_y[-1]
+ for i_mom in l_moments :
+ chmo='LAMBDA_'+str(i_mom).zfill(2)
+ dlign[chmo] = val_mom[i_mom]
+
+ #--- si auto-spectre:
+ if i_foncstat:
+ # test si le spectre est bien à valeurs positives
+ if min(fvaly) < 0.0 :
+ aster.affiche('MESSAGE', str(ind)+'\n')
+ UTMESS('F','MODELISA9_95')
+ # -- fonctions statistiques
+ if NUME_VITE_FLUI or frez >= 0. :
+ # -- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée
+ # -- Il faut donc doubler lambda pour calculer le bon écart type
+ dlign['ECART'] = sqrt(val_mom[0]*2.)
+ else :
+ dlign['ECART'] = sqrt(val_mom[0])
+ if abs(val_mom[2])>=1e-20 :
+ dlign['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2])
+ if abs(val_mom[0])>=1e-20 :
+ dlign['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0])
+ dlign['FREQ_APPAR'] = 0.5*dlign['NB_PASS_ZERO_P_S']
+ if abs(val_mom[4])>=1e-20 :
+ dlign['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4])
+
+ # ajoute la ligne à la Table
+ tabres.append(dlign)
+
+#--- construction de la table produite
+
+ # tri des paramètres
+ ord_para = tabres.para[nbpara0:]
+ ord_para.sort()
+ ord_para = tabres.para[:nbpara0] + ord_para
+ dprod = tabres[ord_para].dict_CREA_TABLE()
+
+ tabout = CREA_TABLE(**dprod)
+
+ return ier
+
--- /dev/null
+#@ MODIF post_endo_fiss_ops Macro DATE 31/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 BOTTONI M.BOTTONI
+# ---------------------------------------------------------------------------
+# POST_ENDO_FISS
+# PROCEDURE PYTHON DU RECHERCHE DU TRAJET DE FISSURATION SUR UN
+# CHAMP SCALAIRE 2D
+
+
+
+# ----------------------------
+#
+# FONCTIONS UTILES
+#
+# ----------------------------
+
+# FIND IN A VECTOR :
+# Fonction qui trouve tous les valeurs dans "Vect"
+# egal au scalaire "a".
+# On retourne tous les indices des valeurs cherchees
+# Vect doit etre un vecteur unidimensionnel
+def vfind(Vect,a) :
+ import numpy as NP
+ Vect0 = Vect-a
+ lst0 = NP.nonzero(Vect0)[0]
+ NP.put(Vect0,lst0, NP.ones(lst0.shape))
+ Vect0 = Vect0-1
+ lst0 = NP.nonzero(Vect0)[0]
+ return lst0
+
+# DELETE ELEMENT IN A VECTOR :
+# Fonction qui sert a effacer des elements d'un vecteur Vect
+# (element array unidimmensionnel ou matrice avec la deuxieme dimension 1)
+# a: vecteur d'indices avec le meme cahracteristiques que Vect
+def delEl(Vect,a) :
+ import numpy as NP
+ class LengthError(Exception):
+ pass
+
+ shapeV = Vect.shape
+ if type(a) == list :
+ a=NP.array(a)
+ shapea = a.shape
+
+ lenErr = True
+ if len(shapeV)==1 :
+ lenErr = False
+ if len(shapea)==1 :
+ lenErr = False
+ if len(shapea)==2 and (shapea[0]==1 or shapea[1]==1) :
+ lenErr = False
+ if lenErr :
+ raise LengthError
+
+ Vect = Vect.tolist()
+ a = NP.ravel(a)
+ a = NP.sort(a)
+
+ for i in range(len(a)) :
+ idx = a[i]
+ try :
+ del Vect[idx]
+ except TypeError :
+ raise TypeError
+ a = a-1
+
+ Vect = NP.array(Vect)
+ return Vect
+
+
+# RETURN A UNIQUE VECTOR
+# Fonction qui elimine les doublons dans un vecteur Vect
+# Vect doit etre un vecteur unidimensionnel
+def unique(Vect):
+ i = 0
+ while i < len(Vect) :
+ num = Vect[i]
+ idxDou = vfind(Vect, num)
+ if len(idxDou)>1 :
+ idxDou = idxDou[1:len(idxDou)]
+ Vect = delEl(Vect,idxDou)
+ i = i+1
+ return Vect
+
+
+
+# CREATE A 1D-MESH :
+# Cree un maillage SEG2 en 2D
+# Coorx : liste des coordonnees x des noeuds
+# Coory : liste des coordonnees y des noeuds
+# Connex : connectivites entre les noeuds
+# (liste de tuples d'entiers)
+#
+
+def crea_mail_lin(XcreteTot,YcreteTot,ConnTot,dime):
+ resu = 'TITRE\n'
+ titre = 'Maillage lineaire'+'\n'
+ resu = resu + titre
+ resu = resu+'FINSF\n'
+
+ # creation des noeuds
+ resu = resu+'COOR_'+str(dime)+'D\n'
+ CoorX = XcreteTot[0]
+ CoorY = YcreteTot[0]
+ for i in range(1,len(XcreteTot)) :
+ CoorX = CoorX + XcreteTot[i]
+ CoorY = CoorY + YcreteTot[i]
+ nbNoeu = len(CoorX)
+ for i in range(nbNoeu):
+ nbno = i+1
+ x = CoorX[i]
+ y = CoorY[i]
+ noeud = ' N'+str(nbno)+' '+str(x)+' '+str(y)+'\n'
+ resu = resu + noeud
+ resu = resu+'FINSF\n'
+
+ # creation des mailles
+ resu = resu+'SEG2\n'
+ nbmailTot = 0
+ nbNoTot = 0
+ for j in range(len(ConnTot)) :
+ Connex = ConnTot[j]
+ nbmail = len(Connex)
+ for i in range(nbmail) :
+ nbma = i+1+nbmailTot
+ ma = Connex[i]
+ maille = ' M'+str(nbma)+' N'+str(ma[0]+nbNoTot)+' N'+str(ma[1]+nbNoTot)+'\n'
+ resu = resu+maille
+ nbmailTot = nbmailTot + len(Connex)
+ nbNoTot = nbNoTot + len(XcreteTot[j])
+ resu = resu+'FINSF\n'
+
+ # creation des groupes de mailles "fissure"
+ nbmailTot = 0
+ for j in range(len(ConnTot)):
+ resu = resu+'GROUP_MA\n'
+ resu = resu+'FISSURE'+str(j+1)+'\n'
+ Connex = ConnTot[j]
+ nbmail = len(Connex)
+ for i in range(nbmail):
+ nbma = i+1+nbmailTot
+ resu = resu +' M'+str(nbma)+'\n'
+ resu = resu+'\n'
+ resu = resu+'FINSF\n'
+ nbmailTot = nbmailTot + len(Connex)
+
+ resu = resu+'FIN\n'
+ return resu
+
+
+
+
+
+
+
+
+
+
+
+# ------------------------------------------
+#
+# ROUTINE POUR LA RECHERCHE DE LA CRETE
+# POST ENDO FISS
+#
+# ------------------------------------------
+
+def post_endo_fiss_ops(self,
+ TABLE,
+ NOM_CMP,
+ NOM_CHAM,
+ RECHERCHE,
+ **args) :
+
+ from Macro.macr_lign_coupe_ops import crea_noeu_lig_coup
+ from Macro.macr_lign_coupe_ops import crea_mail_lig_coup
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ from Utilitai.UniteAster import UniteAster
+ from Accas import _F
+ from math import radians
+ import os
+ import numpy as NP
+
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ MasquerAlarme('CALCULEL5_48')
+
+ # --------------------------------------------------
+ # IMPORTATION COMMANDES ASTER
+ #
+ LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
+ AFFE_MODELE = self.get_cmd('AFFE_MODELE')
+ PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CREA_RESU = self.get_cmd('CREA_RESU')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+
+
+ # --------------------------------------------------
+ # DECLARATION SORTIES
+ #
+ self.DeclareOut('__MAIFI',self.sd)
+ self.DeclareOut('__tabRes',TABLE)
+
+
+ # --------------------------------------------------
+ # RECUPERATION ENTREES
+ #
+ l_dRECHERCHE = []
+ for recherche in RECHERCHE :
+ dRECHERCHE = recherche.cree_dict_valeurs(recherche.mc_liste)
+ for i in dRECHERCHE.keys():
+ if dRECHERCHE[i]==None : del dRECHERCHE[i]
+ l_dRECHERCHE.append(dRECHERCHE)
+
+ # --------------------------------------------------
+ # TEST SUR LE TYPE DE CHAMP
+ #
+ ltyP_cham = ['NOEU_DEPL_R','ELGA_EPSI_R','ELNO_EPSI_R','NOEU_SIEF_R','ELGA_VARI_R','ELNO_VARI_R','ELNO_VARI_R','NOEU_VAR2_R']
+ lnoM_cham = ['DEPL','EPSI_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_NOEU_DEPL','VARI_ELGA','VARI_ELNO','VARI_ELNO_ELGA','VARI_NOEU_ELGA']
+
+ if NOM_CHAM in lnoM_cham :
+ Xtype_cham = ltyP_cham[lnoM_cham.index(NOM_CHAM)]
+ else :
+ UTMESS('F','POST0_35')
+
+
+ # --------------------------------------------------
+ # RECUPERATION ENTREES, MODELE ET MAILLAGE
+ #
+ motscles = {}
+
+ if args['CHAM_GD'] != None :
+ build = 'champ'
+ __YBARTO = args['CHAM_GD']
+ __modtot = args['MODELE']
+ #n_modele = (__modtot.nom).strip()
+ inst = 1.
+ motscles['INST'] = inst
+
+ else :
+ build = 'resu'
+ __RESUIN = args['RESULTAT']
+ nomresu = __RESUIN.nom
+ dicResu = __RESUIN.LIST_PARA()
+
+ if args['NUME_ORDRE'] != None :
+ inst = 1.
+ nume_ordre = args['NUME_ORDRE']
+ motscles['NUME_ORDRE'] = nume_ordre
+ else :
+ inst = args['INST']
+ motscles['INST'] = inst
+ dicVarAcc = __RESUIN.LIST_VARI_ACCES()
+ nume_ordre = dicVarAcc['INST'].index(inst) + 1
+
+ if args['MODELE'] != None :
+ __modtot = args['MODELE']
+ elif dicResu['MODELE'][0] is not None:
+ lst_n_modele = dicResu['MODELE']
+ n_modele = lst_n_modele[nume_ordre-1]
+ n_modele = n_modele.strip()
+ __modtot = self.get_concept(n_modele)
+ else :
+ UTMESS('F','POST0_33')
+
+
+ n_mail = __modtot.MODELE.LGRF.get()
+ n_mail = n_mail[0].strip()
+ __mail = self.get_concept(n_mail)
+ Coortot = __mail.COORDO.VALE.get()
+ Xtot = Coortot[0:len(Coortot):3]
+ Ytot = Coortot[1:len(Coortot):3]
+
+ dime = __mail.DIME.get()[5]
+ if dime != 2 :
+ UTMESS('F','POST0_34')
+
+
+ if build == 'resu' :
+ __YBARTO = CREA_CHAMP(TYPE_CHAM = Xtype_cham,
+ OPERATION = 'EXTR',
+ RESULTAT = __RESUIN,
+ NOM_CHAM = NOM_CHAM,
+ **motscles)
+
+
+
+ # --------------------------------------------------
+ # BOUCLE SUR L'OCCURRENCE DU MOT-CLEF RECHERCHE
+ #
+ XcreteTot = []
+ YcreteTot = []
+ ConnTot = []
+ YbarcreteTot = []
+ lstFissure = []
+
+
+ for idxRech in range(len(l_dRECHERCHE)) :
+
+ dRECHERCHE = l_dRECHERCHE[idxRech]
+
+ # ---------------------------------
+ # Recuperation valeurs d'entrees
+ #
+ lort = dRECHERCHE['LONG_ORTH']
+ nbPoints = dRECHERCHE['NB_POINT']
+ pas = dRECHERCHE['PAS']
+ lreg = dRECHERCHE['LONG_REG']
+ seuil = dRECHERCHE['SEUIL']
+ alpha = dRECHERCHE['ANGL_MAX']
+ seuil = dRECHERCHE['SEUIL']
+
+ if 'GROUP_MA' in dRECHERCHE.keys() :
+ groupma = dRECHERCHE['GROUP_MA']
+
+ # --------------------------------------------------
+ # Construction du concept resultat de travail
+ #
+ if build == 'champ' :
+ if 'GROUP_MA' in dRECHERCHE.keys() :
+ __YBARNO = CREA_CHAMP(OPERATION = 'ASSE',
+ TYPE_CHAM = Xtype_cham,
+ MODELE = __modtot,
+ ASSE = _F(CHAM_GD = __YBARTO,
+ GROUP_MA = groupma,
+ NOM_CMP = NOM_CMP,
+ ),)
+ else :
+ __YBARNO = __YBARTO
+
+
+ if build == 'resu' :
+ if 'GROUP_MA' in dRECHERCHE.keys() :
+ __YBARNO = CREA_CHAMP(OPERATION = 'ASSE',
+ TYPE_CHAM = Xtype_cham,
+ MODELE = __modtot,
+ ASSE = _F(CHAM_GD = __YBARTO,
+ GROUP_MA = groupma,
+ NOM_CMP = NOM_CMP,
+ ),)
+ else :
+ __YBARNO = __YBARTO
+
+
+ __resu = CREA_RESU( OPERATION = 'AFFE',
+ TYPE_RESU = 'EVOL_NOLI',
+ NOM_CHAM = NOM_CHAM,
+ AFFE = (_F( CHAM_GD = __YBARNO,
+ #MODELE = __modtot,
+ INST = inst),),)
+
+
+ # --------------------------------------------------------------
+ # Recuperation dans Python des valeurs du champ et du maillage
+ #
+ Ybarno = __YBARNO.EXTR_COMP(NOM_CMP,[],1)
+ Ybar = Ybarno.valeurs
+ Noeybar = Ybarno.noeud
+ IdxNoeud = NP.array(Noeybar)-1
+ Coorx = NP.take(Xtot,IdxNoeud)
+ Coory = NP.take(Ytot,IdxNoeud)
+
+
+ # --------------------------------------------------
+ # Amorcage de la procedure de recherche de la crete
+ #
+
+ # Point ou la Ybar est maximale
+ #
+ idxmax = NP.argmax(Ybar)
+ xmax = Coorx[idxmax]
+ ymax = Coory[idxmax]
+ ybarmax = Ybar[idxmax]
+
+ CoxAmm = NP.array([xmax], float)
+ CoyAmm = NP.array([ymax], float)
+ YbarAmm = NP.array([ybarmax], float)
+
+ # Creation d'un circle autour du point de max
+ # et projection sur le circle
+ #
+ lignes = []
+ groups = []
+ arcs = []
+ arcs.append(([xmax+pas,ymax],[xmax,ymax],nbPoints,180.))
+ arcs.append(([xmax-pas,ymax],[xmax,ymax],nbPoints,180.))
+ resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+
+ nomFichierSortie = os.path.join(os.getcwd(),'maillage.mail')
+ fproc = open(nomFichierSortie, 'w')
+ fproc.write(resu_mail0)
+ fproc.close()
+ UL = UniteAster()
+ uniteMail = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+ __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+ UL.EtatInit(uniteMail)
+
+
+ __MO = AFFE_MODELE(MAILLAGE = __MAI,
+ AFFE = _F(TOUT = 'OUI',
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'BARRE'),)
+
+ __YBARPR = PROJ_CHAMP(METHODE = 'ELEM',
+ RESULTAT = __resu,
+ MODELE_1 = __modtot,
+ MODELE_2 = __MO,
+ DISTANCE_MAX = 0.,
+ TYPE_CHAM = 'NOEU',
+ NOM_CHAM = NOM_CHAM,
+ NUME_ORDRE = 1, )
+
+ __YBARCH = CREA_CHAMP(TYPE_CHAM = Xtype_cham,
+ OPERATION = 'EXTR',
+ NOM_CHAM = NOM_CHAM,
+ RESULTAT = __YBARPR,
+ NUME_ORDRE = 1,)
+
+ dx0 = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+
+ # Nonvide : liste de noeud du profil orthogonal
+ # avec des valeurs associes
+ # idxpred : connections entres les 2 demi-circle
+ Nonvide = NP.array(list(dx0.noeud))
+ idxpred1 = vfind(Nonvide,2*nbPoints-1)
+ idxpred2 = vfind(Nonvide,nbPoints)
+
+ Ybarort = dx0.valeurs
+ Coor0 = __MAI.COORDO.VALE.get()
+ Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+ Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+
+ # On elimine les noeuds sans valeurs associes
+ Coorxort = NP.take(Coorxort,Nonvide-1)
+ Cooryort = NP.take(Cooryort,Nonvide-1)
+ Coorxort = delEl(Coorxort,idxpred1)
+ Coorxort = delEl(Coorxort,idxpred2)
+ Cooryort = delEl(Cooryort,idxpred1)
+ Cooryort = delEl(Cooryort,idxpred2)
+ Ybarort = delEl(Ybarort,idxpred1)
+ Ybarort = delEl(Ybarort,idxpred2)
+
+ # Regularisation sur le circle
+ YbarReg = NP.zeros((len(Ybarort),), float)
+ X1 = NP.concatenate((Coorxort[1:len(Coorxort)], NP.array([Coorxort[0]])))
+ Y1 = NP.concatenate((Cooryort[1:len(Coorxort)], NP.array([Cooryort[0]])))
+ DX = X1-Coorxort
+ DY = Y1-Cooryort
+ DS = NP.sqrt(DX**2+DY**2)
+ for l in range(len(Ybarort)):
+ DSa = DS[(l-1):len(DS)]
+ DSb = DS[0:(l-1)]
+ DS1 = NP.concatenate((DSa,DSb))
+ Dist = NP.zeros((len(Ybarort),), float)
+ Gauss = NP.zeros((len(Ybarort),), float)
+ for k in range(len(Ybarort)/2):
+ Dist[k+1] = Dist[k] + DS1[k]
+ Dist[-k-1] = Dist[-k] + DS1[-k-1]
+ for k in range(len(Ybarort)):
+ Gauss[k] = NP.e**(-(2*Dist[k]/(pas/5))**2)
+
+ Gauss2 = NP.concatenate((Gauss[1:len(Gauss)], NP.array([Gauss[0]])))
+ Den = DS1 * ((Gauss + Gauss2)/2)
+
+ YbarortShft = NP.concatenate((Ybarort[l:len(Ybarort)],Ybarort[0:(l)]))
+ Ybargauss = YbarortShft * Gauss
+ Ybargauss2 = NP.concatenate((Ybargauss[1:len(Ybargauss)], NP.array([Ybargauss[0]])))
+ Num = DS1 * ((Ybargauss + Ybargauss2)/2)
+
+ YbarReg[l] = NP.sum(Num)/NP.sum(Den)
+
+ # Deuxieme point de la crete
+ idxmax = NP.argmax(YbarReg)
+ valmax = Ybarort[idxmax]
+ cox = Coorxort[idxmax]
+ coy = Cooryort[idxmax]
+
+ CoxAmm = NP.concatenate((CoxAmm, NP.array([cox])))
+ CoyAmm = NP.concatenate((CoyAmm, NP.array([coy])))
+ YbarAmm = NP.concatenate((YbarAmm, NP.array([valmax])))
+
+
+ # On re-calcule le premier point
+ #
+ CoxLast = NP.array([ CoxAmm[1] , CoxAmm[0] ])
+ CoyLast = NP.array([ CoyAmm[1] , CoyAmm[0] ])
+ VersAvan = NP.array([CoxLast[1] - CoxLast[0], CoyLast[1] - CoyLast[0]])
+ VersAvan = VersAvan / (NP.sqrt((VersAvan[0])**2 + (VersAvan[1])**2))
+
+ Ppred = NP.array([CoxLast[0] + VersAvan[0]*pas, CoyLast[0] + VersAvan[1]*pas ])
+ VersNorm = (1 / NP.sqrt((VersAvan[0])**2 + (VersAvan[1])**2)) * NP.array([ -VersAvan[1] , VersAvan[0] ])
+ PPlus = NP.array([ Ppred[0] + (lort/2)*VersNorm[0] , Ppred[1] + (lort/2)*VersNorm[1] ])
+ PMoin = NP.array([ Ppred[0] - (lort/2)*VersNorm[0] , Ppred[1] - (lort/2)*VersNorm[1] ])
+
+ # creation du profil orthogonal
+ lignes = []
+ groups = []
+ arcs = []
+ lignes = []
+ lignes.append((PMoin.tolist(),Ppred.tolist(),nbPoints))
+ lignes.append((Ppred.tolist(),PPlus.tolist(),nbPoints))
+ resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+ fproc = open(nomFichierSortie, 'w')
+ fproc.write(resu_mail0)
+ fproc.close()
+ UL = UniteAster()
+ uniteMail = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+ __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+ UL.EtatInit(uniteMail)
+
+ __MO = AFFE_MODELE(MAILLAGE = __MAI,
+ AFFE = _F(TOUT = 'OUI',
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'BARRE'),)
+
+ __YBARPR = PROJ_CHAMP(METHODE = 'ELEM',
+ RESULTAT = __resu,
+ MODELE_1 = __modtot,
+ MODELE_2 = __MO,
+ DISTANCE_MAX = 0.,
+ TYPE_CHAM = 'NOEU',
+ NOM_CHAM = NOM_CHAM,
+ NUME_ORDRE = 1, )
+
+
+ __YBARCH = CREA_CHAMP(TYPE_CHAM = Xtype_cham,
+ OPERATION = 'EXTR',
+ NOM_CHAM = NOM_CHAM,
+ RESULTAT = __YBARPR,
+ NUME_ORDRE = 1,)
+
+ dx0 = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+
+
+ # Pas de cas ou le point de prediction est hors de matiere!
+ # Recherche du point de prediction parmis les points projetes
+ # et elimination du double point au milieu
+ Nonvide = NP.array(list(dx0.noeud))
+ idxpred = vfind(Nonvide,nbPoints)
+ Ybarort = dx0.valeurs
+
+ Coor0 = __MAI.COORDO.VALE.get()
+ Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+ Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+ Coorxort = NP.take(Coorxort,Nonvide-1)
+ Cooryort = NP.take(Cooryort,Nonvide-1)
+ Coorxort = delEl(Coorxort,idxpred)
+ Cooryort = delEl(Cooryort,idxpred)
+ Ybarort = delEl(Ybarort,idxpred)
+
+ # Regularisation du profil orthogonal
+ YbarReg = NP.zeros((len(Ybarort),), float)
+ for l in range(len(Ybarort)):
+ xcentre = Coorxort[l]
+ ycentre = Cooryort[l]
+ Dist = ((Coorxort-xcentre)**2 + (Cooryort-ycentre)**2)**0.5
+ Gauss = NP.zeros((len(Dist),), float)
+ for m in range(len(Dist)) :
+ Gauss[m] = NP.e**(-(2*Dist[m]/lreg)**2)
+ Ybargauss = Ybarort * Gauss
+ DeltaL = NP.absolute(Dist[0:len(Dist)-1] - Dist[1:len(Dist)])
+ Num = DeltaL * (Ybargauss[0:len(Dist)-1] + Ybargauss[1:len(Dist)])/2
+ Den = DeltaL * (Gauss[0:len(Dist)-1] + Gauss[1:len(Dist)])/2
+
+ YbarReg[l] = NP.sum(Num)/NP.sum(Den)
+
+ # Premier point de la crete
+ idxmax = NP.argmax(YbarReg)
+ valmax = Ybarort[idxmax]
+ cox = Coorxort[idxmax]
+ coy = Cooryort[idxmax]
+ CoxAmm[0] = cox
+ CoyAmm[0] = coy
+ YbarAmm[0]= valmax
+
+
+
+ # --------------------------------------------------
+ # Recherche de la crete apres amorcage
+ #
+
+
+ # Definition des deux directions d'avancement possibles
+ #
+ VersAvn1 = NP.array([CoxAmm[1]-CoxAmm[0],CoyAmm[1]-CoyAmm[0]])
+ module = ((VersAvn1[0])**2 + (VersAvn1[1])**2)**0.5
+ VersAvn1 = VersAvn1 * (1/module)
+ VersAvn2 = -VersAvn1
+
+ # Initialisation vecteurs
+ #
+ Coxcrete1 = NP.array([CoxAmm[1]])
+ Coycrete1 = NP.array([CoyAmm[1]])
+ Ybarcrete1 = NP.array([YbarAmm[1]])
+
+ Coxcrete2 = NP.array([CoxAmm[0]])
+ Coycrete2 = NP.array([CoyAmm[0]])
+ Ybarcrete2 = NP.array([YbarAmm[0]])
+
+ # Boucle sur les points de la crete
+ # Variables du boucle :
+ # dirRech --> direction de recherche, 1,2
+ # condSort --> condition de sortie du boucle
+ dirRech = 1
+ i = 0
+ condSort = 1. + seuil
+ while (condSort > seuil and dirRech<=2) :
+ i = i+1
+ # Determination du vecteur d'avancement
+ if i==1:
+ if dirRech == 1:
+ VersAvan = VersAvn1
+ else:
+ VersAvan = VersAvn2
+ else:
+ if dirRech == 1:
+ CoxLast = NP.array( [Coxcrete1[i-2] , Coxcrete1[i-1] ])
+ CoyLast = NP.array([ Coycrete1[i-2] , Coycrete1[i-1] ])
+ else :
+ CoxLast = NP.array( [Coxcrete2[i-2] , Coxcrete2[i-1] ])
+ CoyLast = NP.array([ Coycrete2[i-2] , Coycrete2[i-1] ])
+ VersAvan = NP.array([CoxLast[1]-CoxLast[0],CoyLast[1]-CoyLast[0]])
+ module = ((VersAvan[0])**2. + (VersAvan[1])**2.)**0.5
+ VersAvan = VersAvan * (1/module)
+
+ if dirRech == 1:
+ PStart = NP.array([Coxcrete1[i-1],Coycrete1[i-1]])
+ else:
+ PStart = NP.array([Coxcrete2[i-1],Coycrete2[i-1]])
+
+ # point de prediction
+ Ppred = NP.array([PStart[0] + VersAvan[0]*pas, PStart[1] + VersAvan[1]*pas ])
+ VersNorm = (1. / NP.sqrt((VersAvan[0])**2. + (VersAvan[1])**2.)) * NP.array([ -VersAvan[1] , VersAvan[0] ])
+ PPlus = NP.array([ Ppred[0] + (lort/2.)*VersNorm[0] , Ppred[1] + (lort/2.)*VersNorm[1] ])
+ PMoin = NP.array([ Ppred[0] - (lort/2.)*VersNorm[0] , Ppred[1] - (lort/2.)*VersNorm[1] ])
+
+ # creation du profil orthogonal
+ lignes = []
+ groups = []
+ arcs = []
+ lignes.append((PMoin.tolist(),Ppred.tolist(),nbPoints))
+ lignes.append((Ppred.tolist(),PPlus.tolist(),nbPoints))
+ resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+ fproc = open(nomFichierSortie, 'w')
+ fproc.write(resu_mail0)
+ fproc.close()
+ UL = UniteAster()
+ uniteMail = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+ __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+ UL.EtatInit(uniteMail)
+
+ __MO = AFFE_MODELE(MAILLAGE = __MAI,
+ AFFE = _F(TOUT = 'OUI',
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'BARRE'),)
+
+
+ try:
+ # on essaie de projeter, exception: il n'y a pas des points "dans la matiere"
+ __YBARPR = PROJ_CHAMP(METHODE = 'ELEM',
+ RESULTAT = __resu,
+ MODELE_1 = __modtot,
+ MODELE_2 = __MO,
+ DISTANCE_MAX = 0.,
+ TYPE_CHAM = 'NOEU',
+ NOM_CHAM = NOM_CHAM,
+ NUME_ORDRE = 1,)
+
+ except :
+ print "#MC dans EXCEPT"
+ # Attention!! Ici on gere seulement le cas d'aucun point dans la matiere!
+ # Il faudra gerer tous les possibles erreurs de proj_champ, ou trouver nom
+ # a l'erreur specifique!
+ if dirRech == 1 :
+ dirRech = 2
+ i = 0
+ else:
+ condSort = seuil * 0.1
+
+ else :
+ # si la projection est possible
+ __YBARCH = CREA_CHAMP(TYPE_CHAM = Xtype_cham,
+ OPERATION = 'EXTR',
+ NOM_CHAM = NOM_CHAM,
+ RESULTAT = __YBARPR,
+ NUME_ORDRE = 1,)
+
+ dx0 = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+ Nonvide = NP.array(list(dx0.noeud))
+
+ # recherche du point de prediction parmis les points projetes
+ idxpred = vfind(Nonvide,nbPoints)
+
+ # cas ou le point de prediction est hors matiere
+ if len(idxpred)==0:
+ if dirRech == 1:
+ dirRech = 2
+ i = 0
+ continue
+ else:
+ condSort = seuil*0.1
+ break
+
+ Ybarort = dx0.valeurs
+ Coor0 = __MAI.COORDO.VALE.get()
+ Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+ Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+ Coorxort = NP.take(Coorxort,Nonvide-1)
+ Cooryort = NP.take(Cooryort,Nonvide-1)
+ Coorxort = delEl(Coorxort,idxpred)
+ Cooryort = delEl(Cooryort,idxpred)
+ Ybarort = delEl(Ybarort,idxpred)
+
+ # Regularisation sur le profil orthogonal
+ #
+ YbarReg = NP.zeros((len(Ybarort),), float)
+ for l in range(len(Ybarort)):
+ xcentre = Coorxort[l]
+ ycentre = Cooryort[l]
+ Dist = ((Coorxort-xcentre)**2 + (Cooryort-ycentre)**2)**0.5
+ Gauss = NP.zeros((len(Dist),), float)
+ for m in range(len(Dist)) :
+ Gauss[m] = NP.e**(-(2*Dist[m]/lreg)**2)
+
+ Ybargauss = Ybarort * Gauss
+ DeltaL = NP.absolute(Dist[0:len(Dist)-1] - Dist[1:len(Dist)])
+ Num = DeltaL * (Ybargauss[0:len(Dist)-1] + Ybargauss[1:len(Dist)])/2
+ Den = DeltaL * (Gauss[0:len(Dist)-1] + Gauss[1:len(Dist)])/2
+ YbarReg[l] = NP.sum(Num)/NP.sum(Den)
+
+
+ # Nouveau point de la crete
+ #
+ idxmax = NP.argmax(YbarReg)
+ valmax = Ybarort[idxmax]
+ cox = Coorxort[idxmax]
+ coy = Cooryort[idxmax]
+
+
+ # on controle que l'angle forme par le point trouve
+ # et la direction de recherche ne soit pas plus grand
+ # du seuil "ANGL_MAX"
+
+ if round(alpha) != 180. :
+ alphar = radians(alpha)
+ blim = pas * NP.tan(alphar/2.)
+ btest = ((cox-Ppred[0])**2. + (coy-Ppred[1])**2.)**0.5
+ if btest > blim :
+ if dirRech == 1 :
+ dirRech = 2
+ i = 0
+ continue
+ else:
+ condSort = seuil*0.1
+ break
+
+ if dirRech == 1:
+ Coxcrete1 = NP.concatenate((Coxcrete1,NP.array([cox])))
+ Coycrete1 = NP.concatenate((Coycrete1,NP.array([coy])))
+ Ybarcrete1 = NP.concatenate((Ybarcrete1,NP.array([valmax])))
+ else:
+ Coxcrete2 = NP.concatenate((Coxcrete2,NP.array([cox])))
+ Coycrete2 = NP.concatenate((Coycrete2,NP.array([coy])))
+ Ybarcrete2 = NP.concatenate((Ybarcrete2,NP.array([valmax])))
+
+ condSort = valmax
+ if condSort <= seuil and dirRech == 1 :
+ dirRech = 2
+ i = 0
+
+ Coxcrete1 = Coxcrete1.tolist()
+ Coxcrete2 = Coxcrete2.tolist()
+ Coycrete1 = Coycrete1.tolist()
+ Coycrete2 = Coycrete2.tolist()
+ Ybarcrete1 = Ybarcrete1.tolist()
+ Ybarcrete2 = Ybarcrete2.tolist()
+ Coxcrete2.reverse()
+ Coycrete2.reverse()
+ Ybarcrete2.reverse()
+ Coxcrete2.extend(Coxcrete1)
+ Coycrete2.extend(Coycrete1)
+ Ybarcrete2.extend(Ybarcrete1)
+
+
+ nbNoeud = len(Coxcrete2)
+ Connex = []
+ for idxNo in range(nbNoeud-1) :
+ no1 = idxNo+1
+ no2 = idxNo+2
+ ma = (no1,no2)
+ Connex.append(ma)
+
+ XcreteTot.append(Coxcrete2)
+ YcreteTot.append(Coycrete2)
+ YbarcreteTot.append(Ybarcrete2)
+ ConnTot.append(Connex)
+ lstFissure = lstFissure + ( ['FISS'+str(idxRech+1)]*len(Coxcrete2) )
+
+ lstX = []
+ lstY = []
+ lstYbar = []
+ for i in range(len(XcreteTot)) :
+ lstX = lstX + XcreteTot[i]
+ lstY = lstY + YcreteTot[i]
+ lstYbar = lstYbar + YbarcreteTot[i]
+
+
+
+ # --------------------------------------------------
+ # CREATION D'UNE TABLE POUR LE STOCKAGE DE POINTS DE
+ # LA CRETE ET DE L'OUVERTURE DE FISSURE
+ #
+
+ __tabRes = CREA_TABLE(LISTE = (
+ _F(PARA = 'FISSURE' , LISTE_K = lstFissure ),
+ _F(PARA = 'COORX' , LISTE_R = lstX ),
+ _F(PARA = 'COORY' , LISTE_R = lstY ),
+ _F(PARA = 'CHAMP' , LISTE_R = lstYbar),
+ ),)
+
+
+ # --------------------------------------------------
+ # CREATION D'UNE SD MAILLAGE DE LA CRETE
+ #
+ resu_mail0 = crea_mail_lin(XcreteTot,YcreteTot,ConnTot,dime)
+
+
+ fproc = open(nomFichierSortie, 'w')
+ fproc.write(resu_mail0)
+ fproc.close()
+ UL = UniteAster()
+ uniteMail = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+ __MAIFI = LIRE_MAILLAGE(UNITE = uniteMail)
+ UL.EtatInit(uniteMail)
+
+
+ # --------------------------------------------------
+ # SORTIE DE LA MACRO
+ #
+ RetablirAlarme('CALCULEL5_48')
+ return ier
+
--- /dev/null
+#@ MODIF post_gp_ops Macro DATE 16/11/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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.
+# ======================================================================
+
+EnumTypes = (list, tuple)
+
+# -----------------------------------------------------------------------------
+def post_gp_ops(self, **args):
+ """
+ Corps de la macro POST_GP
+ """
+ import pdb
+ macro = 'POST_GP'
+ ier=0
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table, merge, Colonne
+ from Cata_Utils.t_fonction import t_fonction
+ from Cata.cata import evol_noli
+ import aster
+
+ # ----- On importe les definitions des commandes a utiliser dans la macro
+ CALC_THETA = self.get_cmd('CALC_THETA')
+ CALC_G = self.get_cmd('CALC_G')
+ POST_ELEM = self.get_cmd('POST_ELEM')
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ DEFI_LIST_ENTI= self.get_cmd('DEFI_LIST_ENTI')
+ CALC_ELEM = self.get_cmd('CALC_ELEM')
+ RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+ FIN = self.get_cmd('FIN')
+
+ # ----- Comptage, commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('result', self.sd)
+ self.DeclareOut('tabresult', self['TABL_RESU'])
+ info = self['INFO']
+
+ # 0. ----- Type de calcul
+ identification = self['IDENTIFICATION'] != None
+ if identification:
+ # 0.1. --- identification : on boucle sur les valeurs de TEMP.
+ # Pour chaque couple (T, Kjc(T)), on évalue les Ki, Kmoy et
+ # les valeurs de Gpmax, DeltaLmax, inst.max correspondantes.
+ mccalc = self['IDENTIFICATION']
+ l_crit = mccalc['KJ_CRIT']
+ lv_ident = []
+ l_temp = mccalc['TEMP']
+ else:
+ # 0.2. --- prédiction : on ne fait qu'une itération.
+ # Il faut un RESU_THER (sinon on utilise la température du
+ # premier Gpcrit et cà n'a pas trop d'intéret).
+ # A chaque instant, on regarde à quelle température est le
+ # fond d'entaille et on compare Gpmax à cet instant au Gpcrit.
+ mccalc = self['PREDICTION']
+ l_crit = mccalc['GP_CRIT']
+ lv_pred = []
+ l_temp = mccalc['TEMP'][0]
+
+ if not type(l_temp) in EnumTypes:
+ l_temp = [l_temp,]
+ if not type(l_crit) in EnumTypes:
+ l_crit = [l_crit,]
+
+
+ # Maillage associe au modele
+ __MAIL = aster.getvectjev( self['MODELE'].nom.ljust(8) + '.MODELE .LGRF ' )
+ nom_maillage = __MAIL[0].strip()
+
+ maya = self.get_concept(nom_maillage)
+
+ # Excitation
+ args={}
+ if self['EXCIT']:args={'EXCIT' : self['EXCIT'].List_F()}
+
+ # 1. ----- calcul de G-theta
+
+ # Cas 2D
+ if self['THETA_2D'] is not None:
+ is_2D = True
+ else:
+ is_2D = False
+
+ if is_2D:
+ nbcour = len(self['THETA_2D'])
+ nb_tranches = 1
+ ep_z = 1
+ l_tab = []
+ for occ in self['THETA_2D']:
+ dMC = occ.cree_dict_valeurs(occ.mc_liste)
+
+ __theta = CALC_THETA(MODELE=self['MODELE'],
+ DIRECTION=self['DIRECTION'],
+ THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'],
+ MODULE=1.0,
+ R_INF=dMC['R_INF'],
+ R_SUP=dMC['R_SUP']),)
+
+ __gtheta = CALC_G(THETA=_F(THETA=__theta),
+ RESULTAT=self['RESULTAT'],
+ TOUT_ORDRE='OUI',
+ SYME_CHAR=self['SYME_CHAR'],
+ COMP_ELAS=self['COMP_ELAS'].List_F(),
+ **args)
+
+ tab = __gtheta.EXTR_TABLE()
+
+ # une Table par couronne
+ l_tab.append(tab)
+
+ else:
+ #Cas 3D
+ nbcour = len(self['THETA_3D'])
+ nb_tranches = self['NB_TRANCHES']
+ l_tab = []
+ l_noeuds_fissure, pas = getFondFissInfo(self['FOND_FISS'])
+ nb_noeuds_fissure = len(l_noeuds_fissure)
+
+ for occ in self['THETA_3D']:
+ dMC = occ.cree_dict_valeurs(occ.mc_liste)
+
+ # on met les mots-clés facultatifs dans des dictionnaires
+ dpar_theta = {}
+ if self['DIRECTION'] is not None:
+ dpar_theta['DIRECTION'] = self['DIRECTION']
+
+ __gtheta = CALC_G(
+ THETA=_F(R_INF=dMC['R_INF'],
+ R_SUP=dMC['R_SUP'],
+ MODULE=1.0,
+ FOND_FISS=self['FOND_FISS'],
+ **dpar_theta),
+ RESULTAT=self['RESULTAT'],
+ TOUT_ORDRE='OUI',
+ SYME_CHAR=self['SYME_CHAR'],
+ COMP_ELAS=self['COMP_ELAS'].List_F(),
+ LISSAGE=self['LISSAGE'].List_F(),
+ **args)
+
+
+ tab = __gtheta.EXTR_TABLE()
+
+
+ # une Table par couronne
+ l_tab.append(tab)
+
+
+
+ # 2. ----- Calcul de l'energie élastique en exploitant les groupes de
+ # mailles fournis par la procedure de maillage
+
+ l_copo_tot = [grma.strip() for grma in self['GROUP_MA']]
+ nbcop_tot = len(l_copo_tot)
+ nbcop = nbcop_tot/nb_tranches
+
+ if self['LIST_EP_COPEAUX'] is not None:
+ l_ep_copeaux_tot = self['LIST_EP_COPEAUX']
+
+ l_t_enel = []
+
+ if self['TRAC_COMP']=='OUI':
+ # prise en compte de la traction-compression dans le calcul de l'energie
+ resu2=CALC_ELEM(OPTION=('EQUI_ELNO_SIGM'),
+ RESULTAT=self['RESULTAT'],
+ )
+
+ # indices des mailles du dernier group_ma
+ # (pour avoir le nombre de mailles par tranche)
+ l_mailles_last_gm = maya.GROUPEMA.get()[l_copo_tot[-1].ljust(8)]
+
+ # initialisation des concepts reutilises dans la boucle
+ # on suppose que chaque tranche a le meme nombre de mailles
+
+ kk = 0
+
+ E_el = [None]*len(l_mailles_last_gm)*nb_tranches
+
+ T_el = [None]*len(l_mailles_last_gm)*nb_tranches
+
+ # on recupere les sd en dehors de la boucle
+ maya_GROUPEMA = maya.GROUPEMA.get()
+ maya_NOMMAI = maya.NOMMAI.get()
+ maya_CONNEX = maya.CONNEX.get()
+ maya_NOMNOE = maya.NOMNOE.get()
+
+ # liste des tables tb_Gpmax repartie aux noeuds
+ l_tb_Gpmax_noeuds = []
+
+ # Charges
+ args={}
+ if self['EXCIT']:args={'CHARGE': [charg['CHARGE'] for charg in self['EXCIT']]}
+ for i in range(0,nb_tranches):
+ l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop]
+
+ if info >= 2 and not is_2D:
+ print "<I> Calcul de la tranche %i"%(i+1)
+
+ if self['TRAC_COMP']=='OUI':
+
+ # l_copo est une liste commulative de mailles
+ # il faut lancer POST_ELEM sur chaque maille de chaque copeau
+ # puis regarder la trace de SIEF_ELGA sur ce copeau
+
+ # on fera attention a ne pas lancer POST_ELEM sur une maille qui
+ # a deja ete calculee en stockant son resultat pour la maille en question
+ d_groupma={}
+ d_nomma={}
+
+ # indices des mailles des copeaux
+ for group_ma in l_copo:
+ d_groupma[group_ma] = maya_GROUPEMA[group_ma.ljust(8)]
+
+ # le dernier copeau contient tous les elements
+ # on calcule l energie de chaque element de ce copeau
+ last_copo = l_copo[-1]
+
+ d_ener = {}
+
+ d_nomma = {}
+
+ for k, id_elem in enumerate(d_groupma[last_copo]):
+
+
+ # les id des elements dans Aster commencent a 1
+ # la liste python commence a 0
+ elem = maya_NOMMAI[id_elem-1]
+ d_nomma[id_elem]=elem
+
+ E_el[kk] = POST_ELEM(MODELE=self['MODELE'],
+ RESULTAT=self['RESULTAT'],
+ TOUT_ORDRE='OUI',
+ ENER_ELAS=_F(MAILLE=elem),
+ TITRE='Energie élastique',
+ **args)
+
+ T_el[kk] = E_el[kk].EXTR_TABLE()
+
+ l_enel = T_el[kk].TOTALE.values()
+
+ # signe de la trace <=> signe de la composante VMIS_SG du tenseur EQUI_ELNO_SIGM,
+ # mais E_enel est par element => on fait une moyenne sur les noeuds de l'element
+
+ list_no = []
+ for ind_no in maya_CONNEX[id_elem] :
+ nomnoe = maya_NOMNOE[ind_no-1]
+ if nomnoe not in list_no :
+ list_no.append(nomnoe)
+
+ # print "liste des noeuds de la maille ", id_elem, ": ", list_no
+
+ l_inst = T_el[kk].INST.values()
+ nb_inst = len(l_inst)
+
+ T_noeuds = Table()
+ T_noeuds['INST']=l_inst
+
+ # pour chaque noeud de l'element on recupere sa trace
+ for noeud in list_no:
+
+ __VM=RECU_FONCTION(RESULTAT=resu2,
+ TOUT_INST='OUI',
+ NOM_CHAM='EQUI_ELNO_SIGM',
+ NOM_CMP='VMIS_SG',
+ MAILLE=elem,
+ NOEUD=noeud);
+
+ T_noeuds[noeud]=__VM.Ordo()
+
+ T_noeuds.fromfunction('VM_MAIL', moyenne, list_no)
+
+ l_VM_MAIL = T_noeuds.VM_MAIL.values()
+
+ for j, vm in enumerate(l_VM_MAIL):
+ if vm < 0:
+ l_enel[j]=-l_enel[j]
+
+ del T_el[kk]['TOTALE']
+ T_el[kk][elem]=l_enel
+
+ if k==0:
+
+ # Table de l'energie elastique sur le GROUP_MA
+ T_el_gm = Table()
+ T_el_gm['NUME_ORDRE'] = T_el[kk].NUME_ORDRE.values()
+ T_el_gm['INST'] = T_el[kk].INST.values()
+ T_el_gm['LIEU'] = [last_copo]*nb_inst
+ T_el_gm['ENTITE'] = ['GROUP_MA']*nb_inst
+
+ T_el_gm[elem]=l_enel
+
+ kk+=1
+
+ # sommation sur les mailles du group_ma:
+ l_nomma = d_nomma.values()
+ T_el_gm.fromfunction('TOTALE', mysum, l_nomma)
+
+ # Table totale
+ t_enel=Table(titr="Energie élastique")
+ t_enel['NUME_ORDRE']=T_el_gm.NUME_ORDRE.values()
+ t_enel['INST']=T_el_gm.INST.values()
+ t_enel['LIEU']=T_el_gm.LIEU.values()
+ t_enel['ENTITE']=T_el_gm.ENTITE.values()
+ t_enel['TOTALE']=T_el_gm.TOTALE.values()
+
+ # t_enel ne contient jusqu'ici que l'energie elastique du dernier copeau
+
+ # calcul de l'energie elastique pour les autres copeaux
+ T_el_sub = T_el_gm.copy()
+
+ for k in range(len(l_copo)-2,-1,-1):
+ group_ma = l_copo[k]
+ T_el_sub = T_el_sub.copy()
+ del T_el_sub['LIEU']
+ del T_el_sub['TOTALE']
+ T_el_sub['LIEU']=[group_ma]*nb_inst
+ l_id_elem = d_groupma[group_ma]
+ l_nom_elem = []
+
+ for id_elem, nom_elem in d_nomma.items():
+ if not id_elem in l_id_elem:
+ # colonne a supprimer
+ del T_el_sub[nom_elem]
+ del d_nomma[id_elem]
+ else:
+ l_nom_elem.append(nom_elem)
+
+ T_el_sub.fromfunction('TOTALE', sum_and_check, l_nom_elem)
+
+ # Table de l'energie elastique sur le GROUP_MA
+ T_el_gm_k = Table()
+ T_el_gm_k['NUME_ORDRE'] =T_el_sub.NUME_ORDRE.values()
+ T_el_gm_k['INST'] = T_el_sub.INST.values()
+ T_el_gm_k['LIEU'] = [group_ma]*nb_inst
+ T_el_gm_k['ENTITE'] = ['GROUP_MA']*nb_inst
+ T_el_gm_k['TOTALE'] = T_el_sub.TOTALE.values()
+
+ # contribution du group_ma a la table totale:
+ t_enel = merge(t_enel, T_el_gm_k)
+
+ t_enel.sort('NUME_ORDRE')
+
+ else:
+ # si self['TRAC_COMP']!='OUI'
+ # calcul classique de l'energie elastique
+
+ __ener = POST_ELEM(MODELE=self['MODELE'],
+ RESULTAT=self['RESULTAT'],
+ TOUT_ORDRE='OUI',
+ ENER_ELAS=_F(GROUP_MA=l_copo),
+ TITRE='Energie élastique',
+ **args)
+
+ t_enel = __ener.EXTR_TABLE()
+
+ # 2.1. ----- Indice de chaque copeau et deltaL
+ d_icop = dict(zip(l_copo, range(1, nbcop + 1)))
+
+ l_lieu = [grma.strip() for grma in t_enel.LIEU.values()]
+
+ l_icop = [d_icop[grma] for grma in l_lieu]
+
+ t_enel['ICOP'] = l_icop
+
+ l_numord = list(set(t_enel.NUME_ORDRE.values()))
+ l_numord.sort()
+
+ if self['PAS_ENTAILLE'] is not None:
+ t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] })
+ else:
+ l_ep_copeaux_tranche = l_ep_copeaux_tot[i*nbcop:(i+1)*nbcop]
+ t_enel['DELTAL'] = l_ep_copeaux_tranche*len(l_numord)
+
+ # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL
+ if is_2D:
+ t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+ {'syme' : self['SYME_CHAR'] != 'SANS',
+ 'R' : self['RAYON_AXIS'],})
+ else:
+ ep_tranche = largeur_tranche(nom_maillage, l_noeuds_fissure, pas, i)
+ #print "ep_tranche %i: "%i, ep_tranche
+ t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+ {'syme' : self['SYME_CHAR'] != 'SANS',
+ 'R' : ep_tranche })
+
+ #if info >= 2:
+ # print "Table de l'énergie élastique: ", t_enel
+
+ l_t_enel.append(t_enel)
+ # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant
+ if info >= 2:
+ tGp_t_icop = t_enel['INST', 'DELTAL', 'GP']
+ tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \
+ "fond d'entaille"
+ tGp_t_icop.ImprTabCroise()
+
+ # 2.4. ----- Table Gpmax
+ ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP']
+
+ for j in l_numord:
+ tj = ttmp.NUME_ORDRE == j
+
+ ## pour tester le comportement de Gpmax quand GP est identiquement nul
+ #del tj['GP']
+ #tj['GP']=[0]*len(tj.GP.values())
+
+ if self['CRIT_MAXI_GP'] == 'ABSOLU':
+ t = tj.GP.MAXI()
+ else:
+ t = MaxRelatif(tj, 'GP')
+
+
+ # cas GP identiquement nul: plusieurs max de GP
+ # on prend le DELTAL minimum
+ if len(t.GP.values())>1:
+ t = t.DELTAL.MINI()
+
+ if j == 1:
+ tb_Gpmax_i = t
+ else:
+ tb_Gpmax_i = tb_Gpmax_i | t
+
+
+ tb_Gpmax_i.Renomme('GP', 'GPMAX')
+ tb_Gpmax_i.Renomme('ICOP', 'ICOPMAX')
+ tb_Gpmax_i.Renomme('DELTAL', 'DELTALMAX')
+ tb_Gpmax_i.titr = 'Gpmax à chaque instant'
+
+ # On transfert Gpmax au noeud sommet à gauche et au milieu (si cas quadratique)
+ # sauf pour la dernière tranche où on transfère également au noeud sommet de droite.
+ # Tout cela pour pouvoir avoir une table complète avec les G et les Gpmax.
+ if not is_2D:
+ tb_Gpmax_i['NUME_TRANCHE']=[i+1]*len(tb_Gpmax_i['GPMAX'])
+ if i==0:
+ l_inst = tb_Gpmax_i.INST.values()
+ nb_inst = len(l_inst)
+ if pas==1:
+ tb_Gpmax_i_noeuds = tb_Gpmax_i.copy()
+ tb_Gpmax_i_noeuds['NOEUD']=[l_noeuds_fissure[i]]*nb_inst
+ l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds)
+ else:
+ tb_Gpmax_i_noeuds_1 = tb_Gpmax_i.copy()
+ tb_Gpmax_i_noeuds_1['NOEUD'] = [l_noeuds_fissure[pas*i]]*nb_inst
+ l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_1)
+ tb_Gpmax_i_noeuds_2 = tb_Gpmax_i.copy()
+ tb_Gpmax_i_noeuds_2['NOEUD'] = [l_noeuds_fissure[pas*i+1]]*nb_inst
+ l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_2)
+ if i==nb_tranches-1:
+ tb_Gpmax_i_noeuds_3 = tb_Gpmax_i.copy()
+ tb_Gpmax_i_noeuds_3['NOEUD'] = [l_noeuds_fissure[-1]]*nb_inst
+ l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_3)
+
+
+
+ if i == 0:
+ tb_Gpmax = tb_Gpmax_i
+ else:
+ tb_Gpmax = merge(tb_Gpmax, tb_Gpmax_i)
+
+ # FIN BOUCLE SUR LES TRANCHES
+
+ if not is_2D:
+ tb_Gpmax_noeuds = Table(para=tb_Gpmax.para+['NOEUD'])
+ for j, tb in enumerate(l_tb_Gpmax_noeuds):
+ if j==0:
+ tb_Gpmax_noeuds = tb
+ else:
+ tb_Gpmax_noeuds = merge(tb_Gpmax_noeuds, tb)
+
+
+ # 2.5. ----- extraction de la température en fond d'entaille
+ #voir le cas 3D => THETA_3D, mais qu'en est-il des tranches?
+ if self['RESU_THER']:
+ #sur un seul noeud ou sur tous les noeuds du fond d'entaille?
+
+ if is_2D:
+ grno_fond = self['THETA_2D'][0]['GROUP_NO']
+ else:
+ grma_fond = self['THETA_3D'][0]['GROUP_MA']
+ grno_fond = "GRNOFOND"
+ DEFI_GROUP(reuse =maya,
+ MAILLAGE=maya,
+ CREA_GROUP_NO=_F(GROUP_MA=grma_fond,
+ NOM=grno_fond,),);
+
+ l_ordres = DEFI_LIST_ENTI(VALE=l_numord)
+ __relev = POST_RELEVE_T(ACTION=_F(RESULTAT=self['RESU_THER'],
+ OPERATION='EXTRACTION',
+ INTITULE='Temperature',
+ NOM_CHAM='TEMP',
+ LIST_ORDRE=l_ordres,
+ NOM_CMP='TEMP',
+ GROUP_NO=grno_fond,),)
+
+ t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'NOEUD', 'TEMP']
+
+ # 3. ----- boucle sur les mots-clés facteurs
+ # opérations dépendant de la température
+ MATER = self['MATER']
+ flag_mat = True
+
+ for iocc, TEMP in enumerate(l_temp):
+ # 3.0. ----- Temperature fonction du temps : si on n'a pas de RESU_THER,
+ # on prend la température d'identification.
+ if not self['RESU_THER']:
+ l_rows = [{'NUME_ORDRE' : j, 'TEMP' : TEMP} for j in l_numord]
+ t_relev = Table(rows=l_rows, para=('NUME_ORDRE', 'TEMP'), typ=('R', 'R'))
+ flag_mat = True
+
+ # 3.1. ----- extrait du matériau E(TEMP) et NU(TEMP) (si nécessaire)
+ if flag_mat:
+ t_relev.fromfunction('YOUNG', CallRCVALE, 'TEMP',
+ { 'para' : 'E', 'MATER' : MATER })
+ t_relev.fromfunction('NU', CallRCVALE, 'TEMP',
+ { 'para' : 'NU', 'MATER' : MATER })
+ flag_mat = False
+
+ # 3.2. ----- paramètres
+ dict_constantes = {
+ 'YOUNG' : CallRCVALE(TEMP, 'E', MATER),
+ 'NU' : CallRCVALE(TEMP, 'NU', MATER),
+ }
+
+ # 3.3. ----- calcul de Kj(G)
+ l_tabi = []
+ for k, tab in enumerate(l_tab):
+ #tab: table de la couronne k
+
+ # calcul de Kj(G) = K_i
+ new_para = 'K_%d' % (k + 1)
+ if is_2D:
+ # fusion avec TEMP, E et nu
+ tab = merge(tab, t_relev, 'NUME_ORDRE')
+ tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'))
+ # renomme G en G_i
+ tab.Renomme('G', 'G_%d' % (k + 1))
+ else:
+ if self['RESU_THER']:
+ tab=merge(tab, t_relev, ['NUME_ORDRE', 'NOEUD'])
+ else:
+ tab=mergeLineInTable(tab, t_relev, nb_noeuds_fissure)
+
+ # en 3D, le paramètre R n'intervient pas
+ tab.fromfunction(new_para, fKj, ('G_LOCAL', 'YOUNG', 'NU'))
+ tab.Renomme('G_LOCAL', 'G_%d' % (k + 1))
+
+ l_tabi.append(tab)
+
+ # 3.4 ----- Table des Gi, Ki sur les differentes couronnes + Kmoyen
+ if is_2D:
+ tabK_G = l_tabi[0]['NUME_ORDRE']
+ for tab in l_tabi:
+ tabK_G = merge(tabK_G, tab, 'NUME_ORDRE')
+ else:
+ tabK_G=l_tabi[0]
+ for i in range(1,len(l_tabi)):
+ tabK_G = merge(tabK_G, l_tabi[i], ['NUME_ORDRE', 'NOEUD'])
+ tabK_G.titr = 'G et K sur les differentes couronnes + moyennes'
+ tabK_G.fromfunction('GMOY', moyenne_positive, ['G_%d' % (k + 1) for k in range(nbcour)])
+ tabK_G.fromfunction('KMOY', moyenne, ['K_%d' % (k + 1) for k in range(nbcour)])
+
+ # 3.5. ----- Contribution à la table globale
+
+ if is_2D:
+ tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE')
+ tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord)
+ else:
+ # tb_Gpmax est une table sur les tranches,
+ # on l'ajoute dans la table aux noeuds tabres avec la convention:
+ # au 1er noeud et noeud milieu de la tranche on affecte la valeur de la tranche
+ # sauf pour la derniere tranche où on affecte la valeur sur les 3 noeuds de la tranche
+ tabres = tabK_G
+ tabres = merge(tabK_G, tb_Gpmax_noeuds, ['NUME_ORDRE', 'NOEUD'])
+ tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) * nb_noeuds_fissure
+ #if info >= 2:
+ # print tabres
+
+ # 3.5.1. --- Table globale
+ if iocc == 0:
+ tabl_glob = tabres
+ else:
+ tabl_glob = merge(tabl_glob, tabres)
+ tabl_glob.titr = 'G, K sur les differentes couronnes, Gmoy, Kmoy et ' \
+ 'Gpmax fonctions du temps'
+
+ # 3.6. ----- traitement selon identification / prédiction
+ d_para = {
+ 'INTERPOL' : ['LIN', 'LIN'],
+ 'NOM_PARA' : 'INST',
+ 'PROL_DROITE' : 'CONSTANT',
+ 'PROL_GAUCHE' : 'CONSTANT',
+ }
+
+ # 3.6.1. --- identification
+ if identification:
+ KJ_CRIT = l_crit[iocc]
+ # on verifie que KJ_CRIT soit compris dans l'intervalle [KMOY_min, KMOY_max]
+ valkmoy = tabres.KMOY.values()
+ if not (min(valkmoy) <= KJ_CRIT <= max(valkmoy)):
+# 'constant utilisé).')
+ UTMESS('A','RUPTURE0_1')
+ if is_2D:
+ # définition des fonctions pour faire les interpolations
+ d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+ # DeltaMax en fonction du temps
+ fdL = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.DELTALMAX.values(), d_para)
+ # Gpmax fonction du temps
+ d_para.update({ 'NOM_RESU' : 'GPMAX' })
+ fGp = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.GPMAX.values(), d_para)
+
+ d_para.update({ 'NOM_PARA' : 'KMOY',
+ 'NOM_RESU' : 'INST', })
+ valkmoy = tabres.KMOY.values()
+ # temps en fonction de Kmoy
+ finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
+
+ # valeurs à mettre dans la table
+ # temps correspondant à KJ_CRIT
+ ti = finv(KJ_CRIT)
+ # GP correspondant au temps critique
+ Gpi = fGp(ti)
+ d_ident = {
+ 'KJ_CRIT' : KJ_CRIT,
+ 'INST' : ti,
+ 'GPMAX' : Gpi,
+ 'KGPMAX' : fKj(Gpi, **dict_constantes),
+ 'DELTALMAX' : fdL(ti),
+ }
+ lv_ident.append(d_ident)
+ else:
+
+ l_i_noeuds_sommets = range(0,len(l_noeuds_fissure),pas)
+ t_noeud_Kcrit = Table(para=tabres.para)
+
+ # On determine quel noeud sommet maximise KMOY au cours du temps:
+
+ row_KMOY_max = tabres.KMOY.MAXI()
+ noeud_KMOY_max = row_KMOY_max.NOEUD.values()[0]
+
+ # avec le noeud ou KJ_CRIT est atteint, on regarde GP a gauche et a droite.
+ # le GP le plus grand correspond au GPmax
+ # on garde la tranche ou GP est le plus grand
+
+ id_noeud_KMOY_max = list(l_noeuds_fissure).index(noeud_KMOY_max)
+ if id_noeud_KMOY_max==0:
+ # "Gpmax sur la 1ere tranche"
+ nume_tranche_Gpmax = 1
+ elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1):
+ # "Gpmax sur la derniere tranche"
+ nume_tranche_Gpmax = nb_tranches
+ else:
+ # "Gpmax sur une tranche intermediaire"
+ Gpi_tot = Table(para=tb_Gpmax.para)
+ Gpi_gauche = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas)
+ Gpi_tot.append(Gpi_gauche.rows[0])
+ Gpi_droite = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas+1)
+ Gpi_tot.append(Gpi_droite.rows[0])
+ Gpi_tab = Gpi_tot.GPMAX.MAXI()
+ nume_tranche_Gpmax = Gpi_tab.NUME_TRANCHE.values()[0]
+
+ # tb_Gpmax_TrancheCrit est une table de la meme nature que la table 2D tb_Gpmax
+ # i.e. valeurs sur la seule tranche qui nous interesse (ou on sait
+ # que KJ_CRIT sera atteint)
+
+ tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax
+
+ # avec le noeud ou KJ_CRIT est atteint, on determine le temps
+ # critique par interpolation
+ tabres_NoeudCrit = tabres.NOEUD==noeud_KMOY_max
+
+ # la suite est idem 2D, seuls les noms des tables changent
+
+ # définition des fonctions pour faire les interpolations
+ d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+ # DeltaMax en fonction du temps
+ fdL = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+ tb_Gpmax_TrancheCrit.DELTALMAX.values(),
+ d_para)
+
+ # Gpmax fonction du temps
+ d_para.update({ 'NOM_RESU' : 'GPMAX' })
+ fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+ tb_Gpmax_TrancheCrit.GPMAX.values(),
+ d_para)
+
+
+ d_para.update({ 'NOM_PARA' : 'KMOY',
+ 'NOM_RESU' : 'INST', })
+ valkmoy = tabres_NoeudCrit.KMOY.values()
+ # temps en fonction de Kmoy
+ finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para)
+
+ # valeurs à mettre dans la table
+ # temps correspondant a KJ_CRIT
+ ti = finv(KJ_CRIT)
+ # GP correspondant au temps critique
+ Gpi = fGp(ti)
+ # par rapport a 2D, on ajoute 'NUME_TRANCHE'
+ d_ident = {
+ 'KJ_CRIT' : KJ_CRIT,
+ 'INST' : ti,
+ 'NUME_TRANCHE' : int(nume_tranche_Gpmax),
+ 'GPMAX' : Gpi,
+ 'KGPMAX' : fKj(Gpi, **dict_constantes),
+ 'DELTALMAX' : fdL(ti),
+ }
+ lv_ident.append(d_ident)
+
+ # 3.6.2. --- prédiction
+ else:
+ pass
+
+ # 4. ----- Construction de la table résultat si demandée
+ # 4.1. --- identification
+ if identification:
+ if is_2D:
+ para_tab_ident=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+ else:
+ para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+ tab_ident = Table(rows=lv_ident,
+ para=para_tab_ident,
+ typ = ('R')*len(para_tab_ident),
+ titr='Identification aux valeurs de tenacités critiques')
+ dprod_result = tab_ident.dict_CREA_TABLE()
+ if info >= 2:
+ print tab_ident
+
+ # 4.2. --- prédiction
+ else:
+ # définition de la fonction GPcrit = f(TEMP)
+ d_para.update({ 'NOM_PARA' : 'TEMP',
+ 'NOM_RESU' : 'GP_CRIT', })
+ fGpc = t_fonction(mccalc['TEMP'], mccalc['GP_CRIT'], d_para)
+
+ # en 3D, GPMAX et DELTALMAX ne sont pas dans tab_glob: les recuperer de tb_Gpmax
+
+ if is_2D:
+ tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX']
+ else:
+ tab_pred = tb_Gpmax['NUME_ORDRE', 'INST', 'NUME_TRANCHE', 'DELTALMAX', 'GPMAX']
+ # on recupere TEMP de tabl_glob
+ tab_temp_tranche=Table(para=['NUME_ORDRE', 'NUME_TRANCHE', 'TEMP'])
+ # on fait une moyenne de la temperature sur les noeuds d'une tranche
+ for ordre in l_numord:
+ tabl_glob_ORDRE_i = tabl_glob.NUME_ORDRE==ordre
+ temp_ORDRE_i = tabl_glob_ORDRE_i.TEMP.values()
+ for i_tranche in range(nb_tranches):
+ l_temp_noeuds_tranche_i = temp_ORDRE_i[i_tranche : i_tranche+pas+1]
+ temp_tranche_i = moyenne(*l_temp_noeuds_tranche_i)
+ d = {'NUME_ORDRE': ordre, 'NUME_TRANCHE': i_tranche+1, 'TEMP': temp_tranche_i}
+ tab_temp_tranche.append(d)
+ tab_pred = merge(tab_pred, tab_temp_tranche, ['NUME_ORDRE', 'NUME_TRANCHE'])
+
+ tab_pred.fromfunction('GP_CRIT', fGpc, 'TEMP')
+ tab_pred.fromfunction('PREDICTION', crit, ('GP_CRIT', 'GPMAX'))
+ tab_pred.titr = 'Comparaison Gpmax à Gpcrit(T)'
+ dprod_result = tab_pred.dict_CREA_TABLE()
+
+ # 9. ----- création de la table_sdaster résultat
+ dprod = tabl_glob.dict_CREA_TABLE()
+ result = CREA_TABLE(**dprod)
+ tabresult = CREA_TABLE(**dprod_result)
+
+
+
+# -----------------------------------------------------------------------------
+def CallRCVALE(TEMP, para, MATER):
+ """Fonction appelant RCVALE et retourne la valeur d'un paramètre.
+ """
+ valres, flag_ok = MATER.RCVALE('ELAS', 'TEMP', TEMP, para)
+ assert list(flag_ok).count('OK') != 1, \
+ 'Erreur lors de la récupération des valeurs du matériau.'
+ return valres
+
+# -----------------------------------------------------------------------------
+def fKj(G, YOUNG, NU):
+ """Calcul de Kj à partir de G (formule d'Irwin)
+ """
+ Kj=(abs(G * YOUNG / (1.0 - NU**2)))**0.5
+ return Kj
+
+# -----------------------------------------------------------------------------
+def fDL(ICOP, pascop):
+ """DeltaL = numéro copeau * pas d'entaille
+ """
+ return ICOP * pascop
+
+# -----------------------------------------------------------------------------
+def fGp_Etot(TOTALE, DELTAL, R, syme=False):
+ """Gp(Etotale, K), deltal pris dans le context global.
+ ICOP : numéro du copeau,
+ DELTAL : liste des epaisseurs des copeaux
+ R : rayon en axisymetrique,
+ longueur de l'élément 1D situé sur le front d'entaille si modèle 3D.
+ syme : True s'il y a symétrie.
+ """
+ import types
+ fact_syme = 1.
+ if syme:
+ fact_syme = 2.
+ Gp_Etot = fact_syme * TOTALE / (DELTAL * R )
+ return Gp_Etot
+
+# -----------------------------------------------------------------------------
+def MaxRelatif(table, nom_para):
+ """Extrait le dernier maxi du champ `nom_para` de la table.
+ """
+ l_val = getattr(table, nom_para).values()
+ l_val.reverse()
+ Vlast = l_val[0]
+ for val in l_val:
+ if val < Vlast:
+ break
+ Vlast = val
+ return getattr(table, nom_para) == Vlast
+
+# -----------------------------------------------------------------------------
+def crit(GP_CRIT, GPMAX):
+ """Retourne 1 quand GP_CRIT > GPMAX
+ """
+ if GPMAX > GP_CRIT:
+ return 1
+ else:
+ return 0
+
+# -----------------------------------------------------------------------------
+def moyenne(*args):
+ """Fonction moyenne
+ """
+ return sum(args)/len(args)
+
+def moyenne_positive(*args):
+ """Fonction moyenne
+ """
+ return sum([abs(a) for a in args])/len(args)
+
+def mysum(*args):
+ """Fonction sum.
+ La fonction sum ne peut pas etre appelee sur une liste de parametre
+ d'une table via fromfunction
+ """
+ return sum(args)
+
+def sum_and_check(*args):
+ """Fonction sum.
+ Verifie si la somme est positive.
+ Si la somme est negative, on la met egale a zero
+ """
+ somme = sum(args)
+ if somme<0:
+ somme=0
+ return somme
+
+# On recupere des infos sur le fond de fissure
+def getFondFissInfo(fondfiss):
+ # >FONFISS .FOND .NOEU <
+ # >FONFISS .FOND .TYPE <
+ import aster
+ l_noeuds_fissure = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND .NOEU ')
+ type_mailles = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND .TYPE ')
+ if (type_mailles[0].strip() == 'SEG3' ):
+ pas = 2
+ else:
+ pas = 1
+ return l_noeuds_fissure, pas
+
+########################################################################
+# determination de la distance min entre 2 points consécutifs de la ligne de coupe
+
+def largeur_tranche(nom_maillage, l_noms_noeuds_fissure, pas, i_tranche):
+ # >MA .COORDO .VALE <
+ from math import sqrt
+ import aster
+
+ # tuple des noms des noeuds du maillage
+ t_noms_noeuds_maillage = aster.getvectjev(nom_maillage.ljust(8)+'.NOMNOE')
+ # on convertit en liste pour utiliser la methode index
+ # qui est plus optimal qu'une boucle sur les indices du tuple
+ l_noms_noeuds_maillage = list(t_noms_noeuds_maillage)
+
+ l_numeros_noeuds_fissure = []
+ for i in range(0,len(l_noms_noeuds_fissure),pas):
+ nom = l_noms_noeuds_fissure[i]
+ index = l_noms_noeuds_maillage.index(nom)
+ l_numeros_noeuds_fissure.append(index)
+
+ coor1=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO .VALE ',
+ l_numeros_noeuds_fissure[i_tranche]*3,3)
+ coor2=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO .VALE ',
+ l_numeros_noeuds_fissure[i_tranche+1]*3,3)
+
+ d=sqrt( (coor1[0]-coor2[0])**2+(coor1[1]-coor2[1])**2+(coor1[2]-coor2[2])**2)
+ return d
+
+def mergeLineInTable(multiTable, lineTable, nb_noeuds):
+ # on ajoute a la table multiTable les colonnes de lineTable
+ # pour chaque nume_ordre autant de fois qu'il y a de nb_noeuds
+ from Utilitai.Table import Table, merge
+
+ l_ordre = lineTable.NUME_ORDRE
+ l_para = lineTable.copy().para
+ l_para.remove('NUME_ORDRE')
+ for i, ordre in enumerate(l_ordre):
+ multiTable_i = multiTable.NUME_ORDRE==ordre
+ row_i = lineTable.rows[i]
+ for para in l_para:
+ valeur_i = row_i[para]
+ multiTable_i[para] = [valeur_i] * nb_noeuds
+ if i==0:
+ newTable=multiTable_i
+ else:
+ newTable = merge(newTable, multiTable_i)
+
+ return newTable
--- /dev/null
+#@ MODIF post_k1_k2_k3_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 veri_tab(tab,nom,ndim) :
+ from Utilitai.Utmess import UTMESS
+ macro = 'POST_K1_K2_K3'
+ for label in ('DX','DY','COOR_X','COOR_Y','ABSC_CURV') :
+ if label not in tab.para :
+ UTMESS('F','RUPTURE0_2',valk=[label,nom])
+ if ndim==3 :
+ if 'DZ' not in tab.para :
+ label='DZ'
+ UTMESS('F','RUPTURE0_2',valk=[label,nom])
+ if 'COOR_Z' not in tab.para :
+ label='COOR_Z'
+ UTMESS('F','RUPTURE0_2',valk=[label,nom])
+
+#TODO prefer use numpy.cross
+def cross_product(a,b):
+ cross = [0]*3
+ cross[0] = a[1]*b[2]-a[2]*b[1]
+ cross[1] = a[2]*b[0]-a[0]*b[2]
+ cross[2] = a[0]*b[1]-a[1]*b[0]
+ return cross
+
+def complete(Tab):
+ n = len(Tab)
+ for i in range(n) :
+ if Tab[i]==None : Tab[i] = 0.
+ return Tab
+
+def moy(t):
+ m = 0
+ for value in t :
+ m += value
+ return (m/len(t))
+
+def InterpolFondFiss(s0, Coorfo) :
+# Interpolation des points du fond de fissure (xfem)
+# s0 = abscisse curviligne du point considere
+# Coorfo = Coordonnees du fond (extrait de la sd fiss_xfem)
+# en sortie : xyza = Coordonnees du point et abscisse
+ n = len(Coorfo) / 4
+ if ( s0 < Coorfo[3] ) :
+ xyz = [Coorfo[0],Coorfo[1],Coorfo[2],s0]
+ return xyz
+ if ( s0 > Coorfo[-1] ) :
+ xyz = [Coorfo[-4],Coorfo[-3],Coorfo[-2],s0]
+ return xyz
+ i = 1
+ while s0 > Coorfo[4*i+3]:
+ i = i+1
+ xyz = [0.]*4
+ xyz[0] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+0]-Coorfo[4*(i-1)+0]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+0]
+ xyz[1] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+1]-Coorfo[4*(i-1)+1]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+1]
+ xyz[2] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+2]-Coorfo[4*(i-1)+2]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+2]
+ xyz[3] = s0
+ return xyz
+
+def InterpolBaseFiss(s0, Basefo, Coorfo) :
+# Interpolation de la base locale en fond de fissure
+# s0 = abscisse curviligne du point considere
+# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
+# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
+# en sortie : VPVNi = base locale au point considere (6 coordonnes)
+ n = len(Coorfo) / 4
+ if ( s0 < Coorfo[3] ) :
+ VPVNi = Basefo[0:6]
+ return VPVNi
+ if ( s0 > Coorfo[-1] ) :
+ VPVNi = [Basefo[i] for i in range(-6,0)]
+ return VPVNi
+ i = 1
+ while s0 > Coorfo[4*i+3]:
+ i = i+1
+ VPVNi = [0.]*6
+ for k in range(6) :
+ VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
+ return VPVNi
+
+
+def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
+ TABL_DEPL_SUP,TABL_DEPL_INF,ABSC_CURV_MAXI,PREC_VIS_A_VIS,
+ TOUT_ORDRE,NUME_ORDRE,LIST_ORDRE,INST,LIST_INST,SYME_CHAR,
+ INFO,VECT_K1,TITRE,**args):
+ """
+ Macro POST_K1_K2_K3
+ Calcul des facteurs d'intensité de contraintes en 2D et en 3D
+ par extrapolation des sauts de déplacements sur les lèvres de
+ la fissure. Produit une table.
+ """
+ import aster
+ import string
+ import copy
+ import math
+ import numpy as NP
+ from math import pi
+ from types import ListType, TupleType
+ from Accas import _F
+ from Utilitai.Table import Table, merge
+ from SD.sd_l_charges import sd_l_charges
+ from SD.sd_mater import sd_compor1
+ EnumTypes = (ListType, TupleType)
+
+ macro = 'POST_K1_K2_K3'
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou dérivé) est tab
+ self.DeclareOut('tabout', self.sd)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+ MACR_LIGN_COUPE = self.get_cmd('MACR_LIGN_COUPE')
+
+ AFFE_MODELE = self.get_cmd('AFFE_MODELE')
+ PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+
+# ------------------------------------------------------------------
+# CARACTERISTIQUES MATERIAUX
+# ------------------------------------------------------------------
+ matph = MATER.NOMRC.get()
+ phenom=None
+ for cmpt in matph :
+ if cmpt[:4]=='ELAS' :
+ phenom=cmpt
+ break
+ if phenom==None : UTMESS('F','RUPTURE0_5')
+# --- RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE:
+ compor = sd_compor1('%-8s.%s' % (MATER.nom, phenom))
+ valk = [s.strip() for s in compor.VALK.get()]
+ valr = compor.VALR.get()
+ dicmat=dict(zip(valk,valr))
+# --- PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE
+ Tempe3D = False
+ if FOND_FISS and args['EVOL_THER'] :
+# on recupere juste le nom du resultat thermique (la température est variable de commande)
+ ndim = 3
+ Tempe3D=True
+ resuth=string.ljust(args['EVOL_THER'].nom,8).rstrip()
+ if dicmat.has_key('TEMP_DEF') and not args['EVOL_THER'] :
+ nompar = ('TEMP',)
+ valpar = (dicmat['TEMP_DEF'],)
+ UTMESS('A','RUPTURE0_6',valr=valpar)
+ nomres=['E','NU']
+ valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+ e = valres[0]
+ nu = valres[1]
+
+
+# --- PROPRIETES MATERIAUX INDEPENDANTES DE LA TEMPERATURE
+ else :
+ e = dicmat['E']
+ nu = dicmat['NU']
+
+ if not Tempe3D :
+ coefd3 = 0.
+ coefd = e * NP.sqrt(2.*pi)
+ unmnu2 = 1. - nu**2
+ unpnu = 1. + nu
+ if MODELISATION=='3D' :
+ coefk='K1 K2 K3'
+ ndim = 3
+ coefd = coefd / ( 8.0 * unmnu2 )
+ coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * unpnu )
+ coefg = unmnu2 / e
+ coefg3 = unpnu / e
+ elif MODELISATION=='AXIS' :
+ ndim = 2
+ coefd = coefd / ( 8. * unmnu2 )
+ coefg = unmnu2 / e
+ coefg3 = unpnu / e
+ elif MODELISATION=='D_PLAN' :
+ coefk='K1 K2'
+ ndim = 2
+ coefd = coefd / ( 8. * unmnu2 )
+ coefg = unmnu2 / e
+ coefg3 = unpnu / e
+ elif MODELISATION=='C_PLAN' :
+ coefk='K1 K2'
+ ndim = 2
+ coefd = coefd / 8.
+ coefg = 1. / e
+ coefg3 = unpnu / e
+ else :
+ UTMESS('F','RUPTURE0_10')
+
+
+# ------------------------------------------------------------------
+# CAS FOND_FISS
+# ------------------------------------------------------------------
+ if FOND_FISS :
+ MAILLAGE = args['MAILLAGE']
+ NOEUD = args['NOEUD']
+ SANS_NOEUD = args['SANS_NOEUD']
+ GROUP_NO = args['GROUP_NO']
+ SANS_GROUP_NO = args['SANS_GROUP_NO']
+ TOUT = args['TOUT']
+ TYPE_MAILLAGE = args['TYPE_MAILLAGE']
+ NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
+ if NB_NOEUD_COUPE ==None : NB_NOEUD_COUPE = 5
+ LNOFO = FOND_FISS.FOND_______NOEU.get()
+ RECOL = False
+# Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf
+ if LNOFO==None :
+ RECOL = True
+ LNOFO = FOND_FISS.FONDINF____NOEU.get()
+ if LNOFO==None : UTMESS('F','RUPTURE0_11')
+ LNOFO = map(string.rstrip,LNOFO)
+ Nbfond = len(LNOFO)
+
+ if MODELISATION=='3D' :
+# ----------Mots cles TOUT, NOEUD, SANS_NOEUD -------------
+ Typ = FOND_FISS.FOND_______TYPE.get()
+ if (Typ[0]=='SEG2 ') or (Typ[0]=='SEG3 ' and TOUT=='OUI') :
+ pas = 1
+ elif (Typ[0]=='SEG3 ') :
+ pas = 2
+ else :
+ UTMESS('F','RUPTURE0_12')
+####
+ NO_SANS = []
+ NO_AVEC = []
+ if GROUP_NO!=None :
+ collgrno = MAILLAGE.GROUPENO.get()
+ cnom = MAILLAGE.NOMNOE.get()
+ if type(GROUP_NO) not in EnumTypes : GROUP_NO = (GROUP_NO,)
+ for m in range(len(GROUP_NO)) :
+ ngrno=GROUP_NO[m].ljust(8).upper()
+ if ngrno not in collgrno.keys() :
+ UTMESS('F','RUPTURE0_13',valk=ngrno)
+ for i in range(len(collgrno[ngrno])) : NO_AVEC.append(cnom[collgrno[ngrno][i]-1])
+ NO_AVEC= map(string.rstrip,NO_AVEC)
+ if NOEUD!=None :
+ if type(NOEUD) not in EnumTypes : NO_AVEC = (NOEUD,)
+ else : NO_AVEC = NOEUD
+ if SANS_GROUP_NO!=None :
+ collgrno = MAILLAGE.GROUPENO.get()
+ cnom = MAILLAGE.NOMNOE.get()
+ if type(SANS_GROUP_NO) not in EnumTypes : SANS_GROUP_NO = (SANS_GROUP_NO,)
+ for m in range(len(SANS_GROUP_NO)) :
+ ngrno=SANS_GROUP_NO[m].ljust(8).upper()
+ if ngrno not in collgrno.keys() :
+ UTMESS('F','RUPTURE0_13',valk=ngrno)
+ for i in range(len(collgrno[ngrno])) : NO_SANS.append(cnom[collgrno[ngrno][i]-1])
+ NO_SANS= map(string.rstrip,NO_SANS)
+ if SANS_NOEUD!=None :
+ if type(SANS_NOEUD) not in EnumTypes : NO_SANS = (SANS_NOEUD,)
+ else : NO_SANS = SANS_NOEUD
+# Creation de la liste des noeuds du fond a traiter : Lnf1
+ Lnf1 = []
+ Nbf1 = 0
+ if len(NO_AVEC)!=0 :
+ for i in range(len(NO_AVEC)) :
+ if NO_AVEC[i] in LNOFO :
+ Lnf1.append(NO_AVEC[i])
+ Nbf1 = Nbf1 +1
+ else :
+ UTMESS('F','RUPTURE0_15',valk=NO_AVEC[i])
+ else :
+ for i in range(0,Nbfond,pas) :
+ if not (LNOFO[i] in NO_SANS) :
+ Lnf1.append(LNOFO[i])
+ Nbf1 = Nbf1 +1
+ else :
+ Lnf1 = LNOFO
+ Nbf1 = 1
+
+##### Cas maillage libre###########
+# creation des directions normales et macr_lign_coup
+ if TYPE_MAILLAGE =='LIBRE':
+ if not RESULTAT : UTMESS('F','RUPTURE0_16')
+ Lnofon = Lnf1
+ Nbnofo = Nbf1
+ ListmaS = FOND_FISS.LEVRESUP___MAIL.get()
+ if ListmaS==None : UTMESS('F','RUPTURE0_19')
+ if SYME_CHAR=='SANS':
+ ListmaI = FOND_FISS.LEVREINF___MAIL.get()
+ __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond',
+ NOEUD=LNOFO,
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+ OPERATION='EXTRACTION',),);
+ tcoorf=__NCOFON.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__NCOFON),INFO=1)
+ nbt = len(tcoorf['NOEUD'].values()['NOEUD'])
+ xs=NP.array(tcoorf['COOR_X'].values()['COOR_X'][:nbt])
+ ys=NP.array(tcoorf['COOR_Y'].values()['COOR_Y'][:nbt])
+ if ndim==2 : zs=NP.zeros(nbt)
+ elif ndim==3 : zs=NP.array(tcoorf['COOR_Z'].values()['COOR_Z'][:nbt])
+ ns = tcoorf['NOEUD'].values()['NOEUD'][:nbt]
+ ns = map(string.rstrip,ns)
+ l_coorf = [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
+ l_coorf = [(i[0],i[1:]) for i in l_coorf]
+ d_coorf = dict(l_coorf)
+# Coordonnee d un pt quelconque des levres pr determination sens de propagation
+ cmail=MAILLAGE.NOMMAI.get()
+ for i in range(len(cmail)) :
+ if cmail[i] == ListmaS[0] : break
+ colcnx=MAILLAGE.CONNEX.get()
+ cnom = MAILLAGE.NOMNOE.get()
+ NO_TMP = []
+ for k in range(len(colcnx[i+1])) : NO_TMP.append(cnom[colcnx[i+1][k]-1])
+ __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre',
+ NOEUD = NO_TMP,
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+ OPERATION='EXTRACTION',),);
+ tcoorl=__NCOLEV.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__NCOLEV),INFO=1)
+ nbt = len(tcoorl['NOEUD'].values()['NOEUD'])
+ xl=moy(tcoorl['COOR_X'].values()['COOR_X'][:nbt])
+ yl=moy(tcoorl['COOR_Y'].values()['COOR_Y'][:nbt])
+ zl=moy(tcoorl['COOR_Z'].values()['COOR_Z'][:nbt])
+ Plev = NP.array([xl, yl, zl])
+# Calcul des normales a chaque noeud du fond
+ v1 = NP.array(VECT_K1)
+ VN = [None]*Nbfond
+ absfon = [0,]
+ if MODELISATION=='3D' :
+ DTANOR = FOND_FISS.DTAN_ORIGINE.get()
+ Pfon2 = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
+ VLori = Pfon2 - Plev
+ if DTANOR != None :
+ VN[0] = NP.array(DTANOR)
+ else :
+ Pfon3 = NP.array([d_coorf[LNOFO[1]][0],d_coorf[LNOFO[1]][1],d_coorf[LNOFO[1]][2]])
+ VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+ VN[0] = NP.array(cross_product(VT,v1))
+ for i in range(1,Nbfond-1):
+ Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
+ Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
+ Pfon3 = NP.array([d_coorf[LNOFO[i+1]][0],d_coorf[LNOFO[i+1]][1],d_coorf[LNOFO[i+1]][2]])
+ absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+ absfon.append(absf)
+ VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+ VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+ VN[i] = NP.array(cross_product(VT,v1))
+ VN[i] = VN[i]/NP.sqrt(NP.dot(NP.transpose(VN[i]),VN[i]))
+ i = Nbfond-1
+ Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
+ Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
+ VLextr = Pfon2 - Plev
+ absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+ absfon.append(absf)
+ DTANEX = FOND_FISS.DTAN_EXTREMITE.get()
+ if DTANEX != None :
+ VN[i] = NP.array(DTANEX)
+ else :
+ VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+ VN[i] = NP.array(cross_product(VT,v1))
+ dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])
+ dicVN = dict([(LNOFO[i],VN[i]) for i in range(Nbfond)])
+#Sens de la tangente
+ v = cross_product(VLori,VLextr)
+ sens = NP.sign(NP.dot(NP.transpose(v),v1))
+#Cas 2D
+ if MODELISATION!='3D' :
+ DTANOR = False
+ DTANEX = False
+ VT = NP.array([0.,0.,1.])
+ VN = NP.array(cross_product(v1,VT))
+ dicVN = dict([(LNOFO[0],VN)])
+ Pfon = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
+ VLori = Pfon - Plev
+ sens = NP.sign(NP.dot(NP.transpose(VN),VLori))
+#Extraction dep sup/inf sur les normales
+ TlibS = [None]*Nbf1
+ TlibI = [None]*Nbf1
+ if NB_NOEUD_COUPE < 3 :
+ UTMESS('A','RUPTURE0_17')
+ NB_NOEUD_COUPE = 5
+ iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+ n_modele=n_modele.rstrip()
+ if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
+ MODEL = self.get_concept(n_modele)
+ dmax = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+ for i in range(Nbf1):
+ Porig = NP.array(d_coorf[Lnf1[i]] )
+ if Lnf1[i]==LNOFO[0] and DTANOR : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
+ elif Lnf1[i]==LNOFO[Nbfond-1] and DTANEX : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
+ else : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]*sens
+ TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS),
+ LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+ TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+ DISTANCE_MAX=dmax),);
+ if SYME_CHAR=='SANS':
+ TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI),
+ LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+ TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+ DISTANCE_MAX=dmax),);
+
+
+##### Cas maillage regle###########
+ else:
+# ---------- Dictionnaires des levres -------------
+ NnormS = FOND_FISS.SUPNORM____NOEU.get()
+ if NnormS==None :
+ UTMESS('F','RUPTURE0_19')
+ NnormS = map(string.rstrip,NnormS)
+ if LNOFO[0]==LNOFO[-1] and MODELISATION=='3D' : Nbfond=Nbfond-1 # Cas fond de fissure ferme
+ NnormS = [[LNOFO[i],NnormS[i*20:(i+1)*20]] for i in range(0,Nbfond)]
+ NnormS = [(i[0],i[1][0:]) for i in NnormS]
+ dicoS = dict(NnormS)
+ if SYME_CHAR=='SANS':
+ NnormI = FOND_FISS.INFNORM____NOEU.get()
+ if NnormI==None :
+ UTMESS('F','RUPTURE0_20')
+ NnormI = map(string.rstrip,NnormI)
+ NnormI = [[LNOFO[i],NnormI[i*20:(i+1)*20]] for i in range(0,Nbfond)]
+ NnormI = [(i[0],i[1][0:]) for i in NnormI]
+ dicoI = dict(NnormI)
+
+# ---------- Dictionnaire des coordonnees -------------
+ if RESULTAT :
+ Ltot = LNOFO
+ for i in range(Nbf1) :
+ for k in range(0,20) :
+ if dicoS[Lnf1[i]][k] !='': Ltot.append(dicoS[Lnf1[i]][k])
+ if SYME_CHAR=='SANS':
+ for i in range(Nbf1) :
+ for k in range(0,20) :
+ if dicoI[Lnf1[i]][k] !='': Ltot.append(dicoI[Lnf1[i]][k])
+ Ltot=dict([(i,0) for i in Ltot]).keys()
+ __NCOOR=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds des levres',
+ NOEUD=Ltot,
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+ OPERATION='EXTRACTION',),);
+ tcoor=__NCOOR.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)
+ else :
+ if SYME_CHAR=='SANS':
+ __NCOOR=CALC_TABLE(TABLE=TABL_DEPL_SUP,
+ ACTION=_F(OPERATION = 'COMB',NOM_PARA='NOEUD',TABLE=TABL_DEPL_INF,))
+ tcoor=__NCOOR.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)
+ else :
+ tcoor=TABL_DEPL_SUP.EXTR_TABLE()
+ nbt = len(tcoor['NOEUD'].values()['NOEUD'])
+ xs=NP.array(tcoor['COOR_X'].values()['COOR_X'][:nbt])
+ ys=NP.array(tcoor['COOR_Y'].values()['COOR_Y'][:nbt])
+ if ndim==2 : zs=NP.zeros(nbt)
+ elif ndim==3 : zs=NP.array(tcoor['COOR_Z'].values()['COOR_Z'][:nbt])
+ ns = tcoor['NOEUD'].values()['NOEUD'][:nbt]
+ ns = map(string.rstrip,ns)
+ l_coor = [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
+ l_coor = [(i[0],i[1:]) for i in l_coor]
+ d_coor = dict(l_coor)
+
+# ---------- Abscisse curviligne du fond -------------
+ absfon = [0,]
+ for i in range(Nbfond-1) :
+ Pfon1 = NP.array([d_coor[LNOFO[i]][0],d_coor[LNOFO[i]][1],d_coor[LNOFO[i]][2]])
+ Pfon2 = NP.array([d_coor[LNOFO[i+1]][0],d_coor[LNOFO[i+1]][1],d_coor[LNOFO[i+1]][2]])
+ absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i]
+ absfon.append(absf)
+ dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])
+
+
+# ---Noeuds LEVRE_SUP et LEVRE_INF: ABSC_CURV_MAXI et PREC_VIS_A_VIS-----
+
+ NBTRLS = 0
+ NBTRLI = 0
+ Lnosup = [None]*Nbf1
+ Lnoinf = [None]*Nbf1
+ Nbnofo = 0
+ Lnofon = []
+ precv = PREC_VIS_A_VIS
+ if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
+ else : rmax = 100
+ precn = precv * rmax
+ rmprec= rmax*(1.+precv/10.)
+ for i in range(0,Nbf1) :
+ Pfon = NP.array([d_coor[Lnf1[i]][0],d_coor[Lnf1[i]][1],d_coor[Lnf1[i]][2]])
+ Tmpsup = []
+ Tmpinf = []
+ itots = 0
+ itoti = 0
+ NBTRLS = 0
+ NBTRLI = 0
+ for k in range(0,20) :
+ if dicoS[Lnf1[i]][k] !='':
+ itots = itots +1
+ Nsup = dicoS[Lnf1[i]][k]
+ Psup = NP.array([d_coor[Nsup][0],d_coor[Nsup][1],d_coor[Nsup][2]])
+ abss = NP.sqrt(NP.dot(NP.transpose(Pfon-Psup),Pfon-Psup))
+ if abss<rmprec :
+ NBTRLS = NBTRLS +1
+ Tmpsup.append(dicoS[Lnf1[i]][k])
+ if SYME_CHAR=='SANS':
+ if dicoI[Lnf1[i]][k] !='':
+ itoti = itoti +1
+ Ninf = dicoI[Lnf1[i]][k]
+ Pinf = NP.array([d_coor[Ninf][0],d_coor[Ninf][1],d_coor[Ninf][2]])
+ absi = NP.sqrt(NP.dot(NP.transpose(Pfon-Pinf),Pfon-Pinf))
+# On verifie que les noeuds sont en vis a vis
+ if abss<rmprec :
+ dist = NP.sqrt(NP.dot(NP.transpose(Psup-Pinf),Psup-Pinf))
+ if dist>precn :
+ UTMESS('A','RUPTURE0_21',valk=Lnf1[i])
+ else :
+ NBTRLI = NBTRLI +1
+ Tmpinf.append(dicoI[Lnf1[i]][k])
+# On verifie qu il y a assez de noeuds
+ if NBTRLS < 3 :
+ UTMESS('A+','RUPTURE0_22',valk=Lnf1[i])
+ if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+ if itots<3 : UTMESS('A','RUPTURE0_24')
+ else : UTMESS('A','RUPTURE0_25')
+ elif (SYME_CHAR=='SANS') and (NBTRLI < 3) :
+ UTMESS('A+','RUPTURE0_26',valk=Lnf1[i])
+ if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+ if itoti<3 : UTMESS('A','RUPTURE0_24')
+ else :UTMESS('A','RUPTURE0_25')
+# UTMESS('A','RUPTURE0_23')
+ else :
+ Lnosup[Nbnofo] = Tmpsup
+ if SYME_CHAR=='SANS' : Lnoinf[Nbnofo] = Tmpinf
+ Lnofon.append(Lnf1[i])
+ Nbnofo = Nbnofo+1
+ if Nbnofo == 0 :
+ UTMESS('F','RUPTURE0_30')
+
+#------------- Cas X-FEM ---------------------------------
+ elif FISSURE :
+ MAILLAGE = args['MAILLAGE']
+ DTAN_ORIG = args['DTAN_ORIG']
+ DTAN_EXTR = args['DTAN_EXTR']
+ dmax = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+#Projection du resultat sur le maillage lineaire initial
+ iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+ n_modele=n_modele.rstrip()
+ if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
+ MODEL = self.get_concept(n_modele)
+ xcont = MODEL.xfem.XFEM_CONT.get()
+ if xcont[0] == 0 :
+ __RESX = RESULTAT
+# Si XFEM + contact : il faut reprojeter sur le maillage lineaire
+ if xcont[0] != 0 :
+ __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE,
+ AFFE=(_F(TOUT='OUI',
+ PHENOMENE='MECANIQUE',
+ MODELISATION=MODELISATION,),),);
+ __RESX=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL',
+ RESULTAT=RESULTAT,
+ MODELE_1=MODEL,
+ MODELE_2=__MODLINE, );
+#Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv)
+ Listfo = FISSURE.FONDFISS.get()
+ Basefo = FISSURE.BASEFOND.get()
+ NB_POINT_FOND = args['NB_POINT_FOND']
+#Traitement du cas fond multiple
+ Fissmult = FISSURE.FONDMULT.get()
+ Nbfiss = len(Fissmult)/2
+ Numfiss = args['NUME_FOND']
+ if Numfiss <= Nbfiss and Nbfiss > 1 :
+ Ptinit = Fissmult[2*(Numfiss-1)]
+ Ptfin = Fissmult[2*(Numfiss-1)+1]
+ Listfo2 = Listfo[((Ptinit-1)*4):(Ptfin*4)]
+ Listfo = Listfo2
+ Basefo2 = Basefo[((Ptinit-1)*(2*ndim)):(Ptfin*(2*ndim))]
+ Basefo = Basefo2
+ elif Numfiss > Nbfiss :
+ UTMESS('F','RUPTURE1_38',vali=[Nbfiss,Numfiss])
+####
+
+ if NB_POINT_FOND != None and MODELISATION=='3D' :
+ Nbfond = NB_POINT_FOND
+ absmax = Listfo[-1]
+ Coorfo = [None]*4*Nbfond
+ Vpropa = [None]*3*Nbfond
+ for i in range(0,Nbfond) :
+ absci = i*absmax/(Nbfond-1)
+ Coorfo[(4*i):(4*(i+1))] = InterpolFondFiss(absci, Listfo)
+ Vpropa[(6*i):(6*(i+1))] = InterpolBaseFiss(absci,Basefo, Listfo)
+ else :
+ Coorfo = Listfo
+ Vpropa = Basefo
+ Nbfond = len(Coorfo)/4
+# Calcul de la direction de propagation en chaque point du fond
+ VP = [None]*Nbfond
+ VN = [None]*Nbfond
+ absfon = [0,]
+# Cas fissure non necessairement plane
+ if VECT_K1 == None :
+ i = 0
+ if MODELISATION=='3D' :
+ if DTAN_ORIG != None :
+ VP[0] = NP.array(DTAN_ORIG)
+ VP[0] = VP[0]/NP.sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2)
+ VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+ verif = NP.dot(NP.transpose(VP[0]),VN[0])
+ if abs(verif) > 0.01:
+ UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]])
+ else :
+ VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+ VP[0] = NP.array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]])
+ for i in range(1,Nbfond-1):
+ absf = Coorfo[4*i+3]
+ absfon.append(absf)
+ VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+ VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+ verif = NP.dot(NP.transpose(VN[i]),VN[i-1])
+ if abs(verif) < 0.98:
+ UTMESS('A','RUPTURE1_35',vali=[i-1,i])
+ i = Nbfond-1
+ absf = Coorfo[4*i+3]
+ absfon.append(absf)
+ if DTAN_EXTR != None :
+ VP[i] = NP.array(DTAN_EXTR)
+ VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+ verif = NP.dot(NP.transpose(VP[i]),VN[0])
+ if abs(verif) > 0.01:
+ UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]])
+ else :
+ VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+ VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+ else :
+ for i in range(0,Nbfond):
+ VP[i] = NP.array([Vpropa[2+4*i],Vpropa[3+4*i],0.])
+ VN[i] = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+# Cas fissure plane (VECT_K1 donne)
+ if VECT_K1 != None :
+ v1 = NP.array(VECT_K1)
+ v1 = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+ v1 = NP.array(VECT_K1)
+ i = 0
+ if MODELISATION=='3D' :
+# Sens du vecteur VECT_K1
+ v1x =NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+ verif = NP.dot(NP.transpose(v1),v1x)
+ if verif < 0 : v1 = -v1
+ VN = [v1]*Nbfond
+ if DTAN_ORIG != None :
+ VP[i] = NP.array(DTAN_ORIG)
+ VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+ verif = NP.dot(NP.transpose(VP[i]),VN[0])
+ if abs(verif) > 0.01:
+ UTMESS('A','RUPTURE1_36')
+ else :
+ Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+ Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+ VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+ VP[0] = NP.array(cross_product(VT,v1))
+ VNi = NP.array([Vpropa[3],Vpropa[4],Vpropa[5]])
+ verif = NP.dot(NP.transpose(VP[i]),VNi)
+ if abs(verif) < 0.99:
+ vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+ UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+ for i in range(1,Nbfond-1):
+ Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+ Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+ Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+ absf = Coorfo[4*i+3]
+ absfon.append(absf)
+ VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+ VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+ VP[i] = NP.array(cross_product(VT,v1))
+ VP[i] = VP[i]/NP.sqrt(NP.dot(NP.transpose(VP[i]),VP[i]))
+ VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+ verif = NP.dot(NP.transpose(VN[i]),VNi)
+ if abs(verif) < 0.99:
+ vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+ UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+ i = Nbfond-1
+ Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+ Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+ absf = Coorfo[4*i+3]
+ absfon.append(absf)
+ if DTAN_EXTR != None :
+ VP[i] = NP.array(DTAN_EXTR)
+ VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+ verif = NP.dot(NP.transpose(VP[i]),VN[i])
+ if abs(verif) > 0.01:
+ UTMESS('A','RUPTURE1_37')
+ else :
+ VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+ VP[i] = NP.array(cross_product(VT,v1))
+ VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+ verif = NP.dot(NP.transpose(VN[i]),VNi)
+ if abs(verif) < 0.99 :
+ vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+ UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+ else :
+ VT = NP.array([0.,0.,1.])
+ for i in range(0,Nbfond):
+ VP[i] = NP.array(cross_product(v1,VT))
+ VN[i] = v1
+ VNi = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+ verif = NP.dot(NP.transpose(VN[i]),VNi)
+ if abs(verif) < 0.99 :
+ vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+ UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+#Sens de la tangente
+ if MODELISATION=='3D' : i = Nbfond/2
+ else : i = 0
+ Po = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+ Porig = Po + ABSC_CURV_MAXI*VP[i]
+ Pextr = Po - ABSC_CURV_MAXI*VP[i]
+ __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
+ LIGN_COUPE=_F(NB_POINTS=3,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+ TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+ DISTANCE_MAX=dmax),);
+ tmp=__Tabg.EXTR_TABLE()
+# a sam
+ test = getattr(tmp,'H1X').values()
+# test = getattr(tmp,'E1X').values()
+ if test==[None]*3 :
+ UTMESS('F','RUPTURE0_33')
+ if test[0]!=None :
+ sens = 1
+ else :
+ sens = -1
+ DETRUIRE(CONCEPT=_F(NOM=__Tabg),INFO=1)
+# Extraction des sauts sur la fissure
+ NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
+ if NB_NOEUD_COUPE < 3 :
+ UTMESS('A','RUPTURE0_34')
+ NB_NOEUD_COUPE = 5
+ mcfact=[]
+ for i in range(Nbfond):
+ Porig = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+ if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+ elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+ else : Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens
+ mcfact.append(_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+ TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+ DISTANCE_MAX=dmax),)
+ TSo = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
+ LIGN_COUPE=mcfact);
+
+ TTSo = TSo.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=TSo),INFO=1)
+ Nbnofo = Nbfond
+ if xcont[0] != 0 :
+ DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1)
+ DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1)
+
+ if INFO==2 :
+ mcfact=[]
+ mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nbfond)))
+ mcfact.append(_F(PARA='VN_X' ,LISTE_R=[VN[i][0] for i in range(Nbfond)]))
+ mcfact.append(_F(PARA='VN_Y' ,LISTE_R=[VN[i][1] for i in range(Nbfond)]))
+ mcfact.append(_F(PARA='VN_Z' ,LISTE_R=[VN[i][2] for i in range(Nbfond)]))
+ mcfact.append(_F(PARA='VP_X' ,LISTE_R=[VP[i][0] for i in range(Nbfond)]))
+ mcfact.append(_F(PARA='VP_Y' ,LISTE_R=[VP[i][1] for i in range(Nbfond)]))
+ mcfact.append(_F(PARA='VP_Z' ,LISTE_R=[VP[i][2] for i in range(Nbfond)]))
+ __resu2=CREA_TABLE(LISTE=mcfact,TITRE=' VECTEUR NORMAL A LA FISSURE - DIRECTION DE PROPAGATION')
+ aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+ DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+
+ else :
+ Nbnofo = 1
+
+# ----------Recuperation de la temperature au fond -------------
+ if Tempe3D :
+ Rth = self.get_concept(resuth)
+ __TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='Temperature fond de fissure',
+ NOEUD=Lnofon,TOUT_CMP='OUI',
+ RESULTAT=Rth,NOM_CHAM='TEMP',TOUT_ORDRE='OUI',
+ OPERATION='EXTRACTION',),);
+ tabtemp=__TEMP.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__TEMP),INFO=1)
+
+
+# ------------------------------------------------------------------
+# BOUCLE SUR NOEUDS DU FOND
+# ------------------------------------------------------------------
+ for ino in range(0,Nbnofo) :
+ if FOND_FISS and INFO==2 :
+ texte="\n\n--> TRAITEMENT DU NOEUD DU FOND DE FISSURE: %s"%Lnofon[ino]
+ aster.affiche('MESSAGE',texte)
+ if FISSURE and INFO==2 :
+ texte="\n\n--> TRAITEMENT DU POINT DU FOND DE FISSURE NUMERO %s"%(ino+1)
+ aster.affiche('MESSAGE',texte)
+# ------------------------------------------------------------------
+# TABLE 'DEPSUP'
+# ------------------------------------------------------------------
+ if FOND_FISS :
+ if TYPE_MAILLAGE =='LIBRE':
+ tabsup=TlibS[ino].EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=TlibS[ino]),INFO=1)
+ elif RESULTAT :
+ if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+ __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+ NOEUD=Lnosup[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY',),
+ OPERATION='EXTRACTION',),);
+ else :
+ __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+ NOEUD=Lnosup[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ',),
+ OPERATION='EXTRACTION',),);
+ tabsup=__TSUP.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__TSUP),INFO=1)
+ else :
+ tabsup=TABL_DEPL_SUP.EXTR_TABLE()
+ veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
+ Ls = [string.ljust(Lnosup[ino][i],8) for i in range(len(Lnosup[ino]))]
+ tabsup=tabsup.NOEUD==Ls
+ elif FISSURE :
+ tabsup = TTSo.INTITULE=='l.coupe%i'%(ino+1)
+ else :
+ tabsup=TABL_DEPL_SUP.EXTR_TABLE()
+ veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
+
+# ------------------------------------------------------------------
+# TABLE 'DEPINF'
+# ------------------------------------------------------------------
+ if SYME_CHAR=='SANS' and not FISSURE :
+ if FOND_FISS :
+ if TYPE_MAILLAGE =='LIBRE':
+ tabinf=TlibI[ino].EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=TlibI[ino]),INFO=1)
+ elif RESULTAT :
+ if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+ __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+ NOEUD=Lnoinf[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY'),
+ OPERATION='EXTRACTION',),);
+ else :
+ __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+ NOEUD=Lnoinf[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ',),
+ OPERATION='EXTRACTION',),);
+ tabinf=__TINF.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)
+ else :
+ tabinf=TABL_DEPL_INF.EXTR_TABLE()
+ if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
+ veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
+ Li = [string.ljust(Lnoinf[ino][i],8) for i in range(len(Lnoinf[ino]))]
+ tabinf=tabinf.NOEUD==Li
+ else :
+ if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
+ tabinf=TABL_DEPL_INF.EXTR_TABLE()
+ veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
+
+
+# ------------------------------------------------------------------
+# LES INSTANTS DE POST-TRAITEMENT
+# ------------------------------------------------------------------
+ if 'INST' in tabsup.para :
+ l_inst=None
+ l_inst_tab=tabsup['INST'].values()['INST']
+ l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys() #elimine les doublons
+ l_inst_tab.sort()
+ if LIST_ORDRE !=None or NUME_ORDRE !=None :
+ l_ord_tab = tabsup['NUME_ORDRE'].values()['NUME_ORDRE']
+ l_ord_tab.sort()
+ l_ord_tab=dict([(i,0) for i in l_ord_tab]).keys()
+ d_ord_tab= [[l_ord_tab[i],l_inst_tab[i]] for i in range(0,len(l_ord_tab))]
+ d_ord_tab= [(i[0],i[1]) for i in d_ord_tab]
+ d_ord_tab = dict(d_ord_tab)
+ if NUME_ORDRE !=None :
+ if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
+ l_ord=list(NUME_ORDRE)
+ elif LIST_ORDRE !=None :
+ l_ord = LIST_ORDRE.VALE.get()
+ l_inst = []
+ for ord in l_ord :
+ if ord in l_ord_tab : l_inst.append(d_ord_tab[ord])
+ else :
+ UTMESS('F','RUPTURE0_37',vali=ord)
+ PRECISION = 1.E-6
+ CRITERE='ABSOLU'
+ elif INST !=None or LIST_INST !=None :
+ CRITERE = args['CRITERE']
+ PRECISION = args['PRECISION']
+ if INST !=None :
+ if type(INST) not in EnumTypes : INST=(INST,)
+ l_inst=list(INST)
+ elif LIST_INST !=None : l_inst=LIST_INST.Valeurs()
+ for inst in l_inst :
+ if CRITERE=='RELATIF' and inst!=0.: match=[x for x in l_inst_tab if abs((inst-x)/inst)<PRECISION]
+ else : match=[x for x in l_inst_tab if abs(inst-x)<PRECISION]
+ if len(match)==0 :
+ UTMESS('F','RUPTURE0_38',valr=inst)
+ if len(match)>=2 :
+ UTMESS('F','RUPTURE0_39',valr=inst)
+ else :
+ l_inst=l_inst_tab
+ PRECISION = 1.E-6
+ CRITERE='ABSOLU'
+ else :
+ l_inst = [None,]
+
+# ------------------------------------------------------------------
+# BOUCLE SUR LES INSTANTS
+# ------------------------------------------------------------------
+ for iord in range(len(l_inst)) :
+ inst=l_inst[iord]
+ if INFO==2 and inst!=None:
+ texte="#=================================================================================\n"
+ texte=texte+"==> INSTANT: %f"%inst
+ aster.affiche('MESSAGE',texte)
+ if inst!=None:
+ if PRECISION == None : PRECISION = 1.E-6
+ if CRITERE == None : CRITERE='ABSOLU'
+ if inst==0. :
+ tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+ if SYME_CHAR=='SANS'and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+ else :
+ tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
+ if SYME_CHAR=='SANS' and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
+ else :
+ tabsupi=tabsup
+ if SYME_CHAR=='SANS' and not FISSURE : tabinfi=tabinf
+
+# --- LEVRE SUP : "ABSC_CURV" CROISSANTES, < RMAX ET DEP ---
+ abscs = getattr(tabsupi,'ABSC_CURV').values()
+ if not FISSURE :
+ if not FOND_FISS :
+ refs=copy.copy(abscs)
+ refs.sort()
+ if refs!=abscs :
+ mctabl='TABL_DEPL_INF'
+ UTMESS('F','RUPTURE0_40',valk=mctabl)
+ if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
+ else : rmax = abscs[-1]
+ precv = PREC_VIS_A_VIS
+ rmprec= rmax*(1.+precv/10.)
+ refsc=[x for x in refs if x<rmprec]
+ nbval = len(refsc)
+ else :
+ nbval=len(abscs)
+ abscs=NP.array(abscs[:nbval])
+ coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+ coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+ if ndim==2 : cozs=NP.zeros(nbval)
+ elif ndim==3 : cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+ if FOND_FISS and not RESULTAT : #tri des noeuds avec abscisse
+ Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+ abscs = NP.sqrt((coxs-Pfon[0])**2+(coys-Pfon[1])**2+(cozs-Pfon[2])**2)
+ tabsupi['Abs_fo'] = abscs
+ tabsupi.sort('Abs_fo')
+ abscs = getattr(tabsupi,'Abs_fo').values()
+ abscs=NP.array(abscs[:nbval])
+ coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+ coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+ if ndim==2 : cozs=NP.zeros(nbval)
+ elif ndim==3 : cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+ if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
+ for ks in range(0,nbval) :
+ texte="NOEUD RETENU POUR LA LEVRE SUP: %s %f"%(Lnosup[ino][ks],abscs[ks])
+ aster.affiche('MESSAGE',texte)
+ dxs=NP.array(tabsupi['DX'].values()['DX'][:nbval])
+ dys=NP.array(tabsupi['DY'].values()['DY'][:nbval])
+ if ndim==2 : dzs=NP.zeros(nbval)
+ elif ndim==3 : dzs=NP.array(tabsupi['DZ'].values()['DZ'][:nbval])
+
+# --- LEVRE INF : "ABSC_CURV" CROISSANTES et < RMAX ---
+ if SYME_CHAR=='SANS' and not FISSURE :
+ absci = getattr(tabinfi,'ABSC_CURV').values()
+ if not FOND_FISS :
+ refi=copy.copy(absci)
+ refi.sort()
+ if refi!=absci :
+ mctabl='TABL_DEPL_SUP'
+ UTMESS('F','RUPTURE0_40',valk=mctabl)
+ refic=[x for x in refi if x<rmprec]
+ nbvali=len(refic)
+ else :
+ nbvali=len(absci)
+ if nbvali!=nbval :
+ if FOND_FISS :
+ UTMESS('A+','RUPTURE0_42')
+ UTMESS('A','RUPTURE0_43',valk=Lnofon[i],vali=[len(refsc),len(refic)])
+ else:
+ UTMESS('A','RUPTURE0_42')
+ nbval=min(nbval,nbvali)
+ absci=NP.array(absci[:nbval])
+ coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+ coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+ if ndim==2 : cozi=NP.zeros(nbval)
+ elif ndim==3 : cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+# --- ON VERIFIE QUE LES NOEUDS SONT EN VIS_A_VIS (SYME=SANS) ---
+ if not FOND_FISS :
+ precn = precv * rmax
+ dist=(coxs-coxi)**2+(coys-coyi)**2+(cozs-cozi)**2
+ dist=NP.sqrt(dist)
+ for d in dist :
+ if d>precn : UTMESS('F','RUPTURE0_44')
+
+ if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse
+ Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+ absci = NP.sqrt((coxi-Pfon[0])**2+(coyi-Pfon[1])**2+(cozi-Pfon[2])**2)
+ tabinfi['Abs_fo'] = absci
+ tabinfi.sort('Abs_fo')
+ absci = getattr(tabinfi,'Abs_fo').values()
+ absci=NP.array(abscs[:nbval])
+ coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+ coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+ if ndim==2 : cozi=NP.zeros(nbval)
+ elif ndim==3 : cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+ dxi=NP.array(tabinfi['DX'].values()['DX'][:nbval])
+ dyi=NP.array(tabinfi['DY'].values()['DY'][:nbval])
+ if ndim==2 : dzi=NP.zeros(nbval)
+ elif ndim==3 : dzi=NP.array(tabinfi['DZ'].values()['DZ'][:nbval])
+
+ if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
+ for ki in range(0,nbval) :
+ texte="NOEUD RETENU POUR LA LEVRE INF: %s %f"%(Lnoinf[ino][ki],absci[ki])
+ aster.affiche('MESSAGE',texte)
+
+# --- CAS FISSURE X-FEM ---
+ if FISSURE :
+ H1 = getattr(tabsupi,'H1X').values()
+ nbval = len(H1)
+ H1 = complete(H1)
+ E1 = getattr(tabsupi,'E1X').values()
+ E1 = complete(E1)
+ dxs = 2*(H1 + NP.sqrt(abscs)*E1)
+ H1 = getattr(tabsupi,'H1Y').values()
+ E1 = getattr(tabsupi,'E1Y').values()
+ H1 = complete(H1)
+ E1 = complete(E1)
+ dys = 2*(H1 + NP.sqrt(abscs)*E1)
+ H1 = getattr(tabsupi,'H1Z').values()
+ E1 = getattr(tabsupi,'E1Z').values()
+ H1 = complete(H1)
+ E1 = complete(E1)
+ dzs = 2*(H1 + NP.sqrt(abscs)*E1)
+ abscs=NP.array(abscs[:nbval])
+
+# ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE -----------
+ if Tempe3D :
+ tempeno=tabtemp.NOEUD==Lnofon[ino]
+ tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+ nompar = ('TEMP',)
+ valpar = (tempeno.TEMP.values()[0],)
+ nomres=['E','NU']
+ valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+ e = valres[0]
+ nu = valres[1]
+ coefd = e * NP.sqrt(2.*pi) / ( 8.0 * (1. - nu**2))
+ coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * (1. + nu))
+ coefg = (1. - nu**2) / e
+ coefg3 = (1. + nu) / e
+
+# --- TESTS NOMBRE DE NOEUDS---
+ if nbval<3 :
+ UTMESS('A+','RUPTURE0_46')
+ if FOND_FISS :
+ UTMESS('A+','RUPTURE0_47',valk=Lnofon[ino])
+ if FISSURE :
+ UTMESS('A+','RUPTURE0_99',vali=ino)
+ UTMESS('A','RUPTURE0_25')
+ kg1 = [0.]*8
+ kg2 =[0.]*8
+ kg3 =[0.]*8
+
+ else :
+# SI NBVAL >= 3 :
+
+# ------------------------------------------------------------------
+# CHANGEMENT DE REPERE
+# ------------------------------------------------------------------
+#
+# 1 : VECTEUR NORMAL AU PLAN DE LA FISSURE
+# ORIENTE LEVRE INFERIEURE VERS LEVRE SUPERIEURE
+# 2 : VECTEUR NORMAL AU FOND DE FISSURE EN M
+# 3 : VECTEUR TANGENT AU FOND DE FISSURE EN M
+#
+ if FISSURE :
+ v2 = VP[ino]
+ v1 = VN[ino]
+ elif SYME_CHAR=='SANS' :
+ vo = NP.array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.])
+ ve = NP.array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.])
+ v2 = ve-vo
+ else :
+ vo = NP.array([ coxs[-1], coys[-1], cozs[-1]])
+ ve = NP.array([ coxs[0], coys[0], cozs[0]])
+ v2 = ve-vo
+ if not FISSURE : v1 = NP.array(VECT_K1)
+ v2 = v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
+ v1p = sum(v2*v1)
+ if SYME_CHAR=='SANS' : v1 = v1-v1p*v2
+ else : v2 = v2-v1p*v1
+ v1 = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+ v2 = v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
+ v3 = NP.array([v1[1]*v2[2]-v2[1]*v1[2],v1[2]*v2[0]-v2[2]*v1[0],v1[0]*v2[1]-v2[0]*v1[1]])
+ pgl = NP.asarray([v1,v2,v3])
+ dpls = NP.asarray([dxs,dys,dzs])
+ dpls = NP.dot(pgl,dpls)
+ if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 :
+ UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR])
+ if FISSURE :
+ saut=dpls
+ elif SYME_CHAR=='SANS' :
+ dpli = NP.asarray([dxi,dyi,dzi])
+ dpli = NP.dot(pgl,dpli)
+ saut=(dpls-dpli)
+ else :
+ dpli = [NP.multiply(dpls[0],-1.),dpls[1],dpls[2]]
+ saut=(dpls-dpli)
+ if INFO==2 :
+ mcfact=[]
+ mcfact.append(_F(PARA='ABSC_CURV' ,LISTE_R=abscs.tolist() ))
+ if not FISSURE :
+ mcfact.append(_F(PARA='DEPL_SUP_1',LISTE_R=dpls[0].tolist() ))
+ mcfact.append(_F(PARA='DEPL_INF_1',LISTE_R=dpli[0].tolist() ))
+ mcfact.append(_F(PARA='SAUT_1' ,LISTE_R=saut[0].tolist() ))
+ if not FISSURE :
+ mcfact.append(_F(PARA='DEPL_SUP_2',LISTE_R=dpls[1].tolist() ))
+ mcfact.append(_F(PARA='DEPL_INF_2',LISTE_R=dpli[1].tolist() ))
+ mcfact.append(_F(PARA='SAUT_2' ,LISTE_R=saut[1].tolist() ))
+ if ndim==3 :
+ if not FISSURE :
+ mcfact.append(_F(PARA='DEPL_SUP_3',LISTE_R=dpls[2].tolist() ))
+ mcfact.append(_F(PARA='DEPL_INF_3',LISTE_R=dpli[2].tolist() ))
+ mcfact.append(_F(PARA='SAUT_3' ,LISTE_R=saut[2].tolist() ))
+ __resu0=CREA_TABLE(LISTE=mcfact,TITRE='--> SAUTS')
+ aster.affiche('MESSAGE',__resu0.EXTR_TABLE().__repr__())
+ DETRUIRE(CONCEPT=_F(NOM=__resu0),INFO=1)
+# ------------------------------------------------------------------
+# CALCUL DES K1, K2, K3
+# ------------------------------------------------------------------
+ isig=NP.sign(NP.transpose(NP.resize(saut[:,-1],(nbval-1,3))))
+ isig=NP.sign(isig+0.001)
+ saut=saut*NP.array([[coefd]*nbval,[coefd]*nbval,[coefd3]*nbval])
+ saut=saut**2
+ ksig = isig[:,1]
+ ksig = NP.array([ksig,ksig])
+ ksig = NP.transpose(ksig)
+ kgsig=NP.resize(ksig,(1,6))[0]
+# ------------------------------------------------------------------
+# --- METHODE 1 ---
+# ------------------------------------------------------------------
+ nabs = len(abscs)
+ x1 = abscs[1:-1]
+ x2 = abscs[2:nabs]
+ y1 = saut[:,1:-1]/x1
+ y2 = saut[:,2:nabs]/x2
+ k = abs(y1-x1*(y2-y1)/(x2-x1))
+ g = coefg*(k[0]+k[1])+coefg3*k[2]
+ kg1 = [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+ kg1 = NP.sqrt(kg1)*kgsig
+ kg1=NP.concatenate([kg1,[max(g),min(g)]])
+ vk = NP.sqrt(k)*isig[:,:-1]
+ if INFO==2 :
+ mcfact=[]
+ mcfact.append(_F(PARA='ABSC_CURV_1' ,LISTE_R=x1.tolist() ))
+ mcfact.append(_F(PARA='ABSC_CURV_2' ,LISTE_R=x2.tolist() ))
+ mcfact.append(_F(PARA='K1' ,LISTE_R=vk[0].tolist() ))
+ mcfact.append(_F(PARA='K2' ,LISTE_R=vk[1].tolist() ))
+ if ndim==3 :
+ mcfact.append(_F(PARA='K3' ,LISTE_R=vk[2].tolist() ))
+ mcfact.append(_F(PARA='G' ,LISTE_R=g.tolist() ))
+ __resu1=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 1')
+ aster.affiche('MESSAGE',__resu1.EXTR_TABLE().__repr__())
+ DETRUIRE(CONCEPT=_F(NOM=__resu1),INFO=1)
+# ------------------------------------------------------------------
+# --- METHODE 2 ---
+# ------------------------------------------------------------------
+ nabs = len(abscs)
+ x1 = abscs[1:nabs]
+ y1 = saut[:,1:nabs]
+ k = abs(y1/x1)
+ g = coefg*(k[0]+k[1])+coefg3*k[2]
+ kg2= [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+ kg2 = NP.sqrt(kg2)*kgsig
+ kg2=NP.concatenate([kg2,[max(g),min(g)]])
+ vk = NP.sqrt(k)*isig
+ if INFO==2 :
+ mcfact=[]
+ mcfact.append(_F(PARA='ABSC_CURV' ,LISTE_R=x1.tolist() ))
+ mcfact.append(_F(PARA='K1' ,LISTE_R=vk[0].tolist() ))
+ mcfact.append(_F(PARA='K2' ,LISTE_R=vk[1].tolist() ))
+ if ndim==3 :
+ mcfact.append(_F(PARA='K3' ,LISTE_R=vk[2].tolist() ))
+ mcfact.append(_F(PARA='G' ,LISTE_R=g.tolist() ))
+ __resu2=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 2')
+ aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+ DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+# ------------------------------------------------------------------
+# --- METHODE 3 ---
+# ------------------------------------------------------------------
+ nabs = len(abscs)
+ x1 = abscs[:-1]
+ x2 = abscs[1:nabs]
+ y1 = saut[:,:-1]
+ y2 = saut[:,1:nabs]
+ k = (NP.sqrt(y2)*NP.sqrt(x2)+NP.sqrt(y1)*NP.sqrt(x1))*(x2-x1)
+ k = NP.sum(NP.transpose(k), axis=0)
+ de = abscs[-1]
+ vk = (k/de**2)*isig[:,0]
+ g = coefg*(vk[0]**2+vk[1]**2)+coefg3*vk[2]**2
+ kg3=NP.concatenate([[vk[0]]*2,[vk[1]]*2,[vk[2]]*2,[g]*2])
+ if INFO==2 :
+ mcfact=[]
+ mcfact.append(_F(PARA='K1' ,LISTE_R=vk[0] ))
+ mcfact.append(_F(PARA='K2' ,LISTE_R=vk[1] ))
+ if ndim==3 :
+ mcfact.append(_F(PARA='K3' ,LISTE_R=vk[2] ))
+ mcfact.append(_F(PARA='G' ,LISTE_R=g ))
+ __resu3=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 3')
+ aster.affiche('MESSAGE',__resu3.EXTR_TABLE().__repr__())
+ DETRUIRE(CONCEPT=_F(NOM=__resu3),INFO=1)
+# ------------------------------------------------------------------
+# CREATION DE LA TABLE
+# ------------------------------------------------------------------
+ kg=NP.array([kg1,kg2,kg3])
+ kg=NP.transpose(kg)
+ mcfact=[]
+ if TITRE != None :
+ titre = TITRE
+ else :
+ v = aster.__version__
+ titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K1_K2_K3 LE &DATE A &HEURE \n'%v
+ if FOND_FISS and MODELISATION=='3D':
+ mcfact.append(_F(PARA='NOEUD_FOND',LISTE_K=[Lnofon[ino],]*3))
+ mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[dicoF[Lnofon[ino]]]*3))
+ if FISSURE and MODELISATION=='3D':
+ mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+ mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3))
+ if FISSURE and MODELISATION!='3D' and Nbfond!=1 :
+ mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+ mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3)))
+ mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() ))
+ mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() ))
+ mcfact.append(_F(PARA='K2_MAX' ,LISTE_R=kg[2].tolist() ))
+ mcfact.append(_F(PARA='K2_MIN' ,LISTE_R=kg[3].tolist() ))
+ if ndim==3 :
+ mcfact.append(_F(PARA='K3_MAX' ,LISTE_R=kg[4].tolist() ))
+ mcfact.append(_F(PARA='K3_MIN' ,LISTE_R=kg[5].tolist() ))
+ mcfact.append(_F(PARA='G_MAX' ,LISTE_R=kg[6].tolist() ))
+ mcfact.append(_F(PARA='G_MIN' ,LISTE_R=kg[7].tolist() ))
+ if (ino==0 and iord==0) and inst==None :
+ tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+ elif iord==0 and ino==0 and inst!=None :
+ mcfact=[_F(PARA='INST' ,LISTE_R=[inst,]*3 )]+mcfact
+ tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+ else :
+ if inst!=None : mcfact=[_F(PARA='INST' ,LISTE_R=[inst,]*3 )]+mcfact
+ __tabi=CREA_TABLE(LISTE=mcfact,)
+ npara = ['K1_MAX','METHODE']
+ if inst!=None : npara.append('INST')
+ if FOND_FISS and MODELISATION=='3D' : npara.append('NOEUD_FOND')
+ tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,TITRE = titre,
+ ACTION=_F(OPERATION = 'COMB',NOM_PARA=npara,TABLE=__tabi,))
+
+# Tri de la table
+ if len(l_inst)!=1 and MODELISATION=='3D':
+ tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
+ ACTION=_F(OPERATION = 'TRI',NOM_PARA=('INST','ABSC_CURV','METHODE'),ORDRE='CROISSANT'))
+
+ return ier
+
--- /dev/null
+#@ MODIF post_k_trans_ops Macro DATE 07/10/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
+ INST, LIST_INST,INFO,**args):
+ """
+ Ecriture de la macro post_k_trans
+ """
+ import aster
+ import string
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from types import ListType, TupleType
+ from Utilitai.Table import Table, merge
+ EnumTypes = (ListType, TupleType)
+
+ macro = 'POST_K_TRANS'
+ ier=0
+#------------------------------------------------------------------
+ # On importe les definitions des commandes a utiliser dans la macro
+ CALC_G =self.get_cmd('CALC_G' )
+ IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
+ CREA_TABLE =self.get_cmd('CREA_TABLE' )
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type table_sdaster ou dérivé) est tab
+ self.DeclareOut('tabout', self.sd)
+
+#------------------------------------------------------------------
+ TABK = K_MODAL['TABL_K_MODA']
+ F2D = K_MODAL['FOND_FISS']
+ F3D = K_MODAL['FISSURE']
+#
+# Calcul du tableau des K modaux
+#
+ if TABK == None :
+ montit = 'Calcul des K modaux'
+ resumod = K_MODAL['RESU_MODA']
+ thet = K_MODAL['THETA']
+
+ motscles={}
+ motscles2={}
+ motscles['THETA'] = []
+ mcthet = {}
+ if F2D != None : mcthet['FOND_FISS'] = F2D
+ if thet != None : mcthet['THETA'] = thet
+ if F3D != None : mcthet['FISSURE'] = F3D
+ if K_MODAL['DIRECTION']!=None : mcthet['DIRECTION'] = K_MODAL['DIRECTION']
+ if K_MODAL['DIRE_THETA']!=None: mcthet['DIRE_THETA'] = K_MODAL['DIRE_THETA']
+ if K_MODAL['R_SUP']!=None : mcthet['R_SUP'] = K_MODAL['R_SUP']
+ if K_MODAL['R_SUP_FO']!=None : mcthet['R_SUP_FO'] = K_MODAL['R_SUP_FO']
+ if K_MODAL['R_INF']!=None : mcthet['R_INF'] = K_MODAL['R_INF']
+ if K_MODAL['R_INF_FO']!=None : mcthet['R_INF_FO'] = K_MODAL['R_INF_FO']
+ if K_MODAL['MODULE']!=None : mcthet['MODULE'] = K_MODAL['MODULE']
+ if K_MODAL['MODULE']==None and F2D : mcthet['MODULE'] = 1
+ if K_MODAL['MODULE_FO']!=None : mcthet['MODULE_FO'] = K_MODAL['MODULE_FO']
+
+ if thet == None and F3D :
+ motscles2['LISSAGE'] = []
+ if K_MODAL['LISSAGE_G'] == None : K_MODAL['LISSAGE_G']='LEGENDRE'
+ if K_MODAL['LISSAGE_THETA'] == None : K_MODAL['LISSAGE_THETA']='LEGENDRE'
+ if K_MODAL['DEGRE'] : K_MODAL['DEGRE'] = 5
+ motscles2['LISSAGE'].append(_F(LISSAGE_G =K_MODAL['LISSAGE_G'],
+ LISSAGE_THETA =K_MODAL['LISSAGE_G'],
+ DEGRE = K_MODAL['DEGRE'] ))
+
+ __kgtheta = CALC_G( RESULTAT = resumod,
+ OPTION = 'K_G_MODA',
+ TOUT_MODE = 'OUI',
+ INFO = INFO,
+ TITRE = montit,
+ THETA=mcthet,
+ **motscles2)
+
+
+#
+# Recuperation du tableau des K modaux
+#
+ else :
+ __kgtheta=TABK
+
+#-----------------------------------------
+#
+# Verification de cohérence sur le nombre de modes
+#
+# RESULTAT TRANSITOIRE
+ nomresu=RESU_TRANS.nom
+ coef=aster.getvectjev(nomresu.ljust(19)+'.DEPL')
+ nmodtr=aster.getvectjev(nomresu.ljust(19)+'.DESC')[1]
+# BASE MODALE
+ if F2D :
+ n_mode = len((__kgtheta.EXTR_TABLE())['K1'])
+ nbno = 1
+ if F3D :
+ n_mode = max((__kgtheta.EXTR_TABLE())['NUME_MODE'].values()['NUME_MODE'])
+ nbno = max((__kgtheta.EXTR_TABLE())['NUM_PT'].values()['NUM_PT'])
+ labsc = (__kgtheta.EXTR_TABLE())['ABSC_CURV'].values()['ABSC_CURV'][0:nbno]
+
+ if nmodtr != n_mode :
+ n_mode = min(nmodtr,n_mode)
+ UTMESS('A','RUPTURE0_50',valk=nomresu,vali=n_mode)
+
+#
+# Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE
+#
+ l0_inst = aster.getvectjev(nomresu.ljust(19)+'.INST')
+ l0_ord = aster.getvectjev(nomresu.ljust(19)+'.ORDR')
+ nbtrans = len(l0_ord)
+ li = [[l0_ord[i],l0_inst[i]] for i in range(nbtrans)]
+ ln = [[l0_ord[i],i] for i in range(nbtrans)]
+ lo = [[l0_inst[i],l0_ord[i]] for i in range(nbtrans)]
+ li = [(i[0],i[1:]) for i in li]
+ ln = [(i[0],i[1:]) for i in ln]
+ lo = [(i[0],i[1:]) for i in lo]
+ d_ord = dict(lo)
+ d_ins = dict(li)
+ d_num = dict(ln)
+
+
+ l_ord =[]
+ l_inst =[]
+ if LIST_ORDRE or NUME_ORDRE :
+ if NUME_ORDRE :
+ if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
+ ltmp = list(NUME_ORDRE)
+ elif LIST_ORDRE :
+ ltmp = aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE')
+ for ord in ltmp :
+ if ord in l0_ord :
+ l_ord.append(ord)
+ l_inst.append(d_ins[ord][0])
+ else :
+ UTMESS('A','RUPTURE0_51',vali=ord,valk=nomresu)
+ elif LIST_INST or INST :
+ CRITERE = args['CRITERE']
+ PRECISION = args['PRECISION']
+ if INST :
+ if type(INST) not in EnumTypes : INST=(INST,)
+ ltmp = list(INST)
+ elif LIST_INST :
+ ltmp = aster.getvectjev(string.ljust(LIST_INST.nom,19)+'.VALE')
+ for ins in ltmp :
+ if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)<PRECISION]
+ else : match=[x for x in l0_inst if abs(ins-x)<PRECISION]
+ if len(match)==0 :
+ UTMESS('A','RUPTURE0_38',valr=ins)
+ elif len(match)>=2 :
+ UTMESS('A','RUPTURE0_39',valr=ins)
+ else :
+ l_inst.append(match[0])
+ l_ord.append(d_ord[match[0]][0])
+ else :
+ l_ord = l0_ord
+ l_inst = l0_inst
+ nbarch = len(l_ord)
+ if nbarch ==0 : UTMESS('F','RUPTURE0_54')
+
+
+#
+# Calcul des K(t)
+#
+
+ K1mod = [None]*n_mode*nbno
+ K2mod = [None]*n_mode*nbno
+ K1t = [None]*nbarch*nbno
+ K2t = [None]*nbarch*nbno
+ if F3D :
+ K3mod = [None]*n_mode*nbno
+ K3t = [None]*nbarch*nbno
+ k1 = 'K1_LOCAL'
+ k2 = 'K2_LOCAL'
+ k3 = 'K3_LOCAL'
+ else :
+ k1 = 'K1'
+ k2 = 'K2'
+
+
+ for x in range(0,nbno) :
+ for k in range(0,n_mode) :
+ K1mod[k*nbno + x] = __kgtheta[k1,k*nbno + x+1]
+ K2mod[k*nbno + x] = __kgtheta[k2,k*nbno + x+1]
+ if F3D : K3mod[k*nbno + x] = __kgtheta[k3,k*nbno + x+1]
+
+ for num in range(0,nbarch) :
+ K1t[num*nbno + x] = 0.0
+ K2t[num*nbno + x] = 0.0
+ if F3D : K3t[num*nbno + x] = 0.0
+ for k in range(0,n_mode) :
+ num_ord = d_num[l_ord[num]][0]
+ alpha = coef[n_mode*num_ord+k]
+ K1t[num*nbno + x] = K1t[num*nbno + x] + alpha*K1mod[k*nbno + x]
+ K2t[num*nbno + x] = K2t[num*nbno + x] + alpha*K2mod[k*nbno + x]
+ if F3D : K3t[num*nbno + x] = K3t[num*nbno + x] + alpha*K3mod[k*nbno + x]
+
+ v = aster.__version__
+ titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K_TRANS LE &DATE A &HEURE \n'%v
+ if F2D :
+ tabout = CREA_TABLE(LISTE = (_F(LISTE_I =l_ord, PARA = 'NUME_ORDRE'),
+ _F(LISTE_R =l_inst, PARA = 'INST'),
+ _F(LISTE_R =K1t, PARA = k1),
+ _F(LISTE_R =K2t, PARA = k2),),
+ TITRE = titre, );
+ if F3D :
+ lo = []
+ li = []
+ for i in range(nbarch) :
+ for j in range(nbno) :
+ lo.append(l_ord[i])
+ li.append(l_inst[i])
+ tabout = CREA_TABLE(LISTE = (_F(LISTE_I =lo, PARA = 'NUME_ORDRE'),
+ _F(LISTE_R =li, PARA = 'INST'),
+ _F(LISTE_I =range(nbno)*nbarch, PARA ='NUM_PT' ),
+ _F(LISTE_R =labsc*nbarch, PARA = 'ABSC_CURV'),
+ _F(LISTE_R =K1t, PARA = k1),
+ _F(LISTE_R =K2t, PARA = k2),
+ _F(LISTE_R =K3t, PARA = k3),),
+ TITRE = titre,
+ );
+
+#------------------------------------------------------------------
+ return ier
--- /dev/null
+#@ MODIF propa_fiss_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 atan, atan2, cos, sin, sqrt
+
+import numpy as NP
+
+
+def InterpolationLineaire(x0, points) :
+ """
+ Interpolation Lineaire de x0 sur la fonction discretisee yi=points(xi) i=1,..,n
+ """
+ # x0 = Une abscisse (1 colonne, 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 classes selon les abscisses croissantes
+
+ n = len(points)
+ if ( x0 < points[0][0] ) :
+ y0 = points[0][1]
+ return y0
+ if ( x0 > points[n-1][0] ) :
+ y0 = points[n-1][1]
+ return y0
+ i = 1
+ while x0 > points[i][0]:
+ i = i+1
+ y0 = (x0-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]
+ return y0
+
+def InterpolFondFiss(s0, Coorfo) :
+ """
+ Interpolation des points du fond de fissure
+ """
+ # s0 = abscisse curviligne du point considere (0 < s0 > 1)
+ # Coorfo = Coordonnees du fond (extrait de la sd fiss_xfem)
+ # xyz = Coordonnees du point
+
+ n = len(Coorfo) / 4
+ if ( s0 < Coorfo[3] ) :
+ xyz = [Coorfo[0],Coorfo[1],Coorfo[2]]
+ return xyz
+ if ( s0 > Coorfo[-1] ) :
+ xyz = [Coorfo[-4],Coorfo[-3],Coorfo[-2]]
+ return xyz
+ i = 1
+ while s0 > Coorfo[4*i+3]:
+ i = i+1
+ xyz = [0.]*3
+ xyz[0] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+0]-Coorfo[4*(i-1)+0]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+0]
+ xyz[1] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+1]-Coorfo[4*(i-1)+1]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+1]
+ xyz[2] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+2]-Coorfo[4*(i-1)+2]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+2]
+ return xyz
+
+def InterpolBaseFiss(s0, Basefo, Coorfo) :
+# Interpolation de la base locale en fond de fissure
+# s0 = abscisse curviligne du point considere
+# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
+# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
+# en sortie : VPVNi = base locale au point considere (6 coordonnes)
+ n = len(Coorfo) / 4
+ if ( s0 < Coorfo[3] ) :
+ VPVNi = Basefo[0:6]
+ return VPVNi
+ if ( s0 > Coorfo[-1] ) :
+ VPVNi = [Basefo[i] for i in range(-6,0)]
+ return VPVNi
+ i = 1
+ while s0 > Coorfo[4*i+3]:
+ i = i+1
+ VPVNi = [0.]*6
+ for k in range(6) :
+ VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
+ return VPVNi
+
+
+def dadN(C,N,M,DK,R) :
+# Calcul de la vitesse de propagation
+ v = C/((1-R)**N)*abs(DK)**M
+ return v
+
+def betaf(k1,k2) :
+ if k2 == 0:
+ beta = 0.
+ else :
+ beta = 2*atan(0.25*(k1/k2-abs(k2)/k2*sqrt((k1/k2)**2+8)))
+ return beta
+
+#TODO prefer use numpy.cross
+def cross_product(a,b):
+ cross = [0]*3
+ cross[0] = a[1]*b[2]-a[2]*b[1]
+ cross[1] = a[2]*b[0]-a[0]*b[2]
+ cross[2] = a[0]*b[1]-a[1]*b[0]
+ return cross
+
+#def propa_fiss_ops(self,METHODE_PROPA,TEST_MAIL,INFO,**args):
+def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
+ """
+ Macro PROPA_FISS
+ Propagation de fissure pour les modeles X-FEM : propagation par la methode de HAMILTON
+ ou par projection sur un maillage
+ """
+ import aster
+ import string
+ import copy
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from types import ListType, TupleType
+ from Utilitai.Table import Table, merge
+ from Utilitai.partition import MAIL_PY
+ from SD.sd_mater import sd_compor1
+ from Cata.cata import table_sdaster,fiss_xfem,modele_sdaster
+
+
+ EnumTypes = (ListType, TupleType)
+
+ macro = 'PROPA_FISS'
+ ier=0
+#------------------------------------------------------------------
+ # On importe les definitions des commandes a utiliser dans la macro
+ ASSE_MAILLAGE =self.get_cmd('ASSE_MAILLAGE' )
+ LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE' )
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER' )
+ CREA_TABLE =self.get_cmd('CREA_TABLE' )
+ CALC_TABLE =self.get_cmd('CALC_TABLE' )
+ PROPA_XFEM = self.get_cmd('PROPA_XFEM' )
+ DEFI_FISS_XFEM = self.get_cmd('DEFI_FISS_XFEM' )
+ MODI_MODELE_XFEM = self.get_cmd('MODI_MODELE_XFEM' )
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+#------------------------------------------------------------------
+# CAS 1 : METHODE_PROPA = 'SIMPLEXE' OU 'UPWIND'
+#
+
+ if (METHODE_PROPA == 'SIMPLEXE') or (METHODE_PROPA == 'UPWIND'):
+
+ TEST_MAIL=args['TEST_MAIL']
+
+ if (TEST_MAIL == 'NON' ) :
+ LOI= args['LOI_PROPA']
+ if LOI == None :
+ UTMESS('F','RUPTURE1_50')
+ dLoi=LOI[0].cree_dict_valeurs(LOI[0].mc_liste)
+ mat = dLoi['MATER']
+ matph = mat.NOMRC.get()
+ phenom=None
+ for cmpt in matph :
+ if cmpt[:4]=='ELAS' :
+ phenom=cmpt
+ break
+ if phenom==None : UTMESS('F','RUPTURE0_5')
+ compor = sd_compor1('%-8s.%s' % (mat.nom, phenom))
+ valk = [s.strip() for s in compor.VALK.get()]
+ valr = compor.VALR.get()
+ dicmat=dict(zip(valk,valr))
+ if dicmat.has_key('TEMP_DEF') :
+ nompar = ('TEMP',)
+ valpar = (dicmat['TEMP_DEF'],)
+ UTMESS('A','XFEM2_85',valr=valpar)
+ nomres=['E','NU']
+ valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+ e = valres[0]
+ nu = valres[1]
+ else :
+ e = dicmat['E']
+ nu = dicmat['NU']
+# Construction catalogue PROPA_XFEM
+ dLoix = {}
+ dLoix['LOI'] = 'PARIS'
+ dLoix['E'] = e
+ dLoix['NU'] = nu
+ dLoix['C'] = dLoi['C']
+ dLoix['M'] = dLoi['M']
+ dLoix['N'] = dLoi['N']
+
+ # Retreive all the parameters of PROPA_FISS
+ mcsimp = {}
+ mcsimp['MODELE'] = args['MODELE']
+ mcsimp['RAYON'] = args['RAYON']
+ mcsimp['DA_MAX'] = args['DA_MAX']
+ mcsimp['TEST_MAIL']=TEST_MAIL
+ mcsimp['ZONE_MAJ']=args['ZONE_MAJ']
+ if mcsimp['ZONE_MAJ'] == 'TORE' :
+ if args['RAYON_TORE']!=None :
+ mcsimp['RAYON_TORE']=args['RAYON_TORE']
+ Fissures = args['FISSURE']
+
+# Build the list for the PROPA_XFEM operateur
+ Table = []
+ GrilleAux = []
+ FissAct = []
+ FissNou = []
+ NbPointFond = []
+
+ for Fiss in Fissures :
+ if Fiss['GRILLE_AUX']!=None :
+ GrilleAux.append(Fiss['GRILLE_AUX'])
+ else :
+ GrilleAux.append(args['MODELE'])
+ FissAct.append(Fiss['FISS_ACTUELLE'])
+ FissNou.append(Fiss['FISS_PROPAGEE'])
+ if TEST_MAIL == 'NON':
+ Table.append(Fiss['TABLE'])
+ if Fiss['NB_POINT_FOND']!=None :
+ if isinstance(Fiss['NB_POINT_FOND'],int) :
+ NbPointFond.append(Fiss['NB_POINT_FOND'])
+ else :
+ for nbptfo in range(0,len(Fiss['NB_POINT_FOND'])) :
+ NbPointFond.append(Fiss['NB_POINT_FOND'][nbptfo])
+ else :
+ NbPointFond.append(-1)
+
+ mcsimp['LISTE_FISS'] = FissAct
+
+ if TEST_MAIL == 'NON':
+ mcsimp['TABLE'] = Table
+ mcsimp['NB_POINT_FOND'] = NbPointFond
+ mcsimp['LOI_PROPA' ] =dLoix
+
+ COMP_LINE = args['COMP_LINE']
+ if COMP_LINE !=None :
+ dcomp=COMP_LINE[0].cree_dict_valeurs(COMP_LINE[0].mc_liste)
+ mcsimp ['COMP_LINE' ] =dcomp
+
+ if TEST_MAIL == 'NON' :
+# Ok. It's time for propagation! Let's call PROPA_XFEM for each
+# propagating crack.
+ for NumFiss in range(0,len(FissAct)) :
+ mcsimp['FISS_PROP'] = FissAct[NumFiss]
+ mcsimp['GRILLE_AUX'] = 123
+ if GrilleAux[NumFiss]!=args['MODELE'] :
+ mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
+ else :
+ del mcsimp['GRILLE_AUX']
+ self.DeclareOut('nomfiss',FissNou[NumFiss])
+ nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+
+ else :
+# Ok. I should make several crack propagation and check for the
+# distance between each propagated front and the corresponding one
+# at the beginning of the propagation.
+ UTMESS('A','XFEM2_60')
+ StepTot = args['ITERATIONS']
+ __Fis = [None]*(StepTot*len(FissAct))
+ __Mod = [None]*StepTot
+ mcsimp['TOLERANCE'] = args['TOLERANCE']
+ for NumStep in range(0,StepTot) :
+
+ aster.affiche('MESSAGE',' ------------------------')
+ texte=' TEST_MAIL - ITERATION %d'%(NumStep+1)
+ aster.affiche('MESSAGE',texte)
+ aster.affiche('MESSAGE',' ------------------------')
+
+ ListeFiss = []
+ mcsimp['DISTANCE'] = args['DA_MAX']*(NumStep+1)
+
+ for NumFiss in range(0,len(FissAct)) :
+ if NumStep==0 :
+ mcsimp['FISS_PROP'] = FissAct[NumFiss]
+ else :
+ mcsimp['MODELE'] = __Mod[NumStep-1]
+ mcsimp['FISS_PROP'] = __Fis[(NumStep-1)*len(FissAct)+NumFiss]
+ mcsimp['FISS_INITIALE'] = FissAct[NumFiss]
+ mcsimp['GRILLE_AUX'] = 123
+ if GrilleAux[NumFiss]!=args['MODELE'] :
+ mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
+ else :
+ del mcsimp['GRILLE_AUX']
+ if NumStep==StepTot-1 :
+ self.DeclareOut('nomfiss',FissNou[NumFiss])
+ nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+ else:
+ __Fis[NumFiss+NumStep*len(FissAct)] = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+ ListeFiss.append(__Fis[NumFiss+NumStep*len(FissAct)])
+
+ if NumStep<StepTot-1 :
+ aster.affiche('MESSAGE',' ------------------------')
+ aster.affiche('MESSAGE',' CREATION DU MODELE FISSURE TEMPORAIRE')
+ aster.affiche('MESSAGE',' ')
+ __Mod[NumStep] = MODI_MODELE_XFEM(MODELE_IN=args['MODELE'],FISSURE=(ListeFiss))
+ mcsimp['LISTE_FISS'] = ListeFiss
+ aster.affiche('MESSAGE',' ')
+ aster.affiche('MESSAGE',' ------------------------')
+ aster.affiche('MESSAGE',' ')
+
+
+#------------------------------------------------------------------
+# CAS 2 : METHODE_PROPA = 'MAILLAGE'
+#
+# il faudrait rendre cela plus automatique pour lever la limite a 52 points
+ ALPHABET=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
+# 'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'];
+
+ if METHODE_PROPA == 'MAILLAGE' :
+ Fissures = args['FISSURE']
+
+ LOI_PROPA = args['LOI_PROPA']
+ if LOI_PROPA != None :
+ coef_paris = LOI_PROPA['M']
+ coef_M = LOI_PROPA['M']
+ coef_C = LOI_PROPA['C']
+ coef_N = LOI_PROPA['N']
+ YOUNG = 2.E11
+ it = args['ITERATION']
+ Damax = args['DA_MAX']
+ COMP_LINE = args['COMP_LINE']
+
+ Nbfissure=len(Fissures)
+ mm = [None]*Nbfissure
+ __MMX = [None]*Nbfissure
+ BETA = [None]*Nbfissure
+ DKeq = [None]*Nbfissure
+ R = [None]*Nbfissure
+ RmM = [None]*Nbfissure
+ VMAX = 0.
+
+ numfis=0
+ print '-------------------------------------------'
+ print 'NOMBRE DE FISSURES A TRAITER : ',Nbfissure
+ for Fiss in Fissures :
+ print 'FISSURE ',numfis+1,' : ',Fiss['FISS_ACTUELLE'].get_name()
+ numfis=numfis+1
+ print '-------------------------------------------'
+
+ numfis=0
+ DKmax = 0
+# PREMIERE BOUCLE SUR LES FISSURES : DK, DKmax
+ for Fiss in Fissures :
+ fiss0 = Fiss['FISS_ACTUELLE']
+ MAIL_FISS1 = Fiss['MAIL_ACTUEL']
+ dime= MAIL_FISS1.DIME.get()
+ dime = dime[5]
+
+# Verification qu on a bien un fond unique
+ Fissmult = fiss0.FONDMULT.get()
+ Nbfiss = len(Fissmult)/2
+ if Nbfiss >1 :
+ UTMESS('F','RUPTURE1_48',vali=Nbfiss)
+
+# Recuperation des K et calcul de DeltaK
+ Nmeth = Fiss['METHODE_POSTK']
+ SIF = Fiss['TABLE']
+ nbinst = 1
+# A- TABLEAU ISSSU DE POST_K1_K2_K3
+ if (Nmeth != None) :
+ __TABN = CALC_TABLE(TABLE=SIF,ACTION=_F(OPERATION='FILTRE',
+ NOM_PARA='METHODE',VALE_I=Nmeth),);
+ __tabp = __TABN.EXTR_TABLE()
+ if ('K1_MAX' not in __tabp.para) or ('G_MAX' not in __tabp.para):
+ UTMESS('F','RUPTURE1_44')
+ __tab1 = __tabp.values()
+ nbinst = 1
+ if 'INST' in __tabp.para :
+ l_inst_tab=__tabp['INST'].values()['INST']
+ l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
+ nbinst = len(l_inst_tab)
+ nbptfon = len(__tab1['K1_MAX']) / nbinst
+ R[numfis] = [None]*nbptfon
+ RmM[numfis] = [None]*nbptfon
+ DKeq[numfis] = [None]*nbptfon
+ BETA[numfis] = [None]*nbptfon
+ absc = [0.]*nbptfon
+ if nbinst > 1 :
+ for k in range(nbptfon) :
+ if (dime == 2) : __tmp = __tabp
+ if (dime == 3) : __tmp = __tabp.PT_FOND==(k+1)
+ if (dime == 3) : absc[k]=__tmp['ABSC_CURV'][k]
+ ddkeq = sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_MAX']))
+ - sqrt(min(__tmp.values()['G_MAX'])))
+ rminmax = sqrt(min(__tmp.values()['G_MAX'])) / sqrt(max(__tmp.values()['G_MAX']))
+ DKeq[numfis][k] = [absc[k], ddkeq ]
+ RmM[numfis][k] = [absc[k], rminmax ]
+ k1 = __tmp.values()['K1_MAX']
+ k2 = __tmp.values()['K2_MAX']
+ betat = [0.]*nbinst
+ for jt in range(nbinst) :
+ betat[jt] = betaf(k1[jt],k2[jt])
+# ANGLE BETA NE DOIT PAS TROP VARIER ENTRE LES PAS DE TEMPS
+ dbeta = max(betat) - min(betat)
+ if dbeta > (5./180.*3.1415) :
+ UTMESS('F','XFEM2_72')
+ BETA[numfis][k] = [absc[k], betat[0] ]
+ VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1])
+ VMAX = max(VMAX,VMAX0 )
+ else :
+ if COMP_LINE == None :
+ UTMESS('A','XFEM2_76')
+ CMIN = 0.
+ CMAX = 1.
+ else :
+ CMIN = COMP_LINE['COEF_MULT_MINI']
+ CMAX = COMP_LINE['COEF_MULT_MAXI']
+ if (min(__tab1['G_MAX']) < 0.) :
+ UTMESS('F','RUPTURE1_46')
+ DKmax0 = max(NP.sqrt(__tab1['G_MAX']))
+ DKmax = max(DKmax,DKmax0)
+ for k in range(nbptfon) :
+ k1 = __tab1['K1_MAX'][k]
+ k2 = __tab1['K2_MAX'][k]
+ if (dime == 3) : absc[k]=__tab1['ABSC_CURV'][k]
+ BETA[numfis][k] = [absc[k] , betaf(k1,k2)]
+ DKeq[numfis][k] = [absc[k],sqrt(YOUNG)*NP.sqrt(__tab1['G_MAX'][k])]
+ RmM[numfis][k] = [absc[k], CMIN/CMAX]
+ VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1])
+ VMAX = max(VMAX,VMAX0 )
+# B- TABLEAU ISSSU DE CALC_G (option CALC_K_G)
+ else :
+ __tabp = SIF.EXTR_TABLE()
+ if (dime == 3) and (('K1_LOCAL' not in __tabp.para) or ('G_LOCAL' not in __tabp.para) or ('BETA_LOCAL' not in __tabp.para)):
+ UTMESS('F','RUPTURE1_45')
+ if (dime == 2) and (('K1' not in __tabp.para) or ('G' not in __tabp.para)) :
+ UTMESS('F','RUPTURE1_45')
+ __tab1= __tabp.values()
+ if 'INST' in __tabp.para :
+ l_inst_tab=__tabp['INST'].values()['INST']
+ l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
+ nbinst = len(l_inst_tab)
+ if (dime == 2) : nbptfon = 1
+ if (dime == 3) : nbptfon = len(__tab1['G_LOCAL']) / nbinst
+ RmM[numfis] = [None]*nbptfon
+ DKeq[numfis] = [None]*nbptfon
+ BETA[numfis] = [None]*nbptfon
+ if nbinst > 1 :
+ for k in range(nbptfon) :
+ if (dime == 3) :
+ __tmp = __tabp.NUM_PT==(k+1)
+ if (min(__tmp['G_LOCAL']) < 0.) :
+ UTMESS('F','RUPTURE1_46')
+ absc = __tmp.values()['ABSC_CURV'][0]
+ DKeq[numfis][k]=[absc, sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_LOCAL']))-sqrt(min(__tmp.values()['G_LOCAL'])))]
+ RmM[numfis][k] = [absc, sqrt(min(__tmp.values()['G_LOCAL'])) / sqrt(max(__tmp.values()['G_LOCAL']))]
+ dbeta = max(__tmp.values()['BETA_LOCAL'])-min(__tmp.values()['BETA_LOCAL'])
+ if dbeta > (5./180.*3.1415) :
+ UTMESS('F','XFEM2_72')
+ BETA[numfis][k] = [absc, __tmp.values()['BETA_LOCAL'][0] ]
+ else :
+ if (min(__tabp.values()['G']) < 0.) :
+ UTMESS('F','RUPTURE1_46')
+ DKeq[numfis][k]=[0.,sqrt(YOUNG)*(sqrt(max(__tabp.values()['G']))-sqrt(min(__tabp.values()['G'])))]
+ RmM[numfis][k] = [0., sqrt(min(__tabp.values()['G'])) / sqrt(max(__tabp.values()['G'])) ]
+ k1 = __tabp.values()['K1'][0]
+ k2 = __tabp.values()['K2'][0]
+ BETA[numfis][k]=[0., betaf(k1,k2)]
+ VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1])
+ VMAX = max(VMAX,VMAX0 )
+ elif dime == 3 :
+ nbptfon = len(__tab1['G_LOCAL'])
+ if COMP_LINE == None :
+ UTMESS('A','XFEM2_76')
+ CMIN = 0.
+ CMAX = 1.
+ else :
+ CMIN = COMP_LINE['COEF_MULT_MINI']
+ CMAX = COMP_LINE['COEF_MULT_MAXI']
+ if (min(__tab1['G_LOCAL']) < 0.) :
+ UTMESS('F','RUPTURE1_46')
+ DKeq[numfis] = [[__tab1['ABSC_CURV'][i],NP.sqrt(__tab1['G_LOCAL'][i])*sqrt(YOUNG) ] for i in range(nbptfon)]
+ RmM[numfis] = [[__tab1['ABSC_CURV'][i], CMIN/CMAX] for i in range(nbptfon)]
+ BETA[numfis] = [[__tab1['ABSC_CURV'][i],__tab1['BETA_LOCAL'][i]] for i in range(nbptfon)]
+ for i in range(nbptfon) :
+ VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][i][1],RmM[numfis][i][1])
+ VMAX = max(VMAX,VMAX0 )
+ else :
+ nbptfon = 1
+ if COMP_LINE == None :
+ UTMESS('A','XFEM2_76')
+ CMIN = 0.
+ CMAX = 1.
+ else :
+ CMIN = COMP_LINE['COEF_MULT_MINI']
+ CMAX = COMP_LINE['COEF_MULT_MAXI']
+ if (min(__tab1['G']) < 0.) :
+ UTMESS('F','RUPTURE1_46')
+ DKeq[numfis][0] = [0.,sqrt(YOUNG)*max(NP.sqrt(__tab1['G']))]
+ k1 = __tab1['K1'][0]
+ k2 = __tab1['K2'][0]
+ BETA[numfis][0] = [0.,betaf(k1,k2)]
+ RmM[numfis][0] = [0.,CMIN/CMAX]
+ VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][0][1],RmM[numfis][0][1])
+ VMAX = max(VMAX,VMAX0 )
+
+ numfis = numfis + 1
+
+# CALCUL DU NOMBRE DE CYCLES EQUIVALENTS
+ NBCYCL = Damax / VMAX
+ print 'AVANCE MAXIMALE DU FOND DE FISSURE',Damax
+ print 'NOMBRE DE CYCLES DE FATIGUE',NBCYCL
+
+# DEUXIEME BOUCLE SUR LES FISSURES : PROPAGATION
+ numfis = 0
+ for Fiss in Fissures :
+ fiss0 = Fiss['FISS_ACTUELLE']
+ print '-------------------------------------------'
+ print 'TRAITEMENT DE LA FISSURE ',fiss0.get_name()
+ print '-------------------------------------------'
+ MAIL_FISS1 = Fiss['MAIL_ACTUEL']
+ MFOND = Fiss['GROUP_MA_FOND']
+ MFISS = Fiss['GROUP_MA_FISS']
+
+#------------------------------------------------------------------
+# CAS 2a : MODELE 3D
+#
+ if dime == 3 :
+ mm[numfis] = MAIL_PY()
+ mm[numfis].FromAster(MAIL_FISS1)
+
+# Recuperation des informations sur le maillage
+ nbno = mm[numfis].dime_maillage[0]
+ nbma = mm[numfis].dime_maillage[2]
+ collgrma = mm[numfis].gma
+ gmafon = MFOND+str('_')+str(it-1)
+
+# Recuperation de la liste des noeuds du fond
+ connex = mm[numfis].co
+ linomma = list(mm[numfis].correspondance_mailles)
+ groupma = mm[numfis].gma
+ lmafo = groupma[gmafon]
+ lisnofo = []
+ for i in range(len(lmafo)) :
+ ma_i = linomma[lmafo[i]]
+ no_i = connex[lmafo[i]]
+ if i == 0 :
+ lisnofo.append(no_i[0])
+ lisnofo.append(no_i[1])
+ else :
+ if lisnofo[i] != no_i[0] :
+ UTMESS('F','RUPTURE1_51')
+ lisnofo.append(no_i[1])
+
+ nbnofo = len(lisnofo)
+
+# Correction de la position des noeuds (equirepartition)
+ Coorfo = fiss0.FONDFISS.get()
+ absmax = Coorfo[-1]
+ abscf = [0.]*nbnofo
+ for i in range(nbnofo) :
+ abscf[i] = i * absmax / (nbnofo-1)
+ xyzi = InterpolFondFiss(abscf[i], Coorfo)
+ mm[numfis].cn[nbno-nbnofo+i][0] = xyzi[0]
+ mm[numfis].cn[nbno-nbnofo+i][1] = xyzi[1]
+ mm[numfis].cn[nbno-nbnofo+i][2] = xyzi[2]
+
+# Maillage apres correction
+ coord = mm[numfis].cn
+ linomno = list(mm[numfis].correspondance_noeuds)
+ linomno = map(string.rstrip,linomno)
+ l_coorf = [[linomno[i],coord[i]] for i in range(0,nbno)]
+ d_coorf = dict(l_coorf)
+
+# Boucle sur le fond : coordonnees du point propage
+ Basefo = fiss0.BASEFOND.get()
+ Listfo = fiss0.FONDFISS.get()
+ Vorig = Fiss['DTAN_ORIG']
+ Vextr = Fiss['DTAN_EXTR']
+ if (Damax ==None) :
+ DKmax = 1
+ if (coef_C ==None) :
+ coef_C = Damax
+ for ifond in range(nbnofo) :
+ Xf = d_coorf['NX%s%i' %(ALPHABET[ifond],it)][0]
+ Yf = d_coorf['NX%s%i' %(ALPHABET[ifond],it)][1]
+ Zf = d_coorf['NX%s%i' %(ALPHABET[ifond],it)][2]
+
+ VPVNi = InterpolBaseFiss(abscf[ifond],Basefo, Listfo)
+ DKeqloc = InterpolationLineaire(abscf[ifond], DKeq[numfis])
+ Rloc = InterpolationLineaire(abscf[ifond], RmM[numfis])
+ if DKeqloc<=0 :
+ UTMESS('F','RUPTURE1_49')
+
+# Tangentes aux extremites
+ if (ifond == 0) and (Vorig != None) :
+ VPVNi[3] = Vorig[0]
+ VPVNi[4] = Vorig[1]
+ VPVNi[5] = Vorig[2]
+ if (ifond == nbnofo-1) and (Vextr != None) :
+ VPVNi[3] = Vextr[0]
+ VPVNi[4] = Vextr[1]
+ VPVNi[5] = Vextr[2]
+
+ beta = InterpolationLineaire(abscf[ifond], BETA[numfis])
+ Vloc = NBCYCL*dadN(coef_C,coef_N,coef_M,DKeqloc,Rloc)
+ Xf2 = Xf + (VPVNi[3]*cos(beta)+VPVNi[0]*sin(beta))*Vloc
+ Yf2 = Yf + (VPVNi[4]*cos(beta)+VPVNi[1]*sin(beta))*Vloc
+ Zf2 = Zf + (VPVNi[5]*cos(beta)+VPVNi[2]*sin(beta))*Vloc
+
+ LesNoeudsEnPlus = NP.array([[Xf2,Yf2,Zf2]])
+ if ifond ==0 :
+ Pini = (Xf2,Yf2,Zf2)
+ vectorie = (VPVNi[0],VPVNi[1],VPVNi[2],)
+ NomNoeudsEnPlus = ['NX%s%i' %(ALPHABET[ifond],it+1)]
+ mm[numfis].cn = NP.concatenate((mm[numfis].cn,LesNoeudsEnPlus))
+ mm[numfis].correspondance_noeuds = tuple( list(mm[numfis].correspondance_noeuds) + NomNoeudsEnPlus )
+
+ # Ajout Maille levre (quad4)
+ nbnotot = len(mm[numfis].correspondance_noeuds)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ for ifond in range(nbnofo-1) :
+ NomMaillesEnPlus.append( 'MX%s%i' %(ALPHABET[ifond], it+1) )
+ num_maille.append( [ nbma + ifond +1 ] )
+ num_maille.append( nbma +ifond + 1 )
+ i1 = nbnotot - 2*nbnofo + ifond
+ i2 = nbnotot - 2*nbnofo + ifond +1
+ i3 = nbnotot - nbnofo + ifond +1
+ i4 = nbnotot - nbnofo + ifond
+ NoeudsMailles.append( NP.array([i1,i2,i3,i4]))
+
+ typ_maille = mm[numfis].dic['QUAD4']
+ NbMailleAjoute = nbnofo-1
+ mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm[numfis].co += NoeudsMailles
+ #XXX utilise resize/arange... (MC)
+ fsi = mm[numfis].gma['%s_%i' %(MFISS,it-1)]
+ for ifond in range(nbnofo-1) :
+ fsi = NP.concatenate((fsi,NP.array([nbma+ifond])))
+ mm[numfis].gma['%s_%i' %(MFISS,it)] = fsi.astype(int)
+
+# Ajout Maille fond (SEG2)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ for ifond in range(nbnofo-1) :
+ NomMaillesEnPlus.append( 'MF%s%i' %(ALPHABET[ifond], it+1) )
+ num_maille.append( [ nbma + ifond +nbnofo ] )
+ num_maille.append( nbma + ifond + nbnofo )
+ i3 = nbnotot - nbnofo + ifond
+ i4 = nbnotot - nbnofo + ifond +1
+ NoeudsMailles.append( NP.array([i3,i4]))
+
+ typ_maille = mm[numfis].dic['SEG2']
+ NbMailleAjoute = nbnofo-1
+ mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm[numfis].co += NoeudsMailles
+ mm[numfis].gma['%s_%i' %(MFOND,it)] = NP.arange(nbma+nbnofo-1, nbma+2*(nbnofo-1))
+
+#------------------------------------------------------------------
+# CAS 2b : MODELE 2D
+#
+ if dime == 2 :
+ mm[numfis] = MAIL_PY()
+ mm[numfis].FromAster(MAIL_FISS1)
+
+ (nno,ndim) = mm[numfis].cn.shape
+
+ # Recuperation des informations sur le maillage
+ nbno = mm[numfis].dime_maillage[0]
+ nbma = mm[numfis].dime_maillage[2]
+ coord = mm[numfis].cn
+ linomno = list(mm[numfis].correspondance_noeuds)
+ linomno = map(string.rstrip,linomno)
+ l_coorf = [[linomno[i],coord[i]] for i in range(0,nbno)]
+ d_coorf = dict(l_coorf)
+
+ # Coordonnees du point propage
+ Xf = d_coorf['NXA%i' %(it)][0]
+ Yf = d_coorf['NXA%i' %(it)][1]
+
+ VPVNi = fiss0.BASEFOND.get()
+ V = NBCYCL*dadN(coef_C,coef_N,coef_M,DKeq[numfis][0][1],RmM[numfis][0][1])
+ beta = BETA[numfis][0][1]
+ Xf2 = Xf +V*(VPVNi[2]*cos(beta)+VPVNi[0]*sin(beta))
+ Yf2 = Yf + V*(VPVNi[3]*cos(beta)+VPVNi[1]*sin(beta))
+
+ LesNoeudsEnPlus = NP.array([[Xf2,Yf2]])
+ NomNoeudsEnPlus = ['NXA%i' %(it+1)]
+ mm[numfis].cn = NP.concatenate((mm[numfis].cn,LesNoeudsEnPlus))
+ mm[numfis].correspondance_noeuds = tuple(linomno + NomNoeudsEnPlus )
+
+ # Ajout Maille levre (SEG2)
+ NomMaillesEnPlus = ['MX%s%i' %(ALPHABET[0], it+1)]
+ num_maille = [ nbma + 1 ]
+ num_maille.append( nbma + 1 )
+ NoeudsMailles = [NP.array([nbno-1,nbno])]
+ typ_maille = mm[numfis].dic['SEG2']
+ NbMailleAjoute = 1
+ mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm[numfis].co += NoeudsMailles
+ fsi = mm[numfis].gma['%s_%i' %(MFISS,it-1)]
+ fsi = NP.concatenate((fsi,NP.array([nbma])))
+ mm[numfis].gma['%s_%i' %(MFISS,it)] = fsi.astype(int)
+
+# Ajout Maille fond (POI1)
+ NomMaillesEnPlus = ['MF%s%i' %(ALPHABET[0], it+1)]
+ num_maille = [ nbma + 2 ]
+ NoeudsMailles = [NP.array([nbno])]
+ typ_maille = mm[numfis].dic['POI1']
+ mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*1)))
+ mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm[numfis].co += NoeudsMailles
+ mm[numfis].gma['%s_%i' %(MFOND,it)] = NP.array([nbma+1], dtype=int)
+# Fin du 2D
+
+ if INFO==2 :
+ texte="Maillage produit par l operateur PROPA_FISS"
+ aster.affiche('MESSAGE',texte)
+ print mm[numfis]
+
+# Sauvegarde maillage xfem
+ MAIL_FISS2 = Fiss['MAIL_PROPAGE']
+ if MAIL_FISS2 != None : self.DeclareOut('ma_xfem2',MAIL_FISS2)
+
+ unit = mm[numfis].ToAster()
+ DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
+ ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
+
+ if numfis == 0 :
+ __MMX[0]=LIRE_MAILLAGE(UNITE=unit);
+ else:
+ __MMX[numfis]=ASSE_MAILLAGE(MAILLAGE_1 = __MMX[numfis-1],
+ MAILLAGE_2 = ma_xfem2,
+ OPERATION='SUPERPOSE')
+
+ numfis = numfis+1
+
+# Sauvegarde maillage concatene
+ MAIL_TOTAL = args['MAIL_TOTAL']
+ if MAIL_TOTAL != None : self.DeclareOut('ma_tot',MAIL_TOTAL)
+ MAIL_STRUC = args['MAIL_STRUC']
+ ma_tot = ASSE_MAILLAGE(MAILLAGE_1 = MAIL_STRUC,
+ MAILLAGE_2 = __MMX[Nbfissure-1],
+ OPERATION='SUPERPOSE',)
+
+#------------------------------------------------------------------
+# CAS 3 : METHODE_PROPA = 'INITIALISATION'
+#
+ if METHODE_PROPA == 'INITIALISATION' :
+ form = args['FORM_FISS']
+ MFOND = args['GROUP_MA_FOND']
+ MFISS = args['GROUP_MA_FISS']
+
+# 3-a : demi-droite
+ if form == 'DEMI_DROITE' :
+ PF = args['PFON']
+ DTAN = args['DTAN']
+ PI = NP.array([[PF[0]-DTAN[0],PF[1]-DTAN[1]],])
+
+ ndim = 2
+ mm = MAIL_PY()
+ mm.__init__()
+
+# Ajout des noeuds
+ LesNoeudsEnPlus = NP.concatenate((PI,NP.array([PF[0:2]])))
+ NomNoeudsEnPlus = ['NXA0','NXA1']
+ mm.cn = LesNoeudsEnPlus
+ mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+
+# Ajout Maille levre (SEG2)
+ it = 1
+ nbma = 0
+ nbno = 0
+ NomMaillesEnPlus = ['MX%s%i' %(ALPHABET[0], it)]
+ num_maille = [ nbma + 1 ]
+ num_maille.append( nbma + 1 )
+ NoeudsMailles = [NP.array([nbno,nbno+1])]
+ typ_maille = mm.dic['SEG2']
+ NbMailleAjoute = 1
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFISS)] = NP.array([nbma], dtype=int)
+
+# Ajout Maille fond (POI1)
+ NomMaillesEnPlus = ['MF%s%i' %(ALPHABET[0], it)]
+ num_maille = [ nbma + 2 ]
+ NoeudsMailles = [NP.array([nbno+1])]
+ typ_maille = mm.dic['POI1']
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*1)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFOND)] = NP.array([nbma+1], dtype=int)
+
+
+# 3-b : demi-plan
+ if form == 'DEMI_PLAN' :
+ P0 = args['POINT_ORIG']
+ P1 = args['POINT_EXTR']
+ dpropa = args['DTAN']
+ nbpt = args['NB_POINT_FOND']
+ Q0 = NP.array([[P0[0]-dpropa[0],P0[1]-dpropa[1],P0[2]-dpropa[2]]])
+
+ mm = MAIL_PY()
+ mm.__init__()
+ x=[None]*nbpt
+ y=[None]*nbpt
+ z=[None]*nbpt
+ xx=[None]*nbpt
+ yy=[None]*nbpt
+ zz=[None]*nbpt
+ LesNoeudsEnPlus = Q0
+ NomNoeudsEnPlus = ['NXA0']
+ mm.cn = LesNoeudsEnPlus
+ mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+
+ for i in range(1,nbpt) :
+ x[i] = P0[0]+i*(P1[0]-P0[0])/(nbpt-1)
+ y[i] = P0[1]+i*(P1[1]-P0[1])/(nbpt-1)
+ z[i] = P0[2]+i*(P1[2]-P0[2])/(nbpt-1)
+ xx[i] = x[i] - dpropa[0]
+ yy[i] = y[i] - dpropa[1]
+ zz[i] = z[i] - dpropa[2]
+ LesNoeudsEnPlus = NP.array([[xx[i],yy[i],zz[i]]])
+ NomNoeudsEnPlus = ['NX%s0' %(ALPHABET[i]) ]
+ mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+ mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds) +NomNoeudsEnPlus )
+ LesNoeudsEnPlus = NP.array([P0])
+ NomNoeudsEnPlus = ['NXA1']
+ mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+ mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds) + NomNoeudsEnPlus )
+ for i in range(1,nbpt) :
+ LesNoeudsEnPlus = NP.array([[x[i],y[i],z[i]]])
+ NomNoeudsEnPlus = ['NX%s1' %(ALPHABET[i]) ]
+ mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+ mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds) +NomNoeudsEnPlus )
+
+# Ajout Maille levre (quad4)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ for ifond in range(nbpt-1) :
+ NomMaillesEnPlus.append( 'MX%s1' %(ALPHABET[ifond]) )
+ num_maille.append( [ ifond +1 ] )
+ num_maille.append( ifond + 1 )
+ i1 = ifond
+ i2 = ifond+1
+ i3 = nbpt+ifond
+ i4 = nbpt+ifond+1
+ NoeudsMailles.append( NP.array([i1,i2,i4,i3]))
+
+ typ_maille = mm.dic['QUAD4']
+ NbMailleAjoute = nbpt-1
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFISS) ] = NP.arange(nbpt-1)
+
+# Ajout Maille fond (SEG2)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ for ifond in range(nbpt-1) :
+ NomMaillesEnPlus.append( 'MF%s1' %(ALPHABET[ifond]) )
+ num_maille.append( [ ifond +nbpt ] )
+ num_maille.append( ifond + nbpt )
+ i3 = nbpt+ifond
+ i4 = nbpt+ifond+1
+ NoeudsMailles.append( NP.array([i3,i4]))
+
+ typ_maille = mm.dic['SEG2']
+ NbMailleAjoute = nbpt-1
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFOND)] = NP.arange(nbpt-1, 2*(nbpt-1))
+
+# 3-c : ellipse
+ if form == 'ELLIPSE' :
+ P0 = args['CENTRE']
+ alpha0 = args['ANGLE_ORIG']
+ alpha1 = args['ANGLE_EXTR']
+ vect_x = args['VECT_X']
+ vect_y = args['VECT_Y']
+ gdax = args['DEMI_GRAND_AXE']
+ ptax = args['DEMI_PETIT_AXE']
+ normale = cross_product(vect_x,vect_y)
+ verif = NP.dot(vect_x,vect_y)
+ if abs(verif) > 0.01:
+ UTMESS('F','RUPTURE1_52')
+ nbpt = args['NB_POINT_FOND']
+
+ mm = MAIL_PY()
+ mm.__init__()
+ LesNoeudsEnPlus = NP.array([[P0[0],P0[1],P0[2]]])
+ NomNoeudsEnPlus = ['NXA0']
+ mm.cn = LesNoeudsEnPlus
+ mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+
+# Coordonnees des noeuds
+ matr = NP.asarray([vect_x,vect_y,normale])
+ matr2 = NP.transpose(matr)
+ alpha0 = alpha0*NP.pi/180.
+ alpha1 = alpha1*NP.pi/180.
+ for i in range(nbpt) :
+ alphai = alpha0 + i*(alpha1-alpha0) / (nbpt-1)
+ coor_r1 = NP.asarray([gdax*cos(alphai), ptax*sin(alphai), 0])
+ coor_r0 = NP.dot(matr2,coor_r1) + P0
+ LesNoeudsEnPlus = NP.array([[coor_r0[0],coor_r0[1],coor_r0[2]]])
+ NomNoeudsEnPlus = ['NX%s1' %(ALPHABET[i]) ]
+ mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+ mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds) +NomNoeudsEnPlus )
+
+# Ajout Maille levre (TRIA3)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ typ_maille = mm.dic['TRIA3']
+ for ifond in range(nbpt-1) :
+ NomMaillesEnPlus.append( 'MX%s1' %(ALPHABET[ifond]) )
+ num_maille.append( [ ifond +1 ] )
+ num_maille.append( ifond + 1 )
+ i1 = 0
+ i2 = ifond + 1
+ i3 = ifond + 2
+ NoeudsMailles.append( NP.array([i1,i2,i3]))
+ NbMailleAjoute = nbpt-1
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFISS) ] = NP.arange(NbMailleAjoute)
+
+
+
+# Ajout Maille fond (SEG2)
+ NomMaillesEnPlus = []
+ num_maille = []
+ NoeudsMailles = []
+ typ_maille = mm.dic['SEG2']
+ for ifond in range(nbpt-1) :
+ NomMaillesEnPlus.append( 'MF%s1' %(ALPHABET[ifond]) )
+ num_maille.append( [ ifond +nbpt ] )
+ num_maille.append( ifond + nbpt )
+ i3 = ifond + 1
+ i4 = ifond + 2
+ NoeudsMailles.append( NP.array([i3,i4]))
+
+ NbMailleAjoute = nbpt-1
+ mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+ mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+ mm.co += NoeudsMailles
+ mm.gma['%s_0' %(MFOND)] = NP.arange(nbpt-1, 2*(nbpt-1))
+
+
+ if INFO==2 :
+ texte="Maillage produit par l operateur PROPA_FISS"
+ aster.affiche('MESSAGE',texte)
+ print mm
+
+# Sauvegarde (maillage xfem et maillage concatene)
+ MAIL_FISS2 = args['MAIL_FISS']
+ if MAIL_FISS2 != None : self.DeclareOut('ma_xfem2',MAIL_FISS2)
+ unit = mm.ToAster()
+ DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
+ self.DeclareOut('ma_xfem2',MAIL_FISS2)
+ ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
+
+ MAIL_TOTAL = args['MAIL_TOTAL']
+ if MAIL_TOTAL != None : self.DeclareOut('ma_tot',MAIL_TOTAL)
+ MAIL_STRUC = args['MAIL_STRUC']
+ ma_tot = ASSE_MAILLAGE(MAILLAGE_1 = MAIL_STRUC,
+ MAILLAGE_2 = ma_xfem2,
+ OPERATION='SUPERPOSE')
+
+ return
--- /dev/null
+#@ MODIF raff_xfem_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 raff_xfem_ops(self,FISSURE,INFO,**args):
+ """
+ Macro RAFF_XFEM
+ Calcul de la distance au fond de fissure le plus proche
+ """
+ import aster
+ import string
+ import copy
+ import math
+ from types import ListType, TupleType
+ from Accas import _F
+ from SD.sd_xfem import sd_fiss_xfem
+ from Execution.E_JDC import JDC
+ EnumTypes = (ListType, TupleType)
+
+ macro = 'RAFF_XFEM'
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Le concept sortant (de type cham_no_sdaster ou derive)
+ self.DeclareOut('chamout', self.sd)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ FORMULE = self.get_cmd('FORMULE')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+# recuperation de la liste des fissures
+ if type(FISSURE) == tuple :
+ nbfiss = len(FISSURE)
+ else :
+ nbfiss = 1
+
+# formule distance pour une fissure: 1/exp(r)
+ __MDISTF=FORMULE(NOM_PARA=('X1','X2'),VALE= '1./exp(sqrt(X1**2+X2**2))');
+# formule distance pour une interface: 1/exp(lsn)
+ __MDISTI=FORMULE(NOM_PARA=('X1'),VALE= '1./exp(sqrt(X1**2))');
+
+ __CERR= [None]*nbfiss
+ list_err=[]
+ list_nom_cmp=[]
+ for_max = 'max('
+
+ for i in range(0,nbfiss) :
+
+ if nbfiss == 1 :
+ fiss = FISSURE
+ else :
+ fiss = FISSURE[i]
+
+ # recuperation du type de discontinuite :'FISSURE' ou 'INTERFACE'
+ # si FISSURE : l'erreur est la distance au fond de fissure
+ # si INTERFACE : l'erreur est la distance a l'interface
+ iret,ibid,typ_ds = aster.dismoi('F','TYPE_DISCONTINUITE',fiss.nom,'FISS_XFEM')
+ typ_ds=typ_ds.rstrip()
+
+ # extraction des champs level sets
+ __CHLN=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='EXTR',
+ NOM_CHAM='LNNO',
+ FISSURE=fiss);
+
+ # on recupere le concept maillage associe a la level set normale
+ iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',__CHLN.nom,'CHAM_NO')
+ nom_ma=nom_ma.strip()
+ MA = self.get_concept(nom_ma)
+
+ if typ_ds == 'FISSURE' :
+ __CHLTB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='EXTR',
+ NOM_CHAM='LTNO',
+ FISSURE=fiss);
+
+ # on renomme le composante X1 en X2
+ __CHLT=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='ASSE',
+ MAILLAGE=MA,
+ ASSE=_F(TOUT='OUI',
+ CHAM_GD = __CHLTB,
+ NOM_CMP='X1',
+ NOM_CMP_RESU='X2',),
+ );
+
+ DETRUIRE(CONCEPT=_F(NOM=__CHLTB),INFO=1)
+
+ # On affecte à chaque noeud du maillage MA la formule __MDISTF ou __MDISTI
+ if typ_ds == 'FISSURE' :
+ __CHFOR=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+ OPERATION='AFFE',
+ MAILLAGE=MA,
+ AFFE=_F(TOUT='OUI',
+ NOM_CMP='X1',
+ VALE_F=__MDISTF,),
+ );
+ elif typ_ds == 'INTERFACE' :
+ __CHFOR=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+ OPERATION='AFFE',
+ MAILLAGE=MA,
+ AFFE=_F(TOUT='OUI',
+ NOM_CMP='X1',
+ VALE_F=__MDISTI,),
+ );
+
+ # on evalue en tout noeud le champ de formules
+ if typ_ds == 'FISSURE' :
+ __CERRB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='EVAL',
+ CHAM_F=__CHFOR,
+ CHAM_PARA=(__CHLN,__CHLT,));
+
+ DETRUIRE(CONCEPT=_F(NOM=__CHLT),INFO=1)
+
+ elif typ_ds == 'INTERFACE' :
+ __CERRB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='EVAL',
+ CHAM_F=__CHFOR,
+ CHAM_PARA=(__CHLN,));
+
+ DETRUIRE(CONCEPT=_F(NOM=__CHLN),INFO=1)
+ DETRUIRE(CONCEPT=_F(NOM=__CHFOR),INFO=1)
+
+ # champ d'Erreur de la fissure i
+ __CERR[i]=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='ASSE',
+ MAILLAGE=MA,
+ ASSE=_F(TOUT='OUI',
+ CHAM_GD = __CERRB,
+ NOM_CMP='X1',
+ NOM_CMP_RESU='X'+str(i+1),
+ ),
+ );
+
+ list_err.append(__CERR[i])
+ list_nom_cmp.append('X'+str(i+1))
+ for_max = for_max+'X'+str(i+1)+','
+
+ DETRUIRE(CONCEPT=_F(NOM=__CERRB),INFO=1)
+
+ # si nbfiss = 1, c'est directement X1
+ # si nbfiss > 1 : on prend le max des erreurs de chaque fissure
+ for_max = for_max+')'
+
+ if nbfiss == 1 :
+ __Erreur=FORMULE(NOM_PARA=(list_nom_cmp),VALE= 'X1');
+ else :
+ __Erreur=FORMULE(NOM_PARA=(list_nom_cmp),VALE= for_max);
+
+ # Définition de l'erreur en chaque noeud du maillage
+ __CHFORM=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+ OPERATION='AFFE',
+ MAILLAGE=MA,
+ AFFE=_F(TOUT='OUI',
+ NOM_CMP='X1',
+ VALE_F=__Erreur,),
+ );
+
+ # champ de sortie
+ chamout=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+ OPERATION='EVAL',
+ CHAM_F=__CHFORM,
+ CHAM_PARA=(list_err));
+
+ for i in range(0,nbfiss) :
+ DETRUIRE(CONCEPT=_F(NOM=__CERR[i]),INFO=1)
+
+ DETRUIRE(CONCEPT=_F(NOM=__MDISTF),INFO=1)
+ DETRUIRE(CONCEPT=_F(NOM=__MDISTI),INFO=1)
+ DETRUIRE(CONCEPT=_F(NOM=__Erreur),INFO=1)
+ DETRUIRE(CONCEPT=_F(NOM=__CHFORM),INFO=1)
+
+ return
+
--- /dev/null
+#@ MODIF reca_algo Macro DATE 26/05/2010 AUTEUR ASSIRE A.ASSIRE
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# 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 copy
+
+import numpy as NP
+import numpy.linalg as linalg
+
+try:
+ import aster
+ from Cata.cata import INFO_EXEC_ASTER
+ from Cata.cata import DETRUIRE
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+except: pass
+
+
+# ------------------------------------------------------------------------------
+def calcul_gradient(A,erreur):
+ grad = NP.dot(NP.transpose(A),erreur)
+ return grad
+
+# ------------------------------------------------------------------------------
+def calcul_norme2(V):
+ a = NP.array(V)
+ return NP.dot(a,NP.transpose(a))**0.5
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class Dimension:
+ """
+ Classe gérant l'adimensionnement et le dimensionnement
+ """
+
+ def __init__(self,val_initiales):
+ """
+ Le constructeur calcul la matrice D et son inverse
+ """
+ self.val_init = val_initiales
+ dim =len(self.val_init)
+ self.D = NP.zeros((dim,dim), float)
+ for i in range(dim):
+ self.D[i][i] = self.val_init[i]
+ self.inv_D=linalg.inv(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 = NP.dot(self.inv_D,copy.copy(tab))
+ return tab_adim
+
+
+# ------------------------------------------------------------------------------
+
+ def redim(self, tab_adim):
+ tab = NP.dot(self.D,tab_adim)
+ return tab
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+
+
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def cond(matrix):
+ e1=linalg.eigvals(matrix)
+ e=map(abs,e1)
+ size=len(e)
+ e=NP.sort(e)
+ if NP.all(e[0] != 0):
+ condi=e[size-1]/e[0]
+ else:
+ condi=0.0
+ return condi,e[size-1],e[0]
+
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def norm(matrix):
+ e=linalg.eigvalsh(matrix)
+ size=len(e)
+ e=NP.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=NP.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 Levenberg_bornes(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 = NP.identity(dim)
+ # Matrice du système
+ Q=NP.dot(NP.transpose(A),A) +l*id
+ # Second membre du système
+ d=NP.dot(NP.transpose(A),erreur)
+ # Ens. de liaisons actives
+ Act=NP.array([], dtype=int)
+ k=0
+ done=0
+ # Increment des parametres
+ dval=NP.zeros(dim)
+ while done <1 :
+ k=k+1
+ I=NP.ones(dim, dtype=int)
+ for i in Act:
+ I[i]=0
+ I=NP.nonzero(NP.greater(I,0))[0]
+ s=NP.zeros(dim)
+ 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))
+ t_QI = NP.take(Q, I, axis=0)
+ t_tQI_Act = NP.take(t_QI, Act, axis=1)
+ t_adim_Act = NP.take(Dim.adim(dval), Act)
+ if NP.size(t_tQI_Act) > 0 and NP.size(t_adim_Act) > 0:
+ smemb = NP.take(d, I) + NP.dot(t_tQI_Act, t_adim_Act)
+ else:
+ smemb = NP.take(d, I)
+ xi=-linalg.solve(NP.take(t_QI, I, axis=1), smemb)
+ for i in NP.arange(len(I)):
+ dval[I[i]]=xi[i]*val_init[I[i]]
+ if (len(Act)!=0):
+ # s(Av)=-d(Act)-Q(Act,:).dval
+ sa=-NP.take(d,Act)-NP.dot(NP.take(Q,Act,axis=0),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=NP.concatenate((NP.nonzero(NP.greater(dval,borne_sup-val))[0],
+ NP.nonzero(NP.less(dval,borne_inf-val))[0],
+ NP.nonzero(NP.greater(s,0.))[0])).astype(int)
+ 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=NP.dot(NP.transpose(A),A) +l*id
+ k=0
+ except:
+ res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+ res.write('\n\nQ = \n'+NP.array2string(Q-l*id,array_output=1,separator=','))
+ res.write('\n\nd = '+NP.array2string(d,array_output=1,separator=','))
+ res.write('\n\nval = '+NP.array2string(val,array_output=1,separator=','))
+ res.write('\n\nval_ini= '+NP.array2string(val_init,array_output=1,separator=','))
+ res.write('\n\nborne_inf= '+NP.array2string(borne_inf,array_output=1,separator=','))
+ res.write('\n\nborne_sup= '+NP.array2string(borne_sup,array_output=1,separator=','))
+ UTMESS('F','RECAL0_18')
+ 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 = NP.identity(dim)
+ # Matrice du système
+ Q=NP.dot(NP.transpose(A),A) +l*id
+ # Second membre du système
+ d=NP.dot(NP.transpose(A),erreur)
+ old_Q=old_J
+ new_Q=old_J+0.5*NP.dot(NP.transpose(new_val-val),NP.dot(Q,new_val-val))+NP.dot(NP.transpose(new_val-val),d)
+ # Ratio de la décroissance réelle et de l'approx. quad.
+ if NP.all((old_Q-new_Q) != 0.):
+ R=(old_J-new_J)/(old_Q-new_Q)
+ if (R<0.25):
+ l = l*10.
+ elif (R>0.75):
+ l = l/15.
+ else:
+ if (old_J>new_J):
+ l = l*10.
+ else:
+ l = l/10.
+ return l
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def test_convergence(gradient_init, erreur, A, s):
+ """
+ Renvoie le residu
+ """
+ gradient = calcul_gradient(A,erreur)+s
+ try:
+ epsilon = NP.dot(gradient,gradient)/NP.dot(gradient_init,gradient_init)
+ except:
+ UTMESS('F', "RECAL0_19")
+ return
+ epsilon = epsilon**0.5
+ return epsilon
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def calcul_etat_final(para, A, iter, max_iter, prec, residu, Messg):
+ """
+ Fonction appelé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
+ """
+
+# if ((iter < max_iter) or (residu < prec)):
+ if 1==1:
+ Hessien = NP.dot(NP.transpose(A),A)
+
+ # Desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
+ aster.matfpe(-1)
+ valeurs_propres,vecteurs_propres = linalg.eig(Hessien)
+ vecteurs_propres=NP.transpose(vecteurs_propres) # numpy et Numeric n'ont pas la meme convention
+ sensible=NP.nonzero(NP.greater(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-1))[0]
+ insensible=NP.nonzero(NP.less(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-2))[0]
+ # Reactive les FPE
+ aster.matfpe(1)
+
+ Messg.affiche_calcul_etat_final(para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible)
+
+
--- /dev/null
+#@ MODIF reca_calcul_aster Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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.
+# ======================================================================
+
+
+debug = False
+
+import copy
+import types
+import os
+import sys
+import pprint
+import math
+import glob
+import socket
+import shutil
+
+import numpy as NP
+
+from Utilitai.System import ExecCommand
+from Utilitai.Utmess import UTMESS
+
+from recal import Affiche_Param, CALCULS_ASTER, CALC_ERROR
+from reca_utilitaires import Random_Tmp_Name
+
+
+# ------------------------------------------------------------------------------
+class CALCUL_ASTER:
+
+ def __init__(self, jdc, METHODE,
+ UNITE_ESCL,
+ UNITE_RESU,
+ para,
+ reponses,
+ PARA_DIFF_FINI=1.E-3,
+ vector_output=True,
+ GRADIENT=None,
+ DYNAMIQUE=None,
+ #LANCEMENT='DISTRIBUE',
+ CALCUL_ESCLAVE=None,
+ INFO=0,
+ ):
+
+ self.METHODE = METHODE
+ self.UNITE_ESCL = UNITE_ESCL
+ self.UNITE_RESU = UNITE_RESU
+ self.para = para
+ self.reponses = reponses
+ self.PARA_DIFF_FINI = PARA_DIFF_FINI
+ self.vector_output = vector_output
+
+ self.memjeveux_esclave = CALCUL_ESCLAVE['memjeveux_esclave']
+ self.mem_aster = CALCUL_ESCLAVE['mem_aster']
+ self.MODE = CALCUL_ESCLAVE['MODE']
+ self.MEMOIRE = CALCUL_ESCLAVE['MEMOIRE']
+ self.TEMPS = CALCUL_ESCLAVE['TEMPS']
+ self.CLASSE = CALCUL_ESCLAVE['CLASSE']
+ self.ACTUALISATION = CALCUL_ESCLAVE['ACTUALISATION']
+ self.NMAX_SIMULT = CALCUL_ESCLAVE['NMAX_SIMULT']
+ self.LANCEMENT = CALCUL_ESCLAVE['LANCEMENT']
+
+ self.INFO = INFO
+
+ # Optionnels
+ self.UNITE_GRAPHIQUE = None
+ self.export = None
+ self.follow_output = None
+ self.GRADIENT = GRADIENT
+ self.DYNAMIQUE = DYNAMIQUE
+ #self.LANCEMENT = LANCEMENT
+
+ # Variables locales
+ self.new_export = os.path.join(os.getcwd(), 'tmp_export')
+
+ # Variables calculees
+ self.evaluation_fonction = 0
+
+ # Initialisation
+ self.reset()
+
+ # Dynamique : pour l'appariement manuel des modes en dynamique
+ self.graph_mac = False
+
+ # JDC
+ self.jdc = jdc
+
+
+ # ------------------------------------------------------------------------------
+ def Set_Parameters(self, **args):
+ for cle in args.keys():
+ exec( "%s=%s" % (cle, args[cle]) )
+
+
+ # ------------------------------------------------------------------------------
+ def reset(self):
+
+ self.Lcalc = None
+ self.erreur = None
+ self.residu = None
+ self.norme = None
+ self.A_nodim = None
+ self.A = None
+ self.norme_A_nodim = None
+ self.norme_A = None
+ self.L = None
+# self.L_J_init = None
+
+
+ # ------------------------------------------------------------------------------
+ def calcul_Aster(self, val, dX=None):
+
+ # ----------------------------------------------------------------------------
+ # Commun
+ # ----------------------------------------------------------------------------
+ self.val = val
+ info = self.INFO
+
+ # MACR_RECAL inputs
+ parametres = self.LIST_PARA
+ calcul = self.RESU_CALC
+ experience = self.RESU_EXP
+
+ # Current estimation
+ X0 = val
+ dX = dX
+
+ # Objet Calcul
+ C = CALCULS_ASTER(
+ # MACR_RECAL inputs
+ parametres = parametres,
+ calcul = calcul,
+ experience = experience,
+ LANCEMENT = self.LANCEMENT,
+ jdc = self.jdc,
+ )
+
+ # Traitement special pour la dynamique (affichage des MAC dans l'esclave)
+ if self.DYNAMIQUE: C.SetDynamiqueMode(self.DYNAMIQUE, self.graph_mac)
+
+
+ # ----------------------------------------------------------------------------
+ # ASRUN distribue
+ # ----------------------------------------------------------------------------
+ if self.LANCEMENT == 'DISTRIBUTION':
+
+ # Creation du repertoire temporaire pour l'execution de l'esclave
+ tmp_macr_recal = self.Creation_Temporaire_Esclave()
+
+ # Creation du fichier .export de l'esclave
+ self.Creation_Fichier_Export_Esclave(tmp_macr_recal)
+
+ # Code_Aster installation
+ if os.environ.has_key('ASTER_ROOT'):
+ ASTER_ROOT = os.environ['ASTER_ROOT']
+ else:
+ import aster
+ ASTER_ROOT = os.path.join(aster.repout(), '..')
+ as_run = os.path.join(ASTER_ROOT, 'bin', 'as_run')
+
+ # General
+ resudir = None
+ clean = True
+ NMAX_SIMULT = self.NMAX_SIMULT
+
+ # Study
+ export = self.new_export
+
+ C.follow_output = self.follow_output
+
+ # Lancement des calculs
+ fonctionnelle, gradient = C.run(
+ # Current estimation
+ X0,
+ dX,
+
+ # Code_Aster installation
+ ASTER_ROOT = ASTER_ROOT,
+ as_run = as_run,
+
+ # General
+ resudir = resudir,
+ clean = clean,
+ info = info,
+ NMAX_SIMULT = NMAX_SIMULT,
+
+ # Study
+ export = export,
+
+ )
+
+
+ # ----------------------------------------------------------------------------
+ # Aiguillage vers INCLUDE
+ # ----------------------------------------------------------------------------
+ if self.LANCEMENT == 'INCLUSION':
+ C.UNITE_ESCL = self.UNITE_ESCL
+
+ # Lancement des calculs
+ fonctionnelle, gradient = C.run(
+ # Current estimation
+ X0,
+ dX,
+ # General
+ info,
+ )
+
+
+ # ----------------------------------------------------------------------------
+ # Sortie
+ # ----------------------------------------------------------------------------
+ if dX: self.evaluation_fonction += 1+ len(dX)
+ else: self.evaluation_fonction += 1
+
+ self.Lcalc = C.Lcalc
+
+ if not dX: return self.Lcalc[0], {}
+ else: return fonctionnelle, gradient
+
+
+ # ------------------------------------------------------------------------------
+ def Affiche_Param(self, val):
+ """ Affiche les parametres """
+ return Affiche_Param(self.para, val)
+
+
+ # ------------------------------------------------------------------------------
+ def calcul_F(self, val):
+ """
+ Calcul de F
+ """
+ UTMESS('I', 'RECAL0_25', valk=self.Affiche_Param(val) )
+
+ # Reset les variables deja calculees par les calculs precedents
+ self.reset()
+
+ # Calcul pour le jeu de parametre val
+ fonctionnelle, gradient = self.calcul_Aster(val, dX=None)
+
+ # Calcul de l'erreur par rapport aux donnees experimentale
+ E = CALC_ERROR(
+ experience = self.RESU_EXP,
+ X0 = val,
+ calcul = self.RESU_CALC,
+ poids = self.Simul.poids,
+ objective_type = 'vector',
+ info = self.INFO,
+ )
+ self.erreur = E.CalcError(self.Lcalc)
+
+ # norme de l'erreur
+ self.norme = NP.sum( [x**2 for x in self.erreur] )
+
+ if debug:
+ print "self.reponses=", self.reponses
+ print "F=", E.F
+ print "L_J=", E.L_J
+ print "L_J_init=", E.L_J_init
+ print "J=", E.J
+ print 'erreur=', self.erreur
+ print "norme de l'erreur=", self.norme
+ print "norme de J (fonctionnelle)=", str(E.J)
+
+ if self.INFO>=2:
+ UTMESS('I', 'RECAL0_30')
+ if self.evaluation_fonction >1: UTMESS('I', 'RECAL0_39', valk=str(self.evaluation_fonction))
+
+ if self.vector_output:
+ if self.INFO>=2: UTMESS('I', 'RECAL0_35', valr=self.norme)
+ return self.erreur
+ else:
+ if self.INFO>=2: UTMESS('I', 'RECAL0_36', valr=self.norme)
+ return self.norme
+
+
+ # ------------------------------------------------------------------------------
+ def calcul_F2(self, val):
+ """
+ Calcul de F (et de G) mais renvoit juste la fonctionnelle
+ Sert pour les algorithmes qui veulent une fonction ou F, une fonction pour G mais qu'on veut pouvoir tout calculer en distibue
+ """
+ a, b, c, d = self.calcul_FG(val)
+ if self.vector_output: return self.erreur
+ else: return self.norme
+
+
+ # ------------------------------------------------------------------------------
+ def calcul_FG(self, val):
+ """
+ Calcul de F et de G
+ """
+ UTMESS('I', 'RECAL0_26', valk=self.Affiche_Param(val) )
+
+ # Reset les variables deja calculees par les calculs precedents
+ self.reset()
+
+ # Calcul pour le jeu de parametres val
+ dX = len(val)*[self.PARA_DIFF_FINI]
+ fonctionnelle, gradient = self.calcul_Aster(val, dX)
+
+ # Calcul de l'erreur par rapport aux donnees experimentale
+ E = CALC_ERROR(
+ experience = self.RESU_EXP,
+ X0 = val,
+ calcul = self.RESU_CALC,
+ poids = self.Simul.poids,
+ objective_type = 'vector',
+ info = self.INFO,
+ )
+
+ self.erreur, self.residu, self.A_nodim, self.A = E.CalcSensibilityMatrix(Lcalc=self.Lcalc, val=val, dX=None, pas=self.PARA_DIFF_FINI)
+
+ if debug:
+ print "A_nodim=", self.A_nodim
+ print "self.A=", self.A
+ print "self.erreur=", self.erreur
+ print "self.residu=", self.residu
+ print "self.vector_output=", self.vector_output
+
+
+ if self.vector_output:
+ return self.erreur, self.residu, self.A_nodim, self.A
+ else:
+ # norme de l'erreur
+ self.norme = NP.dot(self.erreur, self.erreur)**0.5
+ self.norme_A_nodim = NP.zeros( (1,len(self.para)))
+ self.norme_A = NP.zeros( (1,len(self.para)))
+ for c in range(len(self.A[0,:])):
+ norme_A_nodim = 0
+ norme_A = 0
+ for l in range(len(self.A[:,0])):
+ norme_A_nodim += self.A_nodim[l,c] * self.A_nodim[l,c]
+ norme_A += self.A[l,c] * self.A[l,c]
+ self.norme_A_nodim[0,c] = math.sqrt( norme_A_nodim )
+ self.norme_A[0,c] = math.sqrt( norme_A )
+ return self.norme, self.residu, self.norme_A_nodim, self.norme_A
+
+
+
+ # ------------------------------------------------------------------------------
+ def calcul_G(self, val):
+ """
+ Calcul de G
+ """
+ UTMESS('I', 'RECAL0_27', valk=self.Affiche_Param(val) )
+
+ # Si le calcul Aster (et ses derivees) est deja effectue pour val on ne le refait pas
+ if not ( (self.val == val) and self.A):
+ self.erreur, self.residu, self.A_nodim, self.A = self.calcul_FG(val)
+ return NP.dot(NP.transpose(self.A), self.erreur)
+
+
+ # ------------------------------------------------------------------------------
+ def Creation_Temporaire_Esclave(self):
+ """
+ Creation du repertoire temporaire d'execution du calcul esclace
+ """
+ # Creation du repertoire temporaire
+ tmp_macr_recal = os.getcwd() + os.sep + 'tmp_macr_recal'
+# tmp_macr_recal = Random_Tmp_Name( prefix = os.getenv('HOME') + os.sep + 'tmp_macr_recal_' )
+ try: os.mkdir(tmp_macr_recal)
+ except: pass
+ if not os.path.exists(tmp_macr_recal): UTMESS('F','RECAL0_82',valk=tmp_macr_recal)
+ try: os.mkdir(tmp_macr_recal + os.sep + 'REPE_TABLE')
+ except: pass
+ if not os.path.exists(tmp_macr_recal + os.sep + 'REPE_TABLE'): UTMESS('F','RECAL0_82',valk=tmp_macr_recal + os.sep + 'REPE_TABLE')
+
+ return tmp_macr_recal
+
+
+ # ------------------------------------------------------------------------------
+ def Creation_Fichier_Export_Esclave(self, tmp_macr_recal):
+ """
+ Creation du fichier .export pour le calcul esclave
+ """
+
+ from asrun.profil import ASTER_PROFIL
+
+ # Recuperation du fichier .export
+ if self.export: export = self.export
+ else:
+ list_export = glob.glob('*.export')
+ if len(list_export) == 0: UTMESS('F','RECAL0_4')
+ elif len(list_export) >1: UTMESS('F','RECAL0_5')
+ export = list_export[0]
+
+ # On modifie le profil
+ prof = ASTER_PROFIL(export)
+
+ # En local
+ user_mach = ''
+
+ # Chaine user@hostname (pour les calculs distribues et en batch)
+ try: username = prof.param['username'][0]
+ except:
+ try: username = os.getlogin()
+ except:
+ import getpass
+ username = getpass.getuser()
+ user_mach_dist = "%s@%s:" % ( username, socket.gethostname() )
+
+
+ # On cherche s'il y a un fichier hostfile pour rajouter user@hostname
+ l_fr = getattr(prof, 'data')
+ l_tmp = l_fr[:]
+ for dico in l_tmp:
+ if dico['type']=='hostfile':
+ user_mach = user_mach_dist
+ break
+
+ # En distribue
+ if self.TEMPS: prof.param['tpsjob'] = str(self.TEMPS)
+ if self.MEMOIRE: prof.param['memjob'] = str(self.MEMOIRE)
+
+ # En batch et distribue
+ if self.MODE == 'BATCH':
+# user_mach = "%s@%s:" % ( prof.param['username'][0], socket.gethostname() )
+ user_mach = user_mach_dist
+ prof.param['mode'] = 'batch'
+ if self.mem_aster: prof.param['mem_aster'] = str(self.mem_aster)
+
+ # classe reservee sur la machine Aster
+ if self.CLASSE:
+ prof.param['classe'] = self.CLASSE
+
+ # xterm
+ if prof.param.has_key('xterm'):
+ del prof.param['xterm']
+ # memjeveux
+ prof.args['memjeveux'] = self.memjeveux_esclave
+
+ # fichier/répertoire
+ for lab in ('data', 'resu'):
+ l_fr = getattr(prof, lab)
+ l_tmp = l_fr[:]
+
+ for dico in l_tmp:
+
+ # répertoires
+ if dico['isrep']:
+
+ # base non prise en compte
+ if dico['type'] in ('base', 'bhdf'):
+ l_fr.remove(dico)
+
+ if lab == 'resu':
+ dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+
+ # fichiers
+ else:
+
+ # Nom du fichier .mess (pour recuperation dans REPE_OUT)
+ if dico['ul'] == '6':
+ self.nom_fichier_mess_fils = os.path.basename(dico['path'])
+
+ # Nom du fichier .resu (pour recuperation dans REPE_OUT)
+ if dico['ul'] == '8':
+ self.nom_fichier_resu_fils = os.path.basename(dico['path'])
+
+ # Ancien .comm non pris en compte
+ # Fichier d'unite logique UNITE_RESU (rapport de MACR_RECAL) non pris en compte
+ if dico['type'] == 'comm' or (dico['ul'] == str(self.UNITE_RESU) and lab == 'resu'):
+ l_fr.remove(dico)
+
+ # Fichier d'unite logique UL devient le nouveau .comm
+ elif dico['ul'] == str(self.UNITE_ESCL):
+ self.fichier_esclave = dico['path']
+ dico['type'] = 'comm'
+ dico['ul'] = '1'
+ dico['path'] = user_mach + os.path.join(os.getcwd(), 'fort.%d' % self.UNITE_ESCL)
+
+ # Tous les autres fichiers en Resultat
+ elif lab == 'resu':
+# if self.UNITE_GRAPHIQUE and dico['ul'] == str(self.UNITE_GRAPHIQUE): l_fr.remove(dico)
+# else:
+# dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+ l_fr.remove(dico)
+
+ # Tous les autres fichiers en Donnees
+ elif lab == 'data':
+ if dico['type'] not in ('exec', 'ele'):
+ if dico['ul'] != '0': # Traite le cas des sources python sourchargees
+ # Si distant/distribue on doit prendre les fichiers de donnes dans un endroit partage entre les machines/noeuds
+ if user_mach:
+ src = dico['path']
+ dst = os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+ try:
+ shutil.copyfile(src, dst)
+ dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+ except Exception, e:
+ print e
+ else:
+ dico['path'] = user_mach + os.path.join(os.getcwd(), 'fort.%s' % dico['ul'])
+
+ # sinon on garde la ligne telle quelle
+ setattr(prof, lab, l_fr)
+
+ # Ecriture du nouveau fichier export
+ prof.WriteExportTo(self.new_export)
+
+ if debug: os.system('cp ' + self.new_export + ' /tmp')
+ os.system('cp ' + self.new_export + ' /tmp')
+ #os.system('sleep 500')
+
+ # --FIN CLASSE ----------------------------------------------------------------------------
--- /dev/null
+#@ MODIF reca_controles Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 types
+import os
+import sys
+import pprint
+
+# Nom de la routine
+nompro = 'MACR_RECAL'
+
+from Noyau.N_types import is_float, is_str, is_enum
+
+
+#_____________________________________________
+#
+# 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 not is_enum(X):
+ txt="\nCette entrée: " +str(X)+" n'est pas une liste valide"
+ if(code_erreur == 1 ):
+ if not is_str(X):
+ 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 not is_float(X):
+ 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 = ""
+ txt_alarme = ""
+ try:
+ fichier = open('fort.'+str(UL),'r')
+ fic=fichier.read()
+ except:
+ txt += "\nImpossible d'ouvrir le fichier esclave declare avec l'unite logique " + str(UL)
+ return txt, txt_alarme
+ 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 += "\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_alarme += "\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, txt_alarme
+
+
+# ------------------------------------------------------------------------------
+def verif_valeurs_des_PARAMETRES(PARAMETRES):
+ """
+ On verifie que pour chaque PARAMETRES de l'optimisation
+ les valeurs entrées par l'utilisateur sont telles que :
+ val_inf<val_sup
+ val_init appartient à [borne_inf, borne_sup]
+ val_init!=0
+ borne_sup!=0
+ borne_inf!=0
+ """
+
+ txt = ""
+ # verification des bornes
+ for i in range(len(PARAMETRES)):
+ if( PARAMETRES[i][2] >PARAMETRES[i][3]):
+ txt=txt + "\nLa borne inférieure "+str(PARAMETRES[i][2])+" de "+PARAMETRES[i][0]+ "est plus grande que sa borne supérieure"+str(PARAMETRES[i][3])
+ # verification de l'encadrement de val_init
+ for i in range(len(PARAMETRES)):
+ if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
+ txt=txt + "\nLa valeur initiale "+str(PARAMETRES[i][1])+" de "+PARAMETRES[i][0]+ " n'est pas dans l'intervalle [borne_inf,born_inf]=["+str(PARAMETRES[i][2])+" , "+str(PARAMETRES[i][3])+"]"
+ # verification que val_init !=0
+ for i in range(len(PARAMETRES)):
+ if (PARAMETRES[i][1] == 0. ):
+ txt=txt + "\nProblème de valeurs initiales pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur initiale nulle mais un ordre de grandeur."
+ # verification que borne_sup !=0
+ for i in range(len(PARAMETRES)):
+ if (PARAMETRES[i][3] == 0. ):
+ txt=txt + "\nProblème de borne supérieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
+ # verification que borne_inf !=0
+ for i in range(len(PARAMETRES)):
+ if (PARAMETRES[i][2] == 0. ):
+ txt=txt + "\nProblème de borne inférieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
+ return txt
+
+
+# ------------------------------------------------------------------------------
+def verif_UNITE(GRAPHIQUE,UNITE_RESU):
+ """
+ On vérifie que les unités de résultat et
+ de graphique sont différentes
+ """
+ txt=""
+ if GRAPHIQUE:
+ 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,METHODE):
+ """
+ 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 = ""
+ texte_alarme = ""
+
+ # 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 commandes Esclave ASTER
+ if METHODE != 'EXTERNE': # pour celui-ci le fort.UL n'est pas l'esclave... voir comment faire
+ texte_fatal, texte_alarme = verif_fichier(UL,PARAMETRES,REPONSES)
+ texte += texte_fatal
+
+ # verification des valeurs des PARAMETRES entrées par l'utilisateur (pour fmin* les bornes ne sont pas prises en compte)
+ if METHODE == 'LEVENBERG':
+ texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
+
+ # verification des unités logiques renseignées par l'utilisateur
+ if METHODE != 'EXTERNE':
+ texte = texte + verif_UNITE(GRAPHIQUE,UNITE_RESU)
+
+ return texte, texte_alarme
+
--- /dev/null
+#@ MODIF reca_evol Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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.
+# ======================================================================
+#
+
+'''
+Le programme d'optimisation d'une fonctionelle base sur l'algorithm genetique,
+developpement issu du contrat PdM-AMA
+'''
+
+import numpy
+import math
+import random
+
+
+
+def evolutivo(fonc,val,nb_iter,err_min,nb_parents,nb_fils,sigma,borne_inf,borne_sup,graine):
+
+#initialisation du vecteur des parametres
+ par_ini=[]
+#les valeurs initiales des parametres sont recuperees
+ for ind in val:
+ if ind:
+ par_ini.append(ind)
+
+#valeur du critere d arret
+ val_crit=nb_iter
+
+#initialisation et remplisage du vecteur des parents
+ Parents_ini=[]
+ for ind in range(nb_parents):
+ Parents_ini.append(par_ini)
+ #P sera le vecteur des parents retourne par la fonction figli
+ P=[]
+ erreurs=[]
+ erreurs_ini=[]
+ #le premier vecteur d erreurs sera calcule par la fonction errore
+ #a partir des valeurs initiales des parents
+
+ # On affiche egalement la fenetre MAC pour un appariement manual
+ fonc.graph_mac=True
+ err_ini=fonc.calcul_F(par_ini)
+ #on rempli l'erreur pour chaque parent initial
+ for ind in range(nb_parents):
+ erreurs_ini.append(err_ini)
+ P.append(Parents_ini)
+ erreurs.append(erreurs_ini[:])
+ in_ciclo=True
+ iter=1
+ #ici on demarre la boucle de minimisation de la fonction erreur
+ while in_ciclo:
+ if graine != None: random.seed(graine)
+ F=fils(P[-1],nb_parents,nb_fils,sigma,borne_inf, borne_sup)
+
+ #on fait la selection des meilleurs fils - p
+ (p,err)=selection(fonc,F,P[-1],erreurs[-1],nb_parents)
+
+ #P est le nouveau jeu de parents
+ #attention on stocke ici tous l historique des parents et c'est le meme pour les erreurs dans erreurs
+ P.append(p)
+
+ erreurs.append(err)
+ #on lance un calcul avec le meilleur jeu de parametres juste pour l'appariement des MAC
+ fonc.graph_mac=True
+ err_mac=fonc.calcul_F(P[-1][0])
+ if erreurs[-1][0]<=err_min:
+ in_ciclo=False
+ iter+=1
+ if iter>val_crit:
+ in_ciclo=False
+
+ return P[-1][0]
+
+
+
+def selection(fonc,fils,parents,err_parents,nb_parents):
+
+ """
+ Selection des meilleurs fils a chaque iteration
+ """
+
+ famille=[]
+ err=[]
+ for ind in fils:
+ fonc.graph_mac=False
+ err.append(fonc.calcul_F(ind))
+ for ind in err_parents:
+ err.append(ind)
+ for ind in fils:
+ famille.append(ind)
+ for ind in parents:
+ famille.append(ind)
+
+ ordre=numpy.argsort(err).tolist()
+ fam_ordonne=[]
+ err_ordonne=[]
+ for ind in ordre:
+ fam_ordonne.append(famille[ind])
+ err_ordonne.append(err[ind])
+
+ return fam_ordonne[0:int(nb_parents)], err_ordonne[0:int(nb_parents)]
+
+
+
+
+def fils(parents,nb_parents,nb_fils,sigma,borne_inf, borne_sup):
+ """
+ Creation des fils
+ """
+
+ F=[]
+ for ind in range(int(math.floor(nb_fils/nb_parents))):
+ for ind2 in range(nb_parents):
+ F.append(genere_fils(parents[ind2],sigma,borne_inf, borne_sup))
+#le dernier parent est le plus prolific car il va completer le nombres de fils
+#mais il est aussi le meilleur parent car correspond a l'erreur minimale
+ for ind2 in range(nb_fils%nb_parents):
+ F.append(genere_fils(parents[ind2],sigma,borne_inf, borne_sup))
+
+ return F
+
+#les fils sont generes ici
+def genere_fils(parent,sigma,borne_inf, borne_sup):
+
+ """
+ Creation d'un seul fils avec prise en compte des bornes
+ """
+ errate=True
+ while errate:
+ errate=False
+#F est le vecteur de fils a remplir ici avec la fonction random
+#a partir des valeurs du parent courant
+ F=[]
+ for ind in parent:
+ F.append(ind+ind/100.*random.gauss(0,sigma))
+#la variable parametre initialise ici est un index pour defiler les valeurs de F
+ parametre=0
+ for ind in parent:
+ test1=F[parametre]>=borne_inf[parametre]
+ test2=F[parametre]<=borne_sup[parametre]
+ if test1 & test2:
+ pass
+ else:
+ errate=True
+# print "parametre hors bornes"
+ parametre+=1
+# print 'fils genere:',F
+ return F
+
--- /dev/null
+#@ MODIF reca_graphique Macro DATE 22/04/2010 AUTEUR ASSIRE A.ASSIRE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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, copy, Numeric, types
+import Cata
+from Cata.cata import DEFI_FICHIER, IMPR_FONCTION
+from Accas import _F
+
+try:
+ import Gnuplot
+except:
+ pass
+
+
+#_____________________________________________
+#
+# IMPRESSIONS GRAPHIQUES
+#_____________________________________________
+
+def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif):
+
+ if FORMAT=='XMGRACE':
+ for i in range(len(L_F)):
+ _tmp = []
+ courbe1 = res_exp[i]
+ _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1 } )
+ courbe2 = L_F[i]
+ _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2 } )
+
+ motscle2= {'COURBE': _tmp }
+ if interactif: motscle2['PILOTE']= 'INTERACTIF'
+ else: motscle2['PILOTE']= 'POSTSCRIPT'
+
+# DEFI_FICHIER(UNITE=int(UL_out), ACCES='NEW',)
+
+ IMPR_FONCTION(FORMAT='XMGRACE',
+ UNITE=int(UL_out),
+ TITRE='Courbe de : ' + reponses[i][0],
+ SOUS_TITRE='Iteration : ' + str(iter),
+ LEGENDE_X=reponses[i][1],
+ LEGENDE_Y=reponses[i][2],
+ **motscle2
+ );
+# DEFI_FICHIER(ACTION='LIBERER',UNITE=int(UL_out),)
+
+ elif FORMAT=='GNUPLOT':
+ 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'))
+
+ else:
+ pass
--- /dev/null
+#@ MODIF reca_interp Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# 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 numpy as NP
+
+from Utilitai.Utmess import UTMESS
+
+
+#===========================================================================================
+
+# INTERPOLATION, ETC....
+
+#--------------------------------------
+class Sim_exp :
+
+ def __init__ (self,result_exp,poids) :
+ self.resu_exp = result_exp
+ self.poids = poids
+
+ # ------------------------------------------------------------------------------
+ def InterpolationLineaire (self, x0, points) :
+ """
+ Interpolation Lineaire de x0 sur la fonction discrétisée yi=points(xi) i=1,..,n
+ """
+ # x0 = Une abscisse (1 colonne, 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 ( x0 < points[0][0] ) or ( x0 > points[n-1][0] ) :
+ UTMESS('F','RECAL0_48', valk=(str(x0), str(points[0][0]), str(points[n-1][0])))
+
+ i = 1
+ while x0 > points[i][0]:
+ i = i+1
+
+ y0 = (x0-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]
+
+ return y0
+
+
+
+
+ # ------------------------------------------------------------------------------
+ def DistVertAdimPointLigneBrisee (self, M, points) :
+ """
+ Distance verticale d'un point M à une ligne brisée composée de n 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
+
+
+ # ------------------------------------------------------------------------------
+ def _Interpole(self, F_calc,experience,poids) : #ici on passe en argument "une" experience
+ """
+ La Fonction Interpole interpole une et une seule F_calc sur F_exp et renvoie l'erreur seulement
+ """
+ n = 0
+ resu_num = F_calc
+ n_exp = len(experience) # nombre de points sur la courbe expérimentale num.i
+ stockage = NP.ones(n_exp) # matrice de stockage des erreurs en chaque point
+ for j in xrange(n_exp) :
+ d = self.DistVertAdimPointLigneBrisee(experience[j], resu_num)
+ if NP.all(experience[j][1] != 0.):
+ stockage[n] = d/experience[j][1]
+ else:
+ stockage[n] = d
+
+ n = n + 1 # on totalise le nombre de points valables
+ err = NP.ones(n, dtype=float)
+
+ for i in xrange(n) :
+ err[i] = poids*stockage[i]
+ return err
+
+
+ # ------------------------------------------------------------------------------
+ def multi_interpole(self, L_F, reponses):
+ """
+ Cette fonction appelle la fonction interpole et retourne les sous-fonctionnelles J et l'erreur.
+ On interpole toutes les reponses une à une en appelant 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 = NP.sum(dim)
+ L_J = self.calcul_J(L_erreur)
+ a=0
+ erreur = NP.zeros((dim_totale))
+ 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
+
+
+ # ------------------------------------------------------------------------------
+ def multi_interpole_sensib(self, L_F, reponses):
+ """
+ Cette fonction retourne seulement l'erreur, elle est appelée dans la methode sensibilité.
+ On interpole toutes les reponses une à une en appelant 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
+ 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=None):
+ """
+ Cette fonction calcul une valeur normée de J
+ """
+ for i in range(len(L_J)):
+ if NP.all(L_J_init[i] != 0.):
+ L_J[i] = L_J[i]/L_J_init[i]
+ else:
+ if unite_resu:
+ fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+ fic.write(message)
+ fic.close()
+ UTMESS('F', "RECAL0_44", valr=L_J_init)
+ return
+
+ J = NP.sum(L_J)
+ J = J/len(L_J)
+ return J
+
--- /dev/null
+#@ MODIF reca_mac Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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.
+# ======================================================================
+'''
+On regroupe ici les fonctions Python necessaires au lancement
+de la fenetre graphique d'appariement manuel des MAC pour le
+recalage en dynamique
+'''
+import numpy as NP
+
+from Tkinter import Tk, Frame, StringVar, Entry, Label, Button
+from Meidee.modes import MacWindowFrame
+
+def extract_mac_array( mac_mode ):
+
+ data1 = mac_mode.EXTR_TABLE().Array('NUME_MODE_1','MAC')
+ data2 = mac_mode.EXTR_TABLE().Array('NUME_MODE_2','MAC')
+
+ N = int(NP.maximum.reduce(data1[:,0]))
+ M = int(NP.maximum.reduce(data2[:,0]))
+ mac = NP.zeros( (N,M) )
+ for i in range(data1.shape[0]):
+ i1 = int(data1[i,0])-1
+ i2 = int(data2[i,0])-1
+ mac[ i1, i2 ] = data1[i,1]
+ return mac
+
+
+def get_modes(resu):
+
+ afreq = resu.LIST_PARA()['FREQ']
+
+ return afreq
+
+
+class fenetre_mac:
+
+ def __init__(self,resu1,resu2,mac):
+ self.resu1 = resu1
+ self.resu2 = resu2
+ self.mac = mac
+ self.root = Tk()
+
+ nom1 = resu1.nom
+ nom2 = resu2.nom
+ titre = "MAC pour la base " + nom1 + " et " + nom2
+ size = (20,300)
+
+ # la fenetre de MAC
+ mac_win = MacWindowFrame( self.root, titre, nom1, nom2, size)
+ mac_win.grid(row=0,column=0)
+
+ self.freq1 = get_modes(resu1)
+ self.freq2 = get_modes(resu2)
+ # la variable NUMERIQUE qui contient ces memes listes. On remplit
+ # ces valeurs quand on ferme la fenetre
+ self.l1 = None
+ self.l2 = None
+ # la variable GRAPHIQUE qui donne le contenu des listes
+ self.var_l1 = StringVar()
+ self.var_l2 = StringVar()
+
+ mac_win.set_modes(self.freq1,self.freq2,self.mac)
+
+ # Une deuxieme fentre, dans laquelle on peut modifier l'appariement des modes
+ f = Frame(self.root)
+ f.grid(row=1, column=0,sticky='news')
+ f.columnconfigure(0,weight=1)
+ f.columnconfigure(1,weight=4)
+
+ Label(f,text="Liste de mode 1").grid(row=0,column=0,sticky='e')
+ l1 = Entry(f, textvariable=self.var_l1 )
+ l1.grid(row=0,column=1,sticky='ew')#,columnspan=3)
+ Label(f,text="Liste de mode 2").grid(row=1,column=0,sticky='e')
+ l2 = Entry(f, textvariable=self.var_l2 )
+ l2.grid(row=1,column=1,sticky='ew')#,columnspan=3)
+ close = Button(f,text='Fermer',command=self.close_win)
+
+ close.grid(row=2,column=1,sticky='e')
+
+ self.set_default_pair()
+
+ self.root.mainloop()
+
+ def get_pair(self):
+ """rend une double liste donnant les appariements de modes"""
+ return [self.var_l1.get(),self.var_l2.get()]
+
+ def set_pair(self,liste):
+ """affiche une liste d'appariement donnee"""
+ self.var_l1.set(liste[0])
+ self.var_l2.set(liste[1])
+
+ def set_default_pair(self):
+ """ affiche la liste d'appariement par defaut. Le nombre de modes
+ correspond au plus petit nombre de modes entre resu1 et resu2"""
+ nb_mod = min(len(self.freq1),len(self.freq2))
+ self.var_l1.set(range(1,nb_mod+1))
+ self.var_l2.set(range(1,nb_mod+1))
+
+ def close_win(self):
+ self.l1 = self.var_l1.get()
+ self.l2 = self.var_l2.get()
+ self.root.quit()
+
+
+ def get_list(self):
+ exec('l1='+self.l1)
+ exec('l2='+self.l2)
+ return l1,l2
+
+
+
--- /dev/null
+#@ MODIF reca_message Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# 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 numpy as NP
+from Utilitai.Utmess import UTMESS, MessageLog
+from recal import Affiche_Param
+#===========================================================================================
+
+
+# AFFICHAGE DES MESSAGES
+
+class Message :
+ """
+ classe gérant l'affichage des messages concernant le déroulement de l'optmisation
+ """
+
+ # ------------------------------------------------------------------------------
+ def __init__(self,para,val_init,resu_exp,ul_out):
+ self.nom_para = para
+ self.resu_exp = resu_exp
+ self.val_init = val_init
+ self.resu_exp = resu_exp
+ self.ul_out = ul_out
+
+
+ # ------------------------------------------------------------------------------
+ def get_filename(self):
+ return os.getcwd()+'/fort.'+str(self.ul_out)
+
+
+ # ------------------------------------------------------------------------------
+ def initialise(self):
+ """ Initialisation du fichier """
+ UTMESS('I','RECAL0_1', cc=self.get_filename())
+
+
+ # ------------------------------------------------------------------------------
+ def affiche_valeurs(self,val):
+ """ Affichage de la valeur des parametres """
+ txt = Affiche_Param(self.nom_para, val)
+ UTMESS('I','RECAL0_32', valk=txt, cc=self.get_filename())
+
+
+ # ------------------------------------------------------------------------------
+ def affiche_fonctionnelle(self,J):
+ """ Affichage de la fonctionnelle """
+ UTMESS('I','RECAL0_33', valr=J, cc=self.get_filename())
+
+
+ # ------------------------------------------------------------------------------
+ def affiche_result_iter(self, iter, J, val, residu, Act=[], ecart_para=None, ecart_fonc=None):
+ """ Affichage du message recapitulatif de l'iteration
+ """
+ UTMESS('I','RECAL0_30')
+ UTMESS('I','RECAL0_79', cc=self.get_filename())
+ UTMESS('I','RECAL0_31', vali=iter, cc=self.get_filename())
+ self.affiche_fonctionnelle(J)
+ UTMESS('I','RECAL0_34', valr=residu, cc=self.get_filename())
+ if ecart_para: UTMESS('I','RECAL0_37', valr=ecart_para, cc=self.get_filename())
+ if ecart_fonc: UTMESS('I','RECAL0_38', valr=ecart_fonc, cc=self.get_filename())
+
+ # Affichage des parametres
+ self.affiche_valeurs(val)
+
+ # Si les parametres sont en butee
+ if (len(Act)!=0):
+ lpara = ' '.join([self.nom_para[i] for i in Act])
+ if (len(Act)==1):
+ UTMESS('I','RECAL0_46', valk=lpara, cc=self.get_filename())
+ else:
+ UTMESS('I','RECAL0_47', valk=lpara, cc=self.get_filename())
+
+ UTMESS('I','RECAL0_80', cc=self.get_filename())
+
+
+ # ------------------------------------------------------------------------------
+ def affiche_etat_final_convergence(self,iter,max_iter,iter_fonc,max_iter_fonc,prec,residu,Act=[]):
+ """ Affichage du message recapitulatif a la fin du processus d'optimisation
+ """
+ if ((iter < max_iter) and (residu <= prec) and (iter_fonc < max_iter_fonc) ):
+ UTMESS('I','RECAL0_56', cc=self.get_filename())
+ if (len(Act)!=0): UTMESS('I','RECAL0_58', cc=self.get_filename())
+ else:
+ UTMESS('I','RECAL0_57', cc=self.get_filename())
+ if (iter >= max_iter): UTMESS('I','RECAL0_55', cc=self.get_filename())
+ if (iter_fonc >= max_iter_fonc): UTMESS('I','RECAL0_54', cc=self.get_filename())
+
+ UTMESS('I','RECAL0_80', cc=self.get_filename())
+
+
+ # ------------------------------------------------------------------------------
+ def affiche_calcul_etat_final(self,para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible):
+ """ Affichage des informations de l'optimisation (valeurs propres, vecteurs propres, etc.)
+ """
+ UTMESS('I','RECAL0_60', valk=str(valeurs_propres), cc=self.get_filename())
+ UTMESS('I','RECAL0_61', valk=str(vecteurs_propres), cc=self.get_filename())
+ UTMESS('I','RECAL0_62', cc=self.get_filename())
+
+ if (len(sensible)!=0 or len(insensible)!=0):
+ UTMESS('I','RECAL0_63', cc=self.get_filename())
+
+ # Parametres sensibles
+ if (len(sensible)!=0):
+ UTMESS('I','RECAL0_64', cc=self.get_filename())
+ k=0
+ for i in sensible:
+ k=k+1
+ colonne=vecteurs_propres[:,i]
+ numero=NP.nonzero(NP.greater(abs(colonne/max(abs(colonne))),1.E-1))[0]
+ txt = '\n '+str(k)+') '
+ for j in numero:
+ txt += '%+3.1E ' %colonne[j]+'* '+para[j]+' '
+ UTMESS('I','RECAL0_65', valk=(txt, str(valeurs_propres[i])), cc=self.get_filename())
+
+ # Parametres insensibles
+ if (len(insensible)!=0):
+ UTMESS('I','RECAL0_66', cc=self.get_filename())
+ k=0
+ for i in insensible:
+ k=k+1
+ colonne=vecteurs_propres[:,i]
+ numero=NP.nonzero(NP.greater(abs(colonne/max(abs(colonne))),1.E-1))[0]
+ txt = '\n '+str(k)+') '
+ for j in numero:
+ txt += '%+3.1E ' %colonne[j]+'* '+para[j]+' '
+ UTMESS('I','RECAL0_65', valk=(txt, str(valeurs_propres[i])), cc=self.get_filename())
+
+ if (len(sensible)!=0 or len(insensible)!=0):
+ UTMESS('I','RECAL0_62', cc=self.get_filename())
+
--- /dev/null
+#@ MODIF reca_utilitaires Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 copy
+import os
+import string
+import types
+import sys
+import glob
+
+import numpy as NP
+
+try: import Gnuplot
+except: pass
+
+try:
+ import aster
+ CPU_Exception = aster.ArretCPUError
+ from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS, MessageLog
+except:
+ CPU_Exception = StandardError
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+#_____________________________________________
+#
+# DIVERS UTILITAIRES POUR LA MACRO
+#_____________________________________________
+
+
+def transforme_list_Num(parametres,res_exp):
+ """
+ Transforme les données entrées par l'utilisateur en tableau numpy
+ """
+
+ dim_para = len(parametres) #donne le nb de parametres
+ val_para = NP.zeros(dim_para)
+ borne_inf = NP.zeros(dim_para)
+ borne_sup = NP.zeros(dim_para)
+ 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):
+ """
+ Fonction qui detruit les concepts créés
+ """
+ liste_concepts=mes_concepts(base=self.parent)
+ for e in liste_concepts:
+ nom = string.strip(e)
+ DETRUIRE( OBJET =self.g_context['_F'](CHAINE = nom), INFO=1, ALARME='NON')
+ if self.jdc.g_context.has_key(nom) : del self.jdc.g_context[nom]
+ del(liste_concepts)
+
+
+# ------------------------------------------------------------------------------
+def Random_Tmp_Name(prefix=None):
+ crit = False
+ while crit == False:
+ nombre = int(random.random()*10000000)
+ if prefix: fic = prefix + str(nombre)
+ else:
+ if os.environ.has_key('TEMP'): fic = os.path.join( os.environ['TEMP'], 'file%s' % str(nombre) )
+ else: fic = '/tmp/file' + str(nombre)
+ if not os.path.isfile(fic): crit = True
+ return fic
+
+
+
+
+#_____________________________________________
+#
+# CALCUL DU TEMPS CPU RESTANT
+#_____________________________________________
+
+
+def temps_CPU(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
+ msg = MessageLog.GetText('F', 'RECAL0_53')
+ raise CPU_Exception, msg
+
+ return restant,temps_iter,err
+
+
+
+
+#_____________________________________________
+#
+# IMPRESSIONS GRAPHIQUES
+#_____________________________________________
+
+
+def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, pilote, fichier=None, INFO=0):
+
+ if iter: txt_iter = 'Iteration : ' + str(iter)
+ else: txt_iter = ''
+
+ # Le try/except est la pour eviter de planter betement dans un trace de courbes (DISPLAY non defini, etc...)
+ try:
+ if FORMAT=='XMGRACE':
+ for i in range(len(L_F)):
+ _tmp = []
+ courbe1 = res_exp[i]
+ _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1, 'LEGENDE' : 'Expérience'} )
+ courbe2 = L_F[i]
+ _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2, 'LEGENDE' : 'Calcul'} )
+
+ motscle2= {'COURBE': _tmp }
+ motscle2['PILOTE']= pilote
+
+ IMPR_FONCTION(FORMAT='XMGRACE',
+ UNITE=int(UL_out),
+ TITRE='Courbe : ' + reponses[i][0],
+ SOUS_TITRE=txt_iter,
+ LEGENDE_X=reponses[i][1],
+ LEGENDE_Y=reponses[i][2],
+ **motscle2
+ );
+ dic = {'' : '',
+ 'POSTSCRIPT' : '.ps',
+ 'EPS' : '.eps',
+ 'MIF' : '.mif',
+ 'SVG' : '.svg',
+ 'PNM' : '.pnm',
+ 'PNG' : '.png',
+ 'JPEG' : '.jpg',
+ 'PDF' : '.pdf',
+ 'INTERACTIF' : '.agr'
+ }
+ ext = dic[pilote]
+ if ext!='':
+ os.system('mv ./fort.%s ./REPE_OUT/courbes_%s_iter_%s%s' % (str(UL_out), reponses[i][0], str(iter), ext ) )
+
+ elif FORMAT=='GNUPLOT':
+
+ if fichier:
+ if INFO>=2: UTMESS('I','RECAL0_41',valk=fichier )
+ # On efface les anciens graphes
+ liste = glob.glob(fichier + '*.ps')
+ for fic in liste:
+ try: os.remove(fic)
+ except: pass
+
+ graphe=[]
+ impr=Gnuplot.Gnuplot()
+ Gnuplot.GnuplotOpts.prefer_inline_data=1
+ impr('set data style linespoints')
+ impr('set grid')
+ impr('set pointsize 1.')
+ impr('set terminal postscript color')
+ impr('set output "fort.'+str(UL_out)+'"')
+
+ for i in range(len(L_F)):
+ graphe.append(Gnuplot.Gnuplot(persist=0))
+ graphe[i]('set data style linespoints')
+ graphe[i]('set grid')
+ graphe[i]('set pointsize 1.')
+ graphe[i].xlabel(reponses[i][1])
+ graphe[i].ylabel(reponses[i][2])
+ graphe[i].title(reponses[i][0]+' ' + txt_iter)
+ graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+ if pilote=='INTERACTIF':
+ graphe[i]('pause 5')
+ else:
+ if fichier:
+ if INFO>=2: UTMESS('I','RECAL0_41',valk=fichier + '_' + str(i) + '.ps' )
+ graphe[i].hardcopy(fichier + '_' + str(i) + '.ps', enhanced=1, color=1)
+
+ 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'))
+
+ except Exception, err:
+ UTMESS('A','RECAL0_42',valk=str(err) )
+
--- /dev/null
+#@ MODIF recal Macro DATE 26/05/2010 AUTEUR ASSIRE A.ASSIRE
+# -*- 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.
+# ======================================================================
+
+
+#___________________________________________________________________________
+#
+# MODULE DE CALCUL DISTRIBUE POUR MACR_RECAL
+#
+# Utilisable en mode EXTERNE, voir les flags avec "python recal.py -h"
+#___________________________________________________________________________
+
+
+import os
+import sys
+import shutil
+import tempfile
+import glob
+import math
+import copy
+import re
+import platform
+from math import log10
+
+import numpy as NP
+
+
+# Importation de commandes Aster
+try:
+ import aster
+ import Macro
+ from Accas import _F
+except ImportError:
+ pass
+
+include_pattern = "# -->INCLUDE<--"
+debug = False
+
+# -------------------------------------------------------------------------------
+# -------------------------------------------------------------------------------
+def get_absolute_path(path):
+ """Retourne le chemin absolu en suivant les liens éventuels.
+ """
+ if os.path.islink(path):
+ path = os.path.realpath(path)
+ res = os.path.normpath(os.path.abspath(path))
+ return res
+
+# -------------------------------------------------------------------------------
+#if os.environ.has_key('bibpytdir'): sys.path.append( os.environ['bibpytdir'] )
+
+# recupere "bibpyt" à partir de "bibpyt/Macro/recal.py"
+sys.path.append(get_absolute_path(os.path.join(sys.argv[0], '..', '..')))
+
+try:
+ from Utilitai.Utmess import UTMESS
+except:
+ def UTMESS(code='I', txt='',valk='', vali='', valr=''):
+ print txt, valk, vali, valr
+ if code=='F': sys.exit()
+
+
+# # -------------------------------------------------------------------------------
+# def find_parameter(content, param):
+# """
+# Return the lowest index in content where param is found and
+# the index of the end of the command.
+# """
+# pos, endpos = -1, -1
+# re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+# mat_start = re_start.search(content)
+# if mat_start is not None:
+# pos = mat_start.start()
+# endpos = search_enclosed(content, pos)
+# return pos, endpos
+
+
+
+# -------------------------------------------------------------------------------
+def find_parameter(content, param):
+ """
+ Supprime les parametres du fichier de commande
+ """
+ re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+ l=[]
+ for line in content.split('\n'):
+ mat_start = re_start.search(line)
+ if mat_start is None: l.append(line)
+ return '\n'.join(l)
+
+
+# -------------------------------------------------------------------------------
+def Affiche_Param(para, val):
+ """Affiche les parametres
+ """
+ t = []
+ for p, v in zip(para, val):
+ t.append( " %s : %s" % ( p.ljust(9), v) )
+ return '\n'.join(t)
+
+
+# -------------------------------------------------------------------------------
+def make_include_files(UNITE_INCLUDE, calcul, parametres):
+ """ Module permettant de generer les fichiers a inclure (mode INCLUSION)
+ """
+
+# # Importation de commandes Aster
+# try:
+# import aster
+# import Macro
+# from Accas import _F
+# from Cata.cata import *
+# except ImportError:
+# raise "Le mode INCLUSION doit etre lance depuis Aster"
+
+ try:
+ ASTER_ROOT = os.path.join(aster.repout, '..')
+ sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+ sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+ except: pass
+ try:
+ from asrun.utils import find_command, search_enclosed
+ except Exception, e:
+ print e
+ UTMESS('F','RECAL0_99')
+
+
+ # ----------------------------------------------------------------------------
+ # Preparation des fichiers
+ # ----------------------------------------------------------------------------
+ liste_reponses = []
+ for reponse in [ x[0] for x in calcul ]:
+ if not reponse in liste_reponses: liste_reponses.append(reponse)
+
+ try:
+ old = "fort.%s" % UNITE_INCLUDE
+ pre = "fort.%s.pre" % UNITE_INCLUDE
+ new = "fort.%s.new" % UNITE_INCLUDE
+
+ # Lecture du fichier
+ f=open(old, 'r')
+ newtxt = f.read()
+ f.close()
+
+ # On retire la commande DEBUT
+ pos, endpos = find_command(newtxt, "DEBUT")
+ if endpos!=-1: newtxt = newtxt[endpos+1:]
+ if newtxt[0]==';': newtxt = newtxt[1:] # Bug dans find_command si la commande se termine par un ";"
+
+ # On retire les parametres
+ list_params = [x[0] for x in parametres]
+ for param in list_params:
+ newtxt = find_parameter(newtxt, param)
+
+ # Isole la partie a inclure si elle est specifiee
+ n = newtxt.find(include_pattern)
+ pretxt = None
+ if n!=-1:
+ pretxt = newtxt[:n]
+ pretxt = "# -*- coding: iso-8859-1 -*-\n" + pretxt
+ # Ecriture du nouveau fichier
+ fw=open(pre, 'w')
+ fw.write(pretxt)
+ fw.close()
+ newtxt = newtxt[n+len(include_pattern):]
+
+ # Retire la commande FIN
+ pos, endpos = find_command(newtxt, "FIN")
+ if pos!=-1: newtxt = newtxt[:pos]
+
+ # Ajoute un global pour ramener les courbes dans l'espace Aster
+ newtxt = "global %s\n" % ','.join(liste_reponses) + newtxt
+
+ # Ajoute un encodage pour eviter les erreurs dues aux accents (ssna110a par exemple)
+ newtxt = "# -*- coding: iso-8859-1 -*-\n" + newtxt
+
+ # Ecriture du nouveau fichier
+ fw=open(new, 'w')
+ fw.write(newtxt)
+ fw.close()
+ except Exception, e:
+ raise e
+
+ return
+
+
+# -------------------------------------------------------------------------------
+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( OBJET =self.g_context['_F'](CHAINE = nom), INFO=2)
+ if self.jdc.g_context.has_key(nom) : del self.jdc.g_context[nom]
+ del(liste_concepts)
+
+
+# -------------------------------------------------------------------------------
+def get_tables(tables_calc, tmp_repe_table, prof):
+ """ Recupere les resultats Aster (Table Aster -> numpy)
+ """
+ assert (tables_calc is not None)
+ assert (tmp_repe_table is not None)
+
+ # Import du module lire_table
+ if os.environ.has_key('ASTER_ROOT'):
+ version = prof['version'][0]
+ bibpyt = os.path.join(os.environ['ASTER_ROOT'], version, 'bibpyt')
+ sys.path.append(bibpyt)
+ for mdl in glob.glob(os.path.join(bibpyt, '*')):
+ sys.path.append(os.path.join(os.environ['ASTER_ROOT'], version, 'bibpyt', mdl))
+ try:
+ from lire_table_ops import lecture_table
+ except:
+ UTMESS('F','RECAL0_23')
+
+ reponses = tables_calc
+ Lrep=[]
+ for i in range(len(reponses)):
+ _fic_table = tmp_repe_table + os.sep + "fort."+str(int(100+i))
+
+ try:
+ f=open(_fic_table,'r')
+ texte=f.read()
+ f.close()
+ except Exception, err:
+ ier=1
+ UTMESS('F','RECAL0_24',valk=str(err))
+
+ try:
+ table_lue = lecture_table(texte, 1, ' ')
+ list_para = table_lue.para
+ tab_lue = table_lue.values()
+ except Exception, err:
+ ier=1
+ else:
+ ier=0
+
+ if ier!=0 : UTMESS('F','RECAL0_24',valk=str(err))
+
+ F = table2numpy(tab_lue, list_para, reponses, i)
+ Lrep.append(F)
+
+
+ return Lrep
+
+
+# --------------------------------------------------------------------------------------------------
+def table2numpy(tab_lue, list_para, reponses, i):
+ """ Extraction des resultats depuis la table Aster
+ """
+ try:
+ nb_val = len(tab_lue[ list_para[0] ])
+ F = NP.zeros((nb_val,2))
+ for k in range(nb_val):
+ F[k][0] = tab_lue[ str(reponses[i][1]) ][k]
+ F[k][1] = tab_lue[ str(reponses[i][2]) ][k]
+ except Exception, err:
+ UTMESS('F','RECAL0_24',valk=str(err))
+ return F
+
+
+# --------------------------------------------------------------------------------------------------
+def Ecriture_Fonctionnelle(output_file, type_fonctionnelle, fonctionnelle):
+
+ try: os.remove(output_file)
+ except: pass
+
+ f=open(output_file, 'w')
+ if type_fonctionnelle == 'vector':
+ try: fonctionnelle = fonctionnelle.tolist()
+ except: pass
+ fonctionnelle = str(fonctionnelle).replace('[','').replace(']','').replace('\n', ' ')
+ f.write( str(fonctionnelle) )
+ f.close()
+
+
+# --------------------------------------------------------------------------------------------------
+def Ecriture_Derivees(output_file, derivees):
+
+ try: os.remove(output_file)
+ except: pass
+
+ # on cherche a imprimer la gradient calcule a partir de Fcalc
+ if type(derivees) in [list, tuple]:
+ t = []
+ for l in derivees:
+ l = str(l).replace('[', '').replace(']', '')
+ t.append( l )
+ txt = '\n'.join(t)
+
+ # On cherche a imprimer la matrice des sensibilite (A ou A_nodim)
+ elif type(derivees) == NP.ndarray:
+ t = []
+ a = derivees
+ for c in range(len(a[0,:])):
+ l = a[:,c].tolist()
+ l = str(l).replace('[', '').replace(']', '')
+ t.append( l )
+ txt = '\n'.join(t)
+
+ else: raise "Wrong type for gradient !"
+
+ # Ecriture
+ f=open(output_file, 'w')
+ f.write(txt)
+ f.close()
+
+
+
+# --------------------------------------------------------------------------------------------------
+# --------------------------------------------------------------------------------------------------
+class CALCULS_ASTER:
+ """
+ Classe gérant les calculs Aster (distribues ou include)
+ """
+
+ # ---------------------------------------------------------------------------
+ def __init__(self,
+
+ # MACR_RECAL inputs are optional here (if passed to self.run methods)
+ parametres = None,
+ calcul = None,
+ experience = None,
+ LANCEMENT = 'DISTRIBUTION',
+ jdc = None,
+ ):
+
+ self.parametres = parametres
+ self.calcul = calcul
+ self.experience = experience
+ #self.eval_esclave = mode_esclave
+ self.LANCEMENT = LANCEMENT
+ self.UNITE_ESCL = None
+ self.UNITE_INCLUDE = None
+ self.ASTER_ROOT = None
+
+ self.jdc = jdc
+
+ self.list_params = [x[0] for x in parametres]
+ self.list_params.sort()
+
+ # Valable uniquement pour le mode INCLUDE
+ self.pre = None
+ self.pretxt = None
+ self.new = None
+ self.newtxt = None
+
+ # Mode dynamique desactive par defaut
+ self.SetDynamiqueMode(None, None)
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ def SetDynamiqueMode(self, DYNAMIQUE, graph_mac):
+ self.DYNAMIQUE = DYNAMIQUE
+ self.graph_mac = graph_mac
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------------------------------------
+ def run(self,
+
+ # Current estimation
+ X0,
+ dX = None,
+
+ # Code_Aster installation
+ ASTER_ROOT = None,
+ as_run = None,
+
+ # General
+ resudir = None,
+ clean = True,
+ info = None,
+ NMAX_SIMULT = None,
+
+ # Study
+ export = None,
+
+ # MACR_RECAL inputs
+ parametres = None,
+ calcul = None,
+ experience = None,
+ ):
+
+ # Current estimation
+ self.X0 = X0
+ self.dX = dX
+
+ # Code_Aster installation
+ self.ASTER_ROOT = ASTER_ROOT
+ self.as_run = as_run
+
+ # General
+ self.resudir = resudir
+ self.clean = clean
+ self.info = info
+ if not NMAX_SIMULT: NMAX_SIMULT = 0
+ self.NMAX_SIMULT = NMAX_SIMULT
+
+ # Study
+ self.export = export
+
+ # MACR_RECAL inputs
+ if parametres: self.parametres = parametres
+ if calcul: self.calcul = calcul
+ if experience: self.experience = experience
+
+ parametres = self.parametres
+ calcul = self.calcul
+ experience = self.experience
+
+ list_params = self.list_params
+
+ if dX: CalcGradient = True
+ else: CalcGradient = False
+ self.CalcGradient = CalcGradient
+
+ self.list_diag = []
+
+ # Pour le moment on conserve un seul fichier
+ self.UNITE_INCLUDE = self.UNITE_ESCL
+
+
+ # ----------------------------------------------------------------------------
+ # Liste de tous les jeux de parametres (initial + differences finies)
+ # ----------------------------------------------------------------------------
+ list_val = []
+
+ # Dictionnaire des parametres du point courant
+ dic = dict( zip( list_params, X0 ) )
+ list_val.append( dic )
+
+ # Calcul du gradient (perturbations des differences finies)
+ if CalcGradient:
+ UTMESS('I','RECAL0_16')
+ # Dictionnaires des parametres des calculs esclaves
+ for n in range(1,len(dX)+1):
+ l = [0] * len(dX)
+ l[n-1] = dX[n-1]
+ X = [ X0[i] * (1+l[i]) for i in range(len(dX)) ]
+ dic = dict( zip( list_params, X ) )
+ list_val.append( dic )
+
+
+ # ----------------------------------------------------------------------------
+ # Aiguillage vers INCLUDE
+ # ----------------------------------------------------------------------------
+ if self.LANCEMENT == 'INCLUSION':
+ UTMESS('I','RECAL0_29', valk=self.LANCEMENT)
+ fonctionnelle, gradient = self.run_include(list_val)
+
+
+ # ----------------------------------------------------------------------------
+ # Aiguillage vers ASRUN distribue
+ # ----------------------------------------------------------------------------
+ elif self.LANCEMENT == 'DISTRIBUTION':
+ UTMESS('I','RECAL0_29', valk=self.LANCEMENT)
+ fonctionnelle, gradient = self.run_distrib(list_val)
+
+
+ # ----------------------------------------------------------------------------
+ # Erreur d'aiguillage
+ # ----------------------------------------------------------------------------
+ else:
+ raise "Erreur : mode %s inconnu!" % self.LANCEMENT
+
+
+ #sys.exit()
+ # ----------------------------------------------------------------------------
+ # Sortie
+ # ----------------------------------------------------------------------------
+ return fonctionnelle, gradient
+
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------------------------------------
+ def run_include(self,list_val):
+ """ Module permettant de lancer N+1 calculs via un mecanisme d'include
+ """
+
+# # Importation de commandes Aster
+# try:
+# import aster
+# import Macro
+# from Accas import _F
+# from Cata import cata
+# from Cata.cata import *
+# except ImportError:
+# raise "Simu_point_mat doit etre lance depuis Aster"
+
+ try:
+ import aster
+ import Macro
+ from Cata import cata
+ from Cata.cata import OPER, MACRO
+ from Accas import _F
+
+ # Declaration de toutes les commandes Aster
+ import cata
+ for k,v in cata.__dict__.items() :
+ #print k,v
+ if isinstance(v, (OPER, MACRO)):
+ #print k,v
+ #self.jdc.current_context[k]= v
+ exec("from Cata.cata import %s" % k)
+ #self.jdc.current_context['_F']=cata.__dict__['_F']
+ except Exception, e:
+ raise "Le mode INCLUDE doit etre lance depuis Aster : \nErreur : " % e
+
+
+ list_params = self.list_params
+ calcul = self.calcul
+ reponses = self.calcul
+
+# AA : marche pas car on peut oublier des courbes, tant pis on refait des extract en trop..
+# liste_reponses = []
+# for reponse in [ x[0] for x in calcul ]:
+# if not reponse in liste_reponses: liste_reponses.append(reponse)
+
+ liste_reponses = [ x[0] for x in calcul ]
+
+
+ # ----------------------------------------------------------------------------
+ # Boucle sur les N+1 calculs
+ # ----------------------------------------------------------------------------
+ Lcalc = []
+ for i in range(len(list_val)):
+ params = list_val[i]
+
+
+ # ----------------------------------------------------------------------------
+ # Affectation des valeurs des parametres
+ # ----------------------------------------------------------------------------
+ for nompara in list_params:
+ valpara = params[nompara]
+ exec( "%s=%s" % (nompara, valpara) ) # YOUN__ = X0[0], DSDE__ = X0[1], ...
+
+
+ # ----------------------------------------------------------------------------
+ # Affichage des parametres du calcul courant
+ # ----------------------------------------------------------------------------
+ tpara = Affiche_Param(list_params, [ params[x] for x in list_params] )
+ if i==0: UTMESS('I', 'RECAL0_67', valk=tpara)
+ else: UTMESS('I', 'RECAL0_68', valk=(tpara, list_params[i-1]) )
+
+
+ # ----------------------------------------------------------------------------
+ # Lancement du calcul (par un include)
+ # ----------------------------------------------------------------------------
+ new = "fort.%s.new" % self.UNITE_INCLUDE
+ execfile(new)
+
+
+ # ----------------------------------------------------------------------------
+ # On considere que le job est OK s'il ne s'est pas plante dans le except precedent..
+ # ----------------------------------------------------------------------------
+ self.list_diag.append("OK")
+
+
+ # ----------------------------------------------------------------------------
+ # Extraction des tables
+ # ----------------------------------------------------------------------------
+ Lrep=[]
+ for i in range(len(liste_reponses)):
+ reponse = liste_reponses[i]
+ DETRUIRE(OBJET=_F(CHAINE='VEXTR___'), ALARME='NON', INFO=1) # Faudrait proteger ce nom ici (VEXTR___ peut etre deja utilise dans l'etude)
+ exec( "VEXTR___ = %s.EXTR_TABLE()" % reponse)
+ list_para = VEXTR___.para
+ tab_lue = VEXTR___.values()
+ F = table2numpy(tab_lue, list_para, reponses, i)
+ Lrep.append(F)
+
+
+
+ Lcalc.append( Lrep )
+
+
+ # Destruction des concepts Aster
+ liste_concepts = self.jdc.g_context.keys()
+ for c in liste_concepts:
+ DETRUIRE(OBJET=_F(CHAINE=c), ALARME='NON', INFO=1);
+
+ #detr_concepts(self.jdc) # marche pas !
+ #sys.exit()
+
+
+ # ----------------------------------------------------------------------------
+ # Calcul de la fonctionnelle et du gradient
+ # ----------------------------------------------------------------------------
+ if debug: print "AA4/Lcalc=", Lcalc
+ fonctionnelle, gradient = self.calc2fonc_gradient(Lcalc)
+
+
+ # ----------------------------------------------------------------------------
+ # Save all calculated responses
+ self.Lcalc = Lcalc
+ # ----------------------------------------------------------------------------
+
+
+ return fonctionnelle, gradient
+
+
+
+
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------------------------------------
+ def run_distrib(self, list_val):
+ """ Module permettant de lancer N+1 calculs avec le module de calculs distribues d'asrun
+ """
+
+ # ----------------------------------------------------------------------------
+ # Parametres
+ # ----------------------------------------------------------------------------
+
+ # Code_Aster installation
+ ASTER_ROOT = self.ASTER_ROOT
+ as_run = self.as_run
+
+ # General
+ resudir = self.resudir
+ clean = self.clean
+ info = self.info
+
+ # Study
+ export = self.export
+
+ # MACR_RECAL inputs
+ parametres = self.parametres
+ calcul = self.calcul
+ experience = self.experience
+
+ parametres = self.parametres
+ calcul = self.calcul
+ experience = self.experience
+
+ CalcGradient = self.CalcGradient
+ NMAX_SIMULT = self.NMAX_SIMULT
+
+
+ # ----------------------------------------------------------------------------
+ # Import des modules python d'ASTK
+ # ----------------------------------------------------------------------------
+ if not ASTER_ROOT:
+ try: ASTER_ROOT = os.path.join(aster.repout, '..')
+ except: pass
+ try:
+ sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+ sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+ except: pass
+ try:
+ from asrun.run import AsRunFactory
+ from asrun.profil import ASTER_PROFIL
+ from asrun.common_func import get_hostrc
+ from asrun.utils import get_timeout
+ from asrun.parametric import is_list_of_dict
+ from asrun.thread import Dispatcher
+ from asrun.distrib import DistribParametricTask
+ except Exception, e:
+ print e
+ UTMESS('F','RECAL0_99')
+
+
+ assert is_list_of_dict(list_val)
+ nbval = len(list_val)
+
+ # ----------------------------------------------------------------------------
+ # Generation des etudes esclaves
+ # ----------------------------------------------------------------------------
+ sys.argv = ['']
+ run = AsRunFactory()
+ run.options['debug_stderr'] = True # pas d'output d'executions des esclaves dans k'output maitre
+
+ # Master profile
+ prof = ASTER_PROFIL(filename=export)
+ tmp_param = tempfile.mkdtemp()
+ try: username = prof.param['username'][0]
+ except: username = os.environ['LOGNAME']
+ try: noeud = prof.param['noeud'][0]
+ except: noeud = platform.uname()[1]
+ tmp_param = "%s@%s:%s" % ( username, noeud, tmp_param)
+ prof.Set('R', {'type' : 'repe', 'isrep' : True, 'ul' : 0, 'compr' : False, 'path' : tmp_param })
+ if info>=2: print prof
+
+ # Si batch n'est pas possible, on bascule en interactif
+ if prof.param['mode'][0]=='batch' and run.get('batch')=='non':
+ UTMESS('I','RECAL0_28',valk=noeud)
+ prof.param['mode'][0] = 'interactif'
+
+ # result directories
+ if resudir:
+ if not os.path.isdir(resudir):
+ try: os.mkdir(resudir)
+ except:
+ if info>=1: UTMESS('A','RECAL0_82',valk=resudir)
+ resudir = None
+ if not resudir:
+ # Par defaut, dans un sous-repertoire du repertoire d'execution
+ pref = 'tmp_macr_recal_'
+ # On cherche s'il y a un fichier hostfile pour placer les fichiers dans un repertoire partage
+ l_fr = getattr(prof, 'data')
+ l_tmp = l_fr[:]
+ for dico in l_tmp:
+ if dico['type']=='hostfile':
+ pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+ break
+ # Si batch alors on place les fichiers dans un repertoire partage
+ if prof['mode'][0]=='batch': pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+
+ resudir = tempfile.mkdtemp(prefix=pref)
+ flashdir = os.path.join(resudir,'flash')
+ if info>=1: UTMESS('I','RECAL0_81',valk=resudir)
+
+ prof.WriteExportTo( os.path.join(resudir, 'master.export') )
+
+ # get hostrc object
+ hostrc = get_hostrc(run, prof)
+
+ # timeout before rejected a job
+ timeout = get_timeout(prof)
+
+
+ # Ajout des impressions de tables a la fin du .comm
+ t = []
+ reponses = calcul
+ for i in range(len(reponses)):
+ _ul = str(int(100+i))
+ num_ul = '99'
+
+ # Pour la dynamique la table avec la matrice MAC a un traitement different
+ if self.DYNAMIQUE:
+ if ('MAC' in reponses[i][2]):
+ t.append( self.ajout_post_mac( reponses[i] ) )
+
+ try: os.remove( tmp_macr_recal+os.sep+"REPE_TABLE"+os.sep+"fort."+_ul )
+ except: pass
+
+ t.append("\n# Recuperation de la table : " + str(reponses[i][0]) + "\n")
+ t.append("DEFI_FICHIER(UNITE=" + num_ul + ", FICHIER='" + os.path.join('.', 'REPE_OUT', 'fort.'+_ul) + "',);\n" )
+ t.append("IMPR_TABLE(TABLE="+str(reponses[i][0])+", FORMAT='ASTER', UNITE="+num_ul+", INFO=1, FORMAT_R='E30.20',);\n")
+ t.append("DEFI_FICHIER(ACTION='LIBERER', UNITE="+num_ul+",);\n")
+
+
+ # number of threads to follow execution
+ numthread = 1
+
+
+ # ----------------------------------------------------------------------------
+ # Executions des etudes esclaves
+ # ----------------------------------------------------------------------------
+ # ----- Execute calcutions in parallel using a Dispatcher object
+ # elementary task...
+ task = DistribParametricTask(run=run, prof=prof, # IN
+ hostrc=hostrc,
+ nbmaxitem=self.NMAX_SIMULT, timeout=timeout,
+ resudir=resudir, flashdir=flashdir,
+ keywords={'POST_CALCUL': '\n'.join(t)},
+ info=info,
+ nbnook=0, exec_result=[]) # OUT
+ # ... and dispatch task on 'list_tests'
+ etiq = 'calc_%%0%dd' % (int(log10(nbval)) + 1)
+ labels = [etiq % (i+1) for i in range(nbval)]
+ couples = zip(labels, list_val)
+
+ if info>=2: print couples
+ execution = Dispatcher(couples, task, numthread=numthread)
+
+ # ----------------------------------------------------------------------------
+ # Liste des diagnostics
+ # ----------------------------------------------------------------------------
+ d_diag = {}
+ for result in task.exec_result:
+ #print result
+ label = result[0]
+ diag = result[2]
+ if len(result) >= 8: output_filename = os.path.join('~', 'flasheur', str(result[7]))
+ else: output_filename = ''
+ d_diag[label] = diag
+ if not diag[0:2] in ['OK', '<A']:
+ if not diag in ['<F>_COPY_ERROR']:
+ UTMESS('A', 'RECAL0_70', valk=(label, output_filename))
+
+ # Affichage de l'output
+ try:
+ f=open(output_filename, 'r')
+ print f.read()
+ f.close()
+ except: pass
+
+
+ if not d_diag:
+ UTMESS('F', 'RECAL0_71', valk=resudir)
+ self.list_diag = [ d_diag[label] for label in labels ]
+
+ # ----------------------------------------------------------------------------
+ # Arret si tous les jobs ne se sont pas deroules correctement
+ # ----------------------------------------------------------------------------
+ iret = 0
+ if task.nbnook > 0:
+ iret = 4
+ if iret:
+ UTMESS('A', 'RECAL0_71', valk=resudir)
+ run.Sortie(iret)
+
+
+
+ # ----------------------------------------------------------------------------
+ # Recuperation des tables calculees
+ # ----------------------------------------------------------------------------
+ Lcalc = []
+ i=0
+ for c in labels:
+ tbl = get_tables(tables_calc=calcul, tmp_repe_table=os.path.join(resudir, c, 'REPE_OUT'), prof=prof)
+ Lcalc.append( tbl ) # On stocke sous la forme d'une liste de numpy
+ i+=1
+
+
+ # ----------------------------------------------------------------------------
+ # Calcul de la fonctionnelle et du gradient
+ # ----------------------------------------------------------------------------
+ if debug: print "AA4/Lcalc=", Lcalc
+ fonctionnelle, gradient = self.calc2fonc_gradient(Lcalc)
+
+
+ # ----------------------------------------------------------------------------
+ # Clean result directories
+ # ----------------------------------------------------------------------------
+ if clean: shutil.rmtree(resudir, ignore_errors=True)
+
+
+ # ----------------------------------------------------------------------------
+ # Save all calculated responses
+ # ----------------------------------------------------------------------------
+ self.Lcalc = Lcalc
+
+ return fonctionnelle, gradient
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
+ def calc2fonc_gradient(self, Lcalc):
+ """ Calculs de la fonctionnelle et du gradient a partir des tables calculees
+ """
+
+ #print "AA1/Lcalc=", Lcalc
+
+ info = self.info
+ CalcGradient = self.CalcGradient
+
+ # ----------------------------------------------------------------------------
+ # Recuperation des tables calculees
+ # ----------------------------------------------------------------------------
+ seq_FX = []
+ seq_FY = []
+ seq_DIMS = []
+ lst_iter = []
+ for i in range(len(Lcalc)):
+ tbl = Lcalc[i]
+ FX = []
+ FY = []
+ ldims = []
+ for array in tbl:
+ FX.extend([ x[0] for x in array ])
+ FY.extend([ x[1] for x in array ])
+ ldims.append(len(array))
+ # Agregation des resultats
+ seq_FX.append(FX)
+ seq_FY.append(FY)
+ seq_DIMS.append(ldims)
+ lst_iter.append(i)
+
+
+ # ----------------------------------------------------------------------------
+ # Fonctionnelle
+ # ----------------------------------------------------------------------------
+ # Calcul maitre (point X0)
+ idx0 = lst_iter.index(0) # index (les calculs arrivent-ils dans le desordre?)
+ FY_X0 = seq_FY[idx0]
+ fonctionnelle = FY_X0
+
+
+ # ----------------------------------------------------------------------------
+ # Procedure d'assemblage du gradient (une liste de liste)
+ # ----------------------------------------------------------------------------
+ gradient = []
+ if CalcGradient:
+ for n in range(len(lst_iter))[1:]:
+ idx = lst_iter.index(n)
+ FY = seq_FY[idx]
+ col = [ (y-x) for x, y in zip(FY, FY_X0) ]
+ gradient.append(col)
+ #print 'Calcul numero: %s - Diagnostic: %s' % (n, self.list_diag[idx])
+ if info>=1: UTMESS('I', 'RECAL0_74', valk=(str(n), self.list_diag[idx]) )
+
+ # ----------------------------------------------------------------------------
+ # Affichages
+ # ----------------------------------------------------------------------------
+ if info>=2:
+ UTMESS('I', 'RECAL0_72', valk=str(fonctionnelle))
+ import pprint
+ if CalcGradient:
+ UTMESS('I', 'RECAL0_73')
+ pprint.pprint(gradient)
+
+ return fonctionnelle, gradient
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
+ def find_parameter0(self, content, param):
+ """
+ Return the lowest index in content where param is found and
+ the index of the end of the command.
+ """
+ if not self.ASTER_ROOT:
+ try: ASTER_ROOT = os.path.join(aster.repout, '..')
+ except: pass
+ try:
+ sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+ sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+ except: pass
+ try:
+ from asrun.utils import search_enclosed
+ except Exception, e:
+ print e
+ UTMESS('F','RECAL0_99')
+
+ pos, endpos = -1, -1
+ re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+ mat_start = re_start.search(content)
+ if mat_start is not None:
+ pos = mat_start.start()
+ endpos = search_enclosed(content, pos)
+ return pos, endpos
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
+ def find_parameter(self, content, param):
+ """
+ Supprime les parametres du fichier de commande
+ """
+ re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+ l=[]
+ for line in content.split('\n'):
+ mat_start = re_start.search(line)
+ if mat_start is None: l.append(line)
+ return '\n'.join(l)
+
+
+ # ---------------------------------------------------------------------------------------------------------
+ # ---------------------------------------------------------------------------
+ def ajout_post_mac(self, reponse):
+ """
+ Ajoute un bloc a la fin de l'esclave pour l'affichage des MAC pour l'appariement manuel
+ """
+ txt = []
+ txt.append( "from Macro.reca_mac import extract_mac_array, get_modes, fenetre_mac\n" )
+ txt.append( "_mac = extract_mac_array("+str(reponse[0])+")\n" )
+ txt.append( "l_mac=[]\n" )
+ txt.append( "nb_freq=_mac.shape[1]\n" )
+ if (self.DYNAMIQUE['APPARIEMENT_MANUEL']=='OUI' and self.graph_mac):
+ txt.append( "frame =fenetre_mac(" + self.DYNAMIQUE['MODE_EXP']+"," + self.DYNAMIQUE['MODE_CALC']+",_mac)\n" )
+ txt.append( "list_exp,list_num =frame.get_list()\n" )
+ txt.append( "for i in range(nb_freq): l_mac.append(_mac[int(list_num[i])-1,int(list_exp[i])-1])\n" )
+ else:
+ txt.append( "for i in range(nb_freq): l_mac.append(_mac[i,i])\n" )
+ txt.append( "DETRUIRE(CONCEPT=_F(NOM="+str(reponse[0])+"),)\n" )
+ txt.append( str(reponse[0]) + "=CREA_TABLE(LISTE=(_F(PARA='NUME_ORDRE',LISTE_I=range(1,nb_freq+1),),_F(PARA='MAC',LISTE_R=l_mac,),),)\n" )
+ return '\n'.join(txt)
+
+
+# --------------------------------------------------------------------------------------------------
+# --------------------------------------------------------------------------------------------------
+class CALC_ERROR:
+ """
+ Classe gérant l'erreur par rapport aux donnees experimentales, la matrice des sensibilites
+ """
+ # ---------------------------------------------------------------------------
+ def __init__(self, experience, X0, calcul, poids=None, objective_type='vector', info=0, unite_resu=None):
+
+ if poids is None:
+ poids = NP.ones(len(experience))
+ self.experience = experience
+ self.X0 = X0
+ self.calcul = calcul
+ self.poids = poids
+ self.objective_type = objective_type
+ self.INFO = info
+ self.unite_resu = unite_resu
+
+ from Macro import reca_interp, reca_algo
+ self.test_convergence = reca_algo.test_convergence
+ self.calcul_gradient = reca_algo.calcul_gradient
+ self.Simul = reca_interp.Sim_exp(self.experience, self.poids)
+ try: self.Dim = reca_algo.Dimension(copy.copy(self.X0))
+ except: self.Dim = reca_algo.Dimension(copy.copy(self.X0), None) # gere l'ancienne version de MACR_RECAL
+ #self.Dim = reca_algo.Dimension(copy.copy(self.X0))
+
+ self.F = None
+ self.L_J_init = None
+ self.L_J = None
+ self.J_init = None
+ self.J = None
+ self.L_init = None
+ self.erreur = None
+ self.norme = None
+ self.A = None
+ self.A_nodim = None
+ self.norme_A_ = None
+ self.norme_A_nodim = None
+
+ if info>=3: self.debug = True
+ else: self.debug = False
+ #if debug: self.debug = True
+ self.debug = True
+
+
+ # ---------------------------------------------------------------------------
+ def CalcError(self, Lcalc):
+
+ self.F = Lcalc[0]
+ if self.L_init is None: self.L_init = copy.copy(self.F)
+
+ self.L_J, self.erreur = self.Simul.multi_interpole(self.F, self.calcul)
+ if self.L_J_init is None: self.L_J_init = copy.copy(self.L_J)
+
+ self.J = self.Simul.norme_J( copy.copy(self.L_J_init), copy.copy(self.L_J) )
+ if self.J_init is None: self.J_init = copy.copy(self.J)
+
+ # norme de l'erreur
+ self.norme = NP.sum( [x**2 for x in self.erreur] )
+
+ if self.debug:
+ print "AA1/F=", self.F
+ print "AA1/calcul=", self.calcul
+ print "AA1/L_J=", self.L_J
+ print "AA1/erreur=", self.erreur
+ print "AA1/L_J_init=", self.L_J_init
+ print "AA1/J=", self.J
+ print "AA1/norme de l'erreur=", self.norme
+ print "AA1/norme de J (fonctionnelle)=", str(self.J)
+
+ if self.INFO>=1:
+ UTMESS('I', 'RECAL0_30')
+
+ if self.objective_type=='vector':
+ if self.INFO>=1: UTMESS('I', 'RECAL0_35', valr=self.norme)
+ return self.erreur
+ else:
+ if self.INFO>=1: UTMESS('I', 'RECAL0_36', valr=self.norme)
+ return self.norme
+
+
+ # ---------------------------------------------------------------------------
+ def CalcSensibilityMatrix(self, Lcalc, val, dX=None, pas=None):
+
+ """
+ Calcul de F(X0) et de tous les F(X0+h)
+ Formation de la matrice des sensibilites A
+ N+1 calculs distribues
+ """
+
+ if not dX and not pas: raise "Need 'dX' or 'pas' parameter."
+ if dX and pas: raise "Need 'dX' or 'pas' parameter, not both."
+ if pas: dX = len(val)*[pas]
+ if len(dX) != len(val): raise "Error : 'dX' and 'val' parameters aren't compatible (lenght are not equal).\ndX = %s\nval = %s" % (str(dx), str(val))
+
+ reponses = self.calcul
+ resu_exp = self.experience
+ len_para = len(val) # initialement len(self.para)
+
+
+ # Erreur de l'interpolation de F_interp : valeur de F interpolée sur les valeurs experimentales
+ F = Lcalc[0]
+ F_interp = self.Simul.multi_interpole_sensib(F, reponses) #F_interp est une liste contenant des tab num des reponses interpolés
+
+
+ # Creation de la liste des matrices de sensibilités
+ L_A=[]
+ for i in range(len(reponses)):
+ L_A.append(NP.zeros((len(resu_exp[i]),len(val))) )
+
+ for k in range(len(val)): # pour une colone de A (dim = nb parametres)
+
+ F_perturbe = Lcalc[k+1]
+
+ # Erreur de l'interpolation de F_perturb : valeur de F (perturbée) interpolée sur les valeurs experimentales
+ F_perturbe_interp = self.Simul.multi_interpole_sensib(F_perturbe, reponses)
+
+ # Calcul de L_A (matrice sensibilité des erreurs sur F interpolée)
+ h = val[k]*dX[k]
+ for j in range(len(reponses)):
+ for i in range(len(resu_exp[j])):
+ if NP.all(h != 0.):
+ L_A[j][i,k] = -1*(F_interp[j][i] - F_perturbe_interp[j][i])/h
+ else:
+ if self.unite_resu:
+ 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()
+ UTMESS('F','RECAL0_45',valk=para[k])
+ 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 = NP.sum(dim)
+ a=0
+ self.A_nodim = NP.zeros((dim_totale,len(val)))
+ for n in range(len(L_A)):
+ for k in range(len(val)):
+ for i in range(dim[n]):
+ self.A_nodim[i+a][k] = L_A[n][i,k]
+ a=dim[n]
+
+ del(L_A)
+
+
+ self.A = self.Dim.adim_sensi( copy.copy(self.A_nodim) )
+
+ # Si on n'est pas encore passe par CalcError...
+ if self.erreur is None:
+ self.erreur = self.CalcError(Lcalc)
+ self.gradient_init = self.calcul_gradient(self.A, self.erreur) #utile pour le test de convergence, on prend les valeurs dimensionnées
+ self.residu = self.test_convergence(self.gradient_init, self.erreur, self.A, NP.zeros(len(self.gradient_init)))
+
+ if self.debug:
+ print "AA1/erreur=", self.erreur
+ print "AA1/residu=", self.residu
+ print "AA1/A_nodim=", self.A_nodim
+ print "AA1/A=", self.A
+
+
+ if self.objective_type=='vector':
+ return self.erreur, self.residu, self.A_nodim, self.A
+ else:
+ # norme de l'erreur
+ self.norme = NP.dot(self.erreur, self.erreur)**0.5
+ self.norme_A_nodim = NP.zeros( (1,len_para))
+ self.norme_A = NP.zeros( (1,len_para))
+ for c in range(len(self.A[0,:])):
+ norme_A_nodim = 0
+ norme_A = 0
+ for l in range(len(self.A[:,0])):
+ norme_A_nodim += self.A_nodim[l,c] * self.A_nodim[l,c]
+ norme_A += self.A[l,c] * self.A[l,c]
+ self.norme_A_nodim[0,c] = math.sqrt( norme_A_nodim )
+ self.norme_A[0,c] = math.sqrt( norme_A )
+ if self.debug:
+ print "AA1/norme_A_nodim=", self.norme_A_nodim
+ print "AA1/norme_A=", self.norme_A
+ return self.erreur, self.residu, self.norme_A_nodim, self.norme_A
+
+
+
+
+
+
+# ----------------------------------------------------------------------------------------------------------------------
+# ----------------------------------------------------------------------------------------------------------------------
+if __name__ == '__main__':
+
+ # Execution via YACS ou en externe
+ isFromYacs = globals().get('ASTER_ROOT', None)
+
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Execution depuis YACS
+ # ------------------------------------------------------------------------------------------------------------------
+ if isFromYacs:
+ # Execution depuis YACS : les parametres sont deja charges en memoire
+
+ # ----------------------------------------------------------------------------
+ # Parametres courant
+ X0 = globals().get('X0', [ 80000., 1000., 30. ])
+ dX = globals().get('dX', [ 0.001, 0.001, 0.0001])
+ # ----------------------------------------------------------------------------
+
+ # ----------------------------------------------------------------------------
+ # Parametres
+ os.environ['ASTER_ROOT'] = ASTER_ROOT
+ if debug:
+ clean = False
+ info = 1
+ else:
+ clean = True
+ info = 0
+ # ----------------------------------------------------------------------------
+
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Execution en mode EXTERNE
+ # ------------------------------------------------------------------------------------------------------------------
+ else:
+ # Execution en mode EXTERNE : on doit depouiller les parametres de la ligne de commande
+
+
+ from optparse import OptionParser, OptionGroup
+
+ p = OptionParser(usage='usage: %s fichier_export [options]' % sys.argv[0])
+
+ # Current estimation
+ p.add_option('--input', action='store', dest='input', type='string', help='Chaine de texte contenant les parametres')
+ p.add_option('--input_step', action='store', dest='input_step', type='string', help='Chaine de texte contenant les pas de discretisation des differences finies')
+ p.add_option('--input_file', action='store', dest='input_file', type='string', default='input.txt', help='Fichier contenant les parametres')
+ p.add_option('--input_step_file', action='store', dest='input_step_file', type='string', help='Fichier contenant les pas de discretisation des differences finies')
+
+ # Outputs
+ p.add_option('--output', action='store', dest='output', type='string', default='output.txt', help='fichier contenant la fonctionnelle')
+ p.add_option('--output_grad', action='store', dest='output_grad', type='string', default='grad.txt', help='fichier contenant le gradient')
+
+ # Code_Aster installation
+ p.add_option('--aster_root', action='store', dest='aster_root', type='string', help="Chemin d'installation d'Aster")
+ p.add_option('--as_run', action='store', dest='as_run', type='string', help="Chemin vers as_run")
+
+ # General
+ p.add_option('--resudir', action='store', dest='resudir', type='string', help="Chemin par defaut des executions temporaires d'Aster")
+ p.add_option("--noclean", action="store_false", dest="clean", default=True, help="Erase temporary Code_Aster execution directory")
+ p.add_option('--info', action='store', dest='info', type='int', default=1, help="niveau de message (0, [1], 2)")
+ p.add_option('--sources_root', action='store', dest='SOURCES_ROOT', type='string', help="Chemin par defaut des surcharges Python")
+ #p.add_option('--slave_computation', action='store', dest='slave_computation', type='string', default='distrib', help="Evaluation de l'esclave ([distrib], include)")
+
+ # MACR_RECAL parameters
+ p.add_option('--objective', action='store', dest='objective', type='string', default='fcalc', help="Fonctionnelle ([fcalc]/[error])")
+ p.add_option('--objective_type', action='store', dest='objective_type', type='string', default='vector', help="type de la fonctionnelle (float/[vector])")
+ p.add_option('--gradient_type', action='store', dest='gradient_type' , type='string', default='no', help="calcul du gradient par Aster ([no]/normal/adim)")
+
+ # MACR_RECAL inputs
+ p.add_option('--mr_parameters', action='store', dest='mr_parameters', type='string', default='N_MR_Parameters.py', help="Fichier de parametres de MACR_RECAL : parametres, calcul, experience")
+ p.add_option('--study_parameters', action='store', dest='study_parameters', type='string', help="Fichier de parametre de l'etude : export")
+ p.add_option('--parameters', action='store', dest='parameters', type='string', help="Fichier de parametres")
+
+ options, args = p.parse_args()
+
+
+ # Study : .export file
+ if args: export = args[0]
+ else:
+ liste = glob.glob('*.export')
+ export = liste[0]
+ if not os.path.isfile(export): raise "Export file : is missing!"
+
+
+ # Code_Aster installation
+ ASTER_ROOT = None
+ if options.aster_root: ASTER_ROOT = options.aster_root
+ elif os.environ.has_key('ASTER_ROOT'): ASTER_ROOT = os.environ['ASTER_ROOT']
+ if not ASTER_ROOT: raise "ASTER_ROOT is missing! Set it by --aster_root flag or environment variable ASTER_ROOT"
+ if not os.path.isdir(ASTER_ROOT): raise "Wrong directory for ASTER_ROOT : %s" % ASTER_ROOT
+ os.environ['ASTER_ROOT'] = ASTER_ROOT
+# sys.path.append(get_absolute_path(os.path.join(ASTER_ROOT, 'STA10.1', 'bibpyt' )))
+# from Utilitai.Utmess import UTMESS
+
+ if options.as_run: as_run = options.as_run
+ else: as_run = os.path.join(ASTER_ROOT, 'bin', 'as_run')
+
+
+ # General
+ if options.resudir: resudir = options.resudir
+ clean = options.clean
+
+# if options.info == 0: info = False
+# elif options.info == 1: info = False
+# elif options.info == 2: info = True
+ info = options.info
+
+ # Import des modules supplementaires
+ if options.SOURCES_ROOT:
+ if not os.path.isdir(options.SOURCES_ROOT): raise "Wrong directory for sources_root : %s" % options.SOURCES_ROOT
+ else:
+ sys.path.insert(0, options.SOURCES_ROOT)
+ sys.path.insert(0, os.path.join(options.SOURCES_ROOT, 'sources'))
+
+
+ # MACR_RECAL inputs
+ if options.mr_parameters:
+ try:
+ if info>=1: print "Read MR parameters file : %s" % options.mr_parameters
+ execfile(options.mr_parameters)
+ except: raise "Wrong file for MR Parameters: %s" % options.mr_parameters
+ else: raise "MR Parameters file needed ! Use --mr_parameters flag"
+ parametres = globals().get('parametres', None)
+ calcul = globals().get('calcul', None)
+ experience = globals().get('experience', None)
+ poids = globals().get('poids', None)
+
+ if not parametres: raise "MR Parameters file need to define 'parametres' variable"
+ if not calcul: raise "MR Parameters file need to define 'calcul' variable"
+ if type(parametres) != list: raise "Wrong type for 'parametres' variable in MR parameters file : %s" % options.mr_parameters
+ if type(calcul) != list: raise "Wrong type for 'calcul' variable in MR parameters file : %s" % options.mr_parameters
+
+ if options.objective == 'error':
+ if type(experience) != list: raise "For error objective output, the 'experience' variable must be a list of arrays"
+ if type(poids) not in [list, tuple, NP.ndarray]: raise "The 'poids' variable must be a list or an array"
+ if len(poids) != len(experience): raise "'experience' and 'poids' lists must have the same lenght"
+
+
+ # MACR_RECAL parameters
+ objective = options.objective
+ objective_type = options.objective_type
+ gradient_type = options.gradient_type
+
+
+ # X0 : read from commandline flag or from file
+ if not os.path.isfile(options.input_file): options.input_file = None
+ if not (options.input or options.input_file): raise "Missing input parameters"
+ if (options.input and options.input_file): raise "Error : please use only one choice for input parameters definition"
+
+ if options.input_file:
+ try:
+ f = open(options.input_file, 'r')
+ options.input = f.read()
+ f.close()
+ except:
+ raise "Can't read input parameters file : %s" % options.input_file
+
+ # Extract X0 from text
+ try:
+ txt = options.input.strip()
+ txt = txt.replace(',', ' ')
+ txt = txt.replace(';', ' ')
+ X0 = [ float(x) for x in txt.split() ]
+ if type(X0) != list: raise "Wrong string for input parameters : %s" % options.input
+ except:
+ raise "Can't decode input parameters string : %s.\n It should be a comma separated list." % options.input
+
+
+ # dX : read from commandline flag or from file
+ dX = None
+ if options.gradient_type == 'no':
+ if (options.input_step or options.input_step_file): raise "You must set 'gradient_type' to another choice than 'no' or remove input step parameters from commandline"
+ else:
+ if not (options.input_step or options.input_step_file): raise "Missing input step parameters"
+ if (options.input_step and options.input_step_file): raise "Error : please use only one choice for input step parameters definition"
+
+ if options.input_step_file:
+ try:
+ f = open(options.input_step_file, 'r')
+ options.input_step = f.read()
+ f.close()
+ except:
+ raise "Can't read file for discretisation step : %s" % options.input_step_file
+
+ # Extract dX from text
+ try:
+ txt = options.input_step.strip()
+ txt = txt.replace(',', ' ')
+ txt = txt.replace(';', ' ')
+ dX = [ float(x) for x in txt.split() ]
+ if type(dX) != list: raise "Wrong string for discretisation step : %s" % options.input_step
+ except:
+ raise "Can't decode input parameters string : %s.\n It should be a comma separated list." % options.input_step
+
+
+
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Execution des calculs (N+1 calculs distribues si dX est fourni)
+ # ------------------------------------------------------------------------------------------------------------------
+
+ # Repertoire contenant les resultats des calculs Aster (None = un rep temp est cree)
+ resudir = globals().get('resudir', None)
+
+ # Affichage des parametres
+ lpara = [x[0] for x in parametres]
+ lpara.sort()
+ if info >=1:
+ lpara = [x[0] for x in parametres]
+ lpara.sort()
+ print "Calcul avec les parametres : \n%s" % Affiche_Param(lpara, X0)
+
+ C = CALCULS_ASTER(
+ # MACR_RECAL inputs
+ parametres = parametres,
+ calcul = calcul,
+ experience = experience,
+ )
+
+ fonctionnelle, gradient = C.run(
+ # Current estimation
+ X0 = X0,
+ dX = dX,
+
+ # Code_Aster installation
+ ASTER_ROOT = ASTER_ROOT,
+ as_run = as_run,
+
+ # General
+ resudir = resudir,
+ clean = clean,
+ info = info,
+
+ # Study
+ export = export,
+
+# # MACR_RECAL inputs
+# parametres = parametres,
+# calcul = calcul,
+# experience = experience,
+ )
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Calcul de l'erreur par rapport aux donnees experimentale
+ # ------------------------------------------------------------------------------------------------------------------
+ if not isFromYacs: # Execution en mode EXTERNE uniquement
+
+ # Calcul de l'erreur par rapport aux donnees experimentale
+ if objective == 'error':
+ E = CALC_ERROR(
+ experience = experience,
+ X0 = X0,
+ calcul = calcul,
+ poids = poids,
+ objective_type = objective_type,
+ info=info,
+ )
+
+ erreur = E.CalcError(C.Lcalc)
+ erreur, residu, A_nodim, A = E.CalcSensibilityMatrix(C.Lcalc, X0, dX=dX, pas=None)
+
+ fonctionnelle = erreur
+ if gradient_type == 'normal': gradient = A
+ elif gradient_type == 'adim': gradient = A_nodim
+ else: raise "??"
+
+
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Ecriture des resultats
+ # ------------------------------------------------------------------------------------------------------------------
+ if not isFromYacs: # Execution en mode EXTERNE uniquement
+
+ # Fonctionnelle
+ if options.objective_type == 'float':
+ fonctionnelle = math.sqrt( NP.sum( [x**2 for x in fonctionnelle] ) )
+ Ecriture_Fonctionnelle(output_file=options.output, type_fonctionnelle=options.objective_type, fonctionnelle=fonctionnelle)
+
+ # Gradient
+ if gradient: Ecriture_Derivees(output_file=options.output_grad, derivees=gradient)
+
+
+
+ # ------------------------------------------------------------------------------------------------------------------
+ # Affichages
+ # ------------------------------------------------------------------------------------------------------------------
+ if info>=2:
+ print "\nFonctionnelle au point X0: \n%s" % str(fonctionnelle)
+ import pprint
+ if dX:
+ print "\nGradient au point X0:"
+ pprint.pprint(gradient)
--- /dev/null
+#@ MODIF simu_point_mat_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,EPSI_INIT,VARI_INIT,NEWTON,CONVERGENCE,
+ MASSIF,ANGLE,COMP_INCR,COMP_ELAS,INFO,ARCHIVAGE,SUPPORT, **args) :
+
+ """Simulation de la reponse d'un point materiel"""
+
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+ import math
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ AFFE_CARA_ELEM = self.get_cmd('AFFE_CARA_ELEM')
+ AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA')
+ AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU')
+ AFFE_MODELE = self.get_cmd('AFFE_MODELE')
+ CALC_ELEM = self.get_cmd('CALC_ELEM')
+ CALC_POINT_MAT = self.get_cmd('CALC_POINT_MAT')
+ CALC_TABLE = self.get_cmd('CALC_TABLE')
+ CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+ CREA_RESU = self.get_cmd('CREA_RESU')
+ DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+ IMPR_TABLE = self.get_cmd('IMPR_TABLE')
+ LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
+ MODI_MAILLAGE = self.get_cmd('MODI_MAILLAGE')
+ MODI_REPERE = self.get_cmd('MODI_REPERE')
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ STAT_NON_LINE = self.get_cmd('STAT_NON_LINE')
+
+ from Accas import _F
+ from Utilitai.UniteAster import UniteAster
+ from Utilitai.Utmess import UTMESS
+
+# -- Tests de cohérence
+ __fonczero = DEFI_FONCTION(NOM_PARA = 'INST',
+ VALE = ( 0,0, 10,0 ),PROL_DROITE='CONSTANT',PROL_GAUCHE='CONSTANT')
+ EPS={}
+ SIG={}
+ itetra=0
+ CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
+ CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+
+ if SUPPORT != None :
+ if SUPPORT=='ELEMENT':
+ itetra=1
+ if itetra==0 :
+ if COMP_INCR != None :
+ lcomp = COMP_INCR.List_F()[0]
+ if lcomp['DEFORMATION'] != 'PETIT' :
+ itetra=1
+ UTMESS('A','COMPOR2_1',valk=lcomp['DEFORMATION'] )
+ elif COMP_ELAS != None :
+ lcomp = COMP_ELAS.List_F()[0]
+ if lcomp['DEFORMATION'] != 'PETIT' :
+ itetra=1
+ UTMESS('A','COMPOR2_1',valk=lcomp['DEFORMATION'] )
+
+#===============================================================
+# cas ou il n'y a pas d'élement fini : appel à CALC_POINT_MAT
+#===============================================================
+ if itetra == 0 :
+
+ isig=0
+ ieps=0
+ nbsig=6
+# par défaut contraintes nulles
+ if SIGM_IMPOSE:
+ SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
+ isig=1
+ if EPSI_IMPOSE:
+ EPS=EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
+ ieps=1
+
+ motscles={}
+# verif
+ for index in range(nbsig):
+ iks=CMP_SIG[index]
+ ike=CMP_EPS[index]
+ inds=0
+ inde=0
+ if ieps :
+ if EPS[ike]!=None :
+ inde=1
+ if isig :
+ if SIG[iks]!=None :
+ inds=1
+ if inde*inds!=0 :
+ UTMESS('F','COMPOR2_2',valk=iks)
+ if inde==1 :
+ motscles[ike] = EPS[ike]
+ elif inds==1:
+ motscles[iks]= SIG[iks]
+ else:
+ motscles[iks]=__fonczero
+
+# Etat initial
+ etatinit=0
+ if SIGM_INIT != None :
+ motscles['SIGM_INIT'] = SIGM_INIT.List_F()
+ if EPSI_INIT != None :
+ motscles['EPSI_INIT'] = EPSI_INIT.List_F()
+ if VARI_INIT != None :
+ motscles['VARI_INIT'] = VARI_INIT.List_F()
+ if NEWTON != None :
+ motscles['NEWTON'] = NEWTON.List_F()
+ if CONVERGENCE != None :
+ motscles['CONVERGENCE'] = CONVERGENCE.List_F()
+ if MASSIF != None :
+ motscles['MASSIF'] = MASSIF.List_F()
+ if COMP_INCR :
+ motscles['COMP_INCR'] = COMP_INCR.List_F()
+ if COMP_ELAS :
+ motscles['COMP_ELAS'] = COMP_ELAS.List_F()
+# -- Deroulement du calcul
+ motscles['INCREMENT'] = INCREMENT.List_F()
+
+ if args.has_key('NB_VARI_TABLE'):
+ if args['NB_VARI_TABLE'] != None:
+ motscles['NB_VARI_TABLE'] = args['NB_VARI_TABLE']
+
+ self.DeclareOut('REPONSE',self.sd)
+ __REP1 = CALC_POINT_MAT(INFO=INFO,MATER=MATER,ANGLE=ANGLE,**motscles)
+
+ Titre='CALC_POINT_MAT'
+ if INFO==2 :
+ IMPR_TABLE(TABLE=__REP1)
+
+# on ne prend en compte que ARCHIVAGE / LIST_INST
+
+ if ARCHIVAGE != None :
+ if ARCHIVAGE['LIST_INST'] != None :
+ lr8=ARCHIVAGE['LIST_INST']
+ lr=lr8.Valeurs()
+ REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+ ACTION=_F(OPERATION='FILTRE',NOM_PARA='INST',
+ VALE=lr,PRECISION=ARCHIVAGE['PRECISION']),
+ )
+ else :
+ REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+ ACTION=_F(OPERATION='TRI',NOM_PARA='INST'),
+ )
+ else :
+ REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+ ACTION=_F(OPERATION='TRI',NOM_PARA='INST'),
+ )
+
+#===============================================================
+# cas ou on fait le calcul sur un TETRA4 A UN SEUL POINT DE GAUSS
+#===============================================================
+ elif itetra==1 :
+
+ EPS={}
+ SIG={}
+ MODELISATION="3D"
+ if args.has_key('MODELISATION'):
+ if args['MODELISATION'] != None:
+ MODELISATION=args['MODELISATION']
+
+ if MODELISATION=="3D":
+ nbsig=6
+ CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
+ CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+ else:
+ nbsig=3
+ CMP_EPS=['EPXX','EPYY','EPXY']
+ CMP_SIG=['SIXX','SIYY','SIXY']
+
+
+ if SIGM_IMPOSE:
+ SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
+ for i in SIG.keys():
+ if SIG[i]==None : SIG[i]=__fonczero
+ else:
+ for i in range(nbsig):
+ SIG[CMP_SIG[i]]=__fonczero
+
+ if EPSI_IMPOSE:
+ EPS=EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
+ else:
+ for i in range(nbsig):
+ EPS[CMP_EPS[i]]=None
+
+ for index in range(nbsig):
+ iks=CMP_SIG[index]
+ ike=CMP_EPS[index]
+ if EPS[ike]!=None and SIG[iks] != __fonczero :
+ UTMESS('F','COMPOR2_3',valk= str(iks) +' '+ str(ike))
+
+# -- Definition du maillage
+ if MODELISATION=="3D":
+
+ texte_ma = """
+ COOR_3D
+ P0 0.0 0.0 0.0
+ P1 1.0 0.0 0.0
+ P2 0.0 1.0 0.0
+ P3 0.0 0.0 1.0
+ FINSF
+ TRIA3
+ F1 P0 P3 P2
+ F2 P0 P1 P3
+ F3 P0 P2 P1
+ F4 P1 P2 P3
+ FINSF
+ TETRA4
+ VOLUME = P0 P1 P2 P3
+ FINSF
+ GROUP_MA
+ TOUT VOLUME
+ FINSF
+ GROUP_NO
+ TOUT P1 P2 P0 P3
+ FINSF
+ FIN
+ """
+
+ else :
+
+ texte_ma = """
+ COOR_2D
+ P0 0.0 0.0
+ P1 1.0 0.0
+ P2 0.0 1.0
+ FINSF
+ SEG2
+ S1 P2 P0
+ S2 P0 P1
+ S3 P1 P2
+ FINSF
+ TRIA3
+ VOLUME = P0 P1 P2
+ FINSF
+ GROUP_MA
+ TOUT VOLUME
+ FINSF
+ GROUP_NO
+ TOUT P1 P2 P0
+ FINSF
+ FIN
+ """
+
+ fi_mail = open('simu.mail','w')
+ fi_mail.write(texte_ma)
+ fi_mail.close()
+
+ UL = UniteAster()
+ umail = UL.Libre(action='ASSOCIER', nom='simu.mail' )
+
+ __MA = LIRE_MAILLAGE(UNITE=umail)
+ UL.EtatInit()
+
+
+
+ if MODELISATION=="3D":
+ __MO = AFFE_MODELE( MAILLAGE = __MA,
+ AFFE=_F(MAILLE=('VOLUME','F1','F2','F3','F4'),PHENOMENE='MECANIQUE',MODELISATION='3D',))
+## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
+## imposées.
+ if ANGLE != 0. :
+ __MA=MODI_MAILLAGE(reuse=__MA ,MAILLAGE = __MA ,ROTATION=_F(POIN_1=(0.,0. ),ANGL = ANGLE),)
+ c=math.cos(ANGLE*math.pi/180.)
+ s=math.sin(ANGLE*math.pi/180.)
+ __C_RIGIDE=AFFE_CHAR_MECA(MODELE=__MO,
+ DDL_IMPO=_F(NOEUD='P0',DX=0,DY=0.,DZ=0.),
+ LIAISON_DDL = (
+ _F(NOEUD=('P1','P1','P2','P2'),DDL=('DX','DY','DX','DY'),COEF_MULT=(s,-c,c,s),COEF_IMPO=0),
+ _F(NOEUD=('P1','P3','P3'),DDL=('DZ','DX','DY'),COEF_MULT=(-1.0,c,s),COEF_IMPO=0),
+ _F(NOEUD=('P2','P3','P3'),DDL=('DZ','DX','DY'),COEF_MULT=(-1.0,-s,c),COEF_IMPO=0),),)
+ else :
+# -- Mouvement de corps rigide
+ __C_RIGIDE = AFFE_CHAR_MECA(MODELE=__MO,
+ DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0,DZ = 0),
+ LIAISON_DDL = (
+ _F(NOEUD=('P2','P1'),DDL=('DX','DY'),COEF_MULT=(1,-1),COEF_IMPO=0),
+ _F(NOEUD=('P3','P1'),DDL=('DX','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),
+ _F(NOEUD=('P3','P2'),DDL=('DY','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),))
+ else:
+ # MODELISATION 2D
+ __MO=AFFE_MODELE(MAILLAGE=__MA,
+ AFFE=_F(MAILLE=('VOLUME','S1','S2','S3'),PHENOMENE='MECANIQUE',MODELISATION=MODELISATION))
+## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
+## imposées.
+ if ANGLE != 0. :
+ __MA=MODI_MAILLAGE(reuse=__MA ,MAILLAGE=__MA,ROTATION=_F(POIN_1=(0.,0.),ANGL=ANGLE),)
+ c=math.cos(ANGLE*math.pi/180.)
+ s=math.sin(ANGLE*math.pi/180.)
+ __C_RIGIDE = AFFE_CHAR_MECA(MODELE = __MO,
+ DDL_IMPO=_F(NOEUD='P0',DX=0,DY=0.),
+ LIAISON_DDL=(_F(NOEUD=('P1','P1','P2','P2'),DDL=('DX','DY','DX','DY'),
+ COEF_MULT=(s,-c,c,s),COEF_IMPO=0),),)
+ else :
+ __C_RIGIDE = AFFE_CHAR_MECA(MODELE = __MO,
+ DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0),
+ LIAISON_DDL = (_F(NOEUD=('P2','P1'),DDL=('DX','DY'),COEF_MULT=(1,-1),COEF_IMPO=0),))
+
+# --MASSIF : orientation du materiau (monocristal, orthotropie)
+ if MASSIF:
+ ANGMAS=MASSIF[0].cree_dict_valeurs(MASSIF[0].mc_liste)
+ if ANGMAS["ANGL_REP"]==None :
+ __CARA=AFFE_CARA_ELEM(MODELE=__MO,MASSIF=_F(MAILLE='VOLUME',ANGL_EULER=ANGMAS["ANGL_EULER"]),);
+ else :
+ __CARA=AFFE_CARA_ELEM(MODELE=__MO,MASSIF=_F(MAILLE='VOLUME',ANGL_REP=ANGMAS["ANGL_REP"]),);
+
+# -- Chargement en deformation
+
+ __E = [None]*nbsig
+
+ __E[0] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P1', DX=1, ANGL_NAUT=ANGLE))
+
+ __E[1] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P2', DY=1, ANGL_NAUT=ANGLE))
+
+ if MODELISATION=="3D":
+
+ __E[2] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P3', DZ=1, ANGL_NAUT=ANGLE))
+
+ __E[3] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P1', DY=1, ANGL_NAUT=ANGLE))
+
+ __E[4] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P1', DZ=1, ANGL_NAUT=ANGLE))
+
+ __E[5] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P2', DZ=1, ANGL_NAUT=ANGLE))
+
+ else:
+ c=math.cos(ANGLE*math.pi/180.)
+ s=math.sin(ANGLE*math.pi/180.)
+ __E[2] = AFFE_CHAR_MECA(MODELE = __MO,
+ LIAISON_OBLIQUE = _F(NOEUD='P1', DY=1, ANGL_NAUT=ANGLE),)
+
+# -- Chargement en contrainte
+
+ __S = [None]*nbsig
+
+ if MODELISATION=="3D":
+
+ r33 = 3**-0.5
+ __S[0] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+ _F(MAILLE='F1', FX=-1),
+ _F(MAILLE='F4', FX= r33),))
+
+ __S[1] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+ _F(MAILLE='F2', FY=-1),
+ _F(MAILLE='F4', FY= r33),))
+
+ __S[2] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+ _F(MAILLE='F3', FZ=-1),
+ _F(MAILLE='F4', FZ= r33),))
+
+ __S[3] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+ _F(MAILLE='F1', FY=-1),
+ _F(MAILLE='F2', FX=-1),
+ _F(MAILLE='F4', FX= r33, FY=r33),))
+
+ __S[4] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+ _F(MAILLE='F1', FZ=-1),
+ _F(MAILLE='F3', FX=-1),
+ _F(MAILLE='F4', FX= r33, FZ=r33),))
+
+ __S[5] = AFFE_CHAR_MECA( MODELE = __MO, FORCE_FACE = (
+ _F(MAILLE='F2', FZ=-1),
+ _F(MAILLE='F3', FY=-1),
+ _F(MAILLE='F4', FY= r33, FZ=r33), ) )
+
+ else:
+ r22 = 2**-0.5
+ __S[0] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+ _F(MAILLE='S1', FX=-1),
+ _F(MAILLE='S3', FX= r22), ))
+
+ __S[1] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+ _F(MAILLE='S2', FY=-1),
+ _F(MAILLE='S3', FY= r22), ) )
+
+ __S[2] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+ _F(MAILLE='S1', FY=-1),
+ _F(MAILLE='S2', FX=-1),
+ _F(MAILLE='S3', FX= r22, FY=r22), ) )
+
+# -- Construction de la charge
+
+ l_char = [ _F(CHARGE=__C_RIGIDE) ]
+
+ for i in xrange(nbsig) :
+ ike=CMP_EPS[i]
+ if EPS[ike]:
+ l_char.append( _F(CHARGE=__E[i],FONC_MULT=EPS[ike]) )
+
+ for i in xrange(nbsig) :
+ iks=CMP_SIG[i]
+ l_char.append( _F(CHARGE=__S[i],FONC_MULT=SIG[iks]) )
+
+# variables de commande
+ mcvarc=[]
+ if args.has_key('AFFE_VARC'):
+ if args['AFFE_VARC'] != None:
+ lvarc = args['AFFE_VARC'].List_F()
+ nbvarc=len(lvarc)
+ for ivarc in range(nbvarc) :
+ typech = 'NOEU_' + str(lvarc[ivarc]['NOM_VARC']) + '_F'
+ dico={}
+ __CHVARC=CREA_CHAMP(TYPE_CHAM=typech,
+ OPERATION='AFFE',
+ MAILLAGE=__MA,
+ AFFE=_F(MAILLE='VOLUME',
+ NOM_CMP=lvarc[ivarc]['NOM_VARC'],
+ VALE_F=lvarc[ivarc]['VALE_FONC'],
+ ),
+ ),
+ __LIST2 = INCREMENT.List_F()[0]['LIST_INST']
+ __TEMP=CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_THER',NOM_CHAM='TEMP',
+ AFFE = _F(CHAM_GD = __CHVARC,LIST_INST = __LIST2,),
+ )
+ dico["MAILLE"]='VOLUME'
+ dico["EVOL"]=__TEMP
+ dico["NOM_VARC"]=lvarc[ivarc]['NOM_VARC']
+ if lvarc[ivarc]['VALE_REF'] != None:
+ dico["VALE_REF"]=lvarc[ivarc]['VALE_REF']
+ mcvarc.append(dico)
+# -- Materiau et modele
+ if len(mcvarc) > 0 :
+ __CHMAT=AFFE_MATERIAU(MAILLAGE=__MA,AFFE = _F(MAILLE='VOLUME',MATER=MATER),
+ AFFE_VARC=mcvarc,
+ )
+ else :
+ __CHMAT=AFFE_MATERIAU(MAILLAGE=__MA,AFFE = _F(MAILLE='VOLUME',MATER=MATER))
+
+# Etat initial
+ SIGINI={}
+ VARINI={}
+ LCSIG=[]
+ LVSIG=[]
+ init_dico={}
+ etatinit=0
+
+# --contraintes initiales
+ if SIGM_INIT:
+ etatinit=1
+ SIGINI=SIGM_INIT[0].cree_dict_valeurs(SIGM_INIT[0].mc_liste)
+ for i in SIGINI.keys():
+ if SIGINI[i]!=None :
+ LCSIG.append(i)
+ LVSIG.append(SIGINI[i])
+
+ __SIG_INIT=CREA_CHAMP(MAILLAGE=__MA,OPERATION='AFFE',TYPE_CHAM='CART_SIEF_R',
+ AFFE=_F(TOUT='OUI', NOM_CMP=LCSIG, VALE=LVSIG,))
+ init_dico['SIGM']=__SIG_INIT
+
+# --variables internes initiales
+ if VARI_INIT:
+ etatinit=1
+ lnomneu=[]
+ lnomvar=[]
+ VARINI=VARI_INIT[0].cree_dict_valeurs(VARI_INIT[0].mc_liste)
+ nbvari=len(VARINI['VALE'])
+ for i in range(nbvari):
+ lnomneu.append('X'+str(i+1))
+ lnomvar.append('V'+str(i+1))
+
+ __NEUT=CREA_CHAMP(OPERATION='AFFE', TYPE_CHAM='CART_NEUT_R', MAILLAGE=__MA,
+ AFFE=_F( MAILLE ='VOLUME', NOM_CMP = lnomneu, VALE = VARINI['VALE']))
+
+ __VAR_INIT=CREA_CHAMP(MODELE=__MO,OPERATION='ASSE',TYPE_CHAM='ELGA_VARI_R',
+ ASSE=_F(TOUT='OUI',CHAM_GD=__NEUT,NOM_CMP=lnomneu,NOM_CMP_RESU=lnomvar))
+ init_dico['VARI']=__VAR_INIT
+
+ # --deformations initiales
+ if EPSI_INIT:
+ etatinit=1
+ EPSINI={}
+ LCDEPL=[]
+ LNDEPL=[]
+ LVDEPL=[]
+ LIST_AFFE=[]
+ mon_dico={}
+ mon_dico["NOEUD"]='P0'
+ mon_dico["NOM_CMP"]=("DX","DY","DZ")
+ mon_dico["VALE"]=(0.,0.,0.)
+ LIST_AFFE.append(mon_dico)
+
+ EPSINI=EPSI_INIT[0].cree_dict_valeurs(EPSI_INIT[0].mc_liste)
+ mon_dico={}
+ mon_dico["NOEUD"]='P1'
+ mon_dico["NOM_CMP"]='DX'
+ mon_dico["VALE"]=EPSINI['EPXX']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P2'
+ mon_dico["NOM_CMP"]='DY'
+ mon_dico["VALE"]=EPSINI['EPYY']
+ LIST_AFFE.append(mon_dico)
+ if MODELISATION=="3D":
+ mon_dico={}
+ mon_dico["NOEUD"]='P3'
+ mon_dico["NOM_CMP"]='DZ'
+ mon_dico["VALE"]=EPSINI['EPZZ']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P1'
+ mon_dico["NOM_CMP"]='DY'
+ mon_dico["VALE"]=EPSINI['EPXY']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P2'
+ mon_dico["NOM_CMP"]='DX'
+ mon_dico["VALE"]=EPSINI['EPXY']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P1'
+ mon_dico["NOM_CMP"]='DZ'
+ mon_dico["VALE"]=EPSINI['EPXZ']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P3'
+ mon_dico["NOM_CMP"]='DX'
+ mon_dico["VALE"]=EPSINI['EPXZ']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P2'
+ mon_dico["NOM_CMP"]='DZ'
+ mon_dico["VALE"]=EPSINI['EPYZ']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P3'
+ mon_dico["NOM_CMP"]='DY'
+ mon_dico["VALE"]=EPSINI['EPYZ']
+ LIST_AFFE.append(mon_dico)
+ else:
+ mon_dico={}
+ mon_dico["NOEUD"]='P1',
+ mon_dico["NOM_CMP"]='DY'
+ mon_dico["VALE"]=EPSINI['EPXY']
+ LIST_AFFE.append(mon_dico)
+ mon_dico={}
+ mon_dico["NOEUD"]='P2'
+ mon_dico["NOM_CMP"]='DX'
+ mon_dico["VALE"]=EPSINI['EPXY']
+ LIST_AFFE.append(mon_dico)
+ __DEP_INI=CREA_CHAMP(MAILLAGE=__MA,OPERATION='AFFE',TYPE_CHAM='NOEU_DEPL_R',AFFE=LIST_AFFE)
+ init_dico['DEPL']=__DEP_INI
+
+# -- Deroulement du calcul
+ motscles={}
+ if COMP_INCR :
+ motscles['COMP_INCR'] = COMP_INCR.List_F()
+ if COMP_ELAS :
+ motscles['COMP_ELAS'] = COMP_ELAS.List_F()
+
+ motscles['CONVERGENCE'] = CONVERGENCE.List_F()
+
+ motscles['NEWTON'] = NEWTON.List_F()
+
+ if args.has_key('RECH_LINEAIRE'):
+ if args['RECH_LINEAIRE'] != None:
+ motscles['RECH_LINEAIRE'] = args['RECH_LINEAIRE'].List_F()
+
+ motscles['INCREMENT'] = INCREMENT.List_F()
+
+ if ARCHIVAGE :
+ motscles['ARCHIVAGE'] = ARCHIVAGE.List_F()
+
+ if etatinit == 1 :
+
+ if MASSIF:
+ __EVOL1 = STAT_NON_LINE(INFO = INFO,CARA_ELEM=__CARA,MODELE = __MO,CHAM_MATER = __CHMAT,
+ ETAT_INIT=init_dico, EXCIT = l_char,**motscles)
+ else:
+ __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO,CHAM_MATER = __CHMAT,
+ ETAT_INIT=init_dico, EXCIT = l_char,**motscles)
+
+ else:
+
+ if MASSIF:
+ __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO, CARA_ELEM=__CARA,CHAM_MATER = __CHMAT,
+ EXCIT = l_char,**motscles)
+ else:
+ __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO, CHAM_MATER = __CHMAT,
+ EXCIT = l_char,**motscles)
+
+
+ __EVOL1 = CALC_ELEM(reuse = __EVOL1,RESULTAT = __EVOL1,
+ OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA'))
+
+ if MODELISATION=="3D":
+ angles=(ANGLE,0,0)
+ __EVOL=MODI_REPERE(RESULTAT=__EVOL1, MODI_CHAM=(
+ _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY','DZ'),TYPE_CHAM='VECT_3D',),
+ _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),TYPE_CHAM='TENS_3D',),
+ _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),TYPE_CHAM='TENS_3D',),
+ ),
+ DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
+ else :
+ angles=ANGLE
+ __EVOL=MODI_REPERE(RESULTAT=__EVOL1,MODI_CHAM=(
+ _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY'),TYPE_CHAM='VECT_2D',),
+ _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY'),TYPE_CHAM='TENS_2D',),
+ _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY'),TYPE_CHAM='TENS_2D',),
+ ),
+ DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
+
+# -- Recuperation des courbes
+
+ __REP_VARI = POST_RELEVE_T(ACTION = (
+ _F(INTITULE='VARI_INT',RESULTAT=__EVOL1,NOM_CHAM='VARI_ELNO_ELGA',
+ TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD='P0'),))
+
+
+ __REP_EPSI = POST_RELEVE_T(ACTION = (
+ _F(INTITULE='EPSILON',RESULTAT=__EVOL,NOM_CHAM='EPSI_ELNO_DEPL',
+ TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD = 'P0'),))
+
+ __REP_SIGM = POST_RELEVE_T(ACTION = (
+ _F(INTITULE = 'SIGMA',RESULTAT = __EVOL,NOM_CHAM = 'SIEF_ELNO_ELGA',
+ TOUT_CMP = 'OUI',OPERATION = 'EXTRACTION',NOEUD = 'P0'),))
+
+ __REP_INV = POST_RELEVE_T(ACTION = (
+ _F(INTITULE = 'INV',RESULTAT = __EVOL,NOM_CHAM = 'SIEF_ELNO_ELGA',
+ INVARIANT = 'OUI',OPERATION = 'EXTRACTION',NOEUD = 'P0'),))
+
+ __REP_INV=CALC_TABLE( TABLE=__REP_INV,reuse=__REP_INV,
+ ACTION=_F(OPERATION='EXTR',NOM_PARA=('INST','TRACE','VMIS'), ) )
+
+ self.DeclareOut('REPONSE',self.sd)
+
+ REPONSE=CALC_TABLE( TABLE=__REP_EPSI,TITRE='TABLE ',ACTION=(
+ _F(OPERATION='COMB',TABLE=__REP_SIGM,NOM_PARA=('INST'), ),
+ _F(OPERATION='COMB',TABLE=__REP_INV ,NOM_PARA=('INST'), ),
+ _F(OPERATION='COMB',TABLE=__REP_VARI,NOM_PARA=('INST'), ),))
+
+ return ier
+
--- /dev/null
+#@ MODIF stanley_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
+# -*- 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,DISPLAY,**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
+ from Utilitai.UniteAster import UniteAster
+
+ prev_onFatalError = aster.onFatalError()
+ aster.onFatalError('EXCEPTION')
+
+ ier=0
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Redefinition eventuelle du DISPLAY
+ if DISPLAY:
+ UTMESS('I','STANLEY_1',valk=DISPLAY)
+ os.environ['DISPLAY'] = DISPLAY
+
+ # Mode validation de la non-regression
+ if args['UNITE_VALIDATION']:
+ UTMESS('I','STANLEY_2')
+ UL = UniteAster()
+ FICHIER_VALID=UL.Nom(args['UNITE_VALIDATION'])
+ else:
+ FICHIER_VALID=None
+
+ # 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 .LGRF ' )
+ _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(FICHIER_VALID)
+
+ else:
+ UTMESS('A','STANLEY_3',valk=['STANLEY'])
+
+ aster.onFatalError(prev_onFatalError)
+
+ return ier
--- /dev/null
+#@ MODIF test_fichier_ops Macro DATE 10/11/2009 AUTEUR COURTOIS 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.
+# ======================================================================
+
+import sys
+import os
+import re
+
+# hashlib only exists in python>=2.5
+def hash_new():
+ try:
+ import hashlib
+ _hash_new = hashlib.md5()
+ print 'hashlib'
+ except ImportError:
+ import md5
+ _hash_new = md5.new()
+ print 'md5'
+ return _hash_new
+
+
+class TestFichierError(Exception):
+ pass
+
+
+def convert(x):
+ return float(x)
+
+def f_SOMM(somme, lx):
+ return somme + sum([convert(x) for x in lx])
+
+def f_SOMM_ABS(somme, lx):
+ return somme + sum([abs(convert(x)) for x in lx])
+
+def f_MINI(val, lx):
+ return min(val, min([convert(x) for x in lx]))
+
+def f_MAXI(val, lx):
+ return max(val, max([convert(x) for x in lx]))
+
+def f_MINI_ABS(val, lx):
+ return min(val, min([abs(convert(x)) for x in lx]))
+
+def f_MAXI_ABS(val, lx):
+ return max(val, max([abs(convert(x)) for x in lx]))
+
+dict_func_test = {
+ 'SOMM' : f_SOMM,
+ 'SOMM_ABS' : f_SOMM_ABS,
+ 'MINI' : f_MINI,
+ 'MAXI' : f_MAXI,
+ 'MINI_ABS' : f_MINI_ABS,
+ 'MAXI_ABS' : f_MAXI_ABS,
+}
+
+#-------------------------------------------------------------------------------
+def test_fichier_ops(self, FICHIER, NB_VALE, VALE, VALE_K, TYPE_TEST,
+ CRITERE, PRECISION, INFO, **kwargs):
+ """
+ Macro permettant de tester la non-regression d'un fichier.
+ On teste le nombre de réels présents, et, facultativement, la
+ somme de ces nombres et le texte du fichier.
+ """
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ 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 aster
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+
+ 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:
+ UTMESS('S','TEST0_2',valk=FICHIER)
+
+ # lecture du fichier
+ if not os.path.isfile(FICHIER):
+ UTMESS('S', 'TEST0_3', valk=FICHIER)
+ fileobj = open(FICHIER, 'r')
+
+ # filtre par expression régulière
+ try:
+ fileobj = regexp_filter(fileobj, kwargs['EXPR_IGNORE'])
+ except TestFichierError, valk:
+ UTMESS('S', 'TEST0_1', valk=valk)
+
+ # calcule le nombre de réels et la somme ou min/max
+ nbval, valeur, chksum = test_iter(fileobj, function=dict_func_test[TYPE_TEST], verbose=(INFO > 1))
+ fileobj.close()
+
+ # produit le TEST_TABLE
+ refsum = VALE_K or 'non testé'
+ is_ok = int(chksum == refsum)
+ tab1__ = CREA_TABLE(LISTE=(_F(PARA='NBVAL', LISTE_I=nbval,),
+ _F(PARA='VALEUR', LISTE_R=valeur,),
+ _F(PARA='TEXTE', LISTE_I=is_ok),),)
+ if VALE is not None:
+ sVALE = '%20.13e' % VALE
+ else:
+ sVALE = 'non testé'
+ UTMESS('I', 'TEST0_4', vali=(nbval, NB_VALE), valr=valeur, valk=(chksum, refsum, FICHIER, sVALE))
+
+ kwopt = { 'REFERENCE' : kwargs['REFERENCE'], }
+ if kwargs['REFERENCE'] == 'NON_REGRESSION':
+ kwopt['VERSION'] = kwargs['VERSION']
+
+ TEST_TABLE(TABLE=tab1__,
+ NOM_PARA='NBVAL',
+ VALE_I=NB_VALE,
+ CRITERE='ABSOLU',
+ PRECISION=0,
+ **kwopt)
+
+ if VALE:
+ TEST_TABLE(TABLE=tab1__,
+ NOM_PARA='VALEUR',
+ VALE=VALE,
+ CRITERE=CRITERE,
+ PRECISION=PRECISION,
+ **kwopt)
+
+ if VALE_K:
+ TEST_TABLE(TABLE=tab1__,
+ NOM_PARA='TEXTE',
+ VALE_I=int(True),
+ PRECISION=0,
+ CRITERE='ABSOLU',
+ **kwopt)
+
+ DETRUIRE(CONCEPT=_F(NOM=(tinfo__, tab1__),),
+ ALARME='NON',INFO=1,)
+ return ier
+
+#-------------------------------------------------------------------------------
+def regexp_filter(file_in, regexp_ignore, debug=False):
+ """Filtre le fichier fourni (file descriptor) en utilisant les
+ expressions régulières fournies.
+ On retourne l'objet file vers le fichier modifié (ou non).
+ """
+ if not regexp_ignore: # None or []
+ return file_in
+ # vérification des expressions régulières
+ if type(regexp_ignore) not in (list, tuple):
+ regexp_ignore = [regexp_ignore,]
+ l_regexp = []
+ for exp in regexp_ignore:
+ try:
+ obj = re.compile(exp)
+ except re.error, s:
+ raise TestFichierError, (s, str(exp))
+ else:
+ l_regexp.append(obj)
+ # filtre du fichier
+ file_out = os.tmpfile()
+ file_in.seek(0)
+ for i, line in enumerate(file_in):
+ if debug:
+ print 'LIGNE', i,
+ keep = True
+ for exp in l_regexp:
+ if exp.search(line):
+ keep = False
+ if debug:
+ print ' >>>>>>>>>> IGNOREE <<<<<<<<<<'
+ break
+ if keep:
+ file_out.write(line)
+ if debug:
+ print
+ file_out.seek(0)
+ return file_out
+
+
+#-------------------------------------------------------------------------------
+re_float_expo = re.compile('[-+]?[0-9\.]+[eED][\-\+]{0,1}[0-9]+')
+re_float = re.compile('[-+]?[0-9]+?\.[0-9]*')
+re_int = re.compile('[0-9]+')
+
+re_fortran = re.compile('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)')
+
+#-------------------------------------------------------------------------------
+def test_iter(obj, function, verbose=False):
+ """
+ Cette fonction compte le nombre de réels dans le fichier et une grandeur
+ à partir des valeurs (somme, sommes des valeurs absolues, min/max...).
+ IN :
+ obj : objet 'file' ou 'string' sur le lequel on peut itérer
+ function : fonction de test val = func_test(val, [xi, ...])
+ verbose : on affiche le résumé si info>0
+ OUT :
+ nombre de valeurs, valeur résultat
+ """
+ max_buff_size = 1000
+ nbval = 0
+ val = 0.
+ hfile = hash_new()
+
+ # Si on lit tout le fichier d'un coup, on va environ 3 fois plus vite
+ # que si on le lit ligne à ligne, mais on consomme en mémoire environ
+ # 5 fois la taille du fichier...
+ # En lisant par paquet de 1000 (ou 10000), on va quasiment aussi vite
+ # en consommant très peu de mémoire.
+
+ # fichier tout ligne/ligne 1000 lignes
+ # 10 Mo 3 s 10 s 3 s
+ # 50 Mo 17 s 48 s 17 s
+ # 100 Mo 34 s 96 s 35 s
+
+ # l'itérateur est l'objet file lui-même ou on le crée sur la liste
+ if type(obj) is file:
+ obj.seek(0)
+ iterator = obj
+ else:
+ iterator = iter(obj)
+
+ ok = True
+ buff = []
+ while ok:
+ try:
+ text = iterator.next()
+ except StopIteration:
+ ok = False
+ text = ''
+ buff.append(text)
+ if ok and len(buff) < max_buff_size:
+ continue
+ else:
+ text = ''.join(buff)
+ buff = []
+
+ l_float = re_float_expo.findall(text)
+ l_float = [s.replace('D', 'E') for s in l_float]
+ text = re_float_expo.sub('', text)
+ l_float.extend(re_float.findall(text))
+ text = re_float.sub('', text)
+ l_float.extend( re_int.findall(text))
+ text = re_int.sub('', text)
+
+ nbval += len(l_float)
+ val = function(val, l_float)
+
+ text = ''.join([s.strip() for s in text.split()])
+ hfile.update(text)
+
+ if verbose:
+ print 'Nombres réels et entiers :'
+ print l_float
+ print 'Texte :'
+ print text
+
+ chksum = hfile.hexdigest()
+
+ return nbval, val, chksum
+
+#-------------------------------------------------------------------------------
+def test_file(filename, regexp_ignore=[], type_test='SOMM', verbose=False):
+ """Raccourci pour tester rapidement un fichier (utilisé par stanley.py).
+ """
+ if type(regexp_ignore) not in (list, tuple):
+ regexp_ignore = [regexp_ignore,]
+
+ fileobj = open(filename, 'r')
+ fileobj = regexp_filter(fileobj, regexp_ignore)
+
+ nbv, val, chksum = test_iter(fileobj, function=dict_func_test[type_test], verbose=verbose)
+
+ return nbv, val, chksum
+
+#-------------------------------------------------------------------------------
+if __name__ == '__main__':
+ from optparse import OptionParser, OptionGroup
+
+ p = OptionParser(usage='usage: %s fichier [options]' % sys.argv[0])
+ p.add_option('--type_test',
+ action='store', dest='type_test', default='SOMM',
+ help='type du test : SOMM, SOMM_ABS, MIN, MAX')
+ p.add_option('--expr_ignore',
+ action='store', dest='exp', type='string',
+ help='expression régulière à ignorer')
+ p.add_option('-v', '--verbose',
+ action='store_true', dest='verbose', default=False,
+ help='mode bavard')
+ opts, args = p.parse_args()
+
+ if len(args) == 0:
+ p.error('fichier à tester ?')
+
+ if opts.exp is None:
+ exp = []
+ else:
+ exp = [opts.exp]
+
+ fileobj = open(args[0], 'r')
+ fileobj = regexp_filter(fileobj, exp)
+ nbv2, sumv2, chksum2 = test_iter(fileobj, function=dict_func_test[opts.type_test], verbose=opts.verbose)
+ print '%6d valeurs, resultat = %f, texte : %s' % (nbv2, sumv2, chksum2)
+
+
--- /dev/null
+#@ MODIF test_fonction_ops Macro DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SELLENET N.SELLENET
+
+import os
+
+from Noyau.N_types import is_complex, is_str, is_enum
+
+epsi = 1e-15
+
+# Format
+ligne_fct_1 = """ ---- FONCTION %(nom_para)s"""
+ligne_fct_11= """ ---- FONCTION %(nom_para)s TITRE """
+ligne_fct_2 = """ %(nom_fct)s %(val_para)s """
+ligne_fct_22= """ %(nom_fct)s %(val_para)s %(titre)s """
+ligne_fct_3 = """ %(refe)s %(legende)s %(valref)s %(valcal)s %(erreur)s %(tole)s """
+ligne_fct_4 = """ %(testOk)s %(refe)s %(legende)s %(valref)s %(valcal)s %(erreur)s %(tole)s """
+
+ligne_nap_1 = """ ---- NAPPE %(nom_para_0)s %(nom_para)s """
+ligne_nap_2 = """ %(nom_nap)s %(val_para_0)s %(val_para)s"""
+
+ligne_att_1 = """ ---- %(nom)s %(nom_attr)s %(nom_para)s %(vale)s """
+ligne_att_2 = """ ---- %(nom)s %(nom_attr)s %(vale)s """
+ligne_att_11= """ %(nom)s %(nom_attr)s %(nom_para)s %(vale)s """
+ligne_att_22= """ %(nom)s %(nom_attr)s %(vale)s """
+ligne_att_3 = """ %(testOk)s TEST_ATTRIBUTS """
+
+ligne_separatrice = 80*'-'
+
+ligne_intspc = """ ---- INTERSPECTRE %(nom_para)s"""
+ligne_intspc_1 = """ %(nom)s %(val_para)s"""
+
+list_fct = ['REFERENCE','LEGENDE','VALE_REF','VALE_CAL','ERREUR','TOLE']
+list_attr = ['ATTR','PARA','VALE']
+
+
+def TesterValeur(nomPara,valPu,valRef,res,epsi,crit,sSigne):
+ """
+ Teste de la valeur calculee par rapport a la valeur de reference
+ """
+ import aster, cmath, math
+
+ isTestOk = 0
+ vtc = valRef[0]
+ if is_enum(vtc):
+ assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+ if vtc[0]=='RI':
+ vtc = vtc[1]+1j*vtc[2]
+ else:
+ vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+ if sSigne == 'OUI':
+ res = abs(res)
+ if is_complex(valRef[0]):
+ vtc = abs(vtc)
+
+ # Recherche de la valeur la plus proche de la valeur calculee
+ # dans le tableau valRef
+ minTmp = abs(res - vtc)
+ curI = 0
+ for i in range(len(valRef)):
+ vtc = valRef[i]
+ if is_enum(vtc):
+ assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+ if vtc[0]=='RI':
+ vtc = vtc[1]+1j*vtc[2]
+ else:
+ vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+ if sSigne == 'OUI' and is_complex(vtc):
+ vtc = abs(vtc)
+ valTmp = abs(res-vtc)
+ if valTmp < minTmp:
+ valTmp = minTmp
+ curI = i
+
+ vtc = valRef[curI]
+ if is_enum(vtc):
+ assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+ if vtc[0]=='RI':
+ vtc = vtc[1]+1j*vtc[2]
+ else:
+ vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+ if sSigne == 'OUI' and is_complex(vtc):
+ vtc = abs(vtc)
+
+ testOk = 'NOOK'
+ curEps = 0
+ err = 0
+ pourcent = ' '
+ # Calcul de l'erreur commise
+ if crit[0:4] == 'RELA':
+ isTestOk = ( abs(res-vtc) <= epsi*abs(vtc) )
+ if vtc != 0:
+ if is_complex(res) or is_complex(vtc):
+ err = abs(res - vtc)/abs(vtc)*100
+ else:
+ err = (res - vtc)/vtc*100
+ else:
+ err = 999.999999
+ if isTestOk: testOk = ' OK '
+ curEps = epsi*100
+ pourcent = '%'
+ else:
+ isTestOk = ( abs(res-vtc) <= epsi )
+ if is_complex(res) or is_complex(vtc):
+ err = abs(res - vtc)
+ else:
+ err = res - vtc
+ if isTestOk: testOk = ' OK '
+ curEps = epsi
+
+ return {'testOk' : testOk, 'erreur' : err, 'epsilon' : curEps, 'valeurRef' :vtc}
+
+
+def RoundValues(type,res,vtc,err,curEps):
+ """
+ Effectue des troncatures en fonctions des valeurs réelles fournies
+ et retourne eventuellement des valeurs sans exposant
+ """
+ #valeur calculee, valeur de reference:
+ #------------------------------------
+ if type=='R':
+ res2 = """%20.15E """%res
+ vtc2 = """%20.15E """%vtc
+
+ # détermination du nombre de décimales à considérer : ndec
+ ndec=0
+ ii=res2.find('E')
+ sgExpoRes=res2[ii+1:ii+2]
+ expoRes=int(res2[ii+2:ii+4])
+ ii=vtc2.find('E')
+ sgExpoVtc=vtc2[ii+1:ii+2]
+ expoVtc=nexpo=int(res2[ii+2:ii+4])
+ # si les signes des exposants diffèrent : ndec = 6
+ if sgExpoRes != sgExpoVtc : ndec = 6
+ # si les signes des valeurs diffèrent : ndec = 6
+ if res*vtc<0 : ndec = 6
+ #si les exposants diffèrent : ndec = 6
+ if expoRes!=expoVtc : ndec = 6
+ #position de la première décimale différente : posD
+ if ndec == 0 :
+ kk=0
+ for k in range(len(res2)):
+ if res2[k]==' ':continue
+ if res2[k]==vtc2[k]:
+ kk=kk+1
+ continue;
+ break;
+ if kk==0:
+ ndec=6
+ else:
+ posD=kk-1
+ ndec=min(14,posD+2)
+ #on supprime les zéros inutiles
+ if ndec==14:
+ i1=res2.find('E');i2=res2.find('.');
+ kk=0
+ for k in range(i1-1,i2,-1):
+ if res2[k]=='0' and res2[k]==vtc2[k]:
+ kk=kk+1
+ continue
+ break
+ if kk>0: ndec=min(14,i1-kk-i2)
+ #troncatures
+ chndec="""%20."""+str(ndec)+"""E"""
+ rest=chndec%res
+ rest=rest.strip()
+ vtct=chndec%vtc
+ vtct=vtct.strip()
+
+ #écriture éventuelle sans exposant
+# if(sgExpoRes=='+'):
+# if(ndec>=expoRes):
+# chdiff="""%20."""+str(min(1,ndec-expoRes))+"""f"""
+# resr=chdiff%res
+# resr=resr.strip()
+# vtcr=chdiff%vtc
+# vtcr=vtcr.strip()
+# else:
+# resr=rest
+# vtcr=vtct
+# else:
+# if(ndec+expoRes)<=12:
+# chadd="""%20."""+str(ndec+expoRes-1)+"""f"""
+# resr=chadd%res
+# resr=resr.strip()
+# vtcr=chadd%vtc
+# vtcr=vtcr.strip()
+# else:
+# resr=rest
+# vtcr=vtct
+ if(abs(res)>=0.01 and abs(res)<100000):
+ chdiff="""%20."""+str(ndec)+"""f"""
+ resr=chdiff%res
+ resr=resr.strip()
+ else:
+ resr=rest.strip()
+
+ if(abs(vtc)>=0.01 and abs(vtc)<100000):
+ chdiff="""%20."""+str(ndec)+"""f"""
+ vtcr=chdiff%vtc
+ vtcr=vtcr.strip()
+ else:
+ vtcr=vtct.strip()
+
+
+
+
+ # erreur et tolerance:
+ #--------------------
+ listEpsiOut=[];
+ listEpsiIn=[err,curEps];
+ for erin in listEpsiIn:
+ err2 = ("""%5.1E """%(abs(erin))).strip()
+ chdiff="""%5.1f"""
+ ii=err2.find('E')
+ expo=err2[ii+2:ii+4]
+ sg=err2[ii+1:ii+2]
+ nexpo=int(expo)
+ if(abs(erin)>0.01 and abs(erin)<100000):
+ #listEpsiOut.append((str(abs(erin)).strip())[:nexpo+2])
+ listEpsiOut.append((chdiff%abs(erin)).strip())
+ else:
+ listEpsiOut.append(err2)
+
+ errr=listEpsiOut[0]
+ curEpsr=listEpsiOut[1]
+
+ return (resr,vtcr,errr,curEpsr)
+
+
+def AfficherResultat(dicoValeur, nomPara, ref, legende, crit, res, valPu, txt):
+ """
+ Gestion de l'affichage par ajout de texte au tableau txt
+ passe en parametre
+ """
+ testOk = dicoValeur['testOk']
+ err = dicoValeur['erreur']
+ curEps = dicoValeur['epsilon']
+ vtc = dicoValeur['valeurRef']
+
+ pourcent = ' '
+ if crit[0:4] == 'RELA':
+ pourcent = '%'
+
+ if is_complex(res):
+ if not is_complex(vtc):
+ vtc0=complex(vtc,0)
+ else:
+ vtc0=vtc
+ resr,vtcr,errr,curEpsr=RoundValues('R',res.real,vtc0.real,err,curEps)
+ resc,vtcc,errr,curEpsr=RoundValues('R',res.imag,vtc0.imag,err,curEps)
+ else:
+ vtc0=vtc
+ res2,vtc2,errr,curEpsr=RoundValues('R',res,vtc0,err,curEps)
+
+ if is_complex(res):
+ if(res.imag<0):
+ val_cal=resr.upper()+resc.upper()+'j'
+ else:
+ val_cal=resr.upper()+'+'+resc.upper()+'j'
+ else:
+ val_cal=res2.upper()
+
+
+ if is_complex(vtc0):
+ if(vtc0.imag<0):
+ val_ref=vtcr.upper()+vtcc.upper()+'j'
+ else:
+ val_ref=vtcr.upper()+'+'+vtcc.upper()+'j'
+ else:
+ val_ref=vtc2.upper()
+
+ espace = (len(val_ref)-8)*' '
+ chvalref='VALE_REF'+espace
+ espace = (len(val_cal)-8)*' '
+ chvalcal='VALE_CAL'+espace
+
+ if(len(val_ref)<=16):nvref=16
+ elif(len(val_ref)<=24):nvref=24
+ elif(len(val_ref)<=36):nvref=36
+ else: nvref=48
+
+ if(len(val_cal)<=16):nvcal=16
+ elif(len(val_cal)<=24):nvcal=24
+ elif(len(val_cal)<=36):nvcal=36
+ else: nvcal=48
+
+ # Ajout du texte en fonction du resultat: ligne 3
+ current = { 'refe' : list_fct[0]+(16 - len(list_fct[0]))*' ',
+ 'legende' : list_fct[1]+(16 - len(list_fct[1]))*' ',
+ 'valref' : list_fct[2]+(nvref - len(list_fct[2]))*' ',
+ 'valcal' : list_fct[3]+(nvcal - len(list_fct[3]))*' ',
+ 'erreur' : list_fct[4]+(16 - len(list_fct[4]))*' ',
+ 'tole' : list_fct[5]+(16 - len(list_fct[5]))*' ',
+ }
+ txt.append(ligne_fct_3 % current)
+
+ # Ajout du texte en fonction du resultat : ligne 4
+ current = { 'testOk' : testOk,
+ 'refe' : ref+(16 - len(ref))*' ',
+ 'legende' : legende+(16 - len(legende))*' ',
+ 'valref' : val_ref+(nvref - len(val_ref))*' ',
+ 'valcal' : val_cal+(nvcal - len(val_cal))*' ',
+ 'erreur' : str(errr)+pourcent+(16 - len(str(errr)+pourcent))*' ',
+ 'tole' : str(curEpsr)+pourcent+(16 - len(str(curEpsr)+pourcent))*' ',
+ }
+ txt.append(ligne_fct_4 % current)
+ txt.append(' ')
+
+# -----------------------------------------------------------------------------
+def test_fonction_ops(self,TEST_NOOK,VALEUR,ATTRIBUT,TABL_INTSP,**args):
+ """
+ Corps de la macro TEST_FONCTION
+ """
+ macro='TEST_FONCTION'
+ import aster
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS
+ from Noyau.N_FONCTION import formule, formule_c
+ from SD.co_fonction import fonction_sdaster, fonction_c, nappe_sdaster
+ from SD.sd_fonction import sd_fonction
+ from Cata_Utils.t_fonction import t_fonction_c
+
+ CALC_FONCTION = self.get_cmd('CALC_FONCTION')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ if ( TEST_NOOK=='OUI' ) & ( TABL_INTSP != None ):
+ UTMESS('F','PREPOST3_92')
+
+ # txt sert a l'affichage dans le fichier RESULTAT
+ txt = ['',]
+ txt.append(ligne_separatrice)
+
+ if VALEUR != None:
+ # Boucle sur les VALEURS
+ for val in VALEUR:
+ dres = val.cree_dict_valeurs(val.mc_liste)
+
+ # Recherche des mots-cles simples
+ ssigne = dres['VALE_ABS']
+ epsi = dres['PRECISION']
+ crit = dres['CRITERE']
+ fct = dres['FONCTION']
+ sensi = dres['SENSIBILITE']
+ nompara = dres['NOM_PARA']
+ if nompara == None:
+ nompara = ''
+ ref = dres['REFERENCE']
+ ver = None
+ if ref == 'NON_REGRESSION':
+ ver = dres['VERSION']
+ legende = dres['LEGENDE']
+ if legende == None:
+ legende='XXXX'
+ nomfct = fct.nomj.nomj
+
+ # Transformation de nompara en liste
+ if (not is_enum(nompara)) and nompara != None:
+ nompara = [nompara,]
+
+ bcle = []
+ pres_sensi = 0
+ # Si on a des parametres sensibles, on boucle dessus
+ # sinon, on boucle uniquement sur la fonction a tester
+ if sensi == None:
+ bcle = [fct,]
+ else:
+ pres_sensi = 1
+ if not is_enum(sensi):
+ bcle = [sensi,]
+
+ for ps in bcle:
+ # Suivant le cas, la foction est soit issue des parametres
+ # sensibles soit directement de dres['FONCTION']
+ lafonc = None
+ titre = ''
+ # Si on a des parametres sensible la fonction n'est pas ps
+ if pres_sensi == 1:
+ ncomp = self.jdc.memo_sensi.get_nocomp(fct.nom, ps.nom)
+ lafonc = self.jdc.memo_sensi.d_sd[ncomp]
+ titre = 'SENSIBILITE AU PARAMETRE '+ps.nomj.nomj
+ else:
+ lafonc = ps
+
+ res = 0.
+ typeFct = ''
+ valpu = dres['VALE_PARA']
+ if not is_enum(valpu): valpu = [valpu,]
+
+ valref = None
+ if (type(lafonc) == formule_c) or (type(lafonc) == fonction_c):
+ valref = dres['VALE_REFE_C']
+ else:
+ valref = dres['VALE_REFE']
+ # L'enjeu est de transformer valref en tableau
+ if not is_enum(valref): valref = [valref,]
+ else:
+ if is_str(valref[0]):
+ valref = [valref,]
+
+ intervalle = dres['INTERVALLE']
+
+ ier = 0
+ # Distinction des cas
+ # - "fonction" sur un intervalle
+ # - "formule",
+ # - "fonction" ou "nappe"
+ if (type(lafonc) == fonction_sdaster) and intervalle != None:
+ fctProl = lafonc.PROL.get()
+ prolG = 'rien'
+ if fctProl[4][0:1] == 'C':
+ prolG = 'CONSTANT'
+ elif fctProl[4][0:1] == 'E':
+ prolG = 'EXCLU'
+ elif fctProl[4][0:1] == 'L':
+ prolG = 'LINEAIRE'
+ prolD = 'rien'
+ if fctProl[4][1:2] == 'C':
+ prolD = 'CONSTANT'
+ elif fctProl[4][1:2] == 'E':
+ prolD = 'EXCLU'
+ elif fctProl[4][1:2] == 'L':
+ prolD = 'LINEAIRE'
+ curInterpol = [fctProl[1][0:3], fctProl[1][4:7]]
+
+ fctInt = CALC_FONCTION(INTEGRE = _F(FONCTION=lafonc,),
+ PROL_DROITE = prolD,
+ PROL_GAUCHE = prolG,
+ INTERPOL = curInterpol)
+
+ res1 = fctInt(intervalle[0])
+ res2 = fctInt(intervalle[1])
+
+ DETRUIRE(CONCEPT = _F(NOM = fctInt),INFO = 1)
+
+ res = (res2-res1)/(intervalle[1]-intervalle[0])
+ valpu[0] = intervalle[0]
+
+ elif type(lafonc) in (formule, formule_c):
+ # Lecture des valeurs de reference dans les mots-cles simples
+ if type(lafonc) == formule_c: typeFct = 'formule_c'
+ else: typeFct = 'formule'
+
+ # On cherche les valeurs de reference passees a TEST_FONCTION et
+ # on les trie grace a ceux de la formule
+ paramFormule = lafonc.Parametres()['NOM_PARA']
+ if not is_enum(paramFormule):
+ paramFormule = [paramFormule,]
+ if nompara[0] == '':
+ nompara = paramFormule
+
+ # On verifie que la formule a bien le meme nombre de parametres
+ # que ceux passes a la fonction TEST_FONCTION
+ if len(nompara) != len(paramFormule):
+ ier = 160
+ UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+ UTMESS('A','FONCT0_14',vali=(len(nompara),len(paramFormule)))
+ return 0.
+
+ # Trie des parametres passes a la fonction TEST_FONCTION pour
+ # correspondre a l'ordre de ceux de la formule
+ nParamOrdo = []
+ vParamOrdo = []
+ for iPN in range(len(paramFormule)):
+ nParamOrdo.append('')
+ #vParamOrdo.append('')
+
+ compteur = 0
+ for iPN in range(len(paramFormule)):
+ i = 0
+ for iPU in range(len(nompara)):
+ if paramFormule[iPN] == nompara[iPU]:
+ if nParamOrdo[iPN] == '':
+ vParamOrdo.append(valpu[iPU])
+ nParamOrdo[iPN] = paramFormule[iPN]
+ compteur = compteur + 1
+ else:
+ ier = 120
+ UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+ UTMESS('A','FONCT0_15',valk=nompara)
+ res = 0.
+ i = i + 1
+ if nParamOrdo[iPN] == '':
+ ier = 130
+ UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+ UTMESS('A','FONCT0_16',valk=paramFormule)
+ UTMESS('A','FONCT0_17',valk=nompara)
+ return 0.
+
+ # Si tout est Ok, on calcul la valeur de la formule
+ if ier == 0:
+ res = lafonc(*vParamOrdo)
+
+ # Cas fonction et nappe
+ elif type(lafonc) in (fonction_sdaster, fonction_c, nappe_sdaster):
+ # Recuperation du .PROL de la fonction
+ fct_prol = lafonc.PROL.get_stripped()
+ if lafonc.PROL == None: UTMESS('F','PREPOST3_93')
+
+ nompu = ''
+ if nompara[0] != '':
+ nompu = nompara[0]
+ else:
+ nompu = fct_prol[2]
+ nompara = [nompu,]
+
+ # Une nappe a forcement 2 parametres
+ if (fct_prol[0] == 'NAPPE') & (len(nompara) == 1):
+ UTMESS('A','PREPOST3_94')
+ break
+
+ # Lecture de la valeur de reference
+ if fct_prol[0] == 'FONCT_C':
+ typeFct = 'fonction_c'
+ else:
+ if fct_prol[0] == 'NAPPE': typeFct = 'nappe'
+ else: typeFct = 'fonction'
+
+ # Calcul de la fonction
+ res = 0
+ if type(lafonc) in (fonction_sdaster, fonction_c):
+ res = lafonc(valpu[0])
+ else:
+ # Remise dans l'ordre des param
+ paramNappe = [fct_prol[2], fct_prol[6]]
+ vParamOrdo = ['','']
+ for iPN in range(len(paramNappe)):
+ i = 0
+ for iPU in range(len(nompara)):
+ if paramNappe[iPN] == nompara[iPU]:
+ if vParamOrdo[iPN] != '':
+ ier = 120
+ UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+ UTMESS('A','FONCT0_15',valk=nompara)
+ else:
+ vParamOrdo[iPN] = valpu[iPU]
+ i = i + 1
+ if vParamOrdo[iPN] == '':
+ ier = 130
+ UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+ UTMESS('A','FONCT0_16',valk=paramNappe)
+ UTMESS('A','FONCT0_17',valk=nompara)
+ res = lafonc(vParamOrdo[0],vParamOrdo[1])
+ else: ier = 150
+
+ # Construction de l'affiche du resultat
+ current = {}
+
+ nomLastPara = nompara[len(nompara)-1]
+ valLastPara = valpu[len(valpu)-1]
+ if (typeFct == 'nappe'):
+
+ #ligne 1
+ nb_espace = 16-len(str(nompu))
+ espace = nb_espace*' '
+ current['nom_para_0'] = str(nompu)+espace
+ nb_espace = 16-len(str(nomLastPara))
+ espace = nb_espace*' '
+ current['nom_para'] = str(nomLastPara)+espace
+ txt.append(ligne_nap_1 % current)
+
+ #ligne 2
+ current = {}
+ nb_espace = 16-len(nomfct)
+ espace = nb_espace*' '
+ current['nom_nap'] = nomfct+espace
+ nb_espace = 16-len(str(valpu[0]))
+ espace = nb_espace*' '
+ current['val_para_0'] = str(valpu[0])+espace
+ nb_espace = 16-len(str(valLastPara))
+ espace = nb_espace*' '
+ current['val_para'] = str(valLastPara)+espace
+ txt.append(ligne_nap_2 % current)
+
+
+ else:
+
+ #ligne 1
+ nb_espace = 16-len(str(nomLastPara))
+ espace = nb_espace*' '
+ current['nom_para'] = str(nomLastPara)+espace
+ if(len(titre)>1):txt.append(ligne_fct_11% current)
+ else:txt.append(ligne_fct_1% current)
+
+ #ligne 2
+ current = {}
+ nb_espace = 16-len(nomfct)
+ espace = nb_espace*' '
+ current['nom_fct'] = nomfct+espace
+ nb_espace = 16-len(str(valLastPara))
+ espace = nb_espace*' '
+ current['val_para'] = str(valLastPara)+espace
+ if(len(titre)>1):
+ nb_espace = 33-len(titre)
+ espace = nb_espace*' '
+ current['titre'] = titre
+ txt.append(ligne_fct_22 % current)
+ else:
+ txt.append(ligne_fct_2 % current)
+
+ if ref == None: ref = 'NON_DEFINI'
+
+ # Test des valeurs calculees
+ curDict=TesterValeur(nomLastPara,valLastPara,valref,res,epsi,crit,ssigne)
+
+ if TEST_NOOK == 'OUI':
+ if ier == 0:
+ testOk = curDict['testOk']
+ if testOk == ' OK ':
+ txt.append('NOOK PAS DE CHANCE LE TEST EST CORRECT !!!')
+ else:
+ AfficherResultat(curDict, nomLastPara, ref, legende, crit, res, valLastPara, txt)
+ elif ier == 120:
+ txt.append(' OK PARAMETRE EN DOUBLE')
+ elif ier == 130:
+ txt.append(' OK PARAMETRE NON CORRECT')
+ elif ier == 150:
+ txt.append(' OK TYPE DE FONCTION NON TRAITE')
+ elif ier == 160:
+ txt.append(' OK PAS ASSEZ DE PARAMETRES')
+ else:
+ if ier != 0:
+ txt.append('NOOK PB INTERPOLATION. VOIR MESSAGE CI-DESSUS')
+ else:
+ AfficherResultat(curDict,nomLastPara,ref,legende,crit,res,valLastPara,txt)
+
+ if ATTRIBUT != None:
+ first_affiche_ligne1=True;
+ resu_test_attr=' OK '
+ # Boucle sur le mot-cle ATTRIBUT
+ for attr in ATTRIBUT:
+ dres = attr.cree_dict_valeurs(attr.mc_liste)
+ # Lecture des mots-cles simples
+ ref = dres['REFERENCE']
+ ver = None
+ if ref == 'NON_REGRESSION':
+ ver = dres['VERSION']
+ fonction = dres['FONCTION']
+ fctProl = fonction.PROL.get_stripped()
+ typeFct = fctProl[0]
+ para = dres['PARA']
+ fctPara = fonction.PARA.get()
+
+ pos = 0
+ # Cas particulier d'une nappe qui a 2 dimensions
+ if typeFct == 'NAPPE':
+ if para != None:
+ # Recherche de la fonction liee a para
+ precPara = dres['PREC_PARA']
+ critPara = dres['CRIT_PARA']
+ LOK = 0
+ compteur = 0
+ for curPara in fctPara:
+ if critPara[0:4] == 'RELA':
+ LOK = ( abs(para-curPara) <= precPara*abs(curPara) )
+ else:
+ LOK = ( abs(para-curPara) <= precPara )
+ if LOK:
+ pos = compteur
+ break
+ compteur = compteur + 1
+ if not LOK:
+ UTMESS('A','PREPOST3_95')
+ else:
+ para = fctPara[0]
+
+ # Lecture des parametres de reference
+ nomAttr = dres['ATTR']
+ valAttrRef = dres['ATTR_REFE']
+
+ # Recherche de la valeur de l'attribut dans le .PROL
+ nompu = ''
+ testOk = 'NOOK'
+ if nomAttr == 'INTERPOL_FONC':
+ nompu = fctProl[7+2*(pos)]+' '
+ elif nomAttr == 'INTERPOL':
+ nompu = fctProl[1]+' '
+ elif nomAttr == 'NOM_PARA_FONC':
+ nompu = fctProl[6]
+ elif nomAttr == 'NOM_PARA':
+ nompu = fctProl[2]
+ elif nomAttr == 'NOM_RESU':
+ nompu = fctProl[3]
+ elif nomAttr == 'PROL_GAUCHE_FONC':
+ prolFonc = fctProl[7+2*(pos)+1]
+ nompu = prolFonc[0:1]
+ if nompu == 'E':
+ nompu = 'EXCLU'
+ elif nompu == 'C':
+ nompu = 'CONSTANT'
+ elif nompu == 'L':
+ nompu = 'LINEAIRE'
+ elif nomAttr == 'PROL_DROITE_FONC':
+ prolFonc = fctProl[7+2*(pos)+1]
+ nompu = prolFonc[1:2]
+ if nompu == 'E':
+ nompu = 'EXCLU'
+ elif nompu == 'C':
+ nompu = 'CONSTANT'
+ elif nompu == 'L':
+ nompu = 'LINEAIRE'
+ elif nomAttr == 'PROL_GAUCHE':
+ prolFonc = fctProl[4]
+ nompu = prolFonc[0:1]
+ if nompu == 'E':
+ nompu = 'EXCLU'
+ elif nompu == 'C':
+ nompu = 'CONSTANT'
+ elif nompu == 'L':
+ nompu = 'LINEAIRE'
+ elif nomAttr == 'PROL_DROITE':
+ prolFonc = fctProl[4]
+ nompu = prolFonc[1:2]
+ if nompu == 'E':
+ nompu = 'EXCLU'
+ elif nompu == 'C':
+ nompu = 'CONSTANT'
+ elif nompu == 'L':
+ nompu = 'LINEAIRE'
+
+ # Test de la valeur
+ if ( nompu == valAttrRef ): testOk = ' OK '
+ if TEST_NOOK == 'OUI':
+ if testOk == ' OK ': testOk = 'NOOK'
+ else: testOk = ' OK '
+ if testOk=='NOOK':resu_test_attr='NOOK'
+
+ # Construction de l'affichage
+ nomFct = fonction.nomj.nomj
+
+ # ligne 1 (affichée qu'à la première occurrence)
+ current = {}
+ if first_affiche_ligne1 :
+ first_affiche_ligne1=False
+ if typeFct == 'NAPPE':
+ nb_espace = 16-len('NAPPE')
+ espace = nb_espace*' '
+ current['nom'] = 'NAPPE'+espace
+ else:
+ nb_espace = 16-len('FONCTION')
+ espace = nb_espace*' '
+ current['nom'] = 'FONCTION'+espace
+
+ nb_espace = 16-len(list_attr[0])
+ espace = nb_espace*' '
+ current['nom_attr'] = list_attr[0]+espace
+ if typeFct == 'NAPPE':
+ nb_espace = 16-len(list_attr[1])
+ espace = nb_espace*' '
+ current['nom_para'] = list_attr[1]+espace
+ nb_espace = 16-len(list_attr[2])
+ espace = nb_espace*' '
+ current['vale'] = list_attr[2]+espace
+ if typeFct == 'NAPPE':
+ txt.append(ligne_att_1 % current)
+ else:
+ txt.append(ligne_att_2 % current)
+
+ # ligne 2
+ current = {}
+ nb_espace = 16-len(nomFct)
+ espace = nb_espace*' '
+ current['nom'] = nomFct+espace
+ nb_espace = 16-len(nomAttr)
+ espace = nb_espace*' '
+ current['nom_attr'] = nomAttr+espace
+ if typeFct == 'NAPPE':
+ nb_espace = 16-len(str(para))
+ espace = nb_espace*' '
+ current['nom_para'] = str(para)+espace
+ nb_espace = 16-len(nompu)
+ espace = nb_espace*' '
+ current['vale'] = nompu+espace
+ if typeFct == 'NAPPE':
+ txt.append(ligne_att_11 % current)
+ else:
+ txt.append(ligne_att_22 % current)
+ current = {}
+ current['testOk'] = resu_test_attr
+ txt.append(ligne_att_3 % current)
+
+ if TABL_INTSP != None:
+ # Boucle sur interspectres
+ for intSpec in TABL_INTSP:
+ dres = intSpec.cree_dict_valeurs(intSpec.mc_liste)
+ ref = dres['REFERENCE']
+ ver = None
+ if ref == 'NON_REGRESSION':
+ ver = dres['VERSION']
+ crit = dres['CRITERE']
+ epsi = dres['PRECISION']
+ legende = dres['LEGENDE']
+ if legende == None:
+ legende='XXXX'
+ table = dres['INTE_SPEC']
+
+ dataTable = table.EXTR_TABLE().values()
+ valePara = dres['VALE_PARA']
+ valeRef = dres['VALE_REFE_C']
+ numeOrdreI = dres['NUME_ORDRE_I']
+ noeudI = dres['NOEUD_I']
+ numeOrdreJ = None
+ noeudJ = None
+ nomCmpI = None
+ nomCmpJ = None
+
+ i = -1
+ numeViteF = dres['NUME_VITE_FLUI']
+ presNumeVF = False
+ dTNumVF = None
+ if numeViteF != None:
+ presNumeVF = True
+ dTNumVF = dataTable['NUME_VITE_FLUI']
+ if numeOrdreI != None:
+ numeOrdreJ = dres['NUME_ORDRE_J']
+
+ dTNumOrdreI = dataTable['NUME_ORDRE_I']
+ dTNumOrdreJ = dataTable['NUME_ORDRE_J']
+
+ for i in range(len(dTNumOrdreI)):
+ if dTNumOrdreI[i] == None: continue
+ test1 = (dTNumOrdreI[i] == numeOrdreI)
+ test2 = (dTNumOrdreJ[i] == numeOrdreJ)
+ test3 = False
+ if presNumeVF:
+ test3 = (dTNumVF[i] == numeViteF)
+ else:
+ test3 = True
+ if test1 and test2 and test3:
+ break
+ elif noeudI != None:
+ noeudJ = dres['NOEUD_J']
+ nomCmpI = dres['NOM_CMP_I']
+ nomCmpJ = dres['NOM_CMP_J']
+
+ dTNoeudI = dataTable['NOEUD_I']
+ dTNoeudJ = dataTable['NOEUD_J']
+ dTNomCmpI = dataTable['NOM_CMP_I']
+ dTNomCmpJ = dataTable['NOM_CMP_J']
+
+ for i in range(len(dTNoeudI)):
+ if dTNoeudI[i] == None: continue
+ nom1 = dTNoeudI[i]
+ nom1 = nom1[0:len(noeudI)]
+ nom2 = dTNoeudJ[i]
+ nom2 = nom2[0:len(noeudJ)]
+ nom3 = dTNomCmpI[i]
+ nom3 = nom3[0:len(nomCmpI)]
+ nom4 = dTNomCmpJ[i]
+ nom4 = nom4[0:len(nomCmpJ)]
+ test1 = (nom1 == noeudI)
+ test2 = (nom2 == noeudJ)
+ test3 = (nom3 == nomCmpI)
+ test4 = (nom4 == nomCmpJ)
+ test5 = False
+ if presNumeVF:
+ test5 = (dTNumVF[i] == numeViteF)
+ else:
+ test5 = True
+ if test1 and test2 and test3 and test4 and test5:
+ break
+
+ if i == -1: UTMESS('F','MODELISA2_91',valk=('FONCTION_C',table.nomj.nomj))
+ nomFctC = dataTable['FONCTION_C'][i]
+
+ # Lecture JEVEUX du .PROL et .VALE
+ fctProl = aster.getvectjev(nomFctC[0:19]+'.PROL')
+ fctVale = aster.getvectjev(nomFctC[0:19]+'.VALE')
+
+ TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+ dico={
+ 'INTERPOL' : [fctProl[1][0:3],fctProl[1][4:7]],
+ 'NOM_PARA' : fctProl[2][0:16].strip(),
+ 'NOM_RESU' : fctProl[3][0:16].strip(),
+ 'PROL_DROITE' : TypeProl[fctProl[4][1]],
+ 'PROL_GAUCHE' : TypeProl[fctProl[4][0]],
+ }
+ sdf = sd_fonction(nomFctC)
+ val = sdf.VALE.get()
+ dim = len(val)/3
+ lx = val[0:dim]
+ lr = []
+ li = []
+ for i in range(dim):
+ lr.append(val[dim+2*i])
+ li.append(val[dim+2*i+1])
+ fctIntSp = t_fonction_c(lx, map(complex,lr,li),dico,nomFctC)
+
+ # Affichage
+
+ # ligne 1
+ current = {}
+ nb_espace = 16-len(fctProl[2].strip())
+ espace = nb_espace*' '
+ current['nom_para'] = fctProl[2].strip()+espace
+ txt.append(ligne_intspc % current)
+
+ # ligne 2
+ current = {}
+ nb_espace = 19-len(nomFctC.strip())
+ espace = nb_espace*' '
+ current['nom'] = nomFctC.strip()+espace
+ nb_espace = 16-len(str(valePara))
+ espace = nb_espace*' '
+ current['val_para'] = str(valePara)+espace
+ txt.append(ligne_intspc_1 % current)
+
+ if ref == None : ref = 'NON_DEFINI'
+
+ # Calcul de la valeur de l'interspectre
+ x = valePara
+ res = fctIntSp(x)
+
+ if ier != 0:
+ txt.append('NOOK PB INTERPOLATION. VOIR MESSAGE CI-DESSUS')
+ else:
+ # Test et affichage de la valeur
+ curDict=TesterValeur(fctProl[2],valePara,[valeRef,],res,epsi,crit,'NON')
+ AfficherResultat(curDict,fctProl[2].strip(),ref,legende,crit,res,valePara,txt)
+
+ # On affiche txt dans le fichier RESULTAT
+ aster.affiche('RESULTAT', os.linesep.join(txt))
+
+ return ier
--- /dev/null
+#@ MODIF test_temps_ops Macro DATE 13/10/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 COURTOIS M.COURTOIS
+
+"""
+for m in clpaster clp50a8 claut626 clau5aaa aster
+do
+ echo "------ $m : `ssh $m hostid` -------"
+ ssh $m cat /proc/cpuinfo > $m.cpuinfo
+ ssh $m python -c '"import os ; print os.uname()[-1]"'
+ grep 'cpu MHz' $m.cpuinfo | head -1
+ grep -i bogomips $m.cpuinfo | head -1
+done
+"""
+
+import sys
+import os
+import re
+from glob import glob
+
+#-------------------------------------------------------------------------------
+# formats
+tab_header = """
+ !--------------------------------------------------------------------------------------------------!
+ ! Commande ! Ordre ! Reference ! Mesure ! Difference ! Tolerance ! Diagnostic !
+ !--------------------------------------------------------------------------------------------------!"""
+tab_line = """ ! %(cmde)-22s ! %(nume)6d ! %(refe)10.2f ! %(vale)10.2f ! %(diff)10.2f ! %(prec)10.2f ! %(diag)4s !"""
+tab_footer = """ !--------------------------------------------------------------------------------------------------!
+"""
+
+#-------------------------------------------------------------------------------
+def get_idperf(conf):
+ """Retourne l'identifiant utilisé pour la mesure des performances.
+ Soit on le trouve dans le fichier config.txt de la version utilisée,
+ soit on le détermine à partir de : "kernel name - hardware name"
+ """
+ machine = ''
+ compiler = 'unknown'
+ if conf is not None:
+ machine = conf['ID_PERF'][0]
+ compiler = os.path.basename(conf['F77'][0].split()[0])
+
+ if machine == '':
+ machine = '%s-%s-%s' %(os.uname()[0], os.uname()[4], compiler)
+ return machine
+
+#-------------------------------------------------------------------------------
+def as_list(value):
+ """Retourne 'value' si c'est une liste, sinon le singleton [value,]."""
+ if type(value) not in (list, tuple):
+ value = [value,]
+ return value
+
+#-------------------------------------------------------------------------------
+def test_temps_ops(self, RESU, INFO, **args):
+ """
+ Macro TEST_TEMPS permettant de vérifier le temps passé dans les commandes.
+ """
+ import aster
+ from Accas import _F
+ from Utilitai.Utmess import UTMESS, MessageLog
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ DETRUIRE = self.get_cmd('DETRUIRE')
+ CREA_TABLE = self.get_cmd('CREA_TABLE')
+ TEST_TABLE = self.get_cmd('TEST_TABLE')
+
+ #----------------------------------------------
+ ier = 0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # ----- récupération du fichier de config
+ ficconf = '?'
+ conf = None
+ try:
+ # recuperation de la variable ASTER_ROOT
+ aster_root = os.environ.get('ASTER_ROOT')
+ assert aster_root != None, "<TEST_TEMPS> Variable d'environnement ASTER_ROOT non definie."
+ sys.path.append(os.path.join(aster_root, 'ASTK', 'ASTK_SERV', 'lib'))
+ from as_profil import ASTER_PROFIL
+ from as_config import ASTER_CONFIG
+
+ l_export = glob('*.export')
+ assert len(l_export) > 0, "<TEST_TEMPS> pas de fichier export dans le repertoire de travail."
+
+ ficconf = 'config.txt'
+ if not os.path.isfile(ficconf): # if as_run.__version__ < 1.6.3
+ prof = ASTER_PROFIL(l_export[0])
+ if prof.Get('D', typ='conf'):
+ print '<TEST_TEMPS> Surcharge du fichier config.txt non supportée.'
+ REPREF = os.path.join(aster_root, prof['version'][0])
+ ficconf = os.path.join(REPREF, 'config.txt')
+ conf = ASTER_CONFIG(ficconf)
+ except Exception, err:
+ print err
+
+ machine = get_idperf(conf)
+
+ # liste des timers par ordre d'apparition : dict_cmde['commande'] = [timer1, timer2, ...]
+ dict_cmde = {}
+ for num, timer in self.jdc.timer.getsortedtimers():
+ cmde = timer['name']
+ dict_cmde[cmde] = dict_cmde.get(cmde, [])
+ dict_cmde[cmde].append(timer)
+
+ tab = get_cmde_timers(self.jdc)
+ if INFO == 2:
+ aster.affiche('MESSAGE', repr(tab))
+
+ #----------------------------------------------
+ # boucle sur les commandes a tester
+ alarm9 = True
+ infos = []
+ for res_i in RESU:
+ dres = res_i.cree_dict_valeurs(res_i.mc_liste)
+ current = {
+ 'cmde' : dres['COMMANDE'],
+ 'nume' : dres['NUME_ORDRE'],
+ 'refe' : 0.,
+ 'vale' : 0.,
+ 'diff' : 0.,
+ 'prec' : 0.,
+ 'diag' : 'NOOK',
+ }
+ error = False
+ l_mach = as_list(dres['MACHINE'])
+ l_vale = as_list(dres['VALE'])
+ if len(l_mach) != len(l_vale):
+ UTMESS('E', 'TEST0_10')
+ error = True
+
+ l_prec = as_list(dres['PRECISION'])
+ if len(l_prec) == 1:
+ l_prec = l_prec * len(l_vale)
+ if len(l_prec) != len(l_vale):
+ UTMESS('E', 'TEST0_8')
+ error = True
+
+ tres = (tab.COMMANDE == dres['COMMANDE']) & (tab.NUME_ORDRE == dres['NUME_ORDRE'])
+ if len(tres) != 1:
+ UTMESS('E', 'TEST0_7', valk=dres['COMMANDE'], vali=dres['NUME_ORDRE'])
+ error = True
+
+ if error:
+ infos.append(current)
+ continue
+
+ # comparaison des valeurs
+ valtest = getattr(tres, dres['TYPE_TEST'])
+ assert len(valtest) == 1, 'TYPE_TEST invalide'
+ valtest = valtest[0]
+
+ current['vale'] = valtest
+
+ # reference, precision
+ dref = {}
+ for mach, vale, precision in zip(l_mach, l_vale, l_prec):
+ if dres['CRITERE'] == 'RELATIF':
+ precision = precision * vale
+ dref[mach.upper()] = {
+ 'vale' : vale,
+ 'prec' : precision,
+ 'valmin' : vale - precision,
+ 'valmax' : vale + precision
+ }
+ dmach = dref.get(machine.upper())
+ # si on n'a pas de référence pour cette machine, on prend la première
+ if not dmach:
+ dmach = dref[l_mach[0].upper()]
+ if alarm9:
+ alarm9 = False
+ UTMESS('A', 'TEST0_9', valk=(machine, l_mach[0]))
+ current['refe'] = dmach['vale']
+ current['prec'] = dmach['prec']
+ current['diff'] = valtest - dmach['vale']
+ if dmach['valmin'] < valtest < dmach['valmax']:
+ current['diag'] = 'OK'
+ infos.append(current)
+
+ # tableau de resultats
+ text_id = MessageLog.GetText('I', 'TEST0_5', valk=(ficconf, machine))
+ is_ok = 1
+ txt = [text_id, tab_header,]
+ for line in infos:
+ txt.append(tab_line % line)
+ if line['diag'] != 'OK':
+ is_ok = 0
+ txt.append(tab_footer)
+ for unit in ('MESSAGE', 'RESULTAT'):
+ aster.affiche(unit, os.linesep.join(txt))
+
+ # test_resu
+ tab1__ = CREA_TABLE(LISTE=(_F(PARA='DIAGNOSTIC', LISTE_I=is_ok),),)
+
+ TEST_TABLE(TABLE=tab1__,
+ NOM_PARA='DIAGNOSTIC',
+ VALE_I=1,
+ CRITERE='ABSOLU',
+ PRECISION=0,
+ REFERENCE='NON_REGRESSION')
+
+ return ier
+
+
+#-------------------------------------------------------------------------------
+def get_cmde_timers(jdc):
+ """Retourne un objet Table contenant les mesures de temps pour
+ les commandes terminées.
+ """
+ from Utilitai.Table import Table
+ tab = Table()
+
+ # liste des timers par ordre d'apparition
+ dnum = {}
+ for num, timer in jdc.timer.getsortedtimers():
+ if timer['state'] != 'stop' \
+ or re.sub('[A-Z_]', '', timer['name']).strip() != '': # timers superviseur
+ continue
+ line = {}
+ for k in ('name', 'cpu_dt', 'sys_dt', 'tot_dt'):
+ line[k] = timer[k]
+ line['USER+SYS'] = timer['cpu_dt'] + timer['sys_dt']
+ dnum[line['name']] = dnum.get(line['name'], 0) + 1
+ line['NUME_ORDRE'] = dnum[line['name']]
+ tab.append(line)
+ tab.Renomme('name', 'COMMANDE')
+ tab.Renomme('cpu_dt', 'USER')
+ tab.Renomme('sys_dt', 'SYSTEM')
+ tab.Renomme('tot_dt', 'ELAPSED')
+ tab = tab['NUME_ORDRE', 'COMMANDE', 'USER', 'SYSTEM', 'USER+SYS', 'ELAPSED']
+ return tab
+
--- /dev/null
+#@ MODIF __init__ SD DATE 12/05/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas import ASSD
+
+# pour utilisation du catalogue hors aster
+try:
+ import aster
+except:
+ pass
+
+from Noyau.asnom import SDNom
+from Noyau.ascheckers import Parmi
+from Noyau.asojb import AsBase, AsVK8, AsVK16, AsVK24, AsVK32, AsVK80, \
+ AsVI, AsVS, AsVL, AsVR, AsVC, \
+ AsColl, AsObject, Facultatif, OJBVect, AsPn, AsVect
+
--- /dev/null
+#@ MODIF co_base_modale SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_base_modale import sd_base_modale
+
+from co_resultat_dyn import resultat_dyn
+
+# -----------------------------------------------------------------------------
+class base_modale(resultat_dyn, sd_base_modale):
+ pass
--- /dev/null
+#@ MODIF co_cabl_precont SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_cabl_precont import sd_cabl_precont
+
+# -----------------------------------------------------------------------------
+class cabl_precont(ASSD, sd_cabl_precont):
+ pass
--- /dev/null
+#@ MODIF co_cara_elem SD DATE 20/07/2009 AUTEUR FLEJOU J-L.FLEJOU
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_cara_elem import sd_cara_elem
+
+# -----------------------------------------------------------------------------
+class cara_elem(ASSD, sd_cara_elem):
+ def toEPX(self):
+ # s'il y a un problème sur la structure de données ==> <F>
+ try:
+ EPXnoeud = self.CARRIGXN.get()
+ EPXval = self.CARRIGXV.get()
+ lenEPXval = len(EPXval)
+ lenEPXnoeud = len(EPXnoeud)*6
+ except:
+ from Utilitai.Utmess import UTMESS
+ UTMESS('F','MODELISA9_98')
+ # Vérification de la déclaration qui est faite dans 'acearp'
+ if ( lenEPXval != lenEPXnoeud ):
+ from Utilitai.Utmess import UTMESS
+ UTMESS('F','MODELISA9_97')
+ # Tout est OK
+ ressorts = {}
+ i=0
+ for no in EPXnoeud :
+ ressorts[no] = EPXval[i:i+6]
+ i+=6
+ return ressorts
+
+
--- /dev/null
+#@ MODIF co_carte SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_carte import sd_carte
+from co_champ import cham_gd_sdaster
+
+# -----------------------------------------------------------------------------
+class carte_sdaster(cham_gd_sdaster, sd_carte):
+ pass
+
--- /dev/null
+#@ MODIF co_cham_elem SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_cham_elem import sd_cham_elem
+from co_champ import cham_gd_sdaster
+
+import numpy
+
+# -----------------------------------------------------------------------------
+# post-traitement :
+class post_comp_cham_el :
+ def __init__(self,valeurs,maille=None,point=None,sous_point=None) :
+ self.valeurs=valeurs
+ self.maille=maille
+ self.point=point
+ self.sous_point=sous_point
+
+# -----------------------------------------------------------------------------
+class cham_elem(cham_gd_sdaster, sd_cham_elem):
+ def EXTR_COMP(self,comp,lgma,topo=0) :
+ """ retourne les valeurs de la composante comp du champ sur la liste
+ de groupes de mailles lgma avec eventuellement l'info de la
+ topologie si topo>0. Si lgma est une liste vide, c'est equivalent
+ a un TOUT='OUI' dans les commandes aster
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs
+ Si on a demande la topo :
+ - self.maille : numero de mailles
+ - self.point : numero du point dans la maille
+ - self.sous_point : numero du sous point dans la maille """
+ if not self.accessible() :
+ raise Accas.AsException("Erreur dans cham_elem.EXTR_COMP en PAR_LOT='OUI'")
+
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ nchams=ncham[0:7]+'S'
+ ncmp=comp+(8-len(comp))*' '
+
+ aster.prepcompcham(ncham,nchams,ncmp,"EL ",topo,lgma)
+
+ valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+ if (topo>0) :
+ maille=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.M'))
+ point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.P'))
+ sous_point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.SP'))
+ else :
+ maille=None
+ point=None
+ sous_point=None
+
+ aster.prepcompcham("__DETR__",nchams,ncmp,"EL ",topo,lgma)
+
+ return post_comp_cham_el(valeurs,maille,point,sous_point)
+
--- /dev/null
+#@ MODIF co_cham_mater SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_cham_mater import sd_cham_mater
+
+# -----------------------------------------------------------------------------
+class cham_mater(ASSD, sd_cham_mater):
+ pass
--- /dev/null
+#@ MODIF co_cham_no SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_cham_no import sd_cham_no
+from co_champ import cham_gd_sdaster
+
+import numpy
+
+# -----------------------------------------------------------------------------
+# post-traitement :
+class post_comp_cham_no :
+ def __init__(self,valeurs,noeud=None) :
+ self.valeurs=valeurs
+ self.noeud=noeud
+
+# -----------------------------------------------------------------------------
+class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
+ def EXTR_COMP(self,comp,lgno,topo=0) :
+ """ retourne les valeurs de la composante comp du champ sur la liste
+ de groupes de noeuds lgno avec eventuellement l'info de la
+ topologie si topo>0. Si lgno est une liste vide, c'est equivalent
+ a un TOUT='OUI' dans les commandes aster
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs
+ Si on a demande la topo (i.e. self.topo = 1) :
+ - self.noeud : numero de noeud """
+ if not self.accessible() :
+ raise Accas.AsException("Erreur dans cham_no.EXTR_COMP en PAR_LOT='OUI'")
+
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ nchams=ncham[0:7]+'S'
+ ncmp=comp+(8-len(comp))*' '
+
+ aster.prepcompcham(ncham,nchams,ncmp,"NO ",topo,lgno)
+
+ valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+ if (topo>0) :
+ noeud=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.N'))
+ else :
+ noeud=None
+
+ aster.prepcompcham("__DETR__",nchams,ncmp,"NO ",topo,lgno)
+
+ return post_comp_cham_no(valeurs,noeud)
+
+ def __add__(self, other):
+ from SD.sd_nume_equa import sd_nume_equa
+ from SD.sd_maillage import sd_maillage
+ from SD.co_maillage import maillage_sdaster
+ from Cata.cata import CREA_CHAMP,_F
+ from Noyau.nommage import GetNomConceptResultat
+ # on recupere le type
+ __nume_ddl=sd_nume_equa(self.REFE.get()[1])
+ __gd=__nume_ddl.REFN.get()[1].strip()
+ __type='NOEU_'+__gd
+ # on recupere le nom du maillage
+ __nomMaillage=self.REFE.get()[0].strip()
+ # on recupere l'objet du maillage
+ __maillage=CONTEXT.get_current_step().get_concept(__nomMaillage)
+ # on recupere le nom a gauche du signe "="
+ toto=GetNomConceptResultat(self)
+ __CHAM = CREA_CHAMP(OPERATION='ASSE',
+ MAILLAGE=__maillage,
+ TYPE_CHAM=__type,
+ INFO=1,
+ ASSE=(_F(CHAM_GD=self,
+ TOUT='OUI',
+ CUMUL='OUI',
+ COEF_R=1.),
+ _F(CHAM_GD=other,
+ TOUT='OUI',
+ CUMUL='OUI',
+ COEF_R=1.),
+ ))
+ return __CHAM
+
+
+
+
+
+
--- /dev/null
+#@ MODIF co_champ SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_champ import sd_champ
+
+# -----------------------------------------------------------------------------
+class cham_gd_sdaster(ASSD, sd_champ):
+ pass
--- /dev/null
+#@ MODIF co_char_acou SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_acou import sd_char_acou
+
+# -----------------------------------------------------------------------------
+class char_acou(ASSD, sd_char_acou):
+ pass
--- /dev/null
+#@ MODIF co_char_cine_acou SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_acou(ASSD, sd_char_cine):
+ pass
--- /dev/null
+#@ MODIF co_char_cine_meca SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_meca(ASSD, sd_char_cine):
+ pass
--- /dev/null
+#@ MODIF co_char_cine_ther SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_ther(ASSD, sd_char_cine):
+ pass
--- /dev/null
+#@ MODIF co_char_meca SD DATE 22/12/2009 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_meca import sd_char_meca
+
+# -----------------------------------------------------------------------------
+class char_meca(ASSD, sd_char_meca):
+ pass
--- /dev/null
+#@ MODIF co_char_ther SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_char_ther import sd_char_ther
+
+# -----------------------------------------------------------------------------
+class char_ther(ASSD, sd_char_ther):
+ pass
--- /dev/null
+#@ MODIF co_compor SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_compor import sd_compor
+
+# -----------------------------------------------------------------------------
+class compor_sdaster(ASSD, sd_compor):
+ pass
--- /dev/null
+#@ MODIF co_contact SD DATE 22/12/2009 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+from sd_contact import sd_contact
+
+# -----------------------------------------------------------------------------
+class char_contact(ASSD, sd_contact):
+ pass
--- /dev/null
+#@ MODIF co_courbe SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_courbe import sd_courbe
+
+# -----------------------------------------------------------------------------
+class courbe_sdaster(ASSD, sd_courbe):
+ pass
--- /dev/null
+#@ MODIF co_fiss_xfem SD DATE 15/10/2007 AUTEUR GENIAUT S.GENIAUT
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_xfem import sd_fiss_xfem
+
+# -----------------------------------------------------------------------------
+class fiss_xfem(ASSD, sd_fiss_xfem):
+ pass
--- /dev/null
+#@ MODIF co_fonction SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_fonction import sd_fonction_aster
+
+import os
+import numpy
+from math import pi
+
+# -----------------------------------------------------------------------------
+# types 'fonction' :
+class fonction_class(ASSD):
+ def Valeurs(self):
+ pass
+ def Parametres(self):
+ """
+ Retourne un dictionnaire contenant les parametres de la fonction ;
+ le type jeveux (FONCTION, FONCT_C, NAPPE) n'est pas retourne,
+ le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel.
+ """
+ from Utilitai.Utmess import UTMESS
+ if self.accessible():
+ TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+ objev = '%-19s.PROL' % self.get_name()
+ prol = aster.getvectjev(objev)
+ if prol == None:
+ UTMESS('F', 'SDVERI_2', valk=[objev])
+ dico={
+ 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
+ 'NOM_PARA' : prol[2][0:16].strip(),
+ 'NOM_RESU' : prol[3][0:16].strip(),
+ 'PROL_DROITE' : TypeProl[prol[4][1]],
+ 'PROL_GAUCHE' : TypeProl[prol[4][0]],
+ }
+ elif hasattr(self,'etape') and self.etape.nom=='DEFI_FONCTION' :
+ dico={
+ 'INTERPOL' : self.etape['INTERPOL'],
+ 'NOM_PARA' : self.etape['NOM_PARA'],
+ 'NOM_RESU' : self.etape['NOM_RESU'],
+ 'PROL_DROITE' : self.etape['PROL_DROITE'],
+ 'PROL_GAUCHE' : self.etape['PROL_GAUCHE'],
+ }
+ if type(dico['INTERPOL']) == tuple:
+ dico['INTERPOL']=list(dico['INTERPOL'])
+ elif type(dico['INTERPOL']) == str:
+ dico['INTERPOL']=[dico['INTERPOL'],]
+ if len(dico['INTERPOL'])==1 :
+ dico['INTERPOL']=dico['INTERPOL']*2
+ else:
+ raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
+ return dico
+ def Trace(self,FORMAT='TABLEAU',**kargs):
+ """Tracé d'une fonction"""
+ if not self.accessible() :
+ raise Accas.AsException("Erreur dans fonction.Trace en PAR_LOT='OUI'")
+ from Utilitai.Graph import Graph
+ gr=Graph()
+ gr.AjoutCourbe(Val=self.Valeurs(),
+ Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
+ Leg=os.linesep.join(self.TITR.get()) )
+ gr.Trace(FORMAT=FORMAT,**kargs)
+
+# -----------------------------------------------------------------------------
+class fonction_sdaster(fonction_class, sd_fonction_aster):
+ def convert(self,arg='real'):
+ """
+ Retourne un objet de la classe t_fonction
+ représentation python de la fonction
+ """
+ from Cata_Utils.t_fonction import t_fonction,t_fonction_c
+ if arg=='real' :
+ return t_fonction(self.Absc(),
+ self.Ordo(),
+ self.Parametres(),
+ nom=self.nom)
+ elif arg=='complex' :
+ return t_fonction_c(self.Absc(),
+ self.Ordo(),
+ self.Parametres(),
+ nom=self.nom)
+ def Valeurs(self) :
+ """
+ Retourne deux listes de valeurs : abscisses et ordonnees
+ """
+ from Utilitai.Utmess import UTMESS
+ if self.accessible():
+ vale = '%-19s.VALE' % self.get_name()
+ lbl = aster.getvectjev(vale)
+ if lbl == None:
+ UTMESS('F', 'SDVERI_2', valk=[vale])
+ lbl = list(lbl)
+ dim = len(lbl)/2
+ lx = lbl[0:dim]
+ ly = lbl[dim:2*dim]
+ elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
+ if self.etape['VALE'] is not None:
+ lbl = list(self.etape['VALE'])
+ dim = len(lbl)
+ lx = [lbl[i] for i in range(0,dim,2)]
+ ly = [lbl[i] for i in range(1,dim,2)]
+ elif self.etape['VALE_PARA'] is not None:
+ lx = self.etape['VALE_PARA'].Valeurs()
+ ly = self.etape['VALE_FONC'].Valeurs()
+ elif self.etape['ABSCISSE'] is not None:
+ lx = self.etape['ABSCISSE']
+ ly = self.etape['ORDONNEE']
+ else:
+ raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+ "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+ "dans le fichier de commandes courant.")
+ else:
+ raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+ "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+ "dans le fichier de commandes courant.")
+ return [lx, ly]
+ def Absc(self):
+ """Retourne la liste des abscisses"""
+ return self.Valeurs()[0]
+ def Ordo(self):
+ """Retourne la liste des ordonnées"""
+ return self.Valeurs()[1]
+ def __call__(self,val):
+ ### Pour EFICAS : substitution de l'instance de classe
+ ### parametre par sa valeur
+ if isinstance(val, ASSD):
+ val=val.valeur
+ ###
+ __ff=self.convert()
+ return __ff(val)
+
+# -----------------------------------------------------------------------------
+class para_sensi(fonction_sdaster):
+ pass
+
+# -----------------------------------------------------------------------------
+class fonction_c(fonction_class, sd_fonction_aster):
+ def convert(self,arg='real'):
+ """
+ Retourne un objet de la classe t_fonction ou t_fonction_c,
+ représentation python de la fonction complexe
+ """
+ from Cata_Utils.t_fonction import t_fonction,t_fonction_c
+ if arg=='real' :
+ return t_fonction(self.Absc(),
+ self.Ordo(),
+ self.Parametres(),
+ nom=self.nom)
+ elif arg=='imag' :
+ return t_fonction(self.Absc(),
+ self.OrdoImg(),
+ self.Parametres(),
+ nom=self.nom)
+ elif arg=='modul' :
+ modul=numpy.sqrt(numpy.array(self.Ordo())**2+numpy.array(self.OrdoImg())**2)
+ return t_fonction(self.Absc(),
+ modul,
+ self.Parametres(),
+ nom=self.nom)
+ elif arg=='phase' :
+ phase=numpy.arctan2(numpy.array(self.OrdoImg()),numpy.array(self.Ordo()))
+ phase=phase*180./pi
+ return t_fonction(self.Absc(),
+ phase,
+ self.Parametres(),
+ nom=self.nom)
+ elif arg=='complex' :
+ return t_fonction_c(self.Absc(),
+ map(complex,self.Ordo(),self.OrdoImg()),
+ self.Parametres(),
+ nom=self.nom)
+ def Valeurs(self) :
+ """
+ Retourne trois listes de valeurs : abscisses, parties reelles et imaginaires.
+ """
+ from Utilitai.Utmess import UTMESS
+ if self.accessible():
+ vale = '%-19s.VALE' % self.get_name()
+ lbl = aster.getvectjev(vale)
+ if lbl == None:
+ UTMESS('F', 'SDVERI_2', valk=[vale])
+ lbl = list(lbl)
+ dim=len(lbl)/3
+ lx=lbl[0:dim]
+ lr=[]
+ li=[]
+ for i in range(dim):
+ lr.append(lbl[dim+2*i])
+ li.append(lbl[dim+2*i+1])
+ elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
+ and self.etape['VALE_C'] is not None:
+ lbl=list(self.etape['VALE_C'])
+ dim=len(lbl)
+ lx=[lbl[i] for i in range(0,dim,3)]
+ lr=[lbl[i] for i in range(1,dim,3)]
+ li=[lbl[i] for i in range(2,dim,3)]
+ else:
+ raise Accas.AsException("Erreur (fonction_c.Valeurs) : ne fonctionne en " \
+ "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+ "dans le jdc courant.")
+ return [lx, lr, li]
+ def Absc(self):
+ """Retourne la liste des abscisses"""
+ return self.Valeurs()[0]
+ def Ordo(self):
+ """Retourne la liste des parties réelles des ordonnées"""
+ return self.Valeurs()[1]
+ def OrdoImg(self):
+ """Retourne la liste des parties imaginaires des ordonnées"""
+ return self.Valeurs()[2]
+ def Trace(self,FORMAT='TABLEAU',**kargs):
+ """Tracé d'une fonction complexe"""
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
+ from Utilitai.Graph import Graph
+ para = self.Parametres()
+ gr=Graph()
+ gr.AjoutCourbe(Val=self.Valeurs(),
+ Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
+ Leg=os.linesep.join(self.TITR.get()) )
+ gr.Trace(FORMAT=FORMAT,**kargs)
+ def __call__(self,val):
+ ### Pour EFICAS : substitution de l'instance de classe
+ ### parametre par sa valeur
+ if isinstance(val, ASSD):
+ val=val.valeur
+ ###
+ __ff=self.convert(arg='complex')
+ return __ff(val)
+
+# -----------------------------------------------------------------------------
+class nappe_sdaster(fonction_class, sd_fonction_aster):
+ def convert(self):
+ """
+ Retourne un objet de la classe t_nappe, représentation python de la nappe
+ """
+ from Cata_Utils.t_fonction import t_fonction,t_nappe
+ para=self.Parametres()
+ vale=self.Valeurs()
+ l_fonc=[]
+ i=0
+ for pf in para[1] :
+ para_f={'INTERPOL' : pf['INTERPOL_FONC'],
+ 'PROL_DROITE' : pf['PROL_DROITE_FONC'],
+ 'PROL_GAUCHE' : pf['PROL_GAUCHE_FONC'],
+ 'NOM_PARA' : para[0]['NOM_PARA_FONC'],
+ 'NOM_RESU' : para[0]['NOM_RESU'],
+ }
+ l_fonc.append(t_fonction(vale[1][i][0],vale[1][i][1],para_f))
+ i+=1
+ return t_nappe(vale[0],
+ l_fonc,
+ para[0],
+ nom=self.nom)
+ def Valeurs(self):
+ """
+ Retourne la liste des valeurs du parametre,
+ et une liste de couples (abscisses,ordonnees) de chaque fonction.
+ """
+ from Utilitai.Utmess import UTMESS
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans nappe.Valeurs en PAR_LOT='OUI'")
+ nsd = '%-19s' % self.get_name()
+ dicv=aster.getcolljev(nsd+'.VALE')
+ # les cles de dicv sont 1,...,N (indice du parametre)
+ lpar=aster.getvectjev(nsd+'.PARA')
+ if lpar == None:
+ UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA'])
+ lval=[]
+ for k in range(len(dicv)):
+ lbl=dicv[k+1]
+ dim=len(lbl)/2
+ lval.append([lbl[0:dim],lbl[dim:2*dim]])
+ return [list(lpar),lval]
+ def Parametres(self):
+ """
+ Retourne un dictionnaire contenant les parametres de la nappe,
+ le type jeveux (NAPPE) n'est pas retourne,
+ le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
+ et une liste de dictionnaire des parametres de chaque fonction.
+ """
+ from Utilitai.Utmess import UTMESS
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans nappe.Parametres en PAR_LOT='OUI'")
+ TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+ objev = '%-19s.PROL' % self.get_name()
+ prol=aster.getvectjev(objev)
+ if prol == None:
+ UTMESS('F', 'SDVERI_2', valk=[objev])
+ dico={
+ 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
+ 'NOM_PARA' : prol[2][0:16].strip(),
+ 'NOM_RESU' : prol[3][0:16].strip(),
+ 'PROL_DROITE' : TypeProl[prol[4][1]],
+ 'PROL_GAUCHE' : TypeProl[prol[4][0]],
+ 'NOM_PARA_FONC' : prol[6][0:4].strip(),
+ }
+ lparf=[]
+ nbf=(len(prol)-7)/2
+ for i in range(nbf):
+ dicf={
+ 'INTERPOL_FONC' : [prol[7+i*2][0:3],prol[7+i*2][4:7]],
+ 'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]],
+ 'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]],
+ }
+ lparf.append(dicf)
+ return [dico,lparf]
+ def Absc(self):
+ """Retourne la liste des abscisses"""
+ return self.Valeurs()[0]
+ def Trace(self,FORMAT='TABLEAU',**kargs):
+ """Tracé d'une nappe"""
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans nappe.Trace en PAR_LOT='OUI'")
+ from Utilitai.Graph import Graph
+ gr=Graph()
+ lv=self.Valeurs()[1]
+ dp=self.Parametres()[0]
+ for lx,ly in lv:
+ gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
+ Leg=os.linesep.join(self.TITR.get()) )
+ gr.Trace(FORMAT=FORMAT,**kargs)
+ def __call__(self,val1,val2):
+ ### Pour EFICAS : substitution de l'instance de classe
+ ### parametre par sa valeur
+ if isinstance(val1, ASSD):
+ val1=val1.valeur
+ if isinstance(val2, ASSD):
+ val2=val2.valeur
+ ###
+ __ff=self.convert()
+ return __ff(val1,val2)
+
--- /dev/null
+#@ MODIF co_fond_fiss SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_fond_fiss import sd_fond_fiss
+
+# -----------------------------------------------------------------------------
+class fond_fiss(ASSD, sd_fond_fiss):
+ pass
--- /dev/null
+#@ MODIF co_gfibre SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_gfibre import sd_gfibre
+
+# -----------------------------------------------------------------------------
+class gfibre_sdaster(ASSD, sd_gfibre):
+ pass
--- /dev/null
+#@ MODIF co_interf_dyna_clas SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_interf_dyna_clas import sd_interf_dyna_clas
+
+# -----------------------------------------------------------------------------
+class interf_dyna_clas(ASSD, sd_interf_dyna_clas):
+ pass
--- /dev/null
+#@ MODIF co_list_inst SD DATE 20/07/2009 AUTEUR GENIAUT S.GENIAUT
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+from sd_list_inst import sd_list_inst
+
+# -----------------------------------------------------------------------------
+class list_inst(ASSD, sd_list_inst):
+ pass
--- /dev/null
+#@ MODIF co_listis SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_listis import sd_listis
+
+# -----------------------------------------------------------------------------
+class listis_sdaster(ASSD, sd_listis):
+ pass
--- /dev/null
+#@ MODIF co_listr8 SD DATE 30/06/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_listr8 import sd_listr8
+
+# -----------------------------------------------------------------------------
+class listr8_sdaster(ASSD, sd_listr8):
+ def Valeurs(self) :
+ """
+ Retourne la liste des valeurs : [val1, ..., valN]
+ """
+ from Utilitai.Utmess import UTMESS
+ if self.accessible():
+ vale='%-19s.VALE' % self.get_name()
+ t_vale = aster.getvectjev(vale)
+ if t_vale == None:
+ UTMESS('F', 'SDVERI_2', valk=[vale])
+ return list(t_vale)
+ else:
+ raise Accas.AsException("Erreur dans listr8.Valeurs en PAR_LOT='OUI'")
+
--- /dev/null
+#@ MODIF co_macr_elem_dyna SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_macr_elem_dyna import sd_macr_elem_dyna
+
+import numpy
+
+def VALE_triang2array(vect_VALE, dim, dtype=None):
+ """Conversion (par recopie) de l'objet .VALE decrivant une matrice pleine
+ par sa triangulaire sup en numpy.array plein.
+ """
+ triang_sup = numpy.array(vect_VALE)
+ assert dim*(dim+1)/2 == len(triang_sup), \
+ 'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+
+ valeur = numpy.zeros([dim, dim], dtype=dtype)
+ for i in range(1, dim+1):
+ for j in range(1, i+1):
+ k = i*(i-1)/2 + j
+ valeur[j-1, i-1]=triang_sup[k-1]
+ valeur = valeur + numpy.transpose(valeur)
+ for i in range(dim):
+ valeur[i, i] = 0.5 * valeur[i, i]
+
+ return valeur
+
+# -----------------------------------------------------------------------------
+class macr_elem_dyna(ASSD, sd_macr_elem_dyna):
+
+ def EXTR_MATR_GENE(self,typmat) :
+ """ retourne les valeurs des matrices generalisees reelles
+ dans un format numpy
+ typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+ typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+ typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans macr_elem_dyna.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+ if (typmat=='MASS_GENE') :
+ macr_elem = self.MAEL_MASS
+ elif (typmat=='RIGI_GENE') :
+ macr_elem = self.MAEL_RAID
+ elif (typmat=='AMOR_GENE') :
+ macr_elem = self.MAEL_AMOR
+ else:
+ raise Accas.AsException("Le type de la matrice est incorrect")
+
+ desc=numpy.array(macr_elem.DESC.get())
+ # On teste si le DESC du vecteur existe
+ if (desc==None):
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+
+ matrice = VALE_triang2array(macr_elem.VALE.get(), desc[1])
+ return matrice
+
+ def RECU_MATR_GENE(self,typmat,matrice) :
+ """ envoie les valeurs d'un tableau numpy dans des matrices generalisees
+ reelles definies dans jeveux
+ typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+ typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+ typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+ Attributs ne retourne rien """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans macr_elem_dyna.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+ nommacr=self.get_name()
+ if (typmat=='MASS_GENE') :
+ macr_elem = self.MAEL_MASS
+ elif (typmat=='RIGI_GENE') :
+ macr_elem = self.MAEL_RAID
+ elif (typmat=='AMOR_GENE') :
+ macr_elem = self.MAEL_AMOR
+ else:
+ raise Accas.AsException("Le type de la matrice est incorrect")
+ nom_vale = macr_elem.VALE.nomj()
+ desc=numpy.array(macr_elem.DESC.get())
+
+ # On teste si le DESC de la matrice jeveux existe
+ if (desc==None):
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+ numpy.asarray(matrice)
+
+ # On teste si la matrice python est de dimension 2
+ if (len(numpy.shape(matrice))<>2):
+ raise Accas.AsException("La dimension de la matrice est incorrecte")
+
+ # On teste si les tailles de la matrice jeveux et python sont identiques
+ if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+ raise Accas.AsException("La dimension de la matrice est incorrecte")
+ taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+ tmp=numpy.zeros([int(taille)])
+ for j in range(desc[1]+1):
+ for i in range(j):
+ k=j*(j-1)/2+i
+ tmp[k]=matrice[j-1,i]
+ aster.putvectjev(nom_vale,len(tmp),tuple((
+ range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+ return
+
--- /dev/null
+#@ MODIF co_macr_elem_stat SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_macr_elem_stat import sd_macr_elem_stat
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class macr_elem_stat(ASSD, sd_macr_elem_stat):
+ pass
--- /dev/null
+#@ MODIF co_maillage SD DATE 30/06/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_maillage import sd_maillage
+
+# -----------------------------------------------------------------------------
+class maillage_sdaster(ASSD, sd_maillage):
+ def LIST_GROUP_NO(self) :
+ """ retourne la liste des groupes de noeuds sous la forme :
+ [ (gno1, nb noeuds gno1), ...] """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans maillage.LIST_GROUP_NO en PAR_LOT='OUI'")
+ nommail=self.get_name()
+ dic_gpno=aster.getcolljev(nommail.ljust(8)+".GROUPENO")
+ #dic_gpno = self.GROUPENO.get()
+ return [(gpno.strip(),len(dic_gpno[gpno])) for gpno in dic_gpno]
+
+ def LIST_GROUP_MA(self) :
+ """ retourne la liste des groupes de mailles sous la forme :
+ [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans maillage.LIST_GROUP_MA en PAR_LOT='OUI'")
+ nommail=self.get_name()
+ nommail=nommail.ljust(8)
+ ngpma=[]
+ ltyma =aster.getvectjev("&CATA.TM.NOMTM")
+ catama=aster.getcolljev("&CATA.TM.TMDIM")
+ dic_gpma=aster.getcolljev(nommail+".GROUPEMA")
+ dimama=[catama[ltyma[ma-1]][0] for ma in aster.getvectjev(nommail+".TYPMAIL")]
+ for grp in dic_gpma.keys():
+ dim=max([dimama[ma-1] for ma in dic_gpma[grp]])
+ ngpma.append((grp.strip(),len(dic_gpma[grp]),dim))
+ return ngpma
+
--- /dev/null
+#@ MODIF co_mater SD DATE 30/06/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_mater import sd_mater
+
+# -----------------------------------------------------------------------------
+class mater_sdaster(ASSD, sd_mater):
+ def RCVALE(self, phenomene, nompar=(), valpar=(), nomres=(), stop='F'):
+ """Appel à la routine fortran RCVALE pour récupérer les valeurs des
+ propriétés du matériau.
+ """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans mater.RCVALE en PAR_LOT='OUI'")
+ from Utilitai.Utmess import UTMESS
+ # vérification des arguments
+ if not type(nompar) in (list, tuple):
+ nompar = [nompar,]
+ if not type(valpar) in (list, tuple):
+ valpar = [valpar,]
+ if not type(nomres) in (list, tuple):
+ nomres = [nomres,]
+ nompar = tuple(nompar)
+ valpar = tuple(valpar)
+ nomres = tuple(nomres)
+ if len(nompar) != len(valpar):
+ vk1=', '.join(nompar)
+ vk2=', '.join([repr(v) for v in valpar])
+ UTMESS('F','SDVERI_4',valk=[vk1,vk2])
+ if len(nomres) < 1:
+ UTMESS('F', 'SDVERI_5')
+ # appel à l'interface Python/C
+ return aster.rcvale(self.nom, phenomene, nompar, valpar, nomres, stop)
+
+
--- /dev/null
+#@ MODIF co_matr_asse SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_matr_asse import sd_matr_asse
+
+# -----------------------------------------------------------------------------
+class matr_asse(ASSD, sd_matr_asse):
+ pass
+
--- /dev/null
+#@ MODIF co_matr_asse_gd SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 sd_matr_asse_gd import sd_matr_asse_gd
+from co_matr_asse import matr_asse
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class matr_asse_gd(matr_asse, sd_matr_asse_gd):
+ pass
+
+class matr_asse_depl_c(matr_asse_gd):
+ pass
+
+class matr_asse_depl_r(matr_asse_gd):
+ pass
+
+class matr_asse_pres_c(matr_asse_gd):
+ pass
+
+class matr_asse_pres_r(matr_asse_gd):
+ pass
+
+class matr_asse_temp_c(matr_asse_gd):
+ pass
+
+class matr_asse_temp_r(matr_asse_gd):
+ pass
--- /dev/null
+#@ MODIF co_matr_asse_gene SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_matr_asse_gene import sd_matr_asse_gene
+
+import numpy
+import math
+
+def VALM_triang2array(dict_VALM, dim, dtype=None):
+ """Conversion (par recopie) de l'objet .VALM decrivant une matrice pleine
+ par sa triangulaire inf (et parfois triang sup) en numpy.array plein.
+ """
+ # stockage symetrique ou non (triang inf+sup)
+ sym = len(dict_VALM) == 1
+ triang_sup = numpy.array(dict_VALM[1])
+ assert dim*(dim+1)/2 == len(triang_sup), \
+ 'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+ if sym:
+ triang_inf = triang_sup
+ else:
+ triang_inf = numpy.array(dict_VALM[2])
+ valeur=numpy.zeros([dim, dim], dtype=dtype)
+ for i in range(1, dim+1):
+ for j in range(1, i+1):
+ k = i*(i-1)/2 + j
+ valeur[i-1, j-1]=triang_inf[k-1]
+ valeur[j-1, i-1]=triang_sup[k-1]
+ return valeur
+
+def VALM_diag2array(dict_VALM, dim, dtype=None):
+ """Conversion (par recopie) de l'objet .VALM decrivant une matrice
+ diagonale en numpy.array plein.
+ """
+ diag = numpy.array(dict_VALM[1])
+ assert dim == len(diag), 'Dimension incorrecte : %d != %d' % (dim, len(diag))
+ valeur=numpy.zeros([dim, dim], dtype=dtype)
+ for i in range(dim):
+ valeur[i,i] = diag[i]
+ return valeur
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene(ASSD, sd_matr_asse_gene):
+ pass
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene_r(matr_asse_gene):
+ def EXTR_MATR_GENE(self) :
+ """ retourne les valeurs de la matrice generalisee reelle
+ dans un format numpyal Array
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans matr_asse_gene.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+ desc=numpy.array(self.DESC.get())
+ # On teste si le DESC de la matrice existe
+ if (desc==None):
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+ # Si le stockage est plein
+ if desc[2]==2 :
+ valeur = VALM_triang2array(self.VALM.get(), desc[1])
+
+ # Si le stockage est diagonal
+ elif desc[2]==1 :
+ valeur = VALM_diag2array(self.VALM.get(), desc[1])
+
+ # Sinon on arrete tout
+ else:
+ raise KeyError
+ return valeur
+
+ def RECU_MATR_GENE(self,matrice) :
+ """ envoie les valeurs d'un tableau numpy dans des matrices
+ generalisees reelles definies dans jeveux
+ Attributs ne retourne rien """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans matr_asse_gene.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+ ncham=self.get_name()
+ desc=numpy.array(self.DESC.get())
+
+ # On teste si le DESC de la matrice existe
+ if (desc==None):
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+ numpy.asarray(matrice)
+
+ # On teste si la dimension de la matrice python est 2
+ if (len(numpy.shape(matrice))<>2) :
+ raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+ # On teste si les tailles des matrices jeveux et python sont identiques
+ if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+ raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+ # Si le stockage est plein
+ if desc[2]==2 :
+ taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+ tmp=numpy.zeros([int(taille)])
+ for j in range(desc[1]+1):
+ for i in range(j):
+ k=j*(j-1)/2+i
+ tmp[k]=matrice[j-1,i]
+ aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+ range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+ # Si le stockage est diagonal
+ elif desc[2]==1 :
+ tmp=numpy.zeros(desc[1])
+ for j in range(desc[1]):
+ tmp[j]=matrice[j,j]
+ aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+ range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+ # Sinon on arrete tout
+ else:
+ raise KeyError
+ return
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene_c(matr_asse_gene):
+ def EXTR_MATR_GENE(self) :
+ """ retourne les valeurs de la matrice generalisee complexe
+ dans un format numpy
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans matr_asse_gene_c.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+ desc = numpy.array(self.DESC.get())
+ if desc == None:
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster ")
+ # Si le stockage est plein
+ if desc[2] == 2 :
+ valeur = VALM_triang2array(self.VALM.get(), desc[1], complex)
+
+ # Si le stockage est diagonal
+ elif desc[2]==1 :
+ valeur = VALM_diag2array(self.VALM.get(), desc[1], complex)
+
+ # Sinon on arrete tout
+ else:
+ raise KeyError
+ return valeur
+
+ def RECU_MATR_GENE(self,matrice) :
+ """ envoie les valeurs d'un tableau numpy dans des matrices
+ generalisees reelles definies dans jeveux
+ Attributs ne retourne rien """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans matr_asse_gene_c.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+ numpy.asarray(matrice)
+ ncham=self.get_name()
+ desc=numpy.array(self.DESC.get())
+
+ # On teste si le DESC de la matrice existe
+ if (desc==None):
+ raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+ numpy.asarray(matrice)
+
+ # On teste si la dimension de la matrice python est 2
+ if (len(numpy.shape(matrice))<>2) :
+ raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+ # On teste si la taille de la matrice jeveux et python est identique
+ if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+ raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+ # Si le stockage est plein
+ if desc[2]==2 :
+ taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+ tmpr=numpy.zeros([int(taille)])
+ tmpc=numpy.zeros([int(taille)])
+ for j in range(desc[1]+1):
+ for i in range(j):
+ k=j*(j-1)/2+i
+ tmpr[k]=matrice[j-1,i].real
+ tmpc[k]=matrice[j-1,i].imag
+ aster.putvectjev('%-19s.VALM' % ncham, len(tmpr), tuple((\
+ range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+ # Si le stockage est diagonal
+ elif desc[2]==1 :
+ tmpr=numpy.zeros(desc[1])
+ tmpc=numpy.zeros(desc[1])
+ for j in range(desc[1]):
+ tmpr[j]=matrice[j,j].real
+ tmpc[j]=matrice[j,j].imag
+ aster.putvectjev('%-19s.VALM' % ncham,len(tmpr),tuple((\
+ range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+ # Sinon on arrete tout
+ else:
+ raise KeyError
+ return
--- /dev/null
+#@ MODIF co_matr_elem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_matr_elem import sd_matr_elem
+
+# -----------------------------------------------------------------------------
+class matr_elem(ASSD, sd_matr_elem):
+ pass
+
+class matr_elem_depl_c(matr_elem):
+ pass
+
+class matr_elem_depl_r(matr_elem):
+ pass
+
+class matr_elem_pres_c(matr_elem):
+ pass
+
+class matr_elem_temp_r(matr_elem):
+ pass
+
+
--- /dev/null
+#@ MODIF co_melasflu SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_melasflu import sd_melasflu
+
+# -----------------------------------------------------------------------------
+class melasflu_sdaster(ASSD, sd_melasflu):
+ pass
--- /dev/null
+#@ MODIF co_mode_cycl SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_mode_cycl import sd_mode_cycl
+
+# -----------------------------------------------------------------------------
+class mode_cycl(ASSD, sd_mode_cycl):
+ pass
+
--- /dev/null
+#@ MODIF co_mode_meca SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+from sd_mode_meca import sd_mode_meca
+
+from co_resultat_dyn import resultat_dyn
+
+# -----------------------------------------------------------------------------
+class mode_meca(resultat_dyn, sd_mode_meca):
+ pass
--- /dev/null
+#@ MODIF co_modele SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_modele import sd_modele
+
+# -----------------------------------------------------------------------------
+class modele_sdaster(ASSD, sd_modele):
+ pass
+
--- /dev/null
+#@ MODIF co_modele_gene SD DATE 30/06/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_modele_gene import sd_modele_gene
+
+# -----------------------------------------------------------------------------
+class modele_gene(ASSD, sd_modele_gene):
+ def LIST_SOUS_STRUCT(self) :
+ """ retourne la liste des sous structures du modele generalise
+ la liste des macro-elements sous-jacents"""
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans modele_gene.LIST_SOUS_STRUCT en PAR_LOT='OUI'")
+ nommodgen=self.get_name()
+ ncham=nommodgen+(8-len(nommodgen))*' '
+ ssno=aster.getvectjev(ncham+(14-len(ncham))*' '+'.MODG.SSNO')
+ ssme=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.SSME')
+ return [([ssno[ind], ssme[ind+1]]) for ind in range(len(ssno))]
+
+ def LIST_LIAIS_STRUCT(self) :
+ """ retourne la liste des liaisons entre sous structures du modele generalise sous la forme :
+ [ (ss1, nom_liais1, ss2 , nom_liais2), ...] """
+ if not self.accessible() :
+ raise Accas.AsException("Erreur dans modele_gene.LIST_LIAIS_STRUCT en PAR_LOT='OUI'")
+ nommodgen=self.get_name()
+ ncham=nommodgen+(8-len(nommodgen))*' '
+ lidf=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.LIDF')
+ return [([(lidf[ind][indb]) for indb in range(4)]) for ind in lidf]
+
--- /dev/null
+#@ MODIF co_nume_ddl SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_nume_ddl import sd_nume_ddl
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class nume_ddl_sdaster(ASSD, sd_nume_ddl):
+ pass
--- /dev/null
+#@ MODIF co_nume_ddl_gene SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_nume_ddl import sd_nume_ddl
+###sd_nume_eqge ????????
+
+# -----------------------------------------------------------------------------
+class nume_ddl_gene(ASSD, sd_nume_ddl):
+ pass
--- /dev/null
+#@ MODIF co_resultat SD DATE 23/03/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_resultat import sd_resultat
+
+# -----------------------------------------------------------------------------
+class resultat_sdaster(ASSD, sd_resultat):
+ def LIST_CHAMPS (self) :
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans resultat.LIST_CHAMPS en PAR_LOT='OUI'")
+ return aster.GetResu(self.get_name(), "CHAMPS")
+
+ def LIST_NOM_CMP (self) :
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans resultat.LIST_NOM_CMP en PAR_LOT='OUI'")
+ return aster.GetResu(self.get_name(), "COMPOSANTES")
+
+ def LIST_VARI_ACCES (self) :
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans resultat.LIST_VARI_ACCES en PAR_LOT='OUI'")
+ return aster.GetResu(self.get_name(), "VARI_ACCES")
+
+ def LIST_PARA (self) :
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans resultat.LIST_PARA en PAR_LOT='OUI'")
+ return aster.GetResu(self.get_name(), "PARAMETRES")
+
+# -----------------------------------------------------------------------------
+class resultat_jeveux(resultat_sdaster):
+ """Classe permettant d'accéder à un resultat jeveux qui n'a pas d'ASSD associée,
+ c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+ def __init__(self,nom_jeveux):
+ self.nom=nom_jeveux
+ AsBase.__init__(self, nomj=self.nom)
--- /dev/null
+#@ MODIF co_resultat_dyn SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_resultat_dyn import sd_resultat_dyn
+
+from co_resultat import resultat_sdaster
+
+# -----------------------------------------------------------------------------
+class resultat_dyn(resultat_sdaster, sd_resultat_dyn):
+ pass
--- /dev/null
+#@ MODIF co_sd_feti SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_feti import sd_feti
+
+# -----------------------------------------------------------------------------
+class sd_feti_sdaster(ASSD, sd_feti):
+ pass
--- /dev/null
+#@ MODIF co_spectre SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_spectre import sd_spectre
+
+# -----------------------------------------------------------------------------
+class spectre_sdaster(ASSD, sd_spectre):
+ pass
--- /dev/null
+#@ MODIF co_squelette SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_squelette import sd_squelette
+
+from co_maillage import maillage_sdaster
+
+# -----------------------------------------------------------------------------
+class squelette(maillage_sdaster, sd_squelette):
+ pass
--- /dev/null
+#@ MODIF co_surface SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_surface import sd_surface
+
+# -----------------------------------------------------------------------------
+class surface_sdaster(ASSD, sd_surface):
+ pass
--- /dev/null
+#@ MODIF co_table SD DATE 30/06/2009 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_table import sd_table
+
+# -----------------------------------------------------------------------------
+class table_sdaster(ASSD, sd_table):
+ def __getitem__(self,key):
+ from Utilitai.Utmess import UTMESS
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans table.__getitem__ en PAR_LOT='OUI'")
+ requete = '%-24s' % key[0]
+ tblp = '%-19s.TBLP' % self.get_name()
+ tabnom = aster.getvectjev(tblp)
+ #tabnom = self.TBLP.get()
+ if tabnom == None:
+ UTMESS('F','SDVERI_2',valk=[tblp])
+ for i in range(len(tabnom)) :
+ if tabnom[i]==requete: break
+ resu=aster.getvectjev(tabnom[i+2])
+ if resu == None:
+ UTMESS('F','SDVERI_2',valk=[tabnom[i+2]])
+ exist=aster.getvectjev(tabnom[i+3])
+ if exist == None:
+ UTMESS('F','SDVERI_2',valk=[tabnom[i+3]])
+ if key[1]>len(resu) or exist[key[1]-1]==0:
+ raise KeyError
+ else:
+ return resu[key[1]-1]
+
+ def TITRE(self):
+ """Retourne le titre d'une table Aster
+ (Utile pour récupérer le titre et uniquement le titre d'une table dont
+ on souhaite manipuler la dérivée).
+ """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans table.TITRE en PAR_LOT='OUI'")
+ titj = aster.getvectjev('%-19s.TITR' % self.get_name())
+ #titj = self.TITR.get()
+ if titj != None:
+ titr = '\n'.join(titj)
+ else:
+ titr = ''
+ return titr
+
+ def EXTR_TABLE(self) :
+ """Produit un objet Table à partir du contenu d'une table Aster
+ """
+ def Nonefy(l1,l2) :
+ if l2==0 : return None
+ else : return l1
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans table.EXTR_TABLE en PAR_LOT='OUI'")
+ from Utilitai.Table import Table
+ # titre
+ titr = self.TITRE()
+ # récupération des paramètres
+ v_tblp = aster.getvectjev('%-19s.TBLP' % self.get_name())
+ #v_tblp = self.TBLP.get()
+ if v_tblp == None:
+ # retourne une table vide
+ return Table(titr=titr)
+ tabnom=list(v_tblp)
+ nparam=len(tabnom)/4
+ lparam=[tabnom[4*i:4*i+4] for i in range(nparam)]
+ dval={}
+ # liste des paramètres et des types
+ lpar=[]
+ ltyp=[]
+ for i in lparam :
+ value=list(aster.getvectjev(i[2]))
+ exist=aster.getvectjev(i[3])
+ dval[i[0].strip()] = map(Nonefy,value,exist)
+ lpar.append(i[0].strip())
+ ltyp.append(i[1].strip())
+ n=len(dval[lpar[0]])
+ # contenu : liste de dict
+ lisdic=[]
+ for i in range(n) :
+ d={}
+ for p in lpar:
+ d[p]=dval[p][i]
+ lisdic.append(d)
+ return Table(lisdic, lpar, ltyp, titr)
+
+# -----------------------------------------------------------------------------
+class table_fonction(table_sdaster):
+ """Table contenant en plus une colonne FONCTION et/ou FONCTION_C dont les
+ valeurs des cellules sont des noms de fonction_sdaster ou fonction_c.
+ """
+
+# -----------------------------------------------------------------------------
+class table_jeveux(table_sdaster):
+ """Classe permettant d'accéder à une table jeveux qui n'a pas d'ASSD associée,
+ c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+ def __init__(self, nom_jeveux):
+ self.nom = nom_jeveux
+ AsBase.__init__(self, nomj=self.nom)
--- /dev/null
+#@ MODIF co_table_container SD DATE 12/02/2008 AUTEUR REZETTE C.REZETTE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 SD import *
+from co_table import table_sdaster
+from sd_table_container import sd_table_container
+
+# -----------------------------------------------------------------------------
+class table_container(table_sdaster,sd_table_container):
+ """Table contenant les colonnes NOM_OBJET, TYPE_OBJET et NOM_SD.
+ """
+
--- /dev/null
+#@ MODIF co_table_fonction SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from co_table import table_sdaster
+from sd_table_fonction import sd_table_fonction
+
+# -----------------------------------------------------------------------------
+class table_fonction(table_sdaster,sd_table_fonction):
+ """Table contenant une colonne FONCTION et/ou FONCTION_C dont les
+ valeurs des cellules sont des noms de fonction_sdaster ou fonction_c.
+ """
+
--- /dev/null
+#@ MODIF co_tran_gene SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_tran_gene import sd_tran_gene
+
+# -----------------------------------------------------------------------------
+class tran_gene(ASSD, sd_tran_gene):
+ pass
--- /dev/null
+#@ MODIF co_type_flui_stru SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_type_flui_stru import sd_type_flui_stru
+
+# -----------------------------------------------------------------------------
+class type_flui_stru(ASSD, sd_type_flui_stru):
+ pass
--- /dev/null
+#@ MODIF co_vect_asse_gene SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 Accas
+from SD import *
+from sd_cham_gene import sd_cham_gene
+
+import numpy
+
+# -----------------------------------------------------------------------------
+
+class vect_asse_gene(ASSD, sd_cham_gene):
+ def EXTR_VECT_GENE_R(self) :
+ """ retourne les valeurs du vecteur generalisee
+ dans un format numpy
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans vect_asse_gene_r.EXTR_VECT_GENE en PAR_LOT='OUI'")
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'))
+ return valeur
+
+ def RECU_VECT_GENE_R(self,vecteur) :
+ """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+ reel definie dans jeveux
+ Attributs ne retourne rien """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans vect_asse_gene_r.RECU_VECT_GENE en PAR_LOT='OUI'")
+
+ numpy.asarray(vecteur)
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+ # On teste si le DESC du vecteur existe
+ if (desc==None):
+ raise Accas.AsException("L'objet vecteur n'existe pas ou \
+ est mal cree par Code Aster")
+ # On teste si la taille du vecteur jeveux et python est identique
+ if desc[1]<>numpy.shape(vecteur)[0] :
+ raise Accas.AsException("La taille du vecteur python est incorrecte")
+ aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',len(vecteur),tuple((\
+ range(1,len(vecteur)+1))),tuple(vecteur),tuple(vecteur),1)
+ return
+
+ def EXTR_VECT_GENE_C(self) :
+ """ retourne les valeurs du vecteur generalisee
+ dans un format numpy
+ Attributs retourne
+ - self.valeurs : numpy.array contenant les valeurs """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans vect_asse_gene_c.EXTR_VECT_GENE en PAR_LOT='OUI'")
+
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'), complex)
+
+ return valeur
+
+ def RECU_VECT_GENE_C(self,vecteur) :
+ """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+ complexe definie dans jeveux
+ Attributs ne retourne rien """
+ if not self.accessible():
+ raise Accas.AsException("Erreur dans vect_asse_gene_c.RECU_VECT_GENE en PAR_LOT='OUI'")
+
+ numpy.asarray(vecteur)
+ ncham=self.get_name()
+ ncham=ncham+(8-len(ncham))*' '
+ desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+ # On teste si le DESC de la matrice existe
+ if (desc==None):
+ raise Accas.AsException("L'objet vecteur n'existe pas ou \
+ est mal cree par Code Aster")
+ # On teste si la taille de la matrice jeveux et python est identique
+ if desc[1]<>numpy.shape(vecteur)[0] :
+ raise Accas.AsException("La taille du vecteur python est incorrecte")
+ tmpr=vecteur.real
+ tmpc=vecteur.imag
+ aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',len(tmpr),tuple((
+ range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+ return
+
--- /dev/null
+#@ MODIF co_vect_elem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_vect_elem import sd_vect_elem
+
+# -----------------------------------------------------------------------------
+class vect_elem(ASSD, sd_vect_elem):
+ pass
+
+class vect_elem_depl_r(vect_elem):
+ pass
+
+class vect_elem_pres_r(vect_elem):
+ pass
+
+class vect_elem_pres_c(vect_elem):
+ pass
+
+class vect_elem_temp_r(vect_elem):
+ pass
--- /dev/null
+#@ MODIF sd_amor_modal SD DATE 04/04/2007 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_amor_modal(AsBase):
+#------------------------------------
+ nomj = SDNom(fin=19)
+
+ VALM=AsVR()
+ BASM=AsVR()
+
--- /dev/null
+#@ MODIF sd_base_modale SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_resultat_dyn import sd_resultat_dyn
+
+
+class sd_base_modale(sd_resultat_dyn):
+#--------------------------------------------------
+ nomj = SDNom(fin=8)
+ UTIL = Facultatif(AsVI(SDNom(debut=19))) # AJACOT_PB : .UTIL n'existe pas pour sdlx201a
+
+
--- /dev/null
+#@ MODIF sd_cabl_precont SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_liste_rela import sd_liste_rela
+from SD.sd_carte import sd_carte
+from SD.sd_l_table import sd_l_table
+
+
+class sd_cabl_precont(sd_titre):
+#-----------------------------------------
+ nomj = SDNom(fin=8)
+ chme_sigin = sd_carte(SDNom(nomj='.CHME.SIGIN', fin=19))
+ lirela = sd_liste_rela(SDNom(nomj='.LIRELA', fin=19))
+ lt = sd_l_table(SDNom(nomj=''))
+
+
--- /dev/null
+#@ MODIF sd_cara_elem SD DATE 23/10/2008 AUTEUR TORKHANI M.TORKHANI
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte import sd_carte
+
+class sd_cara_elem(AsBase):
+#--------------------------
+ nomj = SDNom(fin=8)
+ CARGENBA = Facultatif(sd_carte())
+ CAFIBR = Facultatif(sd_cham_elem())
+ CARMASSI = Facultatif(sd_carte())
+ CARCABLE = Facultatif(sd_carte())
+ CARCOQUE = Facultatif(sd_carte())
+ CARGEOBA = Facultatif(sd_carte())
+ CANBSP = Facultatif(sd_cham_elem())
+ CARDISCK = Facultatif(sd_carte())
+ CARARCPO = Facultatif(sd_carte())
+ CARGENPO = Facultatif(sd_carte())
+ CARDISCM = Facultatif(sd_carte())
+ CARORIEN = Facultatif(sd_carte())
+ CARDISCA = Facultatif(sd_carte())
+ CVENTCXF = Facultatif(sd_carte())
+ CARPOUFL = Facultatif(sd_carte())
+ CARGEOPO = Facultatif(sd_carte())
+ CARRIGXN = Facultatif(AsVK8())
+ CARRIGXV = Facultatif(AsVR())
+ CARDNSCK = Facultatif(sd_carte())
+ CARDNSCM = Facultatif(sd_carte())
+ CARDNSCA = Facultatif(sd_carte())
+ CARDINFO = Facultatif(sd_carte())
+
+
--- /dev/null
+#@ MODIF sd_carte SD DATE 10/07/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+
+class sd_carte(sd_titre):
+#----------------------------
+ nomj = SDNom(fin=19)
+
+ DESC = AsVI(docu='CART', )
+ NOMA = AsVK8(lonmax=1, )
+ VALE = AsVect(type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), )
+
+ NOLI = Facultatif(AsVK24())
+ LIMA = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+
+
+ def exists(self):
+ return self.NOMA.exists
+
+
+ def check_NOMA(self,checker):
+ if not self.exists() : return
+ noma=self.NOMA.get_stripped()
+
+ # faut-il vérifier le sd_maillage de chaque sd_carte ? AJACOT_PB (meme question que pour sd_cham_no)
+ # - cela risque de couter cher
+ # - cela pose un problème "import circulaire" avec sd_maillage -> sd_carte => import ici
+ # from SD.sd_maillage import sd_maillage
+ # sd2=sd_maillage(noma[0]); sd2.check(checker)
+ # Rem : si on vérifie le sd_maillage, il me semble que sdll503a se plante (RuntimeError: maximum recursion depth exceeded)
+
+
+ def check_DESC(self,checker):
+ if not self.exists() : return
+ desc=self.DESC.get()
+ numgd =desc[0]
+ n_gd_max =desc[1]
+ n_gd_edit=desc[2]
+ assert numgd > 0 , desc
+ assert n_gd_max > 0 , desc
+ assert n_gd_edit >=0 , desc # AJACOT_PB : j'aurais préféré n_gd_edit > 0
+ # mais acearp.f crée parfois des cartes "vides" (zzzz200a)
+ assert n_gd_edit <= n_gd_max , desc
+ for kedit in range(n_gd_edit) :
+ code=desc[3+2*kedit]
+ assert abs(code) in (1,2,3) , (code, kedit, desc)
+
+
+ def check_VALE(self,checker):
+ if not self.exists() : return
+ n1=self.VALE.lonmax
+ desc=self.DESC.get()
+ n_gd_max =desc[1]
+ numgd =desc[0]
+ ncmp_max=len(sdu_licmp_gd(numgd))
+ assert n1==ncmp_max*n_gd_max , (n1, ncmp_max, n_gd_max)
+
+
--- /dev/null
+#@ MODIF sd_cham_elem SD DATE 07/10/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_ligrel import sd_ligrel
+
+
+class sd_cham_elem(sd_titre):
+#-------------------------------------
+ nomj = SDNom(fin=19)
+ CELD = AsVI(docu='CHML', )
+ CELV = AsObject(genr='V', xous='S', type=Parmi('C', 'I', 'K', 'R'), ltyp=Parmi(4,8,16), )
+ CELK = AsVK24(lonmax=7, )
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.CELK.exists
+
+ def check_1(self, checker):
+ if not self.exists() : return
+ celk=self.CELK.get_stripped()
+ sd2=sd_ligrel(celk[0]); sd2.check(checker)
+ assert celk[1] != '' , celk
+ assert celk[2] in ('ELNO','ELGA','ELEM') , celk
+ assert celk[4] in ('','INF','MOY','SUP') , celk
+ assert celk[5] != '' , celk
+ assert celk[6] in ('MPI_COMPLET','MPI_INCOMPLET') , celk
+
+ def check_2(self, checker):
+ if not checker._profond : return
+ if not self.exists() : return
+ celd=self.CELD.get()
+ assert celd[0] > 0 , celd
+ ngrel= celd[1]
+ assert ngrel > 0 , celd
+ mxsp = celd[2]
+ assert mxsp > 0 , celd
+ mxcmp = celd[3]
+ lvari = mxcmp > 0
+ for kgrel in range(ngrel) :
+ debugr= celd[4+kgrel]-1
+ nbel = celd[debugr+1]
+ modelo= celd[debugr+2]
+ lgcata= celd[debugr+3]
+ lggrel= celd[debugr+4]
+
+ assert nbel > 0 , (nbel,kgrel)
+ assert modelo >= 0 , (modelo,kgrel)
+ if modelo == 0 :
+ assert lgcata == 0 , (lgcata,kgrel)
+ assert lggrel == 0 , (lggrel,kgrel)
+ continue
+
+ assert lgcata > 0 , (lgcata,kgrel)
+ assert lggrel > 0 , (lggrel,kgrel)
+ assert lggrel >= nbel*lgcata , (lggrel,kgrel,nbel,lgcata)
+
+
+ for iel in range(nbel) :
+ nbsp =celd[debugr+4+4*iel+1]
+ ncdyn =celd[debugr+4+4*iel+2]
+ lgchel=celd[debugr+4+4*iel+3]
+ adiel =celd[debugr+4+4*iel+4]
+ assert nbsp > 0 , (nbsp,kgrel,iel)
+ if lvari :
+ assert ncdyn > 0 , (ncdyn,kgrel,iel)
+ assert lgchel == lgcata*nbsp*ncdyn , (lgchel,lgcata,nbsp,ncdyn,kgrel,iel)
+ else :
+ assert ncdyn == 0 , (ncdyn,kgrel,iel)
+ assert lgchel == lgcata*nbsp , (lgchel,lgcata,nbsp,kgrel,iel)
+ assert adiel > 0 , (adiel,kgrel,iel)
+
+
--- /dev/null
+#@ MODIF sd_cham_gene SD DATE 27/11/2007 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+
+class sd_cham_gene(AsBase):
+ nomj = SDNom(fin=19)
+ REFE = AsVK24(lonmax=2, )
+ VALE = AsObject(genr='V', xous='S', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )
+ DESC = AsVI(docu='VGEN', )
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.REFE.exists
+
+ # indirection vers NUME_DDL_GENE:
+ def check_REFE(self, checker):
+ if not self.exists() : return
+ refe = self.REFE.get_stripped()
+ # ce test fait planter les verif de SD issues de DYNA_TRAN_MODAL + RECU_GENE
+ # op0037 cree un refe[1]='$TRAN_GENE' bidon
+ if refe[1] == '$TRAN_GENE': return
+ if refe[1] :
+ sd2 = sd_nume_ddl_gene(refe[1]) ; sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_cham_mater SD DATE 30/06/2008 AUTEUR PROIX J-M.PROIX
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_carte import sd_carte
+from SD.sd_champ import sd_champ
+from SD.sd_mater import sd_mater
+from SD.sd_compor import sd_compor
+from SD.sd_util import *
+
+
+# Remarque :
+#------------
+# la sd_cham_mater est produite par la seule commande AFFE_MATERIAU.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
+
+
+
+class sd_cham_mater_varc(AsBase):
+#----------------------------------
+# la sd_cham_mater_varc est la partie de la sd_cham_mater correspondant aux variables de commande
+# (mot clé AFFE_VARC)
+
+ nomj = SDNom(fin=8)
+ CVRCNOM = AsVK8()
+ CVRCGD = AsVK8()
+ CVRCDEF = AsVR()
+ CVRCVARC = AsVK8()
+ CVRCCMP = AsVK8()
+
+ def exists(self):
+ return self.CVRCVARC.exists
+
+ # indirection via CVRCVARC:
+ def check_cham_mater_i_CVRCVARC(self, checker):
+ if not self.exists() : return
+ lnom=self.CVRCVARC.get()
+ for nom in lnom :
+ nom2=self.nomj()[:8]+'.'+nom+'.1'
+ sd2=sd_carte(nom2) ; sd2.check(checker)
+
+ nom2=self.nomj()[:8]+'.'+nom+'.2'
+ sd2=sd_carte(nom2) ; sd2.check(checker)
+
+ # dans le cas de la temperature, on cree parfois des cartes sous-terraines
+ # (lorsque l'on indique VALE_REF sans donner de CHAMP_GD/EVOL) :
+ if nom.strip()=='TEMP':
+ desc=sd2.DESC.get()
+ ngdmax=desc[1]
+ ngdedi=desc[2]
+ vale=sd2.VALE.get_stripped()
+ ncmp=len(vale)/ngdmax
+ assert len(vale)==ncmp*ngdmax, (ngdmax, ncmp, vale)
+ for kedit in range(ngdedi):
+ assert vale[ncmp*kedit+0]=='TEMP' , (vale, kedit,ncmp)
+ if vale[ncmp*kedit+1]=='CHAMP' :
+ sd3=sd_champ(vale[ncmp*kedit+2]) ; sd3.check(checker)
+
+
+ # vérification des objets .CVRC* :
+ def check_CVRC(self, checker):
+ if not self.exists() : return
+ cvrccmp=self.CVRCCMP.get()
+ cvrcnom =self.CVRCNOM.get_stripped()
+ cvrcgd =self.CVRCGD.get_stripped()
+ cvrcvarc=self.CVRCVARC.get_stripped()
+ cvrcdef =self.CVRCDEF.get()
+
+ # Les 6 objets ont la meme longueur > 0 :
+ nbcvrc=len(cvrcnom)
+ assert nbcvrc > 0, (self)
+ assert len(cvrccmp) == nbcvrc , (cvrccmp,cvrcnom,self)
+ assert len(cvrcgd) == nbcvrc , (cvrcgd,cvrcnom,self)
+ assert len(cvrcvarc) == nbcvrc , (cvrcvarc,cvrcnom,self)
+ assert len(cvrcdef) == nbcvrc , (cvrcdef,cvrcnom,self)
+
+ # Les 4 objets sont "non blancs" :
+ sdu_tous_non_blancs(self.CVRCCMP,checker)
+ sdu_tous_non_blancs(self.CVRCNOM,checker)
+ sdu_tous_non_blancs(self.CVRCGD,checker)
+ sdu_tous_non_blancs(self.CVRCVARC,checker)
+
+ # les noms des CRVC doivent etre differents:
+ sdu_tous_differents(self.CVRCNOM,checker)
+
+
+
+
+class sd_cham_mater(AsBase):
+#=============================
+ nomj = SDNom(fin=8)
+
+ # CHAMP_MAT est une carte contenant la liste des noms de matériaux
+ # affectées sur les mailles du maillage.
+ CHAMP_MAT = sd_carte()
+
+ # si AFFE_VARC :
+ varc = Facultatif(sd_cham_mater_varc(SDNom(nomj='')))
+
+ # si AFFE_COMPOR :
+ # COMPOR est une carte définissant les sd_compor affectés
+ # sur les mailles du maillage
+ COMPOR = Facultatif(sd_carte())
+
+
+ def check_CHAMP_MAT(self,checker) :
+ #----------------------------------
+ # on vérifie que la carte .CHAMP_MAT contient bien des noms de matériau.
+ vale=self.CHAMP_MAT.VALE.get_stripped()
+ desc=self.CHAMP_MAT.DESC.get()
+ numgd =desc[0]
+ n_gd_edit=desc[2]
+ assert sdu_nom_gd(numgd) == 'NEUT_F', (desc,sdu_nom_gd(numgd))
+ ncmp_max=len(sdu_licmp_gd(numgd))
+ assert ncmp_max==30 , ncmp_max
+
+ for kedit in range(n_gd_edit):
+ v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+ ktref=None
+ for k1 in range(len(v1)) :
+ x1=v1[k1]
+ if x1 == '' : continue
+
+ # cas particulier : 'TREF=>', '25.0'
+ if x1=='TREF=>' :
+ ktref=k1
+ continue
+ if ktref :
+ assert k1 == ktref+1 , (k1, ktref)
+ # on doit retrouver la valeur de TREF :
+ try :
+ tref=float(x1)
+ except :
+ assert 0 , ' On doit trouver la valeur de TREF: '+x1
+ continue
+
+ # cas général : x1 est un nom de sd_mater
+ sd2=sd_mater(x1) ; sd2.check(checker)
+
+
+ def check_COMPOR(self,checker) :
+ #----------------------------------
+ # on vérifie (un peu) la carte .COMPOR (si elle existe)
+ desc=self.COMPOR.DESC.get()
+ if not desc : return
+ vale=self.COMPOR.VALE.get_stripped()
+ numgd =desc[0]
+ n_gd_edit=desc[2]
+ assert sdu_nom_gd(numgd) == 'COMPOR', (desc,sdu_nom_gd(numgd))
+ ncmp_max=len(sdu_licmp_gd(numgd))
+
+ for kedit in range(n_gd_edit):
+ v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+ assert v1[3]=='COMP_INCR' , v1
+ sd2=sd_compor(v1[6].split('.')[0].strip()) ; sd2.check(checker)
+
+ for x1 in v1[7:] :
+ assert x1=='' , v1
+
+
+
+
+
+
+
--- /dev/null
+#@ MODIF sd_cham_no SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_prof_chno import sd_prof_chno
+
+
+class sd_cham_no(sd_titre):
+#------------------------------------
+ nomj = SDNom(fin=19)
+ VALE = AsVect(ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), docu=Parmi('', '2', '3'), )
+ REFE = AsVK24()
+ DESC = AsVI(docu='CHNO', )
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.REFE.exists
+
+ def check_cham_no_i_REFE(self, checker):
+ if not self.exists() : return
+ lnom = self.REFE.get()
+
+ # faut-il vérifier le sd_maillage de chaque sd_cham_no ? AJACOT_PB
+ # - cela risque de couter cher
+ # - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici
+ from SD.sd_maillage import sd_maillage
+ sd2 = sd_maillage(lnom[0])
+ sd2.check(checker)
+
+ if lnom[1].strip() :
+ if checker.names.has_key(lnom[1][:14]+'.NUME.PRNO'): return
+ sd2 = sd_prof_chno(lnom[1]) ; sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_champ SD DATE 17/07/2007 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_cham_gene import sd_cham_gene
+from SD.sd_carte import sd_carte
+from SD.sd_resuelem import sd_resuelem
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_cham_no, sd_cham_elem, sd_carte, ...
+#---------------------------------------------------------------------------------
+
+class sd_champ(AsBase):
+#---------------------------
+ nomj = SDNom(fin=19)
+
+
+ def check_champ_1(self, checker):
+ # est-ce un sd_cham_no, un sd_cham_elem, ... ?
+ nom=self.nomj()[:19]
+ nom1=nom+'.CELD'
+ iexi=aster.jeveux_exists(nom1)
+ if iexi :
+ nom2=nom+'.CELD'
+ else :
+ nom2=nom+'.DESC'
+ iexi2=aster.jeveux_exists(nom2)
+ if not iexi2 :
+ if not self.optional and not checker.optional :
+ checker.err( self, "n'existe pas (%r)" %self._parent )
+ return
+
+
+ docu=aster.jeveux_getattr(nom2,'DOCU')[1].strip()
+ if docu=='CHNO' :
+ sd2 = sd_cham_no(nom)
+ elif docu=='CART' :
+ sd2 = sd_carte(nom)
+ elif docu=='CHML' :
+ sd2 = sd_cham_elem(nom)
+ elif docu=='RESL' :
+ sd2 = sd_resuelem(nom)
+ elif docu=='VGEN' :
+ sd2 = sd_cham_gene(nom)
+ else :
+ assert 0,docu
+ sd2.check(checker)
--- /dev/null
+#@ MODIF sd_char_acou SD DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_carte import sd_carte
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_acou(AsBase):
+ nomj = SDNom(fin=8)
+ chac_vitfa = Facultatif(sd_carte(SDNom(nomj='.CHAC.VITFA', fin=19)))
+ CHAC_MODEL_NOMO = AsVK8(SDNom(nomj='.CHAC.MODEL.NOMO'), lonmax=1, )
+ chac_cmult = Facultatif(sd_carte(SDNom(nomj='.CHAC.CMULT', fin=19)))
+ chac_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHAC.CIMPO', fin=19)))
+ chac_imped = Facultatif(sd_carte(SDNom(nomj='.CHAC.IMPED', fin=19)))
+ chac_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHAC.LIGRE', fin=19)))
+ ELIM = Facultatif(sd_char_cine())
+ TYPE = AsVK8(lonmax=1, )
+
+
--- /dev/null
+#@ MODIF sd_char_cine SD DATE 04/05/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_modele import sd_modele
+from SD.sd_fonction import sd_fonction
+
+
+class sd_char_cine(AsBase):
+#===========================
+ nomj = SDNom(fin=19)
+
+ AFCK = AsVK8(lonmax=3)
+ AFCI = AsVI()
+ AFCV = Facultatif(OJBVect(type=Parmi('C','R','K')))
+
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.AFCK.exists
+
+
+ def u_veri1(self): # retourne (CIME/CITH/CIAC, RE/CX/FT)
+ #---------------------------------------------------------------
+ if not self.exists() : return
+ afck=self.AFCK.get()
+ l1=afck[0].strip().split('_') ; assert len(l1)==2 , afck
+ phen, tsca= l1[0], l1[1]
+ assert phen in ('CIME', 'CITH', 'CIAC'), afck
+ assert tsca in ('RE', 'CX', 'FT'), tsca
+ return phen, tsca
+
+
+ def check_AFCK(self,checker):
+ #---------------------------------------------
+ if not self.exists() : return
+ phen, tsca = self.u_veri1()
+ afck=self.AFCK.get()
+ nomo=afck[1].strip()
+ sd2=sd_modele(nomo); sd2.check(checker)
+ if afck[2].strip() != '' : assert (phen=='CIME' or phen=='CITH') and tsca=='FT', afck
+
+
+ def check_AFCI(self,checker):
+ #---------------------------------------------
+ if not self.exists() : return
+ phen, tsca = self.u_veri1()
+ afci=self.AFCI.get()
+ nbloc=afci[0]
+ assert len(afci)>=3*nbloc+1 , afci
+ for k in range(nbloc) :
+ nuno =afci[3*k +1]
+ nucmp=afci[3*k +2]
+ assert afci[3*k +3] == 0 , (k,afci)
+ assert nuno > 0 , (k,afci)
+ assert nucmp> 0 , (k,afci)
+
+
+ def check_AFCV(self,checker):
+ #-------------------------------------------------
+ if not self.exists() : return
+ phen, tsca = self.u_veri1()
+ afci=self.AFCI.get()
+ nbloc=afci[0]
+ if not self.AFCV.exists :
+ assert tsca=='FT',tsca
+ afck=self.AFCK.get()
+ assert afck[2].strip() != '' , afck
+ else :
+ tsca2 = self.AFCV.type.strip()
+ assert self.AFCV.lonmax >= nbloc , (nbloc,self.AFCV.lonmax)
+
+ if tsca == 'RE' :
+ assert tsca2=='R', tsca2 # champ de réels
+ if tsca == 'FT' :
+ assert tsca2=='K', tsca2 # champ de fonctions
+ if tsca == 'CX' :
+ assert tsca2=='C', tsca2 # champ de complexes
+
+ # vérification des fonctions :
+ if tsca == 'FT' :
+ afcv = self.AFCV.get()
+ for fonc in afcv[:nbloc] :
+ sd2=sd_fonction(fonc); sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_char_meca SD DATE 22/12/2009 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_carte import sd_carte
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_gf_xx(AsBase):
+ nomj = SDNom(fin=19)
+ VALE = AsVR()
+ NCMP = AsVK8()
+
+
+class sd_char_grflu(AsBase):
+ nomj = SDNom(fin=19)
+
+ ABSC = AsVR()
+ APPL = AsVI()
+ GEOM = AsVR()
+ LIMA = AsVI()
+ LINO = AsVI()
+ NOMA = AsVK8()
+ VDIR = AsVR()
+
+
+class sd_char_chme(AsBase):
+ nomj = SDNom(fin=13)
+
+ MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1, )
+
+ LIGRE = Facultatif(sd_ligrel())
+
+ CIMPO = Facultatif(sd_carte())
+ CMULT = Facultatif(sd_carte())
+ EPSIN = Facultatif(sd_carte())
+ F1D1D = Facultatif(sd_carte())
+ F1D2D = Facultatif(sd_carte())
+ F1D3D = Facultatif(sd_carte())
+ F2D2D = Facultatif(sd_carte())
+ F2D3D = Facultatif(sd_carte())
+ F3D3D = Facultatif(sd_carte())
+ FCO2D = Facultatif(sd_carte())
+ FCO3D = Facultatif(sd_carte())
+ FELEC = Facultatif(sd_carte())
+ FL101 = Facultatif(sd_carte())
+ FL102 = Facultatif(sd_carte())
+ FLUX = Facultatif(sd_carte())
+ FORNO = Facultatif(sd_carte())
+ IMPE = Facultatif(sd_carte())
+ ONDE = Facultatif(sd_carte())
+ PESAN = Facultatif(sd_carte())
+ PRESS = Facultatif(sd_carte())
+ ROTAT = Facultatif(sd_carte())
+ SIGIN = Facultatif(sd_carte())
+ VNOR = Facultatif(sd_carte())
+
+ # si GRAPPE_FLUIDE :
+ GRFLU = Facultatif(sd_char_grflu())
+ GF_AS = Facultatif(sd_char_gf_xx())
+ GF_DH = Facultatif(sd_char_gf_xx())
+ GF_GR = Facultatif(sd_char_gf_xx())
+ GF_MA = Facultatif(sd_char_gf_xx())
+ GF_MC = Facultatif(sd_char_gf_xx())
+ GF_PC = Facultatif(sd_char_gf_xx())
+ GF_TG = Facultatif(sd_char_gf_xx())
+
+ VEASS = Facultatif(AsVK8(lonmax=1, ))
+ EVOL_CHAR = Facultatif(AsVK8(SDNom(nomj='.EVOL.CHAR'), lonmax=1, ))
+ TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.TEMPE.TEMP'), lonmax=1, ))
+
+
+class sd_char_meca(AsBase):
+ nomj = SDNom(fin=8)
+
+ TYPE = AsVK8(lonmax=1)
+
+ CHME = Facultatif(sd_char_chme())
+ ELIM = Facultatif(sd_char_cine())
+
+ TRANS01 = Facultatif(AsVR(lonmax=6, ))
+ TRANS02 = Facultatif(AsVR(lonmax=6, ))
+ LISMA01 = Facultatif(AsVI(lonmax=12, ))
+ LISMA02 = Facultatif(AsVI(lonmax=12, ))
+ POIDS_MAILLE = Facultatif(AsVR())
+
+
+
--- /dev/null
+#@ MODIF sd_char_ther SD DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte import sd_carte
+from SD.sd_champ import sd_champ
+from SD.sd_fonction import sd_fonction
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_chth(AsBase):
+#--------------------------------
+ nomj = SDNom(fin=13)
+
+ CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CONVE.VALE'), lonmax=1))
+ MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1)
+ LIGRE = Facultatif(sd_ligrel())
+
+ SOURE = Facultatif(sd_champ(SDNom(nomj='.SOURE'))) # pour l'instant : sd_carte ou sd_cham_elem
+
+ CIMPO = Facultatif(sd_carte())
+ CMULT = Facultatif(sd_carte())
+ COEFH = Facultatif(sd_carte())
+ FLUNL = Facultatif(sd_carte())
+ FLUR2 = Facultatif(sd_carte())
+ FLURE = Facultatif(sd_carte())
+ GRAIN = Facultatif(sd_carte())
+ HECHP = Facultatif(sd_carte())
+ RAYO = Facultatif(sd_carte())
+ T_EXT = Facultatif(sd_carte())
+
+
+ # parfois, TEMP_IMPO crée une carte de sd_fonction :
+ # il faut alors vérifier ces sd_fonction
+ def check_CIMPO_FONC(self, checker):
+ if self.CIMPO.VALE.ltyp != 24 : return
+ vale=self.CIMPO.VALE.get()
+ for x in vale :
+ if x.strip()=='' : continue
+ nomfon=x[:19]
+ sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
+
+
+class sd_char_ther(AsBase):
+#--------------------------------
+ nomj = SDNom(fin=8)
+ TYPE = AsVK8(lonmax=1)
+ CHTH = sd_char_chth()
+ ELIM = Facultatif(sd_char_cine())
+
+
--- /dev/null
+#@ MODIF sd_char_unilate SD DATE 22/10/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_char_unilate(AsBase):
+ nomj = SDNom(fin=16)
+ DIMECU = AsVI()
+ LISNOE = AsVI()
+ POINOE = AsVI()
+ METHCU = AsVI(lonmax=1,)
+ PARACU = AsVR(lonmax=1,)
+ CMPGCU = AsVK8()
+ COEFD = AsVect(ltyp=8, type=Parmi('K','R'))
+ COEFG = AsVect(ltyp=8, type=Parmi('K','R'))
+
+
--- /dev/null
+#@ MODIF sd_compor SD DATE 08/12/2009 AUTEUR PROIX J-M.PROIX
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_mater import sd_mater
+
+# Remarque :
+#------------
+# la sd_compor est produite par la seule commande DEFI_COMPOR.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
+
+class sd_compor(AsBase):
+ nomj = SDNom(fin=8)
+ CPRK = AsVK16()
+ CPRI = AsVI()
+ CPRR = Facultatif(AsVR())
+
+
+ def check_tout(self,checker) :
+ #-------------------------------
+ cpri=self.CPRI.get()
+ type=cpri[0]
+ assert type in (1,2,3) , CPRI
+ if type == 1 :
+ self.monocristal(cpri,checker)
+ if type == 2 :
+ self.polycristal(cpri,checker)
+ if type == 3 :
+ self.multifibres(cpri,checker)
+
+
+
+ def monocristal(self,cpri,checker) :
+ #------------------------------------
+ nboccm=cpri[4]
+ nvi =cpri[2]
+ if cpri[5] > 0 :
+ nbsys=(nvi-25)/3
+ assert nvi==25+3*nbsys , (nvi, nbsys, cpri)
+ else :
+ nbsys=(nvi-9)/3
+ assert nvi==9+3*nbsys , (nvi, nbsys, cpri)
+ cprk=self.CPRK.get_stripped()
+
+ # vérif existence et longueur
+ assert len(cpri)==7, cpri
+ assert len(cprk)==5*nboccm+1, (cpri,cprk)
+ assert not self.CPRR.get()
+
+ # vérif CPRI :
+ #-------------
+ assert cpri[1] == 1 ,cpri
+ assert cpri[2] == nvi ,cpri
+ assert cpri[3] == 1 ,cpri
+ assert cpri[4] > 0 ,cpri
+ assert cpri[5] >= 0 ,cpri
+ assert cpri[6] == nvi ,cpri
+
+ # vérif CPRK :
+ #-------------
+ elas=cprk[5*nboccm]
+ assert elas in ('ELAS', 'ELAS_ORTH') ,cprk
+ for k in range(nboccm):
+ famil =cprk[5*k+0]
+ mater =cprk[5*k+1]
+ ecoul =cprk[5*k+2]
+ ecro_isot =cprk[5*k+3]
+ ecro_cine =cprk[5*k+4]
+ sd2=sd_mater(mater) ; sd2.check(checker)
+ assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1',
+ 'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN',
+ 'RL','UNIAXIAL')
+ assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3')
+ assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2')
+ assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2')
+
+
+
+ def polycristal(self,cpri,checker) :
+ #------------------------------------
+ nbphases=cpri[1]
+ assert nbphases > 0 , cpri
+ lgcprk =cpri[6+3*nbphases-2]
+ assert lgcprk > 0 , cpri
+ cprk=self.CPRK.get_stripped()
+ cprr=self.CPRR.get()
+
+ # vérif existence et longueur
+ #------------------------------
+ assert len(cpri)==6+3*nbphases, (cpri,nbphases)
+ assert len(cprr)==2+4*nbphases, (cpri,cprr,nbphases)
+ assert len(cprk)==lgcprk, (cpri,cprk)
+
+ # vérif CPRI :
+ #-------------
+ nvitot=cpri[2]
+ assert nvitot >= 0 ,cpri
+ nbmono=cpri[3]
+ assert nbmono > 0 ,cpri
+ nbpara =cpri[6+3*nbphases-1]
+ assert nbpara in (0,1,2) ,cpri
+ for k in range(nbphases):
+ nbfam1 = cpri[4+3*k+0]
+ numono = cpri[4+3*k+1]
+ nvi1 = cpri[4+3*k+2]
+ assert nbfam1 > 0 ,cpri
+ assert numono > 0 and numono <= nbmono ,(cpri,nbmono)
+ assert nvi1 >=0 ,cpri
+
+ # vérif CPRR :
+ #-------------
+ frac_tot=0.
+ for k in range(nbphases):
+ frac =cprr[4*k+0]
+ assert frac >= 0. and frac <= 1. ,(cprr,k)
+ frac_tot=frac_tot+frac
+ for dir in range(1,4):
+ angl =cprr[4*k+dir]
+ assert angl >=0. and angl <=360. , (angl,dir)
+ assert frac_tot > 0.99 and frac_tot < 1.01
+
+ # vérif CPRK :
+ #-------------
+ locali =cprk[0]
+ assert locali in ('BZ','BETA') ,(locali,cprk)
+ decal=0
+ for k in range(nbmono):
+ mono1 =cprk[0+decal+1]
+ sd2=sd_compor(mono1) ; sd2.check(checker)
+ nbfam1=int(cprk[0+decal+2])
+ assert nbfam1 > 0 , (nbfam1,k,decal,cprk)
+ decal=decal+2+5*nbfam1+1
+ # on pourrait encore vérifier que le .CPRK de mono1 a bien été recopié
+ # mais il faut bien s'arreter ...
+
+
+
+ def multifibres(self,cpri,checker) :
+ #------------------------------------
+ nbgmax=cpri[2]
+ cprk=self.CPRK.get_stripped()
+
+ # vérif existence et longueur
+ assert len(cpri)==3, cpri
+ assert len(cprk)==6*nbgmax+1, (cpri,cprk)
+ assert not self.CPRR.get()
+
+ # vérif CPRI :
+ #-------------
+ assert cpri[1] > 0, cpri
+ assert cpri[2] > 0, cpri
+
+ # vérif CPRK :
+ #-------------
+ mater=cprk[6*nbgmax]
+ assert mater != '', cprk
+ sd2=sd_mater(mater) ; sd2.check(checker)
+ for k in range(nbgmax):
+ grfib1 =cprk[6*k+0]
+ mater1 =cprk[6*k+1]
+ loifib1 =cprk[6*k+2]
+ algo1d =cprk[6*k+3]
+ deform =cprk[6*k+4]
+ nbfib= int(cprk[6*k+5])
+ assert grfib1 != '' , cprk
+ assert mater1 != '' , cprk
+ sd2=sd_mater(mater1) ; sd2.check(checker)
+ assert loifib1 != '' , cprk
+ assert algo1d in ('ANALYTIQUE','DEBORST') , cprk
+ assert deform in ('PETIT','PETIT_REAC','GROT_GDEP') , cprk
+ assert nbfib > 0 , cprk
+
+
--- /dev/null
+#@ MODIF sd_contact SD DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_champ import sd_champ
+from SD.sd_xfem import sd_modele_xfem
+from SD.sd_xfem import sd_fiss_xfem
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_char_meca import sd_char_chme
+from sd_prof_chno import sd_prof_chno
+
+class sd_contact(AsBase):
+ nomj = SDNom(fin=8)
+
+
+ # Recap longueurs vecteurs (voir CFMMVD.F)
+ zdime = 12
+ zpari = 25
+ zparr = 5
+ zdirn = 6
+ zcmdf = 6
+ zcmcf = 27
+ zcmxf = 16
+ zexcl = 6
+ ztypn = 1
+ ztypm = 2
+ zmaes = 6
+ zmesx = 5
+
+ MODELE = AsVK8(SDNom(nomj='.CHME.MODEL.NOMO'),lonmax=1, )
+ PARACI = AsVI (SDNom(nomj='.CONTACT.PARACI') ,lonmax=zpari,)
+ PARACR = AsVR (SDNom(nomj='.CONTACT.PARACR') ,lonmax=zparr,)
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre v??rifi??e)
+ return self.PARACI.exists
+
+ def type_form(self):
+ para = self.PARACI.get()
+ iform = para[3]
+ return iform
+
+ def formulation_xfem(self):
+ if not self.exists() : return False
+ iform = self.PARACI.get()[3]
+ return iform == 3
+
+ NDIMCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NDIMCO') ))
+ METHCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.METHCO') ))
+ TOLECO = Facultatif(AsVR(SDNom(nomj='.CONTACT.TOLECO') ))
+
+ def dimeC(self):
+ iform = self.type_form()
+ if (iform==1) or (iform==2) or (iform==3) :
+ para = self.NDIMCO.get()
+ nzoco = para[1]
+ nsuco = para[2]
+ nmaco = para[3]
+ nnoco = para[4]
+ nmano = para[5]
+ nnoma = para[6]
+ ntnoe = para[8]
+ ntmae = para[9]
+ ntpc = para[10]
+ ntelno = para[11]
+ return nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno
+
+
+ def check_para(self,checker):
+ iform = self.type_form()
+ if (iform==1) or (iform==2) or (iform==3) :
+ nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+ lldime = self.NDIMCO.lonmax
+ llmeth = self.METHCO.lonmax
+ lltole = self.TOLECO.lonmax
+ assert llmeth == nzoco*10
+ assert lltole == nzoco*2
+ assert lldime == self.zdime
+ if (iform==4) :
+ lldime = self.NDIMCU.lonmax
+ assert lldime == 2
+ return
+
+ JEUFO1 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO1CO') ))
+ JEUFO2 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO2CO') ))
+ DIRAPP = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRAPP') ))
+ DIRNOR = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRNOR') ))
+ JEUCOQ = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUCOQ') ))
+ JEUPOU = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUPOU') ))
+
+ PZONE = Facultatif(AsVI(SDNom(nomj='.CONTACT.PZONECO') ))
+ PSURMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUMACO') ))
+ PSURNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUNOCO') ))
+
+ CONTMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAILCO') ))
+ CONTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOEUCO') ))
+
+ NOZOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOZOCO') ))
+ MANOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.MANOCO') ))
+ NOMACO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOMACO') ))
+
+ PMANO = Facultatif(AsVI(SDNom(nomj='.CONTACT.PMANOCO') ))
+ PNOMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.PNOMACO') ))
+
+ PSANS = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSSNOCO') ))
+ SANSN = Facultatif(AsVI(SDNom(nomj='.CONTACT.SSNOCO') ))
+
+ TYPEMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPEMA') ))
+ TYPENO = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPENO') ))
+ MAESCL = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCL') ))
+
+ TYPE = Facultatif(AsVK8(SDNom(nomj='.TYPE') ))
+ LIGRE = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))
+ RELLIN = Facultatif(sd_char_chme(SDNom(nomj='.CHME')))
+
+ def check_mail(self,checker):
+ iform = self.type_form()
+ if (iform==2) or (iform==1) :
+ nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+ assert self.JEUFO1.lonmax == nzoco
+ assert self.JEUFO2.lonmax == nzoco
+ assert self.DIRAPP.lonmax == 3*nzoco
+ assert self.DIRNOR.lonmax == self.zdirn*nzoco
+ assert self.JEUCOQ.lonmax == nmaco
+ assert self.JEUPOU.lonmax == nmaco
+
+ assert self.PZONE.lonmax == nzoco+1
+ assert self.PSURMA.lonmax == nsuco+1
+ assert self.PSURNO.lonmax == nsuco+1
+ assert self.CONTMA.lonuti == nmaco
+ assert self.CONTNO.lonuti == nnoco
+
+ assert self.NOZOCO.lonmax == nnoco
+ assert self.MANOCO.lonuti == nmano
+ assert self.NOMACO.lonuti == nnoma
+
+ assert self.MANOCO.lonmax == 20*max(nnoco,nmaco)
+ assert self.NOMACO.lonmax == 20*max(nnoco,nmaco)
+
+ assert self.PMANO.lonmax == nnoco+1
+ assert self.PNOMA.lonmax == nmaco+1
+
+ assert self.PSANS.lonmax == nzoco+1
+ assert self.SANSN.lonmax >= 1
+
+ assert self.TYPENO.lonmax == self.ztypn*nnoco
+ assert self.TYPEMA.lonmax == self.ztypm*nmaco
+ assert self.MAESCL.lonmax == self.zmaes*ntmae
+
+ return
+
+ CARADF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARADF') ))
+
+ def check_form_disc(self,checker):
+ iform = self.type_form()
+ if (iform==1) :
+ nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+ assert self.CARADF.lonmax == self.zcmdf*nzoco
+ assert ntnoe == ntpc
+ return
+
+ CARACF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARACF') ))
+ EXCLFR = Facultatif(AsVR(SDNom(nomj='.CONTACT.EXCLFR') ))
+
+ PBARS = Facultatif(AsVI(SDNom(nomj='.CONTACT.PBANOCO') ))
+ BARSNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.BANOCO') ))
+
+ PBARM = Facultatif(AsVI(SDNom(nomj='.CONTACT.PBAMACO') ))
+ BARSMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.BAMACO') ))
+
+ PRACC = Facultatif(AsVI(SDNom(nomj='.CONTACT.PRANOCO') ))
+ RACCNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.RANOCO') ))
+
+ PFROT = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSANOFR') ))
+ FROTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.SANOFR') ))
+
+ def check_form_cont(self,checker):
+ iform = self.type_form()
+ if (iform==2) :
+ nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+ assert self.CARACF.lonmax == self.zcmcf*nzoco
+ assert self.EXCLFR.lonmax == self.zexcl*nzoco
+
+ assert self.PBARS.lonmax == nzoco+1
+ assert self.BARSNO.lonmax >= 1
+
+ assert self.PBARM.lonmax == nzoco+1
+ assert self.BARSMA.lonmax >= 1
+
+ assert self.PRACC.lonmax == nzoco+1
+ assert self.RACCNO.lonmax >= 1
+
+ assert self.PFROT.lonmax == nzoco+1
+ assert self.FROTNO.lonmax >= 1
+
+ assert self.LIGRE.exists
+
+ return
+
+ MAESCX = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCX') ))
+ CARAXF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARAXF') ))
+ MODELX = Facultatif(AsVK8(SDNom(nomj='.CONTACT.MODELX') ))
+ XFIMAI = Facultatif(AsVK8(SDNom(nomj='.CONTACT.XFIMAI') ))
+ XNBASC = Facultatif(AsVK24(SDNom(nomj='.CONTACT.XNBASC') ))
+ XNRELL = Facultatif(AsVK24(SDNom(nomj='.CONTACT.XNRELL') ))
+ CNCTE = Facultatif(AsVI(SDNom(nomj='.CONTACT.CNCTE') ))
+ PRCHNO = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00000')))
+ PRCHN1 = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00001')))
+ LIGRE = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))
+
+
+ def contact_xfem_actif(self):
+ if not self.formulation_xfem() : return False
+ self.XNBASC.exists
+
+ def check_form_xfem(self,checker):
+ iform = self.type_form()
+ if (iform==3) :
+ nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+ paraci = self.PARACI.get()
+ if (paraci[0]!=0) :
+ assert self.MAESCX.lonuti == self.zmesx*ntmae
+ assert self.CARAXF.lonmax == self.zcmxf*nzoco
+ assert self.MODELX.lonmax == 1
+ assert self.XFIMAI.lonmax == nzoco
+ assert self.XNRELL.exists
+ assert self.LIGRE.exists
+ return
+
+ def check_char_contact_xfem_XNBASC(self, checker):
+ if not self.contact_xfem_actif() : return
+ lnom = self.XNBASC.get()
+ nbnom = self.XNBASC.lonuti
+ for k in range(nbnom) :
+ nom = lnom[k]
+ if not nom.strip(): continue
+ sd2 = sd_champ(nom)
+ sd2.check(checker)
+
+
+ def check_char_contact_xfem_XNRELL(self, checker):
+ iform = self.type_form()
+ if (iform==3) :
+ lnom = self.XNRELL.get()
+ nbnom = self.XNRELL.lonuti
+ nom = lnom[0]
+ if (nom[8:14]!='.LISEQ'):
+ oo = AsObject(SDNom(nomj=nom,debut=0),genr='V', xous='S', type=Parmi('I','R'))
+ oo.check(checker)
+
+ # Verification MODELE xfem
+ def check_char_contact_xfem_MODELX(self, checker):
+ if not self.contact_xfem_actif() : return
+ nom = self.MODELX.get()[0]
+ sd2 = sd_modele_xfem(nom)
+ sd2.check(checker)
+
+
+ NDIMCU = Facultatif(AsVI(SDNom(nomj='.UNILATE.NDIMCU') ))
+ CMPGCU = Facultatif(AsVK8(SDNom(nomj='.UNILATE.CMPGCU') ))
+ COEFD = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFD') ))
+ COEFG = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFG') ))
+ LISNOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.LISNOE') ))
+ POINOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.POINOE') ))
+ def check_form_unil(self,checker):
+ iform = self.type_form()
+ if (iform==4) :
+ assert self.CMPGCU.lonmax >= 1
+ assert self.COEFD.lonmax >= 1
+ assert self.COEFG.lonmax >= 1
+ assert self.LISNOE.lonmax >= 1
+ assert self.POINOE.lonmax >= 1
+
+ return
+
--- /dev/null
+#@ MODIF sd_corresp_2_mailla SD DATE 02/02/2010 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 SD import *
+
+class sd_corresp_2_mailla(AsBase):
+ nomj = SDNom(fin=16)
+ PJXX_K1 = AsVK24(lonmax=5)
+
+ # Remarque : pour retirer la plupart des "facultatifs", il faudrait changer
+ # les noms : PJEF_NB -> PE.EFNB
+ # ...
+ # PJNG_I1 -> PN.NGI1
+ # et faire 2 class sd_corresp_2_elem et sd_corresp_2_nuage)
+ PJEF_NB = Facultatif(AsVI())
+ PJEF_NU = Facultatif(AsVI())
+ PJEF_M1 = Facultatif(AsVI())
+ PJEF_CF = Facultatif(AsVR())
+ PJEF_TR = Facultatif(AsVI())
+ PJEF_AM = Facultatif(AsVI())
+ PJEF_CO = Facultatif(AsVR())
+
+ PJNG_I1 = Facultatif(AsVI())
+ PJNG_I2 = Facultatif(AsVI())
+
+
+
--- /dev/null
+#@ MODIF sd_courbe SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_courbe_sa import sd_courbe_sa
+from SD.sd_courbe_lm import sd_courbe_lm
+
+
+class sd_courbe(AsBase):
+#----------------------------
+ nomj = SDNom(fin=8)
+ NOMMAIL = AsVK8(lonmax=1, )
+ TYPCOURBE = AsVK8(lonmax=1, )
+ lm= Facultatif(sd_courbe_lm(SDNom(nomj='')))
+ sa= Facultatif(sd_courbe_sa(SDNom(nomj='')))
+
+
--- /dev/null
+#@ MODIF sd_courbe_lm SD DATE 30/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_courbe_lm(AsBase):
+ nomj = SDNom(fin=8)
+ MAIL1 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ MAIL2 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ CHEMIN = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ def check_DIM(self,checker):
+# verification que les 3 collections ont le meme nbre d'objets
+ n1 = self.MAIL1.nmaxoc
+ n2 = self.MAIL2.nmaxoc
+ assert n1 == n2
+ bool = self.CHEMIN.exists
+ if self.CHEMIN.exists:
+ n = self.CHEMIN.nmaxoc
+ assert n == n1
+ chemin = self.CHEMIN.get()
+ mail1 = self.MAIL1.get()
+ mail2 = self.MAIL2.get()
+ for i in chemin.keys():
+ lon = len(chemin[i])
+ lon1 = len(mail1[i])
+ lon2 = len(mail2[i])
+# verification que les objets des 3 collections ont la meme longueur
+ assert lon == lon1
+ assert lon == lon2
+ deb = chemin[i][0]
+ fin = chemin[i][lon-1]
+# verification que le chemin est soit simple (fin = 0) soit cyclique (deb = fin)
+ assert (deb == fin) or (fin == 0)
+# verification que le dernier entier des objets des collections mail1 et mail2 est nul
+ fin = mail1[i][lon1-1]
+ assert fin == 0
+ fin = mail2[i][lon2-1]
+ assert fin == 0
+
--- /dev/null
+#@ MODIF sd_courbe_sa SD DATE 30/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_courbe_sa(AsBase):
+ nomj = SDNom(fin=8)
+ MAIL1 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ MAIL2 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ XYBSGT = AsVR(SDNom(debut=8), )
+ XYASGT = AsVR(SDNom(debut=8), )
+ XSARC = AsVR(SDNom(debut=8), )
+ XYCARC = AsVR(SDNom(debut=8), )
+ XRARC = AsVR(SDNom(debut=8), )
+ ORSGT = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+ EXSGT = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+ PAROR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+ PAREX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+ FACOR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ FACEX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ CNXOR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ CNXEX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ def check_1(self,checker):
+ if self.XYASGT.exists:
+ valea=self.XYASGT.get()
+ valeb=self.XYBSGT.get()
+ assert len(valea) == len(valeb)
+ assert valea[0] == 0.
+ assert valea[1] == 0.
+ assert valeb[0] == 0.
+ assert valeb[1] == 0.
+ valec=self.XYCARC.get()
+ valeth=self.XSARC.get()
+ valer=self.XRARC.get()
+ assert len(valec) == len(valeth)
+ assert valec[0] == 0.
+ assert valec[1] == 0.
+ assert valeth[0] == 0.
+ assert valeth[1] == 0.
+ assert valer[0] == 0.
+
--- /dev/null
+#@ MODIF sd_feti SD DATE 23/10/2007 AUTEUR BOITEAU O.BOITEAU
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+# AJACOT_PB en attendant la correction de la fiche 10475 :
+# on dédouble la SD pour la rendre facultative.
+
+
+class sd_feti1(AsBase):
+ nomj = SDNom(fin=19)
+ FLIM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FDIM = AsVI(lonmax=5, )
+ FREF = AsVK8()
+ FETG = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FLIN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, )
+ FLII = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FETB = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FETA = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FETJ = AsVI()
+ FETI = AsVI()
+ FETH = AsVI()
+ FCFI = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FCFL = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, )
+ FCFM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ FCFN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+
+
+class sd_feti(AsBase):
+ nomj = SDNom(fin=19)
+ sd1 = Facultatif(sd_feti1(SDNom('')))
+
--- /dev/null
+#@ MODIF sd_fonction SD DATE 19/02/2008 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+#----------------------------------------------------------------
+# définition de 3 classes :
+# sd_formule (objets python + jeveux)
+# sd_fonction_aster (objets jeveux)
+# sd_fonction (chapeau des 2 classes précédentes)
+#----------------------------------------------------------------
+
+
+
+class sd_formule(AsBase):
+#--------------------------------------
+ nomj = SDNom(fin=19)
+ PROL = AsVK24(lonmax=6, )
+ NOVA = AsVK8()
+
+
+class sd_fonction_aster(sd_titre):
+#--------------------------------------
+ nomj = SDNom(fin=19)
+ PROL = AsVK24()
+ VALE = AsObject(acces='NU', sd_stockage='CONTIG', modelong='VARIABLE', type='R', xous=Parmi('S', 'X'), genr='V', ltyp=8, )
+ PARA = Facultatif(AsVR())
+
+ # existence possible de la SD :
+ def exists(self):
+ return self.PROL.exists
+
+
+ def check_PROL(self,checker) :
+ #-------------------------------
+ if not self.exists() : return
+
+ prol=self.PROL.get()
+ assert prol , self
+ typfon= prol[0].strip()
+ assert typfon in ('CONSTANT', 'FONCTION', 'FONCT_C', 'NAPPE', 'INTERPRE') ,prol
+ #ltabul = True : la fonction est tabulée (et non interpretée)
+ ltabul = typfon != 'INTERPRE'
+
+ if typfon == 'NAPPE' :
+ assert len(prol) > 7 , (prol,self)
+ else :
+ # tester que le prol[5] est bien le nom de la fonction
+ assert len(prol) == 6 , (prol,self)
+
+ if ltabul : # type d'interpolation
+ interp= prol[1].strip()
+ assert interp[:3] in ('NON', 'LIN', 'LOG') , prol
+ assert interp[4:] in ('NON', 'LIN', 'LOG') , prol
+
+ if ltabul : # nom d'un paramètre
+ para=prol[2].strip()
+ assert para != '', prol
+
+ assert prol[3].strip() != '' , prol # type du résultat
+
+ if ltabul : # prolongement à droite et à gauche
+ prolgd=prol[4].strip()
+ assert len(prolgd)==2, prol
+ assert prolgd[0] in ('E', 'C', 'L', 'I'), prol
+ assert prolgd[1] in ('E', 'C', 'L', 'I'), prol
+
+ if typfon == 'NAPPE' :
+ nf= (len(prol) - 7)/2
+ assert len(prol)==7+2*nf, prol
+ # 1er paramètre de la nappe
+ assert prol[6].strip() != '' , prol
+
+ for kf in range(nf):
+ interp= prol[6+2*kf+1].strip()
+ prolgd= prol[6+2*kf+2].strip()
+ assert interp[:3] in ('NON', 'LIN', 'LOG') , prol
+ assert interp[4:] in ('NON', 'LIN', 'LOG') , prol
+ assert prolgd[0] in ('E', 'C', 'L', 'I'), prol
+ assert prolgd[1] in ('E', 'C', 'L', 'I'), prol
+
+
+ def check_VALE(self,checker) :
+ #-------------------------------
+ if not self.exists() : return
+
+ prol=self.PROL.get()
+ vale=self.VALE.get()
+ typfon= prol[0].strip()
+
+ if typfon=='CONSTANT' :
+ assert len(vale)==2, (vale,self)
+
+ elif typfon=='FONCTION' :
+ nbpt=len(vale)/2
+ assert len(vale)==2*nbpt, (vale,self)
+ if nbpt > 1 :
+ assert sdu_monotone(vale[:nbpt]) in (1,),(nbpt,vale,self)
+
+ elif typfon=='FONCT_C' :
+ nbpt=len(vale)/3
+ assert len(vale)==3*nbpt, (vale,self)
+ if nbpt > 1 :
+ # print "AJACOT fonction=",self
+ assert sdu_monotone(vale[:nbpt]) in (1,),(nbpt,vale,self)
+
+ elif typfon=='NAPPE' :
+ nbfonc=len(vale.keys())
+ for k in range(nbfonc):
+ val1=vale[k+1]
+ nbpt=len(val1)/2
+ assert len(val1)==2*nbpt, (val1,self)
+ if nbpt > 1 :
+ assert sdu_monotone(val1[:nbpt]) in (1,),(nbpt,val1,self)
+
+
+ def check_NAPPE(self,checker) :
+ #-------------------------------
+ if not self.exists() : return
+
+ prol=self.PROL.get()
+ typfon= prol[0].strip()
+ if typfon != 'NAPPE' : return
+
+ para=self.PARA.get()
+ if len(para) > 1 :
+ assert sdu_monotone(para) in (1,),(para,self)
+ vale=self.VALE.get()
+ assert len(para)==len(vale.keys()),self
+
+
+class sd_fonction(sd_titre):
+#---------------------------
+ nomj = SDNom(fin=19)
+ PROL = AsVK24()
+ NOVA = Facultatif(AsVK8())
+ VALE = Facultatif(AsObject())
+ PARA = Facultatif(AsVR())
+
+ def check_1(self,checker) :
+ nom=self.nomj()[:19]
+ if self.NOVA.exists :
+ sd2=sd_formule(nom) ; sd2.check()
+ else :
+ sd2=sd_fonction_aster(nom) ; sd2.check()
+
--- /dev/null
+#@ MODIF sd_fond_fiss SD DATE 08/01/2008 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_fond_fiss(AsBase):
+ nomj = SDNom(fin=8)
+ LEVREINF___MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVREINF .MAIL'), ))
+ NORMALE = Facultatif(AsVR(lonmax=3, ))
+ FOND_______TYPE = AsVK8(SDNom(nomj='.FOND .TYPE'), lonmax=1, )
+ FOND_______NOEU = AsVK8(SDNom(nomj='.FOND .NOEU'), )
+ FONDSUP____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_SUP .NOEU'), ))
+ FONDINF____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_INF .NOEU'), ))
+ DTAN_EXTREMITE = Facultatif(AsVR(lonmax=3, ))
+ INFNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.INFNORM .NOEU'), ))
+ DTAN_ORIGINE = Facultatif(AsVR(lonmax=3, ))
+ SUPNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.SUPNORM .NOEU'), ))
+ LEVRESUP___MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVRESUP .MAIL'), ))
+
+
--- /dev/null
+#@ MODIF sd_gfibre SD DATE 10/07/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_gfibre(sd_titre):
+#-------------------------------------
+ nomj = SDNom(fin=8)
+ POINTEUR = AsVI()
+ CARFI = AsVR()
+ NOMS_GROUPES = AsPn(ltyp=8)
+ NB_FIBRE_GROUPE = AsVI()
+
+
+ def check_dimension(self,checker) :
+ nbgf=self.NOMS_GROUPES.nommax
+ assert self.NB_FIBRE_GROUPE.lonmax == nbgf
+ assert self.POINTEUR.lonmax == nbgf
+
+
+ def check_CARFI(self,checker) :
+ nbgf=self.NOMS_GROUPES.nommax
+ pointeur=self.POINTEUR.get()
+ nb_fibre=self.NB_FIBRE_GROUPE.get()
+ nbfib_tot=0
+ for igf in range(nbgf) :
+ assert pointeur[igf]==3*nbfib_tot +1 , (igf, nbfib_tot, pointeur[igf])
+ nbfib=nb_fibre[igf]
+ nbfib_tot=nbfib_tot+nbfib
+ assert self.CARFI.lonmax == 3*nbfib_tot , (nbfib_tot,self.CARFI.lonmax)
+
--- /dev/null
+#@ MODIF sd_interf_dyna_clas SD DATE 19/06/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_maillage import sd_maillage
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_util import *
+
+
+class sd_interf_dyna_clas(AsBase):
+#---------------------------------------
+ nomj = SDNom(fin=8)
+ IDC_NOMS = AsObject(genr='N', xous='S', type='K', ltyp=8, )
+ IDC_DDAC = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ IDC_DY_FREQ = AsVR(lonmax=1, )
+ IDC_LINO = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ IDC_TYPE = AsVK8()
+ IDC_DESC = AsVI(lonmax=5, )
+ IDC_DEFO = AsVI()
+ IDC_REFE = AsVK24(lonmax=3, )
+
+
+ def check_coherence_longueurs(self,checker):
+ noms=self.IDC_NOMS.get()
+ type=self.IDC_TYPE.get()
+ lino=self.IDC_LINO.get()
+ ddac=self.IDC_DDAC.get()
+ nb_intf=len(noms)
+ assert nb_intf > 0 , noms
+ assert len(type) == nb_intf, (nb_intf,type)
+ assert len(lino.keys()) == nb_intf, (nb_intf,lino)
+ assert len(ddac.keys()) == nb_intf, (nb_intf,ddac)
+
+
+ def check_REFE(self,checker):
+ refe=self.IDC_REFE.get()
+ sd2=sd_maillage(refe[0]) ; sd2.check(checker)
+ sd2=sd_nume_ddl(refe[1]) ; sd2.check(checker)
+ assert refe[2].strip() == '' , refe
+
+
+ def check_DESC(self,checker):
+ desc=self.IDC_DESC.get()
+ assert desc[0] == 1 , desc
+ assert desc[1] >2 and desc[1] <10 , desc
+ assert desc[2] >60 and desc[2] <300 , desc
+ assert desc[3] >0 and desc[3] <500 , desc
+ assert desc[4] >0 , desc
+ nomgd=sdu_nom_gd(desc[3]).strip()
+ assert nomgd == 'DEPL_R', (nomgd, desc)
+
+
+ def check_NOMS(self,checker):
+ # il n'y a rien à vérifier : un pointeur de noms contient
+ # toujours des noms "non blancs" et "tous différents"
+ pass
+
+
+ def check_TYPE(self,checker):
+ type=self.IDC_TYPE.get()
+ for t1 in type :
+ assert t1.strip() in ('CRAIGB', 'MNEAL', 'CB_HARMO', 'AUCUN'), type
+
+
+ def check_LINO_DDAC(self,checker):
+ lino=self.IDC_LINO.get()
+ ddac=self.IDC_DDAC.get()
+ desc=self.IDC_DESC.get()
+ nbec=desc[1]
+ nb_intf=len(lino.keys())
+
+ for kintf in range(nb_intf) :
+ llino=lino.values()[kintf]
+ lddac=ddac.values()[kintf]
+ nbno=len(llino)
+ assert len(lddac)==nbno*nbec , (lino,ddac)
+ for nuno in llino :
+ assert nuno > 0 , lino
+
+
+ def check_FREQ(self,checker):
+ freq=self.IDC_DY_FREQ.get()
+ assert freq[0] >=0 , freq
+
+
+ def check_DEFO(self,checker):
+ defo=self.IDC_DEFO.get()
+ desc=self.IDC_DESC.get()
+ nbec=desc[1]
+ nbnot=len(defo)/(nbec+2)
+ assert len(defo)==nbnot*(nbec+2), defo
+ for k in range(nbnot) :
+ assert defo[k] > 0 , defo
+
+ assert sdu_monotone(defo[nbnot:2*nbnot]) in (1,0) , (nbnot,nbec,defo)
+
--- /dev/null
+#@ MODIF sd_l_charges SD DATE 17/07/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_l_charges(AsBase):
+ nomj = SDNom(fin=19)
+ INFC = AsVI()
+ LCHA = AsVK24()
+ FCHA = AsVK24()
+ FCSS = Facultatif(AsVK24())
+
+
--- /dev/null
+#@ MODIF sd_l_table SD DATE 09/05/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_table import sd_table
+from SD.sd_util import *
+
+
+class sd_l_table(AsBase):
+#------------------------
+ nomj = SDNom(fin=19)
+
+ # la SD l_table (liste de tables) est une SD destinée à stocker un ensemble de tables
+ # les tables stockées dans la l_table sont identifiées par un "petit nom" (K16)
+
+ LTNT = AsVK16()
+ LTNS = AsVK24()
+
+
+ # existence possible de la SD :
+ def exists(self):
+ return self.LTNT.exists or self.LTNS.exists
+
+ # indirection vers les tables :
+ def check_l_table_i_LTNS(self, checker):
+ if not self.exists() : return
+ ltnt = self.LTNT.get()
+ ltns = self.LTNS.get()
+ nbtable=self.LTNT.lonuti
+ sdu_compare(self.LTNT,checker,nbtable,'>',0,'NBUTI(LTNT)>0')
+ sdu_compare(self.LTNS,checker,self.LTNS.lonuti,'==',nbtable,'NBUTI(LTNS)==NBUTI(LTNT)')
+ for k in range(nbtable) :
+ petinom=ltnt[k].strip()
+ nomtabl=ltns[k].strip()
+ sdu_compare(self.LTNT,checker,petinom,'!=','',"LTNT[k]!=''")
+ sdu_compare(self.LTNS,checker,nomtabl,'!=','',"LTNS[k]!=''")
+ sd2 = sd_table(nomtabl) ; sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_ligrel SD DATE 16/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_ligrel(AsBase):
+ nomj = SDNom(fin=19)
+
+ LGRF = AsVK8(lonmax=2, docu=Parmi('ACOU', 'MECA', 'THER'), )
+ NBNO = AsVI(lonmax=1,)
+ PRNM = AsVI()
+
+ # AU_MOINS_UN : LIEL, SSSA
+ # LIEL : il existe des éléments finis
+ # SSSA : il existe des sous-structures statiques
+ LIEL = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+ SSSA = Facultatif(AsVI())
+ # ENSEMBLE : LIEL, REPE
+ REPE = Facultatif(AsVI())
+
+ # si mailles tardives :
+ NEMA = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+ # si noeuds tardifs :
+ PRNS = Facultatif(AsVI())
+ LGNS = Facultatif(AsVI())
+
+
+ def exists(self):
+ # retourne True si la SD semble exister.
+ return self.LGRF.exists
+
+ def check_LGRF(self,checker):
+ if not self.exists() : return
+ lgrf=self.LGRF.get_stripped()
+ from SD.sd_maillage import sd_maillage
+ sd2=sd_maillage(lgrf[0]); sd2.check(checker)
+ if lgrf[1] != '' :
+ from SD.sd_partition import sd_partition
+ sd2=sd_partition(lgrf[1]); sd2.check(checker)
+
+
+ def check_presence(self,checker):
+ if not self.exists() : return
+ exi_liel=self.LIEL.exists
+ exi_sssa=self.SSSA.exists
+ exi_repe=self.REPE.exists
+ exi_nema=self.NEMA.exists
+ exi_prns=self.PRNS.exists
+ exi_lgns=self.LGNS.exists
+
+ # AU_MOINS_UN : .LIEL, .SSSA
+ assert exi_liel or exi_sssa
+
+ # SI .LIEL AU_MOINS_UN : .REPE, .NEMA
+ if exi_liel :
+ assert exi_repe or exi_nema
+
+ # .REPE => .LIEL
+ if exi_repe : assert exi_liel
+
+ # .NEMA => .LIEL
+ if exi_nema : assert exi_liel
+
+ # noeuds tardifs => .PRNS .LGNS et .NEMA
+ nb_no_tard= self.NBNO.get()[0]
+ if nb_no_tard > 0 :
+ assert exi_prns
+ assert exi_lgns
+ assert exi_nema
+ assert self.LGNS.lonmax >= nb_no_tard # .LGNS est surdimensionné
+ nbec= self.PRNS.lonmax / nb_no_tard
+ assert self.PRNS.lonmax == nb_no_tard * nbec , (nbec, nb_no_tard)
+ assert nbec >= 1 and nbec < 10 , nbec
+
+
--- /dev/null
+#@ MODIF sd_list_inst SD DATE 20/07/2009 AUTEUR GENIAUT S.GENIAUT
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+
+class sd_list_inst(AsBase):
+ nomj = SDNom(fin=8)
+
+# 1) objets relatifs a la liste
+
+ LIST_INFOR = AsVR(SDNom(nomj='.LIST.INFOR'),lonmax=7,)
+ LIST_DITR = AsVR(SDNom(nomj='.LIST.DITR'))
+
+ ECHE_EVENR = AsVR(SDNom(nomj='.ECHE.EVENR'))
+ ECHE_EVENK = AsVK16(SDNom(nomj='.ECHE.EVENK'))
+ ECHE_SUBDR = AsVR(SDNom(nomj='.ECHE.SUBDR'))
+
+ ADAP_EVENR = Facultatif(AsVR(SDNom(nomj='.ADAP.EVENR')))
+ ADAP_EVENK = Facultatif(AsVK8(SDNom(nomj='.ADAP.EVENK')))
+ ADAP_TPLUR = Facultatif(AsVR(SDNom(nomj='.ADAP.TPLUR')))
+ ADAP_TPLUK =Facultatif( AsVK16(SDNom(nomj='.ADAP.TPLUK')))
--- /dev/null
+#@ MODIF sd_liste_rela SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_liste_rela(AsBase):
+ nomj = SDNom(fin=19)
+ RLLA = AsVK8(SDNom(debut=19), )
+ RLBE = AsVR(SDNom(debut=19), )
+ RLSU = AsVI(SDNom(debut=19), )
+ RLTC = AsVK8(SDNom(debut=19), lonmax=1, )
+ RLNO = AsVK8(SDNom(debut=19), )
+ RLCO = AsVR(SDNom(debut=19), )
+ RLNT = AsVI(SDNom(debut=19), )
+ RLPO = AsVI(SDNom(debut=19), )
+ RLNR = AsVI(SDNom(debut=19), lonmax=1, )
+ RLTV = AsVK8(SDNom(debut=19), lonmax=1, )
+ RLDD = AsVK8(SDNom(debut=19), )
+
+
--- /dev/null
+#@ MODIF sd_listis SD DATE 22/10/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+class sd_listis(sd_titre):
+#-------------------------------------
+ nomj = SDNom(fin=19)
+ LPAS = AsVI()
+ BINT = AsVI()
+ NBPA = AsVI()
+ VALE = AsVI()
+
+
+ def check_1(self,checker):
+ nbpa=self.NBPA.get()
+ bint=self.BINT.get()
+ lpas=self.LPAS.get()
+ vale=self.VALE.get()
+
+ # cas général :
+ if len(vale) > 1 :
+ assert len(bint) == len(nbpa)+1
+ assert len(nbpa) == len(lpas)
+
+ n1=0
+ assert vale[0] == bint[0]
+ for k in range(len(nbpa)) :
+ npas=nbpa[k]
+ assert npas > 0
+ n1 = n1 + npas
+ assert vale[n1] == bint[k+1]
+
+ assert len(vale) == n1+1
+ assert sdu_monotone(vale) in (1,) , vale
+
+
+ # cas particulier :
+ if len(vale) == 1 :
+ assert len(bint) == 1
+ assert len(nbpa) == 1
+ assert len(lpas) == 1
+ assert vale[0] == bint[0]
+ assert nbpa[0] == 0, nbpa
+ assert lpas[0] == 0, lpas
+
+
--- /dev/null
+#@ MODIF sd_listr8 SD DATE 10/07/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_listr8(sd_titre):
+#----------------------------------
+ nomj = SDNom(fin=19)
+ LPAS = AsVR()
+ BINT = AsVR()
+ NBPA = AsVI()
+ VALE = AsVR()
+
+
+ def proche(self,a,b):
+ # retourne 1 si a est proche de b
+ # retourne -1 si a est loin de b
+ # retourne 0 si a = 0. (ou b = 0.)
+ if a != 0. and b != 0. :
+ erreur= abs(a-b)/(abs(a)+abs(b))
+ if erreur < 1.e-12 :
+ return 1
+ else :
+ return -1
+ else :
+ return 0
+
+
+ def check_1(self,checker):
+ nbpa=self.NBPA.get()
+ bint=self.BINT.get()
+ lpas=self.LPAS.get()
+ vale=self.VALE.get()
+
+ # cas général :
+ if len(vale) > 1 :
+ assert len(bint) == len(nbpa)+1
+ assert len(nbpa) == len(lpas)
+
+ n1=0
+ assert self.proche(vale[0], bint[0]) in (1,0)
+ for k in range(len(nbpa)) :
+ npas=nbpa[k]
+ assert npas > 0
+ n1 = n1 + npas
+ assert self.proche(vale[n1],bint[k+1]) in (1,0) , (k+1,vale[n1], bint[k+1],)
+
+ assert len(vale) == n1+1
+
+ # cas particulier :
+ if len(vale) == 1 :
+ assert len(bint) == 1
+ assert len(nbpa) == 1
+ assert len(lpas) == 1
+ assert vale[0] == bint[0]
+
+
--- /dev/null
+#@ MODIF sd_macr_elem_dyna SD DATE 22/09/2008 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_util import *
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+class sd_macr_elem_dyna_m(AsBase):
+#----------------------------------
+ nomj = SDNom(fin=18)
+ DESC = AsVI (SDNom(nomj='_DESC'),lonmax=3)
+ REFE = AsVK24 (SDNom(nomj='_REFE'),lonmax=2)
+ VALE = AsObject (SDNom(nomj='_VALE'),type=Parmi('C','R',),)
+
+ def check_macr_elem_dyna_m_1(self,checker):
+ vale=self.VALE.get()
+ if not vale : return # si Facultatif()
+
+ sdu_tous_compris(self.DESC,checker,vmin=1)
+ nbdef=self.DESC.get()[1]
+ sdu_compare(self.VALE,checker,len(vale),'==',(nbdef*(nbdef+1))/2,'LONMAX(VALE)')
+
+
+class sd_macr_elem_dyna(AsBase):
+#-------------------------------
+ nomj = SDNom(fin=8)
+
+ # description géométrique et topolique :
+ DESM = AsVI(lonmax=10)
+ REFM = AsVK8()
+ LINO = AsVI()
+ CONX = Facultatif(AsVI())
+
+ # rigidité, masse, amortissement condensés :
+ nume = sd_nume_ddl_gd(SDNom(nomj=''))
+
+ MAEL_RAID = sd_macr_elem_dyna_m()
+ MAEL_MASS = sd_macr_elem_dyna_m()
+ MAEL_AMOR = Facultatif(sd_macr_elem_dyna_m())
+
+ MAEL_INER_VALE = AsVR()
+ MAEL_INER_REFE = AsVK24(lonmax=2, )
+
+ MAEL_DESC = AsVI(lonmax=3, )
+ MAEL_REFE = AsVK24(lonmax=2, )
+
+
+
+ def check_macr_elem_dyna_1(self,checker):
+ nbdef=self.MAEL_MASS.DESC.get()[1]
+ sdu_compare(self.MAEL_INER_VALE, checker,len(self.MAEL_INER_VALE.get()),'==',3*nbdef,'LONMAX(MAEL_INER_VALE)')
+
--- /dev/null
+#@ MODIF sd_macr_elem_stat SD DATE 27/11/2007 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_matr_asse_gd import sd_matr_asse_gd
+from SD.sd_stoc_lciel import sd_stoc_lciel
+from SD.sd_proj_mesu import sd_proj_mesu
+
+
+class sd_macr_elem_stat(AsBase):
+#----------------------------------------------
+ nomj = SDNom(fin=8)
+
+ # description géométrique et topolique :
+ DESM = AsVI(lonmax=10)
+ REFM = AsVK8()
+ LINO = AsVI()
+ VARM = AsVR(lonmax=2)
+ CONX = Facultatif(AsVI()) # l'objet devient obligatoire dès l'étape de condensation de la rigidité
+
+ # rigidité condensée :
+ rigimeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.RIGIMECA', fin=19)))
+ MAEL_RAID_VALE = Facultatif(AsVR())
+ PHI_IE = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
+
+ # masse condensée :
+ massmeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.MASSMECA', fin=19)))
+ MAEL_MASS_VALE = Facultatif(AsVR())
+
+ # amortissement condensé :
+ MAEL_AMOR_VALE = Facultatif(AsVR())
+
+ # chargements condensés :
+ LICA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
+ LICH = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8))
+
+ # si utilisation de PROJ_MESU_MODAL :
+ PROJM = Facultatif(sd_proj_mesu())
+
+
+ def check_longueurs(self, checker):
+ #------------------------------------
+ # vérifs existence, longueurs, ...
+
+ desm=self.DESM.get()
+ refm=self.REFM.get()
+ assert desm[0]==0, desm
+ nbnoe, nbnoi, nddle, nddli, nbchar, nbcas, nlage, nlagl, nlagi =desm[1:10]
+ assert nbnoe > 0 ,desm
+ assert nbchar >= 0 ,desm
+
+ # si on n'a pas encore condensé la rigidité, certaines valeurs ne sont pas encore calculées :
+ if self.MAEL_RAID_VALE.exists :
+ assert nbnoi > 0 ,desm
+ assert nddle > 1 ,desm
+ assert nddli > 0 ,desm
+ assert nbcas >= 0 ,desm
+ assert nlage >= 0 ,desm
+ assert nlagl >= 0 ,desm
+ assert nlagi >= 0 ,desm
+ assert self.CONX.lonmax == 3*(nbnoe+nlage+nlagl) ,(desm,self.CONX.get())
+ assert refm[5] == 'OUI_RIGI'
+
+ assert self.REFM.lonmax == 9+nbchar ,(desm,self.REFM.get())
+ assert self.LINO.lonmax == nbnoe ,(desm,self.LINO.get())
+
+ # rigidité condensée :
+ if self.MAEL_RAID_VALE.exists :
+ assert self.MAEL_RAID_VALE.lonmax == (nddle*(nddle+1))/2
+
+ assert self.PHI_IE.exists
+ phi_ie=self.PHI_IE.get() # on ne sait pas faire autrement que ramener l'objet entier ...
+ nlblph=len(phi_ie[1])/nddli # nombre de lignes de phi_ie par bloc
+ assert self.PHI_IE.nmaxoc == (nddle-1)/nlblph +1 , (nddle, self.PHI_IE.nmaxoc)
+ for ke in phi_ie.keys() :
+ assert len(phi_ie[ke]) == nddli*nlblph ,(nddli,nlblph,nddle,len(phi_ie[ke]),ke)
+
+ # masse condensée :
+ if self.MAEL_MASS_VALE.exists :
+ assert self.MAEL_MASS_VALE.lonmax == (nddle*(nddle+1))/2
+ assert refm[6] == 'OUI_MASS'
+
+ # amortissement condensé : (JP : je ne sais pas si ca peut exister ?)
+ if self.MAEL_AMOR_VALE.exists :
+ assert self.MAEL_AMOR_VALE.lonmax == (nddle*(nddle+1))/2
+ assert refm[7] == 'OUI_AMOR'
+
+ # chargements condensés :
+ if nbcas > 0 :
+ assert self.LICA.exists
+ assert self.LICA.nmaxoc >= nbcas
+ lica=self.LICA.get()
+ for k in lica.keys():
+ assert len(lica[k]) == 2*(nddli + nddle)
+
+ assert self.LICH.exists
+ assert self.LICH.nmaxoc == self.LICA.nmaxoc
+ assert self.LICH.nutioc == self.LICA.nutioc
+ lich=self.LICH.get()
+ for k in lich.keys():
+ assert len(lich[k]) >= nbchar + 1
+
--- /dev/null
+#@ MODIF sd_maillage SD DATE 06/05/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_carte import sd_carte
+from SD.sd_l_table import sd_l_table
+
+
+class sd_voisinage(AsBase):
+#-------------------------------
+ nomj = SDNom(fin=12)
+ PTVOIS = AsVI()
+ ELVOIS = AsVI()
+
+
+class sd_maillage(sd_titre):
+#-------------------------------
+ nomj = SDNom(fin=8)
+
+ DIME = AsVI(lonmax=6, )
+
+ # un sd_maillage a toujours des noeuds :
+ NOMNOE = AsPn(ltyp=8)
+ COORDO = sd_cham_no()
+
+ # normalement, un sd_maillage a toujours une "sd_l_table" contenant des caractéristiques géométriques :
+ lt = sd_l_table(SDNom(nomj=''))
+
+ # si le sd_maillage a des groupes :
+ GROUPENO = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+ GROUPEMA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+
+ # si le sd_maillage a des mailles :
+ CONNEX = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+ TYPMAIL = Facultatif(AsVI())
+ NOMMAI = Facultatif(AsPn(ltyp=8))
+
+ # si le sd_maillage a des super-mailles :
+ NOMACR = Facultatif(AsVK8())
+ SUPMAIL = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+ PARA_R = Facultatif(AsVR())
+ TYPL = Facultatif(AsVI())
+
+ # si le sd_maillage est linéique (tube_GV) :
+ abs_curv = Facultatif(sd_carte(SDNom(nomj='.ABS_CURV')))
+
+ # Lorsque le sd_maillage sert de support a un sd_modele contenant des volumes finis :
+ VGE = Facultatif(sd_voisinage())
+
+ ADAPTATION = Facultatif(AsVI(lonmax=1, ))
+ FORM = Facultatif(AsVK32(SDNom(debut=19), lonmax=2, ))
+
+
+ def u_dime(self):
+ dime=self.DIME.get()
+ nb_no =dime[0]
+ nb_nl =dime[1]
+ nb_ma =dime[2]
+ nb_sm =dime[3]
+ nb_sm_mx =dime[4]
+ dim_coor =dime[5]
+ return nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor
+
+# remarque : la sd_maillage pouvant etre "volumineuse", on s'interdit (pour des raisons de temps CPU)
+# de vérifier le contenu des gros objets.
+
+ def check_DIME(self,checker):
+ nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+ assert nb_sm <= nb_sm_mx , (nb_sm, nb_sm_mx)
+ if nb_nl > 0 : assert nb_sm > 0
+ assert nb_no > 0 , nb_no
+ assert dim_coor in (2,3), dim_coor
+
+
+ def check_NOEUDS(self,checker):
+ nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+ assert self.NOMNOE.nomuti == nb_no + nb_nl , (nb_no, nb_nl)
+ assert self.COORDO.VALE.lonmax == 3*nb_no , nb_no
+
+
+ def check_MAILLES(self,checker):
+ nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+ if nb_ma == 0 : return
+ assert self.NOMMAI.nommax == nb_ma , nb_ma
+ assert self.TYPMAIL.lonmax == nb_ma , nb_ma
+ assert self.CONNEX.nmaxoc == nb_ma , nb_ma
+
+
+ def check_SSS(self,checker):
+ nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+ if nb_sm == 0 : return
+ assert self.NOMACR.lonmax == nb_sm , nb_sm
+ assert self.PARA_R.lonmax == 14*nb_sm , nb_sm
+ assert self.SUPMAIL.nmaxoc == nb_sm , nb_sm
+
+ def check_TYPL(self,checker):
+ nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+ if nb_nl == 0 : return
+ assert self.TYPL.lonmax == nb_nl , nb_nl
+ typl=self.TYPL.get()
+ for k in typl :
+ assert k in (-1, -2) , typl
+
--- /dev/null
+#@ MODIF sd_mater SD DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_fonction import sd_fonction
+
+
+
+class sd_mater_XDEP(AsBase):
+#---------------------------
+ # on dirait une fonction, mais c'est plutot la concaténation de plusieurs fonctions
+ nomj = SDNom(fin=19)
+ PROL = AsVK24()
+ VALE = AsVR()
+
+
+class sd_compor1(AsBase):
+#-----------------------
+ nomj = SDNom(fin=19)
+ VALC = AsVC(SDNom(), )
+ VALK = AsVK8(SDNom(), )
+ VALR = AsVR(SDNom(), )
+
+
+ # parfois, THER_NL crée une sd_fonction pour BETA
+ def check_compor1_i_VALK(self, checker):
+ nom= self.nomj().strip()
+ if nom[8:16]=='.THER_NL' :
+ valk=list(self.VALK.get_stripped())
+ if valk :
+ nbk2=self.VALK.lonuti
+ nbr=self.VALR.lonuti
+ nbc=self.VALC.lonuti
+ nbk=nbk2-nbr-nbc
+ k2=valk.index('BETA')
+ k=k2-nbr-nbc
+ nomfon=valk[nbr+nbc+nbk/2+k]
+ sd2=sd_fonction(nomfon) ; sd2.check(checker)
+ if nom[8:16]=='.GLRC_DA' :
+ valk=list(self.VALK.get_stripped())
+ if valk :
+ nbk2=self.VALK.lonuti
+ nbr=self.VALR.lonuti
+ nbc=self.VALC.lonuti
+ nbk=nbk2-nbr-nbc
+ for fon in ('FMEX1' ,'FMEX2' ,'FMEY1' ,'FMEY2' ,
+ 'DFMEX1' ,'DFMEX2' ,'DFMEY1' ,'DFMEY2',
+ 'DDFMEX1','DDFMEX2','DDFMEY1','DDFMEY2'):
+ k2=valk.index(fon)
+ k=k2-nbr-nbc
+ nomfon=valk[nbr+nbc+nbk/2+k]
+ sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
+
+class sd_mater(AsBase):
+#----------------------
+ nomj = SDNom(fin=8)
+ NOMRC = AsVK16(SDNom(nomj='.MATERIAU.NOMRC'), )
+ rdep = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&RDEP'))) # à documenter
+ mzp = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&MZP' ))) # à documenter
+
+ # existence possible de la SD :
+ def exists(self):
+ return self.NOMRC.exists
+
+ # indirection vers les sd_compor1 de NOMRC :
+ def check_mater_i_NOMRC(self, checker):
+ lnom = self.NOMRC.get()
+ if not lnom: return
+ for nom in lnom:
+ if not nom.strip(): continue
+ nomc1=self.nomj()[:8]+'.'+nom
+ comp1 = sd_compor1(nomc1)
+
+ # parfois, comp1 est vide : ssls115g/DEFI_COQU_MULT
+ if comp1.VALK.get() : comp1.check(checker)
+
--- /dev/null
+#@ MODIF sd_matr_asse SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_matr_asse_gd import sd_matr_asse_gd
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_matr_asse_com import sd_matr_asse_com
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_matr_asse_gene et sd_matr_asse_gd ne servant que pour "check"
+#---------------------------------------------------------------------------------
+
+
+class sd_matr_asse(sd_matr_asse_com):
+#--------------------------------------------
+ nomj = SDNom(fin=19)
+
+
+ # pour orienter vers sd_matr_asse_gene ou sd_matr_asse_gd :
+ def check_matr_asse_1(self, checker):
+ # on est obligé de se protéger dans le cas des Facultatif(sd_matr_asse) :
+ if not self.REFA.get() : return
+ gene=self.REFA.get()[9].strip()=='GENE'
+ if gene :
+ sd2=sd_matr_asse_gene(self.nomj)
+ else :
+ sd2=sd_matr_asse_gd(self.nomj)
+ sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_matr_asse_com SD DATE 25/03/2008 AUTEUR REZETTE C.REZETTE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_maillage import sd_maillage
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_matr_cine import sd_matr_cine
+
+
+class sd_matr_asse_com(sd_titre):
+#-----------------------------
+ nomj = SDNom(fin=19)
+
+ REFA = AsVK24(lonmax=11,)
+ VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'))
+ UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R')))
+ VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
+ WALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
+ CONL = Facultatif(OJBVect(type=Parmi('C', 'R')))
+ DIGS = Facultatif(OJBVect(type=Parmi('C', 'R'))) # seulement si solveurs LDLT et MULT_FRONT
+ LIME = Facultatif(AsVK24())
+ cine = Facultatif(sd_matr_cine(SDNom(nomj='')))
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.REFA.exists
+
+ def check_REFA(self, checker):
+ if not self.exists() : return
+ refa=self.REFA.get_stripped()
+ assert refa[9] in ('NOEU','GENE') , refa
+ lgene = refa[9] == 'GENE'
+ # pour les matrices generalisees, on ne sait pas ce qui est stocké dans refa[0]='' :
+ if not lgene :
+ sd2=sd_maillage(refa[0]) ; sd2.check(checker)
+ sd2=sd_nume_ddl(refa[1]) ; sd2.check(checker)
+ assert refa[2] in ('ELIMF','ELIML','') , refa
+ assert refa[4] in ('FETI','') , refa
+ # pour les matrices generalisees, refa[7] n'est pas toujours rempli :
+ if not lgene :
+ # glute à résorber : j'ajoute '' à la liste permise pour le test yyyy108e :
+ assert refa[7] in ('ASSE','DECT','DECP','') , refa
+ assert refa[8] in ('MS','MR') , refa
+ if refa[8]=='MS' :
+ assert self.VALM.nmaxoc == 1 , (refa,self.VALM.nmaxoc)
+ elif refa[8]=='MR' :
+ assert self.VALM.nmaxoc == 2 , (refa,self.VALM.nmaxoc)
+ assert refa[10] in ('MPI_COMPLET','MPI_INCOMPLET') , refa
+
+
--- /dev/null
+#@ MODIF sd_matr_asse_gd SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_matr_asse_com import sd_matr_asse_com
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+class sd_matr_asse_gd(sd_matr_asse_com):
+#--------------------------------------------
+ nomj = SDNom(fin=19)
+
+
+ # indirection vers sd_nume_ddl_gd à faire car FACT_LDLT modifie le sd_nume_ddl_gd de la sd_matr_asse :
+ def check_matr_asse_gd_i_REFA(self, checker):
+ # on est obligé de se protéger dans le cas des Facultatif(sd_matr_asse) :
+ if not self.REFA.get() : return
+ nom=self.REFA.get()[1]
+ sd2=sd_nume_ddl_gd(nom) ; sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_matr_asse_gene SD DATE 09/05/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_matr_asse_com import sd_matr_asse_com
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+
+
+class sd_matr_asse_gene(sd_matr_asse_com):
+#-----------------------------------------
+ nomj = SDNom(fin=19)
+
+ DESC = Facultatif(AsVI(lonmax=3,)) # PB_JACOT : n'existe pas toujours : exemple : fdlv105a
+
+ def exists(self):
+ return self.REFA.exists
+
+
+ # indirection vers sd_nume_ddl à faire car FACT_LDLT modifie le sd_nume_ddl_gene de la sd_matr_asse :
+ def check_matr_asse_gene_i_REFA(self, checker):
+ if not self.exists : return
+ nom=self.REFA.get()[1]
+ sd2=sd_nume_ddl_gene(nom) ; sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_matr_cine SD DATE 22/09/2008 AUTEUR DESOZA T.DESOZA
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+
+class sd_matr_cine(AsBase):
+#-----------------------
+ nomj = SDNom(fin=19)
+
+ CCID = AsVI()
+ CCII = Facultatif(AsVI())
+ CCLL = Facultatif(AsVI())
+ CCVA = Facultatif(AsObject(genr='V', xous='S', type=Parmi('R','C')))
+
+
--- /dev/null
+#@ MODIF sd_matr_elem SD DATE 08/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_resuelem import sd_resuelem
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_modele import sd_modele
+from SD.sd_cham_mater import sd_cham_mater
+from SD.sd_cara_elem import sd_cara_elem
+
+
+class sd_matr_elem(AsBase):
+ nomj = SDNom(fin=19)
+ RERR = AsVK24(lonmax=5, )
+ RELR = Facultatif(AsVK24())
+ RECC = Facultatif(AsVK8())
+ TITR = AsVK80(SDNom(debut=19), optional=True)
+
+ # indirection par RELR :
+ def check_matr_elem_i_RELR(self, checker):
+ if not self.RELR.exists : return
+ lnom = self.RELR.get_stripped()
+ for nom in lnom:
+ if nom != '' :
+ # le nom est celui d'un resuelem ou parfois d'un cham_no (VECT_ASSE):
+ sd2 = sd_resuelem(nom)
+ if sd2.RESL.exists :
+ sd2.check(checker)
+ else :
+ sd2 = sd_cham_no(nom)
+ sd2.check(checker)
+
+
+ def check_1(self, checker):
+ refe = self.RERR.get_stripped()
+ assert refe[2] in ('OUI_SOUS_STRUC', 'NON_SOUS_STRUC'), refe
+
+ # existence de RELR :
+ if refe[2] == 'NON_SOUS_STRUC':
+ assert self.RELR.exists
+
+ assert refe[1] != '', refe
+
+ sd2=sd_modele(refe[0]) ; sd2.check(checker)
+
+ if refe[3] != '' :
+ sd2=sd_cham_mater(refe[3]) ; sd2.check(checker)
+
+ if refe[4] != '' :
+ sd2=sd_cara_elem(refe[4]) ; sd2.check(checker)
+
+
+
--- /dev/null
+#@ MODIF sd_melasflu SD DATE 21/04/2008 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_l_table import sd_l_table
+from SD.sd_table import sd_table
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_type_flui_stru import sd_type_flui_stru
+from SD.sd_resultat_dyn import sd_resultat_dyn
+from SD.sd_util import *
+
+
+class sd_melasflu(AsBase):
+#-------------------------------
+ nomj = SDNom(fin=8)
+
+ MASG = AsVR(SDNom(debut=19), )
+ VITE = AsVR(SDNom(debut=19), )
+ REMF = AsVK8(SDNom(debut=19), lonmax=2, )
+ FREQ = AsVR(SDNom(debut=19), )
+ NUMO = AsVI(SDNom(debut=19))
+ FACT = AsVR(SDNom(debut=19), )
+ DESC = AsVK16(SDNom(debut=19), lonmax=1, )
+
+ # si FAISCEAU_TRANS + couplage fluide-structure + BASE_MODALE/AMOR_REDUIT_CONN :
+ VCN = Facultatif(AsVR())
+ VEN = Facultatif(AsVR())
+ RAP = Facultatif(AsVR())
+
+ sd_table = sd_table(SDNom(nomj=''))
+ sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si FAISCEAU_AXIAL
+
+
+ # indirections via .REMF :
+ #----------------------------------
+ def check_melasflu_i_REMF(self, checker):
+ remf=self.REMF.get_stripped()
+ sd2 = sd_type_flui_stru(remf[0]) ; sd2.check(checker)
+ sd2 = sd_resultat_dyn(remf[1]) ; sd2.check(checker)
+
+
+ # Vérifications supplémentaires :
+ #----------------------------------
+ def check_veri1(self, checker):
+ remf=self.REMF.get()
+ desc=self.DESC.get_stripped()
+
+ # calcul de itypfl (type d'interaction fluide / structure) :
+ typfl = sd_type_flui_stru(remf[0])
+ itypfl=typfl.FSIC.get()[0] # 1 -> FAISCEAU_TRANS
+ # 3 -> FAISCEAU_AXIAL
+ couplage=typfl.FSIC.get()[1] # 1 -> prise en compte du couplage
+ assert itypfl > 0 , remf
+
+ # calcul de nbmode (nombre de modes) :
+ nbmode=self.NUMO.lonmax
+ assert nbmode > 0
+
+ # calcul de nbvite (nombre de vitesses) :
+ nbvite=self.VITE.lonmax
+ assert nbvite > 0
+
+ # vérification de l'objet .DESC :
+ #--------------------------------
+ assert len(desc)==1 , desc
+ assert desc[0] == 'DEPL' , desc
+
+ # vérification de l'objet .NUMO :
+ #--------------------------------
+ for x in self.NUMO.get() :
+ assert x >= 1 , numo
+
+ # vérification de l'objet .FACT :
+ #--------------------------------
+ if itypfl==3 : # faisceau axial
+ assert self.FACT.lonmax == 3*nbmode*nbvite
+ else :
+ assert self.FACT.lonmax == 3*nbmode
+
+ # vérification de l'objet .MASG :
+ #--------------------------------
+ if itypfl==3 : # faisceau axial
+ assert self.MASG.lonmax == nbmode*nbvite
+ else :
+ assert self.MASG.lonmax == nbmode
+
+ # vérification de l'objet .FREQ :
+ #--------------------------------
+ assert self.FREQ.lonmax == 2*nbmode*nbvite
+
+ # vérification existence .VCN et .VEN:
+ #-------------------------------------
+ if self.VCN.exists : assert self.VEN.exists
+ if self.VEN.exists : assert self.VCN.exists
+ if self.VEN.exists : assert itypfl == 1 and couplage == 1
+ if self.RAP.exists : assert (self.VEN.exists and self.VCN.exists)
+
+ # vérification de l'objet .VCN :
+ #--------------------------------
+ if self.VCN.exists :
+ fsvi=typfl.FSVI.get()
+ nbzone=fsvi[1]
+ nbval=0
+ for i in range(nbzone) :
+ nbval=nbval+fsvi[2+nbzone+i]
+ assert self.VCN.lonmax == nbmode*nbval*2
+
+ # vérification de l'objet .VEN :
+ #--------------------------------
+ if self.VEN.exists :
+ assert self.VEN.lonmax == nbmode*2
+
+ # vérification de l'objet .RAP :
+ #--------------------------------
+ if self.RAP.exists :
+ fsvi=typfl.FSVI.get()
+ nbzone=fsvi[1]
+ nbval=0
+ for i in range(nbzone) :
+ nbval=nbval+fsvi[2+nbzone+i]
+ assert self.RAP.lonmax == nbmode*nbval*2
+
+ # vérification de la SD table contenant les cham_no :
+ #----------------------------------------------------
+ tcham=self.sd_table
+ assert tcham.nb_column() == 1 , tcham
+ col1=tcham.get_column_name('NOM_CHAM')
+ assert col1, "Il manque la colonne NOM_CHAM"
+
+ data=col1.data.get()
+ mask=col1.mask.get()
+ profchno=''
+ for k in range(len(mask)):
+ if not mask[k] : continue
+ ch1=sd_cham_no(data[k])
+ ch1.check(checker)
+
+ # Tous les cham_no doivent avoir le meme prof_chno :
+ profchn1=ch1.REFE.get()[1]
+ if profchno == '':
+ profchno=profchn1
+ else:
+ assert profchn1 == profchno ,(profchn1, profchno)
+
+
+ # vérification de la SD l_table :
+ #--------------------------------
+ if self.sd_l_table.LTNT.exists : assert itypfl == 3 # FAISCEAU_AXIAL
+ if itypfl == 3 : assert self.sd_l_table.LTNT.exists
+
+ if self.sd_l_table.LTNT.exists :
+ l_table = self.sd_l_table
+ l_table.check(checker)
+
+ # la l_table ne contient qu'une seule table nommée 'MATR_GENE'
+ sdu_compare(l_table.LTNT,checker,l_table.LTNT.lonuti,'==',1,"LONUTI(LTNT)==1")
+ sdu_compare(l_table.LTNT,checker,l_table.LTNT.get()[0].strip(),'==','MATR_GENE',"LTNT[0]==MATR_GENE")
+
+ # vérification de la table 'MATR_GENE' :
+ tmatgen=sd_table(l_table.LTNS.get()[0])
+ col1=tmatgen.get_column_name('NUME_VITE')
+ sdu_assert(None, checker, col1, "Manque colonne NUME_VITE")
+ col1=tmatgen.get_column_name('VITE_FLUI')
+ sdu_assert(None, checker, col1, "Manque colonne VITE_FLUI")
+
+ for x in 'MATR_RIGI', 'MATR_MASS', 'MATR_AMOR' :
+ col1=tmatgen.get_column_name(x)
+ sdu_assert(None, checker, col1, "Manque colonne : "+x)
+ data=col1.data.get()
+ mask=col1.mask.get()
+ for k in range(len(mask)):
+ if not mask[k] : continue
+ matgen=sd_matr_asse_gene(data[k])
+ matgen.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_mode_cycl SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_maillage import sd_maillage
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+#from SD.sd_base_modale import sd_base_modale
+from SD.sd_mode_meca import sd_mode_meca
+from SD.sd_util import *
+
+
+class sd_mode_cycl(AsBase):
+#--------------------------
+ nomj = SDNom(fin=8)
+ CYCL_TYPE = AsVK8(lonmax=1, )
+ CYCL_CMODE = AsVC()
+ CYCL_NBSC = AsVI(lonmax=1, )
+ CYCL_DIAM = AsVI()
+ CYCL_REFE = AsVK24(lonmax=3, )
+ CYCL_DESC = AsVI(lonmax=4, )
+ CYCL_FREQ = AsVR()
+ CYCL_NUIN = AsVI(lonmax=3, )
+
+
+ def u_dime(self) :
+ desc=self.CYCL_DESC.get()
+ nb_mod = desc[0] ; assert nb_mod > 0
+ nb_ddl = desc[1] ; assert nb_ddl > 0
+ nb_ddli = desc[2] ; assert nb_ddli >= 0
+ nb_freq = desc[3] ; assert nb_freq > 0
+ nb_diam=self.CYCL_DIAM.lonmax / 2 ; assert nb_diam > 0
+ assert self.CYCL_DIAM.lonmax == 2*nb_diam
+ return (nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam)
+
+ def check_REFE(self,checker) :
+ refe=self.CYCL_REFE.get_stripped()
+ sd2=sd_maillage(refe[0]); sd2.check
+ sd2=sd_interf_dyna_clas(refe[1]); sd2.check
+# sd2=sd_base_modale(refe[2]); sd2.check
+ sd2=sd_mode_meca(refe[2]); sd2.check
+
+ def check_NUIN(self,checker) :
+ nuin=self.CYCL_NUIN.get()
+ assert nuin[0] > 0 , nuin
+ assert nuin[1] > 0 , nuin
+ assert nuin[2] >= 0 , nuin
+
+
+ def check_NBSC(self,checker) :
+ nbsc=self.CYCL_NBSC.get()
+ assert nbsc[0] > 0 , nbsc
+
+
+ def check_TYPE(self,checker) :
+ type=self.CYCL_TYPE.get_stripped()
+ assert type[0] in ('MNEAL', 'CRAIGB', 'CB_HARMO', 'AUCUN') ,type
+
+
+ def check_CMODE(self,checker) :
+ nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+ assert self.CYCL_CMODE.lonmax== nb_diam*nb_freq*(nb_mod+nb_ddl+nb_ddli)
+
+
+ def check_DIAM(self,checker) :
+ diam=self.CYCL_DIAM.get()
+ nb_diam=len(diam)/2
+ for x in diam[:nb_diam] : assert x >= 0 , diam
+ for x in diam[nb_diam:] : assert x > 0 , diam
+ sdu_tous_differents(self.CYCL_DIAM,checker,diam[:nb_diam])
+
+
+ def check_FREQ(self,checker) :
+ nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+ freq=self.CYCL_FREQ.get()
+ assert len(freq) == nb_diam*nb_freq ,(self.CYCL_DESC.get(),len(freq))
+ for x in freq : assert x >= 0 , freq
+
+
--- /dev/null
+#@ MODIF sd_mode_meca SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+
+from SD.sd_resultat_dyn import sd_resultat_dyn
+
+
+class sd_mode_meca(sd_resultat_dyn):
+#--------------------------------------------------
+ nomj = SDNom(fin=8)
+# UTIL = Facultatif(AsVI(SDNom(debut=19))) # AJACOT_PB : .UTIL n'existe pas pour sdlx201a
+
+
--- /dev/null
+#@ MODIF sd_modele SD DATE 06/05/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_maillage import sd_maillage
+from SD.sd_prof_chno import sd_prof_chno
+from SD.sd_carte import sd_carte
+from SD.sd_xfem import sd_modele_xfem
+from SD.sd_l_table import sd_l_table
+
+
+
+class sd_modele(AsBase):
+#-----------------------------
+ nomj = SDNom(fin=8)
+
+ MODELE = sd_ligrel()
+ NOEUD = Facultatif(AsVI())
+ MAILLE = Facultatif(AsVI())
+
+ # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs caractéristiques de l'étude :
+ lt = Facultatif(sd_l_table(SDNom(nomj='')))
+
+ # Si le modèle vient de MODI_MODELE_XFEM :
+ xfem = Facultatif(sd_modele_xfem(SDNom(nomj='')))
+
+
+ def check_existence(self,checker) :
+ exi_liel=self.MODELE.LIEL.exists
+ exi_maille=self.MAILLE.exists
+ exi_noeud=self.NOEUD.exists
+
+ # si .LIEL => .MAILLE et .NOEUD
+ if exi_liel :
+ assert exi_maille
+ assert exi_noeud
+
+
+ def check_maillage(self,checker) :
+ # on est obligé de checker le maillage pour permettre la creation de la sd_voisinage
+ lgrf=self.MODELE.LGRF.get_stripped()
+ sd2 = sd_maillage(lgrf[0]); sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_modele_gene SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+#from SD.sd_base_modale import sd_base_modale
+from SD.sd_mode_meca import sd_mode_meca
+from SD.sd_macr_elem_dyna import sd_macr_elem_dyna
+from SD.sd_util import *
+
+
+
+class sd_modele_gene(AsBase):
+#-----------------------------
+ nomj = SDNom(fin=14)
+ MODG_LIPR = AsVI(SDNom(nomj='.MODG.LIPR'), )
+ MODG_LIDF = AsColl(SDNom(nomj='.MODG.LIDF'), acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='K', ltyp=8, )
+ MODG_SSTR = AsColl(SDNom(nomj='.MODG.SSTR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
+ MODG_SSOR = AsColl(SDNom(nomj='.MODG.SSOR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
+ MODG_SSNO = AsPn(SDNom(nomj='.MODG.SSNO'), ltyp=8, )
+ MODG_SSME = AsColl(SDNom(nomj='.MODG.SSME'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, )
+ MODG_DESC = AsVI(SDNom(nomj='.MODG.DESC'), lonmax=3, )
+ MODG_LIMA = AsColl(SDNom(nomj='.MODG.LIMA'), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='R', ltyp=8, )
+
+
+
+ def check_dimensions(self,checker) :
+ nb_struc=self.MODG_SSME.nmaxoc
+ nb_liaison=self.MODG_LIDF.nmaxoc
+
+ assert self.MODG_LIPR.lonmax == 9*nb_liaison
+ assert self.MODG_LIMA.nmaxoc == 3*nb_liaison
+ assert self.MODG_LIMA.nutioc == 3*nb_liaison
+
+ assert self.MODG_SSNO.nomuti == nb_struc
+ assert self.MODG_SSNO.nommax == nb_struc
+ assert self.MODG_SSOR.nmaxoc == nb_struc
+ assert self.MODG_SSOR.nutioc == nb_struc
+ assert self.MODG_SSTR.nmaxoc == nb_struc
+ assert self.MODG_SSTR.nutioc == nb_struc
+
+
+ def check_SSME(self,checker) :
+ nb_struc=self.MODG_SSME.nmaxoc
+ ssme=self.MODG_SSME.get()
+ for k in range(nb_struc) :
+ sd2=sd_macr_elem_dyna(ssme[k+1][0].strip()); sd2.check
+
+
+ def check_DESC(self,checker) :
+ desc=self.MODG_DESC.get()
+ nomgd=sdu_nom_gd(desc[2])
+ assert nomgd == 'DEPL_R', (nomgd, desc)
+ assert desc[0] > 2 and desc[0] < 15 , desc
+ assert desc[1] > 2*30 and desc[1] < 15*30 , desc
+
+
+ def check_SSOR(self,checker) :
+ nb_struc=self.MODG_SSME.nmaxoc
+ ssor=self.MODG_SSOR.get()
+ for k in range(nb_struc) :
+ assert len(ssor[k+1]) == 3 , ssor
+
+
+ def check_SSTR(self,checker) :
+ nb_struc=self.MODG_SSME.nmaxoc
+ sstr=self.MODG_SSTR.get()
+ for k in range(nb_struc) :
+ assert len(sstr[k+1]) == 3 , sstr
+
+
+ def check_LIDF(self,checker) :
+ lidf=self.MODG_LIDF.get()
+ nb_liaison=self.MODG_LIDF.nmaxoc
+ for k in range(nb_liaison) :
+ assert len(lidf[k+1]) == 5 , lidf
+ assert lidf[k+1][4].strip() in ('OUI', 'NON') , lidf
+
+
+ def check_LIPR_LIMA(self,checker) :
+ lipr=self.MODG_LIPR.get()
+ lima=self.MODG_LIMA.get()
+ nb_liaison=self.MODG_LIDF.nmaxoc
+ for k in range(nb_liaison) :
+ mat1_nlig=lipr[9*k+0] ; assert mat1_nlig > 0
+ mat1_ncol=lipr[9*k+1] ; assert mat1_ncol > 0
+ mat1_nume=lipr[9*k+2] ; assert mat1_nume == 3*k +1 , (mat1_nume, k)
+ assert len(lima[3*k+1]) == mat1_nlig*mat1_ncol
+
+ mat2_nlig=lipr[9*k+3] ; assert mat2_nlig > 0
+ mat2_ncol=lipr[9*k+4] ; assert mat2_ncol > 0
+ mat2_nume=lipr[9*k+5] ; assert mat2_nume == 3*k +2 , (mat2_nume, k)
+ assert len(lima[3*k+2]) == mat2_nlig*mat2_ncol
+
+ mat3_nlig=lipr[9*k+6] ; assert mat3_nlig > 0
+ mat3_ncol=lipr[9*k+7] ; assert mat3_ncol > 0
+ mat3_nume=lipr[9*k+8] ; assert mat3_nume == 3*k +3 , (mat3_nume, k)
+ assert len(lima[3*k+3]) == mat3_nlig*mat3_ncol
+
--- /dev/null
+#@ MODIF sd_multi_appui SD DATE 04/04/2007 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_multi_appui(AsBase):
+#------------------------------------
+ nomj = SDNom(fin=19)
+
+ FDEP=AsVK8()
+ FVIT=AsVK8()
+ FACC=AsVK8()
+ MULA=AsVI()
+ PSID=AsVR()
--- /dev/null
+#@ MODIF sd_nume_ddl SD DATE 17/07/2007 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_solveur import sd_solveur
+
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_nume_ddl_gene et sd_nume_ddl_gd ne servant que pour "check"
+#---------------------------------------------------------------------------------
+
+
+class sd_nume_ddl(AsBase):
+#--------------------------------------------
+ nomj = SDNom(fin=14)
+
+
+ # pour orienter vers sd_nume_ddl_gene ou sd_nume_ddl_gd :
+ def check_nume_ddl_i_GENE(self, checker):
+ gene= aster.jeveux_exists(self.nomj()[:14]+'.NUME.ORIG')
+ if gene :
+ sd2=sd_nume_ddl_gene(self.nomj)
+ else :
+ sd2=sd_nume_ddl_gd(self.nomj)
+ sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_nume_ddl_com SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_solveur import sd_solveur
+from SD.sd_stockage import sd_stockage
+
+
+class sd_nume_ddl_com(sd_stockage):
+#----------------------------------
+ nomj = SDNom(fin=14)
+ NSLV = AsVK24(lonmax=1, )
+
+ # indirection vers SOLVEUR :
+ def check_nume_ddl_com_i_NSLV(self, checker):
+ lnom = self.NSLV.get()
+ if not lnom: return
+ sd2=sd_solveur(lnom[0]); sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_nume_ddl_gd SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_nume_ddl_com import sd_nume_ddl_com
+from SD.sd_nume_equa import sd_nume_equa
+
+
+class sd_nume_ddl_gd(sd_nume_ddl_com):
+#--------------------------------
+ nomj = SDNom(fin=14)
+ nume = sd_nume_equa(SDNom(nomj='.NUME'))
+ FETN = Facultatif(AsVK24())
--- /dev/null
+#@ MODIF sd_nume_ddl_gene SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_nume_ddl_com import sd_nume_ddl_com
+from SD.sd_nume_eqge import sd_nume_eqge
+
+
+class sd_nume_ddl_gene(sd_nume_ddl_com):
+#---------------------------------------
+ nomj = SDNom(fin=14)
+ nume = Facultatif(sd_nume_eqge(SDNom(nomj='.NUME'))) # n'existe pas toujours : CALC_MATR_AJOU/fdlv106a
+
+
+
--- /dev/null
+#@ MODIF sd_nume_eqge SD DATE 11/02/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_prof_vgen import sd_prof_vgen
+class sd_nume_eqge(sd_prof_vgen):
+ nomj = SDNom(fin=19)
+ REFN = AsVK24(SDNom(debut=19), lonmax=4, )
+ DESC = AsVI(SDNom(debut=19), lonmax=1, )
+ NEQU = AsVI(SDNom(debut=19), lonmax=1, )
+ ORIG = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+
+
--- /dev/null
+#@ MODIF sd_nume_equa SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_prof_chno import sd_prof_chno
+class sd_nume_equa(sd_prof_chno):
+ nomj = SDNom(fin=19)
+ NEQU = AsVI(lonmax=2,)
+ DELG = AsVI( )
+ REFN = AsVK24(lonmax=4,)
+
+
--- /dev/null
+#@ MODIF sd_para_sensi SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_fonction import sd_fonction
+class sd_para_sensi(sd_fonction):
+ nomj = SDNom(fin=19)
+
+
--- /dev/null
+#@ MODIF sd_partition SD DATE 16/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SD import *
+
+class sd_partition(AsBase):
+ nomj = SDNom(fin=8)
+ NUPROC_MAILLE = AsVI(SDNom(nomj='.NUPROC.MAILLE'))
+
--- /dev/null
+#@ MODIF sd_prof_chno SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_prof_chno(AsBase):
+ nomj = SDNom(fin=19)
+ PRNO = AsColl( acces='NU', stockage='CONTIG', modelong=Parmi('CONSTANT', 'VARIABLE'), type='I', )
+ LILI = AsObject( genr='N', xous='S', type='K', ltyp=24, )
+ NUEQ = AsVI( )
+ DEEQ = AsVI( )
+
+
--- /dev/null
+#@ MODIF sd_prof_vgen SD DATE 21/02/2008 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_prof_vgen(AsBase):
+ nomj = SDNom(fin=19)
+ PRNO = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+ LILI = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=8, )
+ NUEQ = AsVI(SDNom(debut=19), )
+ DEEQ = AsVI(SDNom(debut=19), )
+ DELG = AsVI(SDNom(debut=19), )
+
+
--- /dev/null
+#@ MODIF sd_proj_mesu SD DATE 15/01/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from sd_modele import sd_modele
+
+
+
+class sd_proj_mesu(AsBase):
+#-------------------------------------
+ nomj = SDNom(fin=18)
+ PJMNO = AsVI()
+ PJMRG = AsVK8()
+ PJMBP = AsVR()
+ PJMRF = AsVK16(lonmax=5)
+
+ # si PROJ_MESU_MODAL :
+ PJMOR = Facultatif(AsVR())
+
+ # si MACR_ELEM_STAT :
+ PJMIG = Facultatif(AsVR())
+ PJMMM = Facultatif(AsObject(genr='V',type=Parmi('C', 'R')))
+
+
+ def exists(self):
+ # retourne .true. si la SD semble exister
+ return self.PJMNO.exists
+
+
+ def check_1(self, checker):
+ #------------------------------------
+ if not self.exists() : return
+
+ nbutil=self.PJMNO.lonuti
+ assert nbutil > 0 , nbutil
+
+ # vérifications communes :
+ assert self.PJMRG.lonmax >= nbutil
+ n1=self.PJMBP.lonmax
+ nbmode=n1/nbutil
+ assert n1==nbutil*nbmode , (nbmode,nbutil,n1)
+ assert self.PJMRF.exists
+ pjmrf=self.PJMRF.get_stripped()
+ sd2=sd_modele(pjmrf[0]) ; sd2.check(checker)
+ assert pjmrf[1] != '' , pjmrf
+ assert pjmrf[2] != '' , pjmrf
+
+ # quel cas de figure : PROJ_MESU_MODAL ou MACR_ELEM_STAT ?
+ lproj=self.PJMOR.exists
+
+ # si PROJ_MESU_MODAL :
+ if lproj :
+ nbcapt=nbutil
+ assert self.PJMOR.lonmax >= 3*nbcapt
+ assert not self.PJMIG.exists
+ assert pjmrf[3] == '' , pjmrf
+ assert pjmrf[4] == '' , pjmrf
+
+ # si MACR_ELEM_STAT :
+ else :
+ nbddle=nbutil
+ assert self.PJMIG.exists
+ assert self.PJMMM.exists
+ n1=self.PJMIG.lonmax
+ nbmoid=n1/nbddle
+ assert n1==nbddle*nbmoid , (nbmodi,nbddle,n1)
+
+ assert pjmrf[3] != '' , pjmrf
+ sd2=sd_proj_mesu(pjmrf[4]) ; sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_proj_modal SD DATE 04/04/2007 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_proj_modal(AsBase):
+#------------------------------------
+ nomj = SDNom(fin=19)
+
+ MASG=AsVR()
+
+ AGEM=AsVR()
+ AGEP=AsVR()
+ VGEM=AsVR()
+ VGEP=AsVR()
+ DGEM=AsVR()
+ DGEP=AsVR()
+ RIGG=AsVR()
+ AMOG=AsVR()
+ BASM=AsVR()
+ FONG=Facultatif(AsVK24())
+ FORG=Facultatif(AsVR())
+
--- /dev/null
+#@ MODIF sd_reperage_1d SD DATE 30/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_reperage_1d(AsBase):
+ nomj = SDNom(fin=19)
+ TYPE = AsVI(SDNom(debut=19), )
+ EXTR = AsVR(SDNom(debut=19), )
+ ORIG = AsVR(SDNom(debut=19), )
+ def check_1(self,checker):
+ type=self.TYPE.get()
+ extr=self.EXTR.get()
+ orig=self.ORIG.get()
+ assert len(extr) == len(orig)
+ assert len(extr) == len(type)
+ for k in range(len(type)):
+ assert (type[k] <= 3) and (type[k] >= 1)
+
+
--- /dev/null
+#@ MODIF sd_reperage_omega SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_reperage_omega(AsBase):
+ nomj = SDNom(fin=13)
+ CREFF_EXTR = AsVR(SDNom(nomj='.CREFF.EXTR', debut=13), )
+ FACE__ORIG = AsVI(SDNom(nomj='.FACE .ORIG', debut=13), )
+ CREFF_ORIG = AsVR(SDNom(nomj='.CREFF.ORIG', debut=13), )
+ ARETE_EXTR = AsVI(SDNom(nomj='.ARETE.EXTR', debut=13), )
+ FACE__EXTR = AsVI(SDNom(nomj='.FACE .EXTR', debut=13), )
+ MAIL = AsColl(SDNom(debut=13), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+ CREFM_ORIG = AsVR(SDNom(nomj='.CREFM.ORIG', debut=13), )
+ CREFM_EXTR = AsVR(SDNom(nomj='.CREFM.EXTR', debut=13), )
+ ARETE_ORIG = AsVI(SDNom(nomj='.ARETE.ORIG', debut=13), )
+
+
--- /dev/null
+#@ MODIF sd_resuelem SD DATE 06/05/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_ligrel import sd_ligrel
+
+
+class sd_resuelem(AsBase):
+ nomj = SDNom(fin=19)
+ NOLI = AsVK24(lonmax=4, )
+ DESC = AsVI(docu='RESL', )
+ RESL = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'))
+ RSVI = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I'))
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.NOLI.exists
+
+ def check_1(self, checker):
+ if not self.exists() : return
+ noli = self.NOLI.get_stripped()
+ sd2=sd_ligrel(noli[0]) ; sd2.check(checker)
+ assert noli[1] != '' , noli
+ assert noli[2] in ('MPI_COMPLET','MPI_INCOMPLET') , noli
+ assert noli[3] in ('','VOISIN_VF') , noli
+ if noli[3]=='VOISIN_VF' : assert self.RSVI.exists
+
+ desc = self.DESC.get()
+ assert desc[0] > 0 and desc[0] < 1000 , desc
+ nbgr=desc[1]
+ assert nbgr > 0 , desc
+ assert len(desc)==nbgr+2, desc
+ assert self.RESL.nmaxoc == nbgr, desc
+ for k in desc :
+ assert k >= 0, desc
--- /dev/null
+#@ MODIF sd_resultat SD DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_l_table import sd_l_table
+from SD.sd_champ import sd_champ
+from SD.sd_l_charges import sd_l_charges
+from SD.sd_util import *
+
+
+class sd_resultat(sd_titre):
+#---------------------------------------
+ nomj = SDNom(fin=8)
+ TAVA = AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, )
+ NOVA = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=16, )
+ TACH = AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=24, )
+ ORDR = AsVI(SDNom(debut=19), )
+ DESC = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=16, )
+
+ # la déclaration suivante simplifie la fonction check_resultat_i_char
+ CHAR = Facultatif(AsVK24(SDNom(debut=19),))
+
+ sd_l_table = Facultatif(sd_l_table(SDNom(nomj='')))
+
+
+ # existence de la SD :
+ def exists(self):
+ return self.ORDR.exists
+
+
+ # indirection vers les champs de .TACH :
+ def check_resultat_i_TACH(self, checker):
+ tach = self.TACH.get()
+ for nosym in tach.keys():
+ for nom in tach[nosym] :
+ if not nom.strip(): continue
+ sd2 = sd_champ(nom)
+ sd2.check(checker)
+
+
+ # indirection vers les objets de .TAVA :
+ def check_resultat_i_TAVA(self, checker):
+ tava = self.TAVA.get()
+ S1=set()
+ for knova in tava.keys():
+ suffix=tava[knova][0][:5]
+ if not suffix.strip(): continue # JP : est-ce possible ?
+ S1.add(suffix)
+ for suffix in S1 :
+ nom=self.nomj()[:19]+suffix
+ sd2 = AsObject(SDNom(nomj=nom,debut=0), xous='S', genr='V', type=Parmi('I','R','C','K'),
+ ltyp=Parmi(4,8,16,24),) ; sd2.check(checker)
+
+
+ # indirection vers les sd_l_charges stockées comme paramètres sous le nom EXCIT :
+ def check_resultat_i_EXCIT(self, checker):
+ lnom = self.CHAR.get()
+ if not lnom: return
+ S1=set()
+ for nom in lnom:
+ if not nom.strip(): continue
+ S1.add(nom)
+ for nom in S1 :
+ sd2 = sd_l_charges(nomj=nom); sd2.check(checker)
+
+
+ # vérification de .ORDR :
+ def check_ORDR(self, checker):
+ V = self.ORDR
+ nuti=V.lonuti
+ nmax=V.lonmax
+ sdu_compare(V, checker, nuti, '> ', 0 , comment='nuti > 0')
+ sdu_compare(V, checker, nuti, '<=', nmax, comment='nuti <= nmax')
+
+ # les numeros d'ordre doivent etre tous différents :
+ sdu_tous_differents(V,checker,V.get()[:nuti],'1:NUTI')
+
+
+ # vérification des longueurs des différents objets :
+ def check_LONGUEURS(self, checker):
+ ordr = self.ORDR.get()
+ tach = self.TACH.get()
+ nova = self.NOVA.get()
+ tava = self.TAVA.get()
+ desc = self.DESC.get()
+
+ nbmax_ordr=len(ordr) # la SD est concue pour stocker jusqu'à nbmax_ordr nume_ordre
+ nbmax_para=len(nova) # la SD est concue pour stocker jusqu'à nbmax_para paramètres
+ nbmax_nosym=len(desc) # la SD est concue pour stocker jusqu'à nbmax_nosym nom_cham
+
+ sdu_compare(self.TACH,checker,len(tach),'==',nbmax_nosym,'Incohérence TACH/DESC')
+ sdu_compare(self.TAVA,checker,len(tava),'==',nbmax_para, 'Incohérence TAVA/NOVA')
+
+ # .TACH
+ for ksym in tach.keys():
+ nosym=desc[ksym-1].strip()
+ sdu_compare(self.TACH,checker,len(tach[ksym]),'==',nbmax_ordr,nosym+' LONMAX(.TACH) != LONMAX(.ORDR)')
+
+
+ # objets trouvés dans .TAVA
+ for knova in tava.keys():
+ sdu_compare(tava,checker,len(tava[knova]),'==',4,'LONMAX(TAVA[ksym]==4')
+ suffix=tava[knova][0][:5]
+ npara=int(tava[knova][2])
+ if not suffix.strip(): continue
+ nom=self.nomj()[:19]+suffix
+ sd2 = AsObject(SDNom(nomj=nom,debut=0), xous='S', genr='V', type=Parmi('I','R','C','K'),
+ ltyp=Parmi(4,8,16,24),)
+ sdu_compare(sd2,checker,len(sd2.get()),'==',npara*nbmax_ordr,'Incohérence LONMAX / LONMAX(.ORDR)')
+
+
+ # vérifications supplémentaires :
+ def check_veri1(self, checker):
+ ordr = self.ORDR.get()
+ nova = self.NOVA.get()
+ tava = self.TAVA.get()
+
+ nbmax_ordr=len(ordr) # la SD est concue pour stocker jusqu'à nbmax_ordr nume_ordre
+ nbuti_ordr=self.ORDR.lonuti # la SD contient réellement nbuti_ordr nume_ordre
+
+
+ # objets trouvés dans .TAVA
+ for knova in tava.keys():
+ nova1=nova[knova-1].strip()
+ suffix=tava[knova][0][:5]
+ if not suffix.strip(): continue
+
+ nupara=int(tava[knova][1])
+ nbpara=int(tava[knova][2])
+ assert nupara <= nbpara, (nupara, nbpara)
+ acces=tava[knova][3].strip()
+ assert acces in ('PARA','ACCES') , acces
+
+ # on vérifie que les variables d'accès sont toutes différentes :
+ if acces == 'ACCES' :
+ # pour l'instant, on ne vérifie que 'INST' car 'FREQ', 'NUME_MODE', 'NOEUD_CMP' ne semblent pas tous différents ...
+ if nova1 != 'INST' : continue
+
+ nom=self.nomj()[:19]+suffix
+ sd2 = AsObject(SDNom(nomj=nom,debut=0),)
+ vect=sd2.get()
+ seq=[]
+ for k in range(nbuti_ordr) :
+ seq.append(vect[k*nbpara+nupara-1])
+
+ sdu_tous_differents(sd2,checker,seq,nova1)
+
+ # on vérifie les éventuelles sd_l_charge (EXCIT) :
+ if nova1=="EXCIT" :
+ nom=self.nomj()[:19]+suffix
+ sd2 = AsObject(SDNom(nomj=nom,debut=0),)
+ vect=sd2.get()
+ S1=set()
+ for k in range(nbuti_ordr) :
+ S1.add(vect[k*nbpara+nupara-1])
+ for nom in S1 :
+ if nom.strip() != '' :
+ sd2 = sd_l_charges(nomj=nom); sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_resultat_dyn SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_resultat import sd_resultat
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_matr_asse import sd_matr_asse
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_proj_mesu import sd_proj_mesu
+
+
+class sd_resultat_dyn(sd_resultat):
+#--------------------------------------------------
+ nomj = SDNom(fin=8)
+ REFD = AsVK24(SDNom(debut=19), lonmax=7, )
+
+ # si utilisation de PROJ_MESU_MODAL :
+ PROJM = Facultatif(sd_proj_mesu())
+
+
+ # indirection vers les SD de .REFD :
+ def check_resultat_dyn_i_REFD(self, checker):
+ refd = self.REFD.get_stripped()
+ if not refd : return
+ for k in 0,1,2 :
+ if refd[k] :
+ sd2 = sd_matr_asse(refd[0]); sd2.check(checker)
+ if refd[3] :
+ sd2 = sd_nume_ddl(refd[3]); sd2.check(checker)
+ if refd[4] :
+ sd2 = sd_interf_dyna_clas(refd[4]); sd2.check(checker)
+
--- /dev/null
+#@ MODIF sd_sddyna SD DATE 04/04/2007 AUTEUR ABBAS M.ABBAS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_sddyna(AsBase):
+#------------------------------------
+ nomj = SDNom(fin=15)
+
+ TYPE_SCH=AsVK16(SDNom(nomj='.TYPE_SCH'),lonmax=8)
+ PARA_SCH=Facultatif(AsVR( SDNom(nomj='.PARA_SCH'),lonmax=4))
+ INI_CONT=Facultatif(AsVR( SDNom(nomj='.INI_CONT'),lonmax=4))
+ NOM_SD =Facultatif(AsVK24(SDNom(nomj='.NOM_SD' ),lonmax=3))
+ TYPE_FOR=Facultatif(AsVI( SDNom(nomj='.TYPE_FOR'),lonmax=2))
+ COEF_SCH=Facultatif(AsVR( SDNom(nomj='.COEF_SCH'),lonmax=4))
+ INFO_SD =Facultatif(AsVL( SDNom(nomj='.INFO_SD' ),lonmax=5))
+
--- /dev/null
+#@ MODIF sd_solveur SD DATE 05/10/2009 AUTEUR BOITEAU O.BOITEAU
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_solveur(AsBase):
+ nomj = SDNom(fin=19)
+ SLVK = AsVK24(SDNom(debut=19), lonmax=11, )
+ SLVR = AsVR(SDNom(debut=19), lonmax=4, )
+ SLVI = AsVI(SDNom(debut=19), lonmax=7, )
+
+
+ def check_SLVK(self,checker):
+ #---------------------------------------------
+ slvk = self.SLVK.get_stripped()
+ method=slvk[0]
+ if method == 'MUMPS' :
+ assert slvk[1] in ('AUTO', 'SANS'), slvk
+ assert slvk[2] in ('NONSYM', 'SYMGEN', 'SYMDEF', 'AUTO'), slvk
+ assert slvk[3] in ('AMD','AMF','PORD','METIS','QAMD','AUTO'), slvk
+ assert slvk[4] in ('OUI', 'NON'), slvk
+ assert slvk[5] in ('OUI', 'NON'), slvk
+ else :
+ pass
+
+
--- /dev/null
+#@ MODIF sd_spectre SD DATE 19/06/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_modele import sd_modele
+from SD.sd_cara_elem import sd_cara_elem
+from SD.sd_fonction import sd_fonction
+
+
+types_possibles=[ # liste des divers types de spectres :
+ 'SPEC_LONG_COR_1',
+ 'SPEC_LONG_COR_2',
+ 'SPEC_LONG_COR_3',
+ 'SPEC_LONG_COR_4',
+ 'SPEC_CORR_CONV_1',
+ 'SPEC_CORR_CONV_2',
+ 'SPEC_FONC_FORME',
+ 'SPEC_EXCI_POINT',]
+
+class sd_spectre(sd_titre):
+#------------------------------------
+ nomj = SDNom(fin=19)
+
+ VAIN = AsVI()
+ VATE = AsVK16()
+
+ VARE = Facultatif(AsVR())
+ VAVF = Facultatif(AsVK8(lonmax=1))
+ NNOE = Facultatif(AsVK8())
+
+
+ def u_type(self) :
+ vate=self.VATE.get()
+ type=vate[0].strip()
+ assert type in types_possibles
+ return type
+
+
+ def u_nbno(self) :
+ vain=self.VAIN.get()
+ intesp =vain[1]
+ nbno =vain[2]
+ return (intesp,nbno)
+
+
+ def check_VAIN(self,checker):
+ #-------------------------------
+ vain=self.VAIN.get()
+ itype=vain[0]
+ assert itype in (1,2,3,4,11,21) , vain
+
+ type = self.u_type()
+ if itype==1 : assert type in ('SPEC_LONG_COR_1', 'SPEC_CORR_CONV_1') ,vain
+ if itype==2 : assert type in ('SPEC_LONG_COR_2', 'SPEC_CORR_CONV_2') ,vain
+ if itype==3 : assert type in ('SPEC_LONG_COR_3',) ,vain
+ if itype==4 : assert type in ('SPEC_LONG_COR_4',) ,vain
+ if itype==11 : assert type in ('SPEC_FONC_FORME',) ,vain
+ if itype==21 : assert type in ('SPEC_EXCI_POINT',) ,vain
+
+ if type in ('SPEC_EXCI_POINT','SPEC_FONC_FORME') :
+ assert len(vain)==3, vain
+ assert vain[1] in (0,1) ,vain
+ assert vain[2] >=0 ,vain
+ else :
+ assert len(vain)==1, vain
+
+
+
+ def check_VARE(self,checker):
+ #-------------------------------
+ vare=self.VARE.get()
+ type = self.u_type()
+
+ if type == 'SPEC_FONC_FORME' :
+ assert not vare
+ return
+
+ elif type == 'SPEC_EXCI_POINT' :
+ intesp, nbno= self.u_nbno()
+ if intesp==0 :
+ assert len(vare)==nbno, vare
+ else :
+ assert len(vare)==1, vare
+
+ else :
+ assert len(vare)==12, vare
+
+
+
+ def check_VATE(self,checker):
+ #-------------------------------
+ vate=self.VATE.get_stripped()
+ type = self.u_type()
+
+ if type == 'SPEC_EXCI_POINT' :
+ #---------------------------------
+ intesp, nbno= self.u_nbno()
+ if intesp==0 :
+ assert len(vate)==4+nbno, vate
+ else :
+ assert len(vate)==5, vate
+ sd2=sd_cara_elem(vate[1]) ; sd2.check()
+ sd2=sd_modele(vate[2]) ; sd2.check()
+ if vate[3]=='GRAPPE_2' :
+ assert vate[4] in ('ASC_CEN','ASC_EXC','DES_CEN','DES_EXC')
+ else :
+ for x in vate[4:] :
+ assert x in ('FORCE','MOMENT')
+
+ elif type == 'SPEC_FONC_FORME' :
+ #---------------------------------
+ intesp, nbno= self.u_nbno()
+ if intesp==0 :
+ nbfonc=len(vate)-4
+ assert nbfonc>0, vate
+ else :
+ assert len(vate)==5, vate
+ sd2=sd_cara_elem(vate[1]) ; sd2.check()
+ sd2=sd_modele(vate[2]) ; sd2.check()
+ if vate[3]=='GRAPPE_1' :
+ assert vate[4] in ('DEBIT_180','DEBIT_300')
+ else :
+ for x in vate[4:] :
+ sd2=sd_fonction(x) ; sd2.check()
+
+ elif type == 'SPEC_LONG_COR_1' :
+ #---------------------------------
+ sd2=sd_fonction(vate[2]) ; sd2.check()
+ assert vate[3] == 'VISC_CINE'
+
+ elif type == 'SPEC_LONG_COR_2' :
+ #---------------------------------
+ sd2=sd_fonction(vate[2]) ; sd2.check()
+ assert vate[5] == 'BETA'
+
+ elif type == 'SPEC_LONG_COR_3' :
+ #---------------------------------
+ sd2=sd_fonction(vate[2]) ; sd2.check()
+ assert vate[7] == 'BETA_2'
+
+ elif type == 'SPEC_LONG_COR_4' :
+ #---------------------------------
+ sd2=sd_fonction(vate[2]) ; sd2.check()
+ assert vate[5] == 'GAMMA'
+
+ elif type == 'SPEC_CORR_CONV_1' :
+ #---------------------------------
+ assert vate[9] == 'COEF_VITE_FLUI_O'
+ assert vate[10] in ('GENERALE', 'CORCOS', 'AU_YANG')
+
+ elif type == 'SPEC_CORR_CONV_2' :
+ #---------------------------------
+ sd2=sd_fonction(vate[1]) ; sd2.check()
+ assert vate[4] in ('GENERALE', 'CORCOS', 'AU_YANG')
+ assert vate[6] == 'COEF_VITE_FLUI_O'
+
+
+
+ def check_VAVF(self,checker):
+ #-------------------------------
+ vavf=self.VAVF.get_stripped()
+ type = self.u_type()
+
+ if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+ assert not vavf
+ else :
+ sd2=sd_fonction(vavf[0]) ; sd2.check()
+
+
+
+ def check_NNOE(self,checker):
+ #-------------------------------
+ nnoe=self.NNOE.get()
+ type = self.u_type()
+
+ if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+ intesp, nbno= self.u_nbno()
+ assert len(nnoe) == nbno
+ else :
+ assert not nnoe
--- /dev/null
+#@ MODIF sd_squelette SD DATE 03/11/2008 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_maillage import sd_maillage
+from SD.sd_util import *
+
+
+class sd_squelette(sd_maillage):
+#-------------------------------
+ nomj = SDNom(fin=8)
+ inv_skeleton = Facultatif(AsVI(SDNom(nomj='.INV.SKELETON'),))
+
+ CORRES = Facultatif(AsVI())
+ NOMSST = Facultatif(AsVK8(SDNom(debut=17),))
+
+ # ENSEMBLE__ : TRANS , ANGL_NAUT
+ TRANS = Facultatif(AsVK8(lonmax=3))
+ ANGL_NAUT = Facultatif(AsVK8(lonmax=3))
+
+
+ def check_SKELETON(self,checker):
+ if not self.inv_skeleton.exists : return
+ skeleton=self.inv_skeleton.get()
+ dime=self.DIME.get()
+ nbno=dime[0]
+ assert len(skeleton)==2*nbno, (dime,len(skeleton))
+ for k in skeleton :
+ assert k > 0 , skeleton
+
+
+ def check_TRANS_ANGL_NAUT(self,checker):
+ trans =self.TRANS.get()
+ angl_naut =self.ANGL_NAUT.get()
+ assert (trans and angl_naut) or ((not trans) and (not angl_naut))
+
+
+ def check_CORRES(self,checker):
+ if not self.CORRES.exists : return
+ dime=self.DIME.get()
+ corres=self.CORRES.get()
+ sdu_tous_differents(self.CORRES,checker)
+ assert len(corres) == dime[0], (dime, len(corres))
--- /dev/null
+#@ MODIF sd_stoc_lciel SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_stoc_lciel(AsBase):
+ nomj = SDNom(fin=19)
+ SCDI = AsVI()
+ SCBL = AsVI()
+ SCHC = AsVI()
+ SCIB = AsVI()
+ SCDE = AsVI(lonmax=6)
+
+
--- /dev/null
+#@ MODIF sd_stoc_mltf SD DATE 08/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_stoc_mltf(AsBase):
+ nomj = SDNom(fin=19)
+ ADNT = AsVI()
+ ADPI = AsVI()
+ ADRE = AsVI()
+ ANCI = AsVI()
+ DECA = AsVI()
+ DESC = AsVI(lonmax=5,)
+ FILS = AsVI()
+ FRER = AsVI()
+ GLOB = AsVS()
+ LFRN = AsVI()
+ LGBL = AsVI()
+ LGSN = AsVI()
+ LOCL = AsVS()
+ NBAS = AsVI()
+ NBLI = AsVI()
+ NCBL = AsVI()
+ NOUV = AsVI()
+ RENU = AsVK8(lonmax=1,)
+ SEQU = AsVI()
+ SUPN = AsVI()
--- /dev/null
+#@ MODIF sd_stoc_morse SD DATE 29/03/2010 AUTEUR BOITEAU O.BOITEAU
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+class sd_stoc_morse(AsBase):
+ nomj = SDNom(fin=19)
+ SMDE = AsVI(lonmax=6)
+ SMHC = AsVS()
+ SMDI = AsVI()
+
+
--- /dev/null
+#@ MODIF sd_stockage SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_stoc_mltf import sd_stoc_mltf
+from SD.sd_stoc_morse import sd_stoc_morse
+from SD.sd_stoc_lciel import sd_stoc_lciel
+
+class sd_stockage(AsBase):
+ nomj = SDNom(fin=14)
+ slcs = Facultatif(sd_stoc_lciel(SDNom(nomj='.SLCS')))
+ mltf = Facultatif(sd_stoc_mltf(SDNom(nomj='.MLTF')))
+ smos = sd_stoc_morse(SDNom(nomj='.SMOS'))
+
+
--- /dev/null
+#@ MODIF sd_surface SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_surface_1d import sd_surface_1d
+
+
+class sd_surface(AsBase):
+#-----------------------------
+ nomj = SDNom(fin=8)
+ NSDS = AsVK24(lonmax=1, )
+ NOMA = AsVK8(lonmax=1, )
+
+
+ # indirection vers sd_surface_1d :
+ def check_surface_i_NSDS(self, checker):
+ lnom = self.NSDS.get()
+ #if not lnom: return
+ sd2=sd_surface_1d(lnom[0]); sd2.check(checker)
+
+
--- /dev/null
+#@ MODIF sd_surface_1d SD DATE 22/10/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_reperage_1d import sd_reperage_1d
+from SD.sd_reperage_omega import sd_reperage_omega
+
+
+class sd_surface_1d(AsBase):
+#--------------------------------
+ nomj = SDNom(fin=13)
+ sgtel = sd_reperage_1d(SDNom(nomj='.SGTEL'))
+ repom = sd_reperage_omega(SDNom(nomj=''))
+ CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG'))
+ CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR'))
+ DESC = AsVR(SDNom(debut=13), lonmax=6, )
+
+
--- /dev/null
+#@ MODIF sd_table SD DATE 09/05/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_table(sd_titre):
+#-------------------------------------
+ nomj = SDNom(fin=17)
+ TBNP = AsVI(SDNom(debut=19), lonmax=2, )
+ TBBA = AsVK8(SDNom(debut=19), lonmax=1, )
+ TBLP = AsVK24(SDNom(debut=19), )
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.TBNP.exists
+
+ def nb_column(self):
+ # retourne le nombre de colonnes de la table :
+ shape = self.TBNP.get()
+ return shape[0]
+
+ def get_column(self, i):
+ # retourne la colonne de numéro i
+ nom = self.nomj()[:19]+".%04d"%i
+ return Colonne( nom )
+
+ def get_column_name(self, name):
+ # retourne la colonne de nom name
+ shape = self.TBNP.get()
+ desc = self.TBLP.get()
+ for n in range(shape[0]):
+ nom = desc[4*n]
+ nom2= desc[4*n+2]
+ if nom.strip()==name.strip() :
+ return Colonne(nom2)
+ return None
+
+ def check_table_1(self, checker):
+ if not self.exists() : return
+ shape = self.TBNP.get()
+ desc = self.TBLP.get()
+ for n in range(shape[0]):
+ nom = desc[4*n+2]
+ col = Colonne(nom)
+ col.check(checker)
+ data = col.data.get()
+ if data is not None:
+ if col.data.lonuti != shape[1]:
+ checker.err(self,"Taille inconsitante %d!=%d" %
+ (col.data.lonuti,shape[1]))
+
+class Colonne(AsBase):
+ nomj = SDNom(debut=0, fin=24)
+ data = OJBVect(SDNom(" ",debut=17,fin=19))
+ mask = OJBVect(SDNom("LG",debut=17,fin=19))
--- /dev/null
+#@ MODIF sd_table_container SD DATE 28/07/2009 AUTEUR TORKHANI M.TORKHANI
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 SD import *
+
+from SD.sd_table import sd_table, Colonne
+from SD.sd_vect_elem import sd_vect_elem
+from SD.sd_matr_elem import sd_matr_elem
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_mode_meca import sd_mode_meca
+# --------------------------------------------------------------------
+# sd_table contenant les colonnes nommée "NOM_OBJET","TYPE_OBJET",
+# et "NOM_SD"
+# --------------------------------------------------------------------
+
+
+
+class sd_table_container(sd_table):
+#-------------------------------------
+ nomj = SDNom(fin=19)
+
+ def check_table_container(self, checker):
+
+ # vérification de l'existence de la table
+ if not self.exists() :
+ checker.err(self,"La sd_table_container %s ne semble"
+ +"pas exister" %(nomj))
+
+ # on vérifie la présence des paramètres
+ # 'NOM_OBJET','TYPE_OBJET','NOM_SD'
+ param=['NOM_OBJET','TYPE_OBJET','NOM_SD']
+ shape = self.TBNP.get()
+ assert shape[0]>2 # la table à au moins 3 paramètres
+ for n in param:
+ col=self.get_column_name(n)
+ if col == None:
+ checker.err(self,"Paramètre %s manquant!" %(n))
+
+ # on vérifie que les colonnes ne sont pas vides
+ data = col.data.get()
+ if data is not None:
+ if col.data.lonuti != shape[1]:
+ checker.err(self,"Taille inconsitante %d!=%d" %
+ (col.data.lonuti,shape[1]))
+
+
+ # on vérifie le contenu de la colonne NOM_SD
+ col1=self.get_column_name('TYPE_OBJET')
+ col2=self.get_column_name('NOM_SD')
+ nbli=col1.data.lonuti
+ lnom1=col1.data.get_stripped()
+ lnom2=col2.data.get_stripped()
+ for k in range(nbli):
+ if lnom1[k][:9]=='VECT_ELEM':
+ sd5=sd_vect_elem(lnom2[k])
+ sd5.check(checker)
+ elif lnom1[k][:9]=='MATR_ELEM':
+ sd5=sd_matr_elem(lnom2[k])
+ sd5.check(checker)
+ elif lnom1[k][:9]=='CHAM_ELEM':
+ sd5=sd_cham_elem(lnom2[k])
+ sd5.check(checker)
+ elif lnom1[k][:11]=='MODE_MECA':
+ sd5=sd_mode_meca(lnom2[k])
+ sd5.check(checker)
+ else:
+ assert 0,lnom1[k]
+
--- /dev/null
+#@ MODIF sd_table_fonction SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_table import sd_table, Colonne
+from SD.sd_fonction import sd_fonction
+
+# --------------------------------------------------------------------
+# sd_table dont une colonne nommée "FONCTION[_C]" contient des fonctions
+# --------------------------------------------------------------------
+
+
+
+class sd_table_fonction(sd_table):
+#-------------------------------------
+ nomj = SDNom(fin=17)
+
+
+ def check_table_fonction_i_COL_FONC(self, checker):
+ shape = self.TBNP.get()
+ if shape is None: return
+ desc = self.TBLP.get()
+ for n in range(shape[0]):
+ nomcol=desc[4*n].strip()
+ if not (nomcol == 'FONCTION' or nomcol == 'FONCTION_C') : continue
+ nom = desc[4*n+2]
+ col = Colonne(nom)
+ lnom = col.data.get()
+ if not lnom : return
+ for nom1 in lnom :
+ if not nom1.strip() : continue
+ sd2=sd_fonction(nom1) ; sd2.check(checker)
--- /dev/null
+#@ MODIF sd_titre SD DATE 13/02/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class sd_titre(AsBase):
+ TITR = AsVK80(SDNom(debut=19), optional=True)
+
--- /dev/null
+#@ MODIF sd_tran_gene SD DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_proj_mesu import sd_proj_mesu
+from SD.sd_util import *
+
+
+class sd_tran_gene(sd_titre) :
+#--------------------------------------
+ nomj = SDNom(fin=19)
+
+ # objets commencant en 19 :
+ ACCE = AsVR() # gros objet
+ VITE = AsVR() # gros objet
+ DEPL = AsVR() # gros objet
+
+ INST = AsVR() # gros objet
+ ORDR = AsVI() # gros objet
+ DESC = AsVI(lonmax=5, )
+# REFD = AsVK24(lonmax=6, )
+ REFD = AsVK24(lonmax=7, )
+ PTEM = AsVR()
+
+ # si CHOC :
+ DLOC = Facultatif(AsVR())
+ ICHO = Facultatif(AsVI())
+ INTI = Facultatif(AsVK8())
+ FCHO = Facultatif(AsVR())
+ NCHO = Facultatif(AsVK8())
+ SST = Facultatif(AsVK8())
+ VCHO = Facultatif(AsVR())
+ VINT = Facultatif(AsVR())
+
+ # si nbexcit > 0 :
+ FACC = Facultatif(AsVK8())
+ FDEP = Facultatif(AsVK8())
+ FVIT = Facultatif(AsVK8())
+ IPSD = Facultatif(AsVR())
+
+ # si RELA_EFFO_DEPL :
+ REDN = Facultatif(AsVK24(lonmax=1, ))
+ REDC = Facultatif(AsVI())
+ REDD = Facultatif(AsVR())
+
+ # si utilisation de PROJ_MESU_MODAL :
+ PROJM = Facultatif(sd_proj_mesu(SDNom(debut=8)))
+
+
+
+
+ def u_dime(self):
+ desc=self.DESC.get()
+ nbmode=desc[1] ; assert nbmode > 0
+ nbchoc=desc[2] ; assert nbchoc >= 0
+ nbrede=desc[3] ; assert nbmode >= 0
+ nbsauv=self.ORDR.lonmax ; assert nbsauv > 0
+ if self.FACC.exists :
+ nbexcit=self.FACC.lonmax / 2 ; assert nbexcit >= 0
+ else :
+ nbexcit=0
+ return (nbmode, nbchoc, nbsauv, nbexcit, nbrede)
+
+
+ def check_DESC(self,checker):
+ desc=self.DESC.get()
+ assert desc[0] in (1,2,3) , desc
+
+
+ def check_REFD(self,checker):
+ # AJACOT : j'avais cru comprendre des choses ... mais sdld104a me prouve le contraire !
+ # à revoir ?????
+ return
+ refd=self.REFD.get_stripped()
+ assert refd[0] != '' , refd
+ sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+ assert refd[1] != '' , refd
+ sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+ if refd[2] != '' :
+ sd2= sd_matr_asse_gene(refd[2]) ; sd2.check()
+ assert refd[3] != '' , refd
+ sd2= sd_nume_ddl_gene(refd[3]) ; sd2.check()
+ assert refd[4] == '' , refd
+ # test de refd[5] trop compliqué : je craque !
+
+
+ def check_ORDR_INST_PTEM(self,checker):
+ nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+ assert self.ORDR.lonmax == nbsauv
+ assert self.INST.lonmax == nbsauv
+ assert self.PTEM.lonmax in (1, nbsauv)
+ sdu_tous_differents(self.ORDR,checker) # AJACOT_PB : j'aimerais bien "tous_différents"
+ sdu_tous_differents(self.INST,checker) # mais il y a sdld102a => fiche à émettre ?
+
+
+ def check_DEPL_VITE_ACCE(self,checker):
+ nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+ assert self.DEPL.lonmax == nbsauv*nbmode
+ assert self.VITE.lonmax == nbsauv*nbmode
+ assert self.ACCE.lonmax == nbsauv*nbmode
+
+
+ def check_CHOC(self,checker):
+ nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+ if nbchoc == 0 : return
+ assert self.DLOC.lonmax == 6*nbsauv*nbchoc
+ assert self.VCHO.lonmax == 3*nbsauv*nbchoc
+ assert self.FCHO.lonmax == 3*nbsauv*nbchoc
+ assert self.INTI.lonmax == nbchoc
+ assert self.ICHO.lonmax == nbsauv*nbchoc
+ assert self.NCHO.lonmax == 2*nbchoc
+ assert self.VINT.lonmax == nbsauv*nbchoc
+ assert self.SST.lonmax == 2*nbchoc
+
+
+ def check_EXCIT(self,checker):
+ nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+ if nbexcit == 0 : return
+ assert self.FACC.lonmax == 2*nbexcit
+ assert self.FDEP.lonmax == 2*nbexcit
+ assert self.FVIT.lonmax == 2*nbexcit
+ #assert self.IPSD.lonmax == nbexcit*neq # JP : neq != nbmode. Que vaut neq ??
+
+
+ def check_RELA_DEPL(self,checker):
+ nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+ if nbrede == 0 : return
+ assert self.REDC.lonmax == nbsauv*nbrede
+ assert self.REDD.lonmax == nbsauv*nbrede
+ assert self.REDN.lonmax == nbrede
+
--- /dev/null
+#@ MODIF sd_type_flui_stru SD DATE 09/05/2007 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_cara_elem import sd_cara_elem
+from SD.sd_modele import sd_modele
+from SD.sd_fonction import sd_fonction
+from SD.sd_mater import sd_mater
+from SD.sd_util import *
+
+
+class sd_type_flui_stru(AsBase):
+#===============================================================
+ nomj = SDNom(fin=8)
+ FSIC = AsVI(SDNom(debut=19),lonmax=2,)
+
+ FSGM = Facultatif(AsVK8(SDNom(debut=19)))
+ FSVR = Facultatif(AsVR(SDNom(debut=19)))
+ FSVK = Facultatif(AsVK8(SDNom(debut=19)))
+ FSVI = Facultatif(AsVI(SDNom(debut=19)))
+ FSCR = Facultatif(AsVR(SDNom(debut=19)))
+ FSGR = Facultatif(AsVR(SDNom(debut=19)))
+ UNIT_FAISCEAU = Facultatif(AsVI(lonmax=2,))
+ UNIT_GRAPPES = Facultatif(AsVI(lonmax=2,))
+
+
+ def exists(self):
+ # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+ return self.FSIC.exists
+
+
+ def u_veri1(self):
+ #-----------------------
+ # retourne 2 variables utiles pour les routines chech_xxxx
+ # type_faisceau : type de faisceau (configuration)
+ # couplage : indicateur de couplage
+ fsic=self.FSIC.get()
+ type_faisceau=fsic[0]
+ couplage=fsic[1]
+ return type_faisceau, couplage
+
+
+
+ def check_FSIC(self,checker): # objet .FSIC
+ #===============================================================
+ fsic=self.FSIC.get()
+ type_faisceau, couplage= self.u_veri1()
+ assert type_faisceau in (1,2,3,4), (type_faisceau, fsic)
+ assert couplage in (0,1), (couplage,fsic)
+
+
+
+ def check_FSVI(self,checker): # objet .FSVI
+ #===============================================================
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau == 1 : # FAISCEAU_TRANS
+ #-----------------------------------------
+ nbzone=fsvi[1]
+ sdu_compare(self.FSVI,checker,nbzone,'>',0,"nbzone > 0")
+ if couplage :
+ assert len(fsvi)==2+2*nbzone, fsvi
+ assert fsvi[0] in (1,2), fsvi
+ for indic in fsvi[2:2+nbzone] :
+ assert indic > 0 , (nbzone,fsvi,self)
+ for nbpt in fsvi[2+nbzone:2+2*nbzone] :
+ assert nbpt >= 0 , (nbzone,fsvi,self) # =0 possible : sdll136a
+ else :
+ assert len(fsvi)==2
+
+ if type_faisceau == 2 : # GRAPPE
+ #-----------------------------------------
+ sdu_assert(self.FSVI, checker, not fsvi, "type_faisceau == GRAPPE => FSVI ne doit pas exister")
+
+ if type_faisceau == 3 : # FAISCEAU_AXIAL
+ #-----------------------------------------
+ lsimplif=fsvi[0]
+ # lsimplif=1 : faisceau simplifié
+ # lsimplif=0 : faisceau complet
+
+ nbtype=fsvi[4] # nombre de types de grille
+ lgrille=nbtype > 0
+ # lgrille=1 : on utilise des grilles
+ # lgrille=0 : on n'utilise pas de grille
+
+ assert fsvi[0] in (0,1), fsvi
+ assert fsvi[1] in (1,2,3), fsvi
+ assert fsvi[2] in (1,2), fsvi
+
+ if not lsimplif : # faisceau complet
+ if lgrille :
+ assert len(fsvi)==6+nbtype, fsvi
+ assert min(fsvi[3:]) > 0, fsvi
+ else:
+ assert len(fsvi)==5, fsvi
+ assert fsvi[3] >= 0, fsvi
+
+ else : # faisceau simplifié
+ nbzone=fsvi[3]
+ if lgrille :
+ assert len(fsvi)==6+nbtype+nbzone, fsvi
+ assert min(fsvi[3:]) > 0, fsvi
+ else:
+ assert len(fsvi)==6+nbzone, fsvi
+ assert fsvi[3] > 0, fsvi
+
+ if type_faisceau == 4 : # COQUE_COAX
+ #-----------------------------------------
+ assert len(fsvi)==2, fsvi
+ assert fsvi[0] in (0,1), fsvi
+ assert fsvi[1] in (1,2,3), fsvi
+
+
+
+ def check_FSVK(self,checker): # objet .FSVK
+ #===============================================================
+ fsvk=self.FSVK.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau == 1 : # FAISCEAU_TRANS
+ #-----------------------------------------
+ nbzone=fsvi[1]
+ assert len(fsvk)==4+nbzone, fsvk
+ carel=fsvk[0].strip()
+ assert carel != '', fsvk
+ sd2=sd_cara_elem(carel); sd2.check(checker)
+ assert fsvk[1].strip() in ('DX', 'DY', 'DZ'), fsvk
+ for k in range(2,4+nbzone) :
+ sd2=sd_fonction(fsvk[k]); sd2.check(checker)
+
+ elif type_faisceau == 2 : # GRAPPE
+ #-----------------------------------------
+ if couplage :
+ assert len(fsvk)==4,(fsvk,self)
+ assert fsvk[0] != '',(fsvk,self)
+ # on pourrait vérifier que fsvk[1] est un nom de noeud
+ assert fsvk[1] != '',(fsvk,self)
+ sd2=sd_cara_elem(fsvk[2].strip()); sd2.check(checker)
+ sd2=sd_modele(fsvk[3].strip()); sd2.check(checker)
+ else:
+ assert not fsvk,(fsvk,self)
+
+ elif type_faisceau == 3 : # FAISCEAU_AXIAL
+ #-----------------------------------------
+ lsimplif=fsvi[0]
+ if not lsimplif :
+ assert len(fsvk)==3,(fsvk,self)
+ sd2=sd_fonction(fsvk[0].strip()); sd2.check(checker)
+ sd2=sd_fonction(fsvk[1].strip()); sd2.check(checker)
+ sd2=sd_cara_elem(fsvk[2].strip()); sd2.check(checker)
+ else:
+ assert len(fsvk)==2,(fsvk,self)
+ sd2=sd_fonction(fsvk[0].strip()); sd2.check(checker)
+ sd2=sd_fonction(fsvk[1].strip()); sd2.check(checker)
+
+ elif type_faisceau == 4 : # COQUE_COAX
+ #-----------------------------------------
+ assert len(fsvk)==3,(fsvk,self)
+ sd2=sd_cara_elem(fsvk[0].strip()); sd2.check(checker)
+ sd2=sd_mater(fsvk[1].strip()); sd2.check(checker)
+ sd2=sd_mater(fsvk[2].strip()); sd2.check(checker)
+
+
+
+ def check_FSVR(self,checker): # objet .FSVR
+ #===============================================================
+ fsvr=self.FSVR.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau == 1 : # FAISCEAU_TRANS
+ #-----------------------------------------
+ nbzone=fsvi[1]
+ if couplage :
+ assert len(fsvr)==3+2*nbzone,(fsvr,self)
+ else :
+ assert len(fsvr)==1,(fsvr,self)
+ sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+
+ elif type_faisceau == 2 : # GRAPPE
+ #-----------------------------------------
+ if couplage :
+ assert len(fsvr)==2,(fsvr,self)
+ sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+ else :
+ assert not fsvr,(fsvr,self)
+
+ elif type_faisceau == 3 : # FAISCEAU_AXIAL
+ #-----------------------------------------
+ lsimplif=fsvi[0]
+ if not lsimplif :
+ if fsvi[2]==1 : # enceinte circulaire
+ assert len(fsvr)==8,(fsvr,self)
+ else: # enceinte rectangulaire
+ assert len(fsvr)==10,(fsvr,self)
+ else :
+ nbzone=fsvi[3]
+ if fsvi[2]==1 : # enceinte circulaire
+ assert len(fsvr)==8+nbzone,(fsvr,self)
+ sdu_tous_compris(self.FSVR,checker,fsvi[8:],vmin=0.,comment="FSVR > 0")
+ else: # enceinte rectangulaire
+ assert len(fsvr)==10+nbzone,(fsvr,self)
+ sdu_tous_compris(self.FSVR,checker,fsvi[10:],vmin=0.,comment="FSVR > 0")
+
+ elif type_faisceau == 4 : # COQUE_COAX
+ #-----------------------------------------
+ assert len(fsvr)==7,(fsvr,self)
+ sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+
+
+
+ def check_FSGM(self,checker): # objet .FSGM
+ #===============================================================
+ fsgm=self.FSGM.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau in (1,2) :
+ #-----------------------------------------
+ assert not fsgm,(fsvi,self)
+
+ elif type_faisceau == 3 : # FAISCEAU_AXIAL
+ #-----------------------------------------
+ nb1=fsvi[3] # nbgrma ou nbzone
+ if nb1==0 :
+ assert len(fsgm)==1,(fsgm,self)
+ else :
+ assert len(fsgm)==nb1,(fsgm,self)
+ sdu_tous_differents(self.FSGM,checker,comment='FAISCEAU_AXIAL')
+
+ elif type_faisceau == 4 : # COQUE_COAX
+ #-----------------------------------------
+ assert len(fsgm)==2,(fsgm,self)
+ sdu_tous_differents(self.FSGM,checker,comment='COQUE_COAX')
+
+
+
+ def check_FSGR(self,checker): # objet .FSGR
+ #===============================================================
+ fsgr=self.FSGR.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau in (1,2,4) :
+ #-----------------------------------------
+ assert not fsgr,(fsvi,self)
+
+ elif type_faisceau ==3 :
+ #-----------------------------------------
+ nbzone=fsvi[3]
+ nbtype=fsvi[4] # nombre de types de grille
+ if nbtype==0 :
+ assert not fsgr,(fsvi,self)
+ else : # il y a des grilles
+ lsimplif=fsvi[0]
+ if lsimplif :
+ nbgrille=fsvi[6+nbzone]
+ else :
+ nbgrille=fsvi[5]
+ assert len(fsgr)==nbgrille+6*nbtype,(fsgr,self)
+
+
+
+ def check_FSCR(self,checker): # objet .FSCR
+ #===============================================
+ fscr=self.FSCR.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau in (1,2,4) :
+ #-----------------------------------------
+ assert not fscr,(fsgm,self)
+
+ elif type_faisceau ==3 :
+ #-----------------------------------------
+ lsimplif=fsvi[0]
+ if lsimplif :
+ nbtube=fsvi[5]
+ assert len(fscr)==2*nbtube,(fscr,self)
+ else :
+ assert not fscr,(fsvi,self)
+
+
+
+ def check_UNIT_FAISCEAU(self,checker): # objet .UNIT.FAISCEAU
+ #===============================================================
+ unite=self.UNIT_FAISCEAU.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau in (2,3,4) :
+ #-----------------------------------------
+ assert not unite,(fsvi,self)
+
+ elif type_faisceau == 1 :
+ #-----------------------------------------
+ assert len(unite)==2,(unite,self)
+ assert unite[0] > 0 ,(unite,self)
+ assert unite[1] > 0 ,(unite,self)
+
+
+
+ def check_UNIT_GRAPPES(self,checker): # objet .UNIT.GRAPPES
+ #===============================================================
+ unite=self.UNIT_GRAPPES.get()
+ fsvi=self.FSVI.get()
+ type_faisceau, couplage= self.u_veri1()
+
+ if type_faisceau in (1,3,4) :
+ #-----------------------------------------
+ assert not unite,(fsvi,self)
+
+ elif type_faisceau == 2 :
+ #-----------------------------------------
+ if couplage :
+ assert len(unite)==2,(unite,self)
+ assert unite[0] > 0 ,(unite,self)
+ assert unite[1] > 0 ,(unite,self)
+ else :
+ assert not unite, (fsic,self)
--- /dev/null
+#@ MODIF sd_util SD DATE 19/04/2010 AUTEUR GREFFET N.GREFFET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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.
+# ======================================================================
+
+"""
+ Utilitaires pour la vérification des SD
+"""
+
+# pour utilisation dans eficas
+try:
+ import aster
+except:
+ pass
+
+import copy
+
+
+# 1) Utilitaires pour vérifier certaines propriétés.
+# Ces utilitaires ne provoquent pas d'arret mais écrivent des messages dans un "checker"
+# -----------------------------------------------------------------------------------------
+
+
+# 1.1 Utilitaires pour des scalaires :
+# ------------------------------------
+
+def sdu_assert(ojb, checker, bool,comment=''):
+ # Vérifie que le booléen (bool) est vrai
+ if not bool :
+ checker.err(ojb, "condition non respectée : (%s)" % (comment,))
+
+def sdu_compare(ojb, checker, val1, comp, val2, comment=''):
+ # Vérifie que la relation de comparaison entre val1 et val2 est respectée :
+ # comp= '==' / '!=' / '>=' / '>' / '<=' / '<'
+ comp=comp.strip()
+ ok = 0
+ if comp == "==" :
+ ok = val1 == val2
+ comp1 = "n'est pas égale au"
+ elif comp == "!=" :
+ ok = val1 != val2
+ comp1 = "est égale au"
+ elif comp == ">=" :
+ ok = val1 >= val2
+ comp1 = "est inférieure strictement au"
+ elif comp == "<=" :
+ ok = val1 <= val2
+ comp1 = "est supérieure strictement au"
+ elif comp == ">" :
+ ok = val1 > val2
+ comp1 = "est inférieure ou égale au"
+ elif comp == "<" :
+ ok = val1 < val2
+ comp1 = "est supérieure ou égale au"
+ else :
+ sdu_assert(ojb, checker, 0, 'sdu_compare: opérateur de comparaison interdit: '+comp)
+
+ if not ok :
+ checker.err(ojb, "condition non respectée pour le test suivant : longueur séquence (%s) %s nombre d'éléments différents dans la séquence (%s) (%s)" % (val1,comp1,val2,comment))
+
+
+# 1.2 Utilitaires pour des séquences :
+# ------------------------------------
+
+def sdu_tous_differents(ojb,checker,sequence=None,comment=''):
+ # Vérifie que les éléments de la séquence sont tous différents.
+ # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+ if sequence :
+ seq=sequence
+ else :
+ seq=ojb.get()
+
+ sdu_compare(ojb, checker, len(seq), '==', len(set(seq)), comment='Tous les éléments de la séquence devraient être différents, mais ils ne le sont pas'+comment)
+
+
+def sdu_tous_non_blancs(ojb,checker,sequence=None,comment=''):
+ # Vérifie que les éléments (chaines) de la séquence sont tous "non blancs".
+ # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+ if sequence :
+ seq=sequence
+ else :
+ seq=ojb.get()
+
+ for elem in seq :
+ assert len(elem.strip()) > 0 , (seq,self, 'tous "non blancs" '+comment)
+
+
+def sdu_tous_compris(ojb,checker,sequence=None,vmin=None,vmax=None,comment=''):
+ # Vérifie que toutes les valeurs de la sequence sont comprises entre vmin et vmax
+ # Les bornes vmin et vmax sont autorisées
+ # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+ assert (not vmin is None) or (not vmax is None),'Il faut fournir au moins une des valeurs vmin ou vmax'
+ if sequence :
+ seq=sequence
+ else:
+ seq=ojb.get()
+
+ ier = 0
+ for v in seq :
+ if vmin and v < vmin : ier = 1
+ if vmax and v > vmax : ier = 1
+ if ier == 1 : checker.err( ojb, "L'objet doit contenir des valeurs dans l'intervalle : [%s, %s] " % (vmin,vmax))
+
+
+
+def sdu_monotone(seqini) :
+ #-------------------------------
+ # vérifie qu'une séquence est triée par ordre croissant (ou décroissant)
+ # retourne :
+ # 3 : ni croissant ni décroissant (désordre)
+ # 1 : croissant
+ # -1 : décroissant
+ # 0 : constant
+
+ n=len(seqini)
+ if isinstance(seqini,tuple) :
+ seq=list(seqini)
+ else :
+ seq=seqini
+
+ seq2=copy.deepcopy(seq)
+ seq2.sort()
+ seq3=copy.deepcopy(seq)
+ seq3.sort()
+ seq3.reverse()
+
+ croiss=1
+ decroiss=1
+ for k in range(n) :
+ if seq[k] != seq2[k] :
+ croiss=0
+ if seq[k] != seq3[k] :
+ decroiss=0
+
+ if croiss==1 and decroiss==1 :
+ return 0
+ elif croiss==1 and decroiss==0 :
+ return 1
+ elif croiss==0 and decroiss==1 :
+ return -1
+ elif croiss==0 and decroiss==0 :
+ return 3
+
+
+
+# 2) Utilitaires de questionnement :
+# -----------------------------------------------------------------------------------------
+
+def sdu_nom_gd(numgd) :
+ # retourne le nom de la grandeur de numéro (numgd)
+ assert numgd > 0 and numgd <1000 , numgd
+ ptn=aster.getvectjev('&CATA.GD.NOMGD')
+ return ptn[numgd-1].strip()
+
+def sdu_licmp_gd(numgd) :
+ # retourne la liste des cmps de la grandeur de numéro (numgd)
+ nomgd=sdu_nom_gd(numgd)
+ nocmp=aster.getcolljev('&CATA.GD.NOMCMP')
+ return nocmp[nomgd.ljust(8)]
+
+
+
+# 3) Utilitaires pour la vérification de l'existence des objets :
+# -----------------------------------------------------------------------------------------
+
+def sdu_ensemble(lojb) :
+ # vérifie que les objets JEVEUX de lojb existent simultanément :
+ assert len(lojb) > 1 , lojb
+ lexi=[]
+ for obj1 in lojb :
+ lexi.append(obj1.exists)
+ for x in lexi[1:] :
+ assert x==lexi[0] , (lojb,lexi)
--- /dev/null
+#@ MODIF sd_vect_elem SD DATE 08/06/2009 AUTEUR PELLET J.PELLET
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+from SD.sd_matr_elem import sd_matr_elem
+
+class sd_vect_elem(sd_matr_elem):
+ nomj = SDNom(fin=19)
+ RELC = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', ))
+
+
+ def check_RELC(self, checker):
+ if not self.RELC.exists : return
+ lchar = self.RELC.get()
+ for nochar in lchar.keys() :
+ for k in lchar[nochar] :
+ assert k in (0,1) , lchar
+
--- /dev/null
+#@ MODIF sd_xfem SD DATE 11/01/2010 AUTEUR COLOMBO D.COLOMBO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 SD import *
+
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte import sd_carte
+from SD.sd_util import *
+
+
+
+#-------------------------------
+# I. sd fiss_xfem
+#-------------------------------
+
+class sd_fiss_xfem(AsBase):
+ nomj = SDNom(fin=8)
+
+ INFO = AsVK16(lonmax=2,) # info discontinuite
+
+# I.1) objets relatifs aux level sets
+
+ LNNO = sd_cham_no()
+ LTNO = sd_cham_no()
+ GRLNNO = sd_cham_no()
+ GRLTNO = sd_cham_no()
+ BASLOC = sd_cham_no()
+ FONDFISS = Facultatif(AsVR())
+ BASEFOND = Facultatif(AsVR())
+ FONDMULT = Facultatif(AsVI())
+ CARAFOND = Facultatif(AsVR(lonmax=12,))
+
+# I.2) objets relatifs a l'enrichissement
+
+ GROUP_MA_ENRI = AsVI()
+ GROUP_NO_ENRI = AsVI()
+ STNO = sd_cham_no()
+ STNOR = sd_cham_no()
+
+ MAILFISS_CTIP = Facultatif(AsVI(SDNom(nomj='.MAILFISS .CTIP')))
+ MAILFISS_HEAV = Facultatif(AsVI(SDNom(nomj='.MAILFISS .HEAV')))
+ MAILFISS_HECT = Facultatif(AsVI(SDNom(nomj='.MAILFISS .HECT')))
+ MAILFISS_INDIC = AsVI(SDNom(nomj='.MAILFISS .INDIC'), lonmax=6, )
+ LISNOH = Facultatif(AsVI())
+
+# I.3) objets relatifs a la propagation
+
+ PRO_MES_EL = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.MES_EL')))
+ PRO_NORMAL = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.NORMAL')))
+ PRO_RAYON_TORE = Facultatif(AsVR(SDNom(nomj='.PRO.RAYON_TORE'),lonmax=1,))
+ PRO_NOEUD_TORE = Facultatif(AsVL(SDNom(nomj='.PRO.NOEUD_TORE')))
+ PRO_MOD_GRILLE = Facultatif(AsVK8(SDNom(nomj='.PRO.MOD_GRILLE'),lonmax=1,))
+
+# I.4) objets relatifs au contact
+
+ BASCO = Facultatif(sd_cham_no())
+ LISCO = Facultatif(AsVR(SDNom(nomj='.LISCO')))
+ LISEQ = Facultatif(AsVI(SDNom(nomj='.LISEQ')))
+ LISRL = Facultatif(AsVI(SDNom(nomj='.LISRL')))
+ LISUP = Facultatif(AsVI(SDNom(nomj='.LISUP')))
+
+
+# 1.5) verifications d'existence :
+
+ def check_existence(self,checker) :
+ sdu_ensemble((self.FONDFISS, self.FONDMULT))
+ sdu_ensemble((self.LISRL, self.LISCO))
+ sdu_ensemble((self.PRO_MES_EL.CELD, self.PRO_NORMAL.CELD))
+ sdu_ensemble((self.PRO_RAYON_TORE, self.PRO_NOEUD_TORE))
+
+
+#-------------------------------
+# II. sd modele
+#-------------------------------
+
+class sd_modele_xfem(AsBase):
+ nomj = SDNom(fin=8)
+
+# II.1) objets relatifs aux sous-elements
+
+ TOPOSE_PIN = sd_cham_elem(SDNom(nomj='.TOPOSE.PIN'))
+ TOPOSE_CNS = sd_cham_elem(SDNom(nomj='.TOPOSE.CNS'))
+ TOPOSE_HEA = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA'))
+ TOPOSE_LON = sd_cham_elem(SDNom(nomj='.TOPOSE.LON'))
+ TOPOSE_AIN = sd_cham_elem(SDNom(nomj='.TOPOSE.AIN'))
+ TOPOSE_CRI = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI')))
+
+# II.2) objets relatifs aux facettes de contact
+
+ TOPOFAC_PI = sd_cham_elem(SDNom(nomj='.TOPOFAC.PI'))
+ TOPOFAC_AI = sd_cham_elem(SDNom(nomj='.TOPOFAC.AI'))
+ TOPOFAC_CF = sd_cham_elem(SDNom(nomj='.TOPOFAC.CF'))
+ TOPOFAC_LO = sd_cham_elem(SDNom(nomj='.TOPOFAC.LO'))
+ TOPOFAC_BA = sd_cham_elem(SDNom(nomj='.TOPOFAC.BA'))
+
+ TOPOFAC_GM = sd_cham_elem(SDNom(nomj='.TOPOFAC.GM'))
+ TOPOFAC_GE = sd_cham_elem(SDNom(nomj='.TOPOFAC.GE'))
+ TOPOFAC_OE = sd_cham_elem(SDNom(nomj='.TOPOFAC.OE'))
+ TOPOFAC_OM = sd_cham_elem(SDNom(nomj='.TOPOFAC.OM'))
+
+# II.3) objets concatenes relatifs aux level sets
+
+ LNNO = sd_cham_no()
+ LTNO = sd_cham_no()
+ BASLOC = sd_cham_no()
+ STNO = sd_cham_no()
+
+# II.4) autres objets
+
+ XFEM_CONT = AsVI(lonmax=1) # contact ou pas
+ FISS = AsVK8() # noms des fissures
+ NFIS = AsVI(lonmax=1,) # nombre de fissures
+ XMAFIS = sd_carte() # pour chaque maille : nom de la fissure
--- /dev/null
+#@ MODIF utilsd SD DATE 10/09/2007 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 COURTOIS M.COURTOIS
+
+"""
+ Utilitaire sur le catalogue des structures de données.
+"""
+
+__revision__ = "$Id: utilsd.py,v 1.1.2.2 2010-06-03 09:16:27 pnoyret Exp $"
+
+import sys
+import os
+from glob import glob
+from optparse import OptionParser
+
+# ----- get bibpyt location
+main = sys.argv[0]
+if os.path.islink(main):
+ main = os.path.realpath(main)
+bibpyt = os.path.normpath(os.path.join(
+ os.path.dirname(os.path.abspath(main)), os.pardir))
+sys.path.append(bibpyt)
+
+# -----------------------------------------------------------------------------
+def import_sd(nomsd):
+ """Import une SD.
+ """
+ try:
+ mod = __import__('SD.%s' % nomsd, globals(), locals(), [nomsd])
+ klass = getattr(mod, nomsd)
+ except (ImportError, AttributeError), msg:
+ print msg
+ raise ImportError, "impossible d'importer la SD '%s'" % nomsd
+ return klass
+
+# -----------------------------------------------------------------------------
+def tree(nom, *args):
+ """Retourne l'arbre des sd en arguments
+ """
+ l = []
+ for i, sd in enumerate(args):
+ if len(args) > 1 and i > 0:
+ l.append('-'*80)
+ sd_class = import_sd(sd)
+ tmpobj = sd_class(nomj=nom)
+ l.append(tmpobj.dump())
+ return os.linesep.join(l)
+
+# -----------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+if __name__ == '__main__':
+ # command arguments parser
+ parser = OptionParser(usage=__doc__)
+ parser.add_option('-t', '--tree', dest='tree',
+ action='store_true', default=False,
+ help="affiche une SD sous forme d'arbre")
+ parser.add_option('--nom', dest='nom',
+ action='store', default='^'*8,
+ help="nom du concept dans les représentations")
+ parser.add_option('-a', '--all', dest='all',
+ action='store_true', default=False,
+ help="construit la liste des SD à partir des fichiers 'sd_*.py' trouvés")
+
+ opts, l_sd = parser.parse_args()
+ if opts.all:
+ l_fich = glob(os.path.join(bibpyt, 'SD', 'sd_*.py'))
+ l_sd = [os.path.splitext(os.path.basename(f))[0] for f in l_fich]
+
+ if len(l_sd) == 0:
+ parser.error('quelle(s) structure(s) de données ?')
+
+ if opts.tree:
+ print tree(opts.nom, *l_sd)
+
--- /dev/null
+import os,sys
+sys.modules["Cata"]=sys.modules[__name__]
+rep_macro = os.path.dirname(__file__)
+sys.path.insert(0,rep_macro)
+rep_macro=os.path.join(rep_macro,'Macro')
+sys.path.insert(0,rep_macro)
+
+if sys.modules.has_key("SD"):
+ del sys.modules["SD"]
+for k in sys.modules.keys():
+ if k[0:3] == "SD.":
+ del sys.modules[k]
+
+
+from cata import *
+from math import ceil
+from Extensions import param2
+pi=param2.Variable('pi',pi)
--- /dev/null
+#& MODIF ENTETE DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+
+# faire que la division soit toujours réelle
+from __future__ import division
+
+import Accas
+from Accas import *
+from Accas import _F
+from math import sin, cos, tan, asin, acos, atan2, atan, sinh, cosh, tanh
+from math import pi ,exp,log, log10, sqrt
+import ops
+
+try:
+ import aster
+except ImportError:
+ pass
+
+
+# -----------------------------------------------------------------------------
+JdC = JDC_CATA(code='ASTER',
+ execmodul=None,
+ regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+ AU_MOINS_UN('FIN'),
+ A_CLASSER(('DEBUT','POURSUITE'),'FIN')))
+# Type le plus general
+class entier (ASSD):
+ def __init__(self,valeur=None,**args):
+ ASSD.__init__(self,**args)
+ self.valeur=valeur
+
+ def __adapt__(self,validator):
+ if validator.name == "list":
+ #validateur liste,cardinalité
+ return (self,)
+ elif validator.name == "type":
+ #validateur type
+ return validator.adapt(self.valeur or 0)
+ else:
+ #validateur into et valid
+ return self
+
+class reel(ASSD):
+ def __init__(self,valeur=None,**args):
+ ASSD.__init__(self,**args)
+ self.valeur=valeur
+
+ def __call__(self):
+ return self.valeur
+
+ def __adapt__(self,validator):
+ if validator.name == "list":
+ #validateur liste,cardinalité
+ return (self,)
+ elif validator.name == "type":
+ #validateur type
+ return validator.adapt(self.valeur or 0.)
+ else:
+ #validateur into et valid
+ return self
+
+# -----------------------------------------------------------------------------
+# Type geometriques
+class no (GEOM):pass
+class grno(GEOM):pass
+class ma (GEOM):pass
+class grma(GEOM):pass
+
+# -----------------------------------------------------------------------------
+from SD.co_cabl_precont import cabl_precont
+from SD.co_cara_elem import cara_elem
+from SD.co_cham_mater import cham_mater
+from SD.co_char_acou import char_acou
+from SD.co_char_cine_acou import char_cine_acou
+from SD.co_char_cine_meca import char_cine_meca
+from SD.co_char_cine_ther import char_cine_ther
+from SD.co_char_meca import char_meca
+from SD.co_char_ther import char_ther
+from SD.co_contact import char_contact
+from SD.co_compor import compor_sdaster
+from SD.co_courbe import courbe_sdaster
+from SD.co_fiss_xfem import fiss_xfem
+from SD.co_fond_fiss import fond_fiss
+from SD.co_interf_dyna_clas import interf_dyna_clas
+from SD.co_gfibre import gfibre_sdaster
+from SD.co_listis import listis_sdaster
+from SD.co_list_inst import list_inst
+from SD.co_melasflu import melasflu_sdaster
+from SD.co_mode_cycl import mode_cycl
+from SD.co_nume_ddl_gene import nume_ddl_gene
+from SD.co_nume_ddl import nume_ddl_sdaster
+from SD.co_sd_feti import sd_feti_sdaster
+from SD.co_spectre import spectre_sdaster
+from SD.co_surface import surface_sdaster
+from SD.co_tran_gene import tran_gene
+from SD.co_type_flui_stru import type_flui_stru
+
+# -----------------------------------------------------------------------------
+# modeles :
+from SD.co_modele import modele_sdaster
+from SD.co_modele_gene import modele_gene
+
+# -----------------------------------------------------------------------------
+# materiau
+from SD.co_mater import mater_sdaster
+
+# -----------------------------------------------------------------------------
+# macro-elements :
+from SD.co_macr_elem_dyna import macr_elem_dyna
+from SD.co_macr_elem_stat import macr_elem_stat
+
+# -----------------------------------------------------------------------------
+# liste :
+from SD.co_listr8 import listr8_sdaster
+
+# -----------------------------------------------------------------------------
+# maillage :
+from SD.co_maillage import maillage_sdaster
+from SD.co_squelette import squelette
+
+# -----------------------------------------------------------------------------
+# champs
+from SD.co_champ import cham_gd_sdaster
+from SD.co_cham_no import cham_no_sdaster
+from SD.co_carte import carte_sdaster
+from SD.co_cham_elem import cham_elem
+
+# -----------------------------------------------------------------------------
+# resultat : (evol_sdaster,mode_stat,mode_meca)
+from SD.co_resultat import resultat_sdaster, resultat_jeveux
+from SD.co_resultat_dyn import resultat_dyn
+from SD.co_mode_meca import mode_meca
+
+# -----------------------------------------------------------------------------
+class acou_harmo (resultat_dyn):pass
+class dyna_harmo (resultat_dyn):pass
+class dyna_trans (resultat_dyn):pass
+class harm_gene (resultat_dyn):pass
+class mode_acou (resultat_dyn):pass
+class mode_flamb (resultat_dyn):pass
+class mode_gene (resultat_dyn):pass
+
+# -----------------------------------------------------------------------------
+class comb_fourier (resultat_sdaster):pass
+class fourier_elas (resultat_sdaster):pass
+class fourier_ther (resultat_sdaster):pass
+class mult_elas (resultat_sdaster):pass
+class theta_geom (resultat_sdaster):pass
+
+# -----------------------------------------------------------------------------
+# resultat_sdaster/evol_sdaster :
+class evol_sdaster(resultat_sdaster):pass
+class evol_char(evol_sdaster):pass
+class evol_elas(evol_sdaster):pass
+class evol_noli(evol_sdaster):pass
+class evol_ther(evol_sdaster):pass
+class evol_varc(evol_sdaster):pass
+
+# -----------------------------------------------------------------------------
+# resultat_sdaster/mode_meca :
+class mode_meca_c(mode_meca):pass
+
+# -----------------------------------------------------------------------------
+# fonctions / nappe / para_sensi
+from SD.co_fonction import fonction_sdaster, para_sensi, fonction_c, nappe_sdaster
+
+# -----------------------------------------------------------------------------
+# matr_asse :
+from SD.co_matr_asse import matr_asse
+from SD.co_matr_asse_gene import matr_asse_gene
+from SD.co_matr_asse_gene import matr_asse_gene_r
+from SD.co_matr_asse_gene import matr_asse_gene_c
+
+from SD.co_matr_asse_gd import matr_asse_gd, \
+ matr_asse_depl_r, matr_asse_depl_c, \
+ matr_asse_pres_r, matr_asse_pres_c, \
+ matr_asse_temp_r, matr_asse_temp_c
+
+# -----------------------------------------------------------------------------
+# matr_elem :
+from SD.co_matr_elem import matr_elem, \
+ matr_elem_depl_r, matr_elem_depl_c, \
+ matr_elem_pres_c, \
+ matr_elem_temp_r
+
+# -----------------------------------------------------------------------------
+# table :
+from SD.co_table import table_sdaster, table_jeveux
+from SD.co_table_fonction import table_fonction
+from SD.co_table_container import table_container
+
+# -----------------------------------------------------------------------------
+# vect_asse_gene :
+from SD.co_vect_asse_gene import vect_asse_gene
+
+# -----------------------------------------------------------------------------
+# vect_elem :
+from SD.co_vect_elem import vect_elem, \
+ vect_elem_depl_r, \
+ vect_elem_pres_r, vect_elem_pres_c, \
+ vect_elem_temp_r
+
+#& MODIF COMMUN DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# 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 PROIX J.M.PROIX
+def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN#
+ RELATION =SIMP( statut='o',typ='TXM',defaut="ELAS",into=C_RELATION()),
+ b_monox = BLOC(condition = "RELATION == 'MONOCRISTAL' ",
+ fr="SD issue de DEFI_COMPOR",
+ COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+ b_polyx = BLOC(condition = "RELATION == 'POLYCRISTAL' ",
+ fr="SD issue de DEFI_COMPOR",
+ COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+ b_zmat = BLOC(condition = "RELATION == 'ZMAT' ",
+ fr="Comportement de la bibliotheque Zmat",
+ NB_VARI =SIMP(statut='o',typ='I',max=1),
+ UNITE =SIMP(statut='o',typ='I',max=1),),
+
+# KITs
+ b_kit_ddi = BLOC(condition = "RELATION == 'KIT_DDI' ",
+ fr="relations de couplage fluage-plasticite",
+ RELATION_KIT =SIMP(statut='o',typ='TXM',min=2,max=2,validators=NoRepeat(),
+ into=(
+ "VMIS_CINE_LINE",
+ "VMIS_ISOT_TRAC",
+ "VMIS_ISOT_LINE",
+ "VMIS_ISOT_PUIS",
+ "GLRC_DM",
+ "GRANGER_FP",
+ "GRANGER_FP_INDT",
+ "GRANGER_FP_V",
+ "BETON_UMLV_FP",
+ "ROUSS_PR",
+ "BETON_DOUBLE_DP",
+ "ENDO_ISOT_BETON",
+ "MAZARS"
+ ),),
+ ),
+ b_kit_thm = BLOC(condition = "RELATION in ['KIT_HHM','KIT_HH','KIT_HM','KIT_THHM','KIT_THH','KIT_THM','KIT_THV']",
+ fr="lois de comportements thermo-hydro-mecaniques",
+ RELATION_KIT =SIMP(statut='o',typ='TXM',max=9,validators=NoRepeat(),
+ into=(
+# MECA
+ "ELAS",
+ "CJS",
+ "HUJEUX",
+ "CAM_CLAY",
+ "BARCELONE",
+ "LAIGLE",
+ "LETK",
+ "DRUCK_PRAGER",
+ "DRUCK_PRAG_N_A",
+ "VISC_DRUC_PRAG",
+ "ELAS_GONF",
+ "HOEK_BROWN_EFF",
+ "HOEK_BROWN_TOT",
+ "MAZARS",
+ "ENDO_ISOT_BETON",
+ "JOINT_BANDIS",
+# THMC
+ "GAZ",
+ "LIQU_SATU",
+ "LIQU_GAZ_ATM",
+ "LIQU_VAPE_GAZ",
+ "LIQU_AD_GAZ_VAPE",
+ "LIQU_AD_GAZ",
+ "LIQU_VAPE",
+ "LIQU_GAZ",
+# HYDR
+ "HYDR_UTIL",
+ "HYDR_VGM",
+ "HYDR",
+ "HYDR_ENDO",
+ ),),
+ ),
+ b_kit_meta = BLOC(condition = "RELATION in ('META_LEMA_ANI','META_P_CL_PT_RE','META_P_CL_PT','META_P_CL_RE','META_P_CL',\
+ 'META_P_IL_PT_RE','META_P_IL_PT','META_P_IL_RE','META_P_IL','META_P_INL_PT_RE','META_P_INL_PT','META_P_INL_RE','META_P_INL',\
+ 'META_V_CL_PT_RE','META_V_CL_PT','META_V_CL_RE','META_V_CL','META_V_IL_PT_RE','META_V_IL_PT','META_V_IL_RE','META_V_IL',\
+ 'META_V_INL_PT_RE','META_V_INL_PT','META_V_INL_RE','META_V_INL')",
+ fr="nombre de phases metallurgiques",
+ RELATION_KIT =SIMP(statut='o',typ='TXM',max=1,validators=NoRepeat(),
+ into=("ACIER","ZIRC"),),
+ ),
+
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT",
+ into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GREEN_REAC")),
+ ALGO_C_PLAN =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+ RESI_DEBO_MAXI =SIMP(statut='f',typ='R',fr="Critère d'arret absolu pour assurer la condition de contraintes planes",),
+
+ b_resideborst =BLOC(condition = " RESI_DEBO_MAXI == None ",
+ fr="Critère d'arret relatif pour assurer la condition de contraintes planes",
+ RESI_DEBO_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ),
+
+ ALGO_1D =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+ ITER_MAXI_DEBORST =SIMP(statut='f',typ='I',defaut= 1),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+
+ b_redec_local = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",
+ fr="Nombre de redécoupages internes du pas de temps",
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE","IMPLICITE_RELI")),
+ TYPE_MATR_TANG =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")),
+
+ b_perturb =BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ",
+ fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation",
+ VALE_PERT_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-5),
+ ),
+
+ b_tangsec = BLOC(condition = " TYPE_MATR_TANG == 'TANGENTE_SECANTE' ",
+ fr="Modification evolutive de la matrice tangente/secante",
+ SEUIL =SIMP(statut='f',typ='R',defaut= 3. ),
+ AMPLITUDE =SIMP(statut='f',typ='R',defaut= 1.5 ),
+ TAUX_RETOUR =SIMP(statut='f',typ='R',defaut= 0.05 ),
+ ),
+
+ PARM_THETA =SIMP(statut='f',typ='R',defaut= 1. ),
+ PARM_ALPHA =SIMP(statut='f',typ='R',defaut= 1. ),
+
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ ) ;
+#& MODIF COMMUN DATE 12/04/2010 AUTEUR MICHEL S.MICHEL
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 REZETTE C.REZETTE
+def C_CONVERGENCE() : return FACT(statut='d',
+ regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
+ b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None",
+ regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE','FORC_REFE',
+ 'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE','DEPL_REFE','LAGR_REFE'),),
+ FORC_REFE =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Force et Moment de référence pour les éléments de structure."),
+ SIGM_REFE =SIMP(statut='f',typ='R'),
+ DEPL_REFE =SIMP(statut='f',typ='R'),
+ EPSI_REFE =SIMP(statut='f',typ='R'),
+ FLUX_THER_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD1_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD2_REFE =SIMP(statut='f',typ='R'),
+ VARI_REFE =SIMP(statut='f',typ='R'),
+ LAGR_REFE =SIMP(statut='f',typ='R'),
+ ),
+ RESI_REFE_RELA =SIMP(statut='f',typ='R'),
+ RESI_GLOB_MAXI =SIMP(statut='f',typ='R'),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
+ RESI_COMP_RELA =SIMP(statut='f',typ='R'),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10),
+ ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25),
+ TYPE =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
+ b_plateau =BLOC(condition = "TYPE == 'PLATEAU' ",
+
+ PLATEAU_ITER =SIMP(statut='f',typ='I',defaut=3, val_min =2),
+ PLATEAU_RELA =SIMP(statut='f',typ='R',defaut=1E-3),
+ ),
+
+
+ ARRET =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ );
+#& MODIF COMMUN DATE 08/09/2009 AUTEUR SFAYOLLE S.FAYOLLE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 SFAYOLLE
+
+def C_IMPL_EX() : return FACT(statut='d',
+ REAC_INCR =SIMP(statut='f',typ='I',defaut= 1),
+ PREDICTION =SIMP(statut='f',typ='TXM',defaut="TANGENTE"),
+ );
+#& MODIF COMMUN DATE 20/07/2009 AUTEUR GENIAUT S.GENIAUT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 REZETTE C.REZETTE
+def C_INCREMENT() : return FACT(statut='o',
+ regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+ EXCLUS('NUME_INST_FIN','INST_FIN'),),
+ LIST_INST =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
+ NUME_INST_INIT =SIMP(statut='f',typ='I'),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ NUME_INST_FIN =SIMP(statut='f',typ='I'),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ ERRE_TEMPS =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+ fr="Adaptation temporelle pour les modélisations HM instationnaires",
+ ang="Time adaptation for unstationary HM models"),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+ );
+#& MODIF COMMUN DATE 07/07/2009 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 REZETTE C.REZETTE
+def C_NEWTON() : return FACT(statut='d',
+ REAC_INCR =SIMP(statut='f',typ='I',defaut= 1,val_min=0),
+ PREDICTION =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+ MATRICE =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+ PAS_MINI_ELAS =SIMP(statut='f',typ='R',val_min=0.0),
+ REAC_ITER =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ REAC_ITER_ELAS =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ );
+#& MODIF COMMUN DATE 27/04/2010 AUTEUR DESROCHES X.DESROCHES
+# 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 VABHHTS J.PELLET
+# ce fichier contient la liste des "into" possibles pour le mot cle NOM_CHAM
+# c'est a dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD)
+def C_NOM_CHAM_INTO() : return ("ACCE", #COMMUN#
+ "ACCE_ABSOLU",
+ "ALPH0_ELGA_EPSP",
+ "ALPHP_ELGA_ALPH0",
+ "COMPORTEMENT",
+ "COMPORTHER",
+ "CRIT_ELNO_RUPT",
+ "DCHA_ELGA_SIGM",
+ "DCHA_ELNO_SIGM",
+ "DCHA_NOEU_SIGM",
+ "DEDE_ELNO_DLDE",
+ "DEDE_NOEU_DLDE",
+ "DEGE_ELNO_DEPL",
+ "DEGE_NOEU_DEPL",
+ "DEPL",
+ "DEPL_ABSOLU",
+ "DESI_ELNO_DLSI",
+ "DESI_NOEU_DLSI",
+ "DETE_ELNO_DLTE",
+ "DETE_NOEU_DLTE",
+ "DISS_ELGA",
+ "DISS_ELNO_ELGA",
+ "DURT_ELGA_META",
+ "DURT_ELNO_META",
+ "DURT_NOEU_META",
+ "ECIN_ELEM_DEPL",
+ "EFGE_ELNO_CART",
+ "EFGE_ELNO_DEPL",
+ "EFGE_NOEU_CART",
+ "EFGE_NOEU_DEPL",
+ "ENDO_ELGA",
+ "ENDO_ELNO_ELGA",
+ "ENDO_ELNO_SIGA",
+ "ENDO_ELNO_SINO",
+ "ENDO_NOEU_SINO",
+ "ENEL_ELGA",
+ "ENEL_ELNO_ELGA",
+ "ENEL_NOEU_ELGA",
+ "EPEQ_ELNO_TUYO",
+ "EPVC_ELGA",
+ "EPVC_ELNO",
+ "EPFD_ELGA",
+ "EPFD_ELNO",
+ "EPFP_ELGA",
+ "EPFP_ELNO",
+ "EPME_ELGA_DEPL",
+ "EPME_ELNO_DEPL",
+ "EPMG_ELGA_DEPL",
+ "EPMG_ELNO_DEPL",
+ "EPMG_NOEU_DEPL",
+ "EPOT_ELEM_DEPL",
+ "EPSA_ELNO",
+ "EPSA_NOEU",
+ "EPSG_ELGA_DEPL",
+ "EPSG_ELNO_DEPL",
+ "EPSG_NOEU_DEPL",
+ "EPSI_ELGA_DEPL",
+ "EPSI_ELNO_DEPL",
+ "EPSI_ELNO_TUYO",
+ "EPSI_NOEU_DEPL",
+ "EPSP_ELGA",
+ "EPSP_ELNO",
+ "EPSP_NOEU",
+ "EQUI_ELGA_EPME",
+ "EQUI_ELGA_EPSI",
+ "EQUI_ELGA_SIGM",
+ "EQUI_ELNO_EPME",
+ "EQUI_ELNO_EPSI",
+ "EQUI_ELNO_SIGM",
+ "EQUI_NOEU_EPME",
+ "EQUI_NOEU_EPSI",
+ "EQUI_NOEU_SIGM",
+ "ERRE_ELEM_SIGM",
+ "ERRE_ELEM_TEMP",
+ "ERRE_ELNO_ELEM",
+ "ERRE_NOEU_ELEM",
+ "ERZ1_ELEM_SIGM",
+ "ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM",
+ "QIRE_ELNO_ELEM",
+ "QIRE_NOEU_ELEM",
+ "QIZ1_ELEM_SIGM",
+ "QIZ2_ELEM_SIGM",
+ "SING_ELEM",
+ "SING_ELNO_ELEM",
+ "ETOT_ELEM",
+ "ETOT_ELGA",
+ "ETOT_ELNO_ELGA",
+ "EXTR_ELGA_VARI",
+ "EXTR_ELNO_VARI",
+ "EXTR_NOEU_VARI",
+ "FLHN_ELGA",
+ "FLUX_ELGA_TEMP",
+ "FLUX_ELNO_TEMP",
+ "FLUX_NOEU_TEMP",
+ "FORC_NODA",
+ "FSUR_2D",
+ "FSUR_3D",
+ "FVOL_2D",
+ "FVOL_3D",
+ "GRAD_NOEU_THETA",
+ "HYDR_ELNO_ELGA",
+ "HYDR_NOEU_ELGA",
+ "INDI_LOCA_ELGA",
+ "INTE_ELNO_ACTI",
+ "INTE_ELNO_REAC",
+ "INTE_NOEU_ACTI",
+ "INTE_NOEU_REAC",
+ "IRRA",
+ "LANL_ELGA",
+ "META_ELGA_TEMP",
+ "META_ELNO_TEMP",
+ "META_NOEU_TEMP",
+ "MODE_FLAMB",
+ "PMPB_ELGA_SIEF",
+ "PMPB_ELNO_SIEF",
+ "PMPB_NOEU_SIEF",
+ "PRES",
+ "PRES_DBEL_DEPL",
+ "PRES_ELNO_DBEL",
+ "PRES_ELNO_IMAG",
+ "PRES_ELNO_REEL",
+ "PRES_NOEU_DBEL",
+ "PRES_NOEU_IMAG",
+ "PRES_NOEU_REEL",
+ "PROJ_ELEM_SIGN",
+ "PROJ_ELEM_SIGT",
+ "PROJ_ELEM_SIT1",
+ "PROJ_ELEM_SIT2",
+ "RADI_ELGA_SIGM",
+ "RADI_ELNO_SIGM",
+ "RADI_NOEU_SIGM",
+ "REAC_NODA",
+ "SIEF_ELGA",
+ "SIEF_ELGA_DEPL",
+ "SIEF_ELNO",
+ "SIEF_ELNO_ELGA",
+ "SIEF_NOEU",
+ "SIEF_NOEU_ELGA",
+ "SIEF_SENO_SEGA",
+ "SIEQ_ELNO_TUYO",
+ "SIGM_ELNO_CART",
+ "SIGM_ELNO_COQU",
+ "SIGM_ELNO_DEPL",
+ "SIGM_ELNO_SIEF",
+ "SIGM_ELNO_TUYO",
+ "SIGM_NOEU_CART",
+ "SIGM_NOEU_COQU",
+ "SIGM_NOEU_DEPL",
+ "SIGM_NOEU_SIEF",
+ "SIGM_NOZ1_ELGA",
+ "SIGM_NOZ2_ELGA",
+ "SIPO_ELNO_DEPL",
+ "SIPO_ELNO_SIEF",
+ "SIPO_NOEU_DEPL",
+ "SIPO_NOEU_SIEF",
+ "SIRE_ELNO_DEPL",
+ "SIRE_NOEU_DEPL",
+ "SOUR_ELGA_ELEC",
+ "TEMP",
+ "THETA",
+ "VALE_CONT",
+ "VALE_NCOU_MAXI",
+ "VARI_ELGA",
+ "VARI_ELNO",
+ "VARI_ELNO_COQU",
+ "VARI_ELNO_ELGA",
+ "VARI_ELNO_TUYO",
+ "VARI_NOEU",
+ "VARI_NOEU_ELGA",
+ "VITE",
+ "VITE_ABSOLU",
+ "VITE_VENT",
+ )
+#& MODIF COMMUN DATE 14/12/2009 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# RESPONSABLE DESROCHES X.DESROCHES
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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.
+# ======================================================================
+# ce fichier contient la liste des noms des grandeurs de CODE_ASTER
+def C_NOM_GRANDEUR() : return ( #COMMUN#
+"ABSC_R",
+"ADRSJEVE",
+"ADRSJEVN",
+"CAARPO",
+"CACABL",
+"CACOQU",
+"CADISA",
+"CADISK",
+"CADISM",
+"CAFI_R",
+"CAGEBA",
+"CAGEPO",
+"CAGNBA",
+"CAGNPO",
+"CAMASS",
+"CAORIE",
+"CAPOUF",
+"CARCRI",
+"CASECT",
+"CHLI_R",
+"CODE_I",
+"COEH_F",
+"COEH_R",
+"COMPOR",
+"CORR_R",
+"CRRU_R",
+"DBEL_R",
+"DCEL_I",
+"DDLI_C",
+"DDLI_F",
+"DDLI_R",
+"DDLM_C",
+"DDLM_R",
+"DEPL_C",
+"DEPL_F",
+"DEPL_R",
+"DISS_R",
+"DOMMAG",
+"DURT_R",
+"ENER_R",
+"EPSI_C",
+"EPSI_F",
+"EPSI_R",
+"ERRE_R",
+"FACY_R",
+"FELECR",
+"FISS_R",
+"FLAPLA",
+"FLUN_F",
+"FLUN_R",
+"FLUX_F",
+"FLUX_R",
+"FORC_C",
+"FORC_F",
+"FORC_R",
+"FREQ_R",
+"FTHM_F",
+"FTHM_R",
+"G",
+"GEOM_R",
+"G_DEPL_R",
+"HARMON",
+"HYDR_R",
+"IMPE_C",
+"IMPE_F",
+"IMPE_R",
+"IND_LOCA",
+"INFC_R",
+"INST_R",
+"INTE_R",
+"INTLOC",
+"IRRA_R",
+"ITECREL",
+"ITEDEC",
+"J",
+"LISTMA",
+"MACOMP",
+"MASS_R",
+"MATE_F",
+"NBSP_I",
+"NEUT_F",
+"NEUT_I",
+"NEUT_K16",
+"NEUT_K24",
+"NEUT_K8",
+"NEUT_R",
+"NUMC_I",
+"NUMMOD",
+"ONDE_F",
+"ONDE_R",
+"PESA_R",
+"PILO_K",
+"PILO_R",
+"POSI",
+"PREC",
+"PRES_C",
+"PRES_F",
+"PRES_R",
+"RAYO_F",
+"RAYO_R",
+"RCCM_K",
+"RCCM_R",
+"RESCREL",
+"RICE_TRA",
+"ROTA_R",
+"SECTION",
+"SIEF_C",
+"SIEF_R",
+"SIZZ_R",
+"SOUR_F",
+"SOUR_R",
+"SPMA_R",
+"STAOUDYN",
+"TEMP_C",
+"TEMP_F",
+"TEMP_R",
+"THETA",
+"VALO_R",
+"VANL_R",
+"VAR2_R",
+"VARI_R",
+"VENTCX_F",
+"VNOR_C",
+"VNOR_F",
+"VOISIN",
+"WEIBULL",
+"XCONTAC",
+ )
+#& MODIF COMMUN DATE 29/03/2007 AUTEUR GRANET S.GRANET
+# 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.
+# ======================================================================
+# ce fichier contient la liste des PARA possibles pour les fonctions et les nappes
+def C_PARA_FONCTION() : return ( #COMMUN#
+ "DX","DY","DZ","DRX","DRY","DRZ","TEMP","TSEC",
+ "INST","X","Y","Z","EPSI","META","FREQ","PULS","DSP",
+ "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+ "PGAZ","PCAP","PLIQ","PVAP","PAD","VITE","ENDO",
+ "NORM","EPAIS","NEUT1","NEUT2",)
+#& MODIF COMMUN DATE 07/07/2009 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 REZETTE C.REZETTE
+def C_RECH_LINEAIRE() : return FACT(statut='f',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),
+ RESI_LINE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+ ITER_LINE_MAXI =SIMP(statut='f',typ='I',defaut= 3,val_max=999),
+ ITER_LINE_CRIT =SIMP(statut='f',typ='I',defaut= 20),
+ PAS_MINI_CRIT =SIMP(statut='f',typ='R',defaut=0.0E+0),
+ RHO_MIN =SIMP(statut='f',typ='R',defaut=1.0E-2),
+ RHO_MAX =SIMP(statut='f',typ='R',defaut=1.0E+1),
+ RHO_EXCL =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
+ );
+#& MODIF COMMUN DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 PROIX J.M.PROIX
+def C_RELATION() : return ( "ELAS", # RESP. : PROIX J.M.PROIX #COMMUN#
+ "ARME", # RESP. : PEYRARD C.PEYRARD
+ "ASSE_CORN", # RESP. : PEYRARD C.PEYRARD
+ "BARCELONE", # RESP. : ELGHARIB J.ELGHARIB
+ "BETON_DOUBLE_DP", # RESP. : ELGHARIB J.ELGHARIB
+ "BETON_RAG", # RESP. : DEBONNIERES P.DEBONNIERES
+ "BETON_REGLE_PR", # RESP. : NECS
+ "BETON_UMLV_FP", # RESP. : LEPAPE Y.LEPAPE
+ "CAM_CLAY", # RESP. : ELGHARIB J.ELGHARIB
+ "CJS", # RESP. : CHAVANT C.CHAVANT
+ "CORR_ACIER", # RESP. : LEPAPE Y.LEPAPE
+ "CZM_EXP_REG", # RESP. : LAVERNE J.LAVERNE
+ "CZM_EXP", # RESP. : LAVERNE J.LAVERNE
+ "CZM_LIN_REG", # RESP. : LAVERNE J.LAVERNE
+ "CZM_OUV_MIX", # RESP. : LAVERNE J.LAVERNE
+ "CZM_TAC_MIX", # RESP. : LAVERNE J.LAVERNE
+ "CZM_FAT_MIX", # RESP. : LAVERNE J.LAVERNE
+ "DIS_BILI_ELAS", # RESP. : FLEJOU J.L.FLEJOU
+ "DIS_CHOC", # RESP. : DEVESA G.DEVESA
+ "DIS_ECRO_CINE", # RESP. : FLEJOU J.L.FLEJOU
+ "DIS_GOUJ2E_ELAS", # RESP. : ANGLES J.ANGLES
+ "DIS_GOUJ2E_PLAS", # RESP. : ANGLES J.ANGLES
+ "DIS_GRICRA", # RESP. : FERNANDES R.FERNANDES
+ "DIS_VISC", # RESP. : FLEJOU J.L.FLEJOU
+ "DRUCK_PRAGER", # RESP. : FERNANDES R.FERNANDES
+ "DRUCK_PRAG_N_A", # RESP. : FERNANDES R.FERNANDES
+ "VISC_DRUC_PRAG", # RESP. : ELGHARIB J.ELGHARIB
+ "ELAS_GONF", # RESP. : GRANET S.GRANET
+ "ELAS_HYPER", # RESP. : ABBAS M.ABBAS
+ "ENDO_FRAGILE", # RESP. : MICHEL S.MICHEL
+ "ENDO_SCALAIRE", # RESP. : MICHEL S.MICHEL
+ "ENDO_ISOT_BETON", # RESP. : MICHEL S.MICHEL
+ "ENDO_ORTH_BETON", # RESP. : MICHEL S.MICHEL
+ "GATT_MONERIE", # RESP. : DEBONNIERES P.DEBONNIERES
+ "GLRC_DAMAGE", # RESP. : MARKOVIC D.MARKOVIC
+ "GLRC_DM", # RESP. : MARKOVIC D.MARKOVIC
+ "GRANGER_FP_INDT", # RESP. : ROSPARS C.ROSPARS
+ "GRANGER_FP", # RESP. : ROSPARS C.ROSPARS
+ "GRANGER_FP_V", # RESP. : ROSPARS C.ROSPARS
+ "GRAN_IRRA_LOG", # RESP. : FERNANDES R.FERNANDES
+ "GRILLE_CINE_LINE",# RESP. : ROSPARS C.ROSPARS
+ "GRILLE_ISOT_LINE",# RESP. : ROSPARS C.ROSPARS
+ "GRILLE_PINTO_MEN",# RESP. : ROSPARS C.ROSPARS
+ "HOEK_BROWN_EFF", # RESP. : CHAVANT C.CHAVANT
+ "HOEK_BROWN", # RESP. : CHAVANT C.CHAVANT
+ "HOEK_BROWN_TOT", # RESP. : CHAVANT C.CHAVANT
+ "HUJEUX", # RESP. : FOUCAULT A.FOUCAULT
+ "IRRAD3M", # RESP. : FLEJOU J.L.FLEJOU
+ "JOINT_BA", # RESP. : MICHEL S.MICHEL
+ "JOINT_BANDIS",
+ "JOINT_MECA_RUPT", # RESP. : KAZYMYRENKO C.KAZYMYRENKO
+ "KIT_DDI", # RESP. : CHAVANT C.CHAVANT
+ "KIT_HHM", # RESP. : GRANET S.GRANET
+ "KIT_HH", # RESP. : GRANET S.GRANET
+ "KIT_HM", # RESP. : GRANET S.GRANET
+ "KIT_THHM", # RESP. : GRANET S.GRANET
+ "KIT_THH", # RESP. : GRANET S.GRANET
+ "KIT_THM", # RESP. : GRANET S.GRANET
+ "KIT_THV", # RESP. : GRANET S.GRANET
+ "LABORD_1D", # RESP. : VOLDOIRE F.VOLDOIRE
+ "LAIGLE", # RESP. : ELGHARIB J.ELGHARIB
+ "LEMAITRE_IRRA", # RESP. : FERNANDES R.FERNANDES
+ "LEMAITRE", # RESP. : DEBONNIERES P.DEBONNIERES
+ "LEMA_SEUIL", # RESP. : LECLERC S.LECLERC
+ "LETK", # RESP. : ELGHARIB J.ELGHARIB
+ "LMARC_IRRA", # RESP. : FERNANDES R.FERNANDES
+ "LMARC", # RESP. : None
+ "MAZARS", # RESP. : MICHEL S.MICHEL
+ "META_LEMA_ANI", # RESP. : CANO V.CANO
+ "META_P_CL_PT_RE", # RESP. : CANO V.CANO
+ "META_P_CL_PT", # RESP. : CANO V.CANO
+ "META_P_CL_RE", # RESP. : CANO V.CANO
+ "META_P_CL", # RESP. : CANO V.CANO
+ "META_P_IL_PT_RE", # RESP. : CANO V.CANO
+ "META_P_IL_PT", # RESP. : CANO V.CANO
+ "META_P_IL_RE", # RESP. : CANO V.CANO
+ "META_P_IL", # RESP. : CANO V.CANO
+ "META_P_INL_PT_RE",# RESP. : CANO V.CANO
+ "META_P_INL_PT", # RESP. : CANO V.CANO
+ "META_P_INL_RE", # RESP. : CANO V.CANO
+ "META_P_INL", # RESP. : CANO V.CANO
+ "META_V_CL_PT_RE", # RESP. : CANO V.CANO
+ "META_V_CL_PT", # RESP. : CANO V.CANO
+ "META_V_CL_RE", # RESP. : CANO V.CANO
+ "META_V_CL", # RESP. : CANO V.CANO
+ "META_V_IL_PT_RE", # RESP. : CANO V.CANO
+ "META_V_IL_PT", # RESP. : CANO V.CANO
+ "META_V_IL_RE", # RESP. : CANO V.CANO
+ "META_V_IL", # RESP. : CANO V.CANO
+ "META_V_INL_PT_RE",# RESP. : CANO V.CANO
+ "META_V_INL_PT", # RESP. : CANO V.CANO
+ "META_V_INL_RE", # RESP. : CANO V.CANO
+ "META_V_INL", # RESP. : CANO V.CANO
+ "MONOCRISTAL", # RESP. : PROIX J.M.PROIX
+ "MULTIFIBRE", # RESP. : FLEJOU J.L.FLEJOU
+ "NORTON_HOFF", # RESP. : MICHEL S.MICHEL
+ "PINTO_MENEGOTTO", # RESP. : ROSPARS C.ROSPARS
+ "POLYCRISTAL", # RESP. : PROIX J.M.PROIX
+ "ROUSSELIER", # RESP. : CANO V.CANO
+ "ROUSS_PR", # RESP. : PARROT A.PARROT
+ "ROUSS_VISC", # RESP. : CANO V.CANO
+ "RUPT_FRAG", # RESP. : LAVERNE J.LAVERNE
+ "SANS", # RESP. : MICHEL S.MICHEL
+ "VENDOCHAB", # RESP. : PROIX J.M.PROIX
+ "VISC_CIN1_CHAB", # RESP. : PROIX J.M.PROIX
+ "VISC_CIN2_CHAB", # RESP. : PROIX J.M.PROIX
+ "VISC_CIN2_MEMO", # RESP. : PROIX J.M.PROIX
+ "VISC_IRRA_LOG", # RESP. : FERNANDES R.FERNANDES
+ "VISC_ISOT_LINE", # RESP. : MICHEL S.MICHEL
+ "VISC_ISOT_TRAC", # RESP. : PROIX J.M.PROIX
+ "VISCOCHAB", # RESP. : GENIAUT S.GENIAUT
+ "VISC_TAHERI", # RESP. : TAHERI S.TAHERI
+ "VMIS_ASYM_LINE", # RESP. : PROIX J.M.PROIX
+ "VMIS_CIN1_CHAB", # RESP. : PROIX J.M.PROIX
+ "VMIS_CIN2_CHAB", # RESP. : PROIX J.M.PROIX
+ "VMIS_CIN2_MEMO", # RESP. : PROIX J.M.PROIX
+ "VMIS_CINE_LINE", # RESP. : PROIX J.M.PROIX
+ "VMIS_ECMI_LINE", # RESP. : PROIX J.M.PROIX
+ "VMIS_ECMI_TRAC", # RESP. : PROIX J.M.PROIX
+ "VMIS_ISOT_LINE", # RESP. : PROIX J.M.PROIX
+ "VMIS_ISOT_PUIS", # RESP. : PROIX J.M.PROIX
+ "VMIS_ISOT_TRAC", # RESP. : PROIX J.M.PROIX
+ "VMIS_POU_FLEJOU", # RESP. : FLEJOU J.L.FLEJOU
+ "VMIS_POU_LINE", # RESP. : PROIX J.M.PROIX
+ "ZMAT", # RESP. : PROIX J.M.PROIX
+ "IMPLEX_FRAG", # RESP. : BARGELLINI R.BARGELLINI
+ "IMPLEX_ISOT_BETO",# RESP. : BARGELLINI R.BARGELLINI
+ "IMPLEX_ISOT_LINE",# RESP. : BARGELLINI R.BARGELLINI
+ )
+#& MODIF COMMUN DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 REZETTE C.REZETTE
+def C_SOLVEUR() : return FACT(statut='d',
+ METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' or METHODE=='FETI' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
+ MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ b_feti =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
+ PARTITION =SIMP(statut='o',typ=sd_feti_sdaster),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6,val_min=0.),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ REAC_RESI =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ TYPE_REORTHO_DD =SIMP(statut='f',typ='TXM',defaut="GSM",into=("SANS","GS","GSM","IGSM") ),
+ NB_REORTHO_DD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ NB_REORTHO_INST =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ PRE_COND =SIMP(statut='f',typ='TXM',defaut="LUMPE",into=("LUMPE","SANS") ),
+ SCALING =SIMP(statut='f',typ='TXM',defaut="MULT",into=("SANS","MULT") ),
+ VERIF_SDFETI =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ TEST_CONTINU =SIMP(statut='f',typ='R',defaut=1.E-8,val_min=0.),
+ INFO_FETI =SIMP(statut='f',typ='TXM',defaut='FFFFFFFFFFFFFFFFFFFFFFFF'),
+ STOCKAGE_GI =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","CAL") ),
+ NB_SD_PROC0 =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ ACCELERATION_SM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ), RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+
+
+ SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ );
+#& MODIF COMMUN DATE 27/06/2005 AUTEUR D6BHHJP J.P.LEFEBVRE
+# 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.
+# ======================================================================
+#
+# ce fichier contient la liste des "into" possibles pour le mot cle TYPE_CHAM
+def C_TYPE_CHAM_INTO() : #COMMUN#
+ l=[]
+ for gd in C_NOM_GRANDEUR() :
+ for typ in ("ELEM","ELNO","ELGA","CART","NOEU") :
+ l.append(typ+"_"+gd)
+ return tuple(l)
+
+#& MODIF COMMANDE DATE 22/09/2009 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 FLEJOU J-L.FLEJOU
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem,
+ fr="Affectation de caractéristiques à des éléments de structure",
+ reentrant='n',
+ UIinfo ={"groupes":("Modélisation",)},
+ regles = (AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','DISCRET_2D','MASSIF',
+ 'GRILLE','MULTIFIBRE','RIGI_PARASOL'),
+ PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE'),),
+ MODELE = SIMP(statut='o',typ=modele_sdaster ),
+ INFO = SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+ VERIF = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("MAILLE","NOEUD") ),
+
+# ============================================================================
+ POUTRE = FACT(statut= 'f',max= '**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),),
+ MAILLE = SIMP(statut= 'f',typ= ma ,validators= NoRepeat(),max= '**'),
+ GROUP_MA = SIMP(statut= 'f',typ= grma,validators= NoRepeat(),max= '**'),
+ SECTION = SIMP(statut= 'o',typ= 'TXM' ,into= ("GENERALE","RECTANGLE","CERCLE") ),
+ PREC_AIRE = SIMP(statut= 'f',typ= 'R',defaut= 0.01),
+ PREC_INERTIE = SIMP(statut= 'f',typ= 'R',defaut= 0.1),
+ b_generale = BLOC(condition = "SECTION == 'GENERALE'",
+ VARI_SECT = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+ b_constant = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 4 ,max= 15,
+ fr= "A,IY,IZ,JX sont des paramètres obligatoires",
+ into= ("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+ "JG","IYR2","IZR2","AI") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 4 ,max= 15), ),
+ b_homothetique = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 8 ,max= 30,
+ fr= "A1,A2,IY1,IY2,IZ1,IZ2,JX1,JX2 sont des paramètres obligatoires",
+ into= ("A1","IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+ "RZ1","RT1","JG1","IYR21","IZR21","AI1",
+ "A2","IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+ "RZ2","RT2","JG2","IYR22","IZR22","AI2") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 8 ,max= 30),),
+ ),
+ b_rectangle = BLOC(condition = "SECTION == 'RECTANGLE'",
+ VARI_SECT = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE","AFFINE"),defaut= "CONSTANT"),
+ b_constant = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 4,
+ into= ("H","EP", "HY","HZ","EPY","EPZ") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 4), ),
+ b_homothetique = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 8,
+ into= ("H1","HZ1","HY1","EP1","EPY1","EPZ1",
+ "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 8), ),
+ b_affine = BLOC(condition = "VARI_SECT == 'AFFINE'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 3 ,max= 6,
+ into= ("HY","EPY", "HZ1","EPZ1","HZ2","EPZ2") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 3 ,max= 6), ),
+ ),
+ b_cercle = BLOC(condition = "SECTION == 'CERCLE'",
+ VARI_SECT = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+ b_constant = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 2,
+ fr= "R est un paramètre obligatoire",
+ into= ("R","EP") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 2), ),
+ b_homothetique = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+ CARA = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 4,
+ fr= "R1, R2 sont des paramètres obligatoires",
+ into= ("R1","R2","EP1","EP2") ),
+ VALE = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 4), ),
+ MODI_METRIQUE = SIMP(statut= 'f',typ= 'TXM',defaut= "NON",into= ("OUI","NON") ),
+ FCX = SIMP(statut= 'f',typ= (fonction_sdaster,nappe_sdaster,formule) ),
+ TUYAU_NSEC = SIMP(statut= 'f',typ= 'I',val_max= 32,defaut= 16),
+ TUYAU_NCOU = SIMP(statut= 'f',typ= 'I',val_max= 10,defaut= 3),
+ ),
+ ),
+
+# ============================================================================
+ BARRE = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SECTION = SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+ b_generale = BLOC(condition = "SECTION=='GENERALE'",
+ CARA = SIMP(statut='o',typ='TXM',into=("A",) ),
+ VALE = SIMP(statut='o',typ='R',min=1,max=1 ), ),
+ b_rectangle = BLOC(condition = "SECTION=='RECTANGLE'",
+ CARA = SIMP(statut='o',typ='TXM',
+ into=("H","EP","HZ","HY","EPY","EPZ"),
+ validators=NoRepeat(),min=1,max=4 ),
+ VALE = SIMP(statut='o',typ='R',min=1,max=4 ), ),
+ b_cercle = BLOC(condition = "SECTION=='CERCLE'",
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),min=1,max=2,into=("R","EP") ),
+ VALE = SIMP(statut='o',typ='R',min=1,max=2 ), ),
+ FCX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+# ============================================================================
+ COQUE = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA' ),
+ PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),
+ AU_MOINS_UN('EPAIS','EPAIS_F',),
+ PRESENT_ABSENT('EPAIS','EPAIS_F',),
+ EXCLUS('ANGL_REP','VECTEUR'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ EPAIS = SIMP(statut='f',typ='R' ),
+ EPAIS_F = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),
+ ANGL_REP = SIMP(statut='f',typ='R',min=2,max=2),
+ VECTEUR = SIMP(statut='f',typ='R',min=3,max=3),
+ A_CIS = SIMP(statut='f',typ='R',defaut= 0.8333333E0),
+ COEF_RIGI_DRZ = SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+ COQUE_NCOU = SIMP(statut='f',typ='I',defaut= 1 ),
+ EXCENTREMENT = SIMP(statut='f',typ='R' ),
+ INER_ROTA = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MODI_METRIQUE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+
+# ============================================================================
+ CABLE = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ N_INIT = SIMP(statut='f',typ='R',defaut= 5000. ),
+ SECTION = SIMP(statut='f',typ='R' ),
+ FCX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+# ============================================================================
+ DISCRET = FACT(statut='f',max='**',
+ REPERE = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+ AMOR_HYST = SIMP(statut='f',typ='R' ),
+
+ SYME = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+ b_SYME_OUI = BLOC(condition="SYME=='OUI'",
+ fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+ into=("K_T_D_N", "K_T_D_L", "K_TR_D_N", "K_TR_D_L", "K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+ "M_T_D_N", "M_TR_D_N", "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+ "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+ # Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+ b_AK_T_D_N = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+ fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+ b_AK_T_D_L = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+ fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+ b_AK_TR_D_N = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+ fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+ b_AK_TR_D_L = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+ fr="SEGMENT: 6 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+ b_MAK_T_N = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+ fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+ b_MAK_T_L = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+ fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=21,max=21),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+ b_MAK_TR_N = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+ fr="NOEUD: 21 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=21,max=21),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+ b_MAK_TR_L = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+ fr="SEGMENT: 78 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=78,max=78),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=78 ,max=78 ),),
+ # Affection des caractéristiques de MASSE
+ b_M_T_D_N = BLOC(condition = "(CARA=='M_T_D_N')",
+ fr="NOEUD: 1 valeur de masse",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+ b_M_TR_D_N = BLOC(condition = "(CARA=='M_TR_D_N')",
+ fr="NOEUD: 1 valeur de masse, 6 valeurs du tenseur d'inertie, 3 composantes du vecteur d'excentrement",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=10,max=10),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+ ),
+ # éléments à matrice non-symétrique
+ # b_MAK_T_N_NS 'K_T_N' 'A_T_N' 'M_T_N'
+ # b_MAK_T_L_NS 'K_T_L' 'A_T_L' 'M_T_L'
+ # b_MAK_TR_N_NS 'K_TR_N' 'A_TR_N' 'M_TR_N'
+ # b_MAK_TR_L_NS 'K_TR_L' 'A_TR_L' 'M_TR_L'
+ b_SYME_NON = BLOC(condition="SYME=='NON'",
+ fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+ into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+ "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+ "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+ # Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+ b_MAK_T_N_NS = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+ fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=9 ,max=9 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+ b_MAK_T_L_NS = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+ fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=36,max=36),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+ b_MAK_TR_N_NS = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+ fr="NOEUD: 36 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=36,max=36),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+ b_MAK_TR_L_NS = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+ fr="SEGMENT: 144 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=144,max=144),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=144 ,max=144 ),),
+ ),
+ ),
+# ============================================================================
+ DISCRET_2D = FACT(statut='f',max='**',
+ REPERE = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+ AMOR_HYST = SIMP(statut='f',typ='R' ),
+ SYME = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+ b_SYME_OUI = BLOC(condition="SYME=='OUI'",
+ fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+ into=("K_T_D_N", "K_T_D_L", "K_TR_D_N", "K_TR_D_L", "K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+ "M_T_D_N", "M_TR_D_N", "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+ "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+ # Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+ b_AK_T_D_N = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+ fr="NOEUD: 2 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+ b_AK_T_D_L = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+ fr="SEGMENT: 2 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+ b_AK_TR_D_N = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+ fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+ b_AK_TR_D_L = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+ fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+ b_MAK_T_N = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+ fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+ b_MAK_T_L = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+ fr="SEGMENT: 10 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=10,max=10),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+ b_MAK_TR_N = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+ fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=6 ,max=6),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+ b_MAK_TR_L = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+ fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=21,max=21),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+ # Affection des caractéristiques de MASSE
+ b_M_T_D_N = BLOC(condition = "(CARA=='M_T_D_N')",
+ fr="NOEUD: 1 valeur de masse",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+ b_M_TR_D_N = BLOC(condition = "(CARA=='M_TR_D_N')",
+ fr="NOEUD: 1 valeur de masse (m), 1 valeur d'inertie (Izz), 2 composantes du vecteur d'excentrement",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+ ),
+ # éléments à matrice non-symétrique
+ # b_MAK_T_N_NS 'K_T_N' 'A_T_N' 'M_T_N'
+ # b_MAK_T_L_NS 'K_T_L' 'A_T_L' 'M_T_L'
+ # b_MAK_TR_N_NS 'K_TR_N' 'A_TR_N' 'M_TR_N'
+ # b_MAK_TR_L_NS 'K_TR_L' 'A_TR_L' 'M_TR_L'
+ b_SYME_NON = BLOC(condition="SYME=='NON'",
+ fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+ into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+ "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+ "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+ # Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+ b_MAK_T_N_NS = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+ fr="NOEUD: 4 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+ b_MAK_T_L_NS = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+ fr="SEGMENT: 16 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=16,max=16),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=16 ,max=16 ),),
+ b_MAK_TR_N_NS = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+ fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+ UN_PARMI('VALE','VALE_F'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=9 ,max=9),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+ b_MAK_TR_L_NS = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+ fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('VALE','VALE_F'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ VALE = SIMP(statut='f',typ='R',min=36,max=36),
+ VALE_F = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+ ),
+ ),
+# ============================================================================
+ ORIENTATION = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ CARA = SIMP(statut='o',typ='TXM',
+ into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+ VALE = SIMP(statut='o',typ='R',max='**'),
+ PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+ CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+
+# ============================================================================
+ DEFI_ARC = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+ 'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+ PRESENT_PRESENT('ORIE_ARC','RAYON'),
+ EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+ EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+ EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+ EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+ PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+ PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ORIE_ARC = SIMP(statut='f',typ='R'),
+ CENTRE = SIMP(statut='f',typ='R',max='**'),
+ NOEUD_CENTRE = SIMP(statut='f',typ=no),
+ GROUP_NO_CENTRE = SIMP(statut='f',typ=grno),
+ POIN_TANG = SIMP(statut='f',typ='R',max='**'),
+ NOEUD_POIN_TANG = SIMP(statut='f',typ=no),
+ GROUP_NO_POIN_TG = SIMP(statut='f',typ=grno),
+ RAYON = SIMP(statut='f',typ='R'),
+ COEF_FLEX = SIMP(statut='f',typ='R'),
+ INDI_SIGM = SIMP(statut='f',typ='R'),
+ COEF_FLEX_XY = SIMP(statut='f',typ='R'),
+ INDI_SIGM_XY = SIMP(statut='f',typ='R'),
+ COEF_FLEX_XZ = SIMP(statut='f',typ='R'),
+ INDI_SIGM_XZ = SIMP(statut='f',typ='R'),
+ PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3),
+ CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+
+#============================================================================
+ MASSIF = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('ANGL_REP','ANGL_AXE','ANGL_EULER'),
+ EXCLUS('ANGL_REP','ANGL_EULER'),
+ EXCLUS('ANGL_REP','ANGL_AXE'),
+ EXCLUS('ANGL_REP','ORIG_AXE'),
+ PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ANGL_REP = SIMP(statut='f',typ='R',max=3),
+ ANGL_EULER = SIMP(statut='f',typ='R',min=3,max=3),
+ ANGL_AXE = SIMP(statut='f',typ='R',max=2),
+ ORIG_AXE = SIMP(statut='f',typ='R',max=3),
+ ),
+
+# ============================================================================
+ POUTRE_FLUI = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ B_T = SIMP(statut='o',typ='R'),
+ B_N = SIMP(statut='o',typ='R'),
+ B_TN = SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+ A_FLUI = SIMP(statut='o',typ='R'),
+ A_CELL = SIMP(statut='o',typ='R'),
+ COEF_ECHELLE = SIMP(statut='o',typ='R'),
+ ),
+
+# ============================================================================
+ GRILLE = FACT(statut='f',max='**',
+ regles = (UN_PARMI('MAILLE','GROUP_MA'),
+ EXCLUS('ANGL_REP','ORIG_AXE'),
+ ENSEMBLE('ORIG_AXE','AXE')),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SECTION = SIMP(statut='o',typ='R'),
+ ANGL_REP = SIMP(statut='f',typ='R',max=2),
+ EXCENTREMENT = SIMP(statut='f',typ='R'),
+ ORIG_AXE = SIMP(statut='f',typ='R',max='**'),
+ AXE = SIMP(statut='f',typ='R',max='**'),
+ COEF_RIGI_DRZ = SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+ GRILLE_NCOU = SIMP(statut='f',typ='I',defaut= 1,),
+ ),
+
+#============================================================================
+ RIGI_PARASOL = FACT(statut='f',max='**',
+ regles = (UN_PARMI('COEF_GROUP','FONC_GROUP'),
+ UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ EXCLUS('GROUP_MA_POI1','GROUP_MA_SEG2'),),
+ GROUP_MA = SIMP(statut='o',typ=ma,validators=NoRepeat(),max='**',
+ fr="Surface servant à répartir les caractéristiques des discrets"),
+ GROUP_MA_POI1 = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+ fr="Mailles de type point correspondant aux discrets"),
+ GROUP_MA_SEG2 = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+ fr="Mailles de type seg2 correspondant aux discrets"),
+ FONC_GROUP = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_GROUP = SIMP(statut='f',typ='R',max='**'),
+ REPERE = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+ CARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,
+ into=("K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
+ "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L") ),
+ VALE = SIMP(statut='o',typ='R',max='**'),
+ GROUP_NO_CENTRE = SIMP(statut='f',typ=grno),
+ NOEUD_CENTRE = SIMP(statut='f',typ=no),
+ COOR_CENTRE = SIMP(statut='f',typ='R',min=2,max=3),
+ EUROPLEXUS = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+ ),
+
+#============================================================================
+ RIGI_MISS_3D = FACT(statut='f',max='**',
+ GROUP_MA_POI1 = SIMP(statut='o',typ=ma,max=1),
+ GROUP_MA_SEG2 = SIMP(statut='f',typ=ma,max=1),
+ FREQ_EXTR = SIMP(statut='o',typ='R',max=1),
+ UNITE_RESU_IMPE = SIMP(statut='f',typ='I',defaut=30),
+ ),
+
+#============================================================================
+ GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+ fr="Donner le nom de la SD regroupant tous les groupes de fibres (issue de DEFI_GEOM_FIBRE)"),
+ MULTIFIBRE = FACT(statut='f',max='**',
+ regles = (AU_MOINS_UN('GROUP_MA','MAILLE'),),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_FIBRE = SIMP(statut='o',typ='TXM',max='**'),
+ ),
+);
+#& MODIF COMMANDE DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 None
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op= 68,sd_prod=char_acou,
+ fr="Affectation de charges et conditions aux limites acoustiques constantes",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ METHODE =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les pressions imposées",
+ into=('DUALISATION',),defaut='DUALISATION',),
+ # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+ PRES_IMPO =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='o',typ='C' ),
+ ),
+ VITE_FACE =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ VNOR =SIMP(statut='o',typ='C' ),
+ ),
+ IMPE_FACE =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ IMPE =SIMP(statut='o',typ='C' ),
+ ),
+ LIAISON_UNIF =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ ),
+) ;
+#& MODIF COMMANDE DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_IMPO,**args):
+ if MECA_IMPO != None : return char_cine_meca
+ if THER_IMPO != None : return char_cine_ther
+ if ACOU_IMPO != None : return char_cine_acou
+ if EVOL_IMPO != None :
+ if AsType(EVOL_IMPO) in (evol_elas,evol_noli) :
+ return char_cine_meca
+ elif AsType(EVOL_IMPO) in (evol_ther,) :
+ return char_cine_ther
+ else :
+ raise AsException("Extension à faire ...")
+
+ raise AsException("type de concept resultat non prevu")
+
+
+AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
+ ,fr="Affectation de conditions aux limites cinématiques constantes pour un traitement sans dualisation",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'),
+ ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ EVOL_IMPO =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer tous les ddls d'un evol_xxx"),
+ MECA_IMPO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+ 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+ 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+ 'VO6','WI6','WO6','WO','WI1','WO1','GONF',
+ 'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+ 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','V11','V12','V13','V21','V22',
+ 'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21',
+ 'PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ DRX =SIMP(statut='f',typ='R' ),
+ DRY =SIMP(statut='f',typ='R' ),
+ DRZ =SIMP(statut='f',typ='R' ),
+ GRX =SIMP(statut='f',typ='R' ),
+ PRES =SIMP(statut='f',typ='R' ),
+ PHI =SIMP(statut='f',typ='R' ),
+ TEMP =SIMP(statut='f',typ='R' ),
+ PRE1 =SIMP(statut='f',typ='R' ),
+ PRE2 =SIMP(statut='f',typ='R' ),
+ UI2 =SIMP(statut='f',typ='R' ),
+ UI3 =SIMP(statut='f',typ='R' ),
+ UI4 =SIMP(statut='f',typ='R' ),
+ UI5 =SIMP(statut='f',typ='R' ),
+ UI6 =SIMP(statut='f',typ='R' ),
+ UO2 =SIMP(statut='f',typ='R' ),
+ UO3 =SIMP(statut='f',typ='R' ),
+ UO4 =SIMP(statut='f',typ='R' ),
+ UO5 =SIMP(statut='f',typ='R' ),
+ UO6 =SIMP(statut='f',typ='R' ),
+ VI2 =SIMP(statut='f',typ='R' ),
+ VI3 =SIMP(statut='f',typ='R' ),
+ VI4 =SIMP(statut='f',typ='R' ),
+ VI5 =SIMP(statut='f',typ='R' ),
+ VI6 =SIMP(statut='f',typ='R' ),
+ VO2 =SIMP(statut='f',typ='R' ),
+ VO3 =SIMP(statut='f',typ='R' ),
+ VO4 =SIMP(statut='f',typ='R' ),
+ VO5 =SIMP(statut='f',typ='R' ),
+ VO6 =SIMP(statut='f',typ='R' ),
+ WI2 =SIMP(statut='f',typ='R' ),
+ WI3 =SIMP(statut='f',typ='R' ),
+ WI4 =SIMP(statut='f',typ='R' ),
+ WI5 =SIMP(statut='f',typ='R' ),
+ WI6 =SIMP(statut='f',typ='R' ),
+ WO2 =SIMP(statut='f',typ='R' ),
+ WO3 =SIMP(statut='f',typ='R' ),
+ WO4 =SIMP(statut='f',typ='R' ),
+ WO5 =SIMP(statut='f',typ='R' ),
+ WO6 =SIMP(statut='f',typ='R' ),
+ WO =SIMP(statut='f',typ='R' ),
+ WI1 =SIMP(statut='f',typ='R' ),
+ WO1 =SIMP(statut='f',typ='R' ),
+ GONF =SIMP(statut='f',typ='R' ),
+ H1X =SIMP(statut='f',typ='R' ),
+ H1Y =SIMP(statut='f',typ='R' ),
+ H1Z =SIMP(statut='f',typ='R' ),
+ E1X =SIMP(statut='f',typ='R' ),
+ E1Y =SIMP(statut='f',typ='R' ),
+ E1Z =SIMP(statut='f',typ='R' ),
+ E2X =SIMP(statut='f',typ='R' ),
+ E2Y =SIMP(statut='f',typ='R' ),
+ E2Z =SIMP(statut='f',typ='R' ),
+ E3X =SIMP(statut='f',typ='R' ),
+ E3Y =SIMP(statut='f',typ='R' ),
+ E3Z =SIMP(statut='f',typ='R' ),
+ E4X =SIMP(statut='f',typ='R' ),
+ E4Y =SIMP(statut='f',typ='R' ),
+ E4Z =SIMP(statut='f',typ='R' ),
+ V11 =SIMP(statut='f',typ='R' ),
+ V12 =SIMP(statut='f',typ='R' ),
+ V13 =SIMP(statut='f',typ='R' ),
+ V21 =SIMP(statut='f',typ='R' ),
+ V22 =SIMP(statut='f',typ='R' ),
+ V23 =SIMP(statut='f',typ='R' ),
+ V31 =SIMP(statut='f',typ='R' ),
+ V32 =SIMP(statut='f',typ='R' ),
+ V33 =SIMP(statut='f',typ='R' ),
+ PRES11 =SIMP(statut='f',typ='R' ),
+ PRES12 =SIMP(statut='f',typ='R' ),
+ PRES13 =SIMP(statut='f',typ='R' ),
+ PRES21 =SIMP(statut='f',typ='R' ),
+ PRES22 =SIMP(statut='f',typ='R' ),
+ PRES23 =SIMP(statut='f',typ='R' ),
+ PRES31 =SIMP(statut='f',typ='R' ),
+ PRES32 =SIMP(statut='f',typ='R' ),
+ PRES33 =SIMP(statut='f',typ='R' ),
+ LH1 =SIMP(statut='f',typ='R' ),
+ ),
+ THER_IMPO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TEMP_SUP =SIMP(statut='f',typ='R' ),
+ TEMP =SIMP(statut='f',typ='R' ),
+ TEMP_INF =SIMP(statut='f',typ='R' ),
+ ),
+ ACOU_IMPO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='o',typ='C' ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
+ if MECA_IMPO != None : return char_cine_meca
+ if THER_IMPO != None : return char_cine_ther
+ raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_prod,
+ fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres"
+ +" pour un traitement sans dualisation",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(UN_PARMI('MECA_IMPO','THER_IMPO')),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ MECA_IMPO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ GRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PHI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ THER_IMPO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TEMP_SUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_INF =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 13/04/2010 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca,
+ fr="Affectation de charges et conditions aux limites mécaniques constantes",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','CHAMNO_IMPO','LIAISON_DDL','LIAISON_XFEM','FORCE_NODALE',
+ 'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+ 'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
+ 'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
+ 'VITE_FACE','RELA_CINE_BP','EPSI_INIT',
+ 'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE',
+ 'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
+ 'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU',
+ 'EFFE_FOND','EVOL_CHAR','ARLEQUIN','DDL_POUTRE',),
+ ),
+ VERI_NORM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ EVOL_CHAR =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+ typ=evol_char ),
+
+ PESANTEUR =FACT(statut='f',max='**',fr="Champ de pesanteur",
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GRAVITE =SIMP(statut='o',typ='R',min=1,max=1),
+ DIRECTION =SIMP(statut='o',typ='R',min=3,max=3),),
+
+ METHODE =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+ into=('DUALISATION',),defaut='DUALISATION',),
+ # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+ ROTATION =SIMP(statut='f',typ='R',fr="Champ de rotation", min=4,max=4),
+ b_rotation =BLOC ( condition = "ROTATION != None",
+ CENTRE =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
+
+ DDL_IMPO =FACT(statut='f',max='**',
+ fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+ 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+ 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+ 'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON',
+ 'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+ 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+ 'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+ 'PRES31','PRES32','PRES33',),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ LIAISON =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ DRX =SIMP(statut='f',typ='R' ),
+ DRY =SIMP(statut='f',typ='R' ),
+ DRZ =SIMP(statut='f',typ='R' ),
+ GRX =SIMP(statut='f',typ='R' ),
+ PRES =SIMP(statut='f',typ='R' ),
+ PHI =SIMP(statut='f',typ='R' ),
+ TEMP =SIMP(statut='f',typ='R' ),
+ PRE1 =SIMP(statut='f',typ='R' ),
+ PRE2 =SIMP(statut='f',typ='R' ),
+ UI2 =SIMP(statut='f',typ='R' ),
+ UI3 =SIMP(statut='f',typ='R' ),
+ UI4 =SIMP(statut='f',typ='R' ),
+ UI5 =SIMP(statut='f',typ='R' ),
+ UI6 =SIMP(statut='f',typ='R' ),
+ UO2 =SIMP(statut='f',typ='R' ),
+ UO3 =SIMP(statut='f',typ='R' ),
+ UO4 =SIMP(statut='f',typ='R' ),
+ UO5 =SIMP(statut='f',typ='R' ),
+ UO6 =SIMP(statut='f',typ='R' ),
+ VI2 =SIMP(statut='f',typ='R' ),
+ VI3 =SIMP(statut='f',typ='R' ),
+ VI4 =SIMP(statut='f',typ='R' ),
+ VI5 =SIMP(statut='f',typ='R' ),
+ VI6 =SIMP(statut='f',typ='R' ),
+ VO2 =SIMP(statut='f',typ='R' ),
+ VO3 =SIMP(statut='f',typ='R' ),
+ VO4 =SIMP(statut='f',typ='R' ),
+ VO5 =SIMP(statut='f',typ='R' ),
+ VO6 =SIMP(statut='f',typ='R' ),
+ WI2 =SIMP(statut='f',typ='R' ),
+ WI3 =SIMP(statut='f',typ='R' ),
+ WI4 =SIMP(statut='f',typ='R' ),
+ WI5 =SIMP(statut='f',typ='R' ),
+ WI6 =SIMP(statut='f',typ='R' ),
+ WO2 =SIMP(statut='f',typ='R' ),
+ WO3 =SIMP(statut='f',typ='R' ),
+ WO4 =SIMP(statut='f',typ='R' ),
+ WO5 =SIMP(statut='f',typ='R' ),
+ WO6 =SIMP(statut='f',typ='R' ),
+ WO =SIMP(statut='f',typ='R' ),
+ WI1 =SIMP(statut='f',typ='R' ),
+ WO1 =SIMP(statut='f',typ='R' ),
+ GONF =SIMP(statut='f',typ='R' ),
+ H1X =SIMP(statut='f',typ='R' ),
+ H1Y =SIMP(statut='f',typ='R' ),
+ H1Z =SIMP(statut='f',typ='R' ),
+ E1X =SIMP(statut='f',typ='R' ),
+ E1Y =SIMP(statut='f',typ='R' ),
+ E1Z =SIMP(statut='f',typ='R' ),
+ E2X =SIMP(statut='f',typ='R' ),
+ E2Y =SIMP(statut='f',typ='R' ),
+ E2Z =SIMP(statut='f',typ='R' ),
+ E3X =SIMP(statut='f',typ='R' ),
+ E3Y =SIMP(statut='f',typ='R' ),
+ E3Z =SIMP(statut='f',typ='R' ),
+ E4X =SIMP(statut='f',typ='R' ),
+ E4Y =SIMP(statut='f',typ='R' ),
+ E4Z =SIMP(statut='f',typ='R' ),
+ LAGS_C =SIMP(statut='f',typ='R' ),
+ V11 =SIMP(statut='f',typ='R' ),
+ V12 =SIMP(statut='f',typ='R' ),
+ V13 =SIMP(statut='f',typ='R' ),
+ V21 =SIMP(statut='f',typ='R' ),
+ V22 =SIMP(statut='f',typ='R' ),
+ V23 =SIMP(statut='f',typ='R' ),
+ V31 =SIMP(statut='f',typ='R' ),
+ V32 =SIMP(statut='f',typ='R' ),
+ V33 =SIMP(statut='f',typ='R' ),
+ PRES11 =SIMP(statut='f',typ='R' ),
+ PRES12 =SIMP(statut='f',typ='R' ),
+ PRES13 =SIMP(statut='f',typ='R' ),
+ PRES21 =SIMP(statut='f',typ='R' ),
+ PRES22 =SIMP(statut='f',typ='R' ),
+ PRES23 =SIMP(statut='f',typ='R' ),
+ PRES31 =SIMP(statut='f',typ='R' ),
+ PRES32 =SIMP(statut='f',typ='R' ),
+ PRES33 =SIMP(statut='f',typ='R' ),
+ ),
+
+
+
+ DDL_POUTRE =FACT(statut='f',max='**',
+ fr="Bloque des DDLs dans un repère local d'une poutre",
+ regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ'),
+ UN_PARMI('VECT_Y','ANGL_VRIL'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ DRX =SIMP(statut='f',typ='R' ),
+ DRY =SIMP(statut='f',typ='R' ),
+ DRZ =SIMP(statut='f',typ='R' ),
+# définition du repère local
+ VECT_Y =SIMP(statut='f',typ='R',min=3,max=3),
+ ANGL_VRIL =SIMP(statut='f',typ='R',),
+# restriction sur les mailles servant à définir le repère local
+ GROUP_MA =SIMP(statut='f',typ=grma,),
+ MAILLE =SIMP(statut='f',typ=ma,),
+ ),
+
+
+
+ FACE_IMPO =FACT(statut='f',max='**',
+ fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)",
+ regles=(UN_PARMI('GROUP_MA','MAILLE',),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+ EXCLUS('DNOR','DX'),
+ EXCLUS('DNOR','DY'),
+ EXCLUS('DNOR','DZ'),
+ EXCLUS('DNOR','DRX'),
+ EXCLUS('DNOR','DRY'),
+ EXCLUS('DNOR','DRZ'),
+ EXCLUS('DTAN','DX'),
+ EXCLUS('DTAN','DY'),
+ EXCLUS('DTAN','DZ'),
+ EXCLUS('DTAN','DRX'),
+ EXCLUS('DTAN','DRY'),
+ EXCLUS('DTAN','DRZ'),),
+# rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SANS_MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ DRX =SIMP(statut='f',typ='R' ),
+ DRY =SIMP(statut='f',typ='R' ),
+ DRZ =SIMP(statut='f',typ='R' ),
+ DNOR =SIMP(statut='f',typ='R' ),
+ DTAN =SIMP(statut='f',typ='R' ),
+ GRX =SIMP(statut='f',typ='R' ),
+ PRES =SIMP(statut='f',typ='R' ),
+ PHI =SIMP(statut='f',typ='R' ),
+ TEMP =SIMP(statut='f',typ='R' ),
+ PRE1 =SIMP(statut='f',typ='R' ),
+ PRE2 =SIMP(statut='f',typ='R' ),
+ ),
+
+ CHAMNO_IMPO =FACT(statut='f',max='**',
+ fr="Impose des DDLs aux valeurs d'un concept cham_no_sdaster",
+# type de cham_no_sdaster CO()
+ CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+ COEF_MULT =SIMP(statut='o',typ='R' ),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+
+ LIAISON_DDL =FACT(statut='f',max='**',
+ fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds",
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+ GROUP_NO =SIMP(statut='f',typ=grno ,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT =SIMP(statut='o',typ='R' ,max='**'),
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ ),
+
+ LIAISON_OBLIQUE =FACT(statut='f',max='**',
+ fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante"
+ +" dans un repère oblique quelconque",
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),
+ UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ ANGL_NAUT =SIMP(statut='o',typ='R',max=3),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ DRX =SIMP(statut='f',typ='R' ),
+ DRY =SIMP(statut='f',typ='R' ),
+ DRZ =SIMP(statut='f',typ='R' ),
+ ),
+
+ LIAISON_GROUP =FACT(statut='f',max='**',
+ fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds",
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+ EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+ EXCLUS('GROUP_MA_1','NOEUD_2'),
+ EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+ EXCLUS('GROUP_NO_1','MAILLE_2'),
+ EXCLUS('MAILLE_1','GROUP_NO_2'),
+ EXCLUS('MAILLE_1','NOEUD_2'),
+ EXCLUS('NOEUD_1','GROUP_MA_2'),
+ EXCLUS('NOEUD_1','MAILLE_2'),
+ EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+ DDL_1 =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT_1 =SIMP(statut='o',typ='R' ,max='**'),
+ DDL_2 =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT_2 =SIMP(statut='o',typ='R' ,max='**'),
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ SOMMET =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TRAN =SIMP(statut='f',typ='R',max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ CENTRE =SIMP(statut='f',typ='R',max=3),
+ ),
+
+ LIAISON_MAIL =FACT(statut='f',max='**',
+ fr="Définit des relations linéaires permettant de recoller deux bords d'une structure",
+ regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+ AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL')),
+ GROUP_MA_MAIT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_ESCL =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_ESCL =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+
+ TYPE_RACCORD =SIMP(statut='o',typ='TXM',defaut="MASSIF",into=("MASSIF","COQUE","COQUE_MASSIF","MASSIF_COQUE",)),
+
+ b_MASSIF =BLOC ( condition = "TYPE_RACCORD == 'MASSIF'",
+ regles=( PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+ TRAN =SIMP(statut='f',typ='R',max=3 ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ),
+ CENTRE =SIMP(statut='f',typ='R',max=3 ),
+ DDL_MAIT =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+ DDL_ESCL =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+ ),
+ b_COQUE_MASSIF =BLOC ( condition = "TYPE_RACCORD == 'COQUE_MASSIF'",
+ EPAIS =SIMP(statut='o',typ='R'),
+ CHAM_NORMALE =SIMP(statut='o',typ=cham_no_sdaster),
+ ),
+ ELIM_MULT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+
+ LIAISON_CYCL =FACT(statut='f',max='**',
+ fr="Définit des relations linéaires permettant de recoller les bords de deux parties symétriquement cycliques",
+ regles=(AU_MOINS_UN('GROUP_MA_MAIT1','MAILLE_MAIT1'),
+ AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+ PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),
+ ),
+ GROUP_MA_MAIT1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_MAIT2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_ESCL =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_ESCL =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TRAN =SIMP(statut='f',typ='R',max=3 ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ),
+ CENTRE =SIMP(statut='f',typ='R',max=3 ),
+ COEF_MAIT1 =SIMP(statut='f',typ='R',max=1 ),
+ COEF_MAIT2 =SIMP(statut='f',typ='R',max=1 ),
+ COEF_ESCL =SIMP(statut='f',typ='R',max=1 ),
+ DDL_MAIT =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+ DDL_ESCL =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+ ),
+
+
+ LIAISON_SOLIDE =FACT(statut='f',max='**',
+ fr="Modélise une partie indéformable d'une structure."
+ +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+ ENSEMBLE('CENTRE','ANGL_NAUT'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TRAN =SIMP(statut='f',typ='R',max=3 ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ),
+ CENTRE =SIMP(statut='f',typ='R',max=3 ),
+ DIST_MIN =SIMP(statut='f',typ='R'),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+ LIAISON_ELEM =FACT(statut='f',max='**',
+ fr="Modélise le raccord d'une partie massive 3D avec une poutre ou avec un tuyau, le raccord d'une coque"
+ +" avec une poutre ou avec un tuyau",
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+ UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+ OPTION =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ CARA_ELEM =SIMP(statut='f',typ=(cara_elem) ),
+ AXE_POUTRE =SIMP(statut='f',typ='R',max=3),
+ ANGL_MAX =SIMP(statut='f',typ='R',defaut= 1. ),
+ ),
+
+ LIAISON_UNIF =FACT(statut='f',max='**',
+ fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ ),
+
+ LIAISON_CHAMNO =FACT(statut='f',max='**',
+ fr="Définit une relation linéaire entre tous les DDLs présents dans un concept CHAM_NO",
+# type de cham_no_sdaster CO()
+ CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+ LIAISON_XFEM =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+
+ CONTACT_XFEM =SIMP(statut='f',typ=char_contact,min=1,max=1,),
+
+
+# SIMP(statut='f',typ='TXM',defaut="NON" ),
+
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster ),
+#
+# FORCES
+#
+ FORCE_NODALE =FACT(statut='f',fr="Applique à des noeuds des forces nodales",max='**',
+ regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ MX =SIMP(statut='f',typ='R' ),
+ MY =SIMP(statut='f',typ='R' ),
+ MZ =SIMP(statut='f',typ='R' ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ ),
+
+ FORCE_FACE =FACT(statut='f',max='**',
+ fr="Applique des forces surfaciques sur une face d'élément volumique",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ ),
+
+ FORCE_ARETE =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques à une arete d'élément volumique ou de coque",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ MX =SIMP(statut='f',typ='R' ),
+ MY =SIMP(statut='f',typ='R' ),
+ MZ =SIMP(statut='f',typ='R' ),
+ ),
+
+ FORCE_CONTOUR =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ MX =SIMP(statut='f',typ='R' ),
+ MY =SIMP(statut='f',typ='R' ),
+ MZ =SIMP(statut='f',typ='R' ),
+ ),
+
+ FORCE_INTERNE =FACT(statut='f',max='**',
+ fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ ),
+
+ SIGM_INTERNE =FACT(statut='f',max='**',
+ fr="Applique des contraintes volumiques (2D ou 3D) à un domaine volumique",
+ #INST =SIMP(statut='f',typ='R' ),
+ SIGM =SIMP(statut='o',typ=(cham_elem,carte_sdaster)),
+ ),
+
+ PRES_REP =FACT(statut='f',max='**',
+ fr="Applique une pression à un domaine de milieu continu 2D ou 3D, ou à un domaine de coques et tuyaux",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+ AU_MOINS_UN('PRES','CISA_2D' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FISSURE =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+ PRES =SIMP(statut='f',typ='R' ),
+ CISA_2D =SIMP(statut='f',typ='R' ),
+ ),
+
+ EFFE_FOND =FACT(statut='f',max='**',
+ fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise à une pression",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+ GROUP_MA_INT =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='o',typ='R' ),
+ ),
+
+ EPSI_INIT =FACT(statut='f',max='**',
+ fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+ 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ EPXX =SIMP(statut='f',typ='R' ),
+ EPYY =SIMP(statut='f',typ='R' ),
+ EPZZ =SIMP(statut='f',typ='R' ),
+ EPXY =SIMP(statut='f',typ='R' ),
+ EPXZ =SIMP(statut='f',typ='R' ),
+ EPYZ =SIMP(statut='f',typ='R' ),
+ EPX =SIMP(statut='f',typ='R' ),
+ KY =SIMP(statut='f',typ='R' ),
+ KZ =SIMP(statut='f',typ='R' ),
+ EXX =SIMP(statut='f',typ='R' ),
+ EYY =SIMP(statut='f',typ='R' ),
+ EXY =SIMP(statut='f',typ='R' ),
+ KXX =SIMP(statut='f',typ='R' ),
+ KYY =SIMP(statut='f',typ='R' ),
+ KXY =SIMP(statut='f',typ='R' ),
+ ),
+
+ ARLEQUIN =FACT(statut='f',min=1,max='**',
+ fr="Définit les paramètres de la méthode Arlequin",
+ GROUP_MA_1 =SIMP(statut='o',typ=grma,max='**'),
+ GROUP_MA_2 =SIMP(statut='o',typ=grma,max='**'),
+ GROUP_MA_COLL =SIMP(statut='f',typ=grma,max='**'),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ COND_LIM =SIMP(statut='f',typ=char_meca ),
+ COLLAGE =SIMP(statut='f',typ='TXM',defaut="GROSSIER",into=("GROSSIER","FIN","GROUP_MA_1","GROUP_MA_2"),),
+ regles =(UN_PARMI('POIDS_1','POIDS_2','POIDS_GROSSIER','POIDS_FIN',),),
+ POIDS_1 =SIMP(statut='f',typ='R'),
+ POIDS_2 =SIMP(statut='f',typ='R'),
+ POIDS_GROSSIER =SIMP(statut='f',typ='R'),
+ UNITE_GMSH =SIMP(statut='f',typ='I',defaut=0,max=1),
+ POIDS_FIN =SIMP(statut='f',typ='R'),),
+
+ FORCE_POUTRE =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques sur des éléments de type poutre",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+ PRESENT_ABSENT('FX','N','VY','VZ'),
+ PRESENT_ABSENT('FY','N','VY','VZ'),
+ PRESENT_ABSENT('FZ','N','VY','VZ'),
+ PRESENT_ABSENT('N','FX','FY','FZ'),
+ PRESENT_ABSENT('VY','FX','FY','FZ'),
+ PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+
+ N =SIMP(statut='f',typ='R' ),
+ VY =SIMP(statut='f',typ='R' ),
+ VZ =SIMP(statut='f',typ='R' ),
+
+ ),
+
+ FORCE_TUYAU =FACT(statut='f',max='**',
+ fr="Applique une pression sur des éléments TUYAU",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='f',typ='R' ),
+ ),
+
+ FORCE_COQUE =FACT(statut='f',max='**',
+ fr="Applique des forces surfaciques sur des éléments de types coques",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+ PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+ PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+ PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+ PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+ PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+# rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ MX =SIMP(statut='f',typ='R' ),
+ MY =SIMP(statut='f',typ='R' ),
+ MZ =SIMP(statut='f',typ='R' ),
+
+ F1 =SIMP(statut='f',typ='R' ),
+ F2 =SIMP(statut='f',typ='R' ),
+ F3 =SIMP(statut='f',typ='R' ),
+ MF1 =SIMP(statut='f',typ='R' ),
+ MF2 =SIMP(statut='f',typ='R' ),
+
+ PRES =SIMP(statut='f',typ='R' ),
+ PLAN =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+ ),
+
+ LIAISON_COQUE =FACT(statut='f',max='**',
+ fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+ RELA_CINE_BP =FACT(statut='f',max='**',
+ fr="Etablir des relations cinématiques permettant de relier les noeuds cable aux noeuds du béton, et spécifier"
+ +" la prise en compte des contraintes initiales dans les cables",
+ CABLE_BP =SIMP(statut='o',typ=cabl_precont ),
+ SIGM_BPEL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ RELA_CINE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ DIST_MIN =SIMP(statut='f',typ='R'),
+ ),
+
+ FORCE_ELEC =FACT(statut='f',max='**',
+ fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+ +" secondaire droit",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ POSITION =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+ b_fxyz =BLOC ( condition = "POSITION == None",
+ FX =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FY =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FZ =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+
+ b_para =BLOC ( condition = "POSITION == 'PARA'",
+ regles=(UN_PARMI('TRANS','DIST'),),
+ TRANS =SIMP(statut='f',typ='R',max=3),
+ DIST =SIMP(statut='f',typ='R' ),
+ b_point2 =BLOC ( condition = "DIST != None",
+ POINT2 =SIMP(statut='o',typ='R',max=3),
+ ),
+ ),
+ b_fini_infi =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+ POINT1 =SIMP(statut='o',typ='R',max=3),
+ POINT2 =SIMP(statut='o',typ='R',max=3),
+ ),
+ ),
+
+
+
+
+ INTE_ELEC =FACT(statut='f',max='**',
+ fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+ +" secondaire non nécessairement droit",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+ EXCLUS('TRANS','SYME'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TRANS =SIMP(statut='f',typ='R' ,max='**'),
+ SYME =SIMP(statut='f',typ='R' ,max='**'),
+ ),
+
+
+ IMPE_FACE =FACT(statut='f',fr="Applique une impédance acoustique à une face",max='**',
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ IMPE =SIMP(statut='o',typ='R' ),
+ ),
+
+ VITE_FACE =FACT(statut='f',fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE), ",max='**',
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ VNOR =SIMP(statut='o',typ='R' ),
+ ),
+
+
+
+ ONDE_FLUI =FACT(statut='f',max='**',
+ fr="Applique une amplitude de pression d'onde incidente sinusoidale arrivant normalement à une face",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='o',typ='R' ),
+ ),
+
+ FLUX_THM_REP =FACT(statut='f',max='**',
+ fr="Applique à un domaine de milieu continu 2D ou 3D un flux de chaleur et/ou un apport de masse fluide"
+ +" (flux hydraulique)",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUN =SIMP(statut='f',typ='R' ),
+ FLUN_HYDR1 =SIMP(statut='f',typ='R' ),
+ FLUN_HYDR2 =SIMP(statut='f',typ='R' ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+
+#& MODIF COMMANDE DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op= 7,sd_prod=char_meca,
+ fr="Affectation de charges et conditions aux limites mécaniques complexes",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ METHODE =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+ into=('DUALISATION',),defaut='DUALISATION',),
+ # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+ DDL_IMPO =FACT(statut='f',max='**',
+ fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','LIAISON', ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ LIAISON =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+ DX =SIMP(statut='f',typ='C' ),
+ DY =SIMP(statut='f',typ='C' ),
+ DZ =SIMP(statut='f',typ='C' ),
+ DRX =SIMP(statut='f',typ='C' ),
+ DRY =SIMP(statut='f',typ='C' ),
+ DRZ =SIMP(statut='f',typ='C' ),
+ GRX =SIMP(statut='f',typ='C' ),
+ PRES =SIMP(statut='f',typ='C' ),
+ PHI =SIMP(statut='f',typ='C' ),
+ ),
+ FORCE_POUTRE =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques sur des éléments de type poutre",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
+ PRESENT_ABSENT('FX','N','VY','VZ',),
+ PRESENT_ABSENT('FY','N','VY','VZ',),
+ PRESENT_ABSENT('FZ','N','VY','VZ',),
+ PRESENT_ABSENT('N','FX','FY','FZ',),
+ PRESENT_ABSENT('VY', 'FX','FY','FZ',),
+ PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+ FX =SIMP(statut='f',typ='C' ),
+ FY =SIMP(statut='f',typ='C' ),
+ FZ =SIMP(statut='f',typ='C' ),
+ N =SIMP(statut='f',typ='C' ),
+ VY =SIMP(statut='f',typ='C' ),
+ VZ =SIMP(statut='f',typ='C' ),
+ ),
+ LIAISON_DDL =FACT(statut='f',max='**',
+ fr="Définit une relation linéaire entre les DDLs de deux ou plusieurs noeuds",
+ regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT =SIMP(statut='o',typ='R' ,max='**'),
+ COEF_IMPO =SIMP(statut='o',typ='C' ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 13/04/2010 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
+ fr="Affectation de charges et conditions aux limites mécaniques fonction d'un (ou plusieurs) paramètres",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+ 'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+ 'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
+ 'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
+ 'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
+ 'EFFE_FOND','FLUX_THM_REP',),),
+ VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ VERI_NORM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ METHODE =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+ into=('DUALISATION',),defaut='DUALISATION',),
+ # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+ DDL_IMPO =FACT(statut='f',max='**',
+ fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées) fournies"
+ +" par l'intermédiaire d'un concept fonction ",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','LIAISON','H1X',
+ 'H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+ 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ LIAISON =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+ DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ GRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PHI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRE1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRE2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ H1X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ H1Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ H1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E1X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E1Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E2X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E2Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E2Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E3X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E3Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E3Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E4X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E4Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ E4Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ LAGS_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FACE_IMPO =FACT(statut='f',max='**',
+ fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)"
+ +" fournies par l'intérmédiaire d'un concept fonction",
+ regles=(UN_PARMI('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+ EXCLUS('DNOR','DX'),
+ EXCLUS('DNOR','DY'),
+ EXCLUS('DNOR','DZ'),
+ EXCLUS('DNOR','DRX'),
+ EXCLUS('DNOR','DRY'),
+ EXCLUS('DNOR','DRZ'),
+ EXCLUS('DTAN','DX'),
+ EXCLUS('DTAN','DY'),
+ EXCLUS('DTAN','DZ'),
+ EXCLUS('DTAN','DRX'),
+ EXCLUS('DTAN','DRY'),
+ EXCLUS('DTAN','DRZ'),),
+# rajout d un mot cle REPERE : / GLOBAL / LOCAL
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SANS_MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ GRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PHI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRE1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRE2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DNOR =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DTAN =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ LIAISON_DDL =FACT(statut='f',max='**',
+ fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds, les valeurs sont fournies par"
+ +" l'intermediaire d'un concept de type fonction",
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),UN_PARMI('COEF_MULT','COEF_MULT_FONC'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT =SIMP(statut='f',typ='R',max='**'),
+ COEF_MULT_FONC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+ COEF_IMPO =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ LIAISON_OBLIQUE =FACT(statut='f',max='**',
+ fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante dans un repère oblique"
+ +" quelconque, les valeurs sont fournis par l'intermédiaire d'un concept fonction",
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),
+ UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ ANGL_NAUT =SIMP(statut='o',typ='R',max=3),
+ DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DRZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ LIAISON_GROUP =FACT(statut='f',max='**',
+ fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds, les valeurs sont fournies par"
+ +" l'intermédiaire de concept fonction",
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+ EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+ EXCLUS('GROUP_MA_1','NOEUD_2'),
+ EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+ EXCLUS('GROUP_NO_1','MAILLE_2'),
+ EXCLUS('MAILLE_1','GROUP_NO_2'),
+ EXCLUS('MAILLE_1','NOEUD_2'),
+ EXCLUS('NOEUD_1','GROUP_MA_2'),
+ EXCLUS('NOEUD_1','MAILLE_2'),
+ EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ DDL_1 =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT_1 =SIMP(statut='o',typ='R',max='**'),
+ DDL_2 =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_MULT_2 =SIMP(statut='o',typ='R',max='**'),
+ COEF_IMPO =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SOMMET =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TRAN =SIMP(statut='f',typ='R',max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ CENTRE =SIMP(statut='f',typ='R',max=3),
+ ),
+
+ LIAISON_UNIF =FACT(statut='f',max='**',
+ fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='o',typ='TXM',max='**'),
+ ),
+
+
+ LIAISON_SOLIDE =FACT(statut='f',max='**',
+ fr="Modélise une partie indéformable d'une structure."
+ +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+ ENSEMBLE('CENTRE','ANGL_NAUT'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TRAN =SIMP(statut='f',typ='R',max=3 ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ),
+ CENTRE =SIMP(statut='f',typ='R',max=3 ),
+ DIST_MIN =SIMP(statut='f',typ='R'),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+
+
+ FORCE_NODALE =FACT(statut='f',max='**',
+ fr="Applique à des noeuds des forces nodales dont les valeurs des composantes sont fournies par l'intermédiaire"
+ +" d'un concept fonction",
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ANGL_NAUT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max=3 ),
+ ),
+
+ FORCE_FACE =FACT(statut='f',max='**',
+ fr="Applique des forces surfaciques sur une face d'élément volumique dont les valeurs des composantes sont fournies"
+ +" par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ FORCE_ARETE =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques à une arete d'élément volumique ou de coque dont les valeurs des composantes sont"
+ +" fournies par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ FORCE_CONTOUR =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER, dont les valeurs des composantes"
+ +" sont fournies par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FORCE_INTERNE =FACT(statut='f',max='**',
+ fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique, dont les valeurs des composantes sont fournies"
+ +" par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ PRES_REP =FACT(statut='f',max='**',
+ fr="Applique une pression à un domaine de milieu continu 2D ou 3D ou à un domaine de coques et tuyaux, dont les"
+ +" valeurs imposées (pression et/ou cisaillement) sont fournies par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+ AU_MOINS_UN('PRES','CISA_2D'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FISSURE =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ CISA_2D =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ EFFE_FOND =FACT(statut='f',max='**',
+ fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise"
+ +" à une pression dont la valeur est fournie par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+ GROUP_MA_INT =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ EPSI_INIT =FACT(statut='f',max='**',
+ fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure dont les composantes"
+ +" du tenseur de déformation sont fournies par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ EPXX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPZZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FORCE_POUTRE =FACT(statut='f',max='**',
+ fr="Applique des forces linéiques sur des éléments de type poutre dont les valeurs sont fournies par"
+ +" l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+ PRESENT_ABSENT('FX','N','VY','VZ'),
+ PRESENT_ABSENT('FY','N','VY','VZ'),
+ PRESENT_ABSENT('FZ','N','VY','VZ'),
+ PRESENT_ABSENT('N','FX','FY','FZ'),
+ PRESENT_ABSENT('VY','FX','FY','FZ'),
+ PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+# rajout d un mot cle REPERE : / GLOBAL / LOCAL
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FORCE_TUYAU =FACT(statut='f',max='**',
+ fr="Applique une pression sur des éléments TUYAU, la valeur est fournie par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FORCE_COQUE =FACT(statut='f',max='**',
+ fr="Applique des forces surfaciques sur des éléments de types coques dont les valeurs sont fournies par"
+ +" l'intermédiaires d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+ PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+ PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+ PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+ PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+ PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+ PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+# rajout d un mot cle REPERE : / GLOBAL / LOCAL
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ F1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ F2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ F3 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MF1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MF2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PLAN =SIMP(statut='f',typ='TXM',defaut="MAIL",
+ into=("SUP","INF","MOY","MAIL") ),
+ ),
+
+ LIAISON_COQUE =FACT(statut='f',max='**',
+ fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+ ),
+
+
+ VITE_FACE =FACT(statut='f',max='**',
+ fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE) dont les valeurs sont fournies par"
+ +" l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ VNOR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ IMPE_FACE =FACT(statut='f',max='**',
+ fr="Applique à une face une impédance acoustique dont la valeur est fournie par l'intermédiaire"
+ +" d'un concept fonction",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ IMPE =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ ONDE_PLANE =FACT(statut='f',max='**',
+ fr="Impose un chargement sismique par onde plane dont la valeur est fournie par l'intermédiaire"
+ +" d'un concept fonction",
+ DIRECTION =SIMP(statut='o',typ='R',max='**'),
+ TYPE_ONDE =SIMP(statut='o',typ='TXM' ),
+ FONC_SIGNAL =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DIST_ORIG =SIMP(statut='o',typ='R' ),
+ ),
+
+
+
+ FLUX_THM_REP =FACT(statut='f',max='**',
+ fr="Applique à un domaine continue 2D ou 3D un flux de chaleur et/ou un apport de masse fluide (flux hydraulique)"
+ +" dont les valeurs des flux sont fournies par l'intermédiaire d'un concept fonction",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUN =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUN_HYDR1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUN_HYDR2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 None
+AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
+ fr="Affectation de charges et conditions limites thermiques spécifique à CARA_TORSION",
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ regles=(AU_MOINS_UN('CARA_TORSION', ),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",
+ into=("OUI","NON") ),
+ CARA_TORSION =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+ ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
+ 'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
+ 'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ METHODE =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les températures imposées",
+ into=('DUALISATION',),defaut='DUALISATION',),
+ # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+ TEMP_IMPO =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TEMP =SIMP(statut='f',typ='R'),
+ TEMP_INF =SIMP(statut='f',typ='R'),
+ TEMP_SUP =SIMP(statut='f',typ='R'), ),
+
+ FLUX_REP =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_PRESENT('CARA_TORSION','GROUP_MA'),
+ AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUN =SIMP(statut='f',typ='R'),
+ FLUN_INF =SIMP(statut='f',typ='R'),
+ FLUN_SUP =SIMP(statut='f',typ='R'),
+ CARA_TORSION =SIMP(statut='f',typ=table_sdaster),
+ ),
+
+
+ RAYONNEMENT =FACT(statut='f',max='**',
+ fr="Attention, exprimer les températures en Celsius si rayonnement",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SIGMA =SIMP(statut='o',typ='R'),
+ EPSILON =SIMP(statut='o',typ='R'),
+ TEMP_EXT =SIMP(statut='o',typ='R'),
+ ),
+
+ ECHANGE =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+ ENSEMBLE('COEF_H','TEMP_EXT',),
+ ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+ ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COEF_H =SIMP(statut='f',typ='R'),
+ TEMP_EXT =SIMP(statut='f',typ='R'),
+ COEF_H_INF =SIMP(statut='f',typ='R'),
+ TEMP_EXT_INF =SIMP(statut='f',typ='R'),
+ COEF_H_SUP =SIMP(statut='f',typ='R'),
+ TEMP_EXT_SUP =SIMP(statut='f',typ='R'),
+ ),
+
+ SOURCE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SOUR =SIMP(statut='f',typ='R'),
+ SOUR_CALCULEE =SIMP(statut='f',typ=(cham_elem) ),
+ ),
+
+ GRAD_TEMP_INIT =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUX_X =SIMP(statut='f',typ='R' ),
+ FLUX_Y =SIMP(statut='f',typ='R' ),
+ FLUX_Z =SIMP(statut='f',typ='R' ),
+ ),
+
+ LIAISON_DDL =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ DDL =SIMP(statut='f',typ='TXM',max='**',
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ COEF_MULT =SIMP(statut='o',typ='R',max='**'),
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ ),
+
+ LIAISON_GROUP =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+ EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+ EXCLUS('GROUP_MA_1','NOEUD_2'),
+ EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+ EXCLUS('GROUP_NO_1','MAILLE_2'),
+ EXCLUS('MAILLE_1','GROUP_NO_2'),
+ EXCLUS('MAILLE_1','NOEUD_2'),
+ EXCLUS('NOEUD_1','GROUP_MA_2'),
+ EXCLUS('NOEUD_1','MAILLE_2'),
+ EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ DDL_1 =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ COEF_MULT_1 =SIMP(statut='o',typ='R',max='**'),
+ DDL_2 =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP",) ),
+ COEF_MULT_2 =SIMP(statut='o',typ='R',max='**'),
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ SOMMET =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TRAN =SIMP(statut='f',typ='R',max='**'),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max='**'),
+ CENTRE =SIMP(statut='f',typ='R',max='**'),
+ ),
+
+ LIAISON_MAIL =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+ AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',
+ 'NOEUD_ESCL'),),
+ GROUP_MA_MAIT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_ESCL =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_ESCL =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TRAN =SIMP(statut='f',typ='R',max='**' ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max='**' ),
+ CENTRE =SIMP(statut='f',typ='R',max='**' ),
+ ELIM_MULT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+
+ ECHANGE_PAROI =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COEF_H =SIMP(statut='f',typ='R'),
+ TRAN =SIMP(statut='f',typ='R',min=2,max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ CENTRE =SIMP(statut='f',typ='R',min=2,max=3),
+ ),
+
+ LIAISON_UNIF =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ ),
+
+ LIAISON_CHAMNO =FACT(statut='f',max='**',
+ CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster),# CO()# "il faut definir une structure de donnee generique chamno"
+ COEF_IMPO =SIMP(statut='o',typ='R' ),
+ NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+ ),
+
+ CONVECTION =FACT(statut='f',max='**',
+ VITESSE =SIMP(statut='o',typ=(cham_no_sdaster) ),
+ ),
+
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 16/09/2008 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
+ fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)"
+ +" paramètres (temps, ...)",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
+ 'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
+ 'GRAD_TEMP_INIT','RAYONNEMENT'),),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+
+ TEMP_IMPO =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+ AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
+ TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_INF =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_SUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FLUX_REP =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUN =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUN_INF =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUN_SUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUX_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUX_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUX_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ FLUX_NL =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+
+ RAYONNEMENT =FACT(statut='f',max='**',
+ fr="Attention, exprimer les températures en Celsius si rayonnement",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SIGMA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPSILON =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_EXT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+
+
+ ECHANGE =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+ ENSEMBLE('COEF_H','TEMP_EXT'),
+ ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+ ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COEF_H =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_EXT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_H_INF =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_EXT_INF =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_H_SUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_EXT_SUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+
+ SOURCE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ SOUR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ GRAD_TEMP_INIT =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ FLUX_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUX_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FLUX_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ ECHANGE_PAROI =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COEF_H =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TRAN =SIMP(statut='f',typ='R',min=2,max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ CENTRE =SIMP(statut='f',typ='R',min=2,max=3),
+ ),
+
+ LIAISON_DDL =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ DDL =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ COEF_MULT =SIMP(statut='o',typ='R',max='**'),
+ COEF_IMPO =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ LIAISON_GROUP =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+ EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+ EXCLUS('GROUP_MA_1','NOEUD_2'),
+ EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+ EXCLUS('GROUP_NO_1','MAILLE_2'),
+ EXCLUS('MAILLE_1','GROUP_NO_2'),
+ EXCLUS('MAILLE_1','NOEUD_2'),
+ EXCLUS('NOEUD_1','GROUP_MA_2'),
+ EXCLUS('NOEUD_1','MAILLE_2'),
+ EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ DDL_1 =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ COEF_MULT_1 =SIMP(statut='o',typ='R',max='**'),
+ DDL_2 =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ COEF_MULT_2 =SIMP(statut='o',typ='R',max='**'),
+ COEF_IMPO =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SOMMET =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TRAN =SIMP(statut='f',typ='R',max='**'),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max='**'),
+ CENTRE =SIMP(statut='f',typ='R',max='**'),
+ ),
+
+ LIAISON_UNIF =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ DDL =SIMP(statut='f',typ='TXM',defaut="TEMP",
+ into=("TEMP","TEMP_INF","TEMP_SUP") ),
+ ),
+
+ CONVECTION =FACT(statut='f',max='**',
+ VITESSE =SIMP(statut='o',typ=cham_no_sdaster ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 12/05/2009 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+ fr="Affecter des matériaux à des zones géométriques d'un maillage",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+
+ # affectation du nom du matériau (par mailles):
+ # ----------------------------------------------
+ AFFE =FACT(statut='o',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ MATER =SIMP(statut='o',typ=mater_sdaster,max=30),
+ ),
+
+ # affectation de comportement (multifibres pour l'instant):
+ # ----------------------------------------------
+ AFFE_COMPOR =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),
+ ),
+
+ # affectation des variables de commande :
+ # --------------------------------------------------
+ # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+ LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP","CORR","IRRA","HYDR","SECH","EPSA",
+ "M_ACIER","M_ZIRC","NEUT1","NEUT2")),
+
+ AFFE_VARC =FACT(statut='f',max='**',
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ PRESENT_ABSENT('GROUP_MA','TOUT'),
+ PRESENT_ABSENT('MAILLE','TOUT'),
+ AU_MOINS_UN('EVOL','CHAMP_GD','VALE_REF'),
+ EXCLUS('EVOL','CHAMP_GD'),
+ ),
+
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), # [défaut]
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ NOM_VARC =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
+ "EPSA","NEUT1","NEUT2")),
+ CHAMP_GD =SIMP(statut='f',typ=cham_gd_sdaster,),
+ EVOL =SIMP(statut='f',typ=evol_sdaster,),
+
+ B_EVOL =BLOC(condition="EVOL!=None",
+ NOM_CHAM =SIMP(statut='f',typ='TXM'),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ FONC_INST =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+ ),
+ VALE_REF =SIMP(statut='f',typ='R'),
+ ),
+
+ # mots clés cachés pour les variables de commande NEUTi :
+ # -------------------------------------------------------
+ VARC_NEUT1 =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="NEUT1"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT1")),
+ ),
+ VARC_NEUT2 =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="NEUT2"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT2")),
+ ),
+
+ # mots clés cachés pour variable de commande TEMP :
+ # --------------------------------------------------
+ VARC_TEMP =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="TEMP"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+ VALE_DEF =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
+ ),
+
+ # mots clés cachés pour variable de commande SECH :
+ # --------------------------------------------------
+ VARC_SECH =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="SECH"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("SECH",)),
+ ),
+
+ # mots clés cachés pour variable de commande HYDR :
+ # --------------------------------------------------
+ VARC_HYDR =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="HYDR"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="HYDR_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+ ),
+
+ # mots clés cachés pour variable de commande CORR :
+ # --------------------------------------------------
+ VARC_CORR =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="CORR"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="CORR_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+ ),
+
+ # mots clés cachés pour variable de commande IRRA :
+ # --------------------------------------------------
+ VARC_IRRA =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="IRRA"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="IRRA_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+ ),
+
+ # mots clés cachés pour variable de commande EPSA :
+ # --------------------------------------------------
+ VARC_EPSA =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="EPSA"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="EPSI_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPXX","EPYY","EPZZ","EPXY","EPXZ","EPYZ",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPSAXX","EPSAYY","EPSAZZ","EPSAXY","EPSAXZ","EPSAYZ",)),
+ ),
+ # mots clés cachés pour variable de commande metallurgique ACIER :
+ # -----------------------------------------------------------------
+ VARC_M_ACIER =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="M_ACIER"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("V1","V2","V3","V4","V5","V6","V7")),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("PFERRITE","PPERLITE","PBAINITE",
+ "PMARTENS","TAUSTE","TRANSF","TACIER",)),
+ ),
+ # mots clés cachés pour variable de commande metallurgique ZIRCALOY :
+ # --------------------------------------------------------------------
+ VARC_M_ZIRC =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="M_ZIRC"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("V1","V2","V3","V4")),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("ALPHPUR","ALPHBETA","TZIRC","TEMPS")),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+
+
+#& MODIF COMMANDE DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n',
+ regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+ MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster) ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+ VERIF =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+ GRANDEUR_CARA =FACT(statut='f',max=1,
+ fr="Grandeurs caractéristiques pour l'adimensionnement des indicateurs d'erreur HM",
+ ang="Characteristic data for HM error estimators adimensionalisation",
+#
+ LONGUEUR =SIMP(statut='f',typ='R',val_min=0,
+ fr ="Longueur caractéristique",
+ ang="Characteristic length",),
+ PRESSION =SIMP(statut='f',typ='R',val_min=0,
+ fr ="Pression caractéristique",
+ ang="Characteristic pressure",),
+ TEMPERATURE =SIMP(statut='f',typ='R',val_min=0,
+ fr ="Température caractéristique",
+ ang="Characteristic temperature",),),
+#
+ AFFE_SOUS_STRUC =FACT(statut='f',
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ SUPER_MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ PHENOMENE =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+ ),
+ AFFE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ PHENOMENE =SIMP(statut='o',typ='TXM',
+ into=("MECANIQUE","THERMIQUE","ACOUSTIQUE") ),
+ b_mecanique =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+ fr="modélisations mécaniques",
+ MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+ "2D_DIS_T", # RESP. : FLEJOU J.L.FLEJOU
+ "2D_DIS_TR", # RESP. : FLEJOU J.L.FLEJOU
+ "2D_FLUI_ABSO", # RESP. : DEVESA G.DEVESA
+ "2D_FLUI_PESA", # RESP. : GREFFET N.GREFFET
+ "2D_FLUI_STRU", # RESP. : GREFFET N.GREFFET
+ "2D_FLUIDE", # RESP. : GREFFET N.GREFFET
+ "3D", # RESP. : DESROCHES X.DESROCHES
+ "3D_ABSO", # RESP. : DEVESA G.DEVESA
+ "3D_FAISCEAU", # RESP. : VOLDOIRE F.VOLDOIRE
+ "3D_FLUI_ABSO", # RESP. : DEVESA G.DEVESA
+ "3D_FLUIDE", # RESP. : GREFFET N.GREFFET
+ "3D_INCO", # RESP. : MICHEL S.MICHEL
+ "3D_INCO_GD", # RESP. : MICHEL S.MICHEL
+ "3D_SI", # RESP. : DESROCHES X.DESROCHES
+ "3D_GRAD_EPSI", # RESP. : MICHEL S.MICHEL
+ "3D_GRAD_VARI", # RESP. : MICHEL S.MICHEL
+ "3D_XFEM_CONT", # RESP. : GENIAUT S.GENIAUT
+ "3D_JOINT", # RESP. : LAVERNE J.LAVERNE
+ "3D_INTERFACE", # RESP. : LAVERNE J.LAVERNE
+ "AXIS", # RESP. : LEFEBVRE J.P.LEFEBVRE
+ "AXIS_FLUI_STRU", # RESP. : GREFFET N.GREFFET
+ "AXIS_FLUIDE", # RESP. : GREFFET N.GREFFET
+ "AXIS_FOURIER", # RESP. : DESROCHES X.DESROCHES
+ "AXIS_INCO", # RESP. : MICHEL S.MICHEL
+ "AXIS_INCO_GD", # RESP. : MICHEL S.MICHEL
+ "AXIS_SI", # RESP. : DESROCHES X.DESROCHES
+ "AXIS_GRAD_VARI", # RESP. : MICHEL S.MICHEL
+ "AXIS_JOINT", # RESP. : LAVERNE J.LAVERNE
+ "AXIS_INTERFACE", # RESP. : LAVERNE J.LAVERNE
+ "AXIS_ELDI", # RESP. : LAVERNE J.LAVERNE
+ "BARRE", # RESP. : FLEJOU J.L.FLEJOU
+ "2D_BARRE", # RESP. : FLEJOU J.L.FLEJOU
+ "C_PLAN", # RESP. : LEFEBVRE J.P.LEFEBVRE
+ "C_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+ "C_PLAN_SI", # RESP. : DESROCHES X.DESROCHES
+ "C_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+ "CABLE", # RESP. : FLEJOU J.L.FLEJOU
+ "CABLE_POULIE", # RESP. : None
+ "COQUE_3D", # RESP. : DESROCHES X.DESROCHES
+ "COQUE_AXIS", # RESP. : DESROCHES X.DESROCHES
+ "COQUE_C_PLAN", # RESP. : DESROCHES X.DESROCHES
+ "COQUE_D_PLAN", # RESP. : DESROCHES X.DESROCHES
+ "D_PLAN", # RESP. : LEFEBVRE J.P.LEFEBVRE
+ "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+ "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+ "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL
+ "PLAN_JOINT", # RESP. : LAVERNE J.LAVERNE
+ "PLAN_INTERFACE", # RESP. : LAVERNE J.LAVERNE
+ "PLAN_ELDI", # RESP. : LAVERNE J.LAVERNE
+ "D_PLAN_ABSO", # RESP. : DEVESA G.DEVESA
+ "D_PLAN_INCO", # RESP. : MICHEL S.MICHEL
+ "D_PLAN_INCO_GD", # RESP. : MICHEL S.MICHEL
+ "D_PLAN_SI", # RESP. : DESROCHES X.DESROCHES
+ "DIS_T", # RESP. : FLEJOU J.L.FLEJOU
+ "DIS_TR", # RESP. : FLEJOU J.L.FLEJOU
+ "DKT", # RESP. : DESROCHES X.DESROCHES
+ "DKTG", # RESP. : MARKOVIC D.MARKOVIC
+ "DST", # RESP. : DESROCHES X.DESROCHES
+ "FLUI_STRU", # RESP. : GREFFET N.GREFFET
+ "GRILLE_EXCENTRE", # RESP. : ROSPARS C.ROSPARS
+ "GRILLE_MEMBRANE", # RESP. : ROSPARS C.ROSPARS
+ "POU_C_T", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_E", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_EM", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_T", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_T_GD", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_TG", # RESP. : FLEJOU J.L.FLEJOU
+ "POU_D_TGM", # RESP. : FLEJOU J.L.FLEJOU
+ "Q4G", # RESP. : DESROCHES X.DESROCHES
+ "TUYAU_3M", # RESP. : PROIX J.M.PROIX
+ "TUYAU_6M", # RESP. : PROIX J.M.PROIX
+ "SHB8", # RESP. : DESROCHES X.DESROCHES
+ "D_PLAN_HHM", # RESP. : GRANET S.GRANET
+ "D_PLAN_HM", # RESP. : GRANET S.GRANET
+ "D_PLAN_THH", # RESP. : GRANET S.GRANET
+ "D_PLAN_THHM", # RESP. : GRANET S.GRANET
+ "D_PLAN_THM", # RESP. : GRANET S.GRANET
+ "D_PLAN_HHMD", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2MD", # RESP. : GRANET S.GRANET
+ "D_PLAN_HMD", # RESP. : GRANET S.GRANET
+ "D_PLAN_THHD", # RESP. : GRANET S.GRANET
+ "D_PLAN_THH2D", # RESP. : GRANET S.GRANET
+ "D_PLAN_THVD", # RESP. : GRANET S.GRANET
+ "D_PLAN_THH2MD", # RESP. : GRANET S.GRANET
+ "D_PLAN_THHMD", # RESP. : GRANET S.GRANET
+ "D_PLAN_THMD", # RESP. : GRANET S.GRANET
+ "D_PLAN_HHMS", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2MS", # RESP. : GRANET S.GRANET
+ "D_PLAN_HMS", # RESP. : GRANET S.GRANET
+ "D_PLAN_THHS", # RESP. : GRANET S.GRANET
+ "D_PLAN_THH2S", # RESP. : GRANET S.GRANET
+ "D_PLAN_THVS", # RESP. : GRANET S.GRANET
+ "D_PLAN_THH2MS", # RESP. : GRANET S.GRANET
+ "D_PLAN_THHMS", # RESP. : GRANET S.GRANET
+ "D_PLAN_THMS", # RESP. : GRANET S.GRANET
+ "D_PLAN_HM_P", # RESP. : GRANET S.GRANET
+ "D_PLAN_HHD", # RESP. : GRANET S.GRANET
+ "D_PLAN_HHS", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2D", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2S", # RESP. : GRANET S.GRANET
+ "D_PLAN_2DG", # RESP. : GRANET S.GRANET
+ "D_PLAN_DIL", # RESP. : GRANET S.GRANET
+ "AXIS_THH", # RESP. : GRANET S.GRANET
+ "AXIS_THHM", # RESP. : GRANET S.GRANET
+ "AXIS_THM", # RESP. : GRANET S.GRANET
+ "AXIS_HHM", # RESP. : GRANET S.GRANET
+ "AXIS_HM", # RESP. : GRANET S.GRANET
+ "AXIS_HH2MD", # RESP. : GRANET S.GRANET
+ "AXIS_HHMD", # RESP. : GRANET S.GRANET
+ "AXIS_HMD", # RESP. : GRANET S.GRANET
+ "AXIS_THHD", # RESP. : GRANET S.GRANET
+ "AXIS_THH2D", # RESP. : GRANET S.GRANET
+ "AXIS_THVD", # RESP. : GRANET S.GRANET
+ "AXIS_THHMD", # RESP. : GRANET S.GRANET
+ "AXIS_THH2MD", # RESP. : GRANET S.GRANET
+ "AXIS_THMD", # RESP. : GRANET S.GRANET
+ "AXIS_HH2MS", # RESP. : GRANET S.GRANET
+ "AXIS_HHMS", # RESP. : GRANET S.GRANET
+ "AXIS_HMS", # RESP. : GRANET S.GRANET
+ "AXIS_THHS", # RESP. : GRANET S.GRANET
+ "AXIS_THH2S", # RESP. : GRANET S.GRANET
+ "AXIS_THVS", # RESP. : GRANET S.GRANET
+ "AXIS_THHMS", # RESP. : GRANET S.GRANET
+ "AXIS_THH2MS", # RESP. : GRANET S.GRANET
+ "AXIS_THMS", # RESP. : GRANET S.GRANET
+ "AXIS_HHD", # RESP. : GRANET S.GRANET
+ "AXIS_HHS", # RESP. : GRANET S.GRANET
+ "AXIS_HH2D", # RESP. : GRANET S.GRANET
+ "AXIS_HH2S", # RESP. : GRANET S.GRANET
+ "3D_HHM" , # RESP. : GRANET S.GRANET
+ "3D_HM", # RESP. : GRANET S.GRANET
+ "3D_THH", # RESP. : GRANET S.GRANET
+ "3D_THV", # RESP. : GRANET S.GRANET
+ "3D_THHM", # RESP. : GRANET S.GRANET
+ "3D_THM", # RESP. : GRANET S.GRANET
+ "3D_HHMD", # RESP. : GRANET S.GRANET
+ "3D_HMD", # RESP. : GRANET S.GRANET
+ "3D_THHD", # RESP. : GRANET S.GRANET
+ "3D_THVD", # RESP. : GRANET S.GRANET
+ "3D_THHMD", # RESP. : GRANET S.GRANET
+ "3D_THMD", # RESP. : GRANET S.GRANET
+ "3D_HHMS", # RESP. : GRANET S.GRANET
+ "3D_HMS", # RESP. : GRANET S.GRANET
+ "3D_THHS", # RESP. : GRANET S.GRANET
+ "3D_THVS", # RESP. : GRANET S.GRANET
+ "3D_THHMS", # RESP. : GRANET S.GRANET
+ "3D_THMS", # RESP. : GRANET S.GRANET
+ "3D_THH2MD", # RESP. : GRANET S.GRANET
+ "3D_THH2MS", # RESP. : GRANET S.GRANET
+ "3D_HH2MD", # RESP. : GRANET S.GRANET
+ "3D_HH2MS", # RESP. : GRANET S.GRANET
+ "3D_THH2S", # RESP. : GRANET S.GRANET
+ "3D_THH2D", # RESP. : GRANET S.GRANET
+ "3D_HHD", # RESP. : GRANET S.GRANET
+ "3D_HHS", # RESP. : GRANET S.GRANET
+ "3D_HH2D", # RESP. : GRANET S.GRANET
+ "3D_HH2S", # RESP. : GRANET S.GRANET
+ "VF1", # RESP. : GRANET S.GRANET
+ "3D_HH2SUDM", # RESP. : GRANET S.GRANET
+ "3D_HH2SUDA", # RESP. : GRANET S.GRANET
+ "3D_HH2SUC", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2SUDM", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2SUC", # RESP. : GRANET S.GRANET
+ "D_PLAN_HH2SUDA", # RESP. : GRANET S.GRANET
+ "2D_JOINT_HMS",
+ ) ) ),
+
+ b_thermique =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+ fr="modélisations thermiques",
+ MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+ "3D", # RESP. : DURAND C.DURAND
+ "3D_DIAG", # RESP. : DURAND C.DURAND
+ "AXIS", # RESP. : DURAND C.DURAND
+ "AXIS_DIAG", # RESP. : DURAND C.DURAND
+ "AXIS_FOURIER", # RESP. : DESROCHES X.DESROCHES
+ "COQUE", # RESP. : DESROCHES X.DESROCHES
+ "COQUE_AXIS", # RESP. : DESROCHES X.DESROCHES
+ "COQUE_PLAN", # RESP. : DESROCHES X.DESROCHES
+ "PLAN", # RESP. : DURAND C.DURAND
+ "PLAN_DIAG", # RESP. : DURAND C.DURAND
+ ),),),
+
+ b_acoustique =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+ fr="modélisations acoustiques",
+ MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+ "3D", # RESP. : None
+ "PLAN" # RESP. : None
+ ), ),),
+
+ ),
+
+ PARTITION =FACT(statut='d',
+ PARALLELISME =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
+ into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
+ b_dist_sd =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
+ PARTITION =SIMP(statut='o',typ=sd_feti_sdaster),
+ CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ ),
+ b_dist_maille =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+ CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+ ),
+ ),
+
+ VERI_JACOBIEN =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',
+ fr ="Vérification de la forme des mailles (jacobiens tous de meme signe).",),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+AIDE=PROC(nom="AIDE",op=42,
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Interroger et imprimer une documentation partielle sur les noms des concepts déjà définis et sur les couples"
+ +" (type d'éléments, option) disponibles dans la version.",
+ regles=(AU_MOINS_UN('CONCEPT','TYPE_ELEM', ),),
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ TYPE_ELEM =FACT(fr="couple type_elem option",statut='f',
+ INITEL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ ),
+ CONCEPT =FACT(statut='f',max='**',
+ NOM =SIMP(fr="liste des noms de concept",statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="*"),
+ OPTION =SIMP(fr="option d'édition de concept",statut='f',typ='TXM',defaut="TOUT_TYPE",
+ into=("TOUT_TYPE","CREER","A_CREER",) ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
+ fr="Assembler deux maillages pour en former un nouveau",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+ MAILLAGE_1 = SIMP(statut='o',typ=maillage_sdaster,),
+ MAILLAGE_2 = SIMP(statut='o',typ=maillage_sdaster,),
+ OPERATION = SIMP(statut='o',typ='TXM',into=("SOUS_STR","SUPERPOSE","COLLAGE"),),
+ b_collage = BLOC(condition = "OPERATION == 'COLLAGE'",
+ COLLAGE = FACT(statut='o',
+ GROUP_MA_1 =SIMP(statut='o',typ=grma),
+ GROUP_MA_2 =SIMP(statut='o',typ=grma),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+def asse_matr_gene_prod(METHODE,**args):
+ if (METHODE=="INITIAL") : return matr_asse_gene_r
+ elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
+ else : return matr_asse_gene_r
+
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
+ fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+ b_option =BLOC(condition = "METHODE == 'CLASSIQUE'",
+ OPTION =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 06/10/2008 AUTEUR DEVESA G.DEVESA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def asse_matrice_prod(MATR_ELEM,**args):
+ if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
+ if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
+ if AsType(MATR_ELEM) == matr_elem_temp_r : return matr_asse_temp_r
+ if AsType(MATR_ELEM) == matr_elem_pres_c : return matr_asse_pres_c
+ raise AsException("type de concept resultat non prevu")
+
+ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
+ fr="Construction d'une matrice assemblée",reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ MATR_ELEM =SIMP(statut='o',
+ typ=(matr_elem_depl_r,matr_elem_depl_c,matr_elem_temp_r,matr_elem_pres_c) ),
+ NUME_DDL =SIMP(statut='o',typ=nume_ddl_sdaster),
+ SYME =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ CHAR_CINE =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+ fr="Projection des chargements sur la base modale d'une sous structure",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+ b_nume =BLOC(condition = "METHODE == 'CLASSIQUE'",
+ CHAR_SOUS_STRUC =FACT(statut='o',max='**',
+ SOUS_STRUC =SIMP(statut='o',typ='TXM' ),
+ VECT_ASSE =SIMP(statut='o',typ=cham_no_sdaster ),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
+ fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ VECT_ELEM =SIMP(statut='o',typ=vect_elem,max='**'),
+ NUME_DDL =SIMP(statut='o',typ=nume_ddl_sdaster ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2,) ),
+) ;
+#& MODIF COMMANDE DATE 14/12/2009 AUTEUR DEVESA G.DEVESA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DEVESA G.DEVESA
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
+ fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(EXCLUS('AMOR_RAYLEIGH','ENER_SOL',),
+ EXCLUS('AMOR_RAYLEIGH','AMOR_INTERNE',),
+ EXCLUS('AMOR_RAYLEIGH','AMOR_SOL',),
+ PRESENT_PRESENT('ENER_SOL','AMOR_INTERNE'),
+ PRESENT_PRESENT('ENER_SOL','AMOR_SOL'),
+ ),
+ AMOR_RAYLEIGH =FACT(statut='f',
+ AMOR_ALPHA =SIMP(statut='o',typ='R'),
+ AMOR_BETA =SIMP(statut='o',typ='R'),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca ),
+ ),
+ ENER_SOL =FACT(statut='f',
+ regles=(UN_PARMI('GROUP_NO_RADIER','GROUP_MA_RADIER'),
+ PRESENT_ABSENT('COEF_GROUP','FONC_GROUP'),
+# Peut-on remplacer les deux règles suivantes par un ENSEMBLE_('KRX','KRY','KRZ')
+ PRESENT_PRESENT('KRX','KRY'),
+ PRESENT_PRESENT('KRX','KRZ'),
+ PRESENT_ABSENT('COOR_CENTRE','NOEUD_CENTRE'),
+ PRESENT_ABSENT('GROUP_NO_CENTRE','NOEUD_CENTRE'),
+ PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca ),
+ GROUP_NO_RADIER =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ GROUP_MA_RADIER =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ FONC_GROUP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_GROUP =SIMP(statut='f',typ='R',max='**'),
+ KX =SIMP(statut='o',typ='R' ),
+ KY =SIMP(statut='o',typ='R' ),
+ KZ =SIMP(statut='o',typ='R' ),
+ KRX =SIMP(statut='f',typ='R' ),
+ KRY =SIMP(statut='f',typ='R' ),
+ KRZ =SIMP(statut='f',typ='R' ),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no),
+ COOR_CENTRE =SIMP(statut='f',typ='R',max=3),
+ ),
+ AMOR_INTERNE =FACT(statut='f',
+ ENER_POT =SIMP(statut='o',typ=table_sdaster ),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ AMOR_REDUIT =SIMP(statut='o',typ='R',max='**'),
+ ),
+ AMOR_SOL =FACT(statut='f',
+ AMOR_REDUIT =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FONC_AMOR_GEO =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+ HOMOGENE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 0.3 ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ASSIRE A.ASSIRE
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
+ fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+
+ regles=(EXCLUS('TOUT','GROUP_MA',),EXCLUS('TOUT','MAILLE',),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+#
+#
+# introduire un mot cle de type modelisation : mécanique,thermique,...
+#
+
+ OPTION =SIMP(statut='o',typ='TXM',
+ into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+ "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+ "COOR_ELGA"), ),
+
+ b_thermique =BLOC(condition="OPTION in ('FLUX_ELNO_TEMP','FLUX_ELGA_TEMP',)",
+ TEMP =SIMP(statut='o',typ=(cham_no_sdaster,)),
+ ),
+
+ b_acoustique =BLOC(condition="OPTION in ('PRES_ELNO_DBEL','PRES_ELNO_REEL','PRES_ELNO_IMAG',)",
+ PRES =SIMP(statut='o',typ=(cham_no_sdaster,)),
+ ),
+
+
+
+ EXCIT =FACT(statut='f',max='**',
+ regles=(EXCLUS('FONC_MULT','COEF_MULT', ),),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_MULT =SIMP(statut='f',typ='R'), ),
+
+ INST =SIMP(statut='f',typ='R',defaut= 0.E+0),
+ ACCE =SIMP(statut='f',typ=cham_no_sdaster),
+ NUME_COUCHE =SIMP(statut='f',typ='I',defaut= 1),
+ NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ANGLE =SIMP(statut='f',typ='I',defaut= 0),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
+ fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ NUME_DDL =SIMP(statut='o',typ=nume_ddl_sdaster ),
+ CHAR_CINE =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ),validators=NoRepeat(),max='**' ),
+ INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DEVESA G.DEVESA
+def calc_char_seisme_prod(MATR_MASS,**args ):
+ if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_sdaster
+ raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op= 92,sd_prod=calc_char_seisme_prod,
+ reentrant='n',fr="Calcul du chargement sismique",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+ MATR_MASS =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+ DIRECTION =SIMP(statut='o',typ='R',max=6,fr="Directions du séisme imposé"),
+ MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MODE_STAT =SIMP(statut='f',typ=(mode_meca,) ),
+ b_mode_stat =BLOC ( condition = "MODE_STAT != None",
+ regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+ NOEUD =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.calc_ecrevisse_ops import calc_ecrevisse_ops
+
+def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,**args):
+
+ self.type_sdprod(CHARGE_MECA,char_meca)
+ self.type_sdprod(CHARGE_THER1,char_ther)
+ self.type_sdprod(CHARGE_THER2,char_ther)
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(DEBIT,table_sdaster)
+ return None
+
+
+
+CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecrevisse_prod,reentrant='n',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ regles = (UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
+# ********************************************
+ CHARGE_MECA =SIMP(statut='o',typ=CO),
+ CHARGE_THER1 =SIMP(statut='o',typ=CO),
+ CHARGE_THER2 =SIMP(statut='o',typ=CO),
+ TABLE =SIMP(statut='o',typ=CO),
+ DEBIT =SIMP(statut='o',typ=CO),
+
+
+# MODELES MECANIQUES
+# ********************************************
+ MODELE_MECA =SIMP(statut='o',typ=modele_sdaster),
+ MODELE_THER =SIMP(statut='o',typ=modele_sdaster),
+
+
+# DONNEES GEOMETRIQUES RELATIVES AUX RESULTATS
+# ********************************************
+ RESULTAT =FACT(statut='o',min=1,max=1,
+ MECANIQUE =SIMP(statut='o',typ=resultat_sdaster),
+ THERMIQUE =SIMP(statut='o',typ=resultat_sdaster),
+ regles=(EXCLUS('NUME_ORDRE','INST'),),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ ),
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+
+ FISSURE =FACT(statut='o',min=1,max='**',
+ PREFIXE_FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,8),),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+ fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+ GROUP_NO_ORIG =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ GROUP_NO_EXTR =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+ OUVERT_REMANENTE =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+ TORTUOSITE =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+ fr="Coefficient de tortuosite de la fissure" ),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section", ),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section", ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+
+ ECOULEMENT =FACT(statut='o',min=1,max=1,
+ PRES_ENTREE =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='o',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE =FACT(statut='o',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+# GENERAL
+# *******
+
+ COURBES =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+ ENTETE =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+) ;
+#& MODIF COMMANDE DATE 27/04/2010 AUTEUR DESROCHES X.DESROCHES
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ASSIRE A.ASSIRE
+def calc_elem_prod(RESULTAT,**args):
+ if AsType(RESULTAT) != None : return AsType(RESULTAT)
+ raise AsException("type de concept resultat non prevu")
+
+CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Compléter ou créer un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster,
+ fr="Résultat d'une commande globale"),
+
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+ CONCEPT_SENSIBLE("SEPARE"),
+ DERIVABLE('RESULTAT'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM' ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="le calcul ne sera effectué que sur ces mailles là"),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**',
+ fr="le calcul ne sera effectué que sur ces mailles là"),
+
+# definition d'un repere local
+
+ REPE_COQUE =FACT(statut='f',max='**',
+ fr="définiton du lieu de post-traitement",
+ regles=EXCLUS('ANGL_REP','VECTEUR'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**',),
+
+ NUME_COUCHE =SIMP(statut='f',typ='I',defaut= 1,
+ fr="numero de couche dans l'épaisseur de la coque ou du tuyau" ),
+ NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
+ fr="position dans l'épaisseur de la coque, ou de la couche" ),
+
+ ANGLE =SIMP(statut='f',typ='I',defaut= 0,
+ fr="angle de dépouillement pour les tuyaux, en degres à partir de la génératrice" ),
+
+ PLAN =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL"),
+ fr="Plan de calcul pour les plaques excentrées" ),
+
+ ANGL_REP =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="définition du repere de post-traitement, par défaut ANGL_REP=(0.,0.)"),
+ VECTEUR =SIMP(statut='f',typ='R',min=3,max=3,
+ fr="définition du repere de post-traitement, par défaut VECTEUR=(1.,0.,0.)"),
+ ),
+
+# options pour des resultats lineaires
+
+ b_lineaire =BLOC( condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\
+ comb_fourier,mult_elas,fourier_elas,mode_flamb)",
+ fr="options mecaniques lineaires",
+ TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques lineaires",
+ into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","DERIVEES",
+ "INDI_ERREUR","AUTRES","TOUTES"),
+ ),
+ b_toutes=BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO_ELGA",
+ # contraintes
+ into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+ "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
+ "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","SIGM_ELNO_TUYO","PROJ_ELEM_SIGM",
+ # déformations
+ "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELGA_DEPL","EPSG_ELNO_DEPL",
+ "EPME_ELNO_DEPL","EPME_ELGA_DEPL","DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+ "EPVC_ELNO","EPVC_ELGA",
+ # ENER
+ "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
+ "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",
+ # estimateurs erreur
+ "SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
+ "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
+ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+ "SING_ELEM","SING_ELNO_ELEM",
+ # CRIT
+ "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","CRIT_ELNO_RUPT",
+ "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+ "ENDO_ELGA","ENDO_ELNO_ELGA",
+ "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+ # derivees
+ "DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
+ # autres
+ "VALE_NCOU_MAXI","PRES_DBEL_DEPL"),),
+
+ NOM_CHAM =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ),
+ NOM_CMP =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI", ),
+
+ b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+ RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)",
+ PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+ fr="precision demandee pour calculer la carte de taille des elements"),
+ TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+ fr="choix de l'estimateur d'erreur"),),
+
+ EXCIT =FACT(statut='f',max='**',
+ fr="Charges contenant les températures, les efforts répartis pour les poutres...",
+ regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
+ COEF_MULT =SIMP(statut='f',typ='R'),
+ COEF_MULT_C =SIMP(statut='f',typ='C'),
+ PHAS_DEG =SIMP(statut='f',typ='R'),
+ PUIS_PULS =SIMP(statut='f',typ='I'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+
+
+ ),
+# fin bloc b_toutes
+
+ b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+ fr="options de contraintes elasticite 2D et 3D",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+ fr="option de calcul des contraintes",
+ into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),),
+
+ b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',) or \
+ (type(OPTION)==type(()) and 'SIGM_ELNO_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'SIEF_ELGA_DEPL' in OPTION ) ",
+ fr="charge contenant les temperatures ou autre charge",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
+ ),
+ ),
+
+ b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+ fr="options de contraintes elasticite poutres, coques, tuyaux",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+ fr="option de calcul des contraintes ou efforts generalises",
+ into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO",
+ "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
+ "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF"),),
+
+ b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',\
+ 'SIPO_ELNO_DEPL','EFGE_ELNO_DEPL',) or \
+ (type(OPTION)==type(()) and 'SIGM_ELNO_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'SIEF_ELGA_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'SIPO_ELNO_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'EFGE_ELNO_DEPL' in OPTION ) ",
+ fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
+ EXCIT =FACT(statut='f',max='**',
+ regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca) ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
+ COEF_MULT =SIMP(statut='f',typ='R'),
+ COEF_MULT_C =SIMP(statut='f',typ='C'),
+ PHAS_DEG =SIMP(statut='f',typ='R'),
+ PUIS_PULS =SIMP(statut='f',typ='I'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+ ),
+
+
+ ),
+# fin bloc contraintes struct
+
+ b_epsi =BLOC( condition = "TYPE_OPTION=='EPSI'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+ "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO","EPVC_ELNO","EPVC_ELGA",),
+ ),
+b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_ELNO_TUYO' ) or \
+ (type(OPTION)==type(()) and 'EPSI_ELNO_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'EPSI_ELNO_TUYO' in OPTION ) or \
+ (type(OPTION)==type(()) and 'EPSI_ELGA_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'EPME_ELNO_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'EPME_ELGA_DEPL' in OPTION ) ",
+ fr="charge contenant les temperatures",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca,) ),),
+ ),
+ ),
+ b_ener =BLOC( condition = "TYPE_OPTION=='ENER'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
+ "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",),
+ ),
+ b_charge =BLOC( condition = "OPTION in ('EPOT_ELEM_DEPL','ECIN_ELEM_DEPL','ENEL_ELGA','ENEL_ELNO_ELGA',) or \
+ (type(OPTION)==type(()) and 'EPOT_ELEM_DEPL' in OPTION ) or \
+ (type(OPTION)==type(()) and 'ENEL_ELGA' in OPTION ) or \
+ (type(OPTION)==type(()) and 'ENEL_ELNO_ELGA' in OPTION ) or \
+ (type(OPTION)==type(()) and 'ECIN_ELEM_DEPL' in OPTION ) ",
+ fr="charge contenant les temperatures",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+ ),
+
+ b_crit =BLOC( condition = "TYPE_OPTION=='CRIT'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+ "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+ "ENDO_ELGA","ENDO_ELNO_ELGA",
+ "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+ ) ),
+ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+
+ b_derivees =BLOC( condition = "TYPE_OPTION=='DERIVEES'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
+ ) ),),
+
+ b_autres =BLOC( condition = "TYPE_OPTION=='AUTRES'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("VALE_NCOU_MAXI","PRES_DBEL_DEPL",
+ ) ),
+ b_maxi =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
+ (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
+ NOM_CMP =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+ ),
+
+ b_indi_erreur =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
+ into=("SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
+ "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
+ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+ "SING_ELEM","SING_ELNO_ELEM",
+ )),
+
+ b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+ RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)",
+ PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+ fr="precision demandee pour calculer la carte de taille des elements" ),
+ TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+ fr="choix de l'estimateur d'erreur"),),
+
+ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+ ),
+# fin bloc lineaire
+
+# statique ou dynamique non lineaire : evol_noli
+ b_noli =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options mecaniques non lineaires",
+ TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques non lineaires",
+ into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","FLUX",
+ "VARI","INDI_ERREUR","TOUTES","AUTRES"),
+ ),
+ b_toutes =BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol noli",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=( "SIEF_ELNO_ELGA","PROJ_ELEM_SIGM",
+ "SIGM_ELNO_TUYO","SIGM_ELNO_COQU","PROJ_ELNO_SIGM",
+ "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","EFGE_ELNO_CART",
+ "FLHN_ELGA",
+ # EPSI
+ "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+ "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+ "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+ "EPSP_ELNO","EPSP_ELGA",
+ "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA",
+ "EPFP_ELNO","EPFP_ELGA",
+ "VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU","CRIT_ELNO_RUPT",
+ "EXTR_ELGA_VARI","EXTR_ELNO_VARI",
+ # CRIT
+ "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+ "ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+ "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+ "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+ "ENDO_ELGA","ENDO_ELNO_ELGA","INDI_LOCA_ELGA","SING_ELEM",
+ "SING_ELNO_ELEM","ENDO_ELNO_SIGA","ENDO_ELNO_SINO",
+ "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","ENEL_ELGA","ENEL_ELNO_ELGA",
+ "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","VALE_NCOU_MAXI",
+ "DISS_ELGA","DISS_ELNO_ELGA"),
+ ),
+ NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
+ into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE"),
+ fr="Type de norme pour les options RADI_ et DCHA_"),
+
+ NOM_CHAM =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"),
+ NOM_CMP =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),
+
+ b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+ RESU_DUAL=SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual"),),
+
+ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)",
+ PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+ fr="precision demandee pour calculer la carte de taille des elements" ),
+ TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+ fr="choix de l'estimateur d'erreur"),),
+
+
+ b_extr = BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+ NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+ into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+ "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+ "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+ "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4",),),
+ ),
+ EXCIT =FACT(statut='f',max='**',
+ regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+ CHARGE =SIMP(statut='o',typ=char_meca ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
+ COEF_MULT =SIMP(statut='f',typ='R'),
+ COEF_MULT_C =SIMP(statut='f',typ='C'),
+ PHAS_DEG =SIMP(statut='f',typ='R'),
+ PUIS_PULS =SIMP(statut='f',typ='I'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+ ),
+
+ b_flux =BLOC( condition = "TYPE_OPTION == 'FLUX'",
+ fr="option de calcul de flux hydraulique 2D et 3D",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ # flux hydraulique
+ into=( "FLHN_ELGA",),),
+ ),
+
+ b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+ fr="options de contraintes non lin 2D et 3D",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ # contraintes
+ into=( "SIEF_ELNO_ELGA",),),
+ ),
+
+ b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+ fr="options de contraintes non lin poutres, coques",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ # contraintes
+ into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
+ "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),),
+ ),
+
+ b_epsi =BLOC( condition = "TYPE_OPTION=='EPSI'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=( "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+ "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+ "EPSP_ELNO","EPSP_ELGA","DEGE_ELNO_DEPL","EPVC_ELNO","EPVC_ELGA",
+ "EPFD_ELNO","EPFD_ELGA","EPFP_ELNO","EPFP_ELGA"),
+ ),
+ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+ b_epstuyo =BLOC( condition = "OPTION == 'EPSI_ELNO_TUYO' or \
+ (type(OPTION)==type(()) and 'EPSI_ELNO_TUYO' in OPTION) ",
+ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+
+ b_vari =BLOC( condition = "TYPE_OPTION=='VARI'",
+ fr="Calcul et extraction des variables internes",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU",
+ "EXTR_ELGA_VARI","EXTR_ELNO_VARI"),
+ ),
+ b_extr =BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+ NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+ into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+ "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+ "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+ "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4"),),
+ ),
+ ),
+
+ b_ener =BLOC( condition = "TYPE_OPTION=='ENER'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",
+ "DISS_ELGA","DISS_ELNO_ELGA",),
+ ),
+ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ ),
+
+ b_crit =BLOC( condition = "TYPE_OPTION=='CRIT'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+ "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+ "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT",
+ "ENDO_ELGA","ENDO_ELNO_ELGA",
+ "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+ ) ),
+ ),
+
+ b_autres =BLOC( condition = "TYPE_OPTION=='AUTRES'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("VALE_NCOU_MAXI",) ),
+ b_maxi =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
+ (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
+ NOM_CMP =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+ ),
+
+ b_indi_erreur =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
+ into=("ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+ "SING_ELEM","SING_ELNO_ELEM",) ),
+
+ b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+ (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+ RESU_DUAL =SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual")),
+
+ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)",
+ PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+ fr="precision demandee pour calculer la carte de taille des elements" ),
+ TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+ "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+ fr="choix de l'estimateur d'erreur"),),
+
+ b_indic = BLOC( condition ="OPTION in ('DCHA_ELNO_SIGM','DCHA_ELGA_SIGM','RADI_ELNO_SIGM','RADI_ELGA_SIGM') or\
+ (type(OPTION)==type(()) and 'DCHA_ELNO_SIGM' in OPTION) or\
+ (type(OPTION)==type(()) and 'DCHA_ELGA_SIGM' in OPTION) or\
+ (type(OPTION)==type(()) and 'RADI_ELNO_SIGM' in OPTION) or\
+ (type(OPTION)==type(()) and 'RADI_ELGA_SIGM' in OPTION) ",
+ NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
+ into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
+ ),
+ ),
+ ),
+# fin bloc evol_noli
+
+# thermique : evol_ther, fourier_ther
+ b_ther =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+ "HYDR_ELNO_ELGA","DURT_ELGA_META","DURT_ELNO_META",
+ "SOUR_ELGA_ELEC","ERRE_ELEM_TEMP","ERRE_ELNO_ELEM",),),
+ EXCIT =FACT(statut='f',max='**',
+ regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+ CHARGE =SIMP(statut='o',typ=char_ther ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
+ COEF_MULT =SIMP(statut='f',typ='R'),
+ COEF_MULT_C =SIMP(statut='f',typ='C'),
+ PHAS_DEG =SIMP(statut='f',typ='R'),
+ PUIS_PULS =SIMP(statut='f',typ='I'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),
+ ),
+ ),
+
+# acoustique
+ b_acou =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+ "INTE_ELNO_ACTI","INTE_ELNO_REAC",
+ ),),
+ EXCIT =FACT(statut='f',max='**',
+ regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+ CHARGE =SIMP(statut='o',typ=char_acou ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
+ COEF_MULT =SIMP(statut='f',typ='R'),
+ COEF_MULT_C =SIMP(statut='f',typ='C'),
+ PHAS_DEG =SIMP(statut='f',typ='R'),
+ PUIS_PULS =SIMP(statut='f',typ='I'),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+ ),
+
+
+# Choix du solveur (utilisé actuellement pour estimateur d'erreur ZZ1) :
+ SOLVEUR =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("LDLT","MUMPS","MULT_FRONT",) ),
+
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+
+
+
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 28/01/2010 AUTEUR BODEL C.BODEL
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 NISTOR I.NISTOR
+
+from Macro.calc_essai_ops import calc_essai_ops
+
+def calc_essai_prod(self,RESU_IDENTIFICATION,
+ RESU_MODIFSTRU,
+ **args):
+
+ if RESU_IDENTIFICATION != None:
+ for res in RESU_IDENTIFICATION:
+ self.type_sdprod(res['TABLE'],table_fonction)
+
+ MTYPES = {
+ 'MODELE' : modele_sdaster,
+ 'MODE_MECA' : mode_meca,
+ 'NUME_DDL' : nume_ddl_sdaster,
+ 'MAILLAGE' : maillage_sdaster,
+ 'MASS_MECA' : matr_asse_depl_r,
+ 'RIGI_MECA' : matr_asse_depl_r,
+ 'AMOR_MECA' : matr_asse_depl_r,
+ 'MACR_ELEM' : macr_elem_stat,
+ 'PROJ_MESU' : mode_gene,
+ 'BASE_ES' : mode_meca,
+ 'BASE_LMME' : mode_meca,
+ 'MODE_STA' : mode_meca,
+ }
+ if RESU_MODIFSTRU != None:
+ for res in RESU_MODIFSTRU:
+ for mc, typ in MTYPES.items():
+ if res[mc]:
+ self.type_sdprod(res[mc], typ)
+ return None
+
+
+CALC_ESSAI = MACRO(nom = 'CALC_ESSAI',
+ op = calc_essai_ops,
+ sd_prod = calc_essai_prod,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "Outil de post-traitement interactif pour Meidee ",
+ INTERACTIF = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
+ RESU_IDENTIFICATION = FACT( statut='f',max='**',
+ TABLE = SIMP(statut='f', typ=CO),
+ ),
+ RESU_MODIFSTRU = FACT( statut='f', max=1,
+ MODELE=SIMP(statut='f',typ=CO,defaut=None),
+ MODE_MECA=SIMP(statut='f',typ=CO,defaut=None),
+ MAILLAGE=SIMP(statut='f',typ=CO,defaut=None),
+ NUME_DDL=SIMP(statut='f',typ=CO,defaut=None),
+ MASS_MECA=SIMP(statut='f',typ=CO,defaut=None),
+ RIGI_MECA=SIMP(statut='f',typ=CO,defaut=None),
+ AMOR_MECA=SIMP(statut='f',typ=CO,defaut=None),
+ MACR_ELEM=SIMP(statut='f',typ=CO,defaut=None),
+ PROJ_MESU=SIMP(statut='f',typ=CO,defaut=None),
+ BASE_ES=SIMP(statut='f',typ=CO,defaut=None),
+ BASE_LMME=SIMP(statut='f',typ=CO,defaut=None),
+ MODE_STA=SIMP(statut='f',typ=CO,defaut=None),
+ ),
+
+ b_inter = BLOC( condition="INTERACTIF=='NON'",
+
+ EXPANSION = FACT( statut='f',max='**',
+ CALCUL = SIMP(statut='o',typ=mode_meca),
+ NUME_MODE_CALCUL = SIMP(statut='f',typ='I',validators=NoRepeat(),
+ max='**',defaut=0),
+ MESURE = SIMP(statut='o',typ=mode_meca),
+ NUME_MODE_MESURE = SIMP(statut='f',typ='I',validators=NoRepeat(),
+ max='**',defaut=0),
+ RESOLUTION = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')),
+ b_reso = BLOC(condition = "RESOLUTION=='SVD'",
+ EPS = SIMP(statut='f',typ='R', defaut = 0.)
+ )
+ ),
+ IDENTIFICATION = FACT( statut='f',max='**',
+ ALPHA = SIMP(statut='f',typ='R', defaut = 0.),
+ EPS = SIMP(statut='f',typ='R', defaut = 0.),
+ OBSERVABILITE = SIMP(statut='o',typ=mode_meca),
+ COMMANDABILITE = SIMP(statut='o',typ=mode_meca),
+ INTE_SPEC = SIMP(statut='o',typ=table_sdaster),
+ RESU_EXPANSION = SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+ BASE = SIMP(statut='o',typ=mode_meca),
+ ),
+ MODIFSTRUCT = FACT( statut='f', max=1,
+ MESURE = SIMP(statut='o', typ=mode_meca),
+ MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
+ MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
+ RESOLUTION = SIMP(statut='f', typ='TXM',
+ into=('ES', 'LMME'), defaut='ES'),
+ b_resol = BLOC( condition = "RESOLUTION=='LMME'",
+ MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
+ ),
+ NUME_MODE_MESU = SIMP(statut='o', typ='I',max='**'),
+ NUME_MODE_CALCUL = SIMP(statut='o', typ='I',max='**'),
+ MODELE_MODIF = SIMP(statut='o', typ=modele_sdaster),
+ ),
+ # Si on realise une modification structurale, on donne les DDL capteurs et interface
+ b_modif = BLOC( condition="MODIFSTRUCT!=None",
+ GROUP_NO_CAPTEURS = FACT( statut='f', max='**',
+ GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+ NOM_CMP = SIMP(statut='o',typ='TXM', max='**'),
+ ),
+ GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
+ GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+ NOM_CMP = SIMP(statut='o',typ='TXM', max='**'),
+ ),
+ ),
+ ),
+ );
+
+#& MODIF COMMANDE DATE 28/04/2009 AUTEUR ASSIRE A.ASSIRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 ASSIRE A.ASSIRE
+from Macro.calc_europlexus_ops import calc_europlexus_ops
+
+def calc_europlexus_prod(self,COURBE=None,**args):
+ if COURBE is not None:
+ self.type_sdprod(args['TABLE_COURBE'],table_sdaster)
+ return evol_noli
+
+CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=calc_europlexus_prod,
+ reentrant='n',
+ #UIinfo={"groupes":("Dynamique rapide",)},
+ fr="Chainage Code_Aster-Europlexus",
+
+ LOGICIEL = SIMP(statut='f', typ='TXM', defaut='/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'),
+
+ MODELE = SIMP(statut='o',typ=modele_sdaster),
+ CARA_ELEM = SIMP(statut='o',typ=cara_elem),
+
+ FONC_PARASOL = FACT(statut='f',
+ NFKT = SIMP(statut='f',typ=(fonction_sdaster,)),
+ NFKR = SIMP(statut='f',typ=(fonction_sdaster,)),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+
+
+ CHAM_MATER = SIMP(statut='o',typ=cham_mater),
+
+ EXCIT = FACT(statut='o',max='**',
+ CHARGE = SIMP(statut='o',typ=(char_meca,)),
+ FONC_MULT = SIMP(statut='o',typ=(fonction_sdaster,)),
+ ),
+
+ DIME = FACT(statut='o', regles=(AU_MOINS_UN('UNITE_DIME','Q4GS','FORCE',
+ 'PT6L','ZONE','POUT','ECRO',
+ 'APPU','BLOQ','PRESS','PMAT',
+ 'DKT3','DEPL','FNOM','TABLE','FTAB',
+ 'MTTI','NEPE','LIAI',), ),
+ UNITE_DIME=SIMP(statut='f',typ='I'),
+
+ Q4GS = SIMP(statut='f',typ='I'),
+ FORCE = SIMP(statut='f',typ='I'),
+ PT6L = SIMP(statut='f',typ='I'),
+ ZONE = SIMP(statut='f',typ='I'),
+ POUT = SIMP(statut='f',typ='I'),
+ ECRO = SIMP(statut='f',typ='I'),
+ APPU = SIMP(statut='f',typ='I'),
+ BLOQ = SIMP(statut='f',typ='I'),
+ PRESS = SIMP(statut='f',typ='I',min=2,max=2,),
+ PMAT = SIMP(statut='f',typ='I'),
+ DKT3 = SIMP(statut='f',typ='I'),
+ DEPL = SIMP(statut='f',typ='I'),
+ FNOM = SIMP(statut='f',typ='I'),
+ TABLE = SIMP(statut='f',typ='I',min=2,max=2,),
+ FTAB = SIMP(statut='f',typ='I'),
+ MTTI = SIMP(statut='f',typ='I'),
+ NEPE = SIMP(statut='f',typ='I'),
+ LIAI = SIMP(statut='f',typ='I'),
+ ),
+
+ CALCUL = FACT(statut='o',
+ TYPE_DISCRETISATION = SIMP(statut='o',typ='TXM',defaut='AUTO',into=('AUTO','UTIL')),
+ INST_FIN = SIMP(statut='o',typ='R'),
+ INST_INIT = SIMP(statut='o',typ='R'),
+ NMAX = SIMP(statut='f',typ='R'),
+
+ b_auto =BLOC( condition = "TYPE_DISCRETISATION=='AUTO'",
+ CSTAB = SIMP(statut='o',typ='R',max='**',defaut=0.3),
+# DTMAX = SIMP(statut='f',typ='R',max='**'),
+ ),
+
+ b_util =BLOC( condition = "TYPE_DISCRETISATION=='UTIL'",
+ PASFIX = SIMP(statut='o',typ='R',max='**'),
+ ),
+ ),
+
+
+ OBSERVATION =FACT(statut='f',max='**',
+ SUIVI_DDL = SIMP(statut='o',typ='TXM',defaut="OUI",max=1,into=("OUI","NON")),
+ b_suivi =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+ regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',),
+ EXCLUS('PAS_NBRE','PAS_INST',),
+ EXCLUS('GROUP_NO','TOUT_GROUP_NO',),
+ EXCLUS('GROUP_MA','TOUT_GROUP_MA',), ),
+ NOM_CHAM = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', defaut = ('DEPL',),
+ into=('DEPL','VITE','ACCE','SIEF_ELGA','EPSI_ELGA','VARI_ELGA'),),
+ PAS_INST = SIMP(statut='f',typ='R'),
+ PAS_NBRE = SIMP(statut='f',typ='I'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOUT_GROUP_NO = SIMP(statut='f',typ='TXM',into=('OUI',),),
+ TOUT_GROUP_MA = SIMP(statut='f',typ='TXM',into=('OUI',),),
+ ),
+ ),
+
+
+ ARCHIVAGE =FACT(statut='f', regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), EXCLUS('PAS_NBRE','PAS_INST',), ),
+ PAS_INST = SIMP(statut='f',typ='R'),
+ PAS_NBRE = SIMP(statut='f',typ='I'),
+ CONT_GENER = SIMP(statut='o',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+ ),
+ COURBE = FACT(statut='f',max='**', regles=(EXCLUS('GROUP_NO','GROUP_MA')),
+ UNITE_ALIT = SIMP(statut='f',typ='I'),
+ NOM_CHAM = SIMP(statut='f',typ='TXM'),
+ NOM_CMP = SIMP(statut='f',typ='TXM'),
+# NOEUD = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+# MAILLE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1),
+
+ b_maille = BLOC(condition = "GROUP_MA != None", regles=(AU_MOINS_UN('NUM_GAUSS')),
+ NUM_GAUSS = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),),
+ ),
+ b_courbe = BLOC(condition = "COURBE != None",
+ regles=(AU_MOINS_UN('PAS_NBRE_COURBE','PAS_INST_COURBE',),
+ AU_MOINS_UN('TABLE_COURBE',)),
+ PAS_INST_COURBE = SIMP(statut='f',typ='R'),
+ PAS_NBRE_COURBE = SIMP(statut='f',typ='I'),
+ TABLE_COURBE = SIMP(statut='f', typ=CO),
+ ),
+ DOMAINES = FACT(statut='f',max='**',
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ IDENTIFIANT = SIMP(statut='f',typ='I'),),
+ INTERFACES = FACT(statut='f',max='**',
+ GROUP_MA_1 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA_2 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOLE = SIMP(statut='f',typ='R'),
+ IDENT_DOMAINE_1 = SIMP(statut='f',typ='I'),
+ IDENT_DOMAINE_2 = SIMP(statut='f',typ='I'),),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
+ ) ;
+#& MODIF COMMANDE DATE 06/07/2009 AUTEUR GALENNE E.GALENNE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ANGLES J.ANGLES
+def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
+ if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem
+ if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem
+ if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_NOEUD": return cham_no_sdaster
+ if TYPE_CALCUL == "FATIGUE_VIBR" : return cham_elem
+ raise AsException("type de calcul non prevu")
+
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
+ fr="Calculer un champ de dommage de fatigue subit par une structure et déterminer le plan critique"
+ +" dans lequel le cisaillement est maximal.",
+ UIinfo={"groupes":("Post traitements",)},
+
+ TYPE_CALCUL = SIMP(statut='o',typ='TXM',
+ into=("CUMUL_DOMMAGE","FATIGUE_MULTI","FATIGUE_VIBR") ),
+
+ b_cumul_domma =BLOC(condition = "TYPE_CALCUL == 'CUMUL_DOMMAGE'",
+ fr="Calcul d un champ de dommage subi par une structure.",
+ regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+ OPTION =SIMP(statut='o',typ='TXM',
+ into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
+ "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
+ "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
+
+ b_sigm =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
+ fr="Calcul a partir d un champ de contraintes.",
+ HISTOIRE =FACT(statut='o',
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+ evol_noli) ),
+ EQUI_GD =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+ into=("VMIS_SG",) ),
+ ),
+ ),
+ b_epsi =BLOC(condition = "OPTION != 'DOMA_ELNO_SIGM' and OPTION != 'DOMA_ELGA_SIGM'",
+ fr="Calcul a partir d un champ de déformations.",
+ HISTOIRE =FACT(statut='o',
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+ evol_noli) ),
+ EQUI_GD =SIMP(statut='o',typ='TXM',defaut="INVA_2_SG",
+ into=("INVA_2_SG",) ),
+ ),
+ ),
+ DOMMAGE =SIMP(statut='o',typ='TXM',
+ into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",
+ "TAHERI_MIXTE",) ),
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ TAHERI_NAPPE =SIMP(statut='f',typ=(nappe_sdaster,formule) ),
+ TAHERI_FONC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ b_domma_moda =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_VIBR'",
+ fr="Calcul d un champ de dommage en dynamique vibratoire",
+ regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+ OPTION =SIMP(statut='o',typ='TXM',
+ into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",) ),
+ CORR_SIGM_MOYE = SIMP(statut='o',typ='TXM',into=("GOODMAN","GERBER")),
+ HISTOIRE =FACT(statut='o',
+ RESULTAT =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+ MODE_MECA =SIMP(statut='o',typ=(mode_meca) ),
+ NUME_MODE =SIMP(statut='o',typ='I',min=1 ,max='**'),
+ FACT_PARTICI =SIMP(statut='o',typ='R',min=1, max='**',defaut=1. ),
+ EQUI_GD =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+ into=("VMIS_SG",) ),
+ ),
+ DOMMAGE =SIMP(statut='o',typ='TXM',
+ into=("WOHLER",) ),
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ ),
+
+ b_fatigue_multi =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
+ fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
+ TYPE_CHARGE =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ),
+ OPTION =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
+ RESULTAT =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+ CHAM_MATER =SIMP(statut='o',typ=(cham_mater) ),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**' ),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**' ),
+ COEF_PREECROU =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ b_period =BLOC(condition = "TYPE_CHARGE == 'PERIODIQUE'",
+ CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC","DANG_VAN_MODI_AC","VMIS_TRESCA") ),
+ b_fati_p =BLOC(condition = "(CRITERE == 'MATAKE_MODI_AC' or CRITERE == 'DANG_VAN_MODI_AC')",
+ METHODE =SIMP(statut='o',typ='TXM',into=("CERCLE_EXACT",) ),
+ ),
+ ),
+ b_non_period =BLOC(condition = "TYPE_CHARGE == 'NON_PERIODIQUE'",
+ CRITERE =SIMP(statut='o',typ='TXM',
+ into=("MATAKE_MODI_AV","DANG_VAN_MODI_AV","FATESOCI_MODI_AV","VMIS_TRESCA") ),
+ b_fati_np =BLOC(condition =
+ "(CRITERE == 'MATAKE_MODI_AV' or CRITERE == 'DANG_VAN_MODI_AV' or CRITERE == 'FATESOCI_MODI_AV')",
+ PROJECTION =SIMP(statut='o',typ='TXM',into=("UN_AXE", "DEUX_AXES") ),
+ DELTA_OSCI =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ ),
+ ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
+ reentrant='n',
+ fr="Calculer les paramètres modaux d'une structure soumise à un écoulement",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ VITE_FLUI =FACT(statut='f',
+ fr="Définir la plage de vitesse fluide étudiée",
+ VITE_MIN =SIMP(statut='f',typ='R' ),
+ VITE_MAX =SIMP(statut='f',typ='R' ),
+ NB_POIN =SIMP(statut='f',typ='I' ),
+ ),
+ BASE_MODALE =FACT(statut='o',
+
+ regles=(AU_MOINS_UN('AMOR_REDUIT','AMOR_UNIF','AMOR_REDUIT_CONN'),),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',max='**'),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+ AMOR_UNIF =SIMP(statut='f',typ='R',val_min=0.E+00 ),
+ AMOR_REDUIT_CONN=SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+ ),
+ TYPE_FLUI_STRU =SIMP(statut='o',typ=type_flui_stru ),
+ IMPRESSION =FACT(statut='f',
+ fr="Choix des informations à imprimer dans le fichier RESULTAT",
+ PARA_COUPLAGE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ DEFORMEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
+ if AsType(FONCTION) == nappe_sdaster:
+ return nappe_sdaster
+ elif AsType(FONCTION) == fonction_sdaster:
+ return fonction_sdaster
+ elif AsType(FONCTION) == fonction_c:
+ return fonction_c
+ elif AsType(FONCTION) == formule_c:
+ return fonction_c
+ elif AsType(FONCTION) == formule:
+ if NOM_PARA_FONC != None:
+ return nappe_sdaster
+ return fonction_sdaster
+ elif AsType(FONCTION) == para_sensi:
+ return para_sensi
+ raise AsException("type de concept resultat non prevu")
+
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_prod,
+ docu="U4.32.01-e",reentrant='n',
+ fr="Définit une fonction (ou une nappe) à partir d'une fonction FORMULE à 1 ou 2 variables",
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('VALE_PARA','LIST_PARA'),),
+ FONCTION =SIMP(statut='o',typ=(formule,fonction_sdaster,nappe_sdaster,fonction_c) ),
+ VALE_PARA =SIMP(statut='f',typ='R',max='**'),
+ LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ),
+ NOM_RESU =SIMP(statut='f',typ='TXM'),
+ NOM_PARA =SIMP(statut='f',typ='TXM'),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+ NOM_PARA_FONC =SIMP(statut='f',typ='TXM'),
+ b_eval_nappe =BLOC(condition = "NOM_PARA_FONC != None",
+ regles=(UN_PARMI('VALE_PARA_FONC','LIST_PARA_FONC'),),
+ VALE_PARA_FONC =SIMP(statut='f',typ='R',max='**'),
+ LIST_PARA_FONC =SIMP(statut='f',typ=listr8_sdaster ),
+ INTERPOL_FONC =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG")),
+ PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+ PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+from Macro.calc_fonction_ops import calc_fonction_ops
+def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
+ ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
+ LISS_ENVELOP,ABS, **args):
+
+ if (INTEGRE != None): return fonction_sdaster
+ if (DERIVE != None): return fonction_sdaster
+ if (INVERSE != None): return fonction_sdaster
+ if (COMB != None):
+ type_vale=AsType(COMB[0]['FONCTION'])
+ for mcfact in COMB :
+ if(AsType(mcfact['FONCTION'])!=type_vale):
+ raise AsException("CALC_FONCTION/COMB : pas de types hétérogènes nappe/fonction")
+ return type_vale
+ if (COMB_C != None):
+ vale=COMB_C[0]['FONCTION']
+ if(AsType(vale) == nappe_sdaster):
+ for mcfact in COMB_C[1:] :
+ if(AsType(mcfact['FONCTION'])!=nappe_sdaster):
+ raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+ return nappe_sdaster
+ else:
+ for mcfact in COMB_C :
+ if(AsType(mcfact['FONCTION'])==nappe_sdaster):
+ raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+ return fonction_c
+ if (ENVELOPPE != None): return AsType(ENVELOPPE[0]['FONCTION'])
+ if (FRACTILE != None): return AsType(FRACTILE[0] ['FONCTION'])
+ if (EXTRACTION != None): return fonction_sdaster
+ if (SPEC_OSCI != None): return nappe_sdaster
+ if (COMPOSE != None): return fonction_sdaster
+ if (ASSE != None): return fonction_sdaster
+ if (FFT != None):
+ vale=FFT[0]['FONCTION']
+ if (AsType(vale) == fonction_sdaster ) : return fonction_c
+ if (AsType(vale) == fonction_c) : return fonction_sdaster
+ if (CORR_ACCE != None): return fonction_sdaster
+ if (LISS_ENVELOP!= None): return nappe_sdaster
+ if (PUISSANCE != None): return AsType(PUISSANCE[0]['FONCTION'])
+ if (ABS != None): return fonction_sdaster
+ raise AsException("type de concept resultat non prevu")
+
+CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_fonction_prod
+ ,fr="Effectue des opérations mathématiques sur des concepts de type fonction",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE',
+ 'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
+ 'LISS_ENVELOP','INVERSE','ABS','FRACTILE'),),
+ FFT =FACT(statut='f',fr="Transformée de Fourier ou de son inverse",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ),
+ b_syme =BLOC ( condition = " AsType(FONCTION)==fonction_c ",
+ SYME =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
+ ),
+ ),
+ DERIVE =FACT(statut='f',fr="Dérivée d une fonction",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster ),
+ ),
+ INTEGRE =FACT(statut='f',fr="Intégrale d'une fonction",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster),
+ COEF =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+ ),
+ LISS_ENVELOP = FACT(statut='f',fr="Lissage d une enveloppe",
+ NAPPE =SIMP(statut='o',typ=nappe_sdaster ),
+ FREQ_MIN =SIMP(statut='f',typ='R',defaut =0.2),
+ FREQ_MAX =SIMP(statut='f',typ='R',defaut =35.5),
+ ELARG =SIMP(statut='f',typ='R',defaut =0.1 ),
+ TOLE_LISS =SIMP(statut='f',typ='R',defaut =0.25 ),
+ ),
+ SPEC_OSCI =FACT(statut='f',fr="Spectre d'oscillateur",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ FREQ =SIMP(statut='f',typ='R',max='**'),
+ NORME =SIMP(statut='o',typ='R',fr="Valeur de la norme du spectre d oscillateur" ),
+ NATURE =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+ NATURE_FONC =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+ ),
+ ABS =FACT(statut='f',fr="Valeur absolue d'une fonction",
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster,),
+ ),
+ COMB =FACT(statut='f',max='**',fr="Combinaison linéaire réelle de fonctions",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster) ),
+ COEF =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+ ),
+ COMB_C =FACT(statut='f',max='**',fr="Combinaison linéaire complexe de fonctions",
+ regles=(UN_PARMI('COEF_R','COEF_C'),),
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster) ),
+ COEF_R =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+ COEF_C =SIMP(statut='f',typ='C',fr="Coefficient complexe de la combinaison linéaire associée à la fonction" ),
+ ),
+ b_comb =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
+ LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ),
+ ),
+ COMPOSE =FACT(statut='f',fr="Composition de deux fonctions FONC_RESU(FONC_PARA)",
+ FONC_RESU =SIMP(statut='o',typ=fonction_sdaster),
+ FONC_PARA =SIMP(statut='o',typ=fonction_sdaster),
+ ),
+ EXTRACTION =FACT(statut='f',fr="Extraction sur une fonction complexe",
+ FONCTION =SIMP(statut='o',typ=fonction_c),
+ PARTIE =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
+ ),
+ ENVELOPPE =FACT(statut='f',fr="Enveloppe d une famille de fonctions",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+ ),
+ FRACTILE =FACT(statut='f',fr="Fractile d une famille de fonctions ou de nappes",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+ FRACT =SIMP(statut='o',typ='R',defaut=1.,val_min=0.,val_max=1.,fr="Valeur du fractile" ),
+ ),
+ ASSE =FACT(statut='f',fr="Concatenation de fonctions",
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster,min=2,max=2 ),
+ SURCHARGE =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+ ),
+ CORR_ACCE =FACT(statut='f',fr="Correction d un accelerogramme reel",
+ CORR_DEPL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster ),
+ ),
+ PUISSANCE =FACT(statut='f',fr="Fonction élevée à une puissance",
+ FONCTION =SIMP(statut='o', typ=(fonction_sdaster,nappe_sdaster) ),
+ EXPOSANT =SIMP(statut='f', typ='I', defaut=1 ),
+ ),
+ INVERSE =FACT(statut='f',fr="Inverse d'une fonction",
+ FONCTION =SIMP(statut='o', typ=fonction_sdaster),
+ ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+ NOM_RESU =SIMP(statut='f',typ='TXM' ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ NOM_PARA_FONC =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+ INTERPOL_FONC =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+ PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GREFFET N.GREFFET
+CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
+ fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure"
+ +" en analyse sismique",
+ reentrant ='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+
+ regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
+ PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
+ UN_PARMI('MONO_APPUI', 'NOEUD','GROUP_NO'),
+ UN_PARMI('MONO_APPUI','MODE_STAT')),
+
+ MODELE_FLUIDE =SIMP(statut='o',typ=modele_sdaster ),
+ MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_ther ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ MODELE_GENE =SIMP(statut='f',typ=modele_gene ),
+ NUME_DDL_GENE =SIMP(statut='f',typ=nume_ddl_gene ),
+ DIST_REFE =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+ AVEC_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ NUME_MODE_MECA =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ POTENTIEL =SIMP(statut='f',typ=evol_ther ),
+ NOEUD_DOUBLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+ DIRECTION =SIMP(statut='o',typ='R',max=3),
+ MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca,),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+
+ ) ;
+#& MODIF COMMANDE DATE 08/12/2009 AUTEUR PROIX J-M.PROIX
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 GALENNE E.GALENNE
+CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
+ fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité"
+ +" et les facteurs d'intensité de contraintes.",
+ reentrant='f',
+ UIinfo={"groupes":("Post traitements",)},
+ regles=(EXCLUS('COMP_ELAS','COMP_INCR'),
+ CONCEPT_SENSIBLE("ENSEMBLE"),
+ REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+
+ THETA =FACT(statut='o',
+ THETA =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster),),
+ FOND_FISS =SIMP(statut='f',typ=fond_fiss,max=1),
+ FISSURE =SIMP(statut='f',typ=fiss_xfem,max=1),
+ DTAN_ORIG =SIMP(statut='f',typ='R',max='**'),
+ DTAN_EXTR =SIMP(statut='f',typ='R',max='**'),
+ NB_POINT_FOND =SIMP(statut='f',typ='I',val_min=2),
+ regles=(EXCLUS('FOND_FISS','FISSURE'),
+ EXCLUS('FOND_FISS','NB_POINT_FOND'),
+ EXCLUS('FOND_FISS','DTAN_ORIG'),
+ EXCLUS('FOND_FISS','DTAN_EXTR'),),
+ b_theta =BLOC(condition="THETA == None",fr="calcul de theta",
+ regles=(UN_PARMI('R_INF','R_INF_FO'),
+ PRESENT_PRESENT('R_INF','R_SUP'),
+ PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+ NUME_FOND =SIMP(statut='f',typ='I',defaut=1),
+ R_INF =SIMP(statut='f',typ='R'),
+ R_SUP =SIMP(statut='f',typ='R'),
+ MODULE =SIMP(statut='f',typ='R',defaut=1.),
+ DIRE_THETA =SIMP(statut='f',typ=cham_no_sdaster ),
+ DIRECTION =SIMP(statut='f',typ='R',max=3,min=3),
+ R_INF_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_SUP_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MODULE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca,mult_elas),),
+
+ b_no_mult =BLOC(condition="(AsType(RESULTAT) != mult_elas)",
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+ 'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ TOUT_MODE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_MODE =SIMP(statut='f',typ=listis_sdaster),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+
+ b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ ),
+ ),
+
+ b_mult_elas =BLOC(condition="(AsType(RESULTAT) == mult_elas)",
+ NOM_CAS =SIMP(statut='f',typ='TXM',validators=NoRepeat() ),
+ ),
+
+
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+ ),
+ SYME_CHAR =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+
+ COMP_ELAS =FACT(statut='f',
+ RELATION =SIMP(statut='f',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS") ),
+ CALCUL_CONTRAINTE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ ),
+ COMP_INCR =FACT(statut='f',
+ RELATION =SIMP(statut='f',typ='TXM',defaut="ELAS",
+ into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","ELAS_VMIS_PUIS") ),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ ),
+ ETAT_INIT =FACT(statut='f',
+ SIGM =SIMP(statut='f',typ=cham_elem),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ ),
+
+ LISSAGE =FACT(statut='d',
+ DEGRE =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+ LISSAGE_THETA =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+ LISSAGE_G =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE",
+ "LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+ ),
+
+ OPTION =SIMP(statut='o',typ='TXM',max=1,defaut='CALC_G',
+ into=("CALC_G","CALC_G_GLOB","CALC_K_G","K_G_MODA","G_MAX","G_MAX_GLOB","G_BILI",
+ "G_BILI_GLOB","CALC_K_MAX"),),
+
+ b_g_max =BLOC(condition="(OPTION=='G_MAX') or (OPTION=='G_MAX_GLOB')",
+ BORNES =FACT(statut='o',max='**',
+ NUME_ORDRE =SIMP(statut='o',typ='I'),
+ VALE_MIN =SIMP(statut='o',typ='R'),
+ VALE_MAX =SIMP(statut='o',typ='R'),
+ ),
+ ),
+ b_k_max =BLOC(condition="(OPTION=='CALC_K_MAX')",
+ SIGNES =FACT(statut='o',max=1,
+ CHARGE_S =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+ CHARGE_NS =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+ ),
+ ),
+
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
+ fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ INST_INIT =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ INST_FIN =SIMP(statut='o',typ='R' ),
+ DUREE_ANALYSE =SIMP(statut='f',typ='R' ),
+ DUREE_DECALAGE =SIMP(statut='f',typ='R' ),
+ NB_POIN =SIMP(statut='o',typ='I' ),
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+ TITRE =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GREFFET N.GREFFET
+CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
+ fr="Calcul des matrices de masse, d'amortissement ou de rigidité ajoutés",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
+ PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
+ PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
+ MODELE_FLUIDE =SIMP(statut='o',typ=modele_sdaster ),
+ MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_ther ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster ),
+ MODELE_GENE =SIMP(statut='f',typ=modele_gene ),
+ NUME_DDL_GENE =SIMP(statut='f',typ=nume_ddl_gene ),
+ DIST_REFE =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+ AVEC_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ NUME_MODE_MECA =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ OPTION =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
+ POTENTIEL =SIMP(statut='f',typ=evol_ther ),
+ NOEUD_DOUBLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/09/2009 AUTEUR BOYERE E.BOYERE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def calc_matr_elem_prod(OPTION,**args):
+ if OPTION == "RIGI_MECA" : return matr_elem_depl_r
+ if OPTION == "RIGI_FLUI_STRU" : return matr_elem_depl_r
+ if OPTION == "MASS_MECA" : return matr_elem_depl_r
+ if OPTION == "MASS_FLUI_STRU" : return matr_elem_depl_r
+ if OPTION == "RIGI_GEOM" : return matr_elem_depl_r
+ if OPTION == "RIGI_ROTA" : return matr_elem_depl_r
+ if OPTION == "MECA_GYRO" : return matr_elem_depl_r
+ if OPTION == "AMOR_MECA" : return matr_elem_depl_r
+ if OPTION == "IMPE_MECA" : return matr_elem_depl_r
+ if OPTION == "ONDE_FLUI" : return matr_elem_depl_r
+ if OPTION == "AMOR_MECA_ABSO" : return matr_elem_depl_r
+ if OPTION == "RIGI_MECA_HYST" : return matr_elem_depl_c
+ if OPTION == "RIGI_THER" : return matr_elem_temp_r
+ if OPTION == "MASS_THER" : return matr_elem_temp_r
+ if OPTION == "MASS_MECA_DIAG" : return matr_elem_depl_r
+ if OPTION == "RIGI_ACOU" : return matr_elem_pres_c
+ if OPTION == "MASS_ACOU" : return matr_elem_pres_c
+ if OPTION == "AMOR_ACOU" : return matr_elem_pres_c
+ raise AsException("type de concept resultat non prevu")
+
+CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod
+ ,fr="Calcul des matrices élémentaires",reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+
+ OPTION =SIMP(statut='o',typ='TXM',
+ into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+ "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+ "ONDE_FLUI","AMOR_MECA_ABSO","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+ "RIGI_ROTA","MECA_GYRO","MASS_MECA_DIAG","RIGI_ACOU",
+ "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST") ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+
+ # mots clés facultatifs que l'on a du mal à mettre dans les blocs
+ # sans gener MACRO_MATR_ASSE :
+ #------------------------------------------------------------------
+ INST=SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+
+ b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_mass_meca =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ ),
+
+ b_rigi_geom =BLOC(condition = "OPTION=='RIGI_GEOM'",
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ SIEF_ELGA =SIMP(statut='o',typ=cham_elem ),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+
+ b_rigi_rota =BLOC(condition = "OPTION=='RIGI_ROTA'",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_amor_meca =BLOC(condition = "OPTION=='AMOR_MECA'",
+ regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+ ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ RIGI_MECA =SIMP(statut='f',typ=matr_elem_depl_r ),
+ MASS_MECA =SIMP(statut='f',typ=matr_elem_depl_r ),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ ),
+
+ b_amor_meca_abso =BLOC(condition = "OPTION=='AMOR_MECA_ABSO'",
+ regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+ ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ RIGI_MECA =SIMP(statut='f',typ=matr_elem_depl_r ),
+ MASS_MECA =SIMP(statut='f',typ=matr_elem_depl_r ),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ ),
+
+ b_rigi_meca_hyst =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+ CHARGE =SIMP(statut='f',typ=char_meca ,validators=NoRepeat(),max='**' ),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ RIGI_MECA =SIMP(statut='o',typ=matr_elem_depl_r ),
+ ),
+
+ b_rigi_ther =BLOC(condition = "OPTION=='RIGI_THER'",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+ CHARGE =SIMP(statut='f',typ=char_ther,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_mass_ther =BLOC(condition = "OPTION=='MASS_THER'",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ CHARGE =SIMP(statut='f',typ=char_ther ,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_rigi_acou =BLOC(condition = "OPTION=='RIGI_ACOU'",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_mass_acou =BLOC(condition = "(OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_rigi_flui =BLOC(condition = "OPTION=='RIGI_FLUI_STRU'",
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**' ),
+ ),
+
+ b_mass_flui =BLOC(condition = "OPTION=='MASS_FLUI_STRU'",
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**'),
+ ),
+
+ b_impe_meca =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHARGE =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 16/11/2009 AUTEUR DURAND C.DURAND
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BARGELLINI R.BARGELLINI
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique",
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ RESULTAT =SIMP(statut='o',typ=evol_ther ),
+ ETAT_INIT =FACT(statut='o',
+ regles=(UN_PARMI('EVOL_THER', 'META_INIT_ELNO'),),
+ EVOL_THER =SIMP(statut='f',typ=evol_ther ),
+ META_INIT_ELNO =SIMP(statut='f',typ=carte_sdaster ),
+ b_etat =BLOC(condition="EVOL_THER != None",
+ regles=(UN_PARMI('NUME_INIT', 'INST_INIT',),),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ b_inst =BLOC(condition="INST_INIT != None",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+ ),
+ COMP_INCR =FACT(statut='o',max=1,
+ RELATION =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
+ ACIER =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+ ZIRC =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma, validators=NoRepeat(), max='**'),
+ MAILLE =SIMP(statut='f',typ=ma, validators=NoRepeat(), max='**'),
+ ),
+ OPTION =SIMP(statut='f',typ='TXM'
+ ,into=("META_ELNO_TEMP",) ),
+) ;
+#& MODIF COMMANDE DATE 16/02/2010 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 COURTOIS M.COURTOIS
+
+from Macro.calc_miss_ops import calc_miss_ops
+
+CALC_MISS = MACRO(nom="CALC_MISS",op=calc_miss_ops,
+ fr="Préparation des données puis exécution du logiciel MISS3D",
+ UIinfo={"groupes":("Résolution",)},
+
+ OPTION = FACT(statut='o',
+ regles=(UN_PARMI('TOUT','MODULE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",)),
+ MODULE = SIMP(statut='f',typ='TXM',into=("MISS_IMPE",)), # "PRE_MISS","MISS_EVOL",
+ ),
+ TABLE_SOL = SIMP(statut='f', typ=table_sdaster),
+
+ PROJET = SIMP(statut='o', typ='TXM'),
+ REPERTOIRE = SIMP(statut='f', typ='TXM'),
+ VERSION = SIMP(statut='f', typ='TXM', into=("V1_4",), defaut="V1_4"),
+
+ UNITE_IMPR_ASTER = SIMP(statut='f',typ='I',defaut=25),
+# UNITE_OPTI_MISS = SIMP(statut='f',typ='I',defaut=26),
+# UNITE_MODELE_SOL = SIMP(statut='f',typ='I',defaut=27),
+ UNITE_RESU_IMPE = SIMP(statut='f',typ='I',defaut=30),
+ UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=0),
+ PARAMETRE = FACT(statut='f',
+ regles=(PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
+ PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
+ PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
+ UN_PARMI('FREQ_MIN', 'LFREQ_NB'),
+ PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
+ PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
+ FREQ_MIN = SIMP(statut='f',typ='R'),
+ FREQ_MAX = SIMP(statut='f',typ='R'),
+ FREQ_PAS = SIMP(statut='f',typ='R'),
+ LFREQ_NB = SIMP(statut='f',typ='I'),
+ LFREQ_LISTE = SIMP(statut='f',typ='R',max='**'),
+ Z0 = SIMP(statut='f',typ='R',defaut=0.),
+ SURF = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+ ISSF = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+ TYPE = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
+ RFIC = SIMP(statut='f',typ='R',defaut=0.),
+ DIRE_ONDE = SIMP(statut='f',typ='R',max='**'),
+
+ FICH_RESU_IMPE = SIMP(statut='f',typ='TXM'),
+ FICH_RESU_FORC = SIMP(statut='f',typ='TXM'),
+
+ ALGO = SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
+ DREF = SIMP(statut='f',typ='R'),
+ SPEC_MAX = SIMP(statut='f',typ='R'),
+ SPEC_NB = SIMP(statut='f',typ='I'),
+ OFFSET_MAX = SIMP(statut='f',typ='R'),
+ OFFSET_NB = SIMP(statut='f',typ='I'),
+
+ FICH_POST_TRAI = SIMP(statut='f',typ='TXM'),
+ CONTR_NB = SIMP(statut='f',typ='I'),
+ CONTR_LISTE = SIMP(statut='f',typ='R',max='**'),
+ ),
+ INFO = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE DATE 27/04/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 NISTOR I.NISTOR
+
+from Macro.calc_modal_ops import calc_modal_ops
+
+def calc_modal_prod(self,AMORTISSEMENT,**args):
+ if AMORTISSEMENT=="NON": return mode_meca
+ if AMORTISSEMENT=="OUI": return mode_meca_c
+ raise AsException("type de concept resultat non prevu")
+
+
+CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
+ UIinfo={"groupes":("Résolution",)},
+ sd_prod=calc_modal_prod,
+ fr="Calcul des modes propres reels ou complexes dans une seule commande",
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ AMORTISSEMENT =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ INST =SIMP(statut='f',typ='R',defaut=0.),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+ b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+ RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+ ),
+ b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ),
+ ),),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+ into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+ b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+ PREC_ORTHO =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+ NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_LANCZOS =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+ NMAX_ITER_QR =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+ ),
+ b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+ PREC_BATHE =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+ NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+ PREC_JACOBI =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+ ),
+ b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+ PREC_SOREN =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
+ NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
+ PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+ ),
+ b_qz =BLOC(condition = "METHODE == 'QZ'",
+ TYPE_QZ =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),
+ ),
+ MODE_RIGIDE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+ CALC_FREQ =FACT(statut='d',min=0,
+ OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+ fr="Choix de l option et par conséquent du shift du problème modal" ),
+ b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_centre =BLOC(condition = "OPTION == 'CENTRE'",
+ fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+ FREQ =SIMP(statut='o',typ='R',
+ fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_bande =BLOC(condition = "(OPTION == 'BANDE')",
+ fr="Recherche des valeurs propres dans une bande donnée",
+ FREQ =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+ fr="Valeur des deux fréquences délimitant la bande de recherche"),
+ ),
+ APPROCHE =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+ fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
+ regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+ DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+ COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ STOP_FREQ_VIDE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ VERI_MODE =FACT(statut='d',min=0,
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+ fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+ STURM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 28/07/2009 AUTEUR TORKHANI M.TORKHANI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 Mohamed TORKHANI
+
+from Macro.calc_mode_rotation_ops import calc_mode_rotation_ops
+
+CALC_MODE_ROTATION=MACRO(nom="CALC_MODE_ROTATION",op=calc_mode_rotation_ops,sd_prod=table_container,
+ reentrant='n',fr="calculer les fréquences et modes d'un système en fonction des vitesses de rotation",
+ UIinfo={"groupes":("Résolution",)},
+
+ MATR_A =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_B =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_AMOR =SIMP(statut='f',typ=matr_asse_depl_r ),
+ MATR_GYRO =SIMP(statut='f',typ=matr_asse_depl_r ),
+ VITE_ROTA =SIMP(statut='f',typ='R',max='**'),
+
+ METHODE =SIMP(statut='f',typ='TXM',defaut="QZ",
+ into=("QZ","SORENSEN",) ),
+
+ CALC_FREQ =FACT(statut='d',min=0,
+ OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","CENTRE",),
+ fr="Choix de l option et par conséquent du shift du problème modal" ),
+ b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_centre =BLOC(condition = "OPTION == 'CENTRE'",
+ fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+ FREQ =SIMP(statut='o',typ='R',
+ fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ ),
+
+ VERI_MODE =FACT(statut='d',min=0,
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+ STURM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),),
+);
+#& MODIF COMMANDE DATE 27/04/2010 AUTEUR DESROCHES X.DESROCHES
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+def calc_no_prod(RESULTAT,**args):
+ if AsType(RESULTAT) != None : return AsType(RESULTAT)
+ raise AsException("type de concept resultat non prevu")
+
+CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
+ fr="Enrichir une SD Résultat par des champs aux noeuds calculés à partir de champs aux éléments évalués aux noeuds",
+ UIinfo={"groupes":("Post traitements",)},
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+ CONCEPT_SENSIBLE("SEPARE"),
+ DERIVABLE('RESULTAT'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM' ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("FORC_NODA","REAC_NODA",
+ "FORC_NODA_NONL",
+ "DCHA_NOEU_SIGM",
+ "DEGE_NOEU_DEPL",
+ "DETE_NOEU_DLTE",
+ "DEDE_NOEU_DLDE",
+ "DESI_NOEU_DLSI",
+ "DURT_NOEU_META",
+ "EFGE_NOEU_CART","EFGE_NOEU_DEPL",
+ "ENDO_NOEU_SINO",
+ "ENEL_NOEU_ELGA",
+ "EPMG_NOEU_DEPL",
+ "EPSA_NOEU",
+ "EPSG_NOEU_DEPL",
+ "EPSI_NOEU_DEPL",
+ "EPSP_NOEU" ,
+ "EPVC_NOEU","EPFD_NOEU","EPFP_NOEU","EPFP_NOEU",
+ "EQUI_NOEU_EPME","EQUI_NOEU_EPSI","EQUI_NOEU_SIGM",
+ "ERRE_NOEU_ELEM","QIRE_NOEU_ELEM",
+ "FLUX_NOEU_TEMP",
+ "HYDR_NOEU_ELGA",
+ "INTE_NOEU_ACTI","INTE_NOEU_REAC",
+ "META_NOEU_TEMP",
+ "PMPB_NOEU_SIEF",
+ "PRES_NOEU_DBEL","PRES_NOEU_IMAG","PRES_NOEU_REEL",
+ "RADI_NOEU_SIGM",
+ "SIEF_NOEU_ELGA",
+ "SIGM_NOEU_CART","SIGM_NOEU_COQU","SIGM_NOEU_DEPL",
+ "SIGM_NOEU_SIEF",
+ "SIPO_NOEU_DEPL","SIPO_NOEU_SIEF",
+ "SIRE_NOEU_DEPL",
+ "VARI_NOEU","EXTR_NOEU_VARI","VARI_NOEU_ELGA",) ),
+
+ b_forc_reac =BLOC(condition = """(OPTION == 'FORC_NODA') or (type(OPTION) == type(()) and 'FORC_NODA' in OPTION) or\
+ (OPTION == 'REAC_NODA') or (type(OPTION) == type(()) and 'REAC_NODA' in OPTION)""",
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ ),
+ b_forc_nonl =BLOC(condition = """(OPTION == 'FORC_NODA_NONL')""",
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ COMP_INCR =C_COMP_INCR(),
+ ),
+
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
+ ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_MA_RESU =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_RESU =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_NO_RESU =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NOEUD_RESU =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+) ;
+#& MODIF COMMANDE DATE 03/05/2010 AUTEUR PROIX J-M.PROIX
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 PROIX J-M.PROIX
+CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ fr="intégrer une loi de comportement",
+ MATER =SIMP(statut='o',typ=mater_sdaster,max=1),
+ COMP_INCR =C_COMP_INCR(),
+ COMP_ELAS =FACT(statut='f',max='**',
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT",) ),
+ ),
+ INCREMENT =C_INCREMENT(),
+ NEWTON =C_NEWTON(),
+ CONVERGENCE =C_CONVERGENCE(),
+
+ # --MASSIF : orientation du materiau (monocristal, orthotropie)
+ MASSIF =FACT(statut='f',max='**',
+ regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+ ANGL_REP =SIMP(statut='f',typ='R',min=1,max=3),
+ ANGL_EULER =SIMP(statut='f',typ='R',min=1,max=3),
+ ),
+ ## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+ ANGLE =SIMP(statut='f',typ='R',max=1, defaut=0.),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2)),
+
+ regles=(UN_PARMI('SIXX','EPXX'),UN_PARMI('SIYY','EPYY'),UN_PARMI('SIZZ','EPZZ'),
+ UN_PARMI('SIXY','EPXY'),UN_PARMI('SIXZ','EPXZ'),UN_PARMI('SIYZ','EPYZ'),),
+ SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+
+ SIGM_INIT=FACT(statut='f',
+ SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ ),
+ EPSI_INIT=FACT(statut='f',
+ EPXX = SIMP(statut='o',typ='R',max=1),
+ EPYY = SIMP(statut='o',typ='R',max=1),
+ EPZZ = SIMP(statut='o',typ='R',max=1),
+ EPXY = SIMP(statut='o',typ='R',max=1),
+ EPXZ = SIMP(statut='o',typ='R',max=1),
+ EPYZ = SIMP(statut='o',typ='R',max=1),
+ ),
+ VARI_INIT=FACT(statut='f',
+ VALE = SIMP(statut='o',typ='R',max='**'),
+ ),
+ NB_VARI_TABLE =SIMP(statut='f',typ='I',max=1,),
+ );
+
+#& MODIF COMMANDE DATE 07/07/2009 AUTEUR REZETTE C.REZETTE
+# 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 MICHEL S.MICHEL
+
+from Macro.calc_precont_ops import calc_precont_ops
+
+
+# ===========================================================================
+# CATALOGUE DE LA MACRO "CALC_PRECONT"
+# -----------------------------------------
+# USAGE :
+#
+#
+# ===========================================================================
+
+CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
+ fr="Imposer la tension définie par le BPEL dans les cables",
+ reentrant='f',UIinfo={"groupe":("Modélisation",)},
+ reuse =SIMP(statut='f',typ='evol_noli'),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem),
+ CABLE_BP =SIMP(statut='o',typ=cabl_precont,validators=NoRepeat(),max='**'),
+ CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,validators=NoRepeat(),max='**'),
+ INCREMENT =C_INCREMENT(),
+ NEWTON =C_NEWTON(),
+ RECH_LINEAIRE =C_RECH_LINEAIRE(),
+ CONVERGENCE =C_CONVERGENCE(),
+ ETAT_INIT =FACT(statut='f',
+ regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+ EXCLUS('EVOL_NOLI','DEPL',),
+ EXCLUS('EVOL_NOLI','SIGM',),
+ EXCLUS('EVOL_NOLI','VARI',),
+ EXCLUS('NUME_ORDRE','INST'), ),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ SIGM =SIMP(statut='f',typ=(carte_sdaster,cham_elem)),
+ VARI =SIMP(statut='f',typ=cham_elem),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ NUME_DIDI =SIMP(statut='f',typ='I'),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),
+ SOLVEUR =C_SOLVEUR(),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=char_meca),
+ ),
+
+ COMP_INCR =C_COMP_INCR(),
+ ) ;
+#& MODIF COMMANDE DATE 28/01/2010 AUTEUR BODEL C.BODEL
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 CORUS M.CORUS
+
+from Macro.calc_spec_ops import calc_spec_ops
+
+CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
+ reentrant='n',
+ fr="Calcule une matrice interspectrale ou des fonctions de transferts",
+ UIinfo={"groupes":("Fonction",)},
+ TAB_ECHANT =FACT(statut='f',
+ NOM_TAB =SIMP(statut='o',typ=table_sdaster),
+ LONGUEUR_ECH =FACT(statut='f',
+ DUREE =SIMP(statut='f',typ='R'),
+ POURCENT =SIMP(statut='f',typ='R'),
+ NB_PTS =SIMP(statut='f',typ='I'),
+ ),
+ RECOUVREMENT =FACT(statut='f',
+ DUREE =SIMP(statut='f',typ='R'),
+ POURCENT =SIMP(statut='f',typ='R'),
+ NB_PTS =SIMP(statut='f',typ='I'),
+ ),
+ ),
+ ECHANT =FACT(statut='f',max='**',
+ NUME_ORDRE_I =SIMP(statut='o',typ='I' ),
+ NUME_MES =SIMP(statut='o',typ='I' ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster),
+ ),
+#-- Cas de la matrice interspectrale --#
+ INTERSPE =FACT(statut='f',
+ FENETRE =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+ BLOC_DEFI_FENE =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
+ DEFI_FENE =SIMP(statut='f',typ='R',max='**'),
+ ),
+ ),
+#-- Cas des transferts - estimateurs H1 / H2 / Hv + Coherence --#
+ TRANSFERT =FACT(statut='f',
+ ESTIM =SIMP(statut='f',typ='TXM',defaut="H1",into=("H1","H2","CO",)),
+ REFER =SIMP(statut='o',typ='I',max='**'),
+ FENETRE =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+# DEFI_FENE =SIMP(statut='f',typ='R',max='**'),
+ BLOC_DEFI_FENE =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
+ DEFI_FENE =SIMP(statut='f',typ='R',max='**'),
+ ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+);
+#& MODIF COMMANDE DATE 15/03/2010 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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.
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def calc_table_prod(self, TABLE, ACTION, **kargs):
+ """Typage du concept produit.
+ """
+ l_typ = [AsType(TABLE),]
+ for mcf in ACTION:
+ dmc = mcf.cree_dict_valeurs(mcf.mc_liste)
+ if dmc.get('TABLE') != None:
+ l_typ.append(AsType(dmc['TABLE']))
+ # une table_fonction étant une table
+ if table_fonction in l_typ:
+ return table_fonction
+ else:
+ return table_sdaster
+
+
+from Macro.calc_table_ops import calc_table_ops
+
+CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
+ fr="Opérations sur une table",
+ reentrant='f',
+ regles=(DERIVABLE('TABLE'),),
+ TABLE = SIMP(statut='o',typ=table_sdaster),
+ ACTION = FACT(statut='o', max='**',
+ fr = "Suite des opérations à effectuer sur la table",
+ OPERATION = SIMP(statut='o', typ='TXM',
+ into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT', 'OPER', 'SUPPRIME')),
+
+ b_filtre = BLOC(condition="OPERATION == 'FILTRE'",
+ fr="Sélectionne les lignes de la table vérifiant un critère",
+ NOM_PARA = SIMP(statut='o',typ='TXM'),
+ CRIT_COMP = SIMP(statut='f',typ='TXM',defaut="EQ",
+ into=('EQ','NE','GT','LT','GE','LE','REGEXP',
+ 'VIDE','NON_VIDE','MAXI','ABS_MAXI','MINI','ABS_MINI'),),
+ b_vale = BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+ VALE = SIMP(statut='f',typ='R',max='**'),
+ VALE_I = SIMP(statut='f',typ='I',max='**'),
+ VALE_C = SIMP(statut='f',typ='C',max='**'),
+ VALE_K = SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
+ VALE_K = SIMP(statut='o',typ='TXM',max='**'),
+ ),
+ b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+ CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ),
+ ),
+
+ b_extr = BLOC(condition="OPERATION == 'EXTR'",
+ fr="Extrait une ou plusieurs colonnes de la table",
+ NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ fr="Noms des colonnes à extraire"),
+ ),
+
+ b_suppr = BLOC(condition="OPERATION == 'SUPPRIME'",
+ fr="Supprime une ou plusieurs colonnes de la table",
+ NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ fr="Noms des colonnes à supprimer"),
+ ),
+
+ b_renomme = BLOC(condition="OPERATION == 'RENOMME'",
+ fr="Renomme un ou plusieurs paramètres de la table",
+ NOM_PARA = SIMP(statut='o', typ='TXM', validators=NoRepeat(), min=2, max=2,
+ fr="Couple (ancien nom du paramètre, nouveau nom du paramètre)",),
+ ),
+
+ b_tri = BLOC(condition="OPERATION == 'TRI'",
+ fr="Ordonne les lignes de la table selon les valeurs d'un ou plusieurs paramètres",
+ NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ ORDRE = SIMP(statut='f',typ='TXM',defaut="CROISSANT",
+ into=("CROISSANT","DECROISSANT") ),
+ ),
+
+ b_comb = BLOC(condition="OPERATION == 'COMB'",
+ fr="Combine deux tables ayant éventuellement des paramètres communs",
+ TABLE = SIMP(statut='o',typ=table_sdaster,
+ fr="Table dont les colonnes vont venir surcharger la table initiale"),
+ NOM_PARA = SIMP(statut='f',typ='TXM',max='**',
+ fr="Noms des paramètres dont les valeurs doivent etre identiques dans les deux tables "\
+ "pour que les colonnes soient combinées"),
+ RESTREINT = SIMP(statut='f', typ='TXM', into=('OUI', 'NON'), defaut='NON',
+ fr="Restreint la fusion uniquement aux lignes où les NOM_PARA sont communs"),
+ ),
+
+ b_append = BLOC(condition="OPERATION == 'AJOUT'",
+ fr="Ajoute une ligne à la table initiale",
+ NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
+ fr="Noms des paramètres dont les valeurs sont fournies sous VALE"),
+ VALE = SIMP(statut='o',typ=assd,max='**', fr='Valeurs des paramètres'),
+ ),
+
+ b_oper = BLOC(condition="OPERATION == 'OPER'",
+ fr="Applique une formule dans laquelle les variables sont les paramètres de la table",
+ FORMULE = SIMP(statut='o',typ=formule,
+ fr="Formule à appliquer aux colonnes de la table"),
+ NOM_PARA = SIMP(statut='o',typ='TXM',
+ fr="Nom de la nouvelle colonne"),
+ ),
+ ),
+
+ SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),max=1,
+ fr="Paramètre de sensibilité",
+ ang="Sensitivity parameter"),
+ TITRE = SIMP(statut='f',typ='TXM',max='**',
+ fr="Titre de la table produite"),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Définir un champ theta pour le calcul du taux de restitution d'énergie"
+ +" ou des facteurs d'intensité de contraintes",
+ regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+ PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
+ EXCLUS('DIRECTION','DIRE_THETA'),),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ THETA_3D =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+ UN_PARMI('MODULE','MODULE_FO'),
+ ENSEMBLE('MODULE','R_INF','R_SUP'),
+ ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MODULE =SIMP(statut='f',typ='R'),
+ R_INF =SIMP(statut='f',typ='R'),
+ R_SUP =SIMP(statut='f',typ='R'),
+ MODULE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_INF_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_SUP_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ b_theta_3d =BLOC(condition="THETA_3D != None",
+ FOND_FISS =SIMP(statut='o',typ=fond_fiss),),
+ DIRE_THETA =SIMP(statut='f',typ=cham_no_sdaster ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ THETA_2D =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ MODULE =SIMP(statut='o',typ='R'),
+ R_INF =SIMP(statut='o',typ='R'),
+ R_SUP =SIMP(statut='o',typ='R'),
+ ),
+ THETA_BANDE =FACT(statut='f',max='**',
+ MODULE =SIMP(statut='o',typ='R'),
+ R_INF =SIMP(statut='o',typ='R'),
+ R_SUP =SIMP(statut='o',typ='R'),
+ ),
+ GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ IMPRESSION =FACT(statut='f',
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def calc_vect_elem_prod(OPTION,**args):
+ if OPTION == "CHAR_MECA" : return vect_elem_depl_r
+ if OPTION == "CHAR_THER" : return vect_elem_temp_r
+ if OPTION == "CHAR_ACOU" : return vect_elem_pres_c
+ if OPTION == "FORC_NODA" : return vect_elem_depl_r
+ raise AsException("type de concept resultat non prevu")
+
+CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Calcul des seconds membres élémentaires",
+ OPTION =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+ "FORC_NODA") ),
+ b_char_meca =BLOC(condition = "OPTION=='CHAR_MECA'",
+ regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ b_charge =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_modele =BLOC(condition = "(MODELE != None)",fr="modèle contenant une sous-structure",
+ SOUS_STRUC =FACT(statut='o',min=01,
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+ CAS_CHARGE =SIMP(statut='o',typ='TXM' ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+ ),
+ ),
+ ),
+ b_char_ther =BLOC(condition = "OPTION=='CHAR_THER'",
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ CHARGE =SIMP(statut='o',typ=char_ther,validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+
+ b_char_acou =BLOC(condition = "OPTION=='CHAR_ACOU'",
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CHARGE =SIMP(statut='o',typ=char_acou,validators=NoRepeat(),max='**'),
+ ),
+
+ b_forc_noda =BLOC(condition = "OPTION=='FORC_NODA'",
+ SIEF_ELGA =SIMP(statut='o',typ=cham_elem),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ ),
+) ;
+#& MODIF COMMANDE DATE 08/12/2009 AUTEUR PROIX J-M.PROIX
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 ABBAS M.ABBAS
+
+CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ fr="Calculer des objets élémentaires comme une matrice tangente, intégrer une loi de comportement, etc...",
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="COMPORTEMENT",
+ into=( "COMPORTEMENT","MATR_TANG_ELEM","FORC_INT_ELEM"),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ TABLE =SIMP(statut='f',typ=table_container),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE",)),
+
+ ),
+ DEPL =SIMP(statut='o',typ=cham_no_sdaster ),
+ INCR_DEPL =SIMP(statut='o',typ=cham_no_sdaster ),
+ SIGM =SIMP(statut='o',typ=cham_elem),
+ VARI =SIMP(statut='o',typ=cham_elem),
+ INCREMENT =FACT(statut='o',
+ LIST_INST =SIMP(statut='o',typ=listr8_sdaster),
+ NUME_ORDRE =SIMP(statut='o',typ='I'),),
+ COMP_INCR =C_COMP_INCR(),
+ COMP_ELAS =FACT(statut='f',max='**',
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("IMPLICITE",)),
+ RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+ "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+ reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières",
+ UIinfo={"groupes":("Post traitements",)},
+ RESULTAT =SIMP(statut='o',typ=(fourier_elas,fourier_ther),),
+ ANGL =SIMP(statut='o',typ='R',max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,
+ into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL","TEMP","FLUX_ELNO_TEMP"),),
+) ;
+#& MODIF COMMANDE DATE 08/12/2008 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 SELLENET N.SELLENET
+def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
+ if COMB_C != None:
+ type_mat = AsType(COMB_C[0]['MATR_ASSE'])
+ if type_mat in (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
+ if type_mat in (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c
+ if type_mat in (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
+ if type_mat in (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
+ elif COMB_R != None:
+ type_mat = AsType(COMB_R[0]['MATR_ASSE'])
+ if type_mat in (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
+ if type_mat in (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
+ if type_mat in (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
+ if type_mat in (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_r
+ elif CALC_AMOR_GENE != None: return matr_asse_gene_r
+ raise AsException("type de concept resultat non prevu")
+
+COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op= 31,sd_prod=comb_matr_asse_prod,
+ fr="Effectuer la combinaison linéaire de matrices assemblées",
+ reentrant='f',
+ UIinfo={"groupes":("Résultats et champs",)},
+ regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
+ COMB_R =FACT(statut='f',max='**',
+ PARTIE =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+ MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+ ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+ COEF_R =SIMP(statut='o',typ='R' ),
+ ),
+ COMB_C =FACT(statut='f',max='**',
+ regles=(UN_PARMI('COEF_R','COEF_C' ),),
+ MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+ ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+ COEF_R =SIMP(statut='f',typ='R' ),
+ COEF_C =SIMP(statut='f',typ='C' ),
+ ),
+ CALC_AMOR_GENE =FACT(statut='f',
+ RIGI_GENE = SIMP(statut='o', typ=matr_asse_gene_r),
+ MASS_GENE = SIMP(statut='o', typ=matr_asse_gene_r),
+ regles=(UN_PARMI('AMOR_REDUIT','LIST_AMOR' ),),
+ AMOR_REDUIT = SIMP(statut='f',typ='R',max='**'),
+ LIST_AMOR = SIMP(statut='f',typ=listr8_sdaster ),
+ ),
+ SANS_CMP =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+) ;
+#& MODIF COMMANDE DATE 09/11/2009 AUTEUR AUDEBERT S.AUDEBERT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 AUDEBERT S.AUDEBERT
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
+ fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+ UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),
+ UN_PARMI('MONO_APPUI','MULTI_APPUI' ),),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ b_freq =BLOC(condition = "FREQ != None or LIST_FREQ != None",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+ MODE_CORR =SIMP(statut='f',typ=mode_meca ),
+
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ AMOR_GENE =SIMP(statut='f',typ=matr_asse_gene_r ),
+
+ MASS_INER =SIMP(statut='f',typ=table_sdaster ),
+ CORR_FREQ =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+ EXCIT =FACT(statut='o',max='**',
+ regles=(UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+ AXE =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
+ TRI_AXE =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant les trois axes mais avec le meme spectre",),
+ TRI_SPEC =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="Excitation suivant les trois axes avec trois spectres"),
+ b_axe =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),),
+ ECHELLE =SIMP(statut='f',typ='R',),
+ ),
+ b_tri_axe =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),),
+ ECHELLE =SIMP(statut='f',typ='R',),
+ ),
+ b_tri_spec =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes avec trois spectres",
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
+ ECHELLE =SIMP(statut='f',typ='R',min=3,max=3),
+ ),
+ NATURE =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+ b_mult_appui =BLOC(condition = "(MULTI_APPUI != None)",
+ regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),)
+ ),
+ MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="excitation imposée unique" ),
+ MULTI_APPUI =SIMP(statut='f',typ='TXM',position='global',into=("DECORRELE","CORRELE"),
+ fr="excitation imposée unique" ),
+ b_decorrele =BLOC(condition = "MULTI_APPUI == 'DECORRELE' ",
+ GROUP_APPUI =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+
+ ),
+ b_correle =BLOC(condition = "MULTI_APPUI == 'CORRELE' ",
+ COMB_MULT_APPUI =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ TYPE_COMBI =SIMP(statut='f',typ='TXM',into=("QUAD","LINE",) ),),
+ ),
+
+ COMB_MODE =FACT(statut='o',
+ TYPE =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+ DUREE =SIMP(statut='f',typ='R' ),
+ ),
+ COMB_DIRECTION =FACT(statut='f',
+ TYPE =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+ ),
+ COMB_DEPL_APPUI=FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','LIST_CAS'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ LIST_CAS =SIMP(statut='f',typ='I',max='**'),
+ TYPE_COMBI =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
+ ),
+ DEPL_MULT_APPUI =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),
+ AU_MOINS_UN('DX','DY','DZ' ),),
+ NOM_CAS =SIMP(statut='o',typ='TXM',max='**'),
+ NUME_CAS =SIMP(statut='o',typ='I',max='**'),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca, ),
+ NOEUD_REFE =SIMP(statut='f',typ=no),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ DX =SIMP(statut='f',typ='R' ),
+ DY =SIMP(statut='f',typ='R' ),
+ DZ =SIMP(statut='f',typ='R' ),
+ ),
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=9,
+ into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+ "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
+ "SIPO_ELNO_DEPL") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+ IMPRESSION =FACT(statut='f',max='**',
+ regles=(EXCLUS('TOUT','NIVEAU'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NIVEAU =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),validators=NoRepeat(),max=3 ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 12/05/2009 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def crea_champ_prod(TYPE_CHAM,**args):
+ if TYPE_CHAM[0:5] == "CART_" :
+ return carte_sdaster
+ elif TYPE_CHAM[0:5] == "NOEU_" :
+ return cham_no_sdaster
+ elif TYPE_CHAM[0:2] == "EL" :
+ return cham_elem
+ else :
+ raise AsException("type de concept resultat_sdaster non prevu")
+
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+ fr="Création d'un champ ",reentrant='f',
+ UIinfo={"groupes":("Résultats et champs",)},
+ TYPE_CHAM =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+ # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx
+ # ou xx est le nom d'une grandeur définie dans le catalogue des grandeurs
+# SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
+# ------------------------------------------------------------------
+ regles=(EXCLUS('NUME_DDL','CHAM_NO',)),
+ NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+ CHAM_NO =SIMP(statut='f',typ=(cham_no_sdaster) ),
+
+# SI CREATION D'UN CHAM_ELEM, POUR aider a l'allocation du champ :
+# (PAR DEFAUT : TOU_INI_ELNO/_ELGA/_ELEM)
+# ------------------------------------------------------------------
+ OPTION =SIMP(statut='f',typ='TXM'),
+
+ OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC","NORMALE","R2C","C2R","COMB") ),
+
+# ------------------------------------------------------------------
+ b_norm =BLOC(condition = "OPERATION == 'NORMALE'",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+# ------------------------------------------------------------------
+ b_affe =BLOC(condition = "OPERATION == 'AFFE'",
+ regles=(UN_PARMI('MAILLAGE','MODELE'),),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster) ),
+ MODELE =SIMP(statut='f',typ=(modele_sdaster) ),
+ b_affe_modele =BLOC(condition = "MODELE != None",
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+ AFFE =FACT(statut='o',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+ UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ VALE =SIMP(statut='f',typ='R',max='**' ),
+ VALE_I =SIMP(statut='f',typ='I',max='**' ),
+ VALE_C =SIMP(statut='f',typ='C',max='**' ),
+ VALE_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+ ),
+ ),
+# ------------------------------------------------------------------
+ b_asse =BLOC(condition = "OPERATION == 'ASSE'",
+ regles=(UN_PARMI('MAILLAGE','MODELE'),),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster) ),
+ MODELE =SIMP(statut='f',typ=(modele_sdaster) ),
+ b_asse_modele =BLOC(condition = "MODELE != None",
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+ ASSE =FACT(statut='o',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+ PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ CHAM_GD =SIMP(statut='o',typ=cham_gd_sdaster),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**' ),
+ NOM_CMP_RESU =SIMP(statut='f',typ='TXM',max='**' ),
+ CUMUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ COEF_R =SIMP(statut='f',typ='R',defaut= 1. ),
+ COEF_C =SIMP(statut='f',typ='C',max=1),
+ ),
+ ),
+# ------------------------------------------------------------------
+ b_comb =BLOC(condition = "OPERATION == 'COMB'",
+ fr="Pour faire une combinaison linéaire de cham_no ayant meme profil",
+ COMB =FACT(statut='o',max='**',
+ CHAM_GD =SIMP(statut='o',typ=cham_no_sdaster),
+ COEF_R =SIMP(statut='o',typ='R'),
+ ),
+ ),
+# ------------------------------------------------------------------
+ b_eval =BLOC(condition = "OPERATION == 'EVAL'",
+ CHAM_F =SIMP(statut='o',typ=cham_gd_sdaster),
+ CHAM_PARA =SIMP(statut='o',typ=cham_gd_sdaster,max='**'),
+ ),
+# ------------------------------------------------------------------
+ b_r2c =BLOC(condition = "OPERATION == 'R2C'",
+ CHAM_GD =SIMP(statut='o',typ=cham_gd_sdaster),
+ ),
+# ------------------------------------------------------------------
+ b_c2r =BLOC(condition = "OPERATION == 'C2R'",
+ CHAM_GD =SIMP(statut='o',typ=cham_gd_sdaster),
+ PARTIE =SIMP(statut='o',typ='TXM',into=('REEL','IMAG','MODULE','PHASE'),),
+ ),
+# ------------------------------------------------------------------
+ b_disc =BLOC(condition = "OPERATION == 'DISC'",
+ MODELE =SIMP(statut='f',typ=(modele_sdaster) ),
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ CHAM_GD =SIMP(statut='o',typ=cham_gd_sdaster),
+ ),
+# ------------------------------------------------------------------
+ b_extr =BLOC(condition = "OPERATION == 'EXTR'",
+ regles=(AU_MOINS_UN('MAILLAGE','FISSURE','RESULTAT','TABLE'),),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster) ),
+ FISSURE =SIMP(statut='f',typ=(fiss_xfem) ),
+ RESULTAT =SIMP(statut='f',typ=(resultat_sdaster) ),
+ TABLE =SIMP(statut='f',typ=(table_sdaster),min=1,max=1),
+ b_extr_maillage =BLOC(condition = "MAILLAGE != None and TABLE == None",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
+ ),
+ b_extr_fissure =BLOC(condition = "FISSURE != None",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=("LTNO","LNNO","GRLTNO","GRLNNO","STNO","STNOR","BASLOC")),
+ ),
+ b_extr_table =BLOC(condition = "TABLE != None",
+ regles=( EXCLUS('MODELE','MAILLAGE'),
+ EXCLUS('PROL_ZERO','MAILLAGE'),),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster),),
+ MODELE =SIMP(statut='f',typ=(modele_sdaster),),
+ OPTION =SIMP(statut='f',typ='TXM'),
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ ),
+ b_extr_resultat =BLOC(condition = "RESULTAT != None",
+ regles=(DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter"),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+ TYPE_MAXI =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+
+ # si TYPE_MAXI, on spécifie en général plusieurs numéros d'ordre :
+ b_type_maxi =BLOC(condition = "TYPE_MAXI != None",
+ TYPE_RESU =SIMP(statut='o',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+
+ regles=(EXCLUS('TOUT_ORDRE','LIST_INST','LIST_FREQ','NUME_ORDRE','INST',
+ 'FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ LIST_FREQ =SIMP(statut='f',typ=(listr8_sdaster) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',max='**'),
+ INST =SIMP(statut='f',typ='R',max='**'),
+ FREQ =SIMP(statut='f',typ='R',max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',max='**'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM',max='**'),
+ ANGL =SIMP(statut='f',typ='R',max='**'),
+ ),
+
+ # si .not. TYPE_MAXI, on ne doit spécifier qu'un seul numéro d'ordre :
+ b_non_type_maxi =BLOC(condition = "TYPE_MAXI == None",
+ regles=(EXCLUS('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ FREQ =SIMP(statut='f',typ='R'),
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',max=2),
+ NOM_CAS =SIMP(statut='f',typ='TXM'),
+ ANGL =SIMP(statut='f',typ='R'),
+
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+ ),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+
+ ), # fin bloc b_extr
+
+
+ ),
+# FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULTAT :
+#-----------------------------------------------------
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 30/06/2008 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
+ reentrant='n',fr="Crée un maillage à partir d'un maillage existant",
+ UIinfo={"groupes":("Maillage",)},
+ regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
+ 'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE',
+ 'QUAD_LINE', 'REPERE','RESTREINT'),),
+
+
+
+ # le MAILLAGE est inutile si ECLA_PG
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster ),
+
+ CREA_POI1 =FACT(statut='f',max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
+ NOM_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ ),
+ CREA_MAILLE =FACT(statut='f',max='**',fr="Duplication de mailles",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ PREF_MAILLE =SIMP(statut='o',typ='TXM' ),
+ PREF_NUME =SIMP(statut='f',typ='I' ),
+ ),
+ CREA_GROUP_MA =FACT(statut='f',max='**',fr="Duplication de mailles et création de groupes de mailles",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+ NOM =SIMP(statut='o',typ='TXM'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ PREF_MAILLE =SIMP(statut='o',typ='TXM' ),
+ PREF_NUME =SIMP(statut='f',typ='I' ),
+ ),
+ DETR_GROUP_MA =FACT(statut='f',fr="Destruction de groupes de mailles",
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NB_MAILLE =SIMP(statut='f',typ='I',defaut= 0,
+ fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit", ),
+ ),
+ RESTREINT =FACT(statut='f',fr="Restreindre un maillage à des groupes de mailles",max=1,
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ TOUT_GROUP_MA =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ TOUT_GROUP_NO =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+ ),
+ COQU_VOLU =FACT(statut='f',
+ fr="Creation de mailles volumiques à partir de mailles surfaciques",
+ NOM =SIMP(statut='o',typ='TXM'),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max ='**'),
+ EPAIS =SIMP(statut='o',typ='R' ),
+ PREF_MAILLE =SIMP(statut='f',typ='TXM',defaut="MS" ),
+ PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS" ),
+ PREF_NUME =SIMP(statut='f',typ='I' ,defaut=1 ),
+ PLAN =SIMP(statut='o',typ='TXM',into=("SUP","MOY","INF")),
+ b_MOY =BLOC(condition = "PLAN == 'MOY'",
+ TRANSLATION =SIMP(statut='o',typ='TXM',into=("SUP","INF") ),
+ ),
+ ),
+ MODI_MAILLE =FACT(statut='f',max='**',fr="Modification du type de mailles",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ OPTION =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4","QUAD_TRIA3"),
+ fr="Choix de la transformation" ),
+ b_NOS =BLOC(condition = "OPTION == 'TRIA6_7' or OPTION == 'QUAD8_9' or OPTION == 'SEG3_4'",
+ PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS"),
+ PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ),
+ ),
+ b_QTR =BLOC(condition = "OPTION == 'QUAD_TRIA3'",
+ PREF_MAILLE =SIMP(statut='f',typ='TXM',defaut="MS" ),
+ PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ),
+ ),
+ ),
+ CREA_FISS = FACT(statut='f',max='**',fr="Creation d'une fissure potentielle avec elts de joint ou elts à disc",
+ NOM =SIMP(statut='o',typ='TXM'),
+ GROUP_NO_1 =SIMP(statut='o',typ=grno),
+ GROUP_NO_2 =SIMP(statut='o',typ=grno),
+ PREF_MAILLE =SIMP(statut='o',typ='TXM'),
+ PREF_NUME =SIMP(statut='f',typ='I',defaut=1 ),
+ ),
+ LINE_QUAD =FACT(statut='f',fr="Passage linéaire -> quadratique",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS"),
+ PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ),
+ ),
+ HEXA20_27 =FACT(statut='f',fr="Passage HEXA20 -> HEXA27",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS"),
+ PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ),
+ ),
+ QUAD_LINE =FACT(statut='f',fr="Passage quadratique -> linéaire",
+ regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ ),
+ REPERE =FACT(statut='f',max='**',
+ fr="changement de repère servant à déterminer les caractéristiques d'une section de poutre",
+ TABLE =SIMP(statut='o',typ=table_sdaster,
+ fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
+ NOM_ORIG =SIMP(statut='f',typ='TXM',into=("CDG","TORSION"),fr="Origine du nouveau repère" ),
+ NOM_ROTA =SIMP(statut='f',typ='TXM',into=("INERTIE",),fr="Direction du repére" ),
+ b_cdg =BLOC(condition = "NOM_ORIG == 'CDG'",
+ GROUP_MA =SIMP(statut='f',typ=grma,
+ fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
+ ),
+ ),
+ ECLA_PG =FACT(statut='f',
+ fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SHRINK =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+ TAILLE_MIN =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+#
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 25/05/2010 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+def crea_resu_prod(TYPE_RESU,**args):
+ if TYPE_RESU == "EVOL_ELAS" : return evol_elas
+ if TYPE_RESU == "EVOL_NOLI" : return evol_noli
+ if TYPE_RESU == "EVOL_THER" : return evol_ther
+ if TYPE_RESU == "MULT_ELAS" : return mult_elas
+ if TYPE_RESU == "MODE_MECA" : return mode_meca
+ if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+ if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+ if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+ if TYPE_RESU == "FOURIER_THER" : return fourier_ther
+ if TYPE_RESU == "EVOL_VARC" : return evol_varc
+ if TYPE_RESU == "EVOL_CHAR" : return evol_char
+ raise AsException("type de concept resultat non prevu")
+
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds",
+
+ OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
+ fr="choix de la fonction a activer",),
+
+
+ # Création par affectation de champs :
+ #-------------------------------------
+ b_affe =BLOC(condition = "OPERATION == 'AFFE'",
+
+ TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=("MODE_MECA","MULT_ELAS","EVOL_ELAS","EVOL_NOLI",
+ "DYNA_HARMO","DYNA_TRANS","FOURIER_ELAS","EVOL_THER","EVOL_VARC","EVOL_CHAR","FOURIER_THER") ),
+ b_type_resu =BLOC(condition = "TYPE_RESU == 'EVOL_CHAR'",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=("PRES","FSUR_2D","FSUR_3D","FVOL_2D","FVOL_3D","VITE_VENT")),
+ ),
+
+ b_evol_char =BLOC(condition = "TYPE_RESU != 'EVOL_CHAR'",
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+ ),
+
+ b_mode =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+ MATR_A =SIMP(statut='f',typ=matr_asse_depl_r,),
+ MATR_B =SIMP(statut='f',typ=matr_asse_depl_r,),
+ ),
+
+ AFFE =FACT(statut='o',max='**',
+ CHAM_GD =SIMP(statut='o',typ=(cham_gd_sdaster)),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+
+ b_mult_elas =BLOC(condition = "TYPE_RESU == 'MULT_ELAS' ",
+ NOM_CAS =SIMP(statut='f',typ='TXM' ),
+ CHARGE =SIMP(statut='f',typ=(char_meca),max='**'),
+ ),
+ b_evol =BLOC(condition = "((TYPE_RESU=='EVOL_ELAS') or (TYPE_RESU=='EVOL_NOLI') or (TYPE_RESU=='EVOL_THER')\
+ or (TYPE_RESU=='EVOL_VARC') or (TYPE_RESU=='EVOL_CHAR') or (TYPE_RESU=='DYNA_TRANS'))",
+ regles=(UN_PARMI('INST','LIST_INST'),),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ NUME_INIT =SIMP(statut='f',typ='I', val_min=1),
+ NUME_FIN =SIMP(statut='f',typ='I', val_min=1),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 0.0 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+ b_fourier_elas =BLOC(condition = "(TYPE_RESU == 'FOURIER_ELAS') ",
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ TYPE_MODE =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+ CHARGE =SIMP(statut='f',typ=(char_meca),max='**'),
+ ),
+ b_fourier_ther =BLOC(condition = "(TYPE_RESU == 'FOURIER_THER') ",
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ TYPE_MODE =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+ ),
+ b_mode =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ FREQ =SIMP(statut='f',typ='R'),
+ ),
+ b_dyna_harmo =BLOC(condition = "TYPE_RESU == 'DYNA_HARMO'",
+ regles=(UN_PARMI('FREQ','LIST_FREQ',),),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut=0.0),
+ ),
+ ),
+ ),
+
+
+ # Création par assemblage d'evol_ther :
+ #-----------------------------------------
+ b_asse =BLOC(condition = "OPERATION == 'ASSE'",
+ TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=("EVOL_THER",) ),
+ ASSE =FACT(statut='o',max='**',
+ RESULTAT =SIMP(statut='o',typ=evol_ther),
+ TRANSLATION =SIMP(statut='f',typ='R',defaut= 0. ),
+ ),
+ ),
+
+
+ b_ecla_pg =BLOC(condition = "OPERATION == 'ECLA_PG'",
+
+ TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
+
+ ECLA_PG =FACT(statut='o',
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ MODELE_INIT =SIMP(statut='o',typ=modele_sdaster),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ RESU_INIT =SIMP(statut='o',typ=resultat_sdaster),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+
+
+ b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
+
+ TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),validators=NoRepeat(),max='**' ),
+ RESU_INIT =SIMP(statut='o',typ=evol_noli),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ MAILLAGE_INIT =SIMP(statut='o',typ=maillage_sdaster,),
+ RESU_FINAL =SIMP(statut='o',typ=evol_noli,),
+ MAILLAGE_FINAL =SIMP(statut='o',typ=maillage_sdaster,),
+ PERM_CHAM =FACT(statut='o',max='**',
+ GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+ GROUP_MA_INIT =SIMP(statut='o',typ=grma),
+ TRAN =SIMP(statut='o',typ='R',min=3,max=3),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3),
+ ),
+ ),
+
+ b_prol_rtz =BLOC(condition = "OPERATION == 'PROL_RTZ'",
+
+ TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
+
+ PROL_RTZ =FACT(statut='o',
+ regles=(EXCLUS('INST','LIST_INST'),),
+ MAILLAGE_FINAL =SIMP(statut='o',typ=maillage_sdaster,),
+ TABLE =SIMP(statut='o',typ=table_sdaster,fr="Table issue de post_releve_t"),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+ REPERE =SIMP(statut='o',typ='TXM',into=("CYLINDRIQUE",),),
+ ORIGINE =SIMP(statut='o',typ='R',min=3,max=3),
+ AXE_Z =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+ ),
+
+ b_prep_vrc1 =BLOC(condition = "OPERATION == 'PREP_VRC1'",
+ # calculer la température dans les couches des coques multicouche à partir d'un champ de fonctions
+ # de fonctions du temps et de l'espace (épaisseur)
+
+ TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+ PREP_VRC1 =FACT(statut='o',max=1,
+ CHAM_GD =SIMP(statut='o',typ=(cham_gd_sdaster)), # carte de fonctions du temps et de l'épaisseur
+ MODELE =SIMP(statut='o',typ=modele_sdaster), # modèle mécanique contenant les coques multicouche
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem), # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+ INST =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**'),
+ ),
+ ),
+
+ b_prep_vrc2 =BLOC(condition = "OPERATION == 'PREP_VRC2'",
+ # calculer la température dans les couches des coques multicouche à partir d'un evol_ther "coque"
+ # contenant TEMP/TEMP_INF/TEMP_SUP
+
+ TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+ PREP_VRC2 =FACT(statut='o',max=1,
+ EVOL_THER =SIMP(statut='o',typ=(evol_ther)), # evol_ther de type "coque" (TEMP/TEMP_INF/TEMP_SUP)
+ MODELE =SIMP(statut='o',typ=modele_sdaster), # modèle mécanique contenant les coques multicouche
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem), # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 28/07/2009 AUTEUR TORKHANI M.TORKHANI
+# 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 COURTOIS M.COURTOIS
+
+def crea_table_prod(TYPE_TABLE, **args):
+ """Typage du concept résultat
+ """
+ if TYPE_TABLE == 'TABLE_FONCTION':
+ return table_fonction
+ elif TYPE_TABLE == 'TABLE_CONTENEUR':
+ return table_container
+ else:
+ return table_sdaster
+
+CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
+ fr="Création d'une table à partir d'une fonction ou de deux listes",
+ reentrant='f',UIinfo={"groupes":("Table",)},
+
+ regles=(EXCLUS('FONCTION','LISTE'),),
+
+ LISTE=FACT(statut='f',max='**',
+ fr="Creation d'une table a partir de listes",
+ regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')),
+ PARA =SIMP(statut='o',typ='TXM'),
+ TYPE_K =SIMP(statut='f',typ='TXM',defaut='K8',
+ into=('K8','K16','K24')),
+ NUME_LIGN=SIMP(statut='f',typ='I',max='**'),
+ LISTE_I =SIMP(statut='f',typ='I',max='**'),
+ LISTE_R =SIMP(statut='f',typ='R',max='**'),
+ LISTE_K =SIMP(statut='f',typ='TXM', max='**'),
+ ),
+ FONCTION=FACT(statut='f',
+ fr="Creation d'une table a partir d'une fonction",
+ FONCTION=SIMP(statut='o',typ=(fonction_c,fonction_sdaster)),
+ PARA=SIMP(statut='f',typ='TXM',min=2,max=2),
+ ),
+ b_fonction = BLOC(condition='FONCTION != None',
+ regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+ DERIVABLE('FONCTION'),),
+ SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+ ),
+ TYPE_TABLE = SIMP(statut='f', typ='TXM', defaut="TABLE",
+ into=('TABLE', 'TABLE_FONCTION', 'TABLE_CONTENEUR'),),
+
+ TITRE=SIMP(statut='f',typ='TXM',max='**'),
+) ;
+
+
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 LEFEBVRE J.P.LEFEBVRE
+
+DEBUG=PROC(nom="DEBUG",op=137,
+ UIinfo={"groupes":("Utilitaires",)},
+ fr="Permettre de changer entre 2 commandes quelques variables globales de debug",
+
+ SDVERI =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+ statut='f',typ='TXM',into=('OUI','NON')),
+ JXVERI =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+ statut='f',typ='TXM',into=('OUI','NON')),
+ JEVEUX =SIMP(fr="force les déchargement sur disque",
+ statut='f',typ='TXM',into=('OUI','NON')),
+ IMPR_MACRO =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+ statut='f',typ='TXM',into=("OUI","NON")),
+ );
+#& MODIF COMMANDE DATE 07/09/2009 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Ouverture d'une étude. Allocation des ressources mémoire et disque et fichiers",
+ sd_prod=ops.DEBUT,
+
+ PAR_LOT =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+ into=("OUI","NON"),defaut="OUI"),
+ IMPR_MACRO =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+ statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+# FORMAT_HDF =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+# typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ BASE =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+ statut='f',min=1,max=2,
+ FICHIER =SIMP(fr="nom de la base",statut='o',typ='TXM',
+ into=('GLOBALE','VOLATILE'),),
+ TITRE =SIMP(statut='f',typ='TXM'),
+ CAS =SIMP(statut='f',typ='TXM'),
+ NMAX_ENRE =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+ LONG_ENRE =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+ LONG_REPE =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+ ),
+
+ IMPRESSION =FACT(statut='f',min=1,max=3,
+ FICHIER =SIMP(statut='o',typ='TXM'),
+ UNITE =SIMP(statut='o',typ='I'),
+ ),
+
+ CATALOGUE =FACT(statut='f',min=1,max=10,
+ FICHIER =SIMP(statut='o',typ='TXM'),
+ TITRE =SIMP(statut='f',typ='TXM'),
+ UNITE =SIMP(statut='f',typ='I'),
+ ),
+
+ CODE =FACT(fr="définition d'un nom pour l'ensemble d'une étude",
+ statut='f',min=1,max=1,
+ NOM =SIMP(statut='o',typ='TXM'),
+ NIV_PUB_WEB =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
+ VISU_EFICAS =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI'),
+ ),
+
+ ERREUR =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+ ERREUR_F =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),),
+ ),
+
+ DEBUG =FACT(fr="option de déboggage reservée aux développeurs",
+ statut='f',min=1,max=1,
+ JXVERI =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+ statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+ SDVERI =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+ statut='f',typ='TXM',into=('OUI','NON')),
+ JEVEUX =SIMP(fr="force les déchargement sur disque",
+ statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+ ENVIMA =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+ statut='f',typ='TXM',into=('TEST',)),
+ ),
+
+ MESURE_TEMPS =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+ statut='d',min=1,max=1,
+ NIVE_DETAIL =SIMP(fr="niveau de détail des impressions",
+ statut='f',typ='I',into=(0,1,2,3),defaut=1),
+ # 0 : rien
+ # 1 : impression en fin de commande des mesures principales
+ # 2 : impression en fin de commande des mesures principales et secondaires
+ # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+ ),
+
+ MEMOIRE =FACT(fr="mode de gestion mémoire utilisé",statut='d',min=1,max=1,
+ GESTION =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+ TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+ TAILLE =SIMP(statut='f',typ='I'),
+ TAILLE_BLOC =SIMP(statut='f',typ='R',defaut=800.),
+ PARTITION =SIMP(statut='f',typ='R'),
+ DYNAMIQUE =SIMP(statut='f',typ='I',defaut=1),
+ ),
+
+ RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+ regles=(EXCLUS('VALE','POURCENTAGE'),),
+# par défaut VALE fixée à 10. dans le FORTRAN si CODE présent
+ VALE =SIMP(statut='f',typ='I',val_min=0,),
+# par défaut 10% dans le FORTRAN
+ POURCENTAGE =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+# valeur en secondes de la réserve maximum bornée à 900 secondes
+ BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=900),),
+
+ IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+);
+#& MODIF COMMANDE DATE 01/03/2010 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op= 99,sd_prod=mode_meca,
+ reentrant='f',
+ fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS','ORTHO_BASE'),),
+ CLASSIQUE =FACT(statut='f',
+ INTERF_DYNA =SIMP(statut='o',typ=interf_dyna_clas ),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca,max='**' ),
+ NMAX_MODE =SIMP(statut='f',typ='I',defaut= 10 ),
+ ),
+ RITZ =FACT(statut='f',max='**',
+ regles=(UN_PARMI('MODE_MECA','BASE_MODALE','MODE_INTF'),),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca,max='**' ),
+ NMAX_MODE =SIMP(statut='f',typ='I',max='**'),
+ BASE_MODALE =SIMP(statut='f',typ=mode_meca ),
+ MODE_INTF =SIMP(statut='f',typ=(mode_meca,mult_elas), ),
+ ),
+ b_ritz =BLOC(condition = "RITZ != None",
+ INTERF_DYNA =SIMP(statut='f',typ=interf_dyna_clas ),
+ NUME_REF =SIMP(statut='f',typ=nume_ddl_sdaster ),
+ ORTHO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Reorthonormalisation de la base de Ritz" ),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ b_ortho =BLOC(condition = "ORTHO == 'OUI' ",
+ MATRICE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+ ),
+ ),
+ DIAG_MASS =FACT(statut='f',max='**',
+ MODE_MECA =SIMP(statut='o',typ=mode_meca,max='**' ),
+ MODE_STAT =SIMP(statut='o',typ=mode_meca ),
+ ),
+ ORTHO_BASE =FACT(statut='f',max='**',
+ BASE =SIMP(statut='o',typ=(mode_meca,mult_elas)),
+ MATRICE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+ ),
+
+ SOLVEUR =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("LDLT","MULT_FRONT","MUMPS") ),
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
+ MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+
+
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 MICHEL S.MICHEL
+
+from Macro.defi_cable_bp_ops import defi_cable_bp_ops
+
+# ===========================================================================
+# CATALOGUE DE LA MACRO "DEFI_CABLE_BP"
+# -----------------------------------------
+#
+# USAGE :
+# Entrée :
+# - MODELE
+# - CABLE
+# - CHAM_MATER
+# - CARA_ELEM
+# - GROUP_MA_BETON
+# - DEFI_CABLE
+# - TENSION_INIT
+# - RECUL_ANCRAGE
+# - RELAXATION
+# - CONE
+# RAYON
+# LONGUEUR
+# PRESENT OUI ou NON deux fois
+# - TITRE
+# - INFO 1 / 2
+#
+# ===========================================================================
+
+DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precont,
+ fr="Calculer les profils initiaux de tension le long des cables de précontrainte d'une structure en béton",
+ reentrant='n',UIinfo={"groupe":("Modélisation",)},
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ GROUP_MA_BETON =SIMP(statut='o',typ=grma,max='**'),
+ DEFI_CABLE =FACT(statut='o',max='**',
+ regles=(UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+ MAILLE =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ NOEUD_ANCRAGE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=2),
+ GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+ ),
+ TYPE_ANCRAGE =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+ TENSION_INIT =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ RECUL_ANCRAGE =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ RELAXATION =FACT(statut='f',min=0,
+ R_J =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ ),
+ CONE =FACT(statut='f',
+ RAYON =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ LONGUEUR =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ PRESENT =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 MICHEL S.MICHEL
+
+DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n',
+ fr="Définit les profils initiaux de tension d'une structure en béton le long des cables de précontrainte"
+ +" (utilisée par la macro DEFI_CABLE_BP)",
+ UIinfo={"groupes":("Modélisation",)},
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ GROUP_MA_BETON =SIMP(statut='o',typ=grma,max='**'),
+ DEFI_CABLE =FACT(statut='o',max='**',
+ regles=(UN_PARMI('MAILLE','GROUP_MA'),
+ UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+ MAILLE =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ NOEUD_ANCRAGE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=2),
+ GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+ GROUP_NO_FUT =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+ ),
+ TYPE_ANCRAGE =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+ TENSION_INIT =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ RECUL_ANCRAGE =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ RELAXATION =FACT(statut='f',min=0,
+ R_J =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ CONE =FACT(statut='f',min=0,
+ RAYON =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ LONGUEUR =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),
+ PRESENT =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 08/12/2009 AUTEUR PROIX J-M.PROIX
+# 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 PROIX J.M.PROIX
+DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
+ fr="Définir le comportement d'un monocristal, d'un polycristal ou de groupes de fibres",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+# on exclut MULTIFBRE de MONOCRISTAL ou POLYCRISTAL car la structure de données n'est pas organisée pareil pour ces cas
+ regles=(UN_PARMI('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'),
+ PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE','MATER_SECT'),
+ ),
+ MONOCRISTAL =FACT(statut='f', max='**',
+ MATER =SIMP(statut='o', typ=mater_sdaster, max=1),
+ ECOULEMENT =SIMP(statut='o', typ='TXM', max=1,
+ fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écoulement viscoplastique"),
+ ECRO_ISOT =SIMP(statut='o', typ='TXM', max=1,
+ fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage isotrope"),
+ ECRO_CINE =SIMP(statut='o', typ='TXM', max=1,
+ fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
+ ELAS =SIMP(statut='f', typ='TXM', max=1,
+ fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"),
+ FAMI_SYST_GLIS =SIMP(statut='o',typ='TXM', max=1,
+ into=('BASAL', 'PRISMATIQUE', 'OCTAEDRIQUE', 'PYRAMIDAL1',
+ 'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'JOINT_GRAIN', 'RL', 'UNIAXIAL','BCC24'),),
+ ),
+
+ ROTA_RESEAU =SIMP(statut='f', typ='TXM', max=1,into=('NON','POST','CALC'),defaut='NON',
+ fr="rotation de reseau : NON, POST, CALC"),
+
+ POLYCRISTAL =FACT(statut='f', max='**',
+ regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+ MONOCRISTAL =SIMP(statut='o', typ=compor_sdaster, max=1),
+ FRAC_VOL =SIMP(statut='o', typ='R', max=1,fr="fraction volumique de la phase correspondant au monocristal"),
+ ANGL_REP =SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles nautiques en degrés"),
+ ANGL_EULER=SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles d'Euler en degrés"),
+ ),
+
+
+ b_poly =BLOC( condition = "POLYCRISTAL!='None'",
+ LOCALISATION =SIMP(statut='f', typ='TXM', max=1, into=('BZ', 'BETA', 'RL',),
+ fr="Donner le nom de la règle de localisation"),
+
+ b_beta =BLOC( condition = "LOCALISATION=='BETA'",
+ DL =SIMP(statut='o',typ='R',max=1),
+ DA =SIMP(statut='o',typ='R',max=1),
+ ),
+ ),
+
+#####################################################################################
+ GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+ fr="Donner le nom du concept regroupant tous les groupes de fibres (issu de DEFI_GEOM_FIBRE)"),
+ MATER_SECT = SIMP(statut='f',max=1,typ=mater_sdaster,
+ fr="Donner le nom du materiau pour les caracteristiques homogeneisees sur la section"),
+ MULTIFIBRE = FACT(statut='f',max='**',
+ GROUP_FIBRE =SIMP(statut='o', typ='TXM', max='**'),
+ MATER =SIMP(statut='o', typ=mater_sdaster, max=1,
+ fr="Donner le nom du materiau pour le groupe de fibres"),
+ ALGO_1D =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT",
+ into=("PETIT","PETIT_REAC","GROT_GDEP")),
+ RELATION =SIMP(statut='f', typ='TXM', max=1,defaut="ELAS",into=C_RELATION(),
+ fr="Donner le nom de la relation incrementale pour le groupe de fibres",
+ ),
+ RELATION_KIT =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+ into=(
+# MECA KIT_DDI
+ "VMIS_ISOT_TRAC",
+ "VMIS_ISOT_LINE",
+ "VMIS_ISOT_CINE",
+ "VMIS_ISOT_PUIS",
+ "GRANGER_FP",
+ "GRANGER_FP_INDT",
+ "GRANGER_FP_V",
+ "BETON_UMLV_FP",
+ "ROUSS_PR",
+ "NADAI_B",
+ "BETON_DOUBLE_DP",
+ ),),
+# on pourrait ajouter TOUT_GROUP_FIBRE
+
+ ) );
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op= 2,sd_prod=fonction_sdaster,
+ fr="Définir la valeur d'une grandeur invariante",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+ VALE =SIMP(statut='o',typ='R',),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 27/04/2010 AUTEUR DESOZA T.DESOZA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 ABBAS M.ABBAS
+#
+DEFI_CONTACT=OPER(nom = "DEFI_CONTACT",
+ op = 30,
+ sd_prod = char_contact,
+ fr = "Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+ reentrant = 'n',
+ UIinfo = {"groupes":("Modélisation",)},
+
+# MODELE
+
+ MODELE =SIMP(statut='o',typ=modele_sdaster,),
+ INFO =SIMP(statut='f',typ='I',into=(1,2),),
+
+# FORMULATION (UNIQUE PAR OCCURRENCE DE DEFI_CONTACT)
+
+ FORMULATION =SIMP(statut='o',
+ typ='TXM',
+ position='global',
+ defaut="DISCRETE",
+ into=("DISCRETE","CONTINUE","XFEM","LIAISON_UNIL",),),
+
+# PARAMETRE GENERAL: FROTTEMENT (A TERME DEVRA ETRE AU NIVEAU ZONE)
+
+ FROTTEMENT =SIMP(statut='f',
+ typ='TXM',
+ position='global',
+ defaut="SANS",
+ into=("COULOMB","SANS",)),
+
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
+
+ b_contact=BLOC(condition = "FORMULATION != 'LIAISON_UNIL' ",
+
+# PARAMETRE GENERAL: APPARIEMENT
+
+ LISSAGE =SIMP(statut='f',
+ typ='TXM',
+ defaut="NON",
+ into=("OUI","NON"),),
+
+# PARAMETRE GENERAL: VERIFICATION DE L'ORIENTATION ET DE LA COHERENCE DES NORMALES
+
+ VERI_NORM =SIMP(statut='f',
+ typ='TXM',
+ defaut="OUI",
+ into=("OUI","NON"),),
+
+# PARAMETRE GENERAL: BOUCLE SUR GEOMETRIE
+
+ b_bouc_geom_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
+ REAC_GEOM =SIMP(statut='f',
+ typ='TXM',
+ into=("AUTOMATIQUE","CONTROLE","SANS",),
+ defaut="AUTOMATIQUE",
+ ),
+ b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+ ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+ RESI_GEOM = SIMP(statut='f',typ='R',defaut=0.05),
+ ),
+ b_controle = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+ NB_ITER_GEOM = SIMP(statut='f',typ='I',defaut = 2),
+ ),
+ ),
+
+ b_bouc_geom_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+ REAC_GEOM =SIMP(statut='f',
+ typ='TXM',
+ into=("AUTOMATIQUE","CONTROLE","SANS",),
+ defaut="AUTOMATIQUE",
+ ),
+ b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+ ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+ RESI_GEOM = SIMP(statut='f',typ='R',defaut=0.0001),
+ ),
+ b_controle = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+ NB_ITER_GEOM = SIMP(statut='f',typ='I',defaut = 2),
+ ),
+ ),
+
+ b_bouc_geom_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+ REAC_GEOM =SIMP(statut='f',
+ typ='TXM',
+ into=("AUTOMATIQUE","CONTROLE","SANS",),
+ defaut="SANS",
+ ),
+ b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+ ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+ RESI_GEOM = SIMP(statut='f',typ='R',defaut=0.0001),
+ ),
+ b_controle = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+ NB_ITER_GEOM = SIMP(statut='f',typ='I',defaut = 2),
+ ),
+ ),
+
+
+# PARAMETRE GENERAL: BOUCLE SUR CONTACT
+
+ b_bouc_cont_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
+ ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+ ),
+
+ b_bouc_cont_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+ ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+ into=("MULT","MAXI")),
+ b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+ ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+ ),
+ b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+ ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+ ),
+ ),
+
+ b_bouc_cont_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+ ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+ into=("MULT","MAXI")),
+ b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+ ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+ ),
+ b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+ ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+ ),
+ ),
+
+# PARAMETRE GENERAL: BOUCLE SUR FROTTEMENT
+
+ b_bouc_frot = BLOC(condition = "FROTTEMENT=='COULOMB' and ((FORMULATION == 'CONTINUE') or (FORMULATION == 'XFEM')) ",
+ REAC_FROT =SIMP(statut='f',
+ typ='TXM',
+ into=("AUTOMATIQUE","CONTROLE",),
+ defaut="AUTOMATIQUE",),
+ b_automatique = BLOC(condition = "REAC_FROT == 'AUTOMATIQUE' ",
+ ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
+ RESI_FROT = SIMP(statut='f',typ='R',defaut=0.0001),
+ ),
+ b_controle = BLOC(condition = "REAC_FROT == 'CONTROLE' ",
+ NB_ITER_FROT = SIMP(statut='f',typ='I',defaut = 2),
+ ),
+ ),
+
+# PARAMETRE GENERAL: METHODES DISCRETES
+
+ b_para_discret = BLOC(condition = "FORMULATION == 'DISCRETE' ",
+ STOP_SINGULIER= SIMP(statut='f',typ='TXM',defaut="OUI",
+ into=("OUI","NON")),
+ NB_RESOL = SIMP(statut='f',typ='I', defaut=10 ),
+ STOP_INTERP = SIMP(statut='f',typ='TXM',defaut="NON",
+ into=("OUI","NON")),
+ TOLE_INTERP = SIMP(statut='f',typ='R',defaut = 0.),
+ RESI_ABSO = SIMP(statut='f',typ='R',
+ fr="Critere de convergence (niveau d'interpenetration autorise)"),
+ REAC_ITER = SIMP(statut='f',typ='I',defaut=3,
+ fr="Frequence de reinitialisation de la conjugaison"),
+ ITER_GCP_MAXI = SIMP(statut='f',typ='I',defaut=0,
+ fr="Nombre d'iterations maximal pour le GCP"),
+
+ PRE_COND = SIMP(statut='f',typ='TXM',defaut="SANS",into=("DIRICHLET","SANS"),
+ fr="Choix d'un preconditionneur (accelere la convergence)"),
+ ITER_PRE_MAXI = SIMP(statut='f',typ='I',defaut=0,
+ fr="Nombre d'iterations maximal pour le preconditionneur"),
+ COEF_RESI = SIMP(statut='f',typ='R',defaut = 1.,
+ fr="Critere_Convergence_Preconditionneur = COEF_RESI*Critere_Convergence_GCP",),
+ RECH_LINEAIRE = SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",
+ into=("ADMISSIBLE","NON_ADMISSIBLE"),
+ fr="Autorise-t-on de sortir du domaine admissible lors de la recherche lineaire",),
+ ),
+ ), #fin bloc b_contact
+
+## AFFECTATIONS (ZONES PAR ZONES)
+
+# AFFECTATION - CAS LIAISON_UNILATERALE
+
+ b_affe_unil = BLOC(condition = "FORMULATION == 'LIAISON_UNIL'",
+ ZONE=FACT(statut='o',
+ max='**',
+
+# -- Liaison unilatérale
+ regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ COEF_IMPO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+ COEF_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+
+# -- Incompatibilité avec CL
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+ ),
+ ), #fin bloc b_affe_unil
+
+# AFFECTATION - CAS DISCRET
+
+ b_affe_discret = BLOC(condition = "FORMULATION == 'DISCRETE'",
+ ZONE=FACT(statut='o',
+ max='**',
+
+# -- Appariement
+ APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+ into=("NODAL","MAIT_ESCL"),),
+
+ regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+ UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+ GROUP_MA_MAIT =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+ MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_ESCL =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT",
+ into=("MAIT","MAIT_ESCL","ESCL"),),
+
+ VECT_MAIT =SIMP(statut='f',typ='TXM',defaut="AUTO",
+ into=("AUTO","FIXE","VECT_Y")),
+
+ b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+ MAIT_FIXE =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+ MAIT_VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ VECT_ESCL =SIMP(statut='f',typ='TXM',defaut="AUTO",
+ into=("AUTO","FIXE","VECT_Y")),
+
+ b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+ ESCL_FIXE =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+ ESCL_VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ TYPE_APPA =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+ into =("PROCHE","FIXE")),
+
+ b_appa_fixe =BLOC(condition = "TYPE_APPA == 'FIXE'",
+ DIRE_APPA =SIMP(statut='f',typ='R',min=3,max=3),
+ ),
+
+ DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+ DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+ b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+ CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ),
+ ),
+
+ DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+
+ TOLE_APPA =SIMP(statut='f',typ='R' ,defaut=-1.0),
+ TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50),
+
+# -- Incompatibilité avec CL
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+# -- Résolution
+ ALGO_CONT =SIMP(statut='o',typ='TXM',defaut="CONTRAINTE",
+ into=("CONTRAINTE","LAGRANGIEN","PENALISATION","VERIF","GCP"),),
+
+ b_active=BLOC(condition = "ALGO_CONT == 'CONTRAINTE' ",
+ fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+ GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ b_glissiere=BLOC(condition = "GLISSIERE == 'OUI' ",
+ ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.),
+ ),
+ ),
+
+ b_verif=BLOC(condition = "ALGO_CONT == 'VERIF' ",
+ fr="Paramètres de la méthode sans calcul de contact",
+ GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+
+ b_penal_contact=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+ fr="Paramètres de la méthode pénalisée (contact)",
+ E_N =SIMP(statut='o',typ='R'),
+ ),
+
+ b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+ fr="Paramètres du frottement",
+ COULOMB =SIMP(statut='o',typ='R',),
+ COEF_MATR_FROT=SIMP(statut='f',typ='R',defaut=0.E+0),
+ ALGO_FROT =SIMP(statut='o',typ='TXM',defaut="PENALISATION",
+ into=("PENALISATION","LAGRANGIEN"),),
+
+ b_penal_frot=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+ fr="Paramètres de la méthode pénalisée (frottement)",
+ E_T =SIMP(statut='o',typ='R'),
+ ),
+ ),
+ ), #fin mot-clé facteur ZONE
+ ), #fin bloc b_affe_discret
+
+
+# AFFECTATION - CAS CONTINUE
+
+ b_affe_continue = BLOC(condition = "FORMULATION == 'CONTINUE'",
+ ZONE=FACT(statut='o',
+ max='**',
+
+# -- Appariement
+ APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+ into=("MAIT_ESCL",)),
+
+ regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+ UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+ GROUP_MA_MAIT =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+ MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_ESCL =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+ MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT",
+ into=("MAIT","MAIT_ESCL","ESCL"),),
+
+ VECT_MAIT =SIMP(statut='f',typ='TXM',defaut="AUTO",
+ into=("AUTO","FIXE","VECT_Y")),
+
+ b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+ MAIT_FIXE =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+ MAIT_VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ VECT_ESCL =SIMP(statut='f',typ='TXM',defaut="AUTO",
+ into=("AUTO","FIXE","VECT_Y")),
+
+ b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+ ESCL_FIXE =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+ ESCL_VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ TYPE_APPA =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+ into =("PROCHE","FIXE")),
+
+ b_appa_fixe=BLOC(condition = "TYPE_APPA == 'FIXE'",
+ DIRE_APPA =SIMP(statut='f',typ='R',min=3,max=3),
+ ),
+
+ DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+ DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+ b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+ CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ),
+ ),
+
+ DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+
+ TOLE_APPA =SIMP(statut='f',typ='R' ,defaut=-1.0),
+ TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50),
+
+# -- Incompatibilité avec CL
+
+ SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+ FOND_FISSURE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+ b_fond_fissure =BLOC(condition = "FOND_FISSURE == 'OUI' ",
+ fr="Traitement en fond de fissure",
+ regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+ NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+
+ RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+ b_raccord_surf =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",
+ fr="Traitement du raccord surfacique",
+ regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+ NOEUD_RACC =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+
+ EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+
+# -- Fonctionnalités spécifiques 'CONTINUE'
+ INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+ into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
+ "NCOTES" ,"NCOTES1" ,"NCOTES2"),),
+
+ CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+ GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+ ALGO_CONT =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","AVANCE","PENALISATION"),),
+
+ b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+ fr="Parametres de la formulation Lagrangienne",
+ COEF_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+ fr="Parametres du Lagrangien augmenté",
+ COEF_REGU_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_STAB_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_PENA_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_cont_pena =BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+ fr="Paramètres de la méthode pénalisée",
+ COEF_PENA_CONT =SIMP(statut='o',typ='R'),),
+
+ COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ b_compliance=BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
+ ASPERITE =SIMP(statut='o',typ='R',),
+ E_N =SIMP(statut='o',typ='R',),
+ E_V =SIMP(statut='f',typ='R',defaut=0.E+0),
+ ),
+
+ b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
+ COULOMB =SIMP(statut='o',typ='R',),
+ SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+ regles=(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+ SANS_NOEUD_FR =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ b_sans_group_no_frot=BLOC(condition="SANS_GROUP_NO_FR != None or SANS_NO_FR != None",
+ fr="Direction(s) de frottement à exclure",
+ EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3),
+ EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),
+ ),
+
+ ALGO_FROT =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","AVANCE","PENALISATION"),),
+ b_frot_std =BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+ fr="Parametres de la formulation Lagrangienne",
+ COEF_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_frot_avc =BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+ fr="Parametres du Lagrangien augmenté",
+ COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_PENA_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_frot_pena =BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+ fr="Paramètres de la méthode pénalisée",
+ COEF_PENA_FROT =SIMP(statut='o',typ='R'),
+ ),
+
+ USURE =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+ b_usure =BLOC(condition = "USURE == 'ARCHARD' ",
+ fr="Parametres de la loi d'usure d'Archard",
+ K =SIMP(statut='o',typ='R',),
+ H =SIMP(statut='o',typ='R',val_min=1E-8),
+ ),
+
+ ), #fin bloc b_frottement
+ ), #fin mot-clé facteur ZONE
+ ), #fin bloc b_affe_continue
+
+
+# AFFECTATION - CAS XFEM
+
+ b_affe_xfem =BLOC(condition = "FORMULATION == 'XFEM'",
+ ZONE=FACT(statut='o',
+ max='**',
+# -- Fissure
+ FISS_MAIT = SIMP(statut='o',typ=fiss_xfem,max=1),
+ TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50),
+
+# -- Fonctionnalités spécifiques 'XFEM'
+ INTEGRATION = SIMP(statut='f',
+ typ='TXM',
+ defaut="FPG4",
+ into=("GAUSS","FPG2","FPG3","FPG4","FPG6","FPG7",
+ "NOEUD","SIMPSON","SIMPSON1","NCOTES","NCOTES1","NCOTES2"),),
+
+ CONTACT_INIT = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+ GLISSIERE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+ RELATION = SIMP(statut='f',typ='TXM',defaut="NON",into=("CZM_XFEM","NON"),),
+
+ ALGO_LAGR = SIMP(statut='f',typ='TXM',defaut="VERSION1",
+ into=("NON","VERSION1","VERSION2"),),
+ COEF_ECHELLE = SIMP(statut='f',typ='R',defaut=1.E+6),
+
+ ALGO_CONT =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","AVANCE","PENALISATION"),),
+
+ b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+ fr="Parametres de la formulation Lagrangienne",
+ COEF_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",fr="Parametres du Lagrangien augmenté",
+ COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ ),
+
+ b_cont_pen=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+ fr="Paramètre de la méthode pénalisée",
+ COEF_PENA_CONT =SIMP(statut='o',typ='R'),
+ ),
+
+ b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
+ COULOMB =SIMP(statut='o',typ='R',),
+ SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+ ALGO_FROT =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","AVANCE","PENALISATION"),),
+
+ b_frot_std=BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+ fr="Parametres de la formulation Lagrangienne",
+ COEF_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ ),
+ b_frot_avc=BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+ fr="Parametres du Lagrangien augmenté",
+ COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),
+ COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ COEF_PENA_FROT =SIMP(statut='f',typ='R',defaut=0.E+0),
+ ),
+ b_frot_pen=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+ fr="Paramètre de la méthode pénalisée",
+ COEF_PENA_FROT =SIMP(statut='o',typ='R'),
+ ),
+ ), #fin bloc b_frottement
+ ), #fin mot-clé facteur ZONE
+ ), #fin bloc b_affe_xfem
+
+ ) #fin OPER
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Déterminer les caractéristiques matériaux homogénéisées d'une coque multicouche à partir"
+ +" des caractéristiques de chaque couche",
+ COUCHE =FACT(statut='o',max='**',
+ EPAIS =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ ORIENTATION =SIMP(statut='f',typ='R',defaut= 0.E+0,
+ val_min=-90.E+0,val_max=90.E+0 ),
+ ),
+ IMPRESSION =FACT(statut='f',
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 LEFEBVRE J.P.LEFEBVRE
+def DEFIC_prod(self,ACTION,UNITE,**args):
+ if ACTION == "ASSOCIER" or ACTION == "RESERVER":
+ if UNITE != None :
+ return
+ else :
+ return entier
+ elif ACTION == "LIBERER" :
+ return
+ else :
+ raise AsException("ACTION non prevue : %s" % ACTION)
+
+DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_prod,reentrant='n',
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Ouvre ou ferme un fichier associé à un numéro d'unité logique",
+
+ ACTION =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER","RESERVER"),defaut="ASSOCIER"),
+
+ b_associer =BLOC(condition = "ACTION == 'ASSOCIER'",
+ fr="Paramètres pour l'ouverture du fichier",
+ regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
+ FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+ TYPE =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
+
+ b_type_ascii =BLOC(condition = "TYPE == 'ASCII'",fr="Paramètres pour le type ASCII",
+ ACCES =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
+ ),
+ b_type_autre =BLOC(condition = "TYPE != 'ASCII'",fr="Paramètres pour les types BINARY et LIBRE",
+ ACCES =SIMP(statut='f',typ='TXM',into=("NEW","OLD"),defaut="NEW"),
+ ),
+ ),
+
+ b_reserver =BLOC(condition = "ACTION == 'RESERVER'",
+ fr="Paramètres pour la réservation de l'unité du fichier",
+ regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
+ FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+ TYPE =SIMP(statut='f',typ='TXM',into=("ASCII",),defaut="ASCII"),
+ ACCES =SIMP(statut='f',typ='TXM',into=("APPEND",),defaut="APPEND"),
+ ),
+
+ b_liberer =BLOC(condition = "ACTION == 'LIBERER'",
+ fr="Paramètres pour la fermeture du fichier",
+ regles=(UN_PARMI('FICHIER','UNITE'),),
+ UNITE =SIMP(statut='f',typ='I' ,val_min=1),
+ FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ )
+#& MODIF COMMANDE DATE 24/08/2009 AUTEUR GENIAUT S.GENIAUT
+# 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 GENIAUT S.GENIAUT
+
+DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op= 41,sd_prod=fiss_xfem,reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Définition des caratéristiques d'une fissure ou d'une interface avec X-FEM",
+
+# ------------------------------------------------------------------------------------------------------------------------
+# modele sous-jacent
+# ------------------------------------------------------------------------------------------------------------------------
+
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+ TYPE_DISCONTINUITE =SIMP(statut='f',typ='TXM',into=("FISSURE","INTERFACE",) ,defaut="FISSURE",position='global'),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# caracteristiques de la fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+ DEFI_FISS =FACT(statut='o',max=1,
+
+ regles =UN_PARMI('GROUP_MA_FISS','FONC_LN','FORM_FISS','CHAM_NO_LSN'),
+
+# impossible de faire des regles dans des blocs condition, dommage
+# b_fissure =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",fr="Regles pour les fissures",
+# regles =(ENSEMBLE('FONC_LN','FONC_LT'),
+# ENSEMBLE('CHAM_NO_LSN','CHAM_NO_LST'),
+# ENSEMBLE('GROUP_MA_FISS','GROUP_MA_FOND')),
+# ),
+#
+# b_interface =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",fr="Regles pour les interfaces",
+# regles =(PRESENT_ABSENT('FONC_LN','FONC_LT'),
+# PRESENT_ABSENT('CHAM_NO_LSN','CHAM_NO_LST'),
+# PRESENT_ABSENT('GROUP_MA_FISS','GROUP_MA_FOND')),
+# ),
+
+ FONC_LT =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+ FONC_LN =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+ CHAM_NO_LSN =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+ CHAM_NO_LST =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+ GROUP_MA_FISS =SIMP(statut='f',typ=grma,min=1,max=1),
+ GROUP_MA_FOND =SIMP(statut='f',typ=grma,min=1,max=1),
+ FORM_FISS =SIMP(statut='f',typ='TXM',into=("ELLIPSE","CYLINDRE","DEMI_PLAN","SEGMENT","DEMI_DROITE","INCLUSION","DROITE") ),
+ b_ellipse =BLOC(condition = "FORM_FISS == 'ELLIPSE' ",fr="Paramètres de la fissure elliptique",
+ DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ CENTRE =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_X =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ COTE_FISS =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ), ),
+ b_cylindre =BLOC(condition = "FORM_FISS == 'CYLINDRE' ",fr="Paramètres de la fissure cylindrique",
+ DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ CENTRE =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_X =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),),
+ b_demiplan =BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",fr="Paramètres de la fissure plane à front droit",
+ PFON =SIMP(statut='o',typ='R',min=3,max=3),
+ NORMALE =SIMP(statut='o',typ='R',min=3,max=3),
+ DTAN =SIMP(statut='o',typ='R',min=3,max=3),),
+ b_segment =BLOC(condition = "FORM_FISS == 'SEGMENT' ",fr="Paramètres de la fissure 2D segment",
+ PFON_ORIG =SIMP(statut='o',typ='R',min=3,max=3),
+ PFON_EXTR =SIMP(statut='o',typ='R',min=3,max=3),),
+ b_demidroite =BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",fr="Paramètres de la fissure 2D demi-droite",
+ PFON =SIMP(statut='o',typ='R',min=3,max=3),
+ DTAN =SIMP(statut='o',typ='R',min=3,max=3),),
+ b_droite =BLOC(condition = "FORM_FISS == 'DROITE' ",fr="Paramètres de l'interface 2D (fissure traversante)",
+ POINT =SIMP(statut='o',typ='R',min=3,max=3),
+ DTAN =SIMP(statut='o',typ='R',min=3,max=3),),
+ b_inclusion =BLOC(condition = "FORM_FISS == 'INCLUSION' ",fr="Paramètres de l'interface 2D (inclusion)",
+ DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ CENTRE =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_X =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),),
+ ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# partie du maillage potentiellement enrichie
+# ------------------------------------------------------------------------------------------------------------------------
+
+ GROUP_MA_ENRI =SIMP(statut='o',typ=grma,max=01),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# types d'enrichissement
+# ------------------------------------------------------------------------------------------------------------------------
+
+ b_enri_inte =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",
+
+ CHAM_DISCONTINUITE =SIMP(statut='f',typ='TXM',into=("DEPL","SIGM"),defaut="DEPL" ),
+
+ ),
+
+
+ b_enri_fiss =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
+
+ CHAM_DISCONTINUITE =SIMP(statut='f',typ='TXM',into=("DEPL",),defaut="DEPL" ),
+ TYPE_ENRI_FOND =SIMP(statut='f',typ='TXM',into=("TOPOLOGIQUE","GEOMETRIQUE"),defaut="TOPOLOGIQUE" ),
+
+ b_enri_geom =BLOC(condition = "TYPE_ENRI_FOND == 'GEOMETRIQUE' ",fr="Paramètres de l enrichissement geometrique",
+ RAYON_ENRI =SIMP(statut='f',typ='R',val_min=0.E+0),
+
+ b_enri_couches =BLOC(condition = "(RAYON_ENRI == None) ",fr="Paramètres de l enrichissement à n couches",
+ NB_COUCHES =SIMP(statut='f',typ='I',defaut=4,val_min=1),
+
+ ),
+ ),
+ ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# orientation du fond de fissure
+# ------------------------------------------------------------------------------------------------------------------------
+
+ b_orie_fond =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
+
+ ORIE_FOND =FACT(statut='f',max=1,
+ PFON_INI =SIMP(statut='o',typ='R',max=3),
+ VECT_ORIE =SIMP(statut='o',typ='R',max=3),
+ POINT_ORIG =SIMP(statut='o',typ='R',max=3),
+ ),
+
+ ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+# info
+# ------------------------------------------------------------------------------------------------------------------------
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
+
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+ reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement",
+ UIinfo={"groupes":("Maillage",)},
+ regles=( UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
+ FAISCEAU_TRANS =FACT(statut='f',max='**',
+ regles=( ENSEMBLE('CSTE_CONNORS','NB_CONNORS','RHO_TUBE'),),
+ COUPLAGE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ PROF_VITE_FLUI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PROF_RHO_F_INT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PROF_RHO_F_EXT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ NOM_CMP =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+ COEF_MASS_AJOU =SIMP(statut='f',typ='R' ),
+ TYPE_PAS =SIMP(statut='f',typ='TXM',into=("CARRE_LIGN","TRIA_LIGN") ),
+ TYPE_RESEAU =SIMP(statut='f',typ='I' ),
+ UNITE_CD =SIMP(statut='f',typ='I',defaut=70),
+ UNITE_CK =SIMP(statut='f',typ='I',defaut=71),
+ PAS =SIMP(statut='f',typ='R' ),
+ CSTE_CONNORS =SIMP(statut='f',typ='R',min=2,max=2,val_min=0.E+00),
+ NB_CONNORS =SIMP(statut='f',typ='I',val_min=2,),
+ RHO_TUBE =SIMP(statut='f',typ='R' ),
+ ),
+ GRAPPE =FACT(statut='f',
+ regles=(ENSEMBLE('GRAPPE_2','NOEUD','CARA_ELEM','MODELE','RHO_FLUI',),
+ PRESENT_PRESENT('COEF_MASS_AJOU','GRAPPE_2', ),),
+# peut on créer un bloc a partir de la valeur de couplage
+ COUPLAGE =SIMP(statut='o',typ='TXM',into=("OUI","NON") ),
+ GRAPPE_2 =SIMP(statut='f',typ='TXM',
+ into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC") ),
+ NOEUD =SIMP(statut='f',typ=no),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ MODELE =SIMP(statut='f',typ=modele_sdaster ),
+ COEF_MASS_AJOU =SIMP(statut='f',typ='R' ),
+ RHO_FLUI =SIMP(statut='f',typ='R' ),
+ UNITE_CA =SIMP(statut='f',typ='I',defaut=70),
+ UNITE_KA =SIMP(statut='f',typ='I',defaut=71),
+ ),
+ FAISCEAU_AXIAL =FACT(statut='f',max='**',
+ regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
+ UN_PARMI('CARA_ELEM','RAYON_TUBE'),
+ ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
+ PRESENT_ABSENT('RAYON_TUBE','TRI_GROUP_MA'),
+ ENSEMBLE('CARA_PAROI','VALE_PAROI'),
+ ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
+ 'COOR_GRILLE','TYPE_GRILLE', ),),
+# on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TRI_GROUP_MA =SIMP(statut='f',typ='TXM' ),
+ VECT_X =SIMP(statut='f',typ='R',max=3),
+ PROF_RHO_FLUI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PROF_VISC_CINE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ RAYON_TUBE =SIMP(statut='f',typ='R' ),
+ COOR_TUBE =SIMP(statut='f',typ='R',max='**'),
+ PESANTEUR =SIMP(statut='f',typ='R',min=4,max=4),
+ RUGO_TUBE =SIMP(statut='f',typ='R' ),
+ CARA_PAROI =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=5,
+ into=("YC","ZC","R","HY","HZ") ),
+ VALE_PAROI =SIMP(statut='f',typ='R',max=5),
+ ANGL_VRIL =SIMP(statut='f',typ='R' ),
+ LONG_TYPG =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+ LARG_TYPG =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+ EPAI_TYPG =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+ RUGO_TYPG =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+ COEF_TRAI_TYPG =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+ COEF_DPOR_TYPG =SIMP(statut='f',typ='R',max='**'),
+ COOR_GRILLE =SIMP(statut='f',typ='R',max='**'),
+ TYPE_GRILLE =SIMP(statut='f',typ='I',max='**'),
+ ),
+ COQUE_COAX =FACT(statut='f',
+ MASS_AJOU =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ GROUP_MA_INT =SIMP(statut='o',typ=grma),
+ GROUP_MA_EXT =SIMP(statut='o',typ=grma),
+ VECT_X =SIMP(statut='o',typ='R',max='**'),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ MATER_INT =SIMP(statut='o',typ=mater_sdaster ),
+ MATER_EXT =SIMP(statut='o',typ=mater_sdaster ),
+ RHO_FLUI =SIMP(statut='o',typ='R' ),
+ VISC_CINE =SIMP(statut='o',typ='R' ),
+ RUGOSITE =SIMP(statut='o',typ='R' ),
+ PDC_MOY_1 =SIMP(statut='o',typ='R' ),
+ PDC_DYN_1 =SIMP(statut='o',typ='R' ),
+ PDC_MOY_2 =SIMP(statut='o',typ='R' ),
+ PDC_DYN_2 =SIMP(statut='o',typ='R' ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 11/01/2010 AUTEUR DURAND C.DURAND
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PEYRARD C.PEYRARD
+
+from Macro.defi_fonc_elec_ops import defi_fonc_elec_ops
+
+DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction_sdaster,reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
+ regles=(UN_PARMI('COUR_PRIN','COUR'),
+ EXCLUS('COUR','COUR_SECO'), ),
+ FREQ =SIMP(statut='f',typ='R',defaut= 50.),
+ SIGNAL =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
+ COUR =FACT(statut='f',max='**',
+ fr="Définition du courant de court-circuit",
+ regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
+ UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+ INTE_CC_1 =SIMP(statut='o',typ='R'),
+ TAU_CC_1 =SIMP(statut='o',typ='R'),
+ PHI_CC_1 =SIMP(statut='f',typ='R'),
+ INTC_CC_1 =SIMP(statut='f',typ='R'),
+ INTE_CC_2 =SIMP(statut='o',typ='R'),
+ TAU_CC_2 =SIMP(statut='o',typ='R'),
+ PHI_CC_2 =SIMP(statut='f',typ='R'),
+ INTC_CC_2 =SIMP(statut='f',typ='R'),
+ INST_CC_INIT =SIMP(statut='o',typ='R'),
+ INST_CC_FIN =SIMP(statut='o',typ='R'),
+ ),
+ COUR_PRIN =FACT(statut='f',
+ fr="Définition du courant de court-circuit avec réenclenchement",
+ regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
+ INTE_CC_1 =SIMP(statut='o',typ='R'),
+ TAU_CC_1 =SIMP(statut='o',typ='R'),
+ PHI_CC_1 =SIMP(statut='f',typ='R'),
+ INTC_CC_1 =SIMP(statut='f',typ='R'),
+ INTE_RENC_1 =SIMP(statut='f',typ='R'),
+ TAU_RENC_1 =SIMP(statut='f',typ='R'),
+ PHI_RENC_1 =SIMP(statut='f',typ='R'),
+ INST_CC_INIT =SIMP(statut='o',typ='R'),
+ INST_CC_FIN =SIMP(statut='o',typ='R'),
+ INST_RENC_INIT =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ INST_RENC_FIN =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ ),
+ COUR_SECO =FACT(statut='f',max='**',
+ fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
+ regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+ INTE_CC_2 =SIMP(statut='o',typ='R'),
+ TAU_CC_2 =SIMP(statut='o',typ='R'),
+ PHI_CC_2 =SIMP(statut='f',typ='R'),
+ INTC_CC_2 =SIMP(statut='f',typ='R'),
+ INTE_RENC_2 =SIMP(statut='f',typ='R'),
+ TAU_RENC_2 =SIMP(statut='f',typ='R'),
+ PHI_RENC_2 =SIMP(statut='f',typ='R'),
+ DIST =SIMP(statut='f',typ='R',defaut=1.0E+0),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
+ reentrant='n',
+ fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre",
+ UIinfo={"groupes":("Fonction",)},
+ MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster) ),
+ NOEUD_INIT =SIMP(statut='o',typ=no),
+ NOEUD_FIN =SIMP(statut='o',typ=no),
+ VITE =FACT(statut='o',
+ VALE =SIMP(statut='f',typ='R',defaut= 1. ),
+ PROFIL =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
+ NB_BAV =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
+ ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",
+ into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",
+ into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM' ,defaut="EXCLU",
+ into=("CONSTANT","LINEAIRE","EXCLU") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
+ if VALE != None : return fonction_sdaster
+ if VALE_C != None : return fonction_c
+ if VALE_PARA != None : return fonction_sdaster
+ if ABSCISSE != None : return fonction_sdaster
+ if NOEUD_PARA != None : return fonction_sdaster
+ raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+ ,fr="Définit une fonction réelle ou complexe d'une variable réelle",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),),
+ NOM_PARA =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+ NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+ VALE =SIMP(statut='f',typ='R',min=2,max='**',
+ fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+ ABSCISSE =SIMP(statut='f',typ='R',min=2,max='**',
+ fr ="Liste d abscisses d une fonction réelle"),
+ VALE_C =SIMP(statut='f',typ='R',min=2,max='**',
+ fr ="Fonction complexe définie par une liste de couples"),
+ VALE_PARA =SIMP(statut='f',typ=listr8_sdaster,
+ fr ="Fonction réelle définie par deux concepts de type listr8" ),
+ b_vale_para =BLOC(condition = "VALE_PARA != None",
+ VALE_FONC =SIMP(statut='o',typ=listr8_sdaster ),
+ ),
+ b_abscisse =BLOC(condition = "ABSCISSE != None",
+ ORDONNEE =SIMP(statut='o',typ='R',min=2,max='**',
+ fr ="Liste d ordonnées d une fonction réelle"),
+ ),
+ NOEUD_PARA =SIMP(statut='f',typ=no,max='**',
+ fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+ b_noeud_para =BLOC(condition = "NOEUD_PARA != None",
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+ VALE_Y =SIMP(statut='o',typ='R',max='**'),
+ ),
+
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ VERIF =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Définition de lèvres et d'un fond de fissure en 3D",
+ regles=(UN_PARMI('FOND_FISS','FOND_FERME','FOND_INF'),
+ EXCLUS('FOND_FERME','DTAN_ORIG'),
+ EXCLUS('FOND_FERME','DTAN_EXTR'),
+ EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
+ EXCLUS('FOND_FERME','VECT_GRNO_EXTR'),
+ UN_PARMI('LEVRE_SUP','NORMALE'),
+ EXCLUS('LEVRE_INF','NORMALE'),
+ ENSEMBLE('DTAN_ORIG','DTAN_EXTR'),
+ ENSEMBLE('FOND_SUP','FOND_INF'),
+ EXCLUS('FOND_INF','FOND_FISS'),
+ EXCLUS('FOND_INF','FOND_FERME'),
+ ENSEMBLE('VECT_GRNO_ORIG','VECT_GRNO_EXTR'),
+ EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+ EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+ FOND_FISS =FACT(statut='f',
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+ EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+ EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+# à mettre à jour le max vaut-il 1
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ ),
+ FOND_FERME =FACT(statut='f',
+ regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+ EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ MAILLE_ORIG =SIMP(statut='f',typ=ma,),
+ GROUP_MA_ORIG =SIMP(statut='f',typ=ma,),
+ ),
+ FOND_INF =FACT(statut='f',
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ ),
+ FOND_SUP =FACT(statut='f',
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ ),
+ LEVRE_SUP =FACT(statut='f',
+ regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+ LEVRE_INF =FACT(statut='f',
+ regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+ NORMALE =SIMP(statut='f',typ='R',max='**'),
+ PREC_NORM =SIMP(statut='f',typ='R',defaut=0.1),
+ DTAN_ORIG =SIMP(statut='f',typ='R',max='**'),
+ DTAN_EXTR =SIMP(statut='f',typ='R',max='**'),
+ VECT_GRNO_ORIG =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+ VECT_GRNO_EXTR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 FLEJOU J.L.FLEJOU
+#
+DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op= 119, sd_prod=gfibre_sdaster,
+ fr="Definition des groupes de fibres pour les elements multifibres",
+ reentrant='n',
+ UIinfo={"groupes":("Modelisation",)},
+ regles=(AU_MOINS_UN('SECTION','FIBRE'),),
+
+ INFO =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+#============================================================================
+ SECTION =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+ PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+ GROUP_FIBRE =SIMP(statut='o',typ='TXM',min=1,max=1),
+ TOUT_SECT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA_SECT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_SECT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ MAILLAGE_SECT =SIMP(statut='o',typ=maillage_sdaster),
+ COOR_AXE_POUTRE =SIMP(statut='o',typ='R',min=2,max=2),
+ ),
+
+
+#============================================================================
+ FIBRE =FACT(statut='f',max='**',
+ GROUP_FIBRE =SIMP(statut='o',typ='TXM',min=1,max=1),
+ CARA =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
+ VALE =SIMP(statut='o',typ='R',max='**'),
+ COOR_AXE_POUTRE =SIMP(statut='o',typ='R',min=2,max=2),
+ ),
+
+
+) ;
+#& MODIF COMMANDE DATE 20/04/2009 AUTEUR SFAYOLLE S.FAYOLLE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 SFAYOLLE S.FAYOLLE
+DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
+ UIinfo={"groupes":("Modelisation",)},
+ fr="Determiner les caracteristiques du beton arme homogeneisees a partir des proprietes du beton et de "
+ +" plusieurs types d'armature",
+ reuse = SIMP(statut='f',typ=mater_sdaster),
+ BETON =FACT(statut='o',max=1,
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ EPAIS =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ GAMMA =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+ QP1 =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+ QP2 =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+
+ C1N1 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C1N2 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C1N3 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2N1 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2N2 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2N3 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C1M1 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C1M2 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C1M3 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2M1 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2M2 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ C2M3 =SIMP(statut='o',typ='R',val_min=0.E+0),
+
+ OMT =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+ EAT =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+ BT1 =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+ BT2 =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+
+ MP1X =SIMP(statut='f',typ=('R',listr8_sdaster)),
+ MP2X =SIMP(statut='f',typ=('R',listr8_sdaster)),
+ MP1Y =SIMP(statut='f',typ=('R',listr8_sdaster)),
+ MP2Y =SIMP(statut='f',typ=('R',listr8_sdaster)),
+ ),
+ NAPPE =FACT(statut='o',max=10,
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ OMX =SIMP(statut='o',typ='R',val_min=0.E+0),
+ OMY =SIMP(statut='o',typ='R',val_min=0.E+0),
+ RX =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ RY =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ ),
+ CABLE_PREC =FACT(statut='f',max=1,
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ OMX =SIMP(statut='o',typ='R',val_min=0.E+0),
+ OMY =SIMP(statut='o',typ='R',val_min=0.E+0),
+ RX =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ RY =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ PREX =SIMP(statut='o',typ='R'),
+ PREY =SIMP(statut='o',typ='R'),
+ ),
+ LINER =FACT(statut='f',max=10,
+ MATER =SIMP(statut='o',typ=(mater_sdaster) ),
+ OML =SIMP(statut='o',typ='R',val_min=0.E+0),
+ RLR =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ ),
+ IMPRESSION =FACT(statut='f',
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ ),
+) ;
+#& MODIF COMMANDE DATE 02/02/2010 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def defi_group_prod(MAILLAGE,**args):
+ if AsType(MAILLAGE) == maillage_sdaster : return maillage_sdaster
+ if AsType(MAILLAGE) == squelette : return squelette
+ raise AsException("type de concept resultat non prevu")
+
+DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
+ fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
+ reentrant='o',
+ UIinfo={"groupes":("Maillage",)},
+ regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO','DETR_GROUP_NO','DETR_GROUP_MA'),),
+ MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+ DETR_GROUP_MA =FACT(statut='f',max='**',
+ NOM =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),),
+ DETR_GROUP_NO =FACT(statut='f',max='**',
+ NOM =SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**'),),
+
+
+ CREA_GROUP_MA =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+ NOM =SIMP(statut='o',typ=grma),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ INTERSEC =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ UNION =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ DIFFE =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TYPE_MAILLE =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","1D","2D","3D"),max=1 ),
+
+ OPTION =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE",
+ "BANDE","APPUI_LACHE","APPUI") ),
+ b_group_ma =BLOC(condition = "GROUP_MA != None",
+ regles=(EXCLUS('POSITION','NUME_INIT'),),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ POSITION =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
+ b_nume_init =BLOC(condition = "NUME_INIT != None",
+ NUME_FIN =SIMP(statut='f',typ='I' ),
+ ),
+ ),
+ b_face_normale =BLOC(condition = "OPTION == 'FACE_NORMALE'",
+ regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=2),
+ VECT_NORMALE =SIMP(statut='f',typ='R',max=3),
+ ANGL_PREC =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ VERI_SIGNE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_sphere =BLOC(condition = "OPTION == 'SPHERE'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+ POINT =SIMP(statut='f',typ='R',max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+ RAYON =SIMP(statut='o',typ='R' ),
+ ),
+ b_cylindre =BLOC(condition = "OPTION == 'CYLINDRE'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+ POINT =SIMP(statut='f',typ='R',max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+ RAYON =SIMP(statut='o',typ='R' ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=2),
+ VECT_NORMALE =SIMP(statut='f',typ='R',max=3),
+ ),
+ b_bande =BLOC(condition = "OPTION == 'BANDE'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+ POINT =SIMP(statut='f',typ='R' ,max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=1),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ DIST =SIMP(statut='o',typ='R' ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=2),
+ VECT_NORMALE =SIMP(statut='f',typ='R',max=3),
+ ),
+ b_app_lache =BLOC(condition = "OPTION == 'APPUI_LACHE'",
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ b_appui =BLOC(condition = "OPTION == 'APPUI'",
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ TYPE_APPUI =SIMP(statut='o',typ='TXM',max=1, into=('AU_MOINS_UN','TOUT','SOMMET','MAJORITE')),
+ ),
+ ),
+
+
+ CREA_GROUP_NO =FACT(statut='f',max='**',
+ OPTION =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+ "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL","INCLUSION") ),
+
+ b_option =BLOC(condition = "OPTION == None" ,
+ regles=(UN_PARMI('TOUT_GROUP_MA','GROUP_MA','GROUP_NO','NOEUD',
+ 'INTERSEC','UNION','DIFFE'),),
+ TOUT_GROUP_MA =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ INTERSEC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ UNION =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ DIFFE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+
+ b_nom_group_ma =BLOC(condition = "GROUP_MA != None",
+ NOM = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ CRIT_NOEUD = SIMP(statut='f',typ='TXM',defaut="TOUS",
+ into=("TOUS","SOMMET","MILIEU","CENTRE"),),
+ ),
+ b_group_no =BLOC(condition = "GROUP_NO != None",
+ regles=(EXCLUS('POSITION','NUME_INIT'),),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ POSITION =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
+ b_nume_init =BLOC(condition = "NUME_INIT != None",
+ NUME_FIN =SIMP(statut='f',typ='I' ),
+ ),
+ ),
+ b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+ NOM =SIMP(statut='o',typ=geom),
+ ),
+ ),
+
+ b_env_sphere =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+ NOM =SIMP(statut='o',typ=geom),
+ POINT =SIMP(statut='f',typ='R' ,max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=1),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ RAYON =SIMP(statut='o',typ='R' ),
+ PRECISION =SIMP(statut='o',typ='R' ),
+ ),
+ b_env_cylindre =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+ NOM =SIMP(statut='o',typ=geom),
+ POINT =SIMP(statut='f',typ='R' ,max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=1),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ RAYON =SIMP(statut='o',typ='R' ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ VECT_NORMALE =SIMP(statut='f',typ='R',max=3),
+ PRECISION =SIMP(statut='o',typ='R' ),
+ ),
+ b_env_plan =BLOC(condition = "OPTION == 'PLAN'",
+ regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+ NOM =SIMP(statut='o',typ=geom),
+ POINT =SIMP(statut='f',typ='R' ,max=3),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=1),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ ANGL_NAUT =SIMP(statut='f',typ='R' ,max=3),
+ VECT_NORMALE =SIMP(statut='f',typ='R' ,max=3),
+ PRECISION =SIMP(statut='o',typ='R' ),
+ ),
+ b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+ regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),
+ UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+ UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+ NOM =SIMP(statut='o',typ=geom),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno),
+ NOEUD_EXTR =SIMP(statut='f',typ=no),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno),
+ PRECISION =SIMP(statut='o',typ='R' ),
+ CRITERE =SIMP(statut='o',typ='TXM',into=("ABSOLU","RELATIF") ),
+ ),
+ b_noeud_ordo =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+ regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+ EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+ NOM =SIMP(statut='o',typ=geom),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno),
+ NOEUD_EXTR =SIMP(statut='f',typ=no),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno),
+ ),
+ b_tunnel =BLOC(condition = "OPTION == 'TUNNEL'",
+ regles=(AU_MOINS_UN ('TOUT','GROUP_MA','MAILLE'),
+ EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+ AU_MOINS_UN ('GROUP_MA_AXE','MAILLE_AXE'),),
+ NOM =SIMP(statut='o',typ=geom),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_AXE =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_AXE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD_ORIG =SIMP(statut='f',typ=no),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno),
+ RAYON =SIMP(statut='o',typ='R'),
+ LONGUEUR =SIMP(statut='f',typ='R'),
+ ),
+ b_inclusion =BLOC(condition = "OPTION == 'INCLUSION'",
+ fr="""crée le groupe des noeuds des mailles de GROUP_MA inclus géométriquement
+ dans les mailles de GROUP_MA_INCL""",
+ NOM =SIMP(statut='o',typ=geom),
+ CAS_FIGURE =SIMP(statut='o',typ='TXM',into=("2D","3D","2.5D",)),
+ DISTANCE_MAX =SIMP(statut='f',typ='R',),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA_INCL =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLAGE_INCL =SIMP(statut='f',typ=maillage_sdaster),
+ ),
+ ),
+ ALARME =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ INFO =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+from Macro.defi_inte_spec_ops import defi_inte_spec_ops
+
+DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_fonction,
+ reentrant='n',
+ fr="Définit une matrice interspectrale",
+ UIinfo={"groupes":("Fonction",)},
+
+ DIMENSION =SIMP(statut='f',typ='I',defaut= 1 ),
+
+ PAR_FONCTION =FACT(statut='f',max='**',
+ NUME_ORDRE_I =SIMP(statut='o',typ='I' ),
+ NUME_ORDRE_J =SIMP(statut='o',typ='I' ),
+ FONCTION =SIMP(statut='o',typ=fonction_c ),
+ ),
+ KANAI_TAJIMI =FACT(statut='f',max='**',
+ regles=(EXCLUS('VALE_R','VALE_C'),),
+ NUME_ORDRE_I =SIMP(statut='o',typ='I' ),
+ NUME_ORDRE_J =SIMP(statut='o',typ='I' ),
+ FREQ_MIN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FREQ_MAX =SIMP(statut='f',typ='R',defaut= 100. ),
+ PAS =SIMP(statut='f',typ='R',defaut= 1. ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',defaut= 0.6 ),
+ FREQ_MOY =SIMP(statut='f',typ='R',defaut= 5. ),
+ VALE_R =SIMP(statut='f',typ='R' ),
+ VALE_C =SIMP(statut='f',typ='C' ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ ),
+ CONSTANT =FACT(statut='f',max='**',
+ regles=(EXCLUS('VALE_R','VALE_C'),),
+ NUME_ORDRE_I =SIMP(statut='o',typ='I' ),
+ NUME_ORDRE_J =SIMP(statut='o',typ='I' ),
+ FREQ_MIN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FREQ_MAX =SIMP(statut='f',typ='R',defaut= 100. ),
+ PAS =SIMP(statut='f',typ='R',defaut= 1. ),
+ VALE_R =SIMP(statut='f',typ='R' ),
+ VALE_C =SIMP(statut='f',typ='C' ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 CORUS M.CORUS
+
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op= 98,sd_prod=interf_dyna_clas,
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Définir les interfaces d'une structure et leur affecter un type",
+ NUME_DDL =SIMP(statut='o',typ=nume_ddl_sdaster ),
+ INTERFACE =FACT(statut='o',max='**',
+ regles=(ENSEMBLE('NOM','TYPE'),
+# erreur doc U sur la condition qui suit
+ UN_PARMI('NOEUD','GROUP_NO'),),
+ NOM =SIMP(statut='f',typ='TXM' ),
+ TYPE =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO","AUCUN") ),
+ NOEUD =SIMP(statut='f',typ=no,max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**'),
+# DDL_ACTIF =SIMP(statut='f',typ='TXM',max='**'),
+ MASQUE =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ FREQ =SIMP(statut='f',typ='R',defaut= 1.),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
+ fr="Définir une liste d'entiers strictement croissante",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+
+ OPERATION =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)),
+
+
+ # définition d'une liste d'entiers
+ #----------------------------------
+ b_defi =BLOC(condition = "OPERATION == 'DEFI'",
+ regles=(UN_PARMI('VALE','DEBUT'),
+ EXCLUS('VALE','INTERVALLE'),),
+ VALE =SIMP(statut='f',typ='I',max='**'),
+ DEBUT =SIMP(statut='f',typ='I'),
+ INTERVALLE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOMBRE','PAS'),),
+ JUSQU_A =SIMP(statut='o',typ='I'),
+ NOMBRE =SIMP(statut='f',typ='I',val_min=1,),
+ PAS =SIMP(statut='f',typ='I',val_min=1,),
+ ),
+ ),
+
+
+ # extraction d'une liste de nume_ordre dans une sd_resultat :
+ #------------------------------------------------------------
+ b_extr =BLOC(condition = "OPERATION == 'NUME_ORDRE'",
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster),
+ PARAMETRE =SIMP(statut='o',typ='TXM',),
+ INTERV_R =SIMP(statut='o',typ='R',min=2,max=2),
+ ),
+
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 22/09/2009 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 GENIAUT S.GENIAUT
+
+DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op= 28,sd_prod=list_inst,reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Définition de la gestion de la liste d'instants",
+
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour la definition a priori de la liste d'instant
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+ DEFI_LIST =FACT(statut='o',max=1,
+
+ METHODE =SIMP(statut='o',typ='TXM',into=("MANUEL","AUTO",),defaut="MANUEL",max=1,position='global' ),
+
+ b_manuel =BLOC(condition = "METHODE == 'MANUEL' ",fr="Liste d'instants donnée par l'utilisateur",
+ LIST_INST =SIMP(statut='o',typ=listr8_sdaster),
+ ),
+
+ b_auto =BLOC(condition = "METHODE == 'AUTO' ",fr="a compléter",
+ LIST_INST =SIMP(statut='o',typ=listr8_sdaster),
+ PAS_MINI =SIMP(statut='o',typ='R',val_min=0.0,max=1),
+ PAS_MAXI =SIMP(statut='f',typ='R',max=1),
+ NB_PAS_MAXI =SIMP(statut='f',typ='I',max=1),
+ ),
+
+# b_cfl =BLOC(condition = "METHODE == 'CFL' ",fr="Liste d'instants construite sur condition CFL",
+# COEF =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut=0.5),
+# MODELE =SIMP(statut='o',typ=modele_sdaster),
+# ),
+
+ ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour le comportement en cas d'echec (on doit recommencer le meme instant)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+ ECHEC =FACT(statut='d',max='**',
+
+ EVENEMENT =SIMP(statut='f',typ='TXM',into=("DIVERGENCE",),defaut="DIVERGENCE",max=1 ),
+
+ SUBD_METHODE =SIMP(statut='f',typ='TXM',into =("AUCUNE","UNIFORME","EXTRAPOLE"),defaut="UNIFORME",max=1,
+ fr="Méthode de subdivision des pas de temps en cas de diconvergence"),
+
+ b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
+ regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+ SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,max=1,
+ fr="Coefficient multiplicateur de la 1ère subdivision"),
+ SUBD_PAS =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+ fr="Nombre de subdivision d'un pas de temps"),
+ SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,defaut=3,max=1,
+ fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+ SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+ fr="Pas de temps en dessous duquel on ne subdivise plus"),
+ ),
+
+ b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
+ regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+ SUBD_OPTION =SIMP(statut='f',typ='TXM',
+ into =("IGNORE_PREMIERES","GARDE_DERNIERES",),
+ defaut="IGNORE_PREMIERES",
+ fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
+ SUBD_ITER_IGNO =SIMP(statut='f',typ='I',defaut=3,val_min=3,max=1,
+ fr="Les n premières itérations sont ignorées pour l'extrapolation"),
+ SUBD_ITER_FIN =SIMP(statut='f',typ='I',defaut=8,val_min=3,max=1,
+ fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
+ SUBD_PAS =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+ fr="Nombre de subdivision d'un pas de temps en cas divergence"),
+ SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,max=1,
+ fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+ SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+ fr="Pas de temps en dessous duquel on ne subdivise plus"),
+ SUBD_ITER_PLUS =SIMP(statut='f',typ='I',defaut=50,val_min=20,max=1,
+ fr="% itération autorisée en plus"),
+ ),
+
+ ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour le comportement en cas de succes (on a bien converge)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+ b_adap = BLOC(condition="METHODE == 'AUTO'",
+
+ ADAPTATION =FACT(statut='d',max='**',
+
+# 1) parametres de l'evenement declencheur
+# ----------------------------------------
+
+ EVENEMENT =SIMP(statut='f',typ='TXM',into=("SEUIL","TOUT_INST","AUCUN"),defaut="SEUIL",max=1 ),
+
+ b_adap_seuil =BLOC(condition = "EVENEMENT == 'SEUIL' ",fr="seuil de re-decoupe",
+
+# FORMULE_SEUIL =SIMP(statut='f',typ=formule),
+
+# b_adap_seuil_nf = BLOC(condition="FORMULE_SEUIL == None",
+# critere : si on fait NB_INCR_SEUIL fois de suite des increments verifiant le critere
+ regles=(PRESENT_PRESENT('NB_INCR_SEUIL','NOM_PARA',),
+ PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),
+ PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),),
+ NB_INCR_SEUIL =SIMP(statut='f',typ='I',defaut=2),
+ NOM_PARA =SIMP(statut='f',typ='TXM',into=("NB_ITER_NEWTON",),defaut="NB_ITER_NEWTON"),
+ CRIT_COMP =SIMP(statut='f',typ='TXM',into=("LT","GT","LE","GE"),defaut="LE"),
+# b_vale_R =BLOC(condition = "NOM_PARA == 'DP' ",fr="valeur reelle",
+# VALE =SIMP(statut='o',typ='R'),
+# ),
+ b_vale_I =BLOC(condition = "NOM_PARA == 'NB_ITER_NEWTON' ",fr="valeur entiere",
+ VALE_I =SIMP(statut='f',typ='I'),
+ ),
+# ),
+ ),
+
+# 2) parametre du mode de calcul de dt+
+# ----------------------------------------
+
+ MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("FIXE","DELTA_GRANDEUR","ITER_NEWTON","FORMULE"),defaut='FIXE',max=1 ),
+ b_mfixe =BLOC(condition = "MODE_CALCUL_TPLUS == 'FIXE' ",fr="fixe",
+# dans le cas FIXE :(deltaT+) = (deltaT-)x(1+PCENT_AUGM/100)
+ PCENT_AUGM =SIMP(statut='f',typ='R',defaut=100.,val_min=-100.,max=1),
+ ),
+ b_mdelta =BLOC(condition = "MODE_CALCUL_TPLUS == 'DELTA_GRANDEUR' ",fr=" ",
+# dans le cas DELTA_GRANDEUR : (deltaT+) = (deltaT-)x(VALREF/deltaVAL) : l'acceleration est inversement proportionnelle
+# a la variation de la grandeur
+ VALE_REF =SIMP(statut='o',typ='R',max=1),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=("DEPL","VARI_ELGA","SIEF_ELGA",),max=1),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max=1),
+ ),
+ b_mitnew =BLOC(condition = "MODE_CALCUL_TPLUS == 'ITER_NEWTON' ",fr=" ",
+# dans le cas ITER_NEWTON : (deltaT+) = (deltaT-) x sqrt(VALREF/N) : l'acceleration est inversement proportionnelle
+# au nombre d'iter de Newton precedent
+ NB_ITER_NEWTON_REF =SIMP(statut='o',typ='I',max=1),
+ ),
+ b_mformule =BLOC(condition = "MODE_CALCUL_TPLUS == 'FORMULE' ",fr=" ",
+# dans le cas FORMULE
+ regles=UN_PARMI('FORMULE_TPLUS','NOM_SCHEMA'),
+ FORMULE_TPLUS =SIMP(statut='f',typ=formule),
+ NOM_SCHEMA =SIMP(statut='f',typ='TXM',into=("OLIVER",)),
+ ),
+
+# les schemas pre-definis :
+# abaqus :
+# EVENEMENT ='SEUIL'
+# NB_INCR_SEUIL = 2
+# NOM_PARA ='NB_ITER_NEWTON'
+# CRIT_COMP ='LE'
+# VALE_I = 5
+# MODE_CALCUL_TPLUS ='FIXE'
+# PCENT_AUGM = 50.
+# Zebulon 1 :
+# EVENEMENT ='TOUT_INST'
+# MODE_CALCUL_TPLUS ='DELTA_GRANDEUR'
+# VALE_REF = valref
+# NOM_CHAM ='VARI_ELGA'
+# NOM_CMP ='V1'
+# Zebulon 2 :
+# EVENEMENT ='TOUT_INST'
+# MODE_CALCUL_TPLUS ='ITER_NEWTON'
+# NB_ITER_NEWTON_REF= nc
+# Tough2 :
+# EVENEMENT ='SEUIL'
+# NB_INCR_SEUIL = 1
+# NOM_PARA ='NB_ITER_NEWTON'
+# CRIT_COMP ='LE'
+# VALE_I = n
+# MODE_CALCUL_TPLUS ='FIXE'
+# PCENT_AUGM = 100.
+# Oliver :
+# EVENEMENT ='TOUT_INST'
+# MODE_CALCUL_TPLUS ='FORMULE'
+# NOM_SCHEMA ='OLIVER'
+
+ ),
+ ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+) ;
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
+ fr="Définir une liste de réels strictement croissante",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('VALE','DEBUT',),
+ EXCLUS('VALE','INTERVALLE'),
+ ENSEMBLE('DEBUT','INTERVALLE')),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ DEBUT =SIMP(statut='f',typ='R'),
+ INTERVALLE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOMBRE','PAS'),),
+ JUSQU_A =SIMP(statut='o',typ='R'),
+ NOMBRE =SIMP(statut='f',typ='I'),
+ PAS =SIMP(statut='f',typ='R'),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op= 88,sd_prod=maillage_sdaster,
+ fr="Définition d'un nouveau maillage à partir de macro-éléments",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+ DEFI_SUPER_MAILLE =FACT(statut='o',max='**',
+ MACR_ELEM =SIMP(statut='o',typ=(macr_elem_stat,macr_elem_dyna),max='**' ),
+ SUPER_MAILLE =SIMP(statut='f',typ=ma,max='**'),
+ TRAN =SIMP(statut='f',typ='R',max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ b_angl_naut =BLOC(condition = "ANGL_NAUT != None",
+ CENTRE =SIMP(statut='f',typ='R',max=3),
+ ),
+ ),
+ RECO_GLOBAL =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ SUPER_MAILLE =SIMP(statut='f',typ=ma,max='**'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ RECO_SUPER_MAILLE =FACT(statut='f',max='**',
+ SUPER_MAILLE =SIMP(statut='o',typ=ma,max='**'),
+ GROUP_NO =SIMP(statut='o',typ=grno,max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
+ geometrique =BLOC(condition = "OPTION == 'GEOMETRIQUE'",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ ),
+ DEFI_NOEUD =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="Renommage de tous les noeuds" ),
+ NOEUD_INIT =SIMP(statut='f',typ=no,
+ fr="Renommage d un seul noeud"),
+ b_tout =BLOC(condition = "TOUT != None",
+ PREFIXE =SIMP(statut='f',typ='TXM' ),
+ INDEX =SIMP(statut='o',typ='I',max='**'),
+ ),
+ b_noeud_init =BLOC(condition = "NOEUD_INIT != None",
+ SUPER_MAILLE =SIMP(statut='o',typ=ma),
+ NOEUD_FIN =SIMP(statut='o',typ=no),
+ ),
+ ),
+ DEFI_GROUP_NO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),
+ AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
+ ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
+# la regle ancien catalogue AU_MOINS_UN__: ( INDEX , GROUP_NO_FIN ) incoherente avec doc U
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="Création de plusieurs groupes de noeuds" ),
+ SUPER_MAILLE =SIMP(statut='f',typ=ma,
+ fr="Création de plusieurs groupes de noeuds"),
+ GROUP_NO_INIT =SIMP(statut='f',typ=grno,
+ fr="Création d un seul groupe de noeuds"),
+ PREFIXE =SIMP(statut='f',typ='TXM' ),
+ INDEX =SIMP(statut='f',typ='I',max='**'),
+ GROUP_NO_FIN =SIMP(statut='f',typ=grno),
+ ),
+) ;
+#& MODIF COMMANDE DATE 20/04/2010 AUTEUR JAUBERT A.JAUBERT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
+ fr="Définition des paramètres décrivant le comportement d un matériau",
+ reentrant='f',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+ 'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+ 'ELAS_HYPER','ELAS_2NDG',),
+ EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+ EXCLUS('ECRO_LINE','ECRO_LINE_FO','ECRO_PUIS'),
+ EXCLUS('TAHERI','TAHERI_FO'),
+ EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+ EXCLUS('VISC_SINH','VISC_SINH_FO'),
+ PRESENT_PRESENT('ROUSSELIER','TRACTION'),
+ PRESENT_PRESENT('ROUSSELIER_FO','TRACTION'),
+ EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'),
+ EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'),
+ EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
+ EXCLUS('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG',
+ 'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',),
+ EXCLUS('LMARC','LMARC_FO'),
+ EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'),
+ EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+ EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+ PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+ EXCLUS('RCCM','RCCM_FO'),
+ EXCLUS('WEIBULL','WEIBULL_FO'),
+ PRESENT_PRESENT('LAIGLE','ELAS'),
+ PRESENT_PRESENT('LETK','ELAS'),
+ PRESENT_PRESENT('DRUCK_PRAGER','ELAS'),
+ PRESENT_PRESENT('VISC_DRUC_PRAG','ELAS'),
+ PRESENT_PRESENT('ELAS_GONF','ELAS'),
+ PRESENT_PRESENT('HOEK_BROWN','ELAS'),
+ EXCLUS('MAZARS','MAZARS_FO'),
+ PRESENT_PRESENT('JOINT_BA','ELAS'),
+ PRESENT_PRESENT('CABLE','ELAS'),
+ ),
+ MATER =SIMP(statut='f',typ=mater_sdaster),
+#
+# comportement élastique
+#
+ ELAS =FACT(statut='f',
+ E =SIMP(statut='o',typ='R',val_min=0.E+0),
+ NU =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+ RHO =SIMP(statut='f',typ='R'),
+ ALPHA =SIMP(statut='f',typ='R'),
+ AMOR_ALPHA =SIMP(statut='f',typ='R'),
+ AMOR_BETA =SIMP(statut='f',typ='R'),
+ AMOR_HYST =SIMP(statut='f',typ='R'),
+ ),
+ ELAS_FO =FACT(statut='f',
+ regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
+ E =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO =SIMP(statut='f',typ='R'),
+ TEMP_DEF_ALPHA =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.),
+ ALPHA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_ALPHA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_BETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_HYST =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K_DESSIC =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ B_ENDOGE =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FONC_DESORP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_FLUI =FACT(statut='f',
+ E =SIMP(statut='o',typ='R'),
+ NU =SIMP(statut='o',typ='R'),
+ RHO =SIMP(statut='o',typ='R'),
+ PROF_RHO_F_INT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PROF_RHO_F_EXT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_MASS_AJOU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_ISTR =FACT(statut='f',
+ E_L =SIMP(statut='o',typ='R'),
+ E_N =SIMP(statut='o',typ='R'),
+ NU_LT =SIMP(statut='o',typ='R'),
+ NU_LN =SIMP(statut='o',typ='R'),
+ G_LN =SIMP(statut='o',typ='R'),
+ RHO =SIMP(statut='f',typ='R'),
+ ALPHA_L =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ALPHA_N =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ ELAS_ISTR_FO =FACT(statut='f',
+ regles=(
+ PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+ PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+ ),
+ E_L =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ E_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU_LT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU_LN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_LN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO =SIMP(statut='f',typ='R'),
+ TEMP_DEF_ALPHA =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.),
+ ALPHA_L =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALPHA_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_ORTH =FACT(statut='f',
+ E_L =SIMP(statut='o',typ='R'),
+ E_T =SIMP(statut='o',typ='R'),
+ E_N =SIMP(statut='f',typ='R'),
+ NU_LT =SIMP(statut='o',typ='R'),
+ NU_LN =SIMP(statut='f',typ='R'),
+ NU_TN =SIMP(statut='f',typ='R'),
+ G_LT =SIMP(statut='o',typ='R'),
+ G_LN =SIMP(statut='f',typ='R'),
+ G_TN =SIMP(statut='f',typ='R'),
+ RHO =SIMP(statut='f',typ='R'),
+ ALPHA_L =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ALPHA_T =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ALPHA_N =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ XT =SIMP(statut='f',typ='R',defaut= 1. ),
+ XC =SIMP(statut='f',typ='R',defaut= 1. ),
+ YT =SIMP(statut='f',typ='R',defaut= 1. ),
+ YC =SIMP(statut='f',typ='R',defaut= 1. ),
+ S_LT =SIMP(statut='f',typ='R',defaut= 1. ),
+ AMOR_ALPHA =SIMP(statut='f',typ='R'),
+ AMOR_BETA =SIMP(statut='f',typ='R'),
+ AMOR_HYST =SIMP(statut='f',typ='R'),
+ ),
+ ELAS_ORTH_FO =FACT(statut='f',
+ regles=(
+ PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+ PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+ PRESENT_PRESENT('ALPHA_T','TEMP_DEF_ALPHA'),
+ ),
+ E_L =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ E_T =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ E_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU_LT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU_LN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU_TN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_LT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_LN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_TN =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO =SIMP(statut='f',typ='R'),
+ TEMP_DEF_ALPHA =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1. ),
+ ALPHA_L =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALPHA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALPHA_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_ALPHA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_BETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AMOR_HYST =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_HYPER =FACT(statut='f',
+ regles=(UN_PARMI('K','NU'),),
+ C10 =SIMP(statut='f',typ='R',defaut=0.0),
+ C01 =SIMP(statut='o',typ='R'),
+ C20 =SIMP(statut='f',typ='R',defaut=0.0),
+ K =SIMP(statut='f',typ='R'),
+ RHO =SIMP(statut='f',typ='R',defaut=0.0),
+ NU =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+ ),
+ ELAS_COQUE =FACT(statut='f',
+ regles=(EXCLUS('MEMB_L','M_LLLL',),
+ PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+ 'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+ PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+ 'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL',
+ 'MF_LLTT','MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ',
+ 'MC_LLTZ','MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ',
+ 'FC_LLTZ','FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ',
+ 'C_LZTZ','C_TZTZ'),),
+ MEMB_L =SIMP(statut='f',typ='R'),
+ MEMB_LT =SIMP(statut='f',typ='R'),
+ MEMB_T =SIMP(statut='f',typ='R'),
+ MEMB_G_LT =SIMP(statut='f',typ='R'),
+ FLEX_L =SIMP(statut='f',typ='R'),
+ FLEX_LT =SIMP(statut='f',typ='R'),
+ FLEX_T =SIMP(statut='f',typ='R'),
+ FLEX_G_LT =SIMP(statut='f',typ='R'),
+ CISA_L =SIMP(statut='f',typ='R'),
+ CISA_T =SIMP(statut='f',typ='R'),
+ M_LLLL =SIMP(statut='f',typ='R'),
+ M_LLTT =SIMP(statut='f',typ='R'),
+ M_LLLT =SIMP(statut='f',typ='R'),
+ M_TTTT =SIMP(statut='f',typ='R'),
+ M_TTLT =SIMP(statut='f',typ='R'),
+ M_LTLT =SIMP(statut='f',typ='R'),
+ F_LLLL =SIMP(statut='f',typ='R'),
+ F_LLTT =SIMP(statut='f',typ='R'),
+ F_LLLT =SIMP(statut='f',typ='R'),
+ F_TTTT =SIMP(statut='f',typ='R'),
+ F_TTLT =SIMP(statut='f',typ='R'),
+ F_LTLT =SIMP(statut='f',typ='R'),
+ MF_LLLL =SIMP(statut='f',typ='R'),
+ MF_LLTT =SIMP(statut='f',typ='R'),
+ MF_LLLT =SIMP(statut='f',typ='R'),
+ MF_TTTT =SIMP(statut='f',typ='R'),
+ MF_TTLT =SIMP(statut='f',typ='R'),
+ MF_LTLT =SIMP(statut='f',typ='R'),
+ MC_LLLZ =SIMP(statut='f',typ='R'),
+ MC_LLTZ =SIMP(statut='f',typ='R'),
+ MC_TTLZ =SIMP(statut='f',typ='R'),
+ MC_TTTZ =SIMP(statut='f',typ='R'),
+ MC_LTLZ =SIMP(statut='f',typ='R'),
+ MC_LTTZ =SIMP(statut='f',typ='R'),
+ FC_LLLZ =SIMP(statut='f',typ='R'),
+ FC_LLTZ =SIMP(statut='f',typ='R'),
+ FC_TTLZ =SIMP(statut='f',typ='R'),
+ FC_TTTZ =SIMP(statut='f',typ='R'),
+ FC_LTLZ =SIMP(statut='f',typ='R'),
+ FC_LTTZ =SIMP(statut='f',typ='R'),
+ C_LZLZ =SIMP(statut='f',typ='R'),
+ C_LZTZ =SIMP(statut='f',typ='R'),
+ C_TZTZ =SIMP(statut='f',typ='R'),
+ RHO =SIMP(statut='f',typ='R'),
+ ALPHA =SIMP(statut='f',typ='R'),
+ ),
+ ELAS_COQUE_FO =FACT(statut='f',
+ regles=(EXCLUS('MEMB_L','M_LLLL',),
+ PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+ 'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+ PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+ 'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL','MF_LLTT',
+ 'MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ','MC_LLTZ',
+ 'MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ','FC_LLTZ',
+ 'FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ','C_LZTZ','C_TZTZ'),),
+ MEMB_L =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MEMB_LT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MEMB_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MEMB_G_LT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FLEX_L =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FLEX_LT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FLEX_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FLEX_G_LT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CISA_L =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CISA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_LLLL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_LLTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_LLLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_TTTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_TTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_LTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_LLLL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_LLTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_LLLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_TTTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_TTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_LTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_LLLL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_LLTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_LLLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_TTTT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_TTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MF_LTLT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_LLLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_LLTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_TTLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_TTTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_LTLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MC_LTTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_LLLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_LLTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_TTLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_TTTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_LTLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FC_LTTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_LZLZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_LZTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_TZTZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO =SIMP(statut='f',typ='R'),
+ ALPHA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_2NDG =FACT(statut='f',
+ A1 =SIMP(statut='o',typ='R'),
+ A2 =SIMP(statut='f',typ='R'),
+ A3 =SIMP(statut='f',typ='R'),
+ A4 =SIMP(statut='f',typ='R'),
+ A5 =SIMP(statut='f',typ='R'),
+ ),
+ CABLE =FACT(statut='f',
+ EC_SUR_E =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+ ),
+#
+# comportement mécanique non linéaire
+#
+ TRACTION =FACT(statut='f',
+ SIGM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ECRO_LINE =FACT(statut='f',
+ D_SIGM_EPSI =SIMP(statut='o',typ='R',),
+ SY =SIMP(statut='o',typ='R',),
+ ),
+ ECRO_LINE_FO =FACT(statut='f',
+ D_SIGM_EPSI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ECRO_PUIS =FACT(statut='f',
+ SY =SIMP(statut='o',typ='R',),
+ A_PUIS =SIMP(statut='o',typ='R',val_min=0.0),
+ N_PUIS =SIMP(statut='o',typ='R',val_min=1.E-6),
+ ),
+ ECRO_PUIS_FO =FACT(statut='f',
+ SY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_PUIS =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N_PUIS =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ BETON_ECRO_LINE =FACT(statut='f',
+ D_SIGM_EPSI =SIMP(statut='o',typ='R'),
+ SYT =SIMP(statut='o',typ='R'),
+ SYC =SIMP(statut='f',typ='R'),
+ ),
+ BETON_REGLE_PR =FACT(statut='f',
+ D_SIGM_EPSI =SIMP(statut='o',typ='R'),
+ SYT =SIMP(statut='o',typ='R'),
+ SYC =SIMP(statut='f',typ='R'),
+ EPSC =SIMP(statut='f',typ='R'),
+ N =SIMP(statut='f',typ='R'),
+ ),
+ ENDO_ORTH_BETON =FACT(statut='f',
+ ALPHA =SIMP(statut='f',typ='R',defaut=0.9),
+ K0 =SIMP(statut='o',typ='R'),
+ K1 =SIMP(statut='o',typ='R'),
+ K2 =SIMP(statut='f',typ='R',defaut=7.E-4),
+ ECROB =SIMP(statut='o',typ='R'),
+ ECROD =SIMP(statut='o',typ='R'),
+ ),
+ PRAGER =FACT(statut='f',
+ C =SIMP(statut='o',typ='R'),
+ ),
+ PRAGER_FO =FACT(statut='f',
+ C =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ECRO_FLEJOU =FACT(statut='f',
+ EP =SIMP(statut='o',typ='R'),
+ SY =SIMP(statut='o',typ='R'),
+ SU =SIMP(statut='o',typ='R'),
+ PUISS =SIMP(statut='o',typ='R'),
+ ),
+ TAHERI =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ='R'),
+ ALPHA =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ A =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ C1 =SIMP(statut='o',typ='R'),
+ C_INF =SIMP(statut='o',typ='R'),
+ S =SIMP(statut='o',typ='R'),
+ ),
+ TAHERI_FO =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALPHA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_INF =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ S =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ROUSSELIER =FACT(statut='f',
+ D =SIMP(statut='o',typ='R'),
+ SIGM_1 =SIMP(statut='o',typ='R'),
+ PORO_INIT =SIMP(statut='o',typ='R'),
+ PORO_CRIT =SIMP(statut='f',typ='R',defaut= 1. ),
+ PORO_ACCE =SIMP(statut='f',typ='R',defaut= 1. ),
+ PORO_LIMI =SIMP(statut='f',typ='R',defaut= 0.999 ),
+ D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+ AN =SIMP(statut='f',typ='R',defaut= 0. ),
+ DP_MAXI =SIMP(statut='f',typ='R',defaut= 0.1),
+ BETA =SIMP(statut='f',typ='R',defaut=0.85),
+ ),
+ ROUSSELIER_FO =FACT(statut='f',
+ D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PORO_INIT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PORO_CRIT =SIMP(statut='f',typ='R',defaut= 1. ),
+ PORO_ACCE =SIMP(statut='f',typ='R',defaut= 1. ),
+ PORO_LIMI =SIMP(statut='f',typ='R',defaut= 0.999 ),
+ D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+ AN =SIMP(statut='f',typ='R',defaut= 0. ),
+ DP_MAXI =SIMP(statut='f',typ='R',defaut= 0.1),
+ BETA =SIMP(statut='f',typ='R',defaut=0.85),
+ ),
+ VISC_SINH =FACT(statut='f',
+ SIGM_0 =SIMP(statut='o',typ='R'),
+ EPSI_0 =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ ),
+ VISC_SINH_FO =FACT(statut='f',
+ SIGM_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EPSI_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ CIN1_CHAB =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ='R'),
+ R_I =SIMP(statut='f',typ='R'),
+ B =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ C_I =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ W =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ G_0 =SIMP(statut='o',typ='R'),
+ A_I =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ ),
+ CIN1_CHAB_FO =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ W =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ CIN2_CHAB =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ='R'),
+ R_I =SIMP(statut='f',typ='R'),
+ B =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ C1_I =SIMP(statut='o',typ='R'),
+ C2_I =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='f',typ='R',defaut= 1.),
+ W =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ G1_0 =SIMP(statut='o',typ='R'),
+ G2_0 =SIMP(statut='o',typ='R'),
+ A_I =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ ),
+ CIN2_CHAB_FO =FACT(statut='f',
+ R_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C1_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C2_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ W =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G1_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G2_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ MEMO_ECRO =FACT(statut='f',
+ MU =SIMP(statut='o',typ='R'),
+ Q_M =SIMP(statut='o',typ='R'),
+ Q_0 =SIMP(statut='o',typ='R'),
+ ETA =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+ ),
+ MEMO_ECRO_FO =FACT(statut='f',
+ MU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ETA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ VISCOCHAB =FACT(statut='f',
+ K_0 =SIMP(statut='o',typ='R'),
+ A_K =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ A_R =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ K =SIMP(statut='o',typ='R'),
+ N =SIMP(statut='o',typ='R'),
+ ALP =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ B =SIMP(statut='f',typ='R'),
+ M_R =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ G_R =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ MU =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+ Q_M =SIMP(statut='o',typ='R'),
+ Q_0 =SIMP(statut='o',typ='R'),
+ QR_0 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ETA =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+ C1 =SIMP(statut='o',typ='R'),
+ M_1 =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ D1 =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ G_X1 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ G1_0 =SIMP(statut='o',typ='R'),
+ C2 =SIMP(statut='o',typ='R'),
+ M_2 =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ D2 =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ G_X2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ G2_0 =SIMP(statut='o',typ='R'),
+ A_I =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ ),
+ VISCOCHAB_FO =FACT(statut='f',
+ K_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_R =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_R =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_R =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ QR_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ETA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_X1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G1_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C2 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_2 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D2 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G_X2 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ G2_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ LEMAITRE =FACT(statut='f',
+ N =SIMP(statut='o',typ='R'),
+ UN_SUR_K =SIMP(statut='o',typ='R'),
+ UN_SUR_M =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ LEMAITRE_IRRA =FACT(statut='f',
+ N =SIMP(statut='o',typ='R'),
+ UN_SUR_K =SIMP(statut='o',typ='R'),
+ UN_SUR_M =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ QSR_K =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ BETA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PHI_ZERO =SIMP(statut='f',typ='R',defaut= 1.E+20),
+ L =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GRAN_A =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GRAN_B =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GRAN_S =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ LMARC_IRRA =FACT(statut='f',
+ DE_0 =SIMP(statut='o',typ='R'),
+ R_0 =SIMP(statut='o',typ='R'),
+ N =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='o',typ='R'),
+ Y_I =SIMP(statut='o',typ='R'),
+ Y_0 =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ A_0 =SIMP(statut='o',typ='R'),
+ RM =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ P =SIMP(statut='o',typ='R'),
+ P1 =SIMP(statut='o',typ='R'),
+ P2 =SIMP(statut='o',typ='R'),
+ M11 =SIMP(statut='o',typ='R'),
+ M22 =SIMP(statut='o',typ='R'),
+ M33 =SIMP(statut='o',typ='R'),
+ M66 =SIMP(statut='o',typ='R'),
+ N11 =SIMP(statut='o',typ='R'),
+ N22 =SIMP(statut='o',typ='R'),
+ N33 =SIMP(statut='o',typ='R'),
+ N66 =SIMP(statut='o',typ='R'),
+ Q11 =SIMP(statut='o',typ='R'),
+ Q22 =SIMP(statut='o',typ='R'),
+ Q33 =SIMP(statut='o',typ='R'),
+ Q66 =SIMP(statut='o',typ='R'),
+ R11 =SIMP(statut='o',typ='R'),
+ R22 =SIMP(statut='o',typ='R'),
+ R33 =SIMP(statut='o',typ='R'),
+ R66 =SIMP(statut='o',typ='R'),
+ GRAN_A =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GRAN_B =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GRAN_S =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ VISC_IRRA_LOG =FACT(statut='f',
+ A =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+ B =SIMP(statut='f',typ='R',defaut= 0.01159),
+ CSTE_TPS =SIMP(statut='f',typ='R',defaut= 0.3540),
+ ENER_ACT =SIMP(statut='f',typ='R',defaut= 5000.),
+ FLUX_PHI =SIMP(statut='o',typ='R',),
+ ),
+ GRAN_IRRA_LOG =FACT(statut='f',
+ A =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+ B =SIMP(statut='f',typ='R',defaut= 0.01159),
+ CSTE_TPS =SIMP(statut='f',typ='R',defaut= 0.3540),
+ ENER_ACT =SIMP(statut='f',typ='R',defaut= 5000.),
+ FLUX_PHI =SIMP(statut='o',typ='R',),
+ GRAN_A =SIMP(statut='f',typ='R',defaut= 0.E+0),
+ GRAN_B =SIMP(statut='f',typ='R',defaut= 0.E+0),
+ GRAN_S =SIMP(statut='f',typ='R',defaut= 0.E+0),
+ ),
+ LEMA_SEUIL =FACT(statut='f',
+ A =SIMP(statut='o',typ='R',),
+ S =SIMP(statut='o',typ='R',),
+ ),
+ LEMA_SEUIL_FO=FACT(statut='f',
+ A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ S =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ IRRAD3M=FACT(statut='f',
+ R02 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EPSI_U =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AI0 =SIMP(statut='o',typ='R',val_min=0.0),
+ ZETA_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ETAI_S =SIMP(statut='o',typ='R',val_min=0.0),
+ RG0 =SIMP(statut='o',typ='R',val_min=0.0),
+ ALPHA =SIMP(statut='o',typ='R',val_min=0.0),
+ PHI0 =SIMP(statut='o',typ='R',val_min=0.0),
+ KAPPA =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.8,val_max=1.0),
+ ZETA_G =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TOLER_ET =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.15 ),
+ ),
+ LEMAITRE_FO =FACT(statut='f',
+ N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ UN_SUR_K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ UN_SUR_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ LMARC =FACT(statut='f',
+ DE_0 =SIMP(statut='o',typ='R'),
+ R_0 =SIMP(statut='o',typ='R'),
+ N =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='o',typ='R'),
+ Y_I =SIMP(statut='o',typ='R'),
+ Y_0 =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ A_0 =SIMP(statut='o',typ='R'),
+ RM =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ P =SIMP(statut='o',typ='R'),
+ P1 =SIMP(statut='o',typ='R'),
+ P2 =SIMP(statut='o',typ='R'),
+ M11 =SIMP(statut='o',typ='R'),
+ M22 =SIMP(statut='o',typ='R'),
+ M33 =SIMP(statut='o',typ='R'),
+ M66 =SIMP(statut='o',typ='R'),
+ N11 =SIMP(statut='o',typ='R'),
+ N22 =SIMP(statut='o',typ='R'),
+ N33 =SIMP(statut='o',typ='R'),
+ N66 =SIMP(statut='o',typ='R'),
+ Q11 =SIMP(statut='o',typ='R'),
+ Q22 =SIMP(statut='o',typ='R'),
+ Q33 =SIMP(statut='o',typ='R'),
+ Q66 =SIMP(statut='o',typ='R'),
+ R11 =SIMP(statut='o',typ='R'),
+ R22 =SIMP(statut='o',typ='R'),
+ R33 =SIMP(statut='o',typ='R'),
+ R66 =SIMP(statut='o',typ='R'),
+ ),
+ LMARC_FO =FACT(statut='f',
+ DE_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Y_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Y_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ P =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ P1 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ P2 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M11 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M22 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M33 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M66 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N11 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N22 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N33 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N66 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q11 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q22 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q33 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ Q66 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R11 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R22 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R33 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R66 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_LEMA_ANI =FACT(statut='f',
+ F1_A =SIMP(statut='o',typ='R'),
+ F2_A =SIMP(statut='o',typ='R'),
+ C_A =SIMP(statut='o',typ='R'),
+ F1_M =SIMP(statut='o',typ='R'),
+ F2_M =SIMP(statut='o',typ='R'),
+ C_M =SIMP(statut='o',typ='R'),
+ F1_N =SIMP(statut='o',typ='R'),
+ F2_N =SIMP(statut='o',typ='R'),
+ C_N =SIMP(statut='o',typ='R'),
+ F1_Q =SIMP(statut='o',typ='R'),
+ F2_Q =SIMP(statut='o',typ='R'),
+ C_Q =SIMP(statut='o',typ='R'),
+ F_MRR_RR =SIMP(statut='o',typ='R'),
+ C_MRR_RR =SIMP(statut='o',typ='R'),
+ F_MTT_TT =SIMP(statut='o',typ='R'),
+ C_MTT_TT =SIMP(statut='o',typ='R'),
+ F_MZZ_ZZ =SIMP(statut='o',typ='R'),
+ C_MZZ_ZZ =SIMP(statut='o',typ='R'),
+ F_MRT_RT =SIMP(statut='o',typ='R'),
+ C_MRT_RT =SIMP(statut='o',typ='R'),
+ F_MRZ_RZ =SIMP(statut='o',typ='R'),
+ C_MRZ_RZ =SIMP(statut='o',typ='R'),
+ F_MTZ_TZ =SIMP(statut='o',typ='R'),
+ C_MTZ_TZ =SIMP(statut='o',typ='R'),
+ ),
+ META_LEMA_ANI_FO =FACT(statut='f',
+ F1_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MRR_RR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MRR_RR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MTT_TT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MTT_TT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MZZ_ZZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MZZ_ZZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MRT_RT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MRT_RT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MRZ_RZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MRZ_RZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_MTZ_TZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_MTZ_TZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ VMIS_POUTRE =FACT(statut='f',
+ NP =SIMP(statut='o',typ='R'),
+ MEY =SIMP(statut='o',typ='R'),
+ MPY =SIMP(statut='o',typ='R'),
+ CAY =SIMP(statut='o',typ='R'),
+ CBY =SIMP(statut='o',typ='R'),
+ MEZ =SIMP(statut='o',typ='R'),
+ MPZ =SIMP(statut='o',typ='R'),
+ CAZ =SIMP(statut='o',typ='R'),
+ CBZ =SIMP(statut='o',typ='R'),
+ MPX =SIMP(statut='o',typ='R'),
+ ),
+ VMIS_POUTRE_FO =FACT(statut='f',
+ NP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MEY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MPY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CAY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CBY =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MEZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MPZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CAZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CBZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MPX =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ARME =FACT(statut='f',
+ KYE =SIMP(statut='o',typ='R'),
+ DLE =SIMP(statut='o',typ='R'),
+ KYP =SIMP(statut='o',typ='R'),
+ DLP =SIMP(statut='o',typ='R'),
+ KYG =SIMP(statut='o',typ='R'),
+ ),
+ ASSE_CORN =FACT(statut='f',
+ NU_1 =SIMP(statut='o',typ='R'),
+ MU_1 =SIMP(statut='o',typ='R'),
+ DXU_1 =SIMP(statut='o',typ='R'),
+ DRYU_1 =SIMP(statut='o',typ='R'),
+ C_1 =SIMP(statut='o',typ='R'),
+ NU_2 =SIMP(statut='o',typ='R'),
+ MU_2 =SIMP(statut='o',typ='R'),
+ DXU_2 =SIMP(statut='o',typ='R'),
+ DRYU_2 =SIMP(statut='o',typ='R'),
+ C_2 =SIMP(statut='o',typ='R'),
+ KY =SIMP(statut='o',typ='R'),
+ KZ =SIMP(statut='o',typ='R'),
+ KRX =SIMP(statut='o',typ='R'),
+ KRZ =SIMP(statut='o',typ='R'),
+ R_P0 =SIMP(statut='f',typ='R',defaut= 1.E+4 ),
+ ),
+ DIS_CONTACT =FACT(statut='f',
+ RIGI_NOR =SIMP(statut='f',typ='R' ),
+ RIGI_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ AMOR_NOR =SIMP(statut='f',typ='R' ),
+ AMOR_TAN =SIMP(statut='f',typ='R' ),
+ COULOMB =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ DIST_1 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ DIST_2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ JEU =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ ENDO_SCALAIRE =FACT(statut='f',
+ GAMMA =SIMP(statut='o',typ='R',),
+ SY =SIMP(statut='o',typ='R',),
+ COEF_RIGI_MINI =SIMP(statut='f',typ='R',defaut=1.E-5),
+ DD_MAXI =SIMP(statut='f',typ='R',defaut= 1.),
+ ),
+ DIS_GRICRA =FACT(statut='f',
+ KN_AX =SIMP(statut='o',typ='R' ),
+ KT_AX =SIMP(statut='o',typ='R' ),
+ COUL_AX =SIMP(statut='o',typ='R' ),
+ F_SER =SIMP(statut='f',typ='R' ),
+ F_SER_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ET_AX =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+ ET_ROT =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+ ANG1 =SIMP(statut='f',typ='R' ),
+ ANG2 =SIMP(statut='f',typ='R' ),
+ PEN1 =SIMP(statut='f',typ='R' ),
+ PEN2 =SIMP(statut='f',typ='R' ),
+ PEN3 =SIMP(statut='f',typ='R' ),
+ ANG1_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ANG2_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PEN1_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PEN2_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PEN3_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ regles=(EXCLUS('ANG1','ANG1_FO',),
+ UN_PARMI('ANG1','ANG1_FO',),
+ EXCLUS('F_SER','F_SER_FO',),
+ UN_PARMI('F_SER','F_SER_FO',),
+ PRESENT_PRESENT('ANG1','ANG2','PEN1','PEN2','PEN3',),
+ PRESENT_PRESENT('ANG1_FO','ANG2_FO','PEN1_FO','PEN2_FO','PEN3_FO',),
+ ),
+ ),
+ NADAI_B =FACT(statut='f',
+ F_C =SIMP(statut='o',typ='R',val_min=0.E+0),
+ F_T =SIMP(statut='o',typ='R',val_min=0.E+0),
+ CRIT_E_C =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+ EPSP_P_C =SIMP(statut='o',typ='R',val_min=0.E+0),
+ EPSP_R_C =SIMP(statut='o',typ='R',val_min=0.E+0),
+ EPSI_R_T =SIMP(statut='o',typ='R',val_min=0.E+0),
+ FAC_T_C =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+ ),
+ BETON_DOUBLE_DP =FACT(statut='f',
+ F_C =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_T =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_BIAX =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ENER_COMP_RUPT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ENER_TRAC_RUPT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_ELAS_COMP =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=100.E+0),
+ LONG_CARA =SIMP(statut='f',typ='R',val_min=0.E+0),
+ ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
+ ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
+ ),
+ LABORD_1D=FACT(statut='f',min=0 ,
+ Y01 =SIMP(statut='o',typ='R'),
+ Y02 =SIMP(statut='o',typ='R'),
+ A1 =SIMP(statut='o',typ='R'),
+ A2 =SIMP(statut='o',typ='R'),
+ B1 =SIMP(statut='o',typ='R'),
+ B2 =SIMP(statut='o',typ='R'),
+ BETA1 =SIMP(statut='o',typ='R'),
+ BETA2 =SIMP(statut='o',typ='R'),
+ SIGF =SIMP(statut='o',typ='R'),
+ ),
+ MAZARS=FACT(statut='f',min=0 ,
+ EPSD0 =SIMP(statut='o',typ='R'),
+ BETA =SIMP(statut='o',typ='R'),
+ AC =SIMP(statut='o',typ='R'),
+ BC =SIMP(statut='o',typ='R'),
+ AT =SIMP(statut='o',typ='R'),
+ BT =SIMP(statut='o',typ='R'),
+ CHI =SIMP(statut='f',typ='R',val_min=0.0E+0,val_max=1.0E+0),
+ ),
+ MAZARS_FO=FACT(statut='f',min=0 ,
+ EPSD0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BETA =SIMP(statut='o',typ='R'),
+ AC =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BC =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHI =SIMP(statut='f',typ='R'),
+ ),
+ JOINT_BA=FACT(statut='f',min=0 ,max=1,
+ HPEN =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=0.E+0),
+ GTT =SIMP(statut='o',typ='R',val_min=0.E+0),
+ GAMD0 =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E-1),
+ AD1 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ BD1 =SIMP(statut='o',typ='R',defaut= 5.E-1,val_min=1.E-1),
+ GAMD2 =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+ AD2 =SIMP(statut='o',typ='R',val_min=0.E+0),
+ BD2 =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+ VIFROT =SIMP(statut='o',typ='R',val_min=0.E+0),
+ FA =SIMP(statut='o',typ='R',val_min=0.E+0),
+ FC =SIMP(statut='o',typ='R',val_min=0.E+0),
+ EPSTR0 =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+ ADN =SIMP(statut='o',typ='R',val_min=0.E+0),
+ BDN =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+ ),
+ VENDOCHAB =FACT(statut='f',
+ S =SIMP(statut='o',typ='R',defaut= 0.E+0),
+ ALPHA_D =SIMP(statut='o',typ='R',defaut= 0.E+0),
+ BETA_D =SIMP(statut='o',typ='R',defaut= 0.E+0),
+ N =SIMP(statut='o',typ='R'),
+ UN_SUR_M =SIMP(statut='o',typ='R',defaut= 0.E+0),
+ UN_SUR_K =SIMP(statut='o',typ='R'),
+ R_D =SIMP(statut='o',typ='R'),
+ A_D =SIMP(statut='o',typ='R'),
+ K_D =SIMP(statut='o',typ='R'),
+ ),
+ VENDOCHAB_FO =FACT(statut='f',
+ S =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ALPHA_D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BETA_D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ UN_SUR_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ UN_SUR_K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ K_D =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ PINTO_MENEGOTTO =FACT(statut='f',
+ SY =SIMP(statut='o',typ='R'),
+ EPSI_ULTM =SIMP(statut='o',typ='R'),
+ SIGM_ULTM =SIMP(statut='o',typ='R'),
+ ELAN =SIMP(statut='f',typ='R',defaut= 4. ),
+ EPSP_HARD =SIMP(statut='o',typ='R'),
+ R_PM =SIMP(statut='f',typ='R',defaut= 20. ),
+ EP_SUR_E =SIMP(statut='f',typ='R'),
+ A1_PM =SIMP(statut='f',typ='R',defaut= 18.5 ),
+ A2_PM =SIMP(statut='f',typ='R',defaut= 0.15 ),
+ A6_PM =SIMP(statut='f',typ='R',defaut= 620. ),
+ C_PM =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ A_PM =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
+ ),
+ BPEL_BETON =FACT(statut='f',
+ PERT_FLUA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PERT_RETR =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ BPEL_ACIER =FACT(statut='f',
+ regles=(PRESENT_PRESENT('RELAX_1000','F_PRG',),
+ PRESENT_PRESENT('MU0_RELAX','F_PRG',),),
+ RELAX_1000 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ MU0_RELAX =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ F_PRG =SIMP(statut='f',typ='R'),
+ FROT_COURB =SIMP(statut='f',typ='R',defaut=0.E+0),
+ FROT_LINE =SIMP(statut='f',typ='R',defaut=0.E+0),
+ ),
+ CAM_CLAY =FACT(statut='f',
+ MU =SIMP(statut='o',typ='R'),
+ PORO =SIMP(statut='o',typ='R'),
+ LAMBDA =SIMP(statut='o',typ='R'),
+ KAPA =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ PRES_CRIT =SIMP(statut='o',typ='R'),
+ KCAM =SIMP(statut='f',typ='R',val_min=0.E+0),
+ PTRAC =SIMP(statut='f',typ='R',val_max=0.E+0),
+ regles=(PRESENT_PRESENT('PTRAC','KCAM',),),
+ ),
+ BARCELONE =FACT(statut='f',
+ MU =SIMP(statut='o',typ='R'),
+ PORO =SIMP(statut='o',typ='R'),
+ LAMBDA =SIMP(statut='o',typ='R'),
+ KAPA =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ PRES_CRIT =SIMP(statut='o',typ='R'),
+ PA =SIMP(statut='o',typ='R'),
+ R =SIMP(statut='o',typ='R'),
+ BETA =SIMP(statut='o',typ='R'),
+ KC =SIMP(statut='o',typ='R'),
+ PC0_INIT =SIMP(statut='o',typ='R'),
+ KAPAS =SIMP(statut='o',typ='R'),
+ LAMBDAS =SIMP(statut='o',typ='R'),
+ ALPHAB =SIMP(statut='f',typ='R'),
+ ),
+ CJS =FACT(statut='f',
+ BETA_CJS =SIMP(statut='o',typ='R'),
+ RM =SIMP(statut='o',typ='R'),
+ N_CJS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ KP =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ RC =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ A_CJS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ B_CJS =SIMP(statut='f',typ='R',defaut= 1.0E+25 ),
+ C_CJS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ GAMMA_CJS =SIMP(statut='o',typ='R'),
+ MU_CJS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PCO =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PA =SIMP(statut='o',typ='R'),
+ Q_INIT =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ R_INIT =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ HUJEUX =FACT(statut='f',
+ N =SIMP(statut='o',typ='R' ),
+ BETA =SIMP(statut='o',typ='R' ),
+ B =SIMP(statut='o',typ='R' ),
+ D =SIMP(statut='o',typ='R' ),
+ PHI =SIMP(statut='o',typ='R' ),
+ ANGDIL =SIMP(statut='o',typ='R' ),
+ PCO =SIMP(statut='o',typ='R' ),
+ PREF =SIMP(statut='o',typ='R' ),
+ ACYC =SIMP(statut='o',typ='R' ),
+ AMON =SIMP(statut='o',typ='R' ),
+ CCYC =SIMP(statut='o',typ='R' ),
+ CMON =SIMP(statut='o',typ='R' ),
+ RD_ELA =SIMP(statut='o',typ='R' ),
+ RI_ELA =SIMP(statut='o',typ='R' ),
+ RHYS =SIMP(statut='o',typ='R' ),
+ RMOB =SIMP(statut='o',typ='R' ),
+ XM =SIMP(statut='o',typ='R' ),
+ RD_CYC =SIMP(statut='o',typ='R' ),
+ RI_CYC =SIMP(statut='o',typ='R' ),
+ DILA =SIMP(statut='o',typ='R' ),
+ PTRAC =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ ECRO_ASYM_LINE =FACT(statut='f',
+ DC_SIGM_EPSI =SIMP(statut='o',typ='R'),
+ SY_C =SIMP(statut='o',typ='R'),
+ DT_SIGM_EPSI =SIMP(statut='o',typ='R'),
+ SY_T =SIMP(statut='o',typ='R'),
+ ),
+ GRANGER_FP =FACT(statut='f',
+ J1 =SIMP(statut='f',typ='R'),
+ J2 =SIMP(statut='f',typ='R'),
+ J3 =SIMP(statut='f',typ='R'),
+ J4 =SIMP(statut='f',typ='R'),
+ J5 =SIMP(statut='f',typ='R'),
+ J6 =SIMP(statut='f',typ='R'),
+ J7 =SIMP(statut='f',typ='R'),
+ J8 =SIMP(statut='f',typ='R'),
+ TAUX_1 =SIMP(statut='f',typ='R'),
+ TAUX_2 =SIMP(statut='f',typ='R'),
+ TAUX_3 =SIMP(statut='f',typ='R'),
+ TAUX_4 =SIMP(statut='f',typ='R'),
+ TAUX_5 =SIMP(statut='f',typ='R'),
+ TAUX_6 =SIMP(statut='f',typ='R'),
+ TAUX_7 =SIMP(statut='f',typ='R'),
+ TAUX_8 =SIMP(statut='f',typ='R'),
+ QSR_K =SIMP(statut='f',typ='R'),
+ ),
+ GRANGER_FP_INDT =FACT(statut='f',
+ J1 =SIMP(statut='f',typ='R'),
+ J2 =SIMP(statut='f',typ='R'),
+ J3 =SIMP(statut='f',typ='R'),
+ J4 =SIMP(statut='f',typ='R'),
+ J5 =SIMP(statut='f',typ='R'),
+ J6 =SIMP(statut='f',typ='R'),
+ J7 =SIMP(statut='f',typ='R'),
+ J8 =SIMP(statut='f',typ='R'),
+ TAUX_1 =SIMP(statut='f',typ='R'),
+ TAUX_2 =SIMP(statut='f',typ='R'),
+ TAUX_3 =SIMP(statut='f',typ='R'),
+ TAUX_4 =SIMP(statut='f',typ='R'),
+ TAUX_5 =SIMP(statut='f',typ='R'),
+ TAUX_6 =SIMP(statut='f',typ='R'),
+ TAUX_7 =SIMP(statut='f',typ='R'),
+ TAUX_8 =SIMP(statut='f',typ='R'),
+ ),
+ V_GRANGER_FP =FACT(statut='f',
+ QSR_VEIL =SIMP(statut='f',typ='R'),
+ FONC_V =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ BETON_UMLV_FP =FACT(statut='f',min=0 ,
+ K_RS =SIMP(statut='o',typ='R'),
+ ETA_RS =SIMP(statut='o',typ='R'),
+ K_IS =SIMP(statut='o',typ='R'),
+ ETA_IS =SIMP(statut='o',typ='R'),
+ K_RD =SIMP(statut='o',typ='R'),
+ ETA_RD =SIMP(statut='o',typ='R'),
+ ETA_ID =SIMP(statut='o',typ='R'),
+ ETA_FD =SIMP(statut='f',typ='R'),
+ ),
+ BETON_RAG =FACT(statut='f',
+ ACTIV_FL =SIMP(statut='f',typ='R',defaut=1.0 ),
+ K_RS =SIMP(statut='o',typ='R'),
+ K_IS =SIMP(statut='o',typ='R'),
+ ETA_RS =SIMP(statut='o',typ='R'),
+ ETA_IS =SIMP(statut='o',typ='R'),
+ K_RD =SIMP(statut='o',typ='R'),
+ K_ID =SIMP(statut='o',typ='R'),
+ ETA_RD =SIMP(statut='o',typ='R'),
+ ETA_ID =SIMP(statut='o',typ='R'),
+ EPS_0 =SIMP(statut='o',typ='R'),
+ TAU_0 =SIMP(statut='o',typ='R'),
+ EPS_FL_L =SIMP(statut='f',typ='R',defaut=3.0e-2 ),
+ ACTIV_LO =SIMP(statut='f',typ='R',defaut=1.0 ),
+ F_C =SIMP(statut='o',typ='R'),
+ F_T =SIMP(statut='o',typ='R'),
+ ANG_CRIT =SIMP(statut='f',typ='R',defaut=8.594367 ),
+ EPS_COMP =SIMP(statut='o',typ='R'),
+ EPS_TRAC =SIMP(statut='o',typ='R'),
+ LC_COMP =SIMP(statut='o',typ='R',defaut=1.0 ),
+ LC_TRAC =SIMP(statut='o',typ='R',defaut=1.0 ),
+ HYD_PRES =SIMP(statut='f',typ='R',defaut=0. ),
+ A_VAN_GE =SIMP(statut='f',typ='R',defaut=0.0 ),
+ B_VAN_GE =SIMP(statut='f',typ='R',defaut=1.9 ),
+ BIOT_EAU =SIMP(statut='o',typ='R',defaut=0.3 ),
+ MODU_EAU =SIMP(statut='o',typ='R',defaut=0.0 ),
+ W_EAU_0 =SIMP(statut='o',typ='R'),
+ BIOT_GEL =SIMP(statut='o',typ='R'),
+ MODU_GEL =SIMP(statut='o',typ='R'),
+ VOL_GEL =SIMP(statut='o',typ='R'),
+ AVANC_LI =SIMP(statut='o',typ='R'),
+ SEUIL_SR =SIMP(statut='o',typ='R'),
+ PARA_CIN =SIMP(statut='o',typ='R'),
+ ENR_AC_G =SIMP(statut='o',typ='R'),
+ ),
+ GLRC_DM =FACT(statut='f',min=0,max=1,
+ regles=(EXCLUS('GAMMA_C','SYC'),),
+ GAMMA_T =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ GAMMA_C =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ GAMMA_F =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+ SYT =SIMP(statut='o',typ='R',val_min=0.E+0),
+ SYC =SIMP(statut='f',typ='R'),
+ SYF =SIMP(statut='o',typ='R',val_min=0.E+0),
+ EF =SIMP(statut='f',typ='R',val_min=0.E+0),
+ NUF =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=0.5+0),
+ ),
+ GATT_MONERIE =FACT(statut='f',min=0,max=1,
+ D_GRAIN =SIMP(statut='o',typ='R',val_min=0.E+0),
+ PORO_INIT =SIMP(statut='o',typ='R',val_min=0.E+0),
+ EPSI_01 =SIMP(statut='o',typ='R',defaut= 2.7252E-10,val_min=0.E+0),
+ EPSI_02 =SIMP(statut='o',typ='R',defaut= 9.1440E-41,val_min=0.E+0),
+ ),
+ CORR_ACIER =FACT(statut='f',min=0 ,max=1,
+ D_CORR =SIMP(statut='o',typ='R'),
+ ECRO_K =SIMP(statut='o',typ='R'),
+ ECRO_M =SIMP(statut='o',typ='R'),
+ SY =SIMP(statut='o',typ='R'),
+ ),
+# Discrets non-linéaires : début
+ DIS_ECRO_CINE =FACT(statut='f',
+ fr="Loi pour les discrets avec écrouissage cinématique.",
+ regles=(PRESENT_PRESENT('LIMY_DX','KCIN_DX',),PRESENT_PRESENT('PUIS_DX','LIMU_DX',),
+ PRESENT_PRESENT('LIMY_DY','KCIN_DY',),PRESENT_PRESENT('PUIS_DY','LIMU_DY',),
+ PRESENT_PRESENT('LIMY_DZ','KCIN_DZ',),PRESENT_PRESENT('PUIS_DZ','LIMU_DZ',),
+ PRESENT_PRESENT('LIMY_RX','KCIN_RX',),PRESENT_PRESENT('PUIS_RX','LIMU_RX',),
+ PRESENT_PRESENT('LIMY_RY','KCIN_RY',),PRESENT_PRESENT('PUIS_RY','LIMU_RY',),
+ PRESENT_PRESENT('LIMY_RZ','KCIN_RZ',),PRESENT_PRESENT('PUIS_RZ','LIMU_RZ',),),
+ LIMY_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite élastique suivant l'axe local x de l'élément."),
+ LIMY_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite élastique suivant l'axe local y de l'élément."),
+ LIMY_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite élastique suivant l'axe local z de l'élément."),
+ LIMY_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite élastique suivant l'axe local x de l'élément."),
+ LIMY_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite élastique suivant l'axe local y de l'élément."),
+ LIMY_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite élastique suivant l'axe local z de l'élément."),
+ KCIN_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local x de l'élément."),
+ KCIN_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local y de l'élément."),
+ KCIN_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local z de l'élément."),
+ KCIN_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local Rx de l'élément."),
+ KCIN_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local Ry de l'élément."),
+ KCIN_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Raideur suivant l'axe local Rz de l'élément."),
+ LIMU_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite suivant l'axe local x de l'élément."),
+ LIMU_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite suivant l'axe local y de l'élément."),
+ LIMU_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Effort limite suivant l'axe local z de l'élément."),
+ LIMU_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite suivant l'axe local x de l'élément."),
+ LIMU_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite suivant l'axe local y de l'élément."),
+ LIMU_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Moment limite suivant l'axe local z de l'élément."),
+ PUIS_DX =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local x de l'élément."),
+ PUIS_DY =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local y de l'élément."),
+ PUIS_DZ =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local z de l'élément."),
+ PUIS_RX =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local Rx de l'élément."),
+ PUIS_RY =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local Ry de l'élément."),
+ PUIS_RZ =SIMP(statut='f',typ='R',val_min = 1.0,
+ fr="Coefficient de non-linéarité suivant l'axe local Rz de l'élément."),
+ ),
+ DIS_VISC =FACT(statut='f',
+ fr="Loi pour un discret de type amortisseur visqueux.",
+ regles=(PRESENT_PRESENT('PUIS_DX','COEF_DX',),
+ PRESENT_PRESENT('PUIS_DY','COEF_DY',),
+ PRESENT_PRESENT('PUIS_DZ','COEF_DZ',),
+ PRESENT_PRESENT('PUIS_RX','COEF_RX',),
+ PRESENT_PRESENT('PUIS_RY','COEF_RY',),
+ PRESENT_PRESENT('PUIS_RZ','COEF_RZ',),
+ ),
+ PUIS_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance dans la direction locale Dx de l'élément."),
+ PUIS_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance dans la direction locale Dy de l'élément."),
+ PUIS_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance dans la direction locale Dz de l'élément."),
+ PUIS_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance autour de la direction locale Rx de l'élément."),
+ PUIS_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance autour de la direction locale Ry de l'élément."),
+ PUIS_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Puissance autour de la direction locale Rz de l'élément."),
+ COEF_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C dans la direction locale Dx de l'élément."),
+ COEF_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C dans la direction locale Dy de l'élément."),
+ COEF_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C dans la direction locale Dz de l'élément."),
+ COEF_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C autour de la direction locale Rx de l'élément."),
+ COEF_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C autour de la direction locale Ry de l'élément."),
+ COEF_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+ fr="Coefficient C autour de la direction locale Rz de l'élément."),
+ ),
+ DIS_BILI_ELAS =FACT(statut='f',
+ fr="Loi bi-linéaire pour les discrets.",
+ regles=(PRESENT_PRESENT('KDEB_DX','KFIN_DX','FPRE_DX',),
+ PRESENT_PRESENT('KDEB_DY','KFIN_DY','FPRE_DY',),
+ PRESENT_PRESENT('KDEB_DZ','KFIN_DZ','FPRE_DZ',),),
+ KDEB_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur début suivant l'axe local x de l'élément."),
+ KDEB_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur début suivant l'axe local y de l'élément."),
+ KDEB_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur début suivant l'axe local z de l'élément."),
+ KFIN_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur fin l'axe local x de l'élément."),
+ KFIN_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur fin l'axe local y de l'élément."),
+ KFIN_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Raideur fin l'axe local z de l'élément."),
+ FPRE_DX =SIMP(statut='f',typ='R',
+ fr="Effort de préserrage suivant l'axe local x de l'élément."),
+ FPRE_DY =SIMP(statut='f',typ='R',
+ fr="Effort de préserrage suivant l'axe local y de l'élément."),
+ FPRE_DZ =SIMP(statut='f',typ='R',
+ fr="Effort de préserrage suivant l'axe local z de l'élément."),
+ ),
+# Discrets non-linéaires : fin
+#
+# comportement thermique
+#
+ THER_NL =FACT(statut='f',
+ regles=(UN_PARMI('BETA','RHO_CP', ),),
+ LAMBDA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO_CP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ THER_HYDR =FACT(statut='f',
+ LAMBDA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ BETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ AFFINITE =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHALHYDR =SIMP(statut='o',typ='R'),
+ ),
+ THER =FACT(statut='f',
+ LAMBDA =SIMP(statut='o',typ='R'),
+ RHO_CP =SIMP(statut='f',typ='R'),
+ ),
+ THER_FO =FACT(statut='f',
+ LAMBDA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ RHO_CP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ THER_ORTH =FACT(statut='f',
+ LAMBDA_L =SIMP(statut='o',typ='R'),
+ LAMBDA_T =SIMP(statut='o',typ='R'),
+ LAMBDA_N =SIMP(statut='f',typ='R'),
+ RHO_CP =SIMP(statut='f',typ='R'),
+ ),
+ THER_COQUE =FACT(statut='f',
+ COND_LMM =SIMP(statut='o',typ='R'),
+ COND_TMM =SIMP(statut='o',typ='R'),
+ COND_LMP =SIMP(statut='o',typ='R'),
+ COND_TMP =SIMP(statut='o',typ='R'),
+ COND_LPP =SIMP(statut='o',typ='R'),
+ COND_TPP =SIMP(statut='o',typ='R'),
+ COND_LSI =SIMP(statut='o',typ='R'),
+ COND_TSI =SIMP(statut='o',typ='R'),
+ COND_NMM =SIMP(statut='o',typ='R'),
+ COND_NMP =SIMP(statut='o',typ='R'),
+ COND_NPP =SIMP(statut='o',typ='R'),
+ COND_NSI =SIMP(statut='o',typ='R'),
+ CMAS_MM =SIMP(statut='f',typ='R'),
+ CMAS_MP =SIMP(statut='f',typ='R'),
+ CMAS_PP =SIMP(statut='f',typ='R'),
+ CMAS_SI =SIMP(statut='f',typ='R'),
+ ),
+ THER_COQUE_FO =FACT(statut='f',
+ COND_LMM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_TMM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_LMP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_TMP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_LPP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_TPP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_LSI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_TSI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_NMM =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_NMP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_NPP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COND_NSI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CMAS_MM =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CMAS_MP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CMAS_PP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CMAS_SI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ SECH_GRANGER =FACT(statut='f',
+ A =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ QSR_K =SIMP(statut='o',typ='R'),
+ TEMP_0_C =SIMP(statut='o',typ='R'),
+ ),
+ SECH_MENSI =FACT(statut='f',
+ A =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ ),
+ SECH_BAZANT =FACT(statut='f',
+ D1 =SIMP(statut='o',typ='R'),
+ ALPHA_BAZANT =SIMP(statut='o',typ='R'),
+ N =SIMP(statut='o',typ='R'),
+ FONC_DESORP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ SECH_NAPPE =FACT(statut='f',
+ FONCTION =SIMP(statut='o',typ=(nappe_sdaster,formule)),
+ ),
+#
+# comportement métallurgique
+#
+ META_ACIER =FACT(statut='f',
+ TRC =SIMP(statut='o',typ=(table_sdaster) ),
+ AR3 =SIMP(statut='o',typ='R'),
+ ALPHA =SIMP(statut='o',typ='R'),
+ MS0 =SIMP(statut='o',typ='R'),
+ AC1 =SIMP(statut='o',typ='R'),
+ AC3 =SIMP(statut='o',typ='R'),
+ TAUX_1 =SIMP(statut='o',typ='R'),
+ TAUX_3 =SIMP(statut='o',typ='R'),
+ LAMBDA0 =SIMP(statut='f',typ='R'),
+ QSR_K =SIMP(statut='f',typ='R'),
+ D10 =SIMP(statut='f',typ='R'),
+ WSR_K =SIMP(statut='f',typ='R'),
+ ),
+ META_ZIRC =FACT(statut='f',
+ TDEQ =SIMP(statut='o',typ='R'),
+ N =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='o',typ='R'),
+ T1C =SIMP(statut='o',typ='R'),
+ T2C =SIMP(statut='o',typ='R'),
+ AC =SIMP(statut='o',typ='R'),
+ M =SIMP(statut='o',typ='R'),
+ QSR_K =SIMP(statut='o',typ='R'),
+ T1R =SIMP(statut='o',typ='R'),
+ T2R =SIMP(statut='o',typ='R'),
+ AR =SIMP(statut='o',typ='R'),
+ BR =SIMP(statut='o',typ='R'),
+ ),
+ DURT_META =FACT(statut='f',
+ F1_DURT =SIMP(statut='o',typ='R'),
+ F2_DURT =SIMP(statut='o',typ='R'),
+ F3_DURT =SIMP(statut='o',typ='R'),
+ F4_DURT =SIMP(statut='o',typ='R'),
+ C_DURT =SIMP(statut='o',typ='R'),
+ ),
+ ELAS_META =FACT(statut='f',
+ E =SIMP(statut='o',typ='R'),
+ NU =SIMP(statut='o',typ='R'),
+ F_ALPHA =SIMP(statut='o',typ='R'),
+ C_ALPHA =SIMP(statut='o',typ='R'),
+ PHASE_REFE =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+ EPSF_EPSC_TREF =SIMP(statut='o',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ F1_SY =SIMP(statut='f',typ='R'),
+ F2_SY =SIMP(statut='f',typ='R'),
+ F3_SY =SIMP(statut='f',typ='R'),
+ F4_SY =SIMP(statut='f',typ='R'),
+ C_SY =SIMP(statut='f',typ='R'),
+ SY_MELANGE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_S_VP =SIMP(statut='f',typ='R'),
+ F2_S_VP =SIMP(statut='f',typ='R'),
+ F3_S_VP =SIMP(statut='f',typ='R'),
+ F4_S_VP =SIMP(statut='f',typ='R'),
+ C_S_VP =SIMP(statut='f',typ='R' ),
+ S_VP_MELANGE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ELAS_META_FO =FACT(statut='f',
+ regles=(
+ PRESENT_PRESENT('F_ALPHA','TEMP_DEF_ALPHA'),
+ PRESENT_PRESENT('C_ALPHA','TEMP_DEF_ALPHA'),
+ ),
+ E =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ NU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F_ALPHA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_ALPHA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PHASE_REFE =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+ EPSF_EPSC_TREF =SIMP(statut='o',typ='R'),
+ TEMP_DEF_ALPHA =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ F1_SY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_SY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_SY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_SY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_SY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SY_MELANGE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_S_VP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_S_VP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_S_VP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_S_VP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_S_VP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ S_VP_MELANGE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_ECRO_LINE =FACT(statut='f',
+ F1_D_SIGM_EPSI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_D_SIGM_EPSI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_D_SIGM_EPSI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_D_SIGM_EPSI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_D_SIGM_EPSI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_TRACTION =FACT(statut='f',
+ SIGM_F1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_F2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_F3 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_F4 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_VISC_FO =FACT(statut='f',
+ F1_ETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F1_M =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_ETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_M =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_ETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_M =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_ETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_M =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_ETA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_N =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ C_M =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_PT =FACT(statut='f',
+ F1_K =SIMP(statut='f',typ='R'),
+ F2_K =SIMP(statut='f',typ='R'),
+ F3_K =SIMP(statut='f',typ='R'),
+ F4_K =SIMP(statut='f',typ='R'),
+ F1_D_F_META =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F2_D_F_META =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F3_D_F_META =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ F4_D_F_META =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ META_RE =FACT(statut='f',
+ C_F1_THETA =SIMP(statut='f',typ='R'),
+ C_F2_THETA =SIMP(statut='f',typ='R'),
+ C_F3_THETA =SIMP(statut='f',typ='R'),
+ C_F4_THETA =SIMP(statut='f',typ='R'),
+ F1_C_THETA =SIMP(statut='f',typ='R'),
+ F2_C_THETA =SIMP(statut='f',typ='R'),
+ F3_C_THETA =SIMP(statut='f',typ='R'),
+ F4_C_THETA =SIMP(statut='f',typ='R'),
+ ),
+#
+# comportement fluide
+#
+ FLUIDE =FACT(statut='f',
+ regles=(EXCLUS('CELE_C','CELE_R'),),
+ RHO =SIMP(statut='o',typ='R'),
+ CELE_C =SIMP(statut='f',typ='C'),
+ CELE_R =SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# COMPORTEMENT THERMO_HYDRO_MECANIQUE
+# LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES
+# DE LA LOI DE COUPLAGE THM DE LA RELATION
+# LE COMPORTEMENT DE COUPLAGE COMP_THM N EST VALABLE QUE POUR LES LOIS
+# DE COUPLAGE : LIQU_SATU,LIQU_GAZ,GAZ,LIQU_GAZ_ATM,LIQU_VAPE_GAZ,LIQU_VAPE
+# ET LIQU_AD_GAZ_VAPE
+# LA CORRESPONDANCE AVEC LES VARIABLES CACHEES EST LA SUIVANTE :
+# 1 --> LIQU_SATU
+# 2 --> GAZ
+# 3 --> LIQU_VAPE
+# 4 --> LIQU_VAPE_GAZ
+# 5 --> LIQU_GAZ
+# 6 --> LIQU_GAZ_ATM
+# 9 --> LIQU_AD_GAZ_VAPE
+# 10 --> LIQU_AD_GAZ
+# =================================================================================
+ COMP_THM = SIMP(statut='f', typ='TXM',
+ into = ( "LIQU_SATU" ,
+ "LIQU_GAZ" ,
+ "GAZ" ,
+ "LIQU_GAZ_ATM" ,
+ "LIQU_VAPE_GAZ" ,
+ "LIQU_VAPE" ,
+ "LIQU_AD_GAZ_VAPE" ,
+ "LIQU_AD_GAZ" ,
+ ) ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_SATU -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU -----------------------------------------------
+# =================================================================================
+ b_liqusatu = BLOC(condition = "COMP_THM == 'LIQU_SATU' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_SATU",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE2 = SIMP(statut='f',typ='R'),
+ PRES_VAPE = SIMP(statut='f',typ='R'),
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 1.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='f',typ='R'),
+ EMMAG = SIMP(statut='f',typ='R'),
+ SATU_PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ --------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+ b_liqugaz = BLOC(condition = "COMP_THM == 'LIQU_GAZ' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PRE2 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ PRES_VAPE = SIMP(statut='f',typ='R'),
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 5.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+ VG_N = SIMP(statut='f',typ='R'),
+ VG_SR = SIMP(statut='f',typ='R'),
+ VG_PR = SIMP(statut='f',typ='R'),
+ VG_SMAX = SIMP(statut='f',typ='R'),
+ VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+#
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+ ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+ 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+ ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+ UN_PARMI('VG_N','SATU_PRES'),
+ ),
+
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE GAZ -------------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_GAZ ------------------------------------------------
+# =================================================================================
+ b_gaz = BLOC(condition = "COMP_THM == 'GAZ' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='o',typ='R'),
+ PRE1 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE2 = SIMP(statut='f',typ='R'),
+ PRES_VAPE = SIMP(statut='f',typ='R'),
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 2.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SATU_PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_LIQU =FACT(statut='f',
+ RHO =SIMP(statut='f',typ='R'),
+ UN_SUR_K =SIMP(statut='f',typ='R'),
+ ALPHA =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_HENRY =SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ_ATM ----------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+ b_liqugazatm = BLOC(condition = "COMP_THM == 'LIQU_GAZ_ATM' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ_ATM",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE2 = SIMP(statut='f',typ='R'),
+ PRES_VAPE = SIMP(statut='f',typ='R'),
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 6.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ R_GAZ =SIMP(statut='f',typ='R'),
+ PERM_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='f',
+ MASS_MOL = SIMP(statut='f',typ='R'),
+ VISC = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_AIR_DISSOUS---------
+# =================================================================================
+ b_liquadgaz = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PRE2 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+ PRES_VAPE = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 10.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+ VG_N = SIMP(statut='f',typ='R'),
+ VG_SR = SIMP(statut='f',typ='R'),
+ VG_PR = SIMP(statut='f',typ='R'),
+ VG_SMAX = SIMP(statut='f',typ='R'),
+ VG_SATUR = SIMP(statut='f',typ='R'),
+#
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+#
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+ ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+ 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+ ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+ UN_PARMI('VG_N','SATU_PRES'),
+ ),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+ ),
+# =================================================================================
+# --- MOT-CLE FACULTATIF ---------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ = FACT(statut='f',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ CP = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='o',typ='R'),
+ COEF_HENRY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE_GAZ ---------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ ------------------------
+# =================================================================================
+ b_liquvapegaz = BLOC(condition = "COMP_THM == 'LIQU_VAPE_GAZ' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PRE2 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+ PRES_VAPE = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 4.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+ VG_N = SIMP(statut='f',typ='R'),
+ VG_SR = SIMP(statut='f',typ='R'),
+ VG_PR = SIMP(statut='f',typ='R'),
+ VG_SMAX = SIMP(statut='f',typ='R'),
+ VG_SATUR = SIMP(statut='f',typ='R'),
+#
+ FICKV_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+#
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+ ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+ 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+ ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+ UN_PARMI('VG_N','SATU_PRES'),
+ ),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVE ----------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ CP = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ_VAPE -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ THM_AIR_DISSOUS---------
+# =================================================================================
+ b_liquadvape = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ_VAPE' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PRE2 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+ PRES_VAPE = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 9.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+ VG_N = SIMP(statut='f',typ='R'),
+ VG_SR = SIMP(statut='f',typ='R'),
+ VG_PR = SIMP(statut='f',typ='R'),
+ VG_SMAX = SIMP(statut='f',typ='R'),
+ VG_SATUR = SIMP(statut='f',typ='R'),
+#
+ FICKV_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+#
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+ ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+ 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+ ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+ UN_PARMI('VG_N','SATU_PRES'),
+ ),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ CP = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='o',typ='R'),
+ COEF_HENRY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_VAPE_GAZ ---------------------------------
+# =================================================================================
+ b_liquvape = BLOC(condition = "COMP_THM == 'LIQU_VAPE' ",
+ fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_INIT = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE1 = SIMP(statut='o',typ='R'),
+ PORO = SIMP(statut='o',typ='R'),
+ PRES_VAPE = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ TEMP = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ PRE2 = SIMP(statut='f',typ='R'),
+ DEGR_SATU = SIMP(statut='f',typ='R'),
+ PRES_ATMO = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+ COMP_THM = SIMP(statut='c',typ='R',defaut= 3.0,),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_DIFFU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ R_GAZ = SIMP(statut='o',typ='R'),
+ RHO = SIMP(statut='o',typ='R'),
+ BIOT_COEF = SIMP(statut='o',typ='R'),
+ PESA_X = SIMP(statut='o',typ='R'),
+ PESA_Y = SIMP(statut='o',typ='R'),
+ PESA_Z = SIMP(statut='o',typ='R'),
+ SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+ VG_N = SIMP(statut='f',typ='R'),
+ VG_SR = SIMP(statut='f',typ='R'),
+ VG_PR = SIMP(statut='f',typ='R'),
+ VG_SMAX = SIMP(statut='f',typ='R'),
+ VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES FACULTATIVES ------------------------------------
+# ---------------------------------------------------------------------------------
+ PESA_MULT = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ CP = SIMP(statut='f',typ='R'),
+ PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINXY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERMINZX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ LAMB_CT = SIMP(statut='f',typ='R'),
+#
+ regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+ PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+ ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+ 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+ ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+ UN_PARMI('VG_N','SATU_PRES'),
+ ),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES INUTILES ----------------------------------------
+# ---------------------------------------------------------------------------------
+ EMMAG = SIMP(statut='f',typ='R'),
+ SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_SIGMA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PERM_G_INTR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CHAL_VAPO = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PV = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKV_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FV_PG = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PA = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_PL = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ FICKA_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_FA_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_LIQU = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ RHO = SIMP(statut='o',typ='R'),
+ UN_SUR_K = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES NECESSAIRE SI THERMIQUE -------------------------
+# ---------------------------------------------------------------------------------
+ ALPHA = SIMP(statut='f',typ='R'),
+ CP = SIMP(statut='f',typ='R'),
+ ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+ THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# ------------------- DONNEES OBLIGATOIRE -------------------------------------
+# ---------------------------------------------------------------------------------
+ MASS_MOL = SIMP(statut='o',typ='R'),
+ CP = SIMP(statut='o',typ='R'),
+ VISC = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+ THM_GAZ =FACT(statut='f',
+ MASS_MOL =SIMP(statut='f',typ='R'),
+ CP =SIMP(statut='f',typ='R'),
+ VISC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_VISC_TEMP =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ ),
+# courbes et coefficients associés à la fatigue et au dommage
+#
+ FATIGUE =FACT(statut='f',
+ regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
+ PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
+ PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
+ ENSEMBLE('A_BASQUIN','BETA_BASQUIN'),
+ ENSEMBLE('A0','A1','A2','A3','SL'),
+ PRESENT_PRESENT('A0','E_REFE'),
+ ENSEMBLE('D0','TAU0'),),
+ WOHLER =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_BASQUIN =SIMP(statut='f',typ='R'),
+ BETA_BASQUIN =SIMP(statut='f',typ='R'),
+ A0 =SIMP(statut='f',typ='R'),
+ A1 =SIMP(statut='f',typ='R'),
+ A2 =SIMP(statut='f',typ='R'),
+ A3 =SIMP(statut='f',typ='R'),
+ SL =SIMP(statut='f',typ='R'),
+ MANSON_COFFIN =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ E_REFE =SIMP(statut='f',typ='R'),
+ D0 =SIMP(statut='f',typ='R'),
+ TAU0 =SIMP(statut='f',typ='R'),
+ ),
+ DOMMA_LEMAITRE =FACT(statut='f',
+ S =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EPSP_SEUIL =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EXP_S =SIMP(statut='f',typ='R',val_min=0.0E0,defaut=1.0),
+ ),
+ CISA_PLAN_CRIT =FACT(statut='f',
+ CRITERE =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC",
+ "DANG_VAN_MODI_AC",
+ "DANG_VAN_MODI_AV",
+ "MATAKE_MODI_AV",
+ "FATESOCI_MODI_AV",
+ ) ),
+
+ b_critere_matake =BLOC(condition="CRITERE=='MATAKE_MODI_AC' or CRITERE=='MATAKE_MODI_AV'",
+ fr="Cisaillement plan critique critère de matake pour les cas amplitude constante et amplitude variable",
+ MATAKE_A =SIMP(statut='o',typ='R'),
+ MATAKE_B =SIMP(statut='o',typ='R'),
+ COEF_FLEX_TORS =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+ ),
+
+ b_critere_dang_van =BLOC(condition="(CRITERE=='DANG_VAN_MODI_AC' or CRITERE=='DANG_VAN_MODI_AV')",
+ fr="Critère de Dang Van modifié pour les cas amplitude constante et amplitude variable",
+ D_VAN_A =SIMP(statut='o',typ='R'),
+ D_VAN_B =SIMP(statut='o',typ='R'),
+ COEF_CISA_TRAC =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+ ),
+
+ b_critere_fate_soci =BLOC(condition="CRITERE=='FATESOCI_MODI_AV'",
+ fr="Critère de Fatemi et Socie, en élasticité ou élastoplasticité, pour le cas amplitude variable",
+ FATSOC_A =SIMP(statut='o',typ='R'),
+ COEF_CISA_TRAC =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+ ),
+ ),
+#
+# autres comportements ...
+#
+ WEIBULL =FACT(statut='f',
+ M =SIMP(statut='o',typ='R'),
+ VOLU_REFE =SIMP(statut='o',typ='R'),
+ SIGM_REFE =SIMP(statut='o',typ='R'),
+ SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ),
+ WEIBULL_FO =FACT(statut='f',
+ M =SIMP(statut='o',typ='R'),
+ VOLU_REFE =SIMP(statut='o',typ='R'),
+ SIGM_CNV =SIMP(statut='o',typ='R'),
+ SIGM_REFE =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ),
+ NON_LOCAL =FACT(statut='f',
+ regles=(AU_MOINS_UN('LONG_CARA','C_GONF','C_GRAD_VARI','PENA_LAGR',),),
+ LONG_CARA =SIMP(statut='f',typ='R'),
+ C_GRAD_VARI =SIMP(statut='f',typ='R'),
+ PENA_LAGR =SIMP(statut='f',typ='R',defaut= 1.0E3),
+ C_GONF =SIMP(statut='f',typ='R'),
+ COEF_RIGI_MINI =SIMP(statut='f',typ='R'),
+ ),
+ RUPT_FRAG =FACT(statut='f',
+ GC =SIMP(statut='o',typ='R'),
+ SIGM_C =SIMP(statut='f',typ='R'),
+ PENA_ADHERENCE =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=1.E+0),
+ PENA_CONTACT =SIMP(statut='f',typ='R',defaut=1.),
+ PENA_LAGR =SIMP(statut='f',typ='R',defaut=1.0E2,val_min=1.01E+0),
+ RIGI_GLIS =SIMP(statut='f',typ='R',defaut=1.0E1),
+ ),
+ RUPT_FRAG_FO =FACT(statut='f',
+ GC =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PENA_ADHERENCE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PENA_CONTACT =SIMP(statut='f',typ='R',defaut=1.),
+ ),
+ JOINT_MECA_RUPT =FACT(statut='f',
+ regles=(EXCLUS('PRES_FLUIDE','PRES_CLAVAGE'),),
+ K_N =SIMP(statut='o',typ='R',val_min=1.E-12),
+ K_T =SIMP(statut='f',typ='R',val_min=1.E-12),
+ SIGM_MAX =SIMP(statut='o',typ='R',val_min=0.),
+ ALPHA =SIMP(statut='f',typ='R',defaut=1., val_min=0., val_max=2.),
+ PENA_RUPTURE =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=10.E+0),
+ PENA_CONTACT =SIMP(statut='f',typ='R',defaut=1.,val_min=1.E-12),
+ PRES_FLUIDE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ PRES_CLAVAGE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ RCCM =FACT(statut='f',
+ regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+ SY_02 =SIMP(statut='f',typ='R'),
+ SM =SIMP(statut='f',typ='R'),
+ SU =SIMP(statut='f',typ='R'),
+ SC =SIMP(statut='f',typ='R'),
+ SH =SIMP(statut='f',typ='R'),
+ N_KE =SIMP(statut='f',typ='R'),
+ M_KE =SIMP(statut='f',typ='R'),
+ A_AMORC =SIMP(statut='f',typ='R'),
+ B_AMORC =SIMP(statut='f',typ='R'),
+ D_AMORC =SIMP(statut='f',typ='R'),
+ R_AMORC =SIMP(statut='f',typ='R'),
+ ),
+ RCCM_FO =FACT(statut='f',
+ regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+ SY_02 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SM =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SU =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ S =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ N_KE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ M_KE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ A_AMORC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ B_AMORC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ D_AMORC =SIMP(statut='f',typ='R'),
+ R_AMORC =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ LAIGLE =FACT(statut='f',
+ GAMMA_ULT =SIMP(statut='o',typ='R'),
+ GAMMA_E =SIMP(statut='o',typ='R'),
+ M_ULT =SIMP(statut='o',typ='R'),
+ M_E =SIMP(statut='o',typ='R'),
+ A_E =SIMP(statut='o',typ='R'),
+ M_PIC =SIMP(statut='o',typ='R'),
+ A_PIC =SIMP(statut='o',typ='R'),
+ ETA =SIMP(statut='o',typ='R'),
+ SIGMA_C =SIMP(statut='o',typ='R'),
+ GAMMA =SIMP(statut='o',typ='R'),
+ KSI =SIMP(statut='o',typ='R'),
+ GAMMA_CJS =SIMP(statut='o',typ='R'),
+ SIGMA_P1 =SIMP(statut='o',typ='R'),
+ PA =SIMP(statut='o',typ='R'),
+ ),
+ LETK =FACT(statut='f',
+ PA =SIMP(statut='o',typ='R',fr="pression atmospherique"),
+ NELAS =SIMP(statut='o',typ='R',fr="exposant de la loi de variation des modules K et G"),
+ SIGMA_C =SIMP(statut='o',typ='R',fr="résistance en compression simple "),
+ H0_EXT =SIMP(statut='o',typ='R',fr="parametre pilotant la résistance en extension"),
+ GAMMA_CJS =SIMP(statut='o',typ='R',fr="parametre de forme du critere ds le plan déviatoire entre 0 et 1."),
+ XAMS =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage pre pic"),
+ ETA =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage post pic"),
+ A_0 =SIMP(statut='o',typ='R',fr="a de la limite d'élasticité initiale"),
+ A_E =SIMP(statut='o',typ='R',fr="a de la limite de clivage ou seuil intermédiaire"),
+ A_PIC =SIMP(statut='o',typ='R',fr="a du seuil de pic"),
+ S_0 =SIMP(statut='o',typ='R',fr="s de la limite d'élasticité initiale"),
+ M_0 =SIMP(statut='o',typ='R',fr="m de la limite d'élasticité initiale"),
+ M_E =SIMP(statut='o',typ='R',fr="m de la limite de clivage ou seuil intermédiaire"),
+ M_PIC =SIMP(statut='o',typ='R',fr="m du seuil de pic"),
+ M_ULT =SIMP(statut='o',typ='R',fr="m du seuil residuel"),
+ XI_ULT =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil résiduel"),
+ XI_E =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de clivage"),
+ XI_PIC =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de pic"),
+ MV_MAX =SIMP(statut='o',typ='R',fr="m du seuil viscoplastique maximal"),
+ XIV_MAX =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil viscoplastique maximal"),
+ A =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+ N =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+ SIGMA_P1 =SIMP(statut='o',typ='R',fr="SIG min de l intersection du seuil de pic et intermediaire "),
+ MU0_V =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+ XI0_V =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+ MU1 =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+ XI1 =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+ ),
+ DRUCK_PRAGER =FACT(statut='f',
+ ALPHA =SIMP(statut='o',typ='R'),
+ SY =SIMP(statut='o',typ='R'),
+ P_ULTM =SIMP(statut='o',typ='R'),
+ ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+ b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+ fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+ H =SIMP(statut='o',typ='R'),
+ TYPE_DP =SIMP(statut='c',typ='R',defaut= 1.0,),
+ ),
+ b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+ fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+ SY_ULTM =SIMP(statut='o',typ='R'),
+ TYPE_DP =SIMP(statut='c',typ='R',defaut= 2.0,),
+ ),
+ DILAT =SIMP(statut='f',typ='R',defaut=0.0),
+ ),
+ VISC_DRUC_PRAG =FACT(statut='f',
+ PREF =SIMP(statut='o',typ='R',fr="pression de reference"),
+ A =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+ N =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+ P_PIC =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de pic"),
+ P_ULT =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil utime"),
+ ALPHA_0 =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil d elasticite"),
+ ALPHA_PIC =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil de pic"),
+ ALPHA_ULT =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil ultime"),
+ R_0 =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil d'elasticite"),
+ R_PIC =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil de pic"),
+ R_ULT =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil ultime"),
+ BETA_0 =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil d elasticite"),
+ BETA_PIC =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil de pic"),
+ BETA_ULT =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil ultime"),
+ ),
+ HOEK_BROWN =FACT(statut='f',
+ GAMMA_RUP =SIMP(statut='o',typ='R'),
+ GAMMA_RES =SIMP(statut='o',typ='R'),
+ S_END =SIMP(statut='o',typ='R'),
+ S_RUP =SIMP(statut='o',typ='R'),
+ M_END =SIMP(statut='o',typ='R'),
+ M_RUP =SIMP(statut='o',typ='R'),
+ BETA =SIMP(statut='o',typ='R'),
+ ALPHAHB =SIMP(statut='o',typ='R'),
+ PHI_RUP =SIMP(statut='o',typ='R'),
+ PHI_RES =SIMP(statut='o',typ='R'),
+ PHI_END =SIMP(statut='f',typ='R'),
+ ),
+ ELAS_GONF =FACT(statut='f',
+ BETAM =SIMP(statut='o',typ='R'),
+ PREF =SIMP(statut='o',typ='R'),
+ ),
+ JOINT_BANDIS =FACT(statut='f',
+ K =SIMP(statut='o',typ='R'),
+ DMAX =SIMP(statut='o',typ='R'),
+ GAMMA =SIMP(statut='o',typ='R'),
+ KT =SIMP(statut='f',typ='R',defaut = 1.E12),
+ ),
+#### MONOCRISTAL
+
+ ECOU_VISC1 =FACT(statut='f',
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+ N =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='o',typ='R'),
+ C =SIMP(statut='o',typ='R'),
+ ),
+ ECOU_VISC2 =FACT(statut='f',
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+ N =SIMP(statut='o',typ='R'),
+ K =SIMP(statut='o',typ='R'),
+ C =SIMP(statut='o',typ='R'),
+ D =SIMP(statut='o',typ='R'),
+ A =SIMP(statut='o',typ='R'),
+ ),
+ ECOU_VISC3 =FACT(statut='f',
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+ K =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+ TAUMU =SIMP(statut='o',typ='R',fr="Seuil d ecoulement, en unite de contraintes"),
+ GAMMA0 =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+ DELTAV =SIMP(statut='o',typ='R',fr="Volume d activation"),
+ DELTAG0 =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+ ),
+ KOCKS_RAUCH =FACT(statut='f',
+ regles=(UN_PARMI('H','H1'),
+ PRESENT_PRESENT('H1','H2','H3','H4'),
+ PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+ ),
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+ K =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+ TAUR =SIMP(statut='o',typ='R',fr="Contraintes de cisaillement à T=0K, en unite de contraintes"),
+ TAU0 =SIMP(statut='o',typ='R',fr="Contraintes critique initiale de cisaillement, en unite de contraintes"),
+ GAMMA0 =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+ DELTAG0 =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+ BSD =SIMP(statut='o',typ='R',fr="fonction de la taille du grain B/D"),
+ GCB =SIMP(statut='o',typ='R',fr="distance critique d'annihilation GC/B"),
+ KDCS =SIMP(statut='o',typ='R',fr="Parametre relatif à la direction principale de la dislocation"),
+ P =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+ Q =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+ H =SIMP(statut='f',typ='R'),
+ H1 =SIMP(statut='f',typ='R'),
+ H2 =SIMP(statut='f',typ='R'),
+ H3 =SIMP(statut='f',typ='R'),
+ H4 =SIMP(statut='f',typ='R'),
+ H5 =SIMP(statut='f',typ='R'),
+ H6 =SIMP(statut='f',typ='R'),
+ ),
+ ECRO_ISOT1 =FACT(statut='f',
+ regles=(UN_PARMI('H','H1'),
+ PRESENT_PRESENT('H1','H2','H3','H4'),
+ PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+ ),
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+ R_0 =SIMP(statut='o',typ='R'),
+ Q =SIMP(statut='o',typ='R'),
+ B =SIMP(statut='o',typ='R'),
+ H =SIMP(statut='f',typ='R'),
+ H1 =SIMP(statut='f',typ='R'),
+ H2 =SIMP(statut='f',typ='R'),
+ H3 =SIMP(statut='f',typ='R'),
+ H4 =SIMP(statut='f',typ='R'),
+ H5 =SIMP(statut='f',typ='R'),
+ H6 =SIMP(statut='f',typ='R'),
+ ),
+ ECRO_ISOT2 =FACT(statut='f',
+ regles=(UN_PARMI('H','H1'),
+ PRESENT_PRESENT('H1','H2','H3','H4'),
+ PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+ ),
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+ R_0 =SIMP(statut='o',typ='R'),
+ Q1 =SIMP(statut='o',typ='R'),
+ B1 =SIMP(statut='o',typ='R'),
+ H =SIMP(statut='f',typ='R'),
+ H1 =SIMP(statut='f',typ='R'),
+ H2 =SIMP(statut='f',typ='R'),
+ H3 =SIMP(statut='f',typ='R'),
+ H4 =SIMP(statut='f',typ='R'),
+ H5 =SIMP(statut='f',typ='R'),
+ H6 =SIMP(statut='f',typ='R'),
+ Q2 =SIMP(statut='o',typ='R'),
+ B2 =SIMP(statut='o',typ='R'),
+ ),
+ ECRO_CINE1 =FACT(statut='f',
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+ D =SIMP(statut='o',typ='R'),
+ ),
+ ECRO_CINE2 =FACT(statut='f',
+ TYPE_PARA =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+ D =SIMP(statut='o',typ='R'),
+ GM =SIMP(statut='o',typ='R'),
+ PM =SIMP(statut='o',typ='R'),
+ C =SIMP(statut='o',typ='R'),
+ ),
+
+#### MONOCRISTAL
+
+ DRUCK_PRAGER_FO =FACT(statut='f',
+ ALPHA =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+ SY =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+ P_ULTM =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+ ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+ b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+ fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+ H =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+ TYPE_DP =SIMP(statut='c',typ='R',defaut= 1.0,),
+ ),
+ b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+ fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+ SY_ULTM =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+ TYPE_DP =SIMP(statut='c',typ='R',defaut= 2.0,),
+ ),
+ DILAT =SIMP(statut='f',typ='R',defaut=0.0),
+ ),
+
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+ reentrant='n',
+ fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ SOUS_STRUC =FACT(statut='o',max='**',
+ NOM =SIMP(statut='o',typ='TXM' ),
+ MACR_ELEM_DYNA =SIMP(statut='o',typ=macr_elem_dyna ),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ TRANS =SIMP(statut='f',typ='R',max=3),
+ ),
+ LIAISON =FACT(statut='o',max='**',
+ SOUS_STRUC_1 =SIMP(statut='o',typ='TXM' ),
+ INTERFACE_1 =SIMP(statut='o',typ='TXM' ),
+ SOUS_STRUC_2 =SIMP(statut='o',typ='TXM' ),
+ INTERFACE_2 =SIMP(statut='o',typ='TXM' ),
+ regles=(EXCLUS('GROUP_MA_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),
+ EXCLUS('MAILLE_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),),
+ GROUP_MA_MAIT_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA_MAIT_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_MAIT_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("REDUIT","CLASSIQUE") ),
+ ),
+ VERIF =FACT(statut='f',max='**',
+# dans la doc U stop_erreur est obligatoire
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster,
+ fr="Définir une fonction réelle de deux variables réelles",
+ reentrant='n',UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
+ EXCLUS('FONCTION','NOM_PARA_FONC',),
+ ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
+ NOM_PARA =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+ NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+ PARA =SIMP(statut='o',typ='R',max='**'),
+ FONCTION =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+ NOM_PARA_FONC =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+ DEFI_FONCTION =FACT(statut='f',max='**',
+ VALE =SIMP(statut='o',typ='R',max='**'),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ VERIF =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 KHAM M.KHAM
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op= 73,sd_prod=table_fonction,
+ fr="Définition d'un obstacle plan perpendiculaire à une structure filaire",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ TYPE =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+ into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+ "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+ "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+ "GUID_B_CARTE_900","GUID_C_CARTE_900",
+ "GUID_D_CARTE_900","GUID_E_CARTE_900",
+ "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+ "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+ "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+ "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+ "GUID_B_CARSP_900","GUID_C_CARSP_900",
+ "GUID_D_CARSP_900","GUID_E_CARSP_900",
+ "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+ "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+ "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+ "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+ "GUID_B_GCONT_900","GUID_C_GCONT_900",
+ "GUID_D_GCONT_900","GUID_E_GCONT_900",
+ "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+ "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+ "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+ "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+ "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+ "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+ "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+ "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+ "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+ "GUID_F_GCOMB_1300",) ),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VERIF =SIMP(statut='f',typ='TXM',defaut="FERME"),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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
+DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op= 2,sd_prod=para_sensi,
+ fr="Définition d'un paramètre de sensibilité",
+ ang="Definition of a sensitive parameter",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ NOM_RESU =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
+ fr="Nom du concept créé",
+ ang="Name of the concept"),
+ VALE =SIMP(statut='o',typ='R',
+ fr="Valeur du parametre",
+ ang="Value of the parameter"),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 16/11/2009 AUTEUR ASSIRE A.ASSIRE
+# 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 ASSIRE A.ASSIRE
+
+from Macro.defi_part_feti_ops import defi_part_feti_ops
+
+DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_sdaster,
+ reentrant='n',UIinfo={"groupe":("Maillage",)},
+ fr="Creation partitionnement en sous-domaines pour FETI",
+ regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
+
+ NB_PART =SIMP(statut='o',typ='I',val_min=2),
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
+
+ # Methode de partitionnement
+ METHODE =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
+
+ LOGICIEL =SIMP(statut='f',typ='TXM'),
+
+ # Corrige les problemes possibles de non-connexite des sous-domaines
+ CORRECTION_CONNEX =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+ # Permet de grouper des mailles dans un meme sous-doamine
+ GROUPAGE =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,),
+ ),
+ # Permet d'appliquer des poids sur certaines mailles
+ POIDS_MAILLES =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,),
+ POIDS =SIMP(statut='f',typ='I',val_min=2),
+ ),
+ # Prefixe pour le nom des group_ma definissant les sous-domaines
+ NOM_GROUP_MA =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+ # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+ TRAITER_BORDS =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+
+ # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+ # Note : le calcul FETI sera impossible
+ b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+ NOM_GROUP_MA_BORD =SIMP(statut='f',typ='TXM'),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 ASSIRE A.ASSIRE
+
+DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
+ fr="Creation partitionnement en sous-domaines pour FETI",
+ docu="U4.23.05",reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster) ),
+ NOM =SIMP(statut='f',typ='TXM',defaut='SD'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4) ),
+ DEFI =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma),
+ GROUP_MA_BORD =SIMP(statut='f',typ=grma),
+ ),
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+ ),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 ASSIRE A.ASSIRE
+
+DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
+ fr="Creation partitionnement en sous-domaines pour FETI",
+ docu="U4.00.00",
+ UIinfo={"groupes":("Résolution",)},
+ MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+ MODELE =SIMP(statut='f',typ=(modele_sdaster)),
+ NB_PART =SIMP(statut='o',typ='I',),
+
+ # Methode de partitionnement
+ METHODE =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
+
+ LOGICIEL =SIMP(statut='f',typ='TXM'),
+
+ # Corrige les problemes possibles de non-connexite des sous-domaines
+ CORRECTION_CONNEX =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+ # Permet de grouper des mailles dans un meme sous-doamine
+ GROUPAGE =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,),
+ ),
+ # Permet d'appliquer des poids sur certaines mailles
+ POIDS_MAILLES =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,),
+ POIDS =SIMP(statut='f',typ='I'),
+ ),
+ # Prefixe pour le nom des group_ma definissant les sous-domaines
+ NOM_GROUP_MA =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+ # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+ TRAITER_BORDS =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+
+ # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+ # Note : le calcul FETI sera impossible
+ b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+ NOM_GROUP_MA_BORD =SIMP(statut='f',typ='TXM'),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+
+);
+#& MODIF COMMANDE DATE 28/12/2009 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 COURTOIS M.COURTOIS
+
+from Macro.defi_sol_miss_ops import defi_sol_miss_ops
+
+DEFI_SOL_MISS = MACRO(nom="DEFI_SOL_MISS",op=defi_sol_miss_ops, sd_prod=table_sdaster,
+ fr="Définition des données de sol pour Miss", reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ MATERIAU = FACT(statut='o', max='**',
+ fr="Définition des matériaux",
+ E = SIMP(statut='o', typ='R', fr="Module d'Young"),
+ NU = SIMP(statut='o', typ='R', fr="Coefficient de Poisson"),
+ RHO = SIMP(statut='o', typ='R', fr="Masse volumique"),
+ AMOR_HYST = SIMP(statut='o', typ='R', fr="Coefficient d'amortissement"),
+ ),
+ COUCHE = FACT(statut='o', max='**',
+ fr="Définition des couches",
+ regles=(AU_MOINS_UN('EPAIS','SUBSTRATUM'),),
+ SUBSTRATUM= SIMP(statut='f', typ='TXM', into=("OUI","NON"),),
+ EPAIS = SIMP(statut='f', typ='R', fr="Epaisseur de la couche"),
+ RECEPTEUR = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+ SOURCE = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+ NUME_MATE = SIMP(statut='o', typ='I', fr="Numéro du matériau"),
+ ),
+ TITRE = SIMP(statut='f', typ='TXM', max='**',
+ fr="Titre de la table produite"),
+ INFO = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
+ fr="Définition d'un spectre d'excitation turbulente",
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
+ 'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
+ 'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
+ SPEC_LONG_COR_1 =FACT(statut='f',
+ LONG_COR =SIMP(statut='o',typ='R' ),
+ PROF_VITE_FLUI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VISC_CINE =SIMP(statut='o',typ='R' ),
+ ),
+ SPEC_LONG_COR_2 =FACT(statut='f',
+ regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+ LONG_COR =SIMP(statut='o',typ='R' ),
+ PROF_VITE_FLUI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FREQ_COUP =SIMP(statut='f',typ='R',defaut= 0.1 ),
+ PHI0 =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
+ BETA =SIMP(statut='f',typ='R',defaut= 2.7 ),
+ ),
+ SPEC_LONG_COR_3 =FACT(statut='f',
+ regles=(ENSEMBLE('PHI0_1','BETA_1','PHI0_2','BETA_2','FREQ_COUP'),),
+ LONG_COR =SIMP(statut='o',typ='R' ),
+ PROF_VITE_FLUI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ FREQ_COUP =SIMP(statut='f',typ='R',defaut= 0.2 ),
+ PHI0_1 =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+ BETA_1 =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ PHI0_2 =SIMP(statut='f',typ='R',defaut= 4.E-5 ),
+ BETA_2 =SIMP(statut='f',typ='R',defaut= 3.5 ),
+ ),
+ SPEC_LONG_COR_4 =FACT(statut='f',
+ regles=(ENSEMBLE('BETA','GAMMA'),),
+ LONG_COR =SIMP(statut='o',typ='R' ),
+ PROF_VITE_FLUI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TAUX_VIDE =SIMP(statut='o',typ='R' ),
+ BETA =SIMP(statut='f',typ='R',defaut= 2. ),
+ GAMMA =SIMP(statut='f',typ='R',defaut= 4. ),
+ ),
+ SPEC_CORR_CONV_1=FACT(statut='f',
+ LONG_COR_1 =SIMP(statut='o',typ='R' ),
+ LONG_COR_2 =SIMP(statut='f',typ='R' ),
+ VITE_FLUI =SIMP(statut='o',typ='R' ),
+ RHO_FLUI =SIMP(statut='o',typ='R' ),
+ FREQ_COUP =SIMP(statut='f',typ='R' ),
+ K =SIMP(statut='f',typ='R',defaut= 5.8E-3 ),
+ D_FLUI =SIMP(statut='o',typ='R' ),
+ COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+ COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+ into=("AU_YANG","GENERALE","CORCOS") ),
+ ),
+ SPEC_CORR_CONV_2=FACT(statut='f',
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VITE_FLUI =SIMP(statut='o',typ='R' ),
+ FREQ_COUP =SIMP(statut='f',typ='R' ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+ into=("AU_YANG","GENERALE","CORCOS",) ),
+ COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+ COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+ ),
+ SPEC_FONC_FORME =FACT(statut='f',
+ regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+ ENSEMBLE('INTE_SPEC','FONCTION'),),
+ INTE_SPEC =SIMP(statut='f',typ=table_fonction),
+ FONCTION =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+ GRAPPE_1 =SIMP(statut='f',typ='TXM',into=("DEBIT_180","DEBIT_300",) ),
+ NOEUD =SIMP(statut='o',typ=no),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ ),
+ SPEC_EXCI_POINT =FACT(statut='f',
+ regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
+ INTE_SPEC =SIMP(statut='f',typ=table_fonction),
+ GRAPPE_2 =SIMP(statut='f',typ='TXM',
+ into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC",) ),
+# Quels sont les statuts des mots cles à l interieur des deux blocs qui suivent
+ b_inte_spec =BLOC(condition = "INTE_SPEC != None",
+ NATURE =SIMP(statut='o',typ='TXM',max='**',into=("FORCE","MOMENT",) ),
+ ANGL =SIMP(statut='o',typ='R',max='**'),
+ NOEUD =SIMP(statut='o',typ=no,max='**'),
+ ),
+ b_grappe_2 =BLOC(condition = "GRAPPE_2 != None",
+ RHO_FLUI =SIMP(statut='o',typ='R' ),
+ NOEUD =SIMP(statut='o',typ=no),
+ ),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+ fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+ regles=(UN_PARMI('CYCLIQUE','MODELE_GENE','MAILLAGE'),
+ PRESENT_PRESENT('CYCLIQUE','SECTEUR'),
+ EXCLUS('SOUS_STRUC','SECTEUR'),
+ PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+ PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+ CYCLIQUE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('MODE_CYCL','MAILLAGE'),
+ PRESENT_PRESENT('NB_SECTEUR','MAILLAGE'),),
+ MODE_CYCL =SIMP(statut='f',typ=mode_cycl ),
+ NB_SECTEUR =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster ),
+ ),
+ MODELE_GENE =SIMP(statut='f',typ=modele_gene ),
+ SQUELETTE =SIMP(statut='f',typ=squelette ),
+ RECO_GLOBAL =FACT(statut='f',max='**',
+ regles=(EXCLUS('TOUT','GROUP_NO_1'),
+ PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
+ PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
+ PRESENT_PRESENT('GROUP_NO_2','SOUS_STRUC_2'),
+ PRESENT_PRESENT('SOUS_STRUC_1','SOUS_STRUC_2'),),
+ TOUT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno),
+ SOUS_STRUC_1 =SIMP(statut='f',typ='TXM' ),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno),
+ SOUS_STRUC_2 =SIMP(statut='f',typ='TXM' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ DIST_REFE =SIMP(statut='f',typ='R' ),
+ ),
+ NOM_GROUP_MA =FACT(statut='f',max='**',
+ NOM =SIMP(statut='o',typ='TXM' ),
+ SOUS_STRUC =SIMP(statut='o',typ='TXM' ),
+ GROUP_MA =SIMP(statut='o',typ=grma),
+ ),
+ EXCLUSIF =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TRANS =SIMP(statut='f',typ='R',min=3,max=3),
+ ANGL_NAUT =SIMP(statut='f',typ='R',min=3,max=3),
+ SOUS_STRUC =FACT(statut='f',max='**',
+ NOM =SIMP(statut='f',typ='TXM' ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ),
+ SECTEUR =FACT(statut='f',max='**',
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 CANO V.CANO
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier"
+ +" pour les calculs métallurgiques.",
+ HIST_EXP =FACT(statut='o',max='**',
+ VALE =SIMP(statut='o',typ='R',max='**'),
+ ),
+ TEMP_MS =FACT(statut='o',max='**',
+ SEUIL =SIMP(statut='o',typ='R'),
+ AKM =SIMP(statut='o',typ='R'),
+ BKM =SIMP(statut='o',typ='R'),
+ TPLM =SIMP(statut='o',typ='R'),
+ ),
+ GRAIN_AUST =FACT(statut='f',max='**',
+ DREF =SIMP(statut='f',typ='R'),
+ A =SIMP(statut='f',typ='R'),
+ ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def depl_interne_prod(DEPL_GLOBAL,**args ):
+ if AsType(DEPL_GLOBAL) == cham_no_sdaster: return cham_no_sdaster
+ if AsType(DEPL_GLOBAL) == evol_elas : return evol_elas
+ if AsType(DEPL_GLOBAL) == dyna_trans : return dyna_trans
+ if AsType(DEPL_GLOBAL) == dyna_harmo : return dyna_harmo
+ if AsType(DEPL_GLOBAL) == mode_meca : return mode_meca
+ if AsType(DEPL_GLOBAL) == mode_meca_c : return mode_meca_c
+ raise AsException("type de concept resultat non prevu")
+
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Calculer le champ de déplacement à l'intérieur d'une sous-structure statique",
+ DEPL_GLOBAL =SIMP(statut='o',typ=(cham_no_sdaster,mode_meca,mode_meca_c,evol_elas,dyna_trans,dyna_harmo),),
+ SUPER_MAILLE =SIMP(statut='o',typ=ma,),
+ NOM_CAS =SIMP(statut='f',typ='TXM',defaut=" "),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Détruit des concepts utilisateurs dans la base GLOBALE ou des objets JEVEUX",
+ op_init=ops.detruire,
+ regles=(UN_PARMI('CONCEPT','OBJET',),),
+ CONCEPT =FACT(statut='f',max='**',
+ regles=(DERIVABLE('NOM'),),
+ NOM =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter",max='**'),
+ ),
+ OBJET =FACT(statut='f',max='**',
+ CLASSE =SIMP(statut='f',typ='TXM',into=('G','V','L'),defaut='G'),
+ CHAINE =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ POSITION =SIMP(statut='f',typ='I' ,max='**'),
+ ),
+ ALARME =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',),
+ INFO =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),
+);
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
+ fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ BASE_MODALE =FACT(statut='o',
+ regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+ MODE_MECA =SIMP(statut='o',typ=mode_meca ),
+ BANDE =SIMP(statut='f',typ='R',validators=NoRepeat(),max=2),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ b_bande =BLOC(condition = "BANDE != None",
+ AMOR_UNIF =SIMP(statut='o',typ='R' ),
+ ),
+ b_nume_ordre =BLOC(condition = "NUME_ORDRE != None",
+ AMOR_REDUIT =SIMP(statut='o',typ='R',max='**'),
+ ),
+ ),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca),
+# MODE_STAT devrait etre dans EXCIT car est utile et obligatoire que si NOM_CMP=depl_r, on pourrait
+# ainsi rajouter un bloc du genre b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",
+ EXCIT =FACT(statut='o',
+ INTE_SPEC =SIMP(statut='o',typ=table_fonction),
+ NUME_VITE_FLUI =SIMP(statut='f',typ='I' ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+ MODAL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ b_modal_non = BLOC(condition = "(MODAL == None) or (MODAL == 'NON')",
+ regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'),),
+ NUME_ORDRE_I =SIMP(statut='f',typ='I',max='**'),
+ NOEUD_I =SIMP(statut='f',typ=no,max='**'),
+ b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+ regles=(EXCLUS('CHAM_NO','NOEUD'),),
+# on devrait rajouter EXCLUS('GRANDEUR','CHAM_NO') pour eviter ambiguite car CHAM_NO => GRANDEUR='EFFO'
+# cela impliquerait d'enlever la valeur par defaut a GRANDEUR
+ NUME_ORDRE_J =SIMP(statut='o',typ='I',max='**'),
+ CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster),
+ NOEUD =SIMP(statut='f',typ=no,max='**'),
+ b_noeud =BLOC(condition = "NOEUD != None",
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ ),
+ GRANDEUR =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+ into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP
+ DERIVATION =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+ ),
+ b_noeud_i =BLOC(condition = "NOEUD_I != None",
+ NOEUD_J =SIMP(statut='o',typ=no,max='**'),
+ NOM_CMP_I =SIMP(statut='o',typ='TXM',max='**'),
+ NOM_CMP_J =SIMP(statut='o',typ='TXM',max='**'),
+ NOEUD =SIMP(statut='o',typ=no,max='**'),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+# ne serait-il pas bien que NOEUD et NOM_CMP soient facultatifs, car l'information peut etre contenue dans
+# NOEUD_I, NOM_CMP_I ... => modif. du Fortran
+ GRANDEUR =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+ into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP_I
+ DERIVATION =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+ ),
+ ),
+ b_modal_oui = BLOC(condition = "(MODAL == 'OUI')",
+# dans ce cas, y-a-t-il vraiment la possibilite d'une matrice interspectrale avec plusieurs termes
+ NUME_ORDRE_I =SIMP(statut='o',typ='I',max='**'),
+ NUME_ORDRE_J =SIMP(statut='o',typ='I',max='**'),
+ GRANDEUR =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+ into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+ DERIVATION =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+# dans le cas MODAL=OUI, GRANDEUR peut-il etre different de EFFO et doit il etre impose a EFFO On devrait
+# pouvoir supprimer GRANDEUR et DERIVATION ici
+ ),
+
+ ),
+ REPONSE =FACT(statut='f',
+ regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+ DERIVATION =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+ FREQ_MIN =SIMP(statut='f',typ='R' ),
+ FREQ_MAX =SIMP(statut='f',typ='R' ),
+ PAS =SIMP(statut='f',typ='R' ),
+ b_defaut_freq =BLOC(condition = "FREQ_MIN == NONE",
+ FREQ_EXCIT =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+ NB_POIN_MODE =SIMP(statut='f',typ='I',defaut= 50 ),
+ ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 24/06/2009 AUTEUR ZENTNER I.ZENTNER
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 ZENTNER I.ZENTNER
+from Macro.dyna_iss_vari_ops import dyna_iss_vari_ops
+#
+DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonction,
+ fr="Calcul du spectre de réponse ou de la reponse temporelle sismique incoherente par decomposition spectrale",
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ NOM_CMP =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut=0.999 ),
+ INTERF =FACT(statut='o',
+ GROUP_NO_INTERF =SIMP(statut='o',typ=grma ,max='**'),
+ MODE_INTERF =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
+ ),
+ MATR_COHE =FACT(statut='o',
+ VITE_ONDE =SIMP(statut='o',typ='R'),
+ PARA_ALPHA =SIMP(statut='f',typ='R',defaut=0.5),
+ ),
+# FONC_MULT =SIMP(statut='f',typ='R' ),
+ FREQ_INIT =SIMP(statut='o',typ='R' ),
+ NB_FREQ =SIMP(statut='o',typ='I' ),
+ PAS =SIMP(statut='o',typ='R' ),
+# LIST_FREQ =SIMP(statut='o',typ='liste' ),
+ UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33),
+ UNITE_RESU_IMPE = SIMP(statut='f',typ='I',defaut=32),
+ TYPE = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII"), defaut="ASCII"),
+#
+ MATR_GENE = FACT(statut='o',
+ MATR_MASS = SIMP(statut='o',typ=(matr_asse_gene_r ) ),
+ MATR_RIGI = SIMP(statut='o',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+ MATR_AMOR = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+ ),
+#
+ OPTION = SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
+#
+ INFO =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+ ) ;
+#& MODIF COMMANDE DATE 13/10/2009 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ANDRIAM H.ANDRIAMBOLOLONA
+def dyna_line_harm_prod(MATR_RIGI,**args):
+ if (AsType(MATR_RIGI) == matr_asse_depl_r) : return dyna_harmo
+ elif (AsType(MATR_RIGI) == matr_asse_depl_c) : return dyna_harmo
+ elif (AsType(MATR_RIGI) == matr_asse_pres_c) : return acou_harmo
+ elif (AsType(MATR_RIGI) == matr_asse_gene_r) : return harm_gene
+ elif (AsType(MATR_RIGI) == matr_asse_gene_c) : return harm_gene
+ raise AsException("type de concept resultat non prevu")
+
+DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op= 60,sd_prod=dyna_line_harm_prod,
+ fr="Calcul de la réponse dynamique complexe d'un système à une excitation harmonique",
+ reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
+ PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
+ PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
+ UN_PARMI('FREQ','LIST_FREQ'),
+ CONCEPT_SENSIBLE('ENSEMBLE'),),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ MATR_MASS =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+ MATR_RIGI =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_pres_c
+ ,matr_asse_gene_r,matr_asse_gene_c ) ),
+ MATR_AMOR =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ MATR_IMPE_PHI =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+ b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : RESULTAT obligatoire",
+ RESULTAT =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+ ),
+ EXCIT =FACT(statut='o',max='**',
+ regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+ UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),
+ ),
+ VECT_ASSE =SIMP(statut='f',position='global',typ=(cham_no_sdaster,vect_asse_gene) ),
+ CHARGE =SIMP(statut='f',position='global', typ=char_meca ),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+ FONC_MULT_C =SIMP(statut='f',typ=(fonction_c,formule_c) ),
+ COEF_MULT_C =SIMP(statut='f',typ='C' ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_MULT =SIMP(statut='f',typ='R' ),
+ PHAS_DEG =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PUIS_PULS =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_modele_char =BLOC(condition = " CHARGE != None ",
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ ),
+ b_modele_vect =BLOC(condition = " VECT_ASSE != None ",
+ MODELE =SIMP(statut='f',typ=modele_sdaster ),
+ ),
+ EXCIT_RESU =FACT(statut='f',max='**',
+ RESULTAT =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+ COEF_MULT_C =SIMP(statut='o',typ='C' ),
+ ),
+ b_matr_gene =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_gene_r,)",
+ fr="Methode de resolution matrice generalisee",
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS",) ),
+
+ b_ldlt_gene =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mumps_gene =BLOC( condition = "METHODE=='LDLT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_mumps_gene =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+ ),
+
+ b_matr_phys =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_depl_r,matr_asse_pres_c,)",
+ fr="Methode de resolution matrice sur ddl physique",
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS",) ),
+
+ b_mult_front_phys=BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+
+ b_ldlt_phys =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps_phys =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_mumps_phys =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+) ;
+# Rajouter test icompatibilite vect_asse et sensibilite
+# Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation
+# presents dans le Fortran
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans,
+ fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque",
+ reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+# regles=(UN_PARMI('WILSON','DIFF_CENTRE','ADAPT'),),
+ regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),
+ CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='f',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ MATR_MASS =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_RIGI =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_AMOR =SIMP(statut='f',typ=matr_asse_depl_r ),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca),
+ NEWMARK =FACT(statut='f',
+ ALPHA =SIMP(statut='f',typ='R',defaut= 0.25 ),
+ DELTA =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ ),
+ WILSON =FACT(statut='f',
+ THETA =SIMP(statut='f',typ='R',defaut= 1.4 ),
+ ),
+ DIFF_CENTRE =FACT(statut='f',
+ ),
+ ADAPT =FACT(statut='f',
+ ),
+ ETAT_INIT =FACT(statut='f',
+ regles=(AU_MOINS_UN('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT', 'ACCE_INIT'),
+ PRESENT_ABSENT('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT', 'ACCE_INIT'),),
+ DYNA_TRANS =SIMP(statut='f',typ=dyna_trans ),
+ b_dyna_trans =BLOC(condition = "DYNA_TRANS != None",
+ regles=(EXCLUS('NUME_INIT','INST_INIT' ),),
+ NUME_INIT =SIMP(statut='f',typ='I' ),
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ b_inst_init =BLOC(condition = "INST_INIT != None",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+ DEPL_INIT =SIMP(statut='f',typ=cham_no_sdaster),
+ VITE_INIT =SIMP(statut='f',typ=cham_no_sdaster),
+ ACCE_INIT =SIMP(statut='f',typ=cham_no_sdaster),
+ ),
+ EXCIT =FACT(statut='f',max='**',
+ regles=(UN_PARMI('CHARGE','VECT_ASSE'),
+ EXCLUS('CHARGE','COEF_MULT'),
+ EXCLUS('FONC_MULT','COEF_MULT'),
+ EXCLUS('ACCE','COEF_MULT'),
+ PRESENT_ABSENT('ACCE','FONC_MULT'),
+ PRESENT_PRESENT('ACCE','VITE','DEPL'),
+ # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+ ),
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster),
+ CHARGE =SIMP(statut='f',typ=char_meca ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_MULT =SIMP(statut='f',typ='R' ),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+ ACCE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VITE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DEPL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ EXCIT_RESU =FACT(statut='f',max='**',
+ RESULTAT =SIMP(statut='o',typ=dyna_trans ),
+ COEF_MULT =SIMP(statut='o',typ='R' ),
+ ),
+ AMOR_MODAL =FACT(statut='f',
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ NB_MODE =SIMP(statut='f',typ='I',defaut= 9999 ),
+ ),
+
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",into=("CENTRALISE","CENTRALISE")),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+
+ INCREMENT =FACT(statut='o',max='**',
+ regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ FONC_INST =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ PAS =SIMP(statut='f',typ='R' ),
+ b_pas =BLOC(condition = "PAS != None",
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ INST_FIN =SIMP(statut='f',typ='R' ),
+ ),
+ b_list_fonc =BLOC(condition = "LIST_INST != None or FONC_INST != None",
+ regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+ NUME_FIN =SIMP(statut='f',typ='I' ),
+ INST_FIN =SIMP(statut='f',typ='R' ),
+ ),
+ VITE_MIN =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+ COEF_MULT_PAS =SIMP(statut='f',typ='R',defaut= 1.1 ),
+ COEF_DIVI_PAS =SIMP(statut='f',typ='R',defaut= 1.33334 ),
+ PAS_LIMI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+ NMAX_ITER_PAS =SIMP(statut='f',typ='I',defaut= 16 ),
+ PAS_CALCUL =SIMP(statut='f',typ='I',defaut= 1 ),
+ ),
+ ARCHIVAGE =FACT(statut='f',
+ regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramétres de sensibilité.",
+ ang="List of sensitivity parameters",
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 12/04/2010 AUTEUR MICHEL S.MICHEL
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GREFFET N.GREFFET
+#
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
+ fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire",
+ UIinfo={"groupes":("Résolution",)},
+ regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+ CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ MASS_DIAG =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+ EXCIT =FACT(statut='o',max='**',
+ regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
+ PRESENT_PRESENT('ACCE','VITE','DEPL'),
+ # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+ ),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","SUIV","DIDI")),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ DEPL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ACCE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ VITE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ EXCIT_GENE =FACT(statut='f',max='**',
+ FONC_MULT =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
+ VECT_GENE =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
+ ),
+ CONTACT =SIMP(statut='f',typ=char_contact),
+ SOUS_STRUC =FACT(statut='f',min=01,max='**',
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+ CAS_CHARGE =SIMP(statut='o',typ='TXM' ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ AMOR_RAYL_RIGI = SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE"),),
+ AMOR_MODAL =FACT(statut='f',
+ regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**' ),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ NB_MODE =SIMP(statut='f',typ='I',defaut= 9999 ),
+ REAC_VITE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ PROJ_MODAL =FACT(statut='f',max='**',
+ MODE_MECA =SIMP(statut='o',typ=mode_meca),
+ NB_MODE =SIMP(statut='f',typ='I',defaut= 9999 ),
+ regles=(PRESENT_PRESENT('MASS_GENE','RIGI_GENE'),),
+ MASS_GENE =SIMP(statut='f',typ=matr_asse_gene_r),
+ RIGI_GENE =SIMP(statut='f',typ=matr_asse_gene_r),
+ AMOR_GENE =SIMP(statut='f',typ=matr_asse_gene_r),
+ ),
+ COMP_INCR =C_COMP_INCR(),
+ COMP_ELAS =FACT(statut='f',max='**',
+ RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
+ "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("IMPLICITE",)),
+ ),
+#-------------------------------------------------------------------
+ b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+ ETAT_INIT =FACT(statut='o',
+ regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+ EXCLUS('EVOL_NOLI','DEPL',),
+ EXCLUS('EVOL_NOLI','VITE'),
+ EXCLUS('EVOL_NOLI','ACCE'),
+ EXCLUS('EVOL_NOLI','SIGM',),
+ EXCLUS('EVOL_NOLI','VARI',),
+ EXCLUS('NUME_ORDRE','INST'), ),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ VITE =SIMP(statut='f',typ=cham_no_sdaster),
+ ACCE =SIMP(statut='f',typ=cham_no_sdaster),
+ SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+ VARI =SIMP(statut='f',typ=cham_elem),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ NUME_DIDI =SIMP(statut='f',typ='I'),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),),
+ b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+ ETAT_INIT =FACT(statut='f',
+ regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+ EXCLUS('EVOL_NOLI','DEPL',),
+ EXCLUS('EVOL_NOLI','VITE'),
+ EXCLUS('EVOL_NOLI','ACCE'),
+ EXCLUS('EVOL_NOLI','SIGM',),
+ EXCLUS('EVOL_NOLI','VARI',),
+ EXCLUS('NUME_ORDRE','INST'), ),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ VITE =SIMP(statut='f',typ=cham_no_sdaster),
+ ACCE =SIMP(statut='f',typ=cham_no_sdaster),
+ SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+ VARI =SIMP(statut='f',typ=cham_elem),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ NUME_DIDI =SIMP(statut='f',typ='I'),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),),
+#-------------------------------------------------------------------
+ INCREMENT =FACT(statut='o',
+ regles=(EXCLUS('NUME_INST_FIN','INST_FIN'),),
+ LIST_INST =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ NUME_INST_INIT =SIMP(statut='f',typ='I'),
+ NUME_INST_FIN =SIMP(statut='f',typ='I'),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ ERRE_TEMPS =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+ fr="Adaptation temporelle pour les modélisations HM instationnaires",
+ ang="Time adaptation for unstationary HM models"),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+ ),
+#-------------------------------------------------------------------
+ SCHEMA_TEMPS =FACT(statut='o',
+ SCHEMA =SIMP(statut='o',min=1,max=1,typ='TXM',
+ into=("DIFF_CENT","TCHAMWA","NEWMARK","HHT","THETA_METHODE","KRENK"),),
+ COEF_MASS_SHIFT =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+ b_tchamwa = BLOC(condition="SCHEMA=='TCHAMWA'",
+ PHI =SIMP(statut='f',typ='R',defaut= 1.05),),
+
+ b_newmark = BLOC(condition="SCHEMA=='NEWMARK'",
+ BETA =SIMP(statut='f',typ='R',defaut= 0.25),
+ GAMMA =SIMP(statut='f',typ='R',defaut= 0.5),),
+
+ b_hht = BLOC(condition="SCHEMA=='HHT'",
+ ALPHA =SIMP(statut='f',typ='R',defaut= -0.3 ),
+ MODI_EQUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),),
+
+ b_theta = BLOC(condition="SCHEMA=='THETA_METHODE'",
+ THETA =SIMP(statut='f',typ='R',defaut= 1.,val_min=0.5,val_max=100. ),),
+
+ b_krenk = BLOC(condition="SCHEMA=='KRENK'",
+ KAPPA =SIMP(statut='f',typ='R',defaut= 1.0,val_min=1.0,val_max=100. ),),
+
+ b_explicit= BLOC(condition="SCHEMA=='TCHAMWA'or SCHEMA=='DIFF_CENT'",
+ STOP_CFL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+ FORMULATION =SIMP(statut='o',typ='TXM',into=("ACCELERATION",),),),
+
+ b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
+ FORMULATION =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
+ ),
+ NEWTON =FACT(statut='d',
+ REAC_INCR =SIMP(statut='f',typ='I',defaut= 1,val_min=0 ),
+ PREDICTION =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
+ MATRICE =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+ REAC_ITER =SIMP(statut='f',typ='I',defaut= 0,val_min=0),
+ REAC_ITER_ELAS =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ PAS_MINI_ELAS =SIMP(statut='f',typ='R',defaut=0.0E+0),
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+ b_mult_front =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
+ MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+#-------------------------------------------------------------------
+ CONVERGENCE =FACT(statut='d',
+ regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
+ b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None",
+ regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+ 'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),),
+ SIGM_REFE =SIMP(statut='f',typ='R'),
+ EPSI_REFE =SIMP(statut='f',typ='R'),
+ FLUX_THER_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD1_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD2_REFE =SIMP(statut='f',typ='R'),
+ VARI_REFE =SIMP(statut='f',typ='R'),
+ ),
+ RESI_REFE_RELA =SIMP(statut='f',typ='R'),
+ RESI_GLOB_MAXI =SIMP(statut='f',typ='R'),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
+ RESI_COMP_RELA =SIMP(statut='f',typ='R'),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10),
+ ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25),
+ TYPE =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
+ b_plateau =BLOC(condition = "TYPE == 'PLATEAU' ",
+
+ PLATEAU_ITER =SIMP(statut='f',typ='I',defaut=3, val_min =2),
+ PLATEAU_RELA =SIMP(statut='f',typ='R',defaut=1E-3),
+ ),
+ ARRET =SIMP(statut='f',typ='TXM',defaut="OUI"),
+
+ ),
+#-------------------------------------------------------------------
+ OBSERVATION =FACT(statut='f',max='**',
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ SUIVI_DDL =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+ b_suivi =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+ regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
+ PRESENT_PRESENT('MAILLE','POINT'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ POINT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEPL","VITE","ACCE","SIEF_ELGA",
+ "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NUME_SUIVI =SIMP(statut='o',typ='I' ,min=1,max=4),
+ VALE_MAX =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
+ VALE_MIN =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
+ b_non_suivi =BLOC(condition = "SUIVI_DDL == 'NON' ",
+ regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ POINT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+ "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ PAS_OBSE =SIMP(statut='f',typ='I'),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),),
+ ),
+
+ AFFICHAGE = FACT(statut='f',max=16,
+
+ UNITE = SIMP(statut='f',typ='I',val_min=1),
+
+ LONG_R = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
+ PREC_R = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
+ LONG_I = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
+
+ NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","MINIMUM",
+ "ITER_NEWT",
+ "INCR_TPS",
+ "RESI_RELA","RELA_NOEU",
+ "RESI_MAXI","MAXI_NOEU",
+ "RESI_REFE","REFE_NOEU",
+ "RELI_ITER","RELI_COEF",
+ "PILO_PARA",
+ "MATR_ASSE",
+ "ITER_DEBO",
+ "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
+ "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+ "SUIV_1","SUIV_2","SUIV_3","SUIV_4",
+ ),
+ ),
+ b_residu = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
+ NOM_COLONNE == 'RESI_MAXI' or\
+ NOM_COLONNE == 'RESI_REFE' or\
+ NOM_COLONNE == 'CTCD_GEOM' or\
+ NOM_COLONNE == 'STANDARD' ",
+ INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+#-------------------------------------------------------------------
+ ARCHIVAGE =FACT(statut='f',
+ regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+ EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE",)),
+ ),
+
+#-------------------------------------------------------------------
+ CRIT_FLAMB =FACT(statut='f',min=1,max=1,
+ NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3),
+ CHAR_CRIT =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
+ fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+ RIGI_GEOM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ bloc_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+ DDL_EXCLUS =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+ into=('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+ 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+ 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+ 'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON','DCX',
+ 'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+ 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+ 'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+ 'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+ INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+ ),
+ MODE_VIBR =FACT(statut='f',min=1,max=1,
+ MATR_RIGI =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+ NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3,
+ fr="Nombre de fréquences propres à calculer"),
+ BANDE =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Valeur des deux fréquences délimitant la bande de recherche",),
+ INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+ ),
+#-------------------------------------------------------------------
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité",
+ ang="List of sensitivity parameters"),
+#-------------------------------------------------------------------
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
+ fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ BASE_ELAS_FLUI =SIMP(statut='o',typ=melasflu_sdaster ),
+ EXCIT =FACT(statut='o',
+ INTE_SPEC_GENE =SIMP(statut='o',typ=table_fonction),
+ ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 19/04/2010 AUTEUR GREFFET N.GREFFET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op= 74,sd_prod=tran_gene,
+ fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées"
+ +" par superposition modale ou par sous structuration",
+ reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'),
+ PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="EULER",
+ into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+ MASS_GENE =SIMP(statut='o',typ=matr_asse_gene_r ),
+ RIGI_GENE =SIMP(statut='o',typ=matr_asse_gene_r ),
+ AMOR_GENE =SIMP(statut='f',typ=matr_asse_gene_r ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca ),
+ MODE_CORR =SIMP(statut='f',typ=(mult_elas,mode_meca),),
+
+ COUPLAGE_EDYOS =FACT(statut='f',max=1,
+ VITE_ROTA = SIMP(statut='o',typ='R' ),
+ PAS_TPS_EDYOS = SIMP(statut='o',typ='R' ),
+ UNITE = SIMP(statut='f',typ='I',defaut=45),
+ ),
+
+ ETAT_INIT =FACT(statut='f',
+ regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+ EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+ RESU_GENE =SIMP(statut='f',typ=tran_gene ),
+ b_resu_gene =BLOC(condition = "RESU_GENE != None",
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ DEPL_INIT_GENE =SIMP(statut='f',typ=vect_asse_gene ),
+ VITE_INIT_GENE =SIMP(statut='f',typ=vect_asse_gene ),
+ ),
+ INCREMENT =FACT(statut='o',max='**',
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ INST_FIN =SIMP(statut='o',typ='R' ),
+ PAS =SIMP(statut='f',typ='R' ),
+ VERI_PAS =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ VITE_MIN =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+ COEF_MULT_PAS =SIMP(statut='f',typ='R',defaut= 1.1 ),
+ COEF_DIVI_PAS =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+ PAS_LIMI_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+ NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+ NMAX_ITER_PAS =SIMP(statut='f',typ='I',defaut= 16 ),
+ PAS_MAXI =SIMP(statut='f',typ='R' ),
+ ),
+ ARCHIVAGE =FACT(statut='f',
+ regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ ),
+
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 20 ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ LAMBDA =SIMP(statut='f',typ='R',defaut= 10. ),
+
+ EXCIT =FACT(statut='f',max='**',
+ regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+ UN_PARMI('VECT_GENE','NUME_ORDRE',),
+ PRESENT_PRESENT('ACCE','VITE','DEPL'),
+ PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+ PRESENT_ABSENT('NUME_ORDRE','VECT_GENE','COEF_MULT'),
+ EXCLUS('MULT_APPUI','CORR_STAT'),
+ PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+ PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+ VECT_GENE =SIMP(statut='f',typ=vect_asse_gene ),
+ NUME_ORDRE =SIMP(statut='f',typ='I' ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_MULT =SIMP(statut='f',typ='R' ),
+ ACCE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ VITE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ DEPL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ b_loca =BLOC(condition= "DIRECTION != None",
+ regles=(EXCLUS('NOEUD','GROUP_NO'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ CORR_STAT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ D_FONC_DT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ D_FONC_DT2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ CHOC =FACT(statut='f',max='**',
+ regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD_1','GROUP_NO_1' ),
+ EXCLUS('NOEUD_2','GROUP_NO_2'),
+ PRESENT_ABSENT('GROUP_MA','NOEUD_2','GROUP_NO_2'),
+ PRESENT_ABSENT('MAILLE','NOEUD_2','GROUP_NO_2'),),
+ INTITULE =SIMP(statut='f',typ='TXM' ),
+ GROUP_MA =SIMP(statut='f',typ=grma,max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no),
+ NOEUD_2 =SIMP(statut='f',typ=no),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno),
+ OBSTACLE =SIMP(statut='o',typ=table_fonction),
+ ORIG_OBST =SIMP(statut='f',typ='R',min=3,max=3),
+ NORM_OBST =SIMP(statut='o',typ='R',min=3,max=3),
+ ANGL_VRIL =SIMP(statut='f',typ='R' ),
+ JEU =SIMP(statut='f',typ='R',defaut= 1. ),
+ DIST_1 =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+ DIST_2 =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+ SOUS_STRUC_1 =SIMP(statut='f',typ='TXM' ),
+ SOUS_STRUC_2 =SIMP(statut='f',typ='TXM' ),
+ REPERE =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+ RIGI_NOR =SIMP(statut='f',typ='R' ),
+ AMOR_NOR =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ RIGI_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ AMOR_TAN =SIMP(statut='f',typ='R' ),
+ FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","COULOMB","COULOMB_STAT_DYNA") ),
+ b_coulomb =BLOC(condition="FROTTEMENT=='COULOMB'",
+ COULOMB =SIMP(statut='o',typ='R' ),),
+ b_coulomb_stat_dyna =BLOC(condition="FROTTEMENT=='COULOMB_STAT_DYNA'",
+ COULOMB_STAT =SIMP(statut='o',typ='R' ),
+ COULOMB_DYNA =SIMP(statut='o',typ='R' ),),
+ LAME_FLUIDE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ b_lame =BLOC(condition="LAME_FLUIDE=='OUI'",
+ ALPHA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ BETA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ CHI =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ DELTA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+ ),
+ VERI_CHOC =FACT(statut='f',max='**',
+ STOP_CRITERE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ ),
+ FLAMBAGE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+ EXCLUS('NOEUD_2','GROUP_NO_2'),),
+ NOEUD_1 =SIMP(statut='f',typ=no),
+ NOEUD_2 =SIMP(statut='f',typ=no),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno),
+ OBSTACLE =SIMP(statut='o',typ=table_fonction),
+ ORIG_OBST =SIMP(statut='f',typ='R',max='**'),
+ NORM_OBST =SIMP(statut='o',typ='R',max='**'),
+ ANGL_VRIL =SIMP(statut='f',typ='R' ),
+ JEU =SIMP(statut='f',typ='R',defaut= 1. ),
+ DIST_1 =SIMP(statut='f',typ='R' ),
+ DIST_2 =SIMP(statut='f',typ='R' ),
+ REPERE =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+ RIGI_NOR =SIMP(statut='f',typ='R' ),
+ FNOR_CRIT =SIMP(statut='f',typ='R' ),
+ FNOR_POST_FL =SIMP(statut='f',typ='R' ),
+ RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+ ),
+ ANTI_SISM =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+ UN_PARMI('NOEUD_2','GROUP_NO_2'),),
+ NOEUD_1 =SIMP(statut='f',typ=no),
+ NOEUD_2 =SIMP(statut='f',typ=no),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno),
+ RIGI_K1 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ RIGI_K2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ SEUIL_FX =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ C =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ PUIS_ALPHA =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ DX_MAX =SIMP(statut='f',typ='R',defaut= 1. ),
+ ),
+ RELA_EFFO_DEPL =FACT(statut='f',max='**',
+ NOEUD =SIMP(statut='o',typ=no),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ RELATION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ RELA_TRANSIS =FACT(statut='f',max='**',
+ NOEUD =SIMP(statut='o',typ=no),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ RELATION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ RELA_EFFO_VITE =FACT(statut='f',max='**',
+ NOEUD =SIMP(statut='o',typ=no),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ RELATION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ b_itmi =BLOC(condition = "METHODE=='ITMI'",
+ regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+ BASE_ELAS_FLUI =SIMP(statut='f',typ=melasflu_sdaster ),
+ NUME_VITE_FLUI =SIMP(statut='f',typ='I' ),
+ ETAT_STAT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ PREC_DUREE =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+ CHOC_FLUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ NB_MODE =SIMP(statut='f',typ='I' ),
+ NB_MODE_FLUI =SIMP(statut='f',typ='I' ),
+ TS_REG_ETAB =SIMP(statut='f',typ='R' ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ IMPRESSION =FACT(statut='f',max='**',
+ regles=(EXCLUS('TOUT','NIVEAU'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NIVEAU =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ INST_FIN =SIMP(statut='f',typ='R' ),
+ ),
+
+
+ SOLVEUR =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS","MULT_FRONT",) ),
+
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ ) ;
+#& MODIF COMMANDE DATE 12/05/2009 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
+ UIinfo={"groupes":("Impression",)},
+ fr="Engendre des tests pour la non régression du code (pour développeurs)",
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ FORMAT =SIMP(statut='f',typ='TXM',into=("OBJET",) ),
+ FORMAT_R =SIMP(statut='f',typ='TXM',defaut="1PE20.13"),
+ PREC_R =SIMP(statut='f',typ='TXM',defaut="1.E-10"),
+#============================================================================
+ b_aster =BLOC( condition = "FORMAT==None",
+ CO =SIMP(statut='o',typ=(cham_gd_sdaster,resultat_sdaster,table_sdaster),
+ validators=NoRepeat(),max='**'),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',defaut="SOMM_ABS",into=("SOMME","SOMM_ABS","MAX","MIN") ),
+ ),
+#============================================================================
+ b_objet =BLOC( condition = "FORMAT=='OBJET'",
+ regles=(UN_PARMI('TOUT','CO'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ CO =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+
+from Macro.exec_logiciel_ops import exec_logiciel_ops
+def exec_logiciel_prod(self, MAILLAGE, **args):
+ if MAILLAGE != None:
+ mcf = MAILLAGE[0]
+ self.type_sdprod(mcf['MAILLAGE'], maillage_sdaster)
+ return None
+
+EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_logiciel_prod,
+ fr="Exécute un logiciel ou une commande système depuis Aster",
+ UIinfo={"groupes":("Outils métier",)},
+
+ regles = (AU_MOINS_UN('LOGICIEL', 'MAILLAGE'),),
+
+ LOGICIEL = SIMP(statut='f', typ='TXM'),
+ ARGUMENT = SIMP(statut='f', max='**', typ='TXM'),
+
+ MAILLAGE = FACT(statut='f',
+ FORMAT = SIMP(statut='o', typ='TXM', into=("GMSH", "GIBI", "SALOME")),
+ UNITE_GEOM = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=16,
+ fr="Unité logique définissant le fichier (fort.N) contenant les données géométriques (datg)"),
+ UNITE = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=19,
+ fr="Unité logique définissant le fichier (fort.N) produit par le mailleur"),
+ MAILLAGE = SIMP(statut='o', typ=CO),
+ ),
+
+ CODE_RETOUR_MAXI = SIMP(statut='f', typ='I', defaut=0, val_min=-1,
+ fr="Valeur maximale du code retour toléré (-1 pour l'ignorer)"),
+
+ INFO = SIMP(statut='f', typ='I', defaut=2, into=(1,2),),
+)
+#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+
+def extr_mode_prod(FILTRE_MODE,**args):
+ vale=FILTRE_MODE[0]['MODE']
+ if AsType(vale) == mode_meca : return mode_meca
+ if AsType(vale) == mode_meca_c : return mode_meca_c
+ if AsType(vale) == mode_gene : return mode_gene
+ raise AsException("type de concept resultat non prevu")
+
+EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
+ reentrant='n',fr="Extraire séléctivement des modes des structures de données modales",
+ UIinfo={"groupes":("Résolution",)},
+ FILTRE_MODE =FACT(statut='o',max='**',
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','NUME_MODE','NUME_MODE_EXCLU','FREQ_MIN','CRIT_EXTR',),),
+ MODE =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_gene ) ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE_EXCLU =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ FREQ_MIN =SIMP(statut='f',typ='R' ),
+ CRIT_EXTR =SIMP(statut='f',typ='TXM',into=("MASS_EFFE_UN","MASS_GENE") ),
+ b_freq_min =BLOC(condition = "FREQ_MIN != None",
+ FREQ_MAX =SIMP(statut='o',typ='R' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ b_crit_extr =BLOC(condition = "CRIT_EXTR != None",
+ regles=(AU_MOINS_UN('SEUIL','SEUIL_X','SEUIL_Y','SEUIL_Z'),),
+ SEUIL =SIMP(statut='f',typ='R'),
+ SEUIL_X =SIMP(statut='f',typ='R'),
+ SEUIL_Y =SIMP(statut='f',typ='R'),
+ SEUIL_Z =SIMP(statut='f',typ='R'),
+ ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ IMPRESSION =FACT(statut='f',
+ CUMUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRIT_EXTR =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 18/05/2010 AUTEUR MEUNIER S.MEUNIER
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+
+def extr_resu_prod(RESULTAT,**args):
+ if AsType(RESULTAT) == evol_elas : return evol_elas
+ if AsType(RESULTAT) == evol_noli : return evol_noli
+ if AsType(RESULTAT) == evol_ther : return evol_ther
+ if AsType(RESULTAT) == evol_varc : return evol_varc
+ if AsType(RESULTAT) == dyna_trans : return dyna_trans
+ if AsType(RESULTAT) == dyna_harmo : return dyna_harmo
+ if AsType(RESULTAT) == acou_harmo : return acou_harmo
+ if AsType(RESULTAT) == mode_meca : return mode_meca
+ if AsType(RESULTAT) == mode_acou : return mode_acou
+ if AsType(RESULTAT) == mult_elas : return mult_elas
+ if AsType(RESULTAT) == fourier_elas : return fourier_elas
+
+ raise AsException("type de concept resultat non prevu")
+
+EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Extraire des champs au sein d'une SD Résultat",
+ regles=(CONCEPT_SENSIBLE('SEPARE'),
+ #REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+ mode_acou,evol_ther,evol_noli,evol_varc,
+ mult_elas,fourier_elas,fourier_ther ) ),
+
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+
+ ARCHIVAGE =FACT(statut='f',
+ regles=( UN_PARMI('NUME_ORDRE', 'INST', 'FREQ', 'NUME_MODE',
+ 'NOEUD_CMP', 'LIST_INST', 'LIST_FREQ', 'LIST_ORDRE',
+ 'NOM_CAS', 'LIST_ARCH', 'PAS_ARCH' ),
+ EXCLUS( 'CHAM_EXCLU','NOM_CHAM' ), ),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster),
+ PAS_ARCH =SIMP(statut='f',typ='I'),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM'),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 COURTOIS M.COURTOIS
+
+def extr_table_prod(TYPE_RESU,**args):
+ defs = globals()
+ typ = TYPE_RESU.lower()
+ if defs.get(typ) is not None:
+ return defs[typ]
+ raise AsException("type de concept resultat non prevu")
+
+EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Extraire d'une table des concepts Code_Aster",
+ TYPE_RESU =SIMP(statut='o',typ='TXM',),
+
+ TABLE =SIMP(statut='o',typ=(table_sdaster,table_container)),
+
+ NOM_PARA =SIMP(statut='o',typ='TXM'),
+
+ FILTRE =FACT(statut='f',min=1,max='**',
+ NOM_PARA =SIMP(statut='o',typ='TXM'),
+ CRIT_COMP =SIMP(statut='f',typ='TXM',defaut="EQ",
+ into=("EQ","LT","GT","NE","LE","GE","VIDE",
+ "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+ b_vale =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+ VALE =SIMP(statut='f',typ='R'),
+ VALE_I =SIMP(statut='f',typ='I'),
+ VALE_C =SIMP(statut='f',typ='C'),
+ VALE_K =SIMP(statut='f',typ='TXM'),),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 PELLET J.PELLET
+
+def factoriser_prod(MATR_ASSE,**args):
+ if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+ if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
+ if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+ if AsType(MATR_ASSE) == matr_asse_temp_c : return matr_asse_temp_c
+ if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+ if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
+ raise AsException("type de concept resultat non prevu")
+
+FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
+ fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+
+ "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué",
+ reentrant='f', UIinfo={"groupes":("Résolution",)},
+ regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
+ EXCLUS('BLOC_FIN','DDL_FIN'),),
+ MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+ matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+
+ # mots clés pour solveur LDLT et MULT_FRONT et MUMPS:
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ NPREC =SIMP(statut='f',typ='I',defaut=8),
+
+ # mots clés pour solveur LDLT :
+ BLOC_DEBUT =SIMP(statut='f',typ='I',val_min=1,),
+ DDL_DEBUT =SIMP(statut='f',typ='I',val_min=1,),
+ BLOC_FIN =SIMP(statut='f',typ='I',val_min=1,),
+ DDL_FIN =SIMP(statut='f',typ='I',val_min=1,),
+
+ # mots clés pour solveur MUMPS :
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut='AUTO',into=('NONSYM','SYMGEN','SYMDEF','AUTO')),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+
+ # mots clés pour solveur GCPC et PETSc :
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",fr="Paramètres de la factorisation incomplete",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 03/08/2009 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
+ UIinfo={"groupes":("Gestion du travail",)},
+#
+# FIN est appelé prématurément en cas d'exception ("SIGUSR1", ArretCPUError,
+# NonConvergenceError..., erreurs <S> ou erreurs <F> récupérées).
+# En cas d'ArretCPUError, on limite au maximum le travail à faire dans FIN.
+# Pour cela, on force certains mots-clés dans Execution/E_JDC.py.
+#
+ FORMAT_HDF =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+ typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ RETASSAGE =SIMP(fr="provoque le retassage de la base GLOBALE",
+ statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ INFO_RESU =SIMP(fr="provoque l'impression des informations sur les structures de données",
+ statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+ UNITE =SIMP(statut='f',typ='I',defaut=6),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
+ reentrant='n',fr="Crée une fonction constante paramètrée par l'abscisse curviligne",
+ UIinfo={"groupes":("Fonction",)},
+ TYPE_FLUI_STRU =SIMP(statut='o',typ=(type_flui_stru) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+def formule_prod(self,VALE,VALE_C,**args):
+ if VALE != None:
+ return formule
+ elif VALE_C != None:
+ return formule_c
+
+def form_pyth_ops(self,d):
+ NOM_PARA=self.etape['NOM_PARA']
+ VALE =self.etape['VALE']
+ VALE_C =self.etape['VALE_C']
+ if type(NOM_PARA) not in (list, tuple):
+ NOM_PARA = [NOM_PARA,]
+ if self.sd == None:
+ return
+ if VALE != None :
+ texte = ''.join(VALE.splitlines())
+ elif VALE_C != None :
+ texte = ''.join(VALE_C.splitlines())
+ self.sd.setFormule(NOM_PARA, texte.strip())
+
+FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
+ sd_prod=formule_prod,UIinfo={"groupes":("Fonction",)},
+ fr="Définit une formule réelle ou complexe à partir de son expression mathématique",
+ regles=(UN_PARMI('VALE','VALE_C',),),
+ VALE =SIMP(statut='f',typ='TXM'),
+ VALE_C =SIMP(statut='f',typ='TXM'),
+ NOM_PARA =SIMP(statut='o',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
+ fr="Génération de la fonction temporelle à partir d une matrice interspectrale",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ INTE_SPEC =SIMP(statut='o',typ=table_fonction),
+ NUME_VITE_FLUI =SIMP(statut='f',typ='I' ),
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+ b_interpol_oui =BLOC(condition = "INTERPOL == 'OUI' ",fr="Parametres cas interpolation autorisee",
+ DUREE_TIRAGE =SIMP(statut='f',typ='R' ),
+ FREQ_INIT =SIMP(statut='f',typ='R' ),
+ FREQ_FIN =SIMP(statut='f',typ='R' ),
+ ),
+ NB_POIN =SIMP(statut='f',typ='I'),
+ NB_TIRAGE =SIMP(statut='f',typ='I',defaut= 1 ),
+ INIT_ALEA =SIMP(statut='f',typ='I'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+def gene_matr_alea_prod(MATR_MOYEN,**args ):
+ if (AsType(MATR_MOYEN) == matr_asse_gene_r ) : return matr_asse_gene_r
+ if (AsType(MATR_MOYEN) == macr_elem_dyna) : return macr_elem_dyna
+ raise AsException("type de concept resultat non prevu")
+
+GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op= 27,
+#sd_prod=matr_asse_gene_r,
+sd_prod=gene_matr_alea_prod,
+ fr="Générer une réalisation d'une matrice aléatoire réelle sym. déf. positive ou d'un macro élément dynamique",
+ reentrant='n',
+ UIinfo={"groupes":("Matrice",)},
+ MATR_MOYEN = SIMP(statut='o', typ=(matr_asse_gene_r,macr_elem_dyna)),
+
+# cas matrice generalisee
+ b_matr =BLOC( condition = "AsType(MATR_MOYEN) in (matr_asse_gene_r,)",
+ COEF_VAR = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+ fr="coefficient de variation de la matrice a generer" ),
+ ),
+# cas macr_elem_dyna
+ b_macr =BLOC( condition = "AsType(MATR_MOYEN) in (macr_elem_dyna,)",
+ fr="cas macr_elem_dyna (sous-structuratio)",
+ COEF_VAR_RIGI = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+ fr="coefficient de variation de la matrice de raideur" ),
+ COEF_VAR_MASS = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+ fr="coefficient de variation de la matrice de masse" ),
+ COEF_VAR_AMOR = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+ fr="coefficient de variation de la matrice d'amortissement" ),),
+
+ INIT_ALEA =SIMP(statut='f',typ='I'),
+) ;
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.gene_vari_alea_ops import gene_vari_alea_ops,gene_vari_alea_init
+GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
+ op_init=gene_vari_alea_init,op=gene_vari_alea_ops,
+ sd_prod=reel,reentrant='n',
+ fr="Générer une réalisation d'une variable aléatoire réelle de loi de probabilité donnée (Gamma ou Exponentielle)",
+ UIinfo={"groupes":("Fonction",)},
+ TYPE = SIMP(statut='f', typ='TXM', into=("EXP_TRONQUEE", "EXPONENTIELLE", "GAMMA"), defaut="GAMMA"),
+ b_gamma =BLOC(condition = "TYPE == 'GAMMA' ",fr="Parametres loi gamma",
+ VALE_MOY = SIMP(statut='f', typ='R', defaut=1.),
+ BORNE_INF = SIMP(statut='f', typ='R', defaut=0.),
+ COEF_VAR = SIMP(statut='f', typ='R', defaut=0.1),
+ ),
+ b_expo =BLOC(condition = "TYPE == 'EXPONENTIELLE' ",fr="Parametres loi exponentielle",
+ VALE_MOY = SIMP(statut='f', typ='R', defaut=0.),
+ BORNE_INF = SIMP(statut='f', typ='R', defaut=-1.),
+ ),
+ b_expo_tronq =BLOC(condition = "TYPE == 'EXP_TRONQUEE' ",fr="Parametres loi exponentielle tronquee",
+ VALE_MOY = SIMP(statut='f', typ='R', defaut=0.),
+ BORNE_INF = SIMP(statut='f', typ='R', defaut=-1.),
+ BORNE_SUP = SIMP(statut='f', typ='R', defaut=1.),
+ ),
+ INIT_ALEA =SIMP(statut='f',typ='I'),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+IMPR_CO=PROC(nom="IMPR_CO",op=17,
+ UIinfo={"groupes":("Impression",)},
+ fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)",
+ regles=(UN_PARMI('CONCEPT','CHAINE','TOUT' ),),
+
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ NIVEAU =SIMP(statut='f',typ='I',defaut=2,into=(-1,0,1,2) ),
+ ATTRIBUT =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+ CONTENU =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+ BASE =SIMP(statut='f',typ='TXM',defaut="G",into=(" ","G","V","L") ),
+ CONCEPT =FACT(statut='f',max='**',
+ regles=(DERIVABLE('NOM'),),
+ NOM =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter",max='**'),),
+ CHAINE =SIMP(statut='f',typ='TXM'),
+ POSITION =SIMP(statut='f',typ='I',defaut=1),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+) ;
+#& MODIF COMMANDE DATE 22/12/2009 AUTEUR TORKHANI M.TORKHANI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 Mohamed TORKHANI
+
+from Macro.impr_diag_campbell_ops import impr_diag_campbell_ops
+
+IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",op=impr_diag_campbell_ops, fr="Tracer du Diagramme de Campbell",
+ UIinfo={"groupes":("Post-traitements",)},
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ MODES =SIMP(statut='o',typ=table_container),
+ NFREQ_camp =SIMP(statut='o',typ='I' ),
+ TYP_PREC =SIMP(statut='f',typ='I',defaut= 1, into=(1,2) ),
+ TYP_TRI =SIMP(statut='f',typ='I',defaut= 2, into=(0,1,2) ),
+ UNIT_FLE =SIMP(statut='o',typ='I' ,val_min=1),
+ UNIT_TOR =SIMP(statut='o',typ='I' ,val_min=1),
+ UNIT_LON =SIMP(statut='o',typ='I' ,val_min=1),
+ UNIT_TOT =SIMP(statut='o',typ='I' ,val_min=1),
+ UNIT_INT =SIMP(statut='o',typ='I' ,val_min=1),
+ L_S =SIMP(statut='f',typ='R', defaut= 1., max='**'),
+);
+#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN
+# 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 COURTOIS M.COURTOIS
+from Macro.impr_fonction_ops import impr_fonction_ops
+
+IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
+ fr="Imprime le contenu d'objets de type fonction ou liste de réels dans un fichier destiné à un traceur de courbe",
+ UIinfo={"groupes":("Fonction",)},
+ FORMAT =SIMP(statut='o',typ='TXM',position='global',defaut='TABLEAU',
+ into=("TABLEAU","AGRAF","XMGRACE",),),
+ b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+ fr="Mots-clés propres à XMGRACE",
+ PILOTE =SIMP(statut='f',typ='TXM',defaut='',
+ into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+ fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+ UNITE =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ ),
+ b_agraf = BLOC(condition = "FORMAT == 'AGRAF'",
+ fr="Mots-clés propres à AGRAF",
+ UNITE =SIMP(statut='o',typ='I',defaut=25,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ UNITE_DIGR =SIMP(statut='o',typ='I',defaut=26,
+ fr="Unité logique définissant le fichier dans lequel on écrit les directives Agraf"),
+ ),
+ # unite pour TABLEAU dans le bloc de mise en forme spécifique
+
+ COURBE =FACT(statut='o',max='**',fr="Définition de la fonction à tracer",
+ regles=(UN_PARMI('FONCTION','LIST_RESU','FONC_X','ABSCISSE'),),
+ FONCTION =SIMP(statut='f',typ=(fonction_sdaster, formule, fonction_c, nappe_sdaster),
+ fr="Fonction réelle ou complexe", ),
+ LIST_RESU =SIMP(statut='f',typ=listr8_sdaster,
+ fr="Liste des ordonnees d'une fonction réelle définie par deux listes", ),
+ FONC_X =SIMP(statut='f',typ=(fonction_sdaster,formule),
+ fr="Fonction abscisses d'une fonction paramétrique",),
+ ABSCISSE =SIMP(statut='f',typ='R',max='**',
+ fr="Valeurs des abscisses", ),
+ b_fonction =BLOC(condition = "FONCTION != None",
+ LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ),
+ ),
+ b_fonction_c =BLOC(condition = "AsType(FONCTION) in (fonction_c, formule_c)",
+ fr="Fonction complexe définie par le mot-clé fonction",
+ PARTIE =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+ ),
+ b_list_resu =BLOC(condition = "LIST_RESU != None",
+ LIST_PARA =SIMP(statut='o',typ=listr8_sdaster ),
+ ),
+ b_fonc_x =BLOC(condition = "FONC_X != None",
+ FONC_Y =SIMP(statut='o',typ=(fonction_sdaster,formule),fr="Fonction ordonnées d une fonction paramétrique" ),
+ LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ),
+ ),
+ b_vale_resu =BLOC(condition = "ABSCISSE != None",
+ ORDONNEE =SIMP(statut='o',typ='R',max='**',
+ fr="Valeurs des ordonnées"),
+ ),
+
+ # mots-clés utilisant uniquement aux formats autres que TABLEAU
+ # mais ce serait trop pénible de devoir les supprimer quand on change de format
+ # donc on ne les met pas dans un bloc
+ # "pseudo" bloc mise en forme :
+ LEGENDE =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à la fonction" ),
+ STYLE =SIMP(statut='f',typ='I',val_min=0,
+ fr="Style de la ligne représentant la fonction",),
+ COULEUR =SIMP(statut='f',typ='I',val_min=0,
+ fr="Couleur associée à la fonction",),
+ MARQUEUR =SIMP(statut='f',typ='I',val_min=0,
+ fr="Type du marqueur associé à la fonction",),
+ FREQ_MARQUEUR =SIMP(statut='f',typ='I',defaut=0,
+ fr="Fréquence d impression du marqueur associé à la fonction", ),
+ # fin bloc mise en forme
+
+ TRI =SIMP(statut='f',typ='TXM',defaut="N",
+ fr="Choix du tri effectué sur les abscisses ou sur les ordonnées",
+ into=("N","X","Y","XY","YX") ),
+ ),
+ # Mise en page du tableau ou du graphique
+ b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+ fr="Mots-clés propres au format Tableau",
+ UNITE =SIMP(statut='o',typ='I',defaut=8,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ TITRE =SIMP(statut='f',typ='TXM',
+ fr="Titre associé au graphique" ),
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',
+ fr="Sous-titre du graphique" ),
+ SEPARATEUR =SIMP(statut='f',typ='TXM',defaut=' ',
+ fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+ COMMENTAIRE =SIMP(statut='f',typ='TXM',defaut='#',
+ fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+ COMM_PARA =SIMP(statut='f',typ='TXM',defaut='',
+ fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+ DEBUT_LIGNE =SIMP(statut='f',typ='TXM',defaut='',
+ fr="Caractère de debut de ligne"),
+ FIN_LIGNE =SIMP(statut='f',typ='TXM',defaut='\n',
+ fr="Caractère de fin de ligne"),
+ ),
+ b_graphique = BLOC(condition = "FORMAT != 'TABLEAU'",
+ fr="Mise en page du graphique",
+ TITRE =SIMP(statut='f',typ='TXM',
+ fr="Titre associé au graphique" ),
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',
+ fr="Sous-titre du graphique" ),
+ BORNE_X =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Intervalles de variation des abscisses"),
+ BORNE_Y =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Intervalles de variation des ordonnées"),
+ ECHELLE_X =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+ fr="Type d'échelle pour les abscisses" ),
+ ECHELLE_Y =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+ fr="Type d'échelle pour les ordonnées" ),
+ GRILLE_X =SIMP(statut='f',typ='R',max=1,val_min=0.,
+ fr="Pas du quadrillage vertical" ),
+ GRILLE_Y =SIMP(statut='f',typ='R',max=1,val_min=0.,
+ fr="Pas du quadrillage horizontal" ),
+ LEGENDE_X =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à l'axe des abscisses" ),
+ LEGENDE_Y =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à l'axe des ordonnées" ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
+ fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT",
+ UIinfo={"groupes":("Impression",)},
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ GENE =FACT(statut='o',max='**',
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'LIST_INST','LIST_FREQ','TOUT_MODE','TOUT_INST','LIST_ORDRE'),
+ EXCLUS('TOUT_MODE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'LIST_INST','LIST_FREQ','TOUT_ORDRE','TOUT_INST','LIST_ORDRE'),
+ EXCLUS('TOUT_INST','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'LIST_INST','LIST_FREQ','TOUT_ORDRE','LIST_ORDRE'),
+ EXCLUS('TOUT_CMP_GENE','NUME_CMP_GENE'),
+ EXCLUS('TOUT_CHAM','NOM_CHAM'),
+ EXCLUS('TOUT_PARA','NOM_PARA'),),
+# faut-il faire des blocs selon le type de RESU_GENE
+ RESU_GENE =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ TOUT_INST =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ TOUT_MODE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_CMP_GENE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ NUME_CMP_GENE =SIMP(statut='f',typ='I',max='**'),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',max='**'),
+ TOUT_PARA =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',max='**'),
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO_CMP_GENE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ INFO_GENE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 03/08/2009 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
+ UIinfo={"groupes":("Impression",)},
+ fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)",
+ ENTITE =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
+ into=("DISQUE","MEMOIRE","REPERTOIRE",
+ "OBJET","ATTRIBUT","SYSTEME","ENREGISTREMENT") ),
+ b_objet =BLOC(condition = "(ENTITE=='OBJET')",
+ NOMOBJ =SIMP(fr="nom d'objet",statut='f',typ='TXM' ),
+ NUMOC =SIMP(fr="numéro d objet de collection",statut='f',typ='I' ),
+ NOMOC =SIMP(fr="nom d'objet de collection",statut='f',typ='TXM' ),
+ ),
+ b_attribut =BLOC(condition = "(ENTITE=='ATTRIBUT')",
+ NOMOBJ =SIMP(fr="nom de collection",statut='f',typ='TXM' ),
+ NOMATR =SIMP(fr="nom d attribut de collection",statut='f',typ='TXM',
+ into=('$$DESO','$$IADD','$$IADM','$$NOM','$$LONG',
+ '$$LONO','$$LUTI','$$NUM') ),
+ ),
+ b_systeme =BLOC(condition = "(ENTITE=='SYSTEME')",
+ CLASSE =SIMP(statut='o',typ='TXM',into=('G','V') ),
+ NOMATR =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',
+ into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$MARQ',
+ '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+ '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+ '$$TLEC','$$TECR','$$IADM','$$ACCE','$$USADI') ),
+ ),
+ b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+ CLASSE =SIMP(statut='f',typ='TXM',into=('G','V',' '),defaut=' '),
+ ),
+ b_disque =BLOC(condition = "(ENTITE=='DISQUE')",
+ CLASSE =SIMP(statut='f',typ='TXM' ,into=('G','V',' '),defaut=' '),
+ ),
+ b_enregist =BLOC(condition = "(ENTITE=='ENREGISTREMENT')",
+ CLASSE =SIMP(statut='f',typ='TXM' ,into=('G','V'),defaut='G'),
+ NUMERO =SIMP(statut='o',typ='I',val_min=1),
+ INFO =SIMP(statut='f',typ='I',into=(1,2),defaut=1),
+ ),
+ IMPRESSION =FACT(statut='f',
+ NOM =SIMP(statut='f',typ='TXM' ),
+ UNITE =SIMP(statut='f',typ='I'),
+ ),
+ COMMENTAIRE =SIMP(statut='f',typ='TXM' ),
+) ;
+#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 CORUS M.CORUS
+
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
+ UIinfo={"groupes":("Impression",)},
+ fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO",
+ MACR_ELEM_DYNA =SIMP(statut='o',typ=macr_elem_dyna ),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+ into=("MISS_3D","IDEAS","CADYRO","PLEXUS") ),
+
+ b_plexus =BLOC(condition = "FORMAT == 'IDEAS'",
+ UNITE =SIMP(statut='f',typ='I',defaut=30),
+ VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+ ),
+
+ b_ideas =BLOC(condition = "FORMAT == 'PLEXUS'",
+ UNITE =SIMP(statut='f',typ='I',defaut=30),
+ VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+ ),
+
+ b_miss_3d =BLOC(condition = "FORMAT == 'MISS_3D'",
+ regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+ UNITE =SIMP(statut='f',typ='I',defaut= 26 ),
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ AMOR_REDUIT =SIMP(statut='f',typ='R' ,max='**'),
+ LIST_AMOR =SIMP(statut='f',typ=listr8_sdaster ),
+ GROUP_MA_INTERF =SIMP(statut='o',typ=grma ,max='**'),
+ GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
+ GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
+ GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
+ GROUP_MA_CONTROL=SIMP(statut='f',typ=grma,max='**'),
+ FORMAT_R =SIMP(statut='f',typ='TXM',defaut="1PE12.5",into=("1PE12.5","1PE16.9") ),
+ IMPR_MODE_MECA =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ IMPR_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_cadyro =BLOC(condition = "FORMAT == 'CADYRO'",
+ SQUELETTE =SIMP(statut='f',typ=squelette ),
+ UNITE_MODE_MECA =SIMP(statut='f',typ='I',defaut= 26 ),
+ UNITE_MODE_STAT =SIMP(statut='f',typ='I',defaut= 27 ),
+ UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut= 28 ),
+ IMPR_MODE_MECA =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ IMPR_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+) ;
+#& MODIF COMMANDE DATE 13/10/2009 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DEVESA G.DEVESA
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
+ UIinfo={"groupes":("Impression",)},
+ fr="Impression des données d'entrée pour une étude sismique avec MISS3D",
+ regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
+ PRESENT_PRESENT('INST_INIT','INST_FIN'),
+ PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
+ MACR_ELEM_DYNA =SIMP(statut='o',typ=macr_elem_dyna ),
+ EXCIT =FACT(statut='f',max='**',
+ regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ COEF_MULT =SIMP(statut='f',typ='R' ),
+ ),
+ EXCIT_SOL =FACT(statut='f',max='**',
+ DIRECTION =SIMP(statut='o',typ='R',min=3,max=3),
+ FONC_SIGNAL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",
+ into=("DEPL","VITE","ACCE","FORC",) ),
+ ),
+ SOURCE_SOL =FACT(statut='f',max='**',
+ POINT =SIMP(statut='o',typ='R',min=3,max=3),
+ DIRECTION =SIMP(statut='o',typ='R',min=3,max=3),
+ FONC_SIGNAL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",
+ into=("DEPL","VITE","ACCE","FORC",) ),
+ ),
+ SOURCE_FLUIDE =FACT(statut='f',max='**',
+ POINT =SIMP(statut='o',typ='R',min=3,max=3),
+ FONC_SIGNAL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",
+ into=("DEPL","VITE","ACCE","FORC",) ),
+ ),
+ DIRE_ONDE =SIMP(statut='f',typ='R',min=3,max=3),
+ INST_INIT =SIMP(statut='f',typ='R' ),
+ INST_FIN =SIMP(statut='f',typ='R' ),
+ FREQ_INIT =SIMP(statut='f',typ='R' ),
+ FREQ_FIN =SIMP(statut='f',typ='R' ),
+ PAS =SIMP(statut='o',typ='R' ),
+ UNITE =SIMP(statut='f',typ='I',defaut= 26 ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 16/11/2009 AUTEUR DURAND C.DURAND
+# 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 FOURNIER I.FOURNIER
+#
+from Macro.impr_oar_ops import impr_oar_ops
+IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
+ fr="Impression au format OAR",
+ UIinfo={"groupes":("Impression",)},
+ TYPE_CALC = SIMP(statut='o', typ='TXM',into=('COMPOSANT', 'MEF', 'TUYAUTERIE')),
+ b_composant =BLOC(condition = "TYPE_CALC == 'COMPOSANT' ",
+ regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+ DIAMETRE = SIMP(statut='o', typ='R'),
+ ORIGINE = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+ COEF_U = SIMP(statut='f', typ='R', defaut=1.0),
+ ANGLE_C = SIMP(statut='o', typ='R', defaut=0.0),
+ REVET = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+ RESU_MECA = FACT(statut='f', max='**',
+ NUM_CHAR = SIMP(statut='o', typ='I'),
+ TYPE = SIMP(statut='o', typ='TXM', defaut='FX', into=('FX', 'FY', 'FZ', 'MX', 'MY', 'MZ', 'PRE')),
+ TABLE = SIMP(statut='o', typ=table_sdaster),
+ TABLE_S = SIMP(statut='f', typ=table_sdaster)),
+ RESU_THER = FACT(statut='f', max='**',
+ NUM_TRAN = SIMP(statut='o', typ='I'),
+ TABLE_T = SIMP(statut='o', typ=table_sdaster),
+ TABLE_TEMP= SIMP(statut='o', typ=table_sdaster),
+ TABLE_S = SIMP(statut='f', typ=table_sdaster),
+ TABLE_ST = SIMP(statut='f', typ=table_sdaster)),
+ ),
+ b_mef = BLOC(condition = "TYPE_CALC == 'MEF' ",
+ regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+ DIAMETRE = SIMP(statut='o', typ='R'),
+ ORIGINE = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+ COEF_U = SIMP(statut='f', typ='R', defaut=1.0),
+ RESU_MECA = FACT(statut='f', max='**',
+ AZI = SIMP(statut='o', typ='R'),
+ TABLE_T = SIMP(statut='o', typ=table_sdaster),
+ TABLE_F = SIMP(statut='o', typ=table_sdaster),
+ TABLE_P = SIMP(statut='o', typ=table_sdaster),
+ TABLE_CA = SIMP(statut='o', typ=table_sdaster)),
+ RESU_THER=FACT(statut='f', max='**',
+ AZI = SIMP(statut='o', typ='R'),
+ NUM_CHAR = SIMP(statut='o', typ='I'),
+ TABLE_T = SIMP(statut='o', typ=table_sdaster),
+ TABLE_TI = SIMP(statut='o', typ=table_sdaster)),
+ ),
+ b_tuyauterie = BLOC(condition = "TYPE_CALC == 'TUYAUTERIE' ",
+ RESU_MECA = FACT(statut='o', max='**',
+ NUM_CHAR = SIMP(statut='o', typ='I'),
+ TABLE = SIMP(statut='o', typ=table_sdaster),
+ MAILLAGE = SIMP(statut='o', typ=maillage_sdaster)),
+ ),
+ UNITE = SIMP(statut='f',typ='I',defaut=38),
+ AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+ );
+#& MODIF COMMANDE DATE 12/04/2010 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 SELLENET N.SELLENET
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
+ UIinfo={"groupes":("Impression",)},
+ fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)",
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+
+ FORMAT =SIMP(statut='f',typ='TXM',position='global',defaut="RESULTAT",
+ into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
+
+ b_format_resultat =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT",
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ ),
+
+ b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS",
+ UNITE =SIMP(statut='f',typ='I',defaut=30),
+ VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+ ),
+
+ b_format_aster =BLOC(condition="FORMAT=='ASTER'",fr="unité logique d'impression au format ASTER",
+ UNITE =SIMP(statut='f',typ='I',defaut=26),
+ ),
+
+ b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="unité logique d'impression et version CASTEM",
+ UNITE =SIMP(statut='f',typ='I',defaut=37),
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+ ),
+
+ b_format_ensight =BLOC(condition="FORMAT=='ENSIGHT'",fr="unité logique d'impression au format ENSIGHT",
+ UNITE =SIMP(statut='f',typ='I',defaut=31),
+ ),
+
+ b_format_med =BLOC(condition="FORMAT=='MED'",fr="unité logique d'impression au format MED",
+ UNITE =SIMP(statut='f',typ='I',defaut=80),
+ ),
+
+ b_format_gmsh =BLOC(condition="FORMAT=='GMSH'",fr="unité logique d'impression et version GMSH",
+ UNITE =SIMP(statut='f',typ='I',defaut=37),
+ VERSION =SIMP(statut='f',typ='R',defaut=1.2,into=(1.0,1.2)),
+ ),
+
+
+ RESTREINT =FACT(statut='f', max=1,
+ fr="Pour réduire une ou plusieurs sd_resultat sur un ensemble de mailles",
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+ TOUT_GROUP_MA =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ TOUT_GROUP_NO =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+ ),
+
+ RESU =FACT(statut='o',max='**',
+
+ regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE'),
+ EXCLUS('CHAM_GD','RESULTAT'),),
+ MAILLAGE =SIMP(statut='f',typ=(maillage_sdaster,squelette)),
+ CHAM_GD =SIMP(statut='f',typ=cham_gd_sdaster),
+ RESULTAT =SIMP(statut='f',typ=resultat_sdaster),
+
+ b_info_med =BLOC(condition="FORMAT=='MED'",
+ INFO_MAILLAGE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+
+ b_sensibilite =BLOC(condition="RESULTAT != None",
+ fr="Définition des paramètres de sensibilité",
+ ang="Definition of sensitivity parameters",
+ regles=(DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),),
+
+ b_partie =BLOC(condition="""(AsType(RESULTAT) in (dyna_harmo, acou_harmo) or
+ AsType(CHAM_GD) != carte_sdaster) and FORMAT in ('CASTEM', 'GMSH', 'MED')""",
+ PARTIE =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+ ),
+ b_extrac =BLOC(condition="RESULTAT != None",
+ fr="extraction d un champ de grandeur",
+ regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
+ 'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ ANGL =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+
+ b_acce_reel =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+###
+ b_parametres =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+ regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+ TOUT_PARA =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',max='**'),
+ FORM_TABL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON","EXCEL") ),
+ ),
+###
+ b_cmp=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+ ((FORMAT == 'CASTEM')or(FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'ENSIGHT')or(FORMAT == 'MED'))""",
+ fr="sélection des composantes",
+ regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+###
+ b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
+ fr="sélection des composantes et des entités toplogiques",
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ TYPE_CHAM =SIMP(statut='f',typ='TXM',defaut="SCALAIRE",
+ into=("VECT_2D","VECT_3D","SCALAIRE","TENS_2D","TENS_3D"),),
+ b_scal =BLOC(condition = "TYPE_CHAM=='SCALAIRE'",
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**' ),),
+ b_vect_2d =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+ b_vect_3d =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+ b_tens_2d =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+ b_tens_3d =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+ ),
+###
+ b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+ ((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'MED'))""",
+ fr="sélection des entités topologiques",
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+###
+ b_valeurs=BLOC(condition="(FORMAT == 'RESULTAT')",
+ fr="sélection sur les valeurs",
+ VALE_MAX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ VALE_MIN =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ BORNE_SUP =SIMP(statut='f',typ='R'),
+ BORNE_INF =SIMP(statut='f',typ='R'),
+ IMPR_COOR =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ FORMAT_R =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+ ),
+
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
+ UIinfo={"groupes":("Résolution",)},
+ MATR_A =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+ MATR_B =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+ TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+ fr="Type d analyse" ),
+ b_dynamique =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+ fr="Recheche du nombre de fréquences propres",
+ FREQ_MIN =SIMP(statut='f',typ='R',defaut= 0.E+0 ,fr="Borne inférieure de l intervalle" ),
+ FREQ_MAX =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+ ),
+ b_mode_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+ fr="Recherche du nombre de charges critiques",
+ CHAR_CRIT_MIN =SIMP(statut='o',typ='R',fr="Borne inférieure de l intervalle" ),
+ CHAR_CRIT_MAX =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+ ),
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+ UNITE =SIMP(statut='f',typ='I',defaut=8),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+) ;
+#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+from Macro.impr_table_ops import impr_table_ops
+
+IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
+ UIinfo={"groupes":("Impression",)},
+ fr="Impression du contenu d'une table dans un fichier",
+ regles=(DERIVABLE("TABLE"),),
+ TABLE =SIMP(statut='o',typ=table_sdaster),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="TABLEAU",
+ into=("TABLEAU","ASTER","TABLEAU_CROISE","AGRAF","XMGRACE",),),
+ b_pilote =BLOC(condition = "FORMAT == 'XMGRACE'",
+ fr="Mots-clés propres à XMGRACE",
+ PILOTE =SIMP(statut='f',typ='TXM',defaut='',
+ into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+ fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+ UNITE =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ ),
+ b_unite =BLOC(condition = "FORMAT != 'XMGRACE'",
+ UNITE =SIMP(statut='f',typ='I',defaut=8,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ ),
+ FILTRE =FACT(statut='f',max='**',
+ NOM_PARA =SIMP(statut='o',typ='TXM'),
+ CRIT_COMP =SIMP(statut='f',typ='TXM',defaut="EQ",
+ into=("EQ","LT","GT","NE","LE","GE","VIDE",
+ "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI"),),
+ b_vale =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VALE_I =SIMP(statut='f',typ='I',max='**'),
+ VALE_C =SIMP(statut='f',typ='C',max='**'),
+ VALE_K =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ b_crit =BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ),
+ ),
+ TRI =FACT(statut='f',
+ NOM_PARA =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ ORDRE =SIMP(statut='f',typ='TXM',defaut="CROISSANT", # max='**',
+ into=("CROISSANT","DECROISSANT") ),
+ ),
+ PAGINATION =SIMP(statut='f',typ='TXM',max='**'),
+ FORMAT_R =SIMP(statut='f',typ='TXM',defaut="E12.5"),
+ FORMAT_C =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+ into=("MODULE_PHASE","REEL_IMAG") ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ IMPR_FONCTION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+ # Mise en page du tableau ou du graphique
+ b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+ fr="Mots-clés propres au format Tableau",
+ SEPARATEUR =SIMP(statut='f',typ='TXM',defaut=' ',
+ fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+ COMMENTAIRE =SIMP(statut='f',typ='TXM',defaut='#',
+ fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+ COMM_PARA =SIMP(statut='f',typ='TXM',defaut='',
+ fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+ DEBUT_LIGNE =SIMP(statut='f',typ='TXM',defaut='',
+ fr="Caractère de debut de ligne"),
+ FIN_LIGNE =SIMP(statut='f',typ='TXM',defaut='\n',
+ fr="Caractère de fin de ligne"),
+ ),
+
+ # mise en forme pour les formats qui passent par Graph
+ b_forme =BLOC(condition = "FORMAT == 'XMGRACE'",
+ fr="Données de mise en forme du graphique",
+ # pour la courbe
+ LEGENDE =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à la fonction" ),
+ STYLE =SIMP(statut='f',typ='I',val_min=0,
+ fr="Style de la ligne représentant la fonction",),
+ COULEUR =SIMP(statut='f',typ='I',val_min=0,
+ fr="Couleur associée à la fonction",),
+ MARQUEUR =SIMP(statut='f',typ='I',val_min=0,
+ fr="Type du marqueur associé à la fonction",),
+ FREQ_MARQUEUR =SIMP(statut='f',typ='I',defaut=0,
+ fr="Fréquence d impression du marqueur associé à la fonction", ),
+ # format du graphique
+ BORNE_X =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Intervalles de variation des abscisses"),
+ BORNE_Y =SIMP(statut='f',typ='R',min=2,max=2,
+ fr="Intervalles de variation des ordonnées"),
+ ECHELLE_X =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+ fr="Type d'échelle pour les abscisses" ),
+ ECHELLE_Y =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+ fr="Type d'échelle pour les ordonnées" ),
+ GRILLE_X =SIMP(statut='f',typ='R',max=1,val_min=0.,
+ fr="Pas du quadrillage vertical" ),
+ GRILLE_Y =SIMP(statut='f',typ='R',max=1,val_min=0.,
+ fr="Pas du quadrillage horizontal" ),
+ LEGENDE_X =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à l'axe des abscisses" ),
+ LEGENDE_Y =SIMP(statut='f',typ='TXM',
+ fr="Légende associée à l'axe des ordonnées" ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Débranchement vers un fichier de commandes secondaires",
+ sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+ UNITE = SIMP(statut='o',typ='I'),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ",
+ sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
+ NOM_AFNOR =SIMP(statut='o',typ='TXM' ),
+ TYPE_MODELE =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+ VARIANTE =SIMP(statut='o',typ='TXM',
+ into=("A","B","C","D","E","F","G","H","I","J",
+ "K","L","M","N","O","P","Q","R","S","T","U","V",
+ "W","X","Y","Z",) ),
+ TYPE_VALE =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+ NOM_MATER =SIMP(statut='o',typ='TXM' ),
+ UNITE =SIMP(statut='f',typ='I',defaut= 32 ),
+ EXTRACTION =FACT(statut='f',max=99,
+ COMPOR =SIMP(statut='o',typ='TXM' ),
+ TEMP_EVAL =SIMP(statut='o',typ='R' ),
+ ),
+ UNITE_LONGUEUR =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
+ fr="Récupère différentes informations propres à l'exécution en cours",
+ reentrant='n',
+ UIinfo={"groupes":("Gestion du travail",)},
+
+ regles=(),
+ LISTE_INFO =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=3,
+ into=("CPU_RESTANT","UNITE_LIBRE","ETAT_UNITE"),),
+ b_etat_unite =BLOC(condition = "'ETAT_UNITE' in LISTE_INFO",
+ regles=(UN_PARMI('UNITE','FICHIER'),),
+ UNITE =SIMP(statut='f',typ='I',val_min=1,val_max=99,max=1,
+ fr="Unité logique dont on veut obtenir l'état",),
+ FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),
+ fr="Nom du fichier dont on veut obtenir l'état",),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 COURTOIS M.COURTOIS
+from Macro.info_fonction_ops import info_fonction_ops
+def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args):
+ if (RMS != None): return table_sdaster
+ if (MAX != None): return table_sdaster
+ if (NOCI_SEISME != None): return table_sdaster
+ if (ECART_TYPE != None): return table_sdaster
+ if (NORME != None): return table_sdaster
+ raise AsException("type de concept resultat non prevu")
+
+INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_fonction_prod
+ ,fr="Opérations mathématiques sur des concepts de type fonction, fonction_c ou nappe",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('MAX','RMS','NOCI_SEISME','NORME','ECART_TYPE',),),
+ RMS =FACT(statut='f',fr="Valeur RMS d'une fonction",max='**',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster ),
+ INST_INIT =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+ INST_FIN =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ ),
+ NOCI_SEISME =FACT(statut='f',
+ regles=(UN_PARMI('FONCTION','SPEC_OSCI',),),
+ FONCTION =SIMP(statut='f',typ=fonction_sdaster ),
+ SPEC_OSCI =SIMP(statut='f',typ=nappe_sdaster ),
+ b_option_f =BLOC(condition="""FONCTION !=None""",
+ OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",validators=NoRepeat(),max='**',
+ into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
+ "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",), ),
+ b_amor_red =BLOC(condition="""OPTION in ("TOUT", "INTE_SPEC") """,
+ AMOR_REDUIT =SIMP(statut='o',typ='R'),),
+ b_pesanteur =BLOC(condition="""OPTION in ("TOUT", "INTE_ARIAS", "POUV_DEST", "DUREE_PHAS_FORT") """,
+ PESANTEUR =SIMP(statut='o',typ='R'),),
+ ),
+ b_option_n =BLOC(condition="""SPEC_OSCI !=None""",
+ OPTION =SIMP(statut='f',typ='TXM',defaut="INTE_SPEC",into=("INTE_SPEC",), ),
+ NATURE =SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE") ),
+ AMOR_REDUIT =SIMP(statut='o',typ='R'), ),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ COEF =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ FREQ_INIT =SIMP(statut='f',typ='R',defaut= 4.E-1 ),
+ FREQ_FIN =SIMP(statut='f',typ='R',defaut= 10.E+0 ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ FREQ =SIMP(statut='f',typ='R',max='**'),
+ NORME =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+ BORNE_INF =SIMP(statut='f',typ='R',defaut= 0.05E+0 ),
+ BORNE_SUP =SIMP(statut='f',typ='R',defaut= 0.95E+0 ),
+ b_acce_reel =BLOC(condition="(INST_INIT != None)or(INST_FIN != None)or(FREQ_INIT != None)or(FREQ_FIN != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ ),
+ ),
+ MAX =FACT(statut='f',fr="Extrémas locaux d'une fonction",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+ ),
+ NORME =FACT(statut='f',fr="Norme L2 d'une fonction",
+ FONCTION =SIMP(statut='o', typ=nappe_sdaster),
+ ),
+ ECART_TYPE =FACT(statut='f',fr="Ecart-type d'une fonction",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+ FONCTION =SIMP(statut='o',typ=fonction_sdaster),
+ INST_INIT =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+ INST_FIN =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 12/04/2010 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 SELLENET N.SELLENET
+INFO_RESU=PROC(nom="INFO_RESU",op=40,
+ UIinfo={"groupes":("Impression",)},
+ fr="Imprimer tous les champs présents dans une structure de données résultat",
+ RESULTAT=SIMP(statut='f',typ=resultat_sdaster),
+ UNITE=SIMP(statut='f',typ='I',defaut=6),
+);
+#& MODIF COMMANDE DATE 16/02/2010 AUTEUR GREFFET N.GREFFET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 GREFFET
+INIT_COMPO=PROC(nom="INIT_COMPO",op= 117,
+ fr="Initialiser adresse component YACS",
+ COMPO =SIMP(statut='o',typ='I',),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Définition d'une courbe dans un maillage 2D",reentrant='n',
+
+ MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster) ),
+
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+ AU_MOINS_UN('DEFI_SEGMENT','DEFI_ARC','DEFI_CHEMIN'),
+ PRESENT_ABSENT('DEFI_CHEMIN','DEFI_SEGMENT','DEFI_ARC'),
+ PRESENT_ABSENT('DEFI_SEGMENT','NOEUD_ORIG','GROUP_NO_ORIG'),
+ PRESENT_ABSENT('DEFI_ARC','NOEUD_ORIG','GROUP_NO_ORIG'),
+ EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+ EXCLUS('DEFI_CHEMIN','DEFI_SEGMENT'),
+ EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
+
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+
+ DEFI_SEGMENT =FACT(statut='f',max='**',
+ regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+ UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+ ORIGINE =SIMP(statut='f',typ='R',min=2,max=2),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ EXTREMITE =SIMP(statut='f',typ='R',min=2,max=2),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ ),
+
+ DEFI_ARC =FACT(statut='f',max='**',
+ regles=(UN_PARMI('CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+ UN_PARMI('RAYON','ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+ UN_PARMI('RAYON','EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),
+ PRESENT_PRESENT('RAYON','SECTEUR'),),
+ CENTRE =SIMP(statut='f',typ='R',min=2,max=2),
+ NOEUD_CENTRE =SIMP(statut='f',typ=no,),
+ GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,),
+ RAYON =SIMP(statut='f',typ='R',val_min=0.E+0),
+ SECTEUR =SIMP(statut='f',typ='R',min=2,max=2,
+ val_min=-180.E+0,val_max=180E+0),
+ ORIGINE =SIMP(statut='f',typ='R',min=2,max=2),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ EXTREMITE =SIMP(statut='f',typ='R',min=2,max=2),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",
+ into=("RELATIF","ABSOLU",) ),
+ ),
+
+ DEFI_CHEMIN =FACT(statut='f',max='**',
+ regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n',
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ DEFI_SEGMENT =FACT(statut='o',max='**',
+ regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+ UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+ ORIGINE =SIMP(statut='f',typ='R',min=3,max=3),
+ NOEUD_ORIG =SIMP(statut='f',typ=no,),
+ GROUP_NO_ORIG =SIMP(statut='f',typ=grno,),
+ EXTREMITE =SIMP(statut='f',typ='R',min=3,max=3),
+ NOEUD_EXTR =SIMP(statut='f',typ=no,),
+ GROUP_NO_EXTR =SIMP(statut='f',typ=grno,),
+ ),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+def lire_champ_prod(TYPE_CHAM=None,**args):
+# Remarque : si cette liste évolue, il faut penser à mettre à jour son
+# homologue dans macr_adap_mail
+ if TYPE_CHAM[0:5] == "NOEU_" : return cham_no_sdaster
+ if TYPE_CHAM[0:2] == "EL" : return cham_elem
+ raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+ fr="Lire un champ dans un fichier au format MED et le stocker dans un concept.",
+ reentrant='n',UIinfo={"groupe":("Résultats et champs",)},
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster,),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),),
+ UNITE =SIMP(statut='f',typ='I',defaut= 81,),
+ b_format =BLOC(condition = "FORMAT == 'MED'",
+ regles=( UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+ PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),
+ EXCLUS('NUME_ORDRE','INST'),
+ EXCLUS('NUME_PT','INST'),),
+ NOM_MED =SIMP(statut='o',typ='TXM', ),
+ NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+ NOM_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+ NOM_CMP_MED =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+ fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+ NUME_PT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**',),
+ NUME_ORDRE =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**',
+ fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ),
+ INST =SIMP(statut='f',typ='R',fr="Instant associé",ang="Instant" ),
+#
+ b_precision =BLOC(condition="(INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+ fr="Critère de précision sur le choix de l'instant associé",
+ ang="Accuracy criterium over instant choice" ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,
+ fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',
+ fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),),
+#
+ NOM_MAIL_MED =SIMP(statut='f',typ='TXM',),
+ ),
+# Remarque : si cette liste évolue, il faut penser à mettre à jour son
+# homologue dans macr_adap_mail
+ TYPE_CHAM =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+ b_modele =BLOC(condition = "TYPE_CHAM!=None and TYPE_CHAM[0:2] == 'EL'",
+ MODELE =SIMP(statut='o',typ=modele_sdaster, ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+
+from Macro.lire_fonction_ops import lire_fonction_ops
+
+def lire_fonction_prod(self,TYPE,**args):
+ if (TYPE == 'FONCTION') : return fonction_sdaster
+ elif (TYPE == 'FONCTION_C'): return fonction_c
+ elif (TYPE == 'NAPPE' ) : return nappe_sdaster
+ raise AsException("type de concept resultat non prevu")
+
+LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_fonction_prod,
+ fr="Lit les valeurs réelles dans un fichier de données représentant une fonction et"
+ +" crée un concept de type fonction ou nappe",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ FORMAT =SIMP(statut='f',typ='TXM',into=("LIBRE",),defaut="LIBRE" ),
+ TYPE =SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C","NAPPE"),defaut="FONCTION" ),
+ SEPAR =SIMP(statut='f',typ='TXM',into=("None",",",";","/"),defaut="None" ),
+ INDIC_PARA =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,1]),
+ b_fonction =BLOC(condition = "TYPE=='FONCTION' ",
+ INDIC_RESU =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,2]), ),
+ b_fonction_c =BLOC(condition = "TYPE=='FONCTION_C' ",
+ FORMAT_C =SIMP(statut='f',typ='TXM',defaut="REEL_IMAG",into=("REEL_IMAG","MODULE_PHASE") ),
+ b_reel_imag =BLOC(condition = "FORMAT_C=='REEL_IMAG' ",
+ INDIC_REEL =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+ INDIC_IMAG =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ) ,
+ b_modu_phas =BLOC(condition = "FORMAT_C=='MODULE_PHASE' ",
+ INDIC_MODU =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+ INDIC_PHAS =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ), ),
+ b_nappe =BLOC(condition = "TYPE=='NAPPE' ",
+ NOM_PARA_FONC =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+ INDIC_ABSCISSE =SIMP(statut='o',typ='I',min=2,max=2,),
+ INTERPOL_FONC =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ DEFI_FONCTION =FACT(statut='f',max='**',
+ INDIC_RESU =SIMP(statut='o',typ='I',min=2,max=2,),), ),
+ UNITE =SIMP(statut='o',typ='I' ),
+ NOM_PARA =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+ NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+ VERIF =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 DEVESA G.DEVESA
+LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
+ fr="Création d un vecteur assemblé à partir de base modale",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ BASE =SIMP(statut='o',typ=mode_meca),
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ FREQ_EXTR =SIMP(statut='o',typ='R',max=1),
+ NOM_CMP =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE"),defaut="DEPL"),
+ UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),
+) ;
+
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 DEVESA G.DEVESA
+LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
+ fr="Création d une matrice assemblée à partir de base modale",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ BASE =SIMP(statut='o',typ=mode_meca ),
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ FREQ_EXTR =SIMP(statut='o',typ='R',max=1),
+ UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+ TYPE =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ),
+) ;
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+
+from Macro.lire_inte_spec_ops import lire_inte_spec_ops
+
+LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fonction,
+ fr="Lecture sur un fichier externe de fonctions complexes pour créer une matrice interspectrale",
+ reentrant='n',
+ UIinfo={"groupes":("Fonction",)},
+ UNITE =SIMP(statut='o',typ='I' ),
+ FORMAT_C =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',defaut="FREQ",
+ into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+ "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+ NOM_RESU =SIMP(statut='f',typ='TXM',defaut="DSP" ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 07/12/2009 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op= 1,sd_prod=maillage_sdaster,
+ fr="Crée un maillage par lecture d'un fichier au format Aster ou Med",
+ ang="Readings of a mesh file",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+#
+ UNITE =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+ fr="Format du fichier : ASTER ou MED.",
+ ang="Format of the file : ASTER or MED.",),
+#
+ ABSC_CURV =FACT(statut='f',min=0,
+ TOUT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+#
+ VERI_MAIL =FACT(statut='d',
+ VERIF =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ APLAT =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ),
+#
+ b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+ fr="Informations complémentaires pour la lecture MED.",
+ ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+ NOM_MED = SIMP(statut='f',typ='TXM',
+ fr="Nom du maillage dans le fichier MED.",
+ ang="Name of the mesh into the MED file.",),
+ INFO_MED = SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3) ),
+#
+ RENOMME = FACT(statut='f', max='**',
+ fr="Renommer un nom de groupe MED",
+ NOM_MED = SIMP(statut='o', typ=grma,
+ fr="Nom du groupe dans le fichier MED"),
+ NOM = SIMP(statut='o', typ=grma, validators=LongStr(1,8),
+ fr="Nom du groupe dans le maillage ASTER"),
+ ),
+ ),
+#
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DEVESA G.DEVESA
+def lire_miss_3d_prod(TYPE_RESU,**args):
+ if TYPE_RESU == "TRANS" : return dyna_trans
+ if TYPE_RESU == "HARMO" : return dyna_harmo
+ raise AsException("type de concept resultat non prevu")
+
+LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
+ fr="Restituer sur base physique une réponse harmonique ou transitoire issue de MISS3D",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+ MACR_ELEM_DYNA =SIMP(statut='o',typ=macr_elem_dyna ),
+ UNITE =SIMP(statut='f',typ='I',defaut= 27 ),
+ NOM =SIMP(statut='f',typ='TXM' ),
+ TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 POTAPOV S.POTAPOV
+
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+ fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS",
+ reentrant='n',
+ UIinfo={"groupes":("Maillage",)},
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+ UNITE =SIMP(statut='f',typ='I',defaut= 19 ),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+ MAIL_PLEXUS =SIMP(statut='o',typ=maillage_sdaster ),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ b_prec_crit =BLOC(condition = "LIST_INST != None or INST != None",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 15/03/2010 AUTEUR SELLENET N.SELLENET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+
+def lire_resu_prod(TYPE_RESU,**args):
+ if TYPE_RESU == "EVOL_CHAR" : return evol_char
+ if TYPE_RESU == "EVOL_THER" : return evol_ther
+ if TYPE_RESU == "EVOL_ELAS" : return evol_elas
+ if TYPE_RESU == "EVOL_NOLI" : return evol_noli
+ if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+ if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+ if TYPE_RESU == "HARM_GENE" : return harm_gene
+ if TYPE_RESU == "MODE_MECA" : return mode_meca
+ if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c
+ if TYPE_RESU == "EVOL_VARC" : return evol_varc
+ raise AsException("type de concept resultat non prevu")
+
+# pour éviter d'écrire 3 fois cette liste :
+def l_nom_cham_pas_elga(): return (
+ "ACCE", "ACCE_ABSOLU", "CRIT_ELNO_RUPT", "DCHA_ELNO_SIGM",
+ "DCHA_NOEU_SIGM", "DEDE_ELNO_DLDE", "DEDE_NOEU_DLDE", "DEGE_ELNO_DEPL", "DEGE_NOEU_DEPL",
+ "DEPL", "DEPL_ABSOLU", "DESI_ELNO_DLSI", "DESI_NOEU_DLSI", "DETE_ELNO_DLTE", "DETE_NOEU_DLTE",
+ "DURT_ELNO_META", "DURT_NOEU_META", "ECIN_ELEM_DEPL", "EFGE_ELNO_CART", "EFGE_ELNO_DEPL",
+ "EFGE_NOEU_CART", "EFGE_NOEU_DEPL", "ENDO_ELNO_SIGA", "ENDO_ELNO_SINO", "ENDO_NOEU_SINO",
+ "ENEL_ELNO_ELGA", "ENEL_NOEU_ELGA", "EPEQ_ELNO_TUYO", "EPGR_ELNO", "EPME_ELNO_DEPL",
+ "EPMG_ELNO_DEPL", "EPMG_NOEU_DEPL", "EPOT_ELEM_DEPL", "EPSA_ELNO", "EPSA_NOEU",
+ "EPSG_ELNO_DEPL", "EPSG_NOEU_DEPL", "EPSI_ELNO_DEPL", "EPSI_ELNO_TUYO", "EPSI_NOEU_DEPL",
+ "EPSP_ELNO", "EPSP_NOEU", "EQUI_ELNO_EPME", "EQUI_ELNO_EPSI",
+ "EQUI_ELNO_SIGM", "EQUI_NOEU_EPME", "EQUI_NOEU_EPSI", "EQUI_NOEU_SIGM", "ERRE_ELEM_NOZ1",
+ "ERRE_ELEM_NOZ2", "ERRE_ELNO_ELGA", "ERRE_NOEU_ELGA", "ERTH_ELEM_TEMP", "ERTH_ELNO_ELEM",
+ "ETOT_ELEM", "ETOT_ELNO_ELGA", "FLUX_ELNO_TEMP", "FLUX_NOEU_TEMP", "FORC_NODA", "FSUR_2D",
+ "FSUR_3D", "FVOL_2D", "FVOL_3D", "GRAD_NOEU_THETA", "HYDR_ELNO_ELGA", "HYDR_NOEU_ELGA",
+ "INTE_ELNO_ACTI", "INTE_ELNO_REAC", "INTE_NOEU_ACTI", "INTE_NOEU_REAC", "IRRA",
+ "META_ELNO_TEMP", "META_NOEU_TEMP", "PMPB_ELNO_SIEF", "PMPB_NOEU_SIEF",
+ "PRES", "PRES_DBEL_DEPL", "PRES_ELNO_DBEL", "PRES_ELNO_IMAG", "PRES_ELNO_REEL",
+ "PRES_NOEU_DBEL", "PRES_NOEU_IMAG", "PRES_NOEU_REEL",
+ "RADI_ELNO_SIGM", "RADI_NOEU_SIGM", "REAC_NODA",
+ "SIEF_ELNO", "SIEF_ELNO_ELGA", "SIEF_NOEU", "SIEF_NOEU_ELGA", "SIEQ_ELNO_TUYO",
+ "SIGM_ELNO_CART", "SIGM_ELNO_COQU", "SIGM_ELNO_DEPL", "SIGM_ELNO_SIEF",
+ "SIGM_ELNO_TUYO", "SIGM_NOEU_CART", "SIGM_NOEU_COQU",
+ "SIGM_NOEU_DEPL", "SIGM_NOEU_SIEF", "SIGM_NOZ1_ELGA",
+ "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL",
+ "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA",
+ "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU",
+ "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA",
+ "VITE", "VITE_ABSOLU", "VITE_VENT",
+ )
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Lire dans un fichier, soit format IDEAS, soit au format ENSIGHT soit au format MED,"
+ +" des champs et les stocker dans une SD résultat",
+
+
+# 0) mots clés généraux :
+#----------------------
+ TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
+ "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE",
+ "EVOL_CHAR","EVOL_VARC") ),
+
+ FORMAT =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ),
+
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+
+ regles=(UN_PARMI('MAILLAGE','MODELE'),),
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ COMP_INCR =C_COMP_INCR(),
+ NB_VARI =SIMP(statut='f',typ='I' ),
+
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater,),
+
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem,),
+
+ b_evol_elas = BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),),
+ ),
+
+ b_evol_ther = BLOC(condition="TYPE_RESU=='EVOL_THER'",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+ ),
+
+ b_evol_noli = BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+ EXCIT =FACT(statut='f',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+ DEPL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ACCE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ VITE =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+ ),
+
+
+# 1) blocs selon le format choisi :
+#---------------------------------
+
+# 1-1 ideas dataset-58 :
+# ----------------------
+ b_dataset_58 = BLOC(condition="FORMAT=='IDEAS_DS58'",
+ UNITE =SIMP(statut='f',typ='I',defaut= 19 ),
+ ),
+ b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
+ (TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
+ NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU_DEPL","SIEF_NOEU",) ),
+ REDEFI_ORIENT=FACT(statut='f',max='**',
+ regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
+ CODE_DIR =SIMP(statut='f',typ='I',into=(1,2,3,) ),
+ DIRECTION=SIMP(statut='f',typ='R',min=3,max=3,),
+ NOEUD =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),),
+ ),
+
+# 1-2 ideas :
+# ---------
+ b_ideas =BLOC(condition="FORMAT=='IDEAS'",
+ UNITE =SIMP(statut='f',typ='I',defaut= 19 ),
+# TEST =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+ fr="Affecte des valeurs nulles la ou le champ n'est pas defini"),
+ FORMAT_IDEAS =FACT(statut='f',max='**',
+ regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
+ NUME_DATASET =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+ RECORD_3 =SIMP(statut='f',typ='I',max=10),
+ RECORD_6 =SIMP(statut='f',typ='I',max=10),
+ RECORD_9 =SIMP(statut='f',typ='I',max=10),
+ POSI_ORDRE =SIMP(statut='o',typ='I',min=2,max=2),
+ POSI_NUME_MODE =SIMP(statut='f',typ='I',min=2,max=2),
+ POSI_MASS_GENE =SIMP(statut='f',typ='I',min=2,max=2),
+ POSI_AMOR_GENE =SIMP(statut='f',typ='I',min=2,max=2),
+ POSI_INST =SIMP(statut='f',typ='I',min=2,max=2),
+ POSI_FREQ =SIMP(statut='f',typ='I',min=2,max=2),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),),
+ ),
+
+ b_mode =BLOC(condition="((TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C') )and (FORMAT=='IDEAS')",
+ NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster),max=1,
+ fr="Utile en dynamique pour pouvoir imposer la numérotation des cham_no."),
+ ),
+
+# 1-3 ensight :
+# -------------
+ b_ensight =BLOC(condition="FORMAT=='ENSIGHT'",
+ NOM_FICHIER =SIMP(statut='f',typ='TXM'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+ ),
+
+# 1-4 med :
+# ---------
+ b_med =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
+ UNITE =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
+ FORMAT_MED =FACT(statut='o',max='**',
+ regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),UN_PARMI('NOM_CHAM_MED','NOM_RESU'),),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
+ NOM_CHAM_MED =SIMP(statut='f',typ='TXM', fr="Nom du champ dans le fichier MED.", ),
+ NOM_RESU =SIMP(statut='f',typ='TXM', fr="Prefixe du nom de champ dans le fichier MED.", ),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**', fr="Nom des composantes dans ASTER.", ),
+ NOM_CMP_MED =SIMP(statut='f',typ='TXM',max='**', fr="Nom des composantes dans MED.", ),
+ ),
+ PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),
+ fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+ ),
+
+# 2) blocs selon le type du résultat :
+#---------------------------------
+ b_mode_meca =BLOC(condition="(TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C')",
+ MATR_A =SIMP(statut='f',typ=matr_asse_depl_r,),
+ MATR_B =SIMP(statut='f',typ=matr_asse_depl_r,),
+ ),
+
+
+# 3) autres blocs :
+#---------------------------------
+ b_extrac =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+
+ b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.lire_table_ops import lire_table_ops
+
+LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
+ fr="Lecture d'un fichier contenant une table",
+ UIinfo={"groupes":("Table",)},
+ UNITE =SIMP(statut='o',typ='I' ),
+ FORMAT =SIMP(statut='f',typ='TXM',into=("ASTER",),defaut="ASTER"),
+ NUME_TABLE =SIMP(statut='f',typ='I',defaut=1),
+ SEPARATEUR =SIMP(statut='f',typ='TXM',defaut=' '),
+ PARA =SIMP(statut='f',typ='TXM',max='**'),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ ) ;
+
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 ANDRIAM H.ANDRIAMBOLOLONA
+
+MAC_MODES=OPER(nom="MAC_MODES",op= 141,sd_prod=table_sdaster,
+ fr="Critere orthogonalite de modes propres",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(PRESENT_PRESENT('IERI','MATR_ASSE'),),
+ BASE_1 =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+ BASE_2 =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+ MATR_ASSE =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+ IERI =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 15/03/2010 AUTEUR GNICOLAS G.NICOLAS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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
+
+
+from Macro.macr_adap_mail_ops import macr_adap_mail_ops
+
+def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
+#
+# 0. Typage des structures produites
+#
+ maillage_np1=args['MAILLAGE_NP1']
+ self.type_sdprod(maillage_np1,maillage_sdaster)
+#
+ if ( args['MAILLAGE_NP1_ANNEXE'] is not None ) :
+ maillage_np1_annexe=args['MAILLAGE_NP1_ANNEXE']
+ self.type_sdprod(maillage_np1_annexe,maillage_sdaster)
+#
+ if MAJ_CHAM == None:return None
+# Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
+ for ch in MAJ_CHAM:
+ t=ch['TYPE_CHAM']
+ if t[0:5] == "NOEU_":self.type_sdprod(ch['CHAM_MAJ'],cham_no_sdaster)
+ if t[0:2] == "EL": self.type_sdprod(ch['CHAM_MAJ'],cham_elem)
+ return None
+
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_adap_mail_prod,
+ fr="Adapter un maillage avec le logiciel HOMARD.",
+ ang="Mesh adaptation with the HOMARD software.",
+ docu="U7.03.01-b",UIinfo={"groupe":("Maillage",)},
+#
+# 1. Le niveau d'information
+#
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4)),
+#
+# 2. Version de HOMARD
+#
+ VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
+ into=("V9_6", "V9_N", "V9_N_PERSO"),
+ fr="Version de HOMARD",
+ ang="HOMARD release"),
+#
+# 3. Langue des messages produits par HOMARD
+#
+ LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",
+ into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+ fr="Langue des messages produits par HOMARD.",
+ ang="Language for the HOMARD messages." ),
+#
+# 4. Les maillages
+# 4.1. Quel que soit le type de traitement, il faut donner :
+# A. Le concept du maillage initial (entree)
+# B. Le concept du maillage final (sortie)
+#
+ MAILLAGE_N = SIMP(statut='o',typ=maillage_sdaster,
+ fr="Maillage avant adaptation",
+ ang="Mesh before adaptation" ),
+#
+ MAILLAGE_NP1 = SIMP(statut='o',typ=CO,
+ fr="Maillage apres adaptation",
+ ang="Mesh after adaptation" ),
+#
+# 4.2. Eventuellement, on peut produire un maillage annexe
+# Actuellement, c'est le maillage n+1, mais de degré différent.
+#
+ MAILLAGE_NP1_ANNEXE = SIMP(statut='f',typ=CO,
+ fr="Maillage annexe apres adaptation",
+ ang="Additional mesh after adaptation" ),
+#
+# 5. Le pilotage de l'adaptation, avec les variantes suivantes :
+# . Raffinement et deraffinement, selon un champ d'indicateurs d'erreur
+# . Raffinement seul, selon un champ d'indicateurs d'erreur
+# . Deraffinement seul, selon un champ d'indicateurs d'erreur
+# . Raffinement seul, selon des zones geometriques
+# . Raffinement uniforme : toutes les mailles sont divisées
+# . Deraffinement uniforme : toutes les mailles sont regroupées
+# . Modification : le maillage subit des transformations specifiques
+# . Rien : le maillage est le meme a la sortie et a l'entree
+#
+ ADAPTATION = SIMP(statut='o',typ='TXM',
+ into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT","RAFFINEMENT_ZONE", \
+ "RAFFINEMENT_UNIFORME","DERAFFINEMENT_UNIFORME", \
+ "MODIFICATION","RIEN"),
+ fr="Pilotage de l'adaptation : selon un indicateur d'erreur ou uniforme.",
+ ang="Adaptation control : either among an error indicator or uniform" ),
+#
+# 6. Pour de l'adaptation libre, il faut un indicateur d'erreur
+#
+ b_indicateur_d_erreur = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'RAFFINEMENT') or \
+ (ADAPTATION == 'DERAFFINEMENT') " ,
+ fr="Pour une adaptation libre, choix de l'indicateur d'erreur ou d'une zone à raffiner",
+ ang="For a free adaptation, selection of the error indicator or of a zone",
+#
+ regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
+#
+# 6.1. Repérage de la zone à raffiner à l'aide d'un indicateur
+#
+# 6.1.1. Sous forme de champ de grandeur
+#
+ CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
+ fr="Champ de grandeur Code_Aster contenant l'indicateur d'erreur",
+ ang="Code_Aster champ de grandeur with error indicator" ),
+#
+# 6.1.2. Sous forme de concept resultat_sdaster
+#
+ RESULTAT_N = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
+ fr="Concept resultat Code_Aster contenant l'indicateur d'erreur",
+ ang="The Code_Aster result with error indicator" ),
+#
+ b_champ_indicateur = BLOC(condition="(RESULTAT_N != None)",
+ INDICATEUR = SIMP(statut='o',typ='TXM',
+ fr="Champ de l'indicateur d'erreur dans le résultat",
+ ang="The error indicator field in the result structure" ),
+ ),
+#
+# 6.1.3. Est-ce un champ dérivé
+#
+ b_sensibilite = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+ fr="Est-ce un champ dérivé",
+ ang="Is the indicator a derivative field",
+#
+ SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter")
+#
+ ),
+#
+# 6.1.4. La ou les composantes retenues
+#
+ b_composante = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+ fr="Choix de la composante ou des composantes pour l'indicateur",
+ ang="Selection of the component(s) for the error indicator",
+#
+ NOM_CMP_INDICA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Liste des composante(s) retenue(s) pour l'indicateur d'erreur.",
+ ang="List of the selected component(s) for the error indicator." ),
+#
+ ),
+#
+# 6.1.5. Le paramètre temporel pour l'indicateur
+#
+ b_parametre_temporel = BLOC(condition="(RESULTAT_N != None)",
+ fr="Choix éventuel du paramètre temporel pour l'indicateur",
+ ang="Time selection for the error indicator (option)",
+#
+ regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 6.1.5.1. Soit le numero d'ordre
+#
+ NUME_ORDRE = SIMP(statut='f',typ='I',
+ fr="Numero d ordre",
+ ang="Rank" ),
+#
+# 6.1.5.2. Soit l'instant
+# 6.1.5.2.1. Sa valeur
+#
+ INST = SIMP(statut='f',typ='R',
+ fr="Instant associé",
+ ang="Instant" ),
+#
+# 6.1.5.2.2. La précision du choix de l'instant
+#
+ b_precision = BLOC(condition="(INST != None)",
+ fr="Choix de la précision du choix de l'instant",
+ ang="Precision for the choice of the instant",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+ fr="Critère de précision sur le choix de l'instant associé",
+ ang="Accuracy criterium over the choice of the instant"),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,
+ fr="Précision relative sur le choix de l'instant associé",
+ ang="Relative accuracy over the choice of the instant"),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',
+ fr="Précision absolue sur le choix de l'instant associé",
+ ang="Absolute accuracy over the choice of the instant"),),
+ ),
+#
+ ),
+#
+# 6.1.6. Type de valeur de l'indicateur : absolue (norme L2), norme infinie, ou relative
+#
+ b_valeur_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+ fr="Type de valeur pour l'indicateur",
+ ang="Type of the value type for the error indicator",
+#
+ TYPE_VALEUR_INDICA = SIMP(statut='f',typ='TXM',defaut="V_ABSOLUE",
+ into=("V_ABSOLUE", "NORME_L2", "NORME_INFINIE", "V_RELATIVE"),
+ fr="Valeur absolue, norme des composantes ou valeur relative pour l'indicateur",
+ ang="Absolute value, norm or relative value for the error indicator" ),
+#
+ ),
+#
+# 6.1.7. Type d'opération sur l'indicateur : la valeur par maille ou le max du saut entre mailles
+#
+ b_usage_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+ fr="Usage de l'indicateur : direct ou saut",
+ ang="Use type for the error indicator : direct or jump",
+#
+ TYPE_OPER_INDICA = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
+ fr="Usage de l'indicateur : la valeur par maille ou le saut entre mailles voisines",
+ ang="Use of the indicator : value over every mesh or jump between neighbour" ),
+#
+ ),
+#
+ ) ,
+#
+# 7. Les criteres pour de l'adaptation libre avec un indicateur d'erreur :
+# absolu, relatif, en proportion d'entite
+# 7.1. Pour le raffinement :
+#
+ b_critere_de_raffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'RAFFINEMENT') " ,
+ fr="Critère de raffinement.",
+ ang="Refinement threshold.",
+#
+ regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+#
+ CRIT_RAFF_ABS = SIMP(statut='f',typ='R',
+ fr="Critère absolu",
+ ang="Absolute threshold" ),
+ CRIT_RAFF_REL = SIMP(statut='f',typ='R',
+ fr="Critère relatif : fraction réelle entre 0. et 1.",
+ ang="Relative threshold : ratio between 0. and 1." ),
+ CRIT_RAFF_PE = SIMP(statut='f',typ='R',
+ fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+ ang="Percentage of meshes : ratio between 0. and 1." ),
+ ) ,
+#
+# 7.2. Pour le deraffinement :
+#
+ b_critere_de_deraffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'DERAFFINEMENT') " ,
+ fr="Critère de déraffinement.",
+ ang="Unrefinement threshold.",
+#
+ regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+#
+ CRIT_DERA_ABS = SIMP(statut='f',typ='R' ,
+ fr="Critère absolu",
+ ang="Absolute threshold" ),
+ CRIT_DERA_REL = SIMP(statut='f',typ='R',
+ fr="Critère relatif : fraction réelle entre 0. et 1.",
+ ang="Relative threshold : ratio between 0. and 1." ),
+ CRIT_DERA_PE = SIMP(statut='f',typ='R',
+ fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+ ang="Percentage of meshes : ratio between 0. and 1." ),
+ ) ,
+#
+# 8. Pour de l'adaptation par zone, définitions des zones
+#
+ b_zone = BLOC( condition = " (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+ fr="Pour une adaptation selon une zone à raffiner",
+ ang="For adaptation among a zone",
+#
+ ZONE = FACT(statut='f',max='**',
+ fr="Définition de zones à raffiner.",
+ ang="Refined zone definition.",
+#
+# 8.1. Type de la zone
+#
+ TYPE = SIMP(statut='o',typ='TXM',into=("RECTANGLE", "BOITE", "DISQUE", "SPHERE", "CYLINDRE", "DISQUE_PERCE", "TUYAU"),
+ fr="Type de la zone",
+ ang="Type of the zone" ),
+#
+# Ne sachant pas exploiter les blocs, je mets des regles
+#
+ regles=(AU_MOINS_UN('X_MINI','X_CENTRE','HAUTEUR'),
+ EXCLUS('X_MINI','X_CENTRE','HAUTEUR',),
+ EXCLUS('Z_MINI','X_CENTRE','HAUTEUR',),
+ EXCLUS('X_MINI','Z_CENTRE','HAUTEUR',),
+ EXCLUS('Z_MINI','Z_CENTRE','HAUTEUR',),
+ EXCLUS('X_MINI','RAYON',),
+ EXCLUS('Z_MINI','RAYON',),
+ EXCLUS('X_MINI','X_CENTRE','RAYON_INT',),
+ EXCLUS('Z_MINI','X_CENTRE','RAYON_INT',),
+ EXCLUS('X_MINI','X_CENTRE','RAYON_EXT',),
+ EXCLUS('Z_MINI','X_CENTRE','RAYON_EXT',),
+ EXCLUS('RAYON','RAYON_INT',),),
+#
+# 8.2. Une boite rectangulaire ou parallelepipedique
+# 8.2.1. Incontournables
+#
+##gn b_z_boiteXY = BLOC( condition = " (TYPE == 'RECTANGLE') or (TYPE == 'BOITE') " ,
+##gn fr="X et Y mini/maxi pour un rectangle ou un parallelepipede.",
+##gn ang="X and Y min/max for a rectangle or a parallelepipedic box",
+ X_MINI = SIMP(statut='f',typ='R',
+ fr="Abscisse minimum de la boite",
+ ang="Minimum X for the box"),
+ X_MAXI = SIMP(statut='f',typ='R',
+ fr="Abscisse maximum de la boite",
+ ang="Maximum X for the box"),
+ Y_MINI = SIMP(statut='f',typ='R',
+ fr="Ordonnée minimum de la boite",
+ ang="Minimum Y for the box"),
+ Y_MAXI = SIMP(statut='f',typ='R',
+ fr="Abscisse maximum de la boite",
+ ang="Maximum Y for the box"),
+##gn ) ,
+#
+# 8.2.2. Complement pour une boite parallelepipedique
+#
+##gn b_z_boiteZ = BLOC( condition = " (TYPE == 'BOITE') " ,
+##gn fr="Z mini/maxi pour un parallelepipede.",
+##gn ang="Z min/max for a parallelepipedic box",
+ Z_MINI = SIMP(statut='f',typ='R',
+ fr="Cote minimum de la boite",
+ ang="Minimum Z for the box"),
+ Z_MAXI = SIMP(statut='f',typ='R',
+ fr="Cote maximum de la boite",
+ ang="Maximum Z for the box"),
+##gn ) ,
+#
+# 8.3. Rayon pour un disque, une sphere ou un cylindre
+#
+##gn b_z_rayon = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+##gn fr="Le rayon d'un disque, d'une sphere ou d'un cylindre.",
+##gn ang="The radius of a disk or of a sphere or of a cylinder.",
+ RAYON = SIMP(statut='f',typ='R',
+ fr="Rayon",
+ ang="Radius"),
+##gn ) ,
+#
+# 8.4. Pour un disque plein ou perce, une sphere
+# 8.4.1. Incontournables
+#
+##gn b_z_di_sp_XY = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'DISQUE_PERCE') " ,
+##gn fr="X et Y du centre d'un disque plein ou perce, d'une sphere.",
+##gn ang="X and Y of the centre of a disk or of a sphere.",
+ X_CENTRE = SIMP(statut='f',typ='R',
+ fr="Abscisse du centre du disque ou de la sphere",
+ ang="X for the center of the disk or of the sphere"),
+ Y_CENTRE = SIMP(statut='f',typ='R',
+ fr="Ordonnee du centre du disque ou de la sphere",
+ ang="Y for the center of the disk or of the sphere"),
+##gn ) ,
+#
+# 8.4.2. Complement pour une sphere
+#
+##gn b_z_sp_Z = BLOC( condition = " (TYPE == 'SPHERE') " ,
+##gn fr="Cote du centre de la sphere.",
+##gn ang="Z for the center of the sphere.",
+ Z_CENTRE = SIMP(statut='f',typ='R',
+ fr="Cote du centre de la sphere",
+ ang="Z for the center of the sphere"),
+##gn ) ,
+#
+# 8.5. Rayons interieur et exterieur pour un disque perce ou un tuyau
+#
+##gn b_z_rayon_int_ext = BLOC( condition = " (TYPE == 'DISQUE_PERCE') or (TYPE == 'TUYAU') " ,
+##gn fr="Le rayon d'un disque perce ou d'un tuyau.",
+##gn ang="The radius of a holed disk or of a pipe.",
+ RAYON_INT = SIMP(statut='f',typ='R',
+ fr="Rayon interieur",
+ ang="Internal radius"),
+ RAYON_EXT = SIMP(statut='f',typ='R',
+ fr="Rayon exterieur",
+ ang="External radius"),
+##gn ) ,
+#
+# 8.6. Un cylindre ou un tuyau
+#
+##gn b_z_cylindre_tuyau = BLOC( condition = " (TYPE == 'CYLINDRE') or (TYPE == 'TUYAU') " ,
+##gn fr="Pour un cylindre ou un tuyau.",
+##gn ang="For a cylinder or a pipe.",
+ X_AXE = SIMP(statut='f',typ='R',
+ fr="Abscisse du vecteur directeur de l'axe",
+ ang="X for the axial vector"),
+ Y_AXE = SIMP(statut='f',typ='R',
+ fr="Ordonnee du vecteur directeur de l'axe",
+ ang="Y for the axial vector"),
+ Z_AXE = SIMP(statut='f',typ='R',
+ fr="Cote du vecteur directeur de l'axe",
+ ang="Z for the axial vector"),
+ X_BASE = SIMP(statut='f',typ='R',
+ fr="Abscisse d'un point de la base, sur l'axe",
+ ang="X for the basis, on the axis"),
+ Y_BASE = SIMP(statut='f',typ='R',
+ fr="Ordonnee d'un point de la base, sur l'axe",
+ ang="Y for the basis, on the axis"),
+ Z_BASE = SIMP(statut='f',typ='R',
+ fr="Cote d'un point de la base, sur l'axe",
+ ang="Z for the basis, on the axis"),
+ HAUTEUR = SIMP(statut='f',typ='R',
+ fr="Hauteur",
+ ang="Height"),
+##gn ) ,
+#
+ ) ,
+#
+ ) ,
+#
+# 9. Les niveaux extremes pour le maillage adapte
+# 9.1. Pour le raffinement :
+#
+ b_niveau_maximum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'RAFFINEMENT') or \
+ (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+ (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+ fr="Niveau maximum de profondeur de raffinement",
+ ang="Maximum level for the refinement",
+ NIVE_MAX = SIMP(statut='f',typ='I',
+ fr="Niveau maximum de profondeur de raffinement",
+ ang="Maximum level for the refinement"),
+ ) ,
+#
+# 9.2. Pour le deraffinement :
+#
+ b_niveau_minimum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'DERAFFINEMENT') or \
+ (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+ fr="Niveau minimum de profondeur de déraffinement",
+ ang="Minimum level for the unrefinement",
+ NIVE_MIN = SIMP(statut='f',typ='I',
+ fr="Niveau minimum de profondeur de déraffinement",
+ ang="Minimum level for the unrefinement"),
+ ) ,
+#
+# 10. Filtrage de l'adaptation par des groupes
+#
+ b_filtrage_par_des_groupes = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+ (ADAPTATION == 'RAFFINEMENT') or \
+ (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+ (ADAPTATION == 'RAFFINEMENT_ZONE') or \
+ (ADAPTATION == 'DERAFFINEMENT') or \
+ (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+ fr="Filtrage de l'adaptation par des groupes.",
+ ang="Filtering of adaptation by the groups.",
+#
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Liste des groupes de mailles pour le filtrage de l'adaptation.",
+ ang="List of the groups of meshes for filtering of the adaptation." ),
+#
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**',
+ fr="Liste des groupes de noeuds pour le filtrage de l'adaptation.",
+ ang="List of the groups of nodes for filtering of the adaptation." ),
+ ) ,
+#
+# 11. Suivi d'une frontiere
+#
+# 11.1. Definition d'une frontiere par un maillage (valable seulement pour des frontieres 1D)
+#
+ MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+ fr="Maillage de la frontiere à suivre",
+ ang="Boundary mesh" ),
+#
+ b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+ fr="Information complémentaire sur la frontière",
+ ang="Further information about boundary",
+#
+ GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Liste des groupes de mailles définissant la frontière",
+ ang="Mesh groups which define the boundary" ),
+#
+ ) ,
+#
+# 11.2. Definition analytique d'une frontiere
+#
+ FRONTIERE_ANALYTIQUE = FACT(statut='f',max='**',
+ fr="Definition analytique de frontieres a suivre.",
+ ang="Analytical definition of a boundary.",
+#
+# 11.2.1. Type de la frontiere
+#
+ TYPE = SIMP(statut='o',typ='TXM',into=("SPHERE", "CYLINDRE"),
+ fr="Type de la frontiere",
+ ang="Type of the boundary" ),
+#
+# 11.2.2. Groupe lie a la frontiere
+#
+ GROUP_MA = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
+ fr="Liste des groupes de mailles definissant la frontiere",
+ ang="Groups of meshes which define the boundary" ),
+#
+# 11.2.3. Pour une sphere ou un cylindre : rayon et centre
+#
+ b_fr_rayon = BLOC( condition = " (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+ fr="Le rayon et le centre d'une sphere ou d'un cylindre.",
+ ang="The radius and the centre of a sphere or of a cylinder.",
+ RAYON = SIMP(statut='o',typ='R',
+ fr="Rayon",
+ ang="Radius"),
+ X_CENTRE = SIMP(statut='o',typ='R',
+ fr="Abscisse du centre",
+ ang="X for the center"),
+ Y_CENTRE = SIMP(statut='o',typ='R',
+ fr="Ordonnee du centre",
+ ang="Y for the center"),
+ Z_CENTRE = SIMP(statut='o',typ='R',
+ fr="Cote du centre",
+ ang="Z for the center"),
+ ) ,
+#
+# 11.2.4. Complement pour un cylindre
+#
+ b_fr_cylindre = BLOC( condition = " (TYPE == 'CYLINDRE') " ,
+ fr="Pour un cylindre.",
+ ang="For a cylinder.",
+ X_AXE = SIMP(statut='o',typ='R',
+ fr="Abscisse du vecteur directeur de l'axe",
+ ang="X for the axial vector"),
+ Y_AXE = SIMP(statut='o',typ='R',
+ fr="Ordonnee du vecteur directeur de l'axe",
+ ang="Y for the axial vector"),
+ Z_AXE = SIMP(statut='o',typ='R',
+ fr="Cote du vecteur directeur de l'axe",
+ ang="Z for the axial vector"),
+ ) ,
+#
+ ) ,
+#
+# 12. Mise à jour de champs sur le nouveau maillage
+#
+ MAJ_CHAM = FACT(statut='f',max='**',
+ fr="Mise à jour de champs sur le nouveau maillage.",
+ ang="Updating of the fields over the new mesh.",
+#
+# 12.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
+#
+ CHAM_MAJ = SIMP(statut='o',typ=CO,
+ fr="Nom du champ de grandeur qui contiendra le champ mis à jour",
+ ang="Name of the field for the updated field"),
+#
+# 12.2. Le type du champ qui contiendra le resultat de la mise a jour
+#
+ TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
+ fr="Type du champ qui contiendra le champ mis à jour",
+ ang="Type of the field for the updated field" ),
+#
+# 12.3. Le champ a interpoler
+#
+ regles=(UN_PARMI('CHAM_GD','RESULTAT')),
+#
+# 12.3.1. Sous forme de champ de grandeur
+#
+ CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
+ fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
+ ang="Champ de grandeur with the field to be updated" ),
+#
+# 12.3.2. Sous forme de champ dans un resultat
+#
+ RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
+ fr="Resultat contenant le champ à mettre à jour",
+ ang="Result with the field to be updated" ),
+#
+ b_nom_du_champ = BLOC(condition="(RESULTAT != None)",
+ fr="Choix éventuel du nom du champ à interpoler",
+ ang="Selection for the name of the field (option)",
+#
+ NOM_CHAM = SIMP(statut='o',typ='TXM',
+ fr="Nom du champ à mettre à jour",
+ ang="Name of the field to be updated" ),
+#
+ ),
+#
+# 12.4. Est-ce un champ dérivé
+#
+ SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter"),
+#
+# 12.5. Le paramètre temporel pour le champ a interpoler
+#
+ b_parametre_temporel = BLOC(condition="(RESULTAT != None)",
+ fr="Choix éventuel du paramètre temporel pour le champ à interpoler",
+ ang="Time selection for the field (option)",
+#
+ regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 12.5.1. Soit le numero d'ordre
+#
+ NUME_ORDRE = SIMP(statut='f',typ='I',
+ fr="Numero d ordre du champ à mettre à jour",
+ ang="Rank of the field to be updated" ),
+#
+# 12.5.2. Soit l'instant
+# 12.5.2.1. Sa valeur
+#
+ INST = SIMP(statut='f',typ='R',
+ fr="Instant associé",
+ ang="Instant" ),
+#
+# 12.5.2.2. La précision du choix de l'instant
+#
+ b_precision = BLOC(condition="(INST != None)",
+ fr="Choix de la précision du choix de l'instant",
+ ang="Selection for the choice of the instant",
+#
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+ fr="Critère de précision sur le choix de l'instant associé",
+ ang="Accuracy criterium over the choice of the instant"),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,
+ fr="Précision relative sur le choix de l'instant associé",
+ ang="Relative accuracy over the choice of the instant"),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',
+ fr="Précision absolue sur le choix de l'instant associé",
+ ang="Absolute accuracy over the choice of the instant"),),
+#
+ ),
+#
+ ),
+ ),
+#
+# 13. Les Modifications
+#
+ b_modifications = BLOC( condition = " (ADAPTATION == 'MODIFICATION') " ,
+ fr="Modification de maillage.",
+ ang="Modification of the mesh.",
+#
+ #regles=(AU_MOINS_UN('DEGRE','JOINT'),),
+#
+# 13.1. Changement de degre
+#
+ DEGRE = SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Changement de degre du maillage",
+ ang="Modification of the degree of the mesh" ),
+#
+# 13.2. Création des joints
+#
+ #JOINT = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ #fr="Creations des joints",
+ #ang="Creation of the junctions" ),
+#
+ ) ,
+#
+# 14. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
+# 14.1. Nombre de noeuds et mailles
+#
+ NOMBRE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Nombre de noeuds et de mailles du maillage",
+ ang="Number of nodes and meshes in the mesh" ),
+#
+# 14.2. Determination de la qualité des éléments du maillage
+#
+ QUALITE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Qualité du maillage",
+ ang="Quality of the mesh" ),
+#
+# 14.3. Connexite du maillage
+#
+ CONNEXITE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Connexité du maillage.",
+ ang="Connexity of the mesh." ),
+#
+# 14.4. Taille des sous-domaines du maillage
+#
+ TAILLE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Tailles des sous-domaines du maillage.",
+ ang="Sizes of mesh sub-domains." ),
+#
+# 14.5. Controle de la non-interpenetration des mailles
+#
+ INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Controle de la non interpénétration des mailles.",
+ ang="Overlapping checking." ),
+#
+# 14.6. Propriétés du maillage de calcul
+#
+ PROP_CALCUL = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Propriétés du maillage de calcul.",
+ ang="Properties of the calculation mesh." ),
+#
+# 15. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+#
+ b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
+ (VERSION_HOMARD == 'V9_N_PERSO') " ,
+ fr="Fichier supplementaire.",
+ ang="Additional file.",
+#
+ UNITE = SIMP(statut='f',typ='I',
+ fr="Unite logique a ajouter a HOMARD.Configuration",
+ ang="Additional file to HOMARD.Configuration" ),
+#
+ ) ,
+#
+# 16. Gestion des mailles autres que celles compatibles avec HOMARD
+# "REFUSER" : elles sont refusées (defaut)
+# "IGNORER" : elles sont ignorées
+#
+ ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+ fr="Acceptation de mailles incompatibles avec HOMARD",
+ ang="Incompatible meshes for HOMARD" ),
+#
+) ;
+#& MODIF COMMANDE DATE 07/07/2009 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+from Macro.macr_ascouf_calc_ops import macr_ascouf_calc_ops
+def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,RESU_THER,**args):
+ self.type_sdprod(MODELE,modele_sdaster)
+ if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
+ if CARA_ELEM != None:self.type_sdprod(CARA_ELEM,cara_elem)
+ if FOND_FISS != None:self.type_sdprod(FOND_FISS,fond_fiss)
+ if RESU_THER != None:self.type_sdprod(RESU_THER,evol_ther)
+ return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=macr_ascouf_calc_prod,
+ fr="Réalise l'analyse thermomécanique du coude dont le maillage a été concu par MACR_ASCOUF_MAIL",
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+ TYPE_MAILLAGE =SIMP(statut='o',typ='TXM',
+ into=("SAIN",
+ "FISS_COUDE",
+ "FISS_AXIS_DEB",
+ "SOUS_EPAIS_COUDE"
+ ) ),
+
+ CL_BOL_P2_GV =FACT(statut='f',
+ ANGLE =SIMP(statut='o',typ='R' ),
+ AZIMUT =SIMP(statut='f',typ='R',defaut= 90. ),
+ ),
+
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+ MODELE =SIMP(statut='o',typ=CO,),
+ CHAM_MATER =SIMP(statut='f',typ=CO,),
+ CARA_ELEM =SIMP(statut='f',typ=CO,),
+ FOND_FISS =SIMP(statut='f',typ=CO,),
+ RESU_THER =SIMP(statut='f',typ=CO,),
+
+ AFFE_MATERIAU =FACT(statut='o',max=3,
+ regles=(UN_PARMI('TOUT','GROUP_MA'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
+ MATER =SIMP(statut='o',typ=mater_sdaster ),
+ TEMP_REF =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ ),
+
+ PRES_REP =FACT(statut='f',
+ PRES =SIMP(statut='o',typ='R' ),
+ EFFE_FOND_P1 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ PRES_LEVRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ ECHANGE =FACT(statut='f',
+ COEF_H =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ TEMP_EXT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ TORS_P1 =FACT(statut='f',max=6,
+ regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ FX =SIMP(statut='f',typ='R' ),
+ FY =SIMP(statut='f',typ='R' ),
+ FZ =SIMP(statut='f',typ='R' ),
+ MX =SIMP(statut='f',typ='R' ),
+ MY =SIMP(statut='f',typ='R' ),
+ MZ =SIMP(statut='f',typ='R' ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+
+ COMP_INCR =FACT(statut='f',
+ RELATION =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R'
+ ,defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+ ),
+
+ COMP_ELAS =FACT(statut='f',
+ RELATION =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+ ),
+
+ SOLVEUR =C_SOLVEUR(),
+
+ CONVERGENCE =C_CONVERGENCE(),
+
+ NEWTON =C_NEWTON(),
+
+ RECH_LINEAIRE =C_RECH_LINEAIRE(),
+
+ INCREMENT =C_INCREMENT(),
+
+ THETA_3D =FACT(statut='f',max='**',
+ R_INF =SIMP(statut='o',typ='R' ),
+ R_SUP =SIMP(statut='o',typ='R' ),
+ ),
+
+ IMPR_TABLE =FACT(statut='f',
+ regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+ PRESENT_PRESENT('TOUT_PARA','ANGLE', ),
+ PRESENT_PRESENT('TOUT_PARA','R_CINTR', ),
+ UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+ NOM_PARA =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=4,
+ into=("TRESCA_MEMBRANE",
+ "TRESCA_MFLE",
+ "TRESCA",
+ "SI_LONG"
+ "SI_RADI"
+ "SI_CIRC"
+ ) ),
+ TOUT_PARA =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ANGLE =SIMP(statut='f',typ='R',max='**' ),
+ R_CINTR =SIMP(statut='f',typ='R',max='**' ),
+ POSI_CURV_LONGI =SIMP(statut='f',typ='R',max='**' ),
+ POSI_ANGUL =SIMP(statut='f',typ='R',max='**' ),
+ TRANSFORMEE =SIMP(statut='f',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+ ),
+
+ IMPRESSION =FACT(statut='f',
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+ into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
+
+ b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+ VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+ ),
+
+ b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+ ),
+
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM' ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+from Macro.macr_ascouf_mail_ops import macr_ascouf_mail_ops
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=maillage_sdaster,
+ fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)",
+ UIinfo={"groupes":("Outils métier",)},reentrant='n',
+
+ regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+
+ EXEC_MAILLAGE =FACT(statut='o',
+ LOGICIEL =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+ UNITE_DATG =SIMP(statut='f',typ='I',defaut=70),
+ UNITE_MGIB =SIMP(statut='f',typ='I',defaut=19),
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+ ),
+
+ TYPE_ELEM =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
+
+ COUDE =FACT(statut='o',
+ ANGLE =SIMP(statut='o',typ='R' ),
+ R_CINTR =SIMP(statut='o',typ='R' ),
+ L_TUBE_P1 =SIMP(statut='o',typ='R' ),
+ L_TUBE_P2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ NB_ELEM_EPAIS =SIMP(statut='f',typ='I',defaut= 3 ),
+ SYME =SIMP(statut='f',typ='TXM',defaut="ENTIER",into=("ENTIER","QUART","DEMI") ),
+ TRANSFORMEE =SIMP(statut='o',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+ b_transf_coude =BLOC(condition = "TRANSFORMEE == 'COUDE' ",
+ DEXT =SIMP(statut='o',typ='R' ),
+ EPAIS =SIMP(statut='o',typ='R' ),
+ SUR_EPAIS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ BOL_P2 =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+ ),
+ b_transf_tube =BLOC(condition = "TRANSFORMEE == 'TUBE' ",
+ TRAN_EPAIS =SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ b_trans_epais_oui =BLOC(condition = "TRAN_EPAIS == 'OUI' ",
+ regles=(ENSEMBLE('ANGL_TETA2','EPAIS_TI'),
+ UN_PARMI('ABSC_CURV_TRAN','POSI_ANGU_TRAN'),),
+ DEXT_T1 =SIMP(statut='o',typ='R' ),
+ EPAIS_T1 =SIMP(statut='o',typ='R' ),
+ EPAIS_T2 =SIMP(statut='o',typ='R' ),
+ EPAIS_TI =SIMP(statut='f',typ='R' ),
+ ANGL_TETA1 =SIMP(statut='o',typ='R' ),
+ ANGL_TETA2 =SIMP(statut='f',typ='R' ),
+ ABSC_CURV_TRAN =SIMP(statut='f',typ='R' ),
+ POSI_ANGU_TRAN =SIMP(statut='f',typ='R' ),
+ ),
+ b_trans_epais_non =BLOC(condition = "TRAN_EPAIS == 'NON' ",
+ DEXT =SIMP(statut='o',typ='R' ),
+ EPAIS =SIMP(statut='o',typ='R' ),
+ SUR_EPAIS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ BOL_P2 =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+ ),
+ ),
+ ),
+
+ SOUS_EPAIS_COUDE=FACT(statut='f',
+ regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+ UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+ TYPE =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+ AXE_CIRC =SIMP(statut='f',typ='R' ),
+ AXE_LONGI =SIMP(statut='o',typ='R' ),
+ PROFONDEUR =SIMP(statut='o',typ='R' ),
+ POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),
+ POSI_ANGUL =SIMP(statut='f',typ='R' ),
+ POSI_CURV_CIRC =SIMP(statut='f',typ='R' ),
+ AZIMUT =SIMP(statut='f',typ='R' ),
+ SOUS_EPAIS =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+ NB_ELEM_LONGI =SIMP(statut='o',typ='I' ),
+ NB_ELEM_CIRC =SIMP(statut='o',typ='I' ),
+ NB_ELEM_RADI =SIMP(statut='f',typ='I',defaut= 3 ),
+ EMPREINTE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ SOUS_EPAIS_MULTI=FACT(statut='f',max='**',
+ regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+ UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+ TYPE =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+ AXE_CIRC =SIMP(statut='f',typ='R' ),
+ AXE_LONGI =SIMP(statut='o',typ='R' ),
+ PROFONDEUR =SIMP(statut='o',typ='R' ),
+ POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),
+ POSI_ANGUL =SIMP(statut='f',typ='R' ),
+ POSI_CURV_CIRC =SIMP(statut='f',typ='R' ),
+ AZIMUT =SIMP(statut='f',typ='R' ),
+ SOUS_EPAIS =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+ NB_ELEM_LONGI =SIMP(statut='o',typ='I' ),
+ NB_ELEM_CIRC =SIMP(statut='o',typ='I' ),
+ EMPREINTE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ FISS_COUDE =FACT(statut='f',
+ regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+ AXIS =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+ b_axis_non =BLOC(condition = "AXIS == 'NON' ",
+ LONGUEUR =SIMP(statut='o',typ='R' ),
+ ),
+ b_axis_oui =BLOC(condition = "AXIS == 'OUI' ",
+ LONGUEUR =SIMP(statut='f',typ='R' ),
+ ),
+ PROFONDEUR =SIMP(statut='o',typ='R' ),
+ ABSC_CURV =SIMP(statut='f',typ='R' ),
+ POSI_ANGUL =SIMP(statut='f',typ='R' ),
+ FISSURE =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT") ),
+ AZIMUT =SIMP(statut='f',typ='R',defaut= 90. ),
+ ORIEN =SIMP(statut='o',typ='R',
+ into=(45.,-45.,90.,0.E+0) ),
+ NB_TRANCHE =SIMP(statut='o',typ='I' ),
+ NB_SECTEUR =SIMP(statut='o',typ='I' ),
+ NB_COURONNE =SIMP(statut='o',typ='I' ),
+ RAYON_TORE =SIMP(statut='f',typ='R' ),
+ COEF_MULT_RC2 =SIMP(statut='f',typ='R',defaut= 1. ),
+ COEF_MULT_RC3 =SIMP(statut='f',typ='R' ),
+ ANGL_OUVERTURE =SIMP(statut='f',typ='R',defaut= 0.5 ),
+ ),
+
+ IMPRESSION =FACT(statut='f',max='**',
+ regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",
+ into=("ASTER","IDEAS","CASTEM") ),
+ b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+ VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+ ),
+ b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+ ),
+ FICHIER =SIMP(statut='f',typ='TXM' ),
+ UNITE =SIMP(statut='f',typ='I' ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 07/07/2009 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+from Macro.macr_aspic_calc_ops import macr_aspic_calc_ops
+
+def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,RESU_THER,**args):
+ if MODELE != None:self.type_sdprod(MODELE,modele_sdaster)
+ if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
+ if CARA_ELEM != None:self.type_sdprod(CARA_ELEM,cara_elem)
+ if FOND_FISS_1 != None:self.type_sdprod(FOND_FISS_1,fond_fiss)
+ if FOND_FISS_2 != None:self.type_sdprod(FOND_FISS_2,fond_fiss)
+ if RESU_THER != None:self.type_sdprod(RESU_THER,evol_ther)
+ return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_aspic_calc_prod,
+ fr="Réalise un calcul prédéfini de piquages sains ou fissurés ainsi que les post-traitements associés ",
+ UIinfo={"groupes":("Outils métier",)},reentrant='n',
+ regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+ TYPE_MAILLAGE =SIMP(statut='o',typ='TXM',
+ into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
+ "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
+
+ TUBULURE =FACT(statut='o',
+ TYPE =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
+ ),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ MODELE =SIMP(statut='f',typ=CO,),
+ CHAM_MATER =SIMP(statut='f',typ=CO,),
+ CARA_ELEM =SIMP(statut='f',typ=CO,),
+ FOND_FISS_1 =SIMP(statut='f',typ=CO,),
+ FOND_FISS_2 =SIMP(statut='f',typ=CO,),
+ RESU_THER =SIMP(statut='f',typ=CO,),
+
+ AFFE_MATERIAU =FACT(statut='o',max=3,
+ regles=(UN_PARMI('TOUT','GROUP_MA'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ GROUP_MA =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+ MATER =SIMP(statut='o',typ=mater_sdaster),
+ TEMP_REF =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ RCCM =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+ ),
+
+ EQUILIBRE =FACT(statut='o',
+ NOEUD =SIMP(statut='o',typ=no),
+ ),
+
+ PRES_REP =FACT(statut='o',
+ PRES =SIMP(statut='o',typ='R'),
+ NOEUD =SIMP(statut='f',typ=no),
+ EFFE_FOND =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PRES_LEVRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+
+ ECHANGE =FACT(statut='f',
+ COEF_H_TUBU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ COEF_H_CORP =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TEMP_EXT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+
+ TORS_CORP =FACT(statut='f',max=6,
+ regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ NOEUD =SIMP(statut='o',typ=no),
+ FX =SIMP(statut='f',typ='R'),
+ FY =SIMP(statut='f',typ='R'),
+ FZ =SIMP(statut='f',typ='R'),
+ MX =SIMP(statut='f',typ='R'),
+ MY =SIMP(statut='f',typ='R'),
+ MZ =SIMP(statut='f',typ='R'),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+
+ TORS_TUBU =FACT(statut='f',max=6,
+ regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+ FX =SIMP(statut='f',typ='R'),
+ FY =SIMP(statut='f',typ='R'),
+ FZ =SIMP(statut='f',typ='R'),
+ MX =SIMP(statut='f',typ='R'),
+ MY =SIMP(statut='f',typ='R'),
+ MZ =SIMP(statut='f',typ='R'),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+
+ COMP_INCR =FACT(statut='f',
+ RELATION =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut=10),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut=0),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+ ),
+
+ COMP_ELAS =FACT(statut='f',
+ RELATION =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+ ),
+
+ THETA_3D =FACT(statut='f',max='**',
+ R_INF =SIMP(statut='o',typ='R'),
+ R_SUP =SIMP(statut='o',typ='R'),
+ ),
+
+ OPTION =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX","CALC_G_MAX_LOCAL") ),
+ BORNES =FACT(statut='f',max='**',
+ NUME_ORDRE =SIMP(statut='o',typ='I'),
+ VALE_MIN =SIMP(statut='o',typ='R'),
+ VALE_MAX =SIMP(statut='o',typ='R'),
+ ),
+
+ SOLVEUR =C_SOLVEUR(),
+
+ CONVERGENCE =C_CONVERGENCE(),
+
+ NEWTON =C_NEWTON(),
+
+ RECH_LINEAIRE =C_RECH_LINEAIRE(),
+
+ INCREMENT =C_INCREMENT(),
+
+ PAS_AZIMUT =SIMP(statut='f',typ='I',defaut=1),
+
+ IMPRESSION =FACT(statut='f',
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+ into=("RESULTAT","ASTER","CASTEM","IDEAS")),
+
+ b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+ VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+ ),
+
+ b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+ ),
+
+ b_extrac =BLOC(condition="((FORMAT=='IDEAS')or(FORMAT=='CASTEM'))",
+ fr="extraction d un champ de grandeur",
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,
+ into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
+
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ TITRE =SIMP(statut='f',typ='TXM'),
+)
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+
+from Macro.macr_aspic_mail_ops import macr_aspic_mail_ops
+
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=maillage_sdaster,reentrant='n',
+ fr="Engendre le maillage d'un piquage sain ou avec fissure (longue ou courte)",
+ UIinfo={"groupes":("Outils métier",)},
+
+ EXEC_MAILLAGE =FACT(statut='o',
+ LOGICIEL =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
+ UNITE_DATG =SIMP(statut='f',typ='I',defaut=70),
+ UNITE_MGIB =SIMP(statut='f',typ='I',defaut=19),
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+ ),
+
+ TYPE_ELEM =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8")),
+
+ RAFF_MAIL =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
+
+ TUBULURE =FACT(statut='o',
+ E_BASE =SIMP(statut='o',typ='R'),
+ DEXT_BASE =SIMP(statut='o',typ='R'),
+ L_BASE =SIMP(statut='o',typ='R'),
+ L_CHANF =SIMP(statut='o',typ='R'),
+ E_TUBU =SIMP(statut='o',typ='R'),
+ DEXT_TUBU =SIMP(statut='o',typ='R'),
+ Z_MAX =SIMP(statut='o',typ='R'),
+ TYPE =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+ L_PENETR =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ ),
+
+ SOUDURE =FACT(statut='o',
+ H_SOUD =SIMP(statut='o',typ='R'),
+ ANGL_SOUD =SIMP(statut='o',typ='R'),
+ JEU_SOUD =SIMP(statut='o',typ='R'),
+ ),
+
+ CORPS =FACT(statut='o',
+ E_CORP =SIMP(statut='o',typ='R'),
+ DEXT_CORP =SIMP(statut='o',typ='R'),
+ X_MAX =SIMP(statut='o',typ='R'),
+ ),
+
+ FISS_SOUDURE =FACT(statut='f',
+ TYPE =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
+ AXIS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ PROFONDEUR =SIMP(statut='o',typ='R'),
+ LONGUEUR =SIMP(statut='f',typ='R'),
+ AZIMUT =SIMP(statut='o',typ='R'),
+ RAYON_TORE =SIMP(statut='f',typ='R'),
+ POSITION =SIMP(statut='o',typ='TXM',into=("DROIT","INCLINE")),
+ FISSURE =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT","NON_DEB","TRAVERS")),
+ LIGA_INT =SIMP(statut='f',typ='R'),
+ ANGL_OUVERTURE =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ COEF_MULT_RC1 =SIMP(statut='f',typ='R'),
+ COEF_MULT_RC2 =SIMP(statut='f',typ='R'),
+ COEF_MULT_RC3 =SIMP(statut='f',typ='R'),
+ NB_TRANCHE =SIMP(statut='f',typ='I'),
+ NB_SECTEUR =SIMP(statut='f',typ='I'),
+ NB_COURONNE =SIMP(statut='f',typ='I'),
+ ),
+
+ IMPRESSION =FACT(statut='f',max='**',
+ regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
+
+ b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+ VERSION =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+ ),
+
+ b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+ NIVE_GIBI =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+ ),
+ FICHIER =SIMP(statut='f',typ='TXM'),
+ UNITE =SIMP(statut='f',typ='I'),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 30/06/2008 AUTEUR FLEJOU J-L.FLEJOU
+# 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 FLEJOU J.L.FLEJOU
+
+from Macro.macr_cara_poutre_ops import macr_cara_poutre_ops
+
+MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=table_sdaster,
+ reentrant='n',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Calculer les caractéristiques d'une section transversale de poutre à partir d'un maillage 2D de la section",
+ regles=( EXCLUS('SYME_X','GROUP_MA_BORD'),
+ EXCLUS('SYME_Y','GROUP_MA_BORD'),
+ ),
+
+ MAILLAGE =SIMP(statut='f',typ=maillage_sdaster,
+ fr="Nom du concept maillage"),
+ b_maillage=BLOC( condition = "MAILLAGE == None",
+ regles=( PRESENT_PRESENT('FORMAT','UNITE') ),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+ fr="Format du fichier"),
+ UNITE =SIMP(statut='f',typ='I',defaut= 20,
+ fr="Unite correspondant au format du fichier maillage"),
+ ),
+
+ ORIG_INER =SIMP(statut='f',typ='R',max=3,defaut=(0.E+0,0.E+0),
+ fr="Point par rapport auquel sont calculées les inerties"),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ SYME_X =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="demi maillage par rapport a x=0"),
+ SYME_Y =SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="demi maillage par rapport a y=0"),
+
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Calcul des caractéristiques équivalentes a plusieurs sections disjointes"),
+
+ GROUP_MA_BORD =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Groupe(s) de mailles linéiques, bord(s) de(s) section(s)"),
+
+ b_gma_bord =BLOC( condition = "GROUP_MA_BORD != None",
+ fr=" calcul des carac. mecaniques",
+ regles=(UN_PARMI('NOEUD','GROUP_NO')),
+ NOEUD =SIMP(statut='f',typ=no, max='**',
+ fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
+ GROUP_NO =SIMP(statut='f',typ=grno,max='**',
+ fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
+ GROUP_MA_INTE =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="groupes de mailles linéiques bordant des trous dans la section"),
+ ),
+
+ b_reseau = BLOC( condition ="""(GROUP_MA_BORD != None) and (GROUP_MA != None)""",
+ fr=" calcul des coef de cisaillement équivalents a un reseau de poutres",
+ regles=(ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+ LONGUEUR =SIMP(statut='f',typ='R',
+ fr="Longueur du réseau de poutres"),
+ MATERIAU =SIMP(statut='f',typ=mater_sdaster,
+ fr="Materiau elastique lineaire du reseau"),
+ LIAISON =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT"),
+ fr="type de conditions aux limites sur le plancher supérieur" ),
+ ),
+)
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# 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 LEFEBVRE J.P.LEFEBVRE
+
+from Macro.macr_ecla_pg_ops import macr_ecla_pg_ops
+
+def macr_ecla_pg_prod(self,RESULTAT,MAILLAGE,RESU_INIT,**args):
+ self.type_sdprod(RESULTAT,AsType(RESU_INIT))
+ self.type_sdprod(MAILLAGE,maillage_sdaster)
+ return None
+
+
+MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_prod, reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Permettre la visualisation des champs aux points de Gauss d'une SD_RESULTAT sans lissage ni interpolation",
+
+
+ # SD résultat ,modèle et champs à "éclater" :
+ RESU_INIT =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à éclater",),
+ MODELE_INIT =SIMP(statut='o',typ=modele_sdaster,fr="MODELE à éclater"),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+
+ # paramètres numériques de la commande :
+ SHRINK =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+ TAILLE_MIN =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+
+ # concepts produits par la commande :
+ RESULTAT =SIMP(statut='o',typ=CO,fr="SD_RESULTAT résultat de la commande"),
+ MAILLAGE =SIMP(statut='o',typ=CO,fr="MAILLAGE associé aux cham_no de la SD_RESULTAT"),
+
+ # Sélection éventuelle d'un sous-ensemble des éléments à visualiser :
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+
+ # Sélection des numéros d'ordre :
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ )
+#& MODIF COMMANDE DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.macr_ecre_calc_ops import macr_ecre_calc_ops
+
+def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
+
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(DEBIT,table_sdaster)
+ return None
+
+MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecre_calc_prod,reentrant='n',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ regles = (UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
+# ********************************************
+ TABLE =SIMP(statut='o',typ=CO),
+ DEBIT =SIMP(statut='o',typ=CO),
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+
+ FISSURE =FACT(statut='o',min=1,max=1,
+ LONGUEUR =SIMP(statut='o',typ='R',val_min=0.E+0,fr="Longueur de la fissure [zl]"),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]"),
+ ANGLE =SIMP(statut='o',typ='R',fr="Angle par rapport a l'ascendante verticale (degres)"),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]"),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]"),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant le grand axe de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le grand axe de la section",),
+ LISTE_COTES_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section",),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant la hauteur de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la hauteur de la section",),
+ LISTE_COTES_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section",),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+
+ ECOULEMENT =FACT(statut='f',min=1,max=1,
+ PRES_ENTREE =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+# *************************************************************
+
+ TEMPERATURE =FACT(statut='f',min=1,max=1,
+ GRADIENT =SIMP(statut='o',typ='TXM',into=("FOURNI","IMPOSE","CALCULE"),
+ fr="Modele de calcul du gradient de temperature [imograd]" ),
+ b_gradient_fourni =BLOC(condition="GRADIENT=='FOURNI'",fr="Distribution de temperature fournie [imograd=-1]",
+ LISTE_COTES_TEMP =SIMP(statut='o',typ='R',max='**',fr="Liste des cotes pour les temperatures",
+ validators=NoRepeat() ),
+ LISTE_VAL_TEMP =SIMP(statut='o',typ='R',max='**',fr="Liste des valeurs de temperature", ),
+ ),
+ b_gradient_impose =BLOC(condition="GRADIENT=='IMPOSE'",fr="Distribution imposee de temperature [imograd=0]",
+ TEMP1 =SIMP(statut='o',typ='R',
+ fr="Gradient de temperature de la paroi le long de l'ecoulement (degC/m) [tm1]", ),
+ TEMP2 =SIMP(statut='o',typ='R',fr="Temperature de la paroi a l'entree (degC) [tm2]", ),
+ ),
+ b_gradient_calcule =BLOC(condition="GRADIENT=='CALCULE'",fr="Profil de temperature calcule [imograd=1]",
+ EPAISSEUR_PAROI =SIMP(statut='o',typ='R',fr="Epaisseur de la paroi (m) [epp]", ),
+ CONVECTION_AMONT =SIMP(statut='o',typ='R',
+ fr="Coefficient de convection a la surface de la paroi cote amont (W/degC/m2) [alphe]", ),
+ CONVECTION_AVAL =SIMP(statut='o',typ='R',
+ fr="Coefficient de convection a la surface de la paroi cote aval (W/degC/m2) [alphs]", ),
+ LAMBDA =SIMP(statut='o',typ='R',fr="Conduction thermique de la paroi (W/degC/m) [lambd]", ),
+ TEMP_FLUIDE_AVAL =SIMP(statut='o',typ='R',fr="Temperature du fluide cote aval (degC) [ts]", ),
+ ),
+ ),
+
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='f',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]"),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]"),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]"),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]"),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]"),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE =FACT(statut='f',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+
+# GENERAL
+# *******
+
+ COURBES =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+ ENTETE =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+) ;
+#& MODIF COMMANDE DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.macr_ecrevisse_ops import macr_ecrevisse_ops
+
+def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
+ # On definit ici les concepts produits
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(TEMPER,evol_ther)
+ self.type_sdprod(DEBIT,table_sdaster)
+ # concept retourne
+ return evol_noli
+
+
+
+MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecrevisse_prod,reentrant='f',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ reuse =SIMP(statut='f',typ='evol_noli'),
+ regles = (EXCLUS('TEMPER','ETAT_INIT'),
+ UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPT SORTANT
+# ********************************************
+ TABLE =SIMP(statut='f',typ=CO),
+ DEBIT =SIMP(statut='f',typ=CO),
+ TEMPER =SIMP(statut='f',typ=CO),
+
+# ETAT_INITIAL
+# ********************************************
+ ETAT_INIT =FACT(statut='f',
+ EVOL_NOLI =SIMP(statut='o',typ=evol_noli),
+ EVOL_THER =SIMP(statut='o',typ=evol_ther),
+ NUME_ORDRE =SIMP(statut='o',typ='I'),
+ ),
+
+
+# MODELES MECANIQUES
+# ********************************************
+ MODELE_MECA =SIMP(statut='o',typ=modele_sdaster),
+ MODELE_THER =SIMP(statut='o',typ=modele_sdaster),
+
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+ FISSURE =FACT(statut='o',min=1,max='**',
+ PREFIXE_FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,8)),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+ fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+ GROUP_NO_ORIG =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ GROUP_NO_EXTR =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+ TORTUOSITE =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+ fr="Coefficient de tortuosite de la fissure" ),
+ OUVERT_REMANENTE =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section", ),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section", ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+ ECOULEMENT =FACT(statut='o',min=1,max=1,
+ regles=(UN_PARMI('PRES_ENTREE','PRES_ENTREE_FO'),
+ UN_PARMI('PRES_SORTIE','PRES_SORTIE_FO'),
+ ),
+ PRES_ENTREE =SIMP(statut='f',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='f',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ PRES_SORTIE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",
+ regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO')),
+ fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ TITR_MASS_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO'),
+ UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+ fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ PRES_PART_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",
+ regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO'),
+ UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+ fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ TITR_MASS_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ PRES_PART_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster), fr="Liste des instants de calcul imposes" ),
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='o',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# CRITERE DE CONVERGENCE
+# **********************
+
+ CONV_CRITERE =FACT(statut='o',min=1,max=1,
+ TEMP_REF =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Temperature de reference pour le calcul du critere"),
+ PRES_REF =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Pression de reference pour le calcul du critere"),
+ CRITERE =SIMP(statut='o',typ='TXM',defaut="TEMP_PRESS",into=("TEMP_PRESS","EXPLICITE","TEMP","PRESS"),
+ fr="La nature du critere pour la convergence"),
+ b_critere_autre =BLOC(condition="CRITERE=='TEMP_PRESS' or CRITERE=='TEMP' or CRITERE=='PRESS'",
+ fr="Critere de convergence temp_press, temp, ou press",
+ SUBD_NIVEAU =SIMP(statut='f',typ='I',val_min=2,defaut=3,
+ fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+ SUBD_PAS_MINI =SIMP(statut='f',typ='R',val_min=0.0, fr="Pas de temps en dessous duquel on ne subdivise plus"),
+ NUME_ORDRE_MIN =SIMP(statut='f',typ='I',val_min=-1,defaut=-1,
+ fr="Numero d'ordre a partir duquel le critere est pris en compte"),
+ PREC_CRIT =SIMP(statut='f',typ='R',val_min=1.0E-2,defaut=1.0,
+ fr="Valeur du critere pour l'erreur de convergence"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE_ECREVISSE =FACT(statut='f',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+
+# GENERAL
+# *******
+
+ COURBES = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION = SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2") ),
+ ENTETE = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
+
+# DONNEES POUR STAT_NON_LINE ET THER_NON_LINE
+# *******************************************
+
+ # copie de stat_non_line.capy des options des mots cles qui nous interessent
+
+ # donnees communes
+
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+
+ # donnees specifiques a stat_non_line
+
+ EXCIT_MECA =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","SUIV","DIDI")),
+ ),
+
+ CONTACT = SIMP(statut='o',typ=char_contact),
+
+ COMP_INCR =C_COMP_INCR(),
+ NEWTON =FACT(statut='d',
+ REAC_INCR =SIMP(statut='f',typ='I',defaut= 1 ),
+ PREDICTION =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+ MATRICE =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+ PAS_MINI_ELAS =SIMP(statut='f',typ='R',defaut=0.0E+0),
+ REAC_ITER =SIMP(statut='f',typ='I',defaut=0),
+ REAC_ITER_ELAS =SIMP(statut='f',typ='I',defaut=0),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ ),
+ CONVERGENCE =FACT(statut='d',regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
+ b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None",
+ regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+ 'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),
+ ),
+ SIGM_REFE =SIMP(statut='f',typ='R'),
+ EPSI_REFE =SIMP(statut='f',typ='R'),
+ FLUX_THER_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD1_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD2_REFE =SIMP(statut='f',typ='R'),
+ VARI_REFE =SIMP(statut='f',typ='R'),
+ ),
+ RESI_REFE_RELA =SIMP(statut='f',typ='R'),
+ RESI_GLOB_MAXI =SIMP(statut='f',typ='R'),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10),
+ ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25),
+ ARRET =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ ),
+
+ # donnees specifiques a ther_lineaire
+
+ EXCIT_THER =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57),
+
+)
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 CORUS M.CORUS
+
+MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op= 81,sd_prod=macr_elem_dyna,
+ fr="Définition d'un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),
+ PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),),
+ BASE_MODALE =SIMP(statut='o',typ=mode_meca ),
+ MATR_RIGI =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),),
+ MATR_MASS =SIMP(statut='f',typ=matr_asse_depl_r ),
+ MATR_AMOR =SIMP(statut='f',typ=matr_asse_depl_r ),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ SANS_GROUP_NO =SIMP(statut='f',typ=grno ),
+ MATR_IMPE =SIMP(statut='f',typ=matr_asse_gene_c ),
+ b_matr_impe =BLOC(condition = "MATR_IMPE != None",
+ FREQ_EXTR =SIMP(statut='o',typ='R' ),
+ AMOR_SOL =SIMP(statut='f',typ='R',defaut=0.E+0 ),
+ ),
+ CAS_CHARGE =FACT(statut='f',max='**',
+ NOM_CAS =SIMP(statut='o',typ='TXM'),
+ VECT_ASSE_GENE =SIMP(statut='o',typ=vect_asse_gene ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Définition d'un macro-élément pour l'analyse statique par sous-structuration",
+ regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),
+ ENSEMBLE('DEFINITION','EXTERIEUR'),),
+ DEFINITION =FACT(statut='f',
+ regles=(PRESENT_PRESENT('PROJ_MESU','MODE_MESURE'),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ CHAR_MACR_ELEM =SIMP(statut='f',typ=char_meca),
+ INST =SIMP(statut='f',typ='R',defaut=0.0E+0 ),
+ NMAX_CAS =SIMP(statut='f',typ='I',defaut=10),
+ NMAX_CHAR =SIMP(statut='f',typ='I',defaut=10),
+ PROJ_MESU =SIMP(statut='f',typ=(mode_gene,tran_gene,harm_gene),max=1),
+# MODE_MESURE =SIMP(statut='f',typ=( mode_meca,base_modale) ),
+ MODE_MESURE =SIMP(statut='f',typ= mode_meca ),
+ ),
+ EXTERIEUR =FACT(statut='f',
+ regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ ),
+ RIGI_MECA =FACT(statut='f',
+ ),
+ MASS_MECA =FACT(statut='f',
+ ),
+ AMOR_MECA =FACT(statut='f',
+ ),
+ CAS_CHARGE =FACT(statut='f',max='**',
+ NOM_CAS =SIMP(statut='o',typ='TXM'),
+ SUIV =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',defaut=0.E+0),
+ ),
+
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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
+
+from Macro.macr_fiab_impr_ops import macr_fiab_impr_ops
+
+MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops,
+ docu="U7.04.41",UIinfo={"groupe":("Impression",)},
+ fr="Imprimer les valeurs à transmettre au logiciel de fiabilité.",
+ ang="Print values for the fiability software",
+#
+# 1. Le niveau d'information
+#
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Impression de la valeur de la cible
+#
+# 2.1. ==> La table contenant la valeur à imprimer
+#
+ TABLE_CIBLE = SIMP(statut='o',typ=table_sdaster,
+ fr="Table contenant la valeur cible.",
+ ang="Table which includes the target value."),
+#
+# 2.2. ==> Le nom du paramètre associé à la valeur cible dans cette table
+#
+ NOM_PARA_CIBLE = SIMP(statut='o',typ='TXM',
+ fr="Nom du paramètre associé à la valeur cible.",
+ ang="Name of the parameter connected to the target value."),
+#
+# 3. Impressions des valeurs des éventuels gradients
+#
+ GRADIENTS = FACT(statut='f',min=1,max='**',
+#
+# 3.1. ==> La table contenant la valeur à imprimer
+#
+ TABLE = SIMP(statut='o',typ=table_sdaster,
+ fr="Table contenant le gradient.",
+ ang="Table which includes the gradient."),
+#
+# 3.2. ==> Le paramètre sensible
+#
+ PARA_SENSI = SIMP(statut='o',typ=(para_sensi,theta_geom),
+ fr="Paramètre sensible associé au gradient.",
+ ang="Sensitivity parameter connected to the gradient."),
+#
+# 3.3. ==> Le nom du paramètre associé au gradient dans cette table
+#
+ NOM_PARA = SIMP(statut='o',typ='TXM',
+ fr="Nom du paramètre associé au gradient.",
+ ang="Name of the parameter connected to the gradient."),
+#
+ ),
+#
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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
+
+from Macro.macr_fiabilite_ops import macr_fiabilite_ops
+
+#
+#====
+# 1. Le retour : une liste de rééls.
+#====
+#
+def macr_fiabilite_prod ( self , **args ):
+ return listr8_sdaster
+#
+#====
+# 2. L'entete
+#====
+#
+MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops,
+ docu="U7.03.31",UIinfo={"groupe":("Post traitements",)},
+ sd_prod=macr_fiabilite_prod,
+ fr="Calcule les probabiltés de dépassement de seuil (mécanique de fiabilité).",
+ ang="Fiability mechanics.",
+#
+#====
+# 3. Le niveau d'information
+#====
+#
+ INFO = SIMP(statut="f",typ="I",defaut=1,into=(1,2)),
+#
+#====
+# 4. Nom et Version du logiciel de fiabilité
+#====
+#
+ LOGICIEL = SIMP(statut="f",typ="TXM",defaut="MEFISTO",
+ into=("MEFISTO",),
+ fr="Nom du logiciel de fiabilité.",
+ ang="Fiability software name."),
+#
+ VERSION = SIMP(statut="f",typ="TXM",defaut="V3_2",
+ into=("V3_2", "V3_N"),
+ fr="Version du logiciel de fiabilité.",
+ ang="Fiability software release."),
+#
+#====
+# 5. Les entrees-sorties du calcul ASTER déterministe
+#====
+#
+# 5.1. ==> Le jeu de commandes déterministe
+#
+ UNITE_ESCL = SIMP(statut="o",typ="I",
+ fr="Unité logique associée aux commandes du calcul ASTER déterministe.",
+ ang="Logical unit for the commands of the ASTER deterministic calculation."),
+#
+# 5.2. ==> Le destin des messages produits par ASTER
+#
+ MESS_ASTER = SIMP(statut="f",typ="TXM",defaut="DERNIER",
+ into=("AUCUN", "DERNIER", "TOUS"),
+ fr="Quels messages ASTER récupérer.",
+ ang="Which ASTER messages must be kept."),
+#
+#====
+# 6. Options
+#====
+# 6.1. ==> Générales
+#
+# 6.1.1. ==> La valeur du seuil
+#
+ SEUIL = SIMP(statut="o",typ="R",max=1,
+ fr="Le seuil de défaillance.",
+ ang="Failure threshold."),
+#
+# 6.1.2. ==> Le type du seuil : on a deux cas de figure selon que
+# la défaillance a lieu au dessus d'un seuil maximum ou
+# en dessous d'un seuil minimum
+#
+ SEUIL_TYPE = SIMP(statut="o",typ="TXM",max=1,
+ into=("MINIMUM","MAXIMUM"),
+ fr="Que faut-il ne pas dépasser : un maximum ou un minimum.",
+ ang="What is the failure threshold : maximum or minimum."),
+#
+# 6.2. ==> Pour MEFISTO
+#
+### en attente de résolution de AL 2004-006 (1/2) b_mefisto=BLOC( condition = "LOGICIEL=='MEFISTO'",
+#
+# 6.2.1. ==> Pilotage de la recherche du point de conception
+#
+ RECH_PT_CONCEPT = SIMP(statut="f",typ="TXM",defaut="OUI",
+ into=("OUI","NON"),
+ fr="Pour trouver le point de conception.",
+ ang="To find the design point."),
+#
+ b_rech_pt_concept=BLOC( condition = "RECH_PT_CONCEPT=='OUI'",
+#
+ EPSILON_U = SIMP(statut="f",typ="R",defaut=1.0E-2,
+ fr="Précision du test d'arret sur les points itératifs dans l'espace standard.",
+ ang="Precision of stop test for iterative points in standard space."),
+#
+ EPSILON_G = SIMP(statut="f",typ="R",defaut=1.0E-2,
+ fr="Précision du test d'arret sur la proximité de la surface d'état limite.",
+ ang="Precision of stop test for limit state surface."),
+#
+ TAU = SIMP(statut="f",typ="R",defaut=5.0E-1,
+ fr="Paramètre de la méthode de minimisation.",
+ ang="Parameter for the minimization method."),
+#
+ OMEGA = SIMP(statut="f",typ="R",defaut=1.0E-4,
+ fr="Paramètre de la méthode de minimisation.",
+ ang="Parameter for the minimization method."),
+#
+ ITER_MAX = SIMP(statut="f",typ="I",defaut=50,
+ fr="Nombre maximum d'itérations.",
+ ang="Maximum number of iterations."),
+ ),
+#
+# 6.2.2. ==> Méthode(s) employée(s) pour la probabilité de défaillance
+#
+ METHODE_FORM = SIMP(statut="f",typ="TXM",defaut="OUI",
+ into=("OUI","NON"),
+ fr="Recherche de la probabilité de défaillance avec la méthode FORM.",
+ ang="Research of failure probability with FORM method."),
+#
+ METHODE_SORM = SIMP(statut="f",typ="TXM",defaut="NON",
+ into=("OUI","NON"),
+ fr="Recherche de la probabilité de défaillance avec la méthode SORM.",
+ ang="Research of failure probability with SORM method."),
+#
+ TIRAGE_IMPORTANCE = SIMP(statut="f",typ="TXM",defaut="NON",
+ into=("OUI","NON"),
+ fr="Recherche de la probabilité de défaillance avec le tirage d'importance.",
+ ang="Research of failure probability with ."),
+#
+ b_tirage_importance=BLOC( condition = "TIRAGE_IMPORTANCE=='OUI'",
+#
+ NB_SIMULATION = SIMP(statut="f",typ="I",defaut=3,
+ fr="Nombre de simulations pour le tirage d'importance.",
+ ang="Number of simulation for."),
+#
+ ),
+#
+# 6.2.3. ==> Création d'une surface de réponse polynomiale
+#
+ POLYNOME_TAYLOR = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),),
+ HGRAD = SIMP(statut="f",typ="R",defaut=1.0E-2,
+ fr="Pas incrémental pour le calcul des gradients.",
+ ang="Step for calculation of gradients."),
+ HHESS = SIMP(statut="f",typ="R",defaut=1.0E-2,
+ fr="Pas incrémental pour le calcul des dérivées secondes.",
+ ang="Step for calculation of second derivatives."),
+#
+# 6.2.4. ==> Recherche d'un plan d'expérience
+#
+ PLAN_EXPERIENCE = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+ fr="Construction d'un plan d'expérience.",
+ ang="Construction of an experiment plan."),
+#
+ b_plan_experience=BLOC( condition = "PLAN_EXPERIENCE=='OUI'",
+#
+ ALPHA = SIMP(statut="f",typ="R",defaut=2.0E-1,
+ fr="Plan d'expérience : maille du plan de type composite centré.",
+ ang="Experiment plane : mesh centered composite."),
+#
+ BETA = SIMP(statut="f",typ="R",defaut=4.0E-1,
+ fr="Plan d'expérience : maille du plan de type factoriel.",
+ ang="Experiment plane : mesh factor."),
+#
+ ),
+#
+# 6.2.5. ==> Les tests
+# 6.2.5.1. ==> Test de la sphere
+#
+ T_SPHERE = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+ fr="Test de la sphère.",
+ ang="Sphere test."),
+#
+ b_test_de_la_sphere=BLOC( condition = "T_SPHERE=='OUI'",
+#
+ METHODE_TEST = SIMP(statut="f",typ="TXM",defaut="GAUSSIENNE",
+ into=("GAUSSIENNE","PARAMETRIQUE","REJECTION"),
+ fr="Type de méthode.",
+ ang="Method."),
+#
+ NB_POINT = SIMP(statut="f",typ="I",max=1,defaut=60,
+ fr="Nombre de points de la sphere.",
+ ang="Number of points over the sphere.")
+ ),
+#
+# 6.2.5.2. ==> Test du maximum fort
+#
+ T_MAXIMUM_FORT = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+ fr="Test du maximum fort.",
+ ang="Strong maximum test."),
+#
+ b_test_du_maximum_fort=BLOC( condition = "T_MAXIMUM_FORT=='OUI'",
+#
+ COS_LIM = SIMP(statut="f",typ="R",max=1,defaut=1.0,
+ fr="Cosinus de l'angle d'exclusion.",
+ ang="Cosine of angle of exclusion."),
+#
+ DPROB = SIMP(statut="f",typ="R",max=1,defaut=4.3E-1,
+ fr="Fraction d'iso-densité de probabilité de défaillance.",
+ ang="Fraction.")
+#
+ ),
+#
+# 6.2.5.3. ==> Test du hessien
+#
+ T_HESSIEN = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+ fr="Test du hessien.",
+ ang="Hessian test."),
+#
+# 6.2.6. ==> Les correlations entre les variables
+#
+ MATRICE = SIMP(statut="f",typ="R",max="**",
+ fr="Matrice de corrélation entre les variables.",
+ ang="Correlation matrix."),
+#
+### en attente de résolution de AL 2004-006 (2/2) ),
+#
+#====
+# 7. Definition des paramètres
+#====
+#
+ VARIABLE = FACT(statut="o",min=1,max="**",
+#
+# 7.1. ==> Nom de la variable
+#
+ NOM = SIMP(statut="o",typ="TXM",
+ fr="Nom de la variable, identique au nom de concept PARA_SENSI.",
+ ang="Name of the variable, identical to the name of the PARA_SENSI conceipt."),
+#
+# 7.2. ==> Loi de distribution
+#
+ LOI = SIMP(statut="o",typ="TXM",
+ into=("UNIFORME","NORMALE","LOGNORMALE","NORMALE_TRONQUEE"),
+ fr="Choix de la loi",
+ ang="Law."),
+#
+# 7.2.1. ==> Loi normale
+#
+ b_normale=BLOC(condition="LOI=='NORMALE'",
+#
+ VALE_MOY = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur moyenne.",
+ ang="Mean value."),
+#
+ ECART_TYPE = SIMP(statut="o",typ="R",max=1,
+ fr="Ecart type.",
+ ang="Standard deviation."),
+#
+ ),
+#
+# 7.2.2. ==> Loi lognormale
+#
+ b_lognormale=BLOC(condition="LOI=='LOGNORMALE'",
+#
+ VALE_MIN = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur minimale.",
+ ang="Minimal value."),
+#
+ VALE_MOY = SIMP(statut="f",typ="R",max=1,
+ fr="Valeur moyenne dans l'espace de la loi normale.",
+ ang="Mean value in the space of the normal law."),
+#
+ ECART_TYPE = SIMP(statut="f",typ="R",max=1,
+ fr="Ecart type dans l'espace de la loi normale.",
+ ang="Standard deviation in the space of the normal law."),
+#
+ VALE_MOY_PHY = SIMP(statut="f",typ="R",max=1,
+ fr="Valeur moyenne dans l'espace physique.",
+ ang="Mean value in the physical space."),
+#
+ ECART_TYPE_PHY = SIMP(statut="f",typ="R",max=1,
+ fr="Ecart type dans l'espace physique.",
+ ang="Standard deviation in the physical space."),
+#
+ regles=(AU_MOINS_UN("VALE_MOY" ,"VALE_MOY_PHY"),
+ AU_MOINS_UN("ECART_TYPE","ECART_TYPE_PHY"),
+ EXCLUS ("VALE_MOY" ,"VALE_MOY_PHY"),
+ EXCLUS ("VALE_MOY" ,"ECART_TYPE_PHY"),
+ EXCLUS ("ECART_TYPE","VALE_MOY_PHY"),
+ EXCLUS ("ECART_TYPE","ECART_TYPE_PHY")),
+#
+ ),
+#
+# 7.2.3. ==> Loi uniforme
+#
+ b_uniforme=BLOC(condition="LOI=='UNIFORME'",
+#
+ VALE_MIN = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur minimale.",
+ ang="Minimal value."),
+#
+ VALE_MAX = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur maximale.",
+ ang="Maximal value."),
+#
+ ),
+#
+# 7.2.4. ==> Loi normale tronquée
+#
+ b_normale_tronquee=BLOC(condition="LOI=='NORMALE_TRONQUEE'",
+#
+ VALE_MOY = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur moyenne de la loi normale complète.",
+ ang="Mean value for the entire normal law."),
+#
+ ECART_TYPE = SIMP(statut="o",typ="R",max=1,
+ fr="Ecart type de la loi normale complète.",
+ ang="Standard deviation for the entire normal law."),
+#
+ VALE_MIN = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur minimale.",
+ ang="Minimal value."),
+#
+ VALE_MAX = SIMP(statut="o",typ="R",max=1,
+ fr="Valeur maximale.",
+ ang="Maximal value."),
+#
+ ),
+#
+# 7.3. ==> Paramètres de calcul
+# 7.3.1. ==> Soit on cherche le point de conception, soit on le connait deja
+#
+ regles=(EXCLUS("POINT_INI","POINT_CONCEPT"),
+ EXCLUS("POINT_REF","POINT_CONCEPT"),),
+#
+# 7.3.2. ==> Quand on cherche le point de conception, on peut préciser le départ de l'algorithme.
+# Si on ne le fait pas, le programme prendra la valeur moyenne.
+#
+ POINT_INI = SIMP(statut="f",typ="R",max=1,
+ fr="Point de démarrage de l'algorithme itératif.",
+ ang="Initial point for iterative process."),
+#
+# 7.3.3. ==> Quand on cherche le point de conception, on peut préciser un point de référence pour normaliser.
+# Si on ne le fait pas, le programme prendra la valeur moyenne.
+#
+ POINT_REF = SIMP(statut="f",typ="R",max=1,
+ fr="Point de référence de l'algorithme itératif.",
+ ang="Reference point for iterative process."),
+#
+# 7.3.4. ==> Quand on cherche uniquement la probabilité de défaillance, il faut donner le point de conception
+#
+ POINT_CONCEPT = SIMP(statut="f",typ="R",max=1,
+ fr="Point de conception.",
+ ang="Design point."),
+#
+# 7.4. ==> Mode d'obtention du gradient par rapport à ce paramètre
+#
+ GRADIENT = SIMP(statut="o",typ="TXM",max=1,
+ into=("OUI","NON"),
+ fr="ASTER calcule directement le gradient.",
+ ang="ASTER computes the gradient for this parameter."),
+
+ b_gradient=BLOC(condition="GRADIENT=='NON'",
+ INCREMENT = SIMP(statut="o",typ="R",max=1,
+ fr="Incrément dans la direction.",
+ ang="Direction increment."),
+ ),
+
+ ),
+#
+);
+#& MODIF COMMANDE DATE 15/03/2010 AUTEUR GNICOLAS G.NICOLAS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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
+
+from Macro.macr_adap_mail_ops import macr_adap_mail_ops
+
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
+ docu="U7.03.02-b",UIinfo={"groupe":("Maillage",)},
+ fr="Donner des informations sur un maillage.",
+ ang="To give information about a mesh.",
+#
+# 1. Le niveau d'information
+#
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4)),
+#
+# 2. Version de HOMARD
+#
+ VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
+ into=("V9_6", "V9_N", "V9_N_PERSO"),
+ fr="Version de HOMARD",
+ ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+ LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",
+ into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+ fr="Langue des messages issus de HOMARD.",
+ ang="Language for HOMARD messages." ),
+#
+# 4. Le nom du maillage a analyser
+#
+ MAILLAGE = SIMP(statut='o',typ=maillage_sdaster,
+ fr="Maillage à analyser.",
+ ang="Mesh to be checked." ),
+#
+# 5. Suivi d'une frontiere
+#
+ MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+ fr="Maillage de la frontiere à suivre",
+ ang="Boundary mesh" ),
+#
+ b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+ fr="Information complémentaire sur la frontière",
+ ang="Further information about boundary",
+#
+ GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="Groupes de mailles définissant la frontière",
+ ang="Mesh groups which define the boundary" ),
+#
+ ) ,
+#
+# 6. Les options ; par defaut, on controle tout
+# 6.1. Nombre de noeuds et mailles
+#
+ NOMBRE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Nombre de noeuds et de mailles du maillage",
+ ang="Number of nodes and meshes in the mesh" ),
+#
+# 6.2. Determination de la qualite des mailles du maillage
+#
+ QUALITE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Qualité du maillage",
+ ang="Quality of the mesh" ),
+#
+# 6.3. Connexite du maillage
+#
+ CONNEXITE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Connexité du maillage.",
+ ang="Connexity of the mesh." ),
+#
+# 6.4. Taille des sous-domaines du maillage
+#
+ TAILLE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Tailles des sous-domaines du maillage.",
+ ang="Sizes of mesh sub-domains." ),
+#
+# 6.5. Controle de la non-interpenetration des elements
+#
+ INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+ fr="Controle de la non interpénétration des éléments.",
+ ang="Overlapping checking." ),
+#
+# 6.6. Propriétés du maillage de calcul
+#
+ PROP_CALCUL = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+ fr="Propriétés du maillage de calcul.",
+ ang="Properties of the calculation mesh." ),
+#
+# 7. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+#
+ b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
+ (VERSION_HOMARD == 'V9_N_PERSO') " ,
+ fr="Fichier supplementaire.",
+ ang="Additional file.",
+#
+ UNITE = SIMP(statut='f',typ='I',
+ fr="Unite logique a ajouter a HOMARD.Configuration",
+ ang="Additional file to HOMARD.Configuration" ),
+#
+ ) ,
+#
+# 8. Gestion des mailles autres que celles compatibles avec HOMARD
+# "REFUSER" : elles sont refusées (defaut)
+# "IGNORER" : elles sont ignorées
+#
+ ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+ fr="Acceptation de mailles incompatibles avec HOMARD",
+ ang="Incompatible meshes for HOMARD" ),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# 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.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+
+from Macro.macr_lign_coupe_ops import macr_lign_coupe_ops
+
+MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table_sdaster,
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur des lignes de coupe définies"
+ +" par deux points et un intervalle",
+ regles=(UN_PARMI("RESULTAT","CHAM_GD"),),
+
+ RESULTAT =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ),
+ CHAM_GD =SIMP(statut='f',typ=(cham_gd_sdaster)),
+
+ b_extrac =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+ regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+
+# extraction des résultats
+ b_meca =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ),
+ ),
+ b_ther =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='TEMP' ),
+ ),
+ b_cham =BLOC(condition = "CHAM_GD!=None",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',),),
+
+ UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=25),
+ MODELE =SIMP(statut='f',typ=modele_sdaster ),
+
+ VIS_A_VIS =FACT(statut='f',max='**',
+ regles=(EXCLUS('GROUP_MA_1','MAILLE_1'),),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma),
+ MAILLE_1 =SIMP(statut='f',typ=ma,max='**'),),
+
+ LIGN_COUPE =FACT(statut='o',max='**',
+ regles=(EXCLUS("NOM_CMP","INVARIANT","ELEM_PRINCIPAUX","RESULTANTE"),
+ PRESENT_PRESENT("TRAC_DIR","DIRECTION"),
+ EXCLUS("TRAC_DIR","TRAC_NOR"),
+ PRESENT_PRESENT("TRAC_DIR","NOM_CMP"),
+ PRESENT_PRESENT("TRAC_NOR","NOM_CMP"),),
+
+ INTITULE =SIMP(statut='f',typ='TXM',),
+ TYPE =SIMP(statut='o',typ='TXM',max=1,
+ into=("GROUP_NO","SEGMENT","ARC","GROUP_MA"),defaut="SEGMENT"),
+ REPERE =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+ into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+ OPERATION =SIMP(statut='f',typ='TXM',into=("EXTRACTION","MOYENNE",),defaut="EXTRACTION",),
+
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ INVARIANT =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ RESULTANTE =SIMP(statut='f',typ='TXM',max='**'),
+ TRAC_NOR =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ TRAC_DIR =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+
+
+ b_local =BLOC(condition = "REPERE=='LOCAL' ",
+ VECT_Y =SIMP(statut='o',typ='R',min=2,max=3),),
+
+ b_utili =BLOC(condition = "REPERE=='UTILISATEUR'",
+ ANGL_NAUT =SIMP(statut='o',typ='R',min=3,max=3),),
+
+ b_grno =BLOC(condition = "TYPE=='GROUP_NO'",
+ GROUP_NO =SIMP(statut='o',typ=grno, max=1),),
+
+ b_grma =BLOC(condition = "TYPE=='GROUP_MA'",
+ GROUP_MA =SIMP(statut='o',typ=grma, max=1),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),),
+
+ b_segment =BLOC(condition = "TYPE=='SEGMENT'",
+ NB_POINTS =SIMP(statut='o',typ='I',max=1),
+ COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3),
+ COOR_EXTR =SIMP(statut='o',typ='R',min=2,max=3),),
+
+ b_arc =BLOC(condition = "TYPE=='ARC'",
+ NB_POINTS =SIMP(statut='o',typ='I',max=1),
+ COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3),
+ CENTRE =SIMP(statut='o',typ='R',min=2,max=3),
+ ANGLE =SIMP(statut='o',typ='R',max=1),
+ DNOR =SIMP(statut='f',typ='R',min=2,max=3),),
+
+ b_cylind =BLOC(condition = ("REPERE=='CYLINDRIQUE' and TYPE!='ARC'"),
+ ORIGINE =SIMP(statut='f',typ='R',min=2,max=3),
+ AXE_Z =SIMP(statut='f',typ='R',min=3,max=3),),
+
+ DISTANCE_MAX =SIMP(statut='f',typ='R',defaut=0.,
+ fr="Si la distance entre un noeud de la ligne de coupe et le maillage coupé "
+ +"est > DISTANCE_MAX, ce noeud sera ignoré."),
+
+ ),
+) ;
+
+
+#& MODIF COMMANDE DATE 22/04/2010 AUTEUR ASSIRE A.ASSIRE
+# 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.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+from Macro.macr_recal_ops import macr_recal_ops
+
+def macr_recal_prod(self,**args ):
+ return listr8_sdaster
+
+MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
+ UIinfo={"groupes":("Résultats et champs",)},
+ sd_prod=macr_recal_prod,
+ fr="Réalise le recalage des calculs Aster sur des résultats expérimentaux"
+ +" ou sur d'autres résultats de calculs",
+
+ UNITE_ESCL =SIMP(statut='o',typ='I'),
+ RESU_EXP =SIMP(statut='o',typ=assd,max='**'),
+ POIDS =SIMP(statut='f',typ=assd,max='**'),
+ RESU_CALC =SIMP(statut='o',typ=assd,max='**'),
+ LIST_PARA =SIMP(statut='o',typ=assd,max='**'),
+
+ UNITE_RESU =SIMP(statut='f',typ='I',defaut=91),
+ PARA_DIFF_FINI =SIMP(statut='f',typ='R',defaut=0.001),
+
+ GRAPHIQUE =FACT(statut='f',
+ FORMAT =SIMP(statut='f',typ='TXM',defaut='XMGRACE',into=("XMGRACE","GNUPLOT"),),
+ AFFICHAGE =SIMP(statut='f',typ='TXM',defaut='TOUTE_ITERATION',into=("TOUTE_ITERATION","ITERATION_FINALE"),),
+ b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'", fr="Mots-clés propres à XMGRACE",
+ PILOTE =SIMP(statut='f',typ='TXM',defaut='',
+ into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+ fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+ UNITE =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ ),
+ ),
+
+
+ # Methodes d'optimisation
+ # -----------------------
+ METHODE =SIMP(statut='f',typ='TXM',defaut='LEVENBERG',into=("LEVENBERG", "FMIN", "FMINBFGS", "FMINNCG",
+ "GENETIQUE","HYBRIDE")),
+
+ b_genetique_options=BLOC(condition = "METHODE == 'GENETIQUE' or METHODE == 'HYBRIDE'" ,
+ NB_PARENTS =SIMP(statut='f',typ='I',defaut=10),
+ NB_FILS =SIMP(statut='f',typ='I',defaut=5),
+ ECART_TYPE =SIMP(statut='f',typ='R',defaut=1.),
+ GRAINE =SIMP(statut='f',typ='I'),
+ ITER_ALGO_GENE =SIMP(statut='f',typ='I',defaut=10),
+ RESI_ALGO_GENE =SIMP(statut='f',typ='R',defaut=1.E-3),
+ ),
+
+
+ # Criteres d'arret globaux
+ # -------------------------
+ ITER_MAXI =SIMP(statut='f',typ='I',defaut=10, fr="Nombre maximum d'iterations d'optimisation"),
+ ITER_FONC_MAXI =SIMP(statut='f',typ='I',defaut=1000, fr="Nombre maximum d'evaluations de la focntionnelle"),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R',defaut=1.E-3, fr="Critere d'arret sur la valeur du residu"),
+ TOLE_PARA =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur des parametres"),
+ TOLE_FONC =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur de la fonctionnelle"),
+
+
+ # Calculs des gradients
+ # ---------------------
+ b_gradient =BLOC(condition = "METHODE == 'FMINBFGS' or METHODE == 'FMINNCG'" ,
+ GRADIENT =SIMP(statut='f',typ='TXM',defaut='NON_CALCULE', into=("NON_CALCULE", "NORMAL", "ADIMENSIONNE" )),
+ ),
+
+ b_gradient_levenberg =BLOC(condition = "METHODE == 'LEVENBERG'" ,
+ GRADIENT =SIMP(statut='f',typ='TXM',defaut='NORMAL', into=( "NORMAL", "ADIMENSIONNE" )),
+ ),
+
+
+ # Mode d'evaluation de l'esclave
+ # ------------------------------
+ CALCUL_ESCLAVE =FACT(statut='d',
+ LANCEMENT =SIMP(statut='f', typ='TXM', defaut='INCLUSION',into=("DISTRIBUTION","INCLUSION"),),
+
+ b_eval_distrib =BLOC(condition = "LANCEMENT == 'DISTRIBUTION'",
+ MODE =SIMP(statut='f', typ='TXM', into=("INTERACTIF","BATCH"),),
+ MEMOIRE =SIMP(statut='f', typ='I', fr="Memoire demandee pour les calculs esclaves (Mo)"),
+ TEMPS =SIMP(statut='f', typ='I', fr="Temps demandee pour les calculs esclaves (secondes)"),
+ CLASSE =SIMP(statut='f', typ='TXM', fr="Classe demandee pour les calculs en batch"),
+ NMAX_SIMULT =SIMP(statut='f', typ='I',
+ fr="Nombre de calculs esclaves lances en paralle en mode distribution (non precise = automatique)"),
+ ),
+ ),
+
+ DYNAMIQUE =FACT(statut='f',
+ MODE_EXP =SIMP(statut='o',typ='TXM'),
+ MODE_CALC =SIMP(statut='o',typ='TXM'),
+ APPARIEMENT_MANUEL =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON")),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=2,into=( 1, 2 ) ),
+);
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 VOLDOIRE F.VOLDOIRE
+
+from Macro.macr_spectre_ops import macr_spectre_ops
+
+MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
+ reentrant='n', UIinfo={"groupes":("Outils métier",)},
+ fr="calcul de spectre, post-traitement de séisme",
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster,),
+ PLANCHER =FACT(statut='o',max='**',
+ regles=(AU_MOINS_UN('NOEUD','GROUP_NO' ),),
+ NOM =SIMP(statut='o',typ='TXM',),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), ),
+ NOM_CHAM =SIMP(statut='o',typ='TXM' ,into=('ACCE','DEPL')),
+ CALCUL =SIMP(statut='o',typ='TXM' ,into=('ABSOLU','RELATIF'),position='global'),
+ b_acce =BLOC( condition = "NOM_CHAM=='ACCE'",
+ regles=(UN_PARMI('LIST_FREQ','FREQ'),),
+ AMOR_SPEC =SIMP(statut='o',typ='R',max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ FREQ =SIMP(statut='f',typ='R',max='**'),
+ NORME =SIMP(statut='o',typ='R'),
+ RESU =FACT(statut='o',max='**',
+ regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+ RESU_GENE =SIMP(statut='f',typ=tran_gene),
+ RESULTAT =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+ b_calc =BLOC( condition = "CALCUL=='RELATIF'",
+ ACCE_X =SIMP(statut='o',typ=fonction_sdaster),
+ ACCE_Y =SIMP(statut='o',typ=fonction_sdaster),
+ ACCE_Z =SIMP(statut='o',typ=fonction_sdaster),), ),
+ IMPRESSION =FACT(statut='f',
+ TRI =SIMP(statut='f',typ='TXM',defaut='AMOR_SPEC',into=("AMOR_SPEC","DIRECTION",),),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut='TABLEAU',into=("TABLEAU","XMGRACE",),),
+ UNITE =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+ b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+ PILOTE =SIMP(statut='f',typ='TXM',defaut='',
+ into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),),),
+ TOUT =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON",),),
+ ),
+ ),
+ b_depl =BLOC( condition = "NOM_CHAM=='DEPL'",
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ RESU =FACT(statut='o',max=3,
+ regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+ RESU_GENE =SIMP(statut='f',typ=tran_gene),
+ RESULTAT =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+ b_calc =BLOC( condition = "CALCUL=='ABSOLU'",
+ DEPL_X =SIMP(statut='o',typ=fonction_sdaster),
+ DEPL_Y =SIMP(statut='o',typ=fonction_sdaster),
+ DEPL_Z =SIMP(statut='o',typ=fonction_sdaster),),),
+ ),
+)
+#& MODIF COMMANDE DATE 19/01/2010 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+
+from Macro.macro_elas_mult_ops import macro_elas_mult_ops
+
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+ if isinstance(NUME_DDL,CO) :
+ self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+ else:
+ self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+ if CAS_CHARGE[0]['NOM_CAS'] != None : return mult_elas
+ if CAS_CHARGE[0]['MODE_FOURIER'] != None : return fourier_elas
+ raise AsException("type de concept resultat non prevu")
+
+MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro_elas_mult_prod,reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ fr="Calculer les réponses statiques linéaires pour différents cas de charges ou modes de Fourier",
+ regles=(UN_PARMI('CHAR_MECA_GLOBAL','LIAISON_DISCRET', ),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster,CO)),
+ CHAR_MECA_GLOBAL=SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
+ LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CAS_CHARGE =FACT(statut='o',max='**',
+ regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+ UN_PARMI('CHAR_MECA','VECT_ASSE'),),
+ NOM_CAS =SIMP(statut='f',typ='TXM' ),
+ MODE_FOURIER =SIMP(statut='f',typ='I' ),
+ TYPE_MODE =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+ CHAR_MECA =SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+ "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
+ "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
+ "ECIN_ELEM_DEPL","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+ "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG","INTE_ELNO_ACTI",
+ "INTE_ELNO_REAC","SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA",
+ "ERZ2_ELEM_SIGM","VNOR_ELEM_DEPL","ERRE_ELNO_ELEM","SIRE_ELNO_DEPL",
+ "ERRE_ELEM_SIGM","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+ "EQUI_ELGA_EPSI","FORC_NODA","REAC_NODA","EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",
+ "EFGE_NOEU_DEPL","EQUI_NOEU_SIGM","EQUI_NOEU_EPSI","FLUX_NOEU_TEMP") ),
+ NUME_COUCHE =SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY")),
+ SOUS_TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster),
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+ b_mult_front = BLOC ( condition = "METHODE == 'MULT_FRONT' ",
+ fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 BODEL C.BODEL
+
+from Macro.macro_expans_ops import macro_expans_ops
+
+def macro_expans_prod(self, MODELE_MESURE, RESU_NX, RESU_EX, RESU_ET, RESU_RD, **args):
+ RESU_EXP = MODELE_MESURE['MESURE']
+ self.type_sdprod(RESU_NX, mode_meca)
+ for res in (RESU_EX, RESU_ET, RESU_RD):
+ if isinstance(res, CO):
+ if AsType(RESU_EXP) == mode_meca:
+ self.type_sdprod(res, mode_meca)
+ else:
+ self.type_sdprod(res, dyna_harmo)
+ else:
+ self.type_sdprod(res,res.__class__)
+ return None
+
+MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
+ op=macro_expans_ops,
+ sd_prod=macro_expans_prod,
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ fr="Outil d'expansion de resultats exprimentaux sur une base definie sur un modele numerique",
+ MODELE_CALCUL = FACT(statut='o',
+ MODELE = SIMP(statut='o',typ=(modele_sdaster) ),
+ BASE = SIMP(statut='o',typ=(mode_meca,) ),
+ NUME_MODE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+ ),
+ MODELE_MESURE = FACT(statut='o',
+ MODELE = SIMP(statut='o',typ=(modele_sdaster) ),
+ MESURE = SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+ NOM_CHAM = SIMP(statut='f',typ='TXM',defaut="DEPL",
+ into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+ NUME_MODE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+ ),
+ NUME_DDL = SIMP(statut='f',typ=(nume_ddl_sdaster)),
+ RESU_NX = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+ RESU_EX = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+ RESU_ET = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+ RESU_RD = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+ RESOLUTION = FACT(statut='f',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+ b_svd =BLOC(condition="METHODE=='SVD'",
+ EPS=SIMP(statut='f',typ='R',defaut=0. ),
+ ),
+ REGUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+ b_regul =BLOC(condition="REGUL!='NON'",
+ regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+ COEF_PONDER =SIMP(statut='f',typ='R',defaut=0. ,max='**' ),
+ COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+ ),
+ ),
+ )
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GREFFET N.GREFFET
+
+from Macro.macro_matr_ajou_ops import macro_matr_ajou_ops
+
+def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,FORC_AJOU,**args):
+ self.type_sdprod(MATR_AMOR_AJOU,matr_asse_gene_r)
+ self.type_sdprod(MATR_MASS_AJOU,matr_asse_gene_r)
+ self.type_sdprod(MATR_RIGI_AJOU,matr_asse_gene_r)
+ if FORC_AJOU != None:
+ for m in FORC_AJOU:
+ self.type_sdprod(m['VECTEUR'],vect_asse_gene)
+
+ return None
+
+MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro_matr_ajou_prod,
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Calculer de facon plus condensée qu'avec CALC_MATR_AJOU des matrices de masse, d'amortissement"
+ +" ou de rigidité ajoutés",
+ regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+ AU_MOINS_UN('MATR_MASS_AJOU','MATR_AMOR_AJOU','MATR_RIGI_AJOU'),
+ EXCLUS('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+ EXCLUS('MONO_APPUI','MODE_STAT',),
+ ),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),
+ GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
+ GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
+ MODELISATION =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
+ FLUIDE =FACT(statut='o',max='**',
+ RHO =SIMP(statut='o',typ='R'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ MAILLE =SIMP(statut='f',typ=ma),
+ ),
+ DDL_IMPO =FACT(statut='o',max='**',
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),
+ UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ PRES_FLUIDE =SIMP(statut='f',typ='R'),
+ PRES_SORTIE =SIMP(statut='f',typ='R'),
+ ),
+ ECOULEMENT =FACT(statut='f',
+ GROUP_MA_1 =SIMP(statut='o',typ=grma),
+ GROUP_MA_2 =SIMP(statut='o',typ=grma),
+ VNOR_1 =SIMP(statut='o',typ='R'),
+ VNOR_2 =SIMP(statut='f',typ='R'),
+ POTENTIEL =SIMP(statut='f',typ=evol_ther),
+ ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca),
+ DEPL_IMPO =SIMP(statut='f',typ=cham_no_sdaster),
+ MODELE_GENE =SIMP(statut='f',typ=modele_gene),
+ NUME_DDL_GENE =SIMP(statut='f',typ=nume_ddl_gene),
+ DIST_REFE =SIMP(statut='f',typ='R',defaut= 1.0E-2),
+ MATR_MASS_AJOU =SIMP(statut='f',typ=CO,),
+ MATR_RIGI_AJOU =SIMP(statut='f',typ=CO,),
+ MATR_AMOR_AJOU =SIMP(statut='f',typ=CO,),
+ MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca,),
+ FORC_AJOU =FACT(statut='f',max='**',
+ DIRECTION =SIMP(statut='o',typ='R',max=3),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ VECTEUR =SIMP(statut='o',typ=CO),
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ NOEUD_DOUBLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ AVEC_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+)
+#& MODIF COMMANDE DATE 17/11/2008 AUTEUR DELMAS J.DELMAS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+
+from Macro.macro_matr_asse_ops import macro_matr_asse_ops
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+ if not MATR_ASSE: raise AsException("Impossible de typer les concepts resultats")
+ if not NUME_DDL : raise AsException("Impossible de typer les concepts resultats")
+ if isinstance(NUME_DDL,CO) :
+ self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+ else:
+ self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+ for m in MATR_ASSE:
+ opti=m['OPTION']
+
+ if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+ "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+ "AMOR_MECA","IMPE_MECA",
+ "ONDE_FLUI","MASS_MECA_DIAG","MECA_GYRO" ) : t=matr_asse_depl_r
+
+ if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+ if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+ "RIGI_THER_CONV_D",) : t=matr_asse_temp_r
+
+ if opti == "RIGI_MECA_HYST" : t= matr_asse_depl_c
+
+ self.type_sdprod(m['MATRICE'],t)
+ return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ sd_prod=macro_matr_asse_prod,
+ fr="Calcul des matrices assemblées (rigidité, masse, amortissement,...) ",
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ INST =SIMP(statut='f',typ='R',defaut=0.),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**'),
+ CHAR_CINE =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+ NUME_DDL =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+ RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+ ),
+ b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ b_gcpc =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué",
+ RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ),
+ ),
+ b_petsc =BLOC(condition = "METHODE == 'PETSC'",fr="Paramètres de la méthode PETSC",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ ),
+
+ MATR_ASSE =FACT(statut='o',max='**',
+ MATRICE =SIMP(statut='o',typ=CO),
+ OPTION =SIMP(statut='o',typ='TXM',
+ into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+ "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+ "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+ "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR","MECA_GYRO",
+ "RIGI_THER","MASS_THER",
+ "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",)
+ ),
+
+ b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0),
+ ),
+
+ b_rigi_geom = BLOC( condition = "OPTION=='RIGI_GEOM'",
+ SIEF_ELGA =SIMP(statut='o',typ=cham_elem),
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0),
+ ),
+
+ b_rigi_meca_lagr = BLOC( condition = "OPTION=='RIGI_MECA_LAGR'",
+ THETA =SIMP(statut='o',typ=theta_geom),
+ PROPAGATION =SIMP(statut='f',typ='R'),
+ ),
+
+ b_rigi_ther = BLOC( condition = "OPTION=='RIGI_THER'",
+ MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0),
+ ),
+
+ ), # fin MATR_ASSE
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 16/02/2010 AUTEUR GREFFET N.GREFFET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DEVESA G.DEVESA
+
+from Macro.macro_miss_3d_ops import macro_miss_3d_ops
+
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
+ fr="Préparation des données puis exécution du logiciel MISS3D",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ OPTION =FACT(statut='o',
+ regles=(UN_PARMI('TOUT','MODULE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ MODULE =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
+ ),
+ PROJET =SIMP(statut='o',typ='TXM'),
+ REPERTOIRE =SIMP(statut='f',typ='TXM'),
+ VERSION =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4","V1_5",),defaut="V1_4"),
+ UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),
+ UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),
+ UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),
+ TABLE_SOL =SIMP(statut='f',typ=table_sdaster, fr="Caractéristiques du sol"),
+ UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+ UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=0),
+ PARAMETRE =FACT(statut='f',
+ regles=(PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
+ PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
+ PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
+ PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
+ PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
+ FREQ_MIN =SIMP(statut='f',typ='R'),
+ FREQ_MAX =SIMP(statut='f',typ='R'),
+ FREQ_PAS =SIMP(statut='f',typ='R'),
+ Z0 =SIMP(statut='f',typ='R'),
+ SURF =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+ RFIC =SIMP(statut='f',typ='R'),
+ FICH_RESU_IMPE =SIMP(statut='f',typ='TXM'),
+ FICH_RESU_FORC =SIMP(statut='f',typ='TXM'),
+ TYPE =SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
+ DREF =SIMP(statut='f',typ='R'),
+ ALGO =SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
+ OFFSET_MAX =SIMP(statut='f',typ='R'),
+ OFFSET_NB =SIMP(statut='f',typ='I'),
+ SPEC_MAX =SIMP(statut='f',typ='R'),
+ SPEC_NB =SIMP(statut='f',typ='I'),
+ ISSF =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+ FICH_POST_TRAI =SIMP(statut='f',typ='TXM'),
+ CONTR_NB =SIMP(statut='f',typ='I'),
+ CONTR_LISTE =SIMP(statut='f',typ='R',max='**'),
+ LFREQ_NB =SIMP(statut='f',typ='I'),
+ LFREQ_LISTE =SIMP(statut='f',typ='R',max='**'),
+ DIRE_ONDE =SIMP(statut='f',typ='R',max='**'),
+ ),
+) ;
+#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+
+from Macro.macro_mode_meca_ops import macro_mode_meca_ops
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_meca,
+ reentrant='n',fr="Lancer une succession de calculs de modes propres réels",
+ UIinfo={"groupes":("Résolution",)},
+ MATR_A =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_B =SIMP(statut='o',typ=matr_asse_depl_r ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+# ce mot cle ne devrait il pas etre dans calc_freq
+ METHODE =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+ into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+ b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+ PREC_ORTHO =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+ NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_LANCZOS =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+ NMAX_ITER_QR =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+ ),
+ b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+ PREC_BATHE =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+ NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+ PREC_JACOBI =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+ ),
+ b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+ PREC_SOREN =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
+ NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
+ PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+ ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="SANS",
+ into=("MODE_RIGIDE","SANS") ),
+ CALC_FREQ =FACT(statut='d',min=0,
+ regles=(UN_PARMI('FREQ','FREQ_MAX'),
+ PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
+ PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),
+ EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+ FREQ =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max='**', ),
+ FREQ_MIN =SIMP(statut='f',typ='R' ),
+ FREQ_MAX =SIMP(statut='f',typ='R' ),
+ NB_BLOC_FREQ =SIMP(statut='f',typ='I' ),
+ DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+ COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2 ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),
+ STOP_FREQ_VIDE =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+ ),
+ VERI_MODE =FACT(statut='d',min=0,
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+ STURM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ NORM_MODE =FACT(statut='o',max='**',
+ NORME =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",
+ into=("MASS_GENE","RIGI_GENE","EUCL",
+ "EUCL_TRAN","TRAN","TRAN_ROTA") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
+ ),
+ FILTRE_MODE =FACT(statut='f',
+ CRIT_EXTR =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",
+ into=("MASS_EFFE_UN","MASS_GENE") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ IMPRESSION =FACT(statut='d',
+ TOUT_PARA =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ CUMUL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ CRIT_EXTR =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",
+ into=("MASS_EFFE_UN","MASS_GENE",) ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+
+from Macro.macro_proj_base_ops import macro_proj_base_ops
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,**args ):
+ if MATR_ASSE_GENE != None:
+ for m in MATR_ASSE_GENE:
+ self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+ if VECT_ASSE_GENE != None:
+ for v in VECT_ASSE_GENE:
+ self.type_sdprod(v['VECTEUR'],vect_asse_gene)
+ return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
+ regles=(AU_MOINS_UN('MATR_ASSE_GENE','VECT_ASSE_GENE')),
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ sd_prod=macro_proj_base_prod,
+ fr="Projection des matrices et/ou vecteurs assemblés sur une base (modale ou de RITZ)",
+ BASE =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+ NB_VECT =SIMP(statut='f',typ='I',defaut= 9999),
+ PROFIL =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+ MATR_ASSE_GENE =FACT(statut='f',max='**',
+ MATRICE =SIMP(statut='o',typ=CO,),
+ regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE',),),
+ MATR_ASSE =SIMP(statut='f',typ=matr_asse_depl_r),
+ MATR_ASSE_GENE =SIMP(statut='f',typ=matr_asse_gene_r),
+ ),
+ VECT_ASSE_GENE =FACT(statut='f',max='**',
+ VECTEUR =SIMP(statut='o',typ=CO,),
+ regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE',),),
+ TYPE_VECT =SIMP(statut='f',typ='TXM',defaut="FORC"),
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster),
+ VECT_ASSE_GENE =SIMP(statut='f',typ=vect_asse_gene),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Compilation des catalogues de commandes et d'éléments",
+
+ ELEMENT =FACT(statut='f',),
+
+) ;
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+ fr="Résoudre un problème de mécanique statique linéaire",reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(EXCLUS("INST","LIST_INST"),
+ AU_MOINS_UN('CHAM_MATER','CARA_ELEM',),
+ CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater,
+ fr="le CHAM_MATER est nécessaire, sauf si le modèle ne contient que des éléments discrets (modélisations DIS_XXX)",
+ ang="CHAM_MATER is compulsory, except if the model contains only discret elements (modelizations DIS_XXX)"),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem,
+ fr="le CARA_ELEM est nécessaire dès que le modèle contient des éléments de structure : coques, poutres, ...",
+ ang="CARA_ELEM is compulsory as soon as the model contains structural elements : plates, beams, ..."),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+ ),
+ INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ OPTION =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA_DEPL","SANS"),defaut="SIEF_ELGA_DEPL",max=1,
+ fr="seule option : contraintes aux points de Gauss. Utiliser CALC_ELEM pour les autres.",
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC") ),
+
+ b_feti =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
+ PARTITION =SIMP(statut='o',typ=sd_feti_sdaster),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6,val_min=0.),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ REAC_RESI =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ TYPE_REORTHO_DD =SIMP(statut='f',typ='TXM',defaut="GSM",into=("SANS","GS","GSM","IGSM") ),
+ NB_REORTHO_DD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ NB_REORTHO_INST =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ PRE_COND =SIMP(statut='f',typ='TXM',defaut="LUMPE",into=("LUMPE","SANS") ),
+ SCALING =SIMP(statut='f',typ='TXM',defaut="MULT",into=("SANS","MULT") ),
+ VERIF_SDFETI =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ TEST_CONTINU =SIMP(statut='f',typ='R',defaut=1.E-8,val_min=0.),
+ INFO_FETI =SIMP(statut='f',typ='TXM',defaut='FFFFFFFFFFFFFFFFFFFFFFFF'),
+ STOCKAGE_GI =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","CAL") ),
+ NB_SD_PROC0 =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ ACCELERATION_SM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' or METHODE=='FETI' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ MATR_DISTRIBUEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op= 80,sd_prod=mode_cycl,
+ fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir"
+ +" d'une base de modes propres réels",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ BASE_MODALE =SIMP(statut='o',typ=mode_meca ),
+ NB_MODE =SIMP(statut='f',typ='I',defaut= 999 ),
+ NB_SECTEUR =SIMP(statut='o',typ='I' ),
+ LIAISON =FACT(statut='o',
+ DROITE =SIMP(statut='o',typ='TXM' ),
+ GAUCHE =SIMP(statut='o',typ='TXM' ),
+ AXE =SIMP(statut='f',typ='TXM' ),
+ ),
+ VERI_CYCL =FACT(statut='f',
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
+ DIST_REFE =SIMP(statut='f',typ='R' ),
+ ),
+ CALCUL =FACT(statut='o',
+ regles=(UN_PARMI('TOUT_DIAM','NB_DIAM'),),
+ TOUT_DIAM =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NB_DIAM =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
+ ,into=("PLUS_PETITE","CENTRE","BANDE") ),
+ b_centre =BLOC(condition = "OPTION == 'CENTRE'",
+ FREQ =SIMP(statut='o',typ='R',),
+ ),
+ b_bande =BLOC(condition = "OPTION == 'BANDE'",
+ FREQ =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2),
+ ),
+# NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10 ),
+ PREC_SEPARE =SIMP(statut='f',typ='R',defaut= 100. ),
+ PREC_AJUSTE =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 50 ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 05/05/2009 AUTEUR BOITEAU O.BOITEAU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 O.BOITEAU
+
+def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+ if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+ if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+ if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+ if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+ if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+ raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op= 44,sd_prod=mode_iter_inv_prod
+ ,fr="Calcul des modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MATR_A =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+ MATR_B =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+ MATR_C =SIMP(statut='f',typ=matr_asse_depl_r ),
+ TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",
+ into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+ b_dynam =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+ CALC_FREQ =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+
+ OPTION =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+ fr="Choix de l option pour estimer les valeurs propres" ),
+ FREQ =SIMP(statut='o',typ='R',max='**'),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),
+ NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+ PREC_SEPARE =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+ NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15,val_min=0 ),
+ PREC_AJUSTE =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+ ),
+ ),
+ b_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+ CALC_FREQ =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+
+ OPTION =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+ fr="Choix de l option pour estimer les valeurs propres" ),
+ CHAR_CRIT =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),
+ NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+ PREC_SEPARE =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+ NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+ PREC_AJUSTE =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+ ),
+ ),
+ CALC_MODE =FACT(statut='d',min=0,fr="Choix des paramètres pour le calcul des vecteurs propres",
+ OPTION =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
+ PREC =SIMP(statut='f',typ='R',defaut= 1.E-5,val_min=0.E+0,fr="Précision de convergence" ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+ ),
+ VERI_MODE =FACT(statut='d',min=0,
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0,
+ fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des param\350tres de sensibilit\351.",
+ ang="List of sensitivity parameters",
+ ),
+ b_sensibilite =BLOC(condition = "SENSIBILITE != None",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ EXCIT =FACT(statut='f',max='**',), # que pour NMDOME
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+) ;
+#& MODIF COMMANDE DATE 05/05/2009 AUTEUR BOITEAU O.BOITEAU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 O.BOITEAU
+
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+ if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+ if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+ if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+ if AsType(MATR_A) == matr_asse_depl_c : return mode_meca_c
+ if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+ if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+ if AsType(MATR_A) == matr_asse_gene_c : return mode_gene
+
+ raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_prod,
+ fr="Calcul des modes propres par itérations simultanées ; valeurs propres et"
+ +" modes propres réels ou complexes",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MATR_A =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
+ matr_asse_gene_r,matr_asse_gene_c,matr_asse_pres_r ) ),
+ MATR_B =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+ MATR_C =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+ into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+ b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+ PREC_ORTHO =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+ NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_LANCZOS =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+ NMAX_ITER_QR =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+ ),
+ b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+ PREC_BATHE =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+ NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+ PREC_JACOBI =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+ ),
+ b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+ PREC_SOREN =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),
+ NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),
+ PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+ ),
+ b_qz =BLOC(condition = "METHODE == 'QZ'",
+ TYPE_QZ =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),
+ ),
+ TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",
+ into=("MODE_FLAMB","DYNAMIQUE"),
+ fr="Type d analyse" ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
+ fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+ b_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+ CALC_FREQ =FACT(statut='d',min=0,
+ OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+ fr="Choix de l option et par conséquent du shift du problème modal" ),
+ b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_centre =BLOC(condition = "OPTION == 'CENTRE'",
+ fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+ CHAR_CRIT =SIMP(statut='o',typ='R',
+ fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_bande =BLOC(condition = "(OPTION == 'BANDE')",
+ fr="Recherche des valeurs propres dans une bande donnée",
+ CHAR_CRIT =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+ fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+ ),
+ APPROCHE =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+ fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
+ regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+ DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+ COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ ),
+ ),
+
+ b_dynam =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+ CALC_FREQ =FACT(statut='d',min=0,
+ OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+ fr="Choix de l option et par conséquent du shift du problème modal" ),
+ b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_centre =BLOC(condition = "OPTION == 'CENTRE'",
+ fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+ FREQ =SIMP(statut='o',typ='R',
+ fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',),
+ NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+ ),
+ b_bande =BLOC(condition = "(OPTION == 'BANDE')",
+ fr="Recherche des valeurs propres dans une bande donnée",
+ FREQ =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+ fr="Valeur des deux fréquences délimitant la bande de recherche"),
+ ),
+ APPROCHE =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+ fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),
+ regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+ DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+ COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+ NPREC_SOLVEUR =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+ NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+ SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+ ),
+ ),
+
+ VERI_MODE =FACT(statut='d',min=0,
+ STOP_ERREUR =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+ SEUIL =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+ fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+ STURM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des param\350tres de sensibilit\351.",
+ ang="List of sensitivity parameters",
+ ),
+ b_sensibilite =BLOC(condition = "SENSIBILITE != None",
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem ),
+ EXCIT =FACT(statut='f',max='**',), # que pour NMDOME
+ ),
+ STOP_FREQ_VIDE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 13/10/2009 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
+ fr="Calcul de deformees statiques pour un déplacement, une force ou une accélération unitaire imposé",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ MATR_RIGI =SIMP(statut='o',typ=matr_asse_depl_r ),
+ MATR_MASS =SIMP(statut='f',typ=matr_asse_depl_r ),
+ regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
+ MODE_STAT =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+ UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,max='**'),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+ AVEC_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ SANS_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ FORCE_NODALE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+ UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,max='**'),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+ AVEC_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ SANS_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ PSEUDO_MODE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
+ AXE =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
+ DIRECTION =SIMP(statut='f',typ='R',min=3,max=3),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,max='**'),
+ b_dir =BLOC(condition = "DIRECTION != None",
+ NOM_DIR =SIMP(statut='f',typ='TXM' ),),
+ b_cmp =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
+ regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ AVEC_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ SANS_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+ ),
+
+
+ SOLVEUR =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+
+
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
+ NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ ),
+
+
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+ reentrant='f',
+ fr="Définir la base modale d'une structure sous écoulement",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+# la commande modi_base _modale : reentrant = f ou o
+ regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
+ BASE =SIMP(statut='o',typ=mode_meca ),
+ BASE_ELAS_FLUI =SIMP(statut='o',typ=melasflu_sdaster ),
+ NUME_VITE_FLUI =SIMP(statut='o',typ='I' ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'),
+ AMOR_UNIF =SIMP(statut='f',typ='R' ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 14/10/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
+ fr="Effectuer des modifications sur un maillage existant: réorienter des mailles servant,"
+ +" à l'application d'une pression, à la modélisation du contact,...",
+ reentrant='o',
+ UIinfo={"groupes":("Maillage",)},
+ regles=(AU_MOINS_UN('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+ 'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB','SYMETRIE',
+ 'ORIE_LIGNE',),
+ PRESENT_ABSENT('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+ 'ORIE_LIGNE'),
+ PRESENT_ABSENT('DEFORME','ORIE_FISSURE','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+ 'ORIE_LIGNE'),
+ PRESENT_ABSENT('EQUE_PIQUA','ORIE_FISSURE','DEFORME','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+ 'ORIE_LIGNE'),
+ PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_FISSURE','DEFORME','EQUE_PIQUA',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+ 'ORIE_LIGNE'),
+ PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'PLAQ_TUBE','MODI_MAILLE',),
+ PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'PLAQ_TUBE','MODI_MAILLE','ORIE_LIGNE'),
+ PRESENT_ABSENT('PLAQ_TUBE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE','ORIE_LIGNE'),
+ PRESENT_ABSENT('MODI_MAILLE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+ 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','ORIE_LIGNE'),
+ EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+ EXCLUS('EQUE_PIQUA','TUBE_COUDE'),
+ EXCLUS('ROTATION','MODI_BASE'),
+ EXCLUS('SYMETRIE','ROTATION'),
+ EXCLUS('SYMETRIE','TRANSLATION'),
+ EXCLUS('SYMETRIE','MODI_BASE'),
+ EXCLUS('SYMETRIE','ECHELLE'),
+ ),
+ MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ),
+
+ ORIE_FISSURE =FACT(statut='f',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+
+ DEFORME =FACT(statut='f',
+ OPTION =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
+ DEPL =SIMP(statut='o',typ=cham_no_sdaster ),
+ b_deform =BLOC(condition = "OPTION=='TRAN_APPUI'",
+ GROUP_NO_APPUI = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),
+ GROUP_NO_STRU = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),),
+ ),
+
+ EQUE_PIQUA =FACT(statut='f',
+ GROUP_NO =SIMP(statut='o',typ=grno),
+ E_BASE =SIMP(statut='o',typ='R' ),
+ DEXT_BASE =SIMP(statut='o',typ='R' ),
+ L_BASE =SIMP(statut='o',typ='R' ),
+ L_CHANF =SIMP(statut='o',typ='R' ),
+ TYPE =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+ H_SOUD =SIMP(statut='o',typ='R' ),
+ ANGL_SOUD =SIMP(statut='o',typ='R' ),
+ JEU_SOUD =SIMP(statut='o',typ='R' ),
+ E_CORP =SIMP(statut='o',typ='R' ),
+ DEXT_CORP =SIMP(statut='o',typ='R' ),
+ AZIMUT =SIMP(statut='o',typ='R' ),
+ RAFF_MAIL =SIMP(statut='o',typ='TXM' ),
+ X_MAX =SIMP(statut='o',typ='R' ),
+ ),
+ ORIE_PEAU_2D =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA_SURF =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ ORIE_PEAU_3D =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA_VOLU =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ ORIE_SHB =FACT(statut='f',max=1,
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ ORIE_NORM_COQUE =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ VECT_NORM =SIMP(statut='f',typ='R',max=3),
+ b_vect_norm =BLOC(condition = "VECT_NORM != None",
+ regles=UN_PARMI('NOEUD','GROUP_NO'),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ ),
+ ),
+ ORIE_LIGNE =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ VECT_TANG =SIMP(statut='f',typ='R',max=3),
+ b_vect_tang =BLOC(condition = "VECT_TANG != None",
+ regles=UN_PARMI('NOEUD','GROUP_NO'),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ ),
+ ),
+ PLAQ_TUBE =FACT(statut='f',
+ DEXT =SIMP(statut='o',typ='R' ),
+ EPAIS =SIMP(statut='o',typ='R' ),
+ L_TUBE_P1 =SIMP(statut='o',typ='R' ),
+ AZIMUT =SIMP(statut='f',typ='R',defaut= 90. ),
+ COUTURE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+ ),
+ TUBE_COUDE =FACT(statut='f',
+ ANGLE =SIMP(statut='o',typ='R' ),
+ R_CINTR =SIMP(statut='o',typ='R' ),
+ L_TUBE_P1 =SIMP(statut='o',typ='R' ),
+ ),
+ MODI_MAILLE =FACT(statut='f',max=1,
+ regles=(AU_MOINS_UN('GROUP_MA_FOND','MAILLE_FOND','GROUP_NO_FOND','NOEUD_FOND'),),
+ OPTION =SIMP(statut='o',typ='TXM',into=("NOEUD_QUART",) ),
+ GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1),
+ MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max=1),
+ GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+ NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max=1),
+ ),
+ MODI_BASE =FACT(statut='f',
+ VECT_X =SIMP(statut='o',typ='R',min=2,max=3),
+ VECT_Y =SIMP(statut='f',typ='R',min=2,max=3),
+ ),
+ ECHELLE =SIMP(statut='f',typ='R',),
+ TRANSLATION =SIMP(statut='f',typ='R',min=2,max=3),
+ ROTATION =FACT(statut='f',max='**',
+ POIN_1 =SIMP(statut='o',typ='R',min=2,max=3),
+ ANGL =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+ regles=(EXCLUS('DIR','POIN_2'),),
+ POIN_2 =SIMP(statut='f',typ='R',min=2,max=3),
+ DIR =SIMP(statut='f',typ='R',min=2,max=3),
+ ),
+ SYMETRIE =FACT(statut='f',max='**',
+ fr = "Symétrie du maillage par rapport à un plan en 3D ou à une droite en 2D.",
+ POINT =SIMP(statut='o',typ='R',min=2,max=3,
+ fr="Point appartenant à la droite ou au plan."),
+ AXE_1 =SIMP(statut='o',typ='R',min=2,max=3,
+ fr="Vecteur directeur de la droite ou 1er vecteur appartenant au plan."),
+ AXE_2 =SIMP(statut='f',typ='R',min=3,max=3,
+ fr="2nd vecteur appartenant du plan."),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 16/06/2009 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 PELLET J.PELLET
+
+MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Modifier la partition d'un modèle (parallélisme) ",
+
+ MODELE =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+
+ PARTITION =FACT(statut='d',
+ PARALLELISME =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
+ into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
+ b_dist_maille =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+ CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+ ),
+ b_dist_sd =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
+ PARTITION =SIMP(statut='o',typ=sd_feti_sdaster),
+ CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 20/04/2009 AUTEUR GENIAUT S.GENIAUT
+# 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 GENIAUT S.GENIAUT
+
+MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f',
+ UIinfo={"groupes":("Modélisation",)},
+ fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
+
+ MODELE_IN =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+ FISSURE =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+ CRITERE =SIMP(statut='f',typ='R',defaut=1.1E-4),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)),
+ CONTACT =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON"),min=1,max=1,),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 KHAM M.KHAM
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
+ fr="Calculer les obstacles dans les systèmes guidage-tube après usure",
+ reentrant='f',
+ UIinfo={"groupes":("Modélisation",)},
+ regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
+ PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
+ OBSTACLE =SIMP(statut='f',typ=table_fonction),
+ GUIDE =SIMP(statut='o',typ=table_sdaster),
+ CRAYON =SIMP(statut='f',typ=table_sdaster),
+ TABL_USURE =SIMP(statut='f',typ=table_sdaster),
+ INST =SIMP(statut='f',typ='R'),
+ R_MOBILE =SIMP(statut='f',typ='R'),
+ PERCEMENT =SIMP(statut='f',typ='R',defaut=1),
+ V_USUR_TUBE =SIMP(statut='f',typ='R',max='**'),
+ V_USUR_OBST =SIMP(statut='f',typ='R',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 02/03/2010 AUTEUR MACOCCO K.MACOCCO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+def modi_repere_prod(RESULTAT,**args):
+ if AsType(RESULTAT) != None : return AsType(RESULTAT)
+
+MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Calcule des résultats dans le repère cylindrique",
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster),
+
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_INST','LIST_FREQ','NOM_CAS'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM' ),
+
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+
+ MODI_CHAM =FACT(statut='o',max='**',
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TYPE_CHAM =SIMP(statut='o',typ='TXM',
+ into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+ b_vect_2d =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+ b_vect_3d =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+ b_tors_3d =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+ b_tens_2d =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+ b_tens_3d =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+ ),
+ DEFI_REPERE =FACT(statut='o',
+ regles=(UN_PARMI('ANGL_NAUT','ORIGINE','VECT_X'),),
+ REPERE =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",
+ into=("UTILISATEUR","CYLINDRIQUE"),),
+ ANGL_NAUT =SIMP(statut='f',typ='R',max=3),
+ ORIGINE =SIMP(statut='f',typ='R',min=2,max=3),
+ AXE_Z =SIMP(statut='f',typ='R',min=3,max=3),
+ VECT_X =SIMP(statut='f',typ='R',min=3,max=3 ),
+ b_vecteurs =BLOC(condition = "VECT_X != None",
+ VECT_Y =SIMP(statut='o',typ='R',min=3,max=3 ),),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 NISTOR I.NISTOR
+
+def norm_mode_prod(MODE,**args ):
+ if AsType(MODE) == mode_meca : return mode_meca
+ if AsType(MODE) == mode_meca_c : return mode_meca_c
+ if AsType(MODE) == mode_flamb : return mode_flamb
+ raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op= 37,sd_prod=norm_mode_prod,
+ fr="Normer des modes propres en fonction d'un critère choisi par l'utilisateur",
+ reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),
+ CONCEPT_SENSIBLE('SEPARE'),
+ DERIVABLE('MODE'),),
+ MODE =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+ NORME =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+ into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+ NOEUD =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+ b_noeud =BLOC(condition = "NOEUD != None",
+ NOM_CMP =SIMP(statut='o',typ='TXM' ),
+ ),
+ AVEC_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ SANS_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ MODE_SIGNE =FACT(statut='f',fr="Imposer un signe sur une des composantes des modes",
+ NOEUD =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
+ NOM_CMP =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
+ SIGNE =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
+ fr="Choix du signe" ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des param\350tres de sensibilit\351.",
+ ang="List of sensitivity parameters",
+ ),
+# b_base =BLOC(condition = "AsType(MODE) == base_modale",
+# MASSE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+# RAIDE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+# AMOR = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+# ),
+ MASSE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+ RAIDE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+ AMOR = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+#& MODIF COMMANDE DATE 08/08/2008 AUTEUR DESOZA T.DESOZA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+ regles=(UN_PARMI('MATR_RIGI','MODELE'),),
+ MATR_RIGI =SIMP(statut='f',validators=NoRepeat(),max=100,
+ typ=(matr_elem_depl_r ,matr_elem_depl_c,matr_elem_temp_r ,matr_elem_pres_c) ),
+ MODELE =SIMP(statut='f',typ=modele_sdaster ),
+ b_modele =BLOC(condition = "MODELE != None",
+ CHARGE =SIMP(statut='f',validators=NoRepeat(),max='**',typ=(char_meca,char_ther,char_acou, ),),
+ ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","PETSC","MUMPS") ),
+ b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+ RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+ ),
+ b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ),
+ b_gcpc =BLOC(condition="METHODE=='GCPC' or METHODE=='PETSC'",fr="paramètres associés à la GCPC ou PETSc",
+ RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ),
+ ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BODEL C.BODEL
+NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
+ fr="Etablissement de la numérotation des ddl d'un modèle établi en coordonnées généralisées",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=UN_PARMI('MODELE_GENE','BASE'),
+ MODELE_GENE =SIMP(statut='f',typ=modele_gene ),
+ b_modele_gene =BLOC(condition = "MODELE_GENE != None",
+ STOCKAGE =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("INITIAL","CLASSIQUE") ),
+ ),
+ BASE =SIMP(statut='f',typ=(mode_meca,mode_gene ) ),
+ b_base =BLOC(condition = "BASE != None",
+ STOCKAGE =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("DIAG","PLEIN") ),
+ NB_VECT =SIMP(statut='f',typ='I',defaut= 9999 ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 14/12/2009 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 BODEL C.BODEL
+
+from Macro.observation_ops import observation_ops
+
+
+def observation_prod(self, RESULTAT, **args):
+ if AsType(RESULTAT) == mode_meca :
+ return mode_meca
+ elif AsType(RESULTAT) == evol_elas :
+ return evol_elas
+ elif AsType(RESULTAT) == dyna_harmo :
+ return dyna_harmo
+ elif AsType(RESULTAT) == dyna_trans :
+ return dyna_trans
+ else :
+ return None
+
+OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ sd_prod=observation_prod,
+ fr="Calcul de l'observabilite d'un champ aux noeuds ",
+#
+ MODELE_1 =SIMP(statut='o',typ=modele_sdaster),
+ MODELE_2 =SIMP(statut='o',typ=modele_sdaster),
+ RESULTAT =SIMP(statut='o',typ=(mode_meca,evol_elas,dyna_harmo,dyna_trans,) ),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1),
+
+# ------------------------------------------------------------------
+
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','FREQ','LIST_FREQ','NUME_MODE','INST','LIST_INST' ),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+# ------------------------------------------------------------------
+# OPTIONS DE PROJ_CHAMP (SANS MC FACTEUR PARTICULIER)
+# ------------------------------------------------------------------
+ PROJECTION =SIMP(statut='f',max=1,typ='TXM',into=("OUI","NON"),defaut="OUI"),
+ CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+ DISTANCE_MAX =SIMP(statut='f',typ='R',
+ fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+ ALARME =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+ TYPE_CHAM =SIMP(statut='f',typ='TXM',into=("NOEU",),
+ fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+# PROL_ZERO =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+# fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger"
+# +" les champs par zéro la ou la projection ne donne pas de valeurs."),
+
+ NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+ VIS_A_VIS =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+ TOUT_1 =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT_2 =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+ ),
+
+# ------------------------------------------------------------------
+# MODI_REPERE
+# ------------------------------------------------------------------
+ MODI_REPERE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('REPERE'),
+ AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+#
+ TYPE_CHAM =SIMP(statut='f',typ='TXM',
+ into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),
+ defaut="VECT_3D"),
+ b_vect_2d =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+ b_vect_3d =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+ NOM_CMP =SIMP(statut='f',typ='TXM',min=3,max=3,defaut=('DX','DY','DZ') ),),
+ b_tors_3d =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+ NOM_CMP =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+ b_tens_2d =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+ NOM_CMP =SIMP(statut='f',typ='TXM',min=4,max=4,defaut=('EPXX','EPYY','EPZZ','EPXY',) ),),
+ b_tens_3d =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+ NOM_CMP =SIMP(statut='f',typ='TXM',min=6,max=6,defaut=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',),),),
+
+ REPERE =SIMP(statut='o',typ='TXM',
+ into=("UTILISATEUR","CYLINDRIQUE","NORMALE","DIR_JAUGE"),),
+ b_normale =BLOC(condition = "REPERE=='NORMALE'",
+ regles=(UN_PARMI('VECT_X','VECT_Y')),
+ VECT_X =SIMP(statut='f',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), ),
+ b_utilisateur =BLOC(condition = "REPERE=='UTILISATEUR'",
+ ANGL_NAUT =SIMP(statut='o',typ='R',max=3)),
+ b_cylindrique =BLOC(condition = "REPERE=='CYLINDRIQUE'",
+ ORIGINE =SIMP(statut='o',typ='R',min=2,max=3),
+ AXE_Z =SIMP(statut='o',typ='R',min=3,max=3)),
+ b_dir_jauge =BLOC(condition = "REPERE=='DIR_JAUGE'",
+ VECT_X =SIMP(statut='f',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), ),
+ ),
+
+# ------------------------------------------------------------------
+# EPSI_MOYENNE
+# ------------------------------------------------------------------
+ EPSI_MOYENNE =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SEUIL_VARI =SIMP(statut='f',typ='R',validators=NoRepeat(),defaut=0.1,),
+ MASQUE =SIMP(statut='f',typ='TXM',max=6),
+ ),
+
+# ------------------------------------------------------------------
+# FILTRE DES DDL
+# ------------------------------------------------------------------
+ FILTRE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('DDL_ACTIF'),
+# 'MASQUE'),
+ AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+#
+ DDL_ACTIF =SIMP(statut='f',typ='TXM',max=6),
+# TODO : mettre en place le systeme de masques
+# MASQUE =SIMP(statut='f',typ='TXM',max=6),
+ ),
+# ------------------------------------------------------------------
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ ) ;
+#& MODIF COMMANDE DATE 27/07/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 GENIAUT S.GENIAUT
+def post_cham_xfem_prod(RESULTAT,**args ):
+
+ if AsType(RESULTAT) == evol_noli : return evol_noli
+ if AsType(RESULTAT) == mode_meca : return mode_meca
+
+ raise AsException("type de concept resultat non prevu")
+
+POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=post_cham_xfem_prod,
+ reentrant='n',UIinfo={"groupes":("Post traitements",)},
+ fr="Calcul des champs DEPL et SIEF_ELGA sur le maillage fissuré",
+ MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+ MAILLAGE_FISS = SIMP(statut='o',typ=maillage_sdaster),
+ NOM_CHAM = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA"),),
+ MODELE = SIMP(statut='o',typ=modele_sdaster,),
+ RESULTAT = SIMP(statut='o',typ=resultat_sdaster),
+ b_elga = BLOC(condition = "NOM_CHAM in ('SIEF_ELGA','VARI_ELGA') or \
+ (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM) or \
+ (type(NOM_CHAM)==type(()) and 'VARI_ELGA' in NOM_CHAM)",
+ MODELE_VISU = SIMP(statut='o',typ=modele_sdaster,),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+);
+#& MODIF COMMANDE DATE 08/02/2010 AUTEUR DESROCHES X.DESROCHES
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 DESROCHES X.DESROCHES
+
+from Macro.post_coque_ops import post_coque_ops
+POST_COQUE=MACRO(nom="POST_COQUE",op=post_coque_ops,sd_prod=table_sdaster, reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calcul des efforts et déformations en un point et une cote quelconque de la coque",
+
+ regles=(EXCLUS('INST','NUME_ORDRE'),),
+
+ # SD résultat et champ à posttraiter :
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à posttraiter",),
+ CHAM =SIMP(statut='o',typ='TXM',into=("EFFORT","DEFORMATION",)),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+ # points de post-traitement :
+ COOR_POINT =FACT(statut='o',max='**',fr="coordonnées et position dans l épaisseur",
+ COOR=SIMP(statut='o',typ='R',min=3,max=4),),
+
+ )
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+from Macro.post_dyna_alea_ops import post_dyna_alea_ops
+POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_sdaster,
+ fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),),
+ FRAGILITE =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**',
+ TABL_RESU =SIMP(statut='o',typ=table_sdaster),
+ regles=(UN_PARMI('VALE','LIST_PARA'),),
+ VALE = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**' ),
+ LIST_PARA = SIMP(statut='f',typ=listr8_sdaster),
+ AM_INI = SIMP(statut='f',typ='R',defaut= 0.4 ),
+ BETA_INI = SIMP(statut='f',typ='R',defaut= 0.3 ),
+ FRACTILE = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**'),
+ b_inte_spec_f = BLOC(condition="""FRACTILE !=None""",
+ NB_TIRAGE =SIMP(statut='f',typ='I' ),),
+ ),
+ INTE_SPEC =SIMP(statut='f',typ=table_fonction),
+ b_inte_spec_f =BLOC(condition="""INTE_SPEC !=None""",
+ regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+ NUME_VITE_FLUI =SIMP(statut='f',typ='I' ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE_I =SIMP(statut='f',typ='I',max='**' ),
+ NOEUD_I =SIMP(statut='f',typ=no,max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+ b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+ NUME_ORDRE_J =SIMP(statut='o',typ='I',max='**' ),
+ ),
+ b_noeud_i =BLOC(condition = "NOEUD_I != None",
+ NOEUD_J =SIMP(statut='o',typ=no,max='**'),
+ NOM_CMP_I =SIMP(statut='o',typ='TXM',max='**' ),
+ NOM_CMP_J =SIMP(statut='o',typ='TXM',max='**' ),
+ ),
+ MOMENT =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
+ fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+ RESU_GENE =SIMP(statut='o',typ=tran_gene ),
+ CHOC =FACT(statut='f',max='**',
+ fr="Analyse des non linéarités de choc",
+ INST_INIT =SIMP(statut='f',typ='R',defaut= -1. ),
+ INST_FIN =SIMP(statut='f',typ='R',defaut= 999. ),
+ NB_BLOC =SIMP(statut='f',typ='I',defaut= 1 ),
+ SEUIL_FORCE =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ DUREE_REPOS =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
+ NB_CLASSE =SIMP(statut='f',typ='I',defaut= 10 ),
+ ),
+ RELA_EFFO_DEPL =FACT(statut='f',
+ fr="Analyse des relationsnon linéaires effort-déplacement",
+ NOEUD =SIMP(statut='o',typ=no),
+ NOM_CMP =SIMP(statut='o',typ='TXM' ),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 19/05/2009 AUTEUR MACOCCO K.MACOCCO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+
+ regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX',
+ 'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
+ 'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+ 'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','ENER_DISS','INTEGRALE'),
+ ),
+
+ MASS_INER = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ORIG_INER = SIMP(statut='f',typ='R',min=3,max=3 ),
+ ),
+ b_mass_iner = BLOC(condition = "( MASS_INER != None )",
+ fr="calcul de la masse, les inerties et le centre de gravité",
+ regles=(EXCLUS('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ GEOMETRIE = SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ RESULTAT = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_noli,mult_elas,
+ fourier_elas,dyna_trans) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ FREQ = SIMP(statut='f',typ='R',),
+ LIST_FREQ = SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE = SIMP(statut='f',typ='I',),
+ NOEUD_CMP = SIMP(statut='f',typ='TXM',min=2,validators=NoRepeat(),max=2),
+ NOM_CAS = SIMP(statut='f',typ='TXM',),
+ ),
+
+ ENER_POT = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_ener_pot = BLOC(condition = "( ENER_POT != None )",
+ fr="calcul de l'énergie potentielle de déformation",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ ANGLE = SIMP(statut='f',typ='I',defaut=0),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ RESULTAT = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans,mult_elas) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ FREQ = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ = SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE = SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+ NOEUD_CMP = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ ),
+
+ ENER_CIN = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ OPTION = SIMP(statut='f',typ='TXM',
+ into=("MASS_MECA","MASS_MECA_DIAG"),
+ defaut="MASS_MECA" ),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_ener_cin = BLOC(condition = "( ENER_CIN != None )",
+ fr="calcul de l'énergie cinétique",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+ 'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ ANGLE = SIMP(statut='f',typ='I',defaut=0),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ RESULTAT = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ FREQ = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ = SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NOEUD_CMP = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ ),
+
+ ENER_DISS = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_ener_diss = BLOC(condition = "( ENER_DISS != None )",
+ fr="calcul de l'énergie dissipée",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+
+ ENER_ELAS = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_ener_elas = BLOC(condition = "( ENER_ELAS != None )",
+ fr="calcul de l'énergie de déformation élastique",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ ENER_TOTALE = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_ener_totale = BLOC(condition = "( ENER_TOTALE != None )",
+ fr="calcul de l'énergie de déformation totale",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ INTEGRALE = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NOM_CHAM = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NOM_CMP = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ DEJA_INTEGRE = SIMP(statut='f',typ='TXM',into=("OUI","NON",),),
+ ),
+ b_integrale = BLOC(condition = "( INTEGRALE != None )",
+ fr="calcul de la moyenne d'une composante",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ RESULTAT = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+
+ MINMAX = FACT(statut='f',max=1,
+ fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ PRESENT_PRESENT('CHAM_GD','MODELE'),
+ PRESENT_PRESENT('RESULTAT','NOM_CHAM'),
+ AU_MOINS_UN('TOUT','GROUP_MA'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ RESULTAT = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ),
+ NOM_CHAM = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ NOM_CMP = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+ b_minmax = BLOC(condition = "( RESULTAT != None )",
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+ ),
+
+ WEIBULL = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ OPTION = SIMP(statut='f',typ='TXM',
+ into=("SIGM_ELGA","SIGM_ELMOY"),
+ defaut="SIGM_ELGA"),
+ CORR_PLAST = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ COEF_MULT = SIMP(statut='f',typ='R',defaut=1.),
+ ),
+ b_weibull = BLOC(condition = "( WEIBULL != None )",
+ fr="calcul du champ élémentaire de la puissance m-ième de la contrainte de Weibull",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ RESULTAT = SIMP(statut='f',typ=(evol_noli) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ RICE_TRACEY = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ OPTION = SIMP(statut='f',typ='TXM',
+ into=("SIGM_ELGA","SIGM_ELMOY"),
+ defaut="SIGM_ELGA"),
+ LOCAL = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ ),
+ b_rice_tracey = BLOC(condition = "( RICE_TRACEY != None )",
+ fr="calcul du taux de croissance d'une cavité sphérique par rapport à un domaine",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1),
+ NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+ RESULTAT = SIMP(statut='f',typ=(evol_noli) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ INDIC_ENER = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_indic_ener = BLOC(condition = "( INDIC_ENER != None )",
+ fr="calcul un indicateur global de perte de proportionnalité du chargement",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ INDIC_SEUIL = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_indic_seuil = BLOC(condition = "( INDIC_SEUIL != None )",
+ fr="calcul un indicateur global de perte de proportionnalité du chargement",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ CHAR_LIMITE = FACT(statut='f',min=0,
+ CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
+ ),
+ b_char_limite = BLOC(condition = "( CHAR_LIMITE != None )",
+ fr="post-traitement du calcul de la charge limite",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM = SIMP(statut='f',typ=cara_elem),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ RESULTAT = SIMP(statut='o',typ=(evol_noli) ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster),
+ INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST = SIMP(statut='f',typ=listr8_sdaster),
+ ),
+
+ CARA_GEOM = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ MAILLE = SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ SYME_X = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ SYME_Y = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ORIG_INER = SIMP(statut='f',typ='R',min=2,max=2),
+ ),
+ b_cara_geom = BLOC(condition = "( CARA_GEOM != None )",
+ fr="calcul des caractéristiques géométriques d'un section de poutre",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ ),
+
+ CARA_POUTRE = FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
+ ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ GROUP_MA_INTE = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ CARA_GEOM = SIMP(statut='o',typ=table_sdaster),
+ RT = SIMP(statut='f',typ='R'),
+ LAPL_PHI = SIMP(statut='f',typ=evol_ther),
+ LAPL_PHI_Y = SIMP(statut='f',typ=evol_ther),
+ LAPL_PHI_Z = SIMP(statut='f',typ=evol_ther),
+ LIAISON = SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+ LONGUEUR = SIMP(statut='f',typ='R'),
+ MATERIAU = SIMP(statut='f',typ=mater_sdaster),
+ OPTION = SIMP(statut='f',typ='TXM',
+ into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+ ),
+ b_cara_poutre = BLOC(condition = "( CARA_POUTRE != None )",
+ fr="calcul des caractéristiques mécaniques d'un section de poutre",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER = SIMP(statut='f',typ=cham_mater),
+ CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+ char_ther,char_acou),validators=NoRepeat(),max='**' ),
+ MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0),
+ ),
+
+ AIRE_INTERNE = FACT(statut='f',max='**',
+ GROUP_MA_BORD = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ ),
+ b_aire_interne = BLOC(condition = "( AIRE_INTERNE != None )",
+ fr="calcul de l'aire d'un trou dans un maillage 2D",
+ MODELE = SIMP(statut='f',typ=modele_sdaster),
+ ),
+
+ TRAV_EXT = FACT(statut='f',),
+ b_trav_ext = BLOC(condition = "( TRAV_EXT != None )",
+ fr="calcul du travail des efforts extérieurs",
+ RESULTAT = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans) ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ ) ;
+#& MODIF COMMANDE DATE 21/04/2010 AUTEUR BOTTONI M.BOTTONI
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 BOTTONI M.BOTTONI
+
+# ---------------------------------------------------------------------------
+# POST_ENDO_FISS
+# RECHERCHE DU TRAJET DE FISSURATION SUR UN
+# CHAMP SCALAIRE 2D
+
+
+from Macro.post_endo_fiss_ops import post_endo_fiss_ops
+
+
+def post_endo_fiss_prod(self,TABLE,**args) :
+ self.type_sdprod(TABLE,table_sdaster)
+ return maillage_sdaster
+
+POST_ENDO_FISS=MACRO(nom = "POST_ENDO_FISS",
+ op = post_endo_fiss_ops,
+ sd_prod = post_endo_fiss_prod,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils metier",)},
+ fr = "Individuation du trace d'une fissure a partir d'un champ scalaire pertinant",
+
+ TABLE = SIMP(statut = 'o', typ = CO,),
+
+ regles = (UN_PARMI("RESULTAT","CHAM_GD"),
+ ),
+
+ b_resultat = BLOC(condition = "RESULTAT != None",
+ regles = (UN_PARMI('NUME_ORDRE','INST'),),
+ NUME_ORDRE = SIMP(statut = 'f', typ = 'I', validators = NoRepeat(), max='**'),
+ INST = SIMP(statut = 'f', typ = 'R', validators = NoRepeat(), max='**'),
+ MODELE = SIMP(statut = 'f', typ = modele_sdaster,
+ fr = "nom du modele a associer au champ",),),
+
+ b_champ = BLOC(condition = "CHAM_GD != None",
+ MODELE = SIMP(statut = 'o', typ = modele_sdaster,
+ fr = "nom du modele a associer au champ",),),
+
+ CHAM_GD = SIMP(statut = 'f',typ = (cham_gd_sdaster)),
+ RESULTAT = SIMP(statut = 'f',typ = (evol_noli)),
+ NOM_CMP = SIMP(statut = 'o',typ='TXM',),
+ NOM_CHAM = SIMP(statut = 'o', typ = 'TXM',
+ fr = "nom du champ a post-traiter",),
+
+ RECHERCHE = FACT(statut = 'o',min=1,max='**',
+ regles = (
+ PRESENT_ABSENT('TOUT','GROUP_MA',),
+ ),
+ LONG_ORTH = SIMP(statut='o', typ='R'),
+ NB_POINT = SIMP(statut='f', typ='I', defaut = 500),
+ PAS = SIMP(statut='o', typ='R', max='**'),
+ LONG_REG = SIMP(statut='o', typ='R'),
+ SEUIL = SIMP(statut='o', typ='R'),
+ ANGL_MAX = SIMP(statut='f', typ='R', defaut=180.),
+ TOUT = SIMP(statut='f', typ='TXM', into=("OUI",) ),
+ GROUP_MA = SIMP(statut='f', typ=grma, validators=NoRepeat(),max='**'),
+ ),
+ )
+
+
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation de type aléatoire",
+ regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
+ PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
+ UN_PARMI('TABL_POST_ALEA','MOMENT_SPEC_0'), ),
+ MOMENT_SPEC_0 =SIMP(statut='f',typ='R'),
+ MOMENT_SPEC_2 =SIMP(statut='f',typ='R'),
+ MOMENT_SPEC_4 =SIMP(statut='f',typ='R'),
+ TABL_POST_ALEA =SIMP(statut='f',typ=table_sdaster),
+ COMPTAGE =SIMP(statut='o',typ='TXM',into=("PIC","NIVEAU")),
+ DUREE =SIMP(statut='f',typ='R',defaut= 1.),
+ CORR_KE =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+ DOMMAGE =SIMP(statut='o',typ='TXM',into=("WOHLER",)),
+ MATER =SIMP(statut='o',typ=mater_sdaster),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ANGLES J.ANGLES
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calculer en un point, le dommage de fatigue subi par une structure soumise à une histoire de chargement",
+
+ CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
+
+ b_uniaxial = BLOC( condition = "CHARGEMENT=='UNIAXIAL'",
+ regles=(PRESENT_PRESENT('CORR_KE','MATER'),
+ PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
+ PRESENT_PRESENT('DOMMAGE','MATER'),),
+ HISTOIRE = FACT(statut='o',
+ regles=(UN_PARMI('SIGM','EPSI'),),
+ SIGM = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EPSI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+ COMPTAGE = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
+ DELTA_OSCI = SIMP(statut='f',typ='R',defaut= 0.0E+0),
+ COEF_MULT = FACT(statut='f',
+ KT = SIMP(statut='o',typ='R'),),
+ CORR_KE = SIMP(statut='f',typ='TXM',into=("RCCM",)),
+ DOMMAGE = SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN",
+ "TAHERI_MANSON","TAHERI_MIXTE")),
+ MATER = SIMP(statut='f',typ=mater_sdaster),
+ CORR_SIGM_MOYE = SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+ TAHERI_NAPPE = SIMP(statut='f',typ=(nappe_sdaster,formule)),
+ TAHERI_FONC = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ CUMUL = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+ ),
+
+ b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
+ HISTOIRE = FACT(statut='o',
+ SIGM_XX = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_YY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_ZZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_XY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_XZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_YZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+ CRITERE = SIMP(statut='o',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+ DOMMAGE = SIMP(statut='f',typ='TXM',into=("WOHLER",)),
+ MATER = SIMP(statut='o',typ=mater_sdaster),
+ COEF_CORR = SIMP(statut='f',typ='R'),
+ ),
+
+ b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
+ HISTOIRE = FACT(statut='o',
+ SIGM_XX = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_YY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_ZZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_XY = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_XZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ SIGM_YZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ EPSP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TEMP = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+ DOMMAGE = SIMP(statut='f',typ='TXM',into=("LEMAITRE",),),
+ MATER = SIMP(statut='o',typ=mater_sdaster),
+ CUMUL = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 08/12/2009 AUTEUR PROIX J-M.PROIX
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 WADIER Y.WADIER
+
+from Macro.post_gp_ops import post_gp_ops
+def post_gp_prod(self, TABL_RESU, **kargs):
+ """Typage des sd_prod
+ """
+ if TABL_RESU != None:
+ self.type_sdprod(TABL_RESU, table_sdaster)
+ return table_sdaster
+
+POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
+ fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'),
+ UN_PARMI('THETA_2D','THETA_3D'),
+ UN_PARMI('PAS_ENTAILLE','LIST_EP_COPEAUX'),
+ PRESENT_PRESENT('THETA_2D','DIRECTION'),),
+
+ # Résultat, modèle, comportement, chargement
+ RESULTAT = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
+ RESU_THER = SIMP(statut='f',typ=evol_ther,),
+ MODELE = SIMP(statut='o',typ=modele_sdaster),
+ MATER = SIMP(statut='o',typ=mater_sdaster),
+
+ COMP_ELAS = FACT(statut='o',
+ RELATION = SIMP(statut='f',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC"),),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ ),
+
+ EXCIT = FACT(statut='f', max='**',
+ CHARGE = SIMP(statut='o', typ=(char_meca,char_cine_meca)),
+ FONC_MULT = SIMP(statut='f', typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE = SIMP(statut='f', typ='TXM', defaut="FIXE", into=("FIXE",)),
+ ),
+ SYME_CHAR = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")),
+
+ DIRECTION = SIMP(statut='f', typ='R', max=3),
+
+ THETA_2D = FACT(statut='f', max='**',
+ fr="paramètres de définition des champs theta",
+ GROUP_NO = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'),
+ R_INF = SIMP(statut='o', typ='R'),
+ R_SUP = SIMP(statut='o', typ='R'),
+ ),
+
+
+ THETA_3D =FACT(statut='f',max='**',
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+ R_INF =SIMP(statut='o',typ='R'),
+ R_SUP =SIMP(statut='o',typ='R'),
+ ),
+ b_theta_3d =BLOC(condition="THETA_3D != None",
+ LISSAGE =FACT(statut='d',
+ DEGRE =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+ LISSAGE_THETA =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+ into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+ LISSAGE_G =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+ into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+ ),
+
+ FOND_FISS =SIMP(statut='o',typ=fond_fiss,max=1,),
+ NB_TRANCHES =SIMP(statut='o',typ='I',max=1,
+ fr="nombre de tranches: nombre de segments maillant le fond de fissure",),
+ ),
+
+ # prise en compte de la traction compression
+ TRAC_COMP = SIMP(statut='f',typ='TXM',into=("OUI",),
+ fr="prise en compte de la traction-compression (plus lent)",
+ ),
+
+ # copeaux
+ GROUP_MA = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+ PAS_ENTAILLE = SIMP(statut='f', typ='R', val_min=0.),
+ LIST_EP_COPEAUX = SIMP(statut='f', typ='R', max='**'),
+
+ # critère sur Gp
+ CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU",
+ into=("RELATIF","ABSOLU")),
+
+ # correction axisymétrie
+ RAYON_AXIS = SIMP(statut='f', typ='R', val_min=0., defaut=1.),
+
+ # identification
+ IDENTIFICATION = FACT(statut='f', max=1,
+ KJ_CRIT = SIMP(statut='o', typ='R', val_min=0., max='**'),
+ TEMP = SIMP(statut='o', typ='R', val_min=0., max='**'),
+ ),
+
+ # prédiction
+ PREDICTION = FACT(statut='f', max=1,
+ GP_CRIT = SIMP(statut='o', typ='R', val_min=0., max='**'),
+ TEMP = SIMP(statut='o', typ='R', val_min=0., max='**'),
+ ),
+
+ # table résultat
+ TABL_RESU = SIMP(statut='o', typ=CO,),
+
+ INFO = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),),
+)
+#& MODIF COMMANDE DATE 20/10/2008 AUTEUR GALENNE E.GALENNE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 GALENNE E.GALENNE
+from Macro.post_k1_k2_k3_ops import post_k1_k2_k3_ops
+POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdaster,
+ fr="Calcul des facteurs d'intensité de contraintes en 2D et en 3D par extrapolation des sauts de déplacements"
+ +" sur les lèvres de la fissure",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+
+ regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
+ EXCLUS('FISSURE','FOND_FISS'),
+ PRESENT_PRESENT('FISSURE','RESULTAT'),
+ PRESENT_PRESENT('FOND_FISS','VECT_K1'),
+ PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
+ #PRESENT_PRESENT('RESULTAT','FOND_FISS'),
+ ),
+
+ MODELISATION =SIMP(statut='o',typ='TXM',
+ into=("3D","AXIS","D_PLAN","C_PLAN"),
+ fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+ FOND_FISS =SIMP(statut='f',typ=fond_fiss),
+ FISSURE =SIMP(statut='f',typ=fiss_xfem),
+ b_fond_fiss =BLOC (condition="(FOND_FISS!= None)",
+ MAILLAGE = SIMP(statut='o',typ=maillage_sdaster),
+ TYPE_MAILLAGE = SIMP(statut='f',typ='TXM',into=("LIBRE","REGLE"),defaut="REGLE"),
+ NB_NOEUD_COUPE= SIMP(statut='f',typ='I'),
+ NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ SANS_NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ EVOL_THER = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
+ ),
+ b_fissure =BLOC (condition="(FISSURE!= None)",
+ MAILLAGE = SIMP(statut='o',typ=maillage_sdaster),
+ NB_NOEUD_COUPE = SIMP(statut='f',typ='I' ,defaut=5 ),
+ NB_POINT_FOND = SIMP(statut='f',typ='I' ,),
+ NUME_FOND = SIMP(statut='f',typ='I',defaut=1),
+ DTAN_ORIG = SIMP(statut='f',typ='R',max='**'),
+ DTAN_EXTR = SIMP(statut='f',typ='R',max='**'),
+ ),
+ MATER =SIMP(statut='o',typ=mater_sdaster,
+ fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+ RESULTAT =SIMP(statut='f',typ=(evol_elas,evol_noli),
+ fr="Déplacement des noeuds de la lèvre supérieure et inférieure"),
+ TABL_DEPL_SUP =SIMP(statut='f',typ=table_sdaster,
+ fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+ TABL_DEPL_INF =SIMP(statut='f',typ=table_sdaster,
+ fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+ ABSC_CURV_MAXI=SIMP(statut='o',typ='R',
+ fr="Distance maximum à partir du fond de fissure à utiliser pour le calcul"),
+ PREC_VIS_A_VIS= SIMP(statut='f',typ='R',defaut=0.1),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ SYME_CHAR =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS") ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ VECT_K1 =SIMP(statut='f',typ='R',max=3,min=3,
+ fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 03/06/2008 AUTEUR DURAND C.DURAND
+# 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.
+# ======================================================================
+# RESPONSABLE C.MESSELIER-GOUZE
+#
+POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
+ fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ MAILLAGE = SIMP(statut='o',typ=maillage_sdaster),
+ MATER_REV = SIMP(statut='o',typ=mater_sdaster),
+ EPAIS_REV = SIMP(statut='o',typ='R'),
+ FISSURE = FACT(statut='o',
+ DECALAGE = SIMP(statut='f',typ='R',defaut=-2.e-04),
+ PROFONDEUR = SIMP(statut='o',typ='R'),
+ LONGUEUR = SIMP(statut='o',typ='R'),
+ ORIENTATION = SIMP(statut='o',typ='TXM',
+ into=("CIRC","LONGI"),),
+ ),
+ K1D = FACT(statut='o',max='**',
+ TABL_MECA_REV = SIMP(statut='o',typ=(table_sdaster)),
+ TABL_MECA_MDB = SIMP(statut='o',typ=(table_sdaster)),
+ TABL_THER = SIMP(statut='o',typ=(table_sdaster)),
+ INTITULE = SIMP(statut='o',typ='TXM' ),
+ ),
+ TITRE = SIMP(statut='f',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 GALENNE E.GALENNE
+
+from Macro.post_k_trans_ops import post_k_trans_ops
+
+POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
+ fr="Calcul des facteurs d intensite des contrainte par recombinaison modale",reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ RESU_TRANS =SIMP(statut='o',typ=tran_gene),
+ K_MODAL =FACT(statut='o',
+ TABL_K_MODA =SIMP(statut='f',typ=table_sdaster,),
+ RESU_MODA =SIMP(statut='f',typ=mode_meca,),
+ FOND_FISS =SIMP(statut='f',typ=fond_fiss,),
+ FISSURE =SIMP(statut='f',typ=fiss_xfem,),
+ THETA =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster)),
+ R_INF =SIMP(statut='f',typ='R'),
+ R_SUP =SIMP(statut='f',typ='R'),
+ MODULE =SIMP(statut='f',typ='R'),
+ DIRE_THETA =SIMP(statut='f',typ=cham_no_sdaster ),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+ R_INF_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ R_SUP_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ MODULE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ DEGRE =SIMP(statut='f',typ='I',into=(0,1,2,3,4,5,6,7) ),
+ LISSAGE_THETA =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+ LISSAGE_G =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+
+
+ regles=(UN_PARMI('TABL_K_MODA','RESU_MODA'),
+ UN_PARMI('FISSURE','FOND_FISS'),
+ EXCLUS('MODULE','MODULE_FO'),
+ PRESENT_PRESENT('R_INF','R_SUP'),
+ PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+ ),
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R'),),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM'),
+)
+
+#& MODIF COMMANDE DATE 12/05/2009 AUTEUR MAZET S.MAZET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005 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 GENIAUT S.GENIAUT
+POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
+ reentrant='n',UIinfo={"groupes":("Maillage",)},
+ fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM",
+ MODELE = SIMP(statut='o',typ=modele_sdaster),
+ MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+ PREF_NOEUD_X =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),),
+ PREF_NOEUD_M =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),),
+ PREF_NOEUD_P =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),),
+ PREF_MAILLE_X =SIMP(statut='f',typ='TXM',defaut="MX",validators=LongStr(1,2),),
+ PREF_GROUP_CO =SIMP(statut='f',typ=geom ,defaut="NFISSU",),
+ TITRE = SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+
+);
+#& MODIF COMMANDE DATE 06/07/2009 AUTEUR GALENNE E.GALENNE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PARTIC
+#
+# 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 GALENNE E.GALENNE
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
+ fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+ reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","DETAILS") ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ TYPE_RESU_MECA =SIMP(statut='o',typ='TXM',into=("EVOLUTION","UNITAIRE","TUYAUTERIE") ),
+
+# ======================================================================
+ b_evolution =BLOC(condition="(TYPE_RESU_MECA == 'EVOLUTION')",
+
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("PM_PB","SN","FATIGUE_ZH210","AMORCAGE") ),
+ MATER =SIMP(statut='o',typ=mater_sdaster ),
+ SY_MAX =SIMP(statut='f',typ='R',
+ fr="limite élastique utilisée pour le calcul du rochet thermique" ),
+ TYPE_KE =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+ fr="Ke meca seul ou partition mecanique + thermique" ),
+
+ TRANSITOIRE =FACT(statut='o',max='**',fr="transitoire à dépouiller",
+ regles=(EXCLUS('TOUT_ORDRE','INST','LIST_INST'),
+ UN_PARMI('TABL_RESU_MECA','TABL_SIGM_THETA'),),
+ NB_OCCUR =SIMP(statut='f',typ='I',defaut= 1,
+ fr="nombre d occurences réelles de ce transitoire" ),
+ TABL_RESU_MECA =SIMP(statut='f',typ=table_sdaster,
+ fr="relevé des contraintes sur le chemin"),
+ TABL_SIGM_THER =SIMP(statut='f',typ=table_sdaster,
+ fr="résultat sous chargement thermique seul" ),
+ TABL_RESU_PRES =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes sous chargement de pression" ),
+ TABL_SIGM_THETA =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes a la distance d de la singularité pour chacun des angles THETA" ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ b_inst =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),),
+ ),
+ ),
+
+# ======================================================================
+ b_unitaire =BLOC(condition="(TYPE_RESU_MECA == 'UNITAIRE')",
+
+ OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+ into=("PM_PB","SN","FATIGUE") ),
+ MATER =SIMP(statut='o',typ=mater_sdaster ),
+ SY_MAX =SIMP(statut='f',typ='R',
+ fr="limite élastique utilisée pourle calcul du rochet thermique" ),
+ TYPE_KE =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+ fr="Ke meca seul ou partition mecanique + thermique" ),
+ CHAR_MECA =FACT(statut='o',max='**',fr="Chargements mécaniques",
+ regles=(UN_PARMI('MX','MX_TUBU'),),
+ NUME_CHAR =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+ NOM_CHAR =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+ MX =SIMP(statut='f',typ='R',fr="moment suivant x", ),
+ MX_TUBU =SIMP(statut='f',typ='R',fr="moment suivant x, tubulure", ),
+ b_1_tenseur =BLOC( condition = "MX != None",
+ FX =SIMP(statut='f',typ='R',fr="effort suivant x", ),
+ FY =SIMP(statut='f',typ='R',fr="effort suivant y", ),
+ FZ =SIMP(statut='f',typ='R',fr="effort suivant z", ),
+ MY =SIMP(statut='o',typ='R',fr="moment suivant y", ),
+ MZ =SIMP(statut='o',typ='R',fr="moment suivant z", ),
+ ),
+ b_2_tenseurs =BLOC( condition = "MX_TUBU != None",
+ FX_TUBU =SIMP(statut='f',typ='R',fr="effort suivant x, tubulure", ),
+ FY_TUBU =SIMP(statut='f',typ='R',fr="effort suivant y, tubulure", ),
+ FZ_TUBU =SIMP(statut='f',typ='R',fr="effort suivant z, tubulure", ),
+ MY_TUBU =SIMP(statut='o',typ='R',fr="moment suivant y, tubulure", ),
+ MZ_TUBU =SIMP(statut='o',typ='R',fr="moment suivant z, tubulure", ),
+ FX_CORP =SIMP(statut='f',typ='R',fr="effort suivant x, corps du piquage", ),
+ FY_CORP =SIMP(statut='f',typ='R',fr="effort suivant y, corps du piquage", ),
+ FZ_CORP =SIMP(statut='f',typ='R',fr="effort suivant z, corps du piquage", ),
+ MX_CORP =SIMP(statut='o',typ='R',fr="moment suivant x, corps du piquage", ),
+ MY_CORP =SIMP(statut='o',typ='R',fr="moment suivant y, corps du piquage", ),
+ MZ_CORP =SIMP(statut='o',typ='R',fr="moment suivant z, corps du piquage", ),
+ ),
+
+ ),
+ RESU_MECA_UNIT =FACT(statut='o',fr="resultats mécaniques unitaires",
+ regles=(UN_PARMI('TABL_MX','TABL_MX_TUBU'),),
+ TABL_MX =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MX"),
+ TABL_MX_TUBU =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MX_TUBU"),
+ b_1_tenseur =BLOC( condition = "TABL_MX != None",
+ TABL_FX =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FX"),
+ TABL_FY =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FY"),
+ TABL_FZ =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FZ"),
+ TABL_MY =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MY"),
+ TABL_MZ =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MZ"),
+ ),
+ b_2_tenseurs =BLOC( condition = "TABL_MX_TUBU != None",
+ TABL_FX_TUBU =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FX_TUBU"),
+ TABL_FY_TUBU =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FY_TUBU"),
+ TABL_FZ_TUBU =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FZ_TUBU"),
+ TABL_MY_TUBU =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MY_TUBU"),
+ TABL_MZ_TUBU =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MZ_TUBU"),
+ TABL_FX_CORP =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FX_CORP"),
+ TABL_FY_CORP =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FY_CORP"),
+ TABL_FZ_CORP =SIMP(statut='f',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire FZ_CORP"),
+ TABL_MX_CORP =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MX_CORP"),
+ TABL_MY_CORP =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MY_CORP"),
+ TABL_MZ_CORP =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire MZ_CORP"),
+ ),
+ TABL_PRES =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes pour chargement unitaire de pression"),
+ ),
+
+ RESU_THER =FACT(statut='f',max='**',fr="resultats thermiques",
+ NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+ TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des contraintes sous chargement thermique seul" ),
+ ),
+ SEISME =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+ NB_OCCUR =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+ NB_CYCL_SEISME =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+ NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+ NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+ NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+ CHAR_ETAT =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+ ),
+ SITUATION =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+ NB_OCCUR =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+ NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+ NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+ COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+ NUME_GROUPE =SIMP(statut='f',typ='I',
+ fr="numéros des groupes de la situation" ),
+ NUME_PASSAGE =SIMP(statut='f',typ='I',min=2,max=2,
+ fr="numéro des situations de passage" ),
+ NUME_RESU_THER =SIMP(statut='f',typ='I',max=1,fr="numeros de transitoires thermiques" ),
+ CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+ CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+ PRES_A =SIMP(statut='o',typ='R',fr="pression etat A"),
+ PRES_B =SIMP(statut='o',typ='R',fr="pression etat B"),
+ TEMP_REF_A =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+ TEMP_REF_B =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+ ),
+ ),
+# ======================================================================
+ b_tuyauterie =BLOC(condition="(TYPE_RESU_MECA == 'TUYAUTERIE')",
+
+ OPTION =SIMP(statut='o',typ='TXM',into=("FATIGUE",) ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ TYPE_KE =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+ fr="Ke meca seul ou partition mecanique + thermique" ),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CARA_ELEM =SIMP(statut='o',typ=cara_elem),
+ ZONE_ANALYSE =FACT(statut='o',fr="liste des mailles ou des noeuds analysés",
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+ RESU_MECA =FACT(statut='o',max='**',fr="Chargements mécaniques",
+ regles=(UN_PARMI('CHAM_GD','RESULTAT'),),
+ NUME_CHAR =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+ NOM_CHAR =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+ CHAM_GD =SIMP(statut='f',typ=cham_gd_sdaster),
+ RESULTAT =SIMP(statut='f',typ=resultat_sdaster),
+ b_extrac =BLOC(condition="RESULTAT != None",
+ fr="extraction d un champ de grandeur",
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','NOEUD_CMP'),),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO_DEPL","SIEF_ELNO_ELGA"),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',),
+ INST =SIMP(statut='f',typ='R',),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ b_acce_reel =BLOC(condition="(INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+ ),
+ ),
+ INDI_SIGM =FACT(statut='o',max='**',fr="indices de contraintes",
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ C1 =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C1 du RCCM"),
+ K1 =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K1 du RCCM"),
+ C2 =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C2 du RCCM"),
+ K2 =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K2 du RCCM"),
+ C3 =SIMP(statut='f',typ='R',defaut=0.5,fr="indice de contraintes C3 du RCCM"),
+ K3 =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K3 du RCCM"),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",),),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+ fr="groupe(s) de mailles ou sont affectés les indices de contraintes"),
+ MAILLE =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',
+ fr="liste des mailles ou sont affectés les indices de contraintes"),
+ b_grma =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ ),
+ TYPE_ELEM_STANDARD =SIMP(statut='f',typ='TXM',into=("DRO","COU","TRN","TEE"),
+ fr="type d'élément de tuyauterie ou sont affectés les indices de contraintes"),
+ ),
+ RESU_THER =FACT(statut='f',max='**',fr="resultats thermiques",
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+ NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+ TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des températures sur la section"),
+ TABL_MOYE_THER =SIMP(statut='o',typ=table_sdaster,
+ fr="table relevé des moyennes sur la section"),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ b_grma =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ ),
+ ),
+ SEISME =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+ NB_OCCUR =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+ NB_CYCL_SEISME =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+ NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+ NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+ NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+ CHAR_ETAT =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+ TEMP_REF =SIMP(statut='f',typ='R',fr="temperature référence"),
+ ),
+ SITUATION =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+ NB_OCCUR =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+ NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+ NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+ COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+ NUME_GROUPE =SIMP(statut='f',typ='I',
+ fr="numéros des groupes de la situation" ),
+ NUME_PASSAGE =SIMP(statut='f',typ='I',min=2,max=2,
+ fr="numéro des situations de passage" ),
+ NUME_RESU_THER =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
+ CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+ CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+ PRES_A =SIMP(statut='o',typ='R',fr="pression etat A"),
+ PRES_B =SIMP(statut='o',typ='R',fr="pression etat B"),
+ TEMP_REF_A =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+ TEMP_REF_B =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 12/05/2009 AUTEUR DESROCHES X.DESROCHES
+# ======================================================================
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# COPYRIGHT (C) 1991 - 2001 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 DESROCHES X.DESROCHES
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f',
+ fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)"
+ +" ou pour les exprimer dans d'autres repères",
+ docu="U4.81.21",UIinfo={"groupes":("Post traitements",)},
+
+ ACTION =FACT(statut='o',max='**',
+ regles=(UN_PARMI('RESULTAT','CHAM_GD'),),
+
+ OPERATION =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_ARITH","EXTREMA"),
+ validators=NoRepeat(),max=2),
+ INTITULE =SIMP(statut='o',typ='TXM'),
+
+ CHAM_GD =SIMP(statut='f',typ=(cham_no_sdaster,
+ cham_elem,),),
+ RESULTAT =SIMP(statut='f',typ=resultat_sdaster),
+#
+# 1. Sensibilité
+# 1.1. Cas d'un résultat réel
+# Cas d'un résultat harmonique dont on veut partie réelle ou imaginaire
+#
+ b_sensibilite =BLOC(condition=" (RESULTAT != None) and \
+ ( AsType(RESULTAT) in (evol_elas,evol_ther,evol_noli,dyna_trans, \
+ mode_meca,mode_flamb,mode_acou, \
+ mult_elas,fourier_elas,fourier_ther) or \
+ ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C != 'MODULE' ) )",
+ fr="Définition des paramètres de sensibilité",
+ ang="Definition of sensitivity parameters",
+ regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+
+ ),
+#
+# 1.2. Cas d'un résultat harmonique dont on veut le module
+#
+ b_sensibilite_harmo =BLOC(condition=" (RESULTAT != None) and \
+ ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C == 'MODULE' )",
+ fr="Définition des paramètres de sensibilité",
+ ang="Definition of sensitivity parameters",
+ regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),
+ b_sensibilite_harmo =BLOC(condition=" SENSIBILITE != None",
+ fr="Option pour la sensibilite",
+ ang="Option for sensitivity",
+ SENSIBILITE_OPTION =SIMP(statut='o',typ='TXM',into=("MODULE_SENSIBILITE","SENSIBILITE_MODULE",),
+ fr="Option : module de la dérivée ou dérivée du module",
+ ang="Option : modulus of derivative or derivative of modulus"),
+ ),
+ ),
+
+ b_extrac =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','NUME_MODE','LIST_MODE',
+ 'INST','LIST_INST','FREQ','LIST_FREQ','NOEUD_CMP','NOM_CAS'), ),
+ NOM_CHAM =SIMP(statut='o',typ='TXM' ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_MODE =SIMP(statut='f',typ=listis_sdaster),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ NOM_CAS =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+
+ b_extrema =BLOC(condition="OPERATION == 'EXTREMA'",
+ fr="recherche de MIN MAX",
+ regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+
+ b_MOYENNE_ARITH =BLOC(condition="OPERATION == 'MOYENNE_ARITH'",
+ fr="moyenne sur des groupes",
+ regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+
+ b_autre =BLOC(condition="OPERATION != 'EXTREMA' and OPERATION != 'MOYENNE_ARITH'",
+ fr="extraction et moyenne",
+ regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+ EXCLUS('CHEMIN','GROUP_NO'),
+ EXCLUS('CHEMIN','NOEUD'),
+ PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+ UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+ PRESENT_PRESENT('TRAC_DIR','DIRECTION'),
+ ENSEMBLE('MOMENT','POINT'),
+ PRESENT_PRESENT('MOMENT','RESULTANTE'),
+ PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+ EXCLUS('TRAC_DIR','TRAC_NOR'),
+ PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+
+ CHEMIN =SIMP(statut='f',typ=(courbe_sdaster,surface_sdaster) ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+
+ TOUT_CMP =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ INVARIANT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ RESULTANTE =SIMP(statut='f',typ='TXM',max='**'),
+
+ MOMENT =SIMP(statut='f',typ='TXM',max='**'),
+ POINT =SIMP(statut='f',typ='R',max='**'),
+
+ REPERE =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+ into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+ ANGL_NAUT =SIMP(statut='f',typ='R',min=3,max=3),
+ ORIGINE =SIMP(statut='f',typ='R',min=3,max=3),
+ AXE_Z =SIMP(statut='f',typ='R',min=3,max=3),
+
+ TRAC_NOR =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ TRAC_DIR =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ DIRECTION =SIMP(statut='f',typ='R',max='**'),
+
+ VECT_Y =SIMP(statut='f',typ='R',max='**'),
+ MOYE_NOEUD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ ),
+
+ FORMAT_C =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ZENTNER I.ZENTNER
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
+ UIinfo={"groupes":("Post traitements",)},
+ fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure",
+ regles=(UN_PARMI('TUBE_NEUF','RESU_GENE','PUIS_USURE'),
+ PRESENT_PRESENT('RESU_GENE','NOEUD','LOI_USURE'),
+ PRESENT_PRESENT('PUIS_USURE','LOI_USURE'),),
+ TUBE_NEUF =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ETAT_INIT =FACT(statut='f',
+ TABL_USURE =SIMP(statut='f',typ=table_sdaster),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ ),
+ RESU_GENE =SIMP(statut='f',typ=tran_gene),
+ NOEUD =SIMP(statut='f',typ=no,),
+ INST_INIT =SIMP(statut='f',typ='R',defaut=-1.0E+0),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ NB_BLOC =SIMP(statut='f',typ='I',defaut= 1 ),
+ PUIS_USURE =SIMP(statut='f',typ='R'),
+ LOI_USURE =SIMP(statut='f',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+ b_archard =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+ regles=(UN_PARMI('MOBILE','MATER_USURE','SECTEUR'),
+ EXCLUS('MATER_USURE','OBSTACLE'),
+ EXCLUS('MOBILE','USURE_OBST'),),
+ MOBILE =FACT(statut='f',
+ COEF_USURE =SIMP(statut='o',typ='R'),
+ ),
+ OBSTACLE =FACT(statut='f',
+ COEF_USURE =SIMP(statut='o',typ='R'),
+ ),
+ SECTEUR =FACT(statut='f',max='**',
+ CONTACT =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",
+ "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",
+ "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+ COEF_USUR_MOBILE=SIMP(statut='f',typ='R'),
+ COEF_USUR_OBST =SIMP(statut='f',typ='R'),
+ ANGL_INIT =SIMP(statut='f',typ='R'),
+ ANGL_FIN =SIMP(statut='f',typ='R'),
+ ),
+ MATER_USURE =SIMP(statut='f',typ='TXM'),
+ USURE_OBST =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ ),
+ b_kwu_epri =BLOC(condition = "LOI_USURE == 'KWU_EPRI'",
+ regles=(UN_PARMI('MOBILE','MATER_USURE'),
+ EXCLUS('MATER_USURE','OBSTACLE'),
+ EXCLUS('MOBILE','USURE_OBST'),),
+ MOBILE =FACT(statut='f',
+ COEF_FNOR =SIMP(statut='f',typ='R'),
+ COEF_VTAN =SIMP(statut='f',typ='R'),
+ COEF_USURE =SIMP(statut='f',typ='R'),
+ COEF_K =SIMP(statut='f',typ='R',defaut=5.0E+0),
+ COEF_C =SIMP(statut='f',typ='R',defaut=10.0E+0),
+ ),
+ OBSTACLE =FACT(statut='f',
+ COEF_FNOR =SIMP(statut='f',typ='R' ),
+ COEF_VTAN =SIMP(statut='f',typ='R' ),
+ COEF_USURE =SIMP(statut='o',typ='R'),
+ COEF_K =SIMP(statut='f',typ='R',defaut=5.0E+0),
+ COEF_C =SIMP(statut='f',typ='R',defaut=10.0E+0),
+ ),
+ MATER_USURE =SIMP(statut='f',typ='TXM'),
+ USURE_OBST =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ FNOR_MAXI =SIMP(statut='f',typ='R' ),
+ VTAN_MAXI =SIMP(statut='f',typ='R' ),
+ ),
+ b_edf_mz =BLOC(condition = "LOI_USURE == 'EDF_MZ'",
+ regles=(UN_PARMI('MOBILE','MATER_USURE'),
+ EXCLUS('MATER_USURE','OBSTACLE'),
+ EXCLUS('MOBILE','USURE_OBST'),),
+ MOBILE =FACT(statut='f',
+ COEF_USURE =SIMP(statut='f',typ='R',defaut=1.0E-13),
+ COEF_B =SIMP(statut='f',typ='R',defaut=1.2E+0),
+ COEF_N =SIMP(statut='f',typ='R',defaut=2.44E-8),
+ COEF_S =SIMP(statut='f',typ='R',defaut=1.14E-16),
+ ),
+ OBSTACLE =FACT(statut='f',
+ COEF_USURE =SIMP(statut='o',typ='R',defaut=1.0E-13),
+ COEF_B =SIMP(statut='f',typ='R',defaut=1.2E+0),
+ COEF_N =SIMP(statut='f',typ='R',defaut=2.44E-8),
+ COEF_S =SIMP(statut='f',typ='R',defaut=1.14E-16),
+ ),
+ MATER_USURE =SIMP(statut='f',typ='TXM'),
+ USURE_OBST =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ ),
+ b_tube_neuf =BLOC(condition = "TUBE_NEUF == 'OUI'",
+ TABL_USURE =SIMP(statut='o',typ=table_sdaster),
+ INST =SIMP(statut='f',typ='R'),
+ ),
+ CONTACT =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",
+ "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",
+ "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+ RAYON_MOBILE =SIMP(statut='f',typ='R'),
+ RAYON_OBST =SIMP(statut='f',typ='R'),
+ LARGEUR_OBST =SIMP(statut='f',typ='R'),
+ ANGL_INCLI =SIMP(statut='f',typ='R'),
+ ANGL_ISTHME =SIMP(statut='f',typ='R'),
+ ANGL_IMPACT =SIMP(statut='f',typ='R'),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ COEF_INST =SIMP(statut='f',typ='R',defaut=1.0E+0),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 16/02/2010 AUTEUR PELLET J.PELLET
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+
+POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
+ fr="Poursuite d'une étude à partir de la sauvegarde au format JEVEUX ou HDF de sa base globale",
+ sd_prod = ops.POURSUITE,
+ UIinfo={"groupes":("Gestion du travail",)},
+ op_init = ops.POURSUITE_context,fichier_ini = 1,
+ FORMAT_HDF =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+ typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ PAR_LOT =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+ into=("OUI","NON"),defaut="OUI"),
+ IMPR_MACRO =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+ statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+
+ BASE =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+ statut='f',min=1,max=2,
+ FICHIER =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+ TITRE =SIMP(statut='f',typ='TXM'),
+ CAS =SIMP(statut='f',typ='TXM'),
+ NMAX_ENRE =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+ LONG_ENRE =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+ LONG_REPE =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+ ),
+
+ IMPRESSION =FACT(statut='f',min=1,max=3,
+ FICHIER =SIMP(statut='o',typ='TXM'),
+ UNITE =SIMP(statut='o',typ='I'),
+ ),
+
+ CATALOGUE =FACT(statut='f',min=1,max=10,
+ FICHIER =SIMP(statut='o',typ='TXM'),
+ TITRE =SIMP(statut='f',typ='TXM'),
+ UNITE =SIMP(statut='f',typ='I'),
+ ),
+
+ ERREUR =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+ ERREUR_F =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),defaut='ABORT'),
+ ),
+
+ DEBUG =FACT(fr="option de déboggage reservée aux développeurs",
+ statut='f',min=1,max=1,
+ JXVERI =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+ statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+ SDVERI =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+ statut='f',typ='TXM',into=('OUI','NON')),
+ JEVEUX =SIMP(fr="force les déchargement sur disque",
+ statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+ ENVIMA =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+ statut='f',typ='TXM',into=('TEST',)),
+ ),
+
+ MESURE_TEMPS =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+ statut='d',min=1,max=1,
+ NIVE_DETAIL =SIMP(fr="niveau de détail des impressions",
+ statut='f',typ='I',into=(0,1,2,3),defaut=1),
+ # 0 : rien
+ # 1 : impression en fin de commande des mesures principales
+ # 2 : impression en fin de commande des mesures principales et secondaires
+ # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+ ),
+
+ MEMOIRE =FACT(fr="mode de gestion mémoire utilisé",statut='d',min=1,max=1,
+ GESTION =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+ TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+ TAILLE =SIMP(statut='f',typ='I'),
+ TAILLE_BLOC =SIMP(statut='f',typ='R',defaut=800.),
+ PARTITION =SIMP(statut='f',typ='R' ),
+ DYNAMIQUE =SIMP(statut='f',typ='I',defaut=1),
+ ),
+
+ RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+ regles=(EXCLUS('VALE','POURCENTAGE'),),
+ VALE =SIMP(statut='f',typ='I',val_min=0),
+# valeur par défaut fixée à 10. dans le FORTRAN si CODE présent
+ POURCENTAGE =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+# valeur par défaut fixée à 10% dans le FORTRAN
+ BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=900) ),
+# valeur en pourcentage du temps maximum bornée à 900 secondes
+
+ CODE =FACT("définition d'un nom pour l'ensemble d'une étude",
+ statut='f',min=1,max=1,
+ NOM =SIMP(statut='o',typ='TXM'),
+ ),
+
+
+ IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Conversion d'un fichier de maillage GIBI au format Aster",
+ UNITE_GIBI =SIMP(statut='f',typ='I',defaut=19),
+ UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+
+PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Conversion d'un fichier de maillage GMSH au format Aster",
+ UNITE_GMSH =SIMP(statut='f',typ='I',defaut=19),
+ UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 MIKCHEVITCH A.MIKCHEVITCH
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Conversion d'un fichier universel IDEAS-SUPERTAB au format Aster",
+ UNITE_IDEAS =SIMP(statut='f',typ='I',defaut=19),
+ UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20),
+ CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
+ fr="Effectuer le produit d'une matrice par un vecteur",
+ reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
+ CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 19/04/2010 AUTEUR BERARD A.BERARD
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PELLET J.PELLET
+def proj_champ_prod(RESULTAT=None,CHAM_GD=None,**args ):
+ if AsType(RESULTAT) != None : return AsType(RESULTAT)
+ if AsType(CHAM_GD) != None : return AsType(CHAM_GD)
+ raise AsException("type de concept resultat non prevu")
+
+
+
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Projeter des champs d'un maillage sur un autre",
+
+
+ METHODE =SIMP(statut='f',typ='TXM',defaut="ELEM",
+ into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+
+ regles=(UN_PARMI('RESULTAT','CHAM_GD'),
+ UN_PARMI('MODELE_1','MAILLAGE_1'),
+ UN_PARMI('MODELE_2','MAILLAGE_2'),
+ ),
+ RESULTAT =SIMP(statut='f',typ=resultat_sdaster),
+ CHAM_GD =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
+
+ MODELE_1 =SIMP(statut='f',typ=modele_sdaster),
+ MAILLAGE_1 =SIMP(statut='f',typ=maillage_sdaster),
+
+ MODELE_2 =SIMP(statut='f',typ=modele_sdaster),
+ MAILLAGE_2 =SIMP(statut='f',typ=maillage_sdaster),
+
+ # Cas de la projection NUAGE_DEG_0/1 :
+ #--------------------------------------------
+ b_nuage =BLOC(condition="METHODE in ('NUAGE_DEG_0','NUAGE_DEG_1')",
+ CHAM_NO_REFE =SIMP(statut='o',typ=cham_no_sdaster),
+ ),
+
+
+ # Cas de la projection ELEM :
+ #--------------------------------------------
+ b_elem =BLOC(condition="METHODE == 'ELEM'",
+ CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+ fr="Pour indiquer au programme le type de projection souhaité"),
+ DISTANCE_MAX =SIMP(statut='f',typ='R',
+ fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+
+ TRANSF_GEOM_1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+ fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+ " aux noeuds du MODELE_1 avant la projection."),
+ TRANSF_GEOM_2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+ fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+ " aux noeuds du MODELE_2 avant la projection."),
+
+ ALARME =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+ TYPE_CHAM =SIMP(statut='f',typ='TXM',into=("NOEU",),
+ fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+ PROL_ZERO =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+ fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
+ ),
+
+
+
+ # Cas de la projection d'une sd_resultat :
+ #--------------------------------------------
+ b_resultat =BLOC(condition="RESULTAT != None",
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
+ EXCLUS('TOUT_CHAM','NOM_CHAM',),
+ CONCEPT_SENSIBLE('SEPARE'),
+ REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters",),
+
+ NOM_PARA =SIMP(statut='f',typ='TXM', max='**'),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+ NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster),
+ fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
+
+
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+ b_acce_reel =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ ),
+
+ ),
+
+
+
+ # Mots clés utilisables dans tous les cas :
+ #---------------------------------------------
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ VIS_A_VIS =FACT(statut='f',max='**',
+ regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+ AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+ TOUT_1 =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA_1 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_1 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_1 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_1 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ TOUT_2 =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA_2 =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE_2 =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+
+ # les mots clés suivants ne sont actifs que si METHODE='ELEM' mais on ne peut pas le vérifier:
+ CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+ TRANSF_GEOM_1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+ fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+ " aux noeuds du MODELE_1 avant la projection."),
+ TRANSF_GEOM_2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+ fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+ " aux noeuds du MODELE_2 avant la projection."),
+ ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
+ if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_gene_r
+ if AsType(MATR_ASSE_GENE) == matr_asse_gene_r : return matr_asse_gene_r
+ if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_gene_c
+ if AsType(MATR_ASSE_GENE) == matr_asse_gene_c : return matr_asse_gene_c
+ raise AsException("type de concept resultat non prevu")
+
+PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op= 71,sd_prod=matr_asse_gene_prod,
+ fr="Projection d'une matrice assemblée sur une base (modale ou de RITZ)",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),
+ BASE =SIMP(statut='o',typ=(mode_meca,mode_gene ) ),
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ MATR_ASSE =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+ MATR_ASSE_GENE =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
+) ;
+
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ANDRIAM H.ANDRIAMBOLOLONA
+def proj_mesu_modal_prod(MODELE_MESURE,**args):
+ vale=MODELE_MESURE['MESURE']
+ if AsType(vale) == dyna_trans : return tran_gene
+ if AsType(vale) == dyna_harmo : return harm_gene
+ if AsType(vale) == mode_meca : return mode_gene
+ if AsType(vale) == mode_meca_c : return mode_gene
+# if AsType(vale) == base_modale : return mode_gene
+ raise AsException("type de concept resultat non prevu")
+
+PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
+ sd_prod=proj_mesu_modal_prod,
+ reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Calcul des coordonnees généralisees de mesure experimentale relatives a une base de projection",
+
+ MODELE_CALCUL =FACT(statut='o',
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+# BASE =SIMP(statut='o',typ=(mode_meca,base_modale,) ),
+ BASE =SIMP(statut='o',typ= mode_meca, ),
+ ),
+ MODELE_MESURE =FACT(statut='o',
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+# MESURE =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,base_modale,mode_meca,mode_meca_c,) ),
+ MESURE =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+ ),
+ CORR_MANU =FACT(statut='f',max='**',
+ regles=(PRESENT_PRESENT('NOEU_CALCUL','NOEU_MESURE'),),
+ NOEU_CALCUL =SIMP(statut='f',typ=no),
+ NOEU_MESURE =SIMP(statut='f',typ=no),
+ ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',max='**'),
+ RESOLUTION =FACT(statut='f',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+ b_svd =BLOC(condition="METHODE=='SVD'",
+ EPS=SIMP(statut='f',typ='R',defaut=0. ),
+ ),
+ REGUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+ b_regul =BLOC(condition="REGUL!='NON'",
+ regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+ COEF_PONDER =SIMP(statut='f',typ='R',defaut=0. ,max='**' ),
+ COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+ ),
+ ),
+
+ );
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ",
+ regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),),
+ SPEC_TURB =SIMP(statut='o',typ=spectre_sdaster,validators=NoRepeat(),max='**' ),
+ TOUT_CMP =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ BASE_ELAS_FLUI =SIMP(statut='f',typ=melasflu_sdaster ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster),
+ FREQ_INIT =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ FREQ_FIN =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+ NB_POIN =SIMP(statut='o',typ='I' ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG")),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+# Quel est le type attendu derriere MODELE_INTERFACE
+ MODELE_INTERFACE=SIMP(statut='f',typ=modele_sdaster),
+ VECT_X =SIMP(statut='f',typ='R',min=3,max=3 ),
+ VECT_Y =SIMP(statut='f',typ='R',min=3,max=3 ),
+ ORIG_AXE =SIMP(statut='f',typ='R',min=3,max=3 ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+
+PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op= 72,sd_prod=vect_asse_gene,
+ fr="Projection d'un vecteur assemblé sur une base (modale ou de RITZ)",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),
+ BASE =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+ NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ),
+ TYPE_VECT =SIMP(statut='f',typ='TXM',defaut="FORC"),
+ VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster),
+ VECT_ASSE_GENE =SIMP(statut='f',typ=vect_asse_gene ),
+) ;
+#& MODIF COMMANDE DATE 03/05/2010 AUTEUR GENIAUT S.GENIAUT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 GALENNE E.GALENNE
+
+
+from Macro.propa_fiss_ops import propa_fiss_ops
+
+def propa_fiss_prod(self,**args):
+ if args.has_key('MAIL_TOTAL') :
+ MAIL_TOTAL = args['MAIL_TOTAL']
+ self.type_sdprod(MAIL_TOTAL,maillage_sdaster)
+ if args.has_key('MAIL_FISS') :
+ MAIL_FISS = args['MAIL_FISS']
+ self.type_sdprod(MAIL_FISS,maillage_sdaster)
+ if args.has_key('FISSURE') :
+ FISSURE = args['FISSURE']
+ for numfis in FISSURE :
+ if (args['METHODE_PROPA']=='MAILLAGE') :
+ self.type_sdprod(numfis['MAIL_PROPAGE'],maillage_sdaster)
+ else :
+ self.type_sdprod(numfis['FISS_PROPAGEE'],fiss_xfem)
+ return None
+
+PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
+ fr="Propagation de fissure avec X-FEM",reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+
+ METHODE_PROPA = SIMP(statut='o',typ='TXM',
+ into=("SIMPLEXE","UPWIND","MAILLAGE","INITIALISATION") ),
+
+ b_hamilton = BLOC(condition="(METHODE_PROPA=='SIMPLEXE') or (METHODE_PROPA=='UPWIND') ",
+ MODELE = SIMP(statut='o',typ=modele_sdaster),
+ TEST_MAIL = SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+ DA_MAX = SIMP(statut='o',typ='R',max=1),
+ RAYON = SIMP(statut='o',typ='R',),
+ ZONE_MAJ = SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+ b_tore = BLOC(condition = "ZONE_MAJ == 'TORE' ",
+ RAYON_TORE = SIMP(statut='f',typ='R',max=1,val_min=0.0),
+ ),
+ b_propagation = BLOC(condition = "TEST_MAIL == 'NON' ",
+ FISSURE = FACT(statut='o',min=1,max='**',
+ FISS_ACTUELLE = SIMP(statut='o',typ=fiss_xfem,max=1),
+ FISS_PROPAGEE = SIMP(statut='o',typ=CO,max=1),
+ GRILLE_AUX = SIMP(statut='f',typ=modele_sdaster,max=1),
+ NB_POINT_FOND = SIMP(statut='f',typ='I',max='**'),
+ TABLE = SIMP(statut='o',typ=table_sdaster,max=1),
+ ),
+ LOI_PROPA = FACT(statut='o',max=1,
+ LOI = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+ b_paris = BLOC(condition = "LOI=='PARIS'",
+ C = SIMP(statut='o',typ='R',),
+ N = SIMP(statut='o',typ='R',),
+ M = SIMP(statut='o',typ='R',),
+ ),
+ MATER = SIMP(statut='o',typ=mater_sdaster,),
+ ),
+ COMP_LINE = FACT(statut='f',max=1,
+ COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+ COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+ ),
+ ),
+
+ b_test_const = BLOC(condition = "TEST_MAIL == 'OUI' ",
+ FISSURE = FACT(statut='o',min=1,max='**',
+ FISS_ACTUELLE = SIMP(statut='o',typ=fiss_xfem,max=1),
+ FISS_PROPAGEE = SIMP(statut='o',typ=CO,max=1),
+ GRILLE_AUX = SIMP(statut='f',typ=modele_sdaster,max=1),
+ ),
+ ITERATIONS = SIMP(statut='f',typ='I',max=1,val_min=3,defaut=5),
+ TOLERANCE = SIMP(statut='f',typ='R',max=1,val_min=0.0,val_max=100.0,defaut=5.0),
+ ),
+
+ ),
+
+ b_maillage =BLOC(condition="(METHODE_PROPA=='MAILLAGE')",
+ MAIL_STRUC = SIMP(statut='o',typ=maillage_sdaster),
+ ITERATION = SIMP(statut='o',typ='I',max=1),
+ DA_MAX = SIMP(statut='o',typ='R',max=1),
+
+ FISSURE = FACT(statut='o',min=1,max='**',
+ MAIL_ACTUEL = SIMP(statut='o',typ=maillage_sdaster,max=1),
+ GROUP_MA_FOND = SIMP(statut='f',typ='TXM',defaut="FOND"),
+ GROUP_MA_FISS = SIMP(statut='f',typ='TXM',defaut="FISS"),
+ FISS_ACTUELLE = SIMP(statut='o',typ=fiss_xfem,max=1),
+ MAIL_PROPAGE = SIMP(statut='f',typ=CO,max=1),
+ TABLE = SIMP(statut='o',typ=table_sdaster,max=1),
+ METHODE_POSTK = SIMP(statut='f',typ='I',into=(1,2,3),max=1),
+ DTAN_ORIG = SIMP(statut='f',typ='R',max=3),
+ DTAN_EXTR = SIMP(statut='f',typ='R',max=3),
+ ),
+ MAIL_TOTAL = SIMP(statut='o',typ=CO),
+ COMP_LINE = FACT(statut='f',max=1,
+ COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+ COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+ ),
+ ),
+
+ b_init =BLOC(condition="(METHODE_PROPA=='INITIALISATION')",
+ MAIL_STRUC = SIMP(statut='o',typ=maillage_sdaster),
+ FORM_FISS = SIMP(statut='o',typ='TXM', into=("DEMI_DROITE","DEMI_PLAN","ELLIPSE"), ),
+ GROUP_MA_FOND = SIMP(statut='f',typ='TXM',defaut="FOND"),
+ GROUP_MA_FISS = SIMP(statut='f',typ='TXM',defaut="FISS"),
+ MAIL_TOTAL = SIMP(statut='o',typ=CO),
+ MAIL_FISS = SIMP(statut='f',typ=CO),
+
+ b_droite = BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",
+ PFON = SIMP(statut='o',typ='R',max=3),
+ DTAN = SIMP(statut='o',typ='R',min=3,max=3),
+ ),
+
+ b_plan = BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",
+ DTAN = SIMP(statut='o',typ='R',min=3,max=3),
+ POINT_ORIG = SIMP(statut='o',typ='R',min=3,max=3),
+ POINT_EXTR = SIMP(statut='o',typ='R',min=3,max=3),
+ NB_POINT_FOND = SIMP(statut='o',typ='I',val_max=26),
+ ),
+
+ b_ellipse = BLOC(condition = "FORM_FISS == 'ELLIPSE' ",
+ CENTRE =SIMP(statut='o',typ='R',min=3,max=3),
+ DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+ VECT_X =SIMP(statut='o',typ='R',min=3,max=3),
+ VECT_Y =SIMP(statut='o',typ='R',min=3,max=3),
+ ANGLE_ORIG = SIMP(statut='o',typ='R',),
+ ANGLE_EXTR = SIMP(statut='o',typ='R',),
+ NB_POINT_FOND = SIMP(statut='o',typ='I',val_max=52,),
+ ),
+ ),
+
+ b_loi_et_comp_line=BLOC(condition="(METHODE_PROPA=='MAILLAGE') ",
+ LOI_PROPA = FACT(statut='o',max=1,
+ LOI = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+ b_paris = BLOC(condition = "LOI=='PARIS'",
+ C = SIMP(statut='o',typ='R',),
+ N = SIMP(statut='o',typ='R',),
+ M = SIMP(statut='o',typ='R',),
+ ),
+ MATER = SIMP(statut='o',typ=mater_sdaster,),
+ ),
+ ),
+
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+)
+
+#& MODIF COMMANDE DATE 15/12/2009 AUTEUR COLOMBO D.COLOMBO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 GENIAUT S.GENIAUT
+
+PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
+ UIinfo={"groupes":("Modelisation",)},
+ fr="Propagation de fissure avec X-FEM",
+
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+
+ GRILLE_AUX =SIMP(statut='f',typ=modele_sdaster),
+
+ TEST_MAIL =SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+
+ DA_MAX =SIMP(statut='o',typ='R'),
+
+ FISS_PROP =SIMP(statut='o',typ=fiss_xfem),
+
+ ZONE_MAJ =SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+
+ RAYON_TORE =SIMP(statut='f',typ='R'),
+
+ LISTE_FISS =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+
+ b_propa =BLOC( condition = "TEST_MAIL == 'NON' ",
+ NB_POINT_FOND =SIMP(statut='f',typ='I',min=1,max='**'),
+ TABLE =SIMP(statut='o',typ=table_sdaster,min=1,max='**'),
+ LOI_PROPA =FACT(statut='o',max=1,
+ LOI =SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+ b_paris =BLOC( condition = "LOI=='PARIS'",
+ C =SIMP(statut='o',typ='R',),
+ N =SIMP(statut='o',typ='R',),
+ M =SIMP(statut='o',typ='R',),
+ E =SIMP(statut='o',typ='R',),
+ NU =SIMP(statut='o',typ='R',),),
+ ),
+
+ COMP_LINE =FACT(statut='f',max=1,
+ COEF_MULT_MINI =SIMP(statut='o',typ='R',),
+ COEF_MULT_MAXI =SIMP(statut='o',typ='R',),
+ ),
+ ),
+
+ b_test_mail_const =BLOC( condition = "TEST_MAIL == 'OUI' ",
+ FISS_INITIALE =SIMP(statut='o',typ=fiss_xfem,max=1),
+ DISTANCE =SIMP(statut='o',typ='R',max=1),
+ TOLERANCE =SIMP(statut='o',typ='R',max=1),
+ ),
+
+ RAYON =SIMP(statut='o',typ='R',),
+
+ METHODE =SIMP(statut='f',typ='TXM',into=("SIMPLEXE","UPWIND",),defaut="UPWIND"),
+
+ INFO =SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
+) ;
+#& MODIF COMMANDE DATE 20/07/2009 AUTEUR GENIAUT S.GENIAUT
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 GENIAUT S.GENIAUT
+from Macro.raff_xfem_ops import raff_xfem_ops
+RAFF_XFEM=MACRO(nom="RAFF_XFEM",op=raff_xfem_ops,sd_prod=cham_no_sdaster,
+ fr="Calcul de la distance au fond de fissure le plus proche",
+ reentrant='n',
+ UIinfo={"groupes":("Rupture",)},
+
+ FISSURE =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 PARROT A.PARROT
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
+ fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n',
+ UIinfo={"groupes":("Post traitements",)},
+ LIST_PARA =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("SIGM_REFE","M",) ),
+ RESU =FACT(statut='o',max='**',
+ regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),
+ AU_MOINS_UN('TOUT','GROUP_MA','MAILLE', ),),
+ EVOL_NOLI =SIMP(statut='o',typ=(evol_noli) ),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ CHAM_MATER =SIMP(statut='o',typ=(cham_mater) ),
+ TEMPE =SIMP(statut='f',typ='R' ),
+ LIST_INST_RUPT =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ COEF_MULT =SIMP(statut='f',typ='R',defaut= 1.E0 ),
+ ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
+ CORR_PLAST =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MAXI_VRAI",into=("MAXI_VRAI","REGR_LINE",) ),
+ INCO_GLOB_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+ ) ;
+#& MODIF COMMANDE DATE 23/03/2010 AUTEUR BOYERE E.BOYERE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None,
+ BASE_ELAS_FLUI=None,CHAM_GD=None,NAPPE=None,
+ NOM_PARA_TABL=None,**args):
+ if AsType(RESULTAT) == dyna_harmo or \
+ AsType(RESU_GENE) == harm_gene or \
+ (TABLE != None and NOM_PARA_TABL == "FONCTION_C"):
+ return fonction_c
+ else:
+ return fonction_sdaster
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
+ fr="Extraire sous forme d'une fonction, l'évolution d'une grandeur en fonction d'une autre",
+ reentrant='f',
+ UIinfo={"groupes":("Fonction",)},
+ regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','NAPPE'),),
+
+ CHAM_GD =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem,),),
+ RESULTAT =SIMP(statut='f',typ=resultat_sdaster),
+ RESU_GENE =SIMP(statut='f',typ=(tran_gene, mode_gene, harm_gene)),
+ TABLE =SIMP(statut='f',typ=(table_sdaster,table_fonction)),
+ BASE_ELAS_FLUI =SIMP(statut='f',typ=melasflu_sdaster),
+ NAPPE =SIMP(statut='f',typ=nappe_sdaster),
+
+# ======= SENSIBILITE =================================================
+ b_sensibilite =BLOC(condition="RESULTAT != None",
+ fr="Définition des paramètres de sensibilité",
+ ang="Definition of sensitivity parameters",
+ regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+ DERIVABLE('RESULTAT'),),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters"),),
+# ======= ACCES A LA SD RESULTAT =================================================
+ b_acces = BLOC ( condition = "(RESULTAT != None) or (RESU_GENE != None)",
+ fr="acces a une SD résultat",
+# on ne peut pas mettre de regles, le défaut TOUT_ORDRE est pris en compte dans le fortran
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster ),
+ TOUT_INST =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INTERP_NUME =SIMP(statut='f',typ='TXM',into=("NON","LIN") ),
+ ),
+ ),
+# ======= BASE_ELAS_FLUI =================================================
+ b_base_elas_flui = BLOC ( condition = "BASE_ELAS_FLUI != None",
+ fr="Récupération de la fonction à partir d un concept melasflu",
+ regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ NUME_MODE =SIMP(statut='o',typ='I' ),
+ PARA_X =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
+ PARA_Y =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),
+ ),
+
+# ======= TABLE =================================================
+ b_table = BLOC ( condition = "TABLE != None",
+ fr="Récupération de la fonction à partir d un concept table",
+ regles=(UN_PARMI('PARA_X','NOM_PARA_TABL'),
+ PRESENT_PRESENT('PARA_X','PARA_Y'),),
+ PARA_X = SIMP(statut='f',typ='TXM',
+ fr="1ère colonne de la table qui définit la fonction à récupérer", ),
+ PARA_Y = SIMP(statut='f',typ='TXM',
+ fr="2ème colonne de la table qui définit la fonction à récupérer", ),
+ #b_tabl_fonc = BLOC(condition = "AsType(TABLE) == table_fonction",
+ NOM_PARA_TABL = SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C"),
+ fr="Nom du paramètre de la table contenant la fonction" ),
+ #),
+
+ FILTRE = FACT(statut='f',max='**',
+ NOM_PARA =SIMP(statut='o',typ='TXM' ),
+ CRIT_COMP =SIMP(statut='f',typ='TXM',defaut="EQ",
+ into=("EQ","LT","GT","NE","LE","GE","VIDE",
+ "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+ b_vale =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+ VALE =SIMP(statut='f',typ='R' ),
+ VALE_I =SIMP(statut='f',typ='I' ),
+ VALE_C =SIMP(statut='f',typ='C' ),
+ VALE_K =SIMP(statut='f',typ='TXM' ),),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ ),
+
+# ======= RESULTAT =================================================
+ b_resu = BLOC ( condition = "RESULTAT != None", fr="Opérandes en cas de RESULTAT",
+ regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NOM_PARA_RESU =SIMP(statut='f',typ='TXM' ),
+ b_cham = BLOC ( condition = "NOM_CHAM != None",
+ regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD'),
+ PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+ PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+ EXCLUS('GROUP_MA','MAILLE'),
+ EXCLUS('GROUP_NO','NOEUD'),),
+ NOM_CMP =SIMP(statut='o',typ='TXM' ),
+ MAILLE =SIMP(statut='f',typ=ma),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ POINT =SIMP(statut='f',typ='I' ),
+ SOUS_POINT =SIMP(statut='f',typ='I' ),
+ ),
+ ),
+
+# ======= RESU_GENE =================================================
+ b_tran_gene = BLOC ( condition = "AsType(RESU_GENE) == tran_gene",
+ fr="Récupération d'une fonction à partir d un concept TRAN_GENE",
+ regles=(UN_PARMI('NOM_CHAM','NOEUD_CHOC','GROUP_NO_CHOC'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+ NOEUD_CHOC =SIMP(statut='f',typ=no),
+ GROUP_NO_CHOC =SIMP(statut='f',typ=grno),
+ b_cham = BLOC ( condition = "(NOM_CHAM=='DEPL') or (NOM_CHAM=='VITE') or (NOM_CHAM=='ACCE')",
+ regles=(UN_PARMI('GROUP_NO','NOEUD','NUME_CMP_GENE',),
+ UN_PARMI('NOM_CMP','NUME_CMP_GENE',),
+ EXCLUS('MULT_APPUI','CORR_STAT'),),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ NUME_CMP_GENE =SIMP(statut='f',typ='I' ),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ CORR_STAT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+ ),
+ b_choc = BLOC ( condition = "(NOEUD_CHOC != None) or (GROUP_NO_CHOC != None)",
+ regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),),
+ PARA_X =SIMP(statut='o',typ='TXM',
+ into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+ PARA_Y =SIMP(statut='o',typ='TXM',
+ into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+ LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ),
+ INTITULE =SIMP(statut='f',typ='TXM' ),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ ),
+ ),
+ b_harm_gene = BLOC ( condition = "AsType(RESU_GENE)==harm_gene",
+ fr="Récupération d'une fonction à partir d un concept HARM_GENE",
+ regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NOM_PARA_RESU =SIMP(statut='f',typ='TXM' ),
+ b_cham = BLOC ( condition = "NOM_CHAM != None",
+ regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+ NUME_CMP_GENE =SIMP(statut='f',typ='I' ),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ b_cmp = BLOC ( condition = "NOM_CMP != None",
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ ),
+ ),
+ ),
+ b_mode_gene = BLOC ( condition = "AsType(RESU_GENE)==mode_gene",
+ fr="Récupération d'une fonction à partir d un concept MODE_GENE",
+ regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NOM_PARA_RESU =SIMP(statut='f',typ='TXM' ),
+ b_cham = BLOC ( condition = "NOM_CHAM != None",
+ regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+ NUME_CMP_GENE =SIMP(statut='f',typ='I' ),
+ NOM_CMP =SIMP(statut='f',typ='TXM' ),
+ b_cmp = BLOC ( condition = "NOM_CMP != None",
+ regles=(UN_PARMI('NOEUD','GROUP_NO'),
+ UN_PARMI('SQUELETTE','SOUS_STRUC'),),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ SQUELETTE =SIMP(statut='f',typ=squelette ),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ ),
+ ),
+ ),
+
+# ======= CHAM_GD =================================================
+ b_cham_gd = BLOC ( condition = "(CHAM_GD != None)", fr="Opérandes en cas de CHAM_GD",
+ regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD'),
+ PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+ PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+ EXCLUS('GROUP_MA','MAILLE'),
+ EXCLUS('GROUP_NO','NOEUD'),),
+ NOM_CMP =SIMP(statut='o',typ='TXM' ),
+ MAILLE =SIMP(statut='f',typ=ma),
+ GROUP_MA =SIMP(statut='f',typ=grma),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ POINT =SIMP(statut='f',typ='I' ),
+ SOUS_POINT =SIMP(statut='f',typ='I' ),
+ ),
+
+# ======= NAPPE =================================================
+ b_nappe = BLOC ( condition = "(NAPPE != None)", fr="Opérandes en cas de NAPPE",
+ VALE_PARA_FONC =SIMP(statut='o',typ='R' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ ),
+
+# ======= SURCHARGE DES ATTRIBUTS =================================================
+ NOM_PARA =SIMP(statut='f',typ='TXM', into=C_PARA_FONCTION() ),
+ NOM_RESU =SIMP(statut='f',typ='TXM' ),
+ INTERPOL =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+ PROL_DROITE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+ PROL_GAUCHE =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+) ;
+#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 BOYERE E.BOYERE
+RECU_GENE=OPER(nom="RECU_GENE",op= 76,sd_prod=vect_asse_gene,reentrant='n',
+ UIinfo={"groupes":("Résultats et champs",)},
+ fr="Extraire d'un champ de grandeur (déplacements, vitesses ou accélérations) à partir de résultats"
+ +" en coordonnées généralisées",
+ RESU_GENE =SIMP(statut='o',typ=tran_gene ),
+ INST =SIMP(statut='o',typ='R' ),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE") ),
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+) ;
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
+ fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue"
+ +" dans une autre SD pour celles qui le permettent",
+ UIinfo={"groupes":("Résultats et champs",)},reentrant='n',
+ CO =SIMP(statut='o',typ=assd),
+ regles=(UN_PARMI('NOM_TABLE','NOM_PARA')),
+ NOM_TABLE =SIMP(statut='f',typ='TXM' ),
+ NOM_PARA =SIMP(statut='f',typ='TXM',max='**'),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE DATE 11/08/2009 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007 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 PELLET J.PELLET
+
+RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
+ fr="Résolution par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT"+
+ "ou Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné",
+ UIinfo={"groupes":("Résolution",)},
+ MATR =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+ matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+ CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster),
+ CHAM_CINE =SIMP(statut='f',typ=cham_no_sdaster),
+
+ # mot-clé commun aux solveurs MUMPS, GCPC et PETSc:
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6),
+
+ # mot-clé pour les posttraitements de la phase de solve de MUMPS
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+
+ # mot-clé commun aux solveurs GCPC et PETSc:
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ MATR_PREC =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+
+ # mots-clés pour solveur PETSc:
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 DEVESA G.DEVESA
+def rest_cond_tran_prod(RESULTAT,**args ):
+
+ if AsType(RESULTAT) == evol_noli : return dyna_trans
+ if AsType(RESULTAT) == dyna_trans : return dyna_trans
+
+ raise AsException("type de concept resultat non prevu")
+
+REST_COND_TRAN=OPER(nom="REST_COND_TRAN",op= 78,sd_prod=rest_cond_tran_prod,
+ fr="Restituer dans la base physique des résultats issus d'un calcul"
+ +"non-lineaire avec projection modale ou d'un calcul transitoire linear"
+ +"avec condensation dynamique",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+ EXCLUS('MACR_ELEM_DYNA','BASE_MODALE'),),
+ RESULTAT =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
+ BASE_MODALE =SIMP(statut='f',typ=mode_meca),
+# NUME_DDL =SIMP(statut='f',typ=nume_ddl_sdaster ),
+ MACR_ELEM_DYNA =SIMP(statut='f',typ=macr_elem_dyna),
+ TOUT_INST =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,defaut="ACCE",
+ into=("DEPL","VITE","ACCE",) ),),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 BOYERE E.BOYERE
+
+def rest_gene_phys_prod(RESU_GENE,**args ):
+ if AsType(RESU_GENE) == tran_gene : return dyna_trans
+ if AsType(RESU_GENE) == mode_gene : return mode_meca
+ if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+
+ raise AsException("type de concept resultat non prevu")
+
+REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op= 75,sd_prod=rest_gene_phys_prod,
+ fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(
+ EXCLUS('INST','LIST_INST','TOUT_INST',
+ 'TOUT_ORDRE','NUME_ORDRE','NUME_MODE',),
+ EXCLUS('FREQ','LIST_FREQ'),
+ EXCLUS('MULT_APPUI','CORR_STAT'),
+ EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+ EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),
+ EXCLUS('NOEUD','GROUP_NO'),
+ EXCLUS('MAILLE','GROUP_MA'),
+ PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+ RESU_GENE =SIMP(statut='f',typ=(tran_gene,mode_gene,harm_gene) ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ NUME_DDL =SIMP(statut='f',typ=nume_ddl_sdaster ),
+ TOUT_INST =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+ MULT_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ CORR_STAT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",
+ into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",
+ "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ DIRECTION =SIMP(statut='f',typ='R',min=3,max=3 ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 CORUS M.CORUS
+def rest_sous_struc_prod(RESU_GENE,RESULTAT,**args ):
+ if AsType(RESU_GENE) == tran_gene : return dyna_trans
+ if AsType(RESU_GENE) == mode_gene : return mode_meca
+ if AsType(RESU_GENE) == mode_cycl : return mode_meca
+ if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+ if AsType(RESULTAT) == evol_noli : return evol_noli
+ if AsType(RESULTAT) == dyna_trans : return dyna_trans
+ if AsType(RESULTAT) == mode_meca : return mode_meca
+ raise AsException("type de concept resultat non prevu")
+
+REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op= 77,sd_prod=rest_sous_struc_prod,
+ fr="Restituer dans la base physique des résultats obtenus par sous-structuration",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+# ajout d'une regle de Ionel et Nicolas:
+# UN_PARMI('NOM_CHAM','TOUT_CHAM'),
+#
+ EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST','NUME_MODE',
+ 'FREQ', 'LIST_FREQ'),
+# Doc U à revoir
+ EXCLUS('NOEUD','GROUP_NO'),
+ EXCLUS('MAILLE','GROUP_MA'),
+ PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+
+ ),
+ RESULTAT =SIMP(statut='f',typ=(evol_noli,dyna_trans,
+ mode_meca) ),
+ RESU_GENE =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene) ),
+ NUME_DDL =SIMP(statut='f',typ=nume_ddl_sdaster ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+ TOUT_INST =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster ),
+ FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INTERPOL =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",
+ into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",
+ "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ CYCLIQUE =FACT(statut='f',max='**',
+ NB_SECTEUR =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+ NUME_DIAMETRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+ RESULTAT2 =SIMP(statut='f',typ=(evol_elas,evol_noli,dyna_trans,evol_char,
+ mode_meca) ),
+ ),
+
+ SQUELETTE =SIMP(statut='f',typ=squelette ),
+ SOUS_STRUC =SIMP(statut='f',typ='TXM' ),
+ SECTEUR =SIMP(statut='f',typ='I',defaut= 1 ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 11/05/2009 AUTEUR NISTOR I.NISTOR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ADOBES A.ADOBES
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
+ reentrant='n',
+ fr="Calculer la réponse d'une structure dans la base physique",
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
+ BASE_ELAS_FLUI =SIMP(statut='f',typ=melasflu_sdaster ),
+ MODE_MECA =SIMP(statut='f',typ=mode_meca,),
+ BANDE =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max=2 ),
+ NUME_ORDRE =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**' ),
+ TOUT_ORDRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON") ),
+ INTE_SPEC_GENE =SIMP(statut='o',typ=table_fonction),
+ NOEUD =SIMP(statut='o',typ=no ,max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,max='**'),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,
+ into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",
+ "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+ MODE_STAT =SIMP(statut='f',typ=mode_meca ),
+ EXCIT =FACT(statut='f',
+ NOEUD =SIMP(statut='o',typ=no ,max='**'),
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ ),
+ MOUVEMENT =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
+ OPTION =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",
+ into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+) ;
+#& MODIF COMMANDE DATE 06/10/2008 AUTEUR DEVESA G.DEVESA
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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 DEVESA G.DEVESA
+def rest_spec_temp_prod(RESU_GENE,RESULTAT,**args):
+ if AsType(RESULTAT) == dyna_harmo : return dyna_trans
+ if AsType(RESU_GENE) == harm_gene : return tran_gene
+ if AsType(RESULTAT) == dyna_trans : return dyna_harmo
+ if AsType(RESU_GENE) == tran_gene : return harm_gene
+ raise AsException("type de concept resultat non prevu")
+
+
+REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
+ fr="Transformée de Fourier d'un résultat",
+ reentrant='n',
+ UIinfo={"groupes":("Matrices/vecteurs",)},
+ regles=UN_PARMI('RESU_GENE','RESULTAT'),
+ RESU_GENE =SIMP(statut='f',typ=(harm_gene,tran_gene,) ),
+ RESULTAT =SIMP(statut='f',typ=(dyna_harmo,dyna_trans,) ),
+ METHODE =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE") ),
+ SYMETRIE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+);
+#& MODIF COMMANDE DATE 03/05/2010 AUTEUR PROIX J-M.PROIX
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006 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 PROIX J.M.PROIX
+# -*- coding: iso-8859-1 -*-
+
+from Macro.simu_point_mat_ops import simu_point_mat_ops
+
+SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_sdaster,
+ UIinfo={"groupes":("Résolution",)},
+ fr="Calcul de l'évolution mécanique, en quasi-statique,"
+ +" d'un point matériel en non linéaire",
+ COMP_INCR =C_COMP_INCR(),
+ COMP_ELAS =FACT(statut='f',max='**',
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ ),
+ MATER =SIMP(statut='o',typ=mater_sdaster,max=30),
+
+## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+ ANGLE =SIMP(statut='f',typ='R',max=1, defaut=0.),
+# --MASSIF : orientation du materiau (monocristal, orthotropie)
+ MASSIF =FACT(statut='f',max='**',
+ regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+ ANGL_REP =SIMP(statut='f',typ='R',min=1,max=3),
+ ANGL_EULER =SIMP(statut='f',typ='R',min=1,max=3),
+ ),
+ INCREMENT =C_INCREMENT(),
+ NEWTON =C_NEWTON(),
+ CONVERGENCE =C_CONVERGENCE(),
+
+ SUPPORT= SIMP(statut='f',typ='TXM',max=1,into=("POINT","ELEMENT",)),
+
+ b_PM = BLOC(condition="SUPPORT != 'ELEMENT'",fr="Simulation sans élément fini",
+ NB_VARI_TABLE =SIMP(statut='f',typ='I',max=1,),
+ ARCHIVAGE =FACT(statut='f',
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ),
+ ),
+ b_EF = BLOC(condition="SUPPORT == 'ELEMENT'",fr="Simulation sur un élément fini",
+ MODELISATION =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN","D_PLAN",)),
+ RECH_LINEAIRE =C_RECH_LINEAIRE(),
+ ARCHIVAGE =FACT(statut='f',
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",),defaut="OUI"),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
+ ),
+ ),
+ # on permet certaines variables de commandes scalaires, définies par une fonction du temps
+ b_EFV = BLOC(condition="SUPPORT == 'ELEMENT'",fr="variables de commande sur un élément fini",
+ # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+ LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP",)),
+ AFFE_VARC = FACT(statut='f',max='**',
+ NOM_VARC = SIMP(statut='o',typ='TXM', into=("TEMP",)),
+ VALE_FONC = SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+ VALE_REF = SIMP(statut='f',typ='R'),
+ ),
+ # mots clés cachés pour variable de commande TEMP :
+ # --------------------------------------------------
+ VARC_TEMP =FACT(statut='d',
+ NOM_VARC =SIMP(statut='c',typ='TXM',defaut="TEMP"),
+ GRANDEUR =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+ CMP_GD =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+ CMP_VARC =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+ VALE_DEF =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
+ ),
+ ),
+
+ SIGM_IMPOSE=FACT(statut='f',
+ SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ EPSI_IMPOSE=FACT(statut='f',
+ EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ SIGM_INIT=FACT(statut='f',
+ SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+ ),
+ EPSI_INIT=FACT(statut='f',
+ EPXX = SIMP(statut='o',typ='R',max=1),
+ EPYY = SIMP(statut='o',typ='R',max=1),
+ EPZZ = SIMP(statut='o',typ='R',max=1),
+ EPXY = SIMP(statut='o',typ='R',max=1),
+ EPXZ = SIMP(statut='o',typ='R',max=1),
+ EPYZ = SIMP(statut='o',typ='R',max=1),
+ ),
+ VARI_INIT=FACT(statut='f',
+ VALE = SIMP(statut='o',typ='R',max='**'),
+ ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE DATE 22/09/2009 AUTEUR SELLENET N.SELLENET
+# 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 ASSIRE A.ASSIRE
+
+from Macro.stanley_ops import stanley_ops
+
+STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
+ reentrant='n',
+ UIinfo={"groupes":("Outils métier",)},
+ fr="Outil de post-traitement interactif Stanley ",
+ RESULTAT =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther,mode_meca,dyna_harmo,dyna_trans) ),
+ MODELE =SIMP(statut='f',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ DISPLAY =SIMP(statut='f',typ='TXM'),
+ UNITE_VALIDATION=SIMP(statut='f',typ='I',val_min=10,val_max=90,
+ fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
+
+) ;
+#& MODIF COMMANDE DATE 12/04/2010 AUTEUR MICHEL S.MICHEL
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 ABBAS M.ABBAS
+#
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+ fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique,"
+ +" d'une structure en non linéaire",
+ reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),
+ CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+ ),
+ CONTACT =SIMP(statut='f',typ=char_contact),
+ SOUS_STRUC =FACT(statut='f',min=01,max='**',
+ regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+ CAS_CHARGE =SIMP(statut='o',typ='TXM' ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ COMP_INCR =C_COMP_INCR(),
+ COMP_ELAS =FACT(statut='f',max='**',
+ RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ),
+ RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+ into=("IMPLICITE",)),
+ RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS",
+ into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
+ "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+
+ DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+ b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+ ETAT_INIT =FACT(statut='o',
+ regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+ EXCLUS('EVOL_NOLI','DEPL',),
+ EXCLUS('EVOL_NOLI','SIGM',),
+ EXCLUS('EVOL_NOLI','VARI',),
+ EXCLUS('NUME_ORDRE','INST'), ),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+ VARI =SIMP(statut='f',typ=cham_elem),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ NUME_DIDI =SIMP(statut='f',typ='I'),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),),
+ b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+ ETAT_INIT =FACT(statut='f',
+ regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+ EXCLUS('EVOL_NOLI','DEPL',),
+ EXCLUS('EVOL_NOLI','SIGM',),
+ EXCLUS('EVOL_NOLI','VARI',),
+ EXCLUS('NUME_ORDRE','INST'), ),
+ DEPL =SIMP(statut='f',typ=cham_no_sdaster),
+ SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+ VARI =SIMP(statut='f',typ=cham_elem),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ NUME_DIDI =SIMP(statut='f',typ='I'),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),),
+ INCREMENT =C_INCREMENT(),
+
+# **C_ALGO_RESOLUTION()
+ METHODE = SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPL_EX")),
+ b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+ NEWTON = C_NEWTON(),
+ ),
+ b_meth_impl_ex = BLOC(condition = "METHODE == 'IMPL_EX'",
+ IMPL_EX = C_IMPL_EX(),
+ ),
+
+ RECH_LINEAIRE =C_RECH_LINEAIRE(),
+
+ PILOTAGE =FACT(statut='f',
+ regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TYPE =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","DEFORMATION","ANA_LIM") ),
+ COEF_MULT =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+ EVOL_PARA =SIMP(statut='f',typ='TXM',defaut="SANS", into=("SANS","CROISSANT","DECROISSANT") ),
+
+
+ ETA_PILO_MAX =SIMP(statut='f',typ='R'),
+ ETA_PILO_MIN =SIMP(statut='f',typ='R'),
+ ETA_PILO_R_MAX =SIMP(statut='f',typ='R'),
+ ETA_PILO_R_MIN =SIMP(statut='f',typ='R'),
+ PROJ_BORNES =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ SELECTION =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ ),
+
+ CONVERGENCE =C_CONVERGENCE(),
+
+ SOLVEUR =C_SOLVEUR(),
+
+ ARCHIVAGE =FACT(statut='f',
+ regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+ EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
+ ),
+ OBSERVATION =FACT(statut='f',max='**',
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**'),
+ SUIVI_DDL =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+ b_suivi =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+ regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
+ PRESENT_PRESENT('MAILLE','POINT'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ POINT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+ into=("DEPL","VITE","ACCE","SIEF_ELGA",
+ "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ NUME_SUIVI =SIMP(statut='o',typ='I' ,min=1,max=4),
+ VALE_MAX =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
+ VALE_MIN =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
+ b_non_suivi =BLOC(condition = "SUIVI_DDL == 'NON' ",
+ regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ POINT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+ "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU","VALE_CONT")),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ PAS_OBSE =SIMP(statut='f',typ='I'),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),),
+ ),
+
+ AFFICHAGE = FACT(statut='f',max=16,
+
+ UNITE = SIMP(statut='f',typ='I',val_min=1),
+
+ LONG_R = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
+ PREC_R = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
+ LONG_I = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
+
+ NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
+ into=("STANDARD","MINIMUM",
+ "ITER_NEWT",
+ "INCR_TPS",
+ "RESI_RELA","RELA_NOEU",
+ "RESI_MAXI","MAXI_NOEU",
+ "RESI_REFE","REFE_NOEU",
+ "RELI_ITER","RELI_COEF",
+ "RESI_COMP","COMP_NOEU",
+ "PILO_PARA",
+ "MATR_ASSE",
+ "ITER_DEBO",
+ "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
+ "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+ "SUIV_1","SUIV_2","SUIV_3","SUIV_4","ITER_FETI",
+ ),
+ ),
+ b_residu = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
+ NOM_COLONNE == 'RESI_MAXI' or\
+ NOM_COLONNE == 'RESI_REFE' or\
+ NOM_COLONNE == 'CTCD_GEOM' or\
+ NOM_COLONNE == 'STANDARD' ",
+ INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ ),
+
+
+
+ CRIT_FLAMB =FACT(statut='f',min=1,max=1,
+ NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3),
+ CHAR_CRIT =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
+ fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+ RIGI_GEOM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ b_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+ DDL_EXCLUS =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+ into=('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+ 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+ 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+ 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+ 'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON','DCX',
+ 'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+ 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+ 'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+ 'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+ INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité",
+ ang="List of sensitivity parameters"),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ )
+
+#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+# 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 COURTOIS M.COURTOIS
+
+from Macro.test_fichier_ops import test_fichier_ops
+
+TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
+ UIinfo={"groupes":("Impression",)},
+ fr="Tester la non régression de fichiers produits par des commandes aster",
+ FICHIER =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
+ EXPR_IGNORE =SIMP(statut='f',typ='TXM',max='**',
+ fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
+
+ TYPE_TEST =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")),
+ NB_VALE =SIMP(statut='o',typ='I',),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VALE_K =SIMP(statut='f',typ='TXM'),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+
+ REFERENCE =SIMP(statut='f',typ='TXM',
+ into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+
+ b_version =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ ),
+
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE DATE 01/02/2010 AUTEUR REZETTE C.REZETTE
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 SELLENET N.SELLENET
+from Macro.test_fonction_ops import test_fonction_ops
+
+TEST_FONCTION=MACRO(nom="TEST_FONCTION",op=test_fonction_ops,sd_prod=None,
+ fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence",
+ UIinfo={"groupes":("Impression",)},
+ TEST_NOOK =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ VALEUR =FACT(statut='f',max='**',
+ fr="Tester la valeur d une fonction ou d une nappe",
+ regles=(UN_PARMI('VALE_REFE','VALE_REFE_C',),
+ UN_PARMI('VALE_PARA','INTERVALLE'),
+ DERIVABLE('FONCTION'),),
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter"),
+ NOM_PARA =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2),
+ VALE_PARA =SIMP(statut='f',typ='R' ,validators=NoRepeat(),max=2),
+ INTERVALLE =SIMP(statut='f',typ='R' ,validators=NoRepeat(),min=2,max=2),
+ VALE_REFE =SIMP(statut='f',typ='R',max='**' ),
+ VALE_REFE_C =SIMP(statut='f',typ='C',max='**' ),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ CRITERE =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+ defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+ defaut= 1.E-3 ),
+ REFERENCE =SIMP(statut='f',typ='TXM',
+ into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+ b_version = BLOC (condition = "REFERENCE == 'NON_REGRESSION'",
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ ),
+ ),
+ ATTRIBUT =FACT(statut='f',max='**',
+ fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+ FONCTION =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+ PARA =SIMP(statut='f',typ='R' ),
+ CRIT_PARA =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PREC_PARA =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ATTR =SIMP(statut='o',typ='TXM',
+ into=("NOM_PARA","NOM_RESU","PROL_DROITE","PROL_GAUCHE","INTERPOL",
+ "PROL_GAUCHE_FONC","PROL_DROITE_FONC","INTERPOL_FONC","NOM_PARA_FONC") ),
+ ATTR_REFE =SIMP(statut='o',typ='TXM' ),
+ REFERENCE =SIMP(statut='f',typ='TXM',
+ into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+ b_version =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ ),
+ ),
+ TABL_INTSP =FACT(statut='f',max='**',
+ fr="Tester la valeur d une fonction contenue dans une table interspectrale",
+ regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
+ INTE_SPEC =SIMP(statut='o',typ=table_fonction),
+ NOEUD_I =SIMP(statut='f',typ=no),
+ NUME_ORDRE_I =SIMP(statut='f',typ='I' ),
+ b_nume_ordre_i = BLOC (condition = "NUME_ORDRE_I != None",
+ NUME_ORDRE_J =SIMP(statut='o',typ='I' ),
+ ),
+ b_noeud_i = BLOC (condition = "NOEUD_I != None",
+ NOEUD_J =SIMP(statut='o',typ=no),
+ NOM_CMP_I =SIMP(statut='o',typ='TXM' ),
+ NOM_CMP_J =SIMP(statut='o',typ='TXM' ),
+ ),
+ NUME_VITE_FLUI =SIMP(statut='f',typ='I' ),
+ VALE_PARA =SIMP(statut='o',typ='R' ),
+ VALE_REFE_C =SIMP(statut='o',typ='C',max='**' ),
+ CRITERE =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+ defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+ defaut= 1.E-3 ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ REFERENCE =SIMP(statut='f',typ='TXM',
+ into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+ b_version =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 01/02/2010 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 LEFEBVRE J.P.LEFEBVRE
+TEST_RESU=PROC(nom="TEST_RESU",op=23,
+ UIinfo={"groupes":("Impression",)},
+ fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence",
+ regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','GENE','OBJET','TEST_NAN',)),
+
+ CHAM_NO =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
+ EXCLUS('NOEUD','GROUP_NO'),
+ PRESENT_PRESENT('NOEUD','NOM_CMP'),
+ PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
+ UN_PARMI('VALE','VALE_I','VALE_C'),),
+ CHAM_GD =SIMP(statut='o',typ=cham_no_sdaster),
+ NOEUD =SIMP(statut='f',typ=no ),
+ GROUP_NO =SIMP(statut='f',typ=grno ),
+ NOM_CMP =SIMP(statut='f',typ='TXM'),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VALE_I =SIMP(statut='f',typ='I',max='**'),
+ VALE_C =SIMP(statut='f',typ='C',max='**'),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+ REFERENCE =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+ "NON_REGRESSION","AUTRE_ASTER")),
+ VERSION =SIMP(statut='f',typ='TXM'),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ ),
+
+ CHAM_ELEM =FACT(statut='f',max='**',
+ regles=(UN_PARMI('MAILLE','TYPE_TEST',),
+ EXCLUS('NOEUD','GROUP_NO','POINT'),
+ PRESENT_PRESENT('NOEUD','NOM_CMP'),
+ PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+ PRESENT_PRESENT('POINT','NOM_CMP'),
+ UN_PARMI('VALE','VALE_I','VALE_C'), ),
+ CHAM_GD =SIMP(statut='o',typ=cham_elem),
+ MAILLE =SIMP(statut='f',typ=ma),
+ POINT =SIMP(statut='f',typ='I' ),
+ SOUS_POINT =SIMP(statut='f',typ='I'),
+ NOEUD =SIMP(statut='f',typ=no),
+ GROUP_NO =SIMP(statut='f',typ=grno),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+ VALE =SIMP(statut='f',typ='R',max='**' ),
+ VALE_I =SIMP(statut='f',typ='I',max='**' ),
+ VALE_C =SIMP(statut='f',typ='C',max='**' ),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ REFERENCE =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+ "NON_REGRESSION","AUTRE_ASTER") ),
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ ),
+
+ RESU =FACT(statut='f',max='**',
+ regles=(UN_PARMI('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),
+ UN_PARMI('NOM_CHAM','PARA'),
+ PRESENT_ABSENT('PARA','NOEUD','GROUP_NO','POINT','NOM_CMP','TYPE_TEST'),
+ PRESENT_PRESENT('NOM_CMP','NOM_CHAM'),
+ EXCLUS('NOEUD','GROUP_NO','POINT','TYPE_TEST'),
+ PRESENT_PRESENT('NOEUD','NOM_CMP'),
+ PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+ PRESENT_PRESENT('POINT','NOM_CMP'),
+ UN_PARMI('VALE','VALE_I','VALE_C'),
+ DERIVABLE('RESULTAT'),),
+ RESULTAT =SIMP(statut='o',typ=resultat_sdaster),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter"),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ FREQ =SIMP(statut='f',typ='R'),
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ NOEUD_CMP =SIMP(statut='f',typ='TXM',min=2,max=2),
+ NOM_CAS =SIMP(statut='f',typ='TXM'),
+ ANGL =SIMP(statut='f',typ='R'),
+ PARA =SIMP(statut='f',typ='TXM'),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NOM_CMP =SIMP(statut='f',typ='TXM',max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,max='**'),
+ NOEUD =SIMP(statut='f',typ=no ,max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno ,max='**'),
+ POINT =SIMP(statut='f',typ='I'),
+ SOUS_POINT =SIMP(statut='f',typ='I'),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VALE_I =SIMP(statut='f',typ='I',max='**'),
+ VALE_C =SIMP(statut='f',typ='C',max='**'),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+ PRECISION =SIMP(statut='f',typ='R',max=2),
+ REFERENCE =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+ "NON_REGRESSION","AUTRE_ASTER",) ),
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ ),
+
+ GENE =FACT(statut='f',max='**',
+ regles=(UN_PARMI('VALE','VALE_I','VALE_C') ,),
+ RESU_GENE =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+ b_vect_asse =BLOC(condition = "AsType(RESU_GENE) == vect_asse_gene",
+ NUME_CMP_GENE =SIMP(statut='o',typ='I'),
+ ),
+ b_mode =BLOC(condition = "(AsType(RESU_GENE) == harm_gene) or (AsType(RESU_GENE) == mode_gene)",
+ regles=(UN_PARMI('NUME_ORDRE','FREQ','NUME_MODE'),
+ UN_PARMI('NOM_CHAM','PARA'),
+ PRESENT_PRESENT('NOM_CHAM','NUME_CMP_GENE'),),
+ NOM_CHAM =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NUME_CMP_GENE =SIMP(statut='f',typ='I'),
+ PARA =SIMP(statut='f',typ='TXM'),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ NUME_MODE =SIMP(statut='f',typ='I'),
+ FREQ =SIMP(statut='f',typ='R'),
+ ),
+ b_tran =BLOC(condition = "AsType(RESU_GENE) == tran_gene",
+ regles=(UN_PARMI('NUME_ORDRE','INST') ,),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+ NUME_CMP_GENE =SIMP(statut='o',typ='I'),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ ),
+ VALE =SIMP(statut='f',typ='R',max='**'),
+ VALE_I =SIMP(statut='f',typ='I',max='**'),
+ VALE_C =SIMP(statut='f',typ='C',max='**'),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+ PRECISION =SIMP(statut='f',typ='R',max=2),
+ REFERENCE =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+ "NON_REGRESSION","AUTRE_ASTER",) ),
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ ),
+
+ OBJET =FACT(statut='f',max='**',
+ regles=(UN_PARMI('S_I','S_R',),
+ UN_PARMI('VALE','VALE_I','VALE_C','S_R','S_I'),),
+ NOM =SIMP(statut='o',typ='TXM'),
+ S_R =SIMP(statut='f',typ='R'),
+ S_I =SIMP(statut='f',typ='I'),
+ VALE =SIMP(statut='f',typ='R'),
+ VALE_I =SIMP(statut='f',typ='I'),
+ VALE_C =SIMP(statut='f',typ='C'),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+ REFERENCE =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+ "NON_REGRESSION","AUTRE_ASTER",) ),
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ ),
+
+ TEST_NAN =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+) ;
+#& MODIF COMMANDE DATE 01/02/2010 AUTEUR REZETTE C.REZETTE
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 COURTOIS M.COURTOIS
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
+ UIinfo={"groupes":("Impression",)},
+ fr="Tester une cellule ou une colonne d'une table",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),
+ DERIVABLE('TABLE'),),
+# concept table_sdaster à tester
+ TABLE =SIMP(statut='o',typ=table_sdaster),
+
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),
+ fr="Paramètre de sensibilité.",
+ ang="Sensitivity parameter"),
+ FILTRE =FACT(statut='f',max='**',
+ NOM_PARA =SIMP(statut='o',typ='TXM' ),
+ CRIT_COMP =SIMP(statut='f',typ='TXM',defaut="EQ",
+ into=("EQ","LT","GT","NE","LE","GE","VIDE",
+ "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+ b_vale =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+ regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+ VALE =SIMP(statut='f',typ='R',),
+ VALE_I =SIMP(statut='f',typ='I',),
+ VALE_C =SIMP(statut='f',typ='C',),
+ VALE_K =SIMP(statut='f',typ='TXM' ),),
+
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ ),
+ TYPE_TEST =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+ NOM_PARA =SIMP(statut='o',typ='TXM' ),
+ VALE =SIMP(statut='f',typ='R',max='**' ),
+ VALE_I =SIMP(statut='f',typ='I',max='**' ),
+ VALE_C =SIMP(statut='f',typ='C',max='**' ),
+ VALE_ABS =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ LEGENDE =SIMP(statut='f',typ='TXM'),
+ REFERENCE =SIMP(statut='f',typ='TXM',
+ into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+ b_version =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+ VERSION =SIMP(statut='f',typ='TXM' ),
+ INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+ ),
+) ;
+#& MODIF COMMANDE DATE 05/09/2008 AUTEUR COURTOIS M.COURTOIS
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008 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.
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+from Macro.test_temps_ops import test_temps_ops
+
+TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
+ fr="Permet de vérifier le temps passé dans les commandes",
+ reentrant='n',
+
+ RESU = FACT(statut='o',max='**',
+ COMMANDE = SIMP(statut='o', typ='TXM',
+ fr="Nom de la commande testee"),
+ NUME_ORDRE = SIMP(statut='f', typ='I', defaut=1, val_min=1,
+ fr="Numero de l'occurrence de la commande testee"),
+ MACHINE = SIMP(statut='o', typ='TXM', max='**',
+ fr="Liste des machines dont on a la référence"),
+ VALE = SIMP(statut='o', typ='R', max='**',
+ fr="Temps CPU sur les machines listees en secondes"),
+ CRITERE = SIMP(statut='f', typ='TXM', defaut='RELATIF', into=('ABSOLU', 'RELATIF')),
+ PRECISION = SIMP(statut='f', typ='R', defaut=0.01, max='**',
+ fr="Ecart admissible pour chaque machine"),
+ TYPE_TEST = SIMP(statut='o', typ='TXM', into=('USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'),
+ defaut='USER+SYS',
+ fr="Valeur testee parmi 'USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'"),
+ ),
+
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ fr="Résoudre un problème thermique linéaire stationnaire ou transitoire",
+ regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='o',typ=modele_sdaster),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ INCREMENT =FACT(statut='f',
+ regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+ EXCLUS('NUME_INST_FIN','INST_FIN'),),
+ LIST_INST =SIMP(statut='o',typ=listr8_sdaster),
+ NUME_INST_INIT =SIMP(statut='f',typ='I'),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ NUME_INST_FIN =SIMP(statut='f',typ='I'),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+ ),
+ ETAT_INIT =FACT(statut='f',
+ regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+ STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ EVOL_THER =SIMP(statut='f',typ=evol_ther),
+ CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster),
+ VALE =SIMP(statut='f',typ='R'),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters",
+ ),
+ SENS_INIT =FACT(statut='f',
+ regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
+ STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ EVOL_THER =SIMP(statut='f',typ=evol_ther),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ ),
+ PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57),
+ ARCHIVAGE =FACT(statut='f',
+ regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("VARI",)),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ INFO =SIMP(statut='f',typ='I',into=(1,2)),
+) ;
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
+ UIinfo={"groupes":("Résolution",)},
+ fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+ +" stationnaire ou transitoire" ,
+ regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+ MODELE =SIMP(statut='o',typ=(modele_sdaster) ),
+ CHAM_MATER =SIMP(statut='o',typ=(cham_mater) ),
+ CARA_ELEM =SIMP(statut='c',typ=(cara_elem) ),
+ COMP_THER_NL =FACT(statut='d',max='**',
+ RELATION =SIMP(statut='f',typ='TXM',defaut="THER_NL",
+ into=("THER_NL",
+ "THER_HYDR",
+ "SECH_GRANGER",
+ "SECH_MENSI",
+ "SECH_BAZANT",
+ "SECH_NAPPE"
+ ) ),
+ regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+ TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+ GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+ MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
+ ),
+ EVOL_THER_SECH =SIMP(statut='f',typ=evol_ther),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=char_ther),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ INCREMENT =FACT(statut='f',
+ regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+ EXCLUS('NUME_INST_FIN','INST_FIN'),),
+ LIST_INST =SIMP(statut='o',typ=listr8_sdaster),
+ NUME_INST_INIT =SIMP(statut='f',typ='I'),
+ INST_INIT =SIMP(statut='f',typ='R'),
+ NUME_INST_FIN =SIMP(statut='f',typ='I'),
+ INST_FIN =SIMP(statut='f',typ='R'),
+ PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+ ),
+ ETAT_INIT =FACT(statut='f',
+ regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+ STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ EVOL_THER =SIMP(statut='f',typ=evol_ther),
+ CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster),
+ VALE =SIMP(statut='f',typ='R'),
+ NUME_ORDRE =SIMP(statut='f',typ='I'),
+ INST =SIMP(statut='f',typ='R'),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),
+ INST_ETAT_INIT =SIMP(statut='f',typ='R'),
+ ),
+ NEWTON =FACT(statut='d',
+ REAC_ITER =SIMP(statut='f',typ='I',defaut= 0 ,val_min=0),
+ RESI_LINE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+ ITER_LINE_MAXI =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ CONVERGENCE =FACT(statut='d',
+ RESI_GLOB_MAXI =SIMP(statut='f',typ='R'),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ),
+ SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+ fr="Liste des paramètres de sensibilité.",
+ ang="List of sensitivity parameters",
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Parametres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
+ MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+ ),
+ PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57 ),
+ ARCHIVAGE =FACT(statut='f',
+ regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ PAS_ARCH =SIMP(statut='f',typ='I' ),
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+ NUME_INIT =SIMP(statut='f',typ='I'),
+ DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
+ CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+ into=("VARI",)),
+ ),
+ OBSERVATION =FACT(statut='f',max='**',
+ NOM_CMP =SIMP(statut='o',typ='TXM',max='**' ),
+ SUIVI_DDL =SIMP(statut='c',typ='TXM',defaut="NON",max=1,into=("NON",)),
+ b_non_suivi =BLOC(condition = "SUIVI_DDL == 'NON' ",
+ regles=(UN_PARMI('NOEUD','GROUP_NO')),
+ NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'),
+ GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+ NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("TEMP",)),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+ LIST_INST =SIMP(statut='f',typ=listr8_sdaster),
+ PAS_OBSE =SIMP(statut='f',typ='I'),
+ LIST_ARCH =SIMP(statut='f',typ=listis_sdaster),
+ CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+ b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+ PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+ b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+ PRECISION =SIMP(statut='o',typ='R',),),),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**'),
+ OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
+ into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+
+) ;
+#& MODIF COMMANDE DATE 18/01/2010 AUTEUR TARDIEU N.TARDIEU
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 DURAND C.DURAND
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+ fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+ +" stationnaire avec chargement mobile",
+ reentrant='n',
+ UIinfo={"groupes":("Résolution",)},
+ MODELE =SIMP(statut='o',typ=modele_sdaster ),
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CARA_ELEM =SIMP(statut='c',typ=cara_elem ),
+ EXCIT =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=char_ther ),
+ FONC_MULT =SIMP(statut='c',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+ ),
+ ETAT_INIT =FACT(statut='f',
+ EVOL_THER =SIMP(statut='f',typ=evol_ther ),
+ NUME_ORDRE =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ CONVERGENCE =FACT(statut='d',
+ CRIT_TEMP_RELA =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+ CRIT_ENTH_RELA =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 10 ),
+ ARRET =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ SOLVEUR =FACT(statut='d',
+ METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+ b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+ ),
+ b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+ ),
+ b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+ fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+ NPREC =SIMP(statut='f',typ='I',defaut= 8 ),
+ STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+ ),
+ b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+ b_ldltinc =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+ NIVE_REMPLISSAGE =SIMP(statut='f',typ='I',defaut= 0 ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ ),
+ b_simple =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+ REAC_PRECOND =SIMP(statut='f',typ='I',defaut=5, ),
+ ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ),
+ ),
+ b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+ TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+ PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+ POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+ ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,),
+ OUT_OF_CORE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+ ),
+ b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+ ALGORITHME =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+ PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+ b_petsc_ilu =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+ NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+ REMPLISSAGE = SIMP(statut='f',typ='R',defaut= 1.0),
+ ),
+ RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+ RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+ NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ),
+ ),
+ SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+ ),
+ TITRE =SIMP(statut='f',typ='TXM',max='**' ),
+ INFO =SIMP(statut='f',typ='I',into=(1,2) ),
+) ;
+
+
+
--- /dev/null
+#@ MODIF ops Cata DATE 23/03/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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.
+# ======================================================================
+
+
+# Modules Python
+import types
+import string,linecache,os,traceback,re
+import pickle
+import re
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+from Noyau.ascheckers import CheckLog
+
+try:
+ import aster
+ aster_exists = True
+ # Si le module aster est présent, on le connecte
+ # au JDC
+ import Build.B_CODE
+ Build.B_CODE.CODE.codex=aster
+
+ from Utilitai.Utmess import UTMESS
+ from Build.B_SENSIBILITE_MEMO_NOM_SENSI import MEMORISATION_SENSIBILITE
+ from Execution.E_Global import MessageLog
+except:
+ aster_exists = False
+
+
+def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM):
+ """Fonction sdprod partie commune à DEBUT et POURSUITE.
+ (on stocke un entier au lieu du logique)
+ """
+ jdc.par_lot = PAR_LOT
+ jdc.impr_macro = int(IMPR_MACRO == 'OUI')
+ jdc.jxveri = int(CODE != None or (DEBUG != None and DEBUG['JXVERI'] == 'OUI'))
+ jdc.sdveri = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
+ jdc.fico = None
+ jdc.sd_checker = CheckLog()
+ if CODE != None:
+ jdc.fico = CODE['NOM']
+ if aster_exists:
+ # en POURSUITE, ne pas écraser la mémorisation existante.
+ if not hasattr(jdc, 'memo_sensi'):
+ jdc.memo_sensi = MEMORISATION_SENSIBILITE()
+ jdc.memo_sensi.reparent(jdc)
+
+ # ne faire qu'une fois
+ if not hasattr(jdc, 'msg_init'):
+ # messages d'alarmes désactivés
+ if IGNORE_ALARM:
+ if not type(IGNORE_ALARM) in (list, tuple):
+ IGNORE_ALARM = [IGNORE_ALARM]
+ for idmess in IGNORE_ALARM:
+ MessageLog.disable_alarm(idmess)
+
+ # en POURSUITE, conserver le catalogue de comportement picklé
+ if not hasattr(jdc, 'catalc'):
+ from Comportement import catalc
+ jdc.catalc = catalc
+
+ jdc.msg_init = True
+
+
+def DEBUT(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
+ """
+ Fonction sdprod de la macro DEBUT
+ """
+ # La commande DEBUT ne peut exister qu'au niveau jdc
+ if self.jdc is not self.parent :
+ raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
+
+ commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
+
+
+def build_debut(self,**args):
+ """
+ Fonction ops pour la macro DEBUT
+ """
+ self.jdc.UserError=self.codex.error
+
+ if self.jdc.par_lot == 'NON' :
+ self.jdc._Build()
+ # On execute la fonction debut pour initialiser les bases
+ # Cette execution est indispensable avant toute autre action sur ASTER
+ # op doit etre un entier car la fonction debut appelle GCECDU qui demande
+ # le numero de l'operateur associé (getoper)
+ self.definition.op=0
+ self.set_icmd(1)
+ lot,ier=self.codex.debut(self,1)
+ # On remet op a None juste apres pour eviter que la commande DEBUT
+ # ne soit executée dans la phase d'execution
+ self.definition.op=None
+ return ier
+
+def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
+ """
+ Fonction sdprod de la macro POURSUITE
+ """
+ # La commande POURSUITE ne peut exister qu'au niveau jdc
+ if self.jdc is not self.parent :
+ raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
+
+ commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
+
+ if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")):
+ # Le module d'execution est accessible et glob.1 est present
+ # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
+ # on memorise avec l'attribut fichier_init que l'initialisation
+ # est réalisée
+ if hasattr(self,'fichier_init'):return
+ self.fichier_init='glob.1'
+ self.jdc.initexec()
+ # le sous programme fortran appelé par self.codex.poursu demande le numero
+ # de l'operateur (GCECDU->getoper), on lui donne la valeur 0
+ self.definition.op=0
+ lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+ # Par la suite pour ne pas executer la commande pendant la phase
+ # d'execution on le remet à None
+ self.definition.op=None
+ # On demande la numerotation de la commande POURSUITE avec l'incrément
+ # lonuti pour qu'elle soit numérotée à la suite des commandes existantes.
+####CD self.set_icmd(lonuti) Non : on repart à zéro
+ pos=0
+ d={}
+ while pos+80 < len(concepts)+1:
+ nomres=concepts[pos:pos+8]
+ concep=concepts[pos+8:pos+24]
+ nomcmd=concepts[pos+24:pos+40]
+ statut=concepts[pos+40:pos+48]
+ print nomres,concep,nomcmd,statut
+ if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+ exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+ elif statut == '&DETRUIT' : self.jdc.nsd = self.jdc.nsd+1
+ pos=pos+80
+ # ces ASSD seront écrasées par le pick.1,
+ # on vérifiera la cohérence de type entre glob.1 et pick.1
+ for k,v in d.items():
+ self.parent.NommerSdprod(v,k)
+ self.g_context=d
+
+ # Il peut exister un contexte python sauvegardé sous forme pickled
+ # On récupère ces objets après la restauration des concepts pour que
+ # la récupération des objets pickled soit prioritaire.
+ # On vérifie que les concepts relus dans glob.1 sont bien tous
+ # presents sous le meme nom et du meme type dans pick.1
+ # Le contexte est ensuite updaté (surcharge) et donc enrichi des
+ # variables qui ne sont pas des concepts.
+ # On supprime du pickle_context les concepts valant None, ca peut
+ # etre le cas des concepts non executés, placés après FIN.
+ pickle_context=get_pickled_context()
+ if pickle_context==None :
+ UTMESS('F','SUPERVIS_86')
+ return
+ self.jdc.restore_pickled_attrs(pickle_context)
+ from Cata.cata import ASSD,entier
+ from Noyau.N_CO import CO
+ for elem in pickle_context.keys():
+ if isinstance(pickle_context[elem], ASSD):
+ pickle_class=pickle_context[elem].__class__
+ # on rattache chaque assd au nouveau jdc courant (en poursuite)
+ pickle_context[elem].jdc=self.jdc
+ pickle_context[elem].parent=self.jdc
+ # le marquer comme 'executed'
+ pickle_context[elem].executed = 1
+ # pour que sds_dict soit cohérent avec g_context
+ self.jdc.sds_dict[elem] = pickle_context[elem]
+ if elem != pickle_context[elem].nom:
+ name = re.sub('_([0-9]+)$', '[\\1]', pickle_context[elem].nom)
+ UTMESS('A', 'SUPERVIS_93', valk=(elem, name))
+ del pickle_context[elem]
+ continue
+ # rétablir le parent pour les attributs de la SD
+ pickle_context[elem].reparent_sd()
+ if elem in self.g_context.keys():
+ poursu_class=self.g_context[elem].__class__
+ if poursu_class!=pickle_class :
+ UTMESS('F','SUPERVIS_87',valk=[elem])
+ return
+ elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) :
+ # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal
+ # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base
+ # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER
+ UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)])
+ return
+ if pickle_context[elem]==None : del pickle_context[elem]
+ self.g_context.update(pickle_context)
+ return
+
+ else:
+ # Si le module d'execution n est pas accessible ou glob.1 absent on
+ # demande un fichier (EFICAS)
+ # Il faut éviter de réinterpréter le fichier à chaque appel de
+ # POURSUITE
+ if hasattr(self,'fichier_init'):
+ return
+ self.make_poursuite()
+
+def get_pickled_context():
+ """
+ Cette fonction permet de réimporter dans le contexte courant du jdc (jdc.g_context)
+ les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une
+ précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail
+ """
+ fpick = 'pick.1'
+ if not os.path.isfile(fpick):
+ return None
+
+ # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés
+ context={}
+ try:
+ file=open(fpick,'r')
+ # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
+ # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
+ # aucun objet.
+ context=pickle.load(file)
+ file.close()
+ except:
+ # En cas d'erreur on ignore le contenu du fichier
+ traceback.print_exc()
+ return None
+
+ return context
+
+def POURSUITE_context(self,d):
+ """
+ Fonction op_init de la macro POURSUITE
+ """
+ # self représente la macro POURSUITE ...
+ d.update(self.g_context)
+ # Une commande POURSUITE n'est possible qu'au niveau le plus haut
+ # On ajoute directement les concepts dans le contexte du jdc
+ # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
+ for v in self.g_context.values():
+ if isinstance(v,ASSD) :
+ self.jdc.sds.append(v)
+
+def build_poursuite(self,**args):
+ """
+ Fonction ops pour la macro POURSUITE
+ """
+ # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
+ # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
+ # la fonction sdprod de la commande (ops.POURSUITE))
+ self.set_icmd(1)
+ self.jdc.UserError=self.codex.error
+ return 0
+
+def INCLUDE(self,UNITE,**args):
+ """
+ Fonction sd_prod pour la macro INCLUDE
+ """
+ if not UNITE : return
+ if hasattr(self,'unite'):return
+ self.unite=UNITE
+
+ if self.jdc and self.jdc.par_lot == 'NON':
+ # On est en mode commande par commande, on appelle la methode speciale
+ self.Execute_alone()
+
+ self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+ """
+ Fonction op_init pour macro INCLUDE
+ """
+ for k,v in self.g_context.items():
+ d[k]=v
+
+def build_include(self,**args):
+ """
+ Fonction ops de la macro INCLUDE appelée lors de la phase de Build
+ """
+ # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+ # le numero de la commande n est pas utile en phase de construction
+ # La macro INCLUDE ne sera pas numérotée (incrément=None)
+ ier=0
+ self.set_icmd(None)
+ icmd=0
+ # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
+ #ier=self.codex.opsexe(self,icmd,-1,1)
+ return ier
+
+def detruire(self,d):
+ """
+ Cette fonction est la fonction op_init de la PROC DETRUIRE
+ """
+ list_co = set()
+ sd = []
+ # par nom de concept (typ=assd)
+ if self["CONCEPT"] != None:
+ for mc in self["CONCEPT"]:
+ mcs = mc["NOM"]
+ if type(mcs) not in (list, tuple):
+ mcs = [mcs]
+ list_co.update(mcs)
+ # par chaine de caractères (typ='TXM')
+ if self["OBJET"] != None:
+ for mc in self["OBJET"]:
+ mcs = mc["CHAINE"]
+ if type(mcs) not in (list, tuple):
+ mcs = [mcs]
+ # longueur <= 8, on cherche les concepts existants
+ for nom in mcs:
+ assert type(nom) in (str, unicode), 'On attend une chaine de caractères : %s' % nom
+ if len(nom.strip()) <= 8:
+ if self.jdc.sds_dict.get(nom) != None:
+ list_co.add(self.jdc.sds_dict[nom])
+ elif d.get(nom) != None:
+ list_co.add(d[nom])
+ #else uniquement destruction des objets jeveux
+
+ for co in list_co:
+ assert isinstance(co, ASSD), 'On attend un concept : %s (type=%s)' % (co, type(co))
+ nom = co.nom
+ # traitement particulier pour les listes de concepts, on va mettre à None
+ # le terme de l'indice demandé dans la liste :
+ # nomconcept_i est supprimé, nomconcept[i]=None
+ i = nom.rfind('_')
+ if i > 0 and not nom.endswith('_'):
+ concept_racine = nom[:i]
+ if d.has_key(concept_racine) and type(d[concept_racine]) is list:
+ try:
+ num = int(nom[i+1:])
+ d[concept_racine][num] = None
+ except (ValueError, IndexError):
+ # cas : RESU_aaa ou (RESU_8 avec RESU[8] non initialisé)
+ pass
+ # pour tous les concepts :
+ if d.has_key(nom):
+ del d[nom]
+ if self.jdc.sds_dict.has_key(nom):
+ del self.jdc.sds_dict[nom]
+ # On signale au parent que le concept s n'existe plus apres l'étape self
+ self.parent.delete_concept_after_etape(self, co)
+ # marque comme détruit == non executé
+ co.executed = 0
+
+
+def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
+ """
+ Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
+ en substituant le nom du materiau par NOM_MATER
+ et en réalisant les extractions spéciifées dans EXTRACTION
+ """
+ lines=string.split(text,'\n')
+
+##### traitement de UNIT : facteur multiplicatif puissance de 10
+ regmcsu=re.compile(r" *(.*) *= *([^ ,]*) *## +([^ ]*) *([^ ]*)")
+ ll_u=[]
+ for l in lines:
+ m=regmcsu.match(l)
+ if m:
+ if m.group(3) == "UNIT":
+ if UNITE_LONGUEUR=='M' : coef = '0'
+ elif UNITE_LONGUEUR=='MM' : coef = m.group(4)
+ ll_u.append(m.group(1)+" = "+m.group(2)+coef)
+ else : ll_u.append(l)
+ else : ll_u.append(l)
+
+##### traitement de EXTRACTION
+ if EXTRACTION:
+ regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
+ regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
+ regfin=re.compile(r" *\) *")
+ ll=[]
+ temps={};lmcf=[]
+ for e in EXTRACTION:
+ mcf=e['COMPOR']
+ lmcf.append(mcf)
+ temps[mcf]=e['TEMP_EVAL']
+ FLAG=0
+ for l in ll_u:
+ m=regmcf.match(l)
+ if m: # On a trouve un mot cle facteur "commentarise"
+ if m.group(2) == "SUBST": # il est de plus substituable
+ if temps.has_key(m.group(3)): # Il est a substituer
+ ll.append(" "+m.group(3)+"=_F(")
+ mcf=m.group(3)
+ TEMP=temps[mcf]
+ FLAG=1 # Indique que l'on est en cours de substitution
+ else: # Il n est pas a substituer car il n est pas dans la liste demandee
+ ll.append(l)
+ else: # Mot cle facteur commentarise non substituable
+ ll.append(l)
+ else: # La ligne ne contient pas un mot cle facteur commentarise
+ if FLAG == 0: # On n est pas en cours de substitution
+ ll.append(l)
+ else: # On est en cours de substitution. On cherche les mots cles simples commentarises
+ m=regmcs.match(l)
+ if m: # On a trouve un mot cle simple commentarise
+ if m.group(3) == "EVAL":
+ ll.append(" "+m.group(1)+' = '+m.group(4)+"("+str(TEMP)+'),')
+ elif m.group(3) == "SUPPR":
+ pass
+ else:
+ ll.append(l)
+ else: # On cherche la fin du mot cle facteur en cours de substitution
+ m=regfin.match(l)
+ if m: # On l a trouve. On le supprime de la liste
+ FLAG=0
+ del temps[mcf]
+ ll.append(l)
+ else:
+ ll=ll_u
+
+ lines=ll
+ ll=[]
+ for l in lines:
+ l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1)
+ ll.append(l)
+ text=string.join(ll,'\n')
+ return text
+
+def post_INCLUDE(self):
+ """
+ Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR)
+ Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran
+ """
+ self.codex.opsexe(self,0,-1,2)
+
+def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
+ EXTRACTION,UNITE_LONGUEUR,INFO,**args):
+ """
+ Fonction sd_prod pour la macro INCLUDE_MATERIAU
+ """
+ mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
+ if not hasattr(self,'mat') or self.mat != mat or self.nom_mater != NOM_MATER :
+ # On récupère le répertoire des matériaux dans les arguments
+ # supplémentaires du JDC
+ rep_mat=self.jdc.args.get("rep_mat","NOrep_mat")
+ f=os.path.join(rep_mat,mat)
+ self.mat=mat
+ self.nom_mater=NOM_MATER
+ if not os.path.isfile(f):
+ del self.mat
+ self.make_contexte(f,"#Texte sans effet pour reinitialiser le contexte a vide\n")
+ raise "Erreur sur le fichier materiau: "+f
+ # Les materiaux sont uniquement disponibles en syntaxe Python
+ # On lit le fichier et on supprime les éventuels \r
+ text=string.replace(open(f).read(),'\r\n','\n')
+ # On effectue les substitutions necessaires
+ self.text= subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR)
+ if INFO == 2:
+ print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
+ print self.text
+ # on execute le texte fourni dans le contexte forme par
+ # le contexte de l etape pere (global au sens Python)
+ # et le contexte de l etape (local au sens Python)
+ # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
+ linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+
+ self.postexec=post_INCLUDE
+
+ if self.jdc.par_lot == 'NON':
+ # On est en mode commande par commande, on appelle la methode speciale
+ self.Execute_alone()
+
+ self.make_contexte(f,self.text)
+ for k,v in self.g_context.items() :
+ if isinstance(v,ASSD) and k!=v.nom : del self.g_context[k]
+
+def build_procedure(self,**args):
+ """
+ Fonction ops de la macro PROCEDURE appelée lors de la phase de Build
+ """
+ ier=0
+ # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+ # le numero de la commande n est pas utile en phase de construction
+ # On ne numérote pas une macro PROCEDURE (incrément=None)
+ self.set_icmd(None)
+ icmd=0
+ #ier=self.codex.opsexe(self,icmd,-1,3)
+ return ier
+
+def build_DEFI_FICHIER(self,**args):
+ """
+ Fonction ops de la macro DEFI_FICHIER
+ """
+ ier=0
+ self.set_icmd(1)
+ icmd=0
+ ier=self.codex.opsexe(self,icmd,-1,26)
+ return ier
--- /dev/null
+#@ MODIF calc_ecrevisse_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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.
+# ======================================================================
+
+
+# ------------------OUTILS ------------------------------
+
+# Determination de la direction de la fissure
+# a partir du points initial et final :
+# theta : angle par rapport a la verticale ascendente (degres)
+# positif si sens horaire
+# -180< theta <=180
+# beta : angle par rapport a la horizontale (degres)
+# positif si sens anti-horaire
+# -180< beta <=180
+def dirfiss(Xa,Ya,Xb,Yb) :
+ from math import atan2, degrees
+
+ xia = Xa[0]
+ yia = Ya[0]
+ xea = Xa[-1]
+ yea = Ya[-1]
+ xib = Xb[0]
+ yib = Yb[0]
+ xeb = Xb[-1]
+ yeb = Yb[-1]
+
+ xi = (xia+xib)/2.
+ yi = (yia+yib)/2.
+ xe = (xea+xeb)/2.
+ ye = (yea+yeb)/2.
+
+ dx = xe -xi
+ dy = ye -yi
+
+ try :
+ tangA= dy/dx
+ except ZeroDivisionError :
+ if (dy>0.) :
+ theta = 0.
+ beta = 90.
+ else :
+ theta = 180.
+ beta = -90.
+ else :
+ beta = atan2(dy,dx)
+ beta = degrees(beta)
+ theta = 90.-beta
+ if (theta>180.):
+ theta=theta-360.
+
+ if (abs(beta)<45. or abs(beta)>135.) :
+ DIR_PREV = 'X'
+ else:
+ DIR_PREV = 'Y'
+
+ if (round(abs(beta))==0. or round(abs(beta))==180.):
+ DIR_FISS = 'X'
+ elif (round(abs(beta))==90.):
+ DIR_FISS = 'Y'
+ else :
+ DIR_FISS = 'GEN'
+
+ return DIR_FISS, DIR_PREV, beta, theta, xi, yi
+
+
+# Determination de l ouverture de la fissure
+def ouvFiss(DIR_FISS,beta,Xa,Ya,Xb,Yb) :
+ from math import sin, cos, sqrt, radians
+
+ if DIR_FISS=='X' :
+ Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+ Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+ elif DIR_FISS=='Y' :
+ Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+ Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+ else :
+ xi = (Xa[0]+Xb[0])*0.5
+ yi = (Ya[0]+Yb[0])*0.5
+ Xa1 = [x-y for (x,y) in zip(Xa,[xi]*len(Xa))]
+ Ya1 = [x-y for (x,y) in zip(Ya,[yi]*len(Ya))]
+ Xb1 = [x-y for (x,y) in zip(Xb,[xi]*len(Xb))]
+ Yb1 = [x-y for (x,y) in zip(Yb,[yi]*len(Yb))]
+ Xa2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xa,Ya)]
+ Ya2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xa,Ya)]
+ Xb2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xb,Yb)]
+ Yb2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xb,Yb)]
+ Ouv = map(lambda x,y: abs(y-x), Ya2, Yb2)
+ Gli = map(lambda x,y: abs(y-x), Xa2, Xb2)
+ return Ouv, Gli
+
+
+
+
+
+# ------------------DEBUT MACRO ------------------------------
+# Debut de la macro, on impose en parametre les donnees placer
+# dans T_EC, l'appel a ecrevisse
+def calc_ecrevisse_ops(self,
+ CHARGE_MECA,
+ CHARGE_THER1,
+ CHARGE_THER2,
+ TABLE,
+ DEBIT,
+ MODELE_MECA,
+ MODELE_THER,
+ RESULTAT,
+ FISSURE,
+ ECOULEMENT,
+ MODELE_ECRE,
+ CONVERGENCE,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ IMPRESSION,
+ INFO,
+ COURBES,
+ **args):
+
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Recuperation du profil de la fissure , appel de MACR_ECRE_CALC,
+ creation des tableaux de resultats et des chargements pour AsterGeneration par Aster
+ """
+
+ import os, string, types, shutil
+ import aster
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+ from Utilitai.Table import Table, merge
+ from copy import copy
+ from math import atan, pi, sqrt, atan2, degrees, sin, cos
+
+ ier=0
+
+ # Concepts sortant
+ self.DeclareOut('__TAB',TABLE)
+ self.DeclareOut('__ECR_F1',CHARGE_THER1)
+ self.DeclareOut('__ECR_F2',CHARGE_THER2)
+ self.DeclareOut('__ECR_P',CHARGE_MECA)
+ self.DeclareOut('__DEB',DEBIT)
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Parametres debug
+ debug = False
+
+ # Fonctionnalitees cachees :
+ # 1- oldVersion : "=True" permet de retourner un chargement thermique defini selon l'ancien mode (flux thermique)
+ # ATTENTION!! L'ancienne version ne marche que avec la fissure orientee dans la direction Y,
+ # et avec le point initila en y=0!!
+ # 2- chargeLin : "=True" permet d'appliquer le chargement d'Ecrevisse avec interpolation lineaire sur le mailles,
+ # et non constant par maille, comme c'est par defaut
+ oldVersion = False
+ chargeLin = False
+
+
+ # Parametres developpeur
+ tmp_ecrevisse = "tmp_ecrevisse"
+
+ # Info
+ info2 = (INFO==2)
+ InfoAster = 1
+ if debug :
+ info2=True
+
+ # IMPORTATION DE COMMANDES ASTER
+ DEFI_GROUP = self.get_cmd("DEFI_GROUP")
+ POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
+ MACR_ECRE_CALC = self.get_cmd("MACR_ECRE_CALC")
+ IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ DETRUIRE = self.get_cmd("DETRUIRE")
+ IMPR_CO = self.get_cmd("IMPR_CO")
+ DEFI_FONCTION = self.get_cmd("DEFI_FONCTION")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+ IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ CO = self.get_cmd("CO")
+ AFFE_CHAR_THER_F = self.get_cmd("AFFE_CHAR_THER_F")
+ AFFE_CHAR_MECA_F = self.get_cmd("AFFE_CHAR_MECA_F")
+ DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
+ DEFI_CONSTANTE = self.get_cmd("DEFI_CONSTANTE")
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+ dRESULTAT=RESULTAT[0].cree_dict_valeurs(RESULTAT[0].mc_liste)
+ for i in dRESULTAT.keys():
+ if dRESULTAT[i]==None : del dRESULTAT[i]
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+
+ # INSTANTS
+ _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
+ if dRESULTAT.has_key('INST'):
+ Inst_Ecrevisse = dRESULTAT['INST']
+ else:
+ pass
+
+
+ # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
+ # liste des mots cles facteurs de PRES_REP pour chaque fissure
+ l_PRES_REP = []
+ if oldVersion :
+ # liste des mots cles facteurs de FLUX_REP pour le flux F1/F2
+ # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+ l_FLUX_REP_F1 = []
+ l_FLUX_REP_F2 = []
+ else :
+ # liste des mots cles facteurs de ECHANGE pour le flux F1/F2
+ # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+ l_ECHANGE_F1 = []
+ l_ECHANGE_F2 = []
+
+
+
+ # ON CREE LES GROUP_NO ORDONNES DES LEVRES DE FISSURE
+ # Liste des noms des groupes de noeuds du maillage :
+ _lgno = map(lambda x: x[0], MODELE_MECA['MAILLAGE'].LIST_GROUP_NO() )
+
+ for k, fissure in enumerate(FISSURE):
+ dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+
+ # On cree les group_no correspondant aux group_ma des levres de la fissure dans le cas ou ils n'existent pas deja
+ if not dFISSURE['GROUP_MA'][0] in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),),);
+
+ if not dFISSURE['GROUP_MA'][1] in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),),);
+
+ # Test sur le nombre de caracteres du nom des group_ma
+ if (len(dFISSURE['GROUP_MA'][0]) >7 or len(dFISSURE['GROUP_MA'][1]) >7):
+ sys.exit(1)
+
+ # Creation des group_no ordonnes des levres des fissures
+ _nom_gno_1 = '_' + dFISSURE['GROUP_MA'][0]
+ if not _nom_gno_1 in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+ NOM=_nom_gno_1,
+ GROUP_NO=dFISSURE['GROUP_MA'][0],
+ GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][0],
+ GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][0],
+ PRECISION=0.01,
+ CRITERE='RELATIF',),
+ INFO=InfoAster,);
+
+ _nom_gno_2 = '_' + dFISSURE['GROUP_MA'][1]
+ if not _nom_gno_2 in _lgno:
+ DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+ MAILLAGE=MODELE_MECA['MAILLAGE'],
+ CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+ NOM=_nom_gno_2,
+ GROUP_NO=dFISSURE['GROUP_MA'][1],
+ GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][1],
+ GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][1],
+ PRECISION=0.01,
+ CRITERE='RELATIF',),
+ INFO=InfoAster,);
+
+
+
+ # EXTRACTIONS DE QUANTITES NECESSAIRES DES RESULTATS THERMIQUE ET MECANIQUE
+ # On cree les chargements Aster --> Ecrevisse :
+ # ouverture de fissure et temperature sur le materiau
+
+ # premiere levre de fissure
+ _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
+ GROUP_NO=_nom_gno_1,
+ RESULTAT=dRESULTAT['MECANIQUE'],
+ NOM_CHAM='DEPL',
+ NOM_CMP=('DX','DY',),
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),
+ );
+
+ _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
+ GROUP_NO=_nom_gno_1,
+ RESULTAT=dRESULTAT['THERMIQUE'],
+ NOM_CHAM='TEMP',
+ TOUT_CMP='OUI',
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ # deuxieme levre de la fissure
+ _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
+ GROUP_NO=_nom_gno_2,
+ RESULTAT=dRESULTAT['MECANIQUE'],
+ NOM_CHAM='DEPL',
+ NOM_CMP=('DX','DY',),
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
+ GROUP_NO=_nom_gno_2,
+ RESULTAT=dRESULTAT['THERMIQUE'],
+ NOM_CHAM='TEMP',
+ TOUT_CMP='OUI',
+ INST = Inst_Ecrevisse,
+ OPERATION='EXTRACTION',),);
+
+ if ( debug ) :
+ print '_T_DPL ==================================================='
+ print _T_DPL.EXTR_TABLE()
+ print '_T_DPL_B ================================================='
+ print _T_DPL_B.EXTR_TABLE()
+ print '_T_TEMP ================================================='
+ print _T_TEMP.EXTR_TABLE()
+ print '_T_TEMP_B ==============================================='
+ print _T_TEMPB.EXTR_TABLE()
+
+ # Extraction des tables Temperatures + deplacement levres fissure
+ _tbl_temp = _T_TEMP.EXTR_TABLE()
+ _tbl_dpl = _T_DPL.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=(_T_DPL,_T_TEMP,)),INFO=1,ALARME='NON')
+ _tbl_dpl_b = _T_DPL_B.EXTR_TABLE()
+ _tbl_temp_b = _T_TEMPB.EXTR_TABLE()
+ DETRUIRE(CONCEPT=_F(NOM=(_T_DPL_B,_T_TEMPB,)),INFO=1,ALARME='NON')
+
+
+ # --Determination des cotes a donner a ecrevisse--
+ # a partir des resultats mecanique et thermique :
+ _l_tang = _tbl_dpl.values()['ABSC_CURV']
+ _l_tang_b = _tbl_dpl_b.values()['ABSC_CURV']
+ try :
+ _l_absz_m = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
+ except TypeError :
+ UTMESS('F','ECREVISSE0_40')
+ #
+ _l_tang_t = _tbl_temp.values()['ABSC_CURV']
+ _l_tang_t_b = _tbl_temp_b.values()['ABSC_CURV']
+ _l_absz_t = map(lambda x,y: 0.5*(x+y), _l_tang_t,_l_tang_t_b)
+
+
+ # Coordonnees des points des levres (initiales et a l instant actuel
+ _X0 = _tbl_dpl.values()['COOR_X']
+ _Y0 = _tbl_dpl.values()['COOR_Y']
+ _X0_b = _tbl_dpl_b.values()['COOR_X']
+ _Y0_b = _tbl_dpl_b.values()['COOR_Y']
+ _X = [x + y for (x,y) in zip(_tbl_dpl.values()['DX'],_X0)]
+ _Y = [x + y for (x,y) in zip(_tbl_dpl.values()['DY'],_Y0)]
+ _X_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DX'],_X0_b)]
+ _Y_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DY'],_Y0_b)]
+
+
+ # Determination de la direction de la fissure
+ (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
+ if oldVersion :
+ (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
+
+ if (DIR_FISS == 'GEN') and oldVersion :
+ UTMESS('F','ECREVISSE0_23', valr=[theta])
+
+ # --Calcul de l ouverture de fissure--
+ # une fissure refermee a une ouverture
+ # egale a l'ouverture remanente
+ (_l_ouv0,_l_gli0) = ouvFiss(DIR_FISS,beta,_X0,_Y0,_X0_b,_Y0_b)
+ for i in range(len(_l_ouv0)) :
+ if _l_ouv0[i] < dFISSURE['OUVERT_REMANENTE'] :
+ UTMESS('A','ECREVISSE0_39')
+
+
+ (_l_ouv,_l_gli) = ouvFiss(DIR_FISS,beta,_X,_Y,_X_b,_Y_b)
+ if dFISSURE['OUVERT_REMANENTE'] :
+ _l_ouv = map(lambda x: max(dFISSURE['OUVERT_REMANENTE'],x), _l_ouv)
+ if info2 :
+ nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
+ if nbOuvRem != 0 :
+ UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
+
+
+
+ # Controle sur l entite du glissement entre les levres
+ DeltaMaille = [abs(y-x) for (x,y) in zip(_l_absz_m[1:len(_l_absz_m)], _l_absz_m[0:len(_l_absz_m)-1])]
+ for i in range(len(DeltaMaille)) :
+ deltamai = DeltaMaille[i]
+ if (deltamai <= _l_gli[i]) or (deltamai <= _l_gli[i+1]) :
+ UTMESS('A', 'ECREVISSE0_38')
+ break
+
+
+ # -- Calcul de la temperature sur le materiau (levres de la fissure) --
+ # on fait la moyenne des temperatures des deux levres
+ _l_t2 = _tbl_temp.values()['TEMP']
+ _l_t2_b = _tbl_temp_b.values()['TEMP']
+ _l_temp_aster = map(lambda x,y: 0.5*(x+y), _l_t2_b,_l_t2)
+
+
+ # Infos / Debug : fichier .mess ou .resu
+ if (info2) :
+ UTMESS('I', 'ECREVISSE0_1', valk=["Premiere levre"],
+ valr=[Inst_Ecrevisse, min(_l_tang_t), max(_l_tang_t), min(_l_t2), max(_l_t2), min(_l_tang), max(_l_tang)])
+ UTMESS('I', 'ECREVISSE0_1',valk=["Deuxieme levre"],
+ valr=[Inst_Ecrevisse,min(_l_tang_t_b), max(_l_tang_t_b), min(_l_t2_b), max(_l_t2_b), min(_l_tang_b), max(_l_tang_b)])
+ UTMESS('I', 'ECREVISSE0_2',
+ valr=[Inst_Ecrevisse, min(_l_absz_t), max(_l_absz_t), min(_l_temp_aster), max(_l_temp_aster), min(_l_absz_m), max(_l_absz_m), min(_l_ouv), max(_l_ouv), min(_l_gli),max(_l_gli)])
+
+
+ if ( debug ) :
+ print "\n INFORMATIONS DE DEBUG: "
+ print 'Inst_Ecrevisse=', Inst_Ecrevisse
+ print 'theta:', theta
+ print 'beta:', beta
+ print 'DIR_FISS:', DIR_FISS
+ print 'DIR_PREV:', DIR_PREV
+ print 'point initial de la fissure: (xi,yi) :', _xi,_yi
+ print len(_X0), '_X0 =', _X0
+ print len(_X0_b), '_X0_b=', _X0_b
+ print len(_Y0), '_Y0 =', _Y0
+ print len(_Y0_b), '_Y0_b=', _Y0_b
+ print len(_X), '_X =', _X
+ print len(_Y), '_Y =', _Y
+ print len(_X_b), '_X_b =', _X_b
+ print len(_Y_b), '_Y_b =', _Y_b
+ print 'Controle sur les abszisses curvilignes (mecaniques/thermiques) '
+ print '_l_absz_m==_l_absz_t?', _l_absz_m==_l_absz_t
+ print '_l_absz_m=', len(_l_absz_m),_l_absz_m
+ print '_l_absz_t=', len(_l_absz_t),_l_absz_t
+ print '_l_temp_aster=', len(_l_temp_aster),_l_temp_aster
+ print '_l_ouv=', len(_l_ouv),_l_ouv
+ print '_l_gli=', len(_l_gli),_l_gli
+ print '_l_tang=', _l_tang
+ print '_l_tang_b=', _l_tang
+
+
+# ----------------------------------------------------------------------------
+# PREPARATION ET LANCEMENT D ECREVISSE
+
+ # TESTS de non divergence, les messages sont assez explicites :
+ # Si toutes les listes sont bien definies
+ if len(_l_absz_m)*len(_l_ouv)*len(_l_absz_t)*len(_l_temp_aster) == 0:
+ UTMESS('F','ECREVISSE0_3', valr=[Inst_Ecrevisse])
+ __TAB = None
+ break
+ # Si les ouvertures ne sont pas trop faibles
+ elif min(_l_ouv) < 1e-20:
+ UTMESS('F','ECREVISSE0_4', valr=[Inst_Ecrevisse, min(_l_ouv)])
+ __TAB = None
+ break
+ elif max(_l_t2) > 700:
+ UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
+ __TAB = None
+ break
+ elif max(_l_t2_b) > 700:
+ UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
+ __TAB = None
+ break
+ elif min(_l_t2) < 0:
+ UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
+ __TAB = None
+ break
+ elif min(_l_t2_b) < 0:
+ UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
+ __TAB = None
+ break
+ elif abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) )< 5:
+ UTMESS('F','ECREVISSE0_7', valr=[Inst_Ecrevisse, abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) ) ] )
+ __TAB = None
+ break
+ # On lance Ecrevisse!
+ else:
+ UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
+
+ # On efface le rep
+ try:
+ for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
+ try:
+ os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
+ except:
+ pass
+ except:
+ pass
+
+ # Recalcul des cotes par rapport a la tortuoiste
+ tort = dFISSURE['TORTUOSITE']
+ try :
+ _l_absz_m = [x/tort for x in _l_absz_m]
+ _l_absz_t = [x/tort for x in _l_absz_t]
+ except ZeroDivisionError :
+ UTMESS('F','ECREVISSE0_42')
+
+
+ if dFISSURE.has_key('LISTE_COTES_BL'):
+ __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
+ else:
+ __LISTE_COTES_BL = (0., max(_l_absz_m))
+
+ # Mot-cle ECOULEMENT
+ txt = {}
+ txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
+ 'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
+ 'FLUIDE_ENTREE' : dECOULEMENT['FLUIDE_ENTREE'],
+ }
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [1, 3, 4, 6]:
+ txt['TEMP_ENTREE'] = dECOULEMENT['TEMP_ENTREE']
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [2, 5]:
+ txt['TITR_MASS'] = dECOULEMENT['TITR_MASS']
+ if int(dECOULEMENT['FLUIDE_ENTREE']) in [4, 5]:
+ txt['PRES_PART'] = dECOULEMENT['PRES_PART']
+
+
+ # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
+ # Mot-cle MODELE_ECRE
+ txt2 = {}
+ txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
+ if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
+ txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
+
+ txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
+
+ if int(dMODELE_ECRE['FROTTEMENT']) in [-4,-3,-2,-1] :
+ txt2['REYNOLDS_LIM'] = dMODELE_ECRE['REYNOLDS_LIM']
+ txt2['FROTTEMENT_LIM'] = dMODELE_ECRE['FROTTEMENT_LIM']
+
+ txt2['TRANSFERT_CHAL'] = dMODELE_ECRE['TRANSFERT_CHAL']
+ if int(dMODELE_ECRE['TRANSFERT_CHAL']) in [-2,-1] :
+ txt2['XMINCH'] = dMODELE_ECRE['XMINCH']
+ txt2['XMAXCH'] = dMODELE_ECRE['XMAXCH']
+
+ try :
+ if dMODELE_ECRE['IVENAC'] in [0, 1]:
+ txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
+ else :
+ txt2['IVENAC'] = 0
+ except :
+ txt2['IVENAC'] = 0
+
+ motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
+
+ DETRUIRE(OBJET=_F(CHAINE = '_TAB2' ),INFO=1,ALARME='NON')
+ DETRUIRE(OBJET=_F(CHAINE = '_DEB2' ),INFO=1,ALARME='NON')
+ __TAB_i = CO('_TAB2')
+ __DEB_i = CO('_DEB2')
+
+ MACR_ECRE_CALC(TABLE = __TAB_i,
+ DEBIT = __DEB_i,
+ ENTETE = ENTETE,
+ COURBES = COURBES,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ FISSURE = _F(LONGUEUR = max(_l_absz_m),
+ ANGLE = theta,
+ RUGOSITE = dFISSURE['RUGOSITE'],
+ ZETA = dFISSURE['ZETA'],
+ SECTION = dFISSURE['SECTION'],
+ LISTE_COTES_AH = _l_absz_m,
+ LISTE_VAL_AH = _l_ouv,
+ LISTE_COTES_BL = __LISTE_COTES_BL,
+ LISTE_VAL_BL = dFISSURE['LISTE_VAL_BL'],
+ ),
+ TEMPERATURE=_F(GRADIENT = 'FOURNI',
+ LISTE_COTES_TEMP = _l_absz_t,
+ LISTE_VAL_TEMP = _l_temp_aster,
+ ),
+ CONVERGENCE=_F(KGTEST = dCONVERGENCE['KGTEST'],
+ ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
+ CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
+ ),
+ **motscle2
+ );
+
+
+#-------------------------------------------------------------
+# EXTRACTION DES RESULTATS D ECREVISSE
+
+
+
+ # Creation de la table
+ __TABFISS_i = __TAB_i.EXTR_TABLE()
+
+ nb_lignes_table = len(__TABFISS_i["COTES"])
+ # Re-definition des cotes utilisateur (on elimine l effet de la tortuosite)
+ _lst_c = __TABFISS_i.COTES.values()
+ _l_cotes = [x*tort for x in _lst_c]
+ dictTab = __TABFISS_i.dict_CREA_TABLE()['LISTE']
+
+ __TABFISS_i = CREA_TABLE(LISTE = (
+ _F(PARA = "COTES", LISTE_R = _l_cotes,),
+ _F(PARA = "FLUX", LISTE_R = dictTab[1]['LISTE_R'],),
+ _F(PARA = "PRESSION", LISTE_R = dictTab[2]['LISTE_R'],),
+ _F(PARA = "TEMP", LISTE_R = dictTab[3]['LISTE_R'],),
+ _F(PARA = "COEF_CONV", LISTE_R = dictTab[4]['LISTE_R'],),
+ ),)
+
+ DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
+ DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
+
+ if ( debug ):
+ os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+ if dFISSURE['PREFIXE_FICHIER'] :
+ pref_fic = dFISSURE['PREFIXE_FICHIER']
+ else :
+ pref_fic = 'FISSURE'+str(k+1)
+
+ ## Ecriture du fichier debits en fonction du temps:
+ #try:
+ ## on lit le fichier debit produit par ecrevisse
+ #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+ #_txt = f_ast.read()
+ #f_ast.close()
+ #nomfic = str(pref_fic) + '_debits'
+ ## on concatene
+ #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
+ #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
+ #fw.close()
+ ## On recopie le fichier debits pour reprise ulterieure
+ #nomfic2 = 'debits_dernier'
+ #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic2, 'w')
+ #fw.write( _txt )
+ #fw.close()
+ #except Exception, e:
+ #print e
+
+ # CREATION DES COURBES:
+ if COURBES != "AUCUNE":
+ # Pour masquer certaines alarmes
+
+ MasquerAlarme('TABLE0_6')
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_flux'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','FLUX',),
+ TITRE='Flux de chaleur a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Flux (W/m2)',
+ COULEUR = 1,
+ MARQUEUR = 1,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_temperature'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','TEMP',),
+ TITRE='Temperature a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Temperature (degres C)',
+ COULEUR = 2,
+ MARQUEUR = 2,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_coeffconv'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','COEF_CONV',),
+ TITRE='Coefficient de convection a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Coefficient de convection (W/m2/K)',
+ COULEUR = 3,
+ MARQUEUR = 3,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+
+ nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_pression'+ '_' + str(Inst_Ecrevisse))
+ if not os.path.isfile(nomfic): acces='NEW'
+ else: acces='APPEND'
+
+ DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+ IMPR_TABLE(FORMAT='XMGRACE',
+ TABLE=__TABFISS_i,
+ UNITE=55,
+ PILOTE=COURBES,
+ NOM_PARA=('COTES','PRESSION',),
+ TITRE='Pression a l\'instant %s' % Inst_Ecrevisse,
+ LEGENDE_X='Abscisse curviligne (m)',
+ LEGENDE_Y='Pression (Pa)',
+ COULEUR = 4,
+ MARQUEUR = 4,
+ );
+ DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+ # Pour la gestion des alarmes
+ RetablirAlarme('TABLE0_6')
+
+
+
+ # On recopie dans REPE_OUT les fichiers resultats d'Ecrevisse
+ tmp_ecrevisse_absolu = os.path.join(os.getcwd(),tmp_ecrevisse)
+ repe_out_absolu = os.path.join(os.getcwd(),'REPE_OUT')
+ for file in os.listdir(tmp_ecrevisse_absolu):
+ if not file in ['ecrevisse', 'ecrevisse.sh']:
+ old_file = os.path.join(tmp_ecrevisse_absolu, file)
+ new_file = os.path.join(repe_out_absolu, str(pref_fic) + '_' + file + '_' + str(Inst_Ecrevisse))
+ shutil.copy(old_file, new_file)
+
+ # Creation de la table resultat sur toutes les fissures :
+ # Nom de la fissure
+ nom_fiss = dFISSURE['GROUP_MA'][0] + "-" + dFISSURE['GROUP_MA'][1]
+ __TABFISS_i = __TABFISS_i.EXTR_TABLE()
+ __DEBFISS_i = __DEB_i.EXTR_TABLE()
+ __TABFISS_i["FISSURE"] = [nom_fiss]*nb_lignes_table
+ __DEBFISS_i["FISSURE"] = [nom_fiss]
+
+ if k==0 :
+ __TABFISS_tot = __TABFISS_i
+ __DEBFISS_tot = __DEBFISS_i
+ else :
+ __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
+ __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
+
+
+ if ( debug ):
+ os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+#--------------------------------------------------------------
+# CREATIONS DES CHARGEMENTS ASTER
+
+ # Recuperation des valeurs dans la table (voir si il y a plus simple)
+ _lst_c = __TABFISS_i.COTES.values()
+ _lst_f = __TABFISS_i.FLUX.values()
+ _lst_p = __TABFISS_i.PRESSION.values()
+ _lst_t = __TABFISS_i.TEMP.values()
+ _lst_cc = __TABFISS_i.COEF_CONV.values()
+
+
+ try:
+ a=len(_lst_c)
+ except:
+ _lst_c = []
+ _lst_f = []
+ _lst_p = []
+ _lst_t = []
+ _lst_cc = []
+ try:
+ if _lst_c[1]==0:
+ _lst_c = []
+ _lst_f = []
+ _lst_p = []
+ _lst_t = []
+ _lst_cc = []
+ except:
+ pass
+
+
+
+ # ------------------------------------------------------
+ # Extraction des conditions limites du calcul Ecrevisse
+ #
+ if len(_lst_c)>=2:
+ if not chargeLin :
+ nbCotes = len(_l_absz_m)
+ nbCotesEcre = nbCotes-1
+
+ # epsilon pour le decalage :
+ # le chargement est uniforme par maille
+ if _X0[1]>=_X0[0] :
+ epsx = 1.e-8
+ else :
+ epsx = -1.e-8
+ if _Y0[1]>=_Y0[0] :
+ epsy = 1.e-8
+ else :
+ epsy = -1.e-8
+
+ _lst_x0 = []
+ _lst_y0 = []
+ _lst_x0_b = []
+ _lst_y0_b = []
+ ly = []
+ ly2 = []
+ ly3 = []
+ ly4 = []
+
+ _lst_x0.append(_X0[0])
+ _lst_y0.append(_Y0[0])
+ _lst_x0_b.append(_X0_b[0])
+ _lst_y0_b.append(_Y0_b[0])
+ ly.append( _lst_f[0] )
+ ly2.append( _lst_p[0] )
+ ly3.append( _lst_t[0] )
+ ly4.append( _lst_cc[0] )
+
+ for i in range(nbCotes-2):
+ x = _X0[i+1]
+ y = _Y0[i+1]
+ toto1 = x - epsx
+ toto2 = x + epsx
+
+ _lst_x0.append( x - epsx )
+ _lst_x0.append( x + epsx )
+ _lst_y0.append( y - epsy )
+ _lst_y0.append( y + epsy )
+ x = _X0_b[i+1]
+ y = _Y0_b[i+1]
+ _lst_x0_b.append( x - epsx )
+ _lst_x0_b.append( x + epsx )
+ _lst_y0_b.append( y - epsy )
+ _lst_y0_b.append( y + epsy )
+ ly.append( _lst_f[i] )
+ ly.append( _lst_f[i+1] )
+ ly2.append( _lst_p[i] )
+ ly2.append( _lst_p[i+1] )
+ ly3.append( _lst_t[i] )
+ ly3.append( _lst_t[i+1] )
+ ly4.append( _lst_cc[i] )
+ ly4.append( _lst_cc[i+1] )
+
+ _lst_x0.append( _X0[nbCotes-1] )
+ _lst_y0.append( _Y0[nbCotes-1] )
+ _lst_x0_b.append( _X0_b[nbCotes-1] )
+ _lst_y0_b.append( _Y0_b[nbCotes-1] )
+ ly.append( _lst_f[nbCotesEcre-1] )
+ ly2.append( _lst_p[nbCotesEcre-1] )
+ ly3.append( _lst_t[nbCotesEcre-1] )
+ ly4.append( _lst_cc[nbCotesEcre-1] )
+ _lst_f = ly
+ _lst_p = ly2
+ _lst_t = ly3
+ _lst_cc = ly4
+ else :
+ _lst_x0 = [(x1+x2)*0.5 for (x1,x2) in zip(_X0[0:len(_X0)-1],_X0[1:len(_X0)])]
+ _lst_y0 = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0[0:len(_Y0)-1],_Y0[1:len(_Y0)])]
+ _lst_x0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_X0_b[0:len(_X0_b)-1],_X0_b[1:len(_X0_b)])]
+ _lst_y0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0_b[0:len(_Y0_b)-1],_Y0_b[1:len(_Y0_b)])]
+ _lst_x0.append(_X0[-1])
+ _lst_x0_b.append(_X0_b[-1])
+ _lst_y0.append(_Y0[-1])
+ _lst_y0_b.append(_Y0_b[-1])
+
+ # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
+ if(oldVersion) :
+ alpha = round(theta)
+ if DIR_FISS == 'X' :
+ levre1pos = ((_Y0[0]-_yi)>=0.)
+ if alpha == -90. :
+ _lst_x0.reverse()
+ _lst_p.reverse()
+ _lst_f.reverse()
+ _lst_dir = _lst_x0
+ else :
+ levre1pos = ((_X0[0]-_xi)>=0.)
+ if abs(alpha) == 180. :
+ _lst_y0.reverse()
+ _lst_p.reverse()
+ _lst_f.reverse()
+ _lst_dir = _lst_y0
+
+ # Creation des listes pour les chargements aster :
+ # (x1, y1, x2, y2, ...)
+ _tmp1=[]
+ _tmp2=[]
+ _tmp3=[]
+
+ for i in range(len(_lst_p)) :
+ _tmp1.append( _lst_dir[i] )
+ _tmp2.append( _lst_dir[i] )
+ _tmp3.append( _lst_dir[i] )
+
+ _tmp2.append( _lst_p[i] )
+ if levre1pos :
+ #_tmp1.append( -1*_lst_f[i] )
+ #_tmp3.append( _lst_f[i] )
+ _tmp1.append( _lst_f[i] )
+ _tmp3.append( -1*_lst_f[i] )
+ else :
+ #_tmp1.append( _lst_f[i] )
+ #_tmp3.append( -1*_lst_f[i] )
+ _tmp1.append( -1*_lst_f[i] )
+ _tmp3.append( _lst_f[i] )
+
+
+
+ # Flux en provenance d'Ecrevisse
+ _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+ VALE=_tmp1,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE');
+
+ _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+ VALE=_tmp3,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE' );
+
+ if DIR_FISS == 'X':
+ l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ FLUX_Y=_L_F1,))
+ l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ FLUX_Y=_L_F2,))
+ else :
+ l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ FLUX_X=_L_F1,))
+ l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ FLUX_X=_L_F2,))
+
+ # Pressions en provenance d'Ecrevisse
+ _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
+ VALE = _tmp2,
+ PROL_GAUCHE = 'LINEAIRE',
+ PROL_DROITE = 'LINEAIRE');
+
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
+ PRES=_L_P,))
+
+
+
+ # NOUVELLE VERSION
+ else :
+ # Creation des deux listes (x1, y1, x2, y2, ...)
+ # On cree trois/six listes :
+ # Les valeurs sont constant par maille sur les levres de la fissure,
+ # _tmp1/_tmp2 = temperature
+ # _tmp3/_tmp4 = coefficient d echange
+ # _tmp5/_tmp6 = pression
+ _tmp1=[]
+ _tmp2=[]
+ _tmp3=[]
+ _tmp4=[]
+ _tmp5=[]
+ _tmp6=[]
+
+ for i in range(len(_lst_f)) :
+ ix = copy(i)
+ iy = copy(i)
+ if _X0[1]<_X0[0] :
+ ix = len(_lst_f)-1-i
+ if _Y0[1]<_Y0[0] :
+ iy = len(_lst_f)-1-i
+
+ if (DIR_PREV=='X'):
+ _tmp1.append( _lst_x0[ix] )
+ _tmp1.append( _lst_t[ix] )
+ _tmp3.append( _lst_x0[ix] )
+ _tmp3.append( _lst_cc[ix] )
+ _tmp5.append( _lst_x0[ix] )
+ _tmp5.append( _lst_p[ix] )
+ _tmp2.append( _lst_x0_b[ix] )
+ _tmp2.append( _lst_t[ix] )
+ _tmp4.append( _lst_x0_b[ix] )
+ _tmp4.append( _lst_cc[ix] )
+ _tmp6.append( _lst_x0_b[ix] )
+ _tmp6.append( _lst_p[ix] )
+ else :
+ _tmp1.append( _lst_y0[iy] )
+ _tmp1.append( _lst_t[iy] )
+ _tmp3.append( _lst_y0[iy] )
+ _tmp3.append( _lst_cc[iy] )
+ _tmp5.append( _lst_y0[iy] )
+ _tmp5.append( _lst_p[iy] )
+ _tmp2.append( _lst_y0_b[iy] )
+ _tmp2.append( _lst_t[iy] )
+ _tmp4.append( _lst_y0_b[iy] )
+ _tmp4.append( _lst_cc[iy] )
+ _tmp6.append( _lst_y0_b[iy] )
+ _tmp6.append( _lst_p[iy] )
+
+
+
+
+
+ # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
+ _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp1,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp2,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp3,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp4,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+ TEMP_EXT=_L_T1,
+ COEF_H=_L_CC2))
+
+ l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+ TEMP_EXT=_L_T2,
+ COEF_H=_L_CC2))
+
+ # Couplage mecanique : Pressions en provenance d'Ecrevisse
+ _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp5,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+ VALE=_tmp6,
+ PROL_GAUCHE='LINEAIRE',
+ PROL_DROITE='LINEAIRE')
+
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
+ PRES=_L_P1,))
+ l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
+ PRES=_L_P2,))
+
+ # Fin extraction des conditions limites du calcul Ecrevisse
+ # ----------------------------------------------------------
+
+ if debug :
+ print ('FISSURE-'+str(k+1))
+ print '_lst_c:', len(_lst_c), _lst_c
+ print '_lst_f:', len(_lst_f), _lst_f
+ print '_lst_p:', len(_lst_p), _lst_p
+ print '_lst_t:', len(_lst_t), _lst_t
+ print '_lst_cc:', len(_lst_cc), _lst_cc
+ print '_lst_x0:', len(_lst_x0), _lst_x0
+ print '_lst_x0_b :', len(_lst_x0_b), _lst_x0_b
+ print '_lst_y0:', len(_lst_y0), _lst_y0
+ print '_lst_y0_b :', len(_lst_y0_b), _lst_y0_b
+ print '_tmp1 :', len(_tmp1), _tmp1
+ print '_tmp2 :', len(_tmp2), _tmp2
+ print '_tmp3 :', len(_tmp3), _tmp3
+ if (not oldVersion) :
+ print '_tmp4 :', len(_tmp4), _tmp4
+ print '_tmp5 :', len(_tmp5), _tmp5
+ print '_tmp6 :', len(_tmp6), _tmp6
+
+ #Fin du boucle sur la fissure for k
+
+
+ # Assemblage des concepts sortants
+ if(oldVersion) :
+ __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ FLUX_REP=l_FLUX_REP_F1);
+
+ __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ FLUX_REP=l_FLUX_REP_F2);
+ else:
+ __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ ECHANGE=l_ECHANGE_F1);
+
+ __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+ ECHANGE=l_ECHANGE_F2);
+
+ __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
+ PRES_REP=l_PRES_REP);
+
+ # Table resultat
+ try:
+ dprod = __TABFISS_tot.dict_CREA_TABLE()
+ __TAB = CREA_TABLE(**dprod)
+ debprod = __DEBFISS_tot.dict_CREA_TABLE()
+ __DEB = CREA_TABLE(**debprod)
+ except:
+ UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])
-#@ MODIF calc_essai_ops Macro DATE 21/10/2008 AUTEUR NISTOR I.NISTOR
+#@ MODIF calc_essai_ops Macro DATE 09/02/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
def calc_essai_ops( self,
INTERACTIF = None,
- UNITE_FIMEN = None,
- UNITE_RESU = None,
EXPANSION = None,
- MEIDEE_FLUDELA = None,
- MEIDEE_TURBULENT = None,
IDENTIFICATION = None,
MODIFSTRUCT = None,
GROUP_NO_CAPTEURS = None,
GROUP_NO_EXTERIEUR = None,
- RESU_FLUDELA = None,
- RESU_TURBULENT = None,
RESU_IDENTIFICATION = None,
RESU_MODIFSTRU = None,
**args):
"ComptTable" : 0,
"TablesOut" : table_fonction}
- if not RESU_FLUDELA:
- RESU_FLUDELA = []
- else:
- for res in RESU_FLUDELA:
- table.append(res['TABLE'])
- out_fludela = {"DeclareOut" : self.DeclareOut,
- "TypeTables" : 'TABLE',
- "ComptTable" : 0,
- "TablesOut" : table}
-
- if not RESU_TURBULENT:
- RESU_TURBULENT = []
- else:
- for res in RESU_TURBULENT:
- table.append(res['FONCTION'])
- out_meideeturb = {"DeclareOut" : self.DeclareOut,
- "FoncOut" : table}
-
# Mode interactif : ouverture d'une fenetre Tk
if INTERACTIF == "OUI":
create_interactive_window(self,
- UNITE_FIMEN,
- UNITE_RESU,
- out_fludela,
- out_meideeturb,
out_identification,
out_modifstru)
else:
from Meidee.meidee_calcul import MessageBox
from Meidee.meidee_test import TestMeidee
+ UNITE_RESU=7
mess = MessageBox(UNITE_RESU)
mess.disp_mess("Mode non intéractif")
# importation des concepts aster existants de la memoire jeveux
TestMeidee(self,
mess,
- out_fludela,
- out_meideeturb,
out_identification,
out_modifstru,
objects,
EXPANSION,
- MEIDEE_FLUDELA,
- MEIDEE_TURBULENT,
IDENTIFICATION,
MODIFSTRUCT,
GROUP_NO_CAPTEURS,
tabs = TabbedWindow(tabsw, ["Expansion de modeles",
"Modification structurale",
- "MEIDEE mono-modal fludela",
- "MEIDEE mono-modal turbulent",
"Identification de chargement",
"Parametres de visualisation"])
def create_interactive_window(macro,
- UNITE_FIMEN,
- UNITE_RESU,
- out_fludela,
- out_meideeturb,
out_identification,
out_modifstru):
"""Construit la fenêtre interactive comprenant une table pour
from Meidee.meidee_cata import MeideeObjects
from Meidee.meidee_correlation import InterfaceCorrelation
from Meidee.meidee_modifstruct import InterfaceModifStruct
- from Meidee.meidee_fludela import InterfaceFludela, InterfaceTurbMonomod
- from Meidee.meidee_turbulent import InterfaceTurbulent
from Meidee.meidee_parametres import InterfaceParametres
# fenetre principale
iface = InterfaceCorrelation(main, objects, macro, mess, param_visu)
imodifstruct = InterfaceModifStruct(main, objects, macro,
mess, out_modifstru, param_visu)
- fludelamonomod = InterfaceFludela(main, objects,
- get_fimen_files(UNITE_FIMEN), mess, out_fludela, param_visu)
- turbmonomod = InterfaceTurbMonomod(main, objects,get_fimen_files(UNITE_FIMEN) ,mess, out_meideeturb, param_visu)
turbulent = InterfaceTurbulent(main, objects, mess, out_identification, param_visu)
tabs.set_tab("Expansion de modeles", iface.main)
tabs.set_tab("Modification structurale", imodifstruct.main)
- tabs.set_tab("MEIDEE mono-modal fludela", fludelamonomod )
- tabs.set_tab("MEIDEE mono-modal turbulent", turbmonomod )
tabs.set_tab("Identification de chargement", turbulent)
tabs.set_tab("Parametres de visualisation", param_visu)
-#@ MODIF calc_europlexus_ops Macro DATE 28/04/2009 AUTEUR ASSIRE A.ASSIRE
+#@ MODIF calc_europlexus_ops Macro DATE 18/11/2009 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
def lancer_calcul(self,fichier_med='auto'):
fichier_epx = self.nom_fichiers['COMMANDE']
- EXEC_LOGICIEL(LOGICIEL='cd %s ; %s %s ; iret=$? ; cd %s ; exit $iret' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+ EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+ CODE_RETOUR_MAXI=-1,
INFO=2)
-#@ MODIF calc_table_ops Macro DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF calc_table_ops Macro DATE 05/01/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
lpar = [lpar]
for p in lpar:
if not p in tab.para:
- UTMESS('F','TABLE0_4',valk=[p, TABLE.nom])
+ UTMESS('F','TABLE0_2',valk=[p, TABLE.nom])
if not p in tab2.para:
- UTMESS('F','TABLE0_5',valk=[p,occ['TABLE'].nom] )
+ UTMESS('F','TABLE0_2',valk=[p,occ['TABLE'].nom] )
opts.append(lpar)
tab = merge(*opts)
--- /dev/null
+#@ MODIF defi_fonc_elec_ops Macro DATE 09/02/2010 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 cos,exp,pi
+
+def FcompletGR1(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2) :
+ fxt= 4.E-7 * I1 * I2
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+ return fxt
+
+def FcontinuGR1(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) :
+ ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+ ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+ ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+ fxt= 4.E-7 * I1 * I2 * ft1
+ return fxt
+
+def FcompletGR2(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2,D) :
+ fxt= 4.E-7 * I1 * I2 / D
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+ return fxt
+
+def FcontinuGR2(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2,D) :
+ ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+ ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+ ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+ fxt= 4.E-7 * I1 * I2 * ft1 / D
+ return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcompletGR2R(T,I1R,I2R,FR,TRR,PHIR1,PHI2R,TAU1R,TAU2R,D) :
+ fxt= 4.E-7 * I1R * I2R / D
+ fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI1R*pi/180.)-exp(-(T-TRR)/TAU1R)*cos(PHI1R*pi/180.))
+ fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI2R*pi/180.)-exp(-(T-TRR)/TAU2R)*cos(PHI2R*pi/180.))
+ return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcontinuGR2R(T,I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,D) :
+ ft1= exp(-(T-TRR)*(1./TAU1R+1./TAU2R))
+ ft1= ft1*cos(PHI1R*pi/180.)*cos(PHI2R*pi/180.)
+ ft1= ft1+0.5*cos(PHI2R*pi/180.-PHI1R*pi/180.)
+ fxt= 4.E-7 * I1R * I2R * ft1 / D
+ return fxt
+
+
+
+def defi_fonc_elec_ops(self,FREQ,SIGNAL,COUR,COUR_PRIN,COUR_SECO,**args):
+ ier=0
+ from Utilitai.Utmess import UTMESS
+ import Numeric
+
+ # 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_FONCTION =self.get_cmd('DEFI_FONCTION')
+ FORMULE =self.get_cmd('FORMULE')
+ CALC_FONC_INTERP =self.get_cmd('CALC_FONC_INTERP')
+
+ ### Comptage commandes + déclaration concept sortant
+ self.set_icmd(1)
+ self.DeclareOut('C_out',self.sd)
+#
+ if COUR :
+ TINI =COUR[ 0]['INST_CC_INIT']
+ TFIN =COUR[-1]['INST_CC_FIN']
+ pas_t=1./(40.*FREQ)
+#
+ temps = []
+ fff = []
+#
+ T2moins = COUR[0]['INST_CC_FIN']
+ TR = COUR[0]['INST_CC_INIT']
+ premier = 1
+ for k_cour in COUR :
+ I1 = k_cour['INTE_CC_1']
+ I2 = k_cour['INTE_CC_2']
+ PHI1 = k_cour['PHI_CC_1']
+ PHI2 = k_cour['PHI_CC_2']
+ TAU1 = k_cour['TAU_CC_1']
+ TAU2 = k_cour['TAU_CC_2']
+ T1 = k_cour['INST_CC_INIT']
+ T2 = k_cour['INST_CC_FIN']
+ if (abs(T1-T2moins)<1.E-7) : pass
+ elif (premier==1) : pass
+ else :
+ TR=T1
+ temps.append(T2moins)
+ fff.append(0.)
+ T2moins=T2
+ premier=0
+ t_k_cour=Numeric.arange((T2-T1)/pas_t)
+ t_k_cour=t_k_cour*pas_t
+ t_k_cour=t_k_cour+T1
+ t_k_cour=t_k_cour.tolist()
+ print T1,T2,FREQ
+ temps=temps+t_k_cour
+ if SIGNAL=='CONTINU' :
+ for t in t_k_cour :
+ fff.append( FcontinuGR1(t,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) )
+ elif SIGNAL=='COMPLET' :
+ for t in t_k_cour :
+ fff.append(FcompletGR1(t,I1,I2,FREQ,TR,PHI1,PHI2,TAU1,TAU2))
+#
+ elif COUR_PRIN :
+ TINI =COUR_PRIN[0]['INST_CC_INIT']
+ TFIN =COUR_PRIN[0]['INST_CC_FIN']
+#
+ TINIR = COUR_PRIN[0]['INST_RENC_INIT']
+ TFINR = COUR_PRIN[0]['INST_RENC_FIN']
+#
+ pas_t=1./(40.*FREQ)
+#
+ temps = []
+ fff = []
+ T2moins = max(TFIN,TFINR)
+ TR = COUR_PRIN[0]['INST_CC_INIT']
+ TRR = COUR_PRIN[0]['INST_RENC_INIT']
+ I1 = COUR_PRIN[0]['INTE_CC_1']
+ I1R = COUR_PRIN[0]['INTE_RENC_1']
+ PHI1 = COUR_PRIN[0]['PHI_CC_1']
+ PHI1R = COUR_PRIN[0]['PHI_RENC_1']
+ TAU1 = COUR_PRIN[0]['TAU_CC_1']
+ TAU1R = COUR_PRIN[0]['TAU_RENC_1']
+#
+ fff.append(0.)
+#
+ if (abs(TR-T2moins)<1.E-7) : pass
+ else :
+ temps.append(0)
+ t_k_cour=Numeric.arange((T2moins-TR)/pas_t)
+ t_k_cour=t_k_cour*pas_t
+ t_k_cour=t_k_cour+TR
+ t_k_cour=t_k_cour.tolist()
+ temps=temps+t_k_cour
+#
+ for k_cour in COUR_SECO :
+ I2 = k_cour['INTE_CC_2']
+ PHI2 = k_cour['PHI_CC_2']
+ TAU2 = k_cour['TAU_CC_2']
+ I2R = k_cour['INTE_RENC_2']
+ PHI2R = k_cour['PHI_RENC_2']
+ TAU2R = k_cour['TAU_RENC_2']
+ DIST = k_cour['DIST']
+#
+ if SIGNAL=='CONTINU' :
+ for i in range(len(temps)) :
+ if temps[i]>TINI :
+ if temps[i]<TFIN :
+ fff[i]=fff[i]+FcontinuGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+ if temps[i]>TINIR :
+ if temps[i]<TFINR :
+ fff[i]=fff[i]+FcontinuGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+ if SIGNAL=='COMPLET' :
+ for i in range(len(temps)) :
+ if temps[i]>TINI :
+ if temps[i]<TFIN :
+ fff[i]=fff[i]+FcompletGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+ if temps[i]>TINIR :
+ if temps[i]<TFINR :
+ fff[i]=fff[i]+FcompletGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+ vale=[]
+ for i in range(len(temps)) :
+ vale.append(temps[i])
+ vale.append(fff[i])
+ vale.append(temps[-1]+2*pas_t)
+ vale.append(0.)
+#
+ C_out=DEFI_FONCTION(NOM_PARA='INST',NOM_RESU='ELEC',
+ VALE=vale,
+ PROL_DROITE='CONSTANT',
+ PROL_GAUCHE='CONSTANT',)
+ return ier
-#@ MODIF exec_logiciel_ops Macro DATE 21/10/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF exec_logiciel_ops Macro DATE 08/04/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# RESPONSABLE COURTOIS M.COURTOIS
-import os.path
+import os
+import os.path as osp
import traceback
import shutil
from types import ListType, TupleType
dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
d_para['fichIN'] = 'fort.%d' % dMCF['UNITE_GEOM']
d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
+ if osp.exists(d_para['fichOUT']):
+ os.remove(d_para['fichOUT'])
if dMCF['FORMAT'] == 'GMSH':
mode_lancement = CMD_EXTERNE
cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
- d_para['prog'] = os.path.join(aster.repout(), 'gmsh')
+ d_para['prog'] = osp.join(aster.repout(), 'gmsh')
d_para['options'] = ('-3',)
elif dMCF['FORMAT'] == 'GIBI':
mode_lancement = CMD_EXTERNE
cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
- d_para['prog'] = os.path.join(aster.repout(), 'gibi')
+ d_para['prog'] = osp.join(aster.repout(), 'gibi')
elif dMCF['FORMAT'] == 'SALOME':
mode_lancement = EXECFILE
iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False,
capturestderr=True, separated_stderr=True)
erreur = iret > CODE_RETOUR_MAXI
-
+ if CODE_RETOUR_MAXI == -1: erreur = False
+
# output
if INFO > 0 or erreur:
UTMESS('I', 'EXECLOGICIEL0_11', vali=(iret, CODE_RETOUR_MAXI))
txt = open(d_para['fichIN'], 'r').read()
UTMESS('F', 'EXECLOGICIEL0_5', valk=txt)
- if not os.path.exists(d_para['fichMED']):
+ if not osp.exists(d_para['fichMED']):
UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED'])
else:
# copie fichMED vers fichOUT pour pouvoir le récupérer
umail = UL.Libre(action='ASSOCIER',
nom='exec_logiciel.%s2mail' % dMCF['FORMAT'].lower())
+ if not osp.exists(d_para['fichOUT']):
+ UTMESS('F', 'EXECLOGICIEL0_13', valk=dMCF['FORMAT'])
+
# déclaration du concept maillage en sortie
self.DeclareOut('mail', dMCF['MAILLAGE'])
-#@ MODIF macr_ecla_pg_ops Macro DATE 09/11/2004 AUTEUR VABHHTS J.PELLET
+#@ MODIF macr_ecla_pg_ops Macro DATE 03/02/2010 AUTEUR MACOCCO K.MACOCCO
# -*- 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.
+# 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,
+ NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,
**args):
"""
Ecriture de la macro macr_ecla_pg
# 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
+ typ2=AsType(RESU_INIT).__name__
+ if TOUT_ORDRE : motscles['TOUT_ORDRE'] =TOUT_ORDRE
+ if NUME_ORDRE != None : motscles['NUME_ORDRE'] =NUME_ORDRE
+ if LIST_ORDRE : motscles['LIST_ORDRE'] =LIST_ORDRE
+ if LIST_INST : motscles['LIST_INST'] =LIST_INST
+ if INST != None : motscles['INST'] =INST
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
+ return ier
############################################################################################
--- /dev/null
+#@ MODIF macr_ecre_calc_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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_ecre_calc_ops(
+ self,
+ TABLE,
+ DEBIT,
+ FISSURE,
+ ECOULEMENT,
+ TEMPERATURE,
+ MODELE_ECRE,
+ CONVERGENCE,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ #COURBES,
+ IMPRESSION,
+ INFO,
+ **args):
+
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Generation par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+ """
+
+ import os, string, types, shutil
+ import aster
+ from Accas import _F
+ #from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.System import ExecCommand
+
+ ier=0
+
+
+ # PARAMETRES DEBUG
+ debug = True
+
+
+
+ # Concept sortant
+ self.DeclareOut('__TAB',TABLE)
+ self.DeclareOut('__DEB',DEBIT)
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Info
+ info2 = (INFO==2)
+ if debug :
+ info2=True
+
+ # Parametres Developpeur
+ tmp_ecrevisse = "tmp_ecrevisse"
+ fichier_data = "data.dat"
+ defaut = '00'
+
+ # IMPORTATION DE COMMANDES ASTER
+ EXEC_LOGICIEL = self.get_cmd("EXEC_LOGICIEL")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+# IMPR_TABLE = self.get_cmd("IMPR_TABLE")
+ IMPR_FONCTION = self.get_cmd("IMPR_FONCTION")
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+ dFISSURE=FISSURE[0].cree_dict_valeurs(FISSURE[0].mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dTEMPERATURE=TEMPERATURE[0].cree_dict_valeurs(TEMPERATURE[0].mc_liste)
+ for i in dTEMPERATURE.keys():
+ if dTEMPERATURE[i]==None : del dTEMPERATURE[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : del dMODELE_ECRE[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+ if debug:
+ print 'dFISSURE = ', dFISSURE
+ print 'dECOULEMENT = ', dECOULEMENT
+ print 'dTEMPERATURE = ', dTEMPERATURE
+ print 'dMODELE_ECRE = ', dMODELE_ECRE
+ print 'dCONVERGENCE = ', dCONVERGENCE
+ print 'ENTETE = ', ENTETE
+ print 'IMPRESSION = ', IMPRESSION
+ print 'INFO = ', INFO
+
+
+
+
+# ---------------------------------------------------------------------
+# CONSTRUCTION DU JEU DE PARAMETRES
+
+ d = {}
+ d[ 0 ] = ENTETE,
+
+ # FISSURE
+ d[ 1 ] = defaut,
+ d[ 2 ] = str(len(dFISSURE['LISTE_COTES_AH'])),
+ d[ 3 ] = dFISSURE['LISTE_COTES_AH'],
+ d[ 4 ] = dFISSURE['LISTE_VAL_AH'],
+ d[ 5 ] = str(len(dFISSURE['LISTE_COTES_BL'])),
+ d[ 6 ] = dFISSURE['LISTE_COTES_BL'],
+ d[ 7 ] = dFISSURE['LISTE_VAL_BL'],
+ d[ 8 ] = dFISSURE['LONGUEUR'],
+ d[ 9 ] = dFISSURE['ANGLE'],
+ d[ 10 ] = dFISSURE['RUGOSITE'],
+ d[ 11 ] = dFISSURE['ZETA'],
+ if dFISSURE['SECTION'] == 'ELLIPSE':
+ d[ 1 ] = 1,
+ if dFISSURE['SECTION'] == 'RECTANGLE':
+ d[ 1 ] = 2,
+
+ # ECOULEMENT
+ d[ 20 ] = dECOULEMENT['PRES_ENTREE'],
+ d[ 21 ] = dECOULEMENT['PRES_SORTIE'],
+ d[ 22 ] = dECOULEMENT['FLUIDE_ENTREE'],
+ d[ 23 ] = defaut,
+ d[ 24 ] = defaut,
+ d[ 25 ] = defaut,
+ if dECOULEMENT['FLUIDE_ENTREE'] in [1, 3, 4, 6]:
+ d[ 23 ] = dECOULEMENT['TEMP_ENTREE'],
+ if dECOULEMENT['FLUIDE_ENTREE'] in [2, 5]:
+ d[ 24 ] = dECOULEMENT['TITR_MASS'],
+ if dECOULEMENT['FLUIDE_ENTREE'] in [4, 5]:
+ d[ 25 ] = dECOULEMENT['PRES_PART'],
+
+ # TEMPERATURE
+ d[ 30 ] = defaut,
+ d[ 31 ] = defaut,
+ d[ 32 ] = defaut,
+ d[ 33 ] = defaut,
+ d[ 34 ] = defaut,
+ d[ 35 ] = defaut,
+ d[ 36 ] = defaut,
+ d[ 37 ] = defaut,
+ d[ 38 ] = defaut,
+ d[ 39 ] = defaut,
+ d[ 40 ] = defaut,
+ if dTEMPERATURE['GRADIENT'] == 'FOURNI':
+ d[ 30 ] = -1
+ d[ 31 ] = len(dTEMPERATURE['LISTE_COTES_TEMP'])
+ d[ 32 ] = dTEMPERATURE['LISTE_COTES_TEMP']
+ d[ 33 ] = dTEMPERATURE['LISTE_VAL_TEMP']
+ if dTEMPERATURE['GRADIENT'] == 'IMPOSE':
+ d[ 30 ] = 0
+ d[ 34 ] = dTEMPERATURE['TEMP1']
+ d[ 35 ] = dTEMPERATURE['TEMP2']
+ if dTEMPERATURE['GRADIENT'] == 'CALCULE':
+ d[ 30 ] = 1
+ d[ 36 ] = dTEMPERATURE['EPAISSEUR_PAROI']
+ d[ 37 ] = dTEMPERATURE['CONVECTION_AMONT']
+ d[ 38 ] = dTEMPERATURE['CONVECTION_AVAL']
+ d[ 39 ] = dTEMPERATURE['LAMBDA']
+ d[ 40 ] = dTEMPERATURE['TEMP_FLUIDE_AVAL']
+
+ # MODELE_ECRE
+ d[ 60 ] = defaut,
+ d[ 61 ] = defaut,
+ if dMODELE_ECRE['ECOULEMENT'] == 'SATURATION':
+ d[ 60 ] = 1,
+ if dMODELE_ECRE['ECOULEMENT'] == 'GELE':
+ d[ 60 ] = 2,
+ d[ 61 ] = dMODELE_ECRE['PRESS_EBULLITION'],
+
+ d[ 70 ] = dMODELE_ECRE['FROTTEMENT'],
+ d[ 71 ] = defaut,
+ d[ 72 ] = defaut,
+ d[ 73 ] = defaut,
+ d[ 74 ] = defaut,
+ d[ 75 ] = defaut,
+ if dMODELE_ECRE['FROTTEMENT'] < 0:
+ d[ 71 ] = dMODELE_ECRE['REYNOLDS_LIM'],
+ d[ 72 ] = dMODELE_ECRE['FROTTEMENT_LIM'],
+
+ d[ 73 ] = dMODELE_ECRE['TRANSFERT_CHAL'],
+
+ if dMODELE_ECRE['TRANSFERT_CHAL'] == 0: pass # Pour memoire 3 cas >0, =0, <0
+ if dMODELE_ECRE['TRANSFERT_CHAL'] > 0: pass # Pour memoire 3 cas >0, =0, <0
+ if dMODELE_ECRE['TRANSFERT_CHAL'] < 0:
+ d[74] = dMODELE_ECRE['XMINCH'],
+ d[75] = dMODELE_ECRE['XMAXCH'],
+
+ d[79] = dMODELE_ECRE['IVENAC'],
+
+ if IMPRESSION == 'OUI':
+ d[ 84 ] = 1,
+ if IMPRESSION == 'NON':
+ d[ 84 ] = 0,
+
+ # CONVERGENCE
+ d[ 88 ] = dCONVERGENCE['KGTEST'],
+ d[ 89 ] = dCONVERGENCE['ITER_GLOB_MAXI'],
+ d[ 90 ] = dCONVERGENCE['CRIT_CONV_DEBI'],
+
+ if debug: print d
+
+
+
+
+# ---------------------------------------------------------------------
+# GENERATION DU FICHIER DATA.DAT
+
+ txt = fichier_data_ecrevisse()
+
+ for num_param in d.keys():
+ if type(d[num_param]) in [int, float]:
+ txt0 = str(d[num_param])
+ elif type(d[num_param]) in [tuple, list]:
+ txt0 = str(d[num_param]).replace('(', '')
+ txt0 = txt0.replace(')', '')
+ txt0 = txt0.replace(',', '')
+ txt0 = txt0.replace("'", '')
+ txt0 = txt0.replace("[", '')
+ txt0 = txt0.replace("]", '')
+ else:
+ try: txt0 = str(d[num_param])
+ except: UTMESS('F','ECREVISSE0_11')
+
+ # On remplace la variable dans le fichier par sa valeur
+ txt = txt.replace( '$V['+str(num_param)+']', txt0 )
+
+ if debug : print txt
+
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DE L'ENVIRONNEMENT D'ETUDE POUR ECREVISSE
+
+
+ # Repertoire temporaire d'execution d'Ecrevisse
+ tmp_ecrevisse = os.path.join(os.getcwd(),tmp_ecrevisse)
+
+ if not os.path.isdir(tmp_ecrevisse) :
+ try :
+ os.mkdir(tmp_ecrevisse)
+ except os.error,erreur :
+ if debug :
+ print "Code d'erreur de mkdir : " + str(erreur[0]) + " : " + str(erreur[1])
+ UTMESS('F','ECREVISSE0_12',valk=[tmp_ecrevisse])
+
+ # On recopie eventuellement l'ancien fichier debits
+ src = os.path.join('.', 'REPE_OUT', 'debits_dernier')
+ dst = os.path.join(tmp_ecrevisse, 'debits')
+ if os.path.isfile(src):
+ try:
+ shutil.copyfile(src, dst)
+ except Exception, e:
+ UTMESS('F','ECREVISSE0_24',valk=[src, dst])
+ #print "ERREUR : copyfile %s -> %s" % (src, dst)
+
+ # Executable Ecrevisse
+ if LOGICIEL :
+ if not os.path.isfile(str(LOGICIEL)):
+ UTMESS('F','ECREVISSE0_13')
+ else:
+ chemin_executable = str(LOGICIEL)
+ else :
+ chemin_executable = os.path.join(aster.repout(), 'ecrevisse')
+ #chemin_executable = os.path.join(aster.repout(),version,'ecrevisse')
+ if debug :
+ print 'chemin_executable:',chemin_executable
+
+ # Soit on fait un lien symbolique (incompatible avec certaines plate-formes) soit on recopie l'executable
+ if not os.path.isfile(os.path.join(tmp_ecrevisse, 'ecrevisse')):
+ try:
+ os.symlink( chemin_executable, os.path.join(tmp_ecrevisse, 'ecrevisse') )
+ except:
+ UTMESS('A','ECREVISSE0_14')
+ cmd = 'cp ' + chemin_executable + ' ' + os.path.join(tmp_ecrevisse, 'ecrevisse')
+ res = os.system(cmd)
+ os.chmod( os.path.join(tmp_ecrevisse, 'ecrevisse') ,0755)
+ if (res!=0): UTMESS('F','ECREVISSE0_15')
+
+ # Ecriture du fichier de donnees pour Ecrevisse
+ fw = open(os.path.join(tmp_ecrevisse, fichier_data),'w')
+ fw.write(txt)
+ fw.close()
+
+ # Sauvegarde dans REPE_OUT du data.dat
+ os.system('cp ' + tmp_ecrevisse + '/data.dat REPE_OUT/')
+
+
+# ---------------------------------------------------------------------
+# EXECUTION D'ECREVISSE
+
+ # Choix du shell
+ cmd = '#!sh'
+ for shell in ['/bin/sh', '/bin/bash', '/usr/bin/sh']:
+ if os.path.isfile(shell):
+ cmd = '#!' + shell
+ break
+
+# #Ligne suivante a ajouter avec la version LINUX compilee avec GFORTRAN
+# cmd = cmd + '\nexport LD_LIBRARY_PATH=/logiciels/aster/Linux/GF4/public/gcc-4.1.1/lib:$LD_LIBRARY_PATH'
+
+ # Creation du contenu du script de lancement ecrevisse.sh
+ cmd = cmd + '\ncd ' + tmp_ecrevisse + '\n' + os.path.join(tmp_ecrevisse, 'ecrevisse') + ' ' + str(VERSION) + '\nset iret=$?\ncd ..\nexit $iret'
+ fw = open(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),'w')
+ fw.write(cmd)
+ fw.close()
+ os.chmod(os.path.join(tmp_ecrevisse, 'ecrevisse.sh') ,0755)
+
+ # Lancement d'Ecrevisse
+ UTMESS('I','ECREVISSE0_16')
+ res = ExecCommand(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),follow_output=True,verbose=True)
+ UTMESS('I','ECREVISSE0_17')
+
+
+ if info2: os.system('ls -al ' + tmp_ecrevisse)
+
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS DEPUIS ECREVISSE
+
+
+ # 1) 5 COLONNES (a partir de ECREVISSE 3.1.e)
+ # COTE z (m), FLUX THERMIQUE (W/m2), PRESSION TOTALE ABSOLUE (Pa),
+ # TEMPERATURE FLUIDE (degres C), COEFFICIENT DE CONVECTION (W/m2/K)
+ try:
+ f_ast = open(os.path.join(tmp_ecrevisse, 'pour_aster'),'r')
+ _txt = f_ast.read()
+ f_ast.close()
+ # transforme le texte en liste
+ _lst = _txt.split()
+ # transforme la liste de textes en liste de float
+ _lst = map( float, _lst )
+
+ # ATTENTION : les cotes _ecr_c sont celles des resultats ecrevisse,
+ # c'est a dire les points de milieu du maillage aster,
+ # eventuellement multiplies par 1/TORTUOSITE!
+ _ecr_c = _lst[1:len(_lst):5]
+ _ecr_f = _lst[2:len(_lst):5]
+ _ecr_p = _lst[3:len(_lst):5]
+ _ecr_t = _lst[4:len(_lst):5]
+ _ecr_cc = _lst[5:len(_lst):5]
+
+ except:
+ UTMESS('F','ECREVISSE0_18')
+ _ecr_c = [-1]
+ _ecr_f = [-1]
+ _ecr_p = [-1]
+ _ecr_t = [-1]
+ _ecr_cc = [-1]
+
+ else:
+ # On elimine les eventuels points en plus
+ # (cela arrive si la longueur de la fissure est plus grande de la derniere cotes)
+ # mais on considere quand meme la derniere cote du maillage aster
+ lx_ast = dFISSURE['LISTE_COTES_AH']
+ nbCotesEcre = len(lx_ast)
+ _ecr_c = _ecr_c[0:nbCotesEcre]
+ _ecr_f = _ecr_f[0:nbCotesEcre]
+ _ecr_p = _ecr_p[0:nbCotesEcre]
+ _ecr_t = _ecr_t[0:nbCotesEcre]
+ _ecr_cc = _ecr_cc[0:nbCotesEcre]
+
+
+
+ # 2) DEBIT - 5 COLONNES (a partir de ECREVISSE 3.1.e)
+ # DEBIT TOTAL (kg/s), DEBIT AIR (kg/s), DEBIT VAPEUR (kg/s),
+ # DEBIT LIQUIDE (kg/s), TYPE ECOULEMENT
+ try:
+ f_deb = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+ _tex = f_deb.read()
+ f_deb.close()
+ _lis = _tex.split()
+ _lis = map( float, _lis )
+
+ _dtot = _lis[0:len(_lis):5]
+ _dair = _lis[1:len(_lis):5]
+ _dvap = _lis[2:len(_lis):5]
+ _dliq = _lis[3:len(_lis):5]
+ _ecou = _lis[4:len(_lis):5]
+
+ except:
+ UTMESS('A','ECREVISSE0_18')
+ _dtot = [-1]
+ _dair = [-1]
+ _dvap = [-1]
+ _dliq = [-1]
+ _ecou = [-1]
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DES SD-TABLE DE RESULTATS
+
+ __TAB=CREA_TABLE(LISTE=(_F(LISTE_R=_ecr_c,
+ PARA='COTES'),
+ _F(LISTE_R=_ecr_f,
+ PARA='FLUX'),
+ _F(LISTE_R=_ecr_p,
+ PARA='PRESSION'),
+ _F(LISTE_R=_ecr_t,
+ PARA='TEMP'),
+ _F(LISTE_R=_ecr_cc,
+ PARA='COEF_CONV'),
+ ))
+
+ __DEB=CREA_TABLE(LISTE=(_F(LISTE_R=_dtot,
+ PARA='DEBTOT'),
+ _F(LISTE_R=_dair,
+ PARA='DEBAIR'),
+ _F(LISTE_R=_dvap,
+ PARA='DEBVAP'),
+ _F(LISTE_R=_dliq,
+ PARA='DEBLIQ'),
+ _F(LISTE_I=_ecou,
+ PARA='ECOULEMENT'),
+ ))
+
+
+
+
+# ---------------------------------------------------------------------
+# DEBUG
+ if debug :
+ print 'DEBUT DEBUG MACR_ECRE_CALC'
+ print 'Chargements donnes par Ecrevisse'
+ print 'cotes aster :', lx_ast
+ print '_ecr_c : min=', min(_ecr_c), ' / max=', max(_ecr_c), ' / ', _ecr_c
+ print '_ecr_f : min=', min(_ecr_f), ' / max=', max(_ecr_f), ' / ', _ecr_f
+ print '_ecr_p : min=', min(_ecr_p), ' / max=', max(_ecr_p), ' / ', _ecr_p
+ print '_ecr_t : min=', min(_ecr_t), ' / max=', max(_ecr_t), ' / ', _ecr_t
+ print '_ecr_cc : min=', min(_ecr_cc), ' / max=', max(_ecr_cc), ' / ', _ecr_cc
+ print '_dtot=', _dtot
+ print '_dair=', _dair
+ print '_dvap=', _dvap
+ print '_dliq=', _dliq
+ print '_ecou=', _ecou
+ print __DEB.EXTR_TABLE()
+ print __TAB.EXTR_TABLE()
+ print 'FIN DEBUG MACR_ECRE_CALC'
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS OPTIONNELS DEPUIS ECREVISSE
+# A finir
+# lst_fic = os.listdir(tmp_ecrevisse)
+
+
+
+# ---------------------------------------------------------------------
+# FIN MACR_ECRE_CALC
+ return ier
+
+
+
+
+# ---------------------------------------------------------------------
+def fichier_data_ecrevisse():
+
+ """
+ Modele du fichier data.dat a la syntaxe Ecrevisse 3.0
+ Cette chaine de caractere est l'exacte replique d'un fichier de donnees
+ Ecrevisse 3.0 dans lequel toutes les donnees numeriques ont ete
+ remplacees par $V[x].
+ """
+
+ txt = """$V[0]
+
+
+ DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+ *******************************************
+
+$V[1] is: type de section (is=1 ellipse is=2 rectangle)
+$V[2] nb points decrivant ah: grand axe (m)
+$V[3]
+$V[4]
+$V[5] nb points decrivant bl: petit axe (m)
+$V[6]
+$V[7]
+$V[8] zl: longueur totale de la fissure (m)
+$V[9] theta: angle par rapport a la verticale ascendante (en degres)
+$V[10] eps: rugosite absolu (m)
+$V[11] zeta: coefficient de la perte de charge singuliere a l'entree
+
+ DONNEES RELATIVES A L"ECOULEMENT
+ ********************************
+
+$V[20] pe: pression de stagnation a l'entree (Pa)
+$V[21] ps: pression de stagnation a la sortie (Pa)
+$V[22] iflow : condition du fluide a l'entree
+ iflow=1 : eau sous-refroidie ou saturee
+ iflow=2 : fluide diphasique
+ iflow=3 : vapeur saturee ou surchauffee
+ iflow=4 : air + vapeur surchauffee
+ iflow=5 : air + vapeur saturee
+ iflow=6 : air seul
+$V[23] te: temperature a l'entree (deg C) (utilise si iflow=1,3,4,6)
+$V[24] xe: titre m. eau vap/eau tot a l'entree (utilise si iflow=2 ou 5)
+$V[25] pae : pression partielle air en entree (Pa) (utilise si iflow>3)
+
+ DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+ *************************************************************
+
+$V[30] imograd : modele de calcul du gradient de temperature
+ imograd=-1/ distribution imposee de temperature (max 100pts)
+ imograd=0 : profil impose de la temperature
+ imograd=1 : calcul du profil
+$V[31] cas imograd = -1 : ntmat, nb de points donnes ensuite (max=100)
+$V[32]
+$V[33]
+$V[34] tm1: grad. temp. paroi le lg de l'ecoul.(utilise si imograd=0) (degC/m)
+$V[35] tm2: temperature de la paroi a l'entree (utilise si imograd=0) (degC)
+$V[36] epp: epaisseur de la paroi (utilise si imograd=1) (m)
+$V[37] alphe: coeff. convection face amont (utilise si imograd=1) (W/degC/m2)
+$V[38] alphs: coeff. convection face aval (utilise si imograd=1) (W/degC/m2)
+$V[39] lambd: conduct. thermique de la paroi (utilise si imograd=1) (W/degC/m)
+$V[40] ts: temperature du fluide cote aval (utilise si imograd=1) (degC)
+
+ CHOIX DES MODELES
+ *****************
+
+Modeles d'ecoulement diphasique
+-------------------------------
+$V[60] imod : type de modele d'ecoulement diphasique
+ imod=1 : modele d'ecoulement a saturation a l'entree
+ imod=2 : modele d'ecoulement 'gele' a l'entree
+$V[61] corrp: press. d'ebullition = corrp*psat(t)
+
+Choix des correlations de frottement et de transfert de chaleur
+---------------------------------------------------------------
+$V[70] ifrot : frottement (avec : ifrot=1 ou -1 ; sans : ifrot=0 )
+$V[71] cas ifrot=-1 : relim = Re limite
+$V[72] cas ifrot=-1 : frtlim = coeff frottement si Re > relim
+$V[73] ichal : transfert de chaleur (-2 <= ichal <= 2 ichal=0 ==> Pas d'echange de chaleur)
+$V[74] cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
+$V[75] cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
+
+Modelisation de la vena contracta
+---------------------------------
+$V[79] ivenac : avec = 1, sans = 0
+
+Procedure d'impression
+----------------------
+$V[84] iprint : impression profils ecran ( oui:1 non:0 )
+
+ DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+ ********************************************
+
+$V[88] kgtest (0 < kgtest < 1) tel que g=kgtest*gmax+(1-kgtest)*gmin
+$V[89] itnmax : nombre maximum iterations methode newton
+$V[90] precdb : critere de convergence en debit
+"""
+
+ return txt
--- /dev/null
+#@ MODIF macr_ecrevisse_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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_ecrevisse_ops(self,reuse,
+ CONV_CRITERE,
+ TABLE,
+ TEMPER,
+ DEBIT,
+ MODELE_MECA,
+ MODELE_THER,
+ FISSURE,
+ ECOULEMENT,
+ LIST_INST,
+ MODELE_ECRE,
+ CONVERGENCE_ECREVISSE,
+ COURBES,
+ LOGICIEL,
+ VERSION,
+ ENTETE,
+ IMPRESSION,
+ CHAM_MATER,
+ CARA_ELEM,
+ EXCIT_MECA,
+ EXCIT_THER,
+ COMP_INCR,
+ NEWTON,
+ CONVERGENCE,
+ ETAT_INIT,
+ INFO,
+ **args):
+ """
+ Procedure de couplage Aster-Ecrevisse
+ Execution pour tous les pas de temps des calculs thermiques, mecaniques puis hydraulique
+ DecoupageGeneration par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+ """
+
+
+ from Utilitai.Utmess import UTMESS
+ from Utilitai.Table import Table, merge
+ from Accas import _F
+ import os, aster, copy
+
+ ier=0
+ #
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # Parametres debug
+ debug = False
+
+ # Info
+ InfoAster = 1
+ info2 = (INFO==2)
+ if debug :
+ info2=True
+
+ # IMPORTATION DE COMMANDES ASTER
+ DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
+ THER_LINEAIRE = self.get_cmd("THER_LINEAIRE")
+ PROJ_CHAMP = self.get_cmd("PROJ_CHAMP")
+ DETRUIRE = self.get_cmd("DETRUIRE")
+ AFFE_MATERIAU = self.get_cmd("AFFE_MATERIAU")
+ STAT_NON_LINE = self.get_cmd("STAT_NON_LINE")
+ POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
+ CALC_ECREVISSE = self.get_cmd("CALC_ECREVISSE")
+ CO = self.get_cmd("CO")
+ CREA_TABLE = self.get_cmd("CREA_TABLE")
+ CREA_RESU = self.get_cmd("CREA_RESU")
+ CREA_CHAMP = self.get_cmd("CREA_CHAMP")
+
+ # Concepts sortants
+ # TABLE creees par concatenation des tables sorties par CALC_ECREVISSE a chaque iteration
+ self.DeclareOut('TABL_RES',TABLE)
+ self.DeclareOut('DEB_RES',DEBIT)
+ # Concepts sortant: les resultats de STAT_NON_LINE et de THER_LINEAIRE valides vis-a-vis du calcul ecrevisse
+ self.DeclareOut('RTHERM',TEMPER)
+ self.DeclareOut('MECANIC', self.sd)
+
+ IsPoursuite = False
+ IsInit = True
+ # Traitement de l'etat initial en cas de poursuite
+ if ETAT_INIT:
+ dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+ for i in dEtatInit.keys():
+ if dEtatInit[i]==None : del dEtatInit[i]
+ __EVINIT = dEtatInit['EVOL_NOLI']
+ __THINIT = dEtatInit['EVOL_THER']
+ _nume_ordre = dEtatInit['NUME_ORDRE']
+ IsPoursuite= True
+ else :
+ dEtatInit=None
+
+ ## Valeur par defaut du mot cle LOGICIEL
+ #if not LOGICIEL: LOGICIEL = os.path.join(aster.repout(), 'ecrevisse')
+
+ # RECUPERATION DES MOTS-CLES FACTEURS
+
+ l_dFISSURE=[]
+ for fissure in FISSURE:
+ dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+ for i in dFISSURE.keys():
+ if dFISSURE[i]==None : del dFISSURE[i]
+ l_dFISSURE.append(dFISSURE)
+
+ dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+ for i in dECOULEMENT.keys():
+ if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+ dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+ for i in dMODELE_ECRE.keys():
+ if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+ dCONVERGENCE_ECREVISSE=CONVERGENCE_ECREVISSE[0].cree_dict_valeurs(CONVERGENCE_ECREVISSE[0].mc_liste)
+ for i in dCONVERGENCE_ECREVISSE.keys():
+ if dCONVERGENCE_ECREVISSE[i]==None : del dCONVERGENCE_ECREVISSE[i]
+
+ dCOMP_INCR=COMP_INCR[0].cree_dict_valeurs(COMP_INCR[0].mc_liste)
+ for i in dCOMP_INCR.keys():
+ if dCOMP_INCR[i]==None : del dCOMP_INCR[i]
+
+ dNEWTON=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+ for i in dNEWTON.keys():
+ if dNEWTON[i]==None : del dNEWTON[i]
+
+ dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+ for i in dCONVERGENCE.keys():
+ if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+ # Recuperation des infos pour la convergence de la macro
+ dMacr_Conv = CONV_CRITERE[0].cree_dict_valeurs(CONV_CRITERE[0].mc_liste)
+ for i in dMacr_Conv.keys():
+ if dMacr_Conv[i]==None : del dMacr_Conv[i]
+
+ motclefsCALC_ECREVISSE = {}
+ motclefsCALC_ECREVISSE['COURBES'] = COURBES,
+
+
+
+
+
+ # -----------------------------------------------------------------------------------------------------
+ # Debut de la macro
+
+ # Si LIST_INST est un DEFI_LIST_REEL :
+ _liste_inst = LIST_INST.Valeurs()
+ if (debug):
+ print 'liste des instants liste_inst = ', _liste_inst
+
+ # Drapeaux pour les 1ers calculs et les 1eres definitions
+ IsDefineMaterMeca = False
+ EcrevisseExe = False # si l'execution d'Ecrevisse n'a pas plantee ou a ete realisee
+
+ # Table python devant contenir toutes les tables Ecrevisse
+ T_TABL_RES = None
+ T_DEB_RES = None
+ # Precision demandee pour converger sur le critere de la macro
+ # Nombre de decoupages succesifs d'un pas de temps
+ # Pas de temps en dessous duquel on ne decoupe plus
+ if dMacr_Conv.has_key('SUBD_NIVEAU'):
+ MacrNbDecoupage = dMacr_Conv['SUBD_NIVEAU']
+ if dMacr_Conv.has_key('SUBD_PAS_MINI'):
+ MacrPasMini = dMacr_Conv['SUBD_PAS_MINI']
+ MacrTempRef = dMacr_Conv['TEMP_REF']
+ MacrPresRef = dMacr_Conv['PRES_REF']
+ MacrCritere = dMacr_Conv['CRITERE']
+ if dMacr_Conv.has_key('PREC_CRIT'):
+ MacrPrecisCritere = dMacr_Conv['PREC_CRIT']
+ else:
+ MacrPrecisCritere = None
+ if dMacr_Conv.has_key('NUME_ORDRE_MIN'):
+ MacrNumeOrdre = dMacr_Conv['NUME_ORDRE_MIN']
+
+ #
+ # il faut 2 pas au minimum dans la liste
+ if (len(_liste_inst) < 2 ):
+ UTMESS('F','ECREVISSE0_20', vali=[2])
+
+ if (not IsPoursuite) :
+ _nume_ordre = 0
+ else :
+ # Dans le cas d'une poursuite :
+ # n reconstruit une nouvelle liste d'instant composee de l'ancienne liste jusqu'a l'instant recherche,
+ # puis de la nouvelle a partir de cet instant
+ # ainsi le _nume_ordre de la nouvelle liste correspond au nume_ordre de l'ancienne
+ __dico1 = __THINIT.LIST_VARI_ACCES()
+ _list_precedente = __dico1['INST']
+ _inst_init = _list_precedente[_nume_ordre-1]
+ try:
+ # si l'instant est dans la liste, on recupere l'index
+ _idx = _liste_inst.index(_inst_init)
+ except:
+ # on cherche le plus proche
+ idx = 0
+ found = False
+ for t in _liste_inst:
+ if t > _inst_init:
+ found = True
+ idx += 1
+ break
+ idx += 1
+ new_list = _list_precedente[0:_nume_ordre] # liste precedent jusqu'a l'instant a recalculer (inclu, ca permet de gerer le cas ou l'instant a recalculer n'est pas dans la nouvelle liste : il sera ajoute)
+ new_list.extend( _liste_inst[_idx+1:] ) # on lui ajoute la nouvelle liste a partir du l'instant a recalculer
+ _liste_inst = copy.copy(new_list)
+
+ ########################################################################################
+ # Debut boucle sur la liste d'instant
+ ########################################################################################
+ FinBoucle = False
+ while ( not FinBoucle ):
+ _inst = _liste_inst[_nume_ordre]
+ if ( debug ):
+ print 'Instant debut boucle', _inst
+ # On boucle jusqu'a convergence
+ NbIter = 0
+ while True:
+
+
+ if ( (not IsPoursuite) or EcrevisseExe) :
+ # Le temps que l'on traite
+ _inst_p_un = _liste_inst[_nume_ordre+1]
+ IsInitEcre= False
+ # Construction de la liste des pas
+ LES_PAS = DEFI_LIST_REEL( VALE=_liste_inst, )
+ if (debug):
+ print '=====> ===== ===== ===== <===='
+ print 'Iteration numero : ', NbIter
+ print 'Instant : ', _inst
+ print 'Instant+1 : ', _inst_p_un
+ print 'nume_ordre : ', _nume_ordre+1
+ print 'Donnee Ecrevisse : ', EcrevisseExe
+
+ # ---------------------
+ # THERMIQUE
+ # ---------------------
+ # Recuperation des chargements thermiques
+ _dEXCIT_THER = []
+ if EXCIT_THER:
+ for excit_i in EXCIT_THER:
+ dEXCIT_THER_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+ for j in dEXCIT_THER_i.keys():
+ if dEXCIT_THER_i[j]==None : del dEXCIT_THER_i[j]
+ _dEXCIT_THER.append(dEXCIT_THER_i)
+
+ #
+ # Definition des chargements thermiques venant d Ecrevisse
+ if ( EcrevisseExe ):
+ _dEXCIT_THER.append( _F(CHARGE=FLU1ECR0) )
+ _dEXCIT_THER.append( _F(CHARGE=FLU2ECR0) )
+
+ # Definition de l'etat initial
+ motclefs = {}
+ if (_nume_ordre == 0) :
+ # On verifie que temp_ref est bien renseigne dans AFFE_MATERIAU
+ try:
+ tref = CHAM_MATER['AFFE_VARC']['VALE_REF']
+ except:
+ UTMESS('F','ECREVISSE0_22',)
+
+ motclefs['ETAT_INIT']=[_F(VALE=tref, NUME_ORDRE=_nume_ordre)]
+ if ( debug ):
+ print 'thermique initialise avec tref'
+ else:
+ if (IsInit) :
+ motclefs['reuse']=__THINIT
+ motclefs['ETAT_INIT']=[_F(EVOL_THER=__THINIT, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'thermique initialise avec etat_initial'
+ else :
+ motclefs['reuse']=RTHERM
+ motclefs['ETAT_INIT']=[_F(EVOL_THER=RTHERM, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'thermique initialise avec instant precedent'
+
+ if (debug):
+ print '====> THER_LINEAIRE <===='
+ print ' Les charges thermiques'
+ print EXCIT_THER
+ #
+ if IsPoursuite :
+ __THINIT = THER_LINEAIRE(
+ MODELE = MODELE_THER,
+ CHAM_MATER = CHAM_MATER,
+ EXCIT = _dEXCIT_THER,
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs )
+
+ RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+ VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+ INFO=2,
+ )
+ RTHERM=__THINIT
+ else :
+ RTHERM=THER_LINEAIRE(
+ MODELE = MODELE_THER,
+ CHAM_MATER = CHAM_MATER,
+ EXCIT = _dEXCIT_THER,
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs
+ )
+
+ # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
+ RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+ VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+ INFO=2,
+ )
+
+ # Definition du materiau pour la mecanique : a faire une seule fois
+ if ( not IsDefineMaterMeca ):
+ motclefmater = {}
+ motclefmater['AFFE'] = []
+ motclefmater['AFFE_VARC'] = []
+
+ for j in CHAM_MATER['AFFE_VARC'] :
+ dvarc = j.cree_dict_valeurs(j.mc_liste)
+ for mc, val in dvarc.items():
+ if val == None:
+ del dvarc[mc]
+ motclefmater['AFFE_VARC'].append(dvarc)
+
+ for j in CHAM_MATER['AFFE'] :
+ daffe = j.cree_dict_valeurs(j.mc_liste)
+ for mc, val in daffe.items():
+ if val == None:
+ del daffe[mc]
+ motclefmater['AFFE'].append(daffe)
+
+
+ dvarc['EVOL'] = RTHERMPJ
+ motclefmater['MAILLAGE'] = CHAM_MATER['MAILLAGE']
+ __MATMEC=AFFE_MATERIAU(
+ **motclefmater
+ )
+ IsDefineMaterMeca = True
+
+ # ---------------------
+ # MECANIQUE
+ # ---------------------
+ _dEXCIT_MECA = []
+ # Recuperation des chargements mecaniques
+ if EXCIT_MECA:
+ for excit_i in EXCIT_MECA:
+ dEXCIT_MECA_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+ for j in dEXCIT_MECA_i.keys():
+ if dEXCIT_MECA_i[j]==None : del dEXCIT_MECA_i[j]
+ _dEXCIT_MECA.append(dEXCIT_MECA_i)
+
+
+ # Definition des chargements venant d'Ecrevisse
+ if ( EcrevisseExe ):
+ _dEXCIT_MECA.append( _F(CHARGE=MECAECR0) )
+
+ motclefs = {}
+
+ if (not IsPoursuite) :
+ if (_nume_ordre != 0):
+ motclefs['reuse'] = MECANIC
+ motclefs['ETAT_INIT']=[_F(EVOL_NOLI=MECANIC, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'etat meca initial = pas precedent'
+ else:
+ if (debug):
+ print 'etat meca initial : vierge'
+ else:
+ motclefs['reuse']=__EVINIT
+ motclefs['ETAT_INIT']=[_F(EVOL_NOLI=__EVINIT, NUME_ORDRE=_nume_ordre)]
+ if (debug):
+ print 'etat meca initial dReuseM', motclefs
+
+ if (debug):
+ print '====> STAT_NON_LINE <===='
+ if (debug):
+ print ' Les charges mecaniques'
+ print _dEXCIT_MECA
+
+
+ MECANIC=STAT_NON_LINE(
+ MODELE = MODELE_MECA,
+ CHAM_MATER = __MATMEC,
+ CARA_ELEM = CARA_ELEM,
+ EXCIT = _dEXCIT_MECA,
+ COMP_INCR = _F(**dCOMP_INCR),
+ INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+ NEWTON = _F(**dNEWTON),
+ CONVERGENCE = _F(**dCONVERGENCE),
+ SOLVEUR = _F(SYME='OUI'),
+ ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+ INFO = InfoAster,
+ **motclefs
+ )
+ # Destruction des concepts
+ # Thermique projete
+ # Liste des pas
+ DETRUIRE( CONCEPT=(_F(NOM=RTHERMPJ),_F(NOM=LES_PAS),),INFO=1,ALARME='NON',)
+
+ else :
+ # CAS OU LA MACRO EST REENTRANTE : ON RELANCE ECREVISSE POUR CONNAITRE
+ # LES CHARGEMENT A UTILISER POUR LES PROBLEMES THERMIQUES ET MECANIQUES
+ _inst_p_un=_inst
+ IsInitEcre = True
+
+ # -----------------------------------------------------------------------
+ # ECREVISSE : ATTENTION SI REPRISE CALCUL, ON RECALCULE LE DERNIER INSTANT
+ # -------------------------------------------------------------------------
+ # Si Ecrevisse a deja ete fait une fois.
+ # ==> Efface les concepts qui sont en sortie
+ if ( EcrevisseExe ):
+ DETRUIRE(
+ CONCEPT=(
+ _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),INFO=1,ALARME='NON',
+ )
+
+ # On remplace FONC_XXX par la valeur XXX correspondante a l'instant _inst_p_un
+ dECOULEMENT_ecrevisse = copy.copy(dECOULEMENT)
+ for fonc_name in ["PRES_ENTREE_FO", "PRES_SORTIE_FO", "PRES_PART_FO", "TITR_MASS_FO", "TEMP_ENTREE_FO"]:
+ if dECOULEMENT.has_key(fonc_name):
+ fonc = dECOULEMENT_ecrevisse.pop(fonc_name)
+ vale_name = fonc_name.replace('_FO', '')
+ dECOULEMENT_ecrevisse[vale_name] = fonc(_inst_p_un)
+
+
+ # Initialisation des concepts en sortie
+ MECAECR1=CO('MECAECR1')
+ FLU1ECR1=CO('FLU1ECR1')
+ FLU2ECR1=CO('FLU2ECR1')
+ TABLECR1=CO('TABLECR1')
+ DEBIECR1=CO('DEBIECR1')
+
+ if (debug):
+ print '====> ECREVISSE entree dans CALC_ECREVISSE <===='
+
+ if (not IsPoursuite) :
+
+ CALC_ECREVISSE(
+ CHARGE_MECA = MECAECR1,
+ CHARGE_THER1 = FLU1ECR1,
+ CHARGE_THER2 = FLU2ECR1,
+ TABLE = TABLECR1,
+ DEBIT = DEBIECR1,
+ MODELE_MECA = MODELE_MECA,
+ MODELE_THER = MODELE_THER,
+ ENTETE = ENTETE,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ RESULTAT=_F(THERMIQUE = RTHERM,
+ MECANIQUE = MECANIC,
+ INST = _inst_p_un, ),
+ # chemin d acces a Ecrevisse
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ # donnees necessaire pour ecrevisse
+ # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+ # activation eventuelle de TITR_VA et P_AIR
+
+ FISSURE=l_dFISSURE,
+ ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+ MODELE_ECRE=_F( **dMODELE_ECRE),
+
+ CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+ **motclefsCALC_ECREVISSE
+ );
+ else :
+ CALC_ECREVISSE(
+ CHARGE_MECA = MECAECR1,
+ CHARGE_THER1 = FLU1ECR1,
+ CHARGE_THER2 = FLU2ECR1,
+ TABLE = TABLECR1,
+ DEBIT = DEBIECR1,
+ MODELE_MECA = MODELE_MECA,
+ MODELE_THER = MODELE_THER,
+ ENTETE = ENTETE,
+ IMPRESSION = IMPRESSION,
+ INFO = INFO,
+ RESULTAT=_F(THERMIQUE = __THINIT,
+ MECANIQUE = __EVINIT,
+ INST = _inst_p_un, ),
+ # chemin d acces a Ecrevisse
+ LOGICIEL = LOGICIEL,
+ VERSION = VERSION,
+ # donnees necessaire pour ecrevisse
+ # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+ # activation eventuelle de TITR_VA et P_AIR
+
+ FISSURE=l_dFISSURE,
+ ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+ MODELE_ECRE=_F( **dMODELE_ECRE),
+
+ CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+ **motclefsCALC_ECREVISSE
+ );
+
+ if (debug):
+ print '====> ECREVISSE sortie de CALC_ECREVISSE <===='
+
+
+ # Recuperation des infos de la table resultat Ecrevisse
+ T_TABL_TMP1 = TABLECR1.EXTR_TABLE()
+ T_DEB_TMP1 = DEBIECR1.EXTR_TABLE()
+# # On ajoute deux colonnes supplementaires
+# _nb_ligne = len(T_DEB_TMP1["DEBTOT"])
+# T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*_nb_ligne
+# T_DEB_TMP1["INST"] = [_inst_p_un]*_nb_ligne
+
+ # Le calcul Ecrevisse c'est bien passe ?
+ EcrevisseExe = ( T_TABL_TMP1.values()['COTES'][0] != -1 )
+ #
+ if ( not EcrevisseExe ):
+ # Destruction des concepts de sortie, et on arrete tout
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),
+ INFO=1,ALARME='NON',
+ )
+ if ( not IsInit ):
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR0),
+ _F(NOM=FLU1ECR0),
+ _F(NOM=FLU2ECR0),
+ _F(NOM=TABLECR0),
+ _F(NOM=DEBIECR0),
+ ),
+ INFO=1,ALARME='NON',
+ )
+ FinBoucle = True
+ break
+ #
+ # A t'on atteint la convergence
+ # TABLECR0 table Ecrevisse a _inst
+ # TABLECR1 table Ecrevisse a _inst_p_un
+ # --------------------
+
+ if ( not IsInit ):
+ # On recupere la liste des temperatures a t et t+1
+ lst_T_0 = T_TABL_TMP0.values()['TEMP']
+ lst_T_1 = T_TABL_TMP1.values()['TEMP']
+ # Le maximum des ecarts
+ lst_T_diff_01 = []
+ for v1, v2 in zip(lst_T_0,lst_T_1):
+ lst_T_diff_01.append(abs(v1-v2))
+ max_T_diff_01 = max(lst_T_diff_01)
+
+ # On recupere la liste des pressions a t et t+1
+ lst_P_0 = T_TABL_TMP0.values()['PRESSION']
+ lst_P_1 = T_TABL_TMP1.values()['PRESSION']
+ # Le maximum des ecarts
+ lst_P_diff_01 = []
+ for v1, v2 in zip(lst_P_0,lst_P_1):
+ lst_P_diff_01.append(abs(v1-v2))
+ max_P_diff_01 = max(lst_P_diff_01)
+ #
+ # "TEMP_PRESS","EXPLICITE","TEMP","PRESS"
+ ErreurT = (max_T_diff_01/MacrTempRef)
+ ErreurP = (max_P_diff_01/MacrPresRef)
+ ErreurG = (ErreurT**2+ErreurP**2)**0.5
+ if ( MacrCritere == 'TEMP' ):
+ Erreur = ErreurT
+ elif ( MacrCritere == 'PRESS' ):
+ Erreur = ErreurP
+ else:
+ Erreur = ErreurG
+
+ if ( MacrCritere != 'EXPLICITE' ):
+ Convergence = ( Erreur <= MacrPrecisCritere )
+ #
+ if info2 :
+ # Info Critere
+ UTMESS('I', 'ECREVISSE0_35', valr=[_inst_p_un], valk=[MacrCritere,MacrPrecisCritere,Convergence])
+ # Info Convergence
+ UTMESS('I', 'ECREVISSE0_34', valr=[_inst_p_un,ErreurT,max_T_diff_01,ErreurP,max_P_diff_01,ErreurG])
+
+ else:
+ Convergence = True
+ if info2 :
+ UTMESS('I', 'ECREVISSE0_36', valr=[_inst_p_un])
+ # --------------------
+ #
+
+
+ if ( MacrCritere == 'EXPLICITE' ):
+ Convergence = True
+ else:
+ if ( (_nume_ordre != 0) and (_nume_ordre+1 <= MacrNumeOrdre) ):
+ UTMESS('A','ECREVISSE0_33', vali=[_nume_ordre+1,MacrNumeOrdre],valr=[_inst_p_un])
+ Convergence = True
+
+ if ( Convergence ):
+ nb_lignes_t1 = len(T_TABL_TMP1["COTES"])
+ # Ajout de deux colonnes supplementaires
+ # POUR LA TABLE ECREVISSE
+ T_TABL_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_lignes_t1
+ T_TABL_TMP1["INST"] = [_inst_p_un]*nb_lignes_t1
+
+ # POUR LA TABLE DES DEBITS
+ nb_ligne_t2 = len(T_DEB_TMP1["DEBTOT"])
+ T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_ligne_t2
+ T_DEB_TMP1["INST"] = [_inst_p_un]*nb_ligne_t2
+
+ #
+ # Ajout des infos dans la table finale
+ if ( IsInit ):
+ T_TABL_RES = T_TABL_TMP1
+ T_DEB_RES = T_DEB_TMP1
+ else:
+ T_TABL_RES = merge(T_TABL_RES, T_TABL_TMP1)
+ T_DEB_RES = merge(T_DEB_RES, T_DEB_TMP1)
+ T_TABL_RES.titr = 'TABLE_SDASTER CHARGEMENT ECREVISSE'
+ T_DEB_RES.titr = 'TABLE_SDASTER DEBIT ECREVISSE'
+ #
+ # RAZ des compteurs de division
+ NbIter = 0
+ # On memorise les concepts valides
+ MECAECR0 = MECAECR1
+ FLU1ECR0 = FLU1ECR1
+ FLU2ECR0 = FLU2ECR1
+ TABLECR0 = TABLECR1
+ DEBIECR0 = DEBIECR1
+ #
+ T_TABL_TMP0 = T_TABL_TMP1
+ if (not IsInitEcre) :
+ IsInit = False
+ if (info2):
+ UTMESS('I','ECREVISSE0_37', valr=[_inst_p_un])
+ break
+
+ else:
+ NbIter += 1
+ # A t'on le droit de decouper, par rapport au nombre de division
+ if ( NbIter > MacrNbDecoupage ):
+ FinBoucle = True
+ UTMESS('A','ECREVISSE0_30', valr=[_inst,_inst_p_un],vali=[MacrNbDecoupage])
+ break
+ #
+ # on divise le pas de temps par 2
+ tmp = (_inst + _inst_p_un )*0.5
+ # A t'on le droit de continuer, par rapport au pas de temps minimum
+ if ( (tmp - _inst) <= MacrPasMini ):
+ FinBoucle = True
+ UTMESS('A','ECREVISSE0_31', valr=[_inst,_inst_p_un,tmp,MacrPasMini])
+ break
+ #
+ if ( info2 ):
+ UTMESS('A','ECREVISSE0_32', valr=[_inst,_inst_p_un,tmp],vali=[NbIter])
+ # on insere le nouveau temps dans la liste des instants avant "_inst_p_un"
+ _liste_inst.insert(_nume_ordre+1,tmp)
+
+
+ # Convergence atteinte, on passe au pas de temps suivant, s'il en reste
+ if IsInitEcre :
+ continue
+ elif (_nume_ordre + 2 < len(_liste_inst)):
+ _nume_ordre += 1
+ else:
+ # On a fait tous les pas de temps
+ FinBoucle = True
+ #######################################################################################
+ # Fin boucle sur les pas de temps
+ #######################################################################################
+
+ # Creation du concept de la table en sortie
+ if ( T_TABL_RES != None ):
+ dprod = T_TABL_RES.dict_CREA_TABLE()
+ TABL_RES = CREA_TABLE(**dprod)
+ if ( T_DEB_RES != None ):
+ debprod = T_DEB_RES.dict_CREA_TABLE()
+ DEB_RES = CREA_TABLE(**debprod)
+
+ # Destruction des concepts temporaires
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR1),
+ _F(NOM=FLU1ECR1),
+ _F(NOM=FLU2ECR1),
+ _F(NOM=TABLECR1),
+ _F(NOM=DEBIECR1),
+ ),
+ INFO=1,ALARME='NON',
+ )
+
+ if (_nume_ordre != 0 ):
+ DETRUIRE(
+ CONCEPT=( _F(NOM=MECAECR0),
+ _F(NOM=FLU1ECR0),
+ _F(NOM=FLU2ECR0),
+ _F(NOM=TABLECR0),
+ _F(NOM=DEBIECR0),
+ ),
+ INFO=1,ALARME='NON',
+ )
+
+ return ier
-#@ MODIF macr_lign_coupe_ops Macro DATE 07/10/2008 AUTEUR PELLET J.PELLET
+#@ MODIF macr_lign_coupe_ops Macro DATE 08/04/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
########################################################################
# script PYTHON de creation du résultat local
+########################################################################
+
+########################################################################
+# verification que les points de la ligne de coupe sont dans la matiere
+def crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou):
+
+ import aster
+ import os,string,types
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ from Utilitai.Utmess import UTMESS
+ import os
+ POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+ DEFI_GROUP = self.get_cmd('DEFI_GROUP')
+
+ motscles={}
+ if m['NOM_CMP']!=None:
+ motscles['NOM_CMP']=m['NOM_CMP']
+ else:
+ motscles['TOUT_CMP']='OUI'
+ motscles['OPERATION']='EXTRACTION'
+
+ __tab=POST_RELEVE_T(ACTION=_F( INTITULE=newgrp,
+ RESULTAT = __remodr,
+ NOM_CHAM=NOM_CHAM,
+ GROUP_NO = groupe,**motscles ))
+
+ # dictb=table initiale (contenant éventuellement des noeuds hors matière)
+ dictb=__tab.EXTR_TABLE()
+ # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
+ listenoe_b = dictb.NOEUD.values()
+ # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
+ # (attention, on perd l'ordre des noeuds)
+ lno_b2 = set(listenoe_b)
+
+ # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
+ if m['NOM_CMP']!=None:
+ dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
+ lno_c2 = set(dictc.NOEUD.values())
+ else:# TOUT_CMP='OUI'
+ # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
+ a_suppr = set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
+ new_para = set(dictb.para)
+ new_para.difference_update(a_suppr)
+
+ lno_c2 = set()
+ for comp in new_para.difference(['NOEUD']):
+ dictc = getattr(dictb, comp).NON_VIDE()
+ lno_c2.update(dictc.NOEUD.values())
+
+ # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
+ # l_horsmat=liste des noeuds hors matière
+ l_matiere = [j for j in listenoe_b if j in lno_c2]
+ nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
+ l_horsmat = [j for j in listenoe_b if j not in lno_c2]
+
+ # si on est en présence de noeuds hors matière,
+ # on emet une alarme pour informer l'utilisateur
+ nbpoin=m['NB_POINTS']
+ reste=nbpoin-len(l_matiere)
+ if len(l_horsmat) > 0:
+
+ nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
+ cnom = list(__macou.NOMNOE.get())
+ l_coor = __macou.COORDO.VALE.get()
+ indent=os.linesep+' '*12
+ l_surlig = []
+ l_horslig = []
+ for j in l_matiere[:nderm+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_surlig.append(text_coordo)
+ for j in l_horsmat[:nderh+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_horslig.append(text_coordo)
+ UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
+
+ elif reste > 0:
+
+ cnom = list(__macou.NOMNOE.get())
+ l_coor = __macou.COORDO.VALE.get()
+ indent=os.linesep+' '*12
+ l_surlig = []
+ for j in l_matiere[:nderm+1]:
+ nuno=cnom.index(j.ljust(8))
+ text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+ l_surlig.append(text_coordo)
+ UTMESS('A','POST0_24',vali=[iocc,reste],valk=[indent.join(l_surlig)])
+
+ __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
+ CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
+
+ return
def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
return dist
########################################################################
-# verification que les points de la ligne de coupe sont dans la matiere
-def crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou):
-
- import aster
- from Accas import _F
- from Utilitai.Utmess import UTMESS
- import os
- from sets import Set
- POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
- DEFI_GROUP = self.get_cmd('DEFI_GROUP')
-
- motscles={}
- if m['NOM_CMP']!=None:
- motscles['NOM_CMP']=m['NOM_CMP']
- else:
- motscles['TOUT_CMP']='OUI'
- motscles['OPERATION']='EXTRACTION'
-
- __tab=POST_RELEVE_T(ACTION=_F( INTITULE=newgrp,
- RESULTAT = __remodr,
- NOM_CHAM=NOM_CHAM,
- GROUP_NO = groupe,**motscles ))
-
- # dictb=table initiale (contenant éventuellement des noeuds hors matière)
- dictb=__tab.EXTR_TABLE()
- # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
- listenoe_b = dictb.NOEUD.values()
- # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
- # (attention, on perd l'ordre des noeuds)
- lno_b2 = Set(listenoe_b)
-
- # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
- if m['NOM_CMP']!=None:
- dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
- lno_c2 = Set(dictc.NOEUD.values())
- else:# TOUT_CMP='OUI'
- # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
- a_suppr = Set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
- new_para = Set(dictb.para)
- new_para.difference_update(a_suppr)
-
- lno_c2 = Set()
- for comp in new_para.difference(['NOEUD']):
- dictc = getattr(dictb, comp).NON_VIDE()
- lno_c2.update(dictc.NOEUD.values())
-
- # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
- # l_horsmat=liste des noeuds hors matière
- l_matiere = [j for j in listenoe_b if j in lno_c2]
- nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
- l_horsmat = [j for j in listenoe_b if j not in lno_c2]
-
- # si on est en présence de noeuds hors matière,
- # on emet une alarme pour informer l'utilisateur
- if len(l_horsmat) > 0:
-
- nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
- cnom = list(__macou.NOMNOE.get())
- l_coor = __macou.COORDO.VALE.get()
- indent=os.linesep+' '*12
- l_surlig = []
- l_horslig = []
- for j in l_matiere[:nderm+1]:
- nuno=cnom.index(j.ljust(8))
- text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
- l_surlig.append(text_coordo)
- for j in l_horsmat[:nderh+1]:
- nuno=cnom.index(j.ljust(8))
- text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
- l_horslig.append(text_coordo)
- UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
-
- __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
- CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
-
- return
-########################################################################
# script PYTHON de creation d un maillage de ligne de coupe
def crea_mail_lig_coup(dimension,lignes,groups,arcs):
# détermination du type de résultat à créer
if nomgd[:6] == 'TEMP_R' : TYPE_RESU='EVOL_THER'
elif nomgd[:6] == 'DEPL_R' : TYPE_RESU='EVOL_ELAS'
+ elif nomgd[:6] == 'VAR2_R' : TYPE_RESU='EVOL_NOLI'
+ elif nomgd[:6] == 'VARI_R' : TYPE_RESU='EVOL_NOLI'
elif nomgd[:6] == 'SIEF_R' :
if NOM_CHAM[:4]=='SIGM':TYPE_RESU='EVOL_ELAS'
elif NOM_CHAM[:4]=='SIEF':TYPE_RESU='EVOL_NOLI'
if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele]
else : MODELE_1=self.jdc.current_context[n_modele]
+
+
+ if NOM_CHAM[5:9]=='ELGA' : UTMESS('F','POST0_18',valk=[NOM_CHAM,])
+
__recou=PROJ_CHAMP(METHODE='ELEM',
RESULTAT=RESULTAT,
MODELE_1=MODELE_1,
if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
if NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
-
+ iocc=0
for m in LIGN_COUPE :
+ iocc=iocc+1
motscles={}
motscles['OPERATION']=m['OPERATION']
if m['NOM_CMP']!=None:
groupe='LICOU'+str(ioc2)
nomgrma=' '
newgrp='LICOF'+str(ioc2)
- crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+ crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
groupe=newgrp
# on definit l'intitulé
elif AsType(RESULTAT).__name__ in ('evol_ther',) :
-
+ iocc=0
for m in LIGN_COUPE :
+ iocc=iocc+1
motscles={}
motscles['OPERATION']=m['OPERATION']
if m['NOM_CMP']!=None:
ioc2=ioc2+1
groupe='LICOU'+str(ioc2)
newgrp='LICOF'+str(ioc2)
- crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+ crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
groupe=newgrp
if m['INTITULE'] !=None : intitl=m['INTITULE']
else : intitl='l.coupe'+str(ioc2)
-#@ MODIF macro_elas_mult_ops Macro DATE 22/10/2007 AUTEUR PELLET J.PELLET
+#@ MODIF macro_elas_mult_ops Macro DATE 03/02/2010 AUTEUR MACOCCO K.MACOCCO
# -*- 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.
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
# ======================================================================
def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
- CHAR_MECA_GLOBAL,CHAR_CINE_GLOBAL,LIAISON_DISCRET,
+ CHAR_MECA_GLOBAL,LIAISON_DISCRET,
CAS_CHARGE,SOLVEUR,**args):
"""
Ecriture de la macro MACRO_ELAS_MULT
# Le concept sortant (de type mult_elas ou fourier_elas) est nommé
# 'nomres' dans le contexte de la macro
-
+
self.DeclareOut('nomres',self.sd)
ielas = 0
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={}
# boucle sur les items de CAS_CHARGE
nomchn=[]
+ lcharg=[]
iocc=0
for m in CAS_CHARGE:
iocc=iocc+1
+ # calcul de lcharg : liste des listes de char_meca (mots clé CHAR_MECA et CHAR_MECA_GLOBAL)
+ xx1=m['CHAR_MECA']
+ if type(xx1) != type((1,)) : xx1=(xx1,)
+ xx2=CHAR_MECA_GLOBAL
+ if type(xx2) != type((1,)) : xx2=(xx2,)
+ lchar1=[]
+ for chargt in (xx1+xx2) :
+ if chargt : lchar1.append(chargt)
+ lcharg.append(lchar1)
+
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']
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']
+ if len(lchar1) > 0 : motscles['CHARGE'] =lchar1
__nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
__nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
else :
if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
if CARA_ELEM : motscle2['CARA_ELEM']=CARA_ELEM
if CHAM_MATER or CARA_ELEM :
- if ielas :
+ if ielas :
motscles['AFFE']=[]
for m in CAS_CHARGE:
motscles['AFFE'].append(_F(MODELE=MODELE,
**motscle2) )
iocc=iocc+1
else:
- if ielas :
+ if ielas :
motscles['AFFE']=[]
for m in CAS_CHARGE:
motscles['AFFE'].append(_F(MODELE=MODELE,
iocc=0
for m in CAS_CHARGE:
+ lchar1=lcharg[iocc]
iocc=iocc+1
if m['OPTION']:
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:
- for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
- elif CHAR_CINE_GLOBAL:
- for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+ for chargt in lchar1 : motscles['EXCIT'].append(_F(CHARGE=chargt))
CALC_ELEM(reuse=nomres,
RESULTAT=nomres,
- MODELE=MODELE,
REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
NUME_COUCHE=m['NUME_COUCHE'],),
OPTION=tuple(liste_el),
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:
- for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
- elif CHAR_CINE_GLOBAL:
- for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+ for chargt in lchar1 : motscles['EXCIT'].append(_F(CHARGE=chargt))
CALC_NO(reuse=nomres,
RESULTAT=nomres,
- MODELE=MODELE,
OPTION=tuple(liste_no),
**motscles)
-#@ MODIF macro_matr_asse_ops Macro DATE 17/11/2008 AUTEUR DELMAS J.DELMAS
+#@ MODIF macro_matr_asse_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
if CHARGE != None:
if option[0:9] not in ('MASS_THER','RIGI_GEOM'):
motscles['CHARGE'] =CHARGE
- if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER
+ if CHAM_MATER != None and option != 'RIGI_GEOM' : motscles['CHAM_MATER'] =CHAM_MATER
if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM
if INST != None: motscles['INST'] =INST
self.DeclareOut('mm',m['MATRICE'])
motscles={'OPTION':option}
- if CHAR_CINE != None:
+ if CHAR_CINE != None:
mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num,CHAR_CINE=CHAR_CINE)
else:
mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num)
-#@ MODIF post_gp_ops Macro DATE 15/04/2008 AUTEUR MACOCCO K.MACOCCO
+#@ MODIF post_gp_ops Macro DATE 18/11/2009 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
'YOUNG' : CallRCVALE(TEMP, 'E', MATER),
'NU' : CallRCVALE(TEMP, 'NU', MATER),
}
- if is_2D:
- dict_constantes['R'] = self['RAYON_AXIS']
- else:
- dict_constantes['R'] = ep_tranche
-
# 3.3. ----- calcul de Kj(G)
l_tabi = []
if is_2D:
# fusion avec TEMP, E et nu
tab = merge(tab, t_relev, 'NUME_ORDRE')
- tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'),
- { 'R' : self['RAYON_AXIS'] })
+ tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'))
# renomme G en G_i
tab.Renomme('G', 'G_%d' % (k + 1))
else:
return valres
# -----------------------------------------------------------------------------
-def fKj(G, YOUNG, NU, R=1):
+def fKj(G, YOUNG, NU):
"""Calcul de Kj à partir de G (formule d'Irwin)
- R n'intervient pas en 3D
"""
- Kj=(abs(G / R * YOUNG / (1.0 - NU**2)))**0.5
+ Kj=(abs(G * YOUNG / (1.0 - NU**2)))**0.5
return Kj
# -----------------------------------------------------------------------------
-#@ MODIF post_k1_k2_k3_ops Macro DATE 22/12/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF post_k1_k2_k3_ops Macro DATE 08/04/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# en sortie : xyza = Coordonnees du point et abscisse
n = len(Coorfo) / 4
if ( s0 < Coorfo[3] ) :
- xyz = [Coorfo[0],Coorfo[1],Coorfo[2]]
+ xyz = [Coorfo[0],Coorfo[1],Coorfo[2],s0]
return xyz
if ( s0 > Coorfo[-1] ) :
- xyz = [Coorfo[-4],Coorfo[-3],Coorfo[-2]]
+ xyz = [Coorfo[-4],Coorfo[-3],Coorfo[-2],s0]
return xyz
i = 1
while s0 > Coorfo[4*i+3]:
tabsup=TlibS[ino].EXTR_TABLE()
DETRUIRE(CONCEPT=_F(NOM=TlibS[ino]),INFO=1)
elif RESULTAT :
- __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
- NOEUD=Lnosup[ino],
- RESULTAT=RESULTAT,
- NOM_CHAM='DEPL',
- TOUT_ORDRE='OUI',
- NOM_CMP=('DX','DY','DZ',),
- OPERATION='EXTRACTION',),);
+ if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+ __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+ NOEUD=Lnosup[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY',),
+ OPERATION='EXTRACTION',),);
+ else :
+ __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+ NOEUD=Lnosup[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ',),
+ OPERATION='EXTRACTION',),);
tabsup=__TSUP.EXTR_TABLE()
DETRUIRE(CONCEPT=_F(NOM=__TSUP),INFO=1)
else :
tabinf=TlibI[ino].EXTR_TABLE()
DETRUIRE(CONCEPT=_F(NOM=TlibI[ino]),INFO=1)
elif RESULTAT :
- __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
- NOEUD=Lnoinf[ino],
- RESULTAT=RESULTAT,
- NOM_CHAM='DEPL',
- TOUT_ORDRE='OUI',
- NOM_CMP=('DX','DY','DZ',),
- OPERATION='EXTRACTION',),);
+ if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+ __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+ NOEUD=Lnoinf[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY'),
+ OPERATION='EXTRACTION',),);
+ else :
+ __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+ NOEUD=Lnoinf[ino],
+ RESULTAT=RESULTAT,
+ NOM_CHAM='DEPL',
+ TOUT_ORDRE='OUI',
+ NOM_CMP=('DX','DY','DZ',),
+ OPERATION='EXTRACTION',),);
tabinf=__TINF.EXTR_TABLE()
DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)
else :
-#@ MODIF propa_fiss_ops Macro DATE 20/10/2008 AUTEUR GALENNE E.GALENNE
+#@ MODIF propa_fiss_ops Macro DATE 18/05/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# On importe les definitions des commandes a utiliser dans la macro
ASSE_MAILLAGE =self.get_cmd('ASSE_MAILLAGE' )
LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE' )
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER' )
CREA_TABLE =self.get_cmd('CREA_TABLE' )
CALC_TABLE =self.get_cmd('CALC_TABLE' )
PROPA_XFEM = self.get_cmd('PROPA_XFEM' )
# Sauvegarde (maillage xfem et maillage concatene)
MA_XFEM2 = args['MA_XFEM2']
if MA_XFEM2 != None : self.DeclareOut('ma_xfem2',MA_XFEM2)
- __MA = mm.ToAster(unite=39)
+
+ unit = mm.ToAster()
+ DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
self.DeclareOut('ma_xfem2',MA_XFEM2)
- ma_xfem2=LIRE_MAILLAGE(UNITE=39);
+ ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
MA_TOT2 = args['MA_TOT2']
if MA_TOT2 != None : self.DeclareOut('ma_tot',MA_TOT2)
# Sauvegarde (maillage xfem et maillage concatene)
MA_XFEM2 = args['MA_XFEM2']
if MA_XFEM2 != None : self.DeclareOut('ma_xfem2',MA_XFEM2)
- __MA = mm.ToAster(unite=39)
+ unit = mm.ToAster()
+ DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
self.DeclareOut('ma_xfem2',MA_XFEM2)
- ma_xfem2=LIRE_MAILLAGE(UNITE=39);
+ ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
MA_TOT2 = args['MA_TOT2']
if MA_TOT2 != None : self.DeclareOut('ma_tot',MA_TOT2)
-#@ MODIF co_fonction SD DATE 22/04/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF co_fonction SD DATE 05/01/2010 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
lx = lbl[0:dim]
ly = lbl[dim:2*dim]
elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
- if self.etape['VALE'] != None:
+ if self.etape['VALE'] is not None:
lbl = list(self.etape['VALE'])
dim = len(lbl)
lx = [lbl[i] for i in range(0,dim,2)]
ly = [lbl[i] for i in range(1,dim,2)]
- elif self.etape['VALE_PARA']!=None:
+ elif self.etape['VALE_PARA'] is not None:
lx = self.etape['VALE_PARA'].Valeurs()
ly = self.etape['VALE_FONC'].Valeurs()
+ elif self.etape['ABSCISSE'] is not None:
+ lx = self.etape['ABSCISSE']
+ ly = self.etape['ORDONNEE']
+ else:
+ raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+ "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+ "dans le fichier de commandes courant.")
else:
raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
"PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
- "dans le jdc courant.")
+ "dans le fichier de commandes courant.")
return [lx, ly]
def Absc(self):
"""Retourne la liste des abscisses"""
for i in range(dim):
lr.append(lbl[dim+2*i])
li.append(lbl[dim+2*i+1])
- elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION':
+ elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
+ and self.etape['VALE_C'] is not None:
lbl=list(self.etape['VALE_C'])
dim=len(lbl)
lx=[lbl[i] for i in range(0,dim,3)]
Utilitaire sur le catalogue des structures de données.
"""
+__revision__ = "$Id: utilsd.py,v 1.7.4.2 2010-06-03 08:51:16 pnoyret Exp $"
import sys
import os
rep_macro = os.path.dirname(__file__)
sys.path.insert(0,rep_macro)
rep_macro=os.path.join(rep_macro,'Macro')
-sys.path.insert(0,rep_macro)
+rep_sd = os.path.dirname(__file__)
+
+if sys.modules.has_key("SD"):
+ del sys.modules["SD"]
+for k in sys.modules.keys():
+ if k[0:3] == "SD.":
+ del sys.modules[k]
+
from cata import *
from math import ceil
from __future__ import division
__version__ = "$Name: $"
+__Id__ = "$Id: cata.py,v 1.7.4.2 2010-06-03 08:50:35 pnoyret Exp $"
import Accas
from Accas import *
MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'),
) ;
-#& MODIF COMMUN DATE 06/05/2009 AUTEUR MACOCCO K.MACOCCO
+#& MODIF COMMUN DATE 27/10/2009 AUTEUR TARDIEU N.TARDIEU
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG
fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
RESI_ABSO =SIMP(statut='o',typ='R',
fr="Critère de convergence (niveau d'interpénétration autorisé)"),
- REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
+ REAC_ITER =SIMP(statut='f',typ='I',defaut=20, fr="Fréquence de réinitialisation de la conjugaison"),
ITER_GCP_MAXI =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"),
REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
into=("AUTOMATIQUE","CONTROLE","SANS")),
-#& MODIF COMMUN DATE 14/10/2008 AUTEUR DELMAS J.DELMAS
+#& MODIF COMMUN DATE 29/09/2009 AUTEUR GNICOLAS G.NICOLAS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
"ERZ2_ELEM_SIGM",
"QIRE_ELEM_SIGM",
"QIRE_ELNO_ELEM",
+ "QIRE_NOEU_ELEM",
"QIZ1_ELEM_SIGM",
"QIZ2_ELEM_SIGM",
"SING_ELEM",
),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 24/03/2009 AUTEUR PELLET J.PELLET
+#& MODIF COMMANDE DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.calc_ecrevisse_ops import calc_ecrevisse_ops
+
+def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,**args):
+
+ self.type_sdprod(CHARGE_MECA,char_meca)
+ self.type_sdprod(CHARGE_THER1,char_ther)
+ self.type_sdprod(CHARGE_THER2,char_ther)
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(DEBIT,table_sdaster)
+ return None
+
+
+
+CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecrevisse_prod,reentrant='n',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ regles = (UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
+# ********************************************
+ CHARGE_MECA =SIMP(statut='o',typ=CO),
+ CHARGE_THER1 =SIMP(statut='o',typ=CO),
+ CHARGE_THER2 =SIMP(statut='o',typ=CO),
+ TABLE =SIMP(statut='o',typ=CO),
+ DEBIT =SIMP(statut='o',typ=CO),
+
+
+# MODELES MECANIQUES
+# ********************************************
+ MODELE_MECA =SIMP(statut='o',typ=modele_sdaster),
+ MODELE_THER =SIMP(statut='o',typ=modele_sdaster),
+
+
+# DONNEES GEOMETRIQUES RELATIVES AUX RESULTATS
+# ********************************************
+ RESULTAT =FACT(statut='o',min=1,max=1,
+ MECANIQUE =SIMP(statut='o',typ=resultat_sdaster),
+ THERMIQUE =SIMP(statut='o',typ=resultat_sdaster),
+ regles=(EXCLUS('NUME_ORDRE','INST'),),
+ NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+ INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+ ),
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+
+ FISSURE =FACT(statut='o',min=1,max='**',
+ PREFIXE_FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,8),),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+ fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+ GROUP_NO_ORIG =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ GROUP_NO_EXTR =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+ OUVERT_REMANENTE =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+ TORTUOSITE =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+ fr="Coefficient de tortuosite de la fissure" ),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section", ),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section", ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+
+ ECOULEMENT =FACT(statut='o',min=1,max=1,
+ PRES_ENTREE =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='o',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE =FACT(statut='o',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+# GENERAL
+# *******
+
+ COURBES =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+ ENTETE =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+) ;
+#& MODIF COMMANDE DATE 09/11/2009 AUTEUR LEBOUVIER F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
EXCIT =FACT(statut='f',max='**',
fr="Charges contenant les températures, les efforts répartis pour les poutres...",
regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
- CHARGE =SIMP(statut='o',typ=char_meca ),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
COEF_MULT =SIMP(statut='f',typ='R'),
(type(OPTION)==type(()) and 'SIEF_ELGA_DEPL' in OPTION ) ",
fr="charge contenant les temperatures ou autre charge",
EXCIT =FACT(statut='f',max='**',
- CHARGE =SIMP(statut='o',typ=char_meca ),),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
),
),
fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
EXCIT =FACT(statut='f',max='**',
regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
- CHARGE =SIMP(statut='f',typ=char_meca ),
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca) ),
FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
FONC_MULT_C =SIMP(statut='f',typ=fonction_c),
COEF_MULT =SIMP(statut='f',typ='R'),
(type(OPTION)==type(()) and 'EPME_ELGA_DEPL' in OPTION ) ",
fr="charge contenant les temperatures",
EXCIT =FACT(statut='f',max='**',
- CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),),
),
),
b_ener =BLOC( condition = "TYPE_OPTION=='ENER'",
(type(OPTION)==type(()) and 'ECIN_ELEM_DEPL' in OPTION ) ",
fr="charge contenant les temperatures",
EXCIT =FACT(statut='f',max='**',
- CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),),
),
),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 21/10/2008 AUTEUR NISTOR I.NISTOR
+#& MODIF COMMANDE DATE 03/02/2010 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG
from Macro.calc_essai_ops import calc_essai_ops
-def calc_essai_prod(self,RESU_FLUDELA,RESU_IDENTIFICATION,RESU_TURBULENT, RESU_MODIFSTRU,**args):
+def calc_essai_prod(self,RESU_IDENTIFICATION, RESU_MODIFSTRU,**args):
- if RESU_FLUDELA != None:
- for res in RESU_FLUDELA:
- self.type_sdprod(res['TABLE'],table_sdaster)
if RESU_IDENTIFICATION != None:
for res in RESU_IDENTIFICATION:
self.type_sdprod(res['TABLE'],table_fonction)
- if RESU_TURBULENT != None:
- for res in RESU_TURBULENT:
- self.type_sdprod(res['FONCTION'],fonction_sdaster)
MTYPES = {
reentrant = 'n',
UIinfo = {"groupes":("Outils métier",)},
fr = "Outil de post-traitement interactif pour Meidee ",
- UNITE_FIMEN = SIMP( statut='f',typ='I',max='**' ),
INTERACTIF = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
- RESU_FLUDELA = FACT( statut='f',max='**',
- TABLE = SIMP(statut='f', typ=CO),
- ),
- RESU_TURBULENT = FACT( statut='f',max=1,
- FONCTION = SIMP(statut='f', typ=CO),
- ),
RESU_IDENTIFICATION = FACT( statut='f',max='**',
TABLE = SIMP(statut='f', typ=CO),
),
BASE_LMME=SIMP(statut='f',typ=CO,defaut=None),
MODE_STA=SIMP(statut='f',typ=CO,defaut=None),
),
- UNITE_RESU = SIMP( statut='f',typ='I'),
b_inter = BLOC( condition="INTERACTIF=='NON'",
EPS = SIMP(statut='f',typ='R', defaut = 0.)
)
),
- MEIDEE_FLUDELA = FACT( statut='f', max='**',
- MESURE1 = SIMP(statut='o',typ=mode_meca),
- MESURE2 = SIMP(statut='o',typ=mode_meca),
- MESURE3 = SIMP(statut='o',typ=mode_meca),
- BASE = SIMP(statut='o',typ=mode_meca),
- ),
- MEIDEE_TURBULENT = FACT( statut='f', max='**',
- INTE_SPEC = SIMP(statut='o',typ=table_sdaster),
- NUME_MODE_DECONV = SIMP(statut='f',typ='I',validators=NoRepeat(),
- max=1,defaut=0),
- NUME_MODE_LOCAL = SIMP(statut='f',typ='I',validators=NoRepeat(),
- max='**',defaut=0),
- BASE = SIMP(statut='o',typ=mode_meca),
- MESURE = SIMP(statut='o',typ=(mode_meca,base_modale)),
- ),
IDENTIFICATION = FACT( statut='f',max='**',
ALPHA = SIMP(statut='f',typ='R', defaut = 0.),
EPS = SIMP(statut='f',typ='R', defaut = 0.),
MESURE = SIMP(statut='o', typ=mode_meca),
MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
- RESOLUTION = SIMP(statut='o', typ='TXM',
- into=('ES', 'LMME')),
+ RESOLUTION = SIMP(statut='f', typ='TXM',
+ into=('ES', 'LMME'), defaut='ES'),
b_resol = BLOC( condition = "RESOLUTION=='LMME'",
MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
),
),
# Si on realise une modification structurale, on donne les DDL capteurs et interface
- b_inter = BLOC( condition="MODIFSTRUCT!=None",
+ b_modif = BLOC( condition="MODIFSTRUCT!=None",
GROUP_NO_CAPTEURS = FACT( statut='f', max='**',
- GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
- NOM_CMP = SIMP(statut='f',typ='TXM', max='**'),
+ GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+ NOM_CMP = SIMP(statut='o',typ='TXM', max='**'),
),
GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
- GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
- NOM_CMP = SIMP(statut='f',typ='TXM', max='**'),
+ GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+ NOM_CMP = SIMP(statut='o',typ='TXM', max='**'),
),
),
),
INFO =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 12/11/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
"DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
"DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
- HISTOIRE =FACT(statut='o',
- RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+
+ b_sigm =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
+ fr="Calcul a partir d un champ de contraintes.",
+ HISTOIRE =FACT(statut='o',
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,
evol_noli) ),
- EQUI_GD =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
- into=("VMIS_SG","INVA_2_SG") ),
- ),
+ EQUI_GD =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+ into=("VMIS_SG",) ),
+ ),
+ ),
+ b_epsi =BLOC(condition = "OPTION != 'DOMA_ELNO_SIGM' and OPTION != 'DOMA_ELGA_SIGM'",
+ fr="Calcul a partir d un champ de déformations.",
+ HISTOIRE =FACT(statut='o',
+ RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+ evol_noli) ),
+ EQUI_GD =SIMP(statut='o',typ='TXM',defaut="INVA_2_SG",
+ into=("INVA_2_SG",) ),
+ ),
+ ),
DOMMAGE =SIMP(statut='o',typ='TXM',
into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",
"TAHERI_MIXTE",) ),
),
),
) ;
-#& MODIF COMMANDE DATE 17/11/2008 AUTEUR DELMAS J.DELMAS
+#& MODIF COMMANDE DATE 06/10/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
),
b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
- CHAM_MATER =SIMP(statut='o',typ=cham_mater ),
+ CHAM_MATER =SIMP(statut='f',typ=cham_mater ),
CARA_ELEM =SIMP(statut='o',typ=cara_elem ),
CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
) ;
-#& MODIF COMMANDE DATE 06/10/2008 AUTEUR DEVESA G.DEVESA
+#& MODIF COMMANDE DATE 09/11/2009 AUTEUR LEBOUVIER F.LEBOUVIER
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
CHAM_MATER =SIMP(statut='f',typ=cham_mater),
CARA_ELEM =SIMP(statut='f',typ=cara_elem),
EXCIT =FACT(statut='f',max='**',
- CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
+ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),
FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
);
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 30/06/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG
VALE_K = SIMP(statut='f',typ='TXM',max='**'),
),
b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
- VALE_K = SIMP(statut='f',typ='TXM',max='**'),
+ VALE_K = SIMP(statut='o',typ='TXM',max='**'),
),
b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
),
SANS_CMP =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 12/11/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
TRI_SPEC =SIMP(statut='f',typ='TXM',into=("OUI",),
fr="Excitation suivant les trois axes avec trois spectres"),
b_axe =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
- SPEC_OSCI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),),
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),),
ECHELLE =SIMP(statut='f',typ='R',),
),
b_tri_axe =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
- SPEC_OSCI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),),
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),),
ECHELLE =SIMP(statut='f',typ='R',),
),
b_tri_spec =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes avec trois spectres",
- SPEC_OSCI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),min=3,max=3 ),
+ SPEC_OSCI =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
ECHELLE =SIMP(statut='f',typ='R',min=3,max=3),
),
NATURE =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
),
INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 09/02/2010 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
# ======================================================================
-# RESPONSABLE COURTOIS M.COURTOIS
-DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentrant='n',
+# RESPONSABLE PEYRARD C.PEYRARD
+
+from Macro.defi_fonc_elec_ops import defi_fonc_elec_ops
+
+DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction_sdaster,reentrant='n',
UIinfo={"groupes":("Outils métier",)},
fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
regles=(UN_PARMI('COUR_PRIN','COUR'),
DIST =SIMP(statut='f',typ='R',defaut=1.0E+0),
),
INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
-) ;
+)
#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
ang="Value of the parameter"),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 18/11/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_sdaster,
reentrant='n',UIinfo={"groupe":("Maillage",)},
fr="Creation partitionnement en sous-domaines pour FETI",
- regles=(UN_PARMI('MAILLAGE','MODELE'),),
+ regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
+
+ NB_PART =SIMP(statut='o',typ='I',val_min=2),
MAILLAGE =SIMP(statut='f',typ=maillage_sdaster),
MODELE =SIMP(statut='f',typ=modele_sdaster),
- NB_PART =SIMP(statut='o',typ='I',val_min=2),
EXCIT =FACT(statut='f',max='**',
CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 24/03/2009 AUTEUR PELLET J.PELLET
+#& MODIF COMMANDE DATE 02/06/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
RIGI_NOR =SIMP(statut='f',typ='R' ),
AMOR_NOR =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
RIGI_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
- AMOR_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+ AMOR_TAN =SIMP(statut='f',typ='R' ),
COULOMB =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
LAME_FLUIDE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
INFO =SIMP(statut='f',typ='I',into=(1,2) ),
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 05/08/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
UIinfo={"groupes":("Gestion du travail",)},
+#
+# FIN est appelé prématurément en cas d'exception ("SIGUSR1", ArretCPUError,
+# NonConvergenceError..., erreurs <S> ou erreurs <F> récupérées).
+# En cas d'ArretCPUError, on limite au maximum le travail à faire dans FIN.
+# Pour cela, on force certains mots-clés dans Execution/E_JDC.py.
+#
FORMAT_HDF =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
typ='TXM',defaut="NON",into=("OUI","NON",) ),
RETASSAGE =SIMP(fr="provoque le retassage de la base GLOBALE",
PRECISION =SIMP(statut='o',typ='R',),),),
TITRE =SIMP(statut='f',typ='TXM',max='**'),
) ;
-#& MODIF COMMANDE DATE 30/09/2008 AUTEUR REZETTE C.REZETTE
+#& MODIF COMMANDE DATE 08/04/2010 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
),
b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
(TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
- UNITE =SIMP(statut='f',typ='I',defaut= 19 ),
NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU_DEPL","SIEF_NOEU",) ),
REDEFI_ORIENT=FACT(statut='f',max='**',
regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
# ---------
b_med =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
UNITE =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
- FORMAT_MED =FACT(statut='f',max='**',
+ FORMAT_MED =FACT(statut='o',max='**',
regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),),
NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
NOM_CHAM_MED =SIMP(statut='o',typ='TXM', fr="Nom du champ dans le fichier MED.", ),
b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
PRECISION =SIMP(statut='o',typ='R',),),
)
+#& MODIF COMMANDE DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.macr_ecre_calc_ops import macr_ecre_calc_ops
+
+def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
+
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(DEBIT,table_sdaster)
+ return None
+
+MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecre_calc_prod,reentrant='n',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ regles = (UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
+# ********************************************
+ TABLE =SIMP(statut='o',typ=CO),
+ DEBIT =SIMP(statut='o',typ=CO),
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+
+ FISSURE =FACT(statut='o',min=1,max=1,
+ LONGUEUR =SIMP(statut='o',typ='R',val_min=0.E+0,fr="Longueur de la fissure [zl]"),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]"),
+ ANGLE =SIMP(statut='o',typ='R',fr="Angle par rapport a l'ascendante verticale (degres)"),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]"),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]"),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant le grand axe de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le grand axe de la section",),
+ LISTE_COTES_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section",),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant la hauteur de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_AH =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la hauteur de la section",),
+ LISTE_COTES_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",
+ validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section",),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+
+ ECOULEMENT =FACT(statut='f',min=1,max=1,
+ PRES_ENTREE =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+# *************************************************************
+
+ TEMPERATURE =FACT(statut='f',min=1,max=1,
+ GRADIENT =SIMP(statut='o',typ='TXM',into=("FOURNI","IMPOSE","CALCULE"),
+ fr="Modele de calcul du gradient de temperature [imograd]" ),
+ b_gradient_fourni =BLOC(condition="GRADIENT=='FOURNI'",fr="Distribution de temperature fournie [imograd=-1]",
+ LISTE_COTES_TEMP =SIMP(statut='o',typ='R',max='**',fr="Liste des cotes pour les temperatures",
+ validators=NoRepeat() ),
+ LISTE_VAL_TEMP =SIMP(statut='o',typ='R',max='**',fr="Liste des valeurs de temperature", ),
+ ),
+ b_gradient_impose =BLOC(condition="GRADIENT=='IMPOSE'",fr="Distribution imposee de temperature [imograd=0]",
+ TEMP1 =SIMP(statut='o',typ='R',
+ fr="Gradient de temperature de la paroi le long de l'ecoulement (degC/m) [tm1]", ),
+ TEMP2 =SIMP(statut='o',typ='R',fr="Temperature de la paroi a l'entree (degC) [tm2]", ),
+ ),
+ b_gradient_calcule =BLOC(condition="GRADIENT=='CALCULE'",fr="Profil de temperature calcule [imograd=1]",
+ EPAISSEUR_PAROI =SIMP(statut='o',typ='R',fr="Epaisseur de la paroi (m) [epp]", ),
+ CONVECTION_AMONT =SIMP(statut='o',typ='R',
+ fr="Coefficient de convection a la surface de la paroi cote amont (W/degC/m2) [alphe]", ),
+ CONVECTION_AVAL =SIMP(statut='o',typ='R',
+ fr="Coefficient de convection a la surface de la paroi cote aval (W/degC/m2) [alphs]", ),
+ LAMBDA =SIMP(statut='o',typ='R',fr="Conduction thermique de la paroi (W/degC/m) [lambd]", ),
+ TEMP_FLUIDE_AVAL =SIMP(statut='o',typ='R',fr="Temperature du fluide cote aval (degC) [ts]", ),
+ ),
+ ),
+
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='f',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]"),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]"),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]"),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]"),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]"),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE =FACT(statut='f',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+
+# GENERAL
+# *******
+
+ COURBES =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+ ENTETE =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+) ;
+#& MODIF COMMANDE DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009 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 BOTTONI M.BOTTONI
+
+from Macro.macr_ecrevisse_ops import macr_ecrevisse_ops
+
+def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
+ # On definit ici les concepts produits
+ self.type_sdprod(TABLE,table_sdaster)
+ self.type_sdprod(TEMPER,evol_ther)
+ self.type_sdprod(DEBIT,table_sdaster)
+ # concept retourne
+ return evol_noli
+
+
+
+MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecrevisse_prod,reentrant='f',
+ UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+ reuse =SIMP(statut='f',typ='evol_noli'),
+ regles = (EXCLUS('TEMPER','ETAT_INIT'),
+ UN_PARMI('LOGICIEL','VERSION'),),
+
+# CONCEPT SORTANT
+# ********************************************
+ TABLE =SIMP(statut='f',typ=CO),
+ DEBIT =SIMP(statut='f',typ=CO),
+ TEMPER =SIMP(statut='f',typ=CO),
+
+# ETAT_INITIAL
+# ********************************************
+ ETAT_INIT =FACT(statut='f',
+ EVOL_NOLI =SIMP(statut='o',typ=evol_noli),
+ EVOL_THER =SIMP(statut='o',typ=evol_ther),
+ NUME_ORDRE =SIMP(statut='o',typ='I'),
+ ),
+
+
+# MODELES MECANIQUES
+# ********************************************
+ MODELE_MECA =SIMP(statut='o',typ=modele_sdaster),
+ MODELE_THER =SIMP(statut='o',typ=modele_sdaster),
+
+
+# DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+# *******************************************
+ FISSURE =FACT(statut='o',min=1,max='**',
+ PREFIXE_FICHIER =SIMP(statut='f',typ='TXM',validators=LongStr(1,8)),
+ GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+ fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+ GROUP_NO_ORIG =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ GROUP_NO_EXTR =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+ ZETA =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+ RUGOSITE =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+ TORTUOSITE =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+ fr="Coefficient de tortuosite de la fissure" ),
+ OUVERT_REMANENTE =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+ SECTION =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+ b_section_ellipse =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant le petit axe de la section",
+ validators=NoRepeat() ),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant le petit axe de la section", ),
+ ),
+ b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+ LISTE_COTES_BL =SIMP(statut='f',typ='R',max='**',
+ fr="Liste des cotes des points definissant la largeur de la section",validators=NoRepeat()),
+ LISTE_VAL_BL =SIMP(statut='o',typ='R',max='**',
+ fr="Liste des valeurs des points definissant la largeur de la section", ),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A L"ECOULEMENT
+# ********************************
+ ECOULEMENT =FACT(statut='o',min=1,max=1,
+ regles=(UN_PARMI('PRES_ENTREE','PRES_ENTREE_FO'),
+ UN_PARMI('PRES_SORTIE','PRES_SORTIE_FO'),
+ ),
+ PRES_ENTREE =SIMP(statut='f',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression de stagnation a l'entree (Pa) [pe]" ),
+ PRES_SORTIE =SIMP(statut='f',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+ PRES_SORTIE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression de stagnation a la sortie (Pa) [ps]" ),
+ FLUIDE_ENTREE =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+ b_condition_1 =BLOC(condition="FLUIDE_ENTREE==1",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Eau sous-refroidie ou saturee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_2 =BLOC(condition="FLUIDE_ENTREE==2",
+ regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO')),
+ fr="Fluide diphasique",
+ TITR_MASS =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ TITR_MASS_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+ ),
+ b_condition_3 =BLOC(condition="FLUIDE_ENTREE==3",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Vapeur saturee ou surchauffee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ b_condition_4 =BLOC(condition="FLUIDE_ENTREE==4",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO'),
+ UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+ fr="Air + vapeur surchauffee",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ PRES_PART =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ PRES_PART_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_5 =BLOC(condition="FLUIDE_ENTREE==5",
+ regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO'),
+ UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+ fr="Air + vapeur saturee",
+ TITR_MASS =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+ TITR_MASS_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+ PRES_PART =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+ PRES_PART_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+ ),
+ b_condition_6 =BLOC(condition="FLUIDE_ENTREE==6",
+ regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+ fr="Air seul",
+ TEMP_ENTREE =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+ TEMP_ENTREE_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+ fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+ ),
+ ),
+
+ LIST_INST =SIMP(statut='f',typ=(listr8_sdaster), fr="Liste des instants de calcul imposes" ),
+
+# CHOIX DES MODELES
+# *****************
+
+ MODELE_ECRE =FACT(statut='o',min=1,max=1,
+ IVENAC =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+ fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+ ECOULEMENT =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+ fr="Type de modele d'ecoulement diphasique [imod]" ),
+ b_ecou_gele =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+ PRESS_EBULLITION =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+ ),
+ FROTTEMENT =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+ b_frottement =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+ REYNOLDS_LIM =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+ FROTTEMENT_LIM =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+ ),
+
+ TRANSFERT_CHAL =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+ b_transchal =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+ XMINCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+ XMAXCH =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+ ),
+ ),
+
+
+# CRITERE DE CONVERGENCE
+# **********************
+
+ CONV_CRITERE =FACT(statut='o',min=1,max=1,
+ TEMP_REF =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Temperature de reference pour le calcul du critere"),
+ PRES_REF =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Pression de reference pour le calcul du critere"),
+ CRITERE =SIMP(statut='o',typ='TXM',defaut="TEMP_PRESS",into=("TEMP_PRESS","EXPLICITE","TEMP","PRESS"),
+ fr="La nature du critere pour la convergence"),
+ b_critere_autre =BLOC(condition="CRITERE=='TEMP_PRESS' or CRITERE=='TEMP' or CRITERE=='PRESS'",
+ fr="Critere de convergence temp_press, temp, ou press",
+ SUBD_NIVEAU =SIMP(statut='f',typ='I',val_min=2,defaut=3,
+ fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+ SUBD_PAS_MINI =SIMP(statut='f',typ='R',val_min=0.0, fr="Pas de temps en dessous duquel on ne subdivise plus"),
+ NUME_ORDRE_MIN =SIMP(statut='f',typ='I',val_min=-1,defaut=-1,
+ fr="Numero d'ordre a partir duquel le critere est pris en compte"),
+ PREC_CRIT =SIMP(statut='f',typ='R',val_min=1.0E-2,defaut=1.0,
+ fr="Valeur du critere pour l'erreur de convergence"),
+ ),
+ ),
+
+
+# DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+# ********************************************
+
+ CONVERGENCE_ECREVISSE =FACT(statut='f',min=1,max=1,
+ KGTEST =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+ fr="Parametre de l'algorithme iteratif [kgtest]" ),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 400,
+ fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+ CRIT_CONV_DEBI =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+ fr="Critere de convergence en debit [precdb]" ),
+ ),
+
+
+# GENERAL
+# *******
+
+ COURBES = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+ fr="Generation eventuelle des courbes" ),
+ LOGICIEL = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+ VERSION = SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2") ),
+ ENTETE = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+ IMPRESSION = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+ INFO = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
+
+# DONNEES POUR STAT_NON_LINE ET THER_NON_LINE
+# *******************************************
+
+ # copie de stat_non_line.capy des options des mots cles qui nous interessent
+
+ # donnees communes
+
+ CHAM_MATER =SIMP(statut='o',typ=cham_mater),
+ CARA_ELEM =SIMP(statut='f',typ=cara_elem),
+
+ # donnees specifiques a stat_non_line
+
+ EXCIT_MECA =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+ into=("FIXE_CSTE","SUIV","DIDI")),
+ ),
+ COMP_INCR =C_COMP_INCR(),
+ NEWTON =FACT(statut='d',
+ REAC_INCR =SIMP(statut='f',typ='I',defaut= 1 ),
+ PREDICTION =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+ MATRICE =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+ PAS_MINI_ELAS =SIMP(statut='f',typ='R',defaut=0.0E+0),
+ REAC_ITER =SIMP(statut='f',typ='I',defaut=0),
+ REAC_ITER_ELAS =SIMP(statut='f',typ='I',defaut=0),
+ EVOL_NOLI =SIMP(statut='f',typ=evol_noli),
+ ),
+ CONVERGENCE =FACT(statut='d',regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
+ b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None",
+ regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+ 'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),
+ ),
+ SIGM_REFE =SIMP(statut='f',typ='R'),
+ EPSI_REFE =SIMP(statut='f',typ='R'),
+ FLUX_THER_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD1_REFE =SIMP(statut='f',typ='R'),
+ FLUX_HYD2_REFE =SIMP(statut='f',typ='R'),
+ VARI_REFE =SIMP(statut='f',typ='R'),
+ ),
+ RESI_REFE_RELA =SIMP(statut='f',typ='R'),
+ RESI_GLOB_MAXI =SIMP(statut='f',typ='R'),
+ RESI_GLOB_RELA =SIMP(statut='f',typ='R'),
+ ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10),
+ ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25),
+ ARRET =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+ ),
+
+ # donnees specifiques a ther_lineaire
+
+ EXCIT_THER =FACT(statut='o',max='**',
+ CHARGE =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+ FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+ ),
+ PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57),
+
+)
#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
) ;
-#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE
+#& MODIF COMMANDE DATE 03/02/2010 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 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.
+# 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.
+# 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.
+# 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 DESROCHES X.DESROCHES
MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro_elas_mult_prod,reentrant='f',
UIinfo={"groupes":("Résolution",)},
fr="Calculer les réponses statiques linéaires pour différents cas de charges ou modes de Fourier",
- regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
+ regles=(UN_PARMI('CHAR_MECA_GLOBAL','LIAISON_DISCRET', ),),
MODELE =SIMP(statut='o',typ=modele_sdaster),
CHAM_MATER =SIMP(statut='f',typ=cham_mater),
CARA_ELEM =SIMP(statut='f',typ=cara_elem),
NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster,CO)),
CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
- CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
CAS_CHARGE =FACT(statut='o',max='**',
regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
- UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
+ UN_PARMI('CHAR_MECA','VECT_ASSE'),),
NOM_CAS =SIMP(statut='f',typ='TXM' ),
MODE_FOURIER =SIMP(statut='f',typ='I' ),
TYPE_MODE =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
CHAR_MECA =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
- CHAR_CINE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
"SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
)
-#& MODIF COMMANDE DATE 24/03/2009 AUTEUR PELLET J.PELLET
+#& MODIF COMMANDE DATE 18/11/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
),
PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57),
ARCHIVAGE =FACT(statut='f',
- regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
- EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+ regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
PAS_ARCH =SIMP(statut='f',typ='I' ),
PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
- ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)),
NUME_INIT =SIMP(statut='f',typ='I'),
DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
TITRE =SIMP(statut='f',typ='TXM',max='**'),
INFO =SIMP(statut='f',typ='I',into=(1,2)),
) ;
-#& MODIF COMMANDE DATE 24/03/2009 AUTEUR PELLET J.PELLET
+#& MODIF COMMANDE DATE 18/11/2009 AUTEUR MACOCCO K.MACOCCO
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
),
PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57 ),
ARCHIVAGE =FACT(statut='f',
- regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
- EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+ regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ),
INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
PAS_ARCH =SIMP(statut='f',typ='I' ),
PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-6),
- ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)),
NUME_INIT =SIMP(statut='f',typ='I'),
DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)),
CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-#@ MODIF ops Cata DATE 01/12/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF ops Cata DATE 06/10/2009 AUTEUR MACOCCO K.MACOCCO
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
import types
import string,linecache,os,traceback,re
import pickle
+import re
# Modules Eficas
import Accas
"""
jdc.par_lot = PAR_LOT
jdc.impr_macro = int(IMPR_MACRO == 'OUI')
- jdc.jxveri = int(DEBUG != None and DEBUG['JXVERI'] == 'OUI')
+ jdc.jxveri = int(CODE != None or (DEBUG != None and DEBUG['JXVERI'] == 'OUI'))
jdc.sdveri = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
jdc.fico = None
jdc.sd_checker = CheckLog()
jdc.memo_sensi = MEMORISATION_SENSIBILITE()
jdc.memo_sensi.reparent(jdc)
- if hasattr(jdc, 'msg_init') and jdc.msg_init == 1:
+ # ne faire qu'une fois
+ if not hasattr(jdc, 'msg_init'):
# messages d'alarmes désactivés
if IGNORE_ALARM:
if not type(IGNORE_ALARM) in (list, tuple):
pickle_context[elem].executed = 1
# pour que sds_dict soit cohérent avec g_context
self.jdc.sds_dict[elem] = pickle_context[elem]
- assert elem == pickle_context[elem].nom
+ if elem != pickle_context[elem].nom:
+ name = re.sub('_([0-9]+)$', '[\\1]', pickle_context[elem].nom)
+ UTMESS('A', 'SUPERVIS_93', valk=(elem, name))
+ del pickle_context[elem]
+ continue
# rétablir le parent pour les attributs de la SD
pickle_context[elem].reparent_sd()
if elem in self.g_context.keys():
"""
Cette fonction est la fonction op_init de la PROC DETRUIRE
"""
- if hasattr(self,"executed") and self.executed == 1:
- return
+#XXX introduit par issue11484, commenté par issue13713
+# if hasattr(self,"executed") and self.executed == 1:
+# return
if self["CONCEPT"]!=None:
sd = []
for mc in self["CONCEPT"]:
--- /dev/null
+AFFE_CARA_ELEM:U4.42.01-i.pdf
+AFFE_CHAR_ACOU:U4.44.04-g
+AFFE_CHAR_CINE_F:U4.44.03-h
+AFFE_CHAR_CINE:U4.44.03-h
+AFFE_CHAR_MECA:U4.44.01-i
+AFFE_CHAR_MECA_F:U4.44.01-i
+AFFE_CHAR_MECA_C:U4.44.05-f
+AFFE_CHAR_THER_F:U4.44.02-h
+AFFE_CHAR_THER:U4.44.02-h
+AFFE_CHAR_THER_F:U4.44.02-i
+AFFE_CHAR_THER:U4.44.02-i
+AFFE_MATERIAU:U4.43.03-i
+AFFE_MODELE:U4.41.01-i
+AIDE:U4.02.01-i
+ASSE_MAILLAGE:U4.23.03-h
+ASSE_MATRICE:U4.61.22-i
+ASSE_MATR_GENE:U4.65.04-g
+ASSE_VECTEUR:U4.61.23-i
+ASSE_VECT_GENE:U4.65.05-g
+CALC_AMOR_MODAL:U4.52.13-g
+CALC_CHAM_ELEM:U4.81.03-i
+CALC_CHAR_CINE:U4.61.03-h
+CALC_CHAR_SEISME:U4.63.01-h
+CALC_ELEM:U4.81.01-i
+CALC_FATIGUE:U4.83.02-f
+CALC_FLUI_STRU:U4.66.02-g
+CALC_FONCTION:U4.32.04-i
+CALC_FONC_INTERP:U4.32.01-g
+CALC_FORC_AJOU:U4.66.03-c
+CALC_G:U4.82.03-h
+CALC_G_THETA_T:U4.82.03-g
+CALC_INTE_SPEC:U4.36.03-h
+CALC_MATR_AJOU:U4.66.01-f
+CALC_MATR_ELEM:U4.61.01-i
+CALC_META:U4.85.01-d
+CALC_NO:U4.81.02-h
+CALC_PRECONT:U4.42.05-b
+CALC_TABLE:U4.33.03-a
+CALC_THETA:U4.82.02-g
+CALC_VECT_ELEM:U4.61.02-i
+COMB_CHAM_ELEM:U4.72.03-g
+COMB_CHAM_NO:U4.72.02-h
+COMB_FOURIER:U4.83.31-f
+COMB_MATR_ASSE:U4.72.01-i
+COMB_SISM_MODAL:U4.84.01-g
+COMP_INCR:U4.51.11-b
+CREA_CHAMP:U4.72.04-d
+CREA_MAILLAGE:U4.23.02-f
+CREA_RESU:U4.44.12-g
+CREA_TABLE:U4.33.02-b
+DEBUT:U4.11.01-i
+DEFI_ CONSTANTE:U4.31.01-i
+DEFI_BASE_MODALE:U4.64.02-h1
+DEFI_CABLE_BP:U4.42.04-d
+DEFI_COMPOR:U4.43.06-b
+DEFI_CONSTANTE:U4.31.01-h
+DEFI_COQU_MULT:U4.42.03-h
+DEFI_FICHIER:U4.12.03-b
+DEFI_FISS_XFEM:U4.82.08-b
+DEFI_FLUI_STRU:U4.25.01-g
+DEFI_FONCTION:U4.31.02-i
+DEFI_FONC_ELEC:U4.mk.10-h
+DEFI_FONC_FLUI:U4.35.01-f
+DEFI_FOND_FISS:U4.82.01-h
+DEFI_GROUP:U4.22.01-h
+DEFI_INTERF_DYNA:U4.64.01-h
+DEFI_INTE_SPEC:U4.36.02-h
+DEFI_LIST_ENTI:U4.34.02-i
+DEFI_LIST_REEL:U4.34.01-i
+DEFI_MAILLAGE:U4.23.01-h
+DEFI_MATERIAU:U4.43.01-i
+DEFI_MODELE_GENE:U4.65.02-g
+DEFI_NAPPE:U4.31.03-i
+DEFI_OBSTACLE:U4.44.21-h
+DEFI_PARA_SENSI:U4.31.06-c
+DEFI_PART_FETI:U4.23.05-a1
+DEFI_SPEC_TURB:U4.44.31-f
+DEFI_SQUELETTE:U4.24.01-i
+DEFI_THER_JOULE:U4.mk.20-f
+DEFI_TRC:U4.43.04-h
+DEPL_INTERNE:U4.62.02-h
+DETRUIRE:U4.14.01-g
+DIST_LIGN_3D:U4.mk.30-f
+DYNA_ALEA_MODAL:U4.53.22-h
+DYNA_LINE_HARM:U4.53.11-h
+DYNA_LINE_TRAN:U4.53.02-i
+DYNA_NON_LINE:U4.53.01-h
+DYNA_SPEC_MODAL:U4.53.23-f
+DYNA_TRAN_EXPLI:U4.53.03-b
+DYNA_TRAN_MODAL:U4.53.21-h
+ENGENDRE_TEST:U4.92.11-e
+EXEC_LOGICIEL:U7.00.01-d
+EXTR_MODE:U4.52.12-f
+EXTR_RESU:U4.71.04-e
+EXTR_TABLE:U4.71.05-b
+FACT_GRAD:U4.55.03-h
+FACT_LDLT:U4.55.01-i
+FIN:U4.11.02-i
+FONC_FLUI_STRU:U4.35.02-f
+FORMULE:U4.31.05-g
+GENE_FONC_ALEA:U4.36.05-h
+GENE_MATR_ALEA:U4.36.06-c
+GENE_VARI_ALEA:U4.36.07-c
+IMPR_CO:U4.91.11-i
+IMPR_FONCTION:U4.33.01-g
+IMPR_GENE:U4.91.02-f
+IMPR_JEVEUX:U4.91.21-i
+IMPR_MACR_ELEM:U7.04.33-g
+IMPR_MATRICE:U7.04.32-f
+IMPR_MISS3D:U7.04.11-f
+IMPR_MISS_3D:U7.04.11-e
+IMPR_OAR:U7.04.51-b
+IMPR_RESU:U4.91.01-i
+IMPR_STURM:U4.52.01-i
+IMPR_TABLE:U4.91.03-f
+INCLUDE:U4.13.01-h
+INCLUDE_MATERIAU:U4.43.02-d
+INFO_EXEC_ASTER:U4.13.04-b
+INFO_FONCTION:U4.32.05-a
+INTE_MAIL_2D:U4.81.11-h
+INTE_MAIL_3D:U4.81.12-h
+LIRE_CHAMP:U7.02.02-d
+LIRE_FONCTION:U4.32.02-h
+LIRE_FORC_MISS:U7.02.33-a
+LIRE_IMPE_MISS:U7.02.32-a
+LIRE_INTE_SPEC:U4.36.01-h
+LIRE_MAILLAGE:Patronvestepatchwork.pdf
+LIRE_MISS_3D:U7.02.31-f
+LIRE_PLEXUS:U7.02.11-d
+LIRE_RESU:U7.02.01-f
+LIRE_TABLE:U7.02.03-c
+MACRO_ELAS_MULT:U4.51.02-e
+MACRO_ELIAS_MULT:U4.51.02-f
+MACRO_MATR_AJOU:U4.66.11-e
+MACRO_MATR_ASSE:U4.61.21-f
+MACRO_MISS_3D:U7.03.11-e
+MACRO_MODE_MECA:U4.52.02-f
+MACRO_PROJ_BASE:U4.63.11-f
+MACR_ADAP_MAIL:U7.03.01-d
+MACR_ASCOUF_CALC:U4.cf.20-d
+MACR_ASCOUF_MAIL:U4.cf.10-d
+MACR_ASPIC_CALC:U4.pc.20-d
+MACR_ASPIC_MAIL:U4.pc.10-d
+MACR_CABRI_CALC:U4.cb.20-b
+MACR_CABRI_MAIL:U4.cb.10-b
+MACR_CARA_POUTRE:U4.42.02-f
+MACR_ECLA_PG:U4.44.14-b
+MACR_ELEM_DYNA:U4.65.01-g
+MACR_ELEM_STAT:U4.62.01-h
+MACR_FIABILITE:U7.03.31-b
+MACR_FIAB_IMPR:U7.04.41-b
+MACR_INFO_MAIL:U7.03.02-d
+MACR_LIGN_COUPE:U4.81.13-c
+MACR_RECAL:U4.73.02-c
+MACR_SPECTRE:U4.32.11-a
+MAC_MODES:U4.52.15-a
+MAJ_CATA:U4.15.01-g
+MECA_STATIQUE:U4.51.01-i
+MEMO_NOM_SENSI:U4.31.07-c
+MODE_ITER_CYCL:U4.52.05-h
+MODE_ITER_INV:U4.52.04-i
+MODE_ITER_SIMULT:U4.52.03-h
+MODE_STATIQUE:U4.52.14-h
+MODI_BASE_MODALE:U4.66.21-f
+MODI_MAILLAGE:U4.23.04-f
+MODI_MODELE_XFEM:U4.41.11-b
+MODI_OBSTACLE:U4.44.22-d
+MODI_REPERE:U4.74.01-c
+NORM_MODE:U4.52.11-h
+NUME_DDL:U4.61.11-i
+NUME_DDL_GENE:U4.65.03-g
+POST_CHAM_XFEM:U4.82.22-a
+POST_DYNA_ALEA:U4.84.04-g
+POST_DYNA_MODA_T:U4.84.02-g
+POST_ELEM:U4.81.22-g
+POST_FATIGUE:U4.83.01-f
+POST_FATI_ALEA:U4.84.03-f
+POST_GP:U4.82.31-a
+POST_K1_K2_K3:U4.82.05-d
+POST_K_BETA:U4.82.07-c
+POST_K_TRANS:U4.82.30-a
+POST_MAIL_XFEM:U4.82.21-a
+POST_RCCM:U4.83.11-f
+POST_RELEVE_T:U4.81.21-g1
+POST_USURE:U4.84.05-g
+POST_ZAC:U4.83.21-e
+POURSUITE:U4.11.03-i
+PRE_GIBI:U7.01.11-i
+PRE_GMSH:U7.01.31-c
+PRE_IDEAS:U7.01.01-i
+PROD_MATR_CHAM:U4.72.06-e
+PROJ_CHAMP:U4.72.05-g
+PROJ_MATR_BASE:U4.63.12-h
+PROJ_MESU_MODAL:U4.73.01-d
+PROJ_SPEC_BASE:U4.63.14-f
+PROJ_VECT_BASE:U4.63.13-h
+PROPA_XFEM:U4.82.11-a
+RECA_WEIBULL:U4.82.06-d
+RECU_FONCTION:U4.32.03-h
+RECU_GENE:U4.71.03-h
+RECU_TABLE:U4.71.02-d
+RESO_GRAD:U4.55.04-h
+RESO_LDLT:U4.55.02-i
+REST_BASE_PHYS:U4.63.21-h
+REST_SPEC_PHYS:U4.63.22-f
+SENSIBILITE:U4.50.02-c
+SIMU_POINT_MAT:U4.51.12-a
+SOLVEUR:U4.50.01-f
+STANLEY:U4.81.31-c
+STAT_NON_LINE:U4.51.03-h
+TEST_FICHIER:U4.92.04-b
+TEST_FONCTION:U4.92.02-h
+TEST_RESU:U4.92.01-i
+TEST_TABLE:U4.92.03-e
+THER_LINEAIRE:U4.54.01-i
+THER_NON_LINE:U4.54.02-g
+THER_NON_LINE_MO:U4.54.03-e
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+import os, sys, string, types, re
+import traceback
+
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIGbase:
+
+ #-----------------------------------
+ def __init__(self,appli):
+ #-----------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs editeur.ini
+ # et style.py
+ # Classe Mere de : class CONFIG(CONFIGbase)
+ # class CONFIGStyle(CONFIGbase):
+ self.appli = appli
+ self.salome = appli.salome
+ self.dRepMat={}
+ if self.appli:
+ self.parent=appli.top
+ else:
+ self.parent=None
+ self.rep_user = utils.get_rep_user()
+ if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)
+ self.lecture_fichier_ini_standard()
+ self.lecture_catalogues_standard()
+ self.lecture_fichier_ini_utilisateur()
+ self.init_liste_param()
+
+ #--------------------------------------
+ def lecture_fichier_ini_standard(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ if not os.path.isfile(self.fic_ini):
+ if self.appli.ihm=="TK" :
+ from widgets import showerror
+ showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
+ print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini
+ sys.exit(0)
+ self.lecture_fichier(self.fic_ini)
+
+ #-----------------------------
+ def lecture_fichier(self,fic):
+ #------------------------------
+ # lit les paramètres du fichier eficas.ini ou style.py
+ # les transforme en attribut de l 'objet
+ # utilisation du dictionnaire local pour récuperer style
+ txt = utils.read_file(fic)
+ from styles import style
+ d=locals()
+ try:
+ exec txt in d
+ except:
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ if self.appli.ihm=="TK" :
+ from widgets import showerror
+ showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
+ print ("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
+ sys.exit()
+
+ for k in d.keys() :
+ if k in self.labels.keys() :
+ setattr(self,k,d[k])
+ # Glut horrible pour les repertoires materiau...
+ elif k[0:9]=="rep_mat_v" :
+ setattr(self,k,d[k])
+
+ for k in d['style'].__dict__.keys() :
+ setattr(self,k,d['style'].__dict__[k])
+
+ if hasattr(self,"catalogues") :
+ for ligne in self.catalogues :
+ version=ligne[1]
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self,chaine):
+ rep_mat=getattr(self,chaine)
+ self.dRepMat[version]=str(rep_mat)
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_utilisateur(self):
+ #--------------------------------------
+ # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fichier)
+ if not os.path.isfile(self.fic_ini_utilisateur):
+ return
+ self.lecture_fichier(self.fic_ini_utilisateur)
+
+ #--------------------------------------
+ def lecture_catalogues_standard(self):
+ #--------------------------------------
+ # repertoires Materiau
+ if hasattr(self,"catalogues") :
+ for ligne in self.catalogues :
+ version=ligne[1]
+ cata=ligne[2]
+ self.dRepMat[version]=os.path.join(cata,'materiau')
+
+ #--------------------------------------
+ def affichage_fichier_ini(self):
+ #--------------------------------------
+ """
+ Affichage des valeurs des paramètres relus par Eficas
+ """
+ import widgets
+ result = widgets.Formulaire(self.parent,
+ obj_pere = self,
+ titre = self.titre,
+ texte = self.texte_ini,
+ items = self.l_param,
+ mode='display',
+ commande=('Modifier',self.commande))
+ if result.resultat :
+ #print 'on sauvegarde les nouveaux paramètres :',result.resultat
+ self.save_param_ini(result.resultat)
+
+ #--------------------------------------
+ def save_param_ini(self,dico):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux paramètres dans le fichier de configuration utilisateur
+ #
+ f=open(self.fic_ini_utilisateur,'w+')
+ for k,v in dico.items():
+ if self.types[k] in ('mot2','mot3','mot4'):
+ v1=v[1:-1]
+ val=v1.split(",")
+ p = "("
+ listeval=""
+ for valeur in val:
+ listeval = listeval+ p + str(valeur)
+ p=" , "
+ listeval = listeval + ")"
+ f.write(str(self.pref)+str(k) + '=' + str(listeval) + '\n')
+ elif k == 'catalogues' :
+ f.write(k + '\t=\t' + str(v) + '\n')
+ else:
+ f.write(str(self.pref)+str(k) + '\t=\t"' + str(v) + '"\n')
+ f.close()
+ self.lecture_fichier_ini_utilisateur()
+
+ #-------------------------------------------
+ def creation_fichier_ini_si_possible(self):
+ #-------------------------------------------
+ return self.creation_fichier_ini(mode='ignorer_annuler')
+
+ #--------------------------------------------------------
+ def creation_fichier_ini(self,mode='considerer_annuler'):
+ #---------------------------------------------------------
+ # Récupération des valeurs des paramétres requis pour la création du fichier
+ # eficas.ini
+ #
+ import widgets
+ items = self.l_param
+ result = widgets.Formulaire(self.parent,
+ obj_pere = self,
+ titre = "Saisie des donnees indispensables a la configuration d'EFICAS",
+ texte = self.texte,
+ items = items,
+ mode='query')
+ if not result.resultat :
+ if mode == 'considerer_annuler':
+ test=0
+ if self.appli.ihm=="TK" :
+ from widgets import showerror,askretrycancel
+ test = askretrycancel("Erreur","Données incorrectes !")
+ if not test:
+ # XXX On sort d'EFICAS, je suppose
+ self.appli.exitEFICAS()
+ else:
+ self.creation_fichier_ini()
+ else:
+ return None
+ else :
+ self.save_param_ini(result.resultat)
+ return result.resultat
+
+ #--------------------------
+ def init_liste_param (self):
+ #--------------------------
+ # construit self.l_param
+ # a partir de self.labels et des attributs
+ # de l objet (mis a jour lors de la lecture du fichier)
+ # l_param est une liste de tuples où chaque tuple est de la forme :
+ # (label,nature,nom_var,defaut)
+
+ self.l_param=[]
+ for k in self.labels.keys() :
+ if hasattr(self,k) :
+ if k in self.YesNo.keys():
+ self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k],
+ self.YesNo[k][0],self.YesNo[k][1]))
+ else :
+ self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k]))
+ self.l_param = tuple(self.l_param)
+
+
+class CONFIG(CONFIGbase):
+ def __init__(self,appli,repIni):
+
+ self.dFichierEditeur={"ASTER" : "editeur.ini",
+ "ASTER_SALOME" : "editeur_salome.ini"}
+ self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
+ "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
+ "Si vous annulez, EFICAS ne se lancera pas !!"
+
+ self.salome=appli.salome
+ self.code=appli.code
+ clef=self.code
+ if self.salome != 0 :
+ clef = clef + "_SALOME"
+ self.fichier=self.dFichierEditeur[clef]
+ self.repIni = repIni
+ self.rep_ini = repIni
+ self.fic_ini = os.path.join(self.repIni,self.fichier)
+ self.titre = 'Parametres necessaires a la configuration d\'EFICAS'
+ self.texte_ini = "Voici les paramètres que requiert Eficas"
+ self.commande = self.creation_fichier_ini_si_possible
+ self.labels={"savedir" : "Répertoire initial pour Open/Save des fichiers",
+ "rep_travail" : "Répertoire de travail",
+ "rep_mat" : "Répertoire materiaux",
+ "path_doc" : "Chemin d'accès à la doc Aster",
+ "exec_acrobat" : "Ligne de commande Acrobat Reader",
+ "catalogues" : "Versions du code ",
+ "isdeveloppeur" : "Niveau de message ",
+ "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"}
+
+
+ self.types ={"savedir":"rep", "rep_travail":"rep","rep_mat":"rep",
+ "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file",
+ "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep",
+ "DTDDirectory":"rep"}
+
+ self.YesNo={}
+ self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
+
+ # Valeurs par defaut
+ self.rep_user = utils.get_rep_user()
+ self.initialdir=self.rep_user
+ self.savedir = os.environ['HOME']
+ self.rep_travail=os.path.join(self.rep_user,'uaster','tmp_eficas')
+ self.rep_mat=""
+ self.path_doc=self.rep_user
+ self.exec_acrobat=self.rep_user
+ self.isdeveloppeur='NON'
+ self.path_cata_dev=os.path.join(self.rep_user,'cata')
+ CONFIGbase.__init__ (self,appli)
+ self.pref=""
+
+ #--------------------------------------
+ def save_params(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux paramètres dans le fichier de configuration utilisateur
+ #
+ l_param=('exec_acrobat', 'repIni','catalogues','rep_travail','rep_mat','path_doc','savedir')
+ texte=""
+ for clef in l_param :
+ if hasattr(self,clef):
+ valeur=getattr(self,clef)
+ texte= texte + clef+" = " + repr(valeur) +"\n"
+
+
+ # recuperation des repertoires materiaux
+ try :
+ for item in self.catalogues :
+ try :
+ (code,version,cata,format,defaut)=item
+ except :
+ (code,version,cata,format)=item
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self,chaine):
+ valeur=getattr(self,chaine)
+ texte= texte + chaine+" = '" + str(valeur) +"'\n"
+ except :
+ pass
+
+ f=open(self.fic_ini_utilisateur,'w+')
+ f.write(texte)
+ f.close()
+
+
+class CONFIGStyle(CONFIGbase):
+ def __init__(self,appli,repIni):
+ self.salome=appli.salome
+ self.texte = "Pour prendre en compte les modifications \n"+\
+ " RELANCER EFICAS"
+ self.fichier="style.py"
+ self.repIni = repIni
+ self.rep_ini = repIni
+ self.fic_ini = os.path.join(self.repIni,self.fichier)
+ self.titre = "Parametres d affichage"
+ self.texte_ini = "Voici les paramètres configurables : "
+ self.commande = self.creation_fichier_ini_si_possible
+ self.labels={"background":"couleur du fonds",
+ "foreground":"couleur de la police standard" ,
+ "standard":" police et taille standard",
+ "standard_italique":"police utilisée pour l'arbre ",
+ "standard_gras_souligne":"police utilisée pour le gras souligné",
+ "canvas_italique":"police italique",
+ "standard_gras":"gras",
+ }
+ self.types ={"background":"mot",
+ "foreground":"mot" ,
+ "standard":"mot2",
+ "standard_italique":"mot3",
+ "standard_gras":"mot3",
+ "standard_gras_souligne":"mot4",
+ "canvas":"mot2",
+ "canvas_italique":"mot3",
+ "canvas_gras":"mot3",
+ "canvas_gras_italique":"mot4",
+ "standard12":"mot2",
+ "standard12_gras":"mot3",
+ "standard12_gras_italique":"mot4",
+ "statusfont":"mot2",
+ "standardcourier10":"mot2"}
+ self.YesNo={}
+ self.l_param=[]
+ CONFIGbase.__init__ (self,appli)
+ self.pref="style."
+
+ def affichage_style_ini(self):
+ self.affichage_fichier_ini()
+
+def make_config(appli,rep):
+ return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+ return CONFIGStyle(appli,rep)
+
+
+# -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
#
#
# ======================================================================
-
import os
-from Aster import prefs
-
-rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+# Répertoire initial
+import prefs_ASTER
+initialdir=prefs_ASTER.REPINI
+rep_cata = os.path.join(initialdir,'Cata')
+rep_Pmw = os.path.join(initialdir,'../Pmw')
# Accès à la documentation Aster
path_doc = os.path.join(rep_cata,'..','Doc')
-exec_acrobat = "/usr/bin/xpdf"
+exec_acrobat = "acroread"
+
# Utilisateur/Développeur
isdeveloppeur = "NON"
path_cata_dev = "/tmp/cata"
# Répertoire temporaire
rep_travail = "/tmp"
-# Répertoire initial
-initialdir=os.curdir
# Choix des catalogues
rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
-rep_mat_v95=os.path.join(rep_cata,'cataSTA9','materiau')
-
-catalogues = (
- ('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
- ('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
- )
-
+rep_mat_v96=os.path.join(rep_cata,'cataSTA9','materiau')
+rep_mat_v10=os.path.join(rep_cata,'cataSTA10','materiau')
+#
+catalogues=(
+('ASTER','v9.6',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+)
+# -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
#
#
# ======================================================================
-
import os
-from Aster import prefs
-
-rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+# Répertoire initial
+#initialdir=os.curdir
+from prefs_ASTER import REPINI
+initialdir=REPINI
+rep_cata = os.path.join(initialdir,'Cata')
+rep_Pmw = os.path.join(initialdir,'../Pmw')
# Accès à la documentation Aster
path_doc = os.path.join(rep_cata,'..','Doc')
-exec_acrobat = "/usr/bin/xpdf"
+exec_acrobat = "acroread"
+
# Utilisateur/Développeur
isdeveloppeur = "NON"
path_cata_dev = "/tmp/cata"
# Répertoire temporaire
rep_travail = "/tmp"
-# Répertoire initial
-initialdir=os.curdir
# Choix des catalogues
rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
rep_mat_v95=os.path.join(rep_cata,'cataSTA9','materiau')
-
-catalogues = (
- ('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
- ('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
- )
-
+#
+catalogues=(
+#('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
+('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+)
# Modules Eficas
import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
from InterfaceTK import eficas_go
eficas_go.lance_eficas(code=prefs.code)
-# -*- coding: utf-8 -*-
-# 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,sys
-
-# REPINI sert à localiser le fichier editeur.ini
-# Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-# Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
-
-# CODE_PATH sert à localiser Noyau et Validation éventuellement
-# non contenus dans la distribution EFICAS
-# Par défaut on utilise les modules de INSTALLDIR
-# Peut valoir None (defaut)
-CODE_PATH = None
-
-# la variable code donne le nom du code a selectionner
code="ASTER"
-
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
-lang='fr'
-
-# Codage des strings qui accepte les accents (en remplacement de 'ascii')
-encoding='iso-8859-1'
-
-
-EditeurDir=INSTALLDIR+"/Editeur"
-sys.path[:0]=[INSTALLDIR]
-
-ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
-
-# Preference
-if os.name == 'nt':
- userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
-else :
- userprefs=os.path.expanduser("~/.Eficas_install/prefs.py")
-
-if os.path.isfile(userprefs):
- try:
- execfile(userprefs)
- except:
- pass
-
-
-#-------------------------------------------------------------------
-# Partie pour TK
-#-------------------------------------------------------------------
-
-labels= ('Fichier','Edition','Jeu de commandes',
- 'Options',
- 'Aide',
- 'Traduction',
- )
-
-appli_composants=['readercata','bureau',
- 'options',
- ]
-
-menu_defs={ 'bureau': [
- ('Fichier',[
- ('Nouveau','newJDC','<Control-n>','Ctrl+N'),
- ('Nouvel INCLUDE','newJDC_include'),
- ('Ouvrir','openJDC','<Control-o>','Ctrl+O'),
- ('Enregistrer','saveJDC','<Control-s>','Ctrl+S'),
- ('Enregistrer sous','saveasJDC','<Control-e>','Ctrl+E'),
- None,
- ('Fermer','closeJDC','<Control-w>','Ctrl+W'),
- ('Quitter','exitEFICAS','<Control-q>','Ctrl+Q'),
- ]
- ),
- ('Edition',[
- ('Copier','copy','<Control-c>','Ctrl+C'),
- ('Couper','cut','<Control-x>','Ctrl+X'),
- ('Coller','paste','<Control-v>','Ctrl+V'),
- ]
- ),
- ('Jeu de commandes',[
- ('Rapport de validation','visuCRJDC','<Control-r>','Ctrl+R'),
- ('Fichier source','visu_txt_brut_JDC','<Control-b>','Ctrl+B'),
- #('Paramètres Eficas','affichage_fichier_ini'),
- ]
- ),
- ('Traduction',[
- ('Traduction v7 en v8','TraduitFichier7'),
- ('Traduction v8 en v9','TraduitFichier8','<Control-t>','Ctrl+T'),
- ]
- ),
- ('Aide',[
- ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
- ]
- ),
- ]
- }
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+ userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+ userprefs=os.path.expanduser("~/.Eficas_install/prefs.py")
+
+if os.path.isfile(userprefs):
+ try:
+ execfile(userprefs)
+ except:
+ pass
+
+
+#-------------------------------------------------------------------
+# Partie pour TK
+#-------------------------------------------------------------------
+
+labels= ('Fichier','Edition','Jeu de commandes',
+ 'Options',
+ 'Aide',
+ 'Traduction',
+ )
+
+appli_composants=['readercata','bureau',
+ 'options',
+ ]
+
+menu_defs={ 'bureau': [
+ ('Fichier',[
+ ('Nouveau','newJDC','<Control-n>','Ctrl+N'),
+ ('Nouvel INCLUDE','newJDC_include'),
+ ('Ouvrir','openJDC','<Control-o>','Ctrl+O'),
+ ('Enregistrer','saveJDC','<Control-s>','Ctrl+S'),
+ ('Enregistrer sous','saveasJDC','<Control-e>','Ctrl+E'),
+ None,
+ ('Fermer','closeJDC','<Control-w>','Ctrl+W'),
+ ('Quitter','exitEFICAS','<Control-q>','Ctrl+Q'),
+ ]
+ ),
+ ('Edition',[
+ ('Copier','copy','<Control-c>','Ctrl+C'),
+ ('Couper','cut','<Control-x>','Ctrl+X'),
+ ('Coller','paste','<Control-v>','Ctrl+V'),
+ ]
+ ),
+ ('Jeu de commandes',[
+ ('Rapport de validation','visuCRJDC','<Control-r>','Ctrl+R'),
+ ('Fichier source','visu_txt_brut_JDC','<Control-b>','Ctrl+B'),
+ #('Paramètres Eficas','affichage_fichier_ini'),
+ ]
+ ),
+ ('Traduction',[
+ ('Traduction v7 en v8','TraduitFichier7'),
+ ('Traduction v8 en v9','TraduitFichier8','<Control-t>','Ctrl+T'),
+ ]
+ ),
+ ('Aide',[
+ ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
+ ]
+ ),
+ ]
+ }
-#@ MODIF properties Accas DATE 11/06/2008 AUTEUR aster M.ADMINISTRATEUR
+#@ MODIF properties Accas DATE 02/06/2010 AUTEUR aster M.ADMINISTRATEUR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
# RESPONSABLE D6BHHHH J-P.LEFEBVRE
# ======================================================================
# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
# IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
# DE LA VERSION DU CODE_ASTER ASSOCIE
#----------------------------------------------------------------------
-version = "9.3.0"
-date = "11/06/2008"
+version = "10.1.27"
+date = "02/06/2010"
exploit = False
# Modules Eficas
import prefs
-#from InterfaceQT4 import eficas_go
-from InterfaceQT import eficas_go
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from InterfaceQT4 import eficas_go
eficas_go.lance_eficas(code=prefs.code)
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+"""
+ Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+from InterfaceQT4 import eficas_go
+
+eficas_go.lance_eficas_ssIhm(code=prefs.code,fichier="/local/noyret/Eficas_Aster/cable.comm",version='v10.0')
# ==========Path du noyau fourni par Aster====================
path_Noyau="../../AccasAster"
# ============================================================
-nom_distrib="Eficas"+version+"AsterSTA9"
+nom_distrib="Eficas"+version
path_distrib=os.path.join("dist",nom_distrib)
path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
dir_download= "/home/eficas/WWW/telechargement/eficas"
copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
copyfiles('../InterfaceTK',os.path.join(path_distrib,'InterfaceTK'),['*.py','faqs.txt'])
- copyfiles('../InterfaceQT',os.path.join(path_distrib,'InterfaceQT'),['*.py'])
- copyfiles('../Ui',os.path.join(path_distrib,'Ui'),['*.ui','makefile'])
+ copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py'])
+ copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
copyfiles('../Traducteur',os.path.join(path_distrib,'Traducteur'),['*.py'])
copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
# AIDE
+ copyfiles('../Aide',os.path.join(path_distrib,'Aide'),['*_ASTER.adp'])
+ copyfiles('../Aide/fichiers_ASTER',os.path.join(path_distrib,'Aide','fichiers_ASTER'),['*'])
+ #pour Aster TK
copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
# Code_Aster
copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
+ 'prefs_ASTER.py',
'editeur.ini',
'editeur_salome.ini',
'eficas_aster.py',
'qtEficas_aster.py',
'configuration.py',
+ 'configuration_ASTER.py',
'test_eficas.py',
'style.py',
'__init__.py'
#copyfiles('Cata/cataSTA6',os.path.join(path_distrib,'Aster','Cata','cataSTA6'),['*.py'])
#copyfiles('Cata/cataSTA6/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA6','Macro'),['*.py'])
- copyfiles('Cata/cataSTA7',os.path.join(path_distrib,'Aster','Cata','cataSTA7'),['*.py'])
- copyfiles('Cata/cataSTA7/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA7','Macro'),['*.py'])
- copyfiles('Cata/cataSTA7/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA7/materiau'),['README.py'])
+ #copyfiles('Cata/cataSTA7',os.path.join(path_distrib,'Aster','Cata','cataSTA7'),['*.py'])
+ #copyfiles('Cata/cataSTA7/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA7','Macro'),['*.py'])
+ #copyfiles('Cata/cataSTA7/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA7/materiau'),['README.py'])
copyfiles('Cata/cataSTA8',os.path.join(path_distrib,'Aster','Cata','cataSTA8'),['*.py'])
copyfiles('Cata/cataSTA8/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA8/Macro'),['*.py'])
copyfiles('Cata/cataSTA9',os.path.join(path_distrib,'Aster','Cata','cataSTA9'),['*.py'])
copyfiles('Cata/cataSTA9/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA9/Macro'),['*.py'])
- #copyfiles('Cata/cataSTA9/Messages',os.path.join(path_distrib,'Aster','Cata','cataSTA9/Messages'),['*.py'])
copyfiles('Cata/cataSTA9/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA9/materiau'),['README.py'])
copyfiles('Cata/cataSTA9/SD',os.path.join(path_distrib,'Aster','Cata','cataSTA9/SD'),['*.py'])
+ copyfiles('Cata/cataSTA10',os.path.join(path_distrib,'Aster','Cata','cataSTA10'),['*.py'])
+ copyfiles('Cata/cataSTA10/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA10/Macro'),['*.py'])
+ #copyfiles('Cata/cataSTA10/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA10/materiau'),['README.py'])
+ copyfiles('Cata/cataSTA10/SD',os.path.join(path_distrib,'Aster','Cata','cataSTA10/SD'),['*.py'])
+
copyfiles('Cata',os.path.join(path_distrib,'Aster','Cata'),['*9c_clefs_docu'])
copyfiles('../Aster/Cata',os.path.join(path_distrib,'Aster'),['aster.py',])
copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
- copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+ copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif','*.png'])
copyfiles('../Editeur/Patrons',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
copyfiles('../Editeur/Patrons/ASTER',os.path.join(path_distrib,'Editeur','Patrons','ASTER'),['*.com*'])
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+cmake_minimum_required ( VERSION 2.8 )
+
+project ( Eficas CXX C )
+
+# Definition du chemin d'acces aux modules additionnels
+set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules" )
+
+# Detection de Python
+find_package ( PythonInterp 2.4 REQUIRED )
+if (PYTHONINTERP_FOUND)
+ string ( RANDOM tmpPyScript )
+ set ( tmpPyScript "${tmpPyScript}.py" )
+ file ( WRITE ${tmpPyScript}
+"# Automaticaly generated by CMake. Do NOT edit. Changes will be lost
+import sys
+print '%d.%d' % ( sys.version_info[0], sys.version_info[1] )
+" )
+ get_source_file_property ( PYSCRIPT_LOC ${tmpPyScript} LOCATION )
+ execute_process ( COMMAND ${PYTHON_EXECUTABLE} ${PYSCRIPT_LOC}
+ OUTPUT_VARIABLE PYTHON_VERSION
+ #ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE )
+ file ( REMOVE ${tmpPyScript} )
+endif (PYTHONINTERP_FOUND)
+message ( STATUS "Using Python version ${PYTHON_VERSION}" )
+# Detection de QT4
+find_package ( Qt4 COMPONENTS QtCore QtGui REQUIRED )
+include( ${QT_USE_FILE} )
+
+# Detection de PyQt4
+if (NOT PYQT4_FOUND)
+ execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "\"import PyQt4\""
+ RESULT_VARIABLE _res
+ OUTPUT_VARIABLE _trashout
+ ERROR_VARIABLE _trasherr
+ )
+ if (NOT _res)
+ message ( STATUS "Looking for Python package PyQt4 - found" )
+ set ( PYQT4_FOUND 1 CACHE INTERNAL "True if Python package PyQt4 is here" )
+ else (NOT _res)
+ message ( STATUS "Looking for Python package PyQt4 - not found" )
+ set ( PYQT4_FOUND 0 CACHE INTERNAL "True if Python package PyQt4 is here" )
+ endif (NOT _res)
+endif (NOT PYQT4_FOUND)
+
+if (NOT PYQT4_FOUND)
+ message ( FATAL_ERROR "Python package PyQt4 is REQUIRED" )
+endif (NOT PYQT4_FOUND)
+
+# Detection de pyuic4
+find_program ( PYUIC4 NAMES pyuic4
+ DOC "Path to the pyuic4 compilation tool"
+ )
+if (NOT PYUIC4)
+ message ( FATAL_ERROR "pyuic4 tool is REQUIRED" )
+endif (NOT PYUIC4)
+
+# Definition des options de CMake
+option ( WITH_ALL_PACKAGES "Install all package files" OFF )
+option ( WITH_SALOME_MECA "Install OT, Aster and SEP files" OFF )
+option ( WITH_OPENTURNS "Install Open TURNS files" OFF )
+option ( WITH_ASTER "Install Aster files" OFF )
+option ( WITH_MAP "Install MAP files" OFF )
+option ( WITH_SEP "Install SEP files" OFF )
+
+set ( _OPTIONLIST
+ WITH_OPENTURNS
+ WITH_ASTER
+ WITH_MAP
+ WITH_SEP
+ WITH_TK
+ WITH_SALOME_MECA
+ )
+
+set ( _SALOME_MECA_LIST
+ WITH_OPENTURNS
+ WITH_ASTER
+ WITH_SEP
+ )
+
+if (WITH_ALL_PACKAGES)
+ foreach ( _opt ${_OPTIONLIST} )
+ set ( ${_opt} ON )
+ endforeach ( _opt )
+endif (WITH_ALL_PACKAGES)
+
+if (WITH_SALOME_MECA)
+ foreach ( _opt ${_SALOME_MECA_LIST} )
+ set ( ${_opt} ON )
+ endforeach ( _opt )
+endif (WITH_SALOME_MECA)
+
+# Verification: au moins une option doit etre selectionnee
+set ( _VALIDOPT FALSE )
+foreach ( _opt ${_OPTIONLIST} )
+ if ( ${_opt} )
+ set ( _VALIDOPT TRUE )
+ string ( REPLACE WITH_ "" _opt2 ${_opt} )
+ message ( STATUS "Will install package ${_opt2}" )
+ endif ( ${_opt} )
+endforeach ( _opt )
+if ( NOT ${_VALIDOPT} )
+ message ( FATAL_ERROR "At least one option within ${_OPTIONLIST} must be selected" )
+endif ( NOT ${_VALIDOPT} )
+
+# Detection des prerequis lies aux options
+if (WITH_OPENTURNS)
+ find_package ( OpenTURNS REQUIRED )
+endif (WITH_OPENTURNS)
+
+#if (WITH_ASTER)
+# find_package ( Aster REQUIRED )
+#endif (WITH_ASTER)
+
+#if (WITH_MAP)
+# find_package ( MAP REQUIRED )
+#endif (WITH_MAP)
+
+
+# Parcours recursif des sous-repertoires
+add_subdirectory ( Accas )
+add_subdirectory ( Aide )
+add_subdirectory ( Editeur )
+add_subdirectory ( Extensions )
+add_subdirectory ( Ihm )
+add_subdirectory ( InterfaceQT4 )
+add_subdirectory ( Noyau )
+add_subdirectory ( UiQT4 )
+add_subdirectory ( Validation )
+add_subdirectory ( convert )
+add_subdirectory ( generator )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+ add_subdirectory ( Openturns_Study )
+ add_subdirectory ( Openturns_Wrapper )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+ add_subdirectory ( Aster )
+ add_subdirectory ( Traducteur )
+endif (WITH_ASTER)
+
+if (WITH_TK)
+ add_subdirectory ( InterfaceTK )
+ add_subdirectory ( Pmw )
+ add_subdirectory ( Tools )
+ add_subdirectory ( Misc )
+ add_subdirectory ( AIDE )
+endif (WITH_TK)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+ add_subdirectory ( Map )
+endif (WITH_MAP)
+
+# Installation des fichiers : Sep
+if (WITH_SEP)
+ add_subdirectory ( Sep )
+endif (WITH_SEP)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# - Try to find OpenTURNS
+# Once done this will define
+#
+# OpenTURNS_FOUND - system has OT
+# OpenTURNS_INCLUDE_DIR - the OT include directory
+# OpenTURNS_INCLUDE_DIRS - the OT include directory and dependencies include directories
+# OpenTURNS_LIBRARY - Where to find the OT library
+# OpenTURNS_LIBRARIES - Link these to use OT
+# OpenTURNS_WRAPPER_DIR - Wrappers directory
+# OpenTURNS_WRAPPER_DEFINITIONS - Compiler switches required for using OT wrapper
+# OpenTURNS_MODULE_DIR - OT module directory
+# OpenTURNS_MODULE_DEFINITIONS - Compiler switches required for using OT module
+# OpenTURNS_SWIG_INCLUDE_DIR - the OT include directory to swig interface
+#
+# Copyright (c) 2009 Mathieu Lapointe <lapointe@phimeca.com>
+# Copyright (c) 2010 Julien Schueller <schueller@phimeca.com>
+#
+# Redistribution and use is allowed according to the terms of the New
+# BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+include (CheckFunctionExists)
+include (CheckIncludeFile)
+include (CheckIncludeFileCXX)
+include (FindPackageHandleStandardArgs)
+
+# check dependencies
+find_package(LibXml2 2.6.27)
+find_package(PythonLibs ${PYTHON_VERSION})
+
+# test if variables are not already in cache
+if (NOT (OpenTURNS_INCLUDE_DIR
+ AND OpenTURNS_SWIG_INCLUDE_DIR
+ AND OpenTURNS_INCLUDE_DIRS
+ AND OpenTURNS_LIBRARY
+ AND OpenTURNS_LIBRARIES
+ AND OpenTURNS_WRAPPER_DIR
+ AND OpenTURNS_PYTHON_MODULE_DIR
+ AND OpenTURNS_MODULE_DIR))
+
+ # set include dir
+ if (NOT OpenTURNS_INCLUDE_DIR)
+ find_path (OpenTURNS_INCLUDE_DIR
+ NAMES
+ OT.hxx
+ HINTS
+ ${OPENTURNS_DIR}
+ /usr
+ /usr/local
+ /opt
+ PATH_SUFFIXES
+ include/openturns
+ DOC
+ "OpenTURNS include directory"
+ )
+ endif ()
+
+ # set swig include dir
+ if (NOT OpenTURNS_SWIG_INCLUDE_DIR)
+ set(OpenTURNS_SWIG_INCLUDE_DIR "${OpenTURNS_INCLUDE_DIR}/swig")
+ endif ()
+
+ # dependencies includes
+ if (NOT OpenTURNS_INCLUDE_DIRS)
+ set (OpenTURNS_INCLUDE_DIRS ${OpenTURNS_INCLUDE_DIR})
+ list (APPEND OpenTURNS_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
+ list (APPEND OpenTURNS_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
+ endif ()
+
+ # check for library directory
+ if (NOT OpenTURNS_LIBRARY)
+ find_library (OpenTURNS_LIBRARY
+ NAMES
+ OT
+ HINTS
+ ${OPENTURNS_DIR}
+ /usr
+ /usr/local
+ /opt
+ PATH_SUFFIXES
+ lib/openturns
+ DOC
+ "OpenTURNS library location"
+ )
+ endif ()
+
+ # find dependent libraries
+ if (NOT OpenTURNS_LIBRARIES)
+ set (OpenTURNS_LIBRARIES ${OpenTURNS_LIBRARY} ${LIBXML2_LIBRARIES} ${PYTHON_LIBRARIES})
+ list (APPEND OpenTURNS_LIBRARIES ${LIBXML2_LIBRARIES})
+ list (APPEND OpenTURNS_LIBRARIES ${PYTHON_LIBRARIES})
+ endif ()
+
+ # retrieve path to lib
+ get_filename_component (OpenTURNS_LIBRARY_PATH ${OpenTURNS_LIBRARY} PATH)
+
+ # retrieve install path
+ set (OpenTURNS_INSTALL_PATH "${OpenTURNS_LIBRARY_PATH}/../..")
+
+ # find wrappers dir
+ if (NOT OpenTURNS_WRAPPER_DIR)
+ find_path (OpenTURNS_WRAPPER_DIR
+ NAMES
+ wrapper.xml wrapper.dtd
+ HINTS
+ ${OPENTURNS_DIR}
+ ${OpenTURNS_INSTALL_PATH}
+ /usr
+ /usr/local
+ /opt
+ PATH_SUFFIXES
+ share/openturns/wrappers
+ DOC
+ "OpenTURNS wrappers location"
+ )
+ endif ()
+
+ # set wrapper definitions
+ if (NOT OpenTURNS_WRAPPER_DEFINITIONS)
+ set(OpenTURNS_WRAPPER_DEFINITIONS)
+ check_include_file_cxx (pthread.h HAVE_PTHREAD_H)
+ if (HAVE_PTHREAD_H)
+ list (APPEND OpenTURNS_WRAPPER_DEFINITIONS -DHAVE_PTHREAD_H)
+ endif ()
+ endif ()
+
+ # find python module dir
+ if (NOT OpenTURNS_PYTHON_MODULE_DIR)
+ find_path (OpenTURNS_PYTHON_MODULE_DIR
+ NAMES
+ openturns.pth
+ HINTS
+ ${OPENTURNS_DIR}
+ ${OpenTURNS_INSTALL_PATH}
+ /usr
+ /usr/local
+ /opt
+ PATH_SUFFIXES
+ lib/python${PYTHON_VERSION}/site-packages
+ DOC
+ "OpenTURNS python module location"
+ )
+ endif ()
+
+
+ # find module directory
+ if (NOT OpenTURNS_MODULE_DIR)
+ set (OpenTURNS_MODULE_DIR
+ ${OpenTURNS_LIBRARY_PATH}/module
+ )
+ endif ()
+
+ # set module definitions
+ if (NOT OpenTURNS_MODULE_DEFINITIONS)
+ set (OpenTURNS_MODULE_DEFINITIONS)
+
+ # check for STDC_HEADERS
+ check_include_file (stdlib.h HAVE_STDLIB_H)
+ check_include_file (stdarg.h HAVE_STDARG_H)
+ check_include_file (string.h HAVE_STRING_H)
+ check_include_file (float.h HAVE_FLOAT_H)
+ check_function_exists (memchr HAVE_MEMCHR)
+ check_function_exists (free HAVE_FREE)
+ check_include_file (ctype.h HAVE_CTYPE_H)
+ if(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND HAVE_MEMCHR AND HAVE_FREE AND HAVE_CTYPE_H)
+ list (APPEND OpenTURNS_MODULE_DEFINITIONS -DSTDC_HEADERS_H=1)
+ else ()
+ list (APPEND OpenTURNS_MODULE_DEFINITIONS -DSTDC_HEADERS_H=0)
+ endif ()
+
+ # this macro checks a header and defines the corresponding macro
+ macro(check_include_files_define_macro header_file)
+ # get macro name from header_file
+ string(TOUPPER ${header_file} macro_name)
+ string(REGEX REPLACE "[/.]" "_" macro_name ${macro_name})
+ set(macro_name HAVE_${macro_name})
+ # check for header
+ check_include_file(${header_file} ${macro_name})
+ # define macro
+ if(${macro_name})
+ list (APPEND OpenTURNS_MODULE_DEFINITIONS -D${macro_name}=1)
+ else()
+ list (APPEND OpenTURNS_MODULE_DEFINITIONS -D${macro_name}=0)
+ endif()
+ endmacro()
+
+ # check for some headers
+ check_include_files_define_macro(sys/types.h)
+ check_include_files_define_macro(sys/stat.h)
+ check_include_files_define_macro(stdlib.h)
+ check_include_files_define_macro(string.h)
+ check_include_files_define_macro(memory.h)
+ check_include_files_define_macro(strings.h)
+ check_include_files_define_macro(inttypes.h)
+ check_include_files_define_macro(stdint.h)
+ check_include_files_define_macro(unistd.h)
+ check_include_files_define_macro(dlfcn.h)
+ check_include_files_define_macro(stdbool.h)
+ check_include_files_define_macro(regex.h)
+
+ endif ()
+
+endif ()
+
+# handle the QUIETLY and REQUIRED arguments and set OpenTURNS_FOUND to TRUE if
+# all listed variables are TRUE
+find_package_handle_standard_args (OpenTURNS DEFAULT_MSG
+ OpenTURNS_LIBRARY
+ OpenTURNS_INCLUDE_DIR
+ OpenTURNS_SWIG_INCLUDE_DIR
+ OpenTURNS_INCLUDE_DIRS
+ OpenTURNS_LIBRARIES
+ OpenTURNS_WRAPPER_DIR
+ OpenTURNS_PYTHON_MODULE_DIR
+ OpenTURNS_MODULE_DIR
+)
+
+mark_as_advanced (
+ OpenTURNS_LIBRARY
+ OpenTURNS_INCLUDE_DIR
+ OpenTURNS_SWIG_INCLUDE_DIR
+ OpenTURNS_INCLUDE_DIRS
+ OpenTURNS_LIBRARIES
+ OpenTURNS_WRAPPER_DIR
+ OpenTURNS_WRAPPER_DEFINITIONS
+ OpenTURNS_MODULE_DIR
+ OpenTURNS_PYTHON_MODULE_DIR
+ OpenTURNS_MODULE_DEFINITIONS
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+ AU_MOINS_UN ( 'FIN' ),
+ A_CLASSER ( ('OPTIONS', 'DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),'FIN')
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+
+OPTIONS = OPER ( nom = "OPTIONS",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+ INCRTPS = SIMP ( statut = "o",
+ typ = "I",
+ defaut = "1",
+ max = 1,
+ val_max = 100,
+ fr = "Increment temporel (=1 pour calcul deterministe)",
+ ),
+
+ DTPREC = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.1",
+ max = 1,
+ val_max = 1.,
+ fr = "Increment maximum d'evolution de la temperature par noeud et par instant (°C)",
+ ),
+
+ DTARCH = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1000.",
+ max = 1,
+ val_max = 1000.,
+ fr = "Increment maximum de temps pour l'affichage (s)",
+ ),
+
+ NBO = SIMP ( statut = "o",
+ typ = "R",
+ max=1,
+ val_max = 1000.,
+ fr = "Nombre de noeuds a considerer dans le maillage interne",
+ ),
+
+ Liste_instants = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Liste des instants ",
+ ),
+
+) # Fin OPER OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DEFAUT = OPER ( nom = "DEFAUT",
+ sd_prod = loi,
+ op = 68,
+ fr = "Caracteristiques du defaut",
+
+#===
+# Liste des paramètres
+#===
+
+ TYPEDEF = SIMP ( statut = "o", typ = "TXM",
+ into = ( "DSR",
+ "DD",
+ ),
+ #defaut = "DSR",
+ fr = "Type de defaut : sous revetement ou debouchant",
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ Parametres_DSR = BLOC ( condition = " TYPEDEF in ( 'DSR', ) ",
+
+ ORIEDEF = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "LONGITUD", "CIRCONF" ),
+ #defaut = "LONGITUD",
+ fr = "Orientation du defaut : longitudinale ou circonferentielle",
+ ),
+
+ PROFDEF = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.006",
+ max = 1,
+ val_max = 1.,
+ fr = "Profondeur radiale du defaut (m)",
+ ),
+
+ OPTLONG = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "VALEUR", "RAPPORT" ),
+ #defaut = "VALEUR",
+ fr = "Option pour caracteriser la longueur du defaut : soit par valeur, soit par un rapport LONG/PROF",
+ ),
+
+ Option_Valeur = BLOC ( condition = "OPTLONG in ( 'VALEUR', ) ",
+
+ LONGDEF = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.060",
+ max = 1,
+ val_max = 1.,
+ fr = "Longueur du defaut sous revetement (m)",
+ ),
+
+ ), # Fin BLOC Option_Valeur
+
+ Option_Rapport = BLOC ( condition = "OPTLONG in ( 'RAPPORT', ) ",
+
+ LONGSURPROF = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "6.",
+ max = 1,
+ val_max = 100.,
+ fr = "Rapport longueur/profondeur du defaut sous revetement",
+ ),
+
+ ), # Fin BLOC Option_Rapport
+
+ DECADEF = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "-0.00001",
+ fr = "Decalage radial du defaut sous revetement (m)",
+ ),
+
+ ANGLDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Coordonnee angulaire du defaut (degres)",
+ ),
+
+ ALTIDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ fr = "Altitude du defaut (m)",
+ ),
+
+ POINDEF = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "A", "B" ),
+ defaut = "A",
+ fr = "Choix du point considere du defaut sous revetement",
+ ),
+
+ ARRETFISSURE = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de l arret de fissure",
+ ),
+
+ INCRDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.005",
+ fr = "Increment de la taille de fissure (m)",
+ ),
+
+ CORRECPLASTIC = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique BETA ",
+ ),
+
+ ), # Fin BLOC Parametres_DSR
+
+ Parametres_DD = BLOC ( condition = " TYPEDEF in ( 'DD', ) ",
+
+ ORIEDEF = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "LONGITUD", "CIRCONF" ),
+ #defaut = "LONGITUD",
+ fr = "Orientation du defaut : longitudinale ou circonferentielle",
+ ),
+
+ PROFDEF = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.006",
+ max = 1,
+ val_max = 1.,
+ fr = "Profondeur radiale du defaut (m)",
+ ),
+
+ ANGLDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Coordonnee angulaire du defaut (degres)",
+ ),
+
+ ALTIDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ fr = "Altitude du defaut (m)",
+ ),
+
+ ARRETFISSURE = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de l arret de fissure",
+ ),
+
+ INCRDEF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.005",
+ fr = "Increment de la taille de fissure (m)",
+ ),
+
+ IRWIN = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique d'Irwin ",
+ ),
+
+ CORRECPLASTIC = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique BETA ",
+ ),
+
+ ), # Fin BLOC Parametres_DD
+
+) # Fin OPER DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+CUVE = OPER (nom = "CUVE",
+ sd_prod = loi,
+ op = 68,
+ fr = "Caracteristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ TYPEGEOM = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "GEOMETRIE", "MAILLAGE"),
+ #defaut = "GEOMETRIE",
+ fr = "Traitement de la geometrie d'une cuve",
+ ),
+
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = " TYPEGEOM in ( 'GEOMETRIE', ) ",
+
+ RINT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.994",
+ fr = "Rayon interne de la cuve (m)",
+ ),
+
+ REXT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2,2015",
+ fr = "Rayon externe de la cuve (m)",
+ ),
+
+ LREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.0075",
+ fr = "Epaisseur du revetement (m)",
+ ),
+
+ LIGMIN = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.75",
+ fr = "Ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+ ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = " TYPEGEOM in ( 'MAILLAGE', ) ",
+
+ Liste_abscisses = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Liste des abscisses (m) A FAIRE",
+ ),
+ ), # Fin BLOC Maillage
+
+) # Fin OPER CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+MODELES = OPER ( nom = "MODELES",
+ sd_prod = loi,
+ op = 68,
+ fr = "Modeles de fluence, d'irradiation et de tenacite",
+
+
+#===
+# Liste des paramètres
+#===
+
+ MODELFLUENCE = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Reglementaire", "France", "ValeurImposee", "SDM", "USNRC", "REV_2", "SDM_Lissage", "GrandeDev", "GD_Cuve"),
+ #defaut = "Reglementaire",
+ fr = "Modele d'attenuation de la fluence dans l'epaisseur de la cuve",
+ ),
+
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ Reglementaire = BLOC ( condition = " MODELFLUENCE in ( 'Reglementaire', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC Reglementaire
+
+ France = BLOC ( condition = " MODELFLUENCE in ( 'France', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ KPFRANCE = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "12.7",
+ fr = "Parametre exponentiel du modele France",
+ ),
+
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " MODELFLUENCE in ( 'ValeurImposee', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " MODELFLUENCE in ( 'SDM', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " MODELFLUENCE in ( 'USNRC', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ KPUS = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "9.4488",
+ fr = "Parametre exponentiel du modele US",
+ ),
+
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " MODELFLUENCE in ( 'REV_2', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " MODELFLUENCE in ( 'SDM_Lissage', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " MODELFLUENCE in ( 'GrandeDev', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " MODELFLUENCE in ( 'GD_Cuve', ) ",
+
+ fmax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ COEFFLUENCE1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.8",
+ fr = "Fluence a l'azimut 0 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.48",
+ fr = "Fluence a l'azimut 5 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "4.46",
+ fr = "Fluence a l'azimut 10 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE4 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.41",
+ fr = "Fluence a l'azimut 15 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE5 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.37",
+ fr = "Fluence a l'azimut 20 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE6 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.16",
+ fr = "Fluence a l'azimut 25 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE7 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.74",
+ fr = "Fluence a l'azimut 30 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE8 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.25",
+ fr = "Fluence a l'azimut 35 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE9 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.89",
+ fr = "Fluence a l'azimut 40 (10^19 n/cm)",
+ ),
+
+ COEFFLUENCE10 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.78",
+ fr = "Fluence a l'azimut 45 (10^19 n/cm)",
+ ),
+
+ ), # Fin BLOC GD_Cuve
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ TYPIRR = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "RTNDT", "FLUENCE" ),
+ #defaut = "RTNDT",
+ fr = "Type d'irradiation ",
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ Parametres_RTNDT = BLOC ( condition = " TYPIRR in ( 'RTNDT', ) ",
+
+ RTNDT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "73.",
+ fr = "RTNDT finale (°C)",
+ ),
+
+ ), # Fin BLOC Parametres_RTNDT
+
+ Parametres_FLUENCE = BLOC ( condition = " TYPIRR in ( 'FLUENCE', ) ",
+
+ MODELIRR = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "HOUSSIN", "PERSOZ", "LEFEBVRE", "USNRCmdb", "BRILLAUD", "USNRCsoud" ),
+ #defaut = "HOUSSIN",
+ fr = "Modele d'irradiation pour virole ou joint soude",
+ ),
+
+ CU = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en cuivre (%)",
+ ),
+
+ Ni = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en nickel (%)",
+ ),
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en phosphore (%)",
+ ),
+
+ RTimoy = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+ ),
+
+ RTicov = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Coefficient de variation de la RTNDT initiale",
+ ),
+
+ Parametres_USNRC = BLOC ( condition = " MODELIRR in ( 'USNRCsoud', 'USNRCmdb' , ) ",
+
+ USectDRT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "28.",
+ fr = "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ ),
+
+ ), # Fin BLOC Parametres_USNRC
+
+ nbectDRTNDT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ fr = "Nombre d ecart-type par rapport a la moyenne de DRTNDT",
+ ),
+
+ ), # Fin BLOC Parametres_FLUENCE
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ MODELKIC = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "RCC-M", "RCC-M_pal", "RCC-M_exp", "Houssin_RC", "Wallin", "REME", "ORNL", "Frama", "WEIB3", "WEIB2", "LOGWOLF", "WEIB_GEN" ),
+ #defaut = "RCC-M",
+ fr = "Modele de tenacite ",
+ ),
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+ Parametres_RCCM = BLOC ( condition = " MODELKIC in ( 'RCC-M', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ KICPAL = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "195.",
+ fr = "palier deterministe de K1c quand modele RCC-M (MPa(m^0.5)) ",
+ ),
+
+ KICCDV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.15",
+ fr = "coef de variation de la loi normale de K1c quand modele RCC-M ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+
+ KIAPAL = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "195.",
+ fr = "palier deterministe de K1a -tenacite a l'arret- quand modele RCC-M (MPa(m^0.5)) ",
+ ),
+
+ KIACDV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.10",
+ fr = "coef de variation de la loi normale de K1a -tenacite a l'arret- quand modele RCC-M ",
+ ),
+
+ ), # Fin BLOC Parametres_RCC-M
+
+ Parametres_RCCMpal = BLOC ( condition = " MODELKIC in ( 'RCC-M_pal', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_RCCMpal
+
+ Parametres_RCCMexp = BLOC ( condition = " MODELKIC in ( 'RCC-M_exp', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_RCCMexp
+
+ Parametres_Houssin_RC = BLOC ( condition = " MODELKIC in ( 'Houssin_RC', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Houssin_RC
+
+ Parametres_Wallin = BLOC ( condition = " MODELKIC in ( 'Wallin', ) ",
+
+ T0WALLIN = SIMP ( statut = "o",
+ typ = "I",
+ defaut = "-27",
+ fr = "parametre T0 du modele Wallin (°C)",
+ ),
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Wallin
+
+ Parametres_REME = BLOC ( condition = " MODELKIC in ( 'REME', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_REME
+
+ Parametres_ORNL = BLOC ( condition = " MODELKIC in ( 'ORNL', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_ORNL
+
+ Parametres_Frama = BLOC ( condition = " MODELKIC in ( 'Frama', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Frama
+
+ Parametres_WEIB3 = BLOC ( condition = " MODELKIC in ( 'WEIB3', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB3
+
+ Parametres_WEIB2 = BLOC ( condition = " MODELKIC in ( 'WEIB2', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB2
+
+ Parametres_LOGWOLF = BLOC ( condition = " MODELKIC in ( 'LOGWOLF', ) ",
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_LOGWOLF
+
+ Parametres_WEIB_GEN = BLOC ( condition = " MODELKIC in ( 'WEIB_GEN',) ",
+
+ A1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "21.263",
+ fr = "coef du coef a(T) d'une Weibull generale",
+ ),
+
+ A2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "9.159",
+ fr = "coef du coef a(T) d'une Weibull generale",
+ ),
+
+ A3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.04057",
+ fr = "coef du coef a(T) d'une Weibull generale",
+ ),
+
+ B1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "17.153",
+ fr = "coef du coef b(T) d'une Weibull generale",
+ ),
+
+ B2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "55.089",
+ fr = "coef du coef b(T) d'une Weibull generale",
+ ),
+
+ B3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.0144",
+ fr = "coef du coef b(T) d'une Weibull generale",
+ ),
+
+ C1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "4.",
+ fr = "coef du coef c(T) d'une Weibull generale",
+ ),
+
+ C2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "coef du coef c(T) d'une Weibull generale",
+ ),
+
+ C3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "coef du coef c(T) d'une Weibull generale",
+ ),
+
+ nbectKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ fractKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+ ),
+
+ nbectKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB_GEN
+
+) # Fin OPER MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+INITIALISATION = OPER ( nom = "INITIALISATION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Initialisation",
+
+ Liste_tempinit = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Profil radial de la temperature initiale dans la cuve (m) (°C) ",
+ ),
+
+ Prolongation_tempsinit = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_sigmainit = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Profil radial des contraintes residuelles dans la cuve (m) (xx) (xx) (xx) ",
+ ),
+
+ Prolongation_sigmainit = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ INSTINIT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-1.",
+ fr = "Instant initial (s) ",
+ ),
+
+) # Fin OPER INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+REVETEMENT = OPER ( nom = "REVETEMENT",
+ sd_prod = loi,
+ op = 68,
+ fr = "Caracteristiques du revetement",
+
+ KTHREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "ENTHALPIE", "CHALEUR",),
+ #defaut = "CHALEUR",
+ fr = "Options pour definir les caracteristiques du revetement ",
+ ),
+
+ Parametres_ENTHALPIErev = BLOC ( condition = " KTHREV in ( 'ENTHALPIE', ) ",
+
+ Liste_enthalpie_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / enthalpie (J/kg) ",
+ ),
+
+ Prolongation_enthalpie_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_ENTHALPIErev
+
+
+ Parametres_CHALEURrev = BLOC ( condition = " KTHREV in ( 'CHALEUR', ) ",
+
+ Liste_chaleur_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / chaleur volumique (J/kg/K) ",
+ ),
+
+ Prolongation_chaleur_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_CHALEURrev
+
+ Liste_conductivite_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / conductivite thermique (W/m/°C) ",
+ ),
+
+ Prolongation_conductivite_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_young_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / module d'Young (MPa) ",
+ ),
+
+ Prolongation_young_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_dilatation_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / coefficient de dilatation thermique (°C-1) ",
+ ),
+
+ Prolongation_dilatation_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_elasticite_rev = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / limite d'elasticite (MPa) ",
+ ),
+
+ Prolongation_elasticite_rev = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ TREFREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "20.",
+ fr = "Temperature de deformation nulle (°C) ",
+ ),
+
+ TDETREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "287.",
+ fr = "Temperature de definition du coefficient de dilatation thermique (°C) ",
+ ),
+
+ NUREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.3",
+ fr = "Coefficient de Poisson ",
+ ),
+
+) # Fin OPER REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+METAL_BASE = OPER ( nom = "METAL_BASE",
+ sd_prod = loi,
+ op = 68,
+ fr = "Caracteristiques du metal de base",
+
+ KTHMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "ENTHALPIE", "CHALEUR",),
+ #defaut = "CHALEUR",
+ fr = "Options pour definir les caracteristiques du revetement ",
+ ),
+
+ Parametres_ENTHALPIEmdb = BLOC ( condition = " KTHMDB in ( 'ENTHALPIE', ) ",
+
+ Liste_enthalpie_mdb = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / enthalpie (J/kg) ",
+ ),
+
+ Prolongation_enthalpie_mdb = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_ENTHALPIEmdb
+
+
+ Parametres_CHALEURmdb = BLOC ( condition = " KTHMDB in ( 'CHALEUR', ) ",
+
+ Liste_chaleur_mdb = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / chaleur volumique (J/kg/K) ",
+ ),
+
+ Prolongation_chaleur_mdb = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_CHALEURmdb
+
+ Liste_conductivite_mdb = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / conductivite thermique (W/m/°C) ",
+ ),
+
+ Prolongation_conductivite_mdb = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_young_mdb = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / module d'Young (MPa) ",
+ ),
+
+ Prolongation_young_mdb = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_dilatation_mdb = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Temperature (°C) / coefficient de dilatation thermique (°C-1) ",
+ ),
+
+ Prolongation_dilatation_mdb = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ TREFMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "20.",
+ fr = "Temperature de deformation nulle (°C) ",
+ ),
+
+ TDETMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "287.",
+ fr = "Temperature de definition du coefficient de dilatation thermique (°C) ",
+ ),
+
+ NUMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.3",
+ fr = "Coefficient de Poisson ",
+ ),
+
+) # Fin OPER METAL_BASE
+
+
+#================
+# 8. TRANSITOIRES
+#================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+TRANSITOIRE = OPER ( nom = "TRANSITOIRE",
+ sd_prod = loi,
+ op = 68,
+ fr = "Description du transitoire",
+
+ Liste_pression = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "instant (s) / pression (MPa) ",
+ ),
+
+ Prolongation_pression = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ TYPCLTH = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "TEMP_IMPO", "FLUX_REP", "ECHANGE", "DEBIT", "TEMP_FLU"),
+ #defaut = "ECHANGE",
+ fr = "Type de condition thermique en paroi interne ",
+ ),
+
+ Parametres_TEMP_IMPO = BLOC ( condition = " TYPCLTH in ( 'TEMP_IMPO', ) ",
+
+ Liste_temp_impo = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Temperature imposee (°C) ",
+ ),
+
+ Prolongation_temp_impo = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_TEMP_IMPO
+
+ Parametres_FLUX_REP = BLOC ( condition = " TYPCLTH in ( 'FLUX_REP', ) ",
+
+ Liste_flux_rep = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Flux de chaleur impose (W/m2) ",
+ ),
+
+ Prolongation_flux_rep = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_FLUX_REP
+
+ Parametres_ECHANGE = BLOC ( condition = " TYPCLTH in ( 'ECHANGE', ) ",
+
+ Liste_echange_temp = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Temperature impose (°C) ",
+ ),
+
+ Prolongation_echange_temp = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_echange_coef = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Coefficient d echange (W/m2/K) ",
+ ),
+
+ Prolongation_echange_coef = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ ), # Fin BLOC Parametres_ECHANGE
+
+ Parametres_DEBIT = BLOC ( condition = " TYPCLTH in ( 'DEBIT', ) ",
+
+ Liste_debit = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Debit massique (kg/s) ",
+ ),
+
+ Prolongation_debit = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_temp_injection = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Temperature d injection de securite (°C) ",
+ ),
+
+ Prolongation_temp_injection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ DH = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Diametre hydraulique (m) ",
+ ),
+
+ SECTION = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Section espace annulaire (m2) ",
+ ),
+
+ DELTA = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Hauteur caracteristique convection naturelle (m) ",
+ ),
+
+ ALPHA_CF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection forcee (-) ",
+ ),
+
+ ALPHA_CN = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection naturelle (-) ",
+ ),
+
+ EPS = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.00001",
+ fr = "Critere convergence relative (-) ",
+ ),
+
+ VM = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Volume de melange CREARE (m3) ",
+ ),
+
+ T0 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Temperature initiale CREARE (degC) ",
+ ),
+
+ SE = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Surface d'echange fluide/structure (m2) ",
+ ),
+
+ ), # Fin BLOC Parametres_DEBIT
+
+ Parametres_TEMP_FLU = BLOC ( condition = " TYPCLTH in ( 'TEMP_FLU', ) ",
+
+ Liste_temp_flu = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Debit massique (kg/s) ",
+ ),
+
+ Prolongation_temp_flu = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ Liste_debit_injection = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Instant (s) / Debit d injection de securite (kg/s) ",
+ ),
+
+ Prolongation_debit_injection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+ fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+ ),
+
+ DH = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Diametre hydraulique (m) ",
+ ),
+
+ SECTION = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Section espace annulaire (m2) ",
+ ),
+
+ DELTA = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Hauteur caracteristique convection naturelle (m) ",
+ ),
+
+ ALPHA_CF = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection forcee (-) ",
+ ),
+
+ ALPHA_CN = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection naturelle (-) ",
+ ),
+
+ EPS = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.00001",
+ fr = "Critere convergence relative (-) ",
+ ),
+
+ ), # Fin BLOC Parametres_TEMP_FLU
+
+) # Fin OPER TRANSITOIRE
+
+
+#================================
+# 3. Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+ ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type d'Analyse",
+ ang = "Analysis",
+ ),
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Nombre de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitsPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension (autant que de variables declarees)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension",
+ ang = "Units per dimension",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ PointsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ NumericalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Resultats numeriques",
+ ang = "NumericalResults",
+ ),
+
+ GraphicalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Resultats graphiques",
+ ang = "GraphicalResults",
+ ),
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ PointsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.0,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ AnalysedCorrelations = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "Analytical" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "f",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ fr = " maximum ...",
+ ang = "Absolute maximum ...."
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+ Correlation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'Independent', 'Linear' ),
+ defaut = 'Linear',
+ max = 1,
+ fr = "Le type de correlation entre les variables",
+ ang = "Correlation between variables",
+ ),
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.0,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "VariationCoefficient",
+ ),
+
+ IterationNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ AnalyticalSettings = BLOC ( condition = " Method in ( 'Analytical', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "FORM", "SORM" ),
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ fr = "Methode d'optimisation",
+ ang = "Optimisation method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+ regles = ( EXCLUS ( "MaximumAbsoluteError", "RelativeAbsoluteError" ), ),
+
+ MaximumAbsoluteError = SIMP ( statut = "f",
+ typ = "R",
+ max = 1,
+ defaut = 1E-6,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successifs",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ RelativeAbsoluteError = SIMP ( statut = "f",
+ typ = "R",
+ max = 1,
+ defaut = 1E-6,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "f",
+ typ = "R",
+ max = 1,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORM = BLOC ( condition = " Approximation in ( 'FORM', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ NumericalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Resultats numeriques",
+ ang = "NumericalResults",
+ ),
+
+ GraphicalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Resultats graphiques",
+ ang = "GraphicalResults",
+ ),
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSettings = BLOC ( condition = " HasoferReliabilityIndex in ( 'yes', ) ",
+
+ NumericalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Resultats numeriques",
+ ang = "NumericalResults",
+ ),
+
+ GraphicalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Resultats graphiques",
+ ang = "GraphicalResults",
+ ),
+
+ ), # Fin BLOC HasoferReliabilityIndexSettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORM
+
+
+ SORM = BLOC ( condition = " Approximation in ( 'SORM', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ NumericalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Resultats numeriques",
+ ang = "NumericalResults",
+ ),
+
+ GraphicalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Resultats graphiques",
+ ang = "GraphicalResults",
+ ),
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSettings = BLOC ( condition = " HasoferReliabilityIndex in ( 'yes', ) ",
+
+ NumericalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Resultats numeriques",
+ ang = "NumericalResults",
+ ),
+
+ GraphicalResults = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Resultats graphiques",
+ ang = "GraphicalResults",
+ ),
+
+ ), # Fin BLOC HasoferReliabilityIndexSettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SORM
+
+
+
+ ), # Fin BLOC AnalyticalSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+
+
+#===============================
+# 5. Definition des parametres
+#===============================
+VARI = OPER ( nom = "VARI",
+ sd_prod = variable,
+ op = None,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+ type=SIMP(statut='f',defaut="IN",into=("IN","OUT"), typ = "TXM",)
+ )
+
+ESSAI=PROC(nom="ESSAI",
+ op=None,
+ fr="Essai",
+ ang = "Test",
+
+ MALOI = SIMP(statut='o',typ=(loi,),),
+ MAVARIABLE = SIMP(statut='o',typ=(variable,),),
+) ;
+
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+ A_CLASSER ( ('OPTIONS'), ('DEFAUT') ),
+ A_CLASSER ( ('DEFAUT'), ('CUVE') ),
+ A_CLASSER ( ('CUVE'), ('MODELES') ),
+ A_CLASSER ( ('MODELES'), ('INITIALISATION') ),
+ A_CLASSER ( ('INITIALISATION'), ('REVETEMENT') ),
+ A_CLASSER ( ('REVETEMENT'), ('METAL_BASE') ),
+ A_CLASSER ( ('METAL_BASE'), ('TRANSITOIRE') )
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ repetable = 'n',
+ fr = "Définitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+ IncrementTemporel = SIMP ( statut = "o",
+ typ = "I",
+ defaut = "1",
+ max = 1,
+ #val_max = 100,
+ fr = "Incrément temporel (=1 pour calcul déterministe)",
+ ),
+
+# DTPREC
+ IncrementMaxTemperature = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.1",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Incrément maximum d'évolution de la température par noeud et par instant (°C)",
+ ),
+
+# DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1000.",
+ max = 1,
+ val_min = 0.,
+ val_max = 1000.,
+ fr = "Incrément maximum de temps pour l'affichage (s)",
+ ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut = "o",
+ typ = "R",
+ max=1,
+ val_min = 1.,
+ val_max = 100.,
+ fr = "Nombre de noeuds à considérer dans le maillage interne",
+ ),
+
+#
+ ListeInstants = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Liste des instants pour lesquels la température et les contraintes seront archivés",
+ ),
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques du défaut",
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+ TypeInitial = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Sous Revetement", # DSR
+ "Debouchant", # DD
+ ),
+ fr = "Type initial du défaut : sous revêtement ou débouchant",
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ SousRevetement = BLOC ( condition = " TypeInitial in ( 'Sous Revetement', ) ",
+
+ # ORIEDEF
+ Orientation = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Longitudinale", # LONGITUD
+ "Circonferentielle" ), # CIRCONF
+ fr = "Orientation du défaut",
+ ),
+
+ # PROFDEF
+ ProfondeurRadiale = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.006",
+ max = 1,
+ val_max = 1.,
+ fr = "Profondeur radiale du défaut (m)",
+ ),
+
+ # OPTLONG
+ OptionCalculLongueur = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Valeur", # VALEUR
+ "Relation lineaire avec la longueur" ), # RAPPORT
+ #defaut = "VALEUR",
+ fr = "Option pour caractériser la longueur du défaut : soit par valeur, soit par un rapport LONG/PROF",
+ ),
+
+ Option_Valeur = BLOC ( condition = "OptionCalculLongueur in ( 'Valeur', ) ",
+
+ # LONGDEF
+ Longueur = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.060",
+ max = 1,
+ val_max = 1.,
+ fr = "Longueur du défaut sous revêtement (m)",
+ ),
+
+ ), # Fin BLOC Option_Valeur
+
+ Option_Rapport = BLOC ( condition = "OptionCalculLongueur in ( 'Relation lineaire avec la longueur', ) ",
+
+ # LONGSURPROF
+ LongueurSurProfondeur = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "6.",
+ max = 1,
+ val_max = 100.,
+ fr = "Rapport longueur/profondeur du défaut sous revêtement",
+ ),
+
+ ), # Fin BLOC Option_Rapport
+
+ # DECADEF
+ DecalageRadial = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "-0.00001",
+ fr = "Décalage radial du defaut sous revêtement (m)",
+ ),
+
+ # ANGLDEF
+ Azimut = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Position angulaire du défaut dans le cylindre de cuve (degrés)",
+ ),
+
+ # ALTIDEF
+ Altitude = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ val_min = 0.,
+ val_max = 4.,
+ fr = "Altitude du défaut sur le cylindre de cuve (m)",
+ ),
+
+ # POINDEF
+ Pointe = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "A", "B" ),
+ defaut = "A",
+ fr = "Choix du point considéré du défaut sous revêtement",
+ ),
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de l'arrêt de fissure",
+ ),
+
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.005",
+ fr = "Incrément de la taille de fissure pour la propagation (m)",
+ ),
+
+ # CORRECPLASTIC
+ CorrectionPlastiqueBeta = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+ ),
+
+ ), # Fin BLOC SousRevetement
+
+ Debouchant = BLOC ( condition = " TypeInitial in ( 'Debouchant', ) ",
+
+ # ORIEDEF
+ Orientation = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Longitudinale", # LONGITUD
+ "Circonferentielle" ), # CIRCONF
+ #defaut = "LONGITUD",
+ fr = "Orientation du défaut : longitudinale ou circonférentielle",
+ ),
+
+ # PROFDEF
+ ProfondeurRadiale = SIMP ( statut = "o",
+ typ = "R",
+ #defaut = "0.006",
+ max = 1,
+ val_max = 1.,
+ fr = "Profondeur radiale du défaut (m)",
+ ),
+
+ # ANGLDEF
+ Azimut = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Position angulaire du défaut dans le cylindre de la cuve (en degrés)",
+ ),
+
+ # ALTIDEF
+ Altitude = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ fr = "Altitude du défaut sur le cylindre de la cuve (m)",
+ ),
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de l'arrêt de fissure",
+ ),
+
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.005",
+ fr = "Incrément de la taille de fissure pour la propagation (m)",
+ ),
+
+ # IRWIN
+ CorrectionPlastiqueIrwin = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique d'Irwin dans le calcul du facteur d'intensité de contraintes",
+ ),
+
+ # CORRECPLASTIC
+ CorrectionPlastiqueBeta = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "OUI", "NON" ),
+ defaut = "NON",
+ fr = "Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+ ),
+
+ ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ # TYPEGEOM
+ TraitementGeometrie = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Topologie", # GEOMETRIE
+ "Maillage"), # MAILLAGE
+ #defaut = "geometrie",
+ fr = "Choix de la définition de la geométrie d'une cuve",
+ ),
+
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = " TraitementGeometrie in ( 'Topologie', ) ",
+
+ # RINT
+ RayonInterne = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.994",
+ fr = "Rayon interne de la cuve (m)",
+ ),
+
+ # REXT
+ RayonExterne = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.2015",
+ fr = "Rayon externe de la cuve (m)",
+ ),
+
+ # LREV
+ EpaisseurRevetement = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.0075",
+ fr = "Epaisseur du revêtement (m)",
+ ),
+
+ # LIGMIN
+ LigamentExterneMin = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.75",
+ fr = "Ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+ ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = " TraitementGeometrie in ( 'Maillage', ) ",
+
+ # Question : quel rapport avec NBO ??
+ Liste_abscisses = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Liste des abscisses (m)",
+ ),
+ ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+ op = 68,
+ repetable = 'n',
+ fr = "Modèles de fluence, d'irradiation et de ténacité",
+
+
+#===
+# Liste des paramètres
+#===
+
+ # MODELFLUENCE
+ Fluence = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+ "Exponentiel sans revetement k=12.7 (France)", # France
+ "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee
+ "Donnees francaises du palier CPY (SDM)", # SDM
+ "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev
+ "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC
+ "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2
+ "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage
+ "Grand developpement (GD_Cuve)"), # GD_Cuve
+ #defaut = "Reglementaire",
+ fr = "Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+ ),
+
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ Reglementaire = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC Reglementaire
+
+ France = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ # KPFRANCE = SIMP ( statut = "o",
+ KPFrance = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "12.7",
+ fr = "Paramètre exponentiel du modèle France",
+ ),
+
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " Fluence in ( 'Donnees francaises du palier CPY' (SDM), ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " Fluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ KPUS = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "9.4488",
+ fr = "Paramètre exponentiel du modèle US",
+ ),
+
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " Fluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " Fluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " Fluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " Fluence in ( 'Grand developpement (GD_Cuve)', ) ",
+
+ # fmax
+ FluenceMax = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "6.5",
+ fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+ ),
+
+ # COEFFLUENCE1
+ FluenceAzimut0 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.8",
+ fr = "Fluence à l'azimut 0 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE2
+ FluenceAzimut5 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.48",
+ fr = "Fluence à l'azimut 5 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE3
+ FluenceAzimut10 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "4.46",
+ fr = "Fluence à l'azimut 10 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE4
+ FluenceAzimut15 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.41",
+ fr = "Fluence à l'azimut 15 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE5
+ FluenceAzimut20 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.37",
+ fr = "Fluence à l'azimut 20 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE6
+ FluenceAzimut25 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "3.16",
+ fr = "Fluence à l'azimut 25 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE7
+ FluenceAzimut30 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.74",
+ fr = "Fluence à l'azimut 30 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE8
+ FluenceAzimut35 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.25",
+ fr = "Fluence à l'azimut 35 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE9
+ FluenceAzimut40 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.89",
+ fr = "Fluence à l'azimut 40 (10^19 n/cm2)",
+ ),
+
+ # COEFFLUENCE10
+ FluenceAzimut45 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.78",
+ fr = "Fluence à l'azimut 45 (10^19 n/cm2)",
+ ),
+
+ ), # Fin BLOC GD_Cuve
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ # TYPIRR
+ Irradiation = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT
+ "Modele d irradiation" ), # FLUENCE
+ fr = "Type d'irradiation",
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ RTndt = BLOC ( condition = " Irradiation in ( 'RTndt de la cuve a l instant de l analyse', ) ",
+
+ RTNDT = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "73.",
+ fr = "RTNDT de la cuve à l'instant de l'analyse (°C)",
+ ),
+
+ ), # Fin BLOC RTndt
+
+ Modele = BLOC ( condition = " Irradiation in ( 'Modele d irradiation', ) ",
+
+ # MODELIRR
+ ModeleIrradiation = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN
+ "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+ "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+ "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+ "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+ "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+ fr = "Modèle d'irradiation pour virole ou joint soudé",
+ ),
+
+ # CU
+ TeneurCuivre = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en cuivre (%)",
+ ),
+
+ # NI
+ TeneurNickel = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en nickel (%)",
+ ),
+
+ # P
+ TeneurPhosphore = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Teneur en phosphore (%)",
+ ),
+
+ Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Joint Soude : Regulatory Guide 1.00 rev 2', 'Metal de Base : Regulatory Guide 1.00 rev 2' , ) ",
+
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+ ),
+
+ # RTicov
+ CoefVariationRTndt = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "Coefficient de variation de la RTNDT initiale",
+ ),
+
+ # USectDRT
+ EcartTypeRTndt = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "28.",
+ fr = "Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ ),
+
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ ),
+
+ ), # Fin BLOC Parametres_USNRC
+
+ ), # Fin BLOC Modele
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ # MODELKIC
+ Tenacite = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "RCC-M/ASME coefficient=2", # RCC-M
+ "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+ "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+ "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+ "Weibull basee sur la master cuve", # Wallin
+ "Weibull basee sur la master cuve (REME)", # REME
+ "Weibull n°1 (etude ORNL)", # ORNL
+ "Weibull n°2", # WEIB2
+ "Weibull n°3", # WEIB3
+ "Weibull generalisee", # WEIB_GEN
+ "Exponentielle n°1 (Frama)", # Frama
+ "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+ fr = "Modèle de ténacité",
+ ),
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+ RCCM_delta2 = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME coefficient=2', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # KICPAL
+ PalierDuctile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "195.",
+ fr = "Palier déterministe de K1c quand modèle RCC-M (MPa(m^0.5)) ",
+ ),
+
+ # KICCDVD = SIMP ( statut = "o",
+ CoefficientVariation_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.15",
+ fr = "Coefficient de variation de la loi normale de K1c quand modèle RCC-M ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+
+ # KIAPAL
+ PalierDuctile_KIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "195.",
+ fr = "Palier déterministe de K1a -ténacite à l'arrêt- quand modèle RCC-M (MPa(m^0.5)) ",
+ ),
+
+ # KIACDV
+ CoefficientVariation_KIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.10",
+ fr = "Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- quand modèle RCC-M ",
+ ),
+
+ ), # Fin BLOC Parametres_RCC-M
+
+ RCCM_KIpal = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_RCCMpal
+
+ RCCM_KIexp = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_RCCMexp
+
+ RCCM_delta233 = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME coefficient=2.33 (Houssin)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Houssin_RC
+
+ Weibull_MasterCuve = BLOC ( condition = " Tenacite in ( 'Weibull basee sur la master cuve', ) ",
+
+ # T0WALLIN
+ Temperature_KIc100 = SIMP ( statut = "o",
+ typ = "I",
+ defaut = "-27",
+ fr = "Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5",
+ ),
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Wallin
+
+ Weibull_MasterCuveREME = BLOC ( condition = " Tenacite in ( 'Weibull basee sur la master cuve (REME)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_REME
+
+ Weibull1_ORNL = BLOC ( condition = " Tenacite in ( 'Weibull n°1 (etude ORNL)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_ORNL
+
+ Exponentielle1_Frama = BLOC ( condition = " Tenacite in ( 'Exponentielle n°1 (Frama)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_Frama
+
+ Weibull3 = BLOC ( condition = " Tenacite in ( 'Weibull n°3', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB3
+
+ Weibull2 = BLOC ( condition = " Tenacite in ( 'Weibull n°2', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB2
+
+ Exponentielle2_LOGWOLF = BLOC ( condition = " Tenacite in ( 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_LOGWOLF
+
+ Weibull_Generalisee = BLOC ( condition = " Tenacite in ( 'Weibull generalisee',) ",
+
+ Coefficients = FACT ( statut = "o",
+
+ # A1
+ A1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "21.263",
+ fr = "coef du coef a(T) d'une Weibull générale",
+ ),
+
+ # A2
+ A2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "9.159",
+ fr = "coef du coef a(T) d'une Weibull générale",
+ ),
+
+ # A3
+ A3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.04057",
+ fr = "coef du coef a(T) d'une Weibull générale",
+ ),
+
+ # B1
+ B1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "17.153",
+ fr = "coef du coef b(T) d'une Weibull générale",
+ ),
+
+ # B2
+ B2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "55.089",
+ fr = "coef du coef b(T) d'une Weibull générale",
+ ),
+
+ # B3
+ B3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.0144",
+ fr = "coef du coef b(T) d'une Weibull générale",
+ ),
+
+ # C1
+ C1 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "4.",
+ fr = "coef du coef c(T) d'une Weibull générale",
+ ),
+
+ # C2
+ C2 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "coef du coef c(T) d'une Weibull générale",
+ ),
+
+ # C3
+ C3 = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.",
+ fr = "coef du coef c(T) d'une Weibull générale",
+ ),
+
+ ), # FIN FACT Coefficients
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+ ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "5.",
+ fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+ ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+ ),
+
+ ), # Fin BLOC Parametres_WEIB_GEN
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+ op = 68,
+ repetable = 'n',
+ fr = "Initialisation : instant initial, profils radiaux de température et contraintes",
+
+ TemperatureInitiale = FACT ( statut = "o",
+
+ ProfilRadial_TemperatureInitiale = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Profil radial de la température initiale dans la cuve (m) (°C) ",
+ ),
+
+ Amont_TemperatureInitiale = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_TemperatureInitiale = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT TemperatureInitiale
+
+ ContraintesInitiales = FACT ( statut = "o",
+
+ ProfilRadial_ContraintesInitiales = SIMP ( statut = "o",
+ typ = Tuple(4),
+ max = "**",
+ fr = "Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (m) (xx) (xx) (xx) ",
+ ),
+
+ Amont_ContraintesInitiales = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ContraintesInitiales = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT ContraintesInitiales
+
+ # INSTINIT
+ InstantInitialisation = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-1.",
+ fr = "Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ",
+ ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du revêtement",
+
+ # KTHREV
+ ConditionLimiteThermiqueREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "ENTHALPIE", "CHALEUR",),
+ #defaut = "CHALEUR",
+ fr = "Option pour définir les caractéristiques du revêtement ",
+ ),
+
+ EnthalpieREV = BLOC ( condition = " ConditionLimiteThermiqueREV in ( 'ENTHALPIE', ) ",
+
+ EnthalpieREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / enthalpie massique (J/kg) ",
+ ),
+
+ Amont_EnthalpieREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_EnthalpieREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC EnthalpieREV
+
+
+ ChaleurREV = BLOC ( condition = " ConditionLimiteThermiqueREV in ( 'CHALEUR', ) ",
+
+ ChaleurREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / chaleur volumique (J/kg/K) ",
+ ),
+
+ Amont_ChaleurREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ChaleurREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC ChaleurREV
+
+ ConductiviteREV = FACT (statut = "o",
+
+ ConductiviteREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / conductivité thermique (W/m/°C) ",
+ ),
+
+ Amont_ConductiviteREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ConductiviteREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT ConductiviteREV
+
+ ModuleYoungREV = FACT (statut = "o",
+
+ ModuleYoungREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / module d'Young (MPa) ",
+ ),
+
+ Amont_ModuleYoungREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ModuleYoungREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT ModuleYoungREV
+
+ CoeffDilatThermREV = FACT (statut = "o",
+
+ CoeffDilatThermREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / coefficient de dilatation thermique (°C-1) ",
+ ),
+
+ Amont_CoeffDilatThermREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_CoeffDilatThermREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT CoeffDilatThermREV
+
+ LimiteElasticiteREV = FACT (statut = "o",
+
+ LimiteElasticiteREV_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / limite d'élasticite (MPa) ",
+ ),
+
+ Amont_LimiteElasticiteREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_LimiteElasticiteREV = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT LimiteElasticiteREV
+
+ AutresParametresREV = FACT (statut = "o",
+
+ # TREFREV
+ TemperatureDeformationNulleREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "20.",
+ fr = "Température de référence pour laquelle les déformations thermiques sont nulles (°C) ",
+ ),
+
+ # TDETREV
+ TemperaturePourCoefDilatThermREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "287.",
+ fr = "Température de définition du coefficient de dilatation thermique (°C) ",
+ ),
+
+ # NUREV
+ CoefficientPoissonREV = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.3",
+ fr = "Coefficient de Poisson ",
+ ),
+
+ ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du metal de base",
+
+ # KTHMDB
+ ConditionLimiteThermiqueMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "ENTHALPIE", "CHALEUR",),
+ #defaut = "CHALEUR",
+ fr = "Option pour definir les caractéristiques du revêtement ",
+ ),
+
+ EnthalpieMDB = BLOC ( condition = " ConditionLimiteThermiqueMDB in ( 'ENTHALPIE', ) ",
+
+ EnthalpieMDB_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / enthalpie massique (J/kg) ",
+ ),
+
+ Amont_EnthalpieMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_EnthalpieMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC EnthalpieMDB
+
+ ChaleurMDB = BLOC ( condition = " ConditionLimiteThermiqueMDB in ( 'CHALEUR', ) ",
+
+ ChaleurMDB_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / chaleur volumique (J/kg/K) ",
+ ),
+
+ Amont_ChaleurMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ChaleurMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC ChaleurMDB
+
+ ConductiviteMDB = FACT ( statut = "o",
+
+ ConductiviteMDB_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / conductivité thermique (W/m/°C) ",
+ ),
+
+ Amont_ConductiviteMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ConductiviteMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT ConductiviteMDB
+
+ ModuleYoungMDB = FACT ( statut = "o",
+
+ ModuleYoungMDB_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / module d'Young (MPa) ",
+ ),
+
+ Amont_ModuleYoungMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_ModuleYoungMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT ModuleYoungMDB
+
+ CoeffDilatThermMDB = FACT ( statut = "o",
+
+ CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Température (°C) / coefficient de dilatation thermique (°C-1) ",
+ ),
+
+ Amont_CoeffDilatThermMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_CoeffDilatThermMDB = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin FACT CoeffDilatThermMDB
+
+ AutresParametresMDB = FACT ( statut = "o",
+
+ # TREFMDB
+ TemperatureDeformationNulleMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "20.",
+ fr = "Température de référence pour laquelle les déformations thermiques sont nulles (°C) ",
+ ),
+
+ # TDETMDB
+ TemperaturePourCoefDilatThermMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "287.",
+ fr = "Température de définition du coefficient de dilatation thermique (°C) ",
+ ),
+
+ # NUMDB
+ CoefficientPoissonMDB = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.3",
+ fr = "Coefficient de Poisson ",
+ ),
+
+ ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+ op = 68,
+ repetable = 'n',
+ fr = "Description du transitoire thermohydraulique",
+
+ Pression = FACT ( statut = "o",
+
+ ProfilTemporel_Pression = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / pression (MPa) ",
+ ),
+
+ Amont_Pression = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_Pression = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # FIN FACT Pression
+
+ # TYPCLTH
+ TypeConditionLimiteThermique = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Temperature imposee en paroi", # TEMP_IMPO
+ "Flux de chaleur impose en paroi", # FLUX_REP
+ "Temperature imposee du fluide et coefficient echange", # ECHANGE
+ "Debit massique et temperature d injection de securite", # DEBIT
+ "Temperature imposee du fluide et debit d injection de securite"), # TEMP_FLU
+ #defaut = "ECHANGE",
+ fr = "Type de condition thermique en paroi interne ",
+ ),
+
+ TemperatureImposeeParoi = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi', ) ",
+
+ ProfilTemporel_TemperatureImposeeParoi = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Température imposée (°C) ",
+ ),
+
+ Amont_TemperatureImposeeParoi = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_TemperatureImposeeParoi = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC TemperatureImposeeParoi
+
+ FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+ ProfilTemporel_FluxChaleur = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Flux de chaleur impose (W/m2) ",
+ ),
+
+ Amont_FluxChaleur = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_FluxChaleur = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC FluxChaleur
+
+ TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Température imposée (°C) ",
+ ),
+
+ Amont_TemperatureImposeeFluide = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_TemperatureImposeeFluide = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC TemperatureImposeeFluide
+
+ CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+ ProfilTemporel_CoefficientEchange = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Coefficient d'échange (W/m2/K) ",
+ ),
+
+ Amont_CoefficientEchange = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_CoefficientEchange = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC CoefficientEchange
+
+ DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_DebitMassique = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Débit massique (kg/s) ",
+ ),
+
+ Amont_DebitMassique = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_DebitMassique = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC DebitMassique
+
+ TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureInjection = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Température d'injection de sécurité (°C) ",
+ ),
+
+ Amont_TemperatureInjection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_TemperatureInjection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+ ), # Fin BLOC TemperatureInjection
+
+ Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Diamètre hydraulique (m) ",
+ ),
+
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Section espace annulaire (m2) ",
+ ),
+
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Hauteur caractéristique convection naturelle (m) ",
+ ),
+
+ # ALPHA_CF
+ CoeffVestale_ConvectionForcee = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection forcée (-) ",
+ ),
+
+ # ALPHA_CN
+ CoeffVestale_ConvectionNaturelle = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient Vestale convection naturelle (-) ",
+ ),
+
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.00001",
+ fr = "Critère convergence relative (-) ",
+ ),
+
+ # VM
+ VolumeMelange_CREARE = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Volume de mélange CREARE (m3) ",
+ ),
+
+ # T0
+ TemperatureInitiale_CREARE = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Température initiale CREARE (°C) ",
+ ),
+
+ # SE
+ SurfaceEchange_FluideStructure = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Surface d'échange fluide/structure (m2) ",
+ ),
+
+ ), # Fin BLOC Creare
+
+
+ DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ ProfilTemporel_DebitInjection = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Instant (s) / Débit d'injection de sécurité (kg/s) ",
+ ),
+
+ Amont_DebitInjection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière amont",
+ ),
+
+ Aval_DebitInjection = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'Continu', 'Exclu', 'Lineaire' ),
+ fr = "Prolongation à la frontière aval",
+ ),
+
+ ), # Fin BLOC DebitInjection
+
+
+ Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Diamètre hydraulique (m) ",
+ ),
+
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Section espace annulaire (m2) ",
+ ),
+
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "-2.",
+ fr = "Hauteur caractéristique convection naturelle (m) ",
+ ),
+
+ # ALPHA_CF
+ CoeffVestale_ConvectionForcee = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient d'échange Vestale convection forcée (-) ",
+ ),
+
+ # ALPHA_CN
+ CoeffVestale_ConvectionNaturelle = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1.",
+ fr = "Coefficient d'échange Vestale convection naturelle (-) ",
+ ),
+
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.00001",
+ fr = "Critère convergence relative (-) ",
+ ),
+
+ ), # Fin BLOC Vestale
+
+) # Fin PROC TRANSITOIRE
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+ A_CLASSER ( ('OPTIONS'), ('DEFAUT') ),
+ A_CLASSER ( ('DEFAUT'), ('CUVE') ),
+ A_CLASSER ( ('CUVE'), ('MODELES') ),
+ A_CLASSER ( ('MODELES'), ('INITIALISATION') ),
+ A_CLASSER ( ('INITIALISATION'), ('REVETEMENT') ),
+ A_CLASSER ( ('REVETEMENT'), ('METAL_BASE') ),
+ A_CLASSER ( ('METAL_BASE'), ('TRANSITOIRE') )
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+ # A1
+ A1 = SIMP ( statut="o", typ="R", defaut=21.263,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A2
+ A2 = SIMP ( statut="o", typ="R", defaut=9.159,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A3
+ A3 = SIMP ( statut="o", typ="R", defaut=0.04057,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # B1
+ B1 = SIMP ( statut="o", typ="R", defaut=17.153,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B2
+ B2 = SIMP ( statut="o", typ="R", defaut=55.089,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B3
+ B3 = SIMP ( statut="o", typ="R", defaut=0.0144,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # C1
+ C1 = SIMP ( statut="o", typ="R", defaut=4.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C2
+ C2 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C3
+ C3 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+ # COEFFLUENCE1
+ Azimut_0deg = SIMP ( statut="o", typ="R", defaut=5.8,
+ fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+ # COEFFLUENCE2
+ Azimut_5deg = SIMP ( statut="o", typ="R", defaut=5.48,
+ fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+ # COEFFLUENCE3
+ Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46,
+ fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+ # COEFFLUENCE4
+ Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41,
+ fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+ # COEFFLUENCE5
+ Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37,
+ fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+ # COEFFLUENCE6
+ Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16,
+ fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+ # COEFFLUENCE7
+ Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74,
+ fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+ # COEFFLUENCE8
+ Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25,
+ fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+ # COEFFLUENCE9
+ Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89,
+ fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+ # COEFFLUENCE10
+ Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78,
+ fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ repetable = 'n',
+ fr = "Définitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+ IncrementTemporel = SIMP ( statut="o", typ="I", max=1, defaut=1,
+ fr="Incrément temporel (=1 pour calcul déterministe)", ),
+
+# DTPREC
+ IncrementMaxTemperature = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut=0.1,
+ fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+
+# DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1000., defaut="1000.",
+ fr="Incrément maximum de temps pour l'affichage (s)", ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="R", max=1, val_min=1., val_max=1000.,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+#
+ ListeInstants = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques du défaut",
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+ TypeInitial = SIMP ( statut="o", typ="TXM",
+ fr="Type initial du défaut : sous revêtement ou débouchant",
+ into=( "Sous Revetement", # DSR
+ "Debouchant", ), # DD
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ SousRevetement = BLOC ( condition = "TypeInitial=='Sous Revetement'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ # PROFDEF
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=1., val_max=1., defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+
+ # OPTLONG into VALEUR, RAPPORT
+ OptionCalculLongueur = SIMP ( statut="o", typ="TXM",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par un rapport LONG/PROF",
+ into = ( "Valeur",
+ "Relation lineaire avec la longueur" ), ),
+
+ Option_Valeur = BLOC ( condition = "OptionCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ ), # Fin BLOC Option_Valeur
+
+ Option_Rapport = BLOC ( condition = "OptionCalculLongueur=='Relation lineaire avec la longueur'",
+ # LONGSURPROF
+ LongueurSurProfondeur = SIMP ( statut="o", typ="R", max=1, val_max=100.,
+ fr="Rapport longueur/profondeur du défaut sous revêtement", ),
+ ), # Fin BLOC Option_Rapport
+
+ # DECADEF
+ DecalageRadial = SIMP ( statut="o", typ="R", defaut=-0.00001,
+ fr="Décalage radial du defaut sous revêtement (en m)", ),
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ALTIDEF
+ Altitude = SIMP ( statut="o", typ="R", val_min=0., val_max=4., defaut=2.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut sous revêtement",
+ into=( "A", "B" ), ),
+ # CORRECPLASTIC
+ CorrectionPlastiqueBeta = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+ into=( "OUI", "NON" ), ),
+
+ ), # Fin BLOC SousRevetement
+
+ Debouchant = BLOC ( condition = "TypeInitial=='Debouchant'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM",
+ fr="Orientation du défaut : longitudinale ou circonférentielle",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+ # PROFDEF
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut=0.006,
+ fr="Profondeur radiale du défaut (en m)", ),
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de la cuve (en degrés)", ),
+ # ALTIDEF
+ Altitude = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Altitude du défaut sur le cylindre de la cuve (en m)", ),
+ # IRWIN
+ CorrectionPlastiqueIrwin = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de la correction plastique d'Irwin dans le calcul du facteur d'intensité de contraintes",
+ into=( "OUI", "NON" ), ),
+ # CORRECPLASTIC
+ CorrectionPlastiqueBeta = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+ into=( "OUI", "NON" ), ),
+
+ ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ # TYPEGEOM
+ TraitementGeometrie = SIMP ( statut="o", typ="TXM",
+ fr="Choix de la définition de la geométrie d'une cuve",
+ into=( "Topologie", # GEOMETRIE
+ "Maillage"), # MAILLAGE
+ ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+ # RINT
+ RayonInterne = SIMP ( statut="o", typ="R", val_min=0., defaut=1.994,
+ fr="Rayon interne de la cuve (en m)", ),
+
+ # DTV : comment preciser que REXT > RINT ?
+ # REXT
+ RayonExterne = SIMP ( statut="o", typ="R", defaut=2.2015,
+ fr="Rayon externe de la cuve (en m)", ),
+
+ # DTV : comment preciser que LREV < RINT ?
+ # LREV
+ EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075,
+ fr="Epaisseur du revêtement (m)", ),
+
+ # LIGMIN
+ LigamentExterneMin = SIMP ( statut="o", typ="R", defaut=0.75,
+ fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+ # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+ # Question : quel rapport avec NBO ??
+ Liste_abscisses = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des abscisses (m)", ),
+ ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+ op = 68,
+ repetable = 'n',
+ fr = "Modèles de fluence, d'irradiation et de ténacité",
+
+
+#===
+# Liste des paramètres
+#===
+
+ Fluence = FACT ( statut="o",
+
+ # MODELFLUENCE
+ Modele = SIMP ( statut="o", typ="TXM",
+ fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+ into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+ "Exponentiel sans revetement k=12.7 (France)", # France
+ "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee
+ "Donnees francaises du palier CPY (SDM)", # SDM
+ "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev
+ "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC
+ "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2
+ "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage
+ "Grand developpement (GD_Cuve)"), # GD_Cuve
+ ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ Reglementaire = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+ # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC Reglementaire
+
+ France = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ # KPFRANCE
+ KPFrance = SIMP ( statut="o", typ="R",
+ fr="Paramètre exponentiel du modèle France",
+ defaut = 12.7, ),
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " Modele in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " Modele in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ KPUS = SIMP ( statut="o", typ="R",
+ fr="Paramètre exponentiel du modèle US",
+ defaut=9.4488, ),
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " Modele in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " Modele in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " Modele in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " Modele in ( 'Grand developpement (GD_Cuve)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ Coefficients = Coef_Fluence(),
+ ), # Fin BLOC GD_Cuve
+
+ ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ Irradiation = FACT ( statut="o",
+
+ # TYPIRR
+ Option = SIMP ( statut = "o", typ = "TXM",
+ fr = "Type d'irradiation",
+ into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT
+ "Modele d irradiation" ), # FLUENCE
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ RTndt = BLOC ( condition = "Option=='RTndt de la cuve a l instant de l analyse'",
+
+ RTNDT = SIMP ( statut="o", typ="R", defaut=73.,
+ fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+ ), # Fin BLOC RTndt
+
+ ModeleIrradiation = BLOC ( condition = "Option=='Modele d irradiation'",
+
+ # MODELIRR
+ Modele = SIMP ( statut="o", typ="TXM",
+ fr="Modèle d'irradiation pour virole ou joint soudé",
+ into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN
+ "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+ "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+ "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+ "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+ "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+ ),
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # P
+ TeneurPhosphore = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en phosphore (%)", ),
+
+ Parametres_USNRC = BLOC ( condition = " Modele in ( 'Joint Soude : Regulatory Guide 1.00 rev 2', 'Metal de Base : Regulatory Guide 1.00 rev 2' , ) ",
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTicov
+ CoefVariationRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Coefficient de variation de la RTNDT initiale", ),
+ # USectDRT
+ EcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=28.,
+ fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ ), # Fin BLOC Parametres_USNRC
+
+ ), # Fin BLOC ModeleIrradiation
+
+ ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ Tenacite = FACT ( statut = "o",
+
+ # MODELKIC
+ Modele = SIMP ( statut="o", typ="TXM",
+ fr="Modèle de calcul de la ténacité à l'amorçage KIc",
+ into=( "RCC-M/ASME coefficient=2", # RCC-M
+ "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+ "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+ "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+ "Weibull basee sur la master cuve", # Wallin
+ "Weibull basee sur la master cuve (REME)", # REME
+ "Weibull n°1 (etude ORNL)", # ORNL
+ "Weibull n°2", # WEIB2
+ "Weibull n°3", # WEIB3
+ "Weibull generalisee", # WEIB_GEN
+ "Exponentielle n°1 (Frama)", # Frama
+ "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+ ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+ KIc_RCCM = BLOC ( condition = " Modele in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+ # KICPAL
+ PalierDuctile_KIc = SIMP ( statut="o", typ="R", defaut=195. ,
+ fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+ # KICCDVD
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM
+
+ Fissure = BLOC ( condition = " Modele in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de l'arrêt de fissure",
+ into=( "OUI", "NON" ), ),
+
+ Parametres_Fissure = BLOC ( condition = "ArretDeFissure=='OUI'",
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut="o", typ="R", defaut=0.005,
+ fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+ ), # Fin BLOC Parametres_Fissure
+
+ KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+ # KIACDV
+ CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10,
+ fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+ # KIAPAL
+ PalierDuctile_KIa = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+ ), # Fin BLOC KIa_RCCM
+
+ ), # Fin BLOC Fissure
+
+# Modeles type Weibull
+
+ KIc_MasterCuve = BLOC ( condition = " Modele in ( 'Weibull basee sur la master cuve', ) ",
+
+ # T0WALLIN
+ Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27,
+ fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+
+ ), # Fin BLOC KIc_MasterCuve
+
+ KIc_Weibull1 = BLOC ( condition = " Modele in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', ) ",
+
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+
+ ), # Fin BLOC KIc_Weibull1
+
+ KIc_Weibull2 = BLOC ( condition = " Modele in ( 'Weibull n°2', 'Weibull n°3', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+ ), # Fin BLOC KIc_Weibull2
+
+ Weibull_Generalisee = BLOC ( condition = " Modele in ( 'Weibull generalisee',) ",
+
+ Coefficients = Coef_WeibGen(),
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+ ), # Fin BLOC Weibull_Generalisee
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+ KIc_Exponentielle = BLOC ( condition = " Modele in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+ ), # Fin BLOC KIc_Exponentielle
+
+ ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+ op = 68,
+ repetable = 'n',
+ fr = "Initialisation : instant initial, profils radiaux de température et contraintes",
+
+ TemperatureInitiale = FACT ( statut = "o",
+
+ ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+ Amont_TemperatureInitiale = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInitiale = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT TemperatureInitiale
+
+ ContraintesInitiales = FACT ( statut = "o",
+
+ ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+ fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+ Amont_ContraintesInitiales = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ContraintesInitiales = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ContraintesInitiales
+
+ # INSTINIT
+ InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1.,
+ fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du revêtement",
+
+ # KTHREV
+ ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM",
+ fr="Option pour définir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",),
+ ),
+
+ EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+ EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieREV
+
+
+ ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+ ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurREV
+
+ ConductiviteREV = FACT (statut = "o",
+
+ ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteREV
+
+ ModuleYoungREV = FACT (statut = "o",
+
+ ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungREV
+
+ CoeffDilatThermREV = FACT (statut = "o",
+
+ CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermREV
+
+ LimiteElasticiteREV = FACT (statut = "o",
+
+ LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / limite d'élasticite (MPa) ", ),
+ Amont_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT LimiteElasticiteREV
+
+ AutresParametresREV = FACT (statut = "o",
+
+ # TREFREV
+ TemperatureDeformationNulleREV = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETREV
+ TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUREV
+ CoefficientPoissonREV = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du metal de base",
+
+ # KTHMDB
+ ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM",
+ fr="Option pour definir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",), ),
+
+ EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+ EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieMDB
+
+ ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+ ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurMDB
+
+ ConductiviteMDB = FACT ( statut = "o",
+
+ ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteMDB
+
+ ModuleYoungMDB = FACT ( statut="o",
+
+ ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungMDB
+
+ CoeffDilatThermMDB = FACT ( statut="o",
+
+ CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermMDB
+
+ AutresParametresMDB = FACT ( statut = "o",
+
+ # TREFMDB
+ TemperatureDeformationNulleMDB = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETMDB
+ TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUMDB
+ CoefficientPoissonMDB = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+ op = 68,
+ repetable = 'n',
+ fr = "Description du transitoire thermohydraulique",
+
+ Pression = FACT ( statut = "o",
+
+ ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / pression (MPa) ", ),
+ Amont_Pression = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_Pression = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # FIN FACT Pression
+
+ # TYPCLTH
+ TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+ fr="Type de condition thermique en paroi interne ",
+ into=( "Temperature imposee en paroi", # TEMP_IMPO
+ "Flux de chaleur impose en paroi", # FLUX_REP
+ "Temperature imposee du fluide et coefficient echange", # ECHANGE
+ "Debit massique et temperature d injection de securite", # DEBIT
+ "Temperature imposee du fluide et debit d injection de securite"), # TEMP_FLU
+ ),
+
+ TemperatureImposeeParoi = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi', ) ",
+
+ ProfilTemporel_TemperatureImposeeParoi = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / Température imposée (°C) ", ),
+ Amont_TemperatureImposeeParoi = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureImposeeParoi = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC TemperatureImposeeParoi
+
+ FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+ ProfilTemporel_FluxChaleuri = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+ Amont_FluxChaleur = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_FluxChaleur = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC FluxChaleur
+
+ TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / Température imposée (°C) ", ),
+ Amont_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC TemperatureImposeeFluide
+
+ CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+ ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+ Amont_CoefficientEchange = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoefficientEchange = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC CoefficientEchange
+
+ DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit massique (kg/s) ", ),
+ Amont_DebitMassique = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitMassique
+
+ TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Température d'injection de sécurité (°C) ", ),
+ Amont_TemperatureInjection = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInjection = SIMP ( statut="o", typ = "TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ ), # Fin BLOC TemperatureInjection
+
+ Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Diamètre hydraulique (m) ", ),
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Section espace annulaire (m2) ", ),
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Hauteur caractéristique convection naturelle (m) ", ),
+ # ALPHA_CF
+ CoeffVestale_ConvectionForcee = SIMP ( statut="o", typ="R", defaut=1.,
+ fr="Coefficient Vestale convection forcée (-) ", ),
+ # ALPHA_CN
+ CoeffVestale_ConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=1.,
+ fr="Coefficient Vestale convection naturelle (-) ", ),
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut="o", typ="R", defaut=0.00001,
+ fr = "Critère convergence relative (-) ", ),
+ # VM
+ VolumeMelange_CREARE = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Volume de mélange CREARE (m3) ", ),
+ # T0
+ TemperatureInitiale_CREARE = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Température initiale CREARE (°C) ", ),
+ # SE
+ SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Surface d'échange fluide/structure (m2) ", ),
+
+ ), # Fin BLOC Creare
+
+ DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+ Amont_DebitInjection = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitInjection = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitInjection
+
+
+ Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Diamètre hydraulique (m) ", ),
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Section espace annulaire (m2) ", ),
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Hauteur caractéristique convection naturelle (m) ", ),
+ # ALPHA_CF
+ CoeffVestale_ConvectionForcee = SIMP ( statut="o", typ="R", defaut=1.,
+ fr="Coefficient d'échange Vestale convection forcée (-) ", ),
+ # ALPHA_CN
+ CoeffVestale_ConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=1.,
+ fr="Coefficient d'échange Vestale convection naturelle (-) ", ),
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut="o", typ="R", defaut=0.00001,
+ fr="Critère convergence relative (-) ", ),
+
+ ), # Fin BLOC Vestale
+
+) # Fin PROC TRANSITOIRE
--- /dev/null
+# -*- coding: utf-8 -*-
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+ A_CLASSER ( ('OPTIONS',), ('DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'))
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ fr = "Definitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+ IncrementTemporel = SIMP ( statut = "o",
+ typ = "I",
+ defaut = "1",
+ max = 1,
+ #val_max = 100,
+ fr = "Increment temporel (=1 pour calcul deterministe)",
+ ),
+
+# DTPREC
+ IncrementMaxTemperature = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "0.1",
+ max = 1,
+ val_max = 1.,
+ fr = "Increment maximum d'evolution de la temperature par noeud et par instant (°C)",
+ ),
+
+# DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut = "o",
+ typ = "R",
+ defaut = "1000.",
+ max = 1,
+ val_max = 1000.,
+ fr = "Increment maximum de temps pour l'affichage (s)",
+ ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut = "o",
+ typ = "R",
+ max=1,
+ val_max = 1000.,
+ fr = "Nombre de noeuds a considerer dans le maillage interne",
+ ),
+
+#
+ ListeInstants = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Liste des instants ",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ListeInstants2 = SIMP ( statut = "o",
+ typ = Tuple(2),
+ max = "**",
+ fr = "Liste des instants ",
+ ),
+
+) # Fin OPER OPTIONS
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS'),
+ AU_MOINS_UN ('INITIALISATION'),
+ AU_MOINS_UN ('REVETEMENT'),
+ AU_MOINS_UN ('METAL_BASE'),
+ AU_MOINS_UN ('TRANSITOIRE'),
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+ # A1
+ A1 = SIMP ( statut="o", typ="R", defaut=21.263,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A2
+ A2 = SIMP ( statut="o", typ="R", defaut=9.159,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A3
+ A3 = SIMP ( statut="o", typ="R", defaut=0.04057,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # B1
+ B1 = SIMP ( statut="o", typ="R", defaut=17.153,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B2
+ B2 = SIMP ( statut="o", typ="R", defaut=55.089,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B3
+ B3 = SIMP ( statut="o", typ="R", defaut=0.0144,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # C1
+ C1 = SIMP ( statut="o", typ="R", defaut=4.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C2
+ C2 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C3
+ C3 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+ # COEFFLUENCE1
+ Azimut_0deg = SIMP ( statut="o", typ="R", defaut=5.8,
+ fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+ # COEFFLUENCE2
+ Azimut_5deg = SIMP ( statut="o", typ="R", defaut=5.48,
+ fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+ # COEFFLUENCE3
+ Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46,
+ fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+ # COEFFLUENCE4
+ Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41,
+ fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+ # COEFFLUENCE5
+ Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37,
+ fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+ # COEFFLUENCE6
+ Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16,
+ fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+ # COEFFLUENCE7
+ Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74,
+ fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+ # COEFFLUENCE8
+ Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25,
+ fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+ # COEFFLUENCE9
+ Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89,
+ fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+ # COEFFLUENCE10
+ Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78,
+ fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ repetable = 'n',
+ fr = "Définitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+ SortieEcran = FACT (statut="o",
+
+ # MESSAGE_LEVEL
+ NiveauImpression = SIMP (statut="o", typ="TXM", defaut="Temps total",
+ fr="Niveau d impression a l ecran",
+ into=( "Aucune impression", # 0
+ "Temps total", # 1
+ "Temps intermediaires",), # 2
+ ),
+
+ ), # FIN FACT SortieEcran
+
+ SortieFichier = FACT (statut="o",
+
+ # DATARESUME_FILE
+ FichierDataIn = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier recapitulatif des donnees d entree : template.IN",
+ into=( "OUI", "NON",),
+ ),
+ # TEMPSIG_FILE
+ FichierTempSigma = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+ into=( "OUI", "NON",),
+ ),
+ # RESU_FILE
+ #FichierResultats = SIMP (statut="o", typ="TXM", defaut="NON",
+ # fr="Fichier resultat : template_DEFAILLCUVE",
+ # into=( "OUI", "NON",),
+ # ),
+ # CSV_FILE
+ FichierCSV = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+ into=( "OUI", "NON",),
+ ),
+ # CREARE_FILE
+ FichierCREARE = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier Tfluide et coefficients d echange : template.CREA",
+ into=( "OUI", "NON",),
+ ),
+
+ ), # FIN FACT SortieFichier
+
+ # GRANDEUR
+ GrandeurEvaluee = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+ fr="Grandeur sous critere",
+ into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+ "Marge KIc-KI", # MARGE_KI
+ "Marge KIc-KCP", ), # MARGE_KCP
+ ),
+
+ AutresParametres = FACT (statut="o",
+
+ # INCRTPS
+ IncrementTemporel = SIMP ( statut="o", typ="I", defaut=1,
+ fr="Incrément temporel (=1 pour calcul déterministe)", ),
+ # DTPREC
+ IncrementMaxTemperature = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1,
+ fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+ # DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000.,
+ fr="Incrément maximum de temps pour l'affichage (s)", ),
+ #
+ ListeInstants = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+ ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ # TYPEGEOM
+ TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+ fr="Choix de la définition de la geométrie d'une cuve",
+ into=( "Topologie", # GEOMETRIE
+ "Maillage"), # MAILLAGE
+ ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+ # RINT
+ RayonInterne = SIMP ( statut="o", typ="R", val_min=0., defaut=1.994,
+ fr="Rayon interne de la cuve (en m)", ),
+ # RINT_MESSAGE
+ RayonInterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon interne de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que REXT > RINT ?
+ # REXT
+ RayonExterne = SIMP ( statut="o", typ="R", defaut=2.2015,
+ fr="Rayon externe de la cuve (en m)", ),
+ # REXT_MESSAGE
+ RayonExterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon externe de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que LREV < RINT ?
+ # LREV
+ EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075,
+ fr="Epaisseur du revêtement (m)", ),
+ # LREV_MESSAGE
+ EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l'epaisseur du revêtement (m)",
+ into=( "NON", "OUI" ), ),
+
+ # LIGMIN
+ LigamentExterneMin = SIMP ( statut="o", typ="R", defaut=0.75,
+ fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+ # LIGMIN_MESSAGE
+ LigamentExterneMin_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+ into=( "NON", "OUI" ), ),
+
+ # NBNO
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+ # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+ # Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ListeAbscisses = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des abscisses", ),
+ ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques du défaut",
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+ TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+ fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+ into=( "Defaut Sous Revetement", # DSR
+ "Defaut Decale", # DECALE
+ "Defaut Debouchant", ), # DEBOUCHANT
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+ ), # FIN FACT Longueur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut sous revêtement",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC SousRevetement
+
+ Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut décalé (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+
+ ), # FIN FACT Longueur_parametres
+
+
+ Decalage_parametres = FACT (statut="o",
+
+ # DECATYP into NORMALISE, VALEUR
+ ModeCalculDecalage = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+ into = ( "Valeur",
+ "Valeur normalisee" ), ),
+
+ Mode_Decalage_Valeur = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+ # DECADEF
+ DecalageRadial = SIMP ( statut="o", typ="R", defaut=-0.00001,
+ fr="Décalage radial du defaut sous revêtement (en m)", ),
+ # DECADEF_MESSAGE
+ DecalageRadial_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Decalage_Valeur
+
+ Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+ # DECANOR
+ DecalageNormalise = SIMP ( statut="o", typ="R", defaut=0.01,
+ fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+ ), # Fin BLOC Mode_Decalage_Normalisee
+
+ ), # Fin FACT Decalage_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut décalé",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC Decale
+
+ Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut : longitudinale ou circonférentielle",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+ op = 68,
+ repetable = 'n',
+ fr = "Modèles de fluence, d'irradiation et de ténacité",
+
+
+#===
+# Liste des paramètres
+#===
+
+ Fluence = FACT ( statut="o",
+
+ # MODELFLUENCE
+ ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+ fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+ into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+ "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+ "Exponentiel sans revetement k=12.7 (France)", # France
+ "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee
+ "Donnees francaises du palier CPY (SDM)", # SDM
+ "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev
+ "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC
+ "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2
+ "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage
+ "Grand developpement (GD_Cuve)"), # GD_Cuve
+ ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ # H1COEUR
+ ZoneActiveCoeur_AltitudeSup = SIMP ( statut="o", typ="R", defaut=-3.536,
+ fr="Cote supérieure de la zone active de coeur", ),
+ # H2COEUR
+ ZoneActiveCoeur_AltitudeInf = SIMP ( statut="o", typ="R", defaut=-7.194,
+ fr="Cote inférieure de la zone active de coeur", ),
+
+ Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+ # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC Reglementaire
+
+ Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC Cuve1D
+
+ France = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ # KPFRANCE
+ KPFrance = SIMP ( statut="o", typ="R", defaut = 12.7,
+ fr="Paramètre exponentiel du modèle France", ),
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ KPUS = SIMP ( statut="o", typ="R", defaut=9.4488,
+ fr="Paramètre exponentiel du modèle US", ),
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ Coefficients = Coef_Fluence(),
+ ), # Fin BLOC GD_Cuve
+
+ ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ Irradiation = FACT ( statut="o",
+
+ # TYPEIRR INTO RTNDT, FLUENCE
+ TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+ fr = "Type d'irradiation",
+ into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT
+ "Modele d irradiation" ), # FLUENCE
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+
+ RTNDT = SIMP ( statut="o", typ="R", defaut=73.,
+ fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+ ), # Fin BLOC IrradiationParValeur
+
+ IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+
+ # MODELIRR
+ ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+ fr="Modèle d'irradiation pour virole ou joint soudé",
+ into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN
+ "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+ "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+ "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+ "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+ "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+ ),
+ Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # P
+ TeneurPhosphore = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en phosphore (%)", ),
+ # P_MESSAGE
+ TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en phosphore (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_FIMFIS
+
+ Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # RTicov
+ CoefVariationRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Coefficient de variation de la RTNDT initiale", ),
+ # RTicov_MESSAGE
+ CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+ into=( "NON","OUI" ), ),
+ # USectDRT
+ EcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=28.,
+ fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_USNRC
+
+ ), # Fin BLOC IrradiationParModele
+
+ ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ Tenacite = FACT ( statut = "o",
+
+ # MODELKIC
+ ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+ fr="Modèle de calcul de la ténacité à l'amorçage KIc",
+ into=( "RCC-M/ASME coefficient=2", # RCC-M
+ "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+ "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+ "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+ "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+ "Weibull basee sur la master cuve", # Wallin
+ "Weibull basee sur la master cuve (REME)", # REME
+ "Weibull n°1 (etude ORNL)", # ORNL
+ "Weibull n°2", # WEIB2
+ "Weibull n°3", # WEIB3
+ "Weibull generalisee", # WEIB-GEN
+ "Exponentielle n°1 (Frama)", # Frama
+ "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+ ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+ KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICPAL
+ PalierDuctile_KIc = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM
+
+ KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+ KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+ KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ ), # Fin BLOC KIc_Weibull
+
+ KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ # T0WALLIN
+ Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27,
+ fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+ ), # Fin BLOC KIc_MasterCuve
+
+ Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ Coefficients = Coef_WeibGen(),
+
+ ), # Fin BLOC Weibull_Generalisee
+
+ # ATTNCORRBETA - CORRIRWIN
+ CorrectionPlastique = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)",
+ fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+ into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+ "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+ "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+ Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de l'arrêt de fissure",
+ into=( "OUI", "NON" ), ),
+
+ KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut="o", typ="R", defaut=0.005,
+ fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+ # INCRDEF_MESSAGE
+ IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+ into = ("NON", "OUI"), ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+ # KIAPAL
+ PalierDuctile_KIa = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+ # KIACDV
+ CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10,
+ fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+ ), # Fin BLOC KIa_RCCM
+
+ ), # Fin BLOC Fissure
+
+ ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+ op = 68,
+ repetable = 'n',
+ fr = "Initialisation : instant initial, profils radiaux de température et contraintes",
+
+ TemperatureInitiale = FACT ( statut = "o",
+
+ ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+ Amont_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT TemperatureInitiale
+
+ ContraintesInitiales = FACT ( statut = "o",
+
+ ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+ fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+ Amont_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ContraintesInitiales
+
+ # INSTINIT
+ InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1.,
+ fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du revêtement",
+
+ # KTHREV
+ ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour définir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",),
+ ),
+
+ EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+ EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieREV
+
+
+ ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+ ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurREV
+
+ ConductiviteREV = FACT (statut = "o",
+
+ ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteREV
+
+ ModuleYoungREV = FACT (statut = "o",
+
+ ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungREV
+
+ CoeffDilatThermREV = FACT (statut = "o",
+
+ CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermREV
+
+ LimiteElasticiteREV = FACT (statut = "o",
+
+ LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / limite d'élasticite (MPa) ", ),
+ Amont_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT LimiteElasticiteREV
+
+ AutresParametresREV = FACT (statut = "o",
+
+ # TREFREV
+ TemperatureDeformationNulleREV = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETREV
+ TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUREV
+ CoefficientPoissonREV = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du metal de base",
+
+ # KTHMDB
+ ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour definir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",), ),
+
+ EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+ EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieMDB
+
+ ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+ ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurMDB
+
+ ConductiviteMDB = FACT ( statut = "o",
+
+ ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteMDB
+
+ ModuleYoungMDB = FACT ( statut="o",
+
+ ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungMDB
+
+ CoeffDilatThermMDB = FACT ( statut="o",
+
+ CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermMDB
+
+ AutresParametresMDB = FACT ( statut = "o",
+
+ # TREFMDB
+ TemperatureDeformationNulleMDB = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETMDB
+ TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUMDB
+ CoefficientPoissonMDB = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+ op = 68,
+ repetable = 'n',
+ fr = "Description du transitoire thermohydraulique",
+
+ Pression = FACT ( statut = "o",
+
+ ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / pression (MPa) ", ),
+ Amont_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # FIN FACT Pression
+
+
+ CL_thermique = FACT ( statut = "o",
+
+ # TYPCLTH
+ TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+ fr="Type de condition thermique en paroi interne ",
+ into=( "Temperature imposee en paroi", # TEMP_IMPO
+ "Flux de chaleur impose en paroi", # FLUX_REP
+ "Temperature imposee du fluide et coefficient echange", # ECHANGE
+ "Debit massique et temperature d injection de securite", # DEBIT
+ "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+ "Courbe APRP"), # APRP
+ ),
+
+ APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+ # INSTANT1
+ Instant_1 = SIMP ( statut="o", typ="R", defaut=21.,
+ fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+ # INSTANT2
+ Instant_2 = SIMP ( statut="o", typ="R", defaut=45.,
+ fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+ # QACCU
+ DebitAccumule = SIMP ( statut="o", typ="R", defaut=2.3,
+ fr="Debit accumule (en m3/h) ", ),
+ # QIS
+ DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+ fr="Debit injection securite (en m3/h) ", ),
+ # TIS_MESSAGE
+ TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la temperature injection securite",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC APRP
+
+ TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+ ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / Température imposée (°C) ", ),
+ Amont_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC TemperatureImposeeFluide
+
+
+ FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+ ProfilTemporel_FluxChaleur = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+ Amont_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC FluxChaleur
+
+ CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+ ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+ Amont_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC CoefficientEchange
+
+ DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit massique (kg/s) ", ),
+ Amont_DebitMassique = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval", defaut="Continu",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitMassique
+
+ TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Température d'injection de sécurité (°C) ", ),
+ Amont_TemperatureInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInjection = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ ), # Fin BLOC TemperatureInjection
+
+ DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+ ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+ Amont_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitInjection
+
+ Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut="o", typ="R", defaut=0.3816,
+ fr="Diamètre hydraulique (m) ", ),
+ # DH_MESSAGE
+ DiametreHydraulique_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du diamètre hydraulique (m) ",
+ into = ( "NON", "OUI" ), ),
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut="o", typ="R", defaut=0.21712,
+ fr="Section espace annulaire (m2) ", ),
+ # SECTION_MESSAGE
+ SectionEspaceAnnulaire_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la section espace annulaire (m2) ",
+ into = ( "NON", "OUI" ), ),
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+ fr="Hauteur caractéristique convection naturelle (m) ", ),
+ # DELTA_MESSAGE
+ HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+ into = ( "NON", "OUI" ), ),
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut="o", typ="R", defaut=0.00001,
+ fr="Critère convergence relative (-) ", ),
+ # COEFVESTALE
+ CoefficientsVestale = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Application des coefficients de Vestale",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Vestale
+
+ Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ # VM
+ VolumeMelange_CREARE = SIMP ( statut="o", typ="R", defaut=14.9,
+ fr = "Volume de mélange CREARE (m3) ", ),
+ # VM_MESSAGE
+ VolumeMelange_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+ into=( 'OUI', 'NON' ), ),
+ # T0
+ TemperatureInitiale_CREARE = SIMP ( statut="o", typ="R", defaut=250.,
+ fr="Température initiale CREARE (°C) ", ),
+ # T0_MESSAGE
+ TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la température initiale CREARE (°C) ",
+ into=( 'OUI', 'NON' ), ),
+ # SE
+ SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Surface d'échange fluide/structure (m2) ", ),
+ # SE_MESSAGE
+ SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Creare
+
+ ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS'),
+ AU_MOINS_UN ('INITIALISATION'),
+ AU_MOINS_UN ('REVETEMENT'),
+ AU_MOINS_UN ('METAL_BASE'),
+ AU_MOINS_UN ('TRANSITOIRE'),
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+ # A1
+ A1 = SIMP ( statut="o", typ="R", defaut=21.263,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A2
+ A2 = SIMP ( statut="o", typ="R", defaut=9.159,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A3
+ A3 = SIMP ( statut="o", typ="R", defaut=0.04057,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # B1
+ B1 = SIMP ( statut="o", typ="R", defaut=17.153,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B2
+ B2 = SIMP ( statut="o", typ="R", defaut=55.089,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B3
+ B3 = SIMP ( statut="o", typ="R", defaut=0.0144,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # C1
+ C1 = SIMP ( statut="o", typ="R", defaut=4.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C2
+ C2 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C3
+ C3 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+ # COEFFLUENCE1
+ Azimut_0deg = SIMP ( statut="o", typ="R", defaut=5.8,
+ fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+ # COEFFLUENCE2
+ Azimut_5deg = SIMP ( statut="o", typ="R", defaut=5.48,
+ fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+ # COEFFLUENCE3
+ Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46,
+ fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+ # COEFFLUENCE4
+ Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41,
+ fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+ # COEFFLUENCE5
+ Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37,
+ fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+ # COEFFLUENCE6
+ Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16,
+ fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+ # COEFFLUENCE7
+ Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74,
+ fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+ # COEFFLUENCE8
+ Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25,
+ fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+ # COEFFLUENCE9
+ Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89,
+ fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+ # COEFFLUENCE10
+ Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78,
+ fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ repetable = 'n',
+ fr = "Définitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+ SortieEcran = FACT (statut="o",
+
+ # MESSAGE_LEVEL
+ NiveauImpression = SIMP (statut="o", typ="TXM", defaut="Temps total",
+ fr="Niveau d impression a l ecran",
+ into=( "Aucune impression", # 0
+ "Temps total", # 1
+ "Temps intermediaires",), # 2
+ ),
+
+ ), # FIN FACT SortieEcran
+
+ SortieFichier = FACT (statut="o",
+
+ # DATARESUME_FILE
+ FichierDataIn = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier recapitulatif des donnees d entree : template.IN",
+ into=( "OUI", "NON",),
+ ),
+ # TEMPSIG_FILE
+ FichierTempSigma = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+ into=( "OUI", "NON",),
+ ),
+ # RESU_FILE
+ FichierResultats = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier resultat : template_DEFAILLCUVE",
+ into=( "OUI", "NON",),
+ ),
+ # CSV_FILE
+ FichierCSV = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+ into=( "OUI", "NON",),
+ ),
+ # CREARE_FILE
+ FichierCREARE = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier Tfluide et coefficients d echange : template.CREA",
+ into=( "OUI", "NON",),
+ ),
+
+ ), # FIN FACT SortieFichier
+
+ # GRANDEUR
+ GrandeurEvaluee = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+ fr="Grandeur sous critere",
+ into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+ "Marge KIc-KI", # MARGE_KI
+ "Marge KIc-KCP", ), # MARGE_KCP
+ ),
+
+ AutresParametres = FACT (statut="o",
+
+ # INCRTPS
+ IncrementTemporel = SIMP ( statut="o", typ="I", defaut=1,
+ fr="Incrément temporel (=1 pour calcul déterministe)", ),
+ # DTPREC
+ IncrementMaxTemperature = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1,
+ fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+ # DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000.,
+ fr="Incrément maximum de temps pour l'affichage (s)", ),
+ #
+ ListeInstants = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+ ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ # TYPEGEOM
+ TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+ fr="Choix de la définition de la geométrie d'une cuve",
+ into=( "Topologie", # GEOMETRIE
+ "Maillage"), # MAILLAGE
+ ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+ # RINT
+ RayonInterne = SIMP ( statut="o", typ="R", val_min=0., defaut=1.994,
+ fr="Rayon interne de la cuve (en m)", ),
+ # RINT_MESSAGE
+ RayonInterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon interne de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que REXT > RINT ?
+ # REXT
+ RayonExterne = SIMP ( statut="o", typ="R", defaut=2.2015,
+ fr="Rayon externe de la cuve (en m)", ),
+ # REXT_MESSAGE
+ RayonExterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon externe de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que LREV < RINT ?
+ # LREV
+ EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075,
+ fr="Epaisseur du revêtement (m)", ),
+ # LREV_MESSAGE
+ EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l'epaisseur du revêtement (m)",
+ into=( "NON", "OUI" ), ),
+
+ # LIGMIN
+ LigamentExterneMin = SIMP ( statut="o", typ="R", defaut=0.75,
+ fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+ # LIGMIN_MESSAGE
+ LigamentExterneMin_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+ into=( "NON", "OUI" ), ),
+
+ # NBNO
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+ # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+ # Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ListeAbscisses = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des abscisses", ),
+ ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques du défaut",
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+ TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+ fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+ into=( "Defaut Sous Revetement", # DSR
+ "Defaut Decale", # DECALE
+ "Defaut Debouchant", ), # DEBOUCHANT
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+ ), # FIN FACT Longueur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut sous revêtement",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC SousRevetement
+
+ Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut décalé (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+
+ ), # FIN FACT Longueur_parametres
+
+
+ Decalage_parametres = FACT (statut="o",
+
+ # DECATYP into NORMALISE, VALEUR
+ ModeCalculDecalage = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+ into = ( "Valeur",
+ "Valeur normalisee" ), ),
+
+ Mode_Decalage_Valeur = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+ # DECADEF
+ DecalageRadial = SIMP ( statut="o", typ="R", defaut=-0.00001,
+ fr="Décalage radial du defaut sous revêtement (en m)", ),
+ # DECADEF_MESSAGE
+ DecalageRadial_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Decalage_Valeur
+
+ Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+ # DECANOR
+ DecalageNormalise = SIMP ( statut="o", typ="R", defaut=0.01,
+ fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+ ), # Fin BLOC Mode_Decalage_Normalisee
+
+ ), # Fin FACT Decalage_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut décalé",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC Decale
+
+ Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut : longitudinale ou circonférentielle",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+ op = 68,
+ repetable = 'n',
+ fr = "Modèles de fluence, d'irradiation et de ténacité",
+
+
+#===
+# Liste des paramètres
+#===
+
+ Fluence = FACT ( statut="o",
+
+ # MODELFLUENCE
+ ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+ fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+ into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+ "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+ "Exponentiel sans revetement k=12.7 (France)", # France
+ "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee
+ "Donnees francaises du palier CPY (SDM)", # SDM
+ "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev
+ "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC
+ "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2
+ "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage
+ "Grand developpement (GD_Cuve)"), # GD_Cuve
+ ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ # H1COEUR
+ ZoneActiveCoeur_AltitudeSup = SIMP ( statut="o", typ="R", defaut=-3.536,
+ fr="Cote supérieure de la zone active de coeur", ),
+ # H2COEUR
+ ZoneActiveCoeur_AltitudeInf = SIMP ( statut="o", typ="R", defaut=-7.194,
+ fr="Cote inférieure de la zone active de coeur", ),
+
+ Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+ # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC Reglementaire
+
+ Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC Cuve1D
+
+ France = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ # KPFRANCE
+ KPFrance = SIMP ( statut="o", typ="R", defaut = 12.7,
+ fr="Paramètre exponentiel du modèle France", ),
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ KPUS = SIMP ( statut="o", typ="R", defaut=9.4488,
+ fr="Paramètre exponentiel du modèle US", ),
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ Coefficients = Coef_Fluence(),
+ ), # Fin BLOC GD_Cuve
+
+ ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ Irradiation = FACT ( statut="o",
+
+ # TYPEIRR INTO RTNDT, FLUENCE
+ TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+ fr = "Type d'irradiation",
+ into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT
+ "Modele d irradiation" ), # FLUENCE
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+
+ RTNDT = SIMP ( statut="o", typ="R", defaut=73.,
+ fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+ ), # Fin BLOC IrradiationParValeur
+
+ IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+
+ # MODELIRR
+ ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+ fr="Modèle d'irradiation pour virole ou joint soudé",
+ into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN
+ "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+ "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+ "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+ "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+ "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+ ),
+ Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # P
+ TeneurPhosphore = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en phosphore (%)", ),
+ # P_MESSAGE
+ TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en phosphore (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_FIMFIS
+
+ Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # RTicov
+ CoefVariationRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Coefficient de variation de la RTNDT initiale", ),
+ # RTicov_MESSAGE
+ CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+ into=( "NON","OUI" ), ),
+ # USectDRT
+ EcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=28.,
+ fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_USNRC
+
+ ), # Fin BLOC IrradiationParModele
+
+ ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ Tenacite = FACT ( statut = "o",
+
+ # MODELKIC
+ ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+ fr="Modèle de calcul de la ténacité à l'amorçage KIc",
+ into=( "RCC-M/ASME coefficient=2", # RCC-M
+ "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+ "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+ "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+ "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+ "Weibull basee sur la master cuve", # Wallin
+ "Weibull basee sur la master cuve (REME)", # REME
+ "Weibull n°1 (etude ORNL)", # ORNL
+ "Weibull n°2", # WEIB2
+ "Weibull n°3", # WEIB3
+ "Weibull generalisee", # WEIB_GEN
+ "Exponentielle n°1 (Frama)", # Frama
+ "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+ ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+ KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICPAL
+ PalierDuctile_KIc = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM
+
+ KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+ KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+ KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ ), # Fin BLOC KIc_Weibull
+
+ KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ # T0WALLIN
+ Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27,
+ fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+ ), # Fin BLOC KIc_MasterCuve
+
+ Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ Coefficients = Coef_WeibGen(),
+
+ ), # Fin BLOC Weibull_Generalisee
+
+ # ATTNCORRBETA - CORRIRWIN
+ CorrectionPlastique = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)",
+ fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+ into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+ "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+ "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+ Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de l'arrêt de fissure",
+ into=( "OUI", "NON" ), ),
+
+ KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut="o", typ="R", defaut=0.005,
+ fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+ # INCRDEF_MESSAGE
+ IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+ into = ("NON", "OUI"), ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+ # KIAPAL
+ PalierDuctile_KIa = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+ # KIACDV
+ CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10,
+ fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+ ), # Fin BLOC KIa_RCCM
+
+ ), # Fin BLOC Fissure
+
+ ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+ op = 68,
+ repetable = 'n',
+ fr = "Initialisation : instant initial, profils radiaux de température et contraintes",
+
+ TemperatureInitiale = FACT ( statut = "o",
+
+ ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+ Amont_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT TemperatureInitiale
+
+ ContraintesInitiales = FACT ( statut = "o",
+
+ ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+ fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+ Amont_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ContraintesInitiales
+
+ # INSTINIT
+ InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1.,
+ fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du revêtement",
+
+ # KTHREV
+ ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour définir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",),
+ ),
+
+ EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+ EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieREV
+
+
+ ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+ ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurREV
+
+ ConductiviteREV = FACT (statut = "o",
+
+ ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteREV
+
+ ModuleYoungREV = FACT (statut = "o",
+
+ ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungREV
+
+ CoeffDilatThermREV = FACT (statut = "o",
+
+ CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermREV
+
+ LimiteElasticiteREV = FACT (statut = "o",
+
+ LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / limite d'élasticite (MPa) ", ),
+ Amont_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT LimiteElasticiteREV
+
+ AutresParametresREV = FACT (statut = "o",
+
+ # TREFREV
+ TemperatureDeformationNulleREV = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETREV
+ TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUREV
+ CoefficientPoissonREV = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du metal de base",
+
+ # KTHMDB
+ ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour definir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",), ),
+
+ EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+ EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieMDB
+
+ ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+ ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurMDB
+
+ ConductiviteMDB = FACT ( statut = "o",
+
+ ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteMDB
+
+ ModuleYoungMDB = FACT ( statut="o",
+
+ ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungMDB
+
+ CoeffDilatThermMDB = FACT ( statut="o",
+
+ CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermMDB
+
+ AutresParametresMDB = FACT ( statut = "o",
+
+ # TREFMDB
+ TemperatureDeformationNulleMDB = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETMDB
+ TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUMDB
+ CoefficientPoissonMDB = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+ op = 68,
+ repetable = 'n',
+ fr = "Description du transitoire thermohydraulique",
+
+ Pression = FACT ( statut = "o",
+
+ ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / pression (MPa) ", ),
+ Amont_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # FIN FACT Pression
+
+
+ CL_thermique = FACT ( statut = "o",
+
+ # TYPCLTH
+ TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+ fr="Type de condition thermique en paroi interne ",
+ into=( "Temperature imposee en paroi", # TEMP_IMPO
+ "Flux de chaleur impose en paroi", # FLUX_REP
+ "Temperature imposee du fluide et coefficient echange", # ECHANGE
+ "Debit massique et temperature d injection de securite", # DEBIT
+ "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+ "Courbe APRP"), # APRP
+ ),
+
+ APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+ # INSTANT1
+ Instant_1 = SIMP ( statut="o", typ="R", defaut=21.,
+ fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+ # INSTANT2
+ Instant_2 = SIMP ( statut="o", typ="R", defaut=45.,
+ fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+ # QACCU
+ DebitAccumule = SIMP ( statut="o", typ="R", defaut=2.3,
+ fr="Debit accumule (en m3/h) ", ),
+ # QIS
+ DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+ fr="Debit injection securite (en m3/h) ", ),
+ # TIS_MESSAGE
+ TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la temperature injection securite",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC APRP
+
+ TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+ ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / Température imposée (°C) ", ),
+ Amont_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC TemperatureImposeeFluide
+
+
+ FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+ ProfilTemporel_FluxChaleur = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+ Amont_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC FluxChaleur
+
+ CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+ ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+ Amont_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC CoefficientEchange
+
+ DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit massique (kg/s) ", ),
+ Amont_DebitMassique = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval", defaut="Continu",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitMassique
+
+ TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Température d'injection de sécurité (°C) ", ),
+ Amont_TemperatureInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInjection = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ ), # Fin BLOC TemperatureInjection
+
+ DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+ ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+ Amont_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitInjection
+
+ Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut="o", typ="R", defaut=0.3816,
+ fr="Diamètre hydraulique (m) ", ),
+ # DH_MESSAGE
+ DiametreHydraulique_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du diamètre hydraulique (m) ",
+ into = ( "NON", "OUI" ), ),
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut="o", typ="R", defaut=0.21712,
+ fr="Section espace annulaire (m2) ", ),
+ # SECTION_MESSAGE
+ SectionEspaceAnnulaire_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la section espace annulaire (m2) ",
+ into = ( "NON", "OUI" ), ),
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+ fr="Hauteur caractéristique convection naturelle (m) ", ),
+ # DELTA_MESSAGE
+ HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+ into = ( "NON", "OUI" ), ),
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut="o", typ="R", defaut=0.00001,
+ fr="Critère convergence relative (-) ", ),
+ # COEFVESTALE
+ CoefficientsVestale = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Application des coefficients de Vestale",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Vestale
+
+ Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ # VM
+ VolumeMelange_CREARE = SIMP ( statut="o", typ="R", defaut=14.9,
+ fr = "Volume de mélange CREARE (m3) ", ),
+ # VM_MESSAGE
+ VolumeMelange_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+ into=( 'OUI', 'NON' ), ),
+ # T0
+ TemperatureInitiale_CREARE = SIMP ( statut="o", typ="R", defaut=250.,
+ fr="Température initiale CREARE (°C) ", ),
+ # T0_MESSAGE
+ TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la température initiale CREARE (°C) ",
+ into=( 'OUI', 'NON' ), ),
+ # SE
+ SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Surface d'échange fluide/structure (m2) ", ),
+ # SE_MESSAGE
+ SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Creare
+
+ ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ('OPTIONS'),
+ AU_MOINS_UN ('INITIALISATION'),
+ AU_MOINS_UN ('REVETEMENT'),
+ AU_MOINS_UN ('METAL_BASE'),
+ AU_MOINS_UN ('TRANSITOIRE'),
+ )
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+ # A1
+ A1 = SIMP ( statut="o", typ="R", defaut=21.263,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A2
+ A2 = SIMP ( statut="o", typ="R", defaut=9.159,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # A3
+ A3 = SIMP ( statut="o", typ="R", defaut=0.04057,
+ fr="coef du coef a(T) d'une Weibull générale", ),
+ # B1
+ B1 = SIMP ( statut="o", typ="R", defaut=17.153,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B2
+ B2 = SIMP ( statut="o", typ="R", defaut=55.089,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # B3
+ B3 = SIMP ( statut="o", typ="R", defaut=0.0144,
+ fr="coef du coef b(T) d'une Weibull générale", ),
+ # C1
+ C1 = SIMP ( statut="o", typ="R", defaut=4.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C2
+ C2 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+ # C3
+ C3 = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+ # COEFFLUENCE1
+ Azimut_0deg = SIMP ( statut="o", typ="R", defaut=5.8,
+ fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+ # COEFFLUENCE2
+ Azimut_5deg = SIMP ( statut="o", typ="R", defaut=5.48,
+ fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+ # COEFFLUENCE3
+ Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46,
+ fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+ # COEFFLUENCE4
+ Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41,
+ fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+ # COEFFLUENCE5
+ Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37,
+ fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+ # COEFFLUENCE6
+ Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16,
+ fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+ # COEFFLUENCE7
+ Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74,
+ fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+ # COEFFLUENCE8
+ Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25,
+ fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+ # COEFFLUENCE9
+ Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89,
+ fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+ # COEFFLUENCE10
+ Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78,
+ fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+ op = 68,
+ repetable = 'n',
+ fr = "Définitions des options",
+
+#===
+# Liste des paramètres
+#===
+
+ SortieEcran = FACT (statut="o",
+
+ # MESSAGE_LEVEL
+ NiveauImpression = SIMP (statut="o", typ="TXM", defaut="Temps total",
+ fr="Niveau d impression a l ecran",
+ into=( "Aucune impression", # 0
+ "Temps total", # 1
+ "Temps intermediaires",), # 2
+ ),
+
+ ), # FIN FACT SortieEcran
+
+ SortieFichier = FACT (statut="o",
+
+ # DATARESUME_FILE
+ FichierDataIn = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier recapitulatif des donnees d entree : template.IN",
+ into=( "OUI", "NON",),
+ ),
+ # TEMPSIG_FILE
+ FichierTempSigma = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+ into=( "OUI", "NON",),
+ ),
+ # RESU_FILE
+ FichierResultats = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier resultat : template_DEFAILLCUVE",
+ into=( "OUI", "NON",),
+ ),
+ # CSV_FILE
+ FichierCSV = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+ into=( "OUI", "NON",),
+ ),
+ # CREARE_FILE
+ FichierCREARE = SIMP (statut="o", typ="TXM", defaut="NON",
+ fr="Fichier Tfluide et coefficients d echange : template.CREA",
+ into=( "OUI", "NON",),
+ ),
+
+ ), # FIN FACT SortieFichier
+
+ # GRANDEUR
+ GrandeurEvaluee = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+ fr="Grandeur sous critere",
+ into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+ "Marge KIc-KI", # MARGE_KI
+ "Marge KIc-KCP", ), # MARGE_KCP
+ ),
+
+ AutresParametres = FACT (statut="o",
+
+ # INCRTPS
+ IncrementTemporel = SIMP ( statut="o", typ="I", defaut=1,
+ fr="Incrément temporel (=1 pour calcul déterministe)", ),
+ # DTPREC
+ IncrementMaxTemperature = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1,
+ fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+ # DTARCH
+ IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000.,
+ fr="Incrément maximum de temps pour l'affichage (s)", ),
+ #
+ ListeInstants = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+ ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques de la cuve",
+
+#===
+# Liste des paramètres
+#===
+
+ # TYPEGEOM
+ TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+ fr="Choix de la définition de la geométrie d'une cuve",
+ into=( "Topologie", # GEOMETRIE
+ "Maillage"), # MAILLAGE
+ ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+ Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+ # RINT
+ RayonInterne = SIMP ( statut="o", typ="R", val_min=0., defaut=1.994,
+ fr="Rayon interne de la cuve (en m)", ),
+ # RINT_MESSAGE
+ RayonInterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon interne de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que REXT > RINT ?
+ # REXT
+ RayonExterne = SIMP ( statut="o", typ="R", defaut=2.2015,
+ fr="Rayon externe de la cuve (en m)", ),
+ # REXT_MESSAGE
+ RayonExterne_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du rayon externe de la cuve (en m)",
+ into=( "NON", "OUI" ), ),
+
+ # DTV : comment preciser que LREV < RINT ?
+ # LREV
+ EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075,
+ fr="Epaisseur du revêtement (m)", ),
+ # LREV_MESSAGE
+ EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l'epaisseur du revêtement (m)",
+ into=( "NON", "OUI" ), ),
+
+ # LIGMIN
+ LigamentExterneMin = SIMP ( statut="o", typ="R", defaut=0.75,
+ fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+ # LIGMIN_MESSAGE
+ LigamentExterneMin_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+ into=( "NON", "OUI" ), ),
+
+ # NBNO
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ), # Fin BLOC Geometrie
+
+ Maillage = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+ # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+ # Question : NBO depend-il de TYPGEOM ??
+ NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000,
+ fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+ ListeAbscisses = SIMP ( statut="o", typ="R", max="**",
+ fr = "Liste des abscisses", ),
+ ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caractéristiques du défaut",
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+ TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+ fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+ into=( "Defaut Sous Revetement", # DSR
+ "Defaut Decale", # DECALE
+ "Defaut Debouchant", ), # DEBOUCHANT
+ ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+ SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+ ), # FIN FACT Longueur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut sous revêtement",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC SousRevetement
+
+ Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Longueur_parametres = FACT (statut="o",
+
+ # OPTLONG into VALEUR, FCTAFFINE
+ ModeCalculLongueur = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+ into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+ Mode_Valeur = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+ # LONGDEF
+ Longueur = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060,
+ fr = "Longueur du défaut sous revêtement (m)", ),
+ # LONGDEF_MESSAGE
+ Longueur_mess = SIMP ( statut="o", typ="TXM", defaut = "NON",
+ fr = "Affichage ecran de la longueur du défaut décalé (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Valeur
+
+ Mode_Fctaffine = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+ # PROFSURLONG
+ CoefDirecteur = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+ fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+ # LONGCONST
+ Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+ fr="constante a0 de la fonction affine l=pente*h + a0", ),
+ ), # Fin BLOC Mode_Fctaffine
+
+ ), # FIN FACT Longueur_parametres
+
+
+ Decalage_parametres = FACT (statut="o",
+
+ # DECATYP into NORMALISE, VALEUR
+ ModeCalculDecalage = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+ fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+ into = ( "Valeur",
+ "Valeur normalisee" ), ),
+
+ Mode_Decalage_Valeur = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+ # DECADEF
+ DecalageRadial = SIMP ( statut="o", typ="R", defaut=-0.00001,
+ fr="Décalage radial du defaut sous revêtement (en m)", ),
+ # DECADEF_MESSAGE
+ DecalageRadial_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC Mode_Decalage_Valeur
+
+ Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+ # DECANOR
+ DecalageNormalise = SIMP ( statut="o", typ="R", defaut=0.01,
+ fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+ ), # Fin BLOC Mode_Decalage_Normalisee
+
+ ), # Fin FACT Decalage_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ # POINDEF
+ Pointe = SIMP ( statut="o", typ="TXM", defaut="A",
+ fr="Choix du point considéré du défaut décalé",
+ into=( "A", "B", "A et B" ), ),
+
+ ), # Fin BLOC Decale
+
+ Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+ # ORIEDEF into LONGITUD, CIRCONF
+ Orientation = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+ fr="Orientation du défaut : longitudinale ou circonférentielle",
+ into=( "Longitudinale",
+ "Circonferentielle" ), ),
+
+ Profondeur_parametres = FACT (statut="o",
+ # PROFDEF
+ # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+ ProfondeurRadiale = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006,
+ fr="Profondeur radiale du défaut (m)", ),
+ # PROFDEF_MESSAGE
+ ProfondeurRadiale_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la profondeur radiale du défaut (m)",
+ into=( "NON", "OUI" ), ),
+ ), # Fin FACT Profondeur_parametres
+
+ Azimut_parametres = FACT (statut="o",
+ # ANGLDEF
+ Azimut = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+ # ANGLDEF_MESSAGE
+ Azimut_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Azimut_parametres
+
+ Altitude_parametres = FACT (statut="o",
+ # ALTIDEF
+ # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+ Altitude = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4.,
+ fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+ # ALTIDEF_MESSAGE
+ Altitude_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin FACT Altitude_parametres
+
+ ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+ op = 68,
+ repetable = 'n',
+ fr = "Modèles de fluence, d'irradiation et de ténacité",
+
+
+#===
+# Liste des paramètres
+#===
+
+ Fluence = FACT ( statut="o",
+
+ # MODELFLUENCE
+ ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+ fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+ into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+ "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+ "Exponentiel sans revetement k=12.7 (France)", # France
+ "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee
+ "Donnees francaises du palier CPY (SDM)", # SDM
+ "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev
+ "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC
+ "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2
+ "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage
+ "Grand developpement (GD_Cuve)"), # GD_Cuve
+ ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+ # H1COEUR
+ ZoneActiveCoeur_AltitudeSup = SIMP ( statut="o", typ="R", defaut=-3.536,
+ fr="Cote supérieure de la zone active de coeur", ),
+ # H2COEUR
+ ZoneActiveCoeur_AltitudeInf = SIMP ( statut="o", typ="R", defaut=-7.194,
+ fr="Cote inférieure de la zone active de coeur", ),
+
+ Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+ # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC Reglementaire
+
+ Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC Cuve1D
+
+ France = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ # KPFRANCE
+ KPFrance = SIMP ( statut="o", typ="R", defaut = 12.7,
+ fr="Paramètre exponentiel du modèle France", ),
+ ), # Fin BLOC France
+
+ ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC ValeurImposee
+
+ SDM = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC SDM
+
+ USNRC = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ KPUS = SIMP ( statut="o", typ="R", defaut=9.4488,
+ fr="Paramètre exponentiel du modèle US", ),
+ ), # Fin BLOC USNRC
+
+ REV_2 = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+ ), # Fin BLOC REV_2
+
+ SDM_Lissage = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC SDM_Lissage
+
+ GrandeDev = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ ), # Fin BLOC GrandeDev
+
+ GD_Cuve = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+ # fmax
+ FluenceMax = SIMP ( statut="o", typ="R", defaut=6.5,
+ fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+ Coefficients = Coef_Fluence(),
+ ), # Fin BLOC GD_Cuve
+
+ ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+ Irradiation = FACT ( statut="o",
+
+ # TYPEIRR INTO RTNDT, FLUENCE
+ TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+ fr = "Type d'irradiation",
+ into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT
+ "Modele d irradiation" ), # FLUENCE
+ ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+ IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+
+ RTNDT = SIMP ( statut="o", typ="R", defaut=73.,
+ fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+ ), # Fin BLOC IrradiationParValeur
+
+ IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+
+ # MODELIRR
+ ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+ fr="Modèle d'irradiation pour virole ou joint soudé",
+ into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN
+ "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+ "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+ "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+ "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+ "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+ ),
+ Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # P
+ TeneurPhosphore = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en phosphore (%)", ),
+ # P_MESSAGE
+ TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en phosphore (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_FIMFIS
+
+ Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+ # CU
+ TeneurCuivre = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en cuivre (%)", ),
+ # CU_MESSAGE
+ TeneurCuivre_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en cuivre (%)",
+ into=( "NON","OUI" ), ),
+ # NI
+ TeneurNickel = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Teneur en nickel (%)", ),
+ # NI_MESSAGE
+ TeneurNickel_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la teneur en nickel (%)",
+ into=( "NON","OUI" ), ),
+ # RTimoy
+ MoyenneRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+ # RTimoy_MESSAGE
+ MoyenneRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la moyenne de RTNDT",
+ into=( "NON","OUI" ), ),
+ # RTicov
+ CoefVariationRTndt = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Coefficient de variation de la RTNDT initiale", ),
+ # RTicov_MESSAGE
+ CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+ into=( "NON","OUI" ), ),
+ # USectDRT
+ EcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=28.,
+ fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+ # nbectDRTNDT
+ NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+ # nbectDRTNDT_MESSAGE
+ NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+ into=( "NON","OUI" ), ),
+ ), # Fin BLOC Parametres_USNRC
+
+ ), # Fin BLOC IrradiationParModele
+
+ ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+ Tenacite = FACT ( statut = "o",
+
+ # MODELKIC
+ ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+ fr="Modèle de calcul de la ténacité à l'amorçage KIc",
+ into=( "RCC-M/ASME coefficient=2", # RCC-M
+ "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+ "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+ "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+ "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+ "Weibull basee sur la master cuve", # Wallin
+ "Weibull basee sur la master cuve (REME)", # REME
+ "Weibull n°1 (etude ORNL)", # ORNL
+ "Weibull n°2", # WEIB2
+ "Weibull n°3", # WEIB3
+ "Weibull generalisee", # WEIB-GEN
+ "Exponentielle n°1 (Frama)", # Frama
+ "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+ ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+ KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICPAL
+ PalierDuctile_KIc = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM
+
+ KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ # KICCDV
+ CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15,
+ fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+ ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+ KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+
+ ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+ KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ ), # Fin BLOC KIc_Weibull
+
+ KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ # T0WALLIN
+ Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27,
+ fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+ ), # Fin BLOC KIc_MasterCuve
+
+ Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+
+ # NBCARAC
+ NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE",
+ fr="Nombre caracteristique : ORDRE ou QUANTILE",
+ into=( "ORDRE", "QUANTILE" ), ),
+
+ QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+ # nbectKIc
+ NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+ # nbectKIc_MESSAGE
+ NbEcartType_MoyKIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC QUANTILE
+
+ ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+ # fractKIc
+ Fractile_KIc = SIMP ( statut="o", typ="R", defaut=5.,
+ fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+ # fractKIc_MESSAGE
+ Fractile_KIc_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+ into = ( "NON","OUI" ), ),
+ ), # Fin BLOC ORDRE
+
+ Coefficients = Coef_WeibGen(),
+
+ ), # Fin BLOC Weibull_Generalisee
+
+ # ATTNCORRBETA - CORRIRWIN
+ CorrectionPlastique = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)",
+ fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+ into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+ "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+ "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+ Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+ # ARRETFISSURE
+ ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Prise en compte de l'arrêt de fissure",
+ into=( "OUI", "NON" ), ),
+
+ KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+ # INCRDEF
+ IncrementTailleFissure = SIMP ( statut="o", typ="R", defaut=0.005,
+ fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+ # INCRDEF_MESSAGE
+ IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+ into = ("NON", "OUI"), ),
+
+ # nbectKIa
+ NbEcartType_MoyKIa = SIMP ( statut="o", typ="R", defaut=-2.,
+ fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+ # KIAPAL
+ PalierDuctile_KIa = SIMP ( statut="o", typ="R", defaut=195.,
+ fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+ # KIACDV
+ CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10,
+ fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+ ), # Fin BLOC KIa_RCCM
+
+ ), # Fin BLOC Fissure
+
+ ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+ op = 68,
+ repetable = 'n',
+ fr = "Initialisation : instant initial, profils radiaux de température et contraintes",
+
+ TemperatureInitiale = FACT ( statut = "o",
+
+ ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+ Amont_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInitiale = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT TemperatureInitiale
+
+ ContraintesInitiales = FACT ( statut = "o",
+
+ ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+ fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+ Amont_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ContraintesInitiales = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ContraintesInitiales
+
+ # INSTINIT
+ InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1.,
+ fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du revêtement",
+
+ # KTHREV
+ ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour définir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",),
+ ),
+
+ EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+ EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieREV
+
+
+ ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+ ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurREV
+
+ ConductiviteREV = FACT (statut = "o",
+
+ ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteREV
+
+ ModuleYoungREV = FACT (statut = "o",
+
+ ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungREV
+
+ CoeffDilatThermREV = FACT (statut = "o",
+
+ CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermREV
+
+ LimiteElasticiteREV = FACT (statut = "o",
+
+ LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / limite d'élasticite (MPa) ", ),
+ Amont_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_LimiteElasticiteREV = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT LimiteElasticiteREV
+
+ AutresParametresREV = FACT (statut = "o",
+
+ # TREFREV
+ TemperatureDeformationNulleREV = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETREV
+ TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUREV
+ CoefficientPoissonREV = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+ op = 68,
+ repetable = 'n',
+ fr = "Caracteristiques du metal de base",
+
+ # KTHMDB
+ ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+ fr="Option pour definir les caractéristiques du revêtement ",
+ into=( "ENTHALPIE", "CHALEUR",), ),
+
+ EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+ EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / enthalpie massique (J/kg) ", ),
+ Amont_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_EnthalpieMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC EnthalpieMDB
+
+ ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+ ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+ Amont_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ChaleurMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC ChaleurMDB
+
+ ConductiviteMDB = FACT ( statut = "o",
+
+ ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+ Amont_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ConductiviteMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ConductiviteMDB
+
+ ModuleYoungMDB = FACT ( statut="o",
+
+ ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / module d'Young (MPa) ", ),
+ Amont_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_ModuleYoungMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT ModuleYoungMDB
+
+ CoeffDilatThermMDB = FACT ( statut="o",
+
+ CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+ Amont_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoeffDilatThermMDB = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin FACT CoeffDilatThermMDB
+
+ AutresParametresMDB = FACT ( statut = "o",
+
+ # TREFMDB
+ TemperatureDeformationNulleMDB = SIMP ( statut="o", typ="R", defaut=20.,
+ fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+ # TDETMDB
+ TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+ fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+ # NUMDB
+ CoefficientPoissonMDB = SIMP ( statut="o", typ="R", defaut=0.3,
+ fr="Coefficient de Poisson ", ),
+
+ ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+ op = 68,
+ repetable = 'n',
+ fr = "Description du transitoire thermohydraulique",
+
+ Pression = FACT ( statut = "o",
+
+ ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / pression (MPa) ", ),
+ Amont_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_Pression = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # FIN FACT Pression
+
+
+ CL_thermique = FACT ( statut = "o",
+
+ # TYPCLTH
+ TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+ fr="Type de condition thermique en paroi interne ",
+ into=( "Temperature imposee en paroi", # TEMP_IMPO
+ "Flux de chaleur impose en paroi", # FLUX_REP
+ "Temperature imposee du fluide et coefficient echange", # ECHANGE
+ "Debit massique et temperature d injection de securite", # DEBIT
+ "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+ "Courbe APRP"), # APRP
+ ),
+
+ APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+ # INSTANT1
+ Instant_1 = SIMP ( statut="o", typ="R", defaut=21.,
+ fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+ # INSTANT2
+ Instant_2 = SIMP ( statut="o", typ="R", defaut=45.,
+ fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+ # QACCU
+ DebitAccumule = SIMP ( statut="o", typ="R", defaut=2.3,
+ fr="Debit accumule (en m3/h) ", ),
+ # QIS
+ DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+ fr="Debit injection securite (en m3/h) ", ),
+ # TIS_MESSAGE
+ TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la temperature injection securite",
+ into = ( "NON", "OUI" ), ),
+ ), # Fin BLOC APRP
+
+ TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+ ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr = "Instant (s) / Température imposée (°C) ", ),
+ Amont_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureImposeeFluide = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC TemperatureImposeeFluide
+
+
+ FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+ ProfilTemporel_FluxChaleur = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+ Amont_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_FluxChaleur = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC FluxChaleur
+
+ CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+ ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+ Amont_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_CoefficientEchange = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC CoefficientEchange
+
+ DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit massique (kg/s) ", ),
+ Amont_DebitMassique = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+ fr="Prolongation à la frontière aval", defaut="Continu",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitMassique
+
+ TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Température d'injection de sécurité (°C) ", ),
+ Amont_TemperatureInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_TemperatureInjection = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ ), # Fin BLOC TemperatureInjection
+
+ DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+ ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+ fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+ Amont_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière amont",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+ Aval_DebitInjection = SIMP ( statut="o", typ="TXM", defaut="Continu",
+ fr="Prolongation à la frontière aval",
+ into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+ ), # Fin BLOC DebitInjection
+
+ Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+ # DH
+ DiametreHydraulique = SIMP ( statut="o", typ="R", defaut=0.3816,
+ fr="Diamètre hydraulique (m) ", ),
+ # DH_MESSAGE
+ DiametreHydraulique_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran du diamètre hydraulique (m) ",
+ into = ( "NON", "OUI" ), ),
+ # SECTION
+ SectionEspaceAnnulaire = SIMP ( statut="o", typ="R", defaut=0.21712,
+ fr="Section espace annulaire (m2) ", ),
+ # SECTION_MESSAGE
+ SectionEspaceAnnulaire_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la section espace annulaire (m2) ",
+ into = ( "NON", "OUI" ), ),
+ # DELTA
+ HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+ fr="Hauteur caractéristique convection naturelle (m) ", ),
+ # DELTA_MESSAGE
+ HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+ into = ( "NON", "OUI" ), ),
+ # EPS
+ CritereConvergenceRelative = SIMP ( statut="o", typ="R", defaut=0.00001,
+ fr="Critère convergence relative (-) ", ),
+ # COEFVESTALE
+ CoefficientsVestale = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Application des coefficients de Vestale",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Vestale
+
+ Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+ # VM
+ VolumeMelange_CREARE = SIMP ( statut="o", typ="R", defaut=14.9,
+ fr = "Volume de mélange CREARE (m3) ", ),
+ # VM_MESSAGE
+ VolumeMelange_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+ into=( 'OUI', 'NON' ), ),
+ # T0
+ TemperatureInitiale_CREARE = SIMP ( statut="o", typ="R", defaut=250.,
+ fr="Température initiale CREARE (°C) ", ),
+ # T0_MESSAGE
+ TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la température initiale CREARE (°C) ",
+ into=( 'OUI', 'NON' ), ),
+ # SE
+ SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+ fr="Surface d'échange fluide/structure (m2) ", ),
+ # SE_MESSAGE
+ SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+ fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+ into=( 'OUI', 'NON' ), ),
+
+ ), # Fin BLOC Creare
+
+ ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
--- /dev/null
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+# (code,version,catalogue,formatIn,formatOut)
+# ('CUVE2DG','V1',os.path.join(rep_cata,'Cuve2dg_Cata_VPN.py'),'cuve2dg','cuve2dg'),
+ ('CUVE2DG','V2',os.path.join(rep_cata,'DefaillCUVE_Cata.py'),'cuve2dg','cuve2dg'),
+)
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+print "passage dans la surcharge de configuration pour OTW"
+import os, sys, string, types, re
+import traceback
+from PyQt4.QtGui import *
+from utils import read_file
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIG:
+
+ #-----------------------------------
+ def __init__(self,appli,repIni):
+ #-----------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs
+ # On a deux directories : la directory generale (Repertoire d instal + Nom du code
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Cuve2dg
+ # et la directorie de l utilisateur
+ # HOME/.Eficas_Cuve2dg
+ # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement
+ # par celui de l utilisateur
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+ # dans le fichier general sinon
+ self.appli = appli
+ self.code = appli.code
+ self.salome = appli.salome
+ self.repIni = repIni
+
+ if self.appli:
+ self.parent=appli.top
+ self.appli.mode_nouv_commande='initial'
+ else: self.parent=None
+
+
+ # Valeurs par defaut
+ self.rep_user = os.path.join(os.environ['HOME'],'.Eficas_Cuve2dg')
+ if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)
+ self.initialdir = self.rep_user
+ self.path_doc = self.rep_user
+ self.savedir = os.path.join(os.environ['HOME'],'Eficas_Cuve2dg')
+ if not os.path.isdir(self.savedir) : os.mkdir(self.savedir)
+ self.exec_acrobat = self.rep_user
+
+ self.labels_user=('exec_acrobat', 'catalogues','savedir','path_doc')
+ self.labels_eficas=("rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata","initialdir","savedir","catalogues")
+
+ #Lecture des fichiers utilisateurs
+ self.lecture_fichier_ini_standard()
+ self.lecture_fichier_ini_utilisateur()
+ self.lecture_catalogues()
+ rep_mat=" " # Compatibilite Aster
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_standard(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ self.prefsUser=name+".py"
+ for k in self.labels_eficas :
+ try :
+ valeur=getattr(prefsCode,k)
+ setattr(self,k,valeur)
+ except :
+ pass
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_utilisateur(self):
+ #--------------------------------------
+ # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.prefsUser)
+ if not os.path.isfile(self.fic_ini_utilisateur): return
+
+ txt = utils.read_file(self.fic_ini_utilisateur)
+ from styles import style
+ d=locals()
+ try:
+ exec txt in d
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ QMessageBox.critical( None, "Import du fichier de Configuration",
+ "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )
+ sys.exit(0)
+ for k in self.labels_user :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+
+
+ #--------------------------------------
+ def lecture_catalogues(self):
+ #--------------------------------------
+ rep_mat=" " # Compatibilite Aster
+ if hasattr(self,"catalogues") :
+ return
+
+ fic_ini = os.path.join(self.repIni,"catalogues_cuve2dg.ini")
+ if not os.path.isfile(fic_ini) :
+ QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues",
+ "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )
+ sys.exit(0)
+
+ txt = utils.read_file(fic_ini)
+ d=locals()
+ try:
+ exec txt in d
+ self.catalogues=d["catalogues"]
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ QMessageBox.critical( None, "Import du fichier de Configuration",
+ "Erreur à la lecture du fichier de configuration " + fic_ini )
+ sys.exit(0)
+
+
+
+ #--------------------------------------
+ def save_params(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux paramètres dans le fichier de configuration utilisateur
+ #
+ texte=""
+ for clef in self.labels_user :
+ if hasattr(self,clef):
+ valeur=getattr(self,clef)
+ texte= texte + clef+" = " + repr(valeur) +"\n"
+ f=open(self.fic_ini_utilisateur,'w+')
+ print self.fic_ini_utilisateur
+ f.write(texte)
+ f.close()
+#
+
+
+def make_config(appli,rep):
+ return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+ return None
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur de fichier au format
+ DefaillCUVE pour EFICAS.
+
+"""
+import traceback
+import types,string,re
+
+from Noyau import N_CR
+from Accas import MCSIMP
+from generator_python import PythonGenerator
+
+def entryPoint():
+ """
+ Retourne les informations nécessaires pour le chargeur de plugins
+
+ Ces informations sont retournées dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'cuve2dg',
+ # La factory pour créer une instance du plugin
+ 'factory' : Cuve2dgGenerator,
+ }
+
+
+class Cuve2dgGenerator(PythonGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format DefaillCUVE
+
+ """
+ # Les extensions de fichier préconisées
+ extensions=('.comm',)
+
+ def __init__(self,cr=None):
+ # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+ if cr :
+ self.cr=cr
+ else:
+ self.cr=N_CR.CR(debut='CR generateur format DefaillCUVE pour DefaillCUVE',
+ fin='fin CR format DefaillCUVE pour DefaillCUVE')
+ # Le texte au format DefaillCUVE est stocké dans l'attribut textCuve
+ self.textCuve=''
+
+ # Ce dictionnaire liste le nom des variables utilisees dans le script
+ self.variable = {
+ "NiveauImpression" : "MESSAGE_LEVEL",
+ "FichierDataIn" : "DATARESUME_FILE",
+ "FichierTempSigma" : "TEMPSIG_FILE",
+ "FichierResultats" : "RESU_FILE",
+ "FichierCSV" : "CSV_FILE",
+ "FichierCREARE" : "CREARE_FILE",
+ "GrandeurEvaluee" : "GRANDEUR",
+ "IncrementTemporel" : "INCRTPS",
+ "IncrementMaxTemperature" : "DTPREC",
+ "IncrementMaxTempsAffichage" : "DTARCH",
+ "TraitementGeometrie" : "TYPEGEOM",
+ "RayonInterne" : "RINT",
+ "RayonInterne_mess" : "RINT_MESSAGE",
+ "RayonExterne" : "REXT",
+ "RayonExterne_mess" : "REXT_MESSAGE",
+ "EpaisseurRevetement" : "LREV",
+ "EpaisseurRevetement_mess" : "LREV_MESSAGE",
+ "LigamentExterneMin" : "LIGMIN",
+ "LigamentExterneMin_mess" : "LIGMIN_MESSAGE",
+ "NombreNoeudsMaillage" : "NBNO",
+ "TypeInitial" : "TYPEDEF",
+ "Orientation" : "ORIEDEF",
+ "ProfondeurRadiale" : "PROFDEF",
+ "ProfondeurRadiale_mess" : "PROFDEF_MESSAGE",
+ "ModeCalculLongueur" : "OPTLONG",
+ "Longueur" : "LONGDEF",
+ "Longueur_mess" : "LONGDEF_MESSAGE",
+ "CoefDirecteur" : "PROFSURLONG",
+ "CoefDirecteur_mess" : "PROFSURLONG_MESSAGE",
+ "Constante" : "LONGCONST",
+ "ModeCalculDecalage" : "DECATYP",
+ "DecalageNormalise" : "DECANOR",
+ "DecalageNormalise_mess" : "DECANOR_MESSAGE",
+ "DecalageRadial" : "DECADEF",
+ "DecalageRadial_mess" : "DECADEF_MESSAGE",
+ "Azimut" : "ANGLDEF",
+ "Azimut_mess" : "ANGLDEF_MESSAGE",
+ "Altitude_mess" : "ANGLDEF_MESSAGE",
+ "Altitude" : "ALTIDEF",
+ "Altitude_mess" : "ALTIDEF_MESSAGE",
+ "Pointe" : "POINDEF",
+ "ModeleFluence" : "MODELFLUENCE",
+ "ZoneActiveCoeur_AltitudeSup" : "H1COEUR",
+ "ZoneActiveCoeur_AltitudeInf" : "H2COEUR",
+ "FluenceMax" : "fmax",
+ "KPFrance" : "KPFRANCE",
+ "KPUS" : "KPUS",
+ "Azimut_0deg" : "COEFFLUENCE1",
+ "Azimut_5deg" : "COEFFLUENCE2",
+ "Azimut_10deg" : "COEFFLUENCE3",
+ "Azimut_15deg" : "COEFFLUENCE4",
+ "Azimut_20deg" : "COEFFLUENCE5",
+ "Azimut_25deg" : "COEFFLUENCE6",
+ "Azimut_30deg" : "COEFFLUENCE7",
+ "Azimut_35deg" : "COEFFLUENCE8",
+ "Azimut_40deg" : "COEFFLUENCE9",
+ "Azimut_45deg" : "COEFFLUENCE10",
+ "TypeIrradiation" : "TYPEIRR",
+ "RTNDT" : "RTNDT",
+ "ModeleIrradiation" : "MODELIRR",
+ "TeneurCuivre" : "CU",
+ "TeneurCuivre_mess" : "CU_MESSAGE",
+ "TeneurNickel" : "NI",
+ "TeneurNickel_mess" : "NI_MESSAGE",
+ "TeneurPhosphore" : "P",
+ "TeneurPhosphore_mess" : "P_MESSAGE",
+ "MoyenneRTndt" : "RTimoy",
+ "MoyenneRTndt_mess" : "RTimoy_MESSAGE",
+ "CoefVariationRTndt" : "RTicov",
+ "CoefVariationRTndt_mess" : "RTicov_MESSAGE",
+ "EcartTypeRTndt" : "USectDRT",
+ "EcartTypeRTndt_mess" : "USectDRT_MESSAGE",
+ "NombreEcartTypeRTndt" : "nbectDRTNDT",
+ "NombreEcartTypeRTndt_mess" : "nbectDRTNDT_MESSAGE",
+ "ModeleTenacite" : "MODELKIC",
+ "NBRE_CARACTERISTIQUE" : "NBCARAC",
+ "NbEcartType_MoyKIc" : "nbectKIc",
+ "NbEcartType_MoyKIc_mess" : "nbectKIc_MESSAGE",
+ "PalierDuctile_KIc" : "KICPAL",
+ "CoefficientVariation_KIc" : "KICCDV",
+ "Fractile_KIc" : "fractKIc",
+ "Fractile_KIc_mess" : "fractKIc_MESSAGE",
+ "Temperature_KIc100" : "T0WALLIN",
+ "A1" : "A1",
+ "A2" : "A2",
+ "A3" : "A3",
+ "B1" : "B1",
+ "B2" : "B2",
+ "B3" : "B3",
+ "C1" : "C1",
+ "C2" : "C2",
+ "C3" : "C3",
+ "AttnCorrBeta" : "ATTNCORRBETA",
+ "CorrIrwin" : "CORRIRWIN",
+ "ArretDeFissure" : "ARRETFISSURE",
+ "IncrementTailleFissure" : "INCRDEF",
+ "IncrementTailleFissure_mess" : "INCRDEF_MESSAGE",
+ "NbEcartType_MoyKIa" : "nbectKIa",
+ "PalierDuctile_KIa" : "KIAPAL",
+ "CoefficientVariation_KIa" : "KIACDV",
+ "InstantInitialisation" : "INSTINIT",
+ "ConditionLimiteThermiqueREV" : "KTHREV",
+ "TemperatureDeformationNulleREV" : "TREFREV",
+ "TemperaturePourCoefDilatThermREV" : "TDETREV",
+ "CoefficientPoissonREV" : "NUREV",
+ "ConditionLimiteThermiqueMDB" : "KTHMDB",
+ "TemperatureDeformationNulleMDB" : "TREFMDB",
+ "TemperaturePourCoefDilatThermMDB" : "TDETMDB",
+ "CoefficientPoissonMDB" : "NUMDB",
+ "TypeConditionLimiteThermique" : "TYPCLTH",
+ "Instant_1" : "INSTANT1",
+ "Instant_2" : "INSTANT2",
+ "DebitAccumule" : "QACCU",
+ "DebitInjectionSecurite" : "QIS",
+ "TempInjectionSecurite_mess" : "TIS_MESSAGE",
+ "DiametreHydraulique" : "DH",
+ "DiametreHydraulique_mess" : "DH_MESSAGE",
+ "SectionEspaceAnnulaire" : "SECTION",
+ "SectionEspaceAnnulaire_mess" : "SECTION_MESSAGE",
+ "HauteurCaracConvectionNaturelle" : "DELTA",
+ "HauteurCaracConvectionNaturelle_mess" : "DELTA_MESSAGE",
+ "CritereConvergenceRelative" : "EPS",
+ "CoefficientsVestale" : "COEFVESTALE",
+ "VolumeMelange_CREARE" : "VM",
+ "VolumeMelange_CREARE_mess" : "VM_MESSAGE",
+ "TemperatureInitiale_CREARE" : "T0",
+ "TemperatureInitiale_CREARE_mess" : "T0_MESSAGE",
+ "SurfaceEchange_FluideStructure" : "SE",
+ "SurfaceEchange_FluideStructure_mess" : "SE_MESSAGE",
+ }
+
+ # Ce dictionnaire liste le commentaire des variables utilisees dans le script
+ self.comment = {
+ "NiveauImpression" : "Niveau d impression des messages a l ecran (=0 : rien, =1 : temps calcul total, =2 : temps intermediaires)",
+ "FichierDataIn" : "sortie du fichier recapitulatif des donnees d entree {OUI ; NON}",
+ "FichierTempSigma" : "sortie des fichiers temperature et contraintes {OUI ; NON}",
+ "FichierResultats" : "sortie du fichier resultat template_DEFAILLCUVE {OUI ; NON}",
+ "FichierCSV" : "sortie du fichier resultat template_DEFAILLCUVE.CSV {OUI ; NON}",
+ "FichierCREARE" : "sortie du fichier Tfluide et Coef Echange {OUI ; NON}",
+ "GrandeurEvaluee" : "choix de la grandeur sous critere evaluee {FM_KICSURKCP ; MARGE_KI ; MARGE_KCP}",
+ "IncrementTemporel" : "increment temporel pour l analyse PROBABILISTE (si DETERMINISTE, fixer a 1)",
+ "IncrementMaxTemperature" : "increment max de temp/noeud/instant (°C)",
+ "IncrementMaxTempsAffichage" : "increment max de temps pour affichage (s)",
+ "TraitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
+ "RayonInterne" : "rayon interne (m)",
+ "RayonInterne_mess" : "affichage ecran du rayon interne (m)",
+ "RayonExterne" : "rayon externe (m)",
+ "RayonExterne_mess" : "affichage ecran du rayon externe (m)",
+ "EpaisseurRevetement" : "epaisseur revetement (m)",
+ "EpaisseurRevetement_mess" : "affichage ecran de l epaisseur revetement (m)",
+ "LigamentExterneMin" : "ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+ "LigamentExterneMin_mess" : "affichage ecran du ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+ "NombreNoeudsMaillage" : "nbre de noeuds dans l'épaisseur de la cuve",
+ "TypeInitial" : "type initial du defaut : DEBOUCHANT=Defaut Debouchant, DSR=Defaut Sous Revetement, DECALE=Defaut Decale",
+ "Orientation" : "orientation (LONGITUD / CIRCONF)",
+ "ProfondeurRadiale" : "profondeur radiale ou encore hauteur (m)",
+ "ProfondeurRadiale_mess" : "affichage ecran de la profondeur radiale ou encore hauteur (m)",
+ "ModeCalculLongueur" : "option pour definir la longueur du defaut (VALEUR pour une valeur fixe, FCTAFFINE pour une fct affine de la profondeur)",
+ "Longueur" : "longueur (m) pour defaut Sous Revetement",
+ "Longueur_mess" : "affichage ecran de la longueur (m) pour defaut Sous Revetement",
+ "CoefDirecteur" : "pente de la fonction affine l = h/profsurlong + a0",
+ "CoefDirecteur_mess" : "affichage ecran de la pente de la fonction affine l = h/profsurlong + a0",
+ "Constante" : "constante de la fonction affine a0",
+ "ModeCalculDecalage" : "type de decalage : normalise (NORMALISE) ou reel (VALEUR)",
+ "DecalageNormalise" : "decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+ "DecalageNormalise_mess" : "affichage ecran du decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+ "DecalageRadial" : "decalage radial reel (m) pour defaut decale",
+ "DecalageRadial_mess" : "affichage ecran du decalage radial reel (m) pour defaut decale",
+ "Azimut" : "coordonnee angulaire (degre)",
+ "Azimut_mess" : "affichage ecran de la coordonnee angulaire (degre)",
+ "Altitude" : "altitude (m) : valeur négative",
+ "Altitude_mess" : "affichage ecran de l altitude (m) : valeur négative",
+ "Pointe" : "choix du(des) point(s) du defaut considere {'A','B','BOTH'} pour DSR et DECALE (pour DEBOUCHANT : automatiquement 'B')",
+ "ModeleFluence" : "modele de fluence : {Reglementaire, France, ValeurImposee, SDM, USNRC, REV_2, SDM_Lissage, GrandeDev, GD_Cuve, Cuve1D}",
+ "ZoneActiveCoeur_AltitudeSup" : "cote superieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+ "ZoneActiveCoeur_AltitudeInf" : "cote inferieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+ "FluenceMax" : "fluence maximale assimilee par la cuve (n/cm2)",
+ "KPFrance" : "parametre exponentiel du modele France",
+ "KPUS" : "parametre exponentiel du modele US",
+ "Azimut_0deg" : "fluence a l'azimut 0 (10^19 n/cm)",
+ "Azimut_5deg" : "fluence a l'azimut 5 (10^19 n/cm)",
+ "Azimut_10deg" : "fluence a l'azimut 10 (10^19 n/cm)",
+ "Azimut_15deg" : "fluence a l'azimut 15 (10^19 n/cm)",
+ "Azimut_20deg" : "fluence a l'azimut 20 (10^19 n/cm)",
+ "Azimut_25deg" : "fluence a l'azimut 25 (10^19 n/cm)",
+ "Azimut_30deg" : "fluence a l'azimut 30 (10^19 n/cm)",
+ "Azimut_35deg" : "fluence a l'azimut 35 (10^19 n/cm)",
+ "Azimut_40deg" : "fluence a l'azimut 40 (10^19 n/cm)",
+ "Azimut_45deg" : "fluence a l'azimut 45 (10^19 n/cm)",
+ "TypeIrradiation" : "type irradiation : {RTNDT, FLUENCE}",
+ "RTNDT" : "RTNDT finale (°C)",
+ "ModeleIrradiation" : "modele d irradiation : {HOUSSIN, PERSOZ, LEFEBVRE, USNRCmdb} pour virole et {BRILLAUD,USNRCsoud} pour jointsoude",
+ "TeneurCuivre" : "teneur en cuivre (%)",
+ "TeneurCuivre_mess" : "affichage ecran de la teneur en cuivre (%)",
+ "TeneurNickel" : "teneur en nickel (%)",
+ "TeneurNickel_mess" : "affichage ecran de la teneur en nickel (%)",
+ "TeneurPhosphore" : "teneur en phosphore (%)",
+ "TeneurPhosphore_mess" : "affichage ecran de la teneur en phosphore (%)",
+ "MoyenneRTndt" : "moyenne de la RTNDT initiale : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+ "MoyenneRTndt_mess" : "affichage ecran de la moyenne de la RTNDT initiale",
+ "CoefVariationRTndt" : "coef de variation de la RTNDT initiale",
+ "CoefVariationRTndt_mess" : "affichage ecran du coef de variation de la RTNDT initiale",
+ "EcartTypeRTndt" : "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ "EcartTypeRTndt_mess" : "affichage ecran, pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ "NombreEcartTypeRTndt" : "Nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE (en DETERMINISTE, fixer a 2.)",
+ "NombreEcartTypeRTndt_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE",
+ "ModeleTenacite" : "modele de tenacite : {RCC-M, RCC-M_pal, RCC-M_exp, RCC-M_simpl, Houssin_RC, Wallin, REME, ORNL, Frama, WEIB3, WEIB2, LOGWOLF, WEIB-GEN}",
+ "NBRE_CARACTERISTIQUE" : "Nb caracteristique : ORDRE ou QUANTILE",
+ "NbEcartType_MoyKIc" : "Nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE (en DETERMINISTE, fixer a -2.)",
+ "NbEcartType_MoyKIc_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE",
+ "PalierDuctile_KIc" : "palier deterministe de K1c (MPa(m^0.5))",
+ "CoefficientVariation_KIc" : "coef de variation de la loi normale de K1c",
+ "Fractile_KIc" : "valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+ "Fractile_KIc_mess" : "affichage ecran de la valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+ "Temperature_KIc100" : "parametre T0 du modele Wallin (°C)",
+ "A1" : "coef des coefs d une WEIBULL generale",
+ "A2" : "",
+ "A3" : "",
+ "B1" : "",
+ "B2" : "",
+ "B3" : "",
+ "C1" : "",
+ "C2" : "",
+ "C3" : "",
+ "AttnCorrBeta" : "Attenuation de la correction plastique : {OUI, NON} ==> uniquement pour DSR ou DECALE",
+ "CorrIrwin" : "Correction plastique IRWIN : {OUI, NON} ==> uniquement pour DEBOUCHANT",
+ "ArretDeFissure" : "prise en compte de l arret de fissure {OUI, NON} (en PROBABILISTE, fixer a NON)",
+ "IncrementTailleFissure" : "increment de la taille de fissure (m)",
+ "IncrementTailleFissure_mess" : "affichage ecran de l increment de la taille de fissure (m)",
+ "NbEcartType_MoyKIa" : "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma)",
+ "PalierDuctile_KIa" : "palier deterministe de K1a quand modele RCC-M (MPa(m^0.5))",
+ "CoefficientVariation_KIa" : "coef de variation de la loi normale de K1a",
+ "InstantInitialisation" : "instant initial (s)",
+ "ConditionLimiteThermiqueREV" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+ "TemperatureDeformationNulleREV" : "temperature de deformation nulle (°C)",
+ "TemperaturePourCoefDilatThermREV" : "temperature de definition du coefficient de dilatation thermique (°C)",
+ "CoefficientPoissonREV" : "coefficient de Poisson",
+ "ConditionLimiteThermiqueMDB" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+ "TemperatureDeformationNulleMDB" : "temperature de deformation nulle (°C)",
+ "TemperaturePourCoefDilatThermMDB" : "temperature de definition du coefficient de dilatation thermique (°C)",
+ "CoefficientPoissonMDB" : "coefficient de Poisson",
+ "TypeConditionLimiteThermique" : "Type de condition thermique en paroi interne {TEMP_IMPO,FLUX_REP,ECHANGE,DEBIT,TEMP_FLU,APRP}",
+ "Instant_1" : "Borne inferieure de l intervalle de temps du 2nd palier T1",
+ "Instant_2" : "Borne superieure de l intervalle de temps du 2nd palier T1",
+ "DebitAccumule" : "Debit accumule (en m3/h)",
+ "DebitInjectionSecurite" : "Debit injection de securite (en m3/h)",
+ "TempInjectionSecurite_mess" : "affichage ecran de la temperature injection de securite",
+ "DiametreHydraulique" : "Diametre hydraulique (m)",
+ "DiametreHydraulique_mess" : "affichage ecran du diametre hydraulique (m)",
+ "SectionEspaceAnnulaire" : "Section espace annulaire (m2)",
+ "SectionEspaceAnnulaire_mess" : "affichage ecran de la section espace annulaire (m2)",
+ "HauteurCaracConvectionNaturelle" : "Hauteur caracteristique convection naturelle (m)",
+ "HauteurCaracConvectionNaturelle_mess" : "affichage ecran de la hauteur caracteristique convection naturelle (m)",
+ "CritereConvergenceRelative" : "Critere convergence relative (-)",
+ "CoefficientsVestale" : "Application des coefs de Vestale {OUI;NON}",
+ "VolumeMelange_CREARE" : "Volume de melange CREARE (m3)",
+ "VolumeMelange_CREARE_mess" : "affichage ecran du volume de melange CREARE (m3)",
+ "TemperatureInitiale_CREARE" : "Temperature initiale CREARE (degC)",
+ "TemperatureInitiale_CREARE_mess" : "affichage ecran de la temperature initiale CREARE (degC)",
+ "SurfaceEchange_FluideStructure" : "Surface d'echange fluide/structure (m2)",
+ "SurfaceEchange_FluideStructure_mess" : "affichage ecran de la surface d'echange fluide/structure (m2)",
+ }
+
+ # Ce dictionnaire liste la valeur par defaut des variables utilisees dans le script
+ self.default = {
+ "NiveauImpression" : "1",
+ "FichierDataIn" : "NON",
+ "FichierTempSigma" : "NON",
+ "FichierResultats" : "NON",
+ "FichierCSV" : "NON",
+ "FichierCREARE" : "NON",
+ "GrandeurEvaluee" : "FM_KICSURKCP",
+ "IncrementTemporel" : "1",
+ "IncrementMaxTemperature" : "0.1",
+ "IncrementMaxTempsAffichage" : "1000.",
+ "TraitementGeometrie" : "GEOMETRIE",
+ "RayonInterne" : "1.994",
+ "RayonInterne_mess" : "NON",
+ "RayonExterne" : "2.2015",
+ "RayonExterne_mess" : "NON",
+ "EpaisseurRevetement" : "0.0075",
+ "EpaisseurRevetement_mess" : "NON",
+ "LigamentExterneMin" : "0.75",
+ "LigamentExterneMin_mess" : "NON",
+ "NombreNoeudsMaillage" : "300",
+ "TypeInitial" : "DSR",
+ "Orientation" : "LONGITUD",
+ "ProfondeurRadiale" : "0.006",
+ "ProfondeurRadiale_mess" : "NON",
+ "ModeCalculLongueur" : "VALEUR",
+ "Longueur" : "0.060",
+ "Longueur_mess" : "NON",
+ "CoefDirecteur" : "10.",
+ "CoefDirecteur_mess" : "NON",
+ "Constante" : "0.",
+ "ModeCalculDecalage" : "VALEUR",
+ "DecalageNormalise" : "0.1",
+ "DecalageNormalise_mess" : "NON",
+ "DecalageRadial" : "0.",
+ "DecalageRadial_mess" : "NON",
+ "Azimut" : "0.",
+ "Azimut_mess" : "NON",
+ "Altitude" : "-4.",
+ "Altitude_mess" : "NON",
+ "Pointe" : "B",
+ "ModeleFluence" : "Reglementaire",
+ "ZoneActiveCoeur_AltitudeSup" : "-3.536",
+ "ZoneActiveCoeur_AltitudeInf" : "-7.194",
+ "FluenceMax" : "6.5",
+ "KPFrance" : "12.7",
+ "KPUS" : "9.4488",
+ "Azimut_0deg" : "5.8",
+ "Azimut_5deg" : "5.48",
+ "Azimut_10deg" : "4.46",
+ "Azimut_15deg" : "3.41",
+ "Azimut_20deg" : "3.37",
+ "Azimut_25deg" : "3.16",
+ "Azimut_30deg" : "2.74",
+ "Azimut_35deg" : "2.25",
+ "Azimut_40deg" : "1.89",
+ "Azimut_45deg" : "1.78",
+ "TypeIrradiation" : "RTNDT",
+ "RTNDT" : "64.",
+ "ModeleIrradiation" : "HOUSSIN",
+ "TeneurCuivre" : "0.0972",
+ "TeneurCuivre_mess" : "NON",
+ "TeneurNickel" : "0.72",
+ "TeneurNickel_mess" : "NON",
+ "TeneurPhosphore" : "0.00912",
+ "TeneurPhosphore_mess" : "NON",
+ "MoyenneRTndt" : "-12.0",
+ "MoyenneRTndt_mess" : "NON",
+ "CoefVariationRTndt" : "0.1",
+ "CoefVariationRTndt_mess" : "NON",
+ "EcartTypeRTndt" : "-2.",
+ "EcartTypeRTndt_mess" : "NON",
+ "NombreEcartTypeRTndt" : "2.",
+ "NombreEcartTypeRTndt_mess" : "NON",
+ "ModeleTenacite" : "RCC-M",
+ "NBRE_CARACTERISTIQUE" : "QUANTILE",
+ "NbEcartType_MoyKIc" : "-2.",
+ "NbEcartType_MoyKIc_mess" : "NON",
+ "PalierDuctile_KIc" : "195.",
+ "CoefficientVariation_KIc" : "0.15",
+ "Fractile_KIc" : "5.",
+ "Fractile_KIc_mess" : "NON",
+ "Temperature_KIc100" : "-27.",
+ "A1" : "21.263",
+ "A2" : "9.159",
+ "A3" : "0.04057",
+ "B1" : "17.153",
+ "B2" : "55.089",
+ "B3" : "0.0144",
+ "C1" : "4.",
+ "C2" : "0.",
+ "C3" : "0.",
+ "AttnCorrBeta" : "NON",
+ "CorrIrwin" : "NON",
+ "ArretDeFissure" : "NON",
+ "IncrementTailleFissure" : "0.",
+ "IncrementTailleFissure_mess" : "NON",
+ "NbEcartType_MoyKIa" : "0.",
+ "PalierDuctile_KIa" : "0.",
+ "CoefficientVariation_KIa" : "0.",
+ "InstantInitialisation" : "-1.",
+ "ConditionLimiteThermiqueREV" : "CHALEUR",
+ "TemperatureDeformationNulleREV" : "20.",
+ "TemperaturePourCoefDilatThermREV" : "287.",
+ "CoefficientPoissonREV" : "0.3",
+ "ConditionLimiteThermiqueMDB" : "CHALEUR",
+ "TemperatureDeformationNulleMDB" : "20.",
+ "TemperaturePourCoefDilatThermMDB" : "287.",
+ "CoefficientPoissonMDB" : "0.3",
+ "TypeConditionLimiteThermique" : "TEMP_IMPO",
+ "Instant_1" : "21.",
+ "Instant_2" : "45.",
+ "DebitAccumule" : "2.3",
+ "DebitInjectionSecurite" : "0.375",
+ "TempInjectionSecurite_mess" : "NON",
+ "DiametreHydraulique" : "0.3816",
+ "DiametreHydraulique_mess" : "NON",
+ "SectionEspaceAnnulaire" : "0.21712",
+ "SectionEspaceAnnulaire_mess" : "NON",
+ "HauteurCaracConvectionNaturelle" : "6.",
+ "HauteurCaracConvectionNaturelle_mess" : "NON",
+ "CritereConvergenceRelative" : "0.00001",
+ "CoefficientsVestale" : "NON",
+ "VolumeMelange_CREARE" : "14.9",
+ "VolumeMelange_CREARE_mess" : "NON",
+ "TemperatureInitiale_CREARE" : "250.",
+ "TemperatureInitiale_CREARE_mess" : "NON",
+ "SurfaceEchange_FluideStructure" : "0.",
+ "SurfaceEchange_FluideStructure_mess" : "NON",
+ }
+
+ # Ce dictionnaire liste la rubrique d'appartenance des variables utilisees dans le script
+ self.bloc = {
+ "NiveauImpression" : "OPTIONS",
+ "FichierDataIn" : "OPTIONS",
+ "FichierTempSigma" : "OPTIONS",
+ "FichierResultats" : "OPTIONS",
+ "FichierCSV" : "OPTIONS",
+ "FichierCREARE" : "OPTIONS",
+ "GrandeurEvaluee" : "OPTIONS",
+ "IncrementTemporel" : "OPTIONS",
+ "IncrementMaxTemperature" : "OPTIONS",
+ "IncrementMaxTempsAffichage" : "OPTIONS",
+ "TraitementGeometrie" : "DONNEES DE LA CUVE",
+ "RayonInterne" : "DONNEES DE LA CUVE",
+ "RayonInterne_mess" : "DONNEES DE LA CUVE",
+ "RayonExterne" : "DONNEES DE LA CUVE",
+ "RayonExterne_mess" : "DONNEES DE LA CUVE",
+ "EpaisseurRevetement" : "DONNEES DE LA CUVE",
+ "EpaisseurRevetement_mess" : "DONNEES DE LA CUVE",
+ "LigamentExterneMin" : "DONNEES DE LA CUVE",
+ "LigamentExterneMin_mess" : "DONNEES DE LA CUVE",
+ "NombreNoeudsMaillage" : "DONNEES DE LA CUVE",
+ "TypeInitial" : "CARACTERISTIQUES DU DEFAUT",
+ "Orientation" : "CARACTERISTIQUES DU DEFAUT",
+ "ProfondeurRadiale" : "CARACTERISTIQUES DU DEFAUT",
+ "ProfondeurRadiale_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeCalculLongueur" : "CARACTERISTIQUES DU DEFAUT",
+ "Longueur" : "CARACTERISTIQUES DU DEFAUT",
+ "Longueur_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "CoefDirecteur" : "CARACTERISTIQUES DU DEFAUT",
+ "CoefDirecteur_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Constante" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeCalculDecalage" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageNormalise" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageNormalise_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageRadial" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageRadial_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Azimut" : "CARACTERISTIQUES DU DEFAUT",
+ "Azimut_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Altitude" : "CARACTERISTIQUES DU DEFAUT",
+ "Altitude_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Pointe" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeleFluence" : "MODELES",
+ "ZoneActiveCoeur_AltitudeSup" : "MODELES",
+ "ZoneActiveCoeur_AltitudeInf" : "MODELES",
+ "FluenceMax" : "MODELES",
+ "KPFrance" : "MODELES",
+ "KPUS" : "MODELES",
+ "Azimut_0deg" : "MODELES",
+ "Azimut_5deg" : "MODELES",
+ "Azimut_10deg" : "MODELES",
+ "Azimut_15deg" : "MODELES",
+ "Azimut_20deg" : "MODELES",
+ "Azimut_25deg" : "MODELES",
+ "Azimut_30deg" : "MODELES",
+ "Azimut_35deg" : "MODELES",
+ "Azimut_40deg" : "MODELES",
+ "Azimut_45deg" : "MODELES",
+ "TypeIrradiation" : "MODELES",
+ "RTNDT" : "MODELES",
+ "ModeleIrradiation" : "MODELES",
+ "TeneurCuivre" : "MODELES",
+ "TeneurCuivre_mess" : "MODELES",
+ "TeneurNickel" : "MODELES",
+ "TeneurNickel_mess" : "MODELES",
+ "TeneurPhosphore" : "MODELES",
+ "TeneurPhosphore_mess" : "MODELES",
+ "MoyenneRTndt" : "MODELES",
+ "MoyenneRTndt_mess" : "MODELES",
+ "CoefVariationRTndt" : "MODELES",
+ "CoefVariationRTndt_mess" : "MODELES",
+ "EcartTypeRTndt" : "MODELES",
+ "EcartTypeRTndt_mess" : "MODELES",
+ "NombreEcartTypeRTndt" : "MODELES",
+ "NombreEcartTypeRTndt_mess" : "MODELES",
+ "ModeleTenacite" : "MODELES",
+ "NBRE_CARACTERISTIQUE" : "MODELES",
+ "NbEcartType_MoyKIc" : "MODELES",
+ "NbEcartType_MoyKIc_mess" : "MODELES",
+ "PalierDuctile_KIc" : "MODELES",
+ "CoefficientVariation_KIc" : "MODELES",
+ "Fractile_KIc" : "MODELES",
+ "Fractile_KIc_mess" : "MODELES",
+ "Temperature_KIc100" : "MODELES",
+ "A1" : "MODELES",
+ "A2" : "MODELES",
+ "A3" : "MODELES",
+ "B1" : "MODELES",
+ "B2" : "MODELES",
+ "B3" : "MODELES",
+ "C1" : "MODELES",
+ "C2" : "MODELES",
+ "C3" : "MODELES",
+ "AttnCorrBeta" : "MODELES",
+ "CorrIrwin" : "MODELES",
+ "ArretDeFissure" : "MODELES",
+ "IncrementTailleFissure" : "MODELES",
+ "IncrementTailleFissure_mess" : "MODELES",
+ "NbEcartType_MoyKIa" : "MODELES",
+ "PalierDuctile_KIa" : "MODELES",
+ "CoefficientVariation_KIa" : "MODELES",
+ "InstantInitialisation" : "ETAT INITIAL",
+ "ConditionLimiteThermiqueREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "TemperatureDeformationNulleREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "TemperaturePourCoefDilatThermREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "CoefficientPoissonREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "ConditionLimiteThermiqueMDB" : "CARACTERISTIQUES DU MDB",
+ "TemperatureDeformationNulleMDB" : "CARACTERISTIQUES DU MDB",
+ "TemperaturePourCoefDilatThermMDB" : "CARACTERISTIQUES DU MDB",
+ "CoefficientPoissonMDB" : "CARACTERISTIQUES DU MDB",
+ "TypeConditionLimiteThermique" : "TRANSITOIRE",
+ "Instant_1" : "TRANSITOIRE",
+ "Instant_2" : "TRANSITOIRE",
+ "DebitAccumule" : "TRANSITOIRE",
+ "DebitInjectionSecurite" : "TRANSITOIRE",
+ "TempInjectionSecurite_mess" : "TRANSITOIRE",
+ "DiametreHydraulique" : "TRANSITOIRE",
+ "DiametreHydraulique_mess" : "TRANSITOIRE",
+ "SectionEspaceAnnulaire" : "TRANSITOIRE",
+ "SectionEspaceAnnulaire_mess" : "TRANSITOIRE",
+ "HauteurCaracConvectionNaturelle" : "TRANSITOIRE",
+ "HauteurCaracConvectionNaturelle_mess" : "TRANSITOIRE",
+ "CritereConvergenceRelative" : "TRANSITOIRE",
+ "CoefficientsVestale" : "TRANSITOIRE",
+ "VolumeMelange_CREARE" : "TRANSITOIRE",
+ "VolumeMelange_CREARE_mess" : "TRANSITOIRE",
+ "TemperatureInitiale_CREARE" : "TRANSITOIRE",
+ "TemperatureInitiale_CREARE_mess" : "TRANSITOIRE",
+ "SurfaceEchange_FluideStructure" : "TRANSITOIRE",
+ "SurfaceEchange_FluideStructure_mess" : "TRANSITOIRE",
+ }
+
+ def gener(self,obj,format='brut'):
+ self.text=''
+ self.textCuve=''
+ self.dico_mot={}
+ self.dico_genea={}
+ self.text=PythonGenerator.gener(self,obj,format)
+ return self.text
+
+ def generMCSIMP(self,obj) :
+ self.dico_mot[obj.nom]=obj.valeur
+ clef=""
+ for i in obj.get_genealogie() :
+ clef=clef+"_"+i
+ self.dico_genea[clef]=obj.valeur
+ s=PythonGenerator.generMCSIMP(self,obj)
+ return s
+
+ def writeCuve2DG(self):
+ print "je passe dans writeCuve2DG"
+ self.genereTexteCuve()
+ f = open( "/tmp/data_template", 'wb')
+ print self.texteCuve
+ f.write( self.texteCuve )
+ f.close()
+
+ def entete(self):
+ '''
+ Ecrit l'entete du fichier data_template
+ '''
+ texte = "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ texte += "# OUTIL D'ANALYSE PROBABILISTE DE LA DUREE DE VIE DES CUVES REP"+"\n"
+ texte += "# ---------------"+"\n"
+ texte += "# FICHIER DE MISE EN DONNEES"+"\n"
+ texte += "#"+"\n"
+ texte += "# SI CALCUL DETERMINISTE :"+"\n"
+ texte += "# - fixer INCRTPS=1, nbectDRTNDT=2., nbectKIc=-2."+"\n"
+ texte += "# - les calculs ne sont possibles qu'en une seule pointe du defaut (POINDEF<>BOTH)"+"\n"
+ texte += "# SI CALCUL PROBABILISTE :"+"\n"
+ texte += "# - fixer ARRETFISSURE=NON"+"\n"
+ texte += "#"+"\n"
+ texte += "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def rubrique(self, titre):
+ '''
+ Rubrique
+ '''
+ texte = "#"+"\n"
+ texte += "############################################################################################"+"\n"
+ texte += "# " + titre + "\n"
+ texte += "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def sousRubrique(self, soustitre, numtitre):
+ '''
+ Sous-rubrique
+ '''
+ texte = "#"+"\n"
+ texte += "# " + numtitre + soustitre + "\n"
+ texte += "#==========================================================================================="+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def ecritLigne(self, variablelue):
+ '''
+ Ecrit l'affectation d'une valeur a sa variable, suivie d'un commentaire
+ '''
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], str(self.dico_mot[variablelue]), self.comment[variablelue])
+ return texte
+
+ def affecteValeurDefaut(self, variablelue):
+ '''
+ Affecte une valeur par defaut a une variable, suivie d'un commentaire
+ '''
+ print "Warning ==> Dans la rubrique",self.bloc[variablelue],", valeur par defaut pour ",variablelue," = ",self.default[variablelue]
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], self.default[variablelue], self.comment[variablelue])
+ return texte
+
+ def affecteValeur(self, variablelue, valeuraffectee):
+ '''
+ Affecte une valeur a une variable, suivie d'un commentaire
+ '''
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], valeuraffectee, self.comment[variablelue])
+ return texte
+
+ def ecritVariable(self, variablelue):
+ if self.dico_mot.has_key(variablelue):
+ texte = self.ecritLigne(variablelue)
+ else :
+ texte = self.affecteValeurDefaut(variablelue)
+ return texte
+
+ def amontAval(self, amont, aval):
+ if str(self.dico_mot[amont])=='Continu':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'CC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'CL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'CE'+"\n"
+ if str(self.dico_mot[amont])=='Lineaire':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'LC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'LL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'LE'+"\n"
+ if str(self.dico_mot[amont])=='Exclu':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'EC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'EL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'EE'+"\n"
+ return texte
+
+ def genereTexteCuve(self):
+ self.texteCuve = ""
+ self.texteCuve += self.entete()
+
+ # Rubrique OPTIONS
+ self.texteCuve += self.rubrique('OPTIONS')
+
+ self.texteCuve += self.sousRubrique('Impression a l ecran', '')
+ if self.dico_mot.has_key('NiveauImpression'):
+ if str(self.dico_mot["NiveauImpression"])=='Aucune impression':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '0')
+ if str(self.dico_mot["NiveauImpression"])=='Temps total':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '1')
+ if str(self.dico_mot["NiveauImpression"])=='Temps intermediaires':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '2')
+
+ self.texteCuve += self.sousRubrique('Generation de fichiers', '')
+ self.texteCuve += self.ecritVariable('FichierDataIn')
+ self.texteCuve += self.ecritVariable('FichierTempSigma')
+ self.texteCuve += self.ecritVariable('FichierResultats')
+ self.texteCuve += self.ecritVariable('FichierCSV')
+ self.texteCuve += self.ecritVariable('FichierCREARE')
+
+ self.texteCuve += self.sousRubrique('Grandeur evaluee', '')
+ if self.dico_mot.has_key('GrandeurEvaluee'):
+ if str(self.dico_mot["GrandeurEvaluee"])=='Facteur de marge KIc/KCP':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'FM_KICSURKCP')
+ if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KI':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KI')
+ if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KCP':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KCP')
+
+ self.texteCuve += self.sousRubrique('Divers', '')
+ self.texteCuve += self.ecritVariable('IncrementTemporel')
+ self.texteCuve += self.ecritVariable('IncrementMaxTemperature')
+ self.texteCuve += self.ecritVariable('IncrementMaxTempsAffichage')
+ if self.dico_mot.has_key('ListeInstants'):
+ self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+ self.imprime(1,(self.dico_mot["ListeInstants"]))
+ else :
+ print "Warning ==> Dans la rubrique OPTIONS, fournir ListeInstants."
+ self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+ self.texteCuve += " 0.\n"
+ self.texteCuve += " 1.\n"
+
+
+ # Rubrique DONNEES DE LA CUVE
+ self.texteCuve += self.rubrique('DONNEES DE LA CUVE')
+ if self.dico_mot.has_key('TraitementGeometrie'):
+ if str(self.dico_mot["TraitementGeometrie"])=='Topologie':
+ self.texteCuve += self.affecteValeur('TraitementGeometrie', 'GEOMETRIE')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('RayonInterne')
+ self.texteCuve += self.ecritVariable('RayonInterne_mess')
+ self.texteCuve += self.ecritVariable('RayonExterne')
+ self.texteCuve += self.ecritVariable('RayonExterne_mess')
+ self.texteCuve += self.ecritVariable('EpaisseurRevetement')
+ self.texteCuve += self.ecritVariable('EpaisseurRevetement_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('LigamentExterneMin')
+ self.texteCuve += self.ecritVariable('LigamentExterneMin_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+ if str(self.dico_mot["TraitementGeometrie"])=='Maillage':
+ self.texteCuve += self.affecteValeur('TraitementGeometrie', 'MAILLAGE')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+ self.imprime(1,(self.dico_mot["ListeAbscisses"]))
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TraitementGeometrie')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('RayonInterne')
+ self.texteCuve += self.affecteValeurDefaut('RayonInterne_mess')
+ self.texteCuve += self.affecteValeurDefaut('RayonExterne')
+ self.texteCuve += self.affecteValeurDefaut('RayonExterne_mess')
+ self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement')
+ self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin')
+ self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('NombreNoeudsMaillage')
+
+
+ # Rubrique CARACTERISTIQUES DU DEFAUT
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU DEFAUT')
+
+ if self.dico_mot.has_key('TypeInitial'):
+ if str(self.dico_mot["TypeInitial"])=='Defaut Sous Revetement':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DSR')
+ if str(self.dico_mot["TypeInitial"])=='Defaut Decale':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DECALE')
+ if str(self.dico_mot["TypeInitial"])=='Defaut Debouchant':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DEBOUCHANT')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeInitial')
+
+ self.texteCuve+="# Fournir ORIEDEF, (PROFDEF, PROFDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DSR, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST)"+"\n"
+ self.texteCuve+="# - Si DECALE, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST), DECATYP, (DECANOR,DECANOR_MESSAGE) ou (DECADEF,DECADEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DEBOUCHANT, fournir IRWIN"+"\n"
+ self.texteCuve+="# Fournir (ANGLDEF, ANGLDEF_MESSAGE), (ALTIDEF, ALTIDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DSR ou DECALE, fournir POINDEF"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Remarque :"+"\n"
+ self.texteCuve+="# - si DSR ou DECALE, dans la rubrique 'Modele de tenacite', fournir ATTNCORRBETA (ne pas fournir CORRIRWIN)"+"\n"
+ self.texteCuve+="# - si DEBOUCHANT, dans la rubrique 'Modele de tenacite', fournir CORRIRWIN (ne pas fournir ATTNCORRBETA)"+"\n"
+
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('Orientation'):
+ if str(self.dico_mot["Orientation"])=='Longitudinale':
+ self.texteCuve += self.affecteValeur('Orientation', 'LONGITUD')
+ if str(self.dico_mot["Orientation"])=='Circonferentielle':
+ self.texteCuve += self.affecteValeur('Orientation', 'CIRCONF')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('Orientation')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('ProfondeurRadiale')
+ self.texteCuve += self.ecritVariable('ProfondeurRadiale_mess')
+
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeCalculLongueur'):
+ if str(self.dico_mot["ModeCalculLongueur"])=='Valeur':
+ self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'VALEUR')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.ecritVariable('Longueur')
+ self.texteCuve += self.ecritVariable('Longueur_mess')
+ if str(self.dico_mot["ModeCalculLongueur"])=='Fonction affine de la profondeur':
+ self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'FCTAFFINE')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.ecritVariable('CoefDirecteur')
+ self.texteCuve += self.ecritVariable('CoefDirecteur_mess')
+ self.texteCuve += self.ecritVariable('Constante')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeCalculLongueur')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('Longueur')
+ self.texteCuve += self.affecteValeurDefaut('Longueur_mess')
+
+ if self.dico_mot.has_key('TypeInitial'):
+ if str(self.dico_mot["TypeInitial"])!='Defaut Sous Revetement':
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeCalculDecalage'):
+ if str(self.dico_mot["ModeCalculDecalage"])=='Valeur normalisee':
+ self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'NORMALISE')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.ecritVariable('DecalageNormalise')
+ self.texteCuve += self.ecritVariable('DecalageNormalise_mess')
+ if str(self.dico_mot["ModeCalculDecalage"])=='Valeur':
+ self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'VALEUR')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.ecritVariable('DecalageRadial')
+ self.texteCuve += self.ecritVariable('DecalageRadial_mess')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeCalculDecalage')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('DecalageRadial')
+ self.texteCuve += self.affecteValeurDefaut('DecalageRadial_mess')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('Azimut')
+ self.texteCuve += self.ecritVariable('Azimut_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('Altitude')
+ self.texteCuve += self.ecritVariable('Altitude_mess')
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('Pointe'):
+ if str(self.dico_mot["Pointe"])=='A':
+ self.texteCuve += self.affecteValeur('Pointe', 'A')
+ if str(self.dico_mot["Pointe"])=='B':
+ self.texteCuve += self.affecteValeur('Pointe', 'B')
+ if str(self.dico_mot["Pointe"])=='A et B':
+ self.texteCuve += self.affecteValeur('Pointe', 'BOTH')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('Pointe')
+
+ # Rubrique MODELES FLUENCE, IRRADIATION, TENACITE
+ self.texteCuve += self.rubrique('MODELES FLUENCE, IRRADIATION, TENACITE')
+ self.texteCuve += self.sousRubrique('Modele d attenuation de la fluence dans l epaisseur','A.')
+
+ if self.dico_mot.has_key('ModeleFluence'):
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'Reglementaire')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'France')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=0. (ValeurImposee)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'ValeurImposee')
+ if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY (SDM)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM')
+ if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'USNRC')
+ if str(self.dico_mot["ModeleFluence"])=='Dossier 900 MWe AP9701 rev 2 (REV_2)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'REV_2')
+ if str(self.dico_mot["ModeleFluence"])=='Lissage du modele ajuste (SDM_Lissage)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM_Lissage')
+ if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'GrandeDev')
+ if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'GD_Cuve')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'Cuve1D')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleFluence')
+
+ self.texteCuve+="# - si France, fournir KPFRANCE"+"\n"
+ self.texteCuve+="# - si USNRC, fournir KPUS"+"\n"
+ self.texteCuve+="# - si modele GD_Cuve, fournir COEFFLUENCE1, COEFFLUENCE2, ..., COEFFLUENCE9, COEFFLUENCE10"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeSup')
+ self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeInf')
+ self.texteCuve += self.ecritVariable('FluenceMax')
+ if self.dico_mot.has_key('ModeleFluence'):
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+ self.texteCuve += self.ecritVariable('KPFrance')
+ if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+ self.texteCuve += self.ecritVariable('KPUS')
+ if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+ self.texteCuve += self.ecritVariable('Azimut_0deg')
+ self.texteCuve += self.ecritVariable('Azimut_5deg')
+ self.texteCuve += self.ecritVariable('Azimut_10deg')
+ self.texteCuve += self.ecritVariable('Azimut_15deg')
+ self.texteCuve += self.ecritVariable('Azimut_20deg')
+ self.texteCuve += self.ecritVariable('Azimut_25deg')
+ self.texteCuve += self.ecritVariable('Azimut_30deg')
+ self.texteCuve += self.ecritVariable('Azimut_35deg')
+ self.texteCuve += self.ecritVariable('Azimut_40deg')
+ self.texteCuve += self.ecritVariable('Azimut_45deg')
+
+ self.texteCuve += self.sousRubrique('Irradiation','B.')
+
+ if self.dico_mot.has_key('TypeIrradiation'):
+
+ if str(self.dico_mot["TypeIrradiation"])=='RTndt de la cuve a l instant de l analyse':
+ self.texteCuve += self.affecteValeur('TypeIrradiation', 'RTNDT')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('RTNDT')
+
+ if str(self.dico_mot["TypeIrradiation"])=='Modele d irradiation':
+ self.texteCuve += self.affecteValeur('TypeIrradiation', 'FLUENCE')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeleIrradiation'):
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'HOUSSIN')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'PERSOZ')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'LEFEBVRE')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCmdb')
+ if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'BRILLAUD')
+ if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCsoud')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleIrradiation')
+ self.texteCuve+="# - pour tout modele, fournir (CU, CU_MESSAGE),"+"\n"
+ self.texteCuve+="# (NI, NI_MESSAGE),"+"\n"
+ self.texteCuve+="# - si HOUSSIN, PERSOZ, LEFEBVRE, BRILLAUD, fournir (P, P_MESSAGE)"+"\n"
+ self.texteCuve+="# - pour tout modele, fournir (RTimoy, RTimoy_MESSAGE),"+"\n"
+ self.texteCuve+="# - si USNRCsoud ou USNRCmdb, fournir (RTicov, RTicov_MESSAGE)"+"\n"
+ self.texteCuve+="# (USectDRT, USectDRT_MESSAGE)"+"\n"
+ self.texteCuve+="# - pour tout modele, fournir (nbectDRTNDT, nbectDRTNDT_MESSAGE)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TeneurCuivre')
+ self.texteCuve += self.ecritVariable('TeneurCuivre_mess')
+ self.texteCuve += self.ecritVariable('TeneurNickel')
+ self.texteCuve += self.ecritVariable('TeneurNickel_mess')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+ self.texteCuve += self.ecritVariable('TeneurPhosphore')
+ self.texteCuve += self.ecritVariable('TeneurPhosphore_mess')
+ self.texteCuve += self.ecritVariable('MoyenneRTndt')
+ self.texteCuve += self.ecritVariable('MoyenneRTndt_mess')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.ecritVariable('CoefVariationRTndt')
+ self.texteCuve += self.ecritVariable('CoefVariationRTndt_mess')
+ self.texteCuve += self.ecritVariable('EcartTypeRTndt')
+ self.texteCuve += self.ecritVariable('EcartTypeRTndt_mess')
+ self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt')
+ self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt_mess')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeIrradiation')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('RTNDT')
+
+ self.texteCuve += self.sousRubrique('Modele de tenacite','C.')
+ self.texteCuve+="# tenacite d amorcage"+"\n"
+
+ if self.dico_mot.has_key('ModeleTenacite'):
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2 CUVE1D':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_simpl')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Houssin_RC')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_pal')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI~exponentiel':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_exp')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Wallin')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'REME')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'ORNL')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB2')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB3')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB_GEN')
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Frama')
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'LOGWOLF')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleTenacite')
+ self.texteCuve+="# - si RCC-M, RCC-M_pal, Houssin_RC, fournir (nbectKIc, nbectKIc_MESSAGE), KICPAL, KICCDV"+"\n"
+ self.texteCuve+="# - si RCC-M_exp, fournir (nbectKIc, nbectKIc_MESSAGE), KICCDV"+"\n"
+ self.texteCuve+="# - si RCC-M_simpl, ne rien fournir"+"\n"
+ self.texteCuve+="# - si Frama, LOGWOLF, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+ self.texteCuve+="# - si REME, ORNL, WEIB3, WEIB2, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC"+"\n"
+ self.texteCuve+="# - si Wallin, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+ self.texteCuve+="# puis T0WALLIN"+"\n"
+ self.texteCuve+="# - si WEIB-GEN, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+ self.texteCuve+="# puis A1, A2, A3, B1, B2, B3, C1, C2, C3"+"\n"
+ self.texteCuve+="# loi de Weibull P(K<x) = 1 - exp{-[ (x-a(T)) / b(T) ]^c(T) }"+"\n"
+ self.texteCuve+="# avec a(T) = A1 + A2*exp[A3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="# b(T) = B1 + B2*exp[B3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="# c(T) = C1 + C2*exp[C3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeleTenacite'):
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' :
+ self.texteCuve += self.ecritVariable('NBRE_CARACTERISTIQUE')
+ self.texteCuve+="# - Si CARAC = QUANTILE, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si CARAC = ORDRE, fournir (fractKIc, fractKIc_MESSAGE)"+"\n"
+
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+ self.texteCuve += self.ecritVariable('PalierDuctile_KIc')
+ self.texteCuve += self.ecritVariable('CoefficientVariation_KIc')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)' or str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' or str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+ if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='QUANTILE' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+ if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='ORDRE' :
+ self.texteCuve += self.ecritVariable('Fractile_KIc')
+ self.texteCuve += self.ecritVariable('Fractile_KIc_mess')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' :
+ self.texteCuve += self.ecritVariable('Temperature_KIc100')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee' :
+ self.texteCuve += self.ecritVariable('A1')
+ self.texteCuve += self.ecritVariable('A2')
+ self.texteCuve += self.ecritVariable('A3')
+ self.texteCuve += self.ecritVariable('B1')
+ self.texteCuve += self.ecritVariable('B2')
+ self.texteCuve += self.ecritVariable('B3')
+ self.texteCuve += self.ecritVariable('C1')
+ self.texteCuve += self.ecritVariable('C2')
+ self.texteCuve += self.ecritVariable('C3')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc')
+ self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc_mess')
+ self.texteCuve += self.affecteValeurDefaut('PalierDuctile_KIc')
+ self.texteCuve += self.affecteValeurDefaut('CoefficientVariation_KIc')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Correction plastique"+"\n"
+
+ if self.dico_mot.has_key('CorrectionPlastique'):
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA (pour DSR et defaut decale)':
+ self.texteCuve += self.affecteValeur('AttnCorrBeta','NON')
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA attenuee (pour DSR et defaut decale)':
+ self.texteCuve += self.affecteValeur('AttnCorrBeta','OUI')
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique IRWIN (pour defaut debouchant)':
+ self.texteCuve += self.affecteValeur('CorrIrwin','OUI')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('AttnCorrBeta')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Prise en compte de l'arret de fissure si DETERMINISTE"+"\n"
+
+ self.texteCuve += self.ecritVariable('ArretDeFissure')
+ self.texteCuve+="# - si ARRETFISSURE=OUI, fournir (INCRDEF, INCRDEF_MESSAGE), nbectKIa, KIAPAL, KIACDV"+"\n"
+ if self.dico_mot.has_key('ArretDeFissure'):
+ if str(self.dico_mot["ArretDeFissure"])=='OUI':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('IncrementTailleFissure')
+ self.texteCuve += self.ecritVariable('IncrementTailleFissure_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Parametres pour le calcul de la tenacite a l arret"+"\n"
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIa')
+ self.texteCuve += self.ecritVariable('PalierDuctile_KIa')
+ self.texteCuve += self.ecritVariable('CoefficientVariation_KIa')
+
+ # Rubrique Etat initial
+ self.texteCuve += self.rubrique('ETAT INITIAL')
+
+ self.texteCuve+="# Profil radial de la temperature initiale dans la cuve"+"\n"
+ self.texteCuve+="# abscisse (m) / temp initiale dans la cuve"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ if self.dico_mot.has_key('ProfilRadial_TemperatureInitiale'):
+ self.imprime(2,(self.dico_mot["ProfilRadial_TemperatureInitiale"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureInitiale','Aval_TemperatureInitiale')
+ else :
+ self.texteCuve+=" 1.9940 287."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Profils radiaux des contraintes résiduelles dans la cuve"+"\n"
+ self.texteCuve+="# abscisse (m) / sigma rr / sigma tt / sigma zz"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ if self.dico_mot.has_key('ProfilRadial_ContraintesInitiales'):
+ self.imprime(4,(self.dico_mot["ProfilRadial_ContraintesInitiales"]))
+ self.texteCuve += self.amontAval('Amont_ContraintesInitiales','Aval_ContraintesInitiales')
+ else :
+ self.texteCuve+="1.994 0. 0. 0."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Instant initial"+"\n"
+ self.texteCuve += self.ecritVariable('InstantInitialisation')
+
+ # Rubrique CARACTERISTIQUES DU REVETEMENT
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU REVETEMENT')
+
+ self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueREV')
+ self.texteCuve+="# - si CHALEUR, fournir Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="# - si ENTHALPIE, fournir Temperature (°C) / enthalpie (J/kg)"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ChaleurREV_Fct_Temperature'):
+ self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.imprime(2,(self.dico_mot["ChaleurREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ChaleurREV','Aval_ChaleurREV')
+ elif self.dico_mot.has_key('EnthalpieREV_Fct_Temperature'):
+ self.texteCuve+="# Temperature (°C) / enthalpie (J/kg)"+"\n"
+ self.imprime(2,(self.dico_mot["EnthalpieREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_EnthalpieREV','Aval_EnthalpieREV')
+ else :
+ self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="0. 36.03E5 "+"\n"
+ self.texteCuve+="20. 36.03E5 "+"\n"
+ self.texteCuve+="200. 41.65E5 "+"\n"
+ self.texteCuve+="350. 43.47E5 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / conductivite thermique (W/m/°C)"+"\n"
+ if self.dico_mot.has_key('ConductiviteREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ConductiviteREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ConductiviteREV','Aval_ConductiviteREV')
+ else :
+ self.texteCuve+="0. 14.7 "+"\n"
+ self.texteCuve+="20. 14.7 "+"\n"
+ self.texteCuve+="200. 17.2 "+"\n"
+ self.texteCuve+="350. 19.3 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / module d'Young (MPa)"+"\n"
+ if self.dico_mot.has_key('ModuleYoungREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ModuleYoungREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ModuleYoungREV','Aval_ModuleYoungREV')
+ else :
+ self.texteCuve+="0. 198500. "+"\n"
+ self.texteCuve+="20. 197000. "+"\n"
+ self.texteCuve+="200. 184000. "+"\n"
+ self.texteCuve+="350. 172000. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / coefficient de dilatation thermique (°C-1)"+"\n"
+ if self.dico_mot.has_key('CoeffDilatThermREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["CoeffDilatThermREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_CoeffDilatThermREV','Aval_CoeffDilatThermREV')
+ else :
+ self.texteCuve+="0. 16.40E-6 "+"\n"
+ self.texteCuve+="20. 16.40E-6 "+"\n"
+ self.texteCuve+="200. 17.20E-6 "+"\n"
+ self.texteCuve+="350. 17.77E-6 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / limite d'elasticite (MPa)"+"\n"
+ if self.dico_mot.has_key('LimiteElasticiteREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["LimiteElasticiteREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_LimiteElasticiteREV','Aval_LimiteElasticiteREV')
+ else :
+ self.texteCuve+="0. 380. "+"\n"
+ self.texteCuve+="20. 370. "+"\n"
+ self.texteCuve+="100. 330. "+"\n"
+ self.texteCuve+="300. 270. "+"\n"
+ self.texteCuve+="LL"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureDeformationNulleREV')
+ self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermREV')
+ self.texteCuve += self.ecritVariable('CoefficientPoissonREV')
+
+ # Rubrique CARACTERISTIQUES DU METAL DE BASE
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU METAL DE BASE')
+
+ self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueMDB')
+
+ self.texteCuve+="# - si CHALEUR, fournir Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="# - si ENTHALPIE, fournir Temperature (°C) / enthalpie (J/kg)"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('ChaleurMDB_Fct_Temperature'):
+ self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.imprime(2,(self.dico_mot["ChaleurMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ChaleurMDB','Aval_ChaleurMDB')
+ elif self.dico_mot.has_key('EnthalpieMDB_Fct_Temperature'):
+ self.texteCuve+="# Temperature (°C) / enthalpie (J/kg)"+"\n"
+ self.imprime(2,(self.dico_mot["EnthalpieMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_EnthalpieMDB','Aval_EnthalpieMDB')
+ else :
+ self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="0. 34.88E+05 "+"\n"
+ self.texteCuve+="20. 34.88E+05 "+"\n"
+ self.texteCuve+="200. 40.87E+05 "+"\n"
+ self.texteCuve+="350. 46.02E+05 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / conductivite thermique (W/m/°C)"+"\n"
+ if self.dico_mot.has_key('ConductiviteMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ConductiviteMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ConductiviteMDB','Aval_ConductiviteMDB')
+ else :
+ self.texteCuve+="0. 37.7 "+"\n"
+ self.texteCuve+="20. 37.7 "+"\n"
+ self.texteCuve+="200. 40.5 "+"\n"
+ self.texteCuve+="350. 38.7 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / module d'Young (MPa)"+"\n"
+ if self.dico_mot.has_key('ModuleYoungMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ModuleYoungMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Aval_ModuleYoungMDB','Aval_ModuleYoungMDB')
+ else :
+ self.texteCuve+="0. 205000. "+"\n"
+ self.texteCuve+="20. 204000. "+"\n"
+ self.texteCuve+="200. 193000. "+"\n"
+ self.texteCuve+="350. 180000. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (°C) / coefficient de dilatation thermique (°C-1)"+"\n"
+ if self.dico_mot.has_key('CoeffDilatThermMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["CoeffDilatThermMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_CoeffDilatThermMDB','Aval_CoeffDilatThermMDB')
+ else :
+ self.texteCuve+="0. 11.22E-6 "+"\n"
+ self.texteCuve+="20. 11.22E-6 "+"\n"
+ self.texteCuve+="200. 12.47E-6 "+"\n"
+ self.texteCuve+="350. 13.08E-6 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureDeformationNulleMDB')
+ self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermMDB')
+ self.texteCuve += self.ecritVariable('CoefficientPoissonMDB')
+
+ # Rubrique CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE')
+ self.texteCuve += self.sousRubrique('Chargement mecanique : transitoire de pression','')
+
+ self.texteCuve+="# instant (s) / pression (MPa)"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_Pression'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_Pression"]))
+ self.texteCuve += self.amontAval('Amont_Pression','Aval_Pression')
+ else :
+ self.texteCuve+="0. 15.5 "+"\n"
+ self.texteCuve+="20. 0.1 "+"\n"
+ self.texteCuve+="200. 0.1 "+"\n"
+ self.texteCuve+="1000. 0.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve += self.sousRubrique('Chargement thermo-hydraulique','')
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_IMPO')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'FLUX_REP')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'ECHANGE')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'DEBIT')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_FLU')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'APRP')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeConditionLimiteThermique')
+
+ self.texteCuve+="# - si TEMP_IMPO, fournir Instant (s) / Temperature imposee (°C)"+"\n"
+ self.texteCuve+="# - si FLUX_REP, fournir Instant (s) / Flux de chaleur impose (W/m2)"+"\n"
+ self.texteCuve+="# - si ECHANGE, fournir Instant (s) / Temperature impose (°C)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+ self.texteCuve+="# - si DEBIT, fournir Instant (s) / Debit massique (kg/s)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Temperature d injection de securite (°C)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# puis Modele CREARE : (VM, VM_MESSAGE), (T0, T0_MESSAGE), (SE, SE_MESSAGE)"+"\n"
+ self.texteCuve+="# - si TEMP_FLU, fournir Instant (s) / Temperature du fluide (°C)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# - si APRP, fournir INSTANT1, INSTANT2, QACCU, QIS"+"\n"
+ self.texteCuve+="# puis TIS_MESSAGE"+"\n"
+ self.texteCuve+="# puis Instant (s) / Temperature du fluide (°C) tel que dans l'exemple ci-dessous"+"\n"
+ self.texteCuve+="# 0. 286."+"\n"
+ self.texteCuve+="# 12. 20. # 1er palier à T=TACCU"+"\n"
+ self.texteCuve+="# 20. 20. # idem que ci-dessus"+"\n"
+ self.texteCuve+="# 21. 18. # 2nd palier à T=T1 : sera remplace par nouvelle valeur calculee par fonction idoine"+"\n"
+ self.texteCuve+="# 45. 18. # idem que ci-dessus"+"\n"
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="# 46. 9999999999. # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ else :
+ self.texteCuve+="# 46. %INLET-TIS% # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ else :
+ self.texteCuve+="# 46. %INLET-TIS% # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ self.texteCuve+="# 1870. 9999999999. # idem que ci-dessus"+"\n"
+ self.texteCuve+="# 1871. 80."+"\n"
+ self.texteCuve+="# 3871. 80."+"\n"
+ self.texteCuve+="# puis Instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Definition de parametres pour le cas d un transitoire APRP"+"\n"
+ self.texteCuve += self.ecritVariable('Instant_1')
+ self.texteCuve += self.ecritVariable('Instant_2')
+ self.texteCuve += self.ecritVariable('DebitAccumule')
+ self.texteCuve += self.ecritVariable('DebitInjectionSecurite')
+ self.texteCuve += self.ecritVariable('TempInjectionSecurite_mess')
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / temperature imposee du fluide (°C)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_TemperatureImposeeFluide'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureImposeeFluide"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureImposeeFluide','Aval_TemperatureImposeeFluide')
+ else :
+ self.texteCuve+="0. 286. "+"\n"
+ self.texteCuve+="20. 20. "+"\n"
+ self.texteCuve+="200. 7. "+"\n"
+ self.texteCuve+="1000. 80. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / flux de chaleur impose (W/m2)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_FluxChaleur'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_FluxChaleur"]))
+ self.texteCuve += self.amontAval('Amont_FluxChaleur','Aval_FluxChaleur')
+ self.texteCuve+="#"+"\n"
+ else :
+ self.texteCuve+="0. -0. "+"\n"
+ self.texteCuve+="20. -366290. "+"\n"
+ self.texteCuve+="200. -121076. "+"\n"
+ self.texteCuve+="1000. -56372."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_DebitInjection'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_DebitInjection"]))
+ self.texteCuve += self.amontAval('Amont_DebitInjection','Aval_DebitInjection')
+ else :
+ self.texteCuve+="0. 4590. "+"\n"
+ self.texteCuve+="20. 4590. "+"\n"
+ self.texteCuve+="200. 340. "+"\n"
+ self.texteCuve+="1000. 31.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_CoefficientEchange'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_CoefficientEchange"]))
+ self.texteCuve += self.amontAval('Amont_CoefficientEchange','Aval_CoefficientEchange')
+ else :
+ self.texteCuve+="0. 138454. "+"\n"
+ self.texteCuve+="20. 19972. "+"\n"
+ self.texteCuve+="200. 2668. "+"\n"
+ self.texteCuve+="1000. 2668. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Debit massique (kg/s)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_DebitMassique'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_DebitMassique"]))
+ self.texteCuve += self.amontAval('Amont_DebitMassique','Aval_DebitMassique')
+ else :
+ self.texteCuve+="0. 18.4 "+"\n"
+ self.texteCuve+="20. 18.4 "+"\n"
+ self.texteCuve+="200. 31.1 "+"\n"
+ self.texteCuve+="1000. 31.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Temperature d injection de securite (°C)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_TemperatureInjection'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureInjection"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureInjection','Aval_TemperatureInjection')
+ else :
+ self.texteCuve+="0. 7.0 "+"\n"
+ self.texteCuve+="20. 7.0 "+"\n"
+ self.texteCuve+="200. 7.0 "+"\n"
+ self.texteCuve+="1000. 7.0 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Transitoire des coefficients d echange : modele VESTALE"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('DiametreHydraulique')
+ self.texteCuve += self.ecritVariable('DiametreHydraulique_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire')
+ self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle')
+ self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('CritereConvergenceRelative')
+ self.texteCuve += self.ecritVariable('CoefficientsVestale')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Transitoire de temperature fluide locale : modele CREARE"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('VolumeMelange_CREARE')
+ self.texteCuve += self.ecritVariable('VolumeMelange_CREARE_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE')
+ self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure')
+ self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure_mess')
+ else :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / temperature imposee du fluide (°C)"+"\n"
+ self.texteCuve+="0. 286. "+"\n"
+ self.texteCuve+="20. 20. "+"\n"
+ self.texteCuve+="200. 7. "+"\n"
+ self.texteCuve+="1000. 80. "+"\n"
+ self.texteCuve+="CC"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="############################################################################################"+"\n"
+
+
+ def imprime(self,nbdeColonnes,valeur):
+ self.liste=[]
+ self.transforme(valeur)
+ i=0
+ while i < len(self.liste):
+ for k in range(nbdeColonnes) :
+ self.texteCuve+=str(self.liste[i+k]) +" "
+ self.texteCuve+="\n"
+ i=i+k+1
+
+
+ def transforme(self,valeur):
+ for i in valeur :
+ if type(i) == tuple :
+ self.transforme(i)
+ else :
+ self.liste.append(i)
+
+
+
+
--- /dev/null
+code='CUVE2DG'
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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, sys
+# Les variables pouvant positionnees sont :
+# "rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata"
+print "import des prefs de CUVE2DG"
+
+
+# REPINI sert à localiser le fichier
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata = INSTALLDIR
+path_doc = os.path.join(rep_cata,'Doc')
+exec_acrobat = "/usr/bin/xpdf"
+
+
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR]
+
--- /dev/null
+# -*- coding: utf-8 -*-
+#@ MODIF properties Accas DATE 10/10/2002 AUTEUR gcbhhhh M.ADMINISTRATEUR
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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.
+# ======================================================================
+# IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+# DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "7.1.0"
+date = "23/04/2003"
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+"""
+ Ce module sert à lancer EFICAS configuré pour Openturns
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from InterfaceQT4 import eficas_go
+eficas_go.lance_eficas(code=prefs.code)
--- /dev/null
+# -*- coding: utf-8 -*-
+"""
+ Ce module sert à construire les distributions d'EFICAS pour Openturns
+ en fonction du tag CVS courant
+ Les distributions sont :
+ - un tar.gz pour UNIX ne contenant pas mxTextTools
+ L'utilisation de ce module est la suivante :
+ 1- Se mettre dans un répertoire de travail
+ 2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+ 3- Exporter les sources d'EficasV1 par la commande :
+ cvs export -r TAG -d Eficas_export EficasV1
+ ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1)
+ 5- Aller dans le répertoire Eficas_export
+ 6- Executer le script sdist.py
+ python sdist.py
+ Ce qui a pour effet de creer un repertoire dist contenant la distribution
+ et de la copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+nom_distrib="QTEficasOpenturns_V1_0"
+path_distrib=os.path.join("dist",nom_distrib)
+path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+ if os.path.isdir('dist'):shutil.rmtree('dist')
+
+ copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS'])
+
+ copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+ copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py','faqs.txt'])
+ copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
+ copyfiles('../Cuve2dg',os.path.join(path_distrib,'Cuve2dg'),['*.py','*.ini'])
+ copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+ copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+ copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
+ copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+ copyfiles('../Accas',os.path.join(path_distrib,'Noyau'),['*.py'])
+ copyfiles('../Accas',os.path.join(path_distrib,'Validation'),['*.py'])
+ # AIDE
+ copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+ copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+ copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
+ copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
+ # ______________________
+
+ copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+ copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
+ copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+ copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+ copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.png'])
+ copyfiles('../Editeur/Patrons/',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
+ copyfiles('../Editeur/Patrons/CUVE2DG',os.path.join(path_distrib,'Editeur','Patrons','CUVE2DG'),['*.com*'])
+
+ copyfiles('../Noyau',os.path.join(path_distrib,'Noyau'),['*.py'])
+ copyfiles('../Validation',os.path.join(path_distrib,'Validation'),['*.py'])
+
+
+ tarball= maketarball('dist',nom_distrib,nom_distrib)
+ try:
+ shutil.copy(tarball,dir_download)
+ except:
+ print "Repertoire de download inconnu : ",dir_download
+
+
+
+def make_dir(dir_cible):
+ if type(dir_cible) is not types.StringType:
+ raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+ head,tail=os.path.split(dir_cible)
+ tails=[tail]
+ while head and tail and not os.path.isdir(head):
+ head,tail=os.path.split(head)
+ tails.insert(0, tail)
+
+ for d in tails:
+ head = os.path.join(head, d)
+ if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+ if not os.path.isdir(dir_cible):make_dir(dir_cible)
+ for glob_files in listfiles:
+ for file in glob.glob(os.path.join(dir_origin,glob_files)):
+ shutil.copy(file,dir_cible)
+
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+ prev=os.getcwd()
+ print prev
+ os.chdir(dir_trav)
+ os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+ os.system("gzip -f9 "+nom_tar+".tar ")
+ os.chdir(prev)
+ return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+
+main()
+
--- /dev/null
+# Necessaire pour compatibilite avec Aster
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py PATTERN *.txt PATTERN *.gif PATTERN *.png
+ PATTERN CMakeLists.txt EXCLUDE
+ PATTERN Patrons EXCLUDE
+ PATTERN CVS EXCLUDE
+ )
+add_subdirectory ( Patrons )
+
+### Local Variables:
+### mode: cmake
+### End:
try :
self._object.remove(item.getObject())
# la liste peut être retournée vide !
- message = "Mot-clé " + item.getObject().nom + " supprimé"
+ message = "Mot-clef " + item.getObject().nom + " supprime"
self.appli.affiche_infos(message)
return 1
except:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Question : Doit-on installer le repertoire Patrons meme s'il est vide ?
+
+# Installation des fichiers d'aide : Open TURNS
+#if (WITH_OPENTURNS)
+# install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OPENTURNS_STUDY
+# DESTINATION ${CMAKE_INSTALL_PREFIX}/Editeur/Patrons
+# FILES_MATCHING PATTERN *.comm
+# PATTERN CVS EXCLUDE
+# )
+#endif (WITH_OPENTURNS)
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+ install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ASTER
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Editeur/Patrons
+ FILES_MATCHING PATTERN *.comm
+ PATTERN CVS EXCLUDE
+ )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+from string import split,strip,lowercase,uppercase
+import re,string,os
+
+
+#
+__Id__="$Id: analyse_catalogue_initial.py,v 1.1.2.2 2010-03-17 15:49:19 pnoyret Exp $"
+__version__="$Name: V2_0 $"
+#
+
+
+class Catalogue_initial:
+ def __init__(self,fichier):
+ self.liste_commandes=[]
+ self.lignes=[]
+ self.fichier=fichier
+ self.ouvrir_fichier()
+ self.constr_list_txt_cmd()
+
+ def ouvrir_fichier(self):
+ try :
+ f=open(self.fichier,'r')
+ self.lignes=f.readlines()
+ f.close()
+ except :
+ print "Impossible d'ouvrir le fichier :",self.fichier
+
+ def constr_list_txt_cmd(self):
+ pattern = '^# Ordre Catalogue '
+ for i in self.lignes :
+ if (re.search(pattern,i)):
+ i=i.replace('# Ordre Catalogue ','')
+ i=i.replace('\n','')
+ self.liste_commandes.append(i)
+
+
+def analyse_catalogue(nom_cata):
+ cata = Catalogue_initial(nom_cata)
+ return cata.liste_commandes
+
+
+if __name__ == "__main__" :
+ monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
+ analyse_catalogue(monCata)
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+class CatalogDescription:
+
+ def __init__(self, identifier, cata_file_path, file_format = "python",
+ default = False, code = None, user_name = None,
+ selectable = True, file_format_in = "python"):
+ """
+ This class can be used to describe an Eficas catalog.
+
+ :type identifier: string
+ :param identifier: unique identifier for the catalog
+
+ :type cata_file_path: string
+ :param cata_file_path: path of the file containing the catalog itself
+
+ :type file_format: string
+ :param file_format: format of the files generated when using this
+ catalog
+
+ :type default: boolean
+ :param default: indicate if this catalog is the default one (appear on
+ the top of the catalogs list)
+
+ :type code: string
+ :param code: Deprecated. Used to indicate the code associated to this
+ catalog
+
+ :type user_name: string
+ :param user_name: name of the catalog as it will appear in the list
+
+ :type selectable: boolean
+ :param selectable: indicate if this catalog appears in the list.
+ Setting this parameter to False is useful to keep
+ old catalogs to edit existing files but to forbid
+ to use them to create new files.
+
+ """
+ self.identifier = identifier
+ self.cata_file_path = cata_file_path
+ self.file_format = file_format
+ self.default = default
+ self.code = code
+ if user_name is None:
+ self.user_name = identifier
+ else:
+ self.user_name = user_name
+ self.selectable = selectable
+ self.file_format_in = file_format_in
+
+ @staticmethod
+ def create_from_tuple(cata_tuple):
+ #print "Warning: Describing a catalog with a tuple is deprecated. " \
+ # "Please create a CatalogDescription instance directly."
+ desc = CatalogDescription(code = cata_tuple[0],
+ identifier = cata_tuple[1],
+ cata_file_path = cata_tuple[2],
+ file_format = cata_tuple[3])
+ if len(cata_tuple) == 5 :
+ if cata_tuple[4] == "defaut":
+ desc.default = True
+ else:
+ desc = CatalogDescription(code = cata_tuple[0],
+ identifier = cata_tuple[1],
+ cata_file_path = cata_tuple[2],
+ file_format = cata_tuple[3],
+ file_format_in = cata_tuple[4])
+ return desc
repertoire=reper+"/../InterfaceTK"
package="InterfaceTK"
else :
- repertoire=reper+"/../InterfaceQT"
- package="InterfaceQT"
+ repertoire=reper+"/../InterfaceQT4"
+ package="InterfaceQT4"
+ #repertoire=reper+"/../InterfaceQT"
+ #package="InterfaceQT"
listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
for fichier in listfich:
m= os.path.basename(fichier)[:-3]
import os
import prefs
+name='prefs_'+prefs.code
+prefs_Code=__import__(name)
-INSTALLDIR=prefs.INSTALLDIR
+INSTALLDIR=prefs_Code.INSTALLDIR
sys.path.append(INSTALLDIR)
-sys.path.append(INSTALLDIR+"/Ui")
-sys.path.append(INSTALLDIR+"/InterfaceQT")
+sys.path.append(INSTALLDIR+"/UiQT4")
+sys.path.append(INSTALLDIR+"/InterfaceQT4")
+#sys.path.append(INSTALLDIR+"/Ui")
+#sys.path.append(INSTALLDIR+"/InterfaceQT")
sys.path.append(INSTALLDIR+"/Editeur")
# Ce chemin permet d'importer les modules Noyau et Validation
# représentant le code utilisé (si fourni)
# Ensuite on utilise les packages de l'intallation
-if hasattr(prefs,'CODE_PATH'):
- if prefs.CODE_PATH:
- sys.path[:0]=[prefs.CODE_PATH]
+if hasattr(prefs_Code,'CODE_PATH'):
+ if prefs_Code.CODE_PATH:
+ sys.path[:0]=[prefs_Code.CODE_PATH]
import Noyau,Validation
del sys.path[0]
-sys.path[:0]=[prefs.INSTALLDIR]
+sys.path[:0]=[prefs_Code.INSTALLDIR]
# Ensuite on surcharge eventuellement
-#if hasattr(prefs,'CODE_PATH_SURCHARGE'):
-# if prefs.CODE_PATH_SURCHARGE:
-# sys.path.insert(0,prefs.CODE_PATH_SURCHARGE)
+#if hasattr(prefs_Code,'CODE_PATH_SURCHARGE'):
+# if prefs_Code.CODE_PATH_SURCHARGE:
+# sys.path.insert(0,prefs_Code.CODE_PATH_SURCHARGE)
import Accas
sous_menus={"ASTER" : {0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}},
"OPENTURNS_STUDY" : {0:{"Anne":"Std.comm"}},
"OPENTURNS_WRAPPER" : {0:{"Anne":"wrapper_exemple.comm"}},
- "HOMARD" : {},
- "CUVE2DG" : {},
- 'SEP' : {}
}
class listePatrons :
def __init__(self,code = "ASTER"):
repIni=os.path.dirname(os.path.abspath(__file__))
self.rep_patrons=repIni+"/Patrons/"+code
- self.sous_menu=sous_menus[code]
+ self.sous_menu={}
+ if code in sous_menus.keys() :
+ self.sous_menu=sous_menus[code]
self.code=code
self.liste={}
self.traite_liste()
def traite_liste(self):
+ if not (self.code in sous_menus.keys()) : return
if not (os.path.exists(self.rep_patrons)) : return
for file in os.listdir(self.rep_patrons):
for i in range(len(self.sous_menu)):
# -*- coding: utf-8 -*-
import os
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import basestyle
from basestyle import STYLE,style
-inistylefile=os.path.join(prefs.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.REPINI,"style.py")
if os.path.isfile(inistylefile):
execfile(inistylefile)
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py
+ PATTERN CVS EXCLUDE
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
# -*- coding: utf-8 -*-
from __future__ import division
import math
-import Numeric
import types
+try:
+ import Numeric
+except:
+ import numpy
+ Numeric = numpy
+
def mkf(value):
if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")) :
return Constant(value)
Remplace la valeur de self par new_valeur interprétée
"""
self.valeur = self.interprete_valeur(new_valeur)
+ self.parent.update_concept_after_etape(self,self)
self.init_modif()
def set_nom(self,new_nom):
paramètres du JDC
"""
self.jdc.delete_param(self)
+ self.parent.delete_concept(self)
def update_context(self,d):
"""
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py
+ PATTERN CVS EXCLUDE
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+#@ MODIF V_AU_MOINS_UN Validation DATE 14/09/2004 AUTEUR PNOYRET
+# -*- 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 types
+
+
+class I_AVANT:
+ """
+ La règle I_AVANT vérifie que l'on trouve l ordre des mots-clés
+ de la règle parmi les arguments d'un JDC.
+
+ Ces arguments sont transmis à la règle pour validation sous la forme
+ d'une liste de noms de mots-clés ou d'un dictionnaire dont
+ les clés sont des noms de mots-clés.
+ """
+
+ def __init__(self,*args):
+ if len(args) > 2 :
+ print "Erreur à la création de la règle A_CLASSER(",args,")"
+ return
+ if type(args[0]) == types.TupleType:
+ self.listeAvant=args[0]
+ else :
+ self.listeAvant=(args[0],)
+ if type(args[1]) == types.TupleType:
+ self.listeApres=args[1]
+ else :
+ self.listeApres=(args[1],)
+
+ def verif(self,args):
+ """
+ args peut etre un dictionnaire ou une liste. Les éléments de args
+ sont soit les éléments de la liste soit les clés du dictionnaire.
+ """
+ # on compte le nombre de mots cles presents
+ text =''
+ boolListeAvant=0
+ boolListeApres=0
+ boolOK=1
+ for nom in args:
+ if nom in self.listeAvant :
+ boolListeAvant=1
+ if boolListeApres == 1 :
+ boolOK = 0
+ if nom in self.listeApres :
+ boolListeApres=1
+ if boolListeAvant == 0 and boolListeApres == 1 : boolOK = 0
+ return text,boolOK
+
+
+ def gettext(self):
+ text = "Regle de classement "' :\n'
+ for mc in self.listeAvant :
+ text = text + mc + ', '
+ text = text + " \nAvant : \n"
+ for mc in self.listeApres :
+ text = text + mc + ','
+ return text
+
# Objet re pour controler les identificateurs Python
concept_re=re.compile(r'[a-zA-Z_]\w*$')
-# import rajoutés suite à l'ajout de Build_sd --> à résorber
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
import traceback
import Noyau
from Noyau import N_Exception
from Noyau.N_Exception import AsException
import Validation
-# fin import à résorber
+# fin import à résorber
# Modules EFICAS
import I_MCCOMPO
else:
if self.sd:sdname=self.sd.get_name()
if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
- # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
+ # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
return ''
return sdname
def init_modif(self):
"""
- Met l'état de l'étape à : modifié
+ Met l'état de l'étape à : modifié
Propage la modification au parent
"""
- # init_modif doit etre appelé avant de réaliser une modification
- # La validité devra etre recalculée apres cette modification
- # mais dans l'appel à fin_modif pour préserver l'état modified
+ # init_modif doit etre appelé avant de réaliser une modification
+ # La validité devra etre recalculée apres cette modification
+ # mais dans l'appel à fin_modif pour préserver l'état modified
# de tous les objets entre temps
#print "init_modif",self,self.parent
self.state = 'modified'
def fin_modif(self):
"""
- Méthode appelée une fois qu'une modification a été faite afin de
- déclencher d'éventuels traitements post-modification
+ Méthode appelée une fois qu'une modification a été faite afin de
+ déclencher d'éventuels traitements post-modification
ex : INCLUDE et POURSUITE
+ Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien)
"""
- #print "fin_modif",self,self.parent
- if self.nom == "DETRUIRE":
- #Il n'est pas conseillé de mettre des traitements dans fin_modif. Ceci est une
- # exception qu'il faut supprimer à terme.
- #une commande DETRUIRE a été modifiée. Il faut verifier les commandes
- #suivantes
- #ATTENTION: aux eventuelles recursions
- self.parent.control_context_apres(self)
- pass
-
CONNECTOR.Emit(self,"valid")
if self.parent:
self.parent.fin_modif()
def nomme_sd(self,nom) :
"""
- Cette méthode a pour fonction de donner un nom (nom) au concept
- produit par l'étape (self).
- - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
- - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes
+ Cette méthode a pour fonction de donner un nom (nom) au concept
+ produit par l'étape (self).
+ - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
+ - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes
Les valeurs de retour sont :
- - 0 si le nommage n'a pas pu etre mené à son terme,
+ - 0 si le nommage n'a pas pu etre mené à son terme,
- 1 dans le cas contraire
"""
# Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
return 0,"Un nom de concept doit etre un identificateur Python"
if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
- return 0,"Nom de concept trop long (maxi 8 caractères)"
+ return 0,"Nom de concept trop long (maxi 8 caractères)"
self.init_modif()
#
# On verifie d'abord si les mots cles sont valides
#
- if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
+ if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
#
- # Cas particulier des opérateurs obligatoirement réentrants
+ # Cas particulier des opérateurs obligatoirement réentrants
#
if self.definition.reentrant == 'o':
self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self)
self.fin_modif()
return 1,"Concept existant"
else:
- return 0,"Opérateur réentrant mais concept non existant"
+ return 0,"Opérateur réentrant mais concept non existant"
#
- # Cas particulier des opérateurs facultativement réentrants
+ # Cas particulier des opérateurs facultativement réentrants
#
old_reuse=None
if self.definition.reentrant == 'f' :
sd = self.jdc.get_sd_avant_etape(nom,self)
if sd != None :
- # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
+ # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
if isinstance(sd,self.get_type_produit()) :
self.sd = self.reuse = sd
self.sdnom = sd.nom
self.fin_modif()
- return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+ return 1,"Opérateur facultativement réentrant et concept existant trouvé"
else:
- return 0,"Concept déjà existant et de mauvais type"
+ return 0,"Concept déjà existant et de mauvais type"
else :
# il faut enlever le lien vers une SD existante car si on passe ici
- # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
- # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
+ # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
+ # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
if self.reuse :
old_reuse=self.reuse
self.sd = self.reuse = self.sdnom = None
#
- # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
- # mais est utilisé en mode non réentrant
+ # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
+ # mais est utilisé en mode non réentrant
#
if self.sd == None :
#Pas de concept produit preexistant
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
# Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
- # On peut donc créer le concept retourné.
- # Il est créé sans nom mais enregistré dans la liste des concepts existants
+ # On peut donc créer le concept retourné.
+ # Il est créé sans nom mais enregistré dans la liste des concepts existants
try:
self.get_sd_prod()
# Renommage du concept : Il suffit de changer son attribut nom pour le nommer
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
except:
return 0,"Nommage impossible"+str(sys.exc_info()[1])
else :
#Un concept produit preexiste
old_nom=self.sd.nom
if string.find(old_nom,'sansnom') :
- # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
- # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
- # on peut donc le nommer sans test préalable
+ # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
+ # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
+ # on peut donc le nommer sans test préalable
if self.parent.get_sd_autour_etape(nom,self):
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
if self.isvalid() :
# Normalement l appel de isvalid a mis a jour le concept produit (son type)
- # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
- # deja attribué
+ # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
+ # deja attribué
if self.parent.get_sd_autour_etape(nom,self):
return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
else:
self.sdnom=nom
self.parent.update_concept_after_etape(self,self.sd)
self.fin_modif()
- return 1,"Nommage du concept effectué"
+ return 1,"Nommage du concept effectué"
else:
# Normalement on ne devrait pas passer ici
return 0,'Normalement on ne devrait pas passer ici'
"""
Rend l'etape courante active.
Il faut ajouter la sd si elle existe au contexte global du JDC
- et à la liste des sd
+ et à la liste des sd
"""
if self.actif:return
self.actif = 1
"""
Fonction:
Lors d'une destruction d'etape, detruit tous les concepts produits
- Un opérateur n a qu un concept produit
+ Un opérateur n a qu un concept produit
Une procedure n'en a aucun
- Une macro en a en général plus d'un
+ Une macro en a en général plus d'un
"""
#print "supprime_sdprods",self
if self.reuse is self.sd :return
- # l'étape n'est pas réentrante
- # le concept retourné par l'étape est à supprimer car il était
- # créé par l'étape
+ # l'étape n'est pas réentrante
+ # le concept retourné par l'étape est à supprimer car il était
+ # créé par l'étape
if self.sd != None :
self.parent.del_sdprod(self.sd)
self.parent.delete_concept(self.sd)
Fonction :
Mettre a jour les mots cles de l etape et eventuellement
le concept produit si reuse
- suite à la disparition du concept sd
+ suite à la disparition du concept sd
Seuls les mots cles simples MCSIMP font un traitement autre
que de transmettre aux fils
"""
def get_noms_sd_oper_reentrant(self):
"""
- Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
+ Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
qui sont du type que peut retourner cette commande
"""
liste_sd = self.get_sd_utilisees()
def get_genealogie(self):
"""
Retourne la liste des noms des ascendants de l'objet self
- en s'arretant à la première ETAPE rencontrée
+ en s'arretant à la première ETAPE rencontrée
"""
return [self.nom]
def verif_existence_sd(self):
"""
- Vérifie que les structures de données utilisées dans self existent bien dans le contexte
- avant étape, sinon enlève la référence à ces concepts
+ Vérifie que les structures de données utilisées dans self existent bien dans le contexte
+ avant étape, sinon enlève la référence à ces concepts
"""
#print "verif_existence_sd",self.sd
for motcle in self.mc_liste :
def update_mc_global(self):
"""
- Met a jour les mots cles globaux enregistrés dans l'étape
+ Met a jour les mots cles globaux enregistrés dans l'étape
et dans le jdc parent.
Une etape ne peut pas etre globale. Elle se contente de passer
- la requete a ses fils apres avoir reinitialisé le dictionnaire
+ la requete a ses fils apres avoir reinitialisé le dictionnaire
des mots cles globaux.
"""
self.mc_globaux={}
def get_objet_commentarise(self,format):
"""
- Cette méthode retourne un objet commande commentarisée
+ Cette méthode retourne un objet commande commentarisée
representant la commande self
"""
import generator
g=generator.plugins[format]()
texte_commande = g.gener(self,format='beautifie')
- # Il faut enlever la première ligne vide de texte_commande que
+ # Il faut enlever la première ligne vide de texte_commande que
# rajoute le generator
#rebut,texte_commande = string.split(texte_commande,'\n',1)
- # on construit l'objet COMMANDE_COMM repésentatif de self mais non
- # enregistré dans le jdc (pas ajouté dans jdc.etapes)
+ # on construit l'objet COMMANDE_COMM repésentatif de self mais non
+ # enregistré dans le jdc (pas ajouté dans jdc.etapes)
parent=self.parent
pos=self.parent.etapes.index(self)
commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
return commande_comment
+ def modified(self):
+ """Le contenu de l'etape (mots cles, ...) a ete modifie"""
+ if self.nom=="DETRUIRE":
+ self.parent.control_context_apres(self)
+
#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
def Build_sd(self,nom):
except AsException,e:
# Une erreur s'est produite lors de la construction du concept
# Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilités :
- # 1. on annule la sd associée à self
+ # Si on poursuit, on a le choix entre deux possibilités :
+ # 1. on annule la sd associée à self
# 2. on la conserve mais il faut la retourner
# En plus il faut rendre coherents sdnom et sd.nom
self.sd=None
return self.sd
-#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
+#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
def make_register(self):
"""
- Initialise les attributs jdc, id, niveau et réalise les
- enregistrements nécessaires
+ Initialise les attributs jdc, id, niveau et réalise les
+ enregistrements nécessaires
Pour EFICAS, on tient compte des niveaux
Surcharge la methode make_register du package Noyau
"""
self.id= self.parent.register(self)
self.UserError=self.jdc.UserError
if self.definition.niveau :
- # La définition est dans un niveau. En plus on
+ # La définition est dans un niveau. En plus on
# l'enregistre dans le niveau
self.nom_niveau_definition = self.definition.niveau.nom
self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
self.niveau.register(self)
else:
- # La définition est au niveau global
+ # La définition est au niveau global
self.nom_niveau_definition = 'JDC'
self.niveau=self.parent
else:
def report(self):
cr= Validation.V_ETAPE.ETAPE.report(self)
- #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
+ #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
self.isvalid()
return cr
l.sort()
return l
+ def get_variables(self,etape):
+ etapeStop=etape
+ l=[]
+ for etapeTraitee in self.etapes :
+ if etapeTraitee==etapeStop:
+ break
+ if etapeTraitee.nom == 'VARIABLE' :
+ variable=etapeTraitee.get_mocle('ModelVariable')
+ if variable != None :
+ l.append(variable.nom)
+ return l
+
+ def set_Copules_recalcule_etat(self):
+ for etapeTraitee in self.etapes :
+ if etapeTraitee.nom == 'CORRELATION' :
+ Matrix=etapeTraitee.get_child('Matrix')
+ if Matrix !=None :
+ Correlation=etapeTraitee.get_child('CorrelationMatrix')
+ if Correlation !=None :
+ Correlation.state='arecalculer'
+ Matrix.state='arecalculer'
+
+ def recalcule_etat_correlation(self):
+ for etapeTraitee in self.etapes :
+ if etapeTraitee.nom == 'CORRELATION' :
+ Matrix=etapeTraitee.get_child('Matrix')
+ if Matrix !=None :
+ Matrix.state='arecalculer'
+ Correlation=Matrix.get_child('CorrelationMatrix')
+ if Correlation !=None :
+ Correlation.state='arecalculer'
+ Correlation.isvalid()
+ Matrix.isvalid()
+ etapeTraitee.state='arecalculer'
+ if etapeTraitee.state=='arecalculer':
+ etapeTraitee.isvalid()
+
+
def get_sd_avant_du_bon_type_pour_type_de_base(self,etape,type):
"""
Retourne la liste des concepts avant etape d'1 type de base acceptable
nb=nb+len(niv.etapes)
return nb
- def send_message(self,message):
- if self.appli:
- self.appli.send_message(message)
-
def init_modif(self):
"""
Méthode appelée au moment où une modification va être faite afin de
Seuls les mots cles simples MCSIMP font un traitement autre
que de transmettre aux fils
"""
- #print "delete_concept",self,sd
for etape in self.etapes :
etape.delete_concept(sd)
+ #PN PN PN pour les matrices ????
+ #self.get_variables_avant(etape)
def replace_concept_after_etape(self,etape,old_sd,sd):
"""
Tente de changer le fichier include. Le precedent include est conservé
dans old_xxx
"""
- #print "change_fichier_init",new_fic
+ print "change_fichier_init",new_fic
if not hasattr(self,'fichier_ini'):
self.fichier_ini=None
self.fichier_text=None
self.JdC_aux=Extensions.jdc_include.JdC_include
self.old_fic = self.fichier_ini
+ print self.old_fic
self.old_text = self.fichier_text
+ print self.old_text
self.old_err = self.fichier_err
self.old_context=self.contexte_fichier_init
+ print self.old_context
self.old_units=self.recorded_units
self.old_etapes=self.etapes
+ print self.old_etapes
self.old_jdc_aux=self.jdc_aux
self.fichier_ini = new_fic
def make_include2(self,fichier=None):
# gestion de l unicite SVP
unite=999
+
if hasattr(self,'fichier_ini') : return
- #print "je passe le if"
+ reevalue=0
+ if hasattr(self,'old_context_fichier_init' ):
+ reevalue=1
+ for concept in self.old_context_fichier_init.values():
+ self.jdc.delete_concept(concept)
+
if fichier == None :
fichier=str(self.jdc.appli.get_file_variable())
- #print fichier
if fichier == str("") :
self.fichier_ini="badfile"
self.fichier_text=""
- self.fichier_err="Le fichier INCLUDE n est pas defini"
+ self.fichier_err="Le fichier n est pas defini"
self.parent.record_unit(999,self)
try :
MCFils=self.get_child('FileName')
pass
raise Exception(self.fichier_err)
- # On memorise le fichier retourne
self.fichier_ini = fichier
self.fichier_text = ""
self.contexte_fichier_init={}
self.fichier_unite=999
self.fichier_err=None
+ nbVariableOut=0
try :
from openturns import WrapperFile
monWrapper=WrapperFile(fichier)
nom=maVariableListe[i].id_
type=maVariableListe[i].type_
if type :
- ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
+ #ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
+ ligneTexte=""
+ nbVariableOut=nbVariableOut+1
else :
- ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
+ ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
self.fichier_text = self.fichier_text + ligneTexte
except:
self.make_incl2_except()
raise
+ if nbVariableOut != 1 :
+ print nbVariableOut ,"nbVariableOut"
+ self.make_incl2_except(mess="le fichier doit contenir une unique variable de sortie")
+ raise
+
try:
import Extensions.jdc_include
+ self.JdC_aux=Extensions.jdc_include.JdC_include
except:
traceback.print_exc()
self.make_incl2_except()
raise
- self.JdC_aux=Extensions.jdc_include.JdC_include
try:
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+ self.old_context_fichier_init=self.contexte_fichier_init
self.parent.record_unit(unite,self)
try :
MCFils=self.get_child('FileName')
pass
except:
self.make_incl2_except()
- raise
- def make_incl2_except(self):
- #print "make_incl2_except"
+ # recalcul validite pour la matrice eventuelle
+ if reevalue :
+ for e in self.jdc.etapes:
+ if e.nom == "VARIABLE" :
+ e.state="modified"
+ try :
+ mc=e.get_child('ModelVariable')
+ mc.state="modified"
+ except :
+ pass
+ if e.nom == "CORRELATION" :
+ e.state="modified"
+ try :
+ mc=e.get_child('Matrix')
+ mc.state="modified"
+ mcFeuille=mc.get_child('CorrelationMatrix')
+ mcFeuille.state="modified"
+ except :
+ pass
+ e.isvalid()
+
+ def make_incl2_except(self,mess=None):
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
if self.jdc.appli:
- self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+ if mess == None :
+ self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
message="Le contenu de ce fichier ne sera pas pris en compte\n"+string.join(l)
)
- self.parent.record_unit(unite,self)
+ else :
+ self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+ message=mess )
+ #self.parent.record_unit(unite,self)
self.g_context={}
self.etapes=[]
self.jdc_aux=None
objet.delete_mc_global()
objet.update_condition_bloc()
objet.supprime()
+ self.etape.modified()
self.fin_modif()
return 1
# On verifie que l'ajout d'objet est autorise
if self.ispermis(objet) == 0:
- self.jdc.send_message("L'objet %s ne peut être un fils de %s" %(objet.nom,
+ self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut être un fils de %s" %(objet.nom,
self.nom))
self.fin_modif()
return 0
# on cree une liste d'objets. Dans le cas contraire,
# on emet un message d'erreur.
if not old_obj.isrepetable():
- self.jdc.send_message("L'objet %s ne peut pas être répété" %objet.nom)
+ self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut pas être répété" %objet.nom)
self.fin_modif()
return 0
else:
CONNECTOR.Emit(self,"supp",obj)
self.update_condition_bloc()
obj.supprime()
+ self.etape.modified()
self.fin_modif()
return 1
raise "traitement non prevu"
if not self.ajout_possible():
- self.jdc.send_message("L'objet %s ne peut pas être ajouté" % obj.nom)
+ self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut pas être ajouté" % obj.nom)
return None
if self.nom != obj.nom:
import Validation
import CONNECTOR
-# Attention : les classes ASSD,.... peuvent etre surchargées
-# dans le package Accas. Il faut donc prendre des précautions si
+# Attention : les classes ASSD,.... peuvent etre surchargées
+# dans le package Accas. Il faut donc prendre des précautions si
# on utilise les classes du Noyau pour faire des tests (isxxxx, ...)
-# Si on veut créer des objets comme des CO avec les classes du noyau
+# Si on veut créer des objets comme des CO avec les classes du noyau
# ils n'auront pas les conportements des autres packages (pb!!!)
-# Il vaut mieux les importer d'Accas mais problème d'import circulaire,
-# on ne peut pas les importer au début.
-# On fait donc un import local quand c'est nécessaire (peut occasionner
+# Il vaut mieux les importer d'Accas mais problème d'import circulaire,
+# on ne peut pas les importer au début.
+# On fait donc un import local quand c'est nécessaire (peut occasionner
# des pbs de prformance).
from Noyau.N_ASSD import ASSD,assd
from Noyau.N_GEOM import GEOM,geom
class MCSIMP(I_OBJECT.OBJECT):
+ def isvalid(self,cr='non'):
+ if self.state == 'unchanged':
+ return self.valid
+ for type_permis in self.definition.type:
+ if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
+ self.monType=type_permis
+ return self.valideMatrice(cr=cr)
+ return Validation.V_MCSIMP.MCSIMP.isvalid(self,cr=cr)
+
def GetNomConcept(self):
p=self
while p.parent :
def GetText(self):
"""
- Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
- pointé par self
+ Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+ pointé par self
"""
if self.valeur == None :
return None
elif type(self.valeur) == types.FloatType :
- # Traitement d'un flottant isolé
+ # Traitement d'un flottant isolé
txt = str(self.valeur)
clefobj=self.GetNomConcept()
- if self.jdc.appli.dict_reels.has_key(clefobj):
- if self.jdc.appli.dict_reels[clefobj].has_key(self.valeur):
- txt=self.jdc.appli.dict_reels[clefobj][self.valeur]
+ if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+ if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(self.valeur):
+ txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur]
elif type(self.valeur) in (types.ListType,types.TupleType) :
# Traitement des listes
txt='('
for val in self.valeur:
if type(val) == types.FloatType :
clefobj=self.GetNomConcept()
- if self.jdc.appli.dict_reels.has_key(clefobj):
- if self.jdc.appli.dict_reels[clefobj].has_key(val):
- txt=txt + sep +self.jdc.appli.dict_reels[clefobj][val]
+ if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+ if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(val):
+ txt=txt + sep +self.jdc.appli.appliEficas.dict_reels[clefobj][val]
else :
txt=txt + sep + str(val)
else :
def getval(self):
"""
- Retourne une chaîne de caractère représentant la valeur de self
+ Retourne une chaîne de caractère représentant la valeur de self
"""
val=self.valeur
if type(val) == types.FloatType :
clefobj=self.GetNomConcept()
- if self.jdc.appli.dict_reels.has_key(clefobj):
- if self.jdc.appli.dict_reels[clefobj].has_key(val):
- return self.jdc.appli.dict_reels[clefobj][val]
+ if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+ if self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj].has_key(val):
+ return self.jdc.appli.appliEficas.dict_reels[clefobj][val]
if type(val) != types.TupleType :
try:
return val.get_name()
def wait_co(self):
"""
- Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD
+ Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD
qui n'existe pas encore (type CO()), 0 sinon
"""
for typ in self.definition.type:
def wait_assd(self):
"""
- Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD
- ou dérivé, 0 sinon
+ Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD
+ ou dérivé, 0 sinon
"""
for typ in self.definition.type:
if type(typ) == types.ClassType or isinstance(typ,type):
def wait_assd_or_geom(self):
"""
- Retourne 1 si le mot-clé simple attend un objet de type
+ Retourne 1 si le mot-clé simple attend un objet de type
assd, ASSD, geom ou GEOM
Retourne 0 dans le cas contraire
"""
def wait_geom(self):
"""
- Retourne 1 si le mot-clé simple attend un objet de type GEOM
+ Retourne 1 si le mot-clé simple attend un objet de type GEOM
Retourne 0 dans le cas contraire
"""
for typ in self.definition.type:
def wait_TXM(self):
"""
- Retourne 1 si le mot-clé simple attend un objet de type TXM
+ Retourne 1 si le mot-clé simple attend un objet de type TXM
Retourne 0 dans le cas contraire
"""
for typ in self.definition.type:
lval=listProto.adapt(valeur)
if lval is None:
valid=0
- mess="None n'est pas une valeur autorisée"
+ mess="None n'est pas une valeur autorisée"
else:
try:
for val in lval:
for val in new_valeur:
self.typeProto.adapt(val)
self.intoProto.adapt(val)
- #on ne verifie pas la cardinalité
+ #on ne verifie pas la cardinalité
if self.definition.validators:
validite=self.definition.validators.valide_liste_partielle(new_valeur)
except ValError,e:
self.valeur = new_valeur
self.val = new_valeur
self.update_condition_bloc()
+ self.etape.modified()
self.fin_modif()
return 1
def eval_valeur(self,new_valeur):
"""
- Essaie d'évaluer new_valeur comme une SD, une déclaration Python
- ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
+ Essaie d'évaluer new_valeur comme une SD, une déclaration Python
+ ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
"""
sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
#sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None)
def update_concept(self,sd):
if type(self.valeur) in (types.ListType,types.TupleType) :
- if sd in self.valeur:self.fin_modif()
+ if sd in self.valeur:
+ self.init_modif()
+ self.fin_modif()
else:
- if sd == self.valeur:self.fin_modif()
+ if sd == self.valeur:
+ self.init_modif()
+ self.fin_modif()
def delete_concept(self,sd):
"""
Inputs :
- sd=concept detruit
Fonction :
- Met a jour la valeur du mot cle simple suite à la disparition
+ Met a jour la valeur du mot cle simple suite à la disparition
du concept sd
+ Attention aux matrices
"""
- #print "delete_concept",sd
if type(self.valeur) == types.TupleType :
if sd in self.valeur:
self.init_modif()
self.valeur=None
self.val=None
self.fin_modif()
+ # Glut Horrible pour les matrices ???
+ if sd.__class__.__name__== "variable":
+ for type_permis in self.definition.type:
+ if type(type_permis) == types.InstanceType:
+ if type_permis.__class__.__name__ == 'Matrice' :
+ self.state="changed"
+ self.isvalid()
+
def replace_concept(self,old_sd,sd):
"""
Inputs :
- - old_sd=concept remplacé
+ - old_sd=concept remplacé
- sd=nouveau concept
Fonction :
Met a jour la valeur du mot cle simple suite au remplacement
def set_valeur_co(self,nom_co):
"""
- Affecte à self l'objet de type CO et de nom nom_co
+ Affecte à self l'objet de type CO et de nom nom_co
"""
#print "set_valeur_co",nom_co
step=self.etape.parent
if nom_co == None or nom_co == '':
new_objet=None
else:
- # Avant de créer un concept il faut s'assurer du contexte : step
+ # Avant de créer un concept il faut s'assurer du contexte : step
# courant
sd= step.get_sd_autour_etape(nom_co,self.etape,avec='oui')
if sd:
- # Si un concept du meme nom existe deja dans la portée de l'étape
- # on ne crée pas le concept
+ # Si un concept du meme nom existe deja dans la portée de l'étape
+ # on ne crée pas le concept
return 0,"un concept de meme nom existe deja"
- # Il n'existe pas de concept de meme nom. On peut donc le créer
- # Il faut néanmoins que la méthode NommerSdProd de step gère les
+ # Il n'existe pas de concept de meme nom. On peut donc le créer
+ # Il faut néanmoins que la méthode NommerSdProd de step gère les
# contextes en mode editeur
- # Normalement la méthode du Noyau doit etre surchargée
- # On déclare l'étape du mot clé comme etape courante pour NommerSdprod
+ # Normalement la méthode du Noyau doit etre surchargée
+ # On déclare l'étape du mot clé comme etape courante pour NommerSdprod
cs= CONTEXT.get_current_step()
CONTEXT.unset_current_step()
CONTEXT.set_current_step(step)
self.fin_modif()
step.reset_context()
#print "set_valeur_co",new_objet
- return 1,"Concept créé"
+ return 1,"Concept créé"
def verif_existence_sd(self):
"""
- Vérifie que les structures de données utilisées dans self existent bien dans le contexte
- avant étape, sinon enlève la référence à ces concepts
+ Vérifie que les structures de données utilisées dans self existent bien dans le contexte
+ avant étape, sinon enlève la référence à ces concepts
"""
#print "verif_existence_sd"
# Attention : possible probleme avec include
def get_type(self):
"""
- Retourne le type attendu par le mot-clé simple
+ Retourne le type attendu par le mot-clé simple
"""
return self.definition.type
def update_mc_global(self):
"""
- Met a jour les mots cles globaux enregistrés dans l'étape parente
+ Met a jour les mots cles globaux enregistrés dans l'étape parente
et dans le jdc parent.
Un mot cle simple peut etre global.
"""
return 0
def valide_item(self,item):
- """Valide un item isolé. Cet item est candidat à l'ajout à la liste existante"""
+ """Valide un item isolé. Cet item est candidat à l'ajout à la liste existante"""
valid=1
try:
#on verifie le type
self.typeProto.adapt(item)
#on verifie les choix possibles
self.intoProto.adapt(item)
- #on ne verifie pas la cardinalité
+ #on ne verifie pas la cardinalité
if self.definition.validators:
valid=self.definition.validators.verif_item(item)
except ValError,e:
self.typeProto.adapt(item)
#on verifie les choix possibles
self.intoProto.adapt(item)
- #on ne verifie pas la cardinalité mais on verifie les validateurs
+ #on ne verifie pas la cardinalité mais on verifie les validateurs
if self.definition.validators:
valid=self.definition.validators.verif_item(item)
comment=""
valid=0
return valid,comment
+ def valideMatrice(self,cr):
+ #Attention, la matrice contient comme dernier tuple l ordre des variables
+ if self.monType.methodeCalculTaille != None :
+ apply (MCSIMP.__dict__[self.monType.methodeCalculTaille],(self,))
+ try :
+ #if 1 :
+ ok=0
+ if len(self.valeur) == self.monType.nbLigs +1:
+ ok=1
+ for i in range(len(self.valeur) -1):
+ if len(self.valeur[i])!= self.monType.nbCols:
+ ok=0
+ if ok:
+ self.set_valid(1)
+ return 1
+ except :
+ #else :
+ pass
+ if cr == 'oui' :
+ self.cr.fatal("La matrice n est pas une matrice "+str(self.monType.nbLigs)+","+str(self.monType.nbCols))
+ self.set_valid(0)
+ return 0
+
+ def NbDeVariables(self):
+ listeVariables=self.jdc.get_variables(self.etape)
+ self.monType.nbLigs=len(listeVariables)
+ self.monType.nbCols=len(listeVariables)
+
+
#--------------------------------------------------------------------------------
#ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clef " + itemobject.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else:
self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clef " + itemobject.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else :
import prefs
import qtCommun
-VERSION_EFICAS = "EFICAS v1.16"
+VERSION_EFICAS = "EFICAS v1.17"
# -------------------------- #
titre = "version "
monVisu=DVisu(parent=self.viewmanager,fl=Qt.WType_Dialog)
monVisu.setCaption(titre)
- monVisu.TB.setText("Eficas V1.16")
+ monVisu.TB.setText("Eficas V2.0")
monVisu.adjustSize()
monVisu.show()
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( FILES browser.py compobase.py compobloc.py compocommandecomm.py compocomm.py
+ compoerror.py compofact.py compoformule.py compojdc.py compomacro.py
+ compomclist.py componiveau.py componuplet.py compooper.py compoparam.py
+ compoproc.py composimp.py editor.py eficas_go.py
+ __init__.py monChoixCata.py monCommandePanel.py
+ monCommentairePanel.py monFonctionPanel.py monFormulePanel.py
+ monInactifPanel.py monIncludePanel.py monListeParamPanel.py
+ monMacroPanel.py monMatricePanel.py monMCFactPanel.py
+ monMCListAjoutPanel.py monOptionsPdf.py monParamPanel.py monPixmap.py
+ monPlusieursASSDPanel.py monPlusieursBasePanel.py monPlusieursIntoPanel.py
+ monPoursuitePanel.py monRacinePanel.py monSelectVal.py
+ monUniqueASSDPanel.py monUniqueBasePanel.py monUniqueCompPanel.py monUniqueIntoPanel.py
+ monUniqueSDCOIntoPanel.py monUniqueSDCOPanel.py monVisu.py
+ politiquesValidation.py qtCommun.py qtEficas.py
+ qtSaisie.py readercata.py typeNode.py utilIcons.py viewManager.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+ )
+
+# Installation des fichiers : OpenTURNS
+if (WITH_OPENTURNS)
+ install ( FILES monOptions_OPENTURNS_STUDY.py monOptions_OPENTURNS_WRAPPER.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+ )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+ install ( FILES gereTraduction.py monOptions_ASTER.py ssIhm.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+ )
+endif (WITH_ASTER)
+
+# Installatiion des fichiers : MAP
+if (WITH_MAP)
+ install ( FILES monChoixMap.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+ )
+endif (WITH_MAP)
+
+#monOptions_CUVE2DG.py
+
+### Local Variables:
+### mode: cmake
+### End:
mesLabels << self.trUtf8('Commande ') << self.trUtf8('Concept/Valeur ')
self.setHeaderLabels(mesLabels)
- self.setMinimumSize(QSize(600,505))
- self.setColumnWidth(0,300)
+ #self.setMinimumSize(QSize(600,505))
+ try :
+ self.setColumnWidth(0,300)
+ except :
+ QMessageBox.critical(self.editor,'probleme d environnement', "L environnement doit etre en QT4")
+ sys.exit(0)
+ self.itemCourrant=None
self.connect(self, SIGNAL("itemClicked ( QTreeWidgetItem * ,int) "), self.handleOnItem)
self.racine=self.item.itemNode(self,self.item)
if item.menu == None:
item.createPopUpMenu()
if item.menu != None:
+ if item.item.get_nom() == "DISTRIBUTION" and item.item.isvalid() :
+ item.Graphe.setEnabled(1)
item.menu.exec_(coord)
def handleOnItem(self,item,int):
- item.affichePanneau()
- try :
+ self.itemCourrant=item
+ #try :
+ if 1 :
fr = item.item.get_fr()
if self.editor:
- self.editor.affiche_infos(fr)
- except:
+ self.editor.affiche_infos(QString.toUtf8(QString(fr)))
+ #except:
+ else:
pass
+ item.affichePanneau()
# type de noeud
self.existeMenu=1
self.item.connect("valid",self.onValid,())
- self.item.connect("supp" ,self.onAdd,())
- self.item.connect("add" ,self.onSupp,())
+ self.item.connect("supp" ,self.onSupp,())
+ self.item.connect("add" ,self.onAdd,())
+ self.state=""
def build_children(self,posInsertion=10000):
ind=ind+1
def affichePanneau(self) :
- print self
if self.item.isactif():
panel=self.getPanel()
else:
obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add'
if obj is None:obj=0
if obj == 0:return 0
- self.build_children(index)
child=self.children[index]
child.affichePanneau()
return child
self.editor.init_modif()
index = self.treeParent.children.index(self) - 1
if index < 0 : index =0
+ recalcule=0
+ if self.item.nom == "VARIABLE" :
+ recalcule=1
+ jdc=self.item.jdc
ret=self.treeParent.item.suppitem(self.item)
if ret == 0:return
toselect=brothers[index]
else:
toselect=self.treeParent
+ if recalcule :
+ jdc.recalcule_etat_correlation()
toselect.select()
toselect.affichePanneau()
#
# #------------------------------------------------------------------
def onValid(self):
+ if self.item.nom == "VARIABLE" and self.item.isvalid():
+ self.item.jdc.recalcule_etat_correlation()
+ if hasattr(self.item,'forceRecalcul'):
+ self.forceRecalculChildren(self.item.forceRecalcul)
self.editor.init_modif()
self.update_node_valid()
self.update_node_label()
self.update_node_texte()
def onAdd(self,object):
- #print "NODE onAdd", self.item.GetLabelText()
self.editor.init_modif()
self.update_nodes()
def onSupp(self,object):
- #print "NODE onSupp", self.item.GetLabelText()
+ #print "onSupp"
self.editor.init_modif()
self.update_nodes()
-
def update_node_valid(self):
"""Cette methode remet a jour la validite du noeud (icone)
def update_nodes(self):
#print 'NODE update_nodes', self.item.GetLabelText()
self.build_children()
+
+ def update_valid(self) :
+ """Cette methode a pour but de mettre a jour la validite du noeud
+ et de propager la demande de mise a jour a son parent
+ """
+ #print "NODE update_valid", self.item.GetLabelText()
+ self.update_node_valid()
+ try :
+ self.treeParent.update_valid()
+ except:
+ pass
def update_texte(self):
""" Met a jour les noms des SD et valeurs des mots-cles """
if self.isExpanded() :
for child in self.children:
if child.isHidden() == false : child.update_texte()
+
+
+ def forceRecalculChildren(self,niveau):
+ if self.state=='recalcule' :
+ self.state=""
+ return
+ self.state='recalcule'
+ if hasattr(self.item,'object'):
+ self.item.object.state="modified"
+ for child in self.children:
+ if niveau > 0 : child.forceRecalculChildren(niveau - 1)
+
-
+
+ def doPaste(self,node_selected):
+ """
+ Déclenche la copie de l'objet item avec pour cible
+ l'objet passé en argument : node_selected
+ """
+ #print 'je passe dans doPaste'
+ objet_a_copier = self.item.get_copie_objet()
+ child=node_selected.doPasteCommande(objet_a_copier)
+ return child
+
def doPasteCommande(self,objet_a_copier):
"""
Réalise la copie de l'objet passé en argument qui est nécessairement
une commande
"""
- print "objet_a_copier = ", objet_a_copier.item.GetLabelText()
- child = self.append_brother(objet_a_copier)
+ #print 'je passe dans doPasteCommande'
+ try :
+ child = self.append_brother(objet_a_copier)
+ except :
+ pass
return child
def doPasteMCF(self,objet_a_copier):
Réalise la copie de l'objet passé en argument (objet_a_copier)
Il s'agit forcément d'un mot clé facteur
"""
- child = self.append_child(objet_a_copier,pos='first')
+ #print 'je passe dans doPasteMCF'
+ child = self.append_child(objet_a_copier,pos='first',retour='oui')
return child
+
if __name__=='__main__':
from PyQt4 import *
from PyQt4.QtGui import *
debComm=self.item.GetText()
self.setText(1,debComm)
+
class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
itemNode=Node
#
# ======================================================================
# Modules Python
-from Tkinter import Label,Button
#Modules Eficas
from Noyau.N_OBJECT import ErrorObj
def createPopUpMenu(self):
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
- def doPaste(self,node_selected):
- objetACopier = self.item.get_copie_objet()
- child=node_selected.doPasteMCF(objetACopier)
- return child
-
- def doPasteMCF(self,objetACopier):
- child = self.parent.append_child(objetACopier,
- pos=self.item,
- retour='oui')
- return child
-
class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
itemNode=Node
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte à afficher dans le noeud représentant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
- # None --> fonte et couleur par défaut
+ # None --> fonte et couleur par défaut
return self.object.getlabeltext(),None,None
def isvalid(self):
"""
itemobject=item.getObject()
if itemobject.isoblig() :
- self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+ self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ',Qt.red)
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clé " + itemobject.nom + " supprimé"
self.appli.affiche_infos(message)
return 1
else:
- self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+ self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé',Qt.red)
return 0
import Accas
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
-
+
class FORMULETreeItem(compooper.EtapeTreeItem):
"""
Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
Ce nom dépend de la validité de l'objet
"""
if self.object.isactif():
- self.object.state="modified"
if self.object.isvalid():
return "ast-green-square"
else:
from monRacinePanel import MonRacinePanel
return MonRacinePanel(self,parent=self.editor)
- def doPasteCommande(self,objet_a_copier):
- """
- Réalise la copie de l'objet passé en argument qui est nécessairement
- une commande
- """
- child = self.append_child(objet_a_copier,pos='first',retour='oui')
- return child
class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
return " "
def GetLabelText(self):
- # None --> fonte et couleur par défaut
+ # None --> fonte et couleur par défaut
return self.object.nom,None,None
def get_jdc(self):
"""
- Retourne l'objet pointé par self
+ Retourne l'objet pointé par self
"""
return self.object
return cmd
def suppitem(self,item) :
- # item = item de l'ETAPE à supprimer du JDC
+ # item = item de l'ETAPE à supprimer du JDC
# item.getObject() = ETAPE ou COMMENTAIRE
# self.object = JDC
itemobject=item.getObject()
if self.object.suppentite(itemobject):
if itemobject.nature == "COMMENTAIRE" :
- message = "Commentaire supprimé"
+ message = "Commentaire supprimé"
else :
- message = "Commande " + itemobject.nom + " supprimée"
+ message = "Commande " + itemobject.nom + " supprimée"
self.appli.affiche_infos(message)
return 1
else:
- self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+ self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet",Qt.red)
return 0
def GetSubList(self):
return self.sublist
def get_l_noms_etapes(self):
- """ Retourne la liste des noms des étapes de self.object"""
+ """ Retourne la liste des noms des étapes de self.object"""
return self.object.get_l_noms_etapes()
def get_liste_cmd(self):
class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
- print "MACRONode MACRONode"
from monMacroPanel import MonMacroPanel
return MonMacroPanel (self,parent=self.editor )
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
+ #def doPaste(self,node_selected):
+ # print 'je suis la'
+ # objetACopier = self.item.get_copie_objet()
+ # child=self.append_brother(objetACopier)
+ # return child
+
class MACROTreeItem(compooper.EtapeTreeItem):
# """ Cette classe hérite d'une grande partie des comportements
texte = f.read()
f.close()
from desVisu import DVisu
- monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog)
- monVisu.TB.setText(texte)
- monVisu.show()
+ monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
+ monVisuDialg.TB.setText(texte)
+ monVisuDialg.show()
+
class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
itemNode=MATERIAUNode
typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
- def doPaste(self,node_selected):
- objet_a_copier = self.item.get_copie_objet()
- child=node_selected.doPasteMCF(objet_a_copier)
+ #def doPaste(self,node_selected):
+ # objet_a_copier = self.item.get_copie_objet()
+ # child=node_selected.doPasteMCF(objet_a_copier)
#print "doPaste",child
- return child
+ # return child
- def doPasteMCF(self,objet_a_copier):
- child=None
+ #def doPasteMCF(self,objet_a_copier):
+ # child=None
# le noeud courant est une MCList
- if self.item.isMCList() :
- child = self.append_child(objet_a_copier,pos='first',retour='oui')
+ # if self.item.isMCList() :
+ # child = self.append_child(objet_a_copier,pos='first',retour='oui')
# le noeud courant est un MCFACT
- elif self.item.isMCFact() :
+ # elif self.item.isMCFact() :
# le noeud selectionne est un MCFACT dans une MCList
- if self.parent.item.isMCList():
- child = self.parent.append_child(objet_a_copier,
- pos=self.item,
- retour='oui')
+ # if self.parent.item.isMCList():
+ # child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
# le noeud MCFACT selectionne n'est pas dans une MCList
- else:
- child = self.parent.append_child(objet_a_copier,retour='oui')
+ # else:
+ # child = self.parent.append_child(objet_a_copier,retour='oui')
- else:
- QMessageBox.information( self, "Copie impossible",
- "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
- self.editor.affiche_infos("Copie refusée")
+ # else:
+ # QMessageBox.information( self, "Copie impossible",
+ # "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
+ # self.editor.affiche_infos("Copie refusée")
- return child
+ # return child
class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
""" La classe MCListTreeItem joue le role d'un adaptateur pour les objets
def get_docu(self):
""" Retourne la clef de doc de l'objet pointé par self """
+ print "hhhhhhhhhhhh"
return self.object.get_docu()
def iscopiable(self):
if self.object.suppentite(obj):
if len(self._object) == 1: self.updateDelegate()
- message = "Mot-clef " + obj.nom + " supprimé"
+ message = "Mot-clef " + obj.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else:
- self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
+ self.appli.affiche_infos('Impossible de supprimer ce mot-clef',Qt.red)
return 0
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud représentant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
- return self.labeltext,None,None
+ if self.isactif():
+ fonte = Fonte_Niveau
+ else :
+ fonte = Fonte_Niveau_inactif
+ return self.labeltext,fonte,None
def GetIconName(self):
if self.isactif():
self.appli.affiche_infos(message)
return 1
else:
- self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+ self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet",Qt.red)
return 0
def GetText(self):
def createPopUpMenu(self):
typeNode.PopUpMenuNode.createPopUpMenu(self)
if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome:
- self.menu.insertItem( 'View3D', self.view3D )
-
- def doPaste(self,node_selected):
- """
- Déclenche la copie de l'objet item avec pour cible
- l'objet passé en argument : node_selected
- """
- objet_a_copier = self.item.get_copie_objet()
- child=node_selected.doPasteCommande(objet_a_copier)
- return child
-
- def doPasteCommande(self,objet_a_copier):
- """
- Réalise la copie de l'objet passé en argument qui est nécessairement
- une commande
- """
- parent=self.parent
- #child = parent.item.append_child(objet_a_copier,self.item.getObject())
- child = self.append_brother(objet_a_copier)
- #if child is None:return 0
- return child
-
- def doPasteMCF(self,objet_a_copier):
- """
- Réalise la copie de l'objet passé en argument (objet_a_copier)
- Il s'agit forcément d'un mot clé facteur
- """
- child = self.append_child(objet_a_copier,pos='first',retour='oui')
- return child
+ self.ViewElt = QAction('View3D',self.tree)
+ self.tree.connect(self.ViewElt,SIGNAL("activated()"),self.view3D)
+ self.ViewElt.setStatusTip("affiche dans Geom les elements de structure")
+ self.menu.addAction(self.ViewElt)
+ if self.item.isvalid() :
+ self.ViewElt.setEnabled(1)
+ else:
+ self.ViewElt.setEnabled(0)
+ if self.item.get_nom() == "DISTRIBUTION" :
+ self.Graphe = QAction('Graphique',self.tree)
+ self.tree.connect(self.Graphe,SIGNAL("activated()"),self.viewPng)
+ self.Graphe.setStatusTip("affiche la distribution ")
+ self.menu.addAction(self.Graphe)
+ if self.item.isvalid() :
+ self.Graphe.setEnabled(1)
+ else:
+ self.Graphe.setEnabled(0)
def view3D(self) :
from Editeur import TroisDPal
- troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas)
+ troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
troisD.envoievisu()
+ def viewPng(self) :
+ from monPixmap import MonLabelPixmap
+ fichier=self.appliEficas.getName()
+ try :
+ os.remove(fichier)
+ except :
+ pass
+ #try:
+ if 1:
+ import generator
+ g = generator.plugins[self.appliEficas.format_fichier]()
+ g.gener(self.item.object, format='beautifie')
+ stdGener = g.getGenerateur()
+ if len(g.dictMCLois) != 1:
+ QMessageBox.warning(
+ None,
+ self.appliEficas.trUtf8("Erreur interne"),
+ self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
+ self.appliEficas.trUtf8("&Annuler"))
+ return
+ loi = g.dictMCLois.keys()[0]
+ nomLoi = loi.get_name()
+ script = stdGener.GraphiquePDF(loi, fichier)
+ #print script
+ d = {}
+ exec script in d
+ widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
+ widgetPng.show()
+ #except:
+ else:
+ QMessageBox.warning(
+ None,
+ self.appliEficas.trUtf8("Erreur interne"),
+ self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
+ self.appliEficas.trUtf8("&Annuler"))
class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
""" La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
# item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
itemobject=item.getObject()
if itemobject.isoblig() :
- self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+ self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ',Qt.red)
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clef " + itemobject.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else :
- self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+ self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé',Qt.red)
return 0
def GetText(self):
représentatif de self.object
"""
# Format de fichier utilisé
- format=self.appli.format_fichier
+ format=self.appli.appliEficas.format_fichier
return self.object.get_objet_commentarise(format)
def get_objet_commentarise_BAK(self):
"""
import generator,string,Accas
# Format de fichier utilisé
- format=self.appli.format_fichier
+ format=self.appli.appliEficas.format_fichier
g=generator.plugins[format]()
texte_commande = g.gener(self.object,format='beautifie')
# Il faut enlever la premiere ligne vide de texte_commande que
typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
self.menu.removeAction(self.Documentation)
+ def doPaste(self,node_selected):
+ return None
+
class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
# Attention l ordre des if est important
+ if self.item.wait_matrice ():
+ from monMatricePanel import MonMatricePanel
+ klass=MonMatricePanel
# l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
- if self.item.has_into():
+ elif self.item.has_into():
if self.item.is_list() :
from monPlusieursIntoPanel import MonPlusieursIntoPanel
klass = MonPlusieursIntoPanel
from monFonctionPanel import MonFonctionPanel
klass = MonFonctionPanel
- print klass
if not klass:
return None
return klass( self, self.editor )
is_a_list= self.definition.validators.is_list() * is_a_list
return is_a_list
- #def get_into(self,liste_courante=None):
- # """
- # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
- # pas de liste de choix, la méthode retourne None.
- # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja
- # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
- # en en tenant compte.
- # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
- # une relation de type ET (AndVal).
- # """
- # if not self.object.definition.validators :
- # return self.object.definition.into
- # else:
- # return self.object.definition.validators.get_into(liste_courante,self.definition.into)
def has_into(self):
"""
def get_liste_param_possible(self):
liste_param=[]
+ print self.object.jdc.params
for param in self.object.jdc.params:
encorevalide=self.valide_item(param.valeur)
if encorevalide:
def wait_tuple(self):
""" Méthode booléenne qui retourne 1 si l'objet pointé par self
- attend un shell, 0 sinon """
+ attend un Tuple, 0 sinon """
for ss_type in self.object.definition.type:
if repr(ss_type).find('Tuple') != -1 :
return 1
return 0
+ def wait_matrice(self):
+ """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+ attend un Tuple, 0 sinon """
+ for ss_type in self.object.definition.type:
+ if repr(ss_type).find('Matrice') != -1 :
+ return 1
+ return 0
+
def wait_assd(self):
"""Méthode booléenne qui retourne 1 si l'objet pointé par self
attend un objet de type ASSD ou dérivé, 0 sinon """
--- /dev/null
+# -*- coding: utf-8 -*-\r
+# CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+ Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import os, sys, string, types, re\r
+import traceback\r
+from PyQt4.QtGui import *\r
+from utils import read_file\r
+\r
+# Modules Eficas\r
+from Editeur import utils\r
+\r
+class CONFIG_BASE:\r
+\r
+ #--------------------------------------\r
+ def __init__(self,appli,repIni,nomDir):\r
+ #--------------------------------------\r
+\r
+ # Classe de base permettant de lire, afficher\r
+ # et sauvegarder les fichiers utilisateurs \r
+ # On a deux directories : la directory generale (Repertoire d instal + Nom du code\r
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper\r
+ # et la directorie de l utilisateur \r
+ # HOME/.Eficas_Openturns\r
+ # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement \r
+ # par celui de l utilisateur\r
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite\r
+ # dans le fichier general sinon\r
+ self.appli = appli \r
+ self.code = appli.code\r
+ self.salome = appli.salome\r
+ self.repIni = repIni\r
+ self.REPINI = repIni\r
+ self.rep_user = os.path.join(os.environ['HOME'],nomDir)\r
+ \r
+ if self.appli: \r
+ self.parent=appli.top\r
+ self.appli.mode_nouv_commande='initial'\r
+ else: self.parent=None\r
+\r
+\r
+\r
+ def setValeurs(self):\r
+ #---------------------\r
+ \r
+ # Valeurs par defaut\r
+ if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)\r
+ self.initialdir = self.rep_user\r
+ self.path_doc = self.rep_user\r
+ self.savedir = self.rep_user\r
+ self.exec_acrobat = self.rep_user\r
+ \r
+ #Lecture des fichiers utilisateurs\r
+ self.lecture_fichier_ini_standard()\r
+ self.lecture_fichier_ini_utilisateur()\r
+ self.lecture_catalogues()\r
+\r
+ #--------------------------------------\r
+ def lecture_fichier_ini_standard(self):\r
+ #--------------------------------------\r
+ # Verifie l'existence du fichier "standard"\r
+ # appelle la lecture de ce fichier\r
+ import prefs\r
+ name='prefs_'+prefs.code\r
+ prefsCode=__import__(name)\r
+ self.prefsUser=name+".py"\r
+ for k in self.labels_eficas :\r
+ try :\r
+ valeur=getattr(prefsCode,k)\r
+ setattr(self,k,valeur)\r
+ except :\r
+ pass\r
+ if hasattr(self,'map_path') :\r
+ oldPath=self.map_path\r
+ \r
+\r
+ #--------------------------------------\r
+ def lecture_fichier_ini_utilisateur(self):\r
+ #--------------------------------------\r
+ # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent\r
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.prefsUser)\r
+ if not os.path.isfile(self.fic_ini_utilisateur): return\r
+\r
+ txt = utils.read_file(self.fic_ini_utilisateur)\r
+ from styles import style\r
+ d=locals()\r
+ try:\r
+ exec txt in d\r
+ except :\r
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])\r
+ QMessageBox.critical( None, "Import du fichier de Configuration", \r
+ "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )\r
+ sys.exit(0)\r
+ for k in self.labels_user :\r
+ try :\r
+ setattr(self,k,d[k])\r
+ except :\r
+ pass\r
+\r
+\r
+ #--------------------------------------\r
+ def lecture_catalogues(self):\r
+ #--------------------------------------\r
+ rep_mat=" " # Compatibilite Aster\r
+ if hasattr(self,"catalogues") : return\r
+ \r
+ fic_ini = os.path.join(self.repIni,self.cataFile)\r
+ if not os.path.isfile(fic_ini) :\r
+ QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues", \r
+ "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )\r
+ sys.exit(0)\r
+\r
+ txt = utils.read_file(fic_ini)\r
+ d=locals()\r
+ try:\r
+ exec txt in d\r
+ self.catalogues=d["catalogues"]\r
+ except :\r
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])\r
+ QMessageBox.critical( None, "Import du fichier de Configuration", \r
+ "Erreur à la lecture du fichier de configuration " + fic_ini )\r
+ sys.exit(0)\r
+\r
+\r
+\r
+ #--------------------------------------\r
+ def save_params(self):\r
+ #--------------------------------------\r
+ # sauvegarde\r
+ # les nouveaux paramètres dans le fichier de configuration utilisateur\r
+ #\r
+ texte=""\r
+ for clef in self.labels_user :\r
+ if hasattr(self,clef):\r
+ valeur=getattr(self,clef)\r
+ texte= texte + clef+" = " + repr(valeur) +"\n"\r
+ f=open(self.fic_ini_utilisateur,'w+')\r
+ print self.fic_ini_utilisateur\r
+ f.write(texte) \r
+ f.close()\r
+#\r
+\r
#
# ======================================================================
-print "INTERFACEQT4"
import types,sys,os
import traceback
from PyQt4 import *
import readercata
import qtCommun
+DictExtensions= {"MAP" : ".map"}
-VERSION_EFICAS = "EFICAS v1.16"
class JDCEditor(QSplitter):
self.code = self.appliEficas.CONFIGURATION.code
self.version_code = VERSION_CODE
- self.titre=VERSION_EFICAS + ' pour '+ self.code
+ self.titre=self.appliEficas.VERSION_EFICAS + ' pour '+ self.code
self.dict_reels={}
self.liste_simp_reel=[]
self.CONFIGURATION = self.appliEficas.CONFIGURATION
self.CONFIGStyle = self.appliEficas.CONFIGStyle
+ try:
+ self.CONFIGURATION.generator_module
+ _module = __import__(self.CONFIGURATION.generator_module)
+ info = _module.entryPoint()
+ generator.plugins.addEntryPoint(info)
+ except:
+ pass
+
+ try:
+ self.CONFIGURATION.convert_module
+ _module = __import__(self.CONFIGURATION.convert_module)
+ info = _module.entryPoint()
+ convert.plugins.addEntryPoint(info)
+ except :
+ pass
+
self.sb = None
if hasattr(self.appliEficas,"statusBar"):
self.sb = self.appliEficas.statusBar()
self.isReadOnly = False
self.tree = None
self.node_selected = None
+ self.message=''
- if not hasattr( readercata, 'reader' ) :
- readercata.reader = readercata.READERCATA( self, self.appliEficas )
- self.readercata = readercata.reader
+ #if not hasattr( readercata, 'reader' ) :
+ # readercata.reader = readercata.READERCATA( self, self.appliEficas )
+ #self.readercata = readercata.reader
+ if not hasattr ( self.appliEficas, 'readercata'):
+ self.readercata = readercata.READERCATA( self, self.appliEficas )
+ self.appliEficas.readercata=self.readercata
+ else :
+ self.readercata=self.appliEficas.readercata
+ if self.readercata.fic_cata == None : return #Sortie Salome
self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
#------- construction du jdc --------------
if txt_exception:
self.jdc = None
qApp.restoreOverrideCursor()
- self.affiche_infos("Erreur fatale au chargement de %s" %fichier)
+ self.affiche_infos("Erreur fatale au chargement de %s" %fichier,Qt.red)
QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception)
else:
comploader.charger_composants("QT")
jdcName=os.path.basename(fn)
# Il faut convertir le contenu du fichier en fonction du format
- if convert.plugins.has_key( self.appliEficas.format_fichier ):
+ if convert.plugins.has_key( self.appliEficas.format_fichier_in ):
# Le convertisseur existe on l'utilise
- appli = self
- p=convert.plugins[self.appliEficas.format_fichier]()
+ #appli = self
+ p=convert.plugins[self.appliEficas.format_fichier_in]()
p.readfile(fn)
- text=p.convert('exec',appli)
+ text=p.convert('exec',self.appliEficas)
if not p.cr.estvide():
- self.affiche_infos("Erreur à la conversion")
+ self.affiche_infos("Erreur à la conversion",Qt.red)
else :
- self.affiche_infos("Type de fichier non reconnu")
+ self.affiche_infos("Type de fichier non reconnu",Qt.red)
QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
return None
p.readfile(file)
text=p.convert('execnoparseur')
if not p.cr.estvide():
- self.affiche_infos("Erreur a la conversion")
+ self.affiche_infos("Erreur a la conversion",Qt.red)
return text
else:
# Il n'existe pas c'est une erreur
- self.affiche_infos("Type de fichier non reconnu")
+ self.affiche_infos("Type de fichier non reconnu",Qt.red)
QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
return None
self.jdc.supprime()
self.close()
- #------------------------------#
- def affiche_infos(self,message):
- #------------------------------#
- #PN --> devenu inutile avec QT4
- #if self.salome :
- # if not hasattr(self.appliEficas,'MessageLabel') :
- # self.appliEficas.leLayout=QDockWidget(self.appliEficas)
- # self.appliEficas.MessageLabel = QLabel("MessageLabel",self.appliEficas.leLayout)
- # self.appliEficas.MessageLabel.setAlignment(Qt.AlignBottom)
- # self.appliEficas.leLayout.setAllowedAreas(Qt.BottomDockWidgetArea)
- # self.appliEficas.leLayout.setWidget(self.appliEficas.MessageLabel)
- # #self.appliEficas.moveDockWindow(self.appliEficas.leLayout,Qt.DockBottom)
- # self.appliEficas.MessageLabel.setText(message)
- # self.appliEficas.MessageLabel.show()
- # self.appliEficas.leLayout.show()
+ #----------------------------------------------#
+ def affiche_infos(self,message,couleur=Qt.black):
+ #----------------------------------------------#
if self.sb:
- self.sb.showMessage(message)#,2000)
+ mapalette=self.sb.palette()
+ from PyQt4.QtGui import QPalette
+ mapalette.setColor( QPalette.WindowText, couleur )
+ self.sb.setPalette( mapalette );
+ self.sb.showMessage(QString.fromUtf8(message))#,2000)
#------------------------------#
def affiche_alerte(self,titre,message):
return
self.node_selected=self.tree.selectedItems()[0]
if copie == 0 : return
- if not self.node_selected.item.iscopiable():
- QMessageBox.information( self,
- "Copie impossible",
- "Cette version d'EFICAS ne permet pas la copie de cet Objet")
- self.node_selected=None
- return
+ #---------------------#
+ def handleSupprimer(self):
+ #---------------------#
+ #print "handleSupprimer"
+ self.chercheNoeudSelectionne()
+ self.node_selected.delete()
+
#---------------------#
def handleEditCut(self):
#---------------------#
"""
- Stocke dans Eficas.noeud_a_editer le noeud à couper
+ Stocke dans Eficas.noeud_a_editer le noeud à couper
"""
+ #print "handleEditCut"
self.chercheNoeudSelectionne()
self.QWParent.edit="couper"
self.QWParent.noeud_a_editer = self.node_selected
"""
Stocke dans Eficas.noeud_a_editer le noeud a copier
"""
+ #print "handleEditCut"
self.chercheNoeudSelectionne()
self.QWParent.edit="copier"
self.QWParent.noeud_a_editer = self.node_selected
Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
Ne permet que la copie d'objets de type Commande ou MCF
"""
+ #print "handleEditPaste"
self.chercheNoeudSelectionne()
- index_noeud_a_couper=self.QWParent.noeud_a_editer.treeParent.children.index(self.QWParent.noeud_a_editer)
- if self.QWParent.noeud_a_editer == None :
+ try :
+ index_noeud_a_couper=self.QWParent.noeud_a_editer.treeParent.children.index(self.QWParent.noeud_a_editer)
+ except :
QMessageBox.information( self,
"Copie impossible",
- "Aucun Objet n a ete copie ou colle ")
+ "Aucun Objet n a ete copie ou coupe ")
return
+ child=0
try:
child=self.QWParent.noeud_a_editer.doPaste(self.node_selected)
except:
traceback.print_exc()
QMessageBox.information( self,
- "Copie impossible",
- "L'action de coller apres un tel objet n'est pas permise")
+ "Copie refusee",
+ "Copie refusee pour ce type d objet a cet endroit")
+ self.message = ''
+ self.affiche_infos("Copie refusée")
return
-
- if child == 0:
- if self.message != '':
- QMessageBox.critical( self, "Copie refusee", self.message)
- self.message = ''
- self.affiche_infos("Copie refusée")
+ if child == 0 or child == None:
+ QMessageBox.critical( self, "Copie refusee",'Copie refusee pour ce type d objet')
+ self.message = ''
+ self.affiche_infos("Copie refusée",Qt.red)
return
# il faut declarer le JDCDisplay_courant modifie
# si possible on renomme l objet comme le noeud couper
if self.QWParent.edit == "couper":
- print self.QWParent.noeud_a_editer.child
index_ajoute=child.treeParent.children.index(child)
if index_ajoute <= index_noeud_a_couper :
index_noeud_a_couper=index_noeud_a_couper + 1
def get_file_variable(self) :
#---------------------------#
titre = "Choix d'un fichier XML"
- texte = "Le fichier contient une commande INCLUDE\n"
+ texte = "Le fichier contient une commande MODEL\n"
texte = texte+'Donnez le nom du fichier XML qui contient la description des variables'
QMessageBox.information( self, titre,texte)
self.appliEficas.trUtf8('Ouvrir Fichier'),
self.appliEficas.CONFIGURATION.savedir,
self.appliEficas.trUtf8('Wrapper Files (*.xml);;''All Files (*)'))
- print fichier
return fichier
#----------------------------------#
if generator.plugins.has_key(format):
# Le generateur existe on l'utilise
self.generator=generator.plugins[format]()
- jdc_formate=self.generator.gener(self.jdc,format='beautifie')
+ jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
if not self.generator.cr.estvide():
- self.affiche_infos("Erreur à la generation")
+ self.affiche_infos("Erreur à la generation",Qt.red)
QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
return ""
else:
return jdc_formate
else:
# Il n'existe pas c'est une erreur
- self.affiche_infos("Format %s non reconnu" % format)
+ self.affiche_infos("Format %s non reconnu" % format,Qt.red)
QMessageBox.critical( self, "Format "+format+" non reconnu","EFICAS ne sait pas convertir le JDC selon le format "+format)
return ""
-
+
+ #-----------------------------#
+ def run(self,execution="oui"):
+ #-----------------------------#
+ format=self.appliEficas.format_fichier
+ self.textePython=""
+ if generator.plugins.has_key(format):
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ self.textePython =self.generator.generRUN(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
+ if execution=="oui" :
+ os.system(self.textePython)
+ else:
+ return self.textePython
+
+ #------------------------------------------------#
+ def runYACS(self,execution="oui",nomFichier=None):
+ #------------------------------------------------#
+ format=self.appliEficas.format_fichier
+ if generator.plugins.has_key(format):
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ self.generator.generRUNYACS(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION,nomFichier=nomFichier)
+ if execution=="oui" :
+ print "il faut faire le run dans Salome"
+
+ #-----------------------------#
+ def saveRun(self):
+ #-----------------------------#
+ texte=self.run(execution="non")
+ path=self.CONFIGURATION.savedir
+ fn = QFileDialog.getSaveFileName( self,
+ self.trUtf8("sauvegarde"), path,
+ self.trUtf8("JDC (*.sh);;" "All Files (*)"),None,
+ QFileDialog.DontConfirmOverwrite)
+ if fn.isNull(): return
+ ext = QFileInfo(fn).suffix()
+ if ext.isEmpty(): fn.append(".xml")
+
+ if QFileInfo(fn).exists():
+ abort = QMessageBox.warning(self,
+ self.trUtf8("Sauvegarde du Fichier"),
+ self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
+ self.trUtf8("&Ecraser"),
+ self.trUtf8("&Abandonner"))
+ if abort == 1 : return
+
+ fn = unicode(QDir.convertSeparators(fn))
+ self.writeFile( fn, txt = texte)
+
+ #-----------------------------#
+ def saveYACS(self):
+ #-----------------------------#
+ path=self.CONFIGURATION.savedir
+ fn = QFileDialog.getSaveFileName( self,
+ self.trUtf8("sauvegarde"), path,
+ self.trUtf8("JDC (*.xml);;" "All Files (*)"),None,
+ QFileDialog.DontConfirmOverwrite)
+ if fn.isNull(): return
+ ext = QFileInfo(fn).suffix()
+ if ext.isEmpty(): fn.append(".xml")
+
+ if QFileInfo(fn).exists():
+ abort = QMessageBox.warning(self,
+ self.trUtf8("Sauvegarde du Fichier"),
+ self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
+ self.trUtf8("&Ecraser"),
+ self.trUtf8("&Abandonner"))
+ if abort == 1 : return
+ fn = unicode(QDir.convertSeparators(fn))
+
+ texte=self.runYACS(execution="non",nomFichier=fn)
+ #self.writeFile( fn, txt = texte)
#-----------------------------------------#
def cherche_Groupes(self):
- liste=self.get_text_JDC("GroupMA")
- return liste
#-----------------------------------------#
+ listeMA,listeNO=self.get_text_JDC("GroupMA")
+ return listeMA,listeNO
#-----------------------------------------#
def saveFile(self, path = None, saveas= 0):
if path is None:
path=self.CONFIGURATION.savedir
selectedFilter = QString('')
+ if DictExtensions.has_key(self.appli.code) :
+ chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
+ extensions= self.trUtf8(chaine1+ "All Files (*)")
+ else :
+ extensions= self.trUtf8("JDC (*.comm);;" "All Files (*)")
fn = QFileDialog.getSaveFileName( self,
self.trUtf8("sauvegarde"), path,
- self.trUtf8("JDC (*.comm);;" "All Files (*)"),None,
+ extensions,None,
QFileDialog.DontConfirmOverwrite)
if fn.isNull(): return (0, None)
+ ulfile = os.path.abspath(unicode(fn))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
ext = QFileInfo(fn).suffix()
- if ext.isEmpty(): fn.append(".comm")
+ if ext.isEmpty():
+ if DictExtensions.has_key(self.appli.code) :
+ fn.append(DictExtensions[self.appli.code])
+ else :
+ fn.append(".comm")
if QFileInfo(fn).exists():
abort = QMessageBox.warning(self,
self.tree.racine.item.getObject().nom=os.path.basename(newName)
self.tree.racine.update_node_label()
- try :
- #if 1 :
- fileXML = fn[:fn.rfind(".")] + '.xml'
- self.generator.writeOpenturnsXML( fileXML )
- except :
- #else :
- pass
+ if self.jdc.isvalid() != 0 :
+ try :
+ fileXML = fn[:fn.rfind(".")] + '.xml'
+ self.generator.writeOpenturnsXML( fileXML )
+ except :
+ pass
- #PNPNPNPN A ecrire
- try :
- fileSTD = fn[:fn.rfind(".")] + '.py'
- self.generator.writeOpenturnsSTD( fileSTD )
- except :
- pass
-
- try :
- #if 1 :
- self.generator.writeCuve2DG()
- #else :
- except :
- pass
-
-
- try :
- #if 1 :
- self.tubePy=self.generator.getTubePy()
- fileTube = '/tmp/tube.py'
- if self.tubePy != '' :
- f=open(fileTube,'w')
- f.write(self.tubePy)
- f.close()
- except :
- #else :
- pass
+ try :
+ fileSTD = fn[:fn.rfind(".")] + '.py'
+ self.generator.writeOpenturnsSTD( fileSTD )
+ except :
+ pass
+
+ try:
+ self.generator.writeDefault(fn)
+ except:
+ pass
+
+ try :
+ fileCuve2DG = fn[:fn.rfind(".")] + '.don'
+ self.generator.writeCuve2DG(fileCuve2DG)
+ except :
+ pass
+
if self.salome :
self.appliEficas.addJdcInSalome( self.fichier)
-# if self.code == 'ASTER':
-# self.QWParent.appli.createOrUpdateMesh(self)
-# #PN ; TODO
-#
+
return (1, self.fichier)
else:
return (0, None)
if unite :
titre = "Choix unite %d " %unite
texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
- texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
+ texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
labeltexte = 'Fichier pour unite %d :' % unite
else:
titre = "Choix d'un fichier de poursuite"
texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
- QMessageBox.information( self, titre,texte)
- path=self.CONFIGURATION.savedir
- fn = QFileDialog.getOpenFileName( self, titre,path)
+ QMessageBox.information( self, titre,QString.fromUtf8(texte))
+ fn = QFileDialog.getOpenFileName(self.appliEficas,
+ titre,
+ self.appliEficas.CONFIGURATION.savedir)
if fn.isNull():
# ce retour est impose par le get_file d'I_JDC
return None," "
ulfile = os.path.abspath(unicode(fn))
- # On utilise le convertisseur défini par format_fichier
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+
+ # On utilise le convertisseur défini par format_fichier
source=self.get_source(ulfile)
if source:
- # On a réussi à convertir le fichier self.ulfile
+ # On a réussi à convertir le fichier self.ulfile
jdcText = source
else:
- # Une erreur a été rencontrée
+ # Une erreur a été rencontrée
jdcText = ''
return ulfile, jdcText
from Editeur import session
from qtEficas import Appli
-def lance_eficas(code=None,fichier=None):
+def lance_eficas(code=None,fichier=None,ssCode=None):
"""
Lance l'appli EFICAS
"""
code=options.code
app = QApplication(sys.argv)
- Eficas=Appli(code=code)
+ Eficas=Appli(code=code,ssCode=ssCode)
Eficas.show()
res=app.exec_()
sys.exit(res)
-def lance_eficas_ssIhm(code=None,fichier=None):
+def lance_eficas_ssIhm(code=None,fichier=None,version='v9.5'):
"""
Lance l'appli EFICAS pour trouver les noms des groupes
"""
Eficas=Appli(code=code)
from ssIhm import QWParentSSIhm
- parent=QWParentSSIhm(code,Eficas,'v9.4')
+ parent=QWParentSSIhm(code,Eficas,version)
+
+ import readercata
+ #if not hasattr( readercata, 'reader' ) :
+ # readercata.reader = readercata.READERCATA( parent, Eficas )
+ if not hasattr ( Eficas, 'readercata'):
+ monreadercata = readercata.READERCATA( parent, Eficas )
+ Eficas.readercata=monreadercata
+
- from readercata import READERCATA
- readercata = READERCATA( parent, Eficas )
-
from editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
print monEditeur.cherche_Groupes()
from PyQt4 import *
from PyQt4.QtGui import *
+from PyQt4.QtCore import *
import os
if version == "V8V9" :
from Traducteur import traduitV8V9
suffixe="v9.comm"
- fn = QFileDialog.getOpenFileName( QString(directPath) , "")
+ fn = QFileDialog.getOpenFileName(
+ editor.appliEficas,
+ editor.appliEficas.trUtf8('Traduire Fichier'),
+ QString(directPath) ,
+ editor.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
FichieraTraduire=str(fn)
if (FichieraTraduire == "" or FichieraTraduire == () ) : return
log=directLog+"/convert.log"
os.system("rm -rf "+log)
os.system("rm -rf "+FichierTraduit)
+ print "hhhhhhhhhhhhhhhhhhhhhhhhhhhh"
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
except :
pass
- from desVisu import DVisu
+ from monVisu import DVisu
titre = "conversion de "+ FichieraTraduire
- monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog)
- monVisu.setCaption(titre)
- monVisu.TB.setText(texte)
- monVisu.show()
+ monVisuDialg=DVisu(parent=editor.appliEficas,fl=0)
+ monVisuDialg.setWindowTitle(titre)
+ monVisuDialg.TB.setText(texte)
+ monVisuDialg.show()
class MonChoixCata(Ui_DChoixCata,QtGui.QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
- def __init__(self,listeCata,readercata, QWparent , name = None,fl = 0):
- #print "MonChoixCata"
- QtGui.QDialog.__init__(self,QWparent)
+ def __init__(self, QWparent, listeCata, title = None):
+ QtGui.QDialog.__init__(self, QWparent)
self.setModal(True)
self.setupUi(self)
- self.listeCata=listeCata
- self.readercata=readercata
- for cata in self.listeCata :
- self.CBChoixCata.insertItem(0,cata)
- lab = QString(repr(len(listeCata)))
- lab += QString(" versions du catalogue sont disponibles")
- self.TLNb.setText(lab)
- self.CBChoixCata.setCurrentIndex(0)
- self.readercata.version_cata=self.CBChoixCata.currentText()
+ self.CBChoixCata.addItems(listeCata)
+ self.TLNb.setText(QString("%d versions du catalogue sont disponibles" %
+ len(listeCata)))
+ if title is not None:
+ self.setWindowTitle(QString.fromUtf8(title))
def on_buttonCancel_clicked(self):
QDialog.reject(self)
- def on_CBChoixCata_activated(self):
- self.readercata.version_cata=self.CBChoixCata.currentText()
-
def on_buttonOk_clicked(self):
QDialog.accept(self)
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desChoixMap import Ui_ChoixMap
+from PyQt4 import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+labels = {
+"s_oxides_st_1" : "Determination de l'allure de l'interface d'un oxyde donné \npour un niveau a determiner d'irradiation" ,
+"s_oxides_st_2" : "Estimation du champ mecanique dans une couche de zircone" ,
+"s_oxides_mt_1" : "Estimation du champ mecanique dans une couche de zircone \nprésentant des défauts et de l'énergie élastique relaxée",
+"s_scc_st_1" : "Analyse morphologique et mécanique d'une couche d'oxydes",
+"s_scc_st_2" : "Analyse statistique de données locales et expérimentales \nou numériques",
+"s_scc_st_3" : "taux de couverture des joints de grains par des précipités",
+"s_poly_st_1" : "Estimation numérique 3D de la diffusion effective des gaz dans les polymères chargés",
+
+ }
+
+dico={"oxides" : {"irradiation" : "s_oxides_st_1",
+ "mecanique" : "s_oxides_st_2",
+ "mecanique avec defaut" : "s_oxides_mt_1"},
+ "scc" : {"analyse morphologique" : "s_scc_st_1",
+ "analyse statistique" : "s_scc_st_2",
+ "taux de couverture" : "s_scc_st_3"},
+ "concrete" : {},
+ "polycristals" : {},
+ "polymers" : {"numerique 3D" : "s_poly_st_1"},
+ "micro" : {},
+ "seal" : {},
+ "mox" : {},
+ "nano" : {},
+ "insulator" : {}}
+
+# Import des panels
+
+class MonRadioBouton(QRadioButton) :
+
+ def setModule(self,module,fenetreMere):
+ self.module=module
+ self.fenetreMere=fenetreMere
+
+ def enterEvent(self,e):
+ schema=str(self.text())
+ nomCata=dico[self.module][schema]
+ self.fenetreMere.labelScheme.setText(labels[nomCata])
+
+class MonChoixMap(Ui_ChoixMap,QtGui.QDialog):
+ """
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
+ """
+ def __init__(self, choixCata,parentQT=None,parentAppli=None):
+ QtGui.QDialog.__init__(self,parentQT)
+ self.setMinimumSize(50, 50);
+ self.setModal(True)
+ self.setupUi(self)
+ self.ajouteCeQuilFaut()
+ self.choixCata=choixCata
+ self.parentAppli=parentAppli
+
+
+ def ajouteCeQuilFaut(self) :
+ self.groupModules=QButtonGroup(self.groupBoxModule)
+ self.vLayoutScheme=QVBoxLayout(self.groupBoxScheme)
+ self.groupModules.addButton(self.RBM1)
+ self.groupModules.addButton(self.RBM2)
+ self.groupModules.addButton(self.RBM3)
+ self.groupModules.addButton(self.RBM4)
+ self.groupModules.addButton(self.RBM5)
+ self.groupModules.addButton(self.RBM6)
+ self.groupModules.addButton(self.RBM7)
+ self.groupModules.addButton(self.RBM8)
+ self.groupModules.addButton(self.RBM9)
+ self.groupModules.addButton(self.RBM10)
+ self.groupScheme=QButtonGroup(self.groupBoxScheme)
+ self.connect(self.groupModules,SIGNAL("buttonClicked (QAbstractButton*)"),self.modifieModule)
+ self.connect(self.groupScheme,SIGNAL("buttonClicked (QAbstractButton*)"),self.choisitSchema)
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap("../Editeur/icons/map.ppm"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+ self.PBIconeMap.setIcon(icon)
+
+
+ def modifieModule(self):
+ self.module=str(self.groupModules.checkedButton().text())
+ dicoModules=dico[self.module]
+ self.choixCata.module=self.module
+ for bouton in self.groupScheme.buttons():
+ self.groupScheme.removeButton(bouton)
+ bouton.close()
+ for label in dicoModules.keys():
+ bouton=MonRadioBouton(QString(label),self.groupBoxScheme)
+ bouton.setModule(self.module,self)
+ self.vLayoutScheme.addWidget(bouton)
+ self.groupScheme.addButton(bouton)
+
+
+ def choisitSchema(self):
+ schema=str(self.groupScheme.checkedButton().text())
+ self.choixCata.schema=schema
+ nomCata= dico[self.module][schema]
+ if self.parentAppli==None :
+ self.choixCata.nom=nomCata
+ else :
+ self.parentAppli.ssCode=nomCata
+ self.close();
+
QTPanelTBW2.__init__(self,node,parent)
self.RemplitPanel()
self.connecterSignaux()
+ self.textCommentaire.setFocus()
def connecterSignaux(self) :
self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
class MonFonctionPanel(MonPlusieursBasePanel):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonFonctionPanel"
#decoupe la liste des valeurs en n ( les x puis les y)
l_valeurs=[]
if (len(liste)% self.nbValeurs != 0):
- message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+ message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
#self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(message)
+ self.editor.affiche_infos(message,Qt.red)
i=0
while ( i < (len(liste) - self.nbValeurs + 1)) :
t=tuple(liste[i:i+self.nbValeurs])
listeValeurs=self.node.item.GetListeValeurs()
if self.node.item.wait_tuple()== 1 :
listeATraiter=listeValeurs
+ for valeur in listeATraiter:
+ str_valeur=str(valeur)
+ self.LBValeurs.addItem(str_valeur)
else :
- listeATraiter=self.DecoupeListeValeurs(listeValeurs)
- for valeur in listeATraiter:
- str_valeur=str(valeur)
- self.LBValeurs.addItem(str_valeur)
+ for valeur in self.DecoupeListeValeurs(listeValeurs):
+ if type(valeur) == types.TupleType:
+ TupleEnTexte="("
+ for val in valeur :
+ TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+ TupleEnTexte = TupleEnTexte[0:-2] +")"
+ print TupleEnTexte
+ self.LBValeurs.addItem(TupleEnTexte)
+ else :
+ self.LBValeurs.addItem(QString(str(valeur)))
+
def Ajout1Valeur(self,liste=[]):
- # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+ # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+ validite=1
if liste == [] :
if self.node.item.wait_tuple()== 1 :
liste=SaisieValeur.TraiteLEValeurTuple(self)
if liste == [''] : return
- validite=1
else :
liste,validite=SaisieValeur.TraiteLEValeur(self)
- else :
- validite=1
- if validite == 0 : return
+ if validite == 0 : return
if liste ==[] : return
if len(liste) != self.nbValeurs :
commentaire += QString(str(self.nbValeurs))
commentaire += QString(" valeurs")
self.LEValeur.setText(QString(str(liste)))
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return
if self.node.item.wait_tuple()== 1 :
liste2=tuple(liste)
liste=liste2
+
index=self.LBValeurs.currentRow()
if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
index=0
else :
index=self.LBValeurs.currentRow() + 1
indexListe=index*self.nbValeurs
- if index == 0 :
- indexListe=len(self.listeValeursCourantes)
+ if index == 0 : indexListe=len(self.listeValeursCourantes)
+
listeVal=[]
for valeur in self.listeValeursCourantes :
listeVal.append(valeur)
validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
else :
validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
- self.Commentaire.setText(comm2)
+ self.Commentaire.setText(QString.fromUtf8(QString(comm2)))
if not validite :
- self.editor.affiche_infos(comm)
+ self.editor.affiche_infos(comm,Qt.red)
else:
self.LEValeur.setText(QString(""))
l1=self.listeValeursCourantes[:indexListe]
else :
listeATraiter=self.DecoupeListeValeurs(listeRetour)
for valeur in listeATraiter :
- str_valeur=str(valeur)
+ if type(valeur) == types.TupleType:
+ TupleEnTexte="("
+ for val in valeur :
+ TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+ str_valeur = TupleEnTexte[0:-2] +")"
+ else :
+ str_valeur=str(valeur)
self.LBValeurs.insertItem(index,str_valeur)
item=self.LBValeurs.item(index)
item.setSelected(1)
if len(liste)%self.nbValeurs != 0 :
texte="Nombre de valeur incorrecte"
#self.Commentaire.setText(texte)
- self.editor.affiche_infos(texte)
+ self.editor.affiche_infos(texte,Qt.red)
return
listeDecoupee=self.DecoupeListeValeurs(liste)
for vals in listeDecoupee :
class MonFormulePanel(DFormule,QTPanelTBW2):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonFormulePanel"
test,erreur = self.node.item.verif_nom(nomFormule)
if test :
commentaire=nomFormule+" est un nom valide pour une FORMULE"
+ self.editor.affiche_infos(commentaire)
else :
commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def argsSaisis(self):
arguments = str(self.LENomsArgs.text())
if arguments == '' : return
-
test,erreur = self.node.item.verif_arguments(arguments)
if test:
commentaire="Argument(s) valide(s) pour une FORMULE"
+ self.editor.affiche_infos(commentaire)
else:
commentaire="Argument(s) invalide(s) pour une FORMULE"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def FormuleSaisie(self):
nomFormule = str(self.LENomFormule.text())
if test:
commentaire="Corps de FORMULE valide"
+ self.editor.affiche_infos(commentaire)
else:
commentaire="Corps de FORMULE invalide"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def BOkPressedFormule(self):
nomFormule = str(self.LENomFormule.text())
test,erreur = self.node.item.verif_nom(nomFormule)
if not test :
- self.editor.affiche_infos(erreur)
+ self.editor.affiche_infos(erreur,Qt.red)
return
arguments = str(self.LENomsArgs.text())
test,erreur = self.node.item.verif_arguments(arguments)
if not test :
- self.editor.affiche_infos(erreur)
+ self.editor.affiche_infos(erreur,Qt.red)
return
expression = str(self.LECorpsFormule.text())
test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
if not test :
- self.editor.affiche_infos(erreur)
+ self.editor.affiche_infos(erreur,Qt.red)
return
test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression))
#self.node.update_node()
self.node.onValid()
self.node.update_valid()
- commentaire = "Formule modifiée"
+ commentaire = "Formule modifiée"
+ self.editor.affiche_infos(commentaire)
else:
commentaire ="Formule incorrecte : " + erreur
+ self.editor.affiche_infos(commentaire,Qt.red)
self.editor.init_modif()
- self.editor.affiche_infos(commentaire)
class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonIncludePanel"
nomFichier=str(self.LENomFichier.text())
if not os.path.isfile(nomFichier) :
commentaire = "Fichier introuvable"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return
text=self.convert_file(nomFichier)
try :
self.node.item.object.change_fichier_init(nomFichier,text)
commentaire = "Fichier modifie : " + self.node.item.get_nom()
- self.Commentaire.setText(QString(commentaire))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
self.editor.affiche_infos(commentaire)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
commentaire = "Fichier invalide"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return
p.readfile(file)
text=p.convert('execnoparseur')
else :
- commentaire = "Impossible de lire le fichier : Format inconnu"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ commentaire = "Impossible de lire le fichier : Format inconnu"
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return text
return
fn = os.path.abspath((unicode(fn)))
+ ulfile = os.path.abspath(unicode(fn))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.LENomFichier.setText(fn)
self.LENomFichReturnPressed()
self.dictListe[QString(repr(param))] = param
def LBParamItemPressed(self):
+ #print self.LBParam.selectedItems()
+ if self.LBParam.selectedItems()== None : return
i=self.LBParam.selectedItems()[0].text()
self.panel.Ajout1Valeur(self.dictListe[i])
+
+ def on_BOk_clicked(self):
+ self.LBParamItemPressed()
+ self.close()
def connecterSignaux(self):
self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked)
-
def BAjoutClicked(self):
self.node.treeParent.append_child(self.node.item.get_nom())
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desMatrice import Ui_desMatrice
+
+
+class MonMatricePanel(Ui_desMatrice,QDialog):
+ """
+ Classe définissant le panel Matrice
+ Attention n herite pas de QtPanel
+ """
+ def __init__(self,node, parent = None,name = None,fl = 0):
+ QDialog.__init__(self,parent)
+ self.node=node
+ self.editor = parent
+ self.nbLigs=0
+ self.nbCols=0
+ self.monType= self.node.item.object.definition.type[0]
+ if hasattr(parent,"leLayout"):
+ parent.leLayout.removeWidget(parent.leLayout.widgetActive)
+ parent.leLayout.widgetActive.close()
+ parent.leLayout.addWidget(self)
+ parent.leLayout.widgetActive=self
+ else:
+ parent.partieDroite=QWidget()
+ parent.leLayout=QGridLayout(parent.partieDroite)
+ parent.leLayout.addWidget(self)
+ parent.addWidget(parent.partieDroite)
+ parent.leLayout.widgetActive=self
+ self.setupUi(self)
+ self.initVal()
+ self.creeColonnes()
+ self.connecterSignaux()
+ if self.node.item.get_valeur()== None:
+ self.initialSsValeur()
+ else :
+ try :
+ self.initialValeur()
+ except :
+ self.initialSsValeur()
+
+ def initVal(self):
+ self.nomVariables={}
+
+ def connecterSignaux(self) :
+ self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged)
+ self.connect(self.BOk,SIGNAL("clicked()"),self.acceptVal)
+
+ def itemChanged(self):
+ monItem=self.TBMatrice.currentItem()
+ if monItem==None : return
+ texte=monItem.text()
+ if texte=="" : return
+ val,ok=texte.toDouble()
+ if ok == False :
+ self.editor.affiche_infos("Entrer un float SVP",Qt.red)
+ monItem.setText("")
+ return
+ if self.monType.valSup != None :
+ if val > self.monType.valSup :
+ self.editor.affiche_infos("Entrer un float inférieur à " + repr(self.monType.valSup),Qt.red)
+ monItem.setText("")
+ return
+ if self.monType.valMin != None :
+ if val < self.monType.valMin :
+ self.editor.affiche_infos("Entrer un float superieur à " + repr(self.monType.valMin),Qt.red)
+ monItem.setText("")
+ return
+ self.editor.affiche_infos("")
+ if self.monType.structure != None:
+ apply (MonMatricePanel.__dict__[self.monType.structure],(self,))
+
+
+ def symetrique(self):
+ monItem=self.TBMatrice.currentItem()
+ texte=monItem.text()
+ if monItem.row() != monItem.column():
+ monItemSym=self.TBMatrice.item(monItem.column(), monItem.row())
+ monItemSym.setText(texte)
+
+ def creeColonnes(self):
+ if self.monType.methodeCalculTaille != None :
+ #try:
+ if 1 :
+ apply (MonMatricePanel.__dict__[self.monType.methodeCalculTaille],(self,))
+ else :
+ #except :
+ QMessageBox.critical( self, "Mauvaise execution ", "impossible d executer la méthode " + monType.methodeCalculTaille )
+ return
+ else :
+ self.nbLigs=self.monType.nbLigs
+ self.nbCols=self.monType.nbCols
+
+
+ def NbDeVariables(self):
+ jdc=self.node.item.object.jdc
+ etape=self.node.item.object.etape
+ self.listeVariables=jdc.get_variables(etape)
+ if self.listeVariables == [] :
+ QMessageBox.critical( self, "Mauvaise Commande ", "Aucune variable connue")
+ return
+ self.TBMatrice.setColumnCount(len(self.listeVariables))
+ self.TBMatrice.setRowCount(len(self.listeVariables))
+ self.nbLigs=len(self.listeVariables)
+ self.nbCols=len(self.listeVariables)
+
+ def initialSsValeur(self):
+ for row in range(self.nbLigs):
+ for column in range(self.nbCols):
+ if row == column :
+ initialFloat=1
+ else :
+ initialFloat=0
+ self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
+ header=QStringList()
+ for var in self.listeVariables :
+ header << var
+ self.TBMatrice.setVerticalHeaderLabels(header)
+ self.TBMatrice.setHorizontalHeaderLabels(header)
+
+ def initialValeur(self):
+ liste=self.node.item.get_valeur()
+ dejaAffiche=0
+ if (len(liste)) != self.nbLigs +1 :
+ QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
+ dejaAffiche=1
+ for i in range(self.nbLigs):
+ inter=liste[i+1]
+ if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) :
+ QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
+ dejaAffiche=1
+ for j in range(self.nbCols):
+ self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j])))
+ header=QStringList()
+ for var in liste[0]:
+ header << var
+ self.TBMatrice.setVerticalHeaderLabels(header)
+ self.TBMatrice.setHorizontalHeaderLabels(header)
+
+ def acceptVal(self):
+ liste=[]
+ liste.append(self.listeVariables)
+ if self.TBMatrice.rowCount() != self.nbLigs :
+ QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
+ if self.TBMatrice.columnCount() != self.nbCols :
+ QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
+ for i in range(self.nbLigs):
+ listeCol=[]
+ for j in range(self.nbCols):
+ monItem=self.TBMatrice.item(i,j)
+ texte=monItem.text()
+ val,ok=texte.toDouble()
+ if ok == False :
+ QMessageBox.critical( self, "Mauvaise Valeur", "l element " + str(i) + "," +str(j) +"n est pas correct")
+ listeCol.append(val)
+ liste.append(listeCol)
+ # on ajoute l ordre des variables aux valeurs
+ self.node.item.set_valeur(liste)
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os, re
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from OptionsEditeur import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.setModal(modal)
+
+class Options(desOptions):
+ def __init__(self,parent = None,modal = 0,configuration=None):
+ desOptions.__init__(self,parent,modal)
+ self.configuration=configuration
+ self.viewMan=parent
+ self.dVersion={}
+ self.dRepMat={}
+ self.dRepCat={}
+ self.connecterSignaux()
+ self.initAll()
+
+ def connecterSignaux(self) :
+ self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+ self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+ self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+ self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+ self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+ self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+ self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+ self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+ self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+ def initAll(self):
+ self.CBVersions.clear()
+ for item in self.configuration.catalogues :
+ try :
+ (code,version,cata,format,defaut)=item
+ except :
+ (code,version,cata,format)=item
+ self.dVersion[version]=(item)
+ self.dRepCat[version]=str(cata)
+ self.CBVersions.addItem(QString(version))
+
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ rep_mat=getattr(self.configuration,chaine)
+ self.dRepMat[version]=str(rep_mat)
+ else :
+ self.dRepMat[version]=""
+ self.LERepMat.setText(self.dRepMat[version])
+ self.LERepCata.setText(self.dRepCat[version])
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ if self.dRepMat.has_key(version):
+ self.LERepMat.setText(self.dRepMat[version])
+ if self.dRepCat.has_key(version):
+ self.LERepCata.setText(self.dRepCat[version])
+
+ def BokClicked(self):
+ version=str(self.CBVersions.currentText())
+ if self.LERepCata.text() == "" :
+ QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue doit etre rempli" )
+ return
+
+ self.dRepMat[version]=self.LERepMat.text()
+ if str(self.dRepMat[version] != "") != "" :
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ setattr(self.configuration,chaine,self.dRepMat[version])
+
+ self.dRepCat[version]=str(self.LERepCata.text())
+ if version in self.dVersion.keys():
+ item=list(self.dVersion[version])
+ item[2]=self.dRepCat[version]
+ self.dVersion[version]=tuple(item)
+ else :
+ self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python')
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+
+ def AjoutVersion(self):
+ version=self.LEVersionAjout.text()
+ if str(version) == "" : return
+ self.CBVersions.addItem(version)
+ self.LERepMat.setText("")
+ self.LERepCata.setText("")
+ self.LEVersionAjout.setText("")
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+ def SupVersion(self):
+ version=str(self.LEVersionSup.text())
+ if version == "" : return
+ i =0
+ while i < self.CBVersions.count() :
+ if self.CBVersions.itemText(i) == version :
+ self.CBVersions.removeItem(i)
+ break
+ i=i+1
+ try :
+ del self.dVersion[version]
+ del self.dRepMat[version]
+ del self.dRepCat[version]
+ except :
+ self.LEVersionSup.setText("")
+ return
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ delattr(self.configuration,chaine)
+ self.LEVersionSup.setText("")
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.LERepMat.setText("")
+ self.LERepCata.setText("")
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+ self.CBVersions.setCurrentIndex(0)
+ self.VersionChoisie()
+
+
+ def BdefautChecked(self):
+ res = QMessageBox.warning(
+ None,
+ self.trUtf8("Restauration des parametres par defaut "),
+ self.trUtf8("Votre fichier editeur sera ecrase."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ self.Bdefaut.setCheckState(Qt.Unchecked)
+ if res == 1 : return
+
+ appli=self.configuration.appli
+ fic_ini_util=self.configuration.fic_ini_utilisateur
+ old_fic_ini_util=fic_ini_util+"_old"
+ commande="mv "+fic_ini_util+" "+old_fic_ini_util
+ os.system(commande)
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ repIni=prefsCode.REPINI
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
+
+ configNew=configuration.CONFIG(appli,repIni)
+ self.configuration=configNew
+ appli.CONFIGURATION=configNew
+ self.configuration.save_params()
+ self.dVersion={}
+ self.dRepMat={}
+ self.dRepCat={}
+ self.initAll()
+
+ def ChangePathDoc(self):
+ self.configuration.path_doc=str(self.LERepDoc.text())
+ self.configuration.save_params()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from OptionsCuve import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.setModal(modal)
+
+class Options(desOptions):
+ def __init__(self,parent = None,modal = 0,configuration=None):
+ desOptions.__init__(self,parent,modal)
+ self.configuration=configuration
+ self.viewMan=parent
+ self.dVersion={}
+ self.dRepCat={}
+ self.connecterSignaux()
+ self.initAll()
+
+ def connecterSignaux(self) :
+ self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+ self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+ self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+ self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+ self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+ self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+ self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+ self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+ self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+ self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+ self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+ def initAll(self):
+ self.CBVersions.clear()
+ for item in self.configuration.catalogues :
+ try :
+ (code,version,cata,format,defaut)=item
+ except :
+ (code,version,cata,format)=item
+ self.dVersion[version]=(item)
+ self.dRepCat[version]=str(cata)
+ self.CBVersions.addItem(QString(version))
+ self.LERepCata.setText(self.dRepCat[version])
+
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+
+
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ if self.dRepCat.has_key(version):
+ self.LERepCata.setText(self.dRepCat[version])
+
+ def BokClicked(self):
+ version=str(self.CBVersions.currentText())
+ if self.LERepCata.text() == "" :
+ QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue doit etre rempli" )
+ return
+ if not os.path.isfile(self.LERepCata.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Fichier Catalogue "),
+ self.trUtf8("Le Fichier n existe pas. Voulez-vous supprimer cette version ?"),
+ self.trUtf8("&Oui"),
+ self.trUtf8("&Non"))
+ if res == 0 :
+ self.LEVersionSup.setText(version)
+ self.SupVersion()
+ return
+
+ self.dRepCat[version]=str(self.LERepCata.text())
+ if version in self.dVersion.keys():
+ item=list(self.dVersion[version])
+ item[2]=self.dRepCat[version]
+ self.dVersion[version]=tuple(item)
+ else :
+ import prefs
+ code=prefs.code
+ self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+
+ def AjoutVersion(self):
+ version=self.LEVersionAjout.text()
+ if str(version) == "" : return
+ self.CBVersions.addItem(version)
+ self.LERepCata.setText("")
+ self.LEVersionAjout.setText("")
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+ def SupVersion(self):
+ version=str(self.LEVersionSup.text())
+ if version == "" : return
+ i =0
+ while i < self.CBVersions.count() :
+ if self.CBVersions.itemText(i) == version :
+ self.CBVersions.removeItem(i)
+ break
+ i=i+1
+ try :
+ del self.dVersion[version]
+ del self.dRepCat[version]
+ except :
+ self.LEVersionSup.setText("")
+ try :
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+ self.VersionChoisie()
+ except :
+ pass
+ return
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ delattr(self.configuration,chaine)
+ self.LEVersionSup.setText("")
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.LERepCata.setText("")
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+ self.CBVersions.setCurrentIndex(0)
+ self.VersionChoisie()
+
+
+ def BdefautChecked(self):
+ res = QMessageBox.warning( None,
+ self.trUtf8("Restauration des parametres par defaut "),
+ self.trUtf8("Votre fichier editeur sera ecrase."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ self.Bdefaut.setCheckState(Qt.Unchecked)
+ if res == 1 : return
+
+ appli=self.configuration.appli
+ fic_ini_util=self.configuration.fic_ini_utilisateur
+ old_fic_ini_util=fic_ini_util+"_old"
+ commande="mv "+fic_ini_util+" "+old_fic_ini_util
+ os.system(commande)
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ repIni=prefsCode.REPINI
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
+
+ configNew=configuration.CONFIG(appli,repIni)
+ self.configuration=configNew
+ appli.CONFIGURATION=configNew
+ self.configuration.save_params()
+ self.dVersion={}
+ self.dRepCat={}
+ self.initAll()
+
+ def ChangePathDoc(self):
+ if self.LERepDoc.text()=="" : return
+ if not os.path.isdir(self.LERepDoc.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire de Documentation "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ return
+
+ self.configuration.path_doc=str(self.LERepDoc.text())
+ self.configuration.save_params()
+
+
+ def ChangeSaveDir(self):
+ if not os.path.isdir(self.LESaveDir.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire De Sauvegarde "),
+ self.trUtf8("Le Repertoire " + self.LESaveDir.text() +" n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+ self.configuration.savedir=str(self.LESaveDir.text())
+ self.configuration.save_params()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from OptionsMAP import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.setModal(modal)
+
+class Options(desOptions):
+ def __init__(self,parent = None,modal = 0,configuration=None):
+ desOptions.__init__(self,parent,modal)
+ self.configuration=configuration
+ self.viewMan=parent
+ self.dVersion={}
+ self.dRepCat={}
+ self.connecterSignaux()
+ self.initAll()
+
+ def connecterSignaux(self) :
+ self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+ self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+ self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+ self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+ self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+ self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+ self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+ self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+ self.connect(self.LERepMAP,SIGNAL("returnPressed()"),self.ChangePathMAP)
+ self.connect(self.LERepAster,SIGNAL("returnPressed()"),self.ChangePathAster)
+ self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+ self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+ self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+ self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+ def initAll(self):
+ self.CBVersions.clear()
+ for item in self.configuration.catalogues :
+ (code,ssCode,cata,formatOut,formatIn)=item
+ self.dVersion[ssCode]=(item)
+ self.dRepCat[ssCode]=str(cata)
+ self.CBVersions.addItem(QString(ssCode))
+ self.LERepCata.setText(self.dRepCat[str(self.CBVersions.currentText())])
+
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+ if hasattr(self.configuration,"PATH_MAP"):
+ self.LERepMAP.setText(self.configuration.PATH_MAP)
+ if hasattr(self.configuration,"PATH_ASTER"):
+ self.LERepAster.setText(self.configuration.PATH_ASTER)
+
+ def ChangePathMAP(self):
+ if self.LERepMAP.text()=="" : return
+ if not os.path.isdir(self.LERepMAP.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire MAP "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"PATH_MAP"):
+ self.LERepAster.setText(self.configuration.PATH_MAP)
+ return
+ self.configuration.PATH_MAP=str(self.LERepMAP.text())
+ self.configuration.PATH_PYGMEE=self.configuration.PATH_MAP+"/components/pygmee_v1"
+ self.configuration.PATH_BENHUR=self.configuration.PATH_MAP+"/components/benhur"
+ self.configuration.PATH_FDVGRID=self.configuration.PATH_MAP+"components/fdvgrid/ther2d/bin"
+ self.configuration.PATH_MODULE=self.configuration.PATH_MODULE+"components/fdvgrid/ther2d/bin"
+ self.configuration.save_params()
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ pass
+
+ def ChangePathAster(self):
+ if self.LERepAster.text()=="" : return
+ if not os.path.isdir(self.LERepAster.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Aster "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"PATH_ASTER"):
+ self.LERepAster.setText(self.configuration.PATH_ASTER)
+ return
+ self.configuration.PATH_ASTER=str(self.LERepAster.text())
+ self.configuration.save_params()
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ if self.dRepCat.has_key(version):
+ self.LERepCata.setText(self.dRepCat[version])
+
+ def BokClicked(self):
+ version=str(self.CBVersions.currentText())
+ if self.LERepCata.text() == "" :
+ QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue doit etre rempli" )
+ return
+ if not os.path.isfile(self.LERepCata.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Fichier Catalogue "),
+ self.trUtf8("Le Fichier n existe pas. Voulez-vous supprimer cette version ?"),
+ self.trUtf8("&Oui"),
+ self.trUtf8("&Non"))
+ if res == 0 :
+ self.LEVersionSup.setText(version)
+ self.SupVersion()
+ return
+
+ self.dRepCat[version]=str(self.LERepCata.text())
+ if version in self.dVersion.keys():
+ item=list(self.dVersion[version])
+ item[2]=self.dRepCat[version]
+ self.dVersion[version]=tuple(item)
+ else :
+ import prefs
+ code=prefs.code
+ self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+
+ def AjoutVersion(self):
+ version=self.LEVersionAjout.text()
+ if str(version) == "" : return
+ self.CBVersions.addItem(version)
+ self.LERepCata.setText("")
+ self.LEVersionAjout.setText("")
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+ def SupVersion(self):
+ version=str(self.LEVersionSup.text())
+ if version == "" : return
+ i =0
+ while i < self.CBVersions.count() :
+ if self.CBVersions.itemText(i) == version :
+ self.CBVersions.removeItem(i)
+ break
+ i=i+1
+ try :
+ del self.dVersion[version]
+ del self.dRepCat[version]
+ except :
+ self.LEVersionSup.setText("")
+ try :
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+ self.VersionChoisie()
+ except :
+ pass
+ return
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ delattr(self.configuration,chaine)
+ self.LEVersionSup.setText("")
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.LERepCata.setText("")
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+ self.CBVersions.setCurrentIndex(0)
+ self.VersionChoisie()
+
+
+ def BdefautChecked(self):
+ res = QMessageBox.warning( None,
+ self.trUtf8("Restauration des parametres par defaut "),
+ self.trUtf8("Votre fichier editeur sera ecrase."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ self.Bdefaut.setCheckState(Qt.Unchecked)
+ if res == 1 : return
+
+ appli=self.configuration.appli
+ fic_ini_util=self.configuration.fic_ini_utilisateur
+ old_fic_ini_util=fic_ini_util+"_old"
+ commande="mv "+fic_ini_util+" "+old_fic_ini_util
+ os.system(commande)
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ repIni=prefsCode.REPINI
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
+
+ configNew=configuration.CONFIG(appli,repIni)
+ self.configuration=configNew
+ appli.CONFIGURATION=configNew
+ self.configuration.save_params()
+ self.dVersion={}
+ self.dRepCat={}
+ self.initAll()
+
+ def ChangePathDoc(self):
+ if self.LERepDoc.text()=="" : return
+ if not os.path.isdir(self.LERepDoc.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire de Documentation "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ return
+
+ self.configuration.path_doc=str(self.LERepDoc.text())
+ self.configuration.save_params()
+
+ def ChangePathOT(self):
+ if not os.path.isdir(self.LERepOT.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ return
+
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ sys.path.remove(self.configuration.OpenTURNS_path)
+ self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+ self.configuration.save_params()
+ if self.configuration.OpenTURNS_path == "" : return
+ sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+ def ChangeSaveDir(self):
+ if not os.path.isdir(self.LESaveDir.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+ self.configuration.savedir=str(self.LESaveDir.text())
+ self.configuration.save_params()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from OptionsOT import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.setModal(modal)
+
+class Options(desOptions):
+ def __init__(self,parent = None,modal = 0,configuration=None):
+ desOptions.__init__(self,parent,modal)
+ self.configuration=configuration
+ self.viewMan=parent
+ self.dVersion={}
+ self.dRepCat={}
+ self.connecterSignaux()
+ self.initAll()
+
+ def connecterSignaux(self) :
+ self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+ self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+ self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+ self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+ self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+ self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+ self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+ self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+ self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+ self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+ self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+ self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+ def initAll(self):
+ self.CBVersions.clear()
+ for item in self.configuration.catalogues :
+ try :
+ (code,version,cata,format,defaut)=item
+ except :
+ (code,version,cata,format)=item
+ self.dVersion[version]=(item)
+ self.dRepCat[version]=str(cata)
+ self.CBVersions.addItem(QString(version))
+ self.LERepCata.setText(self.dRepCat[version])
+
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+
+
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ if self.dRepCat.has_key(version):
+ self.LERepCata.setText(self.dRepCat[version])
+
+ def BokClicked(self):
+ version=str(self.CBVersions.currentText())
+ if self.LERepCata.text() == "" :
+ QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue doit etre rempli" )
+ return
+ if not os.path.isfile(self.LERepCata.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Fichier Catalogue "),
+ self.trUtf8("Le Fichier n existe pas. Voulez-vous supprimer cette version ?"),
+ self.trUtf8("&Oui"),
+ self.trUtf8("&Non"))
+ if res == 0 :
+ self.LEVersionSup.setText(version)
+ self.SupVersion()
+ return
+
+ self.dRepCat[version]=str(self.LERepCata.text())
+ if version in self.dVersion.keys():
+ item=list(self.dVersion[version])
+ item[2]=self.dRepCat[version]
+ self.dVersion[version]=tuple(item)
+ else :
+ import prefs
+ code=prefs.code
+ self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+
+ def AjoutVersion(self):
+ version=self.LEVersionAjout.text()
+ if str(version) == "" : return
+ self.CBVersions.addItem(version)
+ self.LERepCata.setText("")
+ self.LEVersionAjout.setText("")
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+ def SupVersion(self):
+ version=str(self.LEVersionSup.text())
+ if version == "" : return
+ i =0
+ while i < self.CBVersions.count() :
+ if self.CBVersions.itemText(i) == version :
+ self.CBVersions.removeItem(i)
+ break
+ i=i+1
+ try :
+ del self.dVersion[version]
+ del self.dRepCat[version]
+ except :
+ self.LEVersionSup.setText("")
+ try :
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+ self.VersionChoisie()
+ except :
+ pass
+ return
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ delattr(self.configuration,chaine)
+ self.LEVersionSup.setText("")
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.LERepCata.setText("")
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+ self.CBVersions.setCurrentIndex(0)
+ self.VersionChoisie()
+
+
+ def BdefautChecked(self):
+ res = QMessageBox.warning( None,
+ self.trUtf8("Restauration des parametres par defaut "),
+ self.trUtf8("Votre fichier editeur sera ecrase."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ self.Bdefaut.setCheckState(Qt.Unchecked)
+ if res == 1 : return
+
+ appli=self.configuration.appli
+ fic_ini_util=self.configuration.fic_ini_utilisateur
+ old_fic_ini_util=fic_ini_util+"_old"
+ commande="mv "+fic_ini_util+" "+old_fic_ini_util
+ os.system(commande)
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ repIni=prefsCode.REPINI
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
+
+ configNew=configuration.CONFIG(appli,repIni)
+ self.configuration=configNew
+ appli.CONFIGURATION=configNew
+ self.configuration.save_params()
+ self.dVersion={}
+ self.dRepCat={}
+ self.initAll()
+
+ def ChangePathDoc(self):
+ if self.LERepDoc.text()=="" : return
+ if not os.path.isdir(self.LERepDoc.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire de Documentation "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ return
+
+ self.configuration.path_doc=str(self.LERepDoc.text())
+ self.configuration.save_params()
+
+ def ChangePathOT(self):
+ if not os.path.isdir(self.LERepOT.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ return
+
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ sys.path.remove(self.configuration.OpenTURNS_path)
+ self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+ self.configuration.save_params()
+ if self.configuration.OpenTURNS_path == "" : return
+ sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+ def ChangeSaveDir(self):
+ if not os.path.isdir(self.LESaveDir.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+ self.configuration.savedir=str(self.LESaveDir.text())
+ self.configuration.save_params()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from OptionsOT import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+ def __init__(self,parent ,modal ) :
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.setModal(modal)
+
+class Options(desOptions):
+ def __init__(self,parent = None,modal = 0,configuration=None):
+ desOptions.__init__(self,parent,modal)
+ self.configuration=configuration
+ self.viewMan=parent
+ self.dVersion={}
+ self.dRepCat={}
+ self.connecterSignaux()
+ self.initAll()
+
+ def connecterSignaux(self) :
+ self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+ self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+ self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+ self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+ self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+ self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+ self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+ self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+ self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+ self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+ self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+ self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+ def initAll(self):
+ self.CBVersions.clear()
+ for item in self.configuration.catalogues :
+ try :
+ (code,version,cata,format,defaut)=item
+ except :
+ (code,version,cata,format)=item
+ self.dVersion[version]=(item)
+ self.dRepCat[version]=str(cata)
+ self.CBVersions.addItem(QString(version))
+ self.LERepCata.setText(self.dRepCat[version])
+
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+
+
+
+ def VersionChoisie(self):
+ version=str(self.CBVersions.currentText())
+ if self.dRepCat.has_key(version):
+ self.LERepCata.setText(self.dRepCat[version])
+
+ def BokClicked(self):
+ version=str(self.CBVersions.currentText())
+ if self.LERepCata.text() == "" :
+ QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue doit etre rempli" )
+ return
+ if not os.path.isfile(self.LERepCata.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Fichier Catalogue "),
+ self.trUtf8("Le Fichier n existe pas. Voulez-vous supprimer cette version ?"),
+ self.trUtf8("&Oui"),
+ self.trUtf8("&Non"))
+ if res == 0 :
+ self.LEVersionSup.setText(version)
+ self.SupVersion()
+ return
+
+ self.dRepCat[version]=str(self.LERepCata.text())
+ if version in self.dVersion.keys():
+ item=list(self.dVersion[version])
+ item[2]=self.dRepCat[version]
+ self.dVersion[version]=tuple(item)
+ else :
+ import prefs
+ code=prefs.code
+ self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+
+ def AjoutVersion(self):
+ version=self.LEVersionAjout.text()
+ if str(version) == "" : return
+ self.CBVersions.addItem(version)
+ self.LERepCata.setText("")
+ self.LEVersionAjout.setText("")
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+ def SupVersion(self):
+ version=str(self.LEVersionSup.text())
+ if version == "" : return
+ i =0
+ while i < self.CBVersions.count() :
+ if self.CBVersions.itemText(i) == version :
+ self.CBVersions.removeItem(i)
+ break
+ i=i+1
+ try :
+ del self.dVersion[version]
+ del self.dRepCat[version]
+ except :
+ self.LEVersionSup.setText("")
+ try :
+ self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+ self.VersionChoisie()
+ except :
+ pass
+ return
+ codeSansPoint=re.sub("\.","",version)
+ chaine="rep_mat_"+codeSansPoint
+ if hasattr(self.configuration,chaine):
+ delattr(self.configuration,chaine)
+ self.LEVersionSup.setText("")
+
+ lItem=[]
+ for version in self.dVersion.keys() :
+ lItem.append(self.dVersion[version])
+ self.LERepCata.setText("")
+ self.configuration.catalogues=lItem
+ self.configuration.save_params()
+ self.CBVersions.setCurrentIndex(0)
+ self.VersionChoisie()
+
+
+ def BdefautChecked(self):
+ res = QMessageBox.warning( None,
+ self.trUtf8("Restauration des parametres par defaut "),
+ self.trUtf8("Votre fichier editeur sera ecrase."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ self.Bdefaut.setCheckState(Qt.Unchecked)
+ if res == 1 : return
+
+ appli=self.configuration.appli
+ fic_ini_util=self.configuration.fic_ini_utilisateur
+ old_fic_ini_util=fic_ini_util+"_old"
+ commande="mv "+fic_ini_util+" "+old_fic_ini_util
+ os.system(commande)
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ repIni=prefsCode.REPINI
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
+
+ configNew=configuration.CONFIG(appli,repIni)
+ self.configuration=configNew
+ appli.CONFIGURATION=configNew
+ self.configuration.save_params()
+ self.dVersion={}
+ self.dRepCat={}
+ self.initAll()
+
+ def ChangePathDoc(self):
+ if self.LERepDoc.text()=="" : return
+ if not os.path.isdir(self.LERepDoc.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire de Documentation "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"path_doc"):
+ self.LERepDoc.setText(self.configuration.path_doc)
+ return
+
+ self.configuration.path_doc=str(self.LERepDoc.text())
+ self.configuration.save_params()
+
+ def ChangePathOT(self):
+ if not os.path.isdir(self.LERepOT.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ self.LERepOT.setText(self.configuration.OpenTURNS_path)
+ return
+
+ if hasattr(self.configuration,"OpenTURNS_path"):
+ sys.path.remove(self.configuration.OpenTURNS_path)
+ self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+ self.configuration.save_params()
+ if self.configuration.OpenTURNS_path == "" : return
+ sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+ def ChangeSaveDir(self):
+ if not os.path.isdir(self.LESaveDir.text()) :
+ res = QMessageBox.warning( None,
+ self.trUtf8("Repertoire Open TURNS "),
+ self.trUtf8("Le Repertoire n existe pas."),
+ self.trUtf8("&Ok"),
+ self.trUtf8("&Abandonner"))
+ if res == 1 :
+ if hasattr(self.configuration,"savedir"):
+ self.LESaveDir.setText(self.configuration.savedir)
+ self.configuration.savedir=str(self.LESaveDir.text())
+ self.configuration.save_params()
+
QTPanelTBW2.__init__(self,node,parent)
self.InitLEs()
self.connecterSignaux()
+ self.lineEditNom.setFocus()
def connecterSignaux(self) :
self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
- self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+ self.connect(self.bOk,SIGNAL("clicked()"),self.BOkParamPressed)
self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommandChanged)
self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommandChanged)
self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed)
- self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed)
+ self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkParamPressed)
def InitLEs(self):
nom=self.node.item.get_nom()
if commentaire == None :
commentaire="Entrer un nom de parametre"
self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return
- if not val :
+ if str(val) == "" :
return
self.node.item.set_nom(nom)
self.node.item.set_valeur(val)
self.node.update_texte()
+ self.node.update_node_valid()
self.editor.init_modif()
self.InitLEs()
self.Commentaire.setText(QString(""))
commentaire="Valeur incorrecte"
qtVal=self.lineEditVal.text()
+ valString=str(self.lineEditVal.text())
+ if (valString.find(' ') > -1) or (valString.find(',') > -1) :
+ commentaire="Valeur incorrecte"
+ self.Commentaire.setText(QString(commentaire))
+ self.editor.affiche_infos(commentaire,Qt.red)
+ return None
boul=2
try :
val,boul=QString.toInt(qtVal)
+ if boul : valString=val
except :
pass
if boul == 0 :
try :
val,boul=QString.toDouble(qtVal)
+ if boul : valString=val
except :
pass
if boul == 0 :
except :
pass
if boul: commentaire="Valeur correcte"
- valString=str(self.lineEditVal.text())
- self.Commentaire.setText(QString(commentaire))
- if (valString.find(' ') > -1) or (valString.find(',') > -1) :
- commentaire="Valeur incorrecte"
- self.Commentaire.setText(QString(commentaire))
- return None
self.Commentaire.setText(QString(commentaire))
+ self.editor.affiche_infos(commentaire)
return valString
def LENomPressed(self):
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desPixmap import Ui_LabelPixmap
+from PyQt4 import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+# Import des panels
+
+class MonLabelPixmap(Ui_LabelPixmap,QtGui.QDialog):
+ """
+ classe servant a afficher le PDF d une loi pour Openturns
+ """
+ def __init__(self, QWparent , fichier, name):
+ QtGui.QDialog.__init__(self,QWparent)
+ self.fichier = fichier
+ self.setModal(False)
+ self.setupUi(self)
+ self.setWindowTitle("PDF de la loi '%s'" % name)
+ self.labelPix.setPixmap(QPixmap(fichier));
+
+
+ def on_buttonCancel_clicked(self):
+ QDialog.reject(self)
+
+ def closeEvent(self,event):
+ import os
+ os.system("rm -f %s" % self.fichier)
class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonPlusieursASSDPanel"
def BOkPourListePressed(self):
if self.listeValeursCourantes == [] :
- self.editor.affiche_infos("Pas de Validation d un groupe vide")
+ self.editor.affiche_infos("Pas de Validation d un groupe vide",Qt.red)
return
self.node.item.set_valeur(self.listeValeursCourantes)
- self.editor.affiche_infos("Valeur Acceptée")
+ self.editor.affiche_infos("Valeur Acceptée")
pass
validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
self.Commentaire.setText(comm2)
if not validite :
- self.editor.affiche_infos(comm)
+ self.editor.affiche_infos(comm,Qt.red)
else:
l1=self.listeValeursCourantes[:index]
l3=self.listeValeursCourantes[index:]
parent.addWidget(parent.partieDroite)
parent.leLayout.widgetActive=self
self.setupUi(self)
+ self.appliEficas=parent.appliEficas
+ self.RepIcon=parent.appliEficas.RepIcon
+ icon = QIcon(self.RepIcon+"/arrow_left.png")
+ self.BAjout1Val.setIcon(icon)
+ icon2 = QIcon(self.RepIcon+"/arrow_right.png")
+ self.BSup1Val.setIcon(icon2)
# Import des panels
class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonPlusieursBasePanel"
self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed)
self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed)
+ self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
def detruitBouton(self):
+ icon3 = QIcon(self.RepIcon+"/image240.png")
+ self.BSalome.setIcon(icon3)
mc = self.node.item.get_definition()
type = mc.type[0]
if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
def BOkPourListePressed(self):
self.editor.init_modif()
if self.listeValeursCourantes == [] :
- self.editor.affiche_infos("Aucune Valeur")
+ self.editor.affiche_infos("Aucune Valeur",Qt.red)
return
self.node.item.set_valeur(self.listeValeursCourantes)
- self.editor.affiche_infos("Valeur Acceptée")
+ self.editor.affiche_infos("Valeur Acceptée")
def BParametresPressed(self):
for valeur in self.listeValeursCourantes :
if i != index : listeVal.append(valeur)
i = i+1
+ self.LBValeurs.setCurrentItem(self.LBValeurs.item(index -1))
self.listeValeursCourantes=listeVal
def Ajout1Valeur(self,valeur=None):
+ if valeur == None :
+ valeur=str(self.LEValeur.text())
+
liste,validite=SaisieValeur.TraiteLEValeur(self,valeur)
if validite == 0 : return
if liste ==[] : return
validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
self.Commentaire.setText(comm2)
if not validite :
- self.editor.affiche_infos(comm)
+ self.editor.affiche_infos(comm,Qt.red)
else:
self.LEValeur.setText(QString(""))
l1=self.listeValeursCourantes[:index]
l3=self.listeValeursCourantes[index:]
for valeur in listeRetour:
- self.LBValeurs.insertItem(index,QString(str(valeur)))
+ val=self.politique.GetValeurTexte(valeur)
+ self.LBValeurs.insertItem(index,QString(str(val)))
item=self.LBValeurs.item(index)
item.setSelected(1)
self.LBValeurs.setCurrentItem(item)
index=index+1
self.listeValeursCourantes=l1+listeRetour+l3
- self.editor.affiche_infos("Valeurs Ajoutées")
+ self.editor.affiche_infos("Valeurs Ajoutées")
def AjoutNValeur(self,liste) :
for val in liste :
- print val
self.Ajout1Valeur(val)
def BImportPressed(self):
init=QString( self.editor.CONFIGURATION.savedir)
fn = QFileDialog.getOpenFileName(self.node.appliEficas,
- self.node.appliEficas.trUtf8('Fichier de données'),
+ #self.node.appliEficas.trUtf8('Fichier de données'),
+ QApplication.translate('Eficas','Fichier de donnees',None, QApplication.UnicodeUTF8),
init,
self.trUtf8('All Files (*)',))
if fn == None : return
if fn == "" : return
+ ulfile = os.path.abspath(unicode(fn))
+ self.editor.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+
from monSelectVal import MonSelectVal
MonSelectVal(file=fn,parent=self).show()
def InitCommentaire(self):
commentaire=""
mc = self.node.item.get_definition()
- d_aides = { 'TXM' : 'chaînes de caractères',
- 'R' : 'réels',
+ d_aides = { 'TXM' : 'chaînes de caractères',
+ 'R' : 'réels',
'I' : 'entiers',
'C' : 'complexes'}
type = mc.type[0]
else :
commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max) +" " + d_aides[type]
aideval=self.node.item.aide()
- commentaire=commentaire + "\n" + aideval
- self.Commentaire.setText(QString(commentaire))
+ commentaire=commentaire + "\n" + QString.toUtf8(QString(aideval))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
def BSalomePressed(self):
+ self.LEValeur.setText(QString(""))
+ self.Commentaire.setText(QString(""))
genea=self.node.item.get_genealogie()
kwType = None
for e in genea:
if "GROUP_MA" in e: kwType = "GROUP_MA"
#print "BkwType",kwType
- #print "editor", self.editor
- selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+ selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
if commentaire !="" :
- self.Commentaire.setText(QString(commentaire))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
monTexte=""
if selection == [] : return
for geomElt in selection:
def BView2DPressed(self):
valeur=self.LEValeur.text()
if valeur == QString("") :
- valeur=self.LBValeurs.currentText()
+ if self.LBValeurs.currentItem() != None :
+ valeur=self.LBValeurs.currentItem().text()
if valeur == QString("") : return
valeur = str(valeur)
if valeur :
- ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+ ok, msgError = self.appliEficas.displayShape(valeur)
if not ok:
- self.editor.parent.appli.affiche_infos(msgError)
+ self.editor.affiche_infos(msgError,Qt.red)
class DPlusInto(Ui_DPlusInto,QDialog):
def __init__(self,parent ,modal ) :
QDialog.__init__(self,parent)
+ self.RepIcon=parent.appliEficas.RepIcon
if hasattr(parent,"leLayout"):
parent.leLayout.removeWidget(parent.leLayout.widgetActive)
parent.leLayout.widgetActive.close()
parent.addWidget(parent.partieDroite)
parent.leLayout.widgetActive=self
self.setupUi(self)
+ icon = QIcon(self.RepIcon+"/arrow_left.png")
+ self.BAjout1Val.setIcon(icon)
+ icon2 = QIcon(self.RepIcon+"/arrow_right.png")
+ self.BSup1Val.setIcon(icon2)
+
class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonPlusieursIntoPanel"
QTPanel.__init__(self,node,parent)
DPlusInto.__init__(self,parent,fl)
self.politique=PolitiquePlusieurs(node,parent)
+ self.InitCommentaire()
SaisieValeur.BuildLBValeurs(self)
self.listeValeursCourantes=self.node.item.GetListeValeurs()
SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
- self.InitCommentaire()
self.connecterSignaux()
def connecterSignaux(self) :
def BOkPourListePressed(self):
if self.listeValeursCourantes == [] :
- self.editor.affiche_infos("Pas de validation d un groupe vide")
+ self.editor.affiche_infos("Pas de validation d un groupe vide",Qt.red)
return
+ if hasattr(self.node.item.definition.validators,'verifie_liste'):
+ if self.node.item.definition.validators.verifie_liste(self.listeValeursCourantes) == 0 :
+ self.editor.affiche_infos("les valeurs ne sont pas correctes",Qt.red)
+ return
self.node.item.set_valeur(self.listeValeursCourantes)
- self.editor.affiche_infos("Valeur Acceptée")
+ self.editor.affiche_infos("Valeur Acceptée")
def Sup1Valeur(self):
for valeur in self.listeValeursCourantes :
if i != indexCourant : listeVal.append(valeur)
i = i+1
+ self.LBValeurs.setCurrentItem(self.LBValeurs.item(indexCourant -1))
self.listeValeursCourantes=listeVal
SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
self.Commentaire.setText(comm2)
if not validite :
- self.editor.affiche_infos(comm)
+ self.editor.affiche_infos(comm,Qt.red)
else:
l1=self.listeValeursCourantes[:index]
l3=self.listeValeursCourantes[index:]
def InitCommentaire(self):
commentaire=""
mc = self.node.item.get_definition()
- d_aides = { 'TXM' : 'chaînes de caractères',
- 'R' : 'réels',
+ d_aides = { 'TXM' : 'chaînes de caractères',
+ 'R' : 'réels',
'I' : 'entiers',
'C' : 'complexes'}
type = mc.type[0]
else :
commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type]
aideval=self.node.item.aide()
- commentaire=commentaire + "\n" + aideval
- self.Commentaire.setText(QString(commentaire))
+ commentaire=commentaire + "\n" + QString.toUtf8(QString(aideval))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
self.BBrowse.setMinimumSize(QtCore.QSize(140, 50))
self.BBrowse.setObjectName("BBrowse")
self.TWChoix.addTab(self.TabPage, "")
- self.gridlayout.addWidget(self.TWChoix, 0, 0, 1, 3)
self.BFichier.setText(QtGui.QApplication.translate("DPour", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8))
self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8))
self.appliEficas.CONFIGURATION.savedir,
self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
if not(fichier.isNull()):
+ ulfile = os.path.abspath(unicode(fichier))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.LENomFichier.setText(fichier)
self.LENomFichReturnPressed()
nomFichier=str(self.LENomFichier.text())
if not os.path.isfile(nomFichier) :
commentaire = "Fichier introuvable"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return
text=self.convert_file(nomFichier)
try :
self.node.item.object.change_fichier_init(nomFichier,text)
commentaire = "Fichier modifie : " + self.node.item.get_nom()
- self.Commentaire.setText(QString(commentaire))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
commentaire = "Fichier invalide"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return
text=p.convert('execnoparseur')
else :
commentaire = "Impossible de lire le fichier : Format inconnu"
- self.Commentaire.setText(QString(commentaire))
- self.editor.affiche_infos(commentaire)
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+ self.editor.affiche_infos(commentaire,Qt.red)
return text
self.connecterSignaux()
QTPanel.__init__(self,node,parent)
QTPanelTBW2.__init__(self,node,parent,racine=1)
- self.a=0
+ self.LEFiltre.setFocus()
+
def connecterSignaux(self):
self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
if name==QString(" "): return
if name.find("GROUPE :")==0 : return
self.editor.init_modif()
- print self.node.__class__
new_node = self.node.append_child(name,'first')
if val != '' and val != ' ' and val != self.separateur :
val=str(val)
try :
- val=eval(val,{})
+ val2=eval(val,{})
+ liste.append(val)
except :
pass
- liste.append(val)
self.FonctPanel.AjoutNValeur(liste)
type = type + ' ou '+l
commentaire="Un objet de type "+type+" est attendu"
aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- self.Commentaire.setText(QString(commentaire))
+ commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
def __init__(self,parent ,modal ) :
QDialog.__init__(self,parent)
self.appliEficas=parent.appliEficas
+ self.RepIcon=parent.appliEficas.RepIcon
if hasattr(parent,"leLayout"):
parent.leLayout.removeWidget(parent.leLayout.widgetActive)
parent.leLayout.widgetActive.close()
parent.leLayout.widgetActive=self
self.setupUi(self)
+
# Import des panels
class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonUniqueBasePanel"
self.InitCommentaire()
self.detruitBouton()
self.connecterSignaux()
+ self.lineEditVal.setFocus()
def connecterSignaux(self) :
self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed)
def detruitBouton(self):
+ icon = QIcon(self.RepIcon+"/image240.png")
+ self.BSalome.setIcon(icon)
mc = self.node.item.get_definition()
- if self.node.item.get_nom() != "FileName" :
+ #if ( (self.node.item.get_nom() != "FileName" ) and ( mc.type[0]!="Fichier")) :
+ if ( mc.type[0]!="Fichier") :
self.BFichier.close()
+ else :
+ self.bParametres.close()
type = mc.type[0]
- #if not('grma' in repr(type)) or not(self.editor.salome) :
- if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
+ # TODO: Use type properties instead of hard-coded "grno" and "grma" type check
+ enable_salome_selection = self.editor.salome and \
+ (('grma' in repr(type)) or ('grno' in repr(type)) or
+ (hasattr(type, "enable_salome_selection") and type.enable_salome_selection))
+ if not enable_salome_selection:
self.BSalome.close()
+ if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
self.BView2D.close()
def InitLineEditVal(self):
def InitCommentaire(self):
mc = self.node.item.get_definition()
- d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
- 'R' : "Un réel est attendu",
- 'I' : "Un entier est attendu"}
- type = mc.type[0]
- commentaire=d_aides.get(type,"Type de base inconnu")
+ d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+ 'R' : "Un réel est attendu",
+ 'I' : "Un entier est attendu",
+ 'Matrice' : 'Une Matrice est attendue',
+ 'Fichier' : 'Un fichier est attendu'}
+ mctype = mc.type[0]
+
+ if type(mctype) == types.ClassType:
+ commentaire = getattr(mctype, 'help_message', "Type de base inconnu")
+ else:
+ commentaire = d_aides.get(mctype, "Type de base inconnu")
aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- self.Commentaire.setText(QString(commentaire))
+ commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
def BOk2Pressed(self):
SaisieValeur.BOk2Pressed(self)
- if self.node.item.parent.nom == "MODEL" :
- self.node.item.parent.change_fichier="1"
- self.node.item.parent.build_include(None,"")
def BFichierPressed(self):
- fichier = QFileDialog.getOpenFileName(self.appliEficas,
- self.appliEficas.trUtf8('Ouvrir Fichier'),
- self.appliEficas.CONFIGURATION.savedir,
- self.appliEficas.trUtf8('Wrapper Files (*.xml);;''All Files (*)'))
+ type = self.node.item.get_definition().type
+ if len(type) > 1:
+ filters = type[1]
+ else:
+ filters = QString()
+ if len(type) > 2 and type[2] == "Sauvegarde":
+ fichier = QFileDialog.getSaveFileName(self.appliEficas,
+ self.appliEficas.trUtf8('Sauvegarder Fichier'),
+ self.appliEficas.CONFIGURATION.savedir,
+ filters)
+ else:
+ fichier = QFileDialog.getOpenFileName(self.appliEficas,
+ self.appliEficas.trUtf8('Ouvrir Fichier'),
+ self.appliEficas.CONFIGURATION.savedir,
+ filters)
+
if not(fichier.isNull()):
+ ulfile = os.path.abspath(unicode(fichier))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.lineEditVal.setText(fichier)
-
+
def LEValeurPressed(self):
SaisieValeur.LEValeurPressed(self)
if self.node.item.parent.nom == "MODEL" :
- self.node.item.parent.change_fichier="1"
- self.node.item.parent.build_include(None,"")
+ if self.node.item.isvalid():
+ self.node.item.parent.change_fichier="1"
+ self.node.item.parent.build_include(None,"")
def BParametresPressed(self):
QTPanel.BParametresPressed(self)
SaisieValeur.LEValeurPressed(self,valeur)
def BSalomePressed(self):
+ self.Commentaire.setText(QString(""))
genea=self.node.item.get_genealogie()
kwType = None
for e in genea:
if "GROUP_NO" in e: kwType = "GROUP_NO"
if "GROUP_MA" in e: kwType = "GROUP_MA"
- selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+ selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
if commentaire !="" :
self.Commentaire.setText(QString(commentaire))
monTexte=""
for geomElt in selection:
monTexte=geomElt+","
monTexte= monTexte[0:-1]
- self.LEValeur.setText(QString(monTexte))
+ self.lineEditVal.setText(QString(monTexte))
def BView2DPressed(self):
- valeur=self.LEValeur.text()
+ valeur=self.lineEditVal.text()
if valeur == QString("") : return
valeur = str(valeur)
if valeur :
- ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+ ok, msgError = self.appliEficas.displayShape(valeur)
if not ok:
- self.editor.parent.appli.affiche_infos(msgError)
+ self.appliEficas.affiche_infos(msgError,Qt.red)
self.LEReel.setText(str(x1))
self.LEImag.setText(str(x2))
if typ_cplx == "RI" :
- self.RBRI.setDown(1)
+ self.RBRI.setChecked(1)
else :
- self.RBMP.setDown(1)
+ self.RBMP.setChecked(1)
def LEcompRPressed(self) :
v=eval(valeur,d)
except :
commentaire="expression invalide"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return
try :
i=v.imag
+ self.editor.affiche_infos(commentaire)
except :
commentaire="expression n est pas de la forme a+bj"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def LEReelRPressed(self):
self.LEcomp.clear()
valeur = str(self.LEReel.text())
try :
a=string.atof(valeur)
+ self.editor.affiche_infos(commentaire)
except :
commentaire="expression invalide"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def LEImagRPressed(self):
self.LEcomp.clear()
valeur = str(self.LEImag.text())
try :
a=string.atof(valeur)
+ self.editor.affiche_infos(commentaire)
except :
commentaire="expression invalide"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
def BOkPressed(self):
if self.LEcomp.text()== "" :
else :
if self.LEReel.text() != "" or self.LEImag.text() != "" :
commentaire="entrer une seule valeur SVP"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return
valeur= self.getValeurComp()
self.politique.RecordValeur(valeur)
l.append("RI")
else :
commentaire="saisir le type de complexe"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return None
try :
l.append(string.atof(str(self.LEReel.text())))
v=eval(valeur,d)
except :
commentaire="expression invalide"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return None
try :
i=v.imag
except :
commentaire="expression n est pas de la forme a+bj"
- self.editor.affiche_infos(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
return None
return v
def InitCommentaire(self):
commentaire='Un complexe est attendu'
aideval=self.node.item.aide()
- commentaire=commentaire +"\n"+ aideval
- self.Commentaire.setText(QString(commentaire))
+ commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonUniqueSDCOIntoPanel"
valeur,validite=self.node.item.eval_valeur(nomConcept)
test = self.node.item.set_valeur(valeur)
if not test :
- commentaire = "impossible d'évaluer : %s " %`valeur`
+ commentaire = "impossible d'évaluer : %s " %`valeur`
elif validite:
- commentaire = "Valeur du mot-clé enregistrée"
+ commentaire = "Valeur du mot-clé enregistrée"
if test_CO:
# il faut egalement propager la destruction de l'ancien concept
self.node.item.delete_valeur_co(valeur=anc_val)
else :
commentaire = self.node.item.get_cr()
self.reset_old_valeur(anc_val,mess=mess)
- self.editor.affiche_infos(commentaire)
- self.Commentaire.setText(commentaire)
+ self.editor.affiche_infos(commentaire,Qt.red)
+ self.Commentaire.setText(QString.FromUtf8(commentaire))
def LESDCOReturnPressed(self) :
self.LBSDCO.clearSelection()
class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
"""
def __init__(self,node, parent = None,name = None,fl = 0):
#print "MonUniquesSDCOPanel"
def LESDCOReturnPressed(self):
"""
- Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+ Lit le nom donné par l'utilisateur au concept de type CO qui doit être
la valeur du MCS courant et stocke cette valeur
"""
SaisieSDCO.LESDCOReturnPressed(self)
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desVisu import Ui_DVisu
+from PyQt4 import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+# Import des panels
+
+class DVisu(Ui_DVisu ,QtGui.QDialog):
+ """
+ Classe définissant le panel associé aux mots-clés qui demandent
+ à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discrètes
+ """
+ def __init__(self,parent = None , name = None,fl = 0):
+ QtGui.QDialog.__init__(self,parent)
+ self.setModal(True)
+ self.setupUi(self)
+
+ def on_buttonCancel_clicked(self):
+ QDialog.reject(self)
+
+ def on_buttonOk_clicked(self):
+ QDialog.accept(self)
+
def TesteUneValeur(self,valeurentree):
valeur,validite=self.node.item.eval_valeur(valeurentree)
if not validite :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
return valeur,validite,commentaire
testtype,commentaire = self.node.item.object.verif_type(valeur)
commentaire=" "
if not validite :
- commentaire = "impossible d'évaluer : %s " %`valeurentree`
+ commentaire = "impossible d'évaluer : %s " %`valeurentree`
return valeur, validite, commentaire
# ----------------------------------------------------------------------------------------
-# Méthodes utilisées pour la manipulation des items en notation scientifique
+# Méthodes utilisées pour la manipulation des items en notation scientifique
# a mettre au point
# ----------------------------------------------------------------------------------------
def SetValeurTexte(self,texteValeur) :
if str(clef) != str(texteValeur) :
self.node.item.object.init_modif()
clefobj=self.node.item.object.GetNomConcept()
- if not self.parent.dict_reels.has_key(clefobj):
- self.parent.dict_reels[clefobj] = {}
- self.parent.dict_reels[clefobj][clef]=texteValeur
- self.parent.dict_reels[clefobj]
+ if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+ self.parent.appliEficas.dict_reels[clefobj] = {}
+ self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+ self.parent.appliEficas.dict_reels[clefobj]
+ if clefobj=="" :
+ if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
self.node.item.object.fin_modif()
except:
pass
valeurTexte=valeur
if "R" in self.node.item.object.definition.type:
clefobj=self.node.item.object.GetNomConcept()
- if self.parent.dict_reels.has_key(clefobj):
- if self.parent.dict_reels[clefobj].has_key(valeur):
- valeurTexte=self.parent.dict_reels[clefobj][valeur]
+ if self.parent.appliEficas.dict_reels.has_key(clefobj):
+ if self.parent.appliEficas.dict_reels[clefobj].has_key(valeur):
+ valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
return valeurTexte
+ def AjoutDsDictReel(self,texteValeur):
+ # le try except est nécessaire pour saisir les paramétres
+ try :
+ if "R" in self.node.item.object.definition.type:
+ if str(texteValeur)[0] != "'":
+ clef=eval(texteValeur)
+ if str(clef) != str(texteValeur) :
+ clefobj=self.node.item.object.GetNomConcept()
+ if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+ self.parent.appliEficas.dict_reels[clefobj] = {}
+ self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+ if clefobj=="" :
+ if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+ self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
+
+ except:
+ pass
+
+ def AjoutDsDictReelEtape(self):
+ try:
+ if self.parent.appliEficas.dict_reels.has_key(self.node.item.object) :
+ self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
+ del self.parent.appliEficas.dict_reels[self.node.item.object]
+ except :
+ pass
+
+
#------------------------------------
class PolitiqueUnique(Validation) :
#------------------------------------
if validite :
validite=self.node.item.set_valeur(valeur)
if self.node.item.isvalid():
- commentaire = "Valeur du mot-clé enregistrée"
+ commentaire = "Valeur du mot-clé enregistrée"
self.SetValeurTexte(str(valeurentree))
else:
cr = self.node.item.get_cr()
- commentaire = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
+ commentaire = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
self.node.item.set_valeur(ancienne_val)
return validite, commentaire
-#------------------------
-class PolitiquePlusieurs:
-#------------------------
+#--------------------------------------
+class PolitiquePlusieurs(Validation):
+#--------------------------------------
"""
classe servant pour les entrees ne demandant qu un mot clef
"""
def AjoutValeurs(self,listevaleur,index,listecourante):
listeRetour=[]
- commentaire="Nouvelle valeur acceptée"
+ commentaire="Nouvelle valeur acceptée"
commentaire2=""
valide=1
+ if listevaleur==None: return
+ if listevaleur=="": return
if not( type(listevaleur) in (types.ListType,types.TupleType)) :
listevaleur=tuple(listevaleur)
for valeur in listevaleur :
# On teste le type de la valeur
+ valeurScientifique=valeur
valide=self.node.item.valide_item(valeur)
+ print valeur
if not valide :
- #print self.__class__
- #if not testtype :
try :
valeur,valide=self.node.item.eval_valeur(valeur)
valide,commentaire = self.node.item.object.verif_type(valeur)
#return testtype,commentaire,"",listeRetour
pass
if not valide:
- commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
+ commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
commentaire2=self.node.item.info_erreur_item()
return valide,commentaire,commentaire2,listeRetour
# On traite le cas ou la liste n est pas valide pour un pb de cardinalite
min,max = self.node.item.GetMinMax()
if len(listecourante) + 1 >= max :
- commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+ commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
return valide,commentaire,commentaire2,listeRetour
if len(listecourante) + 1 > min :
+ commentaire=""
return valide,commentaire,commentaire2,listeRetour
# On ajoute la valeur testee a la liste courante et a la liste acceptee
+ self.AjoutDsDictReel(valeurScientifique)
listecourante.insert(index,valeur)
index=index+1
listeRetour.append(valeur)
def AjoutTuple(self,valeurTuple,index,listecourante):
listeRetour=[]
- commentaire="Nouvelle valeur acceptée"
+ commentaire="Nouvelle valeur acceptée"
commentaire2=""
valide=1
if valeurTuple==None: return
except :
pass
if not valide:
- commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout à la liste refusé"
+ commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout à la liste refusé"
commentaire2=self.node.item.info_erreur_item()
return valide,commentaire,commentaire2,listeRetour
# On traite le cas ou la liste n est pas valide pour un pb de cardinalite
min,max = self.node.item.GetMinMax()
if len(listecourante) + 1 >= max :
- commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+ commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
return valide,commentaire,commentaire2,listeRetour
listeRetour.append(valeurTuple)
return valide,commentaire,commentaire2,listeRetour
def BOkPressed(self):
""" Impossible d utiliser les vrais labels avec designer ?? """
label=self.TWChoix.tabText(self.TWChoix.currentIndex())
- print label
if label==QString("Nouvelle Commande"):
self.DefCmd()
if label==QString("Nommer Concept"):
liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
for aMc in liste_mc:
self.LBMCPermis.addItem( aMc)
+ if len(liste_mc) !=0:
+ self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
def DefMC(self,item):
self.editor = parent
self.node = node
self.BuildLBNouvCommande()
+ self.LEFiltre.setFocus()
self.NbRecherches = 0
if racine == 1 :
self.AppelleBuildLBRegles()
+ self.LEFiltre.setFocus()
else :
self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged)
+
def handleCurrentChanged(self):
try :
- self.LEFiltre.setFocus()
+ label=self.TWChoix.tabText(self.TWChoix.currentIndex())
+ if label==QString("Nouvelle Commande"):
+ self.LEFiltre.setFocus()
+ if label==QString("Nommer Concept"):
+ self.LENomConcept.setFocus()
+ if label==QString("Définition Formule"):
+ self.LENomFormule.setFocus()
+ if label==QString("Valeur Parametre"):
+ self.lineEditNom.setFocus()
+ if label==QString("Fichier Include"):
+ self.LENomFichier.setFocus()
+ if label==QString("Ajouter Mot-Clef"):
+ self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
except :
- pass
+ pass
def BuildLBNouvCommande(self):
else :
self.editor.mode_nouv_commande="groupe"
self.BuildLBNouvCommande()
+ self.LEFiltre.setFocus()
def DefCmd(self):
if self.LBNouvCommande.currentItem()== 0 : return
if name.find("GROUPE :")==0 :
return
self.editor.init_modif()
- print self.node
- print name
new_node = self.node.append_brother(name,'after')
self.typeConcept.setText(type_sd)
self.LENomConcept.setText("")
self.LENomConcept.setText(nomConcept)
+ self.LENomConcept.setFocus()
+ if self.node.item.is_reentrant():
+ self.makeConceptPage_reentrant()
+ else :
+ self.listBoxASSD.close()
+
+ def makeConceptPage_reentrant(self):
+ self.bOk.close()
+ self.LENomConcept.close()
+ self.Label2.close()
+ self.Label3.close()
+ self.typeConcept.close()
+ self.LENomConcept.close()
+ self.Label1.setText(QtGui.QApplication.translate("DUnASSD", "<font size=\"+1\"><p align=\"center\">Structures de données à enrichir\n"
+" par l\'operateur courant :</p></font>", None, QtGui.QApplication.CodecForTr))
+ listeNomsSD = self.node.item.get_noms_sd_oper_reentrant()
+ for aSD in listeNomsSD:
+ self.listBoxASSD.addItem( aSD)
+ QObject.connect(self.listBoxASSD, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicASSD )
+
+ def ClicASSD(self):
+ if self.listBoxASSD.currentItem()== None : return
+ val=self.listBoxASSD.currentItem().text()
+ nom=str(val)
+ nom = string.strip(nom)
+ test,mess = self.node.item.nomme_sd(nom)
+ if (test== 0):
+ self.editor.affiche_infos(mess,Qt.red)
+
def LENomConceptReturnPressed(self):
"""
Nomme le concept SD retourne par l'etape
if nom == '' : return # si pas de nom, on ressort sans rien faire
self.editor.init_modif()
test,mess = self.node.item.nomme_sd(nom)
+ #Notation scientifique
+ from politiquesValidation import Validation
+ validation=Validation(self.node,self.editor)
+ validation.AjoutDsDictReelEtape()
self.editor.affiche_infos(mess)
# ------------------------------- #
def saveFile(self):
#recuperation du nom du fichier
- userDir=os.path.expanduser("~/.Eficas_install/")
fn = QFileDialog.getSaveFileName(None,
self.trUtf8("Save File"),
- self.trUtf8(userDir))
+ self.appliEficas.CONFIGURATION.savedir)
if fn.isNull() : return
+ ulfile = os.path.abspath(unicode(fn))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
try:
f = open(fn, 'wb')
f.write(str(self.view.toPlainText()))
"""
Class implementing the main user interface.
"""
- def __init__(self,code="ASTER",salome=0,parent=None):
+ def __init__(self,code="ASTER",salome=0,parent=None,ssCode=None):
"""
Constructor
"""
+ self.VERSION_EFICAS="Eficas QT4 V2.0"
+
self.ihm="QT"
self.code=code
+ self.ssCode=ssCode
self.salome=salome
- self.format_fichier="python" #par defaut
self.top = self #(pour CONFIGURATION)
self.QWParent=None #(Pour lancement sans IHM)
+ self.indice=0
+ self.dict_reels={}
import prefs
- if salome :
- import sys
prefs.code=code
name='prefs_'+prefs.code
prefsCode=__import__(name)
- nameConf='configuration_'+prefs.code
- configuration=__import__(nameConf)
-
self.REPINI=prefsCode.REPINI
self.RepIcon=prefsCode.INSTALLDIR+"/Editeur/icons"
+ self.INSTALLDIR=prefsCode.INSTALLDIR
+ if ssCode != None :
+ self.format_fichier= ssCode #par defaut
+ prefsCode.NAME_SCHEME=ssCode
+ else :
+ self.format_fichier="python" #par defaut
+
+ if salome :
+ import sys
+ nameConf='configuration_'+prefs.code
+ configuration=__import__(nameConf)
self.CONFIGURATION = configuration.make_config(self,prefsCode.REPINI)
- self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
+ self.CONFIGStyle = None
+ if hasattr(configuration,'make_config_style'):
+ self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
if hasattr(prefsCode,'encoding'):
import sys
reload(sys)
sys.setdefaultencoding(prefsCode.encoding)
- QMainWindow.__init__(self)
+ QMainWindow.__init__(self,parent)
Ui_Eficas.__init__(self)
self.setupUi(self)
self.ajoutIcones()
+ if code in Appli.__dict__.keys():
+ listeTexte=apply(Appli.__dict__[code],(self,))
+
self.viewmanager = MyTabview(self)
self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
self.connecterSignaux()
- #self.monAssistant=QAssistantClient(QString(""), self.viewmanager)
#if self.salome :
# from Editeur import session
# self.ouvreFichiers()
self.initRecents()
self.ouvreFichiers()
+ self.setWindowTitle(self.VERSION_EFICAS)
- def OPENTURNS(self) :
- self.MenuBar.removeItem(5)
- self.MenuBar.removeItem(6)
- self.MenuBar.removeItem(7)
+ def ASTER(self) :
+ self.menuTraduction = self.menubar.addMenu("menuTraduction")
+ self.actionTraduitV7V8 = QAction(self)
+ self.actionTraduitV7V8.setObjectName("actionTraduitV7V8")
+ self.actionTraduitV8V9 = QAction(self)
+ self.actionTraduitV8V9.setObjectName("actionTraduitV8V9")
+ self.menuTraduction.addAction(self.actionTraduitV7V8)
+ self.menuTraduction.addAction(self.actionTraduitV8V9)
+ self.menuTraduction.setTitle(QApplication.translate("Eficas", "Traduction", None, QApplication.UnicodeUTF8))
+ self.actionTraduitV7V8.setText(QApplication.translate("Eficas","TraduitV7V8", None, QApplication.UnicodeUTF8))
+ self.actionTraduitV8V9.setText(QApplication.translate("Eficas","TraduitV8V9", None, QApplication.UnicodeUTF8))
+ self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
+ self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
+
+
+ def Map(self):
+ self.MAP()
+
+ def MAP(self):
+ self.actionExecution = QAction(self)
+ icon6 = QIcon(self.RepIcon+"/compute.png")
+ self.actionExecution.setIcon(icon6)
+ self.actionExecution.setObjectName("actionExecution")
+ self.menuJdC.addAction(self.actionExecution)
+ self.toolBar.addAction(self.actionExecution)
+ self.actionExecution.setText(QApplication.translate("Eficas", "Execution", None, QApplication.UnicodeUTF8))
+ self.connect(self.actionExecution,SIGNAL("activated()"),self.run)
+
+ self.actionEnregistrer_Python = QAction(self)
+ self.actionEnregistrer_Python.setObjectName("actionEnregistrer_Python")
+ self.menuFichier.addAction(self.actionEnregistrer_Python)
+ self.actionEnregistrer_Python.setText(QApplication.translate("Eficas", "Sauve Python", None,QApplication.UnicodeUTF8))
+ self.connect(self.actionEnregistrer_Python,SIGNAL("activated()"),self.saveRun)
+
+ self.actionEnregistrerYACS = QAction(self)
+ self.actionEnregistrerYACS.setObjectName("actionEnregistrerYACS")
+ self.menuFichier.addAction(self.actionEnregistrerYACS)
+ self.actionEnregistrerYACS.setText(QApplication.translate("Eficas", "Sauve Schema YACS", None,QApplication.UnicodeUTF8))
+ self.connect(self.actionEnregistrerYACS,SIGNAL("activated()"),self.saveYACS)
+
+ self.actionExecutionYACS = QAction(self)
+ icon7 = QIcon(self.RepIcon+"/application.gif")
+ self.actionExecutionYACS.setIcon(icon7)
+ self.actionExecutionYACS.setObjectName("actionExecutionYACS")
+ self.menuJdC.addAction(self.actionExecutionYACS)
+ self.toolBar.addAction(self.actionExecutionYACS)
+ self.actionExecutionYACS.setText(QApplication.translate("Eficas", "Execution YACS", None, QApplication.UnicodeUTF8))
+ self.connect(self.actionExecutionYACS,SIGNAL("activated()"),self.runYACS)
def ajoutIcones(self) :
# Pour pallier les soucis de repertoire d icone
self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll)
self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit)
+ self.connect(self.actionEficas,SIGNAL("activated()"),self.aidePPal)
+ self.connect(self.actionVersion,SIGNAL("activated()"),self.version)
+
self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut)
self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy)
self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste)
+ self.connect(self.actionSupprimer,SIGNAL("activated()"),self.supprimer)
self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport)
self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource)
self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur)
self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf)
- self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
- self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
-
#self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex)
#self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents)
- #self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout)
- #self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout)
def ouvreFichiers(self) :
def initPatrons(self) :
- # Mise à jour du menu des fichiers recemment ouverts
+ # Mise à jour du menu des fichiers recemment ouverts
from Editeur import listePatrons
self.listePatrons = listePatrons.listePatrons(self.code)
idx = 0
def traductionV7V8(self):
from gereTraduction import traduction
- traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8")
+ traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V7V8")
def traductionV8V9(self):
from gereTraduction import traduction
- traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9")
+ traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V8V9")
def version(self) :
- from desVisu import DVisu
+ from monVisu import DVisu
titre = "version "
- monVisu=DVisu(parent=self.viewmanager)
- monVisu.setCaption(titre)
- monVisu.TB.setText("Eficas V1.13")
- monVisu.adjustSize()
- monVisu.show()
+ monVisuDialg=DVisu(parent=self,fl=0)
+ monVisuDialg.setWindowTitle(titre)
+ monVisuDialg.TB.setText(self.VERSION_EFICAS +QString(" pour ") + self.code)
+ monVisuDialg.adjustSize()
+ monVisuDialg.show()
def aidePPal(self) :
- maD=INSTALLDIR+"/AIDE/fichiers"
- docsPath = QDir(maD).absPath()
- self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) )
+ maD=self.INSTALLDIR+"/Aide"
+ docsPath = QDir(maD).absolutePath()
+ monAssistant=QAssistantClient(QString(""), self)
+ arguments=QStringList()
+ arguments << "-profile" <<docsPath+QDir.separator()+QString("eficas_")+QString(self.code)+QString(".adp");
+ monAssistant.setArguments(arguments);
+ monAssistant.showPage(docsPath+QDir.separator()+QString("fichiers_"+QString(self.code)+QString("/index.html")))
def optionEditeur(self) :
- from monOptionsEditeur import Options
- monOption=Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
+ name='monOptions_'+self.code
+ try :
+ #if 1 :
+ optionCode=__import__(name)
+ except :
+ #else :
+ QMessageBox.critical( self, "Parametrage", "Pas de possibilite de personnalisation de la configuration ")
+ return
+ monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
monOption.show()
def optionPdf(self) :
def handleClearRecent(self):
self.recent = QStringList()
+ self.sauveRecents()
def fileNew(self):
self.viewmanager.newEditor()
def fileExit(self):
# On peut sortir sur Abort
- self.viewmanager.handleCloseAll()
- if self.salome :
- self.close()
- else :
- qApp.closeAllWindows()
+ res=self.viewmanager.handleCloseAll()
+ if (res != 2) :
+ if self.salome :
+ self.close()
+ else :
+ qApp.closeAllWindows()
def editCopy(self):
self.viewmanager.handleEditCopy()
def editPaste(self):
self.viewmanager.handleEditPaste()
+ def run(self):
+ self.viewmanager.run()
+
+ def saveRun(self):
+ self.viewmanager.saveRun()
+
+ def runYACS(self):
+ self.viewmanager.runYACS()
+
+ def saveYACS(self):
+ self.viewmanager.saveYACS()
+
+ def supprimer(self):
+ self.viewmanager.handleSupprimer()
+
def jdcFichierSource(self):
self.viewmanager.handleViewJdcFichierSource()
def visuJdcPy(self):
self.viewmanager.handleViewJdcPy()
- def helpAbout(self):
- import AIDE
- AIDE.go3(parent=self)
def NewInclude(self):
self.viewmanager.newIncludeEditor()
+ def getName(self):
+ self.indice=self.indice+1
+ texte="tempo"+str(self.indice)
+ return texte
+
if __name__=='__main__':
class SaisieValeur:
"""
- Classe contenant les méthodes communes aux panels
+ Classe contenant les méthodes communes aux panels
permettant de choisir des valeurs
"""
def __init__(self):
def BuildLBValeurs(self):
self.LBValeurs.clear()
listeValeurs=self.node.item.GetListeValeurs()
+ #print self.node.item.definition.validators
for valeur in listeValeurs:
- self.LBValeurs.addItem(str(valeur))
+ try :
+ val=self.politique.GetValeurTexte(valeur)
+ except :
+ val=valeur
+ self.LBValeurs.addItem(str(val))
if listeValeurs != None and listeValeurs != [] :
self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
def RemplitPanel(self,listeDejaLa=[]):
self.listBoxVal.clear()
+ # Traitement particulier pour le validator VerifExistence
+ # dont les valeurs possibles peuvent changer : into variable
+ if hasattr(self.node.item.definition.validators,'set_MCSimp'):
+ obj=self.node.item.getObject()
+ self.node.item.definition.validators.set_MCSimp(obj)
+ if self.node.item.isvalid() == 0 :
+ liste=[]
+ for item in listeDejaLa:
+ if self.node.item.definition.validators.verif_item(item)==1:
+ liste.append(item)
+ self.node.item.set_valeur(liste)
+ self.BuildLBValeurs()
+ self.listeValeursCourantes=liste
+ self.editor.affiche_infos("Attention, valeurs modifiees", Qt.red)
+ listeDejaLa=liste
lChoix=self.node.item.get_liste_possible(listeDejaLa)
for valeur in lChoix :
self.listBoxVal.addItem( str(valeur) )
if len(lChoix) == 1 :
- self.listBoxVal.setCurrentRow(1)
+ self.listBoxVal.setCurrentRow(0)
+ self.listBoxVal.item(0).setSelected(1)
+ self.bOk.setFocus()
def ClicASSD(self):
if self.listBoxASSD.currentItem()== None : return
valeurQstring=self.listBoxASSD.currentItem().text()
- commentaire = QString("Valeur selectionnée : ")
+ commentaire = QString("Valeur selectionnée : ")
commentaire.append(valeurQstring)
self.Commentaire.setText(commentaire)
valeur=str(valeurQstring)
def BOkPressed(self):
if self.listBoxVal.currentItem()==None :
- commentaire = "Pas de valeur selectionnée"
+ commentaire = "Pas de valeur selectionnée"
self.Commentaire.setText(QString(commentaire))
else :
self.ClicValeur()
def BOk2Pressed(self):
if str(self.lineEditVal.text())== "" :
- commentaire = "Pas de valeur entrée "
+ commentaire = "Pas de valeur entrée "
self.Commentaire.setText(QString(commentaire))
else :
self.LEValeurPressed()
return listeValeurs,0
- else : # ce n'est pas un tuple à la mode aster
+ else : # ce n'est pas un tuple à la mode aster
listeValeurs.append(v)
indice = indice + 1
elif type(valeur) == types.StringType:
listeValeurs=valeur.split(',')
else:
- listeValeurs.append(valeur)
+ listeValeurs.append(valeurBrute)
return listeValeurs,1
def LESDCOReturnPressed(self):
"""
- Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+ Lit le nom donné par l'utilisateur au concept de type CO qui doit être
la valeur du MCS courant et stocke cette valeur
"""
self.editor.init_modif()
test,commentaire=self.node.item.set_valeur_co(nomConcept)
if test:
- commentaire="Valeur du mot-clé enregistree"
+ commentaire="Valeur du mot-clé enregistree"
self.node.update_node_valid()
else :
cr = self.node.item.get_cr()
- commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+ commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
self.node.item.set_valeur_co(anc_val)
- self.Commentaire.setText(QString(commentaire))
+ self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
import traceback
import cPickle
import re
+import types
# Modules Eficas
from Noyau.N_CR import CR
+from Editeur.catadesc import CatalogDescription
from Editeur.utils import init_rep_cata_dev
import analyse_catalogue
from PyQt4.QtGui import *
from PyQt4.QtCore import *
-VERSION_EFICAS="Eficas V1.16"
class READERCATA:
def __init__(self,QWParent, appliEficas):
self.QWParent=QWParent
self.appliEficas=self.QWParent.appliEficas
+ self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
self.code=self.QWParent.code
+ self.ssCode=self.appliEficas.ssCode
self.appliEficas.format_fichier='python'
if hasattr(self.appliEficas,'mode_nouv_commande'):
self.mode_nouv_commande=self.appliEficas.mode_nouv_commande
def OpenCata(self):
"""
- Ouvre le catalogue standard du code courant, cad le catalogue présent
- dans le répertoire Cata
+ Ouvre le catalogue standard du code courant, cad le catalogue présent
+ dans le répertoire Cata
"""
liste_cata_possibles=[]
+ self.Commandes_Ordre_Catalogue=[]
+
+ all_cata_list = []
for catalogue in self.appliEficas.CONFIGURATION.catalogues:
- if catalogue[0] == self.code :
- liste_cata_possibles.append(catalogue)
+ if isinstance(catalogue, CatalogDescription):
+ all_cata_list.append(catalogue)
+ elif isinstance(catalogue, types.TupleType):
+ all_cata_list.append(CatalogDescription.create_from_tuple(catalogue))
+ else:
+ print "Catalog description cannot be interpreted: ", catalogue
+
+ # TODO: Remove this filter. Normally, CONFIGURATION should only define the catalogs for this code anyway.
+ # Non pas pour Map qui a une notion de sscode
+ for catalogue in all_cata_list:
+ if catalogue.code == self.code :
+ if (self.ssCode == None) or (self.ssCode == catalogue.file_format):
+ liste_cata_possibles.append(catalogue)
if len(liste_cata_possibles)==0:
QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
self.appliEficas.close()
- sys.exit(1)
+ if self.appliEficas.salome == 0 :
+ sys.exit(1)
+ return
+
if self.version_code is not None:
# La version a ete fixee
for cata in liste_cata_possibles:
- if self.version_code == cata[1]:
- self.fic_cata = cata[2]
- self.appliEficas.format_fichier=cata[3]
- elif len(liste_cata_possibles)==1:
- self.fic_cata = liste_cata_possibles[0][2]
- self.version_code = liste_cata_possibles[0][1]
- self.appliEficas.format_fichier=liste_cata_possibles[0][3]
- lab=QString("Eficas V1.")
- lab+=QString(VERSION_EFICAS)
- lab+=QString(" pour ")
- lab+=QString(self.code)
- lab+=QString(" avec le catalogue ")
- lab+=self.version_code
- try :
- # souci pour les includes et sans Ihm
- self.appliEficas.setWindowTitle(lab)
- except :
- pass
+ if self.version_code == cata.identifier:
+ self.fic_cata = cata.cata_file_path
+ self.appliEficas.format_fichier = cata.file_format
+ self.appliEficas.format_fichier_in = cata.file_format_in
else:
- # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
- # lequel il veut utiliser ...
- self.ask_choix_catalogue()
+ cata_choice_list = []
+ for cata in liste_cata_possibles:
+ if cata.selectable:
+ if cata.default:
+ cata_choice_list.insert(0, cata)
+ else :
+ cata_choice_list.append(cata)
+ if len(cata_choice_list) == 0:
+ QMessageBox.critical(self.QWParent, "Import du catalogue",
+ QString.fromUtf8("Aucun catalogue trouvé"))
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 :
+ sys.exit(1)
+ elif len(cata_choice_list) == 1:
+ self.fic_cata = cata_choice_list[0].cata_file_path
+ self.version_code = cata_choice_list[0].identifier
+ self.appliEficas.format_fichier = cata_choice_list[0].file_format
+ self.appliEficas.format_fichier_in = cata_choice_list[0].file_format_in
+ lab=QString("Eficas ")
+ lab+=QString(self.VERSION_EFICAS)
+ lab+=QString(" pour ")
+ lab+=QString(self.code)
+ lab+=QString(" avec le catalogue ")
+ lab+=self.version_code
+ try :
+ # souci pour les includes et sans Ihm
+ self.appliEficas.setWindowTitle(lab)
+ except :
+ pass
+ else:
+ # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
+ # lequel il veut utiliser ...
+ self.ask_choix_catalogue(cata_choice_list)
+ # On est dans Salome et il faut sortir proprement
if self.fic_cata == None :
- print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
- sys.exit(0)
+ if self.appliEficas.salome == 0 :
+ print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
+ sys.exit(1)
+ else :
+ self.appliEficas.close()
+ return
self.determineMater()
-
-
- # détermination de fic_cata_c et fic_cata_p
+ # détermination de fic_cata_c et fic_cata_p
self.fic_cata_c = self.fic_cata + 'c'
self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
if not self.cata :
QMessageBox.critical( self.QWParent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
self.appliEficas.close()
- sys.exit(1)
+ if self.appliEficas.salome == 0 :
+ sys.exit(1)
#
- # analyse du catalogue (ordre des mots-clés)
+ # analyse du catalogue (ordre des mots-clés)
#
# Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
- # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
- # des mots clés a la création
+ # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+ # des mots clés a la création
self.Retrouve_Ordre_Cata_Standard_autre()
if self.mode_nouv_commande== "initial" :
self.Retrouve_Ordre_Cata_Standard()
- else:
- self.Commandes_Ordre_Catalogue=[]
#
- # analyse des données liées a l'IHM : UIinfo
+ # analyse des données liées a l'IHM : UIinfo
#
uiinfo.traite_UIinfo(self.cata)
#
self.traite_clefs_documentaires()
self.cata=(self.cata,)
- titre=VERSION_EFICAS + " avec le catalogue " + os.path.basename(self.fic_cata)
+ titre=self.VERSION_EFICAS + " avec le catalogue " + os.path.basename(self.fic_cata)
if self.appliEficas.top:
self.appliEficas.setWindowTitle(titre)
self.appliEficas.titre=titre
def determineMater(self) :
# Determinination du repertoire materiau
v_codeSansPoint=self.version_code
+ if v_codeSansPoint == None : return
v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
chaine="rep_mat_"+v_codeSansPoint
if hasattr(self.appliEficas.CONFIGURATION,chaine):
def import_cata(self,cata):
"""
- Réalise l'import du catalogue dont le chemin d'acces est donné par cata
+ Réalise l'import du catalogue dont le chemin d'acces est donné par cata
"""
nom_cata = os.path.splitext(os.path.basename(cata))[0]
rep_cata = os.path.dirname(cata)
sys.path[:0] = [rep_cata]
+
+ if sys.modules.has_key(nom_cata):
+ del sys.modules[nom_cata]
+ for k in sys.modules.keys():
+ if k[0:len(nom_cata)+1] == nom_cata+'.':
+ del sys.modules[k]
+
try :
o=__import__(nom_cata)
return o
def Retrouve_Ordre_Cata_Standard_autre(self):
"""
- Construit une structure de données dans le catalogue qui permet
- a EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
- Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
- contient le nom des mots clés dans le bon ordre
+ Construit une structure de données dans le catalogue qui permet
+ a EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+ Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+ contient le nom des mots clés dans le bon ordre
"""
self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
def Retrouve_Ordre_Cata_Standard(self):
"""
- Retrouve l'ordre des mots-clés dans le catalogue, cad :
+ Retrouve l'ordre des mots-clés dans le catalogue, cad :
Attention s appuie sur les commentaires
"""
nom_cata = os.path.splitext(os.path.basename(self.fic_cata))[0]
rep_cata = os.path.dirname(self.fic_cata)
self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyse_catalogue(self.fic_cata)
- def ask_choix_catalogue(self):
+ def ask_choix_catalogue(self, cata_choice_list):
"""
- Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs
- ont été définis dans Accas/editeur.ini
+ Ouvre une fenetre de sélection du catalogue dans le cas où plusieurs
+ ont été définis dans Accas/editeur.ini
"""
- # construction du dictionnaire et de la liste des catalogues
- self.dico_catalogues = {}
- defaut = None
- for catalogue in self.appliEficas.CONFIGURATION.catalogues:
- if catalogue[0] == self.code :
- self.dico_catalogues[catalogue[1]] = catalogue
- if len(catalogue) == 5 :
- if catalogue[4]=='defaut' : defaut = catalogue[1]
- liste_choix = self.dico_catalogues.keys()
- liste_choix.sort()
-
- lab=QString(VERSION_EFICAS)
- lab+=QString(" pour ")
- lab+=QString(self.code)
- lab+=QString(" avec le catalogue ")
-
- # teste si plusieurs catalogues ou non
- if len(liste_choix) == 0:
- QMessageBox.critical( self.QWParent, "", "Aucun catalogue déclaré pour %s" %self.code)
- self.appliEficas.close()
- sys.exit(1)
-
- # création d'une boite de dialogue modale
- widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True )
+ title = getattr(self.appliEficas.CONFIGURATION, "cata_choice_window_title", None)
+ widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title)
ret=widgetChoix.exec_()
- lab=QString(VERSION_EFICAS)
+ lab=QString(self.VERSION_EFICAS)
lab+=QString(" pour ")
lab+=QString(self.code)
lab+=QString(" avec le catalogue ")
if ret == QDialog.Accepted:
- self.version_cata=str(self.version_cata)
- self.fic_cata = self.dico_catalogues[self.version_cata][2]
+ cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()]
+ self.version_cata = cata.identifier
+ self.fic_cata = cata.cata_file_path
self.version_code = self.version_cata
- self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3]
+ self.appliEficas.format_fichier = cata.file_format
+ self.appliEficas.format_fichier_in = cata.file_format_in
lab+=self.version_cata
self.appliEficas.setWindowTitle(lab)
#qApp.mainWidget().setCaption(lab)
- else :
- sys.exit(0)
-
-
+ else:
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 :
+ sys.exit(0)
def traite_clefs_documentaires(self):
try:
self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+ #print self.fic_cata_clef
f=open(self.fic_cata_clef)
except:
- #print "Pas de fichier associé contenant des clefs documentaires"
+ #print "Pas de fichier associe contenant des clefs documentaires"
return
dict_clef_docu={}
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+# permet de lancer EFICAS en n affichant rien
+
+class QWParentSSIhm:
+ def __init__(self,code,appliEficas,version_code):
+ self.ihm="QT"
+ self.code=code
+ self.version_code=version_code
+ print self.version_code
+ self.appliEficas=appliEficas
+
def viewDoc(self):
self.node=self.tree.currentItem()
cle_doc = self.node.item.get_docu()
+ print self.node.item.get_docu
if cle_doc == None :
QMessageBox.information( self.editor, "Documentation Vide", \
"Aucune documentation Aster n'est associée à ce noeud")
- return
+ return
#cle_doc = string.replace(cle_doc,'.','')
#cle_doc = string.replace(cle_doc,'-','')
#print dir(self)
texte="impossible de trouver la commande " + commande
QMessageBox.information( self.editor, "Lecteur PDF", texte)
return
- nom_fichier = cle_doc+".pdf"
+ nom_fichier = cle_doc
+ import os
fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
nom_fichier))
try :
self.paramMenu.addAction(self.ParamApres)
self.paramMenu.addAction(self.ParamAvant)
self.menu.addAction(self.Documentation)
+ self.menu.removeAction(self.Supprime)
+ self.menu.addAction(self.Supprime)
#-----------------------------------------#
self.tree.connect(self.Commente,SIGNAL("activated()"),self.Commenter)
self.Commente.setStatusTip("commente le noeud ")
self.commentMenu.addAction(self.Commente)
+ self.menu.removeAction(self.Supprime)
+ self.menu.addAction(self.Supprime)
def Commenter(self):
item= self.tree.currentItem()
self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
if fichier.isNull(): return
fichier = os.path.abspath(unicode(fichier))
+ ulfile = os.path.abspath(unicode(fichier))
+ self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.appliEficas.addToRecentList(fichier)
maPage=self.getEditor( fichier,units=units)
def handleClose(self,doitSauverRecent = 1):
- #print "passage dans handleClose"
- #print self.dict_editors
if doitSauverRecent : self.appliEficas.sauveRecents()
index=self.myQtab.currentIndex()
if index < 0 : return
- self.checkDirty(self.dict_editors[index])
+ res=self.checkDirty(self.dict_editors[index])
+ if res == 2 : return 2 # l utilisateur a annule
index=self.myQtab.currentIndex()
- while index < len(self.dict_editors) -1 :
- self.dict_editors[index]=self.dict_editors[index+1]
- index = index + 1
+ idx=index
+ while idx < len(self.dict_editors) -1 :
+ self.dict_editors[idx]=self.dict_editors[idx+1]
+ idx = idx + 1
del self.dict_editors[len (self.dict_editors) -1]
try :
del self.doubles[self.dict_editors[index]]
except :
pass
- print self.dict_editors
self.myQtab.removeTab(index)
+ return res
+ def run(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dict_editors[index]
+ editor.run()
+
+ def saveRun(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dict_editors[index]
+ editor.saveRun()
+
+ def runYACS(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dict_editors[index]
+ editor.runYACS()
+
+ def saveYACS(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ editor=self.dict_editors[index]
+ editor.saveYACS()
+
def handleCloseAll(self):
+ res=0
self.appliEficas.sauveRecents()
- #print "passage dans CloseAll"
- print "self.dict_editors", self.dict_editors
while len(self.dict_editors) > 0 :
self.myQtab.setCurrentIndex(0)
- self.handleClose(0)
+ res=self.handleClose(0)
+ if res==2 : return res # l utilsateur a annule
+ return res
def handleEditCopy(self):
#print "passage dans handleEditCopy"
editor=self.dict_editors[index]
editor.handleEditPaste()
+ def handleSupprimer(self):
+ index=self.myQtab.currentIndex()
+ editor=self.dict_editors[index]
+ editor.handleSupprimer()
+
def newEditor(self,include=0):
- #print "passage dans newEditor"
- maPage=self.getEditor()
+ maPage=self.getEditor(include=include)
def newIncludeEditor(self):
self.newEditor(include=1)
def saveCurrentEditor(self):
index=self.myQtab.currentIndex()
if index < 0 : return
+ print self
+ print index
+ print self.dict_editors
editor=self.dict_editors[index]
if editor in self.doubles.keys() :
QMessageBox.warning(
@param editor editor window to check
@return flag indicating successful reset of the dirty flag (boolean)
"""
-
- print "checkDirty"
+ res=1
if (editor.modified) and (editor in self.doubles.keys()) :
res = QMessageBox.warning(
None,
fn = self.appliEficas.trUtf8('Noname')
res = QMessageBox.warning(self.appliEficas,
self.appliEficas.trUtf8("Fichier Modifie"),
- self.appliEficas.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.")
- .arg(fn),
+ self.appliEficas.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.") .arg(fn),
self.appliEficas.trUtf8("&Sauvegarder"),
self.appliEficas.trUtf8("&Quitter "),
- self.appliEficas.trUtf8("&Annuler"), 0, 2)
+ self.appliEficas.trUtf8("&Annuler") )
if res == 0:
(ok, newName) = editor.saveFile()
if ok:
index=self.myQtab.currentIndex()
self.myQtab.setTabText(index,fileName)
return ok
- elif res == 2:
- return 0
- return 1
-
+ return res
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ appli.py basestyle.py browser.py bureau.py catabrowser.py
+ cataediteur.py centerwindow.py change_comm.py compobase.py
+ compobloc.py compocommandecomm.py compocomm.py compoerror.py
+ compofact.py compoformule.py compojdc.py compomacro.py
+ compomclist.py componiveau.py componuplet.py compooper.py
+ compoparameval.py compoparam.py compoproc.py composimp.py
+ definition_cata.py eficas_go.py eficas.py eficas_test.py
+ faq.py fenetre_mc_inconnus.py fonctionpanel.py fontes.py
+ images.py __init__.py Interp.py jdcdisplay.py
+ listeFichiers.py listePatronsTK.py macrodisplay.py menubar.py
+ newsimppanel.py options.py panels.py panelsSalome.py
+ patches.py plusieursassdpanel.py plusieursbasepanel.py
+ plusieursintopanel.py plusieurspanel.py readercata.py
+ shellpanel.py splash.py statusbar.py styles.py
+ toolbar.py tooltip.py treeitemincanvas.py treewidget.py
+ TroisDPal.py uniqueassdpanel.py uniquebasepanel.py
+ uniquecomppanel.py uniqueintopanel.py
+ uniquepanel.py uniquesdcopanel.py widgets.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceTK
+ )
+
+### Local Variables:
+### mode: cmake
+### End:
# Modules Eficas
import splash
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import styles
from styles import style
import fontes
REPTK=os.path.dirname(os.path.abspath(__file__))
sys.path[:0]=[REPTK]
-VERSION="EFICAS v1.16"
+VERSION="EFICAS v1.17"
class APPLI:
def __init__ (self,master,code=prefs.code,fichier=None,test=0,ihm="TK",salome=0) :
self.salome=salome
self.top=master
self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
+ self.appliEficas=self
#dimensionnement de la fenetre principale
#aspect ratio de l'ecran
"""
if (self.test == 0):
splash._splash.configure(text = "Chargement des paramètres utilisateur")
- import configuration
- self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
- self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+ import configuration_ASTER
+ self.CONFIGURATION = configuration_ASTER.make_config(self,prefsCode.REPINI)
+ self.CONFIGStyle = configuration_ASTER.make_config_style(self,prefsCode.REPINI)
def cree_composants_graphiques(self):
"""
# Modules Eficas
import splash
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import convert
import generator
import AIDE
('Help24',"view_doc","Documentation de l'objet courant",'jdc')
)
try:
- menu_defs=prefs.menu_defs['bureau']
+ menu_defs=prefsCode.menu_defs['bureau']
except:
pass
try:
- button_defs=prefs.button_defs['bureau']
+ button_defs=prefsCode.button_defs['bureau']
except:
pass
from Editeur import import_code
from Editeur import session
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import convert
import generator
import string
self.top=None
self.test=2
- import configuration
- self.CONFIGURATION=configuration.make_config(self,prefs.REPINI)
+ import configuration_ASTER
+
+ self.CONFIGURATION=configuration_ASTER.make_config(self,prefsCode.REPINI)
self.load_readercata()
self.cata=self.readercata.cata
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clef " + itemobject.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else:
if self.object.suppentite(obj):
if len(self._object) == 1: self.updateDelegate()
- message = "Mot-clé " + obj.nom + " supprimé"
+ message = "Mot-clef " + obj.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else:
self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
return 0
if self.object.suppentite(itemobject):
- message = "Mot-clé " + itemobject.nom + " supprimé"
+ message = "Mot-clef " + itemobject.nom + " supprime"
self.appli.affiche_infos(message)
return 1
else :
Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
"""
self.frame_valeur = Frame(page)
- #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
self.frame_valeur.pack(expand=1)
# affichage du titre du panneau
self.titre = StringVar()
self.titre.set("PARAMETRE "+self.node.item.get_nom())
- #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
# création des labels et entries associés aux nom et valeur du paramètre
- #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
- Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5)
+ Label(self.frame_valeur,text= 'Nom du paramètre : ',justify=LEFT).grid(row=1,sticky=W,padx=5,pady=5)
self.entry_nom = Entry(self.frame_valeur)
- #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
- Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5)
+ Label(self.frame_valeur,text= 'Valeur du paramètre : ',justify=LEFT).grid(row=2,sticky=W,padx=5,pady=5)
self.entry_val = Entry(self.frame_valeur)
# binding sur entry_nom
self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
# affichage des entries
- #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
- #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5)
# affichage d'une phrase d'aide
- aide = """
- Un retour de chariot dans une zone de saisie vous permet de vérifier si
- la valeur que vous avez entrée est valide.
- Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
- valeurs seront effectivement prises en compte
- """
- #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
- Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5)
- self.frame_valeur.columnconfigure(1,weight=1)
+ aide = """Un retour de chariot dans une zone de saisie vous permet
+de vérifier si la valeur que vous avez entrée est valide.
+Ce n'est qu'après avoir appuyé sur le bouton Valider que les
+nouvelles valeurs seront effectivement prises en compte"""
+ Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5,sticky=W)
+ #self.frame_valeur.columnconfigure(1,weight=1)
# affichage des nom et valeur du paramètre
self.display_valeur()
self.entry_nom.focus()
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
class EFICAS(appli.APPLI):
try:
- from prefs import appli_composants
+ import prefs
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ from prefsCode import appli_composants
except:
appli_composants=['readercata','bureau','browser','options']
# Modules Eficas
import prefs
-if hasattr(prefs,'encoding'):
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
+if hasattr(prefsCode,'encoding'):
# Hack pour changer le codage par defaut des strings
import sys
reload(sys)
- sys.setdefaultencoding(prefs.encoding)
+ sys.setdefaultencoding(prefsCode.encoding)
del sys.setdefaultencoding
# Fin hack
# Modules Eficas
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import fontes
class FAQ:
buttons=('Lu',),
title="FAQs et limitations d'EFICAS",
command = self.lu_FAQ)
- txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
+ txt = open(os.path.join(prefsCode.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
Texte = Pmw.ScrolledText(self.Dialog.interior(),
text_font=fontes.standard)
Texte.insert(END,txt)
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
try:
import prefs
- ICONDIR=prefs.ICONDIR
+ name='prefs_'+prefs.code
+ prefsCode=__import__(name)
+ ICONDIR=prefsCode.ICONDIR
except:
# Par defaut on utilise le repertoire local icons
ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'/Editeur/icons')
self.init()
try:
- from prefs import labels
+ import prefs
+ name='prefs_'+prefs.code
+ from prefsCode import labels
except:
labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traduction')
from widgets import ListeChoix, showerror
from widgets import ListeChoixParGroupes
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import options
SEPARATEUR = '-'*30
texte_infos = ''
for e in cmd.entites.keys() :
if e == name :
- texte_infos=getattr(cmd.entites[e],prefs.lang)
+ texte_infos=getattr(cmd.entites[e],prefsCode.lang)
break
if texte_infos == '' : texte_infos="Pas d'infos disponibles"
self.parent.appli.affiche_infos(texte_infos)
def selectCmd(self,name):
""" On retrouve la commande sous le curseur pour affichage du fr """
if name != 'COMMENTAIRE' and name != SEPARATEUR:
- texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang)
+ texte_infos=getattr(self.parent.jdc.get_cmd(name),prefsCode.lang)
self.parent.appli.affiche_infos(texte_infos)
def defCmd(self,name):
"""
Crée la page de saisie du nom du concept
"""
- self.label = Label(page,text='Nom du concept :')
- self.label.place(relx=0.1,rely=0.4)
+ self.label = Label(page,text='Nom du concept :',justify=LEFT)
+ self.label.grid(row=0,sticky=W,padx=5,pady=10)
self._any = Entry(page,relief='sunken')
- self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+ self._any.grid(row=0,column=1,padx=5,pady=10)
self._any.bind("<Return>",lambda e,s=self:s.execConcept())
self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
self._any.insert(0,self.node.item.GetText())
self.but_ok=Button(page,text = "Valider",command=self.execConcept)
- self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35)
type_sd = self.node.item.get_type_sd_prod()
+ row=1
if type_sd :
- txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+ txt = "L'opérateur courant retourne un objet de type:\n%s" %type_sd
self.label = Label(page, text = txt)
- self.label.place(relx=0.5,rely=0.55,anchor='n')
+ self.label.grid(row=1,columnspan=2,padx=5,pady=10,sticky=W)
+ row=2
+ self.but_ok.grid(row=row,columnspan=2,padx=5,pady=10)
self._any.focus()
# aide associée au panneau
bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
au concept retounré par l'opérateur courant et pressez <Return> pour valider"""
page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-
def makeMoclesPage(self,page):
"""
self.frame_comment = Frame(page,bd=1,relief='raised')
self.frame_param = Frame(page,bd=1,relief='raised')
self.frame_boutons = Frame(page,bd=1,relief='raised')
- self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40)
- self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40)
- self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16)
# remplissage de la frame commentaire
- Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w')
+ Label(self.frame_comment,text = "Insérer un commentaire :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5)
but_comment_avant = Button(self.frame_comment,
text = "AVANT "+self.node.item.get_nom(),
command = lambda s=self :s.ajout_commentaire(ind = 'before'))
but_comment_apres = Button(self.frame_comment,
text = "APRES "+self.node.item.get_nom(),
command = self.ajout_commentaire)
- but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
- but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+ but_comment_avant.grid(row=0,column=1,padx=5, pady=5)
+ but_comment_apres.grid(row=1,column=1,padx=5, pady=5)
+ self.frame_comment.pack(side='top',fill='both',padx=5, pady=5)
# remplissage de la frame paramètre
- Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w')
+ Label(self.frame_param,text = "Insérer un paramètre :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5)
but_param_avant = Button(self.frame_param,
text = "AVANT "+self.node.item.get_nom(),
command = lambda s=self :s.ajout_parametre(ind = 'before'))
but_param_apres = Button(self.frame_param,
text = "APRES "+self.node.item.get_nom(),
command = self.ajout_parametre)
- but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
- but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+ but_param_avant.grid(row=0,column=1,padx=5, pady=5)
+ but_param_apres.grid(row=1,column=1,padx=5, pady=5)
+ self.frame_param.pack(side='top',fill='both',padx=5, pady=5)
# remplissage de la frame boutons
Button(self.frame_boutons,
text="Commentariser toute la commande",
- command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
+ command = self.comment_commande).pack(side='top',padx=5, pady=5)
+ self.frame_boutons.pack(side='top',fill='both',padx=5, pady=5)
def deselectMC(self,name):
self.parent.appli.affiche_infos('')
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import showinfo
self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
self.label.place(relx=0.05,rely=0.2)
- # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel.
+ # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel.
bouton_valeurs_fichier = Button(self.frame_choix,
text="Importer",
command=self.select_in_file)
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-#import prefs
#import panels
#import images
#from widgets import ListeChoix
# -*- coding: utf-8 -*-
import os
import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
import basestyle
from basestyle import STYLE,style
-inistylefile=os.path.join(prefs.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.REPINI,"style.py")
if os.path.isfile(inistylefile):
execfile(inistylefile)
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import FenetreDeParametre
self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
self.label = Label(self.frame_valeur,text='Valeur :')
- #self.label.place(relx=0.1,rely=0.2)
self.label.grid(row=0,padx=5,pady=5)
self.entry = Entry(self.frame_valeur,relief='sunken')
- #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6)
self.entry.grid(row=0,column=1,padx=5,pady=5)
self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
text = aide,
wraplength=int(self.frame_valeur.winfo_width()*0.8),
justify='center')
- #self.aide.place(relx=0.5,rely=0.9,anchor='n')
self.aide.grid(row=4,columnspan=2,padx=5,pady=5)
# bouton parametre
bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre)
- #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4)
bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5)
bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide)
- #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4)
bouton_val.grid(row=3,columnspan=2,padx=5,pady=5)
# affichage de la valeur du MCS
self.display_valeur()
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# Modules Eficas
from Editeur import Objecttreeitem
-import prefs
import panels
import images
from widgets import ListeChoix
# définition des frames
self.frame_texte = Frame(self.fenetre)
self.frame_boutons = Frame(self.fenetre)
- #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9)
- #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.)
# définition de la zone texte et du scrollbar
self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap,
height=height,width=width)
self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,
default='active')
self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save)
- #self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
- #self.but_save.place(relx=0.6,rely=0.5,anchor='center')
self.but_quit.pack(side='left',padx=25, pady=5)
self.but_save.pack(side='right',padx=25, pady=5)
- self.frame_texte.pack(side='top',fill='both',expand=1)
- self.frame_boutons.pack(side='bottom')
+ self.frame_boutons.pack(side='bottom',padx=5,pady=5)
+ self.frame_texte.pack(side='top',fill='both',expand=1,padx=5,pady=5)
self.zone_texte.focus_set()
self.fenetre.bind('<Return>',self.quit) #dismiss window
""" Affiche le texte dans la fenêtre """
if texte != "" :
self.zone_texte.insert(END,texte)
- try:
- self.fenetre.update_idletasks()
- x0,y0,x1,y1 = self.zone_texte.bbox(END)
- if (y1-y0) < 300 : self.efface_scroll()
- except:
- pass
+ self.fenetre.update_idletasks()
+ curline = int(self.zone_texte.index("insert").split('.')[0])
+ if curline < int(self.zone_texte["height"]):
+ self.efface_scroll()
def save(self):
""" Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
self.appli=appli
self.fenetre = Toplevel()
- self.fenetre.configure(width = 800,height=500)
self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
self.fenetre.title(titre)
self.texte = string.replace(texte,'\r\n','\n')
# définition des frames
self.frame_texte = Frame(self.fenetre)
self.frame_boutons = Frame(self.fenetre)
- self.frame_boutons.place(relx=0,rely=0, relwidth=1.,relheight=0.1)
- self.frame_texte.place( relx=0,rely=0.1, relwidth=1, relheight=0.9)
# définition de la zone texte et du scrollbar
self.zone_texte = Text(self.frame_texte,font=fonte)
self.zone_texte.bind("<Key-Prior>", self.page_up)
# définition des boutons
self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
self.but_no = Button(self.frame_boutons,text = no,command = self.no)
- self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
- self.but_no.place(relx=0.6,rely=0.5,anchor='center')
+ self.but_yes.pack(side="left",padx=5,pady=5)
+ self.but_no.pack(side="left",padx=5,pady=5)
+ self.frame_boutons.pack(side="top",padx=5,pady=5)
# affichage du texte
self.affiche_texte(self.texte)
+ self.frame_texte.pack(side="top",fill='both',padx=5,pady=5,expand=1)
centerwindow(self.fenetre)
def yes(self):
Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.
"""
def __init__(self,panel,item,appli,titre="",texte="",cardinal=1):
- Fenetre.__init__(self,appli,titre=titre,texte=texte)
- self.frame_boutons.place_forget()
- self.frame_texte.place_forget()
- self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8)
- self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
+ Fenetre.__init__(self,appli,titre=titre,texte=texte,width=20,height=15)
self.cardinal=cardinal
- self.fenetre.configure(width = 320,height=400)
- centerwindow(self.fenetre)
+ #self.fenetre.configure(width = 320,height=400)
self.panel = panel
self.item = item
self.fenetre.title(titre)
selectioncommand = self.choose_separateur,
scrolledlist_items = l_separateurs_autorises)
self.choix_sep.component('entry').configure(width=6)
- self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
- self.choix_sep.selectitem(self.separateur)
+ self.choix_sep.grid(row=0,rowspan=2,padx=5,pady=5)
+ #self.choix_sep.selectitem(self.separateur)
# Replacement
- self.but_quit.place_forget()
- self.but_save.place_forget()
+ self.but_quit.pack_forget()
+ self.but_save.pack_forget()
self.but_all = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout)
- self.but_save.place(relx=0.6,rely=0.6,anchor='center')
- self.but_quit.place(relx=0.8,rely=0.6,anchor='center')
- self.but_all.place(relx=0.7,rely=0.2,anchor='center')
+ self.but_save.grid(row=1,column=1,padx=5,pady=5)
+ self.but_quit.grid(row=1,column=2,padx=5,pady=5)
+ self.but_all.grid(row=0,column=1,columnspan=2,padx=5,pady=5)
self.choose_separateur('espace')
+ centerwindow(self.fenetre)
def get_separateurs_autorises(self):
self.parent=parent
self.appli=appli
self.fenetre = Toplevel()
- self.fenetre.configure(width = 250,height=100)
+ #self.fenetre.configure(width = 250,height=100)
self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
self.fenetre.title("Parametres")
self.titre = "Parametres"
# définition des frames
self.frame_texte = Frame(self.fenetre)
- self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7)
# définition de la zone texte et du scrollbar
- self.zone_texte = Text(self.frame_texte,font=fonte)
+ self.zone_texte = Text(self.frame_texte,font=fonte,width=40)
self.zone_texte.bind("<Key-Prior>", self.page_up)
self.zone_texte.bind("<Key-Next>", self.page_down)
self.zone_texte.bind("<Key-Up>", self.unit_up)
# définition des boutons
self.frame_boutons = Frame(self.fenetre)
- self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.)
- self.label1 = Label(self.frame_boutons,text="surligner la")
- self.label2 = Label(self.frame_boutons,text="ligne entière")
- self.label1.place(relx=0.1,rely=0)
- self.label2.place(relx=0.1,rely=0.5)
+ self.label1 = Label(self.frame_boutons,text="surligner la\nligne entière",justify=LEFT)
self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir)
- self.but_save.place(relx=0.6,rely=0,relheight=1)
- self.but_quit.place(relx=0.8,rely=0,relheight=1)
+ self.but_quit.pack(side='right',padx=5, pady=5)
+ self.but_save.pack(side='right',padx=5, pady=5)
+ self.label1.pack(side='right',padx=5, pady=5)
+ self.frame_boutons.pack(side='bottom')
+ self.frame_texte.pack(side='top',expand=1,fill='both')
def Choisir(self):
l_param = ""
for param in selection.splitlines():
nomparam=param[0:param.find("=")-1]
- if nomparam != '' :
+ if nomparam != '' :
l_param=l_param+nomparam+','
self.parent.entry.delete(0,Tkinter.END)
self.parent.entry.insert(0,l_param[0:-1])
self.parent.valid_valeur()
self.quit()
+ def affiche_texte(self,texte):
+ """ Affiche le texte dans la fenêtre """
+ if texte != "" :
+ self.zone_texte.insert(END,texte)
+ self.fenetre.update_idletasks()
+ curline = int(self.zone_texte.index("insert").split('.')[0])
+ if curline < int(self.zone_texte["height"]):
+ self.zone_texte["height"]=curline
+ self.efface_scroll()
+
class Formulaire:
"""
Cette classe permet de créer une boîte Dialog dans laquelle
def affiche_liste(self):
""" Affiche la liste dans la fenêtre"""
liste_labels=[]
- self.dico_mots={}
+ self.dico_mots={}
self.MCbox.config(state=NORMAL)
self.MCbox.delete(1.0,END)
for grp in self.liste_groupes:
# On a trouve une commande on arrete la recherche
return
+if __name__ == "__main__":
+ root=Tkinter.Tk()
+ f=FenetreDeParametre(root,None,None,"\n".join(["coucouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=2"]*15))
+ #f=FenetreYesNo(None,titre="Le titre",texte="\n".join(["Le textexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]*35),yes="Yes",no="No")
+
+
+ root.mainloop()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+#configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py.in
+# ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+# @ONLY )
+
+install ( FILES qtEficas_map.py
+ prefs.py
+ style.py
+ prefs_MAP.py
+ configuration_MAP.py
+ catalogues_MAP.ini
+ s_poly_st_1_V1.py
+ s_poly_st_1_V1_clefs_docu
+ s_scc_st_2_V1.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/MAP
+ )
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Doc
+ ${CMAKE_CURRENT_SOURCE_DIR}/Templates
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/MAP
+ )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+OPTIONS
+3D BENHUR SCALE
+I - Morphologie (MESSALA)
+1) dimension du VER cubique [m] (entree)
+%_PYGMEE_TAILLE%
+2) fraction volumique seuil écrétant le fuseau (entree)
+.11
+3) fichier decrivant le fuseau granulaire descendant (entree)
+-
+4) fichier decrivant la position et la taille des boules (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/pygmee_output.txt
+5) fichier CAO de la morphologie (sortie)
+-
+6) facteur de correction de fraction volumique (entree)
+1.0
+
+II - Maillage (BENHUR)
+1) fichier entree décrivant le maillage support (entree)
+%_PATH_BENHUR%/regular_mesh_3D_%_BENHUR_FINESSE%.msh
+2) fichier sortie du maillage (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.msh
+3) fichier commentaire sur les statistiques décrivant le maillage (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.log
+4) fichier BMP décrivant une coupe binarisée du VER (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.bmp
+5) fichier TXT donnant la level set du contour aux noeuds (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%_levelset.txt
+
--- /dev/null
+# fichier de mise en donnee de la generation du VER MOX
+# nombre de phases
+1
+#fuseau 1 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant
+%_PATH_MODULE%/s_poly_st_1/inclusion_size_distribution.txt
+#fuseau 2 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant
+toto.txt
+# taille du VER en microns
+%_PYGMEE_TAILLE%
+# distance de repulsion :
+%_PYGMEE_DISTANCE%
--- /dev/null
+#===========================================
+# 20090416 jsn
+# cas test thermique : cube homogene isotrope
+# soumis a un -gradT homogene au contour qcq (donne par ses 3 composantes mg1,mg2,mg3)
+# les champs sont sortis au format gmsh
+# les moyennes des champs de gradient de temperature et de flux de chaleur sont calcules
+#
+# teste en STA9.4
+#============================================
+
+# nbre de classes (de 0% a 100% d'inclusions)
+nb_classes=11
+# specifier le repertoire dans lequel on trouve "entree_schema.dat", "entree_cl.dat" et dans lequel on ecrit "sortie_resultats.dat"
+racine="%_PATH_MODULE%/s_poly_st_1/"
+# nb_classes lignes de float : les lambda donnes par le schema pour la fraction d'incl de chaque classe (de 0% incl a 100% incl tous les N% selon nb_classes)
+fic_entree_schema =racine+"s_poly_st_1_aster.mat"
+
+# cote cube
+L=%_PYGMEE_TAILLE%
+
+# conductivite isotrope
+lambd=1.
+# -gradT homogene au contour
+mg1=1.0
+mg2=0.0
+mg3=0.0
+# nbre de classes (de 0% a 100% d'inclusions)
+nb_classes=11
+# lecture schema = lambda pour chaque classe
+lambda_t = [0.0]*nb_classes
+print("'\n")
+for i in range(0,nb_classes):
+ alpha=float((i-1)/(nb_classes-1))
+ lambda_t[i]=(1-alpha)*%_ASTER_CONDUCTIVITE_M%+(alpha)*%_ASTER_CONDUCTIVITE_I%
+
+DEBUT(PAR_LOT='OUI',); # 'OUI' evite l'alarme
+
+# lecture maillage format gmsh
+PRE_GMSH();
+mail=LIRE_MAILLAGE();
+
+# definition des gpes de mailles (surfaces de type 'xp' (x=L) ,'xm' (x=0),... et volume 'vol' regroupant toutes les mailles)
+GMsur_gmsh_noms = ['GM1001', 'GM1002', 'GM1003', 'GM1004', 'GM1005', 'GM1006',]
+GMsur_aster_noms = ['xm', 'xp', 'ym', 'yp', 'zm', 'zp',]
+GMsur_aster_list = [ _F(NOM=GMsur_aster_noms[i],GROUP_MA=GMsur_gmsh_noms[i],) for i in range(0,len(GMsur_gmsh_noms)) ]
+
+GMvol_gmsh_noms = ['GM10000', 'GM10100', 'GM10200', 'GM10300', 'GM10400', 'GM10500', 'GM10600', 'GM10700', 'GM10800', 'GM10900', 'GM11000',]
+GMvol_aster_nom = 'vol'
+GMvol_aster_list = [ _F(NOM=GMvol_aster_nom,UNION=GMvol_gmsh_noms) ]
+
+mail=DEFI_GROUP(reuse =mail,
+ MAILLAGE=mail,
+ CREA_GROUP_MA=GMsur_aster_list+GMvol_aster_list,);
+
+# definition d'1 groupe de noeuds contenant le nd en (0,0,0)->nd0 afin de fixer la temperature en un point (supprimer les "mvts de corps rigide") ds le cas de CL en flux homogene au contour
+# definition par intersection des faces du cube
+mail=DEFI_GROUP(reuse =mail,
+ MAILLAGE=mail,
+ CREA_GROUP_NO=(_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),
+ CRIT_NOEUD='TOUS',),
+ ),);
+mail=DEFI_GROUP(reuse =mail,
+ MAILLAGE=mail,
+ CREA_GROUP_NO=(_F(NOM='nd0',
+ INTERSEC=('xm','ym','zm',),),
+ ),);
+
+# on s'assure que sur la frontiere du cube la normale soit bien sortante
+mail = MODI_MAILLAGE(reuse =mail,
+ MAILLAGE=mail,
+ ORIE_PEAU_3D=_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),),
+ );
+
+# modele : thermique 3D (affecte a toutes les mailles)
+modl=AFFE_MODELE(MAILLAGE=mail,
+ AFFE=_F(TOUT='OUI',
+ PHENOMENE='THERMIQUE',
+ MODELISATION='3D',),);
+
+# materiau unique (cube homogene)
+mat=DEFI_MATERIAU(THER=_F(LAMBDA=lambd,
+ RHO_CP=1,),);
+
+# definition materiaux mat[0] (0% incl) a mat[nb_classes-1] (100% incl)
+mat_t=[0.]*nb_classes
+for i in range(0,nb_classes):
+ mat_t[i]=DEFI_MATERIAU(THER=_F(LAMBDA=lambda_t[i],
+ RHO_CP=1,),);
+
+# affectation de chaque materiau au groupe de mailles correspondant, si celui ci existe
+affe_mater_list = [ _F(GROUP_MA=GMvol_gmsh_noms[i], MATER=mat_t[i],) for i in range(0,nb_classes) ]
+
+chmat=AFFE_MATERIAU(MAILLAGE=mail,
+ AFFE=affe_mater_list,);
+
+#chmat=AFFE_MATERIAU(MAILLAGE=mail,
+# AFFE=_F(GROUP_MA='vol', MATER=mat,),);
+
+# preparation CL en -gradT homogene au contour (composantes mg1,mg2,mg3)
+# T = - (mg1*x + mg2*y + mg3*z)
+# ne depend que de 2 variables d'espace sur chaque face du cube, et de plus lineairement => utilisation de nappes
+l_temp=[]
+nap=[None]*6
+mg=[mg1,mg2,mg3]
+var = ['X','Y','Z']
+l_gma=[['zm','zp'],['xm','xp'],['ym','yp']] # groupes de mailles identifiant les 6 faces du cube
+for i in range(0,3):
+ par1 = var[(1+i)%3] # 1er parametre nappe
+ par2 = var[(0+i)%3] # 2e parametre nappe
+ val00 = 0 # valeur prise lorsque par1=0, par2=0
+ val01 = -(mg[(0+i)%3]*L) # valeur prise lorsque par1=0, par2=L
+ val10 = -(mg[(1+i)%3]*L) # valeur prise lorsque par1=L, par2=0
+ val11 = -(mg[(0+i)%3]*L+mg[(1+i)%3]*L) # valeur prise lorsque par1=L, par2=L
+ for j in range(0,2):
+ nap[i*2+j] = DEFI_NAPPE ( NOM_PARA = par1, PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+ PARA = (0, L),
+ NOM_PARA_FONC = par2,
+ DEFI_FONCTION = (
+ _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+ VALE =(0,val00 , L,val01),
+ ),
+ _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+ VALE =(0,val10 , L,val11),
+ ),
+ )
+ )
+ l_temp.append( _F(GROUP_MA=(l_gma[i][j],), TEMP=nap[i*2+j],) )
+ # passage de la face - a la face + :
+ val00 += -(mg[(2+i)%3]*L)
+ val01 += -(mg[(2+i)%3]*L)
+ val10 += -(mg[(2+i)%3]*L)
+ val11 += -(mg[(2+i)%3]*L)
+
+# affectation CL en -gradT homogene au contour
+climites=AFFE_CHAR_THER_F(MODELE=modl,
+ TEMP_IMPO= l_temp )
+
+# resolution F=K.u
+resther = THER_LINEAIRE(MODELE=modl,
+ CHAM_MATER=chmat, # caracteristiques materiau
+ EXCIT=(_F(CHARGE=climites),), # chargement (ici seulement des cl)
+ );
+
+# calcul flux chaleur aux points de gauss
+resther=CALC_ELEM(reuse =resther,
+ RESULTAT=resther,
+ OPTION='FLUX_ELGA_TEMP',);
+
+###############################
+# DEBUT calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
+matfict=DEFI_MATERIAU(THER=_F(LAMBDA=1,
+ RHO_CP=1,),);
+cmatfict=AFFE_MATERIAU(MAILLAGE=mail,
+ AFFE=_F(TOUT='OUI', MATER=matfict,),);
+resmgrad=CALC_ELEM(RESULTAT=resther,
+ OPTION='FLUX_ELGA_TEMP',
+ CHAM_MATER=cmatfict);
+# FIN calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
+# dans m_gradm le champ de flux de chaleur est en fait egal au champ de (- grad T)
+###############################
+
+# impression resultats format gmsh : champs de temperature, flux, gradient de temperature
+IMPR_RESU( MODELE=modl,
+ FORMAT='GMSH',
+# FORMAT='MED',
+ UNITE=37,
+ RESU=(_F(RESULTAT = resther,),
+ _F(RESULTAT = resmgrad,
+ NOM_CHAM='FLUX_ELGA_TEMP',
+ NOM_CMP=('FLUX','FLUY','FLUZ',),)
+ ));
+
+IMPR_RESU(
+ FORMAT='MED',
+ UNITE=38,
+ RESU=(_F(RESULTAT = resther,),
+ _F(RESULTAT = resmgrad,
+ NOM_CHAM='FLUX_ELGA_TEMP',
+ NOM_CMP=('FLUX','FLUY','FLUZ',),)
+ ));
+
+# calcul integrale et moyenne du flux de chaleur sur l'ensemble du cube
+fluxmtot = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
+ NOM_CHAM='FLUX_ELGA_TEMP',
+ NOM_CMP=('FLUX','FLUY','FLUZ',),),
+ MODELE=modl,
+ RESULTAT=resther,);
+# idem moyenne du gradient de temperature
+m_gradm = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
+ NOM_CHAM='FLUX_ELGA_TEMP',
+ NOM_CMP=('FLUX','FLUY','FLUZ',),),
+ MODELE=modl,
+ RESULTAT=resmgrad,);
+
+# impression des flux moy
+IMPR_TABLE(TABLE=fluxmtot,
+ NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
+# et moy du grad de temperature
+IMPR_TABLE(TABLE=m_gradm,
+ NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
+
+# fin de l'execution
+FIN();
--- /dev/null
+P serveur localhost
+P version %_ASTER_VERSION%
+P lang fr
+P debug debug
+P mode interactif
+P ncpus 1
+P mpi_nbcpu 1
+P mpi_nbnoeud 1
+P classe
+P depart
+P distrib
+P flashdir
+P exectool
+P nomjob cube_therm_grad
+P origine ASTK 1.8.0
+A args
+A memjeveux 218.75
+P mem_aster 100.0
+A tpmax 3600
+P memjob 1792000
+P tpsjob 60
+P follow_output yes
+P nbmaxnook 5
+P cpresok RESNOOK
+P facmtps 1
+P corefilesize unlimited
+F comm %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.comm D 1
+F msh %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_benhur_%_BENHUR_FINESSE%.msh D 19
+F resu %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu R 8
+F mess %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.mess R 6
+F erre %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.erre R 9
+F msh %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu.msh R 37
+F med %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu.med R 38
+P consbtc oui
+P soumbtc oui
+P actions make_etude
--- /dev/null
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+# (code, ssCode, catalogue, formatOut, formatIN)
+ ('MAP','s_poly_st_1_V1',os.path.join(rep_cata,'s_poly_st_1_V1.py'),'s_poly_st_1','MAP'),
+ ('MAP','s_polymers_st_1_V1',os.path.join(rep_cata,'s_polymers_st_1_V1.py'),'s_polymers_st_1','MAP'),
+ ('MAP','s_scc_st_2_V1',os.path.join(rep_cata,'s_scc_st_2_V1.py'),'s_scc_st_2','MAP'),
+)
+
--- /dev/null
+# -*- coding: utf-8 -*-\r
+# CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+ Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import os\r
+import configuration\r
+\r
+# Modules Eficas\r
+from Editeur import utils\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+ #-----------------------------------\r
+ def __init__(self,appli,repIni):\r
+ #-----------------------------------\r
+\r
+ configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_MAP')\r
+ self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+ self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','map_path']\r
+ self.labels_user=self.labels_user+['PATH_PYGMEE','PATH_BENHUR','PATH_ASTER','PATH_MODULE']\r
+ self.labels_user=self.labels_user+['PATH_STUDY','NAME_SCHEME','PATH_FDVGRID','PATH_MAP','OpenTURNS_path','PATH_GMSH']\r
+\r
+ self.labels_eficas=["map_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+ self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues",'PATH_PYGMEE']\r
+ self.labels_eficas=self.labels_eficas+['PATH_BENHUR','PATH_ASTER','PATH_MODULE','PATH_STUDY']\r
+ self.labels_eficas=self.labels_eficas+['NAME_SCHEME','PATH_FDVGRID','PATH_MAP','OpenTURNS_path','PATH_GMSH']\r
+\r
+ self.cataFile="catalogues_MAP.ini"\r
+ self.setValeurs()\r
+\r
+\r
+def make_config(appli,rep):\r
+ return CONFIG(appli,rep)\r
+\r
+\r
+\r
--- /dev/null
+code='MAP'
--- /dev/null
+# -*- coding: utf-8 -*-\r
+# CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+\r
+import os, sys\r
+# Les variables pouvant positionnees sont :\r
+print "import des prefs de MAP"\r
+\r
+# REPINI sert à localiser le fichier \r
+# initialdir sert comme directory initial des QFileDialog\r
+# positionnee a repin au debut mise a jour dans configuration\r
+REPINI=os.path.dirname(os.path.abspath(__file__))\r
+initialdir=REPINI \r
+\r
+# INSTALLDIR sert à localiser l'installation d'Eficas\r
+INSTALLDIR=os.path.join(REPINI,'..')\r
+PATH_MAP="/local/noyret/MAP/"\r
+PATH_PYGMEE=PATH_MAP+"/components/pygmee_v1"\r
+PATH_BENHUR=PATH_MAP+"/components/benhur"\r
+PATH_FDVGRID=PATH_MAP+"components/fdvgrid/ther2d/bin"\r
+PATH_MODULE=PATH_MAP+"/modules/polymers"\r
+PATH_STUDY=PATH_MAP+"/studies/demonstrateur_poly_st1"\r
+PATH_ASTER="/local/noyret/bin/Aster10/bin"\r
+PATH_GMSH="/usr/bin"\r
+\r
+\r
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')\r
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang\r
+lang='fr'\r
+encoding='iso-8859-1'\r
+\r
+# Acces a la documentation\r
+rep_cata = INSTALLDIR\r
+path_doc = os.path.join(REPINI,'Doc')\r
+exec_acrobat = "/usr/bin/xpdf"\r
+savedir = os.environ['HOME']\r
+\r
+OpenTURNS_path='/opt/Openturns/Install_0_13_2/lib/python2.5/site-packages'\r
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]\r
+\r
--- /dev/null
+# -*- coding: utf-8 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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.
+# ======================================================================
+# IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+# DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "7.1.0"
+date = "23/04/2003"
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+"""
+ Ce module sert à lancer EFICAS configuré pour Perfect
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from PyQt4.QtGui import *
+
+from Editeur import import_code
+from Editeur import session
+from qtEficas import Appli
+
+from InterfaceQT4 import eficas_go
+from InterfaceQT4 import monChoixMap
+
+class ChoixCata:
+ def __init__(self):
+ self.schema=""
+ self.module=""
+ self.nom=""
+
+options=session.parse(sys.argv)
+cata=options.cata
+MonChoixCata=ChoixCata()
+if cata == None :
+ app = QApplication(sys.argv)
+ ChoixMap = monChoixMap.MonChoixMap(MonChoixCata)
+ ChoixMap.show()
+ res=app.exec_()
+else :
+ import re
+ p=re.compile('_V\d+')
+ if p.search(cata) == None :
+ print "Ce Catalogue ne convient pas"
+ exit(1)
+ MonChoixCata.nom=cata[0: p.search(cata).start()]
+ #MonChoixCata.nom=cata
+
+#permet de choisir le module
+eficas_go.lance_eficas(code=prefs.code,ssCode=MonChoixCata.nom)
+#eficas_go.lance_eficas(code=prefs.code,choix="non")
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_MAP import PATH_MODULE
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+ execmodul = None,
+ regles=(AU_MOINS_UN('PYGMEE',),
+ AU_MOINS_UN('BENHUR',),
+ AVANT ('PYGMEE' , 'BENHUR'),
+ AVANT('ASTER','GMSH'),
+ EXCLUS('ASTER','FDVGRID'),
+ ),
+ )# Fin JDC_CATA
+#
+
+PYGMEE= PROC(nom="PYGMEE",op=None,
+ fr='definition de la morphologie',
+
+# NBPHASES=SIMP(statut='o',typ='I',defaut=1,into=(1,2)),
+ FUSEAU1=FACT(fr="entree de lecfus", statut='o',
+ FORME=SIMP(statut = "o", typ='TXM', defaut="fichier", into=("manuel","fichier")),
+
+ b_forme=BLOC( condition = "FORME == 'fichier'",
+ FORMAT = SIMP(statut = "o", typ='TXM', defaut="croissant", into=("croissant","decroissant")),
+ FICHIER = SIMP ( statut = "o", typ = "Fichier", defaut=PATH_MODULE+"/s_poly_st_1/inclusion_size_distribution.txt"),
+ ),
+
+ b_manuel=BLOC( condition = "FORME == 'manuel'",
+ LFUSEAU = SIMP ( statut = "o", typ=Tuple(2),validators=VerifTypeTuple(('R','R')), max="**",) ,),),
+# LFUSEAU = SIMP ( statut = "o", typ=Tuple(2), max="**",) ,),),
+
+
+ TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+ DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de PYGMEE", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+BENHUR= PROC(nom="BENHUR",op=None,
+ fr='definition du maillage',
+
+ FINESSE=SIMP(statut = "o",fr="nombre d\'elements par cote", typ='I', into=(10,12), defaut=10),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de BENHUR", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+FDVGRID = PROC(nom="FDVGRID", op=None,
+ fr='solver',
+ DIMENSION=SIMP(statut = "o",fr="dimension",typ='TXM', defaut="3D", into=("3D","2D")),
+ DIFFUSION=FACT(fr="flux de diffusion", statut='o',
+ COMPOX=SIMP(statut="o",fr="composante en X",typ='R',defaut=1.0),
+ COMPOY=SIMP(statut="o",fr="composante en Y",typ='R',defaut=0.0),
+ COMPOZ=SIMP(statut="o",fr="composante en Z",typ='R',defaut=0.0),),
+ FORMULATION=SIMP(statut = "o",fr="formulation",typ='TXM',defaut="v", into=("v","d"),),
+ CL=SIMP(statut = "o",fr="conditions aux limites",typ='TXM',defaut="t",into=("t","f")),
+ DISCRET=SIMP(statut = "o",fr="discretisation",typ='I', defaut=100, val_max=256),
+ SOLVER=SIMP(statut = "o",fr="dimension",typ='TXM', defaut="cross",into=("cross","pcg diag","pcg qi"),),
+ RESIDU=SIMP(statut = "o",fr="dimension",typ='R',defaut=1.e-4,),
+);
+#/./fdvgrid + parametres dans l ordre
+ASTER= PROC(nom="ASTER",op=None,
+ fr='definition du calcul',
+
+ VERSION=SIMP(statut = "o", typ='TXM', defaut="STA10.1"),
+ CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+ CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=1.0, val_min =0.),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+GMSH= PROC(nom="GMSH",op=None,
+ fr='post-traitement',
+
+ LANCEMENT=SIMP(statut = "o",fr="lancement de GMSH", typ='TXM', defaut="oui", into=("oui","non")),
+)
--- /dev/null
+BENHUR:MAP_2010_MOD1_20100531.pdf
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+ execmodul = None,
+ regles=(AU_MOINS_UN('PYGMEE',),AU_MOINS_UN('BENHUR',), AVANT ('PYGMEE' , 'BENHUR'),),
+ )# Fin JDC_CATA
+#
+
+PYGMEE= PROC(nom="PYGMEE",op=None,
+ fr='definition de la morphologie',
+
+# NBPHASES=SIMP(statut='o',typ='I',defaut=1,into=(1,2)),
+ FUSEAU1=FACT(fr="entree de lecfus", statut='o',
+ FORME=SIMP(statut = "o", typ='TXM', defaut="fichier", into=("manuel","fichier")),
+
+ b_forme=BLOC( condition = "FORME == 'fichier'",
+ FORMAT = SIMP(statut = "o", typ='TXM', defaut="croissant", into=("croissant","decroissant")),
+ FICHIER = SIMP ( statut = "o", typ = "Fichier", defaut="/local/noyret/MAP/modules/polymers/s_poly_st_1/inclusion_size_distribution.txt"),
+ ),
+
+ b_manuel=BLOC( condition = "FORME == 'manuel'",
+ LFUSEAU = SIMP ( statut = "o", typ=Tuple(2),validators=VerifTypeTuple(('R','R')), max="**",) ,),),
+# LFUSEAU = SIMP ( statut = "o", typ=Tuple(2), max="**",) ,),),
+
+
+ TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+ DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de PYGMEE", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+BENHUR= PROC(nom="BENHUR",op=None,
+ fr='definition du maillage',
+
+ FINESSE=SIMP(statut = "o",fr="nombre d\'elements par cote", typ='I', into=(10,12), defaut=10),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de BENHUR", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+ASTER= PROC(nom="ASTER",op=None,
+ fr='definition du calcul',
+
+ CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+ CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=1.0, val_min =0.),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+GMSH= PROC(nom="GMSH",op=None,
+ fr='post-traitement',
+
+ LANCEMENT=SIMP(statut = "o",fr="lancement de GMSH", typ='TXM', defaut="oui", into=("oui","non")),
+)
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_Map import PATH_MODULE
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+ execmodul = None,
+ regles=(AU_MOINS_UN('METHODE',),AU_MOINS_UN('MATERIAUX',),AU_MOINS_UN('DISCRETISATION',),),
+ )# Fin JDC_CATA
+#
+
+METHODE= PROC(nom="METHODE",op=None,
+ fr='choix de la methode de calcul (maillage ou grille cartesienne)',
+ CHOIX=SIMP(statut = "o",fr="elements finis sur maillage ou differences finies sur grilles", typ='TXM', defaut="FD+grid", into=("FEM+mesh","FD+grid")),
+ LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster ou de fdvgrid selon le choix", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+MATERIAUX= PROC(nom="MATERIAUX",op=None,
+ fr='definition des proprietes du materiau : fuseau, taille du VER, proprietes des phases',
+ TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+ FUSEAU = SIMP ( statut = "o", fr="Fichier représentant le fuseau granulaire",typ = "Fichier", defaut=PATH_MODULE+"/s_poly_st_1/inclusion_size_distribution.txt"),
+ DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+ CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+ CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=10.0, val_min =0.),
+)
+
+DISCRETISATION= PROC(nom="DISCRETISATION",op=None,
+ fr='definition du nombre d''elements sur le cote du VER',
+ FINESSE=SIMP(statut = "o",fr="nombre d'elements sur le cote", typ='I', defaut=10 , into=(10,12,20,32,64,128),),
+)
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_Map import PATH_MODULE
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+ execmodul = None,
+ #regles=(AU_MOINS_UN('TABLEAU',),AU_MOINS_UN('BENHUR',), AVANT ('PYGMEE' , 'BENHUR'),),
+ regles=(AU_MOINS_UN('TABLEAU',),AU_MOINS_UN('TRAITEMENT',),A_CLASSER('TABLEAU','TRAITEMENT',)),
+ )# Fin JDC_CATA
+#
+
+TABLEAU= PROC(nom="TABLEAU",op=None,
+ fr='lecture des proprietes a traiter ',
+ FICHIER=SIMP(statut = "o", typ='Fichier',),
+)
+
+TRAITEMENT= PROC(nom="TRAITEMENT",op=None,
+ fr='analyse statistique classique d une des variables du tableau ',
+ TYPE =SIMP(statut='o',typ='TXM',defaut="analyse statistique classique",
+ into=( "analyse statistique classique", "analyse statistique de la qualite","analyse de la dispersion suivant la distance au joint", "analyse de la dispersion suivant la distance a la pointe de fissure","visualisation dans le triangle standard"),),
+ VARIABLE =SIMP(statut='o',typ='TXM',defaut="stress_eq",
+ into=( "stress_eq", "strain_eq","strain_xx","strain_yy","strain_zz"),)
+)
+
--- /dev/null
+# Necessaire pour compatibilite avec Aster
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+
+install ( FILES
+ Cyclops.py __init__.py MakeNomComplet.py timing.py traced.py Trace.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Misc
+ )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py
+ PATTERN CVS EXCLUDE
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
-#@ MODIF N_ASSD Noyau DATE 02/06/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_ASSD Noyau DATE 14/12/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
self.id = self.parent.o_register(self)
# permet de savoir si le concept a été calculé (1) ou non (0)
self.executed = 0
- # initialise la partie "sd"
- super(ASSD, self).__init__(nomj='?&?&?&?&')
def __getitem__(self,key):
return self.etape[key]
-
+
def set_name(self, nom):
"""Positionne le nom de self (et appelle sd_init)
"""
self.nom = nom
- # test car FORMULE n'a pas de SD associée
- meth = getattr(super(ASSD, self), 'set_name', None)
- if meth:
- meth(nom)
+ # initialise la partie "sd" (pas pour entier, reel, formule)
+ sup = super(ASSD, self)
+ if hasattr(sup, 'nomj'): # == AsBase
+ sup.__init__(nomj=nom)
+ self.reparent_sd()
def reparent_sd(self):
"""Repositionne le parent des attributs de la SD associée.
"""
- # test car FORMULE n'a pas de SD associée
- meth = getattr(super(ASSD, self), 'reparent', None)
- if meth:
- meth(None, None)
-
+ sup = super(ASSD, self)
+ if hasattr(sup, 'nomj'): # == AsBase
+ sup.reparent(None, None)
+
def get_name(self):
"""
Retourne le nom de self, éventuellement en le demandant au JDC
if key[0]=='_':del d[key]
return d
- def par_lot(self):
+
+ def accessible(self):
+ """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
"""
- Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
+ if CONTEXT.debug: print '| accessible ?', self.nom
+ is_accessible = CONTEXT.get_current_step().sd_accessible()
+ if CONTEXT.debug: print ' `- is_accessible =', repr(is_accessible)
+ return is_accessible
+
+
+ def par_lot(self):
+ """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.
"""
+ #XXX eficas
if not hasattr(self, 'jdc') or self.jdc == None:
val = None
else:
val = self.jdc.par_lot
return val == 'OUI'
+
class assd(ASSD):
def __convert__(cls,valeur):
return valeur
--- /dev/null
+#@ MODIF N_ASSD Noyau DATE 02/06/2008 AUTEUR COURTOIS 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.
+#
+#
+# ======================================================================
+
+
+"""
+
+"""
+
+class ASSD(object):
+ """
+ Classe de base pour definir des types de structures de donnees ASTER
+ equivalent d un concept ASTER
+ """
+ idracine="SD"
+
+ def __init__(self,etape=None,sd=None,reg='oui'):
+ """
+ reg est un paramètre qui vaut oui ou non :
+ - si oui (défaut) : on enregistre la SD auprès du JDC
+ - si non : on ne l'enregistre pas
+ """
+ self.etape=etape
+ self.sd=sd
+ self.nom=None
+ if etape:
+ self.parent=etape.parent
+ else:
+ self.parent=CONTEXT.get_current_step()
+ if self.parent :
+ self.jdc = self.parent.get_jdc_root()
+ else:
+ self.jdc = None
+
+ if not self.parent:
+ self.id=None
+ elif reg == 'oui' :
+ self.id = self.parent.reg_sd(self)
+ else :
+ self.id = self.parent.o_register(self)
+ # permet de savoir si le concept a été calculé (1) ou non (0)
+ self.executed = 0
+ # initialise la partie "sd"
+ super(ASSD, self).__init__(nomj='?&?&?&?&')
+
+ def __getitem__(self,key):
+ return self.etape[key]
+
+ def set_name(self, nom):
+ """Positionne le nom de self (et appelle sd_init)
+ """
+ self.nom = nom
+ # test car FORMULE n'a pas de SD associée
+ meth = getattr(super(ASSD, self), 'set_name', None)
+ if meth:
+ meth(nom)
+
+ def reparent_sd(self):
+ """Repositionne le parent des attributs de la SD associée.
+ """
+ # test car FORMULE n'a pas de SD associée
+ meth = getattr(super(ASSD, self), 'reparent', None)
+ if meth:
+ meth(None, None)
+
+ def get_name(self):
+ """
+ Retourne le nom de self, éventuellement en le demandant au JDC
+ """
+ if not self.nom :
+ try:
+ self.nom=self.parent.get_name(self) or self.id
+ except:
+ self.nom=""
+ if self.nom.find('sansnom') != -1 or self.nom == '':
+ self.nom = self.id
+ return self.nom
+
+ def supprime(self):
+ """
+ Cassage des boucles de références pour destruction du JDC
+ """
+ self.etape = None
+ self.sd = None
+ self.jdc = None
+ self.parent = None
+
+ def accept(self,visitor):
+ """
+ Cette methode permet de parcourir l'arborescence des objets
+ en utilisant le pattern VISITEUR
+ """
+ visitor.visitASSD(self)
+
+ def __getstate__(self):
+ """
+ Cette methode permet de pickler les objets ASSD
+ Ceci est possible car on coupe les liens avec les objets
+ parent, etape et jdc qui conduiraient à pickler de nombreux
+ objets inutiles ou non picklables.
+ """
+ d=self.__dict__.copy()
+ for key in ('parent','etape','jdc'):
+ if d.has_key(key):del d[key]
+ for key in d.keys():
+ if key[0]=='_':del d[key]
+ return d
+
+ def par_lot(self):
+ """
+ Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
+ """
+ if not hasattr(self, 'jdc') or self.jdc == None:
+ val = None
+ else:
+ val = self.jdc.par_lot
+ return val == 'OUI'
+
+class assd(ASSD):
+ def __convert__(cls,valeur):
+ return valeur
+ __convert__=classmethod(__convert__)
-#@ MODIF N_BLOC Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_BLOC Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_CO Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_CO Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_CONVERT Noyau DATE 30/11/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_CONVERT Noyau DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
Module de conversion des valeurs saisies par l'utilisateur après vérification.
"""
-# -----------------------------------------------------------------------------
-def is_int(real):
+from N_types import is_int, is_float, is_enum
+
+
+def has_int_value(real):
"""Est-ce que 'real' a une valeur entière ?
"""
return abs(int(real) - real) < 1.e-12
-# -----------------------------------------------------------------------------
+
class Conversion:
"""Conversion de type.
"""
def convert(self, obj):
"""Filtre liste
"""
- in_type = type(obj)
- if in_type not in (list, tuple):
+ in_as_enum = is_enum(obj)
+ if not in_as_enum:
obj = (obj,)
result = []
for o in obj:
result.append(self.function(o))
- if in_type not in (list, tuple):
+ if not in_as_enum:
return result[0]
else:
# ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
def function(self, o):
raise NotImplementedError, 'cette classe doit être dérivée'
-# -----------------------------------------------------------------------------
+
class TypeConversion(Conversion):
"""Conversion de type
"""
def __init__(self, typ):
Conversion.__init__(self, 'type', typ)
-# -----------------------------------------------------------------------------
+
class IntConversion(TypeConversion):
"""Conversion en entier
"""
TypeConversion.__init__(self, 'I')
def function(self, o):
- if type(o) is float and is_int(o):
+ if is_float(o) and has_int_value(o):
o = int(o)
return o
-# -----------------------------------------------------------------------------
+
class FloatConversion(TypeConversion):
"""Conversion de type
"""
TypeConversion.__init__(self, 'R')
def function(self, o):
- if type(o) in (int, float, long):
+ if is_float(o):
o = float(o)
return o
-# -----------------------------------------------------------------------------
+
_convertI = IntConversion()
_convertR = FloatConversion()
-#@ MODIF N_CR Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_CR Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_ENTITE Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_ENTITE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_ETAPE Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_ETAPE Noyau DATE 16/11/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
Methode utilisee pour que l etape self se declare etape
courante. Utilise par les macros
"""
- #print "set_current_step ",self.nom
- #traceback.print_stack(limit=3,file=sys.stdout)
cs= CONTEXT.get_current_step()
if self.parent != cs :
raise "L'étape courante %s devrait etre le parent de self : %s" % (cs,self)
Methode utilisee par l'etape self qui remet son etape parent comme
etape courante
"""
- #print "reset_current_step ",self.nom
- #traceback.print_stack(limit=3,file=sys.stdout)
cs= CONTEXT.get_current_step()
if self != cs :
raise "L'étape courante %s devrait etre self : %s" % (cs,self)
if self.sd and self.reuse == None :
self.parent.NommerSdprod(self.sd,self.sd.nom)
+
+ def is_include(self):
+ """Permet savoir si on a affaire à une commande de type INCLUDE/INCLUDE_MATERIAU
+ car le comportement de ces macros est particulier.
+ """
+ return self.nom.startswith('INCLUDE')
+
+ def sd_accessible(self):
+ """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'étape.
+ """
+ if CONTEXT.debug: print '`- ETAPE sd_accessible :', self.nom
+ return self.parent.sd_accessible()
+
+ def get_concept(self, nomsd):
+ """
+ Méthode pour recuperer un concept à partir de son nom
+ """
+ # pourrait être appelée par une commande fortran faisant appel à des fonctions python
+ # on passe la main au parent
+ return self.parent.get_concept()
+
+
-#@ MODIF N_Exception Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_Exception Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_FACT Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_FACT Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_FONCTION Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_FONCTION Noyau DATE 10/11/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
self.expression=None
def __call__(self,*val):
- if hasattr(self.parent,'contexte_fichier_init'):
- context=self.parent.contexte_fichier_init
- else : context={}
+ context = {}
+ # cas de INCLUDE (ou POURSUITE dans Eficas)
+ context.update(getattr(self.parent, 'contexte_fichier_init', {}))
+ # récupération des constantes locales en cas de MACRO
+ context.update(getattr(self.parent, 'macro_const_context', {}))
i=0
for param in self.nompar :
context[param]=val[i]
"""
from SD.sd_fonction import sd_formule
from Utilitai.Utmess import UTMESS
- if not self.par_lot():
+ if self.accessible():
TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
sd = sd_formule(self.get_name())
prol = sd.PROL.get()
-#@ MODIF N_FORM Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_FORM Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_FORM_ETAPE Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_FORM_ETAPE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_GEOM Noyau DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_GEOM Noyau DATE 29/03/2010 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
return self.nom
def __convert__(cls,valeur):
- if isinstance(valeur, (str,unicode)):
- return valeur
- raise ValueError, 'On attend un chaine de caractères'
+ if isinstance(valeur, (str,unicode)) and len(valeur.strip()) <= 8:
+ return valeur.strip()
+ raise ValueError, 'On attend un chaine de caractères (de longueur < 8).'
__convert__=classmethod(__convert__)
class geom(GEOM):pass
-#@ MODIF N_JDC Noyau DATE 01/04/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_JDC Noyau DATE 16/11/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd
if self.appli != None :
- self.appli.affiche_infos('Interprétation du fichier de commandes en cours ...')
+ self.appli.affiche_infos('Interpretation du fichier de commandes en cours ...')
# On sauve le contexte pour garder la memoire des constantes
# En mode edition (EFICAS) ou lors des verifications le contexte
# est recalculé
def get_global_contexte(self):
return self.g_context.copy()
+
+ def get_contexte_courant(self, etape_courante=None):
+ """
+ Retourne le contexte tel qu'il est (ou 'sera' si on est en phase
+ de construction) au moment de l'exécution de l'étape courante.
+ """
+ if etape_courante is None:
+ etape_courante = CONTEXT.get_current_step()
+ return self.get_contexte_avant(etape_courante)
+
+
+ def get_concept(self, nomsd):
+ """
+ Méthode pour recuperer un concept à partir de son nom
+ """
+ return self.get_contexte_courant().get(nomsd.strip(), None)
+
+ def del_concept(self, nomsd):
+ """
+ Méthode pour supprimer la référence d'un concept dans le sds_dict.
+ Ne détruire pas le concept (différent de supprime).
+ """
+ try:
+ del self.sds_dict[nomsd.strip()]
+ except:
+ pass
+
+
def get_cmd(self,nomcmd):
"""
Méthode pour recuperer la definition d'une commande
self.index_etapes[etape] = len(self.etapes) - 1
etape.reparent(self)
etape.reset_jdc(self)
+
+ def sd_accessible(self):
+ """On peut acceder aux "valeurs" (jeveux) des ASSD si le JDC est en PAR_LOT="NON".
+ """
+ if CONTEXT.debug: print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot
+ return self.par_lot == 'NON'
+
-#@ MODIF N_JDC_CATA Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_JDC_CATA Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MACRO Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MACRO Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MACRO_ETAPE Noyau DATE 28/11/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MACRO_ETAPE Noyau DATE 23/03/2010 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
avec l'argument args.
"""
- self.definition=oper
- self.reuse=reuse
- self.valeur=args
+ self.definition = oper
+ self.reuse = reuse
+ self.valeur = args
self.nettoiargs()
- self.parent=CONTEXT.get_current_step()
+ self.parent = CONTEXT.get_current_step()
self.etape = self
- self.nom=oper.nom
- self.idracine=oper.label
- self.appel=N_utils.callee_where()
- self.mc_globaux={}
- self.g_context={}
+ self.nom = oper.nom
+ self.idracine = oper.label
+ self.appel = N_utils.callee_where()
+ self.mc_globaux = {}
+ self.g_context = {}
# Contexte courant
- self.current_context={}
- self.index_etape_courante=0
- self.etapes=[]
- self.index_etapes={}
- self.sds=[]
+ self.current_context = {}
+ self.macro_const_context = {}
+ self.index_etape_courante = 0
+ self.etapes = []
+ self.index_etapes = {}
+ self.sds = []
# Dans le cas d'une macro écrite en Python, l'attribut Outputs est un
# dictionnaire qui contient les concepts produits de sortie
# (nom : ASSD) déclarés dans la fonction sd_prod
- self.Outputs={}
- self.sd=None
- self.actif=1
- self.sdprods=[]
+ self.Outputs = {}
+ self.sd = None
+ self.actif = 1
+ self.sdprods = []
self.make_register()
- self.UserError="UserError"
+ self.UserError = "UserError"
def make_register(self):
"""
# La propriete du concept est transferee a l'etape avec le type attendu par l'étape
etape.sd=sd
sd.etape=etape
+ if self.reuse == sd and etape.reuse != sd \
+ and getattr(sd, "executed", 0) == 1: # n'a pas été pas détruit
+ raise AsException("Le concept '%s' est réentrant dans la macro-commande %s. " \
+ "Il devrait donc l'être dans %s (produit sous le nom '%s')." \
+ % (sd.nom, self.nom, etape.nom, nomsd))
# On donne au concept le type produit par la sous commande.
# Le principe est le suivant : apres avoir verifie que le type deduit par la sous commande
# est bien coherent avec celui initialement affecte par la macro (voir ci dessus)
d.update(self.g_context)
return d
+ def get_contexte_courant(self, etape_fille_du_jdc=None):
+ """
+ Retourne le contexte tel qu'il est au moment de l'exécution de
+ l'étape courante.
+ """
+ ctx = self.parent.get_contexte_courant(self)
+ # on peut mettre None car toujours en PAR_LOT='NON', donc la dernière
+ ctx.update( self.get_contexte_avant(None) )
+ return ctx
+
+ def get_concept(self, nomsd):
+ """
+ Méthode pour recuperer un concept à partir de son nom
+ dans le contexte du jdc connu avant l'exécution de la macro courante.
+ """
+ # chercher dans self.get_contexte_avant, puis si non trouve
+ # self.parent.get_concept est peut-etre plus performant
+ return self.get_contexte_courant().get(nomsd.strip(), None)
+
def copy(self):
""" Méthode qui retourne une copie de self non enregistrée auprès du JDC
et sans sd
concept.jdc=self.jdc
for e in self.etapes:
e.reparent(self)
+
+ def update_const_context(self, d):
+ """
+ Met à jour le contexte des constantes pour l'évaluation de
+ formules dans la macro.
+ """
+ # Dans le jdc, const_context est mis à jour par exec_compile
+ # Dans la macro, on n'a pas le code à compiler pour récupèrer les
+ # constantes locales à la macro. On demande donc explicitement de
+ # définir les constantes "locales".
+ self.macro_const_context.update(d)
+
+ def sd_accessible(self):
+ """On peut acceder aux "valeurs" (jeveux) des ASSD dans
+ les macro-commandes qui sont localement en PAR_LOT="NON"
+ sauf pour INCLUDE et INCLUDE_MATERIAU.
+ """
+ if CONTEXT.debug: print ' `- MACRO sd_accessible :', self.nom
+ return self.parent.sd_accessible() or not self.nom.startswith('INCLUDE')
+
-#@ MODIF N_MCBLOC Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_MCBLOC Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCCOMPO Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MCCOMPO Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCFACT Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_MCFACT Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCLIST Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MCLIST Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_MCSIMP Noyau DATE 13/10/2008 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MCSIMP Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_OBJECT Noyau DATE 16/05/2006 AUTEUR DURAND C.DURAND
+#@ MODIF N_OBJECT Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_OPER Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_OPER Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_PROC Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_PROC Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_PROC_ETAPE Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_PROC_ETAPE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_REGLE Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_REGLE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_SENSIBILITE Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_SENSIBILITE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_SIMP Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N_SIMP Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF N_VALIDATOR Noyau DATE 09/10/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_VALIDATOR Noyau DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG
implanter le concept de validateur dans Accas
"""
import types
-import string
import traceback
from N_ASSD import ASSD
+from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_enum
+
class ValError(Exception):pass
class ListProtocol(Protocol):
"""Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure"""
def default(self,obj):
- if type(obj) == types.TupleType :
+ if type(obj) is tuple:
if len(obj) > 0 and obj[0] in ('RI','MP'):
#il s'agit d'un complexe ancienne mode. La cardinalite vaut 1
return (obj,)
else:
return obj
- elif type(obj) == types.ListType :
+ elif type(obj) is list:
return obj
- elif obj == None :
+ elif obj == None:
# pas de valeur affecte. La cardinalite vaut 0
return obj
- elif type(obj) == types.StringType :
+ elif is_str(obj):
#il s'agit d'une chaine. La cardinalite vaut 1
return (obj,)
else:
listProto=ListProtocol("list")
+
class TypeProtocol(PProtocol):
"""Verificateur de type parmi une liste de types possibles"""
#pas de registre par instance. Registre unique pour toutes les instances de TypeProtocol
self.typ=typ
def default(self,obj,typ):
+ help = ""
for type_permis in typ:
if type_permis == 'R':
- if type(obj) in (types.IntType,types.FloatType,types.LongType):return obj
+ if is_float_or_int(obj): return obj
elif type_permis == 'I':
- if type(obj) in (types.IntType,types.LongType):return obj
+ if is_int(obj): return obj
elif type_permis == 'C':
- if self.is_complexe(obj):return obj
+ if self.is_complexe(obj): return obj
elif type_permis == 'TXM':
- if type(obj)==types.StringType:return obj
+ if is_str(obj): return obj
elif type_permis == 'shell':
- if type(obj)==types.StringType:return obj
+ if is_str(obj): return obj
+ elif type_permis == 'Fichier' :
+ import os
+ if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
+ return obj
+ else : raise ValError("%s n'est pas un fichier valide" % repr(obj))
elif type(type_permis) == types.ClassType or isinstance(type_permis,type):
- if self.is_object_from(obj,type_permis):return obj
+ try:
+ if self.is_object_from(obj,type_permis): return obj
+ except Exception, err:
+ help = str(err)
elif type(type_permis) == types.InstanceType or isinstance(type_permis,object):
try:
- if type_permis.__convert__(obj) : return obj
- except:
- pass
+ if type_permis.__convert__(obj): return obj
+ except Exception, err:
+ help = str(err)
else:
print "Type non encore géré %s" %`type_permis`
-
- raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s" % (repr(obj),type(obj),typ))
+ raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s %s" % (repr(obj),type(obj),typ, help))
def is_complexe(self,valeur):
""" Retourne 1 si valeur est un complexe, 0 sinon """
- if type(valeur) in (types.ComplexType,types.IntType,types.FloatType,types.LongType):
- # Pour permettre l'utilisation de complexes Python
+ if is_number(valeur):
+ # Pour permettre l'utilisation de complexes Python (accepte les entiers et réels)
return 1
- elif type(valeur) != types.TupleType :
+ elif type(valeur) != tuple :
# On n'autorise pas les listes pour les complexes
return 0
elif len(valeur) != 3:
else:
# Un complexe doit etre un tuple de longueur 3 avec 'RI' ou 'MP' comme premiere
# valeur suivie de 2 reels.
- if string.strip(valeur[0]) in ('RI','MP'):
+ if valeur[0].strip() in ('RI','MP'):
try:
v1=reelProto.adapt(valeur[1]),reelProto.adapt(valeur[2])
return 1
try:
v= convert(objet)
return v is not None
+ except ValueError, err:
+ raise
except:
return 0
# On accepte les instances de la classe et des classes derivees
raise ValError("La valeur : %s ne fait pas partie des choix possibles %s" % (repr(obj),into) )
else:
#on est dans le cas d'un ensemble continu de valeurs possibles (intervalle)
- if type(obj) in (types.IntType,types.FloatType,types.LongType) :
+ if is_float_or_int(obj):
if val_min == '**': val_min = obj -1
if val_max == '**': val_max = obj +1
if obj < val_min or obj > val_max :
self.max=max
def __convert__(self,valeur):
- if type(valeur) == types.StringType and self.min <= len(valeur) <= self.max:return valeur
+ if is_str(valeur) and self.min <= len(valeur) <= self.max:return valeur
raise ValError("%s n'est pas une chaine de longueur comprise entre %s et %s" % (valeur,self.min,self.max))
def __repr__(self):
fait appel à la méthode convert_item sur chaque élément de la
liste.
"""
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
for val in valeur:
self.convert_item(val)
return valeur
liste. Si valeur est un paramètre, on utilise sa valeur effective
valeur.valeur.
"""
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
for val in valeur:
if not self.verif_item(val):
return 0
"""
registry={}
def __init__(self,elem=()):
- if type(elem) not in (types.ListType,types.TupleType): elem=(elem,)
+ if not is_enum(elem): elem=(elem,)
Valid.__init__(self,elem=elem)
self.elem=elem
self.cata_info=""
return 1
def verif(self,valeur):
- if type(valeur) not in (types.ListType,types.TupleType):
+ if not is_enum(valeur):
liste=list(valeur)
else:
liste=valeur
return 1
def verif(self,valeur):
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
liste=list(valeur)
for val in liste:
if liste.count(val)!=1 : return 0
return 0
def default(self,valeur,low,high):
- if type(valeur) != types.StringType :
+ if not is_str(valeur):
raise ValError("%s n'est pas une string" % repr(valeur))
if valeur[0]=="'" and valeur[-1]=="'" :
low=low+2
Elle verifie qu'au moins un des validateurs de la liste valide la valeur
"""
def __init__(self,validators=()):
- if type(validators) not in (types.ListType,types.TupleType):
+ if not is_enum(validators):
validators=(validators,)
self.validators=[]
for validator in validators:
Elle verifie que tous les validateurs de la liste valident la valeur
"""
def __init__(self,validators=()):
- if type(validators) not in (types.ListType,types.TupleType):
+ if not is_enum(validators):
validators=(validators,)
self.validators=[]
for validator in validators:
self.validators.append(FunctionVal(validator))
else:
self.validators.append(validator)
+ if hasattr(validator,'fonctions'):
+ for fonction in validator.fonctions :
+ f=getattr(validator,fonction)
+ setattr(self,fonction,f)
self.cata_info=""
def info(self):
return chaine
def verif(self,valeur):
+ print "je suis dans le verif du AndVal"
for validator in self.validators:
v=validator.verif(valeur)
if not v :
for validator in validators:
if type(validator) == types.FunctionType:
valids.append(FunctionVal(validator))
- elif type(validator) == types.TupleType:
+ elif type(validator) is tuple:
valids.append(OrVal(do_liste(validator)))
- elif type(validator) == types.ListType:
+ elif type(validator) is list:
valids.append(AndVal(do_liste(validator)))
else:
valids.append(validator)
def validatorFactory(validator):
if type(validator) == types.FunctionType:
return FunctionVal(validator)
- elif type(validator) == types.TupleType:
+ elif type(validator) is tuple:
return OrVal(do_liste(validator))
- elif type(validator) == types.ListType:
+ elif type(validator) is list:
return AndVal(do_liste(validator))
else:
return validator
return []
def convert(self,valeur):
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
l=len(valeur)
elif valeur is None:
l=0
return 1
def verif(self,valeur):
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
if self.max != '**' and len(valeur) > self.max:return 0
if self.min != '**' and len(valeur) < self.min:return 0
return 1
return valeur % 2 == 0
def verif(self,valeur):
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
for val in valeur:
if val % 2 != 0:return 0
return 1
Susceptible de remplacer l attribut "into" dans les catalogues
"""
def __init__(self,into=()):
- if type(into) not in (types.ListType,types.TupleType): into=(into,)
+ if not is_enum(into):
+ into=(into,)
self.into=into
self.cata_info=""
Cette fonction est un validateur. Elle verifie que la valeur passee
est bien un nombre impair.
"""
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
for val in valeur:
if val % 2 != 1:return 0
return 1
return "valeur %s pour la somme des cles A et B " % self.somme
def verif(self,valeur):
- if type(valeur) in (types.ListType,types.TupleType):
+ if is_enum(valeur):
for val in valeur:
if not val.has_key("A"):return 0
if not val.has_key("B"):return 0
for val in liste:
if self.verif_item(val)!=1 : return 0
return 1
+
+class VerifExiste(ListVal) :
+ """
+ fonctionne avec into
+ Met une liste à jour selon les mot clefs existant
+ exemple si into = ("A","B","C")
+ si au niveau N du JDC les objets "A" et "C" existe
+ alors la liste des into deviendra ( "A","C")
+
+ niveauVerif est le niveau du JDC dans lequel va s effectuer la verification
+ niveauVerif est defini par rapport au Noeud :
+ exemple niveauVerif = 1 : on verifie les freres
+ niveauVerif = 2 : on verifie les oncles..
+ """
+ def __init__(self,niveauVerif):
+ ListVal.__init__(self)
+ self.niveauVerif=niveauVerif
+ self.MCSimp=None
+ self.listeDesFreres=()
+ self.fonctions=('verifie_liste','set_MCSimp')
+
+ def is_list(self):
+ return 1
+
+ def verifie_liste(self,liste):
+ self.set_MCSimp(self.MCSimp)
+ for item in liste :
+ if not( item in self.listeDesFreres) : return 0
+ return 1
+
+ def verif_item(self,valeur):
+ self.set_MCSimp(self.MCSimp)
+ if valeur in self.listeDesFreres : return 1
+ return 0
+
+ def set_MCSimp(self, MCSimp) :
+ self.MCSimp=MCSimp
+ k=self.niveauVerif
+ mc=MCSimp
+ while (k != 0) :
+ parent=mc.parent
+ mc=parent
+ k=k-1
+ #on met la liste à jour
+ parent.forceRecalcul=self.niveauVerif
+ self.listeDesFreres=parent.liste_mc_presents()
+
+ def convert_item(self,valeur):
+ if valeur in self.listeDesFreres : return valeur
+ raise ValError(str(valeur)+" n est pas dans " + str(self.listeDesFreres))
-#@ MODIF N__F Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF N__F Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
--- /dev/null
+#@ MODIF N_types Noyau DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
+# -*- coding: iso-8859-1 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010 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 COURTOIS M.COURTOIS
+
+"""
+ Ce module contient des fonctions utilitaires pour tester les types
+"""
+
+from N_ASSD import ASSD
+
+
+# use isinstance() instead of type() because objects returned from numpy arrays
+# inherit from python scalars but are numpy.float64 or numpy.int32...
+def is_int(obj):
+ return isinstance(obj, int) or type(obj) is long
+
+def is_float(obj):
+ return isinstance(obj, float)
+
+def is_complex(obj):
+ return isinstance(obj, complex)
+
+def is_float_or_int(obj):
+ return is_float(obj) or is_int(obj)
+
+def is_number(obj):
+ return is_float_or_int(obj) or is_complex(obj)
+
+def is_str(obj):
+ return type(obj) in (str, unicode)
+
+def is_list(obj):
+ return type(obj) is list
+
+def is_tuple(obj):
+ return type(obj) is tuple
+
+def is_enum(obj):
+ return is_list(obj) or is_tuple(obj)
+
+def is_assd(obj):
+ return isinstance(obj, ASSD)
+
+
-#@ MODIF N_utils Noyau DATE 13/02/2007 AUTEUR PELLET J.PELLET
+#@ MODIF N_utils Noyau DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
# Modules EFICAS
from N_Exception import AsException
-from N_ASSD import ASSD
+from N_types import is_int, is_float, is_complex, is_str, is_enum, is_assd
SEP='_'
except:
return 0,"inconnu",0,{}
+
def AsType(a):
"""
Retourne le type d'un concept (a) à partir
des caractéristiques de l'objet Python
"""
- if type(a) in (tuple, list):return AsType(a[0])
- if isinstance(a, ASSD):return type(a)
- if type(a) == float:return "R"
- if type(a) == int:return "I"
- if type(a) == str:return "TXM"
- if a == None : return None
- print 'a=',a,type(a)
+ if is_enum(a): return AsType(a[0])
+ if is_assd(a): return type(a)
+ if is_float(a): return "R"
+ if is_int(a): return "I"
+ if is_str(a): return "TXM"
+ if a == None: return None
+ print 'a=', a, type(a)
raise AsException("type inconnu")
+
def prbanner(s):
print "*"*(len(s)+10)
print "*"*5 + s + "*"*5
print "*"*(len(s)+10)
+
def repr_float(valeur):
"""
Cette fonction représente le réel valeur comme une chaine de caractères
-#@ MODIF ascheckers Noyau DATE 07/10/2008 AUTEUR PELLET J.PELLET
+#@ MODIF ascheckers Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF asnom Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF asnom Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF asojb Noyau DATE 07/10/2008 AUTEUR PELLET J.PELLET
+#@ MODIF asojb Noyau DATE 21/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
v( checker )
except :
mess=60*'-'+'\n'
- mess=mess+'Erreur SDVERI_45 (Attention : vérification incomplète)'+'\n'
+ mess=mess+'Erreur SDVERI (Attention : vérification incomplète)'+'\n'
mess=mess.join(traceback.format_tb(sys.exc_traceback))
checker.err(self,mess)
return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
def long_repr(self):
- if not hasattr(self, "par_lot") or self.par_lot():
+ if not hasattr(self, "accessible") or not self.accessible():
# hors Aster ou en par_lot='oui'
return self.short_repr()
else:
class AsVI(OJBVect):
_type = "I"
+# -----------------------------------------------------------------------------
+class AsVS(OJBVect):
+ _type = "S"
+
# -----------------------------------------------------------------------------
class AsVR(OJBVect):
_type = "R"
-#@ MODIF basetype Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF basetype Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF context Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF context Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
global _root
if _root : raise "Impossible d'affecter _root. Il devrait valoir None"
_root=step
- #print "dans set_current_step", step
def get_current_step():
"""
-#@ MODIF nommage Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF nommage Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Question : Que faire des fichiers sdistOTqt.py et style.py
+
+configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py.in
+ ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py
+ @ONLY )
+
+install ( FILES qtEficas_openturns_study.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py
+ prefs.py
+ configuration_OPENTURNS_STUDY.py
+ opsOT.py
+ catalogues_openturns.ini
+ OpenTURNS_Cata_Study_V8.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Openturns_Study
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ), ),
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+#===============================
+# 5. Definition des parametres
+#===============================
+VARI = OPER ( nom = "VARI",
+ sd_prod = variable,
+ op = None,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+ type=SIMP(statut='f',defaut="IN",into=("IN","OUT"), typ = "TXM",)
+ )
+
+VARI1 = OPER ( nom = "VARI1",
+ sd_prod = variable,
+ op = None,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+ POUTRE = FACT(statut= 'f',max= '**',
+ MAILLE = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+ GROUP_MA = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+ ),
+ POUTRE2 = FACT(statut= 'f',max= '**',
+ MAILLE2 = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+ GROUP_MA2 = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+ ),
+ FINAL =FACT(statut= 'f',max= '**',
+ type=SIMP(statut='f',min=1,max= '**', into=("POUTRE","POUTRE2"),
+ validators=[VerifExiste(2),NoRepeat()], typ="TXM",),
+ ),
+ )
+
+
+FICXML=MACRO(nom="FICXML",
+ op=None,
+ UIinfo={"groupes":("Gestion du travail",)},
+ fr="Débranchement vers un fichier de commandes secondaires",
+ sd_prod=loi,
+ FICHIER = SIMP(statut='o',typ='TXM',),
+);
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', ) 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+TOTO = PROC( nom='toto', op = None, docu = "",
+ fr = "toto", ang = "toto",
+
+ TITI=SIMP(statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+)
+# Ordre Catalogue TOTO
+
+
+
+#================================
+# 0. Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = "Fichier",
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Independent", ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+#================================
+# 1. Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "Normal",
+ "Poisson",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi",
+ ang = "R parameter",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre A de la loi",
+ ang = "A parameter",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre B de la loi | B > A",
+ ang = "B parameter | B > A",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.0,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1.0,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma",
+ ang = "Gamma parameter",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Premier point de la distribution",
+ ang = "First point",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples (point,probabilite)",
+ ang = "(point,probabiblity) couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi | Mu > Gamma",
+ ang = "Mu parameter | Mu > Gamma",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi | Mu > Gamma",
+ ang = "Mu parameter | Mu > Gamma",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre SigmaOverMu de la loi | SigmaOverMu > 0",
+ ang = "SigmaOverMu parameter | SigmaOverMu > 0",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu log de la loi",
+ ang = "Mu log parameter",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma log de la loi | SigmaLog > 0",
+ ang = "Sigma log parameter | SigmaLog > 0",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Alpha de la loi",
+ ang = "Alpha parameter",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > = 0",
+ ang = "Beta parameter | Beta > = 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Dimension de la loi",
+ ang = "Distribution dimension",
+ ),
+
+ # Il faut un vecteur P de taille N
+ Mu = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | V > = 2",
+ ang = "Nu parameter | V > = 2",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < = M < = B",
+ ang = "Lower bound | A < = M < = B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < = M < = B",
+ ang = "Mode | A < = M < = B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < = M < = B",
+ ang = "Upper bound | A < = M < = B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre SigmaN de la loi | SigmaN > 0",
+ ang = "SigmaN parameter | SigmaN> 0",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < = B",
+ ang = "Lower bound | A < = B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < = B",
+ ang = "Upper bound | A < = B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < = B",
+ ang = "Lower bound | A < = B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < = B",
+ ang = "Upper bound | A < = B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+
+
+
+#================================
+# 3. Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+ ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type d'Analyse",
+ ang = "Analysis",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Nombre de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitsPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension (autant que de variables declarees)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension",
+ ang = "Units per dimension",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1.,
+ defaut = 0.1,
+ val_min = 0.0,
+ fr = " maximum ...",
+ ang = "Absolute maximum ...."
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+ Correlation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'Independent', 'Linear' ),
+ defaut = 'Linear',
+ max = 1,
+ fr = "Le type de correlation entre les variables",
+ ang = "Correlation between variables",
+ ),
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "VariationCoefficient",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimisation method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successifs",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+class Matrice:
+ def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+ self.nbLigs=nbLigs
+ self.nbCols=nbCols
+ self.methodeCalculTaille=methodeCalculTaille
+ self.formatSortie=formatSortie
+ self.valSup=valSup
+ self.valMin=valMin
+ self.structure=structure
+
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != types.ListType :
+ return None
+ return valeur
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Laplace",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "NonCentralStudent",
+ "Normal",
+ "Poisson",
+ "Rayleigh",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi | R > 0",
+ ang = "R parameter | R > 0",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi",
+ ang = "Support upper bound",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples : largeur de classe, probabilité associée",
+ ang = "Class bandwidth, associated probability couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ ), # Fin BLOC LAPLACE
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Rapport ecart type / moyenne de la loi",
+ ang = "Standard deviation / mean value ratio",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne du log",
+ ang = "Log mean value",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type du log",
+ ang = "Log standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Parametre N de la loi | N > 0",
+ ang = "N parameter | N > 0",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = "R",
+ max = '**',
+ fr = "Liste de probabilités",
+ ang = "Probability list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+ NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Nu de la loi | Nu > 0",
+ ang = "Nu parameter | Nu > 0",
+ ),
+
+ Delta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Delta de la loi | Delta > 0",
+ ang = "Delta parameter | Delta > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma de centrage de la loi",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC NONCENTRALSTUDENT
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+ ), # Fin BLOC RAYLEIGH
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | Nu > 2",
+ ang = "Nu parameter | Nu > 2",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi",
+ ang = "Sigma parameter",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < M < B",
+ ang = "Support lower bound | A < M < B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < M < B",
+ ang = "Mode | A < M < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < M < B",
+ ang = "Support upper bound | A < M < B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi Normale non tronquée",
+ ang = "Mean value of the associated non truncated normal distribution",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart-type de la loi Normale non tronquée",
+ ang = "Standard deviation of the associated non truncated normal distribution",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < B",
+ ang = "Lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < B",
+ ang = "Upper bound | A < B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < B",
+ ang = "Support lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < B",
+ ang = "Support upper bound | A < B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = "Fichier",
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ fr = "Variable d'entrée du modèle",
+ ang = "Input variable of the model",
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ fr = "Modélisation probabiliste",
+ ang = "Probabilistic modelisation",
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( "Independent", "Normal" ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+ Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+
+ CorrelationMatrix = SIMP ( statut = "o",
+ typ = Matrice(nbLigs=None,
+ nbCols=None,
+ methodeCalculTaille='NbDeVariables',
+ valSup=1,
+ valMin=-1,
+ structure="symetrique"),
+ fr = "Matrice de correlation entre les variables d'entree",
+ ang = "Correlation matrix for input variables",
+ ),
+ ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Critère de l'étude d'incertitudes",
+ ang = "Uncertainty study criteria",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type du critère",
+ ang = "Criteria type",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Type du plan d'expérience",
+ ang = "Experiment plane type",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Liste de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unité par dimension (autant que de variables declarées)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Centre du plan d'expérience",
+ ang = "Experiment plan center",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum de la variable d'intérêt",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+ KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la reconstruction a noyau",
+ ang = "Kernel Smoothing Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC KernelSmoothingSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Coefficient de variation maximum",
+ ang = "Maximum coefficient of variation"
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+ Correlation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'Independent', 'Linear' ),
+ defaut = 'Independent',
+ max = 1,
+ fr = "Le type de correlation entre les variables",
+ ang = "Correlation between variables",
+ ),
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Intervale de confiance",
+ ang = "Confidence interval",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "Coefficient of variation",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+ ConvergenceDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la convergence",
+ ang = "Convergence Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ConvergenceGraphSettings
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimization method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d'iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successives",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+class Matrice:
+ def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+ self.nbLigs=nbLigs
+ self.nbCols=nbCols
+ self.methodeCalculTaille=methodeCalculTaille
+ self.formatSortie=formatSortie
+ self.valSup=valSup
+ self.valMin=valMin
+ self.structure=structure
+
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != types.ListType :
+ return None
+ return valeur
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Laplace",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "NonCentralStudent",
+ "Normal",
+ "Poisson",
+ "Rayleigh",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi | R > 0",
+ ang = "R parameter | R > 0",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi",
+ ang = "Support upper bound",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples : largeur de classe, hauteur de classe",
+ ang = "Class bandwidth, class height couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ ), # Fin BLOC LAPLACE
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Rapport ecart type / moyenne de la loi",
+ ang = "Standard deviation / mean value ratio",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne du log",
+ ang = "Log mean value",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type du log",
+ ang = "Log standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Parametre N de la loi | N > 0",
+ ang = "N parameter | N > 0",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = "R",
+ max = '**',
+ fr = "Liste de probabilités",
+ ang = "Probability list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+ NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Nu de la loi | Nu > 0",
+ ang = "Nu parameter | Nu > 0",
+ ),
+
+ Delta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Delta de la loi | Delta > 0",
+ ang = "Delta parameter | Delta > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma de centrage de la loi",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC NONCENTRALSTUDENT
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+ ), # Fin BLOC RAYLEIGH
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | Nu > 2",
+ ang = "Nu parameter | Nu > 2",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi",
+ ang = "Sigma parameter",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < M < B",
+ ang = "Support lower bound | A < M < B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < M < B",
+ ang = "Mode | A < M < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < M < B",
+ ang = "Support upper bound | A < M < B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi Normale non tronquée",
+ ang = "Mean value of the associated non truncated normal distribution",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart-type de la loi Normale non tronquée",
+ ang = "Standard deviation of the associated non truncated normal distribution",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < B",
+ ang = "Lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < B",
+ ang = "Upper bound | A < B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < B",
+ ang = "Support lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < B",
+ ang = "Support upper bound | A < B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = "Fichier",
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ fr = "Variable d'entrée du modèle",
+ ang = "Input variable of the model",
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ fr = "Modélisation probabiliste",
+ ang = "Probabilistic modelisation",
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( "Independent", "Normal" ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+ Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+
+ CorrelationMatrix = SIMP ( statut = "o",
+ typ = Matrice(nbLigs=None,
+ nbCols=None,
+ methodeCalculTaille='NbDeVariables',
+ valSup=1,
+ valMin=-1,
+ structure="symetrique"),
+ fr = "Matrice de correlation entre les variables d'entree",
+ ang = "Correlation matrix for input variables",
+ ),
+ ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Critère de l'étude d'incertitudes",
+ ang = "Uncertainty study criteria",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type du critère",
+ ang = "Criteria type",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Type du plan d'expérience",
+ ang = "Experiment plane type",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Liste de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unité par dimension (autant que de variables declarées)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Centre du plan d'expérience",
+ ang = "Experiment plan center",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum de la variable d'intérêt",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+ KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la reconstruction a noyau",
+ ang = "Kernel Smoothing Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC KernelSmoothingSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Coefficient de variation maximum",
+ ang = "Maximum coefficient of variation"
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+ Correlation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'Independent', 'Linear' ),
+ defaut = 'Independent',
+ max = 1,
+ fr = "Le type de correlation entre les variables",
+ ang = "Correlation between variables",
+ ),
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Intervale de confiance",
+ ang = "Confidence interval",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "Coefficient of variation",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+ ConvergenceDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la convergence",
+ ang = "Convergence Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ConvergenceGraphSettings
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimization method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d'iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successives",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+class Matrice:
+ def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+ self.nbLigs=nbLigs
+ self.nbCols=nbCols
+ self.methodeCalculTaille=methodeCalculTaille
+ self.formatSortie=formatSortie
+ self.valSup=valSup
+ self.valMin=valMin
+ self.structure=structure
+
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != types.ListType :
+ return None
+ return valeur
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Laplace",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "NonCentralStudent",
+ "Normal",
+ "Poisson",
+ "Rayleigh",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi | R > 0",
+ ang = "R parameter | R > 0",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi",
+ ang = "Support upper bound",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma",
+ ang = "Gamma parameter",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Premier point de la distribution",
+ ang = "First point",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples (point,probabilite)",
+ ang = "(point,probabiblity) couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ ), # Fin BLOC LAPLACE
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Rapport ecart type / moyenne de la loi",
+ ang = "Standard deviation / mean value ratio",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne du log",
+ ang = "Log mean value",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type du log",
+ ang = "Log standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > = 0",
+ ang = "Beta parameter | Beta > = 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Dimension de la loi",
+ ang = "Distribution dimension",
+ ),
+
+ # Il faut un vecteur P de taille N
+ Mu = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+ NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Nu de la loi",
+ ang = "Nu parameter",
+ ),
+
+ Delta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Delta de la loi",
+ ang = "Delta parameter",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma de la loi",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC NONCENTRALSTUDENT
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+ ), # Fin BLOC RAYLEIGH
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | V > 2",
+ ang = "Nu parameter | V > 2",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi",
+ ang = "Sigma parameter",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < M < B",
+ ang = "Support lower bound | A < M < B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < M < B",
+ ang = "Mode | A < M < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < M < B",
+ ang = "Support upper bound | A < M < B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre SigmaN de la loi | SigmaN > 0",
+ ang = "SigmaN parameter | SigmaN> 0",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < = B",
+ ang = "Lower bound | A < = B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < = B",
+ ang = "Upper bound | A < = B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < B",
+ ang = "Support lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < B",
+ ang = "Support upper bound | A < B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = "Fichier",
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( "Independent", "Normal" ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+ Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+
+ CorrelationMatrix = SIMP ( statut = "o",
+ typ = Matrice(nbLigs=None,
+ nbCols=None,
+ methodeCalculTaille='NbDeVariables',
+ valSup=1,
+ valMin=-1,
+ structure="symetrique"),
+ fr = "Matrice de correlation entre les variables d'entree",
+ ang = "Correlation matrix for input variables",
+ ),
+ ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+ ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type d'Analyse",
+ ang = "Analysis",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Nombre de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitsPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension (autant que de variables declarees)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unite par dimension",
+ ang = "Units per dimension",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+ KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la reconstruction a noyau",
+ ang = "Kernel Smoothing Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC KernelSmoothingSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = " maximum ...",
+ ang = "Absolute maximum ...."
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+ Correlation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'Independent', 'Linear' ),
+ defaut = 'Independent',
+ max = 1,
+ fr = "Le type de correlation entre les variables",
+ ang = "Correlation between variables",
+ ),
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Intervale de confiance",
+ ang = "Confidence interval",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "Coefficient of variation",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+ ConvergenceDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la convergence",
+ ang = "Convergence Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ConvergenceGraphSettings
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimization method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d'iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successives",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+class Matrice:
+ def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+ self.nbLigs=nbLigs
+ self.nbCols=nbCols
+ self.methodeCalculTaille=methodeCalculTaille
+ self.formatSortie=formatSortie
+ self.valSup=valSup
+ self.valMin=valMin
+ self.structure=structure
+
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != types.ListType :
+ return None
+ return valeur
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Laplace",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "NonCentralStudent",
+ "Normal",
+ "Poisson",
+ "Rayleigh",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi | R > 0",
+ ang = "R parameter | R > 0",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi",
+ ang = "Support upper bound",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples : largeur de classe, hauteur de classe",
+ ang = "Class bandwidth, class height couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ ), # Fin BLOC LAPLACE
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Rapport ecart type / moyenne de la loi",
+ ang = "Standard deviation / mean value ratio",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne du log",
+ ang = "Log mean value",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type du log",
+ ang = "Log standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Parametre N de la loi | N > 0",
+ ang = "N parameter | N > 0",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = "R",
+ max = '**',
+ fr = "Liste de probabilités",
+ ang = "Probability list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+ NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Nu de la loi | Nu > 0",
+ ang = "Nu parameter | Nu > 0",
+ ),
+
+ Delta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Delta de la loi | Delta > 0",
+ ang = "Delta parameter | Delta > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma de centrage de la loi",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC NONCENTRALSTUDENT
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+ ), # Fin BLOC RAYLEIGH
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | Nu > 2",
+ ang = "Nu parameter | Nu > 2",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi",
+ ang = "Sigma parameter",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < M < B",
+ ang = "Support lower bound | A < M < B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < M < B",
+ ang = "Mode | A < M < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < M < B",
+ ang = "Support upper bound | A < M < B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi Normale non tronquée",
+ ang = "Mean value of the associated non truncated normal distribution",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart-type de la loi Normale non tronquée",
+ ang = "Standard deviation of the associated non truncated normal distribution",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < B",
+ ang = "Lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < B",
+ ang = "Upper bound | A < B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < B",
+ ang = "Support lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < B",
+ ang = "Support upper bound | A < B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = ('Fichier', 'Wrapper Files (*.xml);;All Files (*)',),
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ fr = "Variable d'entrée du modèle",
+ ang = "Input variable of the model",
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ fr = "Modélisation probabiliste",
+ ang = "Probabilistic modelisation",
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( "Independent", "Normal" ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+ Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+
+ CorrelationMatrix = SIMP ( statut = "o",
+ typ = Matrice(nbLigs=None,
+ nbCols=None,
+ methodeCalculTaille='NbDeVariables',
+ valSup=1,
+ valMin=-1,
+ structure="symetrique"),
+ fr = "Matrice de correlation entre les variables d'entree",
+ ang = "Correlation matrix for input variables",
+ ),
+ ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Critère de l'étude d'incertitudes",
+ ang = "Uncertainty study criteria",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type du critère",
+ ang = "Criteria type",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Type du plan d'expérience",
+ ang = "Experiment plane type",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Liste de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unité par dimension (autant que de variables declarées)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Centre du plan d'expérience",
+ ang = "Experiment plan center",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum de la variable d'intérêt",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+ KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la reconstruction a noyau",
+ ang = "Kernel Smoothing Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC KernelSmoothingSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Coefficient de variation maximum",
+ ang = "Maximum coefficient of variation"
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Intervale de confiance",
+ ang = "Confidence interval",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "Coefficient of variation",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+ ConvergenceDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la convergence",
+ ang = "Convergence Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ConvergenceGraphSettings
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimization method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d'iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successives",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+class Matrice:
+ def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+ self.nbLigs=nbLigs
+ self.nbCols=nbCols
+ self.methodeCalculTaille=methodeCalculTaille
+ self.formatSortie=formatSortie
+ self.valSup=valSup
+ self.valMin=valMin
+ self.structure=structure
+
+ def __convert__(self,valeur):
+ # Attention ne verifie pas grand chose
+ if type(valeur) != types.ListType :
+ return None
+ return valeur
+
+ def info(self):
+ return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+ __repr__=info
+ __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+ AU_MOINS_UN ( 'MODEL' ),
+ AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+# A_CLASSER ( 'VARIABLE', 'CORRELATION' ),
+# A_CLASSER ( 'VARIABLE', 'CRITERIA' ),
+# A_CLASSER ( 'CORRELATION', 'CRITERIA' ),
+ ),
+ ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+ op = None,
+ docu = "",
+
+ DebugMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ WrapperMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+ ang = "Open TURNS library debug level print",
+ ),
+
+ UserMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+ ang = "Open TURNS library user level print",
+ ),
+
+ InfoMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+ ang = "Open TURNS library info level print",
+ ),
+
+ WarningMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+ ang = "Open TURNS library warning level print",
+ ),
+
+ ErrorMessages = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+ ang = "Open TURNS library error level print",
+ ),
+
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+ sd_prod = loi,
+ op = 68,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+#====
+# Type de distribution
+#====
+
+ Kind = SIMP ( statut = "o", typ = "TXM",
+ into = ( "Beta",
+ "Exponential",
+ "Gamma",
+ "Geometric",
+ "Gumbel",
+ "Histogram",
+ "Laplace",
+ "Logistic",
+ "LogNormal",
+ "MultiNomial",
+ "NonCentralStudent",
+ "Normal",
+ "Poisson",
+ "Rayleigh",
+ "Student",
+ "Triangular",
+ "TruncatedNormal",
+ "Uniform",
+ #"UserDefined",
+ "Weibull",
+ ),
+ fr = "Choix du type de la loi marginale",
+ ang = "1D marginal distribution",
+ ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+ BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "RT", "MuSigma" ),
+ defaut = "RT",
+ fr = "Parametrage de la loi beta",
+ ang = "Beta distribution parameter set",
+ ),
+
+ RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+ R = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre R de la loi | R > 0",
+ ang = "R parameter | R > 0",
+ ),
+
+ # T > R
+ T = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre T de la loi | T > R",
+ ang = "T parameter | T > R",
+ ),
+
+ ), # Fin BLOC RT_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # B > A
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi",
+ ang = "Support upper bound",
+ ),
+
+ ), # Fin BLOC BETA
+
+
+
+ EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC EXPONENTIAL
+
+
+
+ GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "KLambda", "MuSigma" ),
+ defaut = "KLambda",
+ fr = "Parametrage de la loi gamma",
+ ang = "Gamma distribution parameter set",
+ ),
+
+ KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+ K = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre K de la loi | K > 0",
+ ang = "K parameter | K > 0",
+ ),
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC KLambda_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+
+ ), # Fin BLOC GAMMA
+
+
+
+ GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+ P = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ val_max = 1.,
+ fr = "Parametre P | 0 < P < 1",
+ ang = "P parameter | 0 < P < 1",
+ ),
+
+ ), # Fin BLOC GEOMETRIC
+
+
+
+ GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi gumbel",
+ ang = "Gumbel distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Beta de la loi",
+ ang = "Beta parameter",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ ), # Fin BLOC GUMBEL
+
+
+
+ HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+ First = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = Tuple(2),
+ max = '**',
+ fr = "Liste de couples : largeur de classe, hauteur de classe",
+ ang = "Class bandwidth, class height couple list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC HISTOGRAM
+
+
+
+ LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ ), # Fin BLOC LAPLACE
+
+ LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+ defaut = "MuSigmaLog",
+ fr = "Parametrage de la loi lognormale",
+ ang = "Lognormal distribution parameter set",
+ ),
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ SigmaOverMu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Rapport ecart type / moyenne de la loi",
+ ang = "Standard deviation / mean value ratio",
+ ),
+
+ ), # Fin BLOC MuSigmaOverMu_Parameters
+
+ MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+ MuLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne du log",
+ ang = "Log mean value",
+ ),
+
+ SigmaLog = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type du log",
+ ang = "Log standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigmaLog_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC LOGNORMAL
+
+
+
+ LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du supoport de la loi",
+ ang = "Support lower bound",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC LOGISTIC
+
+
+
+ MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+
+ N = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Parametre N de la loi | N > 0",
+ ang = "N parameter | N > 0",
+ ),
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = "R",
+ max = '**',
+ fr = "Liste de probabilités",
+ ang = "Probability list",
+ validators=VerifTypeTuple(('R','R')),
+ ),
+
+ ), # Fin BLOC MULTINOMIAL
+
+
+ NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Nu de la loi | Nu > 0",
+ ang = "Nu parameter | Nu > 0",
+ ),
+
+ Delta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Delta de la loi | Delta > 0",
+ ang = "Delta parameter | Delta > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Gamma de centrage de la loi",
+ ang = "Gamma parameter",
+ ),
+
+ ), # Fin BLOC NONCENTRALSTUDENT
+
+
+ NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC NORMAL
+
+
+
+ POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+ Lambda = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Lambda de la loi | Lambda > 0",
+ ang = "Lambda parameter | Lambda > 0",
+ ),
+
+ ), # Fin BLOC POISSON
+
+
+
+ RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi | Sigma > 0",
+ ang = "Sigma parameter | Sigma > 0",
+ ),
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+ ), # Fin BLOC RAYLEIGH
+
+
+ STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Mu de la loi",
+ ang = "Mu parameter",
+ ),
+
+ Nu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 2.,
+ fr = "Parametre Nu de la loi | Nu > 2",
+ ang = "Nu parameter | Nu > 2",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Parametre Sigma de la loi",
+ ang = "Sigma parameter",
+ ),
+
+ ), # Fin BLOC STUDENT
+
+
+
+ TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < M < B",
+ ang = "Support lower bound | A < M < B",
+ ),
+
+ M = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Mode de la loi | A < M < B",
+ ang = "Mode | A < M < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < M < B",
+ ang = "Support upper bound | A < M < B",
+ ),
+
+ ), # Fin BLOC TRIANGULAR
+
+
+
+ TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+ MuN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi Normale non tronquée",
+ ang = "Mean value of the associated non truncated normal distribution",
+ ),
+
+ SigmaN = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart-type de la loi Normale non tronquée",
+ ang = "Standard deviation of the associated non truncated normal distribution",
+ ),
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure de la loi | A < B",
+ ang = "Lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure de la loi | A < B",
+ ang = "Upper bound | A < B",
+ ),
+
+ ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+ UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+ A = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi | A < B",
+ ang = "Support lower bound | A < B",
+ ),
+
+ B = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne superieure du support de la loi | A < B",
+ ang = "Support upper bound | A < B",
+ ),
+
+ ), # Fin BLOC UNIFORM
+
+
+
+ USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+ # Il faut definir une collection de couples ( x,p )
+ Values = SIMP ( statut = 'o',
+ typ = 'R',
+ max = '**',
+ ),
+
+ ), # Fin BLOC USERDEFINED
+
+
+
+ WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+ Settings = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "AlphaBeta", "MuSigma" ),
+ defaut = "AlphaBeta",
+ fr = "Parametrage de la loi weibull",
+ ang = "Weibull distribution parameter set",
+ ),
+
+ AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+ Alpha = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Alpha de la loi | Alpha > 0",
+ ang = "Alpha parameter | Alpha > 0",
+ ),
+
+ Beta = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Parametre Beta de la loi | Beta > 0",
+ ang = "Beta parameter | Beta > 0",
+ ),
+
+ ), # Fin BLOC AlphaBeta_Parameters
+
+
+ MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+ Mu = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Moyenne de la loi",
+ ang = "Mean value",
+ ),
+
+ Sigma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ val_min = 0.,
+ fr = "Ecart type de la loi",
+ ang = "Standard deviation",
+ ),
+
+ ), # Fin BLOC MuSigma_Parameters
+
+ Gamma = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Borne inferieure du support de la loi",
+ ang = "Support lower bound",
+ ),
+
+ ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Variable deterministe",
+ ang = "Deterministic variable",
+
+ N = SIMP ( statut = 'o',
+ typ = "TXM",
+ fr = "Nom",
+ ang = "Name",
+ ),
+
+ T = SIMP ( statut = 'o',
+ defaut = "in",
+ into = ( "in" , "out", ),
+ typ = "TXM",
+ fr = "Type",
+ ang = "Type",
+ ),
+
+ R = SIMP ( statut = 'o',
+ defaut = 0,
+ typ = "I",
+ fr = "Rang",
+ ang = "Rank",
+ ),
+
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+ op = None,
+ UIinfo = { "groupes" : ( "Gestion du travail", ) },
+ fr = "Chargement du wrapper du modele physique",
+ ang = "Physical model wrapper load",
+ sd_prod = opsOT.INCLUDE,
+ op_init = opsOT.INCLUDE_context,
+ fichier_ini = 1,
+
+ FileName = SIMP ( statut = "o",
+ typ = ('Fichier', 'Wrapper Files (*.xml);;All Files (*)',),
+ fr = "Nom du modele physique",
+ ang = "Physical model identifier",
+ ),
+
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+ op = None,
+ docu = "",
+ fr = "Variable probabiliste",
+ ang = "Probabilistic variable",
+
+ ModelVariable = SIMP ( statut = "o",
+ typ = ( variable, ),
+ fr = "Variable d'entrée du modèle",
+ ang = "Input variable of the model",
+ ),
+
+ Distribution = SIMP ( statut = "o",
+ typ = ( loi, ),
+ fr = "Modélisation probabiliste",
+ ang = "Probabilistic modelisation",
+ ),
+
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+ op = None,
+ docu = "",
+ fr = "Correlation entre variables",
+ ang = "Variable correlation",
+
+ Copula = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( "Independent", "Normal" ),
+ defaut = "Independent",
+ fr = "Type de la copule",
+ ang = "Copula kind",
+ ),
+
+ Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+
+ CorrelationMatrix = SIMP ( statut = "o",
+ typ = Matrice(nbLigs=None,
+ nbCols=None,
+ methodeCalculTaille='NbDeVariables',
+ valSup=1,
+ valMin=-1,
+ structure="symetrique"),
+ fr = "Matrice de correlation entre les variables d'entree",
+ ang = "Correlation matrix for input variables",
+ ),
+ ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+ op = None,
+ docu = "",
+ fr = "Critère de l'étude d'incertitudes",
+ ang = "Uncertainty study criteria",
+
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+ fr = "Type du critère",
+ ang = "Criteria type",
+ ),
+
+
+
+
+
+
+
+ MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Experiment Plane", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+ # UC 3.1.1
+ ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+ ExperimentPlane = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Axial", "Factorial", "Composite", ),
+ fr = "Type du plan d'expérience",
+ ang = "Experiment plane type",
+ ),
+
+ Levels = SIMP ( statut = "o",
+ typ = "R",
+ val_min = 0.0,
+ max = '**',
+ fr = "Liste de niveaux dans chaque direction",
+ ang = "Levels in each direction",
+ ),
+
+ # Scaled Vector
+ UnitPerDimension = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Unité par dimension (autant que de variables declarées)",
+ ang = "Units per dimension (as much as declared variables)",
+ ),
+
+ # Translation Vector
+ Center = SIMP ( statut = "o",
+ typ = "R",
+ max = '**',
+ fr = "Centre du plan d'expérience",
+ ang = "Experiment plan center",
+ ),
+
+ ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ Result = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Min/Max", ),
+ defaut = "Min/Max",
+ fr = "Le minimum et le maximum de la variable d'intérêt",
+ ang = "The min and max values",
+ ),
+
+
+ ), # Fin BLOC MinMax
+
+
+
+
+ CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ # UC 3.2.
+ TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ MeanFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne au premier ordre",
+ ang = "MeanFirstOrder",
+ ),
+
+ StandardDeviationFirstOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type au premier ordre",
+ ang = "StandardDeviationFirstOrder",
+ ),
+
+ MeanSecondOrder = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Moyenne au second ordre",
+ ang = "MeanSecondOrder",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "ImportanceFactor",
+ ),
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+ RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = "I",
+ val_min = 1,
+ fr = "Nombre de points",
+ ang = "Points number",
+ ),
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ EmpiricalMean = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Moyenne empirique",
+ ang = "Empirical mean",
+ ),
+
+ EmpiricalStandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart-type empirique",
+ ang = "Empirical standard deviation",
+ ),
+
+ EmpiricalQuantile = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Quantile empirique",
+ ang = "Empirical quantile",
+ ),
+
+ EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+ EmpiricalQuantile_Order = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.95,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Ordre du quantile empirique",
+ ang = "Empirical quantile order",
+ ),
+
+ ), # Fin BLOC EmpiricalQuantileSettings
+
+ CorrelationAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Correlations analysees",
+ ang = "Analysed correlations",
+ ),
+
+ KernelSmoothing = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Kernel smoothing de l'echantillon",
+ ang = "Kernel smoothing of the sample",
+ ),
+
+ KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+ KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la reconstruction a noyau",
+ ang = "Kernel Smoothing Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC KernelSmoothingSettings
+
+ ), # Fin FACT Result
+
+ ), # Fin BLOC RandomSamplingSettings
+
+ ), # Fin BLOC CentralUncertainty
+
+
+
+
+ ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+ Event = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ Threshold = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ fr = "Le seuil de defaillance",
+ ang = "Failure threshold",
+ ),
+
+ ComparisonOperator = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+ fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+ ang = "What is the failure threshold : maximum or minimum",
+ ),
+ ), # Fin FACT Event
+
+
+ Method = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Simulation", "FORM_SORM" ),
+ fr = "Methode",
+ ang = "Method",
+ ),
+
+ SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+ Algorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+ fr = "Algorithme de simulation",
+ ang = "Simulation algorithm",
+ ),
+
+
+ RandomGenerator = FACT ( statut = "o",
+ min = 1,
+ max = 1,
+
+ SeedToBeSet = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+ ang = "Does the random generator seed need to be set ?",
+ ),
+
+ SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+ RandomGeneratorSeed = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ fr = "Racine du generateur aleatoire",
+ ang = "Random generator seed",
+ ),
+
+ ), # Fin BLOC SeedSettings
+
+ ), # Fin FACT RandomGenerator
+
+
+ BlockSize = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ defaut = 1,
+ fr = "Nombre de calculs realises en bloc",
+ ang = "Number of computations as a block",
+ ),
+
+ MaximumOuterSampling = SIMP ( statut = "o",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Maximum d'iterations externes",
+ ang = "Maximum outer Sampling value",
+ ),
+
+ MaximumCoefficientOfVariation = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 0.1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Coefficient de variation maximum",
+ ang = "Maximum coefficient of variation"
+ ),
+
+ ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+ MeanVector = SIMP ( statut = "o",
+ typ = "R",
+ max = "**",
+ fr = "Moyenne",
+ ang = "Mean vector",
+ ),
+
+
+ ), # Fin BLOC ImportanceSamplingSettings
+
+ Result = FACT ( statut = "o",
+ min = 1,
+ max = "**",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ StandardDeviation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Ecart type",
+ ang = "Standard deviation",
+ ),
+
+ ConfidenceInterval = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Intervale de confiance",
+ ang = "Confidence interval",
+ ),
+
+ ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+ Level = SIMP ( statut = "o",
+ typ = 'R',
+ defaut = 0.9,
+ max = 1,
+ val_min = 0.0,
+ val_max = 1.0,
+ fr = "Niveau de confiance",
+ ang = "Confidence level",
+ ),
+
+ ), # Fin BLOC ConfidenceIntervalSettings
+
+ VariationCoefficient = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Coefficient de variation",
+ ang = "Coefficient of variation",
+ ),
+
+ SimulationsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'iterations",
+ ang = "Iteration number",
+ ),
+
+ ConvergenceGraph = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Graphe de convergence",
+ ang = "Convergence graph",
+ ),
+
+ ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+ ConvergenceDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique de la convergence",
+ ang = "Convergence Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ConvergenceGraphSettings
+
+ ), # Fin FACT Result
+
+
+
+ ), # Fin BLOC SimulationSettings
+
+
+
+ FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+ Approximation = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "FirstOrder",
+ into = ( "FirstOrder", "SecondOrder" ),
+ max = 1,
+ fr = "Approximation",
+ ang = "Approximation",
+ ),
+
+ OptimizationAlgorithm = SIMP ( statut = "o",
+ typ = "TXM",
+ defaut = "Cobyla",
+ into = ( "Cobyla", "AbdoRackwitz" ),
+ max = 1,
+ fr = "Methode d'optimisation",
+ ang = "Optimization method",
+ ),
+
+
+ PhysicalStartingPoint = SIMP ( statut = "f",
+ typ = "R",
+ max = "**",
+ fr = "Point de demarrage de l'algorithme iteratif",
+ ang = "Initial point for iterative process",
+ ),
+
+ MaximumIterationsNumber = SIMP ( statut = "f",
+ typ = "I",
+ max = 1,
+ val_min = 1,
+ fr = "Nombre maximum d'iterations",
+ ang = "Maximum number of iterations",
+ ),
+
+
+ MaximumAbsoluteError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum absolue entre 2 iterations successives",
+ ang = "Absolute maximum distance between 2 successive iterates",
+ ),
+
+ MaximumRelativeError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Distance maximum relative entre 2 iterations successives",
+ ang = "Relative maximum distance between 2 successive iterates",
+ ),
+
+ MaximumConstraintError = SIMP ( statut = "o",
+ typ = "R",
+ max = 1,
+ defaut = 1E-4,
+ val_min = 0.0,
+ fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+ ang = "Maximum absolute value of the constraint function minus the level value",
+ ),
+
+ ImportanceSampling = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'no',
+ max = 1,
+ fr = "Tirage d'importance au point de conception",
+ ang = "Importance sampling at design point",
+ ),
+
+ FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+ Probability = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Probabiblite",
+ ang = "Probability",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ HasoferReliabilityIndex = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite",
+ ang = "Reliability index",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+ FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC FORMResult
+
+
+ SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+ TvedtApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Tvedt",
+ ang = "Tvedt approximation",
+ ),
+
+ HohenBichlerApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de HohenBichler",
+ ang = "HohenBichler approximation",
+ ),
+
+ BreitungApproximation = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Approximation de Breitung",
+ ang = "Breitung approximation",
+ ),
+
+ DesignPoint = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Point de conception",
+ ang = "Design point",
+ ),
+
+ ImportanceFactor = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Facteur d'importance pour variable de sortie scalaire",
+ ang = "Importance factor",
+ ),
+
+ ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+ ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des facteurs d'importance",
+ ang = "Importance Factor Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC ImportanceFactorSettings
+
+ SensitivityAnalysis = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Analyse de sensibilite",
+ ang = "Sensitivity analysis",
+ ),
+
+ SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Indice de fiabilite de Hasofer",
+ ang = "Hasofer reliability index",
+ ),
+
+ HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+ HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier graphique des sensibilites",
+ ang = "Sensitivity Drawing Filename",
+ ),
+
+
+ ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+
+ ), # Fin BLOC SensitivityAnalysisSettings
+
+ FunctionCallsNumber = SIMP ( statut = "o",
+ typ = 'TXM',
+ into = ( 'yes', 'no' ),
+ defaut = 'yes',
+ max = 1,
+ fr = "Nombre d'appels a la fonction",
+ ang = "Function calls number",
+ ),
+
+
+ ), # Fin BLOC SecondOrder
+
+
+
+ ), # Fin BLOC FORM_SORMSettings
+
+
+
+ ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
catalogues = (
# (code,version,catalogue,formatIn,formatOut)
- #('OPENTURNS_WRAPPER','V1',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns_wrapper','wrapper'),
- ('OPENTURNS_STUDY','V4',os.path.join(rep_cata,'OpenTURNS_Cata_Study_V4.py'),'openturns_study','wrapper'),
- #('OPENTURNS_STUDY','V4',os.path.join(rep_cata,'OpenTURNS_Cata_Study_VPN.py'),'openturns_study','wrapper'),
- #('OPENTURNS','Wrapper',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns'),
+ ('OPENTURNS_STUDY','V8',os.path.join(rep_cata,'OpenTURNS_Cata_Study_V10.py'),'openturns_study','wrapper'),
)
--- /dev/null
+# -*- coding: utf-8 -*-\r
+# CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+ Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+ #-----------------------------------\r
+ def __init__(self,appli,repIni):\r
+ #-----------------------------------\r
+\r
+ configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_Openturns')\r
+ self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+ self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
+ self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+ self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
+ self.setValeurs()\r
+ self.cataFile="catalogues_openturns.ini"\r
+\r
+ #---------------------------------------\r
+ def lecture_fichier_ini_standard(self):\r
+ #---------------------------------------\r
+ configuration.CONFIG_BASE.lecture_fichier_ini_standard(self)\r
+ if hasattr(self,'OpenTURNS_path') :\r
+ self.oldOTPath=self.OpenTURNS_path\r
+\r
+ #---------------------------------------\r
+ def lecture_fichier_ini_utilisateur(self):\r
+ #---------------------------------------\r
+ configuration.CONFIG_BASE.lecture_fichier_ini_utilisateur(self)\r
+ if hasattr(self,'OpenTURNS_path') :\r
+ if hasattr(self,'oldOTPath') and (self.OpenTURNS_path != self.oldOTPath):\r
+ import sys\r
+ sys.path.remove(self.oldOTPath)\r
+ sys.path[:0]=[self.OpenTURNS_path]\r
+ self.oldOTPath=self.OpenTURNS_path\r
+\r
+def make_config(appli,rep):\r
+ return CONFIG(appli,rep)\r
+\r
--- /dev/null
+# -*- coding: iso-8859-1 -*-
+
+def INCLUDE(self,FileName,**args):
+ """
+ Fonction sd_prod pour la macro INCLUDE
+ """
+ if hasattr(self,'change_fichier'):
+ delattr(self,'change_fichier')
+ delattr(self,'fichier_ini')
+
+ self.make_include2(fichier=FileName)
+
+def INCLUDE_context(self,d):
+ """
+ Fonction op_init pour macro INCLUDE
+ """
+ for k,v in self.g_context.items():
+ d[k]=v
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata = INSTALLDIR
+path_doc = os.path.join(rep_cata,'Doc')
+exec_acrobat = "/usr/bin/xpdf"
+savedir = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata = INSTALLDIR
+path_doc = os.path.join(rep_cata,'Doc')
+exec_acrobat = "/usr/bin/xpdf"
+savedir = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Question : Que faire des fichiers sdistOTqt.py et style.py
+
+configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py.in
+ ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+ @ONLY )
+
+install ( FILES qtEficas_openturns_wrapper.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+ prefs.py
+ configuration_OPENTURNS_WRAPPER.py
+ catalogues_openturns.ini
+ OpenTURNS_Cata_Wrapper_V4.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Openturns_Wrapper
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class variable(ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_WRAPPER',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'WRAPPER' ), ),
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+#================================
+# 2. Definition des variables
+#================================
+
+
+
+VARIABLE = OPER ( nom = "VARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "in", "out", ),
+ defaut = "in",
+ fr = "variable d'entree ou de sortie du solver",
+ ang = "Input or Output variable",
+ ),
+
+ Unit = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Unite",
+ ang = "Unit",
+ ),
+
+ Comment = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Commentaire",
+ ang = "Comment",
+ ),
+
+ Regexp = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Expression reguliere",
+ ang = "Regular expression",
+ ),
+
+ Format = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Format d'ecriture",
+ ang = "Format",
+ ),
+
+
+ ) # Fin FACT Variables
+#
+
+
+#================================
+# Definition des parametres du wrapper
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+WRAPPER = PROC ( nom = "WRAPPER",
+ op = None,
+ docu = "",
+ fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+ ang = "Writes the configuration file for OPENTURNS.",
+
+ Framework = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Salome", "Stand-alone", ),
+ max = 1,
+ fr = "Dans quel environnement le wrapper doit-il etre utilise ?",
+ ang = "Which framework is this wrapper designed for ?",
+ ),
+
+ StandAlone = BLOC ( condition = " Framework in ( 'Stand-alone', ) ",
+
+
+ WrapperPath = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Chemin d acces au wrapper",
+ ang = "Wrapper library path",
+ ),
+
+ FunctionName = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom de la fonction dans le wrapper",
+ ang = "Function's name in wrapper",
+ ),
+
+ GradientName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du gradient dans le wrapper",
+ ang = "Gradient's name in wrapper",
+ ),
+
+ HessianName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du hessian dans le wrapper",
+ ang = "Hessian's name in wrapper",
+ ),
+
+ WrapCouplingMode = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "static-link", "dynamic-link", "fork", ),
+ defaut = "fork",
+ fr = "Mode de couplage du solver",
+ ang = "Solver coupling mode",
+ ),
+
+ Fork = BLOC ( condition = " WrapCouplingMode in ( 'fork', ) ",
+
+ Command = SIMP ( statut = "o",
+ max = 1,
+ typ = "TXM",
+ fr = "Chemin du solver",
+ ang = "solver path",
+ ),
+ ), # Fin BLOC Fork
+
+ State = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ into = ( "shared", "specific" ),
+ fr = "Partage de l'etat interne entre les fonctions",
+ ang = "Internal state sharing",
+ ),
+
+ InDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba" ),
+ fr = "Mode de transfert des donnees d'entree",
+ ang = "Input transfering mode",
+ ),
+
+ OutDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba" ),
+ fr = "Mode de transfert des donnees de sortie",
+ ang = "Output transfering mode",
+ ),
+
+ ), # Fin BLOC StandAlone
+
+
+ Salome = BLOC ( condition = " Framework in ( 'Salome', ) ",
+
+ SolverComponentName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ defaut = "UNDEFINED",
+ fr = "Nom du composant solver",
+ ang = "Solver component name",
+ ),
+
+
+ WrapperPath = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "GenericWrapper4Salome.so", ),
+ defaut = "GenericWrapper4Salome.so",
+ max = 1,
+ fr = "Chemin d acces au wrapper",
+ ang = "Wrapper library path",
+ ),
+
+ FunctionName = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom de la fonction dans le wrapper",
+ ang = "Function's name in wrapper",
+ ),
+
+ GradientName = SIMP ( statut = "f",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom du gradient dans le wrapper",
+ ang = "Gradient's name in wrapper",
+ ),
+
+ HessianName = SIMP ( statut = "f",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom du hessian dans le wrapper",
+ ang = "Hessian's name in wrapper",
+ ),
+
+ WrapCouplingMode = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "static-link", ),
+ defaut = "static-link",
+ fr = "Mode de couplage du solver",
+ ang = "Solver coupling mode",
+ ),
+
+ State = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ into = ( "shared", "specific" ),
+ fr = "Partage de l'etat interne entre les fonctions",
+ ang = "Internal state sharing",
+ ),
+
+ InDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba", ),
+ defaut = "corba",
+ fr = "Mode de transfert des donnees d'entree",
+ ang = "Input transfering mode",
+ ),
+
+ OutDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba", ),
+ defaut = "corba",
+ fr = "Mode de transfert des donnees de sortie",
+ ang = "Output transfering mode",
+ ),
+
+ ), # Fin BLOC Salome
+
+
+ Files = FACT ( statut = "f",
+ min = 1,
+ max = "**",
+
+ Id = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Identificateur du fichier",
+ ang = "File id",
+ ),
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "in", "out", ),
+ fr = "Fichier d entree ou de sortie du solveur ?",
+ ang = "Input or Output file ?",
+ ),
+
+ Name = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier",
+ ang = "File name",
+ ),
+
+ Path = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Chemin du fichier",
+ ang = "Path file ",
+ ),
+
+ Subst = SIMP ( statut = "f",
+ typ = "TXM",
+ max = "**",
+ fr = "Liste de variables",
+ ang = "List",
+ ),
+
+ ), # Fin FACT Files
+
+) # Fin PROC WRAPPER
--- /dev/null
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class variable(ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_WRAPPER',
+ execmodul = None,
+ regles = ( AU_MOINS_UN ( 'WRAPPER' ), ),
+ ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+#================================
+# 2. Definition des variables
+#================================
+
+
+
+VARIABLE = OPER ( nom = "VARIABLE",
+ sd_prod = variable,
+ op = None,
+ fr = "Definitions des lois marginales utilisees par les variables d'entree",
+
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "in", "out", ),
+ defaut = "in",
+ fr = "variable d'entree ou de sortie du solver",
+ ang = "Input or Output variable",
+ ),
+
+ Unit = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Unite",
+ ang = "Unit",
+ ),
+
+ Comment = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Commentaire",
+ ang = "Comment",
+ ),
+
+ Regexp = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Expression reguliere",
+ ang = "Regular expression",
+ ),
+
+ Format = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Format d'ecriture",
+ ang = "Format",
+ ),
+
+
+ ) # Fin FACT Variables
+#
+
+
+#================================
+# Definition des parametres du wrapper
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+WRAPPER = PROC ( nom = "WRAPPER",
+ op = None,
+ docu = "",
+ fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+ ang = "Writes the configuration file for OPENTURNS.",
+
+ Framework = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "Salome", "Stand-alone", ),
+ max = 1,
+ fr = "Dans quel environnement le wrapper doit-il etre utilise ?",
+ ang = "Which framework is this wrapper designed for ?",
+ ),
+
+ StandAlone = BLOC ( condition = " Framework in ( 'Stand-alone', ) ",
+
+
+ WrapperPath = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Chemin d acces au wrapper",
+ ang = "Wrapper library path",
+ ),
+
+ FunctionName = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom de la fonction dans le wrapper",
+ ang = "Function's name in wrapper",
+ ),
+
+ GradientName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du gradient dans le wrapper",
+ ang = "Gradient's name in wrapper",
+ ),
+
+ HessianName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du hessian dans le wrapper",
+ ang = "Hessian's name in wrapper",
+ ),
+
+ WrapCouplingMode = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "static-link", "dynamic-link", "fork", ),
+ defaut = "fork",
+ fr = "Mode de couplage du solver",
+ ang = "Solver coupling mode",
+ ),
+
+ Fork = BLOC ( condition = " WrapCouplingMode in ( 'fork', ) ",
+
+ Command = SIMP ( statut = "o",
+ max = 1,
+ typ = "TXM",
+ fr = "Chemin du solver",
+ ang = "Solver path",
+ ),
+
+ UserPrefix = SIMP ( statut = "f",
+ max = 1,
+ typ = "TXM",
+ fr = "Prefixe pour retrouver les repertories temporaires de calcul",
+ ang = "Prefix to help finding compute directories",
+ ),
+ ), # Fin BLOC Fork
+
+ State = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ into = ( "shared", "specific" ),
+ fr = "Partage de l'etat interne entre les fonctions",
+ ang = "Internal state sharing",
+ ),
+
+ InDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba" ),
+ fr = "Mode de transfert des donnees d'entree",
+ ang = "Input transfering mode",
+ ),
+
+ OutDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba" ),
+ fr = "Mode de transfert des donnees de sortie",
+ ang = "Output transfering mode",
+ ),
+
+ ), # Fin BLOC StandAlone
+
+
+ Salome = BLOC ( condition = " Framework in ( 'Salome', ) ",
+
+ SolverComponentName = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ defaut = "UNDEFINED",
+ fr = "Nom du composant solver",
+ ang = "Solver component name",
+ ),
+
+
+ WrapperPath = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "GenericWrapper4Salome.so", ),
+ defaut = "GenericWrapper4Salome.so",
+ max = 1,
+ fr = "Chemin d acces au wrapper",
+ ang = "Wrapper library path",
+ ),
+
+ FunctionName = SIMP ( statut = "o",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom de la fonction dans le wrapper",
+ ang = "Function's name in wrapper",
+ ),
+
+ GradientName = SIMP ( statut = "f",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom du gradient dans le wrapper",
+ ang = "Gradient's name in wrapper",
+ ),
+
+ HessianName = SIMP ( statut = "f",
+ typ = "TXM",
+ into = ( "GENERICSOLVER", ),
+ defaut = "GENERICSOLVER",
+ max = 1,
+ fr = "Nom du hessian dans le wrapper",
+ ang = "Hessian's name in wrapper",
+ ),
+
+ WrapCouplingMode = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "static-link", ),
+ defaut = "static-link",
+ fr = "Mode de couplage du solver",
+ ang = "Solver coupling mode",
+ ),
+
+ State = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ into = ( "shared", "specific" ),
+ fr = "Partage de l'etat interne entre les fonctions",
+ ang = "Internal state sharing",
+ ),
+
+ InDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba", ),
+ defaut = "corba",
+ fr = "Mode de transfert des donnees d'entree",
+ ang = "Input transfering mode",
+ ),
+
+ OutDataTransfer = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "files", "arguments", "corba", ),
+ defaut = "corba",
+ fr = "Mode de transfert des donnees de sortie",
+ ang = "Output transfering mode",
+ ),
+
+ ), # Fin BLOC Salome
+
+
+ Files = FACT ( statut = "f",
+ min = 1,
+ max = "**",
+
+ Id = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Identificateur du fichier",
+ ang = "File id",
+ ),
+
+ Type = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ into = ( "in", "out", ),
+ fr = "Fichier d entree ou de sortie du solveur ?",
+ ang = "Input or Output file ?",
+ ),
+
+ Name = SIMP ( statut = "f",
+ typ = "TXM",
+ max = 1,
+ fr = "Nom du fichier",
+ ang = "File name",
+ ),
+
+ Path = SIMP ( statut = "o",
+ typ = "TXM",
+ max = 1,
+ fr = "Chemin du fichier",
+ ang = "Path file ",
+ ),
+
+ Subst = SIMP ( statut = "f",
+ typ = "TXM",
+ max = "**",
+ fr = "Liste de variables",
+ ang = "List",
+ ),
+
+ ), # Fin FACT Files
+
+) # Fin PROC WRAPPER
# Choix des catalogues
import os
-#rep_cata=os.path.dirname(os.path.abspath(__file__))
rep_cata=os.getcwd()
catalogues = (
# (code,version,catalogue,formatIn,formatOut)
#('OPENTURNS_WRAPPER','V1',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns_wrapper','wrapper'),
- ('OPENTURNS_WRAPPER','V2',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V2.py'),'openturns_wrapper','wrapper'),
+ ('OPENTURNS_WRAPPER','V3',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V4.py'),'openturns_wrapper','wrapper'),
#('OPENTURNS','Wrapper',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns'),
)
--- /dev/null
+# -*- coding: utf-8 -*-\r
+# CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+ Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+ #-----------------------------------\r
+ def __init__(self,appli,repIni):\r
+ #-----------------------------------\r
+\r
+ configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_Openturns')\r
+ self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+ self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
+ self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+ self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
+ self.setValeurs()\r
+ self.cataFile="catalogues_openturns.ini"\r
+\r
+\r
+ #---------------------------------------\r
+ def lecture_fichier_ini_standard(self):\r
+ #---------------------------------------\r
+ configuration.CONFIG_BASE.lecture_fichier_ini_standard(self)\r
+ if hasattr(self,'OpenTURNS_path') :\r
+ self.oldOTPath=self.OpenTURNS_path\r
+\r
+ #---------------------------------------\r
+ def lecture_fichier_ini_utilisateur(self):\r
+ #---------------------------------------\r
+ configuration.CONFIG_BASE.lecture_fichier_ini_utilisateur(self)\r
+ if hasattr(self,'OpenTURNS_path') :\r
+ if hasattr(self,'oldOTPath') and (self.OpenTURNS_path != self.oldOTPath):\r
+ import sys\r
+ sys.path.remove(self.oldOTPath)\r
+ sys.path[:0]=[self.OpenTURNS_path]\r
+ self.oldOTPath=self.OpenTURNS_path\r
+\r
+def make_config(appli,rep):\r
+ return CONFIG(appli,rep)\r
+\r
#
#
# ======================================================================
-
-import os, sys
-# Les variables pouvant positionnees sont :
-# "CODE_PATH_SURCHARGE","OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata"
-print "import des prefs de OPENTURNS_WRAPPER"
-
code = "OPENTURNS_WRAPPER"
-
-# REPINI sert à localiser le fichier
-# initialdir sert comme directory initial des QFileDialog
-# positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
-
-
-# Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
-lang='fr'
-encoding='iso-8859-1'
-
-# Acces a la documentation
-rep_cata = INSTALLDIR
-path_doc = os.path.join(rep_cata,'Doc')
-exec_acrobat = "/usr/bin/xpdf"
-
-# OpenTURNS Python module
-OpenTURNS_path="/opt/OpenTURNS/install/lib/python2.4/site-packages"
-
-# Choix des catalogues
-sys.path[:0]=[INSTALLDIR]
-sys.path.append( OpenTURNS_path )
-
-
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata = INSTALLDIR
+path_doc = os.path.join(rep_cata,'Doc')
+exec_acrobat = "/usr/bin/xpdf"
+savedir = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata = INSTALLDIR
+path_doc = os.path.join(rep_cata,'Doc')
+exec_acrobat = "/usr/bin/xpdf"
+savedir = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
# Modules Eficas
import prefs
-prefs.code="OPENTURNS_WRAPPER"
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
from InterfaceQT4 import eficas_go
eficas_go.lance_eficas(code=prefs.code)
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ __init__.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw
+ )
+add_subdirectory (Pmw_1_2)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ __init__.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw/Pmw_1_2
+ )
+install (
+ DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin
+ ${CMAKE_CURRENT_SOURCE_DIR}/contrib
+ ${CMAKE_CURRENT_SOURCE_DIR}/demos
+ ${CMAKE_CURRENT_SOURCE_DIR}/doc
+ ${CMAKE_CURRENT_SOURCE_DIR}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/tests
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw/Pmw_1_2
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
EFICAS est constitué de plusieurs packages Python qui sont
décrits rapidement ci-dessous.
+UiQT4:
+ est le répertoire de l'interface graphique QT4 d'Eficas.
+ Celle-ci doit impérativement être construite avant
+ toute utilisation d'Eficas. Pour cela:
+
+ make -C UiQT4
+
Noyau:
est le package de base d'Eficas et du superviseur Aster.
Il contient les foonctionnalités nécessaires à la création des
Les catalogues se trouvent dans le répertoire.
Pour executer, aller dans le répertoire et taper ./eficas_mini.py
-
+OpenTURNS:
+ deux répertoires Study et Wrapper contiennent des scripts pour
+ produire les études d'incertitudes (en python) et les fichiers de
+ description des wrappers.
+ Dans chaque répertoire, un fichier prefs_OPENTURNS_(STUDY|WRAPPER).py
+ doit être modifié pour signaler à Eficas où se trouve le module
+ python d'Open TURNS (variable OpenTURNS_path).
+ Pour executer, aller dans le répertoire et taper ./qtEficas_openturns_study.py
+ ou bien ./qtEficas_openturns_wrapper.py
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+
+install ( FILES
+ catalogues_sep.ini configuration_SEP.py editeur.ini prefs.py
+ properties.py sdistSEP.py SEP_Cata_V1.py
+ __init__.py prefs_SEP.py qtEficas_SEP.py SEP_Cata_V0.py style.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Sep
+ )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+ execmodul = None,
+ # regles = ( AU_MOINS_UN ( 'M_TUBE','MAILLAGE_COUDE','CHARGE_LIMITE ), ),
+ regles = ( AU_MOINS_UN ( 'S_EP_INTERNE',), ),
+ ) # Fin JDC_CATA
+#
+
+S_EP_INTERNE= MACRO (nom = 'S_EP_INTERNE',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "Sous epaisseur ",
+ dir_name = SIMP(statut='o', typ='TXM',),
+ methode = SIMP(statut='o', typ='TXM',into=('generatrices','tortue',),),
+ PARA_GEOM = FACT( statut='o',
+ max=1,
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+ unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),
+ ),
+)
+
+
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+ execmodul = None,
+ # regles=(AU_MOINS_UN('SOUS_EPAISSEUR_INTERNE','SOUS_EPAISSEUR_EXTERNE',),),
+ regles=( UN_PARMI('S_EP_INTERNE','MACRO_OUTIL1','MACRO_OUTIL2'),),
+ )# Fin JDC_CATA
+#
+
+
+S_EP_INTERNE= MACRO (nom = 'S_EP_INTERNE',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "sous epaisseur ",
+ dir_name = SIMP(statut='o', typ='TXM',),
+ TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EPAISSEUR','COUDE_SOUS_EPAISSEUR',)),
+ b_tube_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TUBE_SOUS_EPAISSEUR' ",
+ regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+ MAIL_TUBE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du tube ",
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+ petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+ nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+ ),
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='R', defaut=4096.,val_min=4096.,val_max=8000.),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ ),
+ b_coude_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'COUDE_SOUS_EPAISSEUR' ",
+ regles = (AU_MOINS_UN('MAIL_COUDE','CHARGE_LIMITE')),
+ MAIL_COUDE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du coude ",
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+ r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+ angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+ orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+ longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+ longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+ pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+ debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+ angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+ nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+ nb_seg_prolongement_aval = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+ ),
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='R', defaut=4096,val_min=4096,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000, fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ ),
+)
+
+
+MACRO_OUTIL1= MACRO (nom = 'MACRO_OUTIL1',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "Outil 1",
+ dir_name = SIMP(statut='o', typ='TXM',),
+ PARA_GEOM = FACT( statut='o',
+ max=1,
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+ unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),
+ ),
+)
+
+MACRO_OUTIL2= MACRO (nom = 'MACRO_OUTIL2',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "Outil 2",
+ dir_name = SIMP(statut='o', typ='TXM',),
+ PARA_GEOM = FACT( statut='o',
+ max=1,
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+ unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),
+ ),
+)
+
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+ execmodul = None,
+ # regles=(AU_MOINS_UN('SOUS_EPAISSEUR_INTERNE','SOUS_EPAISSEUR_EXTERNE',),),
+ regles=( UN_PARMI('S_EP_INTERNE'),),
+ )# Fin JDC_CATA
+#
+
+
+S_EP_INTERNE= MACRO (nom = 'S_EP_INTERNE',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "sous epaisseur ",
+ dir_name = SIMP(statut='o', typ='TXM',),
+ TYPE_EXEC = SIMP(statut='o', typ='TXM',into=('MAILLAGE','CALCUL',)),
+ TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EPAISSEUR','COUDE_SOUS_EPAISSEUR','TEST_SOUS_EPAISSEUR')),
+ b_tube_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TUBE_SOUS_EPAISSEUR' ",
+ regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+ MAIL_TUBE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du tube ",
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+ petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+ nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+ ),
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ ),
+ b_coude_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'COUDE_SOUS_EPAISSEUR' ",
+ regles = (AU_MOINS_UN('MAIL_COUDE','CHARGE_LIMITE')),
+ MAIL_COUDE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du coude ",
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+ r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+ angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+ orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+ longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+ longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+ pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+ debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+ angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+ nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+ nb_seg_prolongement_aval = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+ ),
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000, fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ ),
+ b_test_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TEST_SOUS_EPAISSEUR' ",
+ regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+ MAIL_TUBE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du tube ",
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+ petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+ nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+ ),
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='I', defaut=128,val_min=128,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ )
+)
+
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+ execmodul = None,
+ # regles=(AU_MOINS_UN('STRUCTURE_SIMPLE','STRUCTURE_COMPOSEE',),),
+ regles=(AU_MOINS_UN('STRUCTURE_SIMPLE',),),
+ )# Fin JDC_CATA
+#
+
+
+STRUCTURE_SIMPLE= MACRO (nom = 'STRUCTURE_SIMPLE',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "sous epaisseur ",
+ dir_name = SIMP(statut='o', typ='TXM',),
+
+ MAILLAGE = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+ CHARGE_LIMITE = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+
+ lecture_maillage = BLOC(condition = "(MAILLAGE == 'NON') and (CHARGE_LIMITE=='OUI') ",
+ LECTURE_MAILLAGE = FACT( statut='o',max='**',
+ FICHIER =SIMP(statut='o',typ='Fichier',),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+ fr="Format du fichier : ASTER ou MED.",),
+ NOM = SIMP(statut='f',typ='TXM',
+ fr="Nom du maillage dans le fichier MED.",),),
+ ),
+
+ execution_maillage = BLOC(condition = "MAILLAGE == 'OUI' ",
+
+ TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EP_INTERNE','TUBE_SOUS_EP_EXTERNE','COUDE_SOUS_EP_INTERNE','COUDE_SOUS_EP_EXTERNE')),
+
+ b_tube_sous_epaisseur =BLOC(condition="(TYPE_SEP=='TUBE_SOUS_EP_INTERNE') or (TYPE_SEP=='TUBE_SOUS_EP_EXTERNE') ",
+ regles=(UN_PARMI('TUBE_SOUS_EP_INTERNE','TUBE_SOUS_EP_EXTERNE'),),
+ MAIL_TUBE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du tube ",
+ points_de_mesure = FACT( statut='o',max='**',
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : CSV.",),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+ fr="Format du fichier : CSV",),
+ ),
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+ petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+ nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de raffinement de maillage"),
+ ),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+
+
+ b_coude_sous_epaisseur =BLOC(condition="(TYPE_SEP=='COUDE_SOUS_EP_INTERNE') or (TYPE_SEP=='COUDE_SOUS_EP_EXTERNE') ",
+ regles=(UN_PARMI('COUDE_SOUS_EP_INTERNE','COUDE_SOUS_EP_EXTERNE'),),
+ MAIL_COUDE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du coude ",
+ points_de_mesure = FACT( statut='o',max='**',
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : CSV.",),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+ fr="Format du fichier : CSV",),
+ ),
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+ r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+ angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+ orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+ longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+ longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+ pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+ debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+ angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+ nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+ nb_seg_prolongement_aval = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="critère de rafinement de maillage"),
+
+ ),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+ ),
+
+ b_charge_limite_non=BLOC(condition = "CHARGE_LIMITE == 'NON' ",
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+ b_charge_limite_oui=BLOC(condition = "CHARGE_LIMITE == 'OUI' ",
+ CHARGE_LIMITE = FACT( statut='f',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ version_aster=SIMP(statut='o', typ='TXM', defaut='STA10',into=('STA9','STA10'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+ E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+ D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+ ),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+
+
+)
+
--- /dev/null
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+ execmodul = None,
+ # regles=(AU_MOINS_UN('STRUCTURE_SIMPLE','STRUCTURE_COMPOSEE',),),
+ regles=(AU_MOINS_UN('STRUCTURE_SIMPLE',),),
+ )# Fin JDC_CATA
+#
+
+
+STRUCTURE_SIMPLE= MACRO (nom = 'STRUCTURE_SIMPLE',
+ op = None,
+ sd_prod = None,
+ reentrant = 'n',
+ UIinfo = {"groupes":("Outils métier",)},
+ fr = "sous epaisseur ",
+ dir_name = SIMP(statut='o', typ='TXM',),
+
+ CHARGE_LIMITE = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+
+ TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EP_INTERNE','COUDE_SOUS_EP_INTERNE')),
+
+
+ b_tube_sous_epaisseur =BLOC(condition="(TYPE_SEP=='TUBE_SOUS_EP_INTERNE') ",
+
+ points_de_mesure = FACT( statut='o',max='**',
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : CSV.",),
+ ),
+
+
+ MAIL_TUBE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du tube ",
+
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+ petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+ nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de raffinement de maillage"),
+ ),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+
+
+ b_coude_sous_epaisseur =BLOC(condition="(TYPE_SEP=='COUDE_SOUS_EP_INTERNE') ",
+
+ points_de_mesure = FACT( statut='o',max='**',
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : CSV.",),
+ FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+ fr="Format du fichier : CSV",),
+ ),
+ MAIL_COUDE = FACT( statut='f',max='**',
+ fr = "Parametres maillage du coude ",
+
+ unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+ r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+ r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+ ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+ angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+ orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+ longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+ longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+ pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+ debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+ angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+ nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+ nb_seg_prolongement_aval = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+ nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+ nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+ nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+ nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+ nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+ critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="critère de rafinement de maillage"),
+
+ ),
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+
+
+ b_charge_limite_non=BLOC(condition = "CHARGE_LIMITE == 'NON' ",
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+ b_charge_limite_oui=BLOC(condition = "CHARGE_LIMITE == 'OUI' ",
+
+ TYPE_CHARGE_LIMITE= SIMP(statut='o', typ='TXM',into=('CHARGE_LIMITE_INF','CHARGE_LIMITE_SUP')),
+
+ PARAMETRES = FACT( statut='o',max='**',
+ fr = "Parametres pour calcul de charge limite ",
+
+ unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+ memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+ unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+ temps=SIMP(statut='o', typ='R', defaut=50.),
+ machine=SIMP(statut='o', typ='TXM', defaut='locale',into=('locale','distante'),),
+ unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('Pa','MPa'),),
+
+ E =SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+ NU=SIMP(statut='o', typ='R', defaut=0.3 , fr="coefficient de poisson"),
+ SY=SIMP(statut='o', typ='R', defaut=98.7 , fr="limite d'elasticite"),
+ ),
+
+ CHARGE_LIMITE_INF = BLOC(condition="(TYPE_CHARGE_LIMITE =='CHARGE_LIMITE_INF') ",
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : .COMM",),
+ ),
+
+ CHARGE_LIMITE_SUP = BLOC(condition="(TYPE_CHARGE_LIMITE =='CHARGE_LIMITE_SUP') ",
+ FICHIER =SIMP(statut='o',typ='Fichier',
+ fr="Format du fichier : .COMM",),
+ ),
+
+ INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+ ),
+
+
+)
+
--- /dev/null
+# -*- coding: utf-8 -*-
--- /dev/null
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+ #('SEP','V0',os.path.join(rep_cata,'SEP_Cata_V0.py'),'SEP','SEP'),
+ #('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V1.py'),'SEP','SEP'),
+ #('SEP','V1_1',os.path.join(rep_cata,'SEP_Cata_V1_1.py'),'SEP','SEP'),
+ #('SEP','V1_2',os.path.join(rep_cata,'SEP_Cata_V1_2.py'),'SEP','SEP'),
+ # ('SEP','V1_3',os.path.join(rep_cata,'SEP_Cata_V1_3.py'),'SEP','SEP'),
+ ('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V0_1.py'),'SEP','SEP'),
+)
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+import os, sys, string, types, re
+import traceback
+from PyQt4.QtGui import *
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIG:
+
+ #-----------------------------------
+ def __init__(self,appli,repIni):
+ #-----------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs
+ # On a deux directories : la directory generale (Repertoire d instal + Nom du code
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
+ # et la directorie de l utilisateur
+ # HOME/.Eficas_SousEp
+ # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement
+ # par celui de l utilisateur
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+ # dans le fichier general sinon
+ self.appli = appli
+ self.code = appli.code
+ self.salome = appli.salome
+ self.repIni = repIni
+ self.fic_prefs ="prefs.py"
+
+ if self.appli:
+ self.parent=appli.top
+ #self.appli.format_fichier="openturns_study"
+ else: self.parent=None
+
+
+ self.labels=("rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata","initialdir","savedir")
+
+ # Valeurs par defaut
+ self.rep_user = os.path.join(os.environ['HOME'],'.Eficas_SousEp')
+ self.path_doc = self.rep_user
+ self.savedir = os.environ['HOME']
+ self.initialdir = os.environ['HOME']
+ self.exec_acrobat = self.rep_user
+
+ #Lecture des fichiers utilisateurs
+ self.lecture_fichier_ini_standard()
+ self.lecture_fichier_ini_utilisateur()
+ self.lecture_catalogues()
+
+ #--------------------------------------
+ def lecture_fichier_ini_standard(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ self.fic_ini = os.path.join(self.repIni,self.fic_prefs)
+ if not os.path.isfile(self.fic_ini):
+ QMessageBox.critical( None, "Import du fichier de Configuration",
+ "Erreur à la lecture du fichier de configuration "+self.fic_ini+".py" )
+ sys.exit(0)
+ import prefs
+ for k in self.labels :
+ try :
+ valeur=getattr(prefs,k)
+ setattr(self,k,valeur)
+ except :
+ pass
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_utilisateur(self):
+ #--------------------------------------
+ # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fic_prefs)
+ #if not os.path.isfile(self.fic_ini_utilisateur+".py"):
+ if not os.path.isfile(self.fic_ini_utilisateur):
+ return
+ from utils import read_file
+ txt = utils.read_file(self.fic_ini_utilisateur)
+ from styles import style
+ d=locals()
+ try:
+ exec txt in d
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ QMessageBox.critical( None, "Import du fichier de Configuration",
+ "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )
+ sys.exit(0)
+ for k in self.labels :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+
+
+
+ #--------------------------------------
+ def lecture_catalogues(self):
+ #--------------------------------------
+ rep_mat=" " # Compatbilite Aster
+ fic_cata ="catalogues_sep.ini"
+ fic_ini = os.path.join(self.repIni,fic_cata)
+ fic_user= os.path.join(self.rep_user,fic_cata)
+ if os.path.isfile(fic_user):
+ fichier = fic_user
+ else :
+ fichier = fic_ini
+ if not os.path.isfile(fic_ini) :
+ QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues",
+ "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )
+ sys.exit(0)
+
+ print fic_cata
+ from utils import read_file
+ txt = utils.read_file(fichier)
+ d=locals()
+ try:
+ exec txt in d
+ self.catalogues=d["catalogues"]
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ QMessageBox.critical( None, "Import du fichier de Configuration",
+ "Erreur à la lecture du fichier de configuration " + fichier )
+ sys.exit(0)
+
+
+
+ #--------------------------------------
+ def save_params(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux paramètres dans le fichier de configuration utilisateur
+ #
+ print "a ecrire PNPNPN"
+# l_param=('exec_acrobat', 'repIni','catalogues','rep_travail','rep_mat','path_doc')
+# texte=""
+# for clef in l_param :
+# if hasattr(self,clef):
+# valeur=getattr(self,clef)
+# texte= texte + clef+" = " + repr(valeur) +"\n"
+#
+#
+# # recuperation des repertoires materiaux
+# try :
+# for item in self.catalogues :
+# try :
+# (code,version,cata,format,defaut)=item
+# except :
+# (code,version,cata,format)=item
+# codeSansPoint=re.sub("\.","",version)
+# chaine="rep_mat_"+codeSansPoint
+# if hasattr(self,chaine):
+# valeur=getattr(self,chaine)
+# texte= texte + chaine+" = '" + str(valeur) +"'\n"
+# except :
+# pass
+#
+# f=open(self.fic_ini_utilisateur,'w+')
+# f.write(texte)
+# f.close()
+#
+
+
+def make_config(appli,rep):
+ return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+ return None
+
+
--- /dev/null
+# 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
+
+from Sous_epaisseur import prefs
+
+rep_cata = os.path.join(prefs.REPINI,'Cata')
+print rep_cata
+
+# Accès à la documentation Aster
+path_doc = os.path.join(rep_cata,'..','Doc')
+exec_acrobat = "acroread"
+# Utilisateur/Développeur
+isdeveloppeur = "NON"
+path_cata_dev = "/tmp/cata"
+# Répertoire temporaire
+rep_travail = "/tmp"
+# Répertoire initial
+initialdir=os.curdir
+
+# Choix des catalogues
+
+catalogues = (
+ ('Sous_epaisseur','v1.0',os.path.join(rep_cata,'SEP_Cata_V1_4'),'python'),
+ )
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# la variable code donne le nom du code a selectionner
+code="SEP"
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+ userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+ userprefs=os.path.expanduser("~/.Eficas_SEP/prefs.py")
+
+if os.path.isfile(userprefs):
+ try:
+ execfile(userprefs)
+ except:
+ pass
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# la variable code donne le nom du code a selectionner
+code="SEP"
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+ userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+ userprefs=os.path.expanduser("~/.Eficas_SEP/prefs.py")
+
+if os.path.isfile(userprefs):
+ try:
+ execfile(userprefs)
+ except:
+ pass
+
--- /dev/null
+#@ MODIF properties Accas DATE 11/06/2008 AUTEUR aster M.ADMINISTRATEUR
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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.
+# ======================================================================
+# IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+# DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "0.1"
+date = "20/05/2009"
+exploit = False
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+"""
+ Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+from InterfaceQT4 import eficas_go
+#from InterfaceQT import eficas_go
+
+eficas_go.lance_eficas(code=prefs.code)
--- /dev/null
+# -*- coding: utf-8 -*-
+"""
+ Ce module sert à construire les distributions d'EFICAS pour SEP
+ en fonction du tag CVS courant
+ Les distributions sont :
+ - un tar.gz pour UNIX ne contenant pas mxTextTools
+ L'utilisation de ce module est la suivante :
+ 1- Se mettre dans un répertoire de travail
+ 2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+ 3- Exporter les sources d'EficasV1 par la commande :
+ cvs export -r TAG -d Eficas_export EficasV1
+ ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1)
+ 5- Aller dans le répertoire Eficas_export
+ 6- Executer le script sdist.py
+ python sdist.py
+ Ce qui a pour effet de creer un repertoire dist contenant la distribution
+ et de la copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+nom_distrib="QTEficasSEP_V1_0"
+path_distrib=os.path.join("dist",nom_distrib)
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+ if os.path.isdir('dist'):shutil.rmtree('dist')
+
+ copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS'])
+
+ copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+ copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py','faqs.txt'])
+ copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
+ copyfiles('../Sous_epaisseur',os.path.join(path_distrib,'Sous_epaisseur'),['*.py','*.ini'])
+ copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+ copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+ copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
+ copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+ # AIDE
+ copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+ copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+ copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
+ copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
+ # ______________________
+
+ copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+ os.system("rm -rf .././convert/Parserv5 ")
+ os.system("rm -rf .././convert/convert_asterv5.py ")
+ copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+ copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+ copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.png'])
+ copyfiles('../Editeur/Patrons/',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
+
+ copyfiles('../Noyau',os.path.join(path_distrib,'Noyau'),['*.py'])
+ copyfiles('../Validation',os.path.join(path_distrib,'Validation'),['*.py'])
+
+
+ tarball= maketarball('dist',nom_distrib,nom_distrib)
+ try:
+ shutil.copy(tarball,dir_download)
+ except:
+ print "Repertoire de download inconnu : ",dir_download
+
+
+
+def make_dir(dir_cible):
+ if type(dir_cible) is not types.StringType:
+ raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+ head,tail=os.path.split(dir_cible)
+ tails=[tail]
+ while head and tail and not os.path.isdir(head):
+ head,tail=os.path.split(head)
+ tails.insert(0, tail)
+
+ for d in tails:
+ head = os.path.join(head, d)
+ if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+ if not os.path.isdir(dir_cible):make_dir(dir_cible)
+ for glob_files in listfiles:
+ for file in glob.glob(os.path.join(dir_origin,glob_files)):
+ shutil.copy(file,dir_cible)
+
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+ prev=os.getcwd()
+ print prev
+ os.chdir(dir_trav)
+ os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+ os.system("gzip -f9 "+nom_tar+".tar ")
+ os.chdir(prev)
+ return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+
+main()
+
--- /dev/null
+# -*- coding: utf-8 -*-
+"""
+Pour modifier le style d'EFICAS il faut ajouter un fichier style.py qui contiendra les
+informations sur le style voulu dans son repertoire Eficas_install.
+
+La methode la plus simple consiste à modifier directement les attributs de l'objet style dans le
+fichier style.py d'Eficas_install. Exemple::
+
+ style.background='yellow'
+
+pour modifier la couleur du background.
+
+Il existe une autre méthode qui peut être utilisée quand on veut modifier plusieurs propriétés à la fois.
+
+Le fichier style.py doit définir une nouvelle classe qui dérive de la classe de base STYLE avec des attributs
+de classe qui définiront le nouveau style (par exemple, si on veut modifier le background)::
+
+ class STYLE(STYLE):
+ background='yellow'
+
+Il faut ensuite instancier cette classe, dans ce meme fichier, en donnant le nom style à l'objet cree::
+
+ style=STYLE()
+
+Tous les attributs de classe possibles sont visibles dans le module Editeur/basestyle.py::
+
+ background='gray90'
+ foreground='black'
+ entry_background='white'
+ list_background='white'
+ list_select_background='#00008b'
+ list_select_foreground='grey'
+ tooltip_background="yellow"
+
+ standard = ("Helvetica",12)
+ standard_italique = ("Helvetica",12,'italic')
+ standard_gras = ("Helvetica",12,'bold')
+ standard_gras_souligne = ("Helvetica",12,'bold','underline')
+
+ canvas = ('Helvetica',10)
+ canvas_italique = ('Helvetica',10,'italic')
+ canvas_gras = ("Helvetica",10,'bold')
+ canvas_gras_italique = ("Helvetica",12,'bold','italic')
+
+ standard12 = ("Helvetica",14)
+ standard12_gras = ("Helvetica",14,'bold')
+ standard12_gras_italique = ( "Helvetica",14,'bold','italic')
+
+
+Le fichier style.py contenu dans le répertoire Aster permet de spécifier des propriétés globales pour une installation.
+Les modifications de style contenues dans ce fichier et dans le fichier style.py d'Eficas_install
+sont prises en compte dans cet ordre.
+"""
+
+p1=10
+p2=14
+f1="Helvetica"
+
+style.background='gray90'
+style.foreground='black'
+style.standard = (f1,p1)
+style.standard_italique = (f1,p1,'italic')
+style.standard_gras = (f1,p1,'bold')
+style.canvas_italique = (f1,p1,'italic')
+style.canvas_gras = (f1,p1,'bold')
+style.statusfont = (f1,p2)
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ __init__.py optparse.py textwrap.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Tools
+ )
+add_subdirectory (foztools)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+
+install ( FILES
+ foztools.py __init__.py slider.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Tools/foztools
+ )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+ FILES
+ calcG.py changeValeur.py dictErreurs.py __init__.py inseremocle.py
+ load.py log.py mocles.py movemocle.py parseur.py regles.py removemocle.py
+ renamemocle.py traduitV7V8.py traduitV8V9.py utils.py
+ visiteur.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/Traducteur
+ )
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+set ( _PYFILES )
+macro ( eficas_compile_ui uifile )
+ get_filename_component ( _file_we ${uifile} NAME_WE )
+ set ( _pyfile "${_file_we}.py" )
+ add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile}
+ COMMAND ${PYUIC4} ARGS -x -o ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile} ${CMAKE_CURRENT_SOURCE_DIR}/${uifile}
+ MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${uifile}
+ COMMENT "Compiling ${uifile}"
+ )
+ list ( APPEND _PYFILES ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile} )
+endmacro ( eficas_compile_ui )
+
+eficas_compile_ui ( OptionsCuve.ui )
+eficas_compile_ui ( OptionsEditeur.ui )
+eficas_compile_ui ( OptionsOT.ui )
+eficas_compile_ui ( OptionsPdf.ui )
+eficas_compile_ui ( aideQT.ui )
+eficas_compile_ui ( desChoixCata.ui )
+eficas_compile_ui ( desChoixMap.ui )
+eficas_compile_ui ( desCommande.ui )
+eficas_compile_ui ( desCommentaire.ui )
+eficas_compile_ui ( desError.ui )
+eficas_compile_ui ( desFormule.ui )
+eficas_compile_ui ( desInactif.ui )
+eficas_compile_ui ( desInclude.ui )
+eficas_compile_ui ( desListeParam.ui )
+eficas_compile_ui ( desMCFact.ui )
+eficas_compile_ui ( desMCListAjout.ui )
+eficas_compile_ui ( desMatrice.ui )
+eficas_compile_ui ( desParam.ui )
+eficas_compile_ui ( desPixmap.ui )
+eficas_compile_ui ( desPlusieursBase.ui )
+eficas_compile_ui ( desPlusieursInto.ui )
+eficas_compile_ui ( desPoursuite.ui )
+eficas_compile_ui ( desRacine.ui )
+eficas_compile_ui ( desSelectVal.ui )
+eficas_compile_ui ( desUniqueASSD.ui )
+eficas_compile_ui ( desUniqueBase.ui )
+eficas_compile_ui ( desUniqueComp.ui )
+eficas_compile_ui ( desUniqueInto.ui )
+eficas_compile_ui ( desUniqueSDCO.ui )
+eficas_compile_ui ( desUniqueSDCOInto.ui )
+eficas_compile_ui ( desViewTexte.ui )
+eficas_compile_ui ( desVisu.ui )
+eficas_compile_ui ( myMain.ui )
+
+add_custom_target ( CompileUI ALL DEPENDS ${_PYFILES}
+ COMMENT "Built UI files"
+ )
+
+install ( FILES ${_PYFILES}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/UiQT4
+ )
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>657</width>
+ <height>645</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Option TURNS</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QGroupBox" name="groupBox1" >
+ <property name="minimumSize" >
+ <size>
+ <width>635</width>
+ <height>252</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>252</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Configurer une Version</string>
+ </property>
+ <widget class="QComboBox" name="CBVersions" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>121</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>121</width>
+ <height>40</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="Bok" >
+ <property name="geometry" >
+ <rect>
+ <x>500</x>
+ <y>30</y>
+ <width>121</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>90</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>121</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Valider</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBajout" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>200</y>
+ <width>106</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Ajouter
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionAjout" >
+ <property name="geometry" >
+ <rect>
+ <x>122</x>
+ <y>200</y>
+ <width>154</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBSup" >
+ <property name="geometry" >
+ <rect>
+ <x>360</x>
+ <y>200</y>
+ <width>106</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Supprimer
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionSup" >
+ <property name="geometry" >
+ <rect>
+ <x>470</x>
+ <y>200</y>
+ <width>155</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>41</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QWidget" name="layoutWidget" >
+ <property name="geometry" >
+ <rect>
+ <x>7</x>
+ <y>100</y>
+ <width>621</width>
+ <height>65</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QLabel" name="textLabel1_3" >
+ <property name="text" >
+ <string>Fichier catalogue (chemin complet) :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="LERepCata" >
+ <property name="minimumSize" >
+ <size>
+ <width>501</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QGroupBox" name="groupBox3" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>90</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Doc</string>
+ </property>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>28</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'accès à la documentation :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepDoc" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>74</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QGroupBox" name="groupBox3_2" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>90</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Espace de travail</string>
+ </property>
+ <widget class="QLabel" name="textLabel1_4" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>28</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire de sauvegarde par défaut :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LESaveDir" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>74</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QSplitter" name="splitter_3" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <widget class="QCheckBox" name="Bdefaut" >
+ <property name="minimumSize" >
+ <size>
+ <width>340</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="font" >
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="text" >
+ <string>Réinitialiser avec les valeurs par defaut</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBQuit" >
+ <property name="minimumSize" >
+ <size>
+ <width>151</width>
+ <height>31</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Quitter</string>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>662</width>
+ <height>768</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Option TURNS</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="1" column="0" >
+ <spacer name="verticalSpacer_2" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>20</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="0" colspan="2" >
+ <widget class="QGroupBox" name="groupBox2" >
+ <property name="minimumSize" >
+ <size>
+ <width>641</width>
+ <height>320</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Configurer les répertoires</string>
+ </property>
+ <widget class="QLabel" name="textLabel1_2" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>155</y>
+ <width>617</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'installation d'Open TURNS :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepOT" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>180</y>
+ <width>617</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepDoc" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>263</y>
+ <width>617</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1_5" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>31</y>
+ <width>617</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'installation des codes MAP :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepMAP" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>56</y>
+ <width>617</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepAster" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>118</y>
+ <width>617</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1_6" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>93</y>
+ <width>617</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'installation de code_Aster :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>217</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'accès à la documentation :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <spacer name="verticalSpacer" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>20</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="4" column="0" colspan="2" >
+ <widget class="QGroupBox" name="groupBox3_2" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>10</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Espace de travail</string>
+ </property>
+ <widget class="QLineEdit" name="LESaveDir" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>50</y>
+ <width>617</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1_4" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>20</y>
+ <width>617</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>10</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire de sauvegarde par défaut :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="5" column="0" >
+ <widget class="QCheckBox" name="Bdefaut" >
+ <property name="minimumSize" >
+ <size>
+ <width>340</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="font" >
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="text" >
+ <string>Réinitialiser avec les valeurs par defaut</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" >
+ <widget class="QPushButton" name="PBQuit" >
+ <property name="minimumSize" >
+ <size>
+ <width>151</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>151</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Quitter</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2" >
+ <widget class="QGroupBox" name="groupBox1" >
+ <property name="minimumSize" >
+ <size>
+ <width>635</width>
+ <height>195</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>252</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Configurer une Version</string>
+ </property>
+ <widget class="QComboBox" name="CBVersions" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>20</y>
+ <width>180</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>180</width>
+ <height>40</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="Bok" >
+ <property name="geometry" >
+ <rect>
+ <x>500</x>
+ <y>20</y>
+ <width>121</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>90</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>121</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Valider</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBajout" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>140</y>
+ <width>111</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Ajouter
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionAjout" >
+ <property name="geometry" >
+ <rect>
+ <x>130</x>
+ <y>140</y>
+ <width>171</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>30</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBSup" >
+ <property name="geometry" >
+ <rect>
+ <x>210</x>
+ <y>20</y>
+ <width>111</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Supprimer
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionSup" >
+ <property name="geometry" >
+ <rect>
+ <x>330</x>
+ <y>20</y>
+ <width>163</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>41</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1_3" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>70</y>
+ <width>617</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Fichier catalogue (chemin complet) :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepCata" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>90</y>
+ <width>617</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>501</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEFormatOUT" >
+ <property name="enabled" >
+ <bool>false</bool>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>450</x>
+ <y>140</y>
+ <width>171</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>30</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel" name="textLabel1_7" >
+ <property name="geometry" >
+ <rect>
+ <x>390</x>
+ <y>140</y>
+ <width>51</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>50</width>
+ <height>10</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Schema</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>657</width>
+ <height>794</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Option TURNS</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QGroupBox" name="groupBox1" >
+ <property name="minimumSize" >
+ <size>
+ <width>635</width>
+ <height>252</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>252</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Configurer une Version</string>
+ </property>
+ <widget class="QComboBox" name="CBVersions" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>121</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>121</width>
+ <height>40</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="Bok" >
+ <property name="geometry" >
+ <rect>
+ <x>500</x>
+ <y>30</y>
+ <width>121</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>90</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>121</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Valider</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBajout" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>200</y>
+ <width>106</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Ajouter
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionAjout" >
+ <property name="geometry" >
+ <rect>
+ <x>122</x>
+ <y>200</y>
+ <width>154</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBSup" >
+ <property name="geometry" >
+ <rect>
+ <x>360</x>
+ <y>200</y>
+ <width>106</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>101</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Supprimer
+Version :</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LEVersionSup" >
+ <property name="geometry" >
+ <rect>
+ <x>470</x>
+ <y>200</y>
+ <width>155</width>
+ <height>43</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>41</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QWidget" name="layoutWidget" >
+ <property name="geometry" >
+ <rect>
+ <x>7</x>
+ <y>100</y>
+ <width>621</width>
+ <height>65</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QLabel" name="textLabel1_3" >
+ <property name="text" >
+ <string>Fichier catalogue (chemin complet) :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="LERepCata" >
+ <property name="minimumSize" >
+ <size>
+ <width>501</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QGroupBox" name="groupBox2" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>90</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Configurer la bibliothèque Open TURNS</string>
+ </property>
+ <widget class="QLabel" name="textLabel1_2" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>28</y>
+ <width>617</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'installation d'Open TURNS :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepOT" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>50</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QGroupBox" name="groupBox3" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>90</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Doc</string>
+ </property>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>28</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire d'accès à la documentation :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LERepDoc" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>74</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QGroupBox" name="groupBox3_2" >
+ <property name="minimumSize" >
+ <size>
+ <width>548</width>
+ <height>90</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Espace de travail</string>
+ </property>
+ <widget class="QLabel" name="textLabel1_4" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>28</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>613</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Répertoire de sauvegarde par défaut :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="LESaveDir" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>74</y>
+ <width>617</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>520</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item row="4" column="0" >
+ <widget class="QSplitter" name="splitter_3" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <widget class="QCheckBox" name="Bdefaut" >
+ <property name="minimumSize" >
+ <size>
+ <width>340</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>41</height>
+ </size>
+ </property>
+ <property name="font" >
+ <font>
+ <pointsize>12</pointsize>
+ </font>
+ </property>
+ <property name="text" >
+ <string>Réinitialiser avec les valeurs par defaut</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBQuit" >
+ <property name="minimumSize" >
+ <size>
+ <width>151</width>
+ <height>31</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Quitter</string>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+<ui version="4.0" >
+ <class>ChoixMap</class>
+ <widget class="QDialog" name="ChoixMap" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>788</width>
+ <height>752</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Dialog</string>
+ </property>
+ <widget class="QLabel" name="label" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>370</y>
+ <width>141</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>scheme description :</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="pushButton" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>440</y>
+ <width>83</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Doc</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="PBIconeMap" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>83</width>
+ <height>91</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="icon" >
+ <iconset>
+ <normaloff>../../../map.ppm</normaloff>../../../map.ppm</iconset>
+ </property>
+ <property name="iconSize" >
+ <size>
+ <width>160</width>
+ <height>160</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="pushButton_3" >
+ <property name="geometry" >
+ <rect>
+ <x>670</x>
+ <y>30</y>
+ <width>81</width>
+ <height>101</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="icon" >
+ <iconset>
+ <normaloff>image120.png</normaloff>image120.png</iconset>
+ </property>
+ <property name="iconSize" >
+ <size>
+ <width>160</width>
+ <height>160</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QGroupBox" name="groupBoxScheme" >
+ <property name="geometry" >
+ <rect>
+ <x>390</x>
+ <y>20</y>
+ <width>261</width>
+ <height>311</height>
+ </rect>
+ </property>
+ <property name="title" >
+ <string>Scheme</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" name="groupBoxModule" >
+ <property name="geometry" >
+ <rect>
+ <x>110</x>
+ <y>20</y>
+ <width>261</width>
+ <height>311</height>
+ </rect>
+ </property>
+ <property name="title" >
+ <string>Modules</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QRadioButton" name="RBM1" >
+ <property name="text" >
+ <string>oxides</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM2" >
+ <property name="text" >
+ <string>scc</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM3" >
+ <property name="text" >
+ <string>concrete</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM4" >
+ <property name="text" >
+ <string>polycristals</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM5" >
+ <property name="text" >
+ <string>polymers</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM6" >
+ <property name="text" >
+ <string>micro</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM7" >
+ <property name="text" >
+ <string>seal</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM8" >
+ <property name="text" >
+ <string>mox</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM9" >
+ <property name="text" >
+ <string>nano</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="RBM10" >
+ <property name="text" >
+ <string>insulator</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QLabel" name="labelScheme" >
+ <property name="geometry" >
+ <rect>
+ <x>160</x>
+ <y>380</y>
+ <width>551</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
<property name="windowTitle" >
<string>DComm</string>
</property>
- <layout class="QGridLayout" name="gridLayout_3" >
- <item row="1" column="0" >
- <widget class="QLabel" name="Commentaire" >
- <property name="maximumSize" >
- <size>
- <width>793</width>
- <height>20</height>
- </size>
- </property>
- <property name="frameShape" >
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow" >
- <enum>QFrame::Plain</enum>
- </property>
- <property name="text" >
- <string/>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0" >
- <layout class="QHBoxLayout" name="horizontalLayout" >
- <item>
- <spacer name="horizontalSpacer" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>263</width>
- <height>27</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="bOk" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
- <size>
- <width>160</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>16777215</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip" >
- <string>validation de la saisie</string>
- </property>
- <property name="text" >
- <string>&Valider</string>
- </property>
- <property name="shortcut" >
- <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
- </property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- <property name="default" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>254</width>
- <height>27</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
+ <layout class="QGridLayout" name="gridLayout_11" >
<item row="0" column="0" >
<widget class="QTabWidget" name="TWChoix" >
<property name="currentIndex" >
<property name="title" >
<string>Concept</string>
</property>
- <layout class="QGridLayout" name="gridLayout_8" >
+ <layout class="QGridLayout" name="gridLayout_10" >
<item row="0" column="0" >
- <widget class="QSplitter" name="splitter" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <widget class="QLabel" name="textLabel1_3" >
- <property name="text" >
- <string><u>Nom du concept :</u></string>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </widget>
- </item>
- <item row="1" column="0" >
- <layout class="QHBoxLayout" name="horizontalLayout_2" >
- <item>
+ <layout class="QGridLayout" name="gridLayout_3" >
+ <item row="0" column="0" colspan="2" >
+ <widget class="QLabel" name="Label1" >
+ <property name="text" >
+ <string><u>Nom du concept :</u></string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
<widget class="QLineEdit" name="LENomConcept" >
<property name="minimumSize" >
<size>
</property>
</widget>
</item>
- <item>
+ <item row="1" column="1" >
<spacer name="horizontalSpacer_3" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</item>
</layout>
</item>
- <item row="2" column="0" >
- <spacer name="verticalSpacer_3" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>20</width>
- <height>51</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="0" >
- <layout class="QVBoxLayout" name="verticalLayout" >
- <item>
- <layout class="QGridLayout" name="gridLayout_7" >
- <item row="0" column="0" >
- <widget class="QLabel" name="textLabel1_3_2" >
- <property name="text" >
- <string><u>Type du concept :</u></string>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0" >
- <widget class="QLabel" name="textLabel3" >
- <property name="text" >
- <string>L'opérateur retourne un concept de type :</string>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="1" >
- <widget class="QLabel" name="typeConcept" >
- <property name="text" >
- <string>TypeDuConcept</string>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
+ <item row="1" column="0" >
+ <layout class="QGridLayout" name="gridLayout_8" >
+ <item row="0" column="0" >
+ <widget class="QListWidget" name="listBoxASSD" />
</item>
- <item>
+ <item row="1" column="0" >
<spacer name="verticalSpacer" >
<property name="orientation" >
<enum>Qt::Vertical</enum>
<property name="sizeHint" stdset="0" >
<size>
<width>20</width>
- <height>338</height>
+ <height>168</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
+ <item row="2" column="0" >
+ <layout class="QGridLayout" name="gridLayout_7" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="Label2" >
+ <property name="text" >
+ <string><u>Type du concept :</u></string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="Label3" >
+ <property name="text" >
+ <string>L'opérateur retourne un concept de type :</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QLabel" name="typeConcept" >
+ <property name="text" >
+ <string>TypeDuConcept</string>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
</widget>
</widget>
</item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="Commentaire" >
+ <property name="maximumSize" >
+ <size>
+ <width>793</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="frameShape" >
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow" >
+ <enum>QFrame::Plain</enum>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="wordWrap" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <layout class="QHBoxLayout" name="horizontalLayout" >
+ <item>
+ <spacer name="horizontalSpacer" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>263</width>
+ <height>27</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="bOk" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>160</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="toolTip" >
+ <string>validation de la saisie</string>
+ </property>
+ <property name="text" >
+ <string>&Valider</string>
+ </property>
+ <property name="shortcut" >
+ <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>true</bool>
+ </property>
+ <property name="default" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>254</width>
+ <height>27</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11" />
<property name="shortcut" >
<string>Shift+A, Alt+A, Alt+A, Alt+A</string>
</property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- <property name="default" >
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
<item row="0" column="0" colspan="3" >
<widget class="QTabWidget" name="TWChoix" >
<property name="currentIndex" >
- <number>0</number>
+ <number>2</number>
</property>
<widget class="QWidget" name="MotClef" >
<attribute name="title" >
<property name="geometry" >
<rect>
<x>30</x>
- <y>40</y>
+ <y>10</y>
<width>440</width>
<height>41</height>
</rect>
<widget class="QLineEdit" name="LENomFichier" >
<property name="geometry" >
<rect>
- <x>18</x>
- <y>117</y>
+ <x>20</x>
+ <y>50</y>
<width>450</width>
<height>40</height>
</rect>
<widget class="QPushButton" name="BBrowse" >
<property name="geometry" >
<rect>
- <x>280</x>
- <y>240</y>
+ <x>20</x>
+ <y>110</y>
<width>161</width>
<height>41</height>
</rect>
<widget class="QPushButton" name="BChangeFile" >
<property name="geometry" >
<rect>
- <x>280</x>
- <y>290</y>
+ <x>20</x>
+ <y>160</y>
<width>161</width>
<height>41</height>
</rect>
</widget>
</item>
</layout>
+ <zorder>bOk</zorder>
+ <zorder>Commentaire</zorder>
+ <zorder>TWChoix</zorder>
</widget>
<layoutdefault spacing="6" margin="11" />
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
-<ui version="4.0" stdsetdef="1" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
- <class>DLisParam</class>
- <widget class="QWidget" name="DLisParam" >
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>413</width>
- <height>394</height>
- </rect>
- </property>
- <property name="windowTitle" >
- <string>Sélection de paramétres</string>
- </property>
- <layout class="QGridLayout" >
- <item row="0" column="0" >
- <widget class="QListWidget" name="LBParam" />
- </item>
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DLisParam</class>
+ <widget class="QWidget" name="DLisParam">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>420</width>
+ <height>425</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Sélection de paramétres</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QListWidget" name="LBParam"/>
+ </item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>128</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="BOk">
+ <property name="text">
+ <string>Valider</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>168</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
- </widget>
- <layoutdefault spacing="6" margin="11" />
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
</ui>
--- /dev/null
+<ui version="4.0" >
+ <class>desMatrice</class>
+ <widget class="QDialog" name="desMatrice" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Dialog</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2" >
+ <item row="0" column="0" >
+ <widget class="QTableWidget" name="TBMatrice" />
+ </item>
+ <item row="1" column="0" >
+ <widget class="QSplitter" name="splitter" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <widget class="QWidget" name="layoutWidget" >
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <spacer name="horizontalSpacer" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>140</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QPushButton" name="BOk" >
+ <property name="text" >
+ <string>Valider</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <spacer name="horizontalSpacer_2" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>138</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+<ui version="4.0" >
+ <class>LabelPixmap</class>
+ <widget class="QDialog" name="LabelPixmap" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>PDF de la loi</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="labelPix" >
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
<string>Saisir Valeur</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2" >
- <item row="0" column="0" >
+ <item rowspan="7" row="0" column="0" >
<layout class="QVBoxLayout" name="verticalLayout_2" >
<item>
<widget class="QLabel" name="textLabel1" >
</layout>
</item>
<item row="0" column="1" >
- <layout class="QVBoxLayout" name="verticalLayout_5" >
- <item>
- <layout class="QGridLayout" name="gridLayout" >
- <item row="0" column="0" colspan="3" >
- <layout class="QHBoxLayout" name="horizontalLayout" >
- <item>
- <widget class="QLabel" name="textLabel1_2" >
- <property name="minimumSize" >
- <size>
- <width>61</width>
- <height>21</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>61</width>
- <height>21</height>
- </size>
- </property>
- <property name="text" >
- <string><font size="+1">Valeur</font></string>
- </property>
- <property name="wordWrap" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="spacer6" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>168</width>
- <height>18</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="1" column="0" >
- <widget class="QToolButton" name="BAjout1Val" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" colspan="3" >
+ <layout class="QHBoxLayout" name="horizontalLayout" >
+ <item>
+ <widget class="QLabel" name="textLabel1_2" >
<property name="minimumSize" >
<size>
- <width>40</width>
- <height>30</height>
+ <width>61</width>
+ <height>21</height>
</size>
</property>
- <property name="toolTip" >
- <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+ <property name="maximumSize" >
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
</property>
<property name="text" >
- <string/>
+ <string><font size="+1">Valeur</font></string>
</property>
- <property name="icon" >
- <iconset>
- <normaloff>../Editeur/icons/arrow_left.png</normaloff>../Editeur/icons/arrow_left.png</iconset>
+ <property name="wordWrap" >
+ <bool>false</bool>
</property>
</widget>
</item>
- <item row="1" column="1" colspan="2" >
- <widget class="QLineEdit" name="LEValeur" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item>
+ <spacer name="spacer6" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="minimumSize" >
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
<size>
- <width>220</width>
- <height>30</height>
+ <width>168</width>
+ <height>18</height>
</size>
</property>
- </widget>
+ </spacer>
</item>
- <item row="2" column="0" >
- <widget class="QToolButton" name="BSup1Val" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ </layout>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QToolButton" name="BAjout1Val" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>40</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="toolTip" >
+ <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="icon" >
+ <iconset>
+ <normaloff>../Editeur/icons/arrow_left.png</normaloff>../Editeur/icons/arrow_left.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" colspan="2" >
+ <widget class="QLineEdit" name="LEValeur" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>220</width>
+ <height>30</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QToolButton" name="BSup1Val" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>40</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="toolTip" >
+ <string>enleve l occurence selectionnee</string>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="icon" >
+ <iconset>
+ <normaloff>../Editeur/icons/arrow_right.png</normaloff>../Editeur/icons/arrow_right.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" >
+ <widget class="QToolButton" name="BSalome" >
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>40</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="toolTip" >
+ <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="icon" >
+ <iconset>
+ <normaloff>image240.png</normaloff>image240.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2" >
+ <widget class="QPushButton" name="BView2D" >
+ <property name="minimumSize" >
+ <size>
+ <width>120</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Visualiser</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1" >
+ <spacer name="verticalSpacer" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>20</width>
+ <height>158</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout_2" >
+ <item>
+ <spacer name="spacer5" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>150</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout" >
+ <item>
+ <widget class="QPushButton" name="bParam" >
<property name="minimumSize" >
<size>
- <width>40</width>
+ <width>100</width>
<height>30</height>
</size>
</property>
- <property name="toolTip" >
- <string>enleve l occurence selectionnee</string>
- </property>
- <property name="text" >
- <string/>
- </property>
- <property name="icon" >
- <iconset>
- <normaloff>../../EficasV1/Editeur/icons/arrow_right.png</normaloff>../../EficasV1/Editeur/icons/arrow_right.png</iconset>
- </property>
- </widget>
- </item>
- <item row="2" column="1" >
- <widget class="QToolButton" name="BSalome" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
+ <property name="maximumSize" >
<size>
- <width>40</width>
+ <width>100</width>
<height>30</height>
</size>
</property>
<property name="toolTip" >
- <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+ <string>suppression du mot clef</string>
</property>
<property name="text" >
- <string/>
+ <string>&Parametres</string>
+ </property>
+ <property name="shortcut" >
+ <string>Alt+P</string>
</property>
- <property name="icon" >
- <iconset>
- <normaloff>image240.png</normaloff>image240.png</iconset>
+ <property name="autoDefault" >
+ <bool>true</bool>
</property>
</widget>
</item>
- <item row="2" column="2" >
- <widget class="QPushButton" name="BView2D" >
+ <item>
+ <widget class="QPushButton" name="bImport" >
<property name="minimumSize" >
<size>
- <width>120</width>
+ <width>100</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>100</width>
<height>30</height>
</size>
</property>
+ <property name="toolTip" >
+ <string>suppression du mot clef</string>
+ </property>
<property name="text" >
- <string>Visualiser</string>
+ <string>&Importer</string>
+ </property>
+ <property name="shortcut" >
+ <string>Alt+I</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
+ </layout>
+ </item>
+ <item row="3" column="1" >
+ <spacer name="spacer3_3" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>289</width>
+ <height>100</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="4" column="1" >
+ <widget class="QLabel" name="Commentaire" >
+ <property name="minimumSize" >
+ <size>
+ <width>298</width>
+ <height>61</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" >
+ <spacer name="spacer3_2" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>265</width>
+ <height>48</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="6" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout_3" >
<item>
- <spacer name="verticalSpacer" >
+ <spacer name="horizontalSpacer_2" >
<property name="orientation" >
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
- <width>20</width>
- <height>158</height>
+ <width>118</width>
+ <height>27</height>
</size>
</property>
</spacer>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_4" >
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2" >
- <item>
- <spacer name="spacer5" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>150</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout" >
- <item>
- <widget class="QPushButton" name="bParam" >
- <property name="minimumSize" >
- <size>
- <width>100</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>100</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip" >
- <string>suppression du mot clef</string>
- </property>
- <property name="text" >
- <string>&Parametres</string>
- </property>
- <property name="shortcut" >
- <string>Alt+P</string>
- </property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="bImport" >
- <property name="minimumSize" >
- <size>
- <width>100</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>100</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip" >
- <string>suppression du mot clef</string>
- </property>
- <property name="text" >
- <string>&Importer</string>
- </property>
- <property name="shortcut" >
- <string>Alt+I</string>
- </property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_3" >
- <item>
- <spacer name="spacer3_3" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>265</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="Commentaire" >
- <property name="minimumSize" >
- <size>
- <width>251</width>
- <height>21</height>
- </size>
- </property>
- <property name="text" >
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="spacer3_2" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>265</width>
- <height>48</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3" >
- <item>
- <spacer name="horizontalSpacer_2" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>118</width>
- <height>27</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="bOk" >
- <property name="minimumSize" >
- <size>
- <width>160</width>
- <height>30</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>160</width>
- <height>30</height>
- </size>
- </property>
- <property name="toolTip" >
- <string>validation de la saisie</string>
- </property>
- <property name="text" >
- <string>&Valider</string>
- </property>
- <property name="shortcut" >
- <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
- </property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- <property name="default" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
+ <widget class="QPushButton" name="bOk" >
+ <property name="minimumSize" >
+ <size>
+ <width>160</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>160</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="toolTip" >
+ <string>validation de la saisie</string>
+ </property>
+ <property name="text" >
+ <string>&Valider</string>
+ </property>
+ <property name="shortcut" >
+ <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+ </property>
+ <property name="autoDefault" >
+ <bool>true</bool>
+ </property>
+ <property name="default" >
+ <bool>false</bool>
+ </property>
+ </widget>
</item>
</layout>
</item>
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>DUnBase</class>
- <widget class="QWidget" name="DUnBase" >
- <property name="geometry" >
+ <widget class="QWidget" name="DUnBase">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<height>480</height>
</rect>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>350</width>
<height>0</height>
</size>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>DUnIn</string>
</property>
- <layout class="QGridLayout" >
- <item row="0" column="0" >
- <widget class="QTabWidget" name="tabuniqueinto" >
- <widget class="QWidget" name="Widget8" >
- <attribute name="title" >
+ <layout class="QGridLayout">
+ <item row="0" column="0">
+ <widget class="QTabWidget" name="tabuniqueinto">
+ <widget class="QWidget" name="Widget8">
+ <attribute name="title">
<string>Saisir Valeur</string>
</attribute>
- <layout class="QGridLayout" name="gridLayout" >
- <item row="0" column="0" colspan="4" >
- <layout class="QHBoxLayout" name="horizontalLayout" >
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QLabel" name="textLabel2" >
- <property name="text" >
- <string><b><u><p align="center">Valeur: </p></u></b></string>
+ <widget class="QLabel" name="textLabel2">
+ <property name="text">
+ <string><b><u><p align="center">Valeur: </p></u></b></string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item>
- <widget class="QLineEdit" name="lineEditVal" >
- <property name="minimumSize" >
+ <widget class="QLineEdit" name="lineEditVal">
+ <property name="minimumSize">
<size>
<width>290</width>
<height>50</height>
</item>
</layout>
</item>
- <item row="1" column="2" >
- <spacer name="verticalSpacer" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>137</width>
- <height>43</height>
- </size>
- </property>
- </spacer>
- </item>
- <item rowspan="2" row="1" column="3" >
- <widget class="QPushButton" name="bParametres" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
- <size>
- <width>140</width>
- <height>45</height>
- </size>
- </property>
- <property name="text" >
- <string>Parametres</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0" colspan="3" >
- <spacer name="horizontalSpacer_3" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>293</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="0" >
- <widget class="QPushButton" name="BSalome" >
- <property name="minimumSize" >
- <size>
- <width>142</width>
- <height>40</height>
- </size>
- </property>
- <property name="text" >
- <string/>
- </property>
- <property name="icon" >
- <iconset>
- <normaloff>image240.png</normaloff>image240.png</iconset>
- </property>
- </widget>
- </item>
- <item row="3" column="1" >
- <spacer name="horizontalSpacer_5" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>138</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item rowspan="2" row="3" column="2" >
- <spacer name="spacer4" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>137</width>
- <height>77</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="3" >
- <widget class="QPushButton" name="BView2D" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
- <size>
- <width>140</width>
- <height>40</height>
- </size>
- </property>
- <property name="text" >
- <string>Visualiser</string>
- </property>
- </widget>
- </item>
- <item rowspan="2" row="4" column="3" >
- <widget class="QPushButton" name="BFichier" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
- <size>
- <width>140</width>
- <height>40</height>
- </size>
- </property>
- <property name="text" >
- <string>Fichier</string>
- </property>
- <property name="icon" >
- <iconset>
- <normaloff>image240.png</normaloff>image240.png</iconset>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="3" >
- <spacer name="horizontalSpacer_4" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0" >
- <size>
- <width>293</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="6" column="0" colspan="4" >
- <layout class="QVBoxLayout" name="verticalLayout" >
- <item>
- <spacer name="verticalSpacer_2" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
+ <item row="1" column="0">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>293</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="BSalome">
+ <property name="minimumSize">
<size>
- <width>20</width>
+ <width>142</width>
<height>40</height>
</size>
</property>
+ <property name="text">
+ <string>Selectionner</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>image240.png</normaloff>image240.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="bParametres">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>45</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Parametres</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>138</width>
+ <height>20</height>
+ </size>
+ </property>
</spacer>
</item>
- <item>
- <widget class="QLabel" name="Commentaire" >
- <property name="text" >
- <string>TextLabel</string>
+ <item row="1" column="1">
+ <widget class="QPushButton" name="BView2D">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Visualiser</string>
</property>
</widget>
</item>
- <item>
- <spacer name="verticalSpacer_3" >
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="BFichier">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="minimumSize">
<size>
- <width>20</width>
+ <width>140</width>
<height>40</height>
</size>
</property>
- </spacer>
+ <property name="text">
+ <string>Fichier</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>image240.png</normaloff>image240.png</iconset>
+ </property>
+ </widget>
</item>
</layout>
</item>
- <item row="7" column="0" colspan="4" >
- <layout class="QHBoxLayout" name="horizontalLayout_2" >
+ <item row="2" column="0">
+ <widget class="QLabel" name="Commentaire">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
- <spacer name="horizontalSpacer" >
- <property name="orientation" >
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</spacer>
</item>
<item>
- <widget class="QPushButton" name="bOk" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+ <widget class="QPushButton" name="bOk">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>140</width>
<height>40</height>
</size>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>validation de la saisie</string>
</property>
- <property name="text" >
+ <property name="text">
<string>&Valider</string>
</property>
- <property name="shortcut" >
+ <property name="shortcut">
<string>Shift+A, Alt+A, Alt+A, Alt+A</string>
</property>
- <property name="autoDefault" >
- <bool>true</bool>
- </property>
- <property name="default" >
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
- <spacer name="horizontalSpacer_2" >
- <property name="orientation" >
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</item>
</layout>
</widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>lineEditVal</tabstop>
- <tabstop>bOk</tabstop>
- <tabstop>BSalome</tabstop>
- <tabstop>BView2D</tabstop>
</tabstops>
<resources/>
<connections/>
desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \
desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \
desUniqueSDCO.py desVisu.py aideQT.py OptionsEditeur.py OptionsPdf.py myMain.py \
- desViewTexte.py
+ desViewTexte.py desPixmap.py desMatrice.py OptionsOT.py OptionsCuve.py desChoixMap.py \
+ OptionsMAP.py
%.py:%.ui
${PYUIC} -x -o $@ $<
all : $(PY_FILES)
+clean :
+ -rm -rf $(PY_FILES) *.pyc
+
<x>0</x>
<y>0</y>
<width>1383</width>
- <height>29</height>
+ <height>32</height>
</rect>
</property>
<widget class="QMenu" name="menuFichier" >
<addaction name="actionCouper" />
<addaction name="actionCopier" />
<addaction name="actionColler" />
+ <addaction name="actionSupprimer" />
</widget>
<widget class="QMenu" name="menuJdC" >
<property name="title" >
<property name="title" >
<string>&Aide</string>
</property>
+ <addaction name="actionEficas" />
+ <addaction name="actionVersion" />
</widget>
<widget class="QMenu" name="menuOptions" >
<property name="title" >
<addaction name="actionParametres_Eficas" />
<addaction name="actionLecteur_Pdf" />
</widget>
- <widget class="QMenu" name="menuTraduction" >
- <property name="title" >
- <string>Traduction</string>
- </property>
- <addaction name="actionTraduitV7V8" />
- <addaction name="actionTraduitV8V9" />
- </widget>
<widget class="QMenu" name="menuPatrons" >
<property name="title" >
<string>Patrons</string>
<addaction name="menuJdC" />
<addaction name="menu_Aide" />
<addaction name="menuOptions" />
- <addaction name="menuTraduction" />
<addaction name="menuPatrons" />
</widget>
<widget class="QStatusBar" name="statusbar" />
<property name="shortcut" >
<string>Ctrl+X</string>
</property>
+ <property name="shortcutContext" >
+ <enum>Qt::ApplicationShortcut</enum>
+ </property>
</action>
<action name="actionCopier" >
<property name="icon" >
<property name="shortcut" >
<string>Ctrl+C</string>
</property>
+ <property name="shortcutContext" >
+ <enum>Qt::ApplicationShortcut</enum>
+ </property>
</action>
<action name="actionColler" >
<property name="icon" >
<property name="shortcut" >
<string>Ctrl+V</string>
</property>
+ <property name="shortcutContext" >
+ <enum>Qt::ApplicationShortcut</enum>
+ </property>
</action>
<action name="actionQuitter" >
<property name="text" >
<string>Lecteur Pdf</string>
</property>
</action>
- <action name="actionTraduitV7V8" >
+ <action name="actionEficas" >
+ <property name="text" >
+ <string>Eficas</string>
+ </property>
+ </action>
+ <action name="actionVersion" >
<property name="text" >
- <string>TraduitV7V8</string>
+ <string>Version</string>
</property>
</action>
- <action name="actionTraduitV8V9" >
+ <action name="actionSupprimer" >
<property name="text" >
- <string>TraduitV8V9</string>
+ <string>Supprimer</string>
</property>
</action>
</widget>
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING PATTERN *.py
+ PATTERN CVS EXCLUDE
+ )
+
+
+### Local Variables:
+### mode: cmake
+### End:
-#@ MODIF V_AU_MOINS_UN Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_AU_MOINS_UN Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_AU_PLUS_UN Validation DATE 28/01/2005 AUTEUR VABHHTS J.PELLET
+#@ MODIF V_AU_PLUS_UN Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_A_CLASSER Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_A_CLASSER Validation DATE 13/10/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
# ======================================================================
-
-import types
-
class A_CLASSER:
"""
La règle A_CLASSER vérifie que ...
print "Erreur à la création de la règle A_CLASSER(",args,")"
return
self.args=args
- if type(args[0]) == types.TupleType:
+ if type(args[0]) == tuple:
self.args0 = args[0]
- elif type(args[0]) == types.StringType:
+ elif type(args[0]) == str:
self.args0 = (args[0],)
else :
print "Le premier argument de :",args," doit etre un tuple ou une string"
- if type(args[1]) == types.TupleType:
+ if type(args[1]) == tuple:
self.args1 = args[1]
- elif type(args[1]) == types.StringType:
+ elif type(args[1]) == str:
self.args1 = (args[1],)
else :
print "Le deuxième argument de :",args," doit etre un tuple ou une string"
# création de la liste des mcs
liste = []
- for arg0 in self.args0:
- liste.append(arg0)
- for arg1 in self.args1:
- liste.append(arg1)
+ liste.extend(self.args0)
+ liste.extend(self.args1)
self.mcs = liste
self.init_couples_permis()
couple.append(nom)
if len(couple) == 2 :
l_couples.append(tuple(couple))
- couple=[]
- if nom not in self.args1:
- couple.append(nom)
+ couple = [nom,]
if len(couple) > 0 :
l_couples.append(tuple(couple))
# l_couples peut etre vide si l'on n'a pas réussi à trouver au moins un
-#@ MODIF V_ENSEMBLE Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_ENSEMBLE Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_ETAPE Validation DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF V_ETAPE Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_EXCLUS Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_EXCLUS Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_JDC Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_JDC Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MACRO_ETAPE Validation DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF V_MACRO_ETAPE Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MCBLOC Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_MCBLOC Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MCCOMPO Validation DATE 22/05/2006 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_MCCOMPO Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MCFACT Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_MCFACT Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MCLIST Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_MCLIST Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_MCSIMP Validation DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF V_MCSIMP Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
intoProto.adapt(val)
cardProto.adapt(lval)
if self.definition.validators:
+ if hasattr(self.definition.validators,'set_MCSimp'):
+ self.definition.validators.set_MCSimp(self)
self.definition.validators.convert(lval)
except ValError,e:
valid=0
-#@ MODIF V_PRESENT_ABSENT Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_PRESENT_ABSENT Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_PRESENT_PRESENT Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_PRESENT_PRESENT Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_PROC_ETAPE Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
+#@ MODIF V_PROC_ETAPE Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-#@ MODIF V_UN_PARMI Validation DATE 16/09/2008 AUTEUR PELLET J.PELLET
+#@ MODIF V_UN_PARMI Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+install ( FILES __init__.py parseur_python.py convert_python.py
+ convert_file_from_template.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+ install ( FILES convert_openturns_study.py convert_openturns_wrapper.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+ install ( FILES convert_asterv5.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ )
+ install ( DIRECTORY Parserv5
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ FILES_MATCHING PATTERN *.py PATTERN *.tag PATTERN README
+ PATTERN CVS EXCLUDE
+ )
+endif (WITH_ASTER)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+ install ( FILES convert_map.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ )
+endif (WITH_MAP)
+
+# Installation des fichiers : SEP
+if (WITH_SEP)
+ install ( FILES convert_SEP.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+ )
+endif (WITH_SEP)
+
+### Local Variables:
+### mode: cmake
+### End:
--- /dev/null
+# 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.
+#
+#
+# ======================================================================
+
+from convert_python import PythonParser
+
+def entryPoint():
+ """
+ Return a dictionary containing the description needed to load the plugin
+ """
+ return {'name' : 'file_from_template',
+ 'factory' : PythonParser}
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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 parseur_python
+from convert_python import *
+
+def entryPoint():
+ """
+ Retourne les informations nécessaires pour le chargeur de plugins
+ Ces informations sont retournées dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'MAP',
+ # La factory pour créer une instance du plugin
+ 'factory' : PythonParser,
+ }
+
+
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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 parseur_python
+from convert_python import *
+
+def entryPoint():
+ """
+ Retourne les informations nécessaires pour le chargeur de plugins
+ Ces informations sont retournées dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'perfect',
+ # La factory pour créer une instance du plugin
+ 'factory' : PythonParser,
+ }
+
+
dict_reel_concept=construit_genea(epure2,self.appli.liste_simp_reel)
else:
dict_reel_concept={}
+ if nomConcept == "sansnom" :
+ nomConcept = ""
if nomConcept !=None :
if len(dict_reel_concept) != 0:
self.appli.dict_reels[nomConcept]=dict_reel_concept
"""
self.appli=appli
try:
+ #if 1:
if not self.l_objets : self.analyse()
txt=''
for obj in self.l_objets:
txt = txt+str(obj)
+ #else :
except ParserException:
#Impossible de convertir le texte, on le retourne tel que
txt=self.texte
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+
+install ( FILES __init__.py generator_python.py Formatage.py generator_aplat.py
+ generator_file_from_template.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+ )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+ install ( FILES generator_openturns.py generator_openturns_study.py generator_openturns_wrapper.py
+ OpenturnsBase.py OpenturnsSTD.py OpenturnsXML.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+ )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+ install ( FILES generator_asterv5.py generator_GroupMA.py generator_vers3DSalome.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+ )
+endif (WITH_ASTER)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+ install ( FILES generator_map.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+ )
+endif (WITH_MAP)
+
+
+# Installation des fichiers : SEP
+if (WITH_SEP)
+ install ( FILES generator_SEP.py tube.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+ )
+endif (WITH_SEP)
+
+
+### Local Variables:
+### mode: cmake
+### End:
elif ',' in valeur:
# il s'agit d'une liste de tuple
# c est trop complique on ne splitte pas
- if valeur[0:2]=='((' :
+ if valeur[0:2]=='((' or valeur[0:2]=='[(':
s=s+valeur
return s
# il s'agit d'une liste
#---------------------------------------------------------#
self.ListeVariables = ListeVariables
self.ListeVariablesIn = []
+ self.ListeVariablesOut = []
self.DictLois = DictLois
self.DictVariables = DictVariables
self.DictMCVal = DictMCVal
self.DictTypeVar = {}
self.nbVarIn = 0
+ self.nbVarOut = 0
self.creeInfoVar()
self.appli = appli
#
#--------------------------#
try :
gener = self.module.__dict__["MonSTDGenerateur"]
- monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+ monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois )
except :
from OpenturnsSTD import STDGenerateur
- monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+ monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois )
return monSTDGenerateur
def getXMLGenerateur(self) :
if DictVariable["Type"] == "in" :
self.nbVarIn = self.nbVarIn + 1
self.ListeVariablesIn.append( DictVariable )
+ print "OpenturnsBase.py: new input variable = ", DictVariable
+ else:
+ self.nbVarOut = self.nbVarOut + 1
+ self.ListeVariablesOut.append( DictVariable )
+ print "OpenturnsBase.py: new output variable = ", DictVariable
liste.append( DictVariable )
num = num + 1
self.ListeVariables = liste
# Chargement du module systeme
import sys
-sys.path.append( '%s' )
+sys.path[:0]=['%s']
# Chargement du module math
import math
# Chargement du module Open TURNS
from openturns import *
-from openturns.viewer import ViewImage,StopViewer,WaitForViewer
results = {}
"""
+viewerSTD = """
+from openturns.viewer import ViewImage,StopViewer,WaitForViewer
+"""
+
footerSTD = """
# Flush des messages en attente
'''
Generation du fichier python
'''
- def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) :
+ def __init__ (self, appli, DictMCVal, ListeVariablesIn, ListeVariablesOut, DictLois ) :
self.DictMCVal = DictMCVal
- self.ListeVariables = ListeVariables
+ self.ListeVariablesIn = ListeVariablesIn
+ self.ListeVariablesOut = ListeVariablesOut
self.DictLois = DictLois
#print "DictMCVal=", DictMCVal
- #print "ListeVariables=", ListeVariables
+ print "ListeVariablesIn=", ListeVariablesIn
+ print "ListeVariablesOut=", ListeVariablesOut
#print "DictLois=", DictLois
self.texteSTD = defaultSTD
self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path
"Threshold Exceedence" :
( "ThresholdExceedence",
{ "Simulation" : "Simulation",
- "Analytical" : "Analytical",
+ "FORM_SORM" : "Analytical",
"MonteCarlo" : "MonteCarlo",
"LHS" : "LHS",
"ImportanceSampling" : "ImportanceSampling",
"marginal" : "marginal",
"collection" : "collection",
"copula" : "copula",
+ "correlation" : "correlation",
+ "R" : "R",
+ "vars" : "vars",
+ "description" : "description",
"inputRandomVector" : "inputRandomVector",
"outputRandomVector" : "outputRandomVector",
"myQuadraticCumul" : "myQuadraticCumul",
"SRRCcoefficient" : 'results["SRRCcoefficient"]',
"kernel" : "kernel",
"kernelSmoothedDist" : "kernelSmoothedDist",
- "kernelSmoothedPDF" : "kernelSmoothedPDF",
+ "kernelSmoothedPDFDrawing" : "kernelSmoothedPDFDrawing",
+ "kernelSmoothedGraph" : "kernelSmoothedGraph",
+ "meanVector" : "meanVector",
+ "importanceDensity" : "importanceDensity",
"myEvent" : "myEvent",
"myAlgo" : "myAlgo",
"myResult" : "myResult",
"length" : "length",
"coefficientOfVariation" : 'results["coefficientOfVariation"]',
"convergenceGraph" : "convergenceGraph",
- "iterations" : 'results["iterations"]',
+ "convergenceDrawing" : "convergenceDrawing",
+ "simulationNumbers" : 'results["simulationNumbers"]',
"myOptimizer" : "myOptimizer",
"specificParameters" : "specificParameters",
"startingPoint" : "startingPoint",
"eventProbabilitySensitivity" : 'results["eventProbabilitySensitivity"]',
"hasoferReliabilityIndexSensitivity" : 'results["hasoferReliabilityIndexSensitivity"]',
"eventProbabilitySensitivityGraph" : "eventProbabilitySensitivityGraph",
+ "eventProbabilitySensitivityDrawing" : "eventProbabilitySensitivityDrawing",
"hasoferReliabilityIndexSensitivityGraph" : "hasoferReliabilityIndexSensitivityGraph",
+ "hasoferReliabilityIndexSensitivityDrawing" : "hasoferReliabilityIndexSensitivityDrawing",
"modelEvaluationCalls" : 'results["modelEvaluationCalls"]',
"modelGradientCalls" : 'results["modelGradientCalls"]',
"modelHessianCalls" : 'results["modelHessianCalls"]',
Imprime l entete commun a tous les fichiers
'''
txt = headerSTD % self.OpenTURNS_path
+ txt += viewerSTD
txt += "# Definit le niveau d'affichage de la log\n"
txt += "%s = Log.NONE\n" % self.variable["flags"]
for flag in self.logFlags.keys():
Produit le fichier study correspondant a une analyse Min/Max
'''
txt = self.Header()
- txt += "# Etude 'Min/Max'\n"
-
txt += self.Model()
Methode = None
if ( Traitement is not None ):
txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
- txt += self.MinMaxComputation()
txt += self.MinMaxResult()
txt += self.Footer()
txt = "# Charge le modele physique\n"
txt = "%s = WrapperFile( '%s' )\n" % (self.variable["wrapper"], name)
+ txt += "%s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"])
+ txt += "# Ces lignes sont utiles pour le fonctionnement du script sous Salome\n"
txt += "if globals().has_key('%s'):\n" % self.variable["framework"]
- txt += " %s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"])
txt += " %s = %s.getFrameworkData()\n" % (self.variable["frameworkdata"], self.variable["wrapperdata"])
txt += " %s.studyid_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studyid"])
txt += " %s.studycase_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studycase"])
txt += " %s.componentname_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["componentname"])
txt += " %s.setFrameworkData( %s )\n" % (self.variable["wrapperdata"], self.variable["frameworkdata"])
txt += " %s.setWrapperData( %s )\n" % (self.variable["wrapper"], self.variable["wrapperdata"])
+ txt += "# Fin des lignes pour Salome\n"
txt += "%s = NumericalMathFunction( %s )\n" % (self.variable["model"], self.variable["wrapper"],)
txt += "%s = %s.getInputNumericalPointDimension()\n" % (self.variable["n"], self.variable["model"])
txt += self.TranslationVector()
txt += "%s = %s\n" % (self.variable["inputSample"], self.variable["myExperimentPlane"])
txt += "\n"
+ txt += "# Etude 'Min/Max'\n"
+ txt += "# Calcul\n"
+ txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
+ txt += "\n"
return txt
def MinMaxRandomSampling (self):
Etude par echantillonage aleatoire
'''
size = 0
- if ( self.DictMCVal.has_key( 'PointsNumber' ) ):
- size = self.DictMCVal[ 'PointsNumber' ]
+ if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+ size = self.DictMCVal[ 'SimulationsNumber' ]
txt = "# Etude par echantillonage aleatoire\n"
txt += self.InputDistribution()
txt += self.InputRandomVector()
- txt += "%s = %d\n" % (self.variable["inSize"], size)
- txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["inputSample"], self.variable["inputRandomVector"], self.variable["inSize"])
txt += "\n"
+ txt += "# Etude 'Min/Max'\n"
+ txt += "# Calcul\n"
+ txt += "%s = %d\n" % (self.variable["inSize"], size)
+ txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"])
+ txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["outputSample"], self.variable["outputRandomVector"], self.variable["inSize"])
return txt
def InputDistribution (self):
Cree la loi jointe des variables d entree
'''
txt = "# Definit la loi jointe des variables d'entree\n"
- txt += "%s = DistributionCollection( %d )\n" % (self.variable["collection"], len( self.ListeVariables ))
+ txt += "%s = DistributionCollection( %s )\n" % (self.variable["collection"], self.variable["n"])
+ txt += "%s = Description( %s )\n" % (self.variable["description"], self.variable["n"])
txt += "\n"
dictVariables = {}
- for variable in self.ListeVariables:
+ for variable in self.ListeVariablesIn:
nomVar = variable['ModelVariable'].get_name()
dictVariables[ nomVar ] = variable['Distribution']
if loi.has_key( 'Kind' ):
marginale = "%s_%d" % (self.variable["marginal"], i)
txt += "# Definit la loi marginale de la composante %d\n" % i
- txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi, i, self.variable["collection"]) ))
+ txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) ))
+ txt += "%s.setName( '%s' )\n" % (marginale, conceptloi.get_name())
+ txt += "%s[ %d ] = '%s'\n" % (self.variable["description"], i, variable)
txt += "%s[ %d ] = Distribution( %s )\n" % (self.variable["collection"], i, marginale)
txt += "\n"
i += 1
- txt += self.Copula( len( self.ListeVariables ) )
+ txt += self.Copula()
txt += "# Definit la loi jointe\n"
txt += "%s = ComposedDistribution( %s, Copula( %s ) )\n" % (self.variable["distribution"], self.variable["collection"], self.variable["copula"])
+ txt += "%s.setDescription( %s )\n" % (self.variable["distribution"], self.variable["description"])
txt += "\n"
return txt
- def Copula (self, dimension):
+ def Copula (self):
'''
Cree la copule de la loi jointe
'''
txt = "# Definit la copule de la loi jointe\n"
- txt += "%s = IndependentCopula( %d )\n" % (self.variable["copula"], dimension)
+
+ if ( not self.DictMCVal.has_key( 'Copula' ) ):
+ self.DictMCVal[ 'Copula' ] = 'Independent'
+
+ if ( self.DictMCVal[ 'Copula' ] in ( 'Independent', ) ):
+ txt += "%s = IndependentCopula( %s )\n" % (self.variable["copula"], self.variable["n"])
+ elif ( self.DictMCVal[ 'Copula' ] in ( 'Normal', ) ):
+ varList = self.DictMCVal[ 'CorrelationMatrix' ][0]
+ dimension = len(varList)
+ txt += "%s = {}\n" % self.variable["correlation"]
+ for i in range( dimension ):
+ txt += "%s['%s'] = {}\n" % (self.variable["correlation"], varList[i])
+ for j in range ( dimension ):
+ txt += "%s['%s']['%s'] = %g\n" % (self.variable["correlation"], varList[i], varList[j], self.DictMCVal[ 'CorrelationMatrix' ][i+1][j])
+ txt += "%s = getCorrelationMatrixFromMap( %s.getVariableList(), %s )\n" % (self.variable["R"], self.variable["wrapperdata"], self.variable["correlation"])
+ txt += "%s = NormalCopula( %s )\n" % (self.variable["copula"], self.variable["R"])
+
txt += "\n"
return txt
'''
Cree le vector aleatoire de sortie
'''
+ nomVar = "output"
+ for variable in self.ListeVariablesOut:
+ nomVar = variable['ModelVariable'].get_name()
+
txt = "# Definit le vecteur aleatoire de sortie\n"
txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"])
+ txt += "%s.setName( '%s' )\n" % (self.variable["outputRandomVector"], nomVar)
txt += "\n"
return txt
txt += "\n"
return txt
- def MinMaxComputation (self):
- '''
- Realise le calcul deterministe
- '''
- txt = "# Calcul\n"
- txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
- txt += "\n"
- return txt
-
def MinMaxResult (self):
'''
Produit les resultats de l etude
'''
txt = "# Resultats\n"
txt += "%s = %s.getMin()\n" % (self.variable["minValue"], self.variable["outputSample"])
- txt += "print '%s = ', %s\n" % (self.variable["minValue"], self.variable["minValue"])
+ txt += "print '%s = ', %s\n" % ("minValue", self.variable["minValue"])
txt += "\n"
txt += "%s = %s.getMax()\n" % (self.variable["maxValue"], self.variable["outputSample"])
- txt += "print '%s = ', %s\n" % (self.variable["maxValue"], self.variable["maxValue"])
+ txt += "print '%s = ', %s\n" % ("maxValue", self.variable["maxValue"])
txt += "\n"
return txt
Produit le fichier study correspondant a une analyse d incertitude en valeur centrale
'''
txt = self.Header()
- txt += "# Etude 'Central Uncertainty'\n"
-
txt += self.Model()
txt += self.InputDistribution()
txt += self.InputRandomVector()
Traitement = subDict[ Methode ]
if ( Traitement is not None ):
+ txt += "# Etude 'Central Uncertainty'\n"
txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
txt += self.Footer()
if ( self.DictMCVal.has_key( 'MeanFirstOrder' ) ):
if ( self.DictMCVal[ 'MeanFirstOrder' ] == "yes" ):
txt += "%s = %s.getMeanFirstOrder()\n" % (self.variable["meanFirstOrder"], self.variable["myQuadraticCumul"])
- txt += "print '%s = ', %s\n" % (self.variable["meanFirstOrder"], self.variable["meanFirstOrder"])
+ txt += "print '%s = ', %s\n" % ("mean First Order", self.variable["meanFirstOrder"])
txt += "\n"
if ( self.DictMCVal.has_key( 'MeanSecondOrder' ) ):
if ( self.DictMCVal[ 'MeanSecondOrder' ] == "yes" ):
txt += "%s = %s.getMeanSecondOrder()\n" % (self.variable["meanSecondOrder"], self.variable["myQuadraticCumul"])
- txt += "print '%s = ', %s\n" % (self.variable["meanSecondOrder"], self.variable["meanSecondOrder"])
+ txt += "print '%s = ', %s\n" % ("mean Second Order", self.variable["meanSecondOrder"])
txt += "\n"
if ( self.DictMCVal.has_key( 'StandardDeviationFirstOrder' ) ):
txt += "dim = %s.getDimension()\n" % self.variable["standardDeviationFirstOrder"]
txt += "for i in range( dim ):\n"
txt += " %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["standardDeviationFirstOrder"], self.variable["standardDeviationFirstOrder"])
- txt += "print '%s = ', %s\n" % (self.variable["standardDeviationFirstOrder"], self.variable["standardDeviationFirstOrder"])
+ txt += " print '%s = ', %s[ i, i ]\n" % ("standard Deviation First Order", self.variable["standardDeviationFirstOrder"])
txt += "\n"
- if ( self.DictMCVal.has_key( 'NumericalResults' ) ):
- if ( self.DictMCVal[ 'NumericalResults' ] == "yes" ):
- txt += "if ( %s.getDimension() == 1):\n" % self.variable["outputRandomVector"]
- txt += " %s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myQuadraticCumul"])
- txt += " print '%s = ', %s\n" % (self.variable["importanceFactors"], self.variable["importanceFactors"])
+ if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ):
+ if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ):
+ txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myQuadraticCumul"])
+ txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"]
+ txt += " print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"])
txt += "\n"
-
- if ( self.DictMCVal.has_key( 'GraphicalResults' ) ):
- if ( self.DictMCVal[ 'GraphicalResults' ] == "yes" ):
txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myQuadraticCumul"])
- txt += "Show( %s )\n" % self.variable["importanceFactorsGraph"]
- txt += "%s.draw( '%s' )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
+ txt += "#Show( %s )\n" % self.variable["importanceFactorsGraph"]
+ txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ])
+ txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
txt += "ViewImage( %s.getBitmap() )\n" % self.variable["importanceFactorsGraph"]
txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["importanceFactorsGraph"]
txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["importanceFactorsGraph"]
Etude par echantillonage aleatoire
'''
size = 0
- if ( self.DictMCVal.has_key( 'PointsNumber' ) ):
- size = self.DictMCVal[ 'PointsNumber' ]
+ if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+ size = self.DictMCVal[ 'SimulationsNumber' ]
txt = "# Echantillonnage aleatoire de la variable de sortie\n"
txt += "%s = %d\n" % (self.variable["inSize"], size)
- txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["outputSample"], self.variable["outputRandomVector"], self.variable["inSize"])
+ txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["inputSample"], self.variable["inputRandomVector"], self.variable["inSize"])
+ txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
txt += "\n"
if ( self.DictMCVal.has_key( 'EmpiricalMean' ) ):
if ( self.DictMCVal[ 'EmpiricalMean' ] == "yes" ):
txt += "%s = %s.computeMean()\n" % (self.variable["empiricalMean"], self.variable["outputSample"])
- txt += "print '%s =', %s\n" % (self.variable["empiricalMean"], self.variable["empiricalMean"])
+ txt += "print '%s =', %s[0]\n" % ("empirical Mean", self.variable["empiricalMean"])
txt += "\n"
if ( self.DictMCVal.has_key( 'EmpiricalStandardDeviation' ) ):
txt += "dim = %s.getDimension()\n" % self.variable["empiricalStandardDeviation"]
txt += "for i in range( dim ):\n"
txt += " %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["empiricalStandardDeviation"], self.variable["empiricalStandardDeviation"])
- txt += "print '%s = ', %s\n" % (self.variable["empiricalStandardDeviation"], self.variable["empiricalStandardDeviation"])
+ txt += " print '%s = ', %s[ i, i ]\n" % ("empirical Standard Deviation", self.variable["empiricalStandardDeviation"])
txt += "\n"
if ( self.DictMCVal.has_key( 'EmpiricalQuantile_Order' ) ):
ordre = self.DictMCVal[ 'EmpiricalQuantile_Order' ]
txt += "%s = %s.computeQuantile( %s )\n" % (self.variable["empiricalQuantile"], self.variable["outputSample"], ordre)
- txt += "print '%s =', %s\n" % (self.variable["empiricalQuantile"], self.variable["empiricalQuantile"])
+ txt += "print '%s ( %s ) =', %s\n" % ("empirical Quantile", ordre, self.variable["empiricalQuantile"])
txt += "\n"
- if ( self.DictMCVal.has_key( 'AnalysedCorrelations' ) ):
- if ( self.DictMCVal[ 'AnalysedCorrelations' ] == "yes" ):
- txt += "# Ou est le %s ?\n" % self.variable["inputSample"]
- txt += "#if ( ( %s.getDimension() == 1 ) and ( %s.getDimension() == 1 ) ):\n" % (self.variable["inputSample"], self.variable["outputSample"])
- txt += "# %s = CorrelationAnalysis.PCC( %s, %s )\n" % (self.variable["PCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
- txt += "# print '%s = ', %s\n" % (self.variable["PCCcoefficient"], self.variable["PCCcoefficient"])
- txt += "# %s = CorrelationAnalysis.PRCC( %s, %s )\n" % (self.variable["PRCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
- txt += "# print '%s = ', %s\n" % (self.variable["PRCCcoefficient"], self.variable["PRCCcoefficient"])
- txt += "# %s = CorrelationAnalysis.SRC( %s, %s )\n" % (self.variable["SRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
- txt += "# print '%s = ', %s\n" % (self.variable["SRCcoefficient"], self.variable["SRCcoefficient"])
- txt += "# %s = CorrelationAnalysis.SRRC( %s, %s )\n" % (self.variable["SRRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
- txt += "# print '%s = ', %s\n" % (self.variable["SRRCcoefficient"], self.variable["SRRCcoefficient"])
+ if ( self.DictMCVal.has_key( 'CorrelationAnalysis' ) ):
+ if ( self.DictMCVal[ 'CorrelationAnalysis' ] == "yes" ):
+ txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"]
+ txt += " %s = CorrelationAnalysis.PCC( %s, %s )\n" % (self.variable["PCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+ txt += " print 'PCC Coefficients:'\n"
+ txt += " for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PCCcoefficient"])
+ txt += "\n"
+ txt += " %s = CorrelationAnalysis.PRCC( %s, %s )\n" % (self.variable["PRCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+ txt += " print 'PRCC Coefficients:'\n"
+ txt += " for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PRCCcoefficient"])
+ txt += "\n"
+ txt += " %s = CorrelationAnalysis.SRC( %s, %s )\n" % (self.variable["SRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+ txt += " print 'SRC Coefficients:'\n"
+ txt += " for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRCcoefficient"])
+ txt += "\n"
+ txt += " %s = CorrelationAnalysis.SRRC( %s, %s )\n" % (self.variable["SRRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+ txt += " print 'SRRC Coefficients:'\n"
+ txt += " for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRRCcoefficient"])
txt += "\n"
if ( self.DictMCVal.has_key( 'KernelSmoothing' ) ):
txt += "# Kernel Smoohing\n"
txt += "%s = KernelSmoothing()\n" % self.variable["kernel"]
txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"]
+ txt += " %s.setName( 'Output' )\n" % self.variable["outputSample"]
txt += " %s = %s.buildImplementation( %s, 'TRUE')\n" % (self.variable["kernelSmoothedDist"], self.variable["kernel"], self.variable["outputSample"])
- txt += " %s = %s.drawPDF()\n" % (self.variable["kernelSmoothedPDF"], self.variable["kernelSmoothedDist"])
- txt += " Show( %s )\n" % self.variable["kernelSmoothedPDF"]
+ txt += " %s = %s.drawPDF()\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedDist"])
+ txt += " #Show( %s )\n" % self.variable["kernelSmoothedGraph"]
+ txt += " %s = '%s'\n" % (self.variable["kernelSmoothedPDFDrawing"], self.DictMCVal[ 'KernelSmoothingDrawingFilename' ])
+ txt += " %s.draw( %s )\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedPDFDrawing"])
+ txt += " ViewImage( %s.getBitmap() )\n" % self.variable["kernelSmoothedGraph"]
+ txt += " print 'bitmap =', %s.getBitmap()\n" % self.variable["kernelSmoothedGraph"]
+ txt += " print 'postscript =', %s.getPostscript()\n" % self.variable["kernelSmoothedGraph"]
txt += "\n"
return txt
blockSize = None
if ( self.DictMCVal.has_key( 'BlockSize' ) ):
- maxOuterSampling = self.DictMCVal[ 'BlockSize' ]
+ blockSize = self.DictMCVal[ 'BlockSize' ]
txt += "%s.setBlockSize( %s )\n" % (self.variable["myAlgo"], blockSize)
maxCoefficientOfVariation = None
if ( self.DictMCVal.has_key( 'Probability' ) ):
if ( self.DictMCVal[ 'Probability' ] == "yes" ):
txt += "%s = %s.getProbabilityEstimate()\n" % (self.variable["probability"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["probability"], self.variable["probability"])
+ txt += "print '%s =', %s\n" % ("probability", self.variable["probability"])
txt += "\n"
if ( self.DictMCVal.has_key( 'StandardDeviation' ) ):
if ( self.DictMCVal[ 'StandardDeviation' ] == "yes" ):
txt += "%s = math.sqrt( %s.getProbabilityEstimate() )\n" % (self.variable["standardDeviation"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["standardDeviation"], self.variable["standardDeviation"])
+ txt += "print '%s =', %s\n" % ("standard Deviation", self.variable["standardDeviation"])
txt += "\n"
if ( self.DictMCVal.has_key( 'ConfidenceInterval' ) and self.DictMCVal.has_key( 'Probability' ) ):
if ( self.DictMCVal.has_key( 'VariationCoefficient' ) ):
if ( self.DictMCVal[ 'VariationCoefficient' ] == "yes" ):
txt += "%s = %s.getCoefficientOfVariation()\n" % (self.variable["coefficientOfVariation"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["coefficientOfVariation"], self.variable["coefficientOfVariation"])
+ txt += "print '%s =', %s\n" % ("coefficient of Variation", self.variable["coefficientOfVariation"])
txt += "\n"
- if ( self.DictMCVal.has_key( 'IterationNumber' ) ):
- if ( self.DictMCVal[ 'IterationNumber' ] == "yes" ):
- txt += "%s = %s.getOuterSampling()\n" % (self.variable["iterations"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["iterations"], self.variable["iterations"])
+ if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+ if ( self.DictMCVal[ 'SimulationsNumber' ] == "yes" ):
+ txt += "%s = %s.getOuterSampling()\n" % (self.variable["simulationNumbers"], self.variable["myResult"])
+ txt += "print '%s =', %s\n" % ("simulation Numbers", self.variable["simulationNumbers"])
txt += "\n"
- if ( self.DictMCVal.has_key( 'ConvergenceGraph' ) ):
- if ( self.DictMCVal[ 'ConvergenceGraph' ] == "yes" ):
- txt += "%s = %s.drawProbabilityConvergence()\n" % (self.variable["convergenceGraph"], self.variable["myAlgo"])
- txt += "Show( %s )\n" % self.variable["convergenceGraph"]
+ if ( self.DictMCVal.has_key( 'ConvergenceGraph' ) and self.DictMCVal.has_key( 'ConfidenceInterval' ) ):
+ if ( ( self.DictMCVal[ 'ConvergenceGraph' ] == "yes" ) and ( self.DictMCVal[ 'ConfidenceInterval' ] == "yes" ) ):
+ txt += "%s = %s\n" % (self.variable["alpha"], self.DictMCVal[ 'Level' ])
+ txt += "%s = %s.drawProbabilityConvergence( %s )\n" % (self.variable["convergenceGraph"], self.variable["myAlgo"], self.variable["alpha"])
+ txt += "#Show( %s )\n" % self.variable["convergenceGraph"]
+ txt += "%s = '%s'\n" % (self.variable["convergenceDrawing"], self.DictMCVal[ 'ConvergenceDrawingFilename' ])
+ txt += "%s.draw( %s )\n" % (self.variable["convergenceGraph"], self.variable["convergenceDrawing"])
+ txt += "ViewImage( %s.getBitmap() )\n" % self.variable["convergenceGraph"]
txt += "\n"
return txt
'''
txt = ""
- iterations = None
+ simulationNumbers = None
if ( self.DictMCVal.has_key( 'MaximumIterationsNumber' ) ):
- iterations = self.DictMCVal[ 'MaximumIterationsNumber' ]
- txt += "%s.setMaximumIterationsNumber( %s )\n" % (self.variable["myOptimizer"], iterations)
+ simulationNumbers = self.DictMCVal[ 'MaximumIterationsNumber' ]
+ txt += "%s.setMaximumIterationsNumber( %s )\n" % (self.variable["myOptimizer"], simulationNumbers)
absoluteError = None
if ( self.DictMCVal.has_key( 'MaximumAbsoluteError' ) ):
if ( self.DictMCVal.has_key( 'HasoferReliabilityIndex' ) ):
if ( self.DictMCVal[ 'HasoferReliabilityIndex' ] == "yes" ):
txt += "%s = %s.getHasoferReliabilityIndex()\n" % (self.variable["hasoferReliabilityIndex"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["hasoferReliabilityIndex"], self.variable["hasoferReliabilityIndex"])
+ txt += "print '%s =', %s\n" % ("hasofer Reliability Index", self.variable["hasoferReliabilityIndex"])
txt += "\n"
if ( self.DictMCVal.has_key( 'DesignPoint' ) ):
if ( self.DictMCVal[ 'DesignPoint' ] == "yes" ):
txt += "%s = %s.getStandardSpaceDesignPoint()\n" % (self.variable["standardSpaceDesignPoint"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["standardSpaceDesignPoint"], self.variable["standardSpaceDesignPoint"])
+ txt += "print '%s =', %s\n" % ("standard Space Design Point", self.variable["standardSpaceDesignPoint"])
txt += "%s = %s.getPhysicalSpaceDesignPoint()\n" % (self.variable["physicalSpaceDesignPoint"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["physicalSpaceDesignPoint"], self.variable["physicalSpaceDesignPoint"])
+ txt += "print '%s =', %s\n" % ("physical Space Design Point", self.variable["physicalSpaceDesignPoint"])
txt += "\n"
- if ( self.DictMCVal.has_key( 'ImportanceFactorNumericalResults' ) ):
- if ( self.DictMCVal[ 'ImportanceFactorNumericalResults' ] == "yes" ):
+ if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ):
+ if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ):
+ txt += "print 'Importance Factors:'\n"
txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["importanceFactors"], self.variable["importanceFactors"])
+ txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"]
+ txt += " print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"])
txt += "\n"
-
- if ( self.DictMCVal.has_key( 'ImportanceFactorGraphicalResults' ) ):
- if ( self.DictMCVal[ 'ImportanceFactorGraphicalResults' ] == "yes" ):
txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myResult"])
- txt += "Show( %s )\n" % self.variable["importanceFactorsGraph"]
+ txt += "#Show( %s )\n" % self.variable["importanceFactorsGraph"]
+ txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ])
+ txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
+ txt += "ViewImage( %s.getBitmap() )\n" % self.variable["importanceFactorsGraph"]
+ txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["importanceFactorsGraph"]
+ txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["importanceFactorsGraph"]
txt += "\n"
- if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivityNumericalResults' ) ):
- if ( self.DictMCVal[ 'FORMEventProbabilitySensitivityNumericalResults' ] == "yes" ):
+ if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivity' ) ):
+ if ( self.DictMCVal[ 'FORMEventProbabilitySensitivity' ] == "yes" ):
txt += "%s = %s.getEventProbabilitySensitivity()\n" % (self.variable["eventProbabilitySensitivity"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["eventProbabilitySensitivity"], self.variable["eventProbabilitySensitivity"])
+ txt += "print 'FORM Event Probability Sensitivity:'\n"
+ txt += "for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':'\n" % self.variable["distribution"]
+ txt += " for j in range( %s[i].getDimension() ):\n" % self.variable["eventProbabilitySensitivity"]
+ txt += " print ' ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["eventProbabilitySensitivity"], self.variable["eventProbabilitySensitivity"])
txt += "\n"
-
- if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivityGraphicalResults' ) ):
- if ( self.DictMCVal[ 'FORMEventProbabilitySensitivityGraphicalResults' ] == "yes" ):
- txt += "%s = %s.drawEventProbabilitySensitivity()\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["myResult"])
- txt += "Show( %s[0] )\n" % self.variable["eventProbabilitySensitivityGraph"]
+ txt += "%s = %s.drawEventProbabilitySensitivity()[0]\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["myResult"])
+ txt += "#Show( %s )\n" % self.variable["eventProbabilitySensitivityGraph"]
+ txt += "%s = '%s'\n" % (self.variable["eventProbabilitySensitivityDrawing"], self.DictMCVal[ 'FORMEventProbabilitySensitivityDrawingFilename' ])
+ txt += "%s.draw( %s )\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["eventProbabilitySensitivityDrawing"])
+ txt += "ViewImage( %s.getBitmap() )\n" % self.variable["eventProbabilitySensitivityGraph"]
+ txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["eventProbabilitySensitivityGraph"]
+ txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["eventProbabilitySensitivityGraph"]
txt += "\n"
- if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivityNumericalResults' ) ):
- if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivityNumericalResults' ] == "yes" ):
+ if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivity' ) ):
+ if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivity' ] == "yes" ):
txt += "%s = %s.getHasoferReliabilityIndexSensitivity()\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["hasoferReliabilityIndexSensitivity"])
+ txt += "print 'Hasofer Reliability Index Sensitivity:'\n"
+ txt += "for i in range( %s ):\n" % self.variable["n"]
+ txt += " print %s.getDescription()[i], ':'\n" % self.variable["distribution"]
+ txt += " for j in range( %s[i].getDimension() ):\n" % self.variable["hasoferReliabilityIndexSensitivity"]
+ txt += " print ' ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["hasoferReliabilityIndexSensitivity"])
txt += "\n"
-
- if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivityGraphicalResults' ) ):
- if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivityGraphicalResults' ] == "yes" ):
- txt += "%s = %s.drawHasoferReliabilityIndexSensitivity()\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["myResult"])
- txt += "Show( %s[0] )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+ txt += "%s = %s.drawHasoferReliabilityIndexSensitivity()[0]\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["myResult"])
+ txt += "#Show( %s )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+ txt += "%s = '%s'\n" % (self.variable["hasoferReliabilityIndexSensitivityDrawing"], self.DictMCVal[ 'HasoferReliabilityIndexSensitivityDrawingFilename' ])
+ txt += "%s.draw( %s )\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["hasoferReliabilityIndexSensitivityDrawing"])
+ txt += "ViewImage( %s.getBitmap() )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+ txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+ txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
txt += "\n"
if ( self.DictMCVal.has_key( 'TvedtApproximation' ) ):
if ( self.DictMCVal[ 'TvedtApproximation' ] == "yes" ):
txt += "%s = %s.getEventProbabilityTvedt()\n" % (self.variable["tvedtApproximation"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["tvedtApproximation"], self.variable["tvedtApproximation"])
+ txt += "print '%s =', %s\n" % ("Tvedt Approximation", self.variable["tvedtApproximation"])
txt += "\n"
if ( self.DictMCVal.has_key( 'HohenBichlerApproximation' ) ):
if ( self.DictMCVal[ 'HohenBichlerApproximation' ] == "yes" ):
txt += "%s = %s.getEventProbabilityHohenBichler()\n" % (self.variable["hohenBichlerApproximation"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["hohenBichlerApproximation"], self.variable["tvedtApproximation"])
+ txt += "print '%s =', %s\n" % ("HohenBichler Approximation", self.variable["tvedtApproximation"])
txt += "\n"
if ( self.DictMCVal.has_key( 'BreitungApproximation' ) ):
if ( self.DictMCVal[ 'BreitungApproximation' ] == "yes" ):
txt += "%s = %s.getEventProbabilityBreitung()\n" % (self.variable["breitungApproximation"], self.variable["myResult"])
- txt += "print '%s =', %s\n" % (self.variable["breitungApproximation"], self.variable["breitungApproximation"])
+ txt += "print '%s =', %s\n" % ("Breitung Approximation", self.variable["breitungApproximation"])
txt += "\n"
txt = "# Evenement de defaillance\n"
txt += "%s = Event( %s, ComparisonOperator( %s() ), %s )\n" % (self.variable["myEvent"], self.variable["outputRandomVector"], operator, threshold)
+ txt += "%s.setName( '%s' )\n" % (self.variable["myEvent"], "myEvent")
txt += "\n"
return txt
'''
Methode de tirage d importance
'''
+ dimension = 0
+ if ( self.DictMCVal.has_key( 'MeanVector' ) ):
+ meanVector = self.DictMCVal[ 'MeanVector' ]
+ dimension = len( meanVector )
+
txt = "# Simulation par Tirage d'importance\n"
- txt += "%s = ImportanceSampling( %s )\n" % (self.variable["myAlgo"], self.variable["myEvent"])
+ txt += "# Densite d'importance\n"
+ txt += "%s = NumericalPoint( %s )\n" % (self.variable["meanVector"], self.variable["n"])
+ for i in range(dimension):
+ txt += "%s[%d] = %g\n" % (self.variable["meanVector"], i, meanVector[i])
+
+ txt += "%s = Normal( %s, CovarianceMatrix( IdentityMatrix( %s ) ) )\n" % (self.variable["importanceDensity"], self.variable["meanVector"], self.variable["n"])
+ txt += "%s = ImportanceSampling( %s, Distribution( %s ) )\n" % (self.variable["myAlgo"], self.variable["myEvent"], self.variable["importanceDensity"])
txt += "\n"
return txt
'''
Do the computation
'''
+ txt = ""
if ( self.DictMCVal.has_key( 'FunctionCallsNumber' ) ):
if ( self.DictMCVal[ 'FunctionCallsNumber' ] == "yes" ):
- txt = "%s = %s.getEvaluationCallsNumber()\n" % (self.variable["modelEvaluationCalls"], self.variable["model"])
+ txt += "%s = %s.getEvaluationCallsNumber()\n" % (self.variable["modelEvaluationCalls"], self.variable["model"])
txt += "%s = %s.getGradientCallsNumber()\n" % (self.variable["modelGradientCalls"], self.variable["model"])
txt += "%s = %s.getHessianCallsNumber()\n" % (self.variable["modelHessianCalls"], self.variable["model"])
txt += "\n"
txt += "%s = %s.getGradientCallsNumber() - %s\n" % (self.variable["modelGradientCalls"], self.variable["model"], self.variable["modelGradientCalls"])
txt += "%s = %s.getHessianCallsNumber() - %s\n" % (self.variable["modelHessianCalls"], self.variable["model"], self.variable["modelHessianCalls"])
txt += "\n"
- txt += "print '%s =', %s\n" % (self.variable["modelEvaluationCalls"], self.variable["modelEvaluationCalls"])
- txt += "print '%s =', %s\n" % (self.variable["modelGradientCalls"], self.variable["modelGradientCalls"])
- txt += "print '%s =', %s\n" % (self.variable["modelHessianCalls"], self.variable["modelHessianCalls"])
+ txt += "print '%s =', %s\n" % ("model Evaluation Calls", self.variable["modelEvaluationCalls"])
+ txt += "print '%s =', %s\n" % ("model Gradient Calls", self.variable["modelGradientCalls"])
+ txt += "print '%s =', %s\n" % ("model Hessian Calls", self.variable["modelHessianCalls"])
txt += "\n"
return txt
txt += "\n"
return txt
- def Beta (self, loi, i, collection):
+ def Beta (self, loi):
'''
Definition de la loi Beta
'''
txt = "Beta( %g, %g, %g, %g, %s )" % (arg1, arg2, arg3, arg4, settings[ loi[ 'Settings' ] ])
return txt
- def Exponential (self, loi, i, collection):
+ def Exponential (self, loi):
'''
Definition de la loi Exponential
'''
txt = "Exponential( %g, %g )" % (arg1, arg2)
return txt
- def Gamma (self, loi, i, collection):
+ def Gamma (self, loi):
'''
Definition de la loi Gamma
'''
txt = "Gamma( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
return txt
- def Geometric (self, loi, i, collection):
+ def Geometric (self, loi):
'''
Definition de la loi Geometric
'''
txt = "Geometric( %g )" % loi[ 'P' ]
return txt
- def Gumbel (self, loi, i, collection):
+ def Gumbel (self, loi):
'''
Definition de la loi Gumbel
'''
settings = {
- "AlphaBeta" : "Gamma.ALPHABETA",
- "MuSigma" : "Gamma.MUSIGMA",
+ "AlphaBeta" : "Gumbel.ALPHABETA",
+ "MuSigma" : "Gumbel.MUSIGMA",
}
if loi[ 'Settings' ] == 'AlphaBeta' :
arg1 = loi[ 'Alpha' ]
arg1 = loi[ 'Mu' ]
arg2 = loi[ 'Sigma' ]
- txt = "Gamma( %g, %g, %s )" % (arg1, arg2, settings[ loi[ 'Settings' ] ])
+ txt = "Gumbel( %g, %g, %s )" % (arg1, arg2, settings[ loi[ 'Settings' ] ])
return txt
- def Histogram (self, loi, i, collection):
+ def Histogram (self, loi):
'''
Definition de la loi Histogram
'''
txt = "Histogram( %g, %s )" % (arg1, arg2)
return txt
- def Logistic (self, loi, i, collection):
+ def Laplace (self, loi):
+ '''
+ Definition de la loi Laplace
+ '''
+ arg1 = loi[ 'Lambda' ]
+ arg2 = loi[ 'Mu' ]
+ txt = "Laplace( %g, %g )" % (arg1, arg2)
+ return txt
+
+ def Logistic (self, loi):
'''
Definition de la loi Logistic
'''
txt = "Logistic( %g, %g )" % (arg1, arg2)
return txt
- def LogNormal (self, loi, i, collection):
+ def LogNormal (self, loi):
'''
Definition de la loi LogNormal
'''
txt = "LogNormal( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
return txt
- def MultiNomial (self, loi, i, collection):
+ def MultiNomial (self, loi):
'''
Definition de la loi MultiNomial
'''
txt = "MultiNomial( NumericalPoint( %s ) , %d)" % (arg1, arg2)
return txt
- def Normal (self, loi, i, collection):
+ def NonCentralStudent (self, loi):
+ '''
+ Definition de la loi NonCentralStudent
+ '''
+ arg1 = loi[ 'Nu' ]
+ arg2 = loi[ 'Delta' ]
+ arg3 = loi[ 'Gamma' ]
+ txt = "NonCentralStudent( %g, %g )" % (arg1, arg2, arg3)
+ return txt
+
+ def Normal (self, loi):
'''
Definition de la loi Normal
'''
txt = "Normal( %g, %g )" % (arg1, arg2)
return txt
- def TruncatedNormal (self, loi, i, collection):
+ def TruncatedNormal (self, loi):
'''
Definition de la loi TruncatedNormal
'''
txt = "TruncatedNormal( %g, %g, %g, %g )" % (arg1, arg2, arg3, arg4)
return txt
- def Poisson (self, loi, i, collection):
+ def Poisson (self, loi):
'''
- Definition de la loi
+ Definition de la loi Poisson
'''
txt = "Poisson( %g )" % loi[ 'Lambda' ]
return txt
- def Student (self, loi, i, collection):
+ def Rayleigh (self, loi):
+ '''
+ Definition de la loi Rayleigh
+ '''
+ arg1 = loi[ 'Sigma' ]
+ arg2 = loi[ 'Gamma' ]
+ txt = "Rayleigh( %g, %g )" % (arg1, arg2)
+ return txt
+
+ def Student (self, loi):
'''
Definition de la loi Student
'''
arg1 = loi[ 'Mu' ]
arg2 = loi[ 'Nu' ]
- txt = "Student( %g, %g )" % (arg1, arg2)
+ arg3 = loi[ 'Sigma' ]
+ txt = "Student( %g, %g, %g )" % (arg1, arg2, arg3)
return txt
- def Triangular (self, loi, i, collection):
+ def Triangular (self, loi):
'''
Definition de la loi Triangular
'''
txt = "Triangular( %g, %g, %g )" % (arg1, arg2, arg3)
return txt
- def Uniform (self, loi, i, collection):
+ def Uniform (self, loi):
'''
Definition de la loi Uniform
'''
txt = "Uniform( %g, %g )" % (arg1, arg2)
return txt
- def UserDefined (self, loi, i, collection):
+ def UserDefined (self, loi):
'''
Definition de la loi UserDefined
'''
txt = "** UserDefined not defined yet **"
return txt
- def Weibull (self, loi, i, collection):
+ def Weibull (self, loi):
'''
Definition de la loi Weibull
'''
arg2 = loi[ 'Sigma' ]
arg3 = loi[ 'Gamma' ]
- txt = "Weibull( %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
+ txt = "Weibull( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
return txt
+
+
+ def GraphiquePDF (self, loi, fichier):
+ '''
+ Produit une image PNG representant la PDF de la loi
+ '''
+ txt = headerSTD % self.OpenTURNS_path
+ txt += "dist = %s\n" % apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) )
+ txt += "graph = dist.drawPDF()\n"
+ txt += "graph.draw( '%s' )\n" % fichier
+ txt += footerSTD
+ return txt
+
'''
Ecrit la liste des variables
'''
- varList = openturns.WrapperDataVariableList()
+ varList = openturns.WrapperDataVariableCollection()
for var in sorted( self.DictVariables.keys(), self.__variable_ordering( self.DictVariables ) ) :
varList.add( self.Variable( var, self.DictVariables[var] ) )
return varList
'''
Ecrit la liste des fichiers
'''
- fileList = openturns.WrapperDataFileList()
+ fileList = openturns.WrapperDataFileCollection()
for dictFile in self.GetMCVal('Files', []) :
fileList.add( self.File( dictFile ) )
return fileList
'''
parameters = openturns.WrapperParameter()
parameters.mode_ = WrapperModeByName[ self.GetMCVal('WrapCouplingMode') ]
+ if (parameters.mode_ == openturns.WrapperMode.FORK ):
+ parameters.command_ = self.GetMCVal('Command')
+ userPrefix = self.GetMCVal('UserPrefix', None)
+ if userPrefix != None : parameters.userPrefix_ = userPrefix
parameters.state_ = WrapperStateByName[ self.GetMCVal('State') ]
parameters.in_ = WrapperDataTransferByName[ self.GetMCVal('InDataTransfer') ]
parameters.out_ = WrapperDataTransferByName[ self.GetMCVal('OutDataTransfer') ]
Ecrit les donnees liees a l utilisation d un framework englobant
'''
framework = openturns.WrapperFrameworkData()
- #framework.studycase_ = "12:23:34"
- framework.componentname_ = self.GetMCVal('SolverComponentName')
+# framework.studycase_ = "12:23:34"
+# framework.componentname_ = self.GetMCVal('SolverComponentName', 'UNDEFINED')
+ CN = self.GetMCVal('SolverComponentName', 'UNDEFINED')
+ print 'CN = ', CN
+ framework.componentname_ = CN
return framework
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur d une liste des GroupNo et GroupMA
+"""
+import traceback
+import types,string,re
+
+from generator_python import PythonGenerator
+def entryPoint():
+ """
+ Retourne les informations nécessaires pour le chargeur de plugins
+
+ Ces informations sont retournées dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'GroupMA',
+ # La factory pour créer une instance du plugin
+ 'factory' : GroupMAGenerator,
+ }
+
+
+class GroupMAGenerator(PythonGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format homard
+
+ """
+ # Les extensions de fichier préconisées
+ extensions=('.comm',)
+
+ def __init__(self):
+ PythonGenerator.__init__(self)
+ self.listeMA=[]
+ self.listeNO=[]
+
+ def gener(self,obj,format='brut',config=None):
+ self.liste=[]
+ self.text=PythonGenerator.gener(self,obj,'brut',config=None)
+ return self.listeMA,self.listeNO
+
+ def generMCSIMP(self,obj) :
+ if 'grma' in repr(obj.definition.type) :
+ if not type(obj.valeur) in (list, tuple):
+ aTraiter=(obj.valeur,)
+ else :
+ aTraiter=obj.valeur
+ for group in aTraiter :
+ if group not in self.listeMA :
+ self.listeMA.append(group)
+ if 'grno' in repr(obj.definition.type) :
+ if not type(obj.valeur) in (list, tuple):
+ aTraiter=(obj.valeur,)
+ else :
+ aTraiter=obj.valeur
+ for group in aTraiter :
+ if group not in self.listeNO :
+ self.listeNO.append(group)
+ s=PythonGenerator.generMCSIMP(self,obj)
+ return s
# Les extensions de fichier permis?
extensions=('.comm',)
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
self.initDico()
+ # Cette instruction génère le contenu du fichier de commandes (persistance)
self.text=PythonGenerator.gener(self,obj,format)
+ # Cette instruction génère le contenu du fichier de paramètres python
self.genereSEP()
return self.text
return self.texteTubePy
def genereSEP(self) :
+ '''
+ Prépare le contenu du fichier de paramètres python. Le contenu
+ peut ensuite être obtenu au moyen de la fonction getTubePy().
+ '''
+ #self.__genereSEP_withVariables()
+ self.__genereSEP_withDico()
+
+ def __genereSEP_withVariables(self) :
+ '''
+ Les paramètres sont transcrits sous forme de variables nom=valeur.
+ '''
self.texteTubePy="# Parametres generes par Eficas \n"
for MC in self.dictMCVal.keys():
ligne = MC +"="+ repr(self.dictMCVal[MC])+'\n'
self.texteTubePy=self.texteTubePy+ligne
+
print self.texteTubePy
+ # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
fichier=os.path.join(os.path.dirname(__file__),"tube.py")
f=open(fichier,'r')
for ligne in f.readlines():
self.texteTubePy=self.texteTubePy+ligne
f.close
+ def __genereSEP_withDico(self) :
+ """
+ Les paramètres sont transcrits sous la forme d'un dictionnaire nom=valeur.
+ """
+ from Sep import properties
+ self.texteTubePy="# -*- coding: utf-8 -*-\n"
+ self.texteTubePy+="# ======================================================================================\n"
+ self.texteTubePy+="# FICHIER GENERE PAR EFICAS - OUTIL MÉTIER SOUS-EPAISSEUR - "
+ self.texteTubePy+="VERSION "+str(properties.version)+" du "+str(properties.date)+"\n"
+ self.texteTubePy+="# ======================================================================================\n"
+ self.texteTubePy+="\n"
+ self.texteTubePy+="# Parametres Utilisateur Eficas \n"
+ self.texteTubePy+="parameters={}\n"
+
+ for MC in self.dictMCVal.keys():
+ ligne = "parameters['"+MC+"']="+ repr(self.dictMCVal[MC])+'\n'
+ self.texteTubePy=self.texteTubePy+ligne
+
+ # On ajoute des paramètres de configuration pour contrôle de
+ # cohérence avec la procédure outil métier
+ self.texteTubePy+="# Parametres de Configuration Eficas \n"
+ ligne = "parameters['OMVERSION']="+str(properties.version)+"\n"
+ self.texteTubePy+=ligne
+
+ # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
+ self.texteTubePy+="\n"
+ self.texteTubePy+="# Exécution de la procédure outil métier \n"
+ self.texteTubePy+="import os,sys\n"
+ self.texteTubePy+="sys.path.insert(0,os.environ['OM_ROOT_DIR'])\n"
+ self.texteTubePy+="import om_data\n"
+ self.texteTubePy+="om_data.setParameters(parameters)\n"
+ self.texteTubePy+="def run():\n"
+ self.texteTubePy+=" import om_smeca\n"
+ self.texteTubePy+="\n"
+ self.texteTubePy+='if __name__ == "__main__":\n'
+ self.texteTubePy+=" run()\n"
+
+ # For debug only
+ print self.texteTubePy
+
+
def initDico(self) :
self.tube=0
self.coude=0
self.dictMCVal={}
self.texteTubePy=""
+ # __GBO__: surcharge de PythonGenerator:
+ # voir example generator_cuve2dg.py (genea)
def generMCSIMP(self,obj) :
"""
Convertit un objet MCSIMP en texte python
Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
"""
+ clef=""
+ for i in obj.get_genealogie() :
+ clef=clef+"__"+i
+ #self.dictMCVal[obj.nom]=obj.valeur
+ self.dictMCVal[clef]=obj.valeur
+
s=PythonGenerator.generMCSIMP(self,obj)
- self.dictMCVal[obj.nom]=obj.valeur
return s
+ # __GBO__: surcharge de PythonGenerator
def generMACRO_ETAPE(self,obj):
print obj.nom
- if obj.nom == "M_TUBE" :
+ if obj.nom == "S_EP_INTERNE" :
self.tube=1
if obj.nom == "M_COUDE" :
self.coude=1
fp.write(self.text)
fp.close()
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
"""
Retourne une représentation du JDC obj sous une forme qui est paramétrée par format.
Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
# ======================================================================
"""
Ce module contient le plugin generateur de fichier au format
- homard pour EFICAS.
+ DefaillCUVE pour EFICAS.
"""
import traceback
import types,string,re
from Noyau import N_CR
-from Noyau.N_utils import repr_float
-from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
-from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
-from Accas import GEOM,ASSD,MCNUPLET
-from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
-from Formatage import Formatage
+from Accas import MCSIMP
from generator_python import PythonGenerator
def entryPoint():
"""
Ce generateur parcourt un objet de type JDC et produit
un texte au format eficas et
- un texte au format homard
+ un texte au format DefaillCUVE
"""
# Les extensions de fichier préconisées
if cr :
self.cr=cr
else:
- self.cr=N_CR.CR(debut='CR generateur format homard pour homard',
- fin='fin CR format homard pour homard')
- # Le texte au format homard est stocké dans l'attribut text
- self.text=''
+ self.cr=N_CR.CR(debut='CR generateur format DefaillCUVE pour DefaillCUVE',
+ fin='fin CR format DefaillCUVE pour DefaillCUVE')
+ # Le texte au format DefaillCUVE est stocké dans l'attribut textCuve
self.textCuve=''
+ # Ce dictionnaire liste le nom des variables utilisees dans le script
+ self.variable = {
+ "NiveauImpression" : "MESSAGE_LEVEL",
+ "FichierDataIn" : "DATARESUME_FILE",
+ "FichierTempSigma" : "TEMPSIG_FILE",
+ "FichierCSV" : "CSV_FILE",
+ "FichierCREARE" : "CREARE_FILE",
+ "GrandeurEvaluee" : "GRANDEUR",
+ "IncrementTemporel" : "INCRTPS",
+ "IncrementMaxTemperature" : "DTPREC",
+ "IncrementMaxTempsAffichage" : "DTARCH",
+ "TraitementGeometrie" : "TYPEGEOM",
+ "RayonInterne" : "RINT",
+ "RayonInterne_mess" : "RINT_MESSAGE",
+ "RayonExterne" : "REXT",
+ "RayonExterne_mess" : "REXT_MESSAGE",
+ "EpaisseurRevetement" : "LREV",
+ "EpaisseurRevetement_mess" : "LREV_MESSAGE",
+ "LigamentExterneMin" : "LIGMIN",
+ "LigamentExterneMin_mess" : "LIGMIN_MESSAGE",
+ "NombreNoeudsMaillage" : "NBNO",
+ "TypeInitial" : "TYPEDEF",
+ "Orientation" : "ORIEDEF",
+ "ProfondeurRadiale" : "PROFDEF",
+ "ProfondeurRadiale_mess" : "PROFDEF_MESSAGE",
+ "ModeCalculLongueur" : "OPTLONG",
+ "Longueur" : "LONGDEF",
+ "Longueur_mess" : "LONGDEF_MESSAGE",
+ "CoefDirecteur" : "PROFSURLONG",
+ "CoefDirecteur_mess" : "PROFSURLONG_MESSAGE",
+ "Constante" : "LONGCONST",
+ "ModeCalculDecalage" : "DECATYP",
+ "DecalageNormalise" : "DECANOR",
+ "DecalageNormalise_mess" : "DECANOR_MESSAGE",
+ "DecalageRadial" : "DECADEF",
+ "DecalageRadial_mess" : "DECADEF_MESSAGE",
+ "Azimut" : "ANGLDEF",
+ "Azimut_mess" : "ANGLDEF_MESSAGE",
+ "Altitude_mess" : "ANGLDEF_MESSAGE",
+ "Altitude" : "ALTIDEF",
+ "Altitude_mess" : "ALTIDEF_MESSAGE",
+ "Pointe" : "POINDEF",
+ "ModeleFluence" : "MODELFLUENCE",
+ "ZoneActiveCoeur_AltitudeSup" : "H1COEUR",
+ "ZoneActiveCoeur_AltitudeInf" : "H2COEUR",
+ "FluenceMax" : "fmax",
+ "KPFrance" : "KPFRANCE",
+ "KPUS" : "KPUS",
+ "Azimut_0deg" : "COEFFLUENCE1",
+ "Azimut_5deg" : "COEFFLUENCE2",
+ "Azimut_10deg" : "COEFFLUENCE3",
+ "Azimut_15deg" : "COEFFLUENCE4",
+ "Azimut_20deg" : "COEFFLUENCE5",
+ "Azimut_25deg" : "COEFFLUENCE6",
+ "Azimut_30deg" : "COEFFLUENCE7",
+ "Azimut_35deg" : "COEFFLUENCE8",
+ "Azimut_40deg" : "COEFFLUENCE9",
+ "Azimut_45deg" : "COEFFLUENCE10",
+ "TypeIrradiation" : "TYPEIRR",
+ "RTNDT" : "RTNDT",
+ "ModeleIrradiation" : "MODELIRR",
+ "TeneurCuivre" : "CU",
+ "TeneurCuivre_mess" : "CU_MESSAGE",
+ "TeneurNickel" : "NI",
+ "TeneurNickel_mess" : "NI_MESSAGE",
+ "TeneurPhosphore" : "P",
+ "TeneurPhosphore_mess" : "P_MESSAGE",
+ "MoyenneRTndt" : "RTimoy",
+ "MoyenneRTndt_mess" : "RTimoy_MESSAGE",
+ "CoefVariationRTndt" : "RTicov",
+ "CoefVariationRTndt_mess" : "RTicov_MESSAGE",
+ "EcartTypeRTndt" : "USectDRT",
+ "EcartTypeRTndt_mess" : "USectDRT_MESSAGE",
+ "NombreEcartTypeRTndt" : "nbectDRTNDT",
+ "NombreEcartTypeRTndt_mess" : "nbectDRTNDT_MESSAGE",
+ "ModeleTenacite" : "MODELKIC",
+ "NBRE_CARACTERISTIQUE" : "NBCARAC",
+ "NbEcartType_MoyKIc" : "nbectKIc",
+ "NbEcartType_MoyKIc_mess" : "nbectKIc_MESSAGE",
+ "PalierDuctile_KIc" : "KICPAL",
+ "CoefficientVariation_KIc" : "KICCDV",
+ "Fractile_KIc" : "fractKIc",
+ "Fractile_KIc_mess" : "fractKIc_MESSAGE",
+ "Temperature_KIc100" : "T0WALLIN",
+ "A1" : "A1",
+ "A2" : "A2",
+ "A3" : "A3",
+ "B1" : "B1",
+ "B2" : "B2",
+ "B3" : "B3",
+ "C1" : "C1",
+ "C2" : "C2",
+ "C3" : "C3",
+ "AttnCorrBeta" : "ATTNCORRBETA",
+ "CorrIrwin" : "CORRIRWIN",
+ "ArretDeFissure" : "ARRETFISSURE",
+ "IncrementTailleFissure" : "INCRDEF",
+ "IncrementTailleFissure_mess" : "INCRDEF_MESSAGE",
+ "NbEcartType_MoyKIa" : "nbectKIa",
+ "PalierDuctile_KIa" : "KIAPAL",
+ "CoefficientVariation_KIa" : "KIACDV",
+ "InstantInitialisation" : "INSTINIT",
+ "ConditionLimiteThermiqueREV" : "KTHREV",
+ "TemperatureDeformationNulleREV" : "TREFREV",
+ "TemperaturePourCoefDilatThermREV" : "TDETREV",
+ "CoefficientPoissonREV" : "NUREV",
+ "ConditionLimiteThermiqueMDB" : "KTHMDB",
+ "TemperatureDeformationNulleMDB" : "TREFMDB",
+ "TemperaturePourCoefDilatThermMDB" : "TDETMDB",
+ "CoefficientPoissonMDB" : "NUMDB",
+ "TypeConditionLimiteThermique" : "TYPCLTH",
+ "Instant_1" : "INSTANT1",
+ "Instant_2" : "INSTANT2",
+ "DebitAccumule" : "QACCU",
+ "DebitInjectionSecurite" : "QIS",
+ "TempInjectionSecurite_mess" : "TIS_MESSAGE",
+ "DiametreHydraulique" : "DH",
+ "DiametreHydraulique_mess" : "DH_MESSAGE",
+ "SectionEspaceAnnulaire" : "SECTION",
+ "SectionEspaceAnnulaire_mess" : "SECTION_MESSAGE",
+ "HauteurCaracConvectionNaturelle" : "DELTA",
+ "HauteurCaracConvectionNaturelle_mess" : "DELTA_MESSAGE",
+ "CritereConvergenceRelative" : "EPS",
+ "CoefficientsVestale" : "COEFVESTALE",
+ "VolumeMelange_CREARE" : "VM",
+ "VolumeMelange_CREARE_mess" : "VM_MESSAGE",
+ "TemperatureInitiale_CREARE" : "T0",
+ "TemperatureInitiale_CREARE_mess" : "T0_MESSAGE",
+ "SurfaceEchange_FluideStructure" : "SE",
+ "SurfaceEchange_FluideStructure_mess" : "SE_MESSAGE",
+ }
+
+ # Ce dictionnaire liste le commentaire des variables utilisees dans le script
+ self.comment = {
+ "NiveauImpression" : "Niveau d impression des messages a l ecran (=0 : rien, =1 : temps calcul total, =2 : temps intermediaires)",
+ "FichierDataIn" : "sortie du fichier recapitulatif des donnees d entree {OUI ; NON}",
+ "FichierTempSigma" : "sortie des fichiers temperature et contraintes {OUI ; NON}",
+ "FichierCSV" : "sortie du fichier resultat template_DEFAILLCUVE.CSV {OUI ; NON}",
+ "FichierCREARE" : "sortie du fichier Tfluide et Coef Echange {OUI ; NON}",
+ "GrandeurEvaluee" : "choix de la grandeur sous critere evaluee {FM_KICSURKCP ; MARGE_KI ; MARGE_KCP}",
+ "IncrementTemporel" : "increment temporel pour l analyse PROBABILISTE (si DETERMINISTE, fixer a 1)",
+ "IncrementMaxTemperature" : "increment max de temp/noeud/instant (degC)",
+ "IncrementMaxTempsAffichage" : "increment max de temps pour affichage (s)",
+ "TraitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
+ "RayonInterne" : "rayon interne (m)",
+ "RayonInterne_mess" : "affichage ecran du rayon interne (m)",
+ "RayonExterne" : "rayon externe (m)",
+ "RayonExterne_mess" : "affichage ecran du rayon externe (m)",
+ "EpaisseurRevetement" : "epaisseur revetement (m)",
+ "EpaisseurRevetement_mess" : "affichage ecran de l epaisseur revetement (m)",
+ "LigamentExterneMin" : "ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+ "LigamentExterneMin_mess" : "affichage ecran du ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+ "NombreNoeudsMaillage" : "nbre de noeuds dans l'epaisseur de la cuve",
+ "TypeInitial" : "type initial du defaut : DEBOUCHANT=Defaut Debouchant, DSR=Defaut Sous Revetement, DECALE=Defaut Decale",
+ "Orientation" : "orientation (LONGITUD / CIRCONF)",
+ "ProfondeurRadiale" : "profondeur radiale ou encore hauteur (m)",
+ "ProfondeurRadiale_mess" : "affichage ecran de la profondeur radiale ou encore hauteur (m)",
+ "ModeCalculLongueur" : "option pour definir la longueur du defaut (VALEUR pour une valeur fixe, FCTAFFINE pour une fct affine de la profondeur)",
+ "Longueur" : "longueur (m) pour defaut Sous Revetement",
+ "Longueur_mess" : "affichage ecran de la longueur (m) pour defaut Sous Revetement",
+ "CoefDirecteur" : "pente de la fonction affine l = h/profsurlong + a0",
+ "CoefDirecteur_mess" : "affichage ecran de la pente de la fonction affine l = h/profsurlong + a0",
+ "Constante" : "constante de la fonction affine a0",
+ "ModeCalculDecalage" : "type de decalage : normalise (NORMALISE) ou reel (VALEUR)",
+ "DecalageNormalise" : "decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+ "DecalageNormalise_mess" : "affichage ecran du decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+ "DecalageRadial" : "decalage radial reel (m) pour defaut decale",
+ "DecalageRadial_mess" : "affichage ecran du decalage radial reel (m) pour defaut decale",
+ "Azimut" : "coordonnee angulaire (degre)",
+ "Azimut_mess" : "affichage ecran de la coordonnee angulaire (degre)",
+ "Altitude" : "altitude (m) : valeur negative",
+ "Altitude_mess" : "affichage ecran de l altitude (m) : valeur negative",
+ "Pointe" : "choix du(des) point(s) du defaut considere {'A','B','BOTH'} pour DSR et DECALE (pour DEBOUCHANT : automatiquement 'B')",
+ "ModeleFluence" : "modele de fluence : {Reglementaire, France, ValeurImposee, SDM, USNRC, REV_2, SDM_Lissage, GrandeDev, GD_Cuve, Cuve1D}",
+ "ZoneActiveCoeur_AltitudeSup" : "cote superieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+ "ZoneActiveCoeur_AltitudeInf" : "cote inferieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+ "FluenceMax" : "fluence maximale assimilee par la cuve (n/cm2)",
+ "KPFrance" : "parametre exponentiel du modele France",
+ "KPUS" : "parametre exponentiel du modele US",
+ "Azimut_0deg" : "fluence a l'azimut 0 (10^19 n/cm)",
+ "Azimut_5deg" : "fluence a l'azimut 5 (10^19 n/cm)",
+ "Azimut_10deg" : "fluence a l'azimut 10 (10^19 n/cm)",
+ "Azimut_15deg" : "fluence a l'azimut 15 (10^19 n/cm)",
+ "Azimut_20deg" : "fluence a l'azimut 20 (10^19 n/cm)",
+ "Azimut_25deg" : "fluence a l'azimut 25 (10^19 n/cm)",
+ "Azimut_30deg" : "fluence a l'azimut 30 (10^19 n/cm)",
+ "Azimut_35deg" : "fluence a l'azimut 35 (10^19 n/cm)",
+ "Azimut_40deg" : "fluence a l'azimut 40 (10^19 n/cm)",
+ "Azimut_45deg" : "fluence a l'azimut 45 (10^19 n/cm)",
+ "TypeIrradiation" : "type irradiation : {RTNDT, FLUENCE}",
+ "RTNDT" : "RTNDT finale (degC)",
+ "ModeleIrradiation" : "modele d irradiation : {HOUSSIN, PERSOZ, LEFEBVRE, USNRCmdb} pour virole et {BRILLAUD,USNRCsoud} pour jointsoude",
+ "TeneurCuivre" : "teneur en cuivre (%)",
+ "TeneurCuivre_mess" : "affichage ecran de la teneur en cuivre (%)",
+ "TeneurNickel" : "teneur en nickel (%)",
+ "TeneurNickel_mess" : "affichage ecran de la teneur en nickel (%)",
+ "TeneurPhosphore" : "teneur en phosphore (%)",
+ "TeneurPhosphore_mess" : "affichage ecran de la teneur en phosphore (%)",
+ "MoyenneRTndt" : "moyenne de la RTNDT initiale : virole C1 de cuve Chinon : mdb=>-17.degC et js=>42.degC (HT-56/05/038 : p.52)",
+ "MoyenneRTndt_mess" : "affichage ecran de la moyenne de la RTNDT initiale",
+ "CoefVariationRTndt" : "coef de variation de la RTNDT initiale",
+ "CoefVariationRTndt_mess" : "affichage ecran du coef de variation de la RTNDT initiale",
+ "EcartTypeRTndt" : "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ "EcartTypeRTndt_mess" : "affichage ecran, pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+ "NombreEcartTypeRTndt" : "Nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE (en DETERMINISTE, fixer a 2.)",
+ "NombreEcartTypeRTndt_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE",
+ "ModeleTenacite" : "modele de tenacite : {RCC-M, RCC-M_pal, RCC-M_exp, RCC-M_simpl, Houssin_RC, Wallin, REME, ORNL, Frama, WEIB3, WEIB2, LOGWOLF, WEIB-GEN}",
+ "NBRE_CARACTERISTIQUE" : "Nb caracteristique : ORDRE ou QUANTILE",
+ "NbEcartType_MoyKIc" : "Nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE (en DETERMINISTE, fixer a -2.)",
+ "NbEcartType_MoyKIc_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE",
+ "PalierDuctile_KIc" : "palier deterministe de K1c (MPa(m^0.5))",
+ "CoefficientVariation_KIc" : "coef de variation de la loi normale de K1c",
+ "Fractile_KIc" : "valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+ "Fractile_KIc_mess" : "affichage ecran de la valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+ "Temperature_KIc100" : "parametre T0 du modele Wallin (degC)",
+ "A1" : "coef des coefs d une WEIBULL generale",
+ "A2" : "",
+ "A3" : "",
+ "B1" : "",
+ "B2" : "",
+ "B3" : "",
+ "C1" : "",
+ "C2" : "",
+ "C3" : "",
+ "AttnCorrBeta" : "Attenuation de la correction plastique : {OUI, NON} ==> uniquement pour DSR ou DECALE",
+ "CorrIrwin" : "Correction plastique IRWIN : {OUI, NON} ==> uniquement pour DEBOUCHANT",
+ "ArretDeFissure" : "prise en compte de l arret de fissure {OUI, NON} (en PROBABILISTE, fixer a NON)",
+ "IncrementTailleFissure" : "increment de la taille de fissure (m)",
+ "IncrementTailleFissure_mess" : "affichage ecran de l increment de la taille de fissure (m)",
+ "NbEcartType_MoyKIa" : "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma)",
+ "PalierDuctile_KIa" : "palier deterministe de K1a quand modele RCC-M (MPa(m^0.5))",
+ "CoefficientVariation_KIa" : "coef de variation de la loi normale de K1a",
+ "InstantInitialisation" : "instant initial (s)",
+ "ConditionLimiteThermiqueREV" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+ "TemperatureDeformationNulleREV" : "temperature de deformation nulle (degC)",
+ "TemperaturePourCoefDilatThermREV" : "temperature de definition du coefficient de dilatation thermique (degC)",
+ "CoefficientPoissonREV" : "coefficient de Poisson",
+ "ConditionLimiteThermiqueMDB" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+ "TemperatureDeformationNulleMDB" : "temperature de deformation nulle (degC)",
+ "TemperaturePourCoefDilatThermMDB" : "temperature de definition du coefficient de dilatation thermique (degC)",
+ "CoefficientPoissonMDB" : "coefficient de Poisson",
+ "TypeConditionLimiteThermique" : "Type de condition thermique en paroi interne {TEMP_IMPO,FLUX_REP,ECHANGE,DEBIT,TEMP_FLU,APRP}",
+ "Instant_1" : "Borne inferieure de l intervalle de temps du 2nd palier T1",
+ "Instant_2" : "Borne superieure de l intervalle de temps du 2nd palier T1",
+ "DebitAccumule" : "Debit accumule (en m3/h)",
+ "DebitInjectionSecurite" : "Debit injection de securite (en m3/h)",
+ "TempInjectionSecurite_mess" : "affichage ecran de la temperature injection de securite",
+ "DiametreHydraulique" : "Diametre hydraulique (m)",
+ "DiametreHydraulique_mess" : "affichage ecran du diametre hydraulique (m)",
+ "SectionEspaceAnnulaire" : "Section espace annulaire (m2)",
+ "SectionEspaceAnnulaire_mess" : "affichage ecran de la section espace annulaire (m2)",
+ "HauteurCaracConvectionNaturelle" : "Hauteur caracteristique convection naturelle (m)",
+ "HauteurCaracConvectionNaturelle_mess" : "affichage ecran de la hauteur caracteristique convection naturelle (m)",
+ "CritereConvergenceRelative" : "Critere convergence relative (-)",
+ "CoefficientsVestale" : "Application des coefs de Vestale {OUI;NON}",
+ "VolumeMelange_CREARE" : "Volume de melange CREARE (m3)",
+ "VolumeMelange_CREARE_mess" : "affichage ecran du volume de melange CREARE (m3)",
+ "TemperatureInitiale_CREARE" : "Temperature initiale CREARE (degC)",
+ "TemperatureInitiale_CREARE_mess" : "affichage ecran de la temperature initiale CREARE (degC)",
+ "SurfaceEchange_FluideStructure" : "Surface d'echange fluide/structure (m2)",
+ "SurfaceEchange_FluideStructure_mess" : "affichage ecran de la surface d'echange fluide/structure (m2)",
+ }
+
+ # Ce dictionnaire liste la valeur par defaut des variables utilisees dans le script
+ self.default = {
+ "NiveauImpression" : "1",
+ "FichierDataIn" : "NON",
+ "FichierTempSigma" : "NON",
+ "FichierCSV" : "NON",
+ "FichierCREARE" : "NON",
+ "GrandeurEvaluee" : "FM_KICSURKCP",
+ "IncrementTemporel" : "1",
+ "IncrementMaxTemperature" : "0.1",
+ "IncrementMaxTempsAffichage" : "1000.",
+ "TraitementGeometrie" : "GEOMETRIE",
+ "RayonInterne" : "1.994",
+ "RayonInterne_mess" : "NON",
+ "RayonExterne" : "2.2015",
+ "RayonExterne_mess" : "NON",
+ "EpaisseurRevetement" : "0.0075",
+ "EpaisseurRevetement_mess" : "NON",
+ "LigamentExterneMin" : "0.75",
+ "LigamentExterneMin_mess" : "NON",
+ "NombreNoeudsMaillage" : "300",
+ "TypeInitial" : "DSR",
+ "Orientation" : "LONGITUD",
+ "ProfondeurRadiale" : "0.006",
+ "ProfondeurRadiale_mess" : "NON",
+ "ModeCalculLongueur" : "VALEUR",
+ "Longueur" : "0.060",
+ "Longueur_mess" : "NON",
+ "CoefDirecteur" : "10.",
+ "CoefDirecteur_mess" : "NON",
+ "Constante" : "0.",
+ "ModeCalculDecalage" : "VALEUR",
+ "DecalageNormalise" : "0.1",
+ "DecalageNormalise_mess" : "NON",
+ "DecalageRadial" : "0.",
+ "DecalageRadial_mess" : "NON",
+ "Azimut" : "0.",
+ "Azimut_mess" : "NON",
+ "Altitude" : "-4.",
+ "Altitude_mess" : "NON",
+ "Pointe" : "B",
+ "ModeleFluence" : "Reglementaire",
+ "ZoneActiveCoeur_AltitudeSup" : "-3.536",
+ "ZoneActiveCoeur_AltitudeInf" : "-7.194",
+ "FluenceMax" : "6.5",
+ "KPFrance" : "12.7",
+ "KPUS" : "9.4488",
+ "Azimut_0deg" : "5.8",
+ "Azimut_5deg" : "5.48",
+ "Azimut_10deg" : "4.46",
+ "Azimut_15deg" : "3.41",
+ "Azimut_20deg" : "3.37",
+ "Azimut_25deg" : "3.16",
+ "Azimut_30deg" : "2.74",
+ "Azimut_35deg" : "2.25",
+ "Azimut_40deg" : "1.89",
+ "Azimut_45deg" : "1.78",
+ "TypeIrradiation" : "RTNDT",
+ "RTNDT" : "64.",
+ "ModeleIrradiation" : "HOUSSIN",
+ "TeneurCuivre" : "0.0972",
+ "TeneurCuivre_mess" : "NON",
+ "TeneurNickel" : "0.72",
+ "TeneurNickel_mess" : "NON",
+ "TeneurPhosphore" : "0.00912",
+ "TeneurPhosphore_mess" : "NON",
+ "MoyenneRTndt" : "-12.0",
+ "MoyenneRTndt_mess" : "NON",
+ "CoefVariationRTndt" : "0.1",
+ "CoefVariationRTndt_mess" : "NON",
+ "EcartTypeRTndt" : "-2.",
+ "EcartTypeRTndt_mess" : "NON",
+ "NombreEcartTypeRTndt" : "2.",
+ "NombreEcartTypeRTndt_mess" : "NON",
+ "ModeleTenacite" : "RCC-M",
+ "NBRE_CARACTERISTIQUE" : "QUANTILE",
+ "NbEcartType_MoyKIc" : "-2.",
+ "NbEcartType_MoyKIc_mess" : "NON",
+ "PalierDuctile_KIc" : "195.",
+ "CoefficientVariation_KIc" : "0.15",
+ "Fractile_KIc" : "5.",
+ "Fractile_KIc_mess" : "NON",
+ "Temperature_KIc100" : "-27.",
+ "A1" : "21.263",
+ "A2" : "9.159",
+ "A3" : "0.04057",
+ "B1" : "17.153",
+ "B2" : "55.089",
+ "B3" : "0.0144",
+ "C1" : "4.",
+ "C2" : "0.",
+ "C3" : "0.",
+ "AttnCorrBeta" : "NON",
+ "CorrIrwin" : "NON",
+ "ArretDeFissure" : "NON",
+ "IncrementTailleFissure" : "0.",
+ "IncrementTailleFissure_mess" : "NON",
+ "NbEcartType_MoyKIa" : "0.",
+ "PalierDuctile_KIa" : "0.",
+ "CoefficientVariation_KIa" : "0.",
+ "InstantInitialisation" : "-1.",
+ "ConditionLimiteThermiqueREV" : "CHALEUR",
+ "TemperatureDeformationNulleREV" : "20.",
+ "TemperaturePourCoefDilatThermREV" : "287.",
+ "CoefficientPoissonREV" : "0.3",
+ "ConditionLimiteThermiqueMDB" : "CHALEUR",
+ "TemperatureDeformationNulleMDB" : "20.",
+ "TemperaturePourCoefDilatThermMDB" : "287.",
+ "CoefficientPoissonMDB" : "0.3",
+ "TypeConditionLimiteThermique" : "TEMP_IMPO",
+ "Instant_1" : "21.",
+ "Instant_2" : "45.",
+ "DebitAccumule" : "2.3",
+ "DebitInjectionSecurite" : "0.375",
+ "TempInjectionSecurite_mess" : "NON",
+ "DiametreHydraulique" : "0.3816",
+ "DiametreHydraulique_mess" : "NON",
+ "SectionEspaceAnnulaire" : "0.21712",
+ "SectionEspaceAnnulaire_mess" : "NON",
+ "HauteurCaracConvectionNaturelle" : "6.",
+ "HauteurCaracConvectionNaturelle_mess" : "NON",
+ "CritereConvergenceRelative" : "0.00001",
+ "CoefficientsVestale" : "NON",
+ "VolumeMelange_CREARE" : "14.9",
+ "VolumeMelange_CREARE_mess" : "NON",
+ "TemperatureInitiale_CREARE" : "250.",
+ "TemperatureInitiale_CREARE_mess" : "NON",
+ "SurfaceEchange_FluideStructure" : "0.",
+ "SurfaceEchange_FluideStructure_mess" : "NON",
+ }
+
+ # Ce dictionnaire liste la rubrique d'appartenance des variables utilisees dans le script
+ self.bloc = {
+ "NiveauImpression" : "OPTIONS",
+ "FichierDataIn" : "OPTIONS",
+ "FichierTempSigma" : "OPTIONS",
+ "FichierCSV" : "OPTIONS",
+ "FichierCREARE" : "OPTIONS",
+ "GrandeurEvaluee" : "OPTIONS",
+ "IncrementTemporel" : "OPTIONS",
+ "IncrementMaxTemperature" : "OPTIONS",
+ "IncrementMaxTempsAffichage" : "OPTIONS",
+ "TraitementGeometrie" : "DONNEES DE LA CUVE",
+ "RayonInterne" : "DONNEES DE LA CUVE",
+ "RayonInterne_mess" : "DONNEES DE LA CUVE",
+ "RayonExterne" : "DONNEES DE LA CUVE",
+ "RayonExterne_mess" : "DONNEES DE LA CUVE",
+ "EpaisseurRevetement" : "DONNEES DE LA CUVE",
+ "EpaisseurRevetement_mess" : "DONNEES DE LA CUVE",
+ "LigamentExterneMin" : "DONNEES DE LA CUVE",
+ "LigamentExterneMin_mess" : "DONNEES DE LA CUVE",
+ "NombreNoeudsMaillage" : "DONNEES DE LA CUVE",
+ "TypeInitial" : "CARACTERISTIQUES DU DEFAUT",
+ "Orientation" : "CARACTERISTIQUES DU DEFAUT",
+ "ProfondeurRadiale" : "CARACTERISTIQUES DU DEFAUT",
+ "ProfondeurRadiale_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeCalculLongueur" : "CARACTERISTIQUES DU DEFAUT",
+ "Longueur" : "CARACTERISTIQUES DU DEFAUT",
+ "Longueur_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "CoefDirecteur" : "CARACTERISTIQUES DU DEFAUT",
+ "CoefDirecteur_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Constante" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeCalculDecalage" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageNormalise" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageNormalise_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageRadial" : "CARACTERISTIQUES DU DEFAUT",
+ "DecalageRadial_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Azimut" : "CARACTERISTIQUES DU DEFAUT",
+ "Azimut_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Altitude" : "CARACTERISTIQUES DU DEFAUT",
+ "Altitude_mess" : "CARACTERISTIQUES DU DEFAUT",
+ "Pointe" : "CARACTERISTIQUES DU DEFAUT",
+ "ModeleFluence" : "MODELES",
+ "ZoneActiveCoeur_AltitudeSup" : "MODELES",
+ "ZoneActiveCoeur_AltitudeInf" : "MODELES",
+ "FluenceMax" : "MODELES",
+ "KPFrance" : "MODELES",
+ "KPUS" : "MODELES",
+ "Azimut_0deg" : "MODELES",
+ "Azimut_5deg" : "MODELES",
+ "Azimut_10deg" : "MODELES",
+ "Azimut_15deg" : "MODELES",
+ "Azimut_20deg" : "MODELES",
+ "Azimut_25deg" : "MODELES",
+ "Azimut_30deg" : "MODELES",
+ "Azimut_35deg" : "MODELES",
+ "Azimut_40deg" : "MODELES",
+ "Azimut_45deg" : "MODELES",
+ "TypeIrradiation" : "MODELES",
+ "RTNDT" : "MODELES",
+ "ModeleIrradiation" : "MODELES",
+ "TeneurCuivre" : "MODELES",
+ "TeneurCuivre_mess" : "MODELES",
+ "TeneurNickel" : "MODELES",
+ "TeneurNickel_mess" : "MODELES",
+ "TeneurPhosphore" : "MODELES",
+ "TeneurPhosphore_mess" : "MODELES",
+ "MoyenneRTndt" : "MODELES",
+ "MoyenneRTndt_mess" : "MODELES",
+ "CoefVariationRTndt" : "MODELES",
+ "CoefVariationRTndt_mess" : "MODELES",
+ "EcartTypeRTndt" : "MODELES",
+ "EcartTypeRTndt_mess" : "MODELES",
+ "NombreEcartTypeRTndt" : "MODELES",
+ "NombreEcartTypeRTndt_mess" : "MODELES",
+ "ModeleTenacite" : "MODELES",
+ "NBRE_CARACTERISTIQUE" : "MODELES",
+ "NbEcartType_MoyKIc" : "MODELES",
+ "NbEcartType_MoyKIc_mess" : "MODELES",
+ "PalierDuctile_KIc" : "MODELES",
+ "CoefficientVariation_KIc" : "MODELES",
+ "Fractile_KIc" : "MODELES",
+ "Fractile_KIc_mess" : "MODELES",
+ "Temperature_KIc100" : "MODELES",
+ "A1" : "MODELES",
+ "A2" : "MODELES",
+ "A3" : "MODELES",
+ "B1" : "MODELES",
+ "B2" : "MODELES",
+ "B3" : "MODELES",
+ "C1" : "MODELES",
+ "C2" : "MODELES",
+ "C3" : "MODELES",
+ "AttnCorrBeta" : "MODELES",
+ "CorrIrwin" : "MODELES",
+ "ArretDeFissure" : "MODELES",
+ "IncrementTailleFissure" : "MODELES",
+ "IncrementTailleFissure_mess" : "MODELES",
+ "NbEcartType_MoyKIa" : "MODELES",
+ "PalierDuctile_KIa" : "MODELES",
+ "CoefficientVariation_KIa" : "MODELES",
+ "InstantInitialisation" : "ETAT INITIAL",
+ "ConditionLimiteThermiqueREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "TemperatureDeformationNulleREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "TemperaturePourCoefDilatThermREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "CoefficientPoissonREV" : "CARACTERISTIQUES DU REVETEMENT",
+ "ConditionLimiteThermiqueMDB" : "CARACTERISTIQUES DU MDB",
+ "TemperatureDeformationNulleMDB" : "CARACTERISTIQUES DU MDB",
+ "TemperaturePourCoefDilatThermMDB" : "CARACTERISTIQUES DU MDB",
+ "CoefficientPoissonMDB" : "CARACTERISTIQUES DU MDB",
+ "TypeConditionLimiteThermique" : "TRANSITOIRE",
+ "Instant_1" : "TRANSITOIRE",
+ "Instant_2" : "TRANSITOIRE",
+ "DebitAccumule" : "TRANSITOIRE",
+ "DebitInjectionSecurite" : "TRANSITOIRE",
+ "TempInjectionSecurite_mess" : "TRANSITOIRE",
+ "DiametreHydraulique" : "TRANSITOIRE",
+ "DiametreHydraulique_mess" : "TRANSITOIRE",
+ "SectionEspaceAnnulaire" : "TRANSITOIRE",
+ "SectionEspaceAnnulaire_mess" : "TRANSITOIRE",
+ "HauteurCaracConvectionNaturelle" : "TRANSITOIRE",
+ "HauteurCaracConvectionNaturelle_mess" : "TRANSITOIRE",
+ "CritereConvergenceRelative" : "TRANSITOIRE",
+ "CoefficientsVestale" : "TRANSITOIRE",
+ "VolumeMelange_CREARE" : "TRANSITOIRE",
+ "VolumeMelange_CREARE_mess" : "TRANSITOIRE",
+ "TemperatureInitiale_CREARE" : "TRANSITOIRE",
+ "TemperatureInitiale_CREARE_mess" : "TRANSITOIRE",
+ "SurfaceEchange_FluideStructure" : "TRANSITOIRE",
+ "SurfaceEchange_FluideStructure_mess" : "TRANSITOIRE",
+ }
+
def gener(self,obj,format='brut'):
self.text=''
self.textCuve=''
s=PythonGenerator.generMCSIMP(self,obj)
return s
- def writeCuve2DG(self):
+ def writeCuve2DG(self, filename):
print "je passe dans writeCuve2DG"
self.genereTexteCuve()
- f = open( "/tmp/data_template", 'wb')
+ f = open( filename, 'wb')
print self.texteCuve
f.write( self.texteCuve )
f.close()
+ ftmp = open( "/tmp/data_template", 'wb')
+ ftmp.write( self.texteCuve )
+ ftmp.close()
+
+ def entete(self):
+ '''
+ Ecrit l'entete du fichier data_template
+ '''
+ texte = "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ texte += "# OUTIL D'ANALYSE PROBABILISTE DE LA DUREE DE VIE DES CUVES REP"+"\n"
+ texte += "# ---------------"+"\n"
+ texte += "# FICHIER DE MISE EN DONNEES"+"\n"
+ texte += "#"+"\n"
+ texte += "# SI CALCUL DETERMINISTE :"+"\n"
+ texte += "# - fixer INCRTPS=1, nbectDRTNDT=2., nbectKIc=-2."+"\n"
+ texte += "# - les calculs ne sont possibles qu'en une seule pointe du defaut (POINDEF<>BOTH)"+"\n"
+ texte += "# SI CALCUL PROBABILISTE :"+"\n"
+ texte += "# - fixer ARRETFISSURE=NON"+"\n"
+ texte += "#"+"\n"
+ texte += "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def rubrique(self, titre):
+ '''
+ Rubrique
+ '''
+ texte = "#"+"\n"
+ texte += "############################################################################################"+"\n"
+ texte += "# " + titre + "\n"
+ texte += "############################################################################################"+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def sousRubrique(self, soustitre, numtitre):
+ '''
+ Sous-rubrique
+ '''
+ texte = "#"+"\n"
+ texte += "# " + numtitre + soustitre + "\n"
+ texte += "#==========================================================================================="+"\n"
+ texte += "#"+"\n"
+ return texte
+
+ def ecritLigne(self, variablelue):
+ '''
+ Ecrit l'affectation d'une valeur a sa variable, suivie d'un commentaire
+ '''
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], str(self.dico_mot[variablelue]), self.comment[variablelue])
+ return texte
+
+ def affecteValeurDefaut(self, variablelue):
+ '''
+ Affecte une valeur par defaut a une variable, suivie d'un commentaire
+ '''
+ print "Warning ==> Dans la rubrique",self.bloc[variablelue],", valeur par defaut pour ",variablelue," = ",self.default[variablelue]
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], self.default[variablelue], self.comment[variablelue])
+ return texte
+
+ def affecteValeur(self, variablelue, valeuraffectee):
+ '''
+ Affecte une valeur a une variable, suivie d'un commentaire
+ '''
+ texte = "%s = %s # %s\n" % (self.variable[variablelue], valeuraffectee, self.comment[variablelue])
+ return texte
+
+ def ecritVariable(self, variablelue):
+ if self.dico_mot.has_key(variablelue):
+ texte = self.ecritLigne(variablelue)
+ else :
+ texte = self.affecteValeurDefaut(variablelue)
+ return texte
+
+ def amontAval(self, amont, aval):
+ if str(self.dico_mot[amont])=='Continu':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'CC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'CL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'CE'+"\n"
+ if str(self.dico_mot[amont])=='Lineaire':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'LC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'LL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'LE'+"\n"
+ if str(self.dico_mot[amont])=='Exclu':
+ if str(self.dico_mot[aval])=='Continu':
+ texte = 'EC'+"\n"
+ if str(self.dico_mot[aval])=='Lineaire':
+ texte = 'EL'+"\n"
+ if str(self.dico_mot[aval])=='Exclu':
+ texte = 'EE'+"\n"
+ return texte
def genereTexteCuve(self):
- self.texteCuve=""
- self.texteCuve+="############################################################################################"+"\n"
- self.texteCuve+="# OPTIONS : Fichier Option.don"+"\n"
- self.texteCuve+="############################################################################################"+"\n"
- if self.dico_mot.has_key('IncrementTemporel'):
- self.texteCuve+="INCRTPS = "+ str(self.dico_mot["IncrementTemporel"])+"\n"
+ self.texteCuve = ""
+ self.texteCuve += self.entete()
+
+ # Rubrique OPTIONS
+ self.texteCuve += self.rubrique('OPTIONS')
+
+ self.texteCuve += self.sousRubrique('Impression a l ecran', '')
+ if self.dico_mot.has_key('NiveauImpression'):
+ if str(self.dico_mot["NiveauImpression"])=='Aucune impression':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '0')
+ if str(self.dico_mot["NiveauImpression"])=='Temps total':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '1')
+ if str(self.dico_mot["NiveauImpression"])=='Temps intermediaires':
+ self.texteCuve += self.affecteValeur('NiveauImpression', '2')
+
+ self.texteCuve += self.sousRubrique('Generation de fichiers', '')
+ self.texteCuve += self.ecritVariable('FichierDataIn')
+ self.texteCuve += self.ecritVariable('FichierTempSigma')
+ self.texteCuve += self.ecritVariable('FichierCSV')
+ self.texteCuve += self.ecritVariable('FichierCREARE')
+
+ self.texteCuve += self.sousRubrique('Grandeur evaluee', '')
+ if self.dico_mot.has_key('GrandeurEvaluee'):
+ if str(self.dico_mot["GrandeurEvaluee"])=='Facteur de marge KIc/KCP':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'FM_KICSURKCP')
+ if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KI':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KI')
+ if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KCP':
+ self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KCP')
+
+ self.texteCuve += self.sousRubrique('Divers', '')
+ self.texteCuve += self.ecritVariable('IncrementTemporel')
+ self.texteCuve += self.ecritVariable('IncrementMaxTemperature')
+ self.texteCuve += self.ecritVariable('IncrementMaxTempsAffichage')
+ if self.dico_mot.has_key('ListeInstants'):
+ self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+ self.imprime(1,(self.dico_mot["ListeInstants"]))
+ else :
+ print "Warning ==> Dans la rubrique OPTIONS, fournir ListeInstants."
+ self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+ self.texteCuve += " 0.\n"
+ self.texteCuve += " 1.\n"
+
+
+ # Rubrique DONNEES DE LA CUVE
+ self.texteCuve += self.rubrique('DONNEES DE LA CUVE')
+ if self.dico_mot.has_key('TraitementGeometrie'):
+ if str(self.dico_mot["TraitementGeometrie"])=='Topologie':
+ self.texteCuve += self.affecteValeur('TraitementGeometrie', 'GEOMETRIE')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('RayonInterne')
+ self.texteCuve += self.ecritVariable('RayonInterne_mess')
+ self.texteCuve += self.ecritVariable('RayonExterne')
+ self.texteCuve += self.ecritVariable('RayonExterne_mess')
+ self.texteCuve += self.ecritVariable('EpaisseurRevetement')
+ self.texteCuve += self.ecritVariable('EpaisseurRevetement_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('LigamentExterneMin')
+ self.texteCuve += self.ecritVariable('LigamentExterneMin_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+ if str(self.dico_mot["TraitementGeometrie"])=='Maillage':
+ self.texteCuve += self.affecteValeur('TraitementGeometrie', 'MAILLAGE')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+ self.imprime(1,(self.dico_mot["ListeAbscisses"]))
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TraitementGeometrie')
+ self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+ self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+ self.texteCuve+="# (REXT, REXT_MESSAGE),"+"\n"
+ self.texteCuve+="# (LREV, LREV_MESSAGE),"+"\n"
+ self.texteCuve+="# (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+ self.texteCuve+="# NBNO"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('RayonInterne')
+ self.texteCuve += self.affecteValeurDefaut('RayonInterne_mess')
+ self.texteCuve += self.affecteValeurDefaut('RayonExterne')
+ self.texteCuve += self.affecteValeurDefaut('RayonExterne_mess')
+ self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement')
+ self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin')
+ self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('NombreNoeudsMaillage')
+
+
+ # Rubrique CARACTERISTIQUES DU DEFAUT
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU DEFAUT')
+
+ if self.dico_mot.has_key('TypeInitial'):
+ if str(self.dico_mot["TypeInitial"])=='Defaut Sous Revetement':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DSR')
+ if str(self.dico_mot["TypeInitial"])=='Defaut Decale':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DECALE')
+ if str(self.dico_mot["TypeInitial"])=='Defaut Debouchant':
+ self.texteCuve += self.affecteValeur('TypeInitial', 'DEBOUCHANT')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeInitial')
+
+ self.texteCuve+="# Fournir ORIEDEF, (PROFDEF, PROFDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DSR, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST)"+"\n"
+ self.texteCuve+="# - Si DECALE, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST), DECATYP, (DECANOR,DECANOR_MESSAGE) ou (DECADEF,DECADEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DEBOUCHANT, fournir IRWIN"+"\n"
+ self.texteCuve+="# Fournir (ANGLDEF, ANGLDEF_MESSAGE), (ALTIDEF, ALTIDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si DSR ou DECALE, fournir POINDEF"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Remarque :"+"\n"
+ self.texteCuve+="# - si DSR ou DECALE, dans la rubrique 'Modele de tenacite', fournir ATTNCORRBETA (ne pas fournir CORRIRWIN)"+"\n"
+ self.texteCuve+="# - si DEBOUCHANT, dans la rubrique 'Modele de tenacite', fournir CORRIRWIN (ne pas fournir ATTNCORRBETA)"+"\n"
+
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('Orientation'):
+ if str(self.dico_mot["Orientation"])=='Longitudinale':
+ self.texteCuve += self.affecteValeur('Orientation', 'LONGITUD')
+ if str(self.dico_mot["Orientation"])=='Circonferentielle':
+ self.texteCuve += self.affecteValeur('Orientation', 'CIRCONF')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('Orientation')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('ProfondeurRadiale')
+ self.texteCuve += self.ecritVariable('ProfondeurRadiale_mess')
+
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeCalculLongueur'):
+ if str(self.dico_mot["ModeCalculLongueur"])=='Valeur':
+ self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'VALEUR')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.ecritVariable('Longueur')
+ self.texteCuve += self.ecritVariable('Longueur_mess')
+ if str(self.dico_mot["ModeCalculLongueur"])=='Fonction affine de la profondeur':
+ self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'FCTAFFINE')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.ecritVariable('CoefDirecteur')
+ self.texteCuve += self.ecritVariable('CoefDirecteur_mess')
+ self.texteCuve += self.ecritVariable('Constante')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeCalculLongueur')
+ self.texteCuve+="# - Si VALEUR, fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('Longueur')
+ self.texteCuve += self.affecteValeurDefaut('Longueur_mess')
+
+ if self.dico_mot.has_key('TypeInitial'):
+ if str(self.dico_mot["TypeInitial"])!='Defaut Sous Revetement':
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeCalculDecalage'):
+ if str(self.dico_mot["ModeCalculDecalage"])=='Valeur normalisee':
+ self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'NORMALISE')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.ecritVariable('DecalageNormalise')
+ self.texteCuve += self.ecritVariable('DecalageNormalise_mess')
+ if str(self.dico_mot["ModeCalculDecalage"])=='Valeur':
+ self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'VALEUR')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.ecritVariable('DecalageRadial')
+ self.texteCuve += self.ecritVariable('DecalageRadial_mess')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeCalculDecalage')
+ self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('DecalageRadial')
+ self.texteCuve += self.affecteValeurDefaut('DecalageRadial_mess')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('Azimut')
+ self.texteCuve += self.ecritVariable('Azimut_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('Altitude')
+ self.texteCuve += self.ecritVariable('Altitude_mess')
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('Pointe'):
+ if str(self.dico_mot["Pointe"])=='A':
+ self.texteCuve += self.affecteValeur('Pointe', 'A')
+ if str(self.dico_mot["Pointe"])=='B':
+ self.texteCuve += self.affecteValeur('Pointe', 'B')
+ if str(self.dico_mot["Pointe"])=='A et B':
+ self.texteCuve += self.affecteValeur('Pointe', 'BOTH')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('Pointe')
+
+ # Rubrique MODELES FLUENCE, IRRADIATION, TENACITE
+ self.texteCuve += self.rubrique('MODELES FLUENCE, IRRADIATION, TENACITE')
+ self.texteCuve += self.sousRubrique('Modele d attenuation de la fluence dans l epaisseur','A.')
+
+ if self.dico_mot.has_key('ModeleFluence'):
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'Reglementaire')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'France')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=0. (ValeurImposee)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'ValeurImposee')
+ if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY (SDM)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM')
+ if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'USNRC')
+ if str(self.dico_mot["ModeleFluence"])=='Dossier 900 MWe AP9701 rev 2 (REV_2)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'REV_2')
+ if str(self.dico_mot["ModeleFluence"])=='Lissage du modele ajuste (SDM_Lissage)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM_Lissage')
+ if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'GrandeDev')
+ if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'GD_Cuve')
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)':
+ self.texteCuve += self.affecteValeur('ModeleFluence', 'Cuve1D')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleFluence')
+
+ self.texteCuve+="# - si France, fournir KPFRANCE"+"\n"
+ self.texteCuve+="# - si USNRC, fournir KPUS"+"\n"
+ self.texteCuve+="# - si modele GD_Cuve, fournir COEFFLUENCE1, COEFFLUENCE2, ..., COEFFLUENCE9, COEFFLUENCE10"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeSup')
+ self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeInf')
+ self.texteCuve += self.ecritVariable('FluenceMax')
+ if self.dico_mot.has_key('ModeleFluence'):
+ if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+ self.texteCuve += self.ecritVariable('KPFrance')
+ if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+ self.texteCuve += self.ecritVariable('KPUS')
+ if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+ self.texteCuve += self.ecritVariable('Azimut_0deg')
+ self.texteCuve += self.ecritVariable('Azimut_5deg')
+ self.texteCuve += self.ecritVariable('Azimut_10deg')
+ self.texteCuve += self.ecritVariable('Azimut_15deg')
+ self.texteCuve += self.ecritVariable('Azimut_20deg')
+ self.texteCuve += self.ecritVariable('Azimut_25deg')
+ self.texteCuve += self.ecritVariable('Azimut_30deg')
+ self.texteCuve += self.ecritVariable('Azimut_35deg')
+ self.texteCuve += self.ecritVariable('Azimut_40deg')
+ self.texteCuve += self.ecritVariable('Azimut_45deg')
+
+ self.texteCuve += self.sousRubrique('Irradiation','B.')
+
+ if self.dico_mot.has_key('TypeIrradiation'):
+
+ if str(self.dico_mot["TypeIrradiation"])=='RTndt de la cuve a l instant de l analyse':
+ self.texteCuve += self.affecteValeur('TypeIrradiation', 'RTNDT')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('RTNDT')
+
+ if str(self.dico_mot["TypeIrradiation"])=='Modele d irradiation':
+ self.texteCuve += self.affecteValeur('TypeIrradiation', 'FLUENCE')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeleIrradiation'):
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'HOUSSIN')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'PERSOZ')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'LEFEBVRE')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCmdb')
+ if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'BRILLAUD')
+ if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCsoud')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleIrradiation')
+ self.texteCuve+="# - pour tout modele, fournir (CU, CU_MESSAGE),"+"\n"
+ self.texteCuve+="# (NI, NI_MESSAGE),"+"\n"
+ self.texteCuve+="# - si HOUSSIN, PERSOZ, LEFEBVRE, BRILLAUD, fournir (P, P_MESSAGE)"+"\n"
+ self.texteCuve+="# - pour tout modele, fournir (RTimoy, RTimoy_MESSAGE),"+"\n"
+ self.texteCuve+="# - si USNRCsoud ou USNRCmdb, fournir (RTicov, RTicov_MESSAGE)"+"\n"
+ self.texteCuve+="# (USectDRT, USectDRT_MESSAGE)"+"\n"
+ self.texteCuve+="# - pour tout modele, fournir (nbectDRTNDT, nbectDRTNDT_MESSAGE)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TeneurCuivre')
+ self.texteCuve += self.ecritVariable('TeneurCuivre_mess')
+ self.texteCuve += self.ecritVariable('TeneurNickel')
+ self.texteCuve += self.ecritVariable('TeneurNickel_mess')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+ self.texteCuve += self.ecritVariable('TeneurPhosphore')
+ self.texteCuve += self.ecritVariable('TeneurPhosphore_mess')
+ self.texteCuve += self.ecritVariable('MoyenneRTndt')
+ self.texteCuve += self.ecritVariable('MoyenneRTndt_mess')
+ if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+ self.texteCuve += self.ecritVariable('CoefVariationRTndt')
+ self.texteCuve += self.ecritVariable('CoefVariationRTndt_mess')
+ self.texteCuve += self.ecritVariable('EcartTypeRTndt')
+ self.texteCuve += self.ecritVariable('EcartTypeRTndt_mess')
+ self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt')
+ self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt_mess')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeIrradiation')
+ self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+ self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.affecteValeurDefaut('RTNDT')
+
+ self.texteCuve += self.sousRubrique('Modele de tenacite','C.')
+ self.texteCuve+="# tenacite d amorcage"+"\n"
+
+ if self.dico_mot.has_key('ModeleTenacite'):
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2 CUVE1D':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_simpl')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Houssin_RC')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_pal')
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI~exponentiel':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_exp')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Wallin')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'REME')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'ORNL')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB2')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB3')
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB-GEN')
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'Frama')
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)':
+ self.texteCuve += self.affecteValeur('ModeleTenacite', 'LOGWOLF')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('ModeleTenacite')
+ self.texteCuve+="# - si RCC-M, RCC-M_pal, Houssin_RC, fournir (nbectKIc, nbectKIc_MESSAGE), KICPAL, KICCDV"+"\n"
+ self.texteCuve+="# - si RCC-M_exp, fournir (nbectKIc, nbectKIc_MESSAGE), KICCDV"+"\n"
+ self.texteCuve+="# - si RCC-M_simpl, ne rien fournir"+"\n"
+ self.texteCuve+="# - si Frama, LOGWOLF, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+ self.texteCuve+="# - si REME, ORNL, WEIB3, WEIB2, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC"+"\n"
+ self.texteCuve+="# - si Wallin, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+ self.texteCuve+="# puis T0WALLIN"+"\n"
+ self.texteCuve+="# - si WEIB-GEN, fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+ self.texteCuve+="# puis A1, A2, A3, B1, B2, B3, C1, C2, C3"+"\n"
+ self.texteCuve+="# loi de Weibull P(K<x) = 1 - exp{-[ (x-a(T)) / b(T) ]^c(T) }"+"\n"
+ self.texteCuve+="# avec a(T) = A1 + A2*exp[A3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="# b(T) = B1 + B2*exp[B3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="# c(T) = C1 + C2*exp[C3*(T-RTNDT)]"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ModeleTenacite'):
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' :
+ self.texteCuve += self.ecritVariable('NBRE_CARACTERISTIQUE')
+ self.texteCuve+="# - Si CARAC = QUANTILE, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+ self.texteCuve+="# - Si CARAC = ORDRE, fournir (fractKIc, fractKIc_MESSAGE)"+"\n"
+
+ if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+ self.texteCuve += self.ecritVariable('PalierDuctile_KIc')
+ self.texteCuve += self.ecritVariable('CoefficientVariation_KIc')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)' or str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' or str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+ if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='QUANTILE' :
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+ if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='ORDRE' :
+ self.texteCuve += self.ecritVariable('Fractile_KIc')
+ self.texteCuve += self.ecritVariable('Fractile_KIc_mess')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' :
+ self.texteCuve += self.ecritVariable('Temperature_KIc100')
+
+ if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee' :
+ self.texteCuve += self.ecritVariable('A1')
+ self.texteCuve += self.ecritVariable('A2')
+ self.texteCuve += self.ecritVariable('A3')
+ self.texteCuve += self.ecritVariable('B1')
+ self.texteCuve += self.ecritVariable('B2')
+ self.texteCuve += self.ecritVariable('B3')
+ self.texteCuve += self.ecritVariable('C1')
+ self.texteCuve += self.ecritVariable('C2')
+ self.texteCuve += self.ecritVariable('C3')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc')
+ self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc_mess')
+ self.texteCuve += self.affecteValeurDefaut('PalierDuctile_KIc')
+ self.texteCuve += self.affecteValeurDefaut('CoefficientVariation_KIc')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Correction plastique"+"\n"
+
+ if self.dico_mot.has_key('CorrectionPlastique'):
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA (pour DSR et defaut decale)':
+ self.texteCuve += self.affecteValeur('AttnCorrBeta','NON')
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA attenuee (pour DSR et defaut decale)':
+ self.texteCuve += self.affecteValeur('AttnCorrBeta','OUI')
+ if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique IRWIN (pour defaut debouchant)':
+ self.texteCuve += self.affecteValeur('CorrIrwin','OUI')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('AttnCorrBeta')
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Prise en compte de l'arret de fissure si DETERMINISTE"+"\n"
+
+ self.texteCuve += self.ecritVariable('ArretDeFissure')
+ self.texteCuve+="# - si ARRETFISSURE=OUI, fournir (INCRDEF, INCRDEF_MESSAGE), nbectKIa, KIAPAL, KIACDV"+"\n"
+ if self.dico_mot.has_key('ArretDeFissure'):
+ if str(self.dico_mot["ArretDeFissure"])=='OUI':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('IncrementTailleFissure')
+ self.texteCuve += self.ecritVariable('IncrementTailleFissure_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Parametres pour le calcul de la tenacite a l arret"+"\n"
+ self.texteCuve += self.ecritVariable('NbEcartType_MoyKIa')
+ self.texteCuve += self.ecritVariable('PalierDuctile_KIa')
+ self.texteCuve += self.ecritVariable('CoefficientVariation_KIa')
+
+ # Rubrique Etat initial
+ self.texteCuve += self.rubrique('ETAT INITIAL')
+
+ self.texteCuve+="# Profil radial de la temperature initiale dans la cuve"+"\n"
+ self.texteCuve+="# abscisse (m) / temp initiale dans la cuve"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ if self.dico_mot.has_key('ProfilRadial_TemperatureInitiale'):
+ self.imprime(2,(self.dico_mot["ProfilRadial_TemperatureInitiale"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureInitiale','Aval_TemperatureInitiale')
+ else :
+ self.texteCuve+=" 1.9940 287."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Profils radiaux des contraintes residuelles dans la cuve"+"\n"
+ self.texteCuve+="# abscisse (m) / sigma rr / sigma tt / sigma zz"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ if self.dico_mot.has_key('ProfilRadial_ContraintesInitiales'):
+ self.imprime(4,(self.dico_mot["ProfilRadial_ContraintesInitiales"]))
+ self.texteCuve += self.amontAval('Amont_ContraintesInitiales','Aval_ContraintesInitiales')
+ else :
+ self.texteCuve+="1.994 0. 0. 0."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Instant initial"+"\n"
+ self.texteCuve += self.ecritVariable('InstantInitialisation')
+
+ # Rubrique CARACTERISTIQUES DU REVETEMENT
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU REVETEMENT')
+
+ self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueREV')
+ self.texteCuve+="# - si CHALEUR, fournir Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="# - si ENTHALPIE, fournir Temperature (degC) / enthalpie (J/kg)"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+ if self.dico_mot.has_key('ChaleurREV_Fct_Temperature'):
+ self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.imprime(2,(self.dico_mot["ChaleurREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ChaleurREV','Aval_ChaleurREV')
+ elif self.dico_mot.has_key('EnthalpieREV_Fct_Temperature'):
+ self.texteCuve+="# Temperature (degC) / enthalpie (J/kg)"+"\n"
+ self.imprime(2,(self.dico_mot["EnthalpieREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_EnthalpieREV','Aval_EnthalpieREV')
+ else :
+ self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="0. 36.03E5 "+"\n"
+ self.texteCuve+="20. 36.03E5 "+"\n"
+ self.texteCuve+="200. 41.65E5 "+"\n"
+ self.texteCuve+="350. 43.47E5 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / conductivite thermique (W/m/degC)"+"\n"
+ if self.dico_mot.has_key('ConductiviteREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ConductiviteREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ConductiviteREV','Aval_ConductiviteREV')
+ else :
+ self.texteCuve+="0. 14.7 "+"\n"
+ self.texteCuve+="20. 14.7 "+"\n"
+ self.texteCuve+="200. 17.2 "+"\n"
+ self.texteCuve+="350. 19.3 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / module d'Young (MPa)"+"\n"
+ if self.dico_mot.has_key('ModuleYoungREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ModuleYoungREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ModuleYoungREV','Aval_ModuleYoungREV')
+ else :
+ self.texteCuve+="0. 198500. "+"\n"
+ self.texteCuve+="20. 197000. "+"\n"
+ self.texteCuve+="200. 184000. "+"\n"
+ self.texteCuve+="350. 172000. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / coefficient de dilatation thermique (degC-1)"+"\n"
+ if self.dico_mot.has_key('CoeffDilatThermREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["CoeffDilatThermREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_CoeffDilatThermREV','Aval_CoeffDilatThermREV')
+ else :
+ self.texteCuve+="0. 16.40E-6 "+"\n"
+ self.texteCuve+="20. 16.40E-6 "+"\n"
+ self.texteCuve+="200. 17.20E-6 "+"\n"
+ self.texteCuve+="350. 17.77E-6 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / limite d'elasticite (MPa)"+"\n"
+ if self.dico_mot.has_key('LimiteElasticiteREV_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["LimiteElasticiteREV_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_LimiteElasticiteREV','Aval_LimiteElasticiteREV')
+ else :
+ self.texteCuve+="0. 380. "+"\n"
+ self.texteCuve+="20. 370. "+"\n"
+ self.texteCuve+="100. 330. "+"\n"
+ self.texteCuve+="300. 270. "+"\n"
+ self.texteCuve+="LL"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureDeformationNulleREV')
+ self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermREV')
+ self.texteCuve += self.ecritVariable('CoefficientPoissonREV')
+
+ # Rubrique CARACTERISTIQUES DU METAL DE BASE
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU METAL DE BASE')
+
+ self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueMDB')
+
+ self.texteCuve+="# - si CHALEUR, fournir Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="# - si ENTHALPIE, fournir Temperature (degC) / enthalpie (J/kg)"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('ChaleurMDB_Fct_Temperature'):
+ self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.imprime(2,(self.dico_mot["ChaleurMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ChaleurMDB','Aval_ChaleurMDB')
+ elif self.dico_mot.has_key('EnthalpieMDB_Fct_Temperature'):
+ self.texteCuve+="# Temperature (degC) / enthalpie (J/kg)"+"\n"
+ self.imprime(2,(self.dico_mot["EnthalpieMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_EnthalpieMDB','Aval_EnthalpieMDB')
+ else :
+ self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+ self.texteCuve+="0. 34.88E+05 "+"\n"
+ self.texteCuve+="20. 34.88E+05 "+"\n"
+ self.texteCuve+="200. 40.87E+05 "+"\n"
+ self.texteCuve+="350. 46.02E+05 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / conductivite thermique (W/m/degC)"+"\n"
+ if self.dico_mot.has_key('ConductiviteMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ConductiviteMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_ConductiviteMDB','Aval_ConductiviteMDB')
+ else :
+ self.texteCuve+="0. 37.7 "+"\n"
+ self.texteCuve+="20. 37.7 "+"\n"
+ self.texteCuve+="200. 40.5 "+"\n"
+ self.texteCuve+="350. 38.7 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / module d'Young (MPa)"+"\n"
+ if self.dico_mot.has_key('ModuleYoungMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["ModuleYoungMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Aval_ModuleYoungMDB','Aval_ModuleYoungMDB')
+ else :
+ self.texteCuve+="0. 205000. "+"\n"
+ self.texteCuve+="20. 204000. "+"\n"
+ self.texteCuve+="200. 193000. "+"\n"
+ self.texteCuve+="350. 180000. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Temperature (degC) / coefficient de dilatation thermique (degC-1)"+"\n"
+ if self.dico_mot.has_key('CoeffDilatThermMDB_Fct_Temperature'):
+ self.imprime(2,(self.dico_mot["CoeffDilatThermMDB_Fct_Temperature"]))
+ self.texteCuve += self.amontAval('Amont_CoeffDilatThermMDB','Aval_CoeffDilatThermMDB')
+ else :
+ self.texteCuve+="0. 11.22E-6 "+"\n"
+ self.texteCuve+="20. 11.22E-6 "+"\n"
+ self.texteCuve+="200. 12.47E-6 "+"\n"
+ self.texteCuve+="350. 13.08E-6 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureDeformationNulleMDB')
+ self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermMDB')
+ self.texteCuve += self.ecritVariable('CoefficientPoissonMDB')
+
+ # Rubrique CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE
+ self.texteCuve += self.rubrique('CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE')
+ self.texteCuve += self.sousRubrique('Chargement mecanique : transitoire de pression','')
+
+ self.texteCuve+="# instant (s) / pression (MPa)"+"\n"
+ self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
if self.dico_mot.has_key('ProfilTemporel_Pression'):
self.imprime(2,(self.dico_mot["ProfilTemporel_Pression"]))
-
+ self.texteCuve += self.amontAval('Amont_Pression','Aval_Pression')
+ else :
+ self.texteCuve+="0. 15.5 "+"\n"
+ self.texteCuve+="20. 0.1 "+"\n"
+ self.texteCuve+="200. 0.1 "+"\n"
+ self.texteCuve+="1000. 0.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve += self.sousRubrique('Chargement thermo-hydraulique','')
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_IMPO')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'FLUX_REP')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'ECHANGE')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'DEBIT')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_FLU')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'APRP')
+ else :
+ self.texteCuve += self.affecteValeurDefaut('TypeConditionLimiteThermique')
+
+ self.texteCuve+="# - si TEMP_IMPO, fournir Instant (s) / Temperature imposee (degC)"+"\n"
+ self.texteCuve+="# - si FLUX_REP, fournir Instant (s) / Flux de chaleur impose (W/m2)"+"\n"
+ self.texteCuve+="# - si ECHANGE, fournir Instant (s) / Temperature impose (degC)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+ self.texteCuve+="# - si DEBIT, fournir Instant (s) / Debit massique (kg/s)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Temperature d injection de securite (degC)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# puis Modele CREARE : (VM, VM_MESSAGE), (T0, T0_MESSAGE), (SE, SE_MESSAGE)"+"\n"
+ self.texteCuve+="# - si TEMP_FLU, fournir Instant (s) / Temperature du fluide (degC)"+"\n"
+ self.texteCuve+="# puis Instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# - si APRP, fournir INSTANT1, INSTANT2, QACCU, QIS"+"\n"
+ self.texteCuve+="# puis TIS_MESSAGE"+"\n"
+ self.texteCuve+="# puis Instant (s) / Temperature du fluide (degC) tel que dans l'exemple ci-dessous"+"\n"
+ self.texteCuve+="# 0. 286."+"\n"
+ self.texteCuve+="# 12. 20. # 1er palier à T=TACCU"+"\n"
+ self.texteCuve+="# 20. 20. # idem que ci-dessus"+"\n"
+ self.texteCuve+="# 21. 18. # 2nd palier à T=T1 : sera remplace par nouvelle valeur calculee par fonction idoine"+"\n"
+ self.texteCuve+="# 45. 18. # idem que ci-dessus"+"\n"
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="# 46. 9999999999. # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ else :
+ self.texteCuve+="# 46. %INLET-TIS% # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ else :
+ self.texteCuve+="# 46. %INLET-TIS% # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+ self.texteCuve+="# 1870. 9999999999. # idem que ci-dessus"+"\n"
+ self.texteCuve+="# 1871. 80."+"\n"
+ self.texteCuve+="# 3871. 80."+"\n"
+ self.texteCuve+="# puis Instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ self.texteCuve+="# puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+ self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+ self.texteCuve+="#"+"\n"
+
+ if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Definition de parametres pour le cas d un transitoire APRP"+"\n"
+ self.texteCuve += self.ecritVariable('Instant_1')
+ self.texteCuve += self.ecritVariable('Instant_2')
+ self.texteCuve += self.ecritVariable('DebitAccumule')
+ self.texteCuve += self.ecritVariable('DebitInjectionSecurite')
+ self.texteCuve += self.ecritVariable('TempInjectionSecurite_mess')
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / temperature imposee du fluide (degC)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_TemperatureImposeeFluide'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureImposeeFluide"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureImposeeFluide','Aval_TemperatureImposeeFluide')
+ else :
+ self.texteCuve+="0. 286. "+"\n"
+ self.texteCuve+="20. 20. "+"\n"
+ self.texteCuve+="200. 7. "+"\n"
+ self.texteCuve+="1000. 80. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / flux de chaleur impose (W/m2)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_FluxChaleur'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_FluxChaleur"]))
+ self.texteCuve += self.amontAval('Amont_FluxChaleur','Aval_FluxChaleur')
+ self.texteCuve+="#"+"\n"
+ else :
+ self.texteCuve+="0. -0. "+"\n"
+ self.texteCuve+="20. -366290. "+"\n"
+ self.texteCuve+="200. -121076. "+"\n"
+ self.texteCuve+="1000. -56372."+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Debit d injection de securite (kg/s)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_DebitInjection'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_DebitInjection"]))
+ self.texteCuve += self.amontAval('Amont_DebitInjection','Aval_DebitInjection')
+ else :
+ self.texteCuve+="0. 4590. "+"\n"
+ self.texteCuve+="20. 4590. "+"\n"
+ self.texteCuve+="200. 340. "+"\n"
+ self.texteCuve+="1000. 31.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_CoefficientEchange'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_CoefficientEchange"]))
+ self.texteCuve += self.amontAval('Amont_CoefficientEchange','Aval_CoefficientEchange')
+ else :
+ self.texteCuve+="0. 138454. "+"\n"
+ self.texteCuve+="20. 19972. "+"\n"
+ self.texteCuve+="200. 2668. "+"\n"
+ self.texteCuve+="1000. 2668. "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Debit massique (kg/s)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_DebitMassique'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_DebitMassique"]))
+ self.texteCuve += self.amontAval('Amont_DebitMassique','Aval_DebitMassique')
+ else :
+ self.texteCuve+="0. 18.4 "+"\n"
+ self.texteCuve+="20. 18.4 "+"\n"
+ self.texteCuve+="200. 31.1 "+"\n"
+ self.texteCuve+="1000. 31.1 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / Temperature d injection de securite (degC)"+"\n"
+ if self.dico_mot.has_key('ProfilTemporel_TemperatureInjection'):
+ self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureInjection"]))
+ self.texteCuve += self.amontAval('Amont_TemperatureInjection','Aval_TemperatureInjection')
+ else :
+ self.texteCuve+="0. 7.0 "+"\n"
+ self.texteCuve+="20. 7.0 "+"\n"
+ self.texteCuve+="200. 7.0 "+"\n"
+ self.texteCuve+="1000. 7.0 "+"\n"
+ self.texteCuve+="CC"+"\n"
+
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Transitoire des coefficients d echange : modele VESTALE"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('DiametreHydraulique')
+ self.texteCuve += self.ecritVariable('DiametreHydraulique_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire')
+ self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle')
+ self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('CritereConvergenceRelative')
+ self.texteCuve += self.ecritVariable('CoefficientsVestale')
+ if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# Transitoire de temperature fluide locale : modele CREARE"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('VolumeMelange_CREARE')
+ self.texteCuve += self.ecritVariable('VolumeMelange_CREARE_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE')
+ self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE_mess')
+ self.texteCuve+="#"+"\n"
+ self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure')
+ self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure_mess')
+ else :
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="# instant (s) / temperature imposee du fluide (degC)"+"\n"
+ self.texteCuve+="0. 286. "+"\n"
+ self.texteCuve+="20. 20. "+"\n"
+ self.texteCuve+="200. 7. "+"\n"
+ self.texteCuve+="1000. 80. "+"\n"
+ self.texteCuve+="CC"+"\n"
+ self.texteCuve+="#"+"\n"
+ self.texteCuve+="############################################################################################"+"\n"
+
def imprime(self,nbdeColonnes,valeur):
self.liste=[]
--- /dev/null
+# 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
+
+from generator_python import PythonGenerator
+
+
+def entryPoint():
+ """
+ Return a dictionary containing the description needed to load the plugin
+ """
+ return {'name' : 'file_from_template',
+ 'factory' : FileFromTemplateGenerator}
+
+
+class FileFromTemplateGenerator(PythonGenerator):
+ """
+ This generator creates an output file from a template (file with holes) in
+ addition to Eficas .comm file. The parts to replace in the template must be
+ in the form %KEYWORD%, where KEYWORD may be either the name of the Eficas
+ element (short form, for instance MY_MCSIMP) or the "path" to the Eficas
+ element (long form, for instance MYPROC.MYBLOC.MY_MCSIMP).
+
+ To use this generator, the configuration of the code must implement two
+ methods: get_extension() that must return the extension of the output file
+ and get_template_file() that must return the path of the template file. Be
+ sure also that your catalog is coherent with your template file.
+ """
+
+ def gener(self, obj, format = 'brut', config = None):
+ self.config = config
+ self.kw_dict = {}
+ self.text = PythonGenerator.gener(self, obj, format)
+ self.generate_output_from_template()
+ return self.text
+
+ def generate_output_from_template(self) :
+ """
+ Generate the output text from the template file and the keywords
+ """
+ templateFileName = self.config.get_template_file()
+ if not os.path.isfile(templateFileName):
+ raise Exception("Template file %s does not exist." %
+ templateFileName)
+ f = file(templateFileName, "r")
+ template = f.read()
+ f.close()
+ self.output_text = self.replace_keywords(template)
+
+ def generMCSIMP(self, obj) :
+ """
+ Save object value in the keyword dict for further use, then generate
+ the text corresponding to the MCSIMP element.
+ """
+ short_keyword = obj.nom.strip()
+ long_keyword = ""
+ for i in obj.get_genealogie()[:-1]:
+ long_keyword += i + "."
+ long_keyword += short_keyword
+ self.kw_dict[short_keyword] = obj.valeur
+ self.kw_dict[long_keyword] = obj.valeur
+ return PythonGenerator.generMCSIMP(self, obj)
+
+ def replace_keywords(self, template_string):
+ result = template_string
+ for item in self.kw_dict.iteritems():
+ replace_str = "%" + item[0] + "%"
+ result = result.replace(replace_str, str(item[1]))
+ return result
+
+ def writeDefault(self, basefilename):
+ output_filename = os.path.splitext(basefilename)[0] + \
+ self.config.get_extension()
+ f = open(output_filename, 'w')
+ f.write(self.output_text)
+ f.close()
self.dico_mot_depend['CCSolN__'] ='self.dico_mot_clef.has_key("NITER")'
self.dico_mot_depend['CCSolNP1'] ='self.dico_mot_clef.has_key("NITER")'
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
self.text=PythonGenerator.gener(self,obj,format)
self.genereConfiguration()
return self.text
fp.write(self.text)
fp.close()
- def gener(self,obj):
+ def gener(self,obj,config=None):
"""
Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
Tous les mots-clés facteurs sont convertis en sections
--- /dev/null
+# -*- coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur de fichier au format
+ SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_python import PythonGenerator
+
+
+def entryPoint():
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 'MAP',
+ # La factory pour creer une instance du plugin
+ 'factory' : MapGenerator,
+ }
+
+
+class MapGenerator(PythonGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+ # Les extensions de fichier permis?
+ extensions=('.map',)
+
+
+ def initialise(self,config):
+ self.config=config
+ self.nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
+ if not( os.path.exists(self.nom_racine)):
+ os.makedirs(self.nom_racine)
+ self.listeCODE=[]
+ self.text=""
+ self.textCode=""
+ self.texteExecution=""
+ self.ssCode=self.config.appli.ssCode
+
+ def verifie(self):
+ print 'verification generique'
+
+ def gener(self,obj,format='brut',config=None):
+ print 'generation dans generator_map'
+ self.initialise(config)
+ text=PythonGenerator.gener(self,obj,format)
+ self.verifie()
+ self.generePythonMap("non")
+ return text
+
+ def generRUN(self,obj,format='brut',config=None,):
+ print 'generRUN dans generator_map'
+ self.initialise(config)
+ text=PythonGenerator.gener(self,obj,format)
+ self.verifie()
+ self.generePythonMap("oui")
+ return self.texteExecution
+
+
+ def generRUNYACS(self,obj,format='brut',config=None,nomFichier=None):
+ self.initialise(config)
+ text=PythonGenerator.gener(self,obj,format)
+ import sys
+ sys.path.append('/local/noyret/Salome_5.1.3/Install/YACS/lib/python2.5/site-packages/salome/')
+ self.verifie()
+ import monCreateYacs
+ self.monSchema=monCreateYacs.getSchema(config)
+ self.proc=self.monSchema.createProc()
+ for elt in self.listeCODE:
+ code=elt.keys()[0]
+ dico=elt[code]
+ if code in self.__class__.__dict__.keys():
+ codeYACS=str(code)+"YACS"
+ if hasattr(self.monSchema, codeYACS):
+ fct=getattr(self.monSchema, codeYACS)
+ fct(self.proc,dico)
+ self.monSchema.write_yacs_proc(self.proc,str(nomFichier))
+
+ def generePythonMap(self,execution) :
+ '''
+ self.dictMCVal est un dictionnaire qui est indexe par le nom du code (exple PYGMEE)
+ la valeur associee a la clef est egalement un dictionnaire
+ ce dictionnaire a pour clef la genealogie du MCSimp suivi de sa valeur
+
+ '''
+ for elt in self.listeCODE:
+ code=elt.keys()[0]
+ dico=elt[code]
+ self.dictMCVal={}
+ self.dictMCVal[code]=dico
+ if code in self.__class__.__dict__.keys():
+ texteCode=apply(self.__class__.__dict__[code],(self,execution))
+ self.texteExecution=self.texteExecution+texteCode
+
+ def generPROC_ETAPE(self,obj):
+ clefDico=obj.nom
+ self.DictTemp={}
+ s=PythonGenerator.generPROC_ETAPE(self,obj)
+ dico={}
+ dico[obj.nom]=self.DictTemp
+ self.listeCODE.append(dico)
+ return s
+
+
+ def generMCSIMP(self,obj) :
+ """
+ Convertit un objet MCSIMP en texte python
+ Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
+ """
+ s=PythonGenerator.generMCSIMP(self,obj)
+ clef=""
+ for i in obj.get_genealogie() :
+ clef=clef+"_"+i
+ self.DictTemp[clef]=obj.valeur
+ return s
+
+
+ def remplaceCONFIG(self,chaine,liste) :
+ for mot in liste :
+ rplact="%_"+mot+"%"
+ result=chaine.replace(rplact,self.config.__dict__[mot])
+ chaine=result
+ return chaine
+
+ def remplaceDICO(self,chaine,dico) :
+ for mot in dico.keys() :
+ rplact="%"+mot+"%"
+ result=chaine.replace(rplact,str(dico[mot]))
+ chaine=result
+ return chaine
+
self.dictTempo={}
self.TraiteMCSIMP=1
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
#print "IDM: gener dans generator_openturns.py"
self.initDico()
self.text=PythonGenerator.gener(self,obj,format)
"""
s=PythonGenerator.generMCSIMP(self,obj)
if self.TraiteMCSIMP == 1 :
- self.dictMCVal[obj.nom]=obj.val
+ self.dictMCVal[obj.nom]=obj.valeur
else :
self.dictTempo[obj.nom]=obj.valeur
return s
sys.exit(1)
"""
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
print "IDM: gener dans generator_openturns_study.py"
self.initDico()
self.text=PythonGenerator.gener(self,obj,format)
"""
s=PythonGenerator.generMCSIMP(self,obj)
if self.TraiteMCSIMP == 1 :
- self.dictMCVal[obj.nom]=obj.val
+ self.dictMCVal[obj.nom]=obj.valeur
else :
self.dictTempo[obj.nom]=obj.valeur
return s
def genereSTD(self):
print "IDM: genereSTD dans generator_openturns_study.py"
print "IDM: self.listeVariables=", self.listeVariables
- MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
- MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
+ MonGenerateur=self.getGenerateur()
#try :
if 1== 1 :
self.texteSTD=MonGenerateur.CreeSTD()
f.write( self.texteSTD )
f.close()
-
+ def getGenerateur (self):
+ print "IDM: getGenerateur dans generator_openturns_study.py"
+ print "IDM: self.dictMCVal=", self.dictMCVal
+ print "IDM: self.listeVariables=", self.listeVariables
+ print "IDM: self.dictMCLois=", self.dictMCLois
+ MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
+ MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
+ return MonGenerateur
"""
self.wrapperXML=None
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
#print "IDM: gener dans generator_openturns_wrapper.py"
self.initDico()
self.text=PythonGenerator.gener(self,obj,format)
Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
"""
s=PythonGenerator.generMCSIMP(self,obj)
+ if not( type(obj.valeur) in (list, tuple)) and (obj.get_min_max()[1] != 1):
+ valeur=(obj.valeur,)
+ else :
+ valeur=obj.valeur
if self.traiteMCSIMP == 1 :
- self.dictMCVal[obj.nom]=obj.val
+ self.dictMCVal[obj.nom]=valeur
else :
- self.dictTempo[obj.nom]=obj.valeur
+ self.dictTempo[obj.nom]=valeur
return s
def generETAPE(self,obj):
def generMCFACT(self,obj):
# Il n est pas possible d utiliser obj.valeur qui n est pas
# a jour pour les nouvelles variables ou les modifications
- #print "generMCFACT" , obj.nom
if obj.nom in ( "Files", ) :
self.traiteMCSIMP=0
self.dictTempo={}
return s
def genereXML(self):
- #print "IDM: genereXML dans generator_openturns_wrapper.py"
+ print "IDM: genereXML dans generator_openturns_wrapper.py"
#print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__
if self.listeFichiers != [] :
self.dictMCVal["Files"]=self.listeFichiers
fp.write(self.text)
fp.close()
- def gener(self,obj,format='standard'):
+ def gener(self,obj,format='standard',config=None):
"""
Tous les mots-clés simples du niveau haut sont transformés en variables
fp.write(self.text)
fp.close()
- def gener(self,obj,format='brut'):
+ def gener(self,obj,format='brut',config=None):
"""
Retourne une représentation du JDC obj sous une
forme qui est paramétrée par format.
elif isinstance(obj,Formula):
return self.generFormula(obj)
else:
- raise "Type d'objet non prévu",obj
+ raise "Type d'objet non prevu",obj
def generJDC(self,obj):
"""
# ou la notation scientifique
s = str(valeur)
clefobj=etape.get_sdname()
- if self.appli and self.appli.dict_reels.has_key(clefobj):
- if self.appli.dict_reels[clefobj].has_key(valeur):
- s=self.appli.dict_reels[clefobj][valeur]
+ if self.appli.appliEficas and self.appli.appliEficas.dict_reels.has_key(clefobj):
+ if self.appli.appliEficas.dict_reels[clefobj].has_key(valeur):
+ s=self.appli.appliEficas.dict_reels[clefobj][valeur]
elif type(valeur) == types.StringType :
if valeur.find('\n') == -1:
# pas de retour chariot, on utilise repr
Convertit un objet MCSIMP en une liste de chaines de caractères à la
syntaxe python
"""
+ waitTuple=0
if type(obj.valeur) in (types.TupleType,types.ListType) :
s = ''
- for val in obj.valeur :
- s =s +self.format_item(val,obj.etape) + ','
- if len(obj.valeur) > 1:
- s = '(' + s + '),'
+ for ss_type in obj.definition.type:
+ if repr(ss_type).find('Tuple') != -1 :
+ waitTuple=1
+ break
+
+ if waitTuple :
+ s = str(obj.valeur) +','
+ else :
+ for val in obj.valeur :
+ s =s +self.format_item(val,obj.etape) + ','
+ if len(obj.valeur) > 1:
+ s = '(' + s + '),'
if obj.nbrColonnes() :
s=self.formatColonnes(obj.nbrColonnes(),s)
else :
#else :
textformat=text
return textformat
-
-
--- /dev/null
+# -* coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur de fichier au format
+ SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+#____________________________________________________________________________________
+# Liste des mots cles de config remplaces dans les fichiers à trous
+#
+CONFIGliste=('NAME_SCHEME', 'PATH_ASTER', 'PATH_BENHUR', 'PATH_MODULE', 'PATH_PYGMEE', 'PATH_STUDY', 'repIni', 'PATH_FDVGRID' ,'PATH_GMSH')
+
+#_____________________________________________________________________
+# Attention les variables suivantes sont nécessaires entre les codes :
+# finesse et taille
+
+def entryPoint():
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 's_poly_st_1',
+ # La factory pour creer une instance du plugin
+ 'factory' : s_poly_st_1Generator,
+ }
+
+
+class s_poly_st_1Generator(MapGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+
+ def verifie(self):
+ self.ssRepertoire=self.config.appli.readercata.fic_cata.split("/")[-1].split(".")[0]
+ liste=[]
+ for i in self.listeCODE:
+ liste.append(i.keys()[0])
+ if len(liste) != len(set(liste)):
+ raise AsException("il n'est pas prevu d avoir deux fois le meme code dans ce schema")
+
+
+ def PYGMEE(self,execution) :
+ #--------------------------------------------------------------------
+ # utilisation d un fichier a trous pour generer le fichier de l etude
+
+ # on recupere les valeurs de PYGMEE
+ # qui seront utilisés par d autres codes
+ # en particulier Benhur et Aster
+ dicoPygmee=self.dictMCVal["PYGMEE"]
+ self.taillePYGMEE=dicoPygmee['_PYGMEE_TAILLE']
+
+ monFichierInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/pygmee_input_template.txt"
+ monFichierOutput=self.nom_racine+"/pygmee_input.txt"
+
+ f = file(monFichierInput,"r")
+ chaine = f.read()
+ f.close()
+
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoPygmee)
+
+ if os.path.isfile(monFichierOutput) :
+ print "je detruis pygmee_input.txt"
+ commande="rm -rf " + monFichierOutput
+ os.system (commande)
+ f=open(monFichierOutput,'wb')
+ f.write(chaine)
+ f.close()
+
+ if execution=="non" : return ""
+
+ if ('_PYGMEE_LANCEMENT' in dicoPygmee.keys()) and dicoPygmee['_PYGMEE_LANCEMENT'] == 'oui':
+ commande="echo '__________________';\n"
+ commande=commande + "echo 'execution de PYGMEE';\n"
+ commande=commande + "cd "+self.nom_racine+";\n"
+ commande=commande + "python "+self.config.PATH_PYGMEE+"/pygmee_v1.py;\n"
+ commande=commande + "echo 'fin execution de PYGMEE';\n"
+ commande=commande + "echo '_____________________';\n\n\n"
+ return commande
+ else:
+ return ""
+
+ def BENHUR(self,execution) :
+ #--------------------------------------------------------------------
+ #
+ dicoBenhur=self.dictMCVal["BENHUR"]
+ if hasattr(self,'taillePYGMEE'):
+ dicoBenhur["_PYGMEE_TAILLE"]=self.taillePYGMEE
+ else :
+ dicoBenhur["_PYGMEE_TAILLE"]=0
+ print "Attention la variable Taille_VER non definie"
+
+ finesse=str(dicoBenhur["_BENHUR_FINESSE"])
+ self.finesseBENHUR=finesse
+
+ #Lecture du fichier a trous
+ monFichierInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/benhur_pygmee_template.txt"
+ monFichierOutput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_benhur_"+finesse+".bhr"
+ f = file(monFichierInput)
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoBenhur)
+ f=open(monFichierOutput,'wb')
+ f.write(chaine)
+ f.close()
+
+ nom_BHR_Files=self.config.PATH_BENHUR+"/BHR_files.txt"
+ f=open(nom_BHR_Files,'wb')
+ f.write(monFichierOutput)
+ f.write("\n\n\n")
+ f.close()
+
+ if execution=="non" : return ""
+ if ('_BENHUR_LANCEMENT' in dicoBenhur.keys()) and dicoBenhur['_BENHUR_LANCEMENT'] == 'oui':
+ commande="echo '__________________';\n"
+ commande=commande + "echo 'execution de BENHUR';\n"
+ commande=commande + "cd "+self.config.PATH_BENHUR+";\n"
+ commande=commande + "./benhur;\n"
+ commande=commande + "echo 'fin execution de BENHUR';\n"
+ commande=commande + "echo '________________________';\n\n\n"
+ return commande
+ else:
+ return ""
+
+
+ def ASTER(self,execution) :
+ #--------------------------------------------------------------------
+ # utilisation de deux fichiers a trous pour generer les .comm et .export
+ print "Generation de ASTER"
+ dicoAster=self.dictMCVal["ASTER"]
+
+ try :
+ dicoAster["_PYGMEE_TAILLE"]=self.taillePYGMEE
+ except :
+ print "Necessite de definir PYGMEE"
+ try :
+ dicoAster["_BENHUR_FINESSE"]=self.finesseBENHUR
+ except :
+ print "Necessite de definir BENHUR"
+
+ monFichierCommOutput=self.nom_racine+"s_poly_st_1_aster.comm"
+ monFichierExportOutput=self.nom_racine+"s_poly_st_1_aster.export"
+ self.monFichierMSH=self.nom_racine+"/"+self.config.NAME_SCHEME+"_aster.resu.msh"
+
+ monFichierCommInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/s_poly_st_1_aster_template.comm"
+ monFichierExportInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/s_poly_st_1_aster_template.export"
+
+ #Lecture du fichier a trous a pour le fichier export
+ f = file(monFichierExportInput)
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoAster)
+ f=open(monFichierExportOutput,'wb')
+ f.write(chaine)
+ f.close()
+
+ #Lecture du fichier a trous a pour le fichier comm
+ f = file(monFichierCommInput)
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoAster)
+ f=open(monFichierCommOutput,'wb')
+ f.write(chaine)
+ f.close()
+
+ if ('_ASTER_LANCEMENT' in dicoAster.keys()) and dicoAster['_ASTER_LANCEMENT'] == 'oui':
+ commande="cd "+self.config.PATH_MODULE+";"
+ commande=commande + self.config.PATH_ASTER + "bin/as_run "+monFichierExportOutput +";\n"
+ return commande
+ else:
+ return ""
+
+ def FDVGRID(self,execution) :
+ #--------------------------------------------------------------------
+ #
+ dicoFdvgrid=self.dictMCVal["FDVGRID"]
+ if execution=="non" : return ""
+ fichierInput=self.config.PATH_FDVGRID+'../user/boules_15_B11_2024.txt'
+ chaine="%_PATH_FDVGRID%/fdvgrid %_FDVGRID_DIMENSION% %_FDVGRID_DIFFUSION_COMPOX% %_FDVGRID_DIFFUSION_COMPOY% "
+ chaine=chaine +"%_FDVGRID_DIFFUSION_COMPOZ% %_FDVGRID_FORMULATION% %_FDVGRID_CL% "
+ chaine=chaine +"%_FDVGRID_DISCRET% %_FDVGRID_SOLVER% %_FDVGRID_RESIDU%"
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoFdvgrid)
+ return chaine
+ # ./fdvgrid 3D 1.0 0.0 0.0 v t 100 cross 1.e-4
+
+
+ def GMSH(self,execution) :
+ dicoGmsh=self.dictMCVal["GMSH"]
+ if ('_GMSH_LANCEMENT' in dicoGmsh.keys()) and dicoGmsh['_GMSH_LANCEMENT'] == 'oui':
+ commande=self.config.PATH_GMSH+"/gmsh "
+ commande=commande + self.monFichierMSH+";\n"
+ return commande
+ else:
+ return ""
+
+
--- /dev/null
+# -* coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur de fichier au format
+ SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+#____________________________________________________________________________________
+# PYGMEEDict contient une equivalence entre le catalogue Map et les lignes generees
+# comme entete (commentaire ?) dans le fichier d'input de pygmee
+#
+
+CONFIGliste=('NAME_SCHEME', 'PATH_ASTER', 'PATH_BENHUR', 'PATH_MODULE', 'PATH_PYGMEE', 'PATH_STUDY', 'repIni')
+PYGMEEDict={
+ "_PYGMEE_FUSEAU1_b_forme_FICHIER" : "#fuseau 1 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant ",
+ "FUSEAU2" : "#fuseau 2 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant",
+ "_PYGMEE_TAILLE" : "# taille du VER en microns ",
+ "_PYGMEE_DISTANCE" : "# distance de repulsion :",
+ }
+
+#_______________________________________________________________________________________________________
+# listeOrdonneeMCPygmee contient une liste (donc ordonnee) des mots clefs pour
+# imposer l'ordre des lignes generees
+listeOrdonneeMCPygmee =('_PYGMEE_FUSEAU1_b_forme_FICHIER', 'FUSEAU2', '_PYGMEE_TAILLE','_PYGMEE_DISTANCE')
+
+
+BENHURDict={
+ "_BENHUR_FINESSE" : "discretisation des arretes du VER ",
+ }
+
+ASTERDict={
+ "_ASTER_LANCEMENT" : "execution de Code_Aster",
+ "_ASTER_CONDUCTIVITE_I" : "conductivite des inclusions",
+ "_ASTER_CONDUCTIVITE_M" : "conductivite de la matrice",
+ }
+
+GMSHDict={
+ "_GMSH_LANCEMENT" : "execution de GMSH",
+ }
+
+def entryPoint():
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 's_polymers_st_1',
+ # La factory pour creer une instance du plugin
+ 'factory' : s_poly_st_1Generator,
+ }
+
+
+class s_poly_st_1Generator(MapGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+
+ def verifie(self):
+ liste=[]
+ for i in self.listeCODE:
+ liste.append(i.keys()[0])
+ if len(liste) != len(set(liste)):
+ raise AsException("il n'est pas prevu d avoir deux fois le meme code dans ce schema")
+
+
+ def PYGMEE(self,execution) :
+ dicoPygmee=self.dictMCVal["PYGMEE"]
+ self.dictPYGMEE=dicoPygmee
+ monFichier=self.config.PATH_PYGMEE+"/pygmee_input.txt"
+
+ #Lecture du fichier a trous
+ f = file(self.config.repIni+"/pygmee_input.txt","r")
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoPygmee)
+
+ if os.path.isfile(monFichier) :
+ print "je detruis pygmee_input.txt"
+ commande="rm -rf " + monFichier
+ os.system (commande)
+ f=open(monFichier,'wb')
+ f.write(chaine)
+ f.close()
+ if execution=="non" : return ""
+
+ if ('_PYGMEE_LANCEMENT' in dicoPygmee.keys()) and dicoPygmee['_PYGMEE_LANCEMENT'] == 'oui':
+ commande="echo '__________________';\n"
+ commande=commande + "echo 'execution de PYGMEE';\n"
+ commande=commande + "cd "+self.config.PATH_PYGMEE+";\n"
+ commande=commande + "python "+self.config.PATH_PYGMEE+"/pygmee_v1.py;\n"
+ commande=commande + "echo 'fin execution de PYGMEE';\n"
+ commande=commande + "echo '_____________________';\n\n\n"
+ return commande
+ else:
+ return ""
+
+ def BENHUR(self,execution) :
+ dicoBenhur=self.dictMCVal["BENHUR"]
+ if hasattr(self,'dictPYGMEE') and '_PYGMEE_TAILLE' in self.dictMCVal['PYGMEE']:
+ dicoBenhur["_PYGMEE_TAILLE"]=self.dictPYGMEE['_PYGMEE_TAILLE']
+ else :
+ dicoBenhur["_PYGMEE_TAILLE"]=0
+ print "Attention la variable Taille_VER non definie"
+
+ finesse=str(dicoBenhur["_BENHUR_FINESSE"])
+ nom_fichier_BHR=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"_benhur_"+finesse+".bhr"
+ nom_BHR_Files=self.config.PATH_BENHUR+"/BHR_files.txt"
+
+ #Lecture du fichier a trous
+ f = file(self.config.repIni+"/benhur_pygmee.txt","r")
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+ chaine=self.remplaceDICO(chaine2,dicoBenhur)
+
+ try :
+ f=open(nom_fichier_BHR,'wb')
+ except :
+ print "Pb de Generation de BENHUR"
+ return ""
+ f.write(chaine)
+ f.close()
+
+ f=open(nom_BHR_Files,'wb')
+ f.write(nom_fichier_BHR)
+ f.write("\n\n\n")
+ f.close()
+
+ if execution=="non" : return ""
+ if ('_BENHUR_LANCEMENT' in dicoBenhur.keys()) and dicoBenhur['_BENHUR_LANCEMENT'] == 'oui':
+ commande="echo '__________________';\n"
+ commande=commande + "echo 'execution de BENHUR';\n"
+ commande=commande + "cd "+self.config.PATH_BENHUR+";\n"
+ commande=commande + "./benhur;\n"
+ commande=commande + "echo 'fin execution de BENHUR';\n"
+ commande=commande + "echo '________________________';\n\n\n"
+ return commande
+ else:
+ return ""
+
+
+
+ def ASTER(self,execution) :
+ print "Generation de ASTER"
+ dicoAster=self.dictMCVal["ASTER"]
+ nom_racine=self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME
+ nom_fichier_ASTER=nom_racine+"_aster.comm"
+
+ #Lecture du fichier a trous
+ f = file(self.config.repIni+"/s_poly_st_1_aster_template.comm","r")
+ chaine = f.read()
+ f.close()
+ chaine2=self.remplaceDICO(chaine,self.dictPYGMEE)
+ chaine=self.remplaceDICO(chaine2,dicoAster)
+
+ f=open(nom_fichier_ASTER,'wb')
+ f.write(chaine)
+ f.close()
+
+ if ('_ASTER_LANCEMENT' in dicoAster.keys()) and dicoAster['_ASTER_LANCEMENT'] == 'oui':
+ commande="cd "+self.config.PATH_MODULE+";"
+ commande=commande + self.config.PATH_ASTER + "/as_run "+self.config.PATH_MODULE
+ commande=commande + "/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.export"
+ os.system(commande)
+ else:
+ return ""
+
+ def GMSH(self,execution) :
+ dicoGmsh=self.dictMCVal["GMSH"]
+ if ('_GMSH_LANCEMENT' in dicoGmsh.keys()) and dicoGmsh['_GMSH_LANCEMENT'] == 'oui':
+ commande="cd "+self.config.PATH_MODULE+";"
+ commande=commande + "gmsh "+self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.resu.msh"
+ print commande
+ os.system(commande)
+ else:
+ return ""
+
+ def METHODE(self,execution) :
+ print "METHODE"
+ return ""
+
+ def MATERIAUX(self,execution) :
+ print "MATERIAUX"
+ return ""
+
+ def DISCRETISATION(self,execution) :
+ print "DISCRETISATION"
+ return ""
--- /dev/null
+# -* coding: utf-8 -*-
+# 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.
+#
+#
+# ======================================================================
+"""
+ Ce module contient le plugin generateur de fichier au format
+ SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+import sys
+sys.path.append('/local00/bin/MAP/classes/python/')
+try :
+ from class_MAP_parameters import *
+except :
+ pass
+
+dico_post={"analyse statistique classique":("c_post_distribution_properties","PDF"),
+"analyse statistique de la qualite":("",""),
+"analyse de la dispersion suivant la distance au joint":("c_post_distribution_properties","dgb"),
+"analyse de la dispersion suivant la distance a la pointe de fissure":("",""),
+"visualisation dans le triangle standard":("","")}
+
+def entryPoint():
+ """
+ Retourne les informations necessaires pour le chargeur de plugins
+
+ Ces informations sont retournees dans un dictionnaire
+ """
+ return {
+ # Le nom du plugin
+ 'name' : 's_scc_st_2',
+ # La factory pour creer une instance du plugin
+ 'factory' : s_scc_st_2Generator,
+ }
+
+
+class s_scc_st_2Generator(MapGenerator):
+ """
+ Ce generateur parcourt un objet de type JDC et produit
+ un texte au format eficas et
+ un texte au format py
+
+ """
+
+ def TABLEAU(self,execution):
+ dico=self.dictMCVal["TABLEAU"]
+ self.file_in_name=dico['_TABLEAU_FICHIER']
+ return ""
+
+ def TRAITEMENT(self, execution):
+ dico=self.dictMCVal["TRAITEMENT"]
+ post=dico['_TRAITEMENT_TYPE']
+ variable=dico['_TRAITEMENT_VARIABLE']
+ composant=dico_post[post][0]
+ maDirectory=self.config.PATH_MAP+'/components/'+composant+'/'
+ monFichier=self.config.PATH_STUDY+'/'+composant+'_'+dico_post[post][1]+'_'+variable+'.input'
+
+ parameter=MAP_parameters()
+ parameter.add_component(composant)
+ parameter.add_parameter(composant, 'file_in_name', self.file_in_name)
+ parameter.add_parameter(composant, 'variable_name', variable)
+ parameter.add_parameter(composant, 'post', dico_post[post][1])
+ parameter.add_parameter(composant, 'study_name', self.config.appli.ssCode)
+ parameter.add_parameter(composant, 'study_path', self.config.PATH_STUDY)
+ parameter.write(monFichier)
+
+ command='cd '+maDirectory+'src/'+'\n'+'python '+composant+'.py -i '+monFichier+';'
+ print "command = ", command
+ if (execution=="oui") :
+ return command
+
+ return ""
"BARRE", "CABLE", "CARA", "COQUE", "EPAIS",
"EXCENTREMENT", "GROUP_MA", "ORIENTATION",
"POUTRE", "SECTION", "VALE", "VARI_SECT",
- "GRILLE", "ANGL_REP",
+ "GRILLE", "ANGL_REP", "VECTEUR",
"b_constant", "b_homothetique",
"b_rectangle", "b_affine", "b_cercle" )
self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
"CERCLE":"Cercle"}
- self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais"}
+ self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
self.init_ligne()
self.commande = ""
self.dict_attributs = {}
- def gener(self,node):
+ def gener(self,node,config=None):
"""
"""
self.node=node
self.list_commandes=[];
self.generator(self.node.object)
+ #print self.list_commandes
return self.list_commandes
def generator(self,obj):
self.dict_attributs["axeX"]=alpha
self.dict_attributs["axeY"]=beta
self.dict_attributs["axeZ"]=gamma
-
--- /dev/null
+#!/usr/bin/env python
+
+import pilot
+import SALOMERuntime
+import loader
+import logging
+import traceback
+import os
+
+class CreeSchemaYacs :
+ def __init__(self,config):
+ print "dans le init de CreeSchemaYacs "
+ self.config=config
+ self.ssCode=config.appli.ssCode
+ self.setUp()
+ self.addCatalog()
+ self.nodeAvant=None
+
+ def setUp(self):
+ SALOMERuntime.RuntimeSALOME_setRuntime()
+ self.runtime = pilot.getRuntime()
+ self.loader = loader.YACSLoader()
+ self.loader.registerProcCataLoader()
+
+ def addCatalog(self):
+ try:
+ monCataFile= os.environ["EFICAS_ROOT_DIR"]
+ monCataFile=monCataFile+"/share/salome/resources/eficas/cata"
+ monCataFile=monCataFile+self.ssCode+".xml"
+ print monCataFile
+ self.monCata = self.runtime.loadCatalog("proc",monCataFile)
+ except:
+ logging.fatal("Exception in loading MAP catalog")
+ traceback.print_exc()
+ sys.exit(1)
+
+ def createProc(self):
+ proc = self.runtime.createProc("proc")
+ proc.setTypeCode("pyobj", self.runtime.getTypeCode("pyobj"))
+ t_pyobj = proc.getTypeCode("pyobj")
+ t_string = proc.getTypeCode("string")
+ return proc
+
+ def write_yacs_proc(self,proc, yacs_schema_filename):
+ proc.saveSchema(yacs_schema_filename)
+
+class s_poly_st_1(CreeSchemaYacs) :
+
+ def BENHURYACS(self,proc,dico):
+ monFichierInput=self.config.PATH_BENHUR+"/BHR_files.txt"
+ factoryNode = self.monCata._nodeMap["benhur"]
+ self.benhurNode = factoryNode.cloneNode("benhur")
+ self.benhurNode.getInputPort("fileInput").edInitPy(monFichierInput)
+ self.benhurNode.getInputPort("pathBenhur").edInitPy(self.config.PATH_BENHUR)
+ proc.edAddChild(self.benhurNode)
+ if self.nodeAvant != None :
+ proc.edAddCFLink(self.nodeAvant,self.benhurNode)
+ self.nodeAvant=self.benhurNode
+
+ def PYGMEEYACS(self,proc,dico):
+ monFichierInput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/pygmee_input.txt"
+ factoryNode = self.monCata._nodeMap["pygmee"]
+ self.pygmeeNode = factoryNode.cloneNode("pygmee")
+ self.pygmeeNode.getInputPort("pathPygmee").edInitPy(self.config.PATH_PYGMEE)
+ self. pygmeeNode.getInputPort("fileInput").edInitPy(monFichierInput)
+ proc.edAddChild(self.pygmeeNode)
+ if self.nodeAvant != None :
+ proc.edAddCFLink(self.nodeAvant,self.pygmeeNode)
+ self.nodeAvant=self.pygmeeNode
+
+ def ASTERYACS(self,proc,dico):
+ factoryNode = self.monCata._nodeMap["asterRun"]
+ self.asterNode = factoryNode.cloneNode("asterRun")
+ nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
+ monFichierExport=nom_racine+"s_poly_st_1_aster.export"
+ monFichierMed=nom_racine+"s_poly_st_1_aster.resu.med"
+ self.asterNode.getInputPort("pathAster").edInitPy(self.config.PATH_ASTER+"/bin")
+ self.asterNode.getInputPort("fileExport").edInitPy(monFichierExport)
+ self.asterNode.getInputPort("fileMed").edInitPy(monFichierMed)
+
+ proc.edAddChild(self.asterNode)
+ if self.nodeAvant != None :
+ proc.edAddCFLink(self.nodeAvant,self.asterNode)
+ self.nodeAvant=self.asterNode
+
+dictKlass={'s_poly_st_1':s_poly_st_1}
+def getSchema(config):
+ schema=config.appli.ssCode
+ return dictKlass[schema](config)
+
+
+if __name__ == "__main__":
+ monCreator=getSchema('s_poly_st_1')
+ proc=monCreator.createProc()
+ monCreator.ajoutPygmee(proc)
+ monCreator.ajoutBenhur(proc)
+ monCreator.write_yacs_proc(proc,"/tmp/toto.xml")
+