-# Copyright (C) 2009-2010 EDF R&D
+# Copyright (C) 2009-2011 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
# $Id$
#
+import os
import logging
import threading
import inspect
import traceback
+import platform
+import thread
import salome
import GENERICSOLVER_ORB__POA
import SALOME_DriverPy
import SALOME
-from pal.logger import Logger
-from pal import termcolor
+from salome.kernel.logger import Logger
+from salome.kernel import termcolor
logger = Logger("DEVIATION", color = termcolor.RED_FG)
logger.setLevel(logging.INFO)
+from salome.kernel.parametric.compo_utils import \
+ create_input_dict, create_normal_parametric_output, create_error_parametric_output
+
VARIABLE_ID = 1030
###
exc = SALOME.ExceptionStruct(SALOME.INTERNAL_ERROR, message,
inspect.stack()[1][1], inspect.stack()[1][2])
raise SALOME.SALOME_Exception(exc)
+
+ 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())
- def Init(self, studyId, caseEntry):
+ def Init(self, studyId, detCaseEntry):
"""
This method is an example for the initialization of a computation component for
use with OpenTURNS in SALOME 5.1.5 and later (for YACS integration)
"""
try:
- logger.info("Init: " + self._containerName + ' ; ' + self._instanceName)
+ logger.info("Init: " + self._getIdMessage())
DEVIATION.lock.acquire()
salome.salome_init()
DEVIATION.lock.release()
- self.deterministicValues = GetDataFromCase(studyId, caseEntry)
+ self.deterministicValues = GetDataFromCase(studyId, detCaseEntry)
logger.debug("deterministic values: %s" % self.deterministicValues)
except:
self._raiseSalomeError()
- def Exec(self, inputDesc):
+ def Exec(self, paramInput):
"""
This method is an example for the execution of a computation component for
use with OpenTURNS in SALOME 5.1.5 and later (for YACS integration)
"""
try:
- logger.info("Exec: " + self._containerName + ' ; ' + self._instanceName)
- logger.debug("inputVarList: %s" % inputDesc.inputVarList)
- logger.debug("outputVarList: %s" % inputDesc.outputVarList)
- logger.debug("inputValues: %s" % inputDesc.inputValues)
- if len(inputDesc.inputValues) != len(inputDesc.inputVarList):
- raise Exception("Size mismatch between inputVarList and point to evaluate")
-
- evalPoint = self.deterministicValues
- for i in range(len(inputDesc.inputVarList)):
- evalPoint[inputDesc.inputVarList[i]] = inputDesc.inputValues[i][0]
- logger.debug("evalPoint = %s" % evalPoint)
-
- resDict = {}
- resDict["dev"] = self.BeamModel(**evalPoint)
-
- outputValues = []
- for outputVar in inputDesc.outputVarList:
- outputValues.append([resDict[outputVar]])
- logger.debug("outputValues: %s" % outputValues)
- return outputValues
+ logger.info("Exec: " + self._getIdMessage())
+ logger.debug("inputVarList: %s" % paramInput.inputVarList)
+ logger.debug("outputVarList: %s" % paramInput.outputVarList)
+ logger.debug("inputValues: %s" % paramInput.inputValues)
+
+ # Get id
+ id = ""
+ for parameter in paramInput.specificParameters:
+ if parameter.name == "id":
+ id = parameter.value
+ logger.debug("ID: %s" % id)
+
+ 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 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()
It cleans everything set so far.
"""
try:
- logger.info("Finalize: " + self._containerName + ' ; ' + self._instanceName)
+ 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.