Public Member Functions
FKArrayMap Class Reference

Brief description of class still missing. More...

#include <FKArrayMap.h>

Inheritance diagram for FKArrayMap:
QGpCoreTools::AbstractFunction2

List of all members.

Public Member Functions

void addSource ()
 FKArrayMap ()
void removeSource (int index)
void setSourceSignals (int iSrc, const SourceParameters &src, const MediumParameters &medium)
void setStations (const QVector< Point2D > &p)
void setStationSignals ()
int sourceCount () const
double theoreticalKmax () const
virtual double value (double kx, double ky) const
 ~FKArrayMap ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

Description of destructor still missing

References TRACE.

{
  TRACE;
}

Member Function Documentation

References TRACE.

Referenced by Simulator::on_addSource_clicked().

{
  TRACE;
  int nSrc=_sourceSig.count();
  _sourceSig.resize(nSrc+1);
  QVector<Complex>& sig=_sourceSig[nSrc];
  int ns=_stations.count();
  sig.resize(_stations.count());
  for(int is=0;is < ns;is++ ) sig[ is ]=0;
}
void FKArrayMap::removeSource ( int  index)

References TRACE.

Referenced by Simulator::on_removeSource_clicked().

{
  TRACE;
  int nSrc=_sourceSig.count();
  if(index>=nSrc) return;

  QVector<Complex>& sig=_sourceSig[index];
  int ns=_stations.count();
  for(int is=0;is < ns;is++ ) _stationSig[ is ] -= sig[is];
  _sourceSig.remove(index);
}
void FKArrayMap::setSourceSignals ( int  iSrc,
const SourceParameters src,
const MediumParameters medium 
)

References SourceParameters::amplitude(), MediumParameters::attenuation(), SourceParameters::azimuthMath(), QGpCoreTools::Point2D::azimuthTo(), QGpCoreTools::cos(), QGpCoreTools::Point::distanceTo(), QGpCoreTools::Point2D::distanceTo(), QGpCoreTools::exp(), MediumParameters::frequency(), SourceParameters::phase(), SourceParameters::PlaneWaves, SourceParameters::sourcePoint(), TRACE, SourceParameters::type(), and SourceParameters::velocity().

Referenced by Simulator::setAllSources().

{
  TRACE;
  int ns=_stations.count();
  double k=2.0*M_PI*medium.frequency()/src.velocity();
  QVector<Complex>& sig=_sourceSig[iSrc];
  if(src.type()==SourceParameters::PlaneWaves) {
    for(int is=0;is < ns;is++ ) {
      double az=Point().azimuthTo(_stations[ is ]);
      double r=Point().distanceTo(_stations[ is ])*cos(az-src.azimuthMath());
      sig[is].setExp(src.amplitude(), src.phase()-k*r);
    }
  } else {
    if(medium.attenuation()==0.0) {
      for(int is=0;is < ns;is++ ) {
        double r=src.sourcePoint().distanceTo(_stations[ is ]);
        sig[is].setExp(src.amplitude(), src.phase()-k*r);
      }
    } else {
      double inv2Qk=k/(2.0*medium.attenuation());
      for(int is=0;is < ns;is++ ) {
        double r=src.sourcePoint().distanceTo(_stations[ is ]);
        sig[is].setExp(src.amplitude()/(2.0*M_PI*r) * exp(-r*inv2Qk), src.phase()-k*r);
      }
    }
  }
}
void FKArrayMap::setStations ( const QVector< Point2D > &  p)

References TRACE.

Referenced by Simulator::init().

{
  TRACE;
  _stations=p;
  uniquePoints();

  int ns=p.count();
  _stationSig.resize(ns);
  int nSrc=_sourceSig.count();
  for(int i=0; i<nSrc;i++) {
    _sourceSig[i].resize(ns);
  }
}

References TRACE.

Referenced by Simulator::setAllSources().

{
  TRACE;
  int ns=_stations.count();
  int nSrc=_sourceSig.count();
  for(int is=0;is < ns;is++ ) _stationSig[ is ]=0;
  for(int iSrc=0; iSrc < nSrc; iSrc++ ) {
    QVector<Complex>& sig=_sourceSig[iSrc];
    for(int is=0;is < ns;is++ ) {
      _stationSig[ is ] += sig[is];
    }
  }
}
int FKArrayMap::sourceCount ( ) const [inline]

Referenced by Simulator::on_addSource_clicked(), and Simulator::setAllSources().

{return _sourceSig.count();}
double FKArrayMap::theoreticalKmax ( ) const

Calculate kmax from minimum distance between stations

References QGpCoreTools::endl(), QGpCoreTools::tr(), and TRACE.

Referenced by Simulator::init().

{
  TRACE;
  double dmin=1e99, d;
  int n=_stations.count();
  // Get min and max distances
  for(int i=0;i < n;i++ ) {
    for(int j=i + 1;j < n;j++ ) {
      d=_stations[ i ].distanceTo(_stations[ j ] );
      if(d > 0) {
        if(d < dmin) {
          dmin=d;
        }
      } else
        App::stream() << tr("null distance found is station list") << endl;
    }
  }
  // k=2*M_PI/lambda, due to Nyquist, d<lambda/2
  return M_PI/dmin;
}
double FKArrayMap::value ( double  x,
double  y 
) const [virtual]

Implemement this function to calculate the 2D function at x and y.

Implements QGpCoreTools::AbstractFunction2.

References QGpCoreTools::Complex::abs2(), QGpCoreTools::Complex::setUnitExp(), and TRACE.

{
  TRACE;
  Complex comp, sum;
  for(int pi=0;pi < _stations.size();pi++ ) {
    comp.setUnitExp(kx * _stations[ pi ].x() + ky * _stations[ pi ].y());
    comp *= _stationSig[ pi ];
    sum += comp;
  }
  return sum.abs2()/(_stations.count() * _stations.count());
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines