#include "QGpCoreWaveDLLExport.h"Go to the source code of this file.
Functions | |
| QGPCOREWAVE_EXPORT void | dispersion_curve_init_ (int *verbose) |
| QGPCOREWAVE_EXPORT void | dispersion_curve_love_ (int *nLayers, double *h, double *vp, double *vs, double *rho, int *nSamples, double *omega, int *nModes, double *slowness, int *group) |
| QGPCOREWAVE_EXPORT void | dispersion_curve_rayleigh_ (int *nLayers, double *h, double *vp, double *vs, double *rho, int *nSamples, double *omega, int *nModes, double *slowness, int *group) |
| QGPCOREWAVE_EXPORT void dispersion_curve_init_ | ( | int * | verbose | ) |
If verbose is null, warnings are switched off.
References QGpCoreTools::CoreApplicationPrivate::freezeStream().
{
new PluginCoreApplication;
if(*verbose==0) {
PluginCoreApplication::instance()->freezeStream(true);
}
}
| QGPCOREWAVE_EXPORT void dispersion_curve_love_ | ( | int * | nLayers, |
| double * | h, | ||
| double * | vp, | ||
| double * | vs, | ||
| double * | rho, | ||
| int * | nSamples, | ||
| double * | omega, | ||
| int * | nModes, | ||
| double * | slowness, | ||
| int * | group | ||
| ) |
Computes Love dispersion curve
TODO: Vp is useless... check for a way to avoid it in arguments
References QGpCoreWave::Dispersion::calculate(), QGpCoreWave::Seismic1DModel::initCalculation(), QGpCoreTools::Value< numberType >::isValid(), mode, QGpCoreWave::ModalStorage::mode(), QGpCoreWave::Dispersion::setGroupSlowness(), QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and QGpCoreTools::Value< numberType >::value().
{
QGpCoreWave::Seismic1DModel m(*nLayers);
int nLayers1=*nLayers - 1;
for(int i=0;i<nLayers1;i++) {
m.setH(i, h[i]);
m.setSlowP(i, 1.0/vp[i] );
m.setSlowS(i, 1.0/vs[i] );
m.setRho(i, rho[i]);
m.setQp(i, 0.0);
m.setQs(i, 0.0);
}
m.setSlowP(nLayers1, 1.0/vp[nLayers1] );
m.setSlowS(nLayers1, 1.0/vs[nLayers1] );
m.setRho(nLayers1, rho[nLayers1]);
m.setQp(nLayers1, 0.0);
m.setQs(nLayers1, 0.0);
//QTextStream sOut(stdout);
//m.toStream(sOut);
m.initCalculation();
QGpCoreWave::Love love(&m);
QVector<double> x(*nSamples);
for(int i=0;i<*nSamples;i++) {
x[i]=omega[i];
}
QGpCoreWave::Dispersion dispersion (*nModes, &x);
dispersion.calculate(&love, 0);
if(*group!=0) {
dispersion.setGroupSlowness();
}
for(int iMode=0;iMode<*nModes;iMode++) {
const RealValue * mode=dispersion.mode(iMode);
for(int iSample=0; iSample<*nSamples; iSample++) {
const RealValue& v=mode[iSample];
if(v.isValid()) {
*(slowness++)=v.value();
} else {
*(slowness++)=0.0;
}
}
}
}
| QGPCOREWAVE_EXPORT void dispersion_curve_rayleigh_ | ( | int * | nLayers, |
| double * | h, | ||
| double * | vp, | ||
| double * | vs, | ||
| double * | rho, | ||
| int * | nSamples, | ||
| double * | omega, | ||
| int * | nModes, | ||
| double * | slowness, | ||
| int * | group | ||
| ) |
Computes Rayleigh dispersion curve
References QGpCoreWave::Dispersion::calculate(), QGpCoreWave::Seismic1DModel::initCalculation(), QGpCoreTools::Value< numberType >::isValid(), mode, QGpCoreWave::ModalStorage::mode(), QGpCoreWave::Dispersion::setGroupSlowness(), QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and QGpCoreTools::Value< numberType >::value().
{
QGpCoreWave::Seismic1DModel m(*nLayers);
int nLayers1=*nLayers - 1;
for(int i=0;i<nLayers1;i++) {
m.setH(i, h[i]);
m.setSlowP(i, 1.0/vp[i] );
m.setSlowS(i, 1.0/vs[i] );
m.setRho(i, rho[i]);
m.setQp(i, 0.0);
m.setQs(i, 0.0);
}
m.setSlowP(nLayers1, 1.0/vp[nLayers1] );
m.setSlowS(nLayers1, 1.0/vs[nLayers1] );
m.setRho(nLayers1, rho[nLayers1]);
m.setQp(nLayers1, 0.0);
m.setQs(nLayers1, 0.0);
//QTextStream sOut(stdout);
//m.toStream(sOut);
m.initCalculation();
QGpCoreWave::Rayleigh rayleigh(&m);
//App::stream() << "nSamples=" << *nSamples << ", nModes=" << *nModes << ", group=" << *group << endl;
QVector<double> x(*nSamples);
for(int i=0;i<*nSamples;i++) {
x[i]=omega[i];
//App::stream() << "frequency[" << i << "]=" << x[i]/(2*M_PI) << " Hz" << endl;
}
QGpCoreWave::Dispersion dispersion (*nModes, &x);
dispersion.calculate(&rayleigh, 0);
if(*group!=0) {
dispersion.setGroupSlowness();
}
for(int iMode=0;iMode<*nModes;iMode++) {
//App::stream() << "Mode=" << iMode << endl;
const RealValue * mode=dispersion.mode(iMode);
for(int iSample=0; iSample<*nSamples; iSample++) {
const RealValue& v=mode[iSample];
if(v.isValid()) {
*(slowness++)=v.value();
/*App::stream() << "frequency[" << iSample << "]=" << x[iSample]/(2*M_PI) << " Hz"
<< ", slowness[" << iSample << "]=" << v.value()
<< ", velocity[" << iSample << "]=" << 1.0/v.value() << endl;*/
} else {
*(slowness++)=0.0;
}
}
}
}