Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

**Kratos version:** 8.1

**XMC version:** 2.0
**XMC version:** Kratos default version

**PyCOMPSs version:** 2.7
**PyCOMPSs version:** Kratos default version to run in serial, >2.8 to run with `runcompss`

**Source files:** [Synchronous Monte Carlo](synchronous_monte_carlo), [Asynchronous Monte Carlo](asynchronous_monte_carlo), [Synchronous Multilevel Monte Carlo](synchronous_multilevel_monte_carlo), [Asynchronous Multilevel Monte Carlo](asynchronous_multilevel_monte_carlo)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,81 +14,89 @@
if(len(sys.argv)==2):
parametersPath = str(sys.argv[1]) # set path to the parameters
else:
parametersPath = "../problem_settings/parameters_xmc_test_mc_Kratos_asynchronous_poisson_2d_with_combined_power_sums.json"
parametersPath = "../problem_settings/parameters_xmc_test_mc_Kratos_asynchronous_poisson_2d.json"

# read parameters
with open(parametersPath,'r') as parameter_file:
parameters = json.load(parameter_file)

# add path of the problem folder to python path
problem_id = parameters["solverWrapperInputDictionary"]["problemId"]
sys.path.append(os.path.join("..","xmc","classDefs_solverWrapper","problemDefs_KratosMultiphysics",problem_id))

# SolverWrapper
parameters["solverWrapperInputDictionary"]["qoiEstimator"] = parameters[
"monteCarloIndexInputDictionary"
]["qoiEstimator"]
# SampleGenerator
samplerInputDictionary = parameters["samplerInputDictionary"]
samplerInputDictionary['randomGeneratorInputDictionary'] = parameters["randomGeneratorInputDictionary"]
samplerInputDictionary['solverWrapperInputDictionary'] = parameters["solverWrapperInputDictionary"]

samplerInputDictionary["randomGeneratorInputDictionary"] = parameters[
"randomGeneratorInputDictionary"
]
samplerInputDictionary["solverWrapperInputDictionary"] = parameters[
"solverWrapperInputDictionary"
]
# MonteCarloIndex
monteCarloIndexInputDictionary = parameters["monteCarloIndexInputDictionary"]
monteCarloIndexInputDictionary["samplerInputDictionary"] = samplerInputDictionary

# Moment Estimators
qoiEstimatorInputDictionary = parameters["qoiEstimatorInputDictionary"]
combinedEstimatorInputDictionary = parameters["combinedEstimatorInputDictionary"]
costEstimatorInputDictionary = parameters["costEstimatorInputDictionary"]
# qoi estimators
monteCarloIndexInputDictionary["qoiEstimator"] = [monteCarloIndexInputDictionary["qoiEstimator"][0] for _ in range (0,parameters["solverWrapperInputDictionary"]["numberQoI"])]
monteCarloIndexInputDictionary["qoiEstimatorInputDictionary"] = [qoiEstimatorInputDictionary]*parameters["solverWrapperInputDictionary"]["numberQoI"]
# combined estimators
monteCarloIndexInputDictionary["combinedEstimator"] = [monteCarloIndexInputDictionary["combinedEstimator"][0] for _ in range (0,parameters["solverWrapperInputDictionary"]["numberCombinedQoi"])]
monteCarloIndexInputDictionary["combinedEstimatorInputDictionary"] = [combinedEstimatorInputDictionary]*parameters["solverWrapperInputDictionary"]["numberCombinedQoi"]
# cost estimator
monteCarloIndexInputDictionary["costEstimatorInputDictionary"] = costEstimatorInputDictionary

# MonoCriterion
criteriaArray = []
criteriaInputs = []
for monoCriterion in (parameters["monoCriteriaInpuctDictionary"]):
criteriaArray.append(xmc.monoCriterion.MonoCriterion(\
parameters["monoCriteriaInpuctDictionary"][monoCriterion]["criteria"],\
parameters["monoCriteriaInpuctDictionary"][monoCriterion]["tolerance"]))
criteriaInputs.append([parameters["monoCriteriaInpuctDictionary"][monoCriterion]["input"]])

