]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/SD/sd_cham_mater.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Aster / Cata / cataSTA9 / SD / sd_cham_mater.py
1 #@ MODIF sd_cham_mater SD  DATE 28/01/2008   AUTEUR PELLET J.PELLET 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
10 #
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 #
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20
21 from SD import *
22
23 from SD.sd_carte import sd_carte
24 from SD.sd_champ import sd_champ
25 from SD.sd_mater import sd_mater
26 from SD.sd_compor import sd_compor
27 from SD.sd_util import *
28
29
30 # Remarque :
31 #------------
32 # la sd_cham_mater est produite par la seule commande AFFE_MATERIAU.
33 # C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
34 # commande.
35
36
37
38 class sd_cham_mater_varc(AsBase):
39 #----------------------------------
40 # la sd_cham_mater_varc est la partie de la sd_cham_mater correspondant aux variables de commande
41 # (mot clé AFFE_VARC)
42
43     nomj = SDNom(fin=8)
44     CVRCNOM  = AsVK8()
45     CVRCGD   = AsVK8()
46     CVRCDEF  = AsVR()
47     CVRCVARC = AsVK8()
48     CVRCCMP  = AsVK8()
49
50     def exists(self):
51         return self.CVRCVARC.exists
52
53     # indirection via CVRCVARC:
54     def check_cham_mater_i_CVRCVARC(self, checker):
55         if not self.exists() : return
56         lnom=self.CVRCVARC.get()
57         for nom in lnom :
58            nom2=self.nomj()[:8]+'.'+nom+'.1'
59            sd2=sd_carte(nom2)  ; sd2.check(checker)
60
61            nom2=self.nomj()[:8]+'.'+nom+'.2'
62            sd2=sd_carte(nom2)  ; sd2.check(checker)
63
64            # dans le cas de la temperature, on cree parfois des cartes sous-terraines
65            # (lorsque l'on indique VALE_REF sans donner de CHAMP_GD/EVOL) :
66            if nom.strip()=='TEMP':
67                desc=sd2.DESC.get()
68                ngdmax=desc[1]
69                ngdedi=desc[2]
70                vale=sd2.VALE.get_stripped()
71                ncmp=len(vale)/ngdmax
72                assert len(vale)==ncmp*ngdmax, (ngdmax, ncmp, vale)
73                for kedit in range(ngdedi):
74                    assert vale[ncmp*kedit+0]=='TEMP' , (vale, kedit,ncmp)
75                    if vale[ncmp*kedit+1]=='CHAMP' :
76                       sd3=sd_champ(vale[ncmp*kedit+2]) ; sd3.check(checker)
77
78
79     # vérification des objets .CVRC* :
80     def check_CVRC(self, checker):
81         if not self.exists() : return
82         cvrccmp=self.CVRCCMP.get()
83         cvrcnom =self.CVRCNOM.get_stripped()
84         cvrcgd  =self.CVRCGD.get_stripped()
85         cvrcvarc=self.CVRCVARC.get_stripped()
86         cvrcdef =self.CVRCDEF.get()
87
88         # Les 6 objets ont la meme longueur > 0 :
89         nbcvrc=len(cvrcnom)
90         assert nbcvrc > 0, (self)
91         assert len(cvrccmp)  == nbcvrc , (cvrccmp,cvrcnom,self)
92         assert len(cvrcgd)   == nbcvrc , (cvrcgd,cvrcnom,self)
93         assert len(cvrcvarc) == nbcvrc , (cvrcvarc,cvrcnom,self)
94         assert len(cvrcdef)  == nbcvrc , (cvrcdef,cvrcnom,self)
95
96         # Les 4 objets sont "non blancs" :
97         sdu_tous_non_blancs(self.CVRCCMP,checker)
98         sdu_tous_non_blancs(self.CVRCNOM,checker)
99         sdu_tous_non_blancs(self.CVRCGD,checker)
100         sdu_tous_non_blancs(self.CVRCVARC,checker)
101
102         # les noms des CRVC doivent etre differents:
103         sdu_tous_differents(self.CVRCNOM,checker)
104
105
106
107
108 class sd_cham_mater(AsBase):
109 #=============================
110     nomj = SDNom(fin=8)
111
112     # CHAMP_MAT est une carte contenant la liste des noms de matériaux
113     # affectées sur les mailles du maillage.
114     CHAMP_MAT = sd_carte()
115
116     # si AFFE_VARC :
117     varc = Facultatif(sd_cham_mater_varc(SDNom(nomj='')))
118
119     # si AFFE_COMPOR :
120     # COMPOR est une carte définissant les sd_compor affectés
121     # sur les mailles du maillage
122     COMPOR = Facultatif(sd_carte())
123
124
125     def check_CHAMP_MAT(self,checker) :
126     #----------------------------------
127         # on vérifie que la carte .CHAMP_MAT contient bien des noms de matériau.
128         vale=self.CHAMP_MAT.VALE.get_stripped()
129         desc=self.CHAMP_MAT.DESC.get()
130         numgd    =desc[0]
131         n_gd_edit=desc[2]
132         assert sdu_nom_gd(numgd) == 'NEUT_F', (desc,sdu_nom_gd(numgd))
133         ncmp_max=len(sdu_licmp_gd(numgd))
134         assert ncmp_max==30 , ncmp_max
135
136         for kedit in range(n_gd_edit):
137             v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
138             ktref=None
139             for k1 in range(len(v1)) :
140                 x1=v1[k1]
141                 if x1 == '' : continue
142
143                 # cas particulier : 'TREF=>', '25.0'
144                 if x1=='TREF=>' :
145                     ktref=k1
146                     continue
147                 if ktref :
148                     assert k1 == ktref+1 , (k1, ktref)
149                     # on doit retrouver la valeur de TREF :
150                     try :
151                         tref=float(x1)
152                     except :
153                         assert 0 , ' On doit trouver la valeur de TREF: '+x1
154                     continue
155
156                 # cas général : x1 est un nom de sd_mater
157                 sd2=sd_mater(x1) ; sd2.check(checker)
158
159
160     def check_COMPOR(self,checker) :
161     #----------------------------------
162         # on vérifie (un peu)  la carte .COMPOR (si elle existe)
163         desc=self.COMPOR.DESC.get()
164         if not desc : return
165         vale=self.COMPOR.VALE.get_stripped()
166         numgd    =desc[0]
167         n_gd_edit=desc[2]
168         assert sdu_nom_gd(numgd) == 'COMPOR', (desc,sdu_nom_gd(numgd))
169         ncmp_max=len(sdu_licmp_gd(numgd))
170
171         for kedit in range(n_gd_edit):
172             v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
173             assert v1[3]=='COMP_INCR'   , v1
174             sd2=sd_compor(v1[5].split('.')[0].strip()) ; sd2.check(checker)
175
176             for x1 in v1[7:] :
177                 assert x1=='' , v1
178
179
180
181
182
183
184