Commit 5f291ca8 authored by brugger's avatar brugger

I enhanced VisIt to handle database readers that can provide 2D multi
resolution versions of the data. When 2D multi resolution is enabled,
the avtMultiresFilter adds a multi resolution data selection to the
contract that contains the view frustum and a desired cell size. The
reader then needs to return a data set that covers the frustum and has
a cell size smaller than the desired cell size assuming that the mesh 
covers the extents and has cells smaller than the desired size. The 
reader also needs to add to the contract the actual frustum covered and 
the actual cell size returned. A working example of a reader that 
supports multi resolution data selection was added. It is the MRTest 
reader and is built when specifying -DVISIT_BUILD_ALL_PLUGINS=1 with 
cmake. I also updated the release notes with a description of the change.



git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@22537 18c085ea-50e0-402c-830e-de6fd14e8384
parent c57e69d5
......@@ -84,6 +84,7 @@ void avtDatabaseMetaData::Init()
mustRepopulateOnStateChange = false;
mustAlphabetizeVariables = true;
formatCanDoDomainDecomposition = false;
formatCanDoMultires = false;
useCatchAllMesh = false;
isSimulation = false;
replacementMask = -65;
......@@ -118,6 +119,7 @@ void avtDatabaseMetaData::Copy(const avtDatabaseMetaData &obj)
mustRepopulateOnStateChange = obj.mustRepopulateOnStateChange;
mustAlphabetizeVariables = obj.mustAlphabetizeVariables;
formatCanDoDomainDecomposition = obj.formatCanDoDomainDecomposition;
formatCanDoMultires = obj.formatCanDoMultires;
useCatchAllMesh = obj.useCatchAllMesh;
timeStepPath = obj.timeStepPath;
timeStepNames = obj.timeStepNames;
......@@ -623,6 +625,7 @@ avtDatabaseMetaData::operator == (const avtDatabaseMetaData &obj) const
(mustRepopulateOnStateChange == obj.mustRepopulateOnStateChange) &&
(mustAlphabetizeVariables == obj.mustAlphabetizeVariables) &&
(formatCanDoDomainDecomposition == obj.formatCanDoDomainDecomposition) &&
(formatCanDoMultires == obj.formatCanDoMultires) &&
(useCatchAllMesh == obj.useCatchAllMesh) &&
(timeStepPath == obj.timeStepPath) &&
(timeStepNames == obj.timeStepNames) &&
......@@ -801,6 +804,7 @@ avtDatabaseMetaData::SelectAll()
Select(ID_mustRepopulateOnStateChange, (void *)&mustRepopulateOnStateChange);
Select(ID_mustAlphabetizeVariables, (void *)&mustAlphabetizeVariables);
Select(ID_formatCanDoDomainDecomposition, (void *)&formatCanDoDomainDecomposition);
Select(ID_formatCanDoMultires, (void *)&formatCanDoMultires);
Select(ID_useCatchAllMesh, (void *)&useCatchAllMesh);
Select(ID_timeStepPath, (void *)&timeStepPath);
Select(ID_timeStepNames, (void *)&timeStepNames);
......@@ -1018,6 +1022,51 @@ avtDatabaseMetaData::SetFormatCanDoDomainDecomposition(bool can)
formatCanDoDomainDecomposition = can;
}
// ****************************************************************************
// Method: avtDatabaseMetaData::SetFormatCanDoMultires
//
// Purpose:
// Sets flag indicating that format can provide multiple resolutions
// of the data. This means all meshes should have numBlocks set to 1.
// Upon each attempt to get data from the database, the format can decide
// what resolution of the data to provide and how to decompose the data
// across processors. This also means that when VisIt "load-balances"
// blocks (i.e. domains) across processors, it will do so by assigning
// the one and only block to each and every processor. It is up to the
// plugin to decide which portion of the whole it will actually return
// in a request to GetMesh(), GetVar(), ...
//
// Programmer: Eric Brugger
// Creation: December 20, 2013
// ****************************************************************************
void
avtDatabaseMetaData::SetFormatCanDoMultires(bool can)
{
if (can)
{
// see if there are any meshes with other than a single block
bool someMeshesHaveOtherThanOneBlock = false;
for (int i = 0; i < GetNumMeshes(); i++)
{
if (GetMeshes(i).numBlocks != 1)
{
someMeshesHaveOtherThanOneBlock = true;
break;
}
}
if (someMeshesHaveOtherThanOneBlock)
{
EXCEPTION1(ImproperUseException, "Format cannot provide "
"multiple resolutions of the data with meshes having other "
"than a single block");
}
}
formatCanDoMultires = can;
}
void
avtDatabaseMetaData::SetUseCatchAllMesh(bool useCatchAllMesh_)
{
......@@ -1175,6 +1224,12 @@ avtDatabaseMetaData::GetFormatCanDoDomainDecomposition() const
return formatCanDoDomainDecomposition;
}
bool
avtDatabaseMetaData::GetFormatCanDoMultires() const
{
return formatCanDoMultires;
}
bool
avtDatabaseMetaData::GetUseCatchAllMesh() const
{
......
......@@ -115,6 +115,54 @@ avtDatabaseMetaData::SetFormatCanDoDomainDecomposition(bool can)
formatCanDoDomainDecomposition = can;
}
Function: SetFormatCanDoMultires
Declaration: void SetFormatCanDoMultires(bool can);
Definition:
// ****************************************************************************
// Method: avtDatabaseMetaData::SetFormatCanDoMultires
//
// Purpose:
// Sets flag indicating that format can provide multiple resolutions
// of the data. This means all meshes should have numBlocks set to 1.
// Upon each attempt to get data from the database, the format can decide
// what resolution of the data to provide and how to decompose the data
// across processors. This also means that when VisIt "load-balances"
// blocks (i.e. domains) across processors, it will do so by assigning
// the one and only block to each and every processor. It is up to the
// plugin to decide which portion of the whole it will actually return
// in a request to GetMesh(), GetVar(), ...
//
// Programmer: Eric Brugger
// Creation: December 20, 2013
// ****************************************************************************
void
avtDatabaseMetaData::SetFormatCanDoMultires(bool can)
{
if (can)
{
// see if there are any meshes with other than a single block
bool someMeshesHaveOtherThanOneBlock = false;
for (int i = 0; i < GetNumMeshes(); i++)
{
if (GetMeshes(i).numBlocks != 1)
{
someMeshesHaveOtherThanOneBlock = true;
break;
}
}
if (someMeshesHaveOtherThanOneBlock)
{
EXCEPTION1(ImproperUseException, "Format cannot provide "
"multiple resolutions of the data with meshes having other "
"than a single block");
}
}
formatCanDoMultires = can;
}
Function: SetCycle
Declaration: void SetCycle(int, int);
Definition:
......
......@@ -149,6 +149,7 @@ public:
void SetMustRepopulateOnStateChange(bool mustRepopulateOnStateChange_);
void SetMustAlphabetizeVariables(bool mustAlphabetizeVariables_);
void SetFormatCanDoDomainDecomposition(bool formatCanDoDomainDecomposition_);
void SetFormatCanDoMultires(bool formatCanDoMultires_);
void SetUseCatchAllMesh(bool useCatchAllMesh_);
void SetTimeStepPath(const std::string &timeStepPath_);
void SetTimeStepNames(const stringVector &timeStepNames_);
......@@ -174,6 +175,7 @@ public:
bool GetMustRepopulateOnStateChange() const;
bool GetMustAlphabetizeVariables() const;
bool GetFormatCanDoDomainDecomposition() const;
bool GetFormatCanDoMultires() const;
bool GetUseCatchAllMesh() const;
const std::string &GetTimeStepPath() const;
std::string &GetTimeStepPath();
......@@ -411,6 +413,7 @@ public:
ID_mustRepopulateOnStateChange,
ID_mustAlphabetizeVariables,
ID_formatCanDoDomainDecomposition,
ID_formatCanDoMultires,
ID_useCatchAllMesh,
ID_timeStepPath,
ID_timeStepNames,
......@@ -452,6 +455,7 @@ private:
bool mustRepopulateOnStateChange;
bool mustAlphabetizeVariables;
bool formatCanDoDomainDecomposition;
bool formatCanDoMultires;
bool useCatchAllMesh;
std::string timeStepPath;
stringVector timeStepNames;
......@@ -484,6 +488,6 @@ private:
static const char *TypeMapFormatString;
static const private_tmfs_t TmfsStruct;
};
#define AVTDATABASEMETADATA_TMFS "bddibbbbbss*i*i*d*i*sssaa*a*a*a*a*a*a*a*a*a*a*a*bas*i"
#define AVTDATABASEMETADATA_TMFS "bddibbbbbbss*i*i*d*i*sssaa*a*a*a*a*a*a*a*a*a*a*a*bas*i"
#endif
......@@ -24,6 +24,9 @@
<Field name="formatCanDoDomainDecomposition" label="Format can decompose data" type="bool">
false
</Field>
<Field name="formatCanDoMultires" label="Format can provide multiple resolutions of the data" type="bool">
false
</Field>
<Field name="useCatchAllMesh" label="Use catch-all mesh" type="bool">
false
</Field>
......
......@@ -61,6 +61,7 @@
#include <avtExtents.h>
#include <avtIOInformation.h>
#include <avtIntervalTree.h>
#include <avtMultiresSelection.h>
#include <avtSIL.h>
#include <DebugStream.h>
......@@ -792,6 +793,9 @@ avtDatabase::GetOutput(const char *var, int ts)
// Hank Childs, Tue Oct 23 14:43:37 PDT 2012
// Mark the zones and nodes as invalidated if selections were applied.
//
// Eric Brugger, Fri Dec 20 11:44:53 PST 2013
// Set the multi resolution data selection information into the meta data.
//
// ****************************************************************************
void
......@@ -1084,6 +1088,30 @@ avtDatabase::PopulateDataObjectInformation(avtDataObject_p &dob,
}
atts.SetActiveVariable(var);
//
// Transfer the multi resolution data selection information to the
// avtDataAttributes.
//
if (*spec != NULL)
{
vector<avtDataSelection_p> selList = spec->GetAllDataSelections();
for (int i = 0; i < selList.size(); i++)
{
if (string(selList[i]->GetType()) == "Multi Resolution Data Selection")
{
avtMultiresSelection *sel= (avtMultiresSelection*)*(selList[i]);
double frustum[6];
sel->GetActualFrustum(frustum);
double cellSize = sel->GetActualCellSize();
avtExtents multiresExtents(3);
multiresExtents.Set(frustum);
atts.SetMultiresExtents(&multiresExtents);
atts.SetMultiresCellSize(cellSize);
}
}
}
//
// SPECIAL CASE:
//
......
......@@ -42,15 +42,20 @@
#include <avtMultiresFilter.h>
#include <avtCallback.h>
#include <avtDataAttributes.h>
#include <avtDatabase.h>
#include <avtDatabaseMetaData.h>
#include <avtDomainNesting.h>
#include <avtExtents.h>
#include <avtMeshMetaData.h>
#include <avtMetaData.h>
#include <avtResolutionSelection.h>
#include <avtMultiresSelection.h>
#include <avtStructuredDomainNesting.h>
#include <DebugStream.h>
#include <InvalidFilesException.h>
#include <float.h>
#include <limits.h>
......@@ -67,6 +72,8 @@
// Creation: Tue Oct 25 14:10:30 PDT 2011
//
// Modifications:
// Eric Brugger, Fri Dec 20 11:52:45 PST 2013
// Add support for doing multi resolution data selections.
//
// ****************************************************************************
......@@ -74,8 +81,10 @@ avtMultiresFilter::avtMultiresFilter(double *frust, double size)
{
nDims = 3;
for (int i = 0; i < 6; i++)
frustum[i] = frust[i];
smallestCellSize = size;
desiredFrustum[i] = frust[i];
desiredCellSize = size;
selID = -1;
}
// ****************************************************************************
......@@ -104,6 +113,10 @@ avtMultiresFilter::~avtMultiresFilter()
// Programmer: Eric Brugger
// Creation: Tue Oct 25 14:10:30 PDT 2011
//
// Modifications:
// Eric Brugger, Fri Dec 20 11:52:45 PST 2013
// Add support for doing multi resolution data selections.
//
// ****************************************************************************
void
......@@ -111,17 +124,36 @@ avtMultiresFilter::Execute(void)
{
avtDataAttributes &dataAtts = GetTypedOutput()->GetInfo().GetAttributes();
//
// Set the multires extents.
//
avtExtents multiresExtents(nDims);
multiresExtents.Set(frustum);
dataAtts.SetMultiresExtents(&multiresExtents);
if (selID != -1)
{
//
// The database can do multiresolution so just set the multires
// extents and cell size so that Visit doesn't complain.
//
avtExtents *oldExtents = dataAtts.GetMultiresExtents();
double oldFrustum[6];
oldExtents->CopyTo(oldFrustum);
//
// Set the multires cell size.
//
dataAtts.SetMultiresCellSize(cellSize);
avtExtents multiresExtents(nDims);
multiresExtents.Set(oldFrustum);
dataAtts.SetMultiresExtents(&multiresExtents);
double oldCellSize;
oldCellSize = dataAtts.GetMultiresCellSize();
dataAtts.SetMultiresCellSize(oldCellSize);
}
else
{
//
// The database can't do multiresolution so set the multires
// extents and cell size using the information from this class.
//
avtExtents multiresExtents(nDims);
multiresExtents.Set(desiredFrustum);
dataAtts.SetMultiresExtents(&multiresExtents);
dataAtts.SetMultiresCellSize(actualCellSize);
}
//
// Copy the input to the output.
......@@ -135,11 +167,15 @@ avtMultiresFilter::Execute(void)
//
// Purpose:
// Modify the contract to only serve up a subset of the chunks based on the
// view frustum and the smallest cell size.
// view frustum and the desired cell size.
//
// Programmer: Eric Brugger
// Creation: Tue Oct 25 14:10:30 PDT 2011
//
// Modifications:
// Eric Brugger, Fri Dec 20 11:52:45 PST 2013
// Add support for doing multi resolution data selections.
//
// ****************************************************************************
avtContract_p avtMultiresFilter::ModifyContract(avtContract_p contract)
......@@ -154,12 +190,12 @@ avtContract_p avtMultiresFilter::ModifyContract(avtContract_p contract)
dataAtts.GetOriginalSpatialExtents()->CopyTo(extents);
//
// If the frustum is invalid, set it from the extents.
// If the desired frustum is invalid, set it from the extents.
//
if (frustum[0] == DBL_MAX && frustum[1] == -DBL_MAX)
if (desiredFrustum[0] == DBL_MAX && desiredFrustum[1] == -DBL_MAX)
{
for (int i = 0; i < 6; i++)
frustum[i] = extents[i];
desiredFrustum[i] = extents[i];
}
//
......@@ -168,6 +204,26 @@ avtContract_p avtMultiresFilter::ModifyContract(avtContract_p contract)
if (nDims != 2)
return contract;
//
// If the format can do multires then add a multi resolution data
// selection to the contract and return.
//
std::string db = GetInput()->GetInfo().GetAttributes().GetFullDBName();
ref_ptr<avtDatabase> dbp = avtCallback::GetDatabase(db, 0, NULL);
if (*dbp == NULL)
EXCEPTION1(InvalidFilesException, db.c_str());
avtDatabaseMetaData *dbmd = dbp->GetMetaData(0,true,true,false);
if (dbmd->GetFormatCanDoMultires())
{
avtMultiresSelection *selection = new avtMultiresSelection;
selection->SetDesiredFrustum(desiredFrustum);
selection->SetDesiredCellSize(desiredCellSize);
selID = contract->GetDataRequest()->AddDataSelection(selection);
return contract;
}
//
// Lookup the domain level information. If it gives this information,
// we can turn off domains in the restriction and avoid reading and
......@@ -237,22 +293,22 @@ avtContract_p avtMultiresFilter::ModifyContract(avtContract_p contract)
{
patchDx = (extents[i*2+1] - extents[i*2]) / (topLogicalWidth[i] * ratios[i]);
patchDiag += patchDx * patchDx;
frustumDx = (frustum[i*2+1] - frustum[i*2]);
frustumDx = (desiredFrustum[i*2+1] - desiredFrustum[i*2]);
frustumDiag += frustumDx * frustumDx;
double min, max;
min = double(logicalExtents[i]) * patchDx;
max = (double(logicalExtents[i+3]) + 1.) * patchDx;
if (max < frustum[i*2] || min > frustum[i*2+1])
if (max < desiredFrustum[i*2] || min > desiredFrustum[i*2+1])
visible = false;
}
patchDiag = sqrt(patchDiag);
frustumDiag = sqrt(frustumDiag);
double ratio = patchDiag / frustumDiag;
if (visible && ratio < smallestCellSize)
if (visible && ratio < desiredCellSize)
{
maxPatchDiag = patchDiag > maxPatchDiag ? patchDiag : maxPatchDiag;
}
if (ratio < smallestCellSize)
if (ratio < desiredCellSize)
visible = false;
//
......@@ -266,7 +322,7 @@ avtContract_p avtMultiresFilter::ModifyContract(avtContract_p contract)
nVisible++;
}
}
cellSize = maxPatchDiag;
actualCellSize = maxPatchDiag;
contract->GetDataRequest()->GetRestriction()->RestrictDomains(domain_list);
......
......@@ -49,6 +49,8 @@
class vtkDataSet;
class avtMultiresSelection;
// ****************************************************************************
// Class: avtMultiresFilter
//
......@@ -60,6 +62,8 @@ class vtkDataSet;
// Creation: Tue Oct 25 14:04:58 PDT 2011
//
// Modifications:
// Eric Brugger, Fri Dec 20 11:50:18 PST 2013
// Add support for doing multi resolution data selections.
//
// ****************************************************************************
......@@ -74,9 +78,11 @@ class AVTFILTERS_API avtMultiresFilter : public avtDatasetToDatasetFilter
protected:
int nDims;
double frustum[6];
double smallestCellSize;
double cellSize;
double desiredFrustum[6];
double desiredCellSize;
double actualCellSize;
int selID;
virtual void Execute(void);
......
/*****************************************************************************
*
* Copyright (c) 2000 - 2013, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-442911
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
// ************************************************************************* //
// avtMultiresSelection.h //
// ************************************************************************* //
#ifndef AVT_MULTIRES_SELECTION_H
#define AVT_MULTIRES_SELECTION_H
#include <pipeline_exports.h>
#include <ref_ptr.h>
#include <avtDataSelection.h>
// ****************************************************************************
// Class: avtMultiresSelection
//
// Purpose:
// Specify a data selection with a multi resolution representation
// consisting of a desired view frustum and a desired cell size. The
// data selection also contains the actual view frustum and cell size
// provided.
//
// Programmer: Eric Brugger
// Creation: December 20, 2013
//
// Modifications:
//
// ****************************************************************************
class PIPELINE_API avtMultiresSelection : public avtDataSelection
{
public:
avtMultiresSelection() {} ;
virtual ~avtMultiresSelection() {} ;
virtual const char * GetType() const
{ return "Multi Resolution Data Selection"; };
virtual std::string DescriptionString(void)
{ char str[1024];
sprintf(str, "avtMultiresSelection:%f_%f_%f_%f_%f_%f_%f_%f_%f_%f_%f_%f_%f_%f",
desiredFrustum[0], desiredFrustum[1],
desiredFrustum[2], desiredFrustum[3],
desiredFrustum[4], desiredFrustum[5],
actualFrustum[0], actualFrustum[1],
actualFrustum[2], actualFrustum[3],
actualFrustum[4], actualFrustum[5],
desiredCellSize, actualCellSize); };
void SetDesiredFrustum(const double frust[6])
{ desiredFrustum[0] = frust[0];
desiredFrustum[1] = frust[1];
desiredFrustum[2] = frust[2];
desiredFrustum[3] = frust[3];
desiredFrustum[4] = frust[4];
desiredFrustum[5] = frust[5]; };
void GetDesiredFrustum(double frust[6]) const
{ frust[0] = desiredFrustum[0];
frust[1] = desiredFrustum[1];
frust[2] = desiredFrustum[2];
frust[3] = desiredFrustum[3];
frust[4] = desiredFrustum[4];
frust[5] = desiredFrustum[5]; };
void SetActualFrustum(const double frust[6])
{ actualFrustum[0] = frust[0];
actualFrustum[1] = frust[1];
actualFrustum[2] = frust[2];
actualFrustum[3] = frust[3];
actualFrustum[4] = frust[4];
actualFrustum[5] = frust[5]; };
void GetActualFrustum(double frust[6]) const
{ frust[0] = actualFrustum[0];
frust[1] = actualFrustum[1];
frust[2] = actualFrustum[2];
frust[3] = actualFrustum[3];
frust[4] = actualFrustum[4];
frust[5] = actualFrustum[5]; };
void SetDesiredCellSize(double size)
{ desiredCellSize = size; };
double GetDesiredCellSize() const
{ return desiredCellSize; };
void SetActualCellSize(double size)
{ actualCellSize = size; };
double GetActualCellSize() const
{ return actualCellSize; };
private:
double desiredFrustum[6];
double actualFrustum[6];
double desiredCellSize;
double actualCellSize;
};
typedef ref_ptr<avtMultiresSelection> avtMultiresSelectiont_p;
#endif
......@@ -155,6 +155,9 @@
# Eric Brugger, Wed Nov 20 11:16:52 PST 2013
# I added the AMRTest reader.
#
# Eric Brugger, Fri Dec 20 12:18:17 PST 2013
# I added the MRTest reader.
#
#****************************************************************************/
IF(NOT WIN32)
......@@ -373,8 +376,9 @@ IF (NOT WIN32)
SET(OPTIONAL_DATABASE_PLUGINS
AMRTest
Hex
Rect
MRTest
PICS_Tester
Rect
VLI
)
ENDIF (NOT WIN32)
......
# DO NOT EDIT THIS FILE! THIS FILE IS AUTOMATICALLY GENERATED BY xml2cmake
PROJECT(MRTest)
INCLUDE(${VISIT_SOURCE_DIR}/CMake/PluginMacros.cmake)
SET(COMMON_SOURCES
MRTestPluginInfo.C
MRTestCommonPluginInfo.C
)
SET(LIBI_SOURCES
MRTestPluginInfo.C
)
SET(LIBM_SOURCES
MRTestMDServerPluginInfo.C
${COMMON_SOURCES}
avtMRTestFileFormat.C
)
SET(LIBE_SOURCES
MRTestEnginePluginInfo.C
${COMMON_SOURCES}
avtMRTestFileFormat.C
)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
${VISIT_COMMON_INCLUDES}
${VISIT_INCLUDE_DIR}/avt/DBAtts/MetaData
${VISIT_INCLUDE_DIR}/avt/DBAtts/SIL
${VISIT_INCLUDE_DIR}/avt/Database/Database
${VISIT_INCLUDE_DIR}/avt/Database/Formats
${VISIT_INCLUDE_DIR}/avt/Database/Ghost
${VISIT_INCLUDE_DIR}/avt/FileWriter
${VISIT_INCLUDE_DIR}/avt/Filters
${VISIT_INCLUDE_DIR}/avt/MIR/Base
${VISIT_INCLUDE_DIR}/avt/MIR/Tet
${VISIT_INCLUDE_DIR}/avt/MIR/Zoo
${VISIT_INCLUDE_DIR}/avt/Math
${VISIT_INCLUDE_DIR}/avt/Pipeline/AbstractFilters
${VISIT_INCLUDE_DIR}/avt/Pipeline/Data
${VISIT_INCLUDE_DIR}/avt/Pipeline/Pipeline
${VISIT_INCLUDE_DIR}/avt/Pipeline/Sinks
${VISIT_INCLUDE_DIR}/avt/Pipeline/Sources
${VISIT_INCLUDE_DIR}/avt/VisWindow/VisWindow
${VISIT_INCLUDE_DIR}/visit_vtk/full
${VISIT_INCLUDE_DIR}/visit_vtk/lightweight
${VTK_INCLUDE_DIRS}
)
LINK_DIRECTORIES(${VISIT_LIBRARY_DIR} ${VTK_LIBRARY_DIRS} )
ADD_LIBRARY(IMRTestDatabase ${LIBI_SOURCES})
TARGET_LINK_LIBRARIES(IMRTestDatabase visitcommon)
SET(INSTALLTARGETS IMRTestDatabase)
IF(NOT VISIT_ENGINE_ONLY AND NOT VISIT_DBIO_ONLY)
ADD_LIBRARY(MMRTestDatabase ${LIBM_SOURCES} )
TARGET_LINK_LIBRARIES(MMRTestDatabase visitcommon avtdbatts avtdatabase_ser )
ADD_TARGET_DEFINITIONS(MMRTestDatabase MDSERVER)
SET(INSTALLTARGETS ${INSTALLTARGETS} MMRTestDatabase)
ENDIF(NOT VISIT_ENGINE_ONLY AND NOT VISIT_DBIO_ONLY)
ADD_LIBRARY(EMRTestDatabase_ser ${LIBE_SOURCES})
TARGET_LINK_LIBRARIES(EMRTestDatabase_ser visitcommon avtdatabase_ser avtpipeline_ser )
ADD_TARGET_DEFINITIONS(EMRTestDatabase_ser ENGINE)
SET(INSTALLTARGETS ${INSTALLTARGETS} EMRTestDatabase_ser)
IF(VISIT_PARALLEL)
ADD_PARALLEL_LIBRARY(EMRTestDatabase_par ${LIBE_SOURCES})
TARGET_LINK_LIBRARIES(EMRTestDatabase_par visitcommon avtdatabase_par avtpipeline_par )
ADD_TARGET_DEFINITIONS(EMRTestDatabase_par ENGINE)
SET(INSTALLTARGETS ${INSTALLTARGETS} EMRTestDatabase_par)
ENDIF(VISIT_PARALLEL)
VISIT_INSTALL_DATABASE_PLUGINS(${INSTALLTARGETS})
VISIT_PLUGIN_TARGET_RTOD(databases ${INSTALLTARGETS})
VISIT_PLUGIN_TARGET_FOLDER(databases MRTest ${INSTALLTARGETS})
<?xml version="1.0"?>
<Plugin name="MRTest" label="MRTest" type="database" dbtype="STMD" version="1.0">
<FilePatterns> *.mrtest </FilePatterns>
</Plugin>
/*****************************************************************************
*
* Copyright (c) 2000 - 2013, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-442911
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without