for monoCriterion in parameters["monoCriteriaInputDictionary"]:
criteriaArray.append(
xmc.monoCriterion.MonoCriterion(
parameters["monoCriteriaInputDictionary"][monoCriterion]["criteria"],
parameters["monoCriteriaInputDictionary"][monoCriterion]["tolerance"],
)
)
criteriaInputs.append(
[parameters["monoCriteriaInputDictionary"][monoCriterion]["input"]]
)
# MultiCriterion
multiCriterionInputDictionary=parameters["multiCriterionInputDictionary"]
multiCriterionInputDictionary = parameters["multiCriterionInputDictionary"]
multiCriterionInputDictionary["criteria"] = criteriaArray
multiCriterionInputDictionary["inputsForCriterion"] = criteriaInputs
criterion = xmc.multiCriterion.MultiCriterion(**multiCriterionInputDictionary)

# ErrorEstimator
statErrorEstimator = xmc.errorEstimator.ErrorEstimator(**parameters["errorEstimatorInputDictionary"])

statErrorEstimator = xmc.errorEstimator.ErrorEstimator(
**parameters["errorEstimatorInputDictionary"]
)
# HierarchyOptimiser
hierarchyCostOptimiser = xmc.hierarchyOptimiser.HierarchyOptimiser(**parameters["hierarchyOptimiserInputDictionary"])

# Set tolerance from stopping criterion
parameters["hierarchyOptimiserInputDictionary"]["tolerance"] = parameters["monoCriteriaInputDictionary"]["statisticalError"]["tolerance"]
hierarchyCostOptimiser = xmc.hierarchyOptimiser.HierarchyOptimiser(
**parameters["hierarchyOptimiserInputDictionary"]
)
# EstimationAssembler
if "expectationAssembler" in parameters["estimationAssemblerInputDictionary"].keys():
expectationAssembler = xmc.estimationAssembler.EstimationAssembler(**parameters["estimationAssemblerInputDictionary"]["expectationAssembler"])
if (
"expectationAssembler"
in parameters["estimationAssemblerInputDictionary"].keys()
):
expectationAssembler = xmc.estimationAssembler.EstimationAssembler(
**parameters["estimationAssemblerInputDictionary"]["expectationAssembler"]
)
if "varianceAssembler" in parameters["estimationAssemblerInputDictionary"].keys():
varianceAssembler = xmc.estimationAssembler.EstimationAssembler(**parameters["estimationAssemblerInputDictionary"]["varianceAssembler"])

varianceAssembler = xmc.estimationAssembler.EstimationAssembler(
**parameters["estimationAssemblerInputDictionary"]["varianceAssembler"]
)
# MonteCarloSampler
monteCarloSamplerInputDictionary = parameters["monteCarloSamplerInputDictionary"]
monteCarloSamplerInputDictionary["indexConstructorDictionary"] = monteCarloIndexInputDictionary
monteCarloSamplerInputDictionary["assemblers"] = [expectationAssembler,varianceAssembler]
monteCarloSamplerInputDictionary[
"indexConstructorDictionary"
] = monteCarloIndexInputDictionary
monteCarloSamplerInputDictionary["assemblers"] = [
expectationAssembler,
varianceAssembler,
]
monteCarloSamplerInputDictionary["errorEstimators"] = [statErrorEstimator]
mcSampler = xmc.monteCarloSampler.MonteCarloSampler(**monteCarloSamplerInputDictionary)

# build Monte Carlo sampler object
mcSampler = xmc.monteCarloSampler.MonteCarloSampler(
**monteCarloSamplerInputDictionary
)
# XMCAlgorithm
XMCAlgorithmInputDictionary = parameters["XMCAlgorithmInputDictionary"]
XMCAlgorithmInputDictionary["monteCarloSampler"] = mcSampler
XMCAlgorithmInputDictionary["hierarchyOptimiser"] = hierarchyCostOptimiser
XMCAlgorithmInputDictionary["stoppingCriterion"] = criterion

algo = xmc.XMCAlgorithm(**XMCAlgorithmInputDictionary)

if (parameters["solverWrapperInputDictionary"]["asynchronous"] is True):
if parameters["solverWrapperInputDictionary"]["asynchronous"] is True:
algo.runAsynchronousXMC()
else:
algo.runXMC()
Original file line number Diff line number Diff line change
Expand Up @@ -14,83 +14,99 @@
if(len(sys.argv)==2):
parametersPath = str(sys.argv[1]) # set path to the parameters
else:
parametersPath = "../problem_settings/parameters_xmc_test_mlmc_Kratos_asynchronous_poisson_2d_with_combined_power_sums.json"
parametersPath = "../problem_settings/parameters_xmc_test_mlmc_Kratos_asynchronous_poisson_2d.json"

# read parameters
with open(parametersPath,'r') as parameter_file:
parameters = json.load(parameter_file)

# add path of the problem folder to python path
problem_id = parameters["solverWrapperInputDictionary"]["problemId"]
sys.path.append(os.path.join("..","xmc","classDefs_solverWrapper","problemDefs_KratosMultiphysics",problem_id))

# SolverWrapper
parameters["solverWrapperInputDictionary"]["qoiEstimator"] = parameters[
"monteCarloIndexInputDictionary"
]["qoiEstimator"]
# SampleGenerator
samplerInputDictionary = parameters["samplerInputDictionary"]
samplerInputDictionary['randomGeneratorInputDictionary'] = parameters["randomGeneratorInputDictionary"]
samplerInputDictionary['solverWrapperInputDictionary'] = parameters["solverWrapperInputDictionary"]

samplerInputDictionary["randomGeneratorInputDictionary"] = parameters[
"randomGeneratorInputDictionary"
]
samplerInputDictionary["solverWrapperInputDictionary"] = parameters[
"solverWrapperInputDictionary"
]
# MonteCarloIndex Constructor
monteCarloIndexInputDictionary = parameters["monteCarloIndexInputDictionary"]
monteCarloIndexInputDictionary["samplerInputDictionary"] = samplerInputDictionary

# Moment Estimators
qoiEstimatorInputDictionary = parameters["qoiEstimatorInputDictionary"]
combinedEstimatorInputDictionary = parameters["combinedEstimatorInputDictionary"]
costEstimatorInputDictionary = parameters["costEstimatorInputDictionary"]
# qoi estimators
monteCarloIndexInputDictionary["qoiEstimator"] = [monteCarloIndexInputDictionary["qoiEstimator"][0] for _ in range (0,parameters["solverWrapperInputDictionary"]["numberQoI"])]
monteCarloIndexInputDictionary["qoiEstimatorInputDictionary"] = [qoiEstimatorInputDictionary]*parameters["solverWrapperInputDictionary"]["numberQoI"]
# combined estimators
monteCarloIndexInputDictionary["combinedEstimator"] = [monteCarloIndexInputDictionary["combinedEstimator"][0] for _ in range (0,parameters["solverWrapperInputDictionary"]["numberCombinedQoi"])]
monteCarloIndexInputDictionary["combinedEstimatorInputDictionary"] = [combinedEstimatorInputDictionary]*parameters["solverWrapperInputDictionary"]["numberCombinedQoi"]
# cost estimator
monteCarloIndexInputDictionary["costEstimatorInputDictionary"] = costEstimatorInputDictionary

# MonoCriterion
criteriaArray = []
criteriaInputs = []
for monoCriterion in (parameters["monoCriteriaInpuctDictionary"]):
criteriaArray.append(xmc.monoCriterion.MonoCriterion(\
parameters["monoCriteriaInpuctDictionary"][monoCriterion]["criteria"],\
parameters["monoCriteriaInpuctDictionary"][monoCriterion]["tolerance"]))
criteriaInputs.append([parameters["monoCriteriaInpuctDictionary"][monoCriterion]["input"]])

