https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
MorrisSampler Class Reference

A class used to perform Monte Carlo sampling for performing Morris sensitivity analysis. More...

#include <MorrisSampler.h>

Inheritance diagram for MorrisSampler:
[legend]

Public Types

enum  SampleMode { SampleMode::GLOBAL, SampleMode::LOCAL }
 
typedef DataFileName DataFileParameterType
 

Public Member Functions

 MorrisSampler (const InputParameters &parameters)
 
std::vector< RealgetNextLocalRow ()
 
dof_id_type getNumberOfRows () const
 
dof_id_type getNumberOfCols () const
 
dof_id_type getNumberOfLocalRows () const
 
const LocalRankConfiggetRankConfig (bool batch_mode) const
 
virtual bool isAdaptiveSamplingCompleted () const
 
libMesh::Parallel::CommunicatorgetLocalComm ()
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void initialSetup ()
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnumgetExecuteOnEnum () const
 
PerfGraphperfGraph ()
 
T & getSampler (const std::string &name)
 
SamplergetSampler (const std::string &name)
 
T & getSamplerByName (const SamplerName &name)
 
SamplergetSamplerByName (const SamplerName &name)
 
const VectorPostprocessorValuegetVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValuegetVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValuegetScatterVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name) const
 
const VectorPostprocessorName & getVectorPostprocessorName (const std::string &param_name) const
 
DenseMatrix< RealgetGlobalSamples ()
 
DenseMatrix< RealgetGlobalSamples ()
 
DenseMatrix< RealgetLocalSamples ()
 
DenseMatrix< RealgetLocalSamples ()
 
dof_id_type getLocalRowBegin () const
 
dof_id_type getLocalRowBegin () const
 
dof_id_type getLocalRowEnd () const
 
dof_id_type getLocalRowEnd () const
 
const DistributiongetDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const DistributiongetDistribution (const std::string &name) const
 
const T & getDistribution (const std::string &name) const
 
const DistributiongetDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
const DistributiongetDistributionByName (const DistributionName &name) const
 
const T & getDistributionByName (const std::string &name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 

Public Attributes

const ConsoleStream _console
 

Protected Types

enum  CommMethod
 

Protected Member Functions

virtual Real computeSample (dof_id_type row_index, dof_id_type col_index) override
 
virtual void sampleSetUp (const Sampler::SampleMode mode) override
 Used to setup matrices for trajectory computation. More...
 
virtual LocalRankConfig constructRankConfig (bool batch_mode) const override
 Morris sampling should have a slightly different partitioning in order to keep the sample and resample samplers distributed and make computing indices more efficient. More...
 
void setNumberOfRandomSeeds (std::size_t number)
 
Real getRand (unsigned int index=0)
 
uint32_t getRandl (unsigned int index, uint32_t lower, uint32_t upper)
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
virtual void addVectorPostprocessorDependencyHelper (const VectorPostprocessorName &) const
 
const ReporterNamegetReporterName (const std::string &param_name) const
 
virtual void addReporterDependencyHelper (const ReporterName &)
 
void setNumberOfRows (dof_id_type n_rows)
 
void setNumberOfRows (dof_id_type n_rows)
 
void setNumberOfCols (dof_id_type n_cols)
 
void setNumberOfCols (dof_id_type n_cols)
 
virtual void sampleTearDown (const SampleMode)
 
virtual void sampleTearDown (const SampleMode)
 
virtual void computeSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeLocalSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeLocalSampleMatrix (DenseMatrix< Real > &matrix)
 
virtual void computeSampleRow (dof_id_type i, std::vector< Real > &data)
 
virtual void computeSampleRow (dof_id_type i, std::vector< Real > &data)
 
virtual void advanceGenerators (const dof_id_type count)
 
virtual void advanceGenerators (const dof_id_type count)
 
virtual void advanceGenerator (const unsigned int seed_index, const dof_id_type count)
 
virtual void advanceGenerator (const unsigned int seed_index, const dof_id_type count)
 
void setAutoAdvanceGenerators (const bool state)
 
void setAutoAdvanceGenerators (const bool state)
 
void shuffle (std::vector< T > &data, const std::size_t seed_index=0, const CommMethod method=CommMethod::LOCAL)
 
void shuffle (std::vector< T > &data, const std::size_t seed_index=0, const CommMethod method=CommMethod::LOCAL)
 
virtual void executeSetUp ()
 
virtual void executeSetUp ()
 
virtual void executeTearDown ()
 
virtual void executeTearDown ()
 
void saveGeneratorState ()
 
void saveGeneratorState ()
 
void restoreGeneratorState ()
 
void restoreGeneratorState ()
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 

Protected Attributes

const dof_id_type_num_trajectories
 Number of trajectories. More...
 
const unsigned int_num_levels
 Number of levels used for input space discretization. More...
 
std::vector< const Distribution * > _distributions
 Distribution to determine parameter from perturbations. More...
 
 NONE
 
 LOCAL
 
 SEMI_LOCAL
 
const dof_id_type _min_procs_per_row
 
const dof_id_type _max_procs_per_row
 
libMesh::Parallel::Communicator _local_comm
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const ExecFlagEnum_execute_enum
 
const ExecFlagType_current_execute_flag
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
const Parallel::Communicator & _communicator
 

Private Member Functions

void updateBstar ()
 Function to calculate trajectories This is only called once per trajectory (_n_rows / (_n_cols + 1)) More...
 

Private Attributes

RealEigenMatrix _b
 
RealEigenMatrix _pstar
 
RealEigenMatrix _j
 
RealEigenMatrix _dstar
 
RealEigenMatrix _xstar
 
RealEigenMatrix _bstar
 

Detailed Description

A class used to perform Monte Carlo sampling for performing Morris sensitivity analysis.

Definition at line 18 of file MorrisSampler.h.

Constructor & Destructor Documentation

◆ MorrisSampler()

MorrisSampler::MorrisSampler ( const InputParameters parameters)

Definition at line 39 of file MorrisSampler.C.

41  _num_trajectories(getParam<dof_id_type>("trajectories")),
42  _num_levels(getParam<unsigned int>("levels"))
43 
44 {
45  for (const auto & name : getParam<std::vector<DistributionName>>("distributions"))
47 
50 }
void setNumberOfRows(dof_id_type n_rows)
const dof_id_type & _num_trajectories
Number of trajectories.
Definition: MorrisSampler.h:41
virtual const std::string & name() const
Sampler(const InputParameters &parameters)
std::vector< const Distribution * > _distributions
Distribution to determine parameter from perturbations.
Definition: MorrisSampler.h:45
const T & getParam(const std::string &name) const
const unsigned int & _num_levels
Number of levels used for input space discretization.
Definition: MorrisSampler.h:43
const Distribution & getDistributionByName(const DistributionName &name) const
void setNumberOfCols(dof_id_type n_cols)
const InputParameters & parameters() const

Member Function Documentation

◆ computeSample()

Real MorrisSampler::computeSample ( dof_id_type  row_index,
dof_id_type  col_index 
)
overrideprotectedvirtual

Implements Sampler.

Definition at line 65 of file MorrisSampler.C.

66 {
67  const dof_id_type traj_ind = row_index % (getNumberOfCols() + 1);
68  if (traj_ind == 0 && col_index == 0)
69  updateBstar();
70  return _distributions[col_index]->quantile(_bstar(traj_ind, col_index));
71 }
std::vector< const Distribution * > _distributions
Distribution to determine parameter from perturbations.
Definition: MorrisSampler.h:45
void updateBstar()
Function to calculate trajectories This is only called once per trajectory (_n_rows / (_n_cols + 1)) ...
Definition: MorrisSampler.C:74
RealEigenMatrix _bstar
Definition: MorrisSampler.h:61
dof_id_type getNumberOfCols() const
uint8_t dof_id_type

◆ constructRankConfig()

LocalRankConfig MorrisSampler::constructRankConfig ( bool  batch_mode) const
overrideprotectedvirtual

Morris sampling should have a slightly different partitioning in order to keep the sample and resample samplers distributed and make computing indices more efficient.

Reimplemented from Sampler.

Definition at line 111 of file MorrisSampler.C.

112 {
113  std::vector<LocalRankConfig> all_rc(processor_id() + 1);
114  for (processor_id_type r = 0; r <= processor_id(); ++r)
115  all_rc[r] = rankConfig(
117  LocalRankConfig & rc = all_rc.back();
118 
119  rc.num_local_sims *= _distributions.size() + 1;
120  bool found_first = false;
121  for (auto it = all_rc.rbegin(); it != all_rc.rend(); ++it)
122  if (it->is_first_local_rank)
123  {
124  if (found_first)
125  rc.first_local_sim_index += it->num_local_sims * _distributions.size();
126  else
127  found_first = true;
128  }
129 
130  if (!batch_mode)
131  {
134  }
135 
136  return rc;
137 }
LocalRankConfig rankConfig(processor_id_type rank, processor_id_type nprocs, dof_id_type napps, processor_id_type min_app_procs, processor_id_type max_app_procs, bool batch_mode=false)
const dof_id_type & _num_trajectories
Number of trajectories.
Definition: MorrisSampler.h:41
dof_id_type first_local_app_index
const dof_id_type _max_procs_per_row
std::vector< const Distribution * > _distributions
Distribution to determine parameter from perturbations.
Definition: MorrisSampler.h:45
uint8_t processor_id_type
processor_id_type n_processors() const
dof_id_type num_local_sims
const dof_id_type _min_procs_per_row
dof_id_type num_local_apps
dof_id_type first_local_sim_index
processor_id_type processor_id() const

◆ sampleSetUp()

void MorrisSampler::sampleSetUp ( const Sampler::SampleMode  mode)
overrideprotectedvirtual

Used to setup matrices for trajectory computation.

Reimplemented from Sampler.

Definition at line 53 of file MorrisSampler.C.

54 {
55  const dof_id_type nc = getNumberOfCols();
56  _b = RealEigenMatrix::Ones(nc + 1, nc).triangularView<Eigen::StrictlyLower>();
57  _pstar.resize(nc, nc);
58  _j.setOnes(nc + 1, nc);
59  _dstar.resize(nc, nc);
60  _xstar.resize(nc + 1, nc);
61  _bstar.resize(nc + 1, nc);
62 }
RealEigenMatrix _xstar
Definition: MorrisSampler.h:60
RealEigenMatrix _b
Definition: MorrisSampler.h:56
RealEigenMatrix _bstar
Definition: MorrisSampler.h:61
RealEigenMatrix _pstar
Definition: MorrisSampler.h:57
RealEigenMatrix _dstar
Definition: MorrisSampler.h:59
RealEigenMatrix _j
Definition: MorrisSampler.h:58
dof_id_type getNumberOfCols() const
uint8_t dof_id_type

◆ updateBstar()

void MorrisSampler::updateBstar ( )
private

Function to calculate trajectories This is only called once per trajectory (_n_rows / (_n_cols + 1))

Definition at line 74 of file MorrisSampler.C.

Referenced by computeSample().

75 {
76  const dof_id_type nc = getNumberOfCols(); // convenience
77  _pstar.setZero();
78  // Which parameter to perturb
79  std::vector<dof_id_type> pchoice(nc);
80  std::iota(pchoice.begin(), pchoice.end(), 0);
81  for (dof_id_type c = 0; c < nc; ++c)
82  {
83  const unsigned int ind = nc > 1 ? getRandl(0, 0, pchoice.size()) : 0;
84  _pstar(pchoice[ind], c) = 1.0;
85  pchoice.erase(pchoice.begin() + ind);
86  }
87 
88  _dstar.setZero();
89  // Direction of perturbation
90  for (dof_id_type c = 0; c < nc; ++c)
91  _dstar(c, c) = getRand() < 0.5 ? -1.0 : 1.0;
92 
93  // Initial value
94  for (dof_id_type c = 0; c < nc; ++c)
95  {
96  const auto lind = getRandl(0, 0, _num_levels / 2);
97  _xstar.col(c).setConstant((Real)lind * 1.0 / ((Real)_num_levels - 1));
98  }
99 
100  _bstar =
101  _xstar + _num_levels / 4.0 / (_num_levels - 1) * ((2.0 * _b * _pstar - _j) * _dstar + _j);
102 
103  // This matrix represent _n_cols * (_n_cols + 1) samples, but so far we have only
104  // advanced the generator 3 * _n_cols times. For the generator state restore
105  // to work properly, we need to finish advancing the generator
106  if (nc > 2)
107  advanceGenerator(0, nc * (nc - 2));
108 }
uint32_t getRandl(unsigned int index, uint32_t lower, uint32_t upper)
RealEigenMatrix _xstar
Definition: MorrisSampler.h:60
RealEigenMatrix _b
Definition: MorrisSampler.h:56
virtual void advanceGenerator(const unsigned int seed_index, const dof_id_type count)
Real getRand(unsigned int index=0)
const unsigned int & _num_levels
Number of levels used for input space discretization.
Definition: MorrisSampler.h:43
RealEigenMatrix _bstar
Definition: MorrisSampler.h:61
RealEigenMatrix _pstar
Definition: MorrisSampler.h:57
RealEigenMatrix _dstar
Definition: MorrisSampler.h:59
RealEigenMatrix _j
Definition: MorrisSampler.h:58
dof_id_type getNumberOfCols() const
uint8_t dof_id_type

◆ validParams()

InputParameters MorrisSampler::validParams ( )
static

Definition at line 16 of file MorrisSampler.C.

17 {
19  params.addClassDescription("Morris variance-based sensitivity analysis Sampler.");
20  params.addRequiredParam<std::vector<DistributionName>>(
21  "distributions",
22  "The distribution names to be sampled, the number of distributions provided defines the "
23  "number of columns per matrix.");
25  "trajectories",
26  "trajectories > 0",
27  "Number of unique trajectories to perform. The higher number of these usually means a more "
28  "accurate sensitivity evaluation, but it is proportional to the number of required model "
29  "evaluations: 'trajectoris' x (number of 'distributions' + 1).");
30  params.addRangeCheckedParam<unsigned int>(
31  "levels",
32  4,
33  "levels % 2 = 0 & levels > 0",
34  "The number of levels in the sampling. This determines the discretization of the input "
35  "space, more levels means finer discretization and more possible model perturbations.");
36  return params;
37 }
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
uint8_t dof_id_type

Member Data Documentation

◆ _b

RealEigenMatrix MorrisSampler::_b
private

Matrices used for trajector computation

Definition at line 56 of file MorrisSampler.h.

Referenced by sampleSetUp(), and updateBstar().

◆ _bstar

RealEigenMatrix MorrisSampler::_bstar
private

Definition at line 61 of file MorrisSampler.h.

Referenced by computeSample(), sampleSetUp(), and updateBstar().

◆ _distributions

std::vector<const Distribution *> MorrisSampler::_distributions
protected

Distribution to determine parameter from perturbations.

Definition at line 45 of file MorrisSampler.h.

Referenced by computeSample(), constructRankConfig(), and MorrisSampler().

◆ _dstar

RealEigenMatrix MorrisSampler::_dstar
private

Definition at line 59 of file MorrisSampler.h.

Referenced by sampleSetUp(), and updateBstar().

◆ _j

RealEigenMatrix MorrisSampler::_j
private

Definition at line 58 of file MorrisSampler.h.

Referenced by sampleSetUp(), and updateBstar().

◆ _num_levels

const unsigned int& MorrisSampler::_num_levels
protected

Number of levels used for input space discretization.

Definition at line 43 of file MorrisSampler.h.

Referenced by updateBstar().

◆ _num_trajectories

const dof_id_type& MorrisSampler::_num_trajectories
protected

Number of trajectories.

Definition at line 41 of file MorrisSampler.h.

Referenced by constructRankConfig(), and MorrisSampler().

◆ _pstar

RealEigenMatrix MorrisSampler::_pstar
private

Definition at line 57 of file MorrisSampler.h.

Referenced by sampleSetUp(), and updateBstar().

◆ _xstar

RealEigenMatrix MorrisSampler::_xstar
private

Definition at line 60 of file MorrisSampler.h.

Referenced by sampleSetUp(), and updateBstar().


The documentation for this class was generated from the following files: