]> SALOME platform Git repositories - samples/dsccode.git/blob - src/PYCOMPO/PYCOMPO.py
Salome HOME
Revert "Synchronize adm files"
[samples/dsccode.git] / src / PYCOMPO / PYCOMPO.py
1 import sys,os
2 import traceback
3 import DSCCODE__POA
4 import calcium
5 import dsccalcium
6 import SALOME
7 import time
8 import LifeCycleCORBA
9
10 try:
11   import numpy
12 except:
13   numpy=None
14
15 class PYCOMPO(DSCCODE__POA.PYCOMPO,dsccalcium.PyDSCComponent):
16   """
17      To be identified as a SALOME component this Python class
18      must have the same name as the component, inherit omniorb
19      class DSCCODE__POA.PYCOMPO and DSC class dsccalcium.PyDSCComponent
20      that implements DSC API.
21   """
22   def __init__ ( self, orb, poa, contID, containerName, instanceName, interfaceName ):
23     print "PYCOMPO.__init__: ", containerName, ';', instanceName,interfaceName
24     dsccalcium.PyDSCComponent.__init__(self, orb, poa,contID,containerName,instanceName,interfaceName)
25     self.lcc= LifeCycleCORBA.LifeCycleCORBA(self._orb)
26
27   def init_service(self,service):
28     print "init_service:",service
29     calcium.create_calcium_port(self.proxy,"tabin","CALCIUM_double","IN","I");
30     calcium.create_calcium_port(self.proxy,"tabout","CALCIUM_double","OUT","I");
31     return True
32
33   def run( self):
34     try:
35       self.beginService("PYCOMPO.run")
36       ndim=10
37
38       force=calcium.doubleArray(ndim)
39       for i in xrange(ndim):
40         force[i]=i
41       err=calcium.cp_edb(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
42
43       if numpy:
44         val=numpy.zeros(ndim,'d')
45       else:
46         val=calcium.doubleArray(ndim)
47       err,t,i,nval=calcium.cp_ldb(self.proxy,calcium.CP_ITERATION,0.,0.,1,"tabin",ndim,val)
48       print err,t,i,nval
49       if numpy:
50         print val
51       else:
52         for i in xrange(ndim):
53           print val[i],
54         print
55
56       self.endService("PYCOMPO.run")
57       sys.stdout.flush()
58     except:
59       sys.stdout.flush()
60       self.endService("PYCOMPO.run")
61       exc_typ,exc_val,exc_fr=sys.exc_info()
62       l=traceback.format_exception(exc_typ,exc_val,exc_fr)
63       raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PYCOMPO.py",0))
64
65   def gnuplot( self):
66     print "PYCOMPO.gnuplot"
67     try:
68       import Gnuplot
69       g = Gnuplot.Gnuplot(debug=1,persist=1)
70       x = numpy.arange(4)
71       y = numpy.arange(6)
72       g.xlabel('x')
73       g.ylabel('y')
74       g.zlabel('temp')
75       g('set parametric')
76       g('set data style lines')
77       g('set hidden')
78       g('set view 60, 240')
79       g('set pm3d at bs')
80       g('set palette')
81       ndim=24
82
83       force=calcium.floatArray(ndim)
84       for i in xrange(ndim):
85         force[i]=i
86       err=calcium.cp_ere(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
87
88       if numpy:
89         #val=numpy.zeros(ndim,'f')
90         val=numpy.zeros((6,4),'f')
91       else:
92         val=calcium.floatArray(ndim)
93       for iter in xrange(20):
94         err,t,i,nval=calcium.cp_lre(self.proxy,calcium.CP_ITERATION,0.,0.,iter,"tabin",ndim,val)
95         print err,t,i,nval
96         if numpy:
97           print val
98         else:
99           for i in xrange(ndim):
100             print val[i],
101           print
102         g.title('Surface plot (temperature) iter=%d' % iter)
103         g.splot(Gnuplot.GridData(val,y,x, binary=0))
104         #g('pause mouse')
105         time.sleep(0.1)
106
107       print "End of PYCOMPO.gnuplot"
108       sys.stdout.flush()
109     except:
110       sys.stdout.flush()
111       exc_typ,exc_val,exc_fr=sys.exc_info()
112       l=traceback.format_exception(exc_typ,exc_val,exc_fr)
113       raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PYCOMPO.py",0))
114
115   def visu( self):
116     print "PYCOMPO.visu"
117     try:
118       import libMedCorba_Swig
119       import VISU
120       import libMEDMEM_Swig
121       #from libMEDMEM_Swig import *
122       visu_comp = self.lcc.FindOrLoadComponent("FactoryServer", "VISU")
123       myViewManager = visu_comp.GetViewManager()
124       myView = myViewManager.Create3DView()
125
126
127       nx=4
128       ny=6
129       ndim=24
130       spaceDimension=2
131       numberOfNodes=(nx+1)*(ny+1)
132       ncells=nx*ny
133       coordinates=[]
134       dx=1.
135       dy=1.
136       self.fields=[]
137       self.corbafields=[]
138
139       for j in xrange(ny+1):
140         y=j*dy
141         for i in xrange(nx+1):
142           x=i*dx
143           coordinates.append(x)
144           coordinates.append(y)
145       myMeshing = libMEDMEM_Swig.MESHING()
146       self.myMeshing=myMeshing
147       myMeshing.setName("mymesh")
148       myMeshing.setMeshDimension(2)
149       myMeshing.setCoordinates(spaceDimension,numberOfNodes,coordinates,"CARTESIAN",libMEDMEM_Swig.MED_FULL_INTERLACE)
150       myMeshing.setCoordinateName("X",0)
151       myMeshing.setCoordinateUnit("cm",0)
152       myMeshing.setCoordinateName("Y",1)
153       myMeshing.setCoordinateUnit("cm",1)
154       myMeshing.setNumberOfTypes(1,libMEDMEM_Swig.MED_CELL)
155       myMeshing.setTypes([libMEDMEM_Swig.MED_QUAD4],libMEDMEM_Swig.MED_CELL)
156       myMeshing.setNumberOfElements([ncells],libMEDMEM_Swig.MED_CELL)
157       connectivityQuad = []
158       for j in xrange(ny):
159         for i in xrange(nx):
160           n1=i+1+(j)*(nx+1)
161           n2=i+2+(j)*(nx+1)
162           n3=i+2+(j+1)*(nx+1)
163           n4=i+1+(j+1)*(nx+1)
164           connectivityQuad.append(n1)
165           connectivityQuad.append(n2)
166           connectivityQuad.append(n3)
167           connectivityQuad.append(n4)
168
169       myMeshing.setConnectivity(connectivityQuad,libMEDMEM_Swig.MED_CELL,libMEDMEM_Swig.MED_QUAD4)
170       supportOnCells = libMEDMEM_Swig.SUPPORT(myMeshing,"On_All_Cells",libMEDMEM_Swig.MED_CELL)
171       self.supportOnCells=supportOnCells
172       numberOfCells = supportOnCells.getNumberOfElements(libMEDMEM_Swig.MED_ALL_ELEMENTS)
173
174       filename="mytest.med"
175       idMed = myMeshing.addDriver(libMEDMEM_Swig.MED_DRIVER,filename,myMeshing.getName())
176       myMeshing.write(idMed)
177
178       corbasupport=libMedCorba_Swig.createCorbaSupport(supportOnCells)
179       #avoid the object be destroyed on method exit (needed by VISU component)
180       self.corbasupport=corbasupport
181
182       force=calcium.floatArray(ndim)
183       for i in xrange(ndim):
184         force[i]=i
185       err=calcium.cp_ere(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
186
187       if numpy:
188         val=numpy.zeros(ndim,'f')
189       else:
190         val=calcium.floatArray(ndim)
191
192       #start loop
193       for iter in xrange(20):
194         err,t,i,nval=calcium.cp_lre(self.proxy,calcium.CP_ITERATION,0.,0.,iter,"tabin",ndim,val)
195         print err,t,i,nval
196         if numpy:
197           print val
198         else:
199           for i in xrange(ndim):
200             print val[i],
201           print
202
203         fieldDoubleScalarOnCells = libMEDMEM_Swig.FIELDDOUBLE(supportOnCells,1)
204         self.fields.append(fieldDoubleScalarOnCells)
205         fieldDoubleScalarOnCells.setName("temperature")
206         fieldDoubleScalarOnCells.setIterationNumber(1)
207         fieldDoubleScalarOnCells.setOrderNumber(-1)
208         fieldDoubleScalarOnCells.setTime(0.0)
209
210         fieldDoubleScalarOnCells.setComponentName(1,"Temp")
211         fieldDoubleScalarOnCells.setComponentDescription(1,"temperature")
212         fieldDoubleScalarOnCells.setMEDComponentUnit(1,"K")
213
214         t=val.tolist()
215         print "temperature",t
216
217         fieldDoubleScalarOnCells.setValue(t)
218         print fieldDoubleScalarOnCells.getValue()
219         idMed = fieldDoubleScalarOnCells.addDriver(libMEDMEM_Swig.MED_DRIVER,filename,fieldDoubleScalarOnCells.getName())
220         fieldDoubleScalarOnCells.write(idMed)
221
222         corbafield = libMedCorba_Swig.createCorbaFieldDouble(corbasupport,fieldDoubleScalarOnCells)
223         self.corbafields.append(corbafield)
224         result=visu_comp.ImportMedField(corbafield)
225
226         scmap = visu_comp.Plot3DOnField(result,"mymesh",VISU.CELL,"temperature",1)
227         scmap.SetRange(100.,1600.)
228         scmap.SetScaleFactor(0.002)
229         myView.DisplayOnly(scmap)
230         myView.FitAll()
231
232       print "End of PYCOMPO.visu"
233       sys.stdout.flush()
234     except:
235       sys.stdout.flush()
236       exc_typ,exc_val,exc_fr=sys.exc_info()
237       l=traceback.format_exception(exc_typ,exc_val,exc_fr)
238       raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"".join(l),"PYCOMPO.py",0))