for monoCriterion in parameters["monoCriteriaInputDictionary"]:
criteriaArray.append(
xmc.monoCriterion.MonoCriterion(
parameters["monoCriteriaInputDictionary"][monoCriterion]["criteria"],
parameters["monoCriteriaInputDictionary"][monoCriterion]["tolerance"],
)
)
criteriaInputs.append(
[parameters["monoCriteriaInputDictionary"][monoCriterion]["input"]]
)
# MultiCriterion
multiCriterionInputDictionary=parameters["multiCriterionInputDictionary"]
multiCriterionInputDictionary = parameters["multiCriterionInputDictionary"]
multiCriterionInputDictionary["criteria"] = criteriaArray
multiCriterionInputDictionary["inputsForCriterion"] = criteriaInputs
criterion = xmc.multiCriterion.MultiCriterion(**multiCriterionInputDictionary)

# ErrorEstimator
MSEErrorEstimator = xmc.errorEstimator.ErrorEstimator(**parameters["errorEstimatorInputDictionary"])

MSEErrorEstimator = xmc.errorEstimator.ErrorEstimator(
**parameters["errorEstimatorInputDictionary"]
)
# HierarchyOptimiser
hierarchyCostOptimiser = xmc.hierarchyOptimiser.HierarchyOptimiser(**parameters["hierarchyOptimiserInputDictionary"])

# Set tolerance from stopping criterion
parameters["hierarchyOptimiserInputDictionary"]["tolerance"] = parameters["monoCriteriaInputDictionary"]["statisticalError"]["tolerance"]
hierarchyCostOptimiser = xmc.hierarchyOptimiser.HierarchyOptimiser(
**parameters["hierarchyOptimiserInputDictionary"]
)
# EstimationAssembler
if "expectationAssembler" in parameters["estimationAssemblerInputDictionary"].keys():
expectationAssembler = xmc.estimationAssembler.EstimationAssembler(**parameters["estimationAssemblerInputDictionary"]["expectationAssembler"])
if "discretizationErrorAssembler" in parameters["estimationAssemblerInputDictionary"].keys():
discretizationErrorAssembler = xmc.estimationAssembler.EstimationAssembler(**parameters["estimationAssemblerInputDictionary"]["discretizationErrorAssembler"])
if (
"expectationAssembler"
in parameters["estimationAssemblerInputDictionary"].keys()
):
expectationAssembler = xmc.estimationAssembler.EstimationAssembler(
**parameters["estimationAssemblerInputDictionary"]["expectationAssembler"]
)
if (
"discretizationErrorAssembler"
in parameters["estimationAssemblerInputDictionary"].keys()
):
discretizationErrorAssembler = xmc.estimationAssembler.EstimationAssembler(
**parameters["estimationAssemblerInputDictionary"][
"discretizationErrorAssembler"
]
)
if "varianceAssembler" in parameters["estimationAssemblerInputDictionary"].keys():
varianceAssembler = xmc.estimationAssembler.EstimationAssembler(**parameters["estimationAssemblerInputDictionary"]["varianceAssembler"])

varianceAssembler = xmc.estimationAssembler.EstimationAssembler(
**parameters["estimationAssemblerInputDictionary"]["varianceAssembler"]
)
# MonteCarloSampler
monteCarloSamplerInputDictionary = parameters["monteCarloSamplerInputDictionary"]
monteCarloSamplerInputDictionary["indexConstructorDictionary"] = monteCarloIndexInputDictionary
monteCarloSamplerInputDictionary["assemblers"] = [expectationAssembler,discretizationErrorAssembler,varianceAssembler]
monteCarloSamplerInputDictionary[
"indexConstructorDictionary"
] = monteCarloIndexInputDictionary
monteCarloSamplerInputDictionary["assemblers"] = [
expectationAssembler,
discretizationErrorAssembler,
varianceAssembler,
]
monteCarloSamplerInputDictionary["errorEstimators"] = [MSEErrorEstimator]
mcSampler = xmc.monteCarloSampler.MonteCarloSampler(**monteCarloSamplerInputDictionary)

