00001 #ifndef SURFACEWAVESYNTHETIC_H_ 00002 #define SURFACEWAVESYNTHETIC_H_ 00003 #include "Sdisp96Model.h" 00004 #include "SurfaceWaveData.h" 00005 #include <string> 00006 #include <boost/shared_ptr.hpp> 00007 00008 namespace gplib 00009 { 00010 /** \addtogroup seistools Seismic data analysis and modeling */ 00011 /* @{ */ 00012 00013 //! Calculate synthetic fundamental mode Rayleigh phase velocity data from an isotropic 1D model 00014 class SurfaceWaveSynthetic 00015 { 00016 private: 00017 trealdata calculationperiods; 00018 Sdisp96Model Model; 00019 SurfaceWaveData SynthData; 00020 public: 00021 //! For a parallel execution, these are things that have to be done before any parallel block 00022 void PreParallel(const std::string &filename); 00023 //! Operations that are safe to perform in parallel 00024 SurfaceWaveData SafeParallel(const std::string &filename); 00025 //! Read only access to the current seismic model 00026 const SurfaceWaveModel &GetModel() 00027 { 00028 return Model; 00029 } 00030 //! Get the vector of periods in s for which we want to calculate phase velocities 00031 const trealdata &GetCalculationPeriods() const 00032 { 00033 return calculationperiods; 00034 } 00035 //! Set the vector of periods in s for which we want to calculate phase velocities 00036 void SetCalculationPeriods(const trealdata &c) 00037 { 00038 calculationperiods.clear(); 00039 std::copy(c.begin(),c.end(),std::back_inserter(calculationperiods)); 00040 } 00041 //! Set the model for which we want to calculate the data 00042 void SetModel(const Sdisp96Model &m) 00043 { 00044 Model = m; 00045 } 00046 //! Perform a complete forward calculation and return the calculated data, not thread safe as it calls PreParallel 00047 SurfaceWaveData GetSynthData(const std::string &filename); 00048 SurfaceWaveSynthetic(); 00049 virtual ~SurfaceWaveSynthetic(); 00050 }; 00051 /* @} */ 00052 } 00053 #endif /*SURFACEWAVESYNTHETIC_H_*/
1.5.8