Salome HOME
legere difference ds VARIABLES_TO_BE...
[tools/eficas.git] / Carmel3D / Carmel3D_Cata_V0.py
1 # -*- coding: utf-8 -*-
2 # --------------------------------------------------
3 # Copyright (C) 2007-2013   EDF R&D
4 #
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
9 #
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #
21 # --------------------------------------------------
22
23 import os
24 import sys
25 from Accas import *
26 import types
27 from decimal import Decimal
28 # repertoire ou sont stockés le catalogue carmel3d 
29 # et les fichiers de donnees des materiaux de reference
30 from prefs_CARMEL3D import repIni
31
32 #print "catalogue carmel"
33 #print "repIni = ", repIni
34
35 # Version du catalogue
36 VERSION_CATA = "2.3.1 for harmonic problems"
37 # --------------------------------------------------
38 # definition d une classe pour les materiaux
39 # definition d une classe pour les sources
40 # definition d une classe pour les groupes de mailles
41 # --------------------------------------------------
42 class material ( ASSD ) : pass
43 class source   ( ASSD ) : pass
44 class grmaille ( ASSD ) : pass
45
46 #CONTEXT.debug = 1
47 # --------------------------------------------------
48 # déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
49 #---------------------------------------------------
50
51 JdC = JDC_CATA ( code = 'CARMEL3D',
52 #                execmodul = None,
53                  regles =(
54                            AU_MOINS_UN ('MATERIAL','INCLUDE'),
55                            ENSEMBLE ('SOURCE','MESHGROUP'),
56                            ),
57                  ) # Fin JDC_CATA
58 ##=========================================================
59 # création d'une macro pour traiter les INCLUDE
60 #
61 #----------------------------------------------------------
62
63 import opsCarmel
64 INCLUDE = MACRO ( nom = "INCLUDE",
65                  op = None,
66                  UIinfo = { "groupes" : ( "Gestion du travail", ) },
67                  sd_prod = opsCarmel.INCLUDE,
68                  op_init = opsCarmel.INCLUDE_context,
69                  fichier_ini = 1,
70  
71    FileName = SIMP ( statut = "o",
72                     typ = ('Fichier', 'comm Files (*.comm);;All Files (*)',),
73                      fr = u"bibliothèque des matériaux",
74                     ang = "material library file",
75                      ),
76   
77  ) # Fin MACRO 
78
79 # --------------------------------------------------
80 # definition de groupe de mailles
81 # il est associe a un  materiau ou a une source
82 #---------------------------------------------------
83
84 MESHGROUP     = OPER (nom = "MESHGROUP",
85                     op = None,
86                 repetable = 'n',
87                     UIinfo= {"groupes":("Definition",)},
88             fr= u"attribution d'un matériau ou d'une source à un groupe du maillage", 
89             ang = "mesh group association to material or source", 
90                     sd_prod= grmaille,
91                     regles =(
92                              EXCLUS ('MATERIAL','SOURCE'),
93                            ),
94
95 # ----------------------------------------------------------
96 # le mot cle SIMP doit etre facultatif sinon la recuperation 
97 # des groupes de mailles sous SALOME ne fonctionne pas car 
98 # le concept ne peut pas etre nomme car non valide
99 #-----------------------------------------------------------
100               MATERIAL =  SIMP (statut="f",
101                          typ=(material,),
102                                  ang="name of the linked material",
103                          fr =u"nom du matériau associé",
104                                 ), 
105               SOURCE =  SIMP (statut="f",
106                          typ=(source,),
107                                  ang="name of the linked source",
108                          fr =u"nom de la source associée",
109                                 ), 
110                       )
111
112
113 #======================================================================
114 # le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
115
116 #======================================================================
117 # 1er bloc : bloc VERSION
118 # ce bloc est volontairement cache dans l IHM 
119 #===================================================
120
121 VERSION = PROC ( nom = "VERSION",
122                         op = None,
123                 repetable = 'n',
124                         UIinfo= {"groupes":("CACHE",)},
125                         ang= "version block definition", 
126
127 #----------------------
128 # Liste des parametres
129 #----------------------
130         
131    NUM      = SIMP (statut="o",
132                     typ="I",
133             defaut=1, 
134                     ang="version number of the physical model", 
135                     into=( 1,),
136                    ),
137    FILETYPE = SIMP (statut="o",
138                     typ="TXM",
139             defaut="PHYS", 
140                     ang="file type",
141                     into=( "PHYS",),
142                    ),
143
144 ) # Fin PROC VERSION
145
146 #===================================================================
147 # 2eme bloc : bloc MATERIALS
148 #===================================================================
149 # definition des matériaux utilisateurs 
150 # a partir des materiaux de reference ou de materiaux generiques
151 #-------------------------------------------------------------------
152 #
153 MATERIAL = OPER (nom = "MATERIAL",
154                  op = None,
155                  repetable = 'n',
156                  ang= "material block definition", 
157                  fr= u"définition d'un matériau", 
158                  sd_prod= material,
159                  regles=EXCLUS('PERMITTIVITY','CONDUCTIVITY'),
160
161 #---------------------------------------------------------------------
162 # liste des matériaux de reference fournis par THEMIS et  des
163 # materiaux generiques (les materiaux generiques peuvent etre utilises 
164 # si aucun materiau de reference  ne convient) 
165 #---------------------------------------------------------------------
166 # debut commentaire PN pour que le fichier materiaux soit valide
167 #                 TYPE = SIMP(statut='o',
168                  MAT_REF = SIMP(statut='f',
169                              typ='TXM',
170                              into=(
171 #  matériaux génériques 
172                                  "DIELECTRIC",
173                                  "CONDUCTOR",
174                                  "ZINSULATOR","ZSURFACIC",
175                                  "NILMAT","EM_ISOTROPIC","EM_ANISOTROPIC",
176                              ),
177                              ang = "generic materials list",
178                              fr  = u"liste des matériaux génériques",
179                             ),
180
181 ##############################################################################
182 # Remarque generale a tous les materiaux : 
183 # pour conserver l'affichage scientifique le nombre derriere l'exposant doit
184 # etre strictement superieur au nombre de decimales 
185 #
186
187 ##----------------------------------------------------------------------------------------------
188 # Données de perméabilité, utilisée pour les diélectriques, conducteurs et impédances de surface
189 #-----------------------------------------------------------------------------------------------
190   #HAS_PERMEABILITY = BLOC(condition="TYPE in ('DIELECTRIC','CONDUCTOR','ZSURFACIC')",
191
192 #------------------------------------------------
193 # sous bloc niveau 2 : PERMEABILITY
194 #------------------------------------------------
195 #
196   PERMEABILITY = FACT ( statut="f", 
197                         ang ="Permeability properties",
198                         fr  =u"propriétés de perméabilité du matériau",
199                         HOMOGENEOUS = SIMP (statut="o",
200                                             typ="TXM",
201                                             defaut="TRUE",
202                                             into = ("TRUE","FALSE"),
203                                             ang = "the material is homogeneous or not",
204                                             fr  = u"le matériau est homogène ou non",
205                                            ),
206                         ISOTROPIC = SIMP (statut="o",
207                                           typ="TXM",
208                                           defaut="TRUE",
209                                           into = ("TRUE","FALSE"),
210                                           ang = "the material is isotropic or not",
211                                           fr  = u"le matériau est isotrope ou non",
212                                          ),
213                    HOMOGENEOUS_ISOTROPIC_PROPERTIES = BLOC (condition="HOMOGENEOUS=='TRUE' and ISOTROPIC=='TRUE'",
214                         TYPE_LAW = SIMP (statut="o",
215                                     typ="TXM",
216                                     defaut="LINEAR_REAL",
217                                     into = ("LINEAR_REAL","NONLINEAR"),
218                                     ang = "harmonic or time-domain linear or nonlinear law only for homogeneous and isotropic materials",
219                                     fr  = u"loi linéaire (fréquentielle ou temporelle) ou non (homogène et isotrope seulement)",
220                                    ), 
221                         VALUE = SIMP (statut="o",
222                                       typ="C", 
223                                       defaut=('RI',1,0),
224                                       ang = "Relative linear permeability value, also used at first nonlinear iteration",
225                                       fr = u"Valeur de la perméabilité relative à l'air utilisée pour une loi linéaire ou pour la première itération non-linéaire",
226                                      ),
227                     NONLINEAR_LAW_PROPERTIES = BLOC (condition="LAW=='NONLINEAR'",
228                         NATURE = SIMP (statut="o",
229                                        typ="TXM",
230                                        defaut="MARROCCO",
231                                        into = ("SPLINE","MARROCCO","MARROCCO+SATURATION"),
232                                        ang = "nature law",
233                                        fr  = u"nature de la loi",
234                                       ),
235                      SPLINE_LAW_PROPERTIES = BLOC (condition="NATURE=='SPLINE'",
236                         FILENAME = SIMP (statut="o", 
237                                          typ=("FichierNoAbs",'All Files (*)',), # l'existence du fichier n'est pas vérifiée
238                                          ang="data file name",
239                                          fr =u"nom du fichier contenant les mesures expérimentales B(H)",
240                                         ),
241                      ), # Fin BLOC SPLINE_PROPERTIES
242                      MARROCCO_LAW_PROPERTIES = BLOC (condition="NATURE in ('MARROCCO','MARROCCO+SATURATION')",
243                         ALPHA = SIMP (statut="o", 
244                                       typ="R",
245                                       defaut=0,
246                                       val_min=0,
247                                       ang="alpha parameter",
248                                       fr =u"paramètre alpha de la loi de Marrocco" ,
249                                      ),
250                         TAU = SIMP (statut="o", 
251                                     typ="R",
252                                     defaut=0,
253                                     val_min=0,
254                                     ang="tau parameter",
255                                     fr =u"paramètre tau de la loi de Marrocco" ,
256                                    ),
257                         C = SIMP (statut="o", 
258                                   typ="R",
259                                   defaut=0,
260                                   val_min=0,
261                                   ang="c parameter",
262                                   fr =u"paramètre c de la loi de Marrocco" ,
263                                  ),
264                         EPSILON = SIMP (statut="o", 
265                                         typ="R",
266                                         defaut=0,
267                                         val_min=0,
268                                         ang="epsilon parameter",
269                                         fr =u"paramètre epsilon de la loi de Marrocco" ,
270                                        ),
271                      ), # Fin BLOC MARROCCO_LAW_PROPERTIES
272                      SATURATION_LAW_PROPERTIES = BLOC (condition="NATURE=='MARROCCO+SATURATION'",
273                         BMAX = SIMP (statut="o", 
274                                      typ="R",
275                                      defaut=0,
276                                      val_min=0,
277                                      ang="intersection B",
278                                      fr = u"valeur de B marquant la fin de la loi de Marrocco et le début du raccord à la loi de saturation",
279                                     ),
280                         HSAT = SIMP (statut="o", 
281                                      typ="R",
282                                      defaut=0,
283                                      val_min=0,
284                                      ang="H value",
285                                      fr = u"valeur de H définissant la loi de saturation",
286                                     ),
287                         BSAT = SIMP (statut="o", 
288                                      typ="R",
289                                      defaut=0,
290                                      val_min=0,
291                                      ang="B value",
292                                      fr = u"valeur de B définissant la loi de saturation",
293                                     ),
294                         JOIN = SIMP (statut="o", 
295                                      typ="TXM",
296                                      defaut="SPLINE",
297                                      into= ("SPLINE","PARABOLIC","LINEAR"),
298                                      ang="type of join between laws",
299                                      fr =u"type de raccord entre la loi choisie et la loi de saturation" ,
300                                     ),
301                      ), # Fin BLOC SATURATION_LAW_PROPERTIES
302                         APPLIEDTO = SIMP (statut="o",    
303                                           typ="TXM",   
304                                           into=("B(H)&H(B)","B(H)","H(B)"),
305                                           defaut="B(H)&H(B)",
306                                           ang="join applied to",
307                                           fr =u"Le raccord tel que défini est appliqué à la courbe B(H) seulement, à la courbe H(B) seulement ou aux deux courbes à la fois. Dans les deux premiers cas, le raccord de la courbe H(B) est inversé numériquement à partir du raccord défini pour la courbe B(H), et vice-versa.",
308                                          ),
309                     ), # Fin BLOC NONLINEAR_LAW_PROPERTIES
310                    ), # Fin BLOC HOMOGENEOUS_ISOTROPIC_PROPERTIES
311              ), # fin FACT PERMEABILITY
312    #), # Fin BLOC HAS_PERMEABILITY
313
314 ##------------------------------------------------------------------
315 # Données de permittivité, utilisée pour les diélectriques seulement
316 #-------------------------------------------------------------------
317   #HAS_PERMITTIVITY = BLOC(condition="TYPE == 'DIELECTRIC'",
318
319 #------------------------------------------------
320 # sous bloc niveau 2 : PERMITTIVITY
321 #------------------------------------------------
322   PERMITTIVITY = FACT ( statut="f", 
323                         ang ="Permittivity properties",
324                         fr  = u"propriétés de permittivité du matériau",
325                         HOMOGENEOUS = SIMP (statut="o",
326                                             typ="TXM",
327                                             defaut="TRUE",
328                                             into = ("TRUE","FALSE"),
329                                             ang = "the material is homogeneous or not",
330                                             fr  = u"le matériau est homogène ou non",
331                                            ),
332                         ISOTROPIC = SIMP (statut="o",
333                                           typ="TXM",
334                                           defaut="TRUE",
335                                           into = ("TRUE","FALSE"),
336                                           ang = "the material is isotropic or not",
337                                           fr  = u"le matériau est isotrope ou non",
338                                          ),
339                        HOMOGENEOUS_ISOTROPIC_PROPERTIES = BLOC (condition="HOMOGENEOUS=='TRUE' and ISOTROPIC=='TRUE'",
340                         LAW = SIMP (statut="o",
341                                     typ="TXM",
342                                     defaut="LINEAR",
343                                     into = ("LINEAR",),
344                                     ang = "linear law",
345                                     fr  = u"loi linéaire",
346                                    ),
347                         VALUE = SIMP (statut="o",
348                                       typ="C", 
349                                       defaut=('RI',1,0),
350                                       ang = "enter a complex relative value",
351                                       fr = u"saisir une valeur complexe relative",
352                                      ),
353                        ), # Fin BLOC HOMOGENEOUS_ISOTROPIC_PROPERTIES
354                       ), # fin FACT PERMITTIVITY
355
356    #), # Fin BLOC HAS_PERMITTIVITY
357
358 ##----------------------------------------------------------------------------------------------
359 # Données de conductivité, utilisée pour les conducteurs et impédances de surface
360 #-----------------------------------------------------------------------------------------------
361   #HAS_CONDUCTIVITY = BLOC(condition="TYPE in ('CONDUCTOR','ZSURFACIC')",
362 #------------------------------------------------
363 # sous bloc niveau 2 : CONDUCTIVITY
364 #------------------------------------------------
365   CONDUCTIVITY = FACT ( statut="f", 
366                         ang ="Permittivity properties",
367                         fr  = u"propriétés de permittivité du matériau",
368                         HOMOGENEOUS = SIMP (statut="o",
369                                             typ="TXM",
370                                             defaut="TRUE",
371                                             into = ("TRUE","FALSE"),
372                                             ang = "the material is homogeneous or not",
373                                             fr  = u"le matériau est homogène ou non",
374                                            ),
375                         ISOTROPIC = SIMP (statut="o",
376                                           typ="TXM",
377                                           defaut="TRUE",
378                                           into = ("TRUE","FALSE"),
379                                           ang = "the material is isotropic or not",
380                                           fr  = u"le matériau est isotrope ou non",
381                                          ),
382                        HOMOGENEOUS_ISOTROPIC_PROPERTIES = BLOC (condition="HOMOGENEOUS=='TRUE' and ISOTROPIC=='TRUE'",
383                         LAW = SIMP (statut="o",
384                                     typ="TXM",
385                                     defaut="LINEAR",
386                                     into = ("LINEAR",),
387                                     ang = "linear law",
388                                     fr  = u"loi linéaire",
389                                    ),
390                         VALUE = SIMP (statut="o",
391                                       typ="C", 
392                                       defaut=('RI',1,0),
393                                       ang = "enter a complex relative value",
394                                       fr = u"saisir une valeur complexe relative",
395                                      ),
396                        ), # Fin BLOC HOMOGENEOUS_ISOTROPIC_PROPERTIES
397                       ), # fin FACT CONDUCTIVITY
398
399    #), # Fin BLOC HAS_CONDUCTICITY
400
401 ###################################################################################################
402 #---------------------------------------------
403 # sous bloc niveau 1  
404 #---------------------------------------
405 # matériau generique de type ZINSULATOR 
406 #---------------------------------------
407   
408 # aucun parametre a saisir pour ce materiau
409
410
411 ###################################################################################################
412 #---------------------------------------------
413 # sous bloc niveau 1     
414 #---------------------------------------------
415 # matériau generique de type NILMAT (fictif)  
416 #---------------------------------------------
417   
418 # aucun parametre a saisir pour ce materiau
419
420
421 ###################################################################################################
422 #----------------------------------------------------------
423 # sous bloc niveau 1 : EM_ISOTROPIC_FILES   
424 #-------------------------------------------------
425 # matériau isotropique non homogene generique
426 #-------------------------------------------------
427    EM_ISOTROPIC_properties=BLOC(condition="TYPE=='EM_ISOTROPIC'", 
428                
429            CONDUCTIVITY_File = SIMP (statut="o", 
430                                      typ=("FichierNoAbs",'MED Files (*.med)',),
431                                      ang="CONDUCTIVITY MED data file name",
432                                      fr = u"nom du fichier MED CONDUCTIVITY",
433                                     ),
434            PERMEABILITY_File = SIMP (statut="o", 
435                                      typ=("FichierNoAbs",'MED Files (*.med)',),
436                                      ang="PERMEABILITY MED data file name",
437                                      fr = u"nom du fichier MED PERMEABILITY",
438                                     ),
439    ), # fin bloc EM_ISOTROPIC_properties
440
441     
442 #---------------------------------------------------
443 # matériau  anisotropique non homogene generique 
444 #---------------------------------------------------
445    EM_ANISOTROPIC_properties=BLOC(condition="TYPE=='EM_ANISOTROPIC'",
446                  
447            PERMEABILITY_File = SIMP (statut="o", 
448                                      #typ=("Fichier",'.mater Files (*.mater)'), # le fichier doit exister dans le répertoire d'où on lancer Eficas si le fichier est défini par un nom relatif, ce qui est trop contraignant
449                                      #typ=("Fichier",'.mater Files (*.mater)','Sauvegarde'), # Le fichier peut ne pas exister, mais on propose de le sauvegarder et d'écraser un fichier existant : pas approprié
450                                      typ=("FichierNoAbs",'.mater Files (*.mater)'), # l'existence du fichier n'est pas vérifiée, mais on peut le sélectionner quand même via la navigateur. C'est suffisant et permet une bibliothèque de matériaux.
451                                      ang="PERMEABILITY .mater data file name",
452                                      fr ="nom du fichier .mater PERMEABILITY",
453                                     ),
454            CONDUCTIVITY_File = SIMP (statut="o", 
455                                      typ=("FichierNoAbs",'.mater Files (*.mater)'),
456                                      ang="CONDUCTIVITY .mater data file name",
457                                      fr ="nom du fichier .mater CONDUCTIVITY",
458                                     ),
459    ), # fin bloc EM_ANISOTROPIC_properties
460
461
462 ) # fin OPER MATERIAL
463     
464 #===================================================================
465 # 3eme bloc : bloc SOURCES
466 #====================================================================
467 # definition des differentes sources qui seront dans le bloc SOURCES
468 #-------------------------------------------------------------------
469 #
470
471 SOURCE = OPER ( nom = "SOURCE",
472                 op = None,
473                 repetable = 'n',
474                 ang = "source definition", 
475                 fr = u"définition d'une source", 
476                 sd_prod = source,
477                 regles = (UN_PARMI('STRANDED_INDUCTOR','HPORT','EPORT'), # choix d'un type de source
478                           UN_PARMI('WAVEFORM_CONSTANT','WAVEFORM_SINUS'), # choix d'une forme de source
479                          ),
480
481 #----------------------------------------------------------
482 # sous bloc niveau 1 : stranded inductor source 
483 ##---------------------------------------------------------
484                 STRANDED_INDUCTOR = FACT(statut='f',
485                                          ang="Stranded inductor source",
486                                          fr=u"source de type inducteur bobiné",
487                                          NTURNS = SIMP (statut="o",
488                                                         typ="I",
489                                                         defaut=1,
490                                                         ang="number of turns in the inductor",
491                                                         fr= u"nombre de tours dans l'inducteur bobiné",
492                                                        ),
493                                          TYPE = SIMP (statut="o",
494                                                       typ="TXM",
495                                                       defaut="CURRENT",
496                                                       into=("CURRENT",),
497                                                       fr= u"source de type courant",
498                                                       ang="current source type",
499                                                      ),
500                 ), # FIN de FACT STRANDED_INDUCTOR
501                 HPORT = FACT(statut='f',
502                              ang="Magnetic port source",
503                              fr=u"source de type port magnétique",
504                              TYPE = SIMP (statut="o",
505                                           typ="TXM",
506                                           into=("VOLTAGE","CURRENT"),
507                                           fr= u"source de type tension ou courant",
508                                           ang="voltage or current source type",
509                                          ),
510                 ), # FIN de FACT HPORT
511                 EPORT = FACT(statut='f',
512                              ang="Electric port source",
513                              fr=u"source de type port électrique",
514                              TYPE = SIMP (statut="o",
515                                           typ="TXM",
516                                           into=("VOLTAGE","CURRENT"),
517                                           fr= u"source de type tension ou courant",
518                                           ang="voltage or current source type",
519                                          ),
520                 ), # FIN de FACT EPORT
521                 WAVEFORM_CONSTANT = FACT(statut='f',
522                                          ang="constant source",
523                                          fr=u"source constante",
524                                          AMPLITUDE = SIMP (statut="o",
525                                                            typ="R", 
526                                                            defaut=1,
527                                                            ang = "enter the source magnitude value, in A or V units",
528                                                            fr = u"saisir la valeur de l'amplitude de la source, en unités A ou V",
529                                                           ),
530                 ), # FIN de FACT WAVEFORM_CONSTANT
531                 WAVEFORM_SINUS = FACT(statut='f',
532                                       ang="sinus variation source",
533                                       fr=u"source variant avec une forme sinusoïdale, définie par son amplitude, sa fréquence et sa phase",
534                                       AMPLITUDE = SIMP (statut="o",
535                                                         typ="R", 
536                                                         defaut=1,
537                                                         ang = "enter the source magnitude value, in A or V units",
538                                                         fr = u"saisir la valeur de l'amplitude de la source, en unités A ou V",
539                                                        ),
540                                       FREQUENCY = SIMP (statut="o",
541                                                         typ="R", 
542                                                         defaut=50.0,
543                                                         ang = "enter the source frequency value, in Hz units",
544                                                         fr = u"saisir la valeur de la fréquence de la source, en Hz",
545                                                        ),
546                                       PHASE = SIMP (statut="o",
547                                                     typ="R", 
548                                                     defaut=0.0,
549                                                     ang = "enter the source phase value, in degrees units",
550                                                     fr = u"saisir la valeur de la phase de la source, en degrés",
551                                                    ),
552                 ), # FIN de FACT WAVEFORM_SINUS
553 ) # Fin OPER SOURCE