X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGENERICSOLVER%2FDEVIATION.py;h=3b0babdf3e7bcea376d177b4f35e59314f4f3346;hb=bcca3f58e0ac355c6f19c9d5cdef55b400106e48;hp=f2ddb8de4d6939ade02ff7d2fba107746413e119;hpb=aa01437f249012ee464a23346fed533f223e6124;p=samples%2Fgenericsolver.git diff --git a/src/GENERICSOLVER/DEVIATION.py b/src/GENERICSOLVER/DEVIATION.py index f2ddb8d..3b0babd 100644 --- a/src/GENERICSOLVER/DEVIATION.py +++ b/src/GENERICSOLVER/DEVIATION.py @@ -1,44 +1,47 @@ -# Copyright (C) 2009-2011 EDF R&D +# Copyright (C) 2009-2021 EDF R&D # -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. # -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -# $Id$ +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -import os +import inspect import logging +import os +import platform import threading -import inspect import traceback -import platform -import thread -import salome +from salome.gui.helper import sgPyQt +from salome.kernel import termcolor +from salome.kernel.logger import Logger +from salome.kernel.parametric.compo_utils import \ + create_input_dict, create_normal_parametric_output, create_error_parametric_output import GENERICSOLVER_ORB__POA +import SALOME import SALOME_ComponentPy import SALOME_DriverPy -import SALOME -import SALOME_TYPES +import SALOME_Embedded_NamingService_ClientPy +import _thread +import salome -from salome.kernel.logger import Logger -from salome.kernel import termcolor -logger = Logger("DEVIATION", color = termcolor.RED_FG) + +logger = Logger("DEVIATION", color=termcolor.RED_FG) logger.setLevel(logging.INFO) + VARIABLE_ID = 1030 ### @@ -77,14 +80,14 @@ def getValueOfVariable( builder, varobj ): def getSubSObjectByName( studyId, sobjFather, childName ): logger.debug("GENERICSOLVER.getSubSObjectByName Looking for sobjet named " + childName) study = salome.myStudyManager.GetStudyByID( studyId ) - iter = study.NewChildIterator( sobjFather ) + iterator = study.NewChildIterator(sobjFather) #builder = study.NewBuilder() - while iter.More(): - sobj = iter.Value() + while iterator.More(): + sobj = iterator.Value() logger.debug("GENERICSOLVER.getSubSObjectByName Got sobjet named " + sobj.GetName()) if sobj.GetName() == childName: return sobj - iter.Next() + iterator.Next() pass return None @@ -107,11 +110,19 @@ class DEVIATION(GENERICSOLVER_ORB__POA.DEVIATION_Gen, interfaceName ): logger.info("__init__: " + containerName + ' ; ' + instanceName) SALOME_ComponentPy.SALOME_ComponentPy_i.__init__(self, orb, poa, - contID, containerName, instanceName, interfaceName, 0) + contID, containerName, instanceName, interfaceName, False) SALOME_DriverPy.SALOME_DriverPy_i.__init__(self, interfaceName) # On stocke dans l'attribut _naming_service, une reference sur # le Naming Service CORBA - self._naming_service = SALOME_ComponentPy.SALOME_NamingServicePy_i( self._orb ) + #self._naming_service = SALOME_ComponentPy.SALOME_NamingServicePy_i( self._orb ) + # + emb_ns = self._contId.get_embedded_NS_if_ssl() + import CORBA + if CORBA.is_nil(emb_ns): + self._naming_service = SALOME_ComponentPy.SALOME_NamingServicePy_i( self._orb ) + else: + self._naming_service = SALOME_Embedded_NamingService_ClientPy.SALOME_Embedded_NamingService_ClientPy(emb_ns) + # self.deterministicValues = {} ###################################################################### @@ -133,7 +144,7 @@ class DEVIATION(GENERICSOLVER_ORB__POA.DEVIATION_Gen, def _getIdMessage(self): return "%s in container %s running on %s, process %d, thread %d" % \ (self._instanceName, self._containerName, - platform.node(), os.getpid(), thread.get_ident()) + platform.node(), os.getpid(), _thread.get_ident()) def Init(self, studyId, detCaseEntry): """ @@ -161,34 +172,31 @@ class DEVIATION(GENERICSOLVER_ORB__POA.DEVIATION_Gen, logger.debug("inputVarList: %s" % paramInput.inputVarList) logger.debug("outputVarList: %s" % paramInput.outputVarList) logger.debug("inputValues: %s" % paramInput.inputValues) - inputPoint = paramInput.inputValues[0][0] # No time series, single observation - if len(inputPoint) != len(paramInput.inputVarList): - raise Exception("Size mismatch between inputVarList and point to evaluate") - - evalPoint = self.deterministicValues - for i in range(len(inputPoint)): - evalPoint[paramInput.inputVarList[i]] = inputPoint[i][0] - logger.debug("evalPoint = %s" % evalPoint) + + # Get id and execution mode + id = "" + exec_mode = "" + for parameter in paramInput.specificParameters: + if parameter.name == "id": + id = parameter.value + if parameter.name == "executionMode": + exec_mode = parameter.value + logger.debug("ID: %s" % id) + logger.debug("Execution mode: %s" % exec_mode) + + inputDict = create_input_dict(self.deterministicValues, paramInput) + logger.debug("inputDict = %s" % inputDict) # Test for an invalid parameter and return an error in this case - if evalPoint["L"] <= 0: - return SALOME_TYPES.ParametricOutput( - outputValues = [], - specificOutputInfos = [], - returnCode = 1, - errorMessage = "Invalid value: L must be positive") - - resDict = {} - resDict["dev"] = self.BeamModel(**evalPoint) - - outputValues = [[[]]] - for outputVar in paramInput.outputVarList: - outputValues[0][0].append([resDict[outputVar]]) - logger.debug("paramOutput: %s" % outputValues) - return SALOME_TYPES.ParametricOutput(outputValues, - specificOutputInfos = [], - returnCode = 0, - errorMessage = "") + if inputDict["L"] <= 0: + return create_error_parametric_output("Invalid value: L must be positive") + + outputDict = {} + outputDict["dev"] = self.BeamModel(**inputDict) + + paramOutput = create_normal_parametric_output(outputDict, paramInput) + logger.debug("outputValues: %s" % paramOutput.outputValues) + return paramOutput except: self._raiseSalomeError() @@ -201,7 +209,21 @@ class DEVIATION(GENERICSOLVER_ORB__POA.DEVIATION_Gen, logger.info("Finalize: " + self._getIdMessage()) except: self._raiseSalomeError() - + + def GetFilesToTransfer(self, studyId, detCaseEntry): + """ + This method can be used to specify files to transfer to the + computation resource. It is not useful for DEVIATION since it only + uses values from Salome study. + """ + try: + logger.info("GetFilesToTransfer: " + self._getIdMessage()) + inputFiles = [] + outputFiles = [] + return (inputFiles, outputFiles) + except: + self._raiseSalomeError() + ###################################################################### # This is the computation part of the GENERICSOLVER module, ie # the following method realizes what the solver is intended to do.