- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
HFSS15: Compute(IUDSInputData inData,
IUDSOutputData outData,
IPropertyList propList,
IProgressMonitor progressMonitor)
Purpose: This is the main computation method which generates the data for the quantities that make up the UDO solution.
Parameters:
inData – UDSInputData object: Used to get the input probe data.
outData – UDSOutputData object: Used to set the UDO solution quantity and sweep data.
propList – IPropertyList object: Used to get the user entered values for each of the properties defined during the GetInputUDSParams call.
progressMonitor – IProgressMonitor object. This can be used to set progress for long running calculations, check for user initiated abort etc.
Returns: True on success, False on failure.
The data is received from UI using IUDSInputData API. It is processed and the result data is sent to UI using IUDSOutputData API.
Example:
# IUserDefinedSolutionHandle API implementation.
# Calculates output values and sets them using IUDSInputData/IUDSOutputData API.
def Compute(self, inData, outData, propList, progMon):
# Get the sweeps associated with the probe and validate
# use the probe name that we had defined earlier
sweeps = inData.GetSweepNamesForProbe("probe1")
if( sweeps == None or sweeps.Count > 1):
AddErrorMessage(self.GetName() + "Unexpected sweep count 0 or > 1 in Compute")
return False
# Get the data associated with our probe
probeData = inData.GetDoubleProbeData("probe1")
sweepData = inData.GetSweepsDataForProbe("probe1", sweeps[0])
# Get the user specified properties.
# Note that ideally, these "X Min" etc names should be written as
# constant membets and referred to in both the GetInputUDSParams
# and in Compute to reduce the change of typos.
useXRangeProp = propList.GetMenuProperty("Activate X Limits").SelectedMenuChoice
xRangeStart = propList.GetNumberProperty("X Min").ValueSI
xRangeEnd = propList.GetNumberProperty("X Max").ValueSI
# At this stage, one can look at the RequestedQuantities and create
# a dictionary to later check against. However, I am simply computing
# all the quantities.
minVal = 0
maxVal = 0
avgVal = 0
# Check if we need to perform range computation
if useXRangeProp == "Yes":
seenAny = False
avgSum = 0
count = 0
# zip is used since we also need to pull in sweep data
# an index and the array notation could also have been used
for probeVal, sweepVal in zip(probeData, sweepData):
if sweepVal < xRangeStart or sweepVal > xRangeEnd:
pass
# Note that in a better written script, this code would be
# refactored into it's own function to avoid code
# duplication
if not seenAny:
minVal = probeVal
maxVal = probeVal
avgSum = probeVal
seenAny = True
count = 1
else:
if probeVal < minVal:
minVal = probeVal
if probeVal > maxVal:
maxVal = probeVal
avgSum += probeVal
count += 1
if seenAny:
avgVal = avgSum/count
else:
seenAny = False
avgSum = 0
for probeVal in probeData:
if not seenAny:
minVal = probeVal
maxVal = probeVal
avgSum = probeVal
seenAny = True
else:
if probeVal < minVal:
minVal = probeVal
if probeVal > maxVal:
maxVal = probeVal
avgSum += probeVal
if seenAny:
avgVal = avgSum/probeData.Count
# Finally set the output values. Note that these are always set as
# lists even if we have just one item.
outData.SetDoubleQuantityData("min_val", [minVal])
outData.SetDoubleQuantityData("max_val", [maxVal])
outData.SetDoubleQuantityData("avg_val", [avgVal])
# And we are done.
return True
HFSS 学习培训课程套装,专家讲解,视频教学,帮助您全面系统地学习掌握HFSS
上一篇:Constant Command
下一篇:Constants Class