# build Monte Carlo sampler object
mcSampler = xmc.monteCarloSampler.MonteCarloSampler(
**monteCarloSamplerInputDictionary
)
# XMCAlgorithm
XMCAlgorithmInputDictionary = parameters["XMCAlgorithmInputDictionary"]
XMCAlgorithmInputDictionary["monteCarloSampler"] = mcSampler
XMCAlgorithmInputDictionary["hierarchyOptimiser"] = hierarchyCostOptimiser
XMCAlgorithmInputDictionary["stoppingCriterion"] = criterion

algo = xmc.XMCAlgorithm(**XMCAlgorithmInputDictionary)

if (parameters["solverWrapperInputDictionary"]["asynchronous"] is True):
if parameters["solverWrapperInputDictionary"]["asynchronous"] is True:
algo.runAsynchronousXMC()
else:
algo.runXMC()
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"problem_data" : {
"problem_name" : "poisson_square_2d",
"model_part_name" : "MainModelPart",
"domain_size" : 2,
"parallel_type" : "OpenMP",
"time_step" : 1.1,
"start_time" : 0.0,
"end_time" : 1.0,
"echo_level" : 0
},
"solver_settings" : {
"model_part_name" : "MainModelPart",
"domain_size" : 2,
"solver_type" : "stationary",
"echo_level": 0,
"model_import_settings": {
"input_type": "mdpa",
"input_filename": "../problem_settings/square_level_1"
},
"material_import_settings" : {
"materials_filename" : "../problem_settings/materials_poisson_square_2d.json"
},
"time_stepping" : {
"time_step": 1.1
},
"compute_reactions": false,
"element_replace_settings" : {
"element_name" : "LaplacianElement",
"condition_name" : "ThermalFace"
},
"problem_domain_sub_model_part_list": ["Parts_Domain"],
"processes_sub_model_part_list": ["Subpart_Boundary"],
"auxiliary_variables_list" : []
},
"processes" : {
"constraints_process_list" : [{
"python_module" : "assign_scalar_variable_process",
"kratos_module" : "KratosMultiphysics",
"Parameters" : {
"model_part_name" : "MainModelPart.Subpart_Boundary",
"variable_name" : "TEMPERATURE",
"constrained" : true,
"value" : 0.0,
"interval" : [0.0,"End"]
}
}]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"problem_data" : {
"problem_name" : "poisson_square_2d",
"model_part_name" : "MainModelPart",
"domain_size" : 2,
"parallel_type" : "OpenMP",
"time_step" : 1.1,
"start_time" : 0.0,
"end_time" : 1.0,
"echo_level" : 0
},
"solver_settings" : {
"model_part_name" : "MainModelPart",
"domain_size" : 2,
"solver_type" : "stationary",
"echo_level": 0,
"model_import_settings": {
"input_type": "mdpa",
"input_filename": "../problem_settings/square_level_2"
},
"material_import_settings" : {
"materials_filename" : "../problem_settings/materials_poisson_square_2d.json"
},
"time_stepping" : {
"time_step": 1.1
},
"compute_reactions": false,
"element_replace_settings" : {
"element_name" : "LaplacianElement",
"condition_name" : "ThermalFace"
},
"problem_domain_sub_model_part_list": ["Parts_Domain"],
"processes_sub_model_part_list": ["Subpart_Boundary"],
"auxiliary_variables_list" : []
},
"processes" : {
"constraints_process_list" : [{
"python_module" : "assign_scalar_variable_process",
"kratos_module" : "KratosMultiphysics",
"Parameters" : {
"model_part_name" : "MainModelPart.Subpart_Boundary",
"variable_name" : "TEMPERATURE",
"constrained" : true,
"value" : 0.0,
"interval" : [0.0,"End"]
}
}]
}
}
Loading