Commit c67b73a9 authored by hrchilds's avatar hrchilds
Browse files

Separate Streamline's "maxStepLength" into "maxStepLength" (Adams-Bashforth)...

Separate Streamline's "maxStepLength" into "maxStepLength" (Adams-Bashforth) and "maxTimeStep" (DoPri).


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@12649 18c085ea-50e0-402c-830e-de6fd14e8384
parent 6b53a74e
......@@ -113,8 +113,6 @@ PyStreamlineAttributes_ToString(const StreamlineAttributes *atts, const char *pr
break;
}
SNPRINTF(tmpStr, 1000, "%smaxStepLength = %g\n", prefix, atts->GetMaxStepLength());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%stermination = %g\n", prefix, atts->GetTermination());
str += tmpStr;
{ const double *pointSource = atts->GetPointSource();
......@@ -379,6 +377,15 @@ PyStreamlineAttributes_ToString(const StreamlineAttributes *atts, const char *pr
break;
}
SNPRINTF(tmpStr, 1000, "%smaxStepLength = %g\n", prefix, atts->GetMaxStepLength());
str += tmpStr;
if(atts->GetLimitMaximumTimestep())
SNPRINTF(tmpStr, 1000, "%slimitMaximumTimestep = 1\n", prefix);
else
SNPRINTF(tmpStr, 1000, "%slimitMaximumTimestep = 0\n", prefix);
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%smaxTimeStep = %g\n", prefix, atts->GetMaxTimeStep());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%srelTol = %g\n", prefix, atts->GetRelTol());
str += tmpStr;
SNPRINTF(tmpStr, 1000, "%sabsTol = %g\n", prefix, atts->GetAbsTol());
......@@ -643,30 +650,6 @@ StreamlineAttributes_GetSourceType(PyObject *self, PyObject *args)
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetMaxStepLength(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
double dval;
if(!PyArg_ParseTuple(args, "d", &dval))
return NULL;
// Set the maxStepLength in the object.
obj->data->SetMaxStepLength(dval);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetMaxStepLength(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyFloat_FromDouble(obj->data->GetMaxStepLength());
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetTermination(PyObject *self, PyObject *args)
{
......@@ -1675,6 +1658,78 @@ StreamlineAttributes_GetStreamlineDirection(PyObject *self, PyObject *args)
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetMaxStepLength(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
double dval;
if(!PyArg_ParseTuple(args, "d", &dval))
return NULL;
// Set the maxStepLength in the object.
obj->data->SetMaxStepLength(dval);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetMaxStepLength(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyFloat_FromDouble(obj->data->GetMaxStepLength());
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetLimitMaximumTimestep(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
int ival;
if(!PyArg_ParseTuple(args, "i", &ival))
return NULL;
// Set the limitMaximumTimestep in the object.
obj->data->SetLimitMaximumTimestep(ival != 0);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetLimitMaximumTimestep(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyInt_FromLong(obj->data->GetLimitMaximumTimestep()?1L:0L);
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetMaxTimeStep(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
double dval;
if(!PyArg_ParseTuple(args, "d", &dval))
return NULL;
// Set the maxTimeStep in the object.
obj->data->SetMaxTimeStep(dval);
Py_INCREF(Py_None);
return Py_None;
}
/*static*/ PyObject *
StreamlineAttributes_GetMaxTimeStep(PyObject *self, PyObject *args)
{
StreamlineAttributesObject *obj = (StreamlineAttributesObject *)self;
PyObject *retval = PyFloat_FromDouble(obj->data->GetMaxTimeStep());
return retval;
}
/*static*/ PyObject *
StreamlineAttributes_SetRelTol(PyObject *self, PyObject *args)
{
......@@ -2671,8 +2726,6 @@ PyMethodDef PyStreamlineAttributes_methods[STREAMLINEATTRIBUTES_NMETH] = {
{"Notify", StreamlineAttributes_Notify, METH_VARARGS},
{"SetSourceType", StreamlineAttributes_SetSourceType, METH_VARARGS},
{"GetSourceType", StreamlineAttributes_GetSourceType, METH_VARARGS},
{"SetMaxStepLength", StreamlineAttributes_SetMaxStepLength, METH_VARARGS},
{"GetMaxStepLength", StreamlineAttributes_GetMaxStepLength, METH_VARARGS},
{"SetTermination", StreamlineAttributes_SetTermination, METH_VARARGS},
{"GetTermination", StreamlineAttributes_GetTermination, METH_VARARGS},
{"SetPointSource", StreamlineAttributes_SetPointSource, METH_VARARGS},
......@@ -2727,6 +2780,12 @@ PyMethodDef PyStreamlineAttributes_methods[STREAMLINEATTRIBUTES_NMETH] = {
{"GetLightingFlag", StreamlineAttributes_GetLightingFlag, METH_VARARGS},
{"SetStreamlineDirection", StreamlineAttributes_SetStreamlineDirection, METH_VARARGS},
{"GetStreamlineDirection", StreamlineAttributes_GetStreamlineDirection, METH_VARARGS},
{"SetMaxStepLength", StreamlineAttributes_SetMaxStepLength, METH_VARARGS},
{"GetMaxStepLength", StreamlineAttributes_GetMaxStepLength, METH_VARARGS},
{"SetLimitMaximumTimestep", StreamlineAttributes_SetLimitMaximumTimestep, METH_VARARGS},
{"GetLimitMaximumTimestep", StreamlineAttributes_GetLimitMaximumTimestep, METH_VARARGS},
{"SetMaxTimeStep", StreamlineAttributes_SetMaxTimeStep, METH_VARARGS},
{"GetMaxTimeStep", StreamlineAttributes_GetMaxTimeStep, METH_VARARGS},
{"SetRelTol", StreamlineAttributes_SetRelTol, METH_VARARGS},
{"GetRelTol", StreamlineAttributes_GetRelTol, METH_VARARGS},
{"SetAbsTol", StreamlineAttributes_SetAbsTol, METH_VARARGS},
......@@ -2850,8 +2909,6 @@ PyStreamlineAttributes_getattr(PyObject *self, char *name)
if(strcmp(name, "SpecifiedBox") == 0)
return PyInt_FromLong(long(StreamlineAttributes::SpecifiedBox));
if(strcmp(name, "maxStepLength") == 0)
return StreamlineAttributes_GetMaxStepLength(self, NULL);
if(strcmp(name, "termination") == 0)
return StreamlineAttributes_GetTermination(self, NULL);
if(strcmp(name, "pointSource") == 0)
......@@ -2935,6 +2992,12 @@ PyStreamlineAttributes_getattr(PyObject *self, char *name)
if(strcmp(name, "Both") == 0)
return PyInt_FromLong(long(StreamlineAttributes::Both));
if(strcmp(name, "maxStepLength") == 0)
return StreamlineAttributes_GetMaxStepLength(self, NULL);
if(strcmp(name, "limitMaximumTimestep") == 0)
return StreamlineAttributes_GetLimitMaximumTimestep(self, NULL);
if(strcmp(name, "maxTimeStep") == 0)
return StreamlineAttributes_GetMaxTimeStep(self, NULL);
if(strcmp(name, "relTol") == 0)
return StreamlineAttributes_GetRelTol(self, NULL);
if(strcmp(name, "absTol") == 0)
......@@ -3075,8 +3138,6 @@ PyStreamlineAttributes_setattr(PyObject *self, char *name, PyObject *args)
if(strcmp(name, "sourceType") == 0)
obj = StreamlineAttributes_SetSourceType(self, tuple);
else if(strcmp(name, "maxStepLength") == 0)
obj = StreamlineAttributes_SetMaxStepLength(self, tuple);
else if(strcmp(name, "termination") == 0)
obj = StreamlineAttributes_SetTermination(self, tuple);
else if(strcmp(name, "pointSource") == 0)
......@@ -3131,6 +3192,12 @@ PyStreamlineAttributes_setattr(PyObject *self, char *name, PyObject *args)
obj = StreamlineAttributes_SetLightingFlag(self, tuple);
else if(strcmp(name, "streamlineDirection") == 0)
obj = StreamlineAttributes_SetStreamlineDirection(self, tuple);
else if(strcmp(name, "maxStepLength") == 0)
obj = StreamlineAttributes_SetMaxStepLength(self, tuple);
else if(strcmp(name, "limitMaximumTimestep") == 0)
obj = StreamlineAttributes_SetLimitMaximumTimestep(self, tuple);
else if(strcmp(name, "maxTimeStep") == 0)
obj = StreamlineAttributes_SetMaxTimeStep(self, tuple);
else if(strcmp(name, "relTol") == 0)
obj = StreamlineAttributes_SetRelTol(self, tuple);
else if(strcmp(name, "absTol") == 0)
......
......@@ -44,7 +44,7 @@
//
// Functions exposed to the VisIt module.
//
#define STREAMLINEATTRIBUTES_NMETH 138
#define STREAMLINEATTRIBUTES_NMETH 142
void PyStreamlineAttributes_StartUp(StreamlineAttributes *subj, void *data);
void PyStreamlineAttributes_CloseDown();
PyMethodDef * PyStreamlineAttributes_GetMethodTable(int *nMethods);
......
......@@ -185,6 +185,10 @@ QvisStreamlinePlotWindow::~QvisStreamlinePlotWindow()
// Dave Pugmire, Mon Jul 12 15:34:29 EDT 2010
// Rename Exterior to Boundary.
//
// Hank Childs, Wed Sep 29 20:22:36 PDT 2010
// Add label and check box for whether we should restrict the maximum
// time step length.
//
// ****************************************************************************
void
......@@ -523,26 +527,40 @@ QvisStreamlinePlotWindow::CreateWindowContents()
integrationLayout->addWidget(maxStepLengthLabel, 1,0);
integrationLayout->addWidget(maxStepLength, 1,1);
limitMaxTimeStepLabel = new QLabel(tr("Limit Maximum Time Step"), integrationGroup);
limitMaxTimeStep = new QCheckBox(integrationGroup);
connect(limitMaxTimeStep, SIGNAL(toggled(bool)), this, SLOT(limitMaxTimeStepChanged(bool)));
integrationLayout->addWidget(limitMaxTimeStepLabel, 2,0);
integrationLayout->addWidget(limitMaxTimeStep, 2, 1);
// Create the step length text field.
maxTimeStepLabel = new QLabel(tr("Maximum time step"), integrationGroup);
maxTimeStep = new QLineEdit(integrationGroup);
connect(maxTimeStep, SIGNAL(returnPressed()),
this, SLOT(maxTimeStepProcessText()));
integrationLayout->addWidget(maxTimeStepLabel, 3,0);
integrationLayout->addWidget(maxTimeStep, 3,1);
// Create the relative tolerance text field.
relTolLabel = new QLabel(tr("Relative tolerance"), integrationGroup);
relTol = new QLineEdit(integrationGroup);
connect(relTol, SIGNAL(returnPressed()),
this, SLOT(relTolProcessText()));
integrationLayout->addWidget(relTolLabel, 2,0);
integrationLayout->addWidget(relTol, 2, 1);
integrationLayout->addWidget(relTolLabel, 4,0);
integrationLayout->addWidget(relTol, 4, 1);
// Create the absolute tolerance text field.
absTolLabel = new QLabel(tr("Absolute tolerance"), integrationGroup);
absTol = new QLineEdit(integrationGroup);
connect(absTol, SIGNAL(returnPressed()), this, SLOT(absTolProcessText()));
integrationLayout->addWidget(absTolLabel, 3,0);
integrationLayout->addWidget(absTol, 3, 1);
integrationLayout->addWidget(absTolLabel, 5,0);
integrationLayout->addWidget(absTol, 5, 1);
forceNodalLabel = new QLabel(tr("Force node centering"), integrationGroup);
forceNodal = new QCheckBox(integrationGroup);
connect(forceNodal, SIGNAL(toggled(bool)), this, SLOT(forceNodalChanged(bool)));
integrationLayout->addWidget(forceNodalLabel, 4,0);
integrationLayout->addWidget(forceNodal, 4, 1);
integrationLayout->addWidget(forceNodalLabel, 6,0);
integrationLayout->addWidget(forceNodal, 6, 1);
// ----------------------------------------------------------------------
......@@ -1081,6 +1099,9 @@ QvisStreamlinePlotWindow::ProcessOldVersions(DataNode *parentNode,
// Hank Childs, Wed Sep 29 19:12:39 PDT 2010
// Rename None to FullyOpaque.
//
// Hank Childs, Wed Sep 29 20:22:36 PDT 2010
// Add maxTimeStep.
//
// ****************************************************************************
void
......@@ -1113,6 +1134,29 @@ QvisStreamlinePlotWindow::UpdateWindow(bool doAll)
temp.setNum(streamAtts->GetMaxStepLength());
maxStepLength->setText(temp);
break;
case StreamlineAttributes::ID_limitMaximumTimestep:
limitMaxTimeStep->blockSignals(true);
limitMaxTimeStep->setChecked(streamAtts->GetLimitMaximumTimestep());
limitMaxTimeStep->blockSignals(false);
maxTimeStep->blockSignals(true);
maxTimeStepLabel->blockSignals(true);
if (streamAtts->GetIntegrationType() == StreamlineAttributes::DormandPrince
&& !streamAtts->GetLimitMaximumTimestep())
{
maxTimeStep->setEnabled(false);
maxTimeStepLabel->setEnabled(false);
}
else
{
maxTimeStep->setEnabled(true);
maxTimeStepLabel->setEnabled(true);
}
maxTimeStep->blockSignals(false);
break;
case StreamlineAttributes::ID_maxTimeStep:
temp.setNum(streamAtts->GetMaxTimeStep());
maxTimeStep->setText(temp);
break;
case StreamlineAttributes::ID_termination:
temp.setNum(streamAtts->GetTermination());
termination->setText(temp);
......@@ -1860,6 +1904,9 @@ QvisStreamlinePlotWindow::UpdateSourceAttributes()
// Dave Pugmire, Fri Aug 8 16:27:03 EDT 2008
// Change the step label text based on the integration method.
//
// Hank Childs, Wed Sep 29 20:22:36 PDT 2010
// Add support for limiting the maximum time step.
//
// ****************************************************************************
void
......@@ -1868,6 +1915,10 @@ QvisStreamlinePlotWindow::UpdateIntegrationAttributes()
//Turn off everything.
maxStepLength->hide();
maxStepLengthLabel->hide();
limitMaxTimeStepLabel->hide();
limitMaxTimeStep->hide();
maxTimeStep->hide();
maxTimeStepLabel->hide();
relTol->hide();
relTolLabel->hide();
absTol->hide();
......@@ -1876,9 +1927,10 @@ QvisStreamlinePlotWindow::UpdateIntegrationAttributes()
switch( streamAtts->GetIntegrationType() )
{
case StreamlineAttributes::DormandPrince:
maxStepLength->show();
maxStepLengthLabel->show();
maxStepLengthLabel->setText(tr("Maximum step length"));
limitMaxTimeStepLabel->show();
limitMaxTimeStep->show();
maxTimeStep->show();
maxTimeStepLabel->show();
relTol->show();
relTolLabel->show();
absTol->show();
......@@ -1889,7 +1941,6 @@ QvisStreamlinePlotWindow::UpdateIntegrationAttributes()
case StreamlineAttributes::M3DC1Integrator:
maxStepLength->show();
maxStepLengthLabel->show();
maxStepLengthLabel->setText(tr("Step length"));
absTol->show();
absTolLabel->show();
break;
......@@ -2011,6 +2062,9 @@ QvisStreamlinePlotWindow::UpdateAlgorithmAttributes()
// Dave Pugmire, Tue Dec 29 14:37:53 EST 2009
// Add custom renderer and lots of appearance options to the streamlines plots.
//
// Hank Childs, Wed Sep 29 20:44:18 PDT 2010
// Add support for the max time step.
//
// ****************************************************************************
void
......@@ -2033,6 +2087,20 @@ QvisStreamlinePlotWindow::GetCurrentValues(int which_widget)
}
}
// Do max time step
if(which_widget == StreamlineAttributes::ID_maxTimeStep || doAll)
{
double val;
if(LineEditGetDouble(maxTimeStep, val))
streamAtts->SetMaxTimeStep(val);
else
{
ResettingError(tr("step length"),
DoubleToQString(streamAtts->GetMaxTimeStep()));
streamAtts->SetMaxTimeStep(streamAtts->GetMaxTimeStep());
}
}
// Do termination
if(which_widget == StreamlineAttributes::ID_termination || doAll)
{
......@@ -2597,6 +2665,13 @@ QvisStreamlinePlotWindow::maxStepLengthProcessText()
Apply();
}
void
QvisStreamlinePlotWindow::maxTimeStepProcessText()
{
GetCurrentValues(StreamlineAttributes::ID_maxTimeStep);
Apply();
}
void
QvisStreamlinePlotWindow::terminationProcessText()
{
......@@ -2900,6 +2975,13 @@ QvisStreamlinePlotWindow::absTolProcessText()
Apply();
}
void
QvisStreamlinePlotWindow::limitMaxTimeStepChanged(bool val)
{
streamAtts->SetLimitMaximumTimestep(val);
Apply();
}
void
QvisStreamlinePlotWindow::forceNodalChanged(bool val)
{
......
......@@ -127,6 +127,10 @@ class StreamlineAttributes;
// Dave Pugmire, Wed Jun 23 16:44:36 EDT 2010
// Repace fill interior checkbox with radio button.
//
// Hank Childs, Wed Sep 29 20:22:36 PDT 2010
// Add methods for the maximum time step (DoPri), which is distinct from
// the step length (Adams/Bashforth).
//
// ****************************************************************************
class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
......@@ -165,6 +169,7 @@ class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
void streamlineAlgorithmChanged(int val);
void directionTypeChanged(int val);
void maxStepLengthProcessText();
void maxTimeStepProcessText();
void terminationProcessText();
void relTolProcessText();
void absTolProcessText();
......@@ -234,13 +239,18 @@ class QvisStreamlinePlotWindow : public QvisPostableWindowObserver
void readPoints();
void textChanged(const QString &currentText);
void forceNodalChanged(bool);
void limitMaxTimeStepChanged(bool);
private:
int plotType;
QComboBox *sourceType;
QComboBox *directionType;
QLabel *limitMaxTimeStepLabel;
QCheckBox *limitMaxTimeStep;
QLineEdit *maxStepLength;
QLabel *maxStepLengthLabel;
QLineEdit *maxTimeStep;
QLabel *maxTimeStepLabel;
QLineEdit *termination;
QLineEdit *relTol;
QLabel *relTolLabel;
......
......@@ -217,6 +217,8 @@ StreamlineAttributes::ChangesRequireRecalculation(const StreamlineAttributes &ob
streamlineDirection != obj.streamlineDirection ||
integrationType != obj.integrationType ||
maxStepLength != obj.maxStepLength ||
maxTimeStep != obj.maxTimeStep ||
limitMaximumTimestep != obj.limitMaximumTimestep ||
relTol != obj.relTol ||
absTol != obj.absTol ||
forceNodeCenteredData != obj.forceNodeCenteredData ||
......
......@@ -88,9 +88,6 @@
<Field name="sourceType" label="Source" type="enum" subtype="SourceType">
SpecifiedPoint
</Field>
<Field name="maxStepLength" label="maximum step length" type="double">
0.100000
</Field>
<Field name="termination" label="Termination" type="double">
10.000000
</Field>
......@@ -202,6 +199,15 @@
<Field name="streamlineDirection" label="streamlineDirection" type="enum" subtype="IntegrationDirection">
Forward
</Field>
<Field name="maxStepLength" label="maximum step length" type="double">
0.100000
</Field>
<Field name="limitMaximumTimestep" label="Limit Maximum Timestep (DoPri only)?" type="bool">
false
</Field>
<Field name="maxTimeStep" label="maximum time step length" type="double">
0.100000
</Field>
<Field name="relTol" label="rel. tolerance" type="double">
0.000100
</Field>
......
......@@ -445,7 +445,6 @@ StreamlineAttributes::GeomDisplayType_FromString(const std::string &s, Streamlin
void StreamlineAttributes::Init()
{
sourceType = SpecifiedPoint;
maxStepLength = 0.1;
termination = 10;
pointSource[0] = 0;
pointSource[1] = 0;
......@@ -498,6 +497,9 @@ void StreamlineAttributes::Init()
legendFlag = true;
lightingFlag = true;
streamlineDirection = Forward;
maxStepLength = 0.1;
limitMaximumTimestep = false;
maxTimeStep = 0.1;
relTol = 0.0001;
absTol = 1e-05;
terminationType = Distance;
......@@ -558,7 +560,6 @@ void StreamlineAttributes::Copy(const StreamlineAttributes &obj)
{
sourceType = obj.sourceType;
maxStepLength = obj.maxStepLength;
termination = obj.termination;
pointSource[0] = obj.pointSource[0];
pointSource[1] = obj.pointSource[1];
......@@ -609,6 +610,9 @@ void StreamlineAttributes::Copy(const StreamlineAttributes &obj)
legendFlag = obj.legendFlag;
lightingFlag = obj.lightingFlag;
streamlineDirection = obj.streamlineDirection;
maxStepLength = obj.maxStepLength;
limitMaximumTimestep = obj.limitMaximumTimestep;
maxTimeStep = obj.maxTimeStep;
relTol = obj.relTol;
absTol = obj.absTol;
terminationType = obj.terminationType;
......@@ -848,7 +852,6 @@ StreamlineAttributes::operator == (const StreamlineAttributes &obj) const
// Create the return value
return ((sourceType == obj.sourceType) &&
(maxStepLength == obj.maxStepLength) &&
(termination == obj.termination) &&
pointSource_equal &&
lineStart_equal &&
......@@ -876,6 +879,9 @@ StreamlineAttributes::operator == (const StreamlineAttributes &obj) const
(legendFlag == obj.legendFlag) &&
(lightingFlag == obj.lightingFlag) &&
(streamlineDirection == obj.streamlineDirection) &&
(maxStepLength == obj.maxStepLength) &&
(limitMaximumTimestep == obj.limitMaximumTimestep) &&
(maxTimeStep == obj.maxTimeStep) &&
(relTol == obj.relTol) &&
(absTol == obj.absTol) &&
(terminationType == obj.terminationType) &&
......@@ -1172,7 +1178,6 @@ void
StreamlineAttributes::SelectAll()
{
Select(ID_sourceType, (void *)&sourceType);
Select(ID_maxStepLength, (void *)&maxStepLength);
Select(ID_termination, (void *)&termination);
Select(ID_pointSource, (void *)pointSource, 3);
Select(ID_lineStart, (void *)lineStart, 3);
......@@ -1200,6 +1205,9 @@ StreamlineAttributes::SelectAll()
Select(ID_legendFlag, (void *)&legendFlag);
Select(ID_lightingFlag, (void *)&lightingFlag);
Select(ID_streamlineDirection, (void *)&streamlineDirection);
Select(ID_maxStepLength, (void *)&maxStepLength);
Select(ID_limitMaximumTimestep, (void *)&limitMaximumTimestep);
Select(ID_maxTimeStep, (void *)&maxTimeStep);
Select(ID_relTol, (void *)&relTol);
Select(ID_absTol, (void *)&absTol);
Select(ID_terminationType, (void *)&terminationType);
......@@ -1277,12 +1285,6 @@ StreamlineAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool f
node->AddNode(new DataNode("sourceType", SourceType_ToString(sourceType)));
}
if(completeSave || !FieldsEqual(ID_maxStepLength, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("maxStepLength", maxStepLength));
}
if(completeSave || !FieldsEqual(ID_termination, &defaultObject))
{
addToParent = true;
......@@ -1447,6 +1449,24 @@ StreamlineAttributes::CreateNode(DataNode *parentNode, bool completeSave, bool f
node->AddNode(new DataNode("streamlineDirection", IntegrationDirection_ToString(streamlineDirection)));
}
if(completeSave || !FieldsEqual(ID_maxStepLength, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("maxStepLength", maxStepLength));
}
if(completeSave || !FieldsEqual(ID_limitMaximumTimestep, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("limitMaximumTimestep", limitMaximumTimestep));
}
if(completeSave || !FieldsEqual(ID_maxTimeStep, &defaultObject))
{
addToParent = true;
node->AddNode(new DataNode("maxTimeStep", maxTimeStep));
}
if(completeSave || !FieldsEqual(ID_relTol, &defaultObject))
{
addToParent = true;
......@@ -1733,8 +1753,6 @@ StreamlineAttributes::SetFromNode(DataNode *parentNode)
SetSourceType(value);
}
}
if((node = searchNode->GetNode("maxStepLength")) != 0)
SetMaxStepLength(node->AsDouble());
if((node = searchNode->GetNode("termination")) != 0)
SetTermination(node->AsDouble());
if((node = searchNode->GetNode("pointSource")) != 0)
......@@ -1831,6 +1849,12 @@ StreamlineAttributes::SetFromNode(DataNode *parentNode)
SetStreamlineDirection(value);
}
}
if((node = searchNode->GetNode("maxStepLength")) != 0)
SetMaxStepLength(node->AsDouble());
if((node = searchNode->GetNode("limitMaximumTimestep")) != 0)
SetLimitMaximumTimestep(node->AsBool());
if((node = searchNode->GetNode("maxTimeStep")) != 0)
SetMaxTimeStep(node->AsDouble());
if((node = searchNode->GetNode("relTol")) != 0)