Commit d98efa43 authored by hrchilds's avatar hrchilds
Browse files

1) Add the ability for the streamline's absTol field to be specified

relative to the bounding box of the problem.
2) Remove a print statement
3) Update Hank Childs' .cmake file for his home machine.


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@12664 18c085ea-50e0-402c-830e-de6fd14e8384
parent 59789d94
......@@ -112,6 +112,11 @@ Consider the leaveDomains ICs and the balancing at the same time.
// Programmer: Hank Childs
// Creation: June 5, 2010
//
// Modifications:
//
// Hank Childs, Fri Oct 1 20:43:34 PDT 2010
// Initialize absTolIsFraction.
//
// ****************************************************************************
avtPICSFilter::avtPICSFilter()
......@@ -130,6 +135,7 @@ avtPICSFilter::avtPICSFilter()
integrationType = STREAMLINE_INTEGRATE_DORMAND_PRINCE;
relTol = 1e-7;
absTol = 0;
absTolIsFraction = false;
intervalTree = NULL;
specifyPoint = false;
solver = NULL;
......@@ -649,19 +655,24 @@ avtPICSFilter::SetStreamlineAlgorithm(int algo,
// Arguments:
// reltol : The new relative tolerance.
// abstol : The new absolute tolerance.
// isBBox : Is abstol a fraction of the bounding box.
//
// Programmer: Christoph Garth
// Creation: Mon Feb 25 16:14:44 PST 2008
//
// Modifications:
//
// Hank Childs, Fri Oct 1 20:35:21 PDT 2010
// Add option for absTol that is a fraction of the bbox.
//
// ****************************************************************************
void
avtPICSFilter::SetTolerances(double reltol, double abstol)
avtPICSFilter::SetTolerances(double reltol, double abstol, bool isFraction)
{
relTol = reltol;
absTol = abstol;
absTolIsFraction = isFraction;
}
......@@ -1894,6 +1905,61 @@ avtPICSFilter::SetZToZero(vtkPolyData *pd) const
}
}
// ****************************************************************************
// Method: avtPICSFilter::GetLengthScale
//
// Purpose:
// Gets the length scale of the volume.
//
// Programmer: Hank Childs
// Creation: October 1, 2010
//
// ****************************************************************************
double
avtPICSFilter::GetLengthScale(void)
{
double bbox[6];
bool gotBounds = false;
if (GetInput()->GetInfo().GetValidity().GetSpatialMetaDataPreserved())
{
avtIntervalTree *it = GetMetaData()->GetSpatialExtents();
if (it != NULL)
{
it->GetExtents(bbox);
gotBounds = true;
}
}
if (!gotBounds)
{
GetSpatialExtents(bbox);
}
double vol = 1;
int numDims = 0;
if (bbox[1] > bbox[0])
{
vol *= (bbox[1]-bbox[0]);
numDims++;
}
if (bbox[3] > bbox[2])
{
vol *= (bbox[3]-bbox[2]);
numDims++;
}
if (bbox[5] > bbox[4])
{
vol *= (bbox[5]-bbox[4]);
numDims++;
}
double length = pow(vol, 1.0/numDims);
return length;
}
// ****************************************************************************
// Method: avtPICSFilter::PreExecute
//
......@@ -1908,6 +1974,9 @@ avtPICSFilter::SetZToZero(vtkPolyData *pd) const
// Dave Pugmire, Tue Aug 12 13:44:10 EDT 2008
// Moved the box extents code to the seed point generation function.
//
// Hank Childs, Fri Oct 1 20:43:34 PDT 2010
// Add an option for absTol to be a fraction of the bbox.
//
// ****************************************************************************
void
......@@ -1915,24 +1984,30 @@ avtPICSFilter::PreExecute(void)
{
avtDatasetOnDemandFilter::PreExecute();
double absTolToUse = absTol;
if (absTolIsFraction)
{
double l = GetLengthScale();
absTolToUse = l*absTol;
}
// Create the solver. --Get from user prefs.
if (integrationType == STREAMLINE_INTEGRATE_DORMAND_PRINCE)
{
solver = new avtIVPDopri5;
solver->SetMaximumStepSize(maxStepLength);
solver->SetTolerances(relTol, absTol);
solver->SetTolerances(relTol, absTolToUse);
}
else if (integrationType == STREAMLINE_INTEGRATE_ADAMS_BASHFORTH)
{
solver = new avtIVPAdamsBashforth;
solver->SetMaximumStepSize(maxStepLength);
solver->SetTolerances(relTol, absTol);
solver->SetTolerances(relTol, absTolToUse);
}
else if (integrationType == STREAMLINE_INTEGRATE_M3D_C1_INTEGRATOR)
{
solver = new avtIVPM3DC1Integrator;
solver->SetMaximumStepSize(maxStepLength);
solver->SetTolerances(relTol, absTol);
solver->SetTolerances(relTol, absTolToUse);
}
}
......
......@@ -103,6 +103,9 @@ class avtICAlgorithm;
// Hank Childs, Sun Sep 19 11:04:32 PDT 2010
// Added UpdateDataObjectInfo.
//
// Hank Childs, Fri Oct 1 20:35:21 PDT 2010
// Add an argument for absTol that is a fraction of the bounding box.
//
// ****************************************************************************
class AVTFILTERS_API avtPICSFilter :
......@@ -143,7 +146,7 @@ class AVTFILTERS_API avtPICSFilter :
void SetStreamlineAlgorithm(int algo, int maxCnt,
int domainCache,
int workGrpSz);
void SetTolerances(double reltol, double abstol);
void SetTolerances(double reltol, double abstol, bool isFraction);
void SetIntegrationDirection(int dir);
......@@ -156,6 +159,7 @@ class AVTFILTERS_API avtPICSFilter :
double maxStepLength;
double relTol;
double absTol;
bool absTolIsFraction;
avtIntegralCurve::TerminationType terminationType;
int integrationType;
double termination;
......@@ -233,6 +237,7 @@ class AVTFILTERS_API avtPICSFilter :
void ComputeRankList(const std::vector<int> &domList,
std::vector<int> &ranks,
std::vector<int> &doms );
double GetLengthScale(void);
avtCellLocator *SetupLocator(const DomainType &, vtkDataSet *);
virtual avtIVPField *GetFieldForDomain(const DomainType&, vtkDataSet*);
......
......@@ -277,8 +277,6 @@ avtSerialICAlgorithm::RunAlgorithm()
GetDomain(s);
}
std::cout << "\ndone\n";
TotalTime.value += visitTimer->StopTimer(timer, "Execute");
}
......
......@@ -37,8 +37,8 @@ VISIT_OPTION_DEFAULT(VISIT_PYTHON_DIR ${VISITHOME}/python/2.6.4/${VISITARCH})
##
VISIT_OPTION_DEFAULT(VISIT_C_COMPILER gcc)
VISIT_OPTION_DEFAULT(VISIT_CXX_COMPILER g++)
VISIT_OPTION_DEFAULT(VISIT_C_FLAGS " -m64 -fPIC")
VISIT_OPTION_DEFAULT(VISIT_CXX_FLAGS " -m64 -fPIC")
VISIT_OPTION_DEFAULT(VISIT_C_FLAGS " -O2 -m64 -fPIC")
VISIT_OPTION_DEFAULT(VISIT_CXX_FLAGS " -O2 -m64 -fPIC")
##############################################################
##
......
......@@ -347,6 +347,10 @@ avtPoincarePlot::CustomizeBehavior()
// Dave Pugmire, Thu Jul 1 13:55:28 EDT 2010
// Switch to variablePointGlyphMapper
//
// Hank Childs, Sat Oct 2 21:23:41 PDT 2010
// Reflect new interface in absolute tolerance. (The ones for the Poincare
// plots are not a fraction of the bounding box.)
//
// ****************************************************************************
void
......@@ -422,7 +426,7 @@ avtPoincarePlot::SetAtts(const AttributeGroup *a)
poincareFilter->SetStreamlineAlgorithm(STREAMLINE_PARALLEL_STATIC_DOMAINS,
10, 3, 1);
poincareFilter->SetMaxStepLength(atts.GetMaxStepLength());
poincareFilter->SetTolerances(atts.GetRelTol(),atts.GetAbsTol());
poincareFilter->SetTolerances(atts.GetRelTol(),atts.GetAbsTol(), false);
poincareFilter->SetStreamlineAlgorithm(atts.GetStreamlineAlgorithmType(),
......
......@@ -353,7 +353,24 @@ PyStreamlineAttributes_ToString(const StreamlineAttributes *atts, const char *pr
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%srelTol = %g\n", prefix, atts->GetRelTol());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%sabsTol = %g\n", prefix, atts->GetAbsTol());
const char *absTolSizeType_names = "Absolute, FractionOfBBox";
switch (atts->GetAbsTolSizeType())
{
case StreamlineAttributes::Absolute:
SNPRINTF(tmpStr, 1000, "%sabsTolSizeType = %sAbsolute # %s\n", prefix, prefix, absTolSizeType_names);
str += tmpStr;
break;
case StreamlineAttributes::FractionOfBBox:
SNPRINTF(tmpStr, 1000, "%sabsTolSizeType = %sFractionOfBBox # %s\n", prefix, prefix, absTolSizeType_names);
str += tmpStr;
break;
default:
break;
}
SNPRINTF(tmpStr, 1000, "%sabsTolAbsolute = %g\n", prefix, atts->GetAbsTolAbsolute());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%sabsTolBBox = %g\n", prefix, atts->GetAbsTolBBox());
str += tmpStr;
const char *terminationType_names = "Distance, Time, Step";
switch (atts->GetTerminationType())
......@@ -1670,7 +1687,40 @@ StreamlineAttributes_GetRelTol(PyObject *self, PyObject *args)
}
/*static*/ PyObject *
StreamlineAttributes_SetAbsTol(PyObject *self, PyObject *args)
StreamlineAttributes_SetAbsTolSizeType(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
int ival;
if(!PyArg_ParseTuple(args, "i", &ival))
return NULL;
// Set the absTolSizeType in the object.
if(ival >= 0 && ival < 2)
obj->data->SetAbsTolSizeType(StreamlineAttributes::SizeType(ival));
else
{
fprintf(stderr, "An invalid absTolSizeType value was given. "
"Valid values are in the range of [0,1]. "
"You can also use the following names: "
"Absolute, FractionOfBBox.");
return NULL;
}
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetAbsTolSizeType(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyInt_FromLong(long(obj->data->GetAbsTolSizeType()));
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetAbsTolAbsolute(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
......@@ -1678,18 +1728,42 @@ StreamlineAttributes_SetAbsTol(PyObject *self, PyObject *args)
if(!PyArg_ParseTuple(args, "d", &dval))
return NULL;
// Set the absTol in the object.
obj->data->SetAbsTol(dval);
// Set the absTolAbsolute in the object.
obj->data->SetAbsTolAbsolute(dval);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetAbsTol(PyObject *self, PyObject *args)
StreamlineAttributes_GetAbsTolAbsolute(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyFloat_FromDouble(obj->data->GetAbsTol());
PyObject *retval = PyFloat_FromDouble(obj->data->GetAbsTolAbsolute());
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetAbsTolBBox(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
double dval;
if(!PyArg_ParseTuple(args, "d", &dval))
return NULL;
// Set the absTolBBox in the object.
obj->data->SetAbsTolBBox(dval);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetAbsTolBBox(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyFloat_FromDouble(obj->data->GetAbsTolBBox());
return retval;
}
......@@ -3072,8 +3146,12 @@ PyMethodDef PyStreamlineAttributes_methods[STREAMLINEATTRIBUTES_NMETH] = {
{"GetMaxTimeStep", StreamlineAttributes_GetMaxTimeStep, METH_VARARGS},
{"SetRelTol", StreamlineAttributes_SetRelTol, METH_VARARGS},
{"GetRelTol", StreamlineAttributes_GetRelTol, METH_VARARGS},
{"SetAbsTol", StreamlineAttributes_SetAbsTol, METH_VARARGS},
{"GetAbsTol", StreamlineAttributes_GetAbsTol, METH_VARARGS},
{"SetAbsTolSizeType", StreamlineAttributes_SetAbsTolSizeType, METH_VARARGS},
{"GetAbsTolSizeType", StreamlineAttributes_GetAbsTolSizeType, METH_VARARGS},
{"SetAbsTolAbsolute", StreamlineAttributes_SetAbsTolAbsolute, METH_VARARGS},
{"GetAbsTolAbsolute", StreamlineAttributes_GetAbsTolAbsolute, METH_VARARGS},
{"SetAbsTolBBox", StreamlineAttributes_SetAbsTolBBox, METH_VARARGS},
{"GetAbsTolBBox", StreamlineAttributes_GetAbsTolBBox, METH_VARARGS},
{"SetTerminationType", StreamlineAttributes_SetTerminationType, METH_VARARGS},
{"GetTerminationType", StreamlineAttributes_GetTerminationType, METH_VARARGS},
{"SetIntegrationType", StreamlineAttributes_SetIntegrationType, METH_VARARGS},
......@@ -3293,8 +3371,17 @@ PyStreamlineAttributes_getattr(PyObject *self, char *name)
return StreamlineAttributes_GetMaxTimeStep(self, NULL);
if(strcmp(name, "relTol") == 0)
return StreamlineAttributes_GetRelTol(self, NULL);
if(strcmp(name, "absTol") == 0)
return StreamlineAttributes_GetAbsTol(self, NULL);
if(strcmp(name, "absTolSizeType") == 0)
return StreamlineAttributes_GetAbsTolSizeType(self, NULL);
if(strcmp(name, "Absolute") == 0)
return PyInt_FromLong(long(StreamlineAttributes::Absolute));
if(strcmp(name, "FractionOfBBox") == 0)
return PyInt_FromLong(long(StreamlineAttributes::FractionOfBBox));
if(strcmp(name, "absTolAbsolute") == 0)
return StreamlineAttributes_GetAbsTolAbsolute(self, NULL);
if(strcmp(name, "absTolBBox") == 0)
return StreamlineAttributes_GetAbsTolBBox(self, NULL);
if(strcmp(name, "terminationType") == 0)
return StreamlineAttributes_GetTerminationType(self, NULL);
if(strcmp(name, "Distance") == 0)
......@@ -3536,8 +3623,12 @@ PyStreamlineAttributes_setattr(PyObject *self, char *name, PyObject *args)
obj = StreamlineAttributes_SetMaxTimeStep(self, tuple);
else if(strcmp(name, "relTol") == 0)
obj = StreamlineAttributes_SetRelTol(self, tuple);
else if(strcmp(name, "absTol") == 0)
obj = StreamlineAttributes_SetAbsTol(self, tuple);
else if(strcmp(name, "absTolSizeType") == 0)
obj = StreamlineAttributes_SetAbsTolSizeType(self, tuple);
else if(strcmp(name, "absTolAbsolute") == 0)
obj = StreamlineAttributes_SetAbsTolAbsolute(self, tuple);
else if(strcmp(name, "absTolBBox") == 0)
obj = StreamlineAttributes_SetAbsTolBBox(self, tuple);
else if(strcmp(name, "terminationType") == 0)
obj = StreamlineAttributes_SetTerminationType(self, tuple);
else if(strcmp(name, "integrationType") == 0)
......
......@@ -44,7 +44,7 @@
//
// Functions exposed to the VisIt module.
//
#define STREAMLINEATTRIBUTES_NMETH 158
#define STREAMLINEATTRIBUTES_NMETH 162
void PyStreamlineAttributes_StartUp(StreamlineAttributes *subj, void *data);
void PyStreamlineAttributes_CloseDown();
PyMethodDef * PyStreamlineAttributes_GetMethodTable(int *nMethods);
......
......@@ -189,6 +189,9 @@ QvisStreamlinePlotWindow::~QvisStreamlinePlotWindow()
// Add label and check box for whether we should restrict the maximum
// time step length.
//
// Hank Childs, Fri Oct 1 21:13:56 PDT 2010
// Add size type for absTol.
//
// ****************************************************************************
void
......@@ -556,12 +559,17 @@ QvisStreamlinePlotWindow::CreateWindowContents()
integrationLayout->addWidget(absTolLabel, 5,0);
integrationLayout->addWidget(absTol, 5, 1);
absTolSizeType = new QComboBox(integrationGroup);
absTolSizeType->addItem(tr("Absolute"), 0);
absTolSizeType->addItem(tr("Fraction of Bounding Box"), 1);
connect(absTolSizeType, SIGNAL(activated(int)), this, SLOT(absTolSizeTypeChanged(int)));
integrationLayout->addWidget(absTolSizeType, 5, 2);
forceNodalLabel = new QLabel(tr("Force node centering"), integrationGroup);
forceNodal = new QCheckBox(integrationGroup);
connect(forceNodal, SIGNAL(toggled(bool)), this, SLOT(forceNodalChanged(bool)));
integrationLayout->addWidget(forceNodalLabel, 6,0);
integrationLayout->addWidget(forceNodal, 6, 1);
// ----------------------------------------------------------------------
// Appearance tab
......@@ -1597,9 +1605,34 @@ QvisStreamlinePlotWindow::UpdateWindow(bool doAll)
temp.setNum(streamAtts->GetRelTol());
relTol->setText(temp);
break;
case StreamlineAttributes::ID_absTol:
temp.setNum(streamAtts->GetAbsTol());
absTol->setText(temp);
case StreamlineAttributes::ID_absTolSizeType:
absTolSizeType->blockSignals(true);
absTolSizeType->setCurrentIndex((int) streamAtts->GetAbsTolSizeType());
absTolSizeType->blockSignals(false);
if (streamAtts->GetAbsTolSizeType() == StreamlineAttributes::FractionOfBBox)
{
temp.setNum(streamAtts->GetAbsTolBBox());
absTol->setText(temp);
}
if (streamAtts->GetAbsTolSizeType() == StreamlineAttributes::Absolute)
{
temp.setNum(streamAtts->GetAbsTolAbsolute());
absTol->setText(temp);
}
break;
case StreamlineAttributes::ID_absTolBBox:
if (streamAtts->GetAbsTolSizeType() == StreamlineAttributes::FractionOfBBox)
{
temp.setNum(streamAtts->GetAbsTolBBox());
absTol->setText(temp);
}
break;
case StreamlineAttributes::ID_absTolAbsolute:
if (streamAtts->GetAbsTolSizeType() == StreamlineAttributes::Absolute)
{
temp.setNum(streamAtts->GetAbsTolAbsolute());
absTol->setText(temp);
}
break;
case StreamlineAttributes::ID_terminationType:
UpdateTerminationType();
......@@ -2266,16 +2299,30 @@ QvisStreamlinePlotWindow::GetCurrentValues(int which_widget)
}
// Do absTol
if(which_widget == StreamlineAttributes::ID_absTol || doAll)
if ((which_widget == StreamlineAttributes::ID_absTolBBox || doAll)
&& streamAtts->GetAbsTolSizeType() == StreamlineAttributes::FractionOfBBox)
{
double val;
if(LineEditGetDouble(absTol, val))
streamAtts->SetAbsTol(val);
streamAtts->SetAbsTolBBox(val);
else
{
ResettingError(tr("absolute tolerance"),
DoubleToQString(streamAtts->GetAbsTol()));
streamAtts->SetAbsTol(streamAtts->GetAbsTol());
DoubleToQString(streamAtts->GetAbsTolBBox()));
streamAtts->SetAbsTolBBox(streamAtts->GetAbsTolBBox());
}
}
if ((which_widget == StreamlineAttributes::ID_absTolAbsolute || doAll)
&& streamAtts->GetAbsTolSizeType() == StreamlineAttributes::Absolute)
{
double val;
if(LineEditGetDouble(absTol, val))
streamAtts->SetAbsTolAbsolute(val);
else
{
ResettingError(tr("absolute tolerance"),
DoubleToQString(streamAtts->GetAbsTolAbsolute()));
streamAtts->SetAbsTolAbsolute(streamAtts->GetAbsTolAbsolute());
}
}
......@@ -3197,7 +3244,15 @@ QvisStreamlinePlotWindow::pathlineFlagChanged(bool val)
void
QvisStreamlinePlotWindow::absTolProcessText()
{
GetCurrentValues(StreamlineAttributes::ID_absTol);
GetCurrentValues(StreamlineAttributes::ID_absTolBBox);
GetCurrentValues(StreamlineAttributes::ID_absTolAbsolute);
Apply();
}
void
QvisStreamlinePlotWindow::absTolSizeTypeChanged(int val)
{
streamAtts->SetAbsTolSizeType((StreamlineAttributes::SizeType) val);
Apply();
}
......
......@@ -134,6 +134,9 @@ class StreamlineAttributes;
// Hank Childs, Thu Sep 30 01:22:24 PDT 2010
// Add widgets for choosing size type between fraction of bbox and absolute.
//
// Hank Childs, Fri Oct 1 21:13:56 PDT 2010
// Add size type option for absTol.
//
// ****************************************************************************
class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
......@@ -176,6 +179,7 @@ class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
void terminationProcessText();
void relTolProcessText();
void absTolProcessText();
void absTolSizeTypeChanged(int);
void pointSourceProcessText();
void lineStartProcessText();
void lineEndProcessText();
......@@ -262,6 +266,7 @@ class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
QLineEdit *relTol;
QLabel *relTolLabel;
QLineEdit *absTol;
QComboBox *absTolSizeType;
QLabel *absTolLabel;
QLabel *forceNodalLabel;
QCheckBox *forceNodal;
......
......@@ -202,6 +202,10 @@ Definition:
//
// Christoph Garth, Wed Jan 13 17:14:21 PST 2010
// Add support for circle source.
//
// Hank Childs, Fri Oct 1 20:43:34 PDT 2010
// Add support for absTol that is fraction of the bounding box.
//
// ****************************************************************************
#define PDIF(p1,p2,i) ((p1)[i] != (p2)[i])
......@@ -220,7 +224,9 @@ StreamlineAttributes::ChangesRequireRecalculation(const StreamlineAttributes &ob
maxTimeStep != obj.maxTimeStep ||
limitMaximumTimestep != obj.limitMaximumTimestep ||
relTol != obj.relTol ||
absTol != obj.absTol ||
absTolAbsolute != obj.absTolAbsolute ||
absTolBBox != obj.absTolBBox ||
absTolSizeType != obj.absTolSizeType ||
forceNodeCenteredData != obj.forceNodeCenteredData ||
pathlines != obj.pathlines ||
coloringVariable != obj.coloringVariable ||
......
......@@ -197,8 +197,14 @@
<Field name="relTol" label="rel. tolerance" type="double">
0.000100
</Field>
<Field name="absTol" label="abs. tolerance" type="double">
0.000010
<Field name="absTolSizeType" label="AbsoluteToleranceSizeType" type="enum" subtype="SizeType">
FractionOfBBox
</Field>
<Field name="absTolAbsolute" label="abs. tolerance" type="double" enabler="absTolSizeType:Absolute">
0.000001
</Field>
<Field name="absTolBBox" label="AbsTolBBox" type="double" enabler="absTolSizeType:FractionOfBBox">
0.000001
</Field>
<Field name="terminationType" label="Termination Type" type="enum" subtype="TerminationType">
Distance
......
......@@ -532,7 +532,9 @@ void StreamlineAttributes::Init()
limitMaximumTimestep = false;
maxTimeStep = 0.1;
relTol = 0.0001;
absTol = 1e-05;
absTolSizeType = FractionOfBBox;
absTolAbsolute = 1e-06;
absTolBBox = 1e-06;
terminationType = Distance;
integrationType = DormandPrince;
streamlineAlgorithmType = VisItSelects;
......@@ -653,7 +655,9 @@ void StreamlineAttributes::Copy(const StreamlineAttributes &obj)
limitMaximumTimestep = obj.limitMaximumTimestep;
maxTimeStep = obj.maxTimeStep;
relTol = obj.relTol;
absTol = obj.absTol;
absTolSizeType = obj.absTolSizeType;
absTolAbsolute = obj.absTolAbsolute;
absTolBBox = obj.absTolBBox;
terminationType = obj.terminationType;
integrationType = obj