diff --git a/doc/sqa/srs/requirements_list.xml b/doc/sqa/srs/requirements_list.xml
index 51ab0bb406..1601463ff2 100644
--- a/doc/sqa/srs/requirements_list.xml
+++ b/doc/sqa/srs/requirements_list.xml
@@ -97,6 +97,9 @@
RAVEN shall be able to compute probability of failure based on generated data and goal functions
+
+ RAVEN shall be able to estimate the maximum (bounding) error in the computation of the probability of failure based on generated data and goal functions
+
diff --git a/doc/user_manual/postprocessor.tex b/doc/user_manual/postprocessor.tex
index 2c54b79552..9e2ad13d5e 100644
--- a/doc/user_manual/postprocessor.tex
+++ b/doc/user_manual/postprocessor.tex
@@ -809,6 +809,16 @@ \subsubsection{LimitSurfaceIntegral}
\item \xmlNode{integralType}, \xmlDesc{string, optional field}, specifies the type of integrations that
need to be used. Currently only MonteCarlo integration is available
\default{MonteCarlo}
+ \item \xmlNode{computeBounds}, \xmlDesc{bool, optional field},
+ activates the computation of the bounding error of the limit
+ surface integral ( maximum error in the identification of the
+ limit surface location). If True, the bounding error is stored
+ in a variable named as \xmlNode{outputName} appending the suffix
+ ``\_err''. For example, if \xmlNode{outputName} is
+ ``EventProbability'', the bounding error will be stored as
+ ``EventProbability\_err'' (this variable name must be listed as
+ variable in the output DataObject).
+ \default{False}
\item \xmlNode{seed}, \xmlDesc{integer, optional field}, specifies the random number generator seed.
\default{20021986}
\item \xmlNode{target}, \xmlDesc{string, optional field}, specifies the target name that represents
diff --git a/framework/CodeInterfaces/MooseBasedApp/MooseBasedAppInterface.py b/framework/CodeInterfaces/MooseBasedApp/MooseBasedAppInterface.py
index d6f39e49c9..be23d0732c 100644
--- a/framework/CodeInterfaces/MooseBasedApp/MooseBasedAppInterface.py
+++ b/framework/CodeInterfaces/MooseBasedApp/MooseBasedAppInterface.py
@@ -190,4 +190,4 @@ def dynamicEventTreeForMooseBasedApp(self,**Kwargs):
@ Out, listDict, list, list of dictionaries used by the parser to change the input file
"""
listDict = []
- raise IOError('dynamicEventTreeForMooseBasedApp not yet implemented')
\ No newline at end of file
+ raise IOError('dynamicEventTreeForMooseBasedApp not yet implemented')
diff --git a/framework/CodeInterfaces/MooseBasedApp/MooseInputParser.py b/framework/CodeInterfaces/MooseBasedApp/MooseInputParser.py
index 29f427b290..f40136275f 100644
--- a/framework/CodeInterfaces/MooseBasedApp/MooseInputParser.py
+++ b/framework/CodeInterfaces/MooseBasedApp/MooseInputParser.py
@@ -265,4 +265,4 @@ def findInTree(searchNode, targetPath, heritage=None):
found = findInTree(sub, targetPath[1:], heritage=heritage)
if found:
break
- return found
\ No newline at end of file
+ return found
diff --git a/framework/DataObjects/DataSet.py b/framework/DataObjects/DataSet.py
index 002d9df36c..930e739741 100644
--- a/framework/DataObjects/DataSet.py
+++ b/framework/DataObjects/DataSet.py
@@ -1244,8 +1244,6 @@ def _convertToXrDataset(self):
self.addMeta('DataSet',{'Hierarchical':{'path':','.join(p)}})
# clear alignment tracking for indexes
self._clearAlignment()
- else:
- self.raiseAWarning('No data in DataSet to construct!')
return self._data
def _formatRealization(self,rlz):
diff --git a/framework/Databases.py b/framework/Databases.py
index 882f6b17e7..37ad8cadef 100644
--- a/framework/Databases.py
+++ b/framework/Databases.py
@@ -92,8 +92,8 @@ def _handleInput(self, paramInput):
self.raiseADebug('HDF5 Read Mode is "'+self.readMode+'".')
if self.readMode == 'overwrite':
# check if self.databaseDir exists or create in case not
- if not os.path.exists(self.databaseDir):
- os.mkdir(self.databaseDir)
+ if not os.path.isdir(self.databaseDir):
+ os.makedirs(self.databaseDir, exist_ok=True)
# get full path
fullpath = os.path.join(self.databaseDir,self.filename)
if os.path.isfile(fullpath):
diff --git a/framework/Optimizers/SimulatedAnnealing.py b/framework/Optimizers/SimulatedAnnealing.py
index d7d5e3b547..0b40c66e3c 100644
--- a/framework/Optimizers/SimulatedAnnealing.py
+++ b/framework/Optimizers/SimulatedAnnealing.py
@@ -713,4 +713,4 @@ def __del__(self):
@ In, None
@ Out, None
"""
- return
\ No newline at end of file
+ return
diff --git a/framework/PostProcessors/LimitSurfaceIntegral.py b/framework/PostProcessors/LimitSurfaceIntegral.py
index 11b1ad47d2..2f64d6790c 100644
--- a/framework/PostProcessors/LimitSurfaceIntegral.py
+++ b/framework/PostProcessors/LimitSurfaceIntegral.py
@@ -22,7 +22,8 @@
import numpy as np
import xarray
import math
-import os
+import sys
+from copy import deepcopy
#External Modules End--------------------------------------------------------------------------------
#Internal Modules------------------------------------------------------------------------------------
@@ -78,6 +79,9 @@ class cls.
LSIOutputNameInput = InputData.parameterInputFactory("outputName", contentType=InputTypes.StringType)
inputSpecification.addSub(LSIOutputNameInput)
+ LSIOutputNameInput = InputData.parameterInputFactory("computeBounds", contentType=InputTypes.BoolType)
+ inputSpecification.addSub(LSIOutputNameInput)
+
return inputSpecification
def __init__(self, messageHandler):
@@ -93,13 +97,15 @@ def __init__(self, messageHandler):
self.integralType = 'montecarlo' # integral type (which alg needs to be used). Either montecarlo or quadrature(quadrature not yet)
self.seed = 20021986 # seed for montecarlo
self.matrixDict = {} # dictionary of arrays and target
- self.lowerUpperDict = {}
- self.functionS = None
- self.computationPrefix = None
+ self.computeErrrorBounds = False # compute the bounding error?
+ self.lowerUpperDict = {} # dictionary of lower and upper bounds (used if no distributions are inputted)
+ self.functionS = None # evaluation classifier for the integration
+ self.errorModel = None # classifier used for the error estimation
+ self.computationPrefix = None # output prefix for the storage of the probability and, if requested, bounding error
self.stat = BasicStatistics(self.messageHandler) # instantiation of the 'BasicStatistics' processor, which is used to compute the pb given montecarlo evaluations
- self.stat.what = ['expectedValue']
- self.addAssemblerObject('distribution','-n', newXmlFlg = True)
- self.printTag = 'POSTPROCESSOR INTEGRAL'
+ self.stat.what = ['expectedValue'] # expected value calculation
+ self.addAssemblerObject('distribution','-n', newXmlFlg = True) # distributions are optional
+ self.printTag = 'POSTPROCESSOR INTEGRAL' # print tag
def _localReadMoreXML(self, xmlNode):
"""
@@ -159,6 +165,8 @@ def _handleInput(self, paramInput):
self.target = child.value
elif child.getName() == 'outputName':
self.computationPrefix = child.value
+ elif child.getName() == 'computeBounds':
+ self.computeErrrorBounds = child.value
else:
self.raiseAnError(NameError, 'invalid or missing labels after the variables call. Only "variable" is accepted.tag: ' + child.getName())
# if no distribution, we look for the integration domain in the input
@@ -166,10 +174,11 @@ def _handleInput(self, paramInput):
if self.variableDist[varName] == None:
if 'lowerBound' not in self.lowerUpperDict[varName].keys() or 'upperBound' not in self.lowerUpperDict[varName].keys():
self.raiseAnError(NameError, 'either a distribution name or lowerBound and upperBound need to be specified for variable ' + varName)
- if self.computationPrefix == None:
+ if self.computationPrefix is None:
self.raiseAnError(IOError,'The required XML node has not been inputted!!!')
- if self.target == None:
+ if self.target is None:
self.raiseAWarning('integral target has not been provided. The postprocessor is going to take the last output it finds in the provided limitsurface!!!')
+ True
def initialize(self, runInfo, inputs, initDict):
"""
@@ -183,10 +192,29 @@ def initialize(self, runInfo, inputs, initDict):
if self.integralType in ['montecarlo']:
self.stat.toDo = {'expectedValue':[{'targets':set([self.target]), 'prefix':self.computationPrefix}]}
self.stat.initialize(runInfo, inputs, initDict)
- self.functionS = LearningGate.returnInstance('SupervisedGate','SciKitLearn', self, **{'SKLtype':'neighbors|KNeighborsClassifier', 'Features':','.join(list(self.variableDist.keys())), 'Target':self.target})
+ self.functionS = LearningGate.returnInstance('SupervisedGate','SciKitLearn', self,
+ **{'SKLtype':'neighbors|KNeighborsClassifier',
+ 'Features':','.join(list(self.variableDist.keys())),
+ 'Target':self.target, 'n_jobs': -1})
self.functionS.train(self.matrixDict)
self.raiseADebug('DATA SET MATRIX:')
self.raiseADebug(self.matrixDict)
+ if self.computeErrrorBounds:
+ # create a model for computing the "error"
+ self.errorModel = LearningGate.returnInstance('SupervisedGate','SciKitLearn', self,
+ **{'SKLtype':'neighbors|KNeighborsClassifier',
+ 'Features':','.join(list(self.variableDist.keys())),
+ 'Target':self.target, 'weights': 'distance', 'n_jobs': -1})
+ #modify the self.matrixDict to compute half of the "error"
+ indecesToModifyOnes = np.argwhere(self.matrixDict[self.target] > 0.).flatten()
+ res = np.concatenate((np.ones(len(indecesToModifyOnes)), np.zeros(len(indecesToModifyOnes))))
+ modifiedMatrixDict = {}
+ for key in self.matrixDict:
+ avg = np.average(self.matrixDict[key][indecesToModifyOnes])
+ modifiedMatrixDict[key] = np.concatenate((self.matrixDict[key][indecesToModifyOnes], self.matrixDict[key][indecesToModifyOnes]
+ + (self.matrixDict[key][indecesToModifyOnes]/avg * 1.e-14))) if key != self.target else res
+ self.errorModel.train(modifiedMatrixDict)
+
for varName, distName in self.variableDist.items():
if distName != None:
self.variableDist[varName] = self.retrieveObjectFromAssemblerDict('distribution', distName)
@@ -228,8 +256,9 @@ def run(self, input):
This method executes the postprocessor action. In this case, it performs the computation of the LS integral
@ In, input, object, object contained the data to process. (inputToInternal output)
@ Out, pb, float, integral outcome (probability of the event)
+ @ Out, boundError, float, optional, error bound (maximum error of the computed probability)
"""
- pb = None
+ pb, boundError = None, None
if self.integralType == 'montecarlo':
tempDict = {}
randomMatrix = np.random.rand(int(math.ceil(1.0 / self.tolerance**2)), len(self.variableDist.keys()))
@@ -241,9 +270,11 @@ def run(self, input):
randomMatrix[:, index] = f(randomMatrix[:, index])
tempDict[varName] = randomMatrix[:, index]
pb = self.stat.run({'targets':{self.target:xarray.DataArray(self.functionS.evaluate(tempDict)[self.target])}})[self.computationPrefix +"_"+self.target]
+ if self.errorModel:
+ boundError = abs(pb-self.stat.run({'targets':{self.target:xarray.DataArray(self.errorModel.evaluate(tempDict)[self.target])}})[self.computationPrefix +"_"+self.target])
else:
self.raiseAnError(NotImplemented, "quadrature not yet implemented")
- return pb
+ return pb, boundError
def collectOutput(self, finishedJob, output):
"""
@@ -253,13 +284,18 @@ def collectOutput(self, finishedJob, output):
@ Out, None
"""
evaluation = finishedJob.getEvaluation()
- pb = evaluation[1]
+ pb, boundError = evaluation[1]
lms = evaluation[0][0]
if output.type == 'PointSet':
# we store back the limitsurface
dataSet = lms.asDataset()
loadDict = {key: dataSet[key].values for key in lms.getVars()}
loadDict[self.computationPrefix] = np.full(len(lms), pb)
+ if self.computeErrrorBounds:
+ if self.computationPrefix+"_err" not in output.getVars():
+ self.raiseAWarning('ERROR Bounds have been computed but the output DataObject does not request the variable: "', self.computationPrefix+"_err", '"!')
+ else:
+ loadDict[self.computationPrefix+"_err"] = np.full(len(lms), boundError)
output.load(loadDict,'dict')
# NB I keep this commented part in case we want to keep the possibility to have outputfiles for PP
#elif isinstance(output,Files.File):
diff --git a/framework/Samplers/LimitSurfaceSearch.py b/framework/Samplers/LimitSurfaceSearch.py
index 6ac2431935..e2b20ab0a6 100644
--- a/framework/Samplers/LimitSurfaceSearch.py
+++ b/framework/Samplers/LimitSurfaceSearch.py
@@ -850,5 +850,4 @@ def _formatSolutionExportVariableNames(self, acceptable):
new.append(template.format(RESIDUUM=self.goalFunction.name))
else:
new.append(template)
- print('DEBUGG new:', new)
return set(new)
diff --git a/tests/framework/PostProcessors/LimitSurface/gold/limitSurfaceBoundingError/LimitSurfaceWeightedPb_dump.csv b/tests/framework/PostProcessors/LimitSurface/gold/limitSurfaceBoundingError/LimitSurfaceWeightedPb_dump.csv
new file mode 100644
index 0000000000..75ba0c3b2e
--- /dev/null
+++ b/tests/framework/PostProcessors/LimitSurface/gold/limitSurfaceBoundingError/LimitSurfaceWeightedPb_dump.csv
@@ -0,0 +1,201 @@
+y0,x0,EventProbability,EventProbability_err,goalFunctionForLimitSurface
+7.05613837842,1.63193506661,0.503725,0.01371875,0.0
+7.05613837842,1.67929636528,0.503725,0.01371875,0.0
+7.00598866187,1.72665766395,0.503725,0.01371875,0.0
+6.95583894533,1.77401896262,0.503725,0.01371875,0.0
+6.90568922878,1.82138026128,0.503725,0.01371875,0.0
+6.85553951223,1.86874155995,0.503725,0.01371875,0.0
+6.85553951223,1.91610285862,0.503725,0.01371875,0.0
+6.80538979569,1.96346415729,0.503725,0.01371875,0.0
+6.75524007914,2.01082545595,0.503725,0.01371875,0.0
+6.70509036259,2.05818675462,0.503725,0.01371875,0.0
+6.65494064604,2.10554805329,0.503725,0.01371875,0.0
+6.65494064604,2.15290935196,0.503725,0.01371875,0.0
+6.6047909295,2.20027065063,0.503725,0.01371875,0.0
+6.55464121295,2.24763194929,0.503725,0.01371875,0.0
+6.5044914964,2.29499324796,0.503725,0.01371875,0.0
+6.45434177986,2.34235454663,0.503725,0.01371875,0.0
+6.40419206331,2.3897158453,0.503725,0.01371875,0.0
+6.40419206331,2.43707714396,0.503725,0.01371875,0.0
+6.35404234676,2.48443844263,0.503725,0.01371875,0.0
+6.30389263022,2.5317997413,0.503725,0.01371875,0.0
+6.25374291367,2.57916103997,0.503725,0.01371875,0.0
+6.20359319712,2.62652233864,0.503725,0.01371875,0.0
+6.20359319712,2.6738836373,0.503725,0.01371875,0.0
+6.15344348058,2.72124493597,0.503725,0.01371875,0.0
+6.10329376403,2.76860623464,0.503725,0.01371875,0.0
+6.05314404748,2.81596753331,0.503725,0.01371875,0.0
+6.00299433094,2.86332883197,0.503725,0.01371875,0.0
+6.00299433094,2.91069013064,0.503725,0.01371875,0.0
+5.95284461439,2.95805142931,0.503725,0.01371875,0.0
+5.90269489784,3.00541272798,0.503725,0.01371875,0.0
+5.8525451813,3.05277402664,0.503725,0.01371875,0.0
+5.80239546475,3.10013532531,0.503725,0.01371875,0.0
+5.7522457482,3.14749662398,0.503725,0.01371875,0.0
+5.7522457482,3.19485792265,0.503725,0.01371875,0.0
+5.70209603166,3.24221922132,0.503725,0.01371875,0.0
+5.65194631511,3.28958051998,0.503725,0.01371875,0.0
+5.60179659856,3.33694181865,0.503725,0.01371875,0.0
+5.55164688201,3.38430311732,0.503725,0.01371875,0.0
+5.55164688201,3.43166441599,0.503725,0.01371875,0.0
+5.50149716547,3.47902571465,0.503725,0.01371875,0.0
+5.45134744892,3.52638701332,0.503725,0.01371875,0.0
+5.40119773237,3.57374831199,0.503725,0.01371875,0.0
+5.35104801583,3.62110961066,0.503725,0.01371875,0.0
+5.35104801583,3.66847090933,0.503725,0.01371875,0.0
+5.30089829928,3.71583220799,0.503725,0.01371875,0.0
+5.25074858273,3.76319350666,0.503725,0.01371875,0.0
+5.20059886619,3.81055480533,0.503725,0.01371875,0.0
+5.15044914964,3.857916104,0.503725,0.01371875,0.0
+5.15044914964,3.90527740266,0.503725,0.01371875,0.0
+5.10029943309,3.95263870133,0.503725,0.01371875,0.0
+5.05014971655,4.0,0.503725,0.01371875,0.0
+5.0,4.04736129867,0.503725,0.01371875,0.0
+4.94985028345,4.09472259734,0.503725,0.01371875,0.0
+4.89970056691,4.142083896,0.503725,0.01371875,0.0
+4.89970056691,4.18944519467,0.503725,0.01371875,0.0
+4.84955085036,4.23680649334,0.503725,0.01371875,0.0
+4.79940113381,4.28416779201,0.503725,0.01371875,0.0
+4.74925141727,4.33152909067,0.503725,0.01371875,0.0
+4.69910170072,4.37889038934,0.503725,0.01371875,0.0
+4.69910170072,4.42625168801,0.503725,0.01371875,0.0
+4.64895198417,4.47361298668,0.503725,0.01371875,0.0
+4.59880226763,4.52097428535,0.503725,0.01371875,0.0
+4.54865255108,4.56833558401,0.503725,0.01371875,0.0
+4.49850283453,4.61569688268,0.503725,0.01371875,0.0
+4.49850283453,4.66305818135,0.503725,0.01371875,0.0
+4.44835311799,4.71041948002,0.503725,0.01371875,0.0
+4.39820340144,4.75778077868,0.503725,0.01371875,0.0
+4.34805368489,4.80514207735,0.503725,0.01371875,0.0
+4.29790396834,4.85250337602,0.503725,0.01371875,0.0
+4.2477542518,4.89986467469,0.503725,0.01371875,0.0
+4.2477542518,4.94722597336,0.503725,0.01371875,0.0
+4.19760453525,4.99458727202,0.503725,0.01371875,0.0
+4.1474548187,5.04194857069,0.503725,0.01371875,0.0
+4.09730510216,5.08930986936,0.503725,0.01371875,0.0
+4.04715538561,5.13667116803,0.503725,0.01371875,0.0
+4.04715538561,5.18403246669,0.503725,0.01371875,0.0
+3.99700566906,5.23139376536,0.503725,0.01371875,0.0
+3.94685595252,5.27875506403,0.503725,0.01371875,0.0
+3.89670623597,5.3261163627,0.503725,0.01371875,0.0
+3.84655651942,5.37347766136,0.503725,0.01371875,0.0
+3.84655651942,5.42083896003,0.503725,0.01371875,0.0
+3.79640680288,5.4682002587,0.503725,0.01371875,0.0
+3.74625708633,5.51556155737,0.503725,0.01371875,0.0
+3.69610736978,5.56292285604,0.503725,0.01371875,0.0
+3.64595765324,5.6102841547,0.503725,0.01371875,0.0
+3.64595765324,5.65764545337,0.503725,0.01371875,0.0
+3.59580793669,5.70500675204,0.503725,0.01371875,0.0
+3.54565822014,5.75236805071,0.503725,0.01371875,0.0
+3.4955085036,5.79972934937,0.503725,0.01371875,0.0
+3.44535878705,5.84709064804,0.503725,0.01371875,0.0
+3.3952090705,5.89445194671,0.503725,0.01371875,0.0
+3.3952090705,5.94181324538,0.503725,0.01371875,0.0
+3.34505935396,5.98917454405,0.503725,0.01371875,0.0
+3.29490963741,6.03653584271,0.503725,0.01371875,0.0
+3.24475992086,6.08389714138,0.503725,0.01371875,0.0
+3.19461020431,6.13125844005,0.503725,0.01371875,0.0
+3.19461020431,6.17861973872,0.503725,0.01371875,0.0
+3.14446048777,6.22598103738,0.503725,0.01371875,0.0
+3.09431077122,6.27334233605,0.503725,0.01371875,0.0
+3.04416105467,6.32070363472,0.503725,0.01371875,0.0
+7.00598866187,1.63193506661,0.503725,0.01371875,1.0
+7.00598866187,1.67929636528,0.503725,0.01371875,1.0
+6.95583894533,1.72665766395,0.503725,0.01371875,1.0
+6.90568922878,1.77401896262,0.503725,0.01371875,1.0
+6.85553951223,1.82138026128,0.503725,0.01371875,1.0
+6.80538979569,1.86874155995,0.503725,0.01371875,1.0
+6.80538979569,1.91610285862,0.503725,0.01371875,1.0
+6.75524007914,1.96346415729,0.503725,0.01371875,1.0
+6.70509036259,2.01082545595,0.503725,0.01371875,1.0
+6.65494064604,2.05818675462,0.503725,0.01371875,1.0
+6.6047909295,2.10554805329,0.503725,0.01371875,1.0
+6.6047909295,2.15290935196,0.503725,0.01371875,1.0
+6.55464121295,2.20027065063,0.503725,0.01371875,1.0
+6.5044914964,2.24763194929,0.503725,0.01371875,1.0
+6.45434177986,2.29499324796,0.503725,0.01371875,1.0
+6.40419206331,2.34235454663,0.503725,0.01371875,1.0
+6.35404234676,2.3897158453,0.503725,0.01371875,1.0
+6.35404234676,2.43707714396,0.503725,0.01371875,1.0
+6.30389263022,2.48443844263,0.503725,0.01371875,1.0
+6.25374291367,2.5317997413,0.503725,0.01371875,1.0
+6.20359319712,2.57916103997,0.503725,0.01371875,1.0
+6.15344348058,2.62652233864,0.503725,0.01371875,1.0
+6.15344348058,2.6738836373,0.503725,0.01371875,1.0
+6.10329376403,2.72124493597,0.503725,0.01371875,1.0
+6.05314404748,2.76860623464,0.503725,0.01371875,1.0
+6.00299433094,2.81596753331,0.503725,0.01371875,1.0
+5.95284461439,2.86332883197,0.503725,0.01371875,1.0
+5.95284461439,2.91069013064,0.503725,0.01371875,1.0
+5.90269489784,2.95805142931,0.503725,0.01371875,1.0
+5.8525451813,3.00541272798,0.503725,0.01371875,1.0
+5.80239546475,3.05277402664,0.503725,0.01371875,1.0
+5.7522457482,3.10013532531,0.503725,0.01371875,1.0
+5.70209603166,3.14749662398,0.503725,0.01371875,1.0
+5.70209603166,3.19485792265,0.503725,0.01371875,1.0
+5.65194631511,3.24221922132,0.503725,0.01371875,1.0
+5.60179659856,3.28958051998,0.503725,0.01371875,1.0
+5.55164688201,3.33694181865,0.503725,0.01371875,1.0
+5.50149716547,3.38430311732,0.503725,0.01371875,1.0
+5.50149716547,3.43166441599,0.503725,0.01371875,1.0
+5.45134744892,3.47902571465,0.503725,0.01371875,1.0
+5.40119773237,3.52638701332,0.503725,0.01371875,1.0
+5.35104801583,3.57374831199,0.503725,0.01371875,1.0
+5.30089829928,3.62110961066,0.503725,0.01371875,1.0
+5.30089829928,3.66847090933,0.503725,0.01371875,1.0
+5.25074858273,3.71583220799,0.503725,0.01371875,1.0
+5.20059886619,3.76319350666,0.503725,0.01371875,1.0
+5.15044914964,3.81055480533,0.503725,0.01371875,1.0
+5.10029943309,3.857916104,0.503725,0.01371875,1.0
+5.10029943309,3.90527740266,0.503725,0.01371875,1.0
+5.05014971655,3.95263870133,0.503725,0.01371875,1.0
+5.0,4.0,0.503725,0.01371875,1.0
+4.94985028345,4.04736129867,0.503725,0.01371875,1.0
+4.89970056691,4.09472259734,0.503725,0.01371875,1.0
+4.84955085036,4.142083896,0.503725,0.01371875,1.0
+4.84955085036,4.18944519467,0.503725,0.01371875,1.0
+4.79940113381,4.23680649334,0.503725,0.01371875,1.0
+4.74925141727,4.28416779201,0.503725,0.01371875,1.0
+4.69910170072,4.33152909067,0.503725,0.01371875,1.0
+4.64895198417,4.37889038934,0.503725,0.01371875,1.0
+4.64895198417,4.42625168801,0.503725,0.01371875,1.0
+4.59880226763,4.47361298668,0.503725,0.01371875,1.0
+4.54865255108,4.52097428535,0.503725,0.01371875,1.0
+4.49850283453,4.56833558401,0.503725,0.01371875,1.0
+4.44835311799,4.61569688268,0.503725,0.01371875,1.0
+4.44835311799,4.66305818135,0.503725,0.01371875,1.0
+4.39820340144,4.71041948002,0.503725,0.01371875,1.0
+4.34805368489,4.75778077868,0.503725,0.01371875,1.0
+4.29790396834,4.80514207735,0.503725,0.01371875,1.0
+4.2477542518,4.85250337602,0.503725,0.01371875,1.0
+4.19760453525,4.89986467469,0.503725,0.01371875,1.0
+4.19760453525,4.94722597336,0.503725,0.01371875,1.0
+4.1474548187,4.99458727202,0.503725,0.01371875,1.0
+4.09730510216,5.04194857069,0.503725,0.01371875,1.0
+4.04715538561,5.08930986936,0.503725,0.01371875,1.0
+3.99700566906,5.13667116803,0.503725,0.01371875,1.0
+3.99700566906,5.18403246669,0.503725,0.01371875,1.0
+3.94685595252,5.23139376536,0.503725,0.01371875,1.0
+3.89670623597,5.27875506403,0.503725,0.01371875,1.0
+3.84655651942,5.3261163627,0.503725,0.01371875,1.0
+3.79640680288,5.37347766136,0.503725,0.01371875,1.0
+3.79640680288,5.42083896003,0.503725,0.01371875,1.0
+3.74625708633,5.4682002587,0.503725,0.01371875,1.0
+3.69610736978,5.51556155737,0.503725,0.01371875,1.0
+3.64595765324,5.56292285604,0.503725,0.01371875,1.0
+3.59580793669,5.6102841547,0.503725,0.01371875,1.0
+3.59580793669,5.65764545337,0.503725,0.01371875,1.0
+3.54565822014,5.70500675204,0.503725,0.01371875,1.0
+3.4955085036,5.75236805071,0.503725,0.01371875,1.0
+3.44535878705,5.79972934937,0.503725,0.01371875,1.0
+3.3952090705,5.84709064804,0.503725,0.01371875,1.0
+3.34505935396,5.89445194671,0.503725,0.01371875,1.0
+3.34505935396,5.94181324538,0.503725,0.01371875,1.0
+3.29490963741,5.98917454405,0.503725,0.01371875,1.0
+3.24475992086,6.03653584271,0.503725,0.01371875,1.0
+3.19461020431,6.08389714138,0.503725,0.01371875,1.0
+3.14446048777,6.13125844005,0.503725,0.01371875,1.0
+3.14446048777,6.17861973872,0.503725,0.01371875,1.0
+3.09431077122,6.22598103738,0.503725,0.01371875,1.0
+3.04416105467,6.27334233605,0.503725,0.01371875,1.0
+2.99401133813,6.32070363472,0.503725,0.01371875,1.0
diff --git a/tests/framework/PostProcessors/LimitSurface/test_LimitSurface_with_err_bounds.xml b/tests/framework/PostProcessors/LimitSurface/test_LimitSurface_with_err_bounds.xml
new file mode 100644
index 0000000000..ab36e245ec
--- /dev/null
+++ b/tests/framework/PostProcessors/LimitSurface/test_LimitSurface_with_err_bounds.xml
@@ -0,0 +1,138 @@
+
+
+
+ framework/PostProcessors/LimitSurface.testLimitSurfaceIntegralPPWihtBoundingError
+ alfoa
+ 2020-04-15
+ Models.PostProcessors.LimitSurface, Models.PostProcessors.LimitSurfaceIntegral
+
+ This test is aimed to check the capability of RAVEN to compute the integral of the Limit Surface (e.g.
+ Failure probability) reporting the bounding error as well (the maximum error, in probability, in the computation of the limit surface )
+
+
+ Added test for computation of the error bound and linked to new requirement
+
+ R-RA-8
+
+
+
+ limitSurfaceBoundingError
+ FirstMRun,ComputeLimitSurfacePositiveNegative,ComputeLimitSurfaceIntegralWeighted
+ 1
+
+
+
+
+ z,x0,y0
+
+
+ x0,y0
+ both
+ Acc
+ goalFunctionForLimitSurface
+
+
+ 0.0025
+ MonteCarlo
+ 20021986
+ goalFunctionForLimitSurface
+ EventProbability
+ True
+
+ x0_distrib
+
+
+ y0_distrib
+
+
+
+ x0,y0
+ goalFunctionForLimitSurface
+ svm|LinearSVC
+ 1
+ 0.0001
+ 10
+
+
+
+
+
+ z
+
+
+
+
+
+ 4
+ 2
+ 0.0
+ 8.0
+
+
+ 5
+ 2
+ 0.0
+ 10.0
+
+
+
+
+
+
+ x0_distrib
+ 0.1 0.9
+
+
+ y0_distrib
+ 0.1 0.9
+
+
+
+
+
+
+ Dummy
+ PythonModule
+ Grid_external
+
+
+
+ PointSetPostProcTest
+ computeLimitSurfacePositiveNegative
+
+
+
+ LimitSurfacePositiveNegative
+ LimitSurfaceIntegralWeighted
+
+
+
+
+
+
+
+ csv
+
+
+
+
+
+
+ x0,y0
+
+
+
+ y0,x0
+
+
+
+ y0,x0
+
+
+
+ x0,y0
+
+
+
+
+
diff --git a/tests/framework/PostProcessors/LimitSurface/tests b/tests/framework/PostProcessors/LimitSurface/tests
index cadc0c504e..d814c8cbfe 100644
--- a/tests/framework/PostProcessors/LimitSurface/tests
+++ b/tests/framework/PostProcessors/LimitSurface/tests
@@ -26,4 +26,15 @@
max_time = 300
rel_err = 0.0001
[../]
+
+ [./testLimitSurfaceIntegralPPWihtBoundingError]
+ type = 'RavenFramework'
+ input = 'test_LimitSurface_with_err_bounds.xml'
+ output = 'limitSurfaceBoundingError/LimitSurfaceWeightedPb_dump.xml'
+ csv = 'limitSurfaceBoundingError/LimitSurfaceWeightedPb_dump.csv'
+ max_time = 300
+ rel_err = 0.001
+ [../]
+
+
[]