15 class PYCOMPO(DSCCODE__POA.PYCOMPO,dsccalcium.PyDSCComponent):
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.
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)
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");
35 self.beginService("PYCOMPO.run")
38 force=calcium.doubleArray(ndim)
39 for i in xrange(ndim):
41 err=calcium.cp_edb(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
44 val=numpy.zeros(ndim,'d')
46 val=calcium.doubleArray(ndim)
47 err,t,i,nval=calcium.cp_ldb(self.proxy,calcium.CP_ITERATION,0.,0.,1,"tabin",ndim,val)
52 for i in xrange(ndim):
56 self.endService("PYCOMPO.run")
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))
66 print "PYCOMPO.gnuplot"
69 g = Gnuplot.Gnuplot(debug=1,persist=1)
76 g('set data style lines')
83 force=calcium.floatArray(ndim)
84 for i in xrange(ndim):
86 err=calcium.cp_ere(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
89 #val=numpy.zeros(ndim,'f')
90 val=numpy.zeros((6,4),'f')
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)
99 for i in xrange(ndim):
102 g.title('Surface plot (temperature) iter=%d' % iter)
103 g.splot(Gnuplot.GridData(val,y,x, binary=0))
107 print "End of PYCOMPO.gnuplot"
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))
118 import libMedCorba_Swig
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()
131 numberOfNodes=(nx+1)*(ny+1)
139 for j in xrange(ny+1):
141 for i in xrange(nx+1):
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 = []
164 connectivityQuad.append(n1)
165 connectivityQuad.append(n2)
166 connectivityQuad.append(n3)
167 connectivityQuad.append(n4)
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)
174 filename="mytest.med"
175 idMed = myMeshing.addDriver(libMEDMEM_Swig.MED_DRIVER,filename,myMeshing.getName())
176 myMeshing.write(idMed)
178 corbasupport=libMedCorba_Swig.createCorbaSupport(supportOnCells)
179 #avoid the object be destroyed on method exit (needed by VISU component)
180 self.corbasupport=corbasupport
182 force=calcium.floatArray(ndim)
183 for i in xrange(ndim):
185 err=calcium.cp_ere(self.proxy,calcium.CP_ITERATION ,0.,1,"tabout",ndim,force)
188 val=numpy.zeros(ndim,'f')
190 val=calcium.floatArray(ndim)
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)
199 for i in xrange(ndim):
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)
210 fieldDoubleScalarOnCells.setComponentName(1,"Temp")
211 fieldDoubleScalarOnCells.setComponentDescription(1,"temperature")
212 fieldDoubleScalarOnCells.setMEDComponentUnit(1,"K")
215 print "temperature",t
217 fieldDoubleScalarOnCells.setValue(t)
218 print fieldDoubleScalarOnCells.getValue()
219 idMed = fieldDoubleScalarOnCells.addDriver(libMEDMEM_Swig.MED_DRIVER,filename,fieldDoubleScalarOnCells.getName())
220 fieldDoubleScalarOnCells.write(idMed)
222 corbafield = libMedCorba_Swig.createCorbaFieldDouble(corbasupport,fieldDoubleScalarOnCells)
223 self.corbafields.append(corbafield)
224 result=visu_comp.ImportMedField(corbafield)
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)
232 print "End of PYCOMPO.visu"
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))