1#! /usr/bin/env python
2# -*- coding:utf-8 -*-
3# /*  This file is part of MED.
4#  *
5#  *  COPYRIGHT (C) 1999 - 2019  EDF R&D, CEA/DEN
6#  *  MED is free software: you can redistribute it and/or modify
7#  *  it under the terms of the GNU Lesser General Public License as published by
8#  *  the Free Software Foundation, either version 3 of the License, or
9#  *  (at your option) any later version.
10#  *
11#  *  MED is distributed in the hope that it will be useful,
12#  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13#  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14#  *  GNU Lesser General Public License for more details.
15#  *
16#  *  You should have received a copy of the GNU Lesser General Public License
17#  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
18#  */
19#from __future__ import division
20
21_a=0.446948490915965
22_b=0.091576213509771
23_p1=0.11169079483905
24_p2=0.0549758718227661
25
26# /******************************************************************************
27#  * - Nom du fichier : test10.py
28#  *
29#  * - Description : ecriture de champs de resultats MED
30#  *
31#  *****************************************************************************/
32import os
33
34from med.medfile import *
35from med.medmesh import *
36from med.medfield import *
37from med.medenum import *
38from med.medprofile import *
39from med.medlocalization import *
40from med.medlink import *
41
42exec(compile(open(os.path.join(os.path.dirname(__file__),'test10_params_f32_i32.py')).read(), os.path.join(os.path.dirname(__file__),'test10_params_f32_i32.py'), 'exec'),locals(),globals())
43#cf test10.atpy qui lance les différents test10_TEST_PARAMS_PY.py et sauvegarde le fichier généré
44filename='test10'+PARAM_ID+'.med'
45
46# USER_MODE=MED_COMPACT_STMODE
47# USER_INTERLACE=MED_FULL_INTERLACE
48# MEDARRAY_TYPEF=MEDFLOAT
49# FIELD_TYPEF=MED_FLOAT64
50
51# /* Maillage support aux champs*/
52# /* Ces maillages sont vides*/
53maa1="maa1"
54maa2="maa2"
55lien_maa2 = "./testfoo.med"
56maa3= "maa3"
57
58
59# /* Caractéristiques du champ n°1 sur TRIA6 */
60nomcha1 = "champ reel"
61comp1   = "comp1           comp2           "
62
63      # /*12345678901234561234567890123456*/
64unit1  = "unit1           unit2           "
65ncomp1 = 2
66# /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
67ngauss1_1 = 6;
68gauss1_1  = "Model n1";
69refcoo1=MEDFLOAT([ -1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 ])
70
71# /* Constantes */
72
73gscoo1_1= MEDFLOAT([ 2*_b-1, 1-4*_b, 2*_b-1, 2*_b-1, 1-4*_b,
74                     2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ])
75wg1_1   = MEDFLOAT([ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ])
76
77nval1_1  = 1*6; #/*1 valeurs et 6 points de gauss par valeur */
78_nent1_1 = 1;   #/*1 valeurs et 6 points de gauss par valeur */
79valr1_1  = MEDARRAY_TYPEF([0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0]) #/* 2 composantes*/
80# /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
81ngauss1_2= 3
82gauss1_2 = "Model n2"
83gscoo1_2 = MEDFLOAT([ -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3 ])
84wg1_2    = MEDFLOAT([ 2.0/3, 2.0/3, 2.0/3 ])
85nval1_2  = 2*3  #/*2 valeurs et 3 points de gauss par valeur */
86_nent1_2 = 2    #/*2 valeurs et 3 points de gauss par valeur */
87valr1_2  = MEDARRAY_TYPEF([ 0.0,1.0, 2.0,3.0, 10.0,11.0,   12.0,13.0, 20.0,21.0, 22.0,23.0 ])  #/* 2 composantes*/
88valr1_2p = MEDARRAY_TYPEF([                                12.0,13.0, 20.0,21.0, 22.0,23.0 ])  #/* 2 composantes*/
89# /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
90nval1_3  = 6 #/*6 valeurs et pas de points de gauss */
91_nent1_3 = 6 #/*6 valeurs et pas de points de gauss */
92valr1_3  = MEDARRAY_TYPEF([ 0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0]) #/* 2 composantes*/
93valr1_3p = MEDARRAY_TYPEF([         2.0,3.0, 10.0,11.0                                  ]) #/* 2 composantes profil1 */
94
95# /* Caractéristiques du champ n° 2 */
96nomcha2 = "champ entier"
97comp2   = "comp1           comp2           comp3           "
98       # /*123456789012345612345678901234561234567890123456*/
99unit2   = "unit1           unit2           unit3           ";
100ncomp2  = 3
101nval2   = 5  #/*5 valeurs */
102valr2  = MEDARRAY_TYPEI([ 0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42]) #              /* 3 composantes*/
103valr2p = MEDARRAY_TYPEI([ 0,1,2,           20,21,22,           40,41,42]) #              /* 3 composantes*/
104
105# /* Profils utilisés */
106nomprofil1  = "PROFIL(champ(1))"
107nomprofil1b = "PROFIL(champ(1b))"
108nomprofil2  = "PROFIL(champ2)"
109profil1 = MEDINT([ 2, 3 ])
110profil2 = MEDINT([ 1, 3, 5 ])
111
112# /* Caractéristiques du champ n° 3 */
113nomcha3 = "champ entier 3"
114comp3   = "comp1           comp2           "
115     # /*123456789012345612345678901234561234567890123456*/
116unit3  = "unit1           unit2           ";
117dtunit = "s"
118ncomp3 = 2
119nval3  = 5*4    #/*5 valeurs et 4 noeuds par element*/
120_nent3 = 5      #/*5 valeurs et 4 noeuds par element*/
121valr3 = MEDARRAY_TYPEI([   0,1, 10,11, 20,21, 30,31,
122                  40,41, 50,51, 60,61, 70,71,
123                  80,81, 90,91, 100,101, 110,111,
124                  120,121, 130,131, 140,141, 150,151,
125                  160,161, 170,171, 180,181, 190,191])    #/* 2 composantes*/
126valr3p = MEDARRAY_TYPEI([  0,1, 10,11, 20,21, 30,31,
127                   80,81, 90,91, 100,101, 110,111,
128                   160,161, 170,171, 180,181, 190,191])   #/* 2 composantes*/
129
130
131nomcoo = "x               y               z               "
132unicoo = "cm              cm              cm              "
133
134
135# /* ouverture du fichier */
136fid=MEDfileVersionOpen(filename,MED_ACC_CREAT,MED_NUM_MAJEUR,MED_NUM_MINEUR,MED_NUM_RELEASE)
137
138# /* creation de maa1 de dimension 3*/
139MEDmeshCr( fid, maa1, 3, 3, MED_UNSTRUCTURED_MESH,
140           "Maillage vide","s", MED_SORT_DTIT,
141           MED_CARTESIAN, nomcoo, unicoo)
142
143# /* creation de maa3 de dimension 3*/
144MEDmeshCr( fid, maa3, 3, 3, MED_UNSTRUCTURED_MESH,
145           "Maillage vide","s", MED_SORT_DTIT,
146           MED_CARTESIAN, nomcoo, unicoo)
147
148# /* creation du champ réel n°1 */
149MEDfieldCr(fid,nomcha1,FIELD_TYPEF,ncomp1,comp1,unit1,dtunit,maa1)
150
151# /* creation du champ entier n°2 */
152MEDfieldCr(fid,nomcha2,FIELD_TYPEI,ncomp2,comp2,unit2,dtunit,maa2)
153
154# /* creation du lien au fichier distant contenant maa2 */
155MEDlinkWr(fid,maa2,lien_maa2)
156
157
158# /* creation de la localisation des points de Gauss modèle n°1 */
159MEDlocalizationWr(fid, gauss1_1, MED_TRIA6, MED_TRIA6//100, refcoo1,
160                  USER_INTERLACE, ngauss1_1, gscoo1_1, wg1_1,
161                  MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT )
162
163# /* creation de la localisation des points de Gauss modèle n°2 */
164MEDlocalizationWr(fid, gauss1_2, MED_TRIA6, MED_TRIA6//100, refcoo1,
165                  USER_INTERLACE,ngauss1_2, gscoo1_2, wg1_2,
166                  MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT)
167
168
169# /* ecriture du champ n°1*/
170# /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
171
172MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,
173                           USER_MODE,MED_ALLENTITIES_PROFILE, gauss1_1,
174                           USER_INTERLACE, 2, _nent1_1, valr1_1 )
175
176
177# /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
178
179MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,
180                           USER_MODE,MED_ALLENTITIES_PROFILE,
181                           gauss1_1,USER_INTERLACE, 1, _nent1_1, valr1_1 )
182
183# /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
184# /* ce champ repose sur le maillage maa2 qui est distant */
185
186MEDfieldValueWithProfileWr(fid, nomcha1,1,MED_NO_IT,5.5,MED_CELL,MED_TRIA6,
187                           USER_MODE,MED_ALLENTITIES_PROFILE,
188                           gauss1_2,USER_INTERLACE, 1, _nent1_2, valr1_2 )
189
190# /*Ce test utilise un deuxième maillag pour un même champ, ceci n'existe plus en 3.0*/
191# /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
192# /* ce champ repose sur le maillage maa1 qui est local */
193
194MEDfieldValueWithProfileWr(fid, nomcha1,1,1,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
195		       gauss1_1,USER_INTERLACE, 2, _nent1_1, valr1_1 )
196
197# /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
198# /* ce champ repose sur le maillage maa3 qui est local */
199
200MEDfieldValueWithProfileWr(fid, nomcha1,1,2,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
201		       gauss1_2,USER_INTERLACE, 1, _nent1_2, valr1_2 )
202
203# /* Creation d'un profil (selection  du deuxieme élément de valr1_1) */
204# /* On n'utilise que la première valeur (2) du profil */
205MEDprofileWr(fid,nomprofil1,1,profil1)
206MEDprofileWr(fid,nomprofil1b,1,profil1)
207
208# /* enregistre toutes les composantes du deuxième élèment de valr1_1 (premier élément en stockage compact de valr1p),
209#  au pas de temps n°2(5.6), et n°d'itération n°2 */
210
211MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
212                           MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, nval1_3, valr1_3p )
213
214# /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
215#      au pas de temps n°2(5.6), et n°d'itération n°2 */
216
217MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1b,
218		       gauss1_2,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent1_2, valr1_2p )
219
220
221MEDfieldValueWithProfileWr(fid, nomcha1,3,2,5.7,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
222                           MED_NO_LOCALIZATION,USER_INTERLACE, 2, _nent1_3,valr1_3p )
223
224# /* Ecriture du champ n° 2 */
225
226
227MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,
228                MED_DESCENDING_EDGE,MED_SEG2,
229                USER_INTERLACE, 1, nval2, valr2 )
230
231MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_NODE,MED_NONE,
232				  USER_INTERLACE, 2, nval2, valr2 )
233
234MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_DESCENDING_FACE,MED_TRIA6,
235                USER_INTERLACE, 3, nval2, valr2 )
236
237# /* Creation d'un profil (selection  des éléments 1,3,5 de valr2) */
238# /* On utilise les trois valeurs du profil */
239MEDprofileWr(fid,nomprofil2,3,profil2)
240
241MEDfieldValueWithProfileWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_TRIA6,USER_MODE,nomprofil2,
242                           MED_NO_LOCALIZATION,USER_INTERLACE, 3, nval2, valr2p )
243
244# /* creation du champ entier n°3 */
245MEDfieldCr(fid,nomcha3,FIELD_TYPEI,ncomp3,comp3,unit3,dtunit,maa1)
246
247 # /* Ecriture du champ n° 3 */
248
249MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_QUAD4,
250                USER_INTERLACE, 1, nval3, valr3 )
251
252MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,
253                USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, valr3 )
254
255MEDfieldValueWithProfileWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,USER_MODE,nomprofil2,
256                           MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, valr3p )
257
258
259MEDfileClose(fid)
260