#include <CompatModalRefinedCurves.h>
Public Member Functions | |
| void | addInvalidSamples (CompatModalFrequency *samples) |
| virtual void | addRayleighModes (int nNewModes) |
| void | clearRefines () |
| QVector< double > * | meanVector (int im) |
| CompatVDataPointVector & | mode (int im) |
| const CompatVDataPointVector & | mode (int im) const |
| int | nModes () const |
| int | nRefines () const |
| void | operator= (CompatModalRefinedCurves &o) |
| void | refineSort () |
| virtual void | setNModes (int nm) |
| void | setNOmegas (int nf) |
| QVector< double > * | stddevVector (int im) |
| int | toPointVector (int imode, Point2D *&pointList) |
| QVector< Point > * | toPointVector (int imode) |
| void | toStream (FILE *f) |
| QVector< double > * | weightVector (int im) |
| void | writeReport (QDataStream &s) const |
Protected Member Functions | |
| virtual void | addInvalid () |
| virtual void | insertInvalidAt (int i) |
| virtual XMLMember | xml_member (XML_MEMBER_ARGS) |
| virtual const QString & | xml_tagName () const |
| virtual void | xml_writeChildren (XML_WRITECHILDREN_ARGS) const |
Protected Attributes | |
| CompatModalCurves | _curves |
| CompatRefineList | _refines |
Static Protected Attributes | |
| static const QString | xmlModalRefinedCurvesTag = "ModalRefinedCurves" |
| virtual void QGpCompatibility::CompatModalRefinedCurves::addInvalid | ( | ) | [inline, protected, virtual] |
Implements QGpCompatibility::CompatModalFrequency.
{_curves.addInvalid();}
| void QGpCompatibility::CompatModalRefinedCurves::addInvalidSamples | ( | CompatModalFrequency * | samples | ) |
| void QGpCompatibility::CompatModalRefinedCurves::addRayleighModes | ( | int | nNewModes | ) | [virtual] |
if there are Love modes, the task is a bit more complex...
Implements QGpCompatibility::CompatModalFrequency.
References _curves, QGpCompatibility::CompatModalCurves::insertModes(), QGpCompatibility::CompatModalFrequency::nRayleighModes(), QGpCompatibility::CompatModalFrequency::setNRayleighModes(), and TRACE.
{
TRACE;
_curves.insertModes(nRayleighModes(), nNewModes);
setNRayleighModes(nRayleighModes()+nNewModes);
}
| void QGpCompatibility::CompatModalRefinedCurves::clearRefines | ( | ) | [inline] |
{_refines.clear();}
| virtual void QGpCompatibility::CompatModalRefinedCurves::insertInvalidAt | ( | int | i | ) | [inline, protected, virtual] |
Implements QGpCompatibility::CompatModalFrequency.
{_curves.insertInvalidAt(i);}
| QVector<double>* QGpCompatibility::CompatModalRefinedCurves::meanVector | ( | int | im | ) | [inline] |
{return _curves.meanVector(im);}
| CompatVDataPointVector& QGpCompatibility::CompatModalRefinedCurves::mode | ( | int | im | ) | [inline] |
| const CompatVDataPointVector& QGpCompatibility::CompatModalRefinedCurves::mode | ( | int | im | ) | const [inline] |
| int QGpCompatibility::CompatModalRefinedCurves::nModes | ( | ) | const [inline, virtual] |
| int QGpCompatibility::CompatModalRefinedCurves::nRefines | ( | ) | const [inline] |
{return _refines.size();}
| void QGpCompatibility::CompatModalRefinedCurves::operator= | ( | CompatModalRefinedCurves & | o | ) |
References _curves, and TRACE.
{
TRACE;
CompatModalFrequency::operator=(o);
_curves=o._curves;
}
| void QGpCompatibility::CompatModalRefinedCurves::refineSort | ( | ) | [inline] |
{qSort(_refines);}
| virtual void QGpCompatibility::CompatModalRefinedCurves::setNModes | ( | int | nm | ) | [inline, virtual] |
Implements QGpCompatibility::CompatModalFrequency.
Reimplemented in QGpCompatibility::CompatModalEllipticity.
Referenced by QGpCompatibility::CompatModalEllipticity::setNModes().
| void QGpCompatibility::CompatModalRefinedCurves::setNOmegas | ( | int | nf | ) | [inline, virtual] |
Reimplemented from QGpCompatibility::CompatModalFrequency.
References _curves, QGpCompatibility::CompatModalCurves::setNOmegas(), and TRACE.
{
TRACE;
CompatModalFrequency::setNOmegas(nf);
_curves.setNOmegas(nf);
}
| QVector<double>* QGpCompatibility::CompatModalRefinedCurves::stddevVector | ( | int | im | ) | [inline] |
{return _curves.stddevVector(im);}
| int QGpCompatibility::CompatModalRefinedCurves::toPointVector | ( | int | imode, |
| Point2D *& | pointList | ||
| ) |
References _curves, _refines, inv2pi, QGpCompatibility::CompatModalCurves::invalidValue(), mode(), nModes(), QGpCompatibility::CompatModalFrequency::nOmegas(), QGpCompatibility::CompatModalFrequency::omega(), and TRACE.
{
TRACE;
int nm=nModes();
int nf=nOmegas();
int count=nf;
ASSERT(imode<nm);
// init fixed values
double nextFixedX=omega(0);
CompatVDataPointVector& point=mode(imode);
// init refines values
CompatRefineIterator it=_refines.begin();
double nextRefineX;
// Currently refines are for Rayleigh fundamental mode only
if(imode==0 && it!=_refines.end()) {
nextRefineX=(*it).omega();
} else {
nextRefineX=1e99;
it=_refines.end();
}
// loop variables
double val, invalidValue=_curves.invalidValue();
int i=0;
while(i<nf || it!=_refines.end()) {
while(nextFixedX<nextRefineX) {
val=point[i].value();
if(val!=invalidValue)
*(pointList++)=Point2D(inv2pi*nextFixedX,val);
else count--;
i++;
if(i<nf) nextFixedX=omega(i);
else {
nextFixedX=1e99;
break;
}
}
while(nextRefineX<nextFixedX) {
val=(*it).value(imode);
if(val!=invalidValue) {
*(pointList++)=Point2D(inv2pi*nextRefineX,val);
count++;
}
++it;
if(it!=_refines.end())
nextRefineX=(*it).omega();
else {
nextRefineX=1e99;
break;
}
}
}
return count;
}
| QVector< Point > * QGpCompatibility::CompatModalRefinedCurves::toPointVector | ( | int | imode | ) |
References _curves, _refines, inv2pi, QGpCompatibility::CompatModalCurves::invalidValue(), mode(), nModes(), QGpCompatibility::CompatModalFrequency::nOmegas(), and QGpCompatibility::CompatModalFrequency::omega().
{
int nm=nModes();
int nf=nOmegas();
ASSERT(imode<nm);
QVector<Point> * points=new QVector<Point>;
// init fixed values
double nextFixedX=omega(0);
CompatVDataPointVector& point=mode(imode);
// init refines values
CompatRefineIterator it=_refines.begin();
double nextRefineX;
// Currently refines are for Rayleigh fundamental mode only
if(imode==0 && it!=_refines.end()) {
nextRefineX=(*it).omega();
} else {
nextRefineX=1e99;
it=_refines.end();
}
// loop variables
double val, invalidValue=_curves.invalidValue();
int i=0;
while(i<nf || it!=_refines.end()) {
while(nextFixedX<nextRefineX) {
val=point[i].value();
if(val!=invalidValue) points->append(Point(inv2pi*nextFixedX,val,0));
i++;
if(i<nf) nextFixedX=omega(i);
else {
nextFixedX=1e99;
break;
}
}
while(nextRefineX<nextFixedX) {
val=(*it).value(imode);
if(val!=invalidValue) points->append(Point(inv2pi*nextRefineX,val,0));
++it;
if(it!=_refines.end())
nextRefineX=(*it).omega();
else {
nextRefineX=1e99;
break;
}
}
}
return points;
}
| void QGpCompatibility::CompatModalRefinedCurves::toStream | ( | FILE * | f | ) |
References _curves, _refines, inv2pi, QGpCompatibility::CompatModalCurves::invalidValue(), mode(), nModes(), QGpCompatibility::CompatModalFrequency::nOmegas(), QGpCompatibility::CompatModalFrequency::omega(), and TRACE.
{
TRACE;
int nm=nModes();
int nf=nOmegas();
for(int imode=0; imode<nm;imode++) {
// init fixed values
double nextFixedX=omega(0);
CompatVDataPointVector& point=mode(imode);
// init refines values
CompatRefineIterator it=_refines.begin();
double nextRefineX;
// Currently refines are for Rayleigh fundamental mode only
if(imode==0 && it!=_refines.end()) {
nextRefineX=(*it).omega();
} else {
nextRefineX=1e99;
it=_refines.end();
}
// loop variables
double val, invalidValue=_curves.invalidValue();
int i=0;
while(i<nf || it!=_refines.end()) {
while(nextFixedX<nextRefineX) {
val=point[i].value();
if(val!=invalidValue) fprintf(f,"%lg %lg\n",inv2pi*nextFixedX,val);
i++;
if(i<nf) nextFixedX=omega(i);
else {
nextFixedX=1e99;
break;
}
}
while(nextRefineX<nextFixedX) {
val=(*it).value(imode);
if(val!=invalidValue) fprintf(f,"%lg %lg\n",inv2pi*nextRefineX,val);
++it;
if(it!=_refines.end())
nextRefineX=(*it).omega();
else {
nextRefineX=1e99;
break;
}
}
}
}
}
| QVector<double>* QGpCompatibility::CompatModalRefinedCurves::weightVector | ( | int | im | ) | [inline] |
{return _curves.weightVector(im);}
| void QGpCompatibility::CompatModalRefinedCurves::writeReport | ( | QDataStream & | s | ) | const |
Save all to report (including frequency), mixing refines and original samples, removing invalid values
Begin with a table of the number of samples per mode
4 nm Modes 4 n Rayleigh modes nm*4 table of number of samples per mode sum(nfr)*2*8 values: sum(nfr)*2*8
References _curves, _refines, inv2pi, QGpCompatibility::CompatModalCurves::invalidValue(), mode(), nModes(), QGpCompatibility::CompatModalFrequency::nOmegas(), QGpCompatibility::CompatModalFrequency::nRayleighModes(), QGpCompatibility::CompatModalFrequency::omega(), and TRACE.
{
TRACE;
int nm=nModes();
int nf=nOmegas();
s << nm;
s << nRayleighModes();
int nfr=0;
for(int imode=0; imode<nm;imode++) {
// room for sample per mode table
qint64 nSamplesPos=s.device()->pos();
s << nfr;
// init fixed values
double nextFixedX=omega(0);
const CompatVDataPointVector& point=mode(imode);
// init refines values
CompatRefineConstIterator it=_refines.begin();
double nextRefineX;
// Currently refines are for Rayleigh fundamental mode only
if(imode==0 && it!=_refines.end()) {
nextRefineX=(*it).omega();
} else {
nextRefineX=1e99;
it=_refines.end();
}
// loop variables
double val, invalidValue=_curves.invalidValue();
int i=0;
nfr=0; // initialize the real number of frequencies
while(i<nf || it!=_refines.end()) {
while(nextFixedX<nextRefineX) {
val=point[i].value();
if(val!=invalidValue) {
s << inv2pi*nextFixedX << val;
nfr++;
}
i++;
if(i<nf) nextFixedX=omega(i);
else {
nextFixedX=1e99;
break;
}
}
while(nextRefineX<nextFixedX) {
val=(*it).value(imode);
if(val!=invalidValue) {
s << inv2pi*nextRefineX << val;
nfr++;
}
++it;
if(it!=_refines.end())
nextRefineX=(*it).omega();
else {
nextRefineX=1e99;
break;
}
}
}
// Write the real number of frequencies in the table
qint64 curPos=s.device()->pos();
s.device()->seek(nSamplesPos);
s << nfr;
s.device()->seek(curPos);
}
}
| XMLMember QGpCompatibility::CompatModalRefinedCurves::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes);
if(tag=="x1") return XMLMember(0);
else if(tag=="y1") return XMLMember(1);
else if(tag=="x2") return XMLMember(2);
else if(tag=="y2") return XMLMember(3);
else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from QGpCompatibility::CompatModalFrequency.
Reimplemented in QGpCompatibility::CompatModalEllipticity.
References _curves, and TRACE.
{
TRACE;
if(tag=="ModalCurves") return XMLMember(&_curves);
else return CompatModalFrequency::xml_member(tag, attributes, context);
}
| virtual const QString& QGpCompatibility::CompatModalRefinedCurves::xml_tagName | ( | ) | const [inline, protected, virtual] |
Reimplemented from QGpCompatibility::CompatModalFrequency.
Reimplemented in QGpCompatibility::CompatModalEllipticity, and QGpCompatibility::CompatModalDispersion.
{return xmlModalRefinedCurvesTag;}
| void QGpCompatibility::CompatModalRefinedCurves::xml_writeChildren | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
Reimplemented in QGpCompatibility::CompatModalEllipticity.
References _curves, TRACE, and QGpCoreTools::XMLClass::xml_save().
Referenced by toPointVector(), toStream(), and writeReport().
const QString QGpCompatibility::CompatModalRefinedCurves::xmlModalRefinedCurvesTag = "ModalRefinedCurves" [static, protected] |