Stochastic Loading Module
vlachos_et_al.h
1 #ifndef _VLACHOS_ET_AL_H_
2 #define _VLACHOS_ET_AL_H_
3 
4 #include <memory>
5 #include <string>
6 #include <vector>
7 #include <Eigen/Dense>
8 #include "distribution.h"
9 #include "json_object.h"
10 #include "numeric_utils.h"
11 #include "stochastic_model.h"
12 
13 namespace stochastic {
22 class VlachosEtAl : public StochasticModel {
23  public:
27  VlachosEtAl() = default;
28 
45  VlachosEtAl(double moment_magnitude, double rupture_distance, double vs30,
46  double orientation, unsigned int num_spectra,
47  unsigned int num_sims);
48 
67  VlachosEtAl(double moment_magnitude, double rupture_distance, double vs30,
68  double orientation, unsigned int num_spectra,
69  unsigned int num_sims, int seed_value);
70 
74  virtual ~VlachosEtAl() {};
75 
79  VlachosEtAl(const VlachosEtAl&) = delete;
80 
84  VlachosEtAl& operator=(const VlachosEtAl&) = delete;
85 
96  utilities::JsonObject generate(const std::string& event_name,
97  bool g_units = false) override;
98 
110  bool generate(const std::string& event_name,
111  const std::string& output_location,
112  bool g_units = false) override;
113 
122  bool time_history_family(std::vector<std::vector<double>>& time_histories,
123  const Eigen::VectorXd& parameters) const;
124 
133  void simulate_time_history(std::vector<double>& time_history,
134  const Eigen::MatrixXd& power_spectrum) const;
135 
145  bool post_process(std::vector<double>& time_history,
146  const std::vector<double>& filter_imp_resp) const;
147 
153  Eigen::VectorXd identify_parameters(const Eigen::VectorXd& initial_params) const;
154 
165  std::vector<double> modal_frequencies(
166  const std::vector<double>& parameters,
167  const std::vector<double>& energy) const;
168 
179  std::vector<double> energy_accumulation(
180  const std::vector<double>& parameters,
181  const std::vector<double>& times) const;
182 
193  std::vector<double> modal_participation_factor(
194  const std::vector<double>& parameters,
195  const std::vector<double>& energy) const;
196 
208  std::vector<double> amplitude_modulating_function(
209  double duration, double total_energy,
210  const std::vector<double>& parameters,
211  const std::vector<double>& times) const;
212 
232  Eigen::VectorXd kt_2(const std::vector<double>& parameters,
233  const std::vector<double>& frequencies,
234  const std::vector<double>& highpass_butter) const;
235 
244  void rotate_acceleration(const std::vector<double>& acceleration,
245  std::vector<double>& x_accels,
246  std::vector<double>& y_accels, bool g_units) const;
247 
248  private:
249  double moment_magnitude_;
250  double rupture_dist_;
251  double vs30_;
253  double orientation_;
254  double time_step_;
255  double freq_step_;
256  double cutoff_freq_;
257  unsigned int num_spectra_;
259  unsigned int num_sims_;
262  int seed_value_;
263  Eigen::VectorXd means_;
264  Eigen::MatrixXd covariance_;
265  std::vector<std::shared_ptr<stochastic::Distribution>>
266  model_parameters_;
267  Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
268  parameter_realizations_;
269  Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
270  physical_parameters_;
272  std::shared_ptr<numeric_utils::RandomGenerator>
273  sample_generator_;
274 };
275 } // namespace stochastic
276 
277 #endif // _VLACHOS_ET_AL_H_
bool post_process(std::vector< double > &time_history, const std::vector< double > &filter_imp_resp) const
std::vector< double > energy_accumulation(const std::vector< double > &parameters, const std::vector< double > &times) const
Eigen::VectorXd kt_2(const std::vector< double > &parameters, const std::vector< double > &frequencies, const std::vector< double > &highpass_butter) const
std::vector< double > modal_frequencies(const std::vector< double > &parameters, const std::vector< double > &energy) const
std::vector< double > amplitude_modulating_function(double duration, double total_energy, const std::vector< double > &parameters, const std::vector< double > &times) const
bool time_history_family(std::vector< std::vector< double >> &time_histories, const Eigen::VectorXd &parameters) const
void rotate_acceleration(const std::vector< double > &acceleration, std::vector< double > &x_accels, std::vector< double > &y_accels, bool g_units) const
Eigen::VectorXd identify_parameters(const Eigen::VectorXd &initial_params) const
utilities::JsonObject generate(const std::string &event_name, bool g_units=false) override
void simulate_time_history(std::vector< double > &time_history, const Eigen::MatrixXd &power_spectrum) const
VlachosEtAl & operator=(const VlachosEtAl &)=delete
std::vector< double > modal_participation_factor(const std::vector< double > &parameters, const std::vector< double > &energy) const