Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / SD / sd_compor.py
1 #@ MODIF sd_compor SD  DATE 30/06/2008   AUTEUR PROIX J-M.PROIX 
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 from SD.sd_mater import sd_mater
23
24 # Remarque :
25 #------------
26 # la sd_compor est produite par la seule commande DEFI_COMPOR.
27 # C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
28 # commande.
29
30 class sd_compor(AsBase):
31     nomj = SDNom(fin=8)
32     CPRK = AsVK16()
33     CPRI = AsVI()
34     CPRR = Facultatif(AsVR())
35
36
37     def check_tout(self,checker) :
38     #-------------------------------
39         cpri=self.CPRI.get()
40         type=cpri[0]
41         assert type in (1,2,3) , CPRI
42         if type == 1 :
43             self.monocristal(cpri,checker)
44         if type == 2 :
45             self.polycristal(cpri,checker)
46         if type == 3 :
47             self.multifibres(cpri,checker)
48
49
50
51     def monocristal(self,cpri,checker) :
52     #------------------------------------
53         nboccm=cpri[4]
54         nvi   =cpri[2]
55         nbsys=(nvi-9)/3
56         assert nvi==9+3*nbsys , (nvi, nbsys, cpri)
57         cprk=self.CPRK.get_stripped()
58
59         # vérif existence et longueur
60         assert len(cpri)==7, cpri
61         assert len(cprk)==5*nboccm+1, (cpri,cprk)
62         assert not self.CPRR.get()
63
64         # vérif CPRI :
65         #-------------
66         assert cpri[1] == 1   ,cpri
67         assert cpri[2] == nvi ,cpri
68         assert cpri[3] == 1   ,cpri
69         assert cpri[4] > 0    ,cpri
70         assert cpri[5] == 1   ,cpri
71         assert cpri[6] == nvi ,cpri
72
73         # vérif CPRK :
74         #-------------
75         elas=cprk[5*nboccm]
76         assert elas in ('ELAS', 'ELAS_ORTH')  ,cprk
77         for k in range(nboccm):
78             famil     =cprk[5*k+0]
79             mater     =cprk[5*k+1]
80             ecoul     =cprk[5*k+2]
81             ecro_isot =cprk[5*k+3]
82             ecro_cine =cprk[5*k+4]
83             sd2=sd_mater(mater) ; sd2.check(checker)
84             assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1',
85                             'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN',
86                             'RL','UNIAXIAL')
87             assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3')
88             assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2')
89             assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2')
90
91
92
93     def polycristal(self,cpri,checker) :
94     #------------------------------------
95         nbphases=cpri[1]
96         assert nbphases > 0 , cpri
97         lgcprk  =cpri[6+3*nbphases-2]
98         assert lgcprk > 0 , cpri
99         cprk=self.CPRK.get_stripped()
100         cprr=self.CPRR.get()
101
102         # vérif existence et longueur
103         #------------------------------
104         assert len(cpri)==6+3*nbphases, (cpri,nbphases)
105         assert len(cprr)==2+4*nbphases, (cpri,cprr,nbphases)
106         assert len(cprk)==lgcprk, (cpri,cprk)
107
108         # vérif CPRI :
109         #-------------
110         nvitot=cpri[2]
111         assert nvitot >= 0        ,cpri
112         nbmono=cpri[3]
113         assert nbmono > 0         ,cpri
114         nbpara  =cpri[6+3*nbphases-1]
115         assert nbpara in (0,1,2)  ,cpri
116         for k in range(nbphases):
117             nbfam1 = cpri[4+3*k+0]
118             numono = cpri[4+3*k+1]
119             nvi1   = cpri[4+3*k+2]
120             assert nbfam1 > 0     ,cpri
121             assert numono > 0  and numono <= nbmono   ,(cpri,nbmono)
122             assert nvi1   >=0     ,cpri
123
124         # vérif CPRR :
125         #-------------
126         frac_tot=0.
127         for k in range(nbphases):
128             frac     =cprr[4*k+0]
129             assert frac >= 0. and frac <= 1.  ,(cprr,k)
130             frac_tot=frac_tot+frac
131             for dir in range(1,4):
132                 angl     =cprr[4*k+dir]
133                 assert angl >=0. and angl <=360. , (angl,dir)
134         assert frac_tot > 0.99 and frac_tot < 1.01
135
136         # vérif CPRK :
137         #-------------
138         locali   =cprk[0]
139         assert locali in ('BZ','BETA')  ,(locali,cprk)
140         decal=0
141         for k in range(nbmono):
142             mono1 =cprk[0+decal+1]
143             sd2=sd_compor(mono1) ; sd2.check(checker)
144             nbfam1=int(cprk[0+decal+2])
145             assert nbfam1 > 0 , (nbfam1,k,decal,cprk)
146             decal=decal+2+5*nbfam1+1
147             # on pourrait encore vérifier que le .CPRK de mono1 a bien été recopié
148             # mais il faut bien s'arreter ...
149
150
151
152     def multifibres(self,cpri,checker) :
153     #------------------------------------
154         nbgmax=cpri[2]
155         cprk=self.CPRK.get_stripped()
156
157         # vérif existence et longueur
158         assert len(cpri)==3, cpri
159         assert len(cprk)==6*nbgmax+1, (cpri,cprk)
160         assert not self.CPRR.get()
161
162         # vérif CPRI :
163         #-------------
164         assert cpri[1] > 0, cpri
165         assert cpri[2] > 0, cpri
166
167         # vérif CPRK :
168         #-------------
169         mater=cprk[6*nbgmax]
170         assert mater != '', cprk
171         sd2=sd_mater(mater) ; sd2.check(checker)
172         for k in range(nbgmax):
173             grfib1     =cprk[6*k+0]
174             mater1     =cprk[6*k+1]
175             loifib1    =cprk[6*k+2]
176             algo1d     =cprk[6*k+3]
177             deform     =cprk[6*k+4]
178             nbfib=    int(cprk[6*k+5])
179             assert grfib1 != '' , cprk
180             assert mater1 != '' , cprk
181             sd2=sd_mater(mater1) ; sd2.check(checker)
182             assert loifib1 != '' , cprk
183             assert algo1d  in ('ANALYTIQUE','DEBORST') , cprk
184             assert deform  in ('PETIT','PETIT_REAC','REAC_GEOM') , cprk
185             assert nbfib > 0      , cprk
186
187