Move Oscillator to the sources directory
This commit is contained in:
parent
5c69f1bae9
commit
3ef234ef13
@ -14,7 +14,7 @@ project(Oscillator CXX)
|
||||
find_package(VTKm REQUIRED QUIET)
|
||||
|
||||
add_executable(Oscillator Oscillator.cxx)
|
||||
target_link_libraries(Oscillator PRIVATE vtkm_filter)
|
||||
target_link_libraries(Oscillator PRIVATE vtkm_source)
|
||||
vtkm_add_target_information(Oscillator
|
||||
DROP_UNUSED_SYMBOLS MODIFY_CUDA_FLAGS
|
||||
DEVICE_SOURCES Oscillator.cxx)
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <vtkm/cont/TryExecute.h>
|
||||
|
||||
#include <vtkm/filter/OscillatorSource.h>
|
||||
#include <vtkm/source/Oscillator.h>
|
||||
|
||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
||||
#include <unistd.h> /* unlink */
|
||||
@ -58,7 +58,7 @@ static inline std::string& trim(std::string& s)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void read_oscillators(std::string filePath, vtkm::filter::OscillatorSource& filter)
|
||||
void read_oscillators(std::string filePath, vtkm::source::Oscillator& source)
|
||||
{
|
||||
std::ifstream in(filePath);
|
||||
if (!in)
|
||||
@ -87,15 +87,15 @@ void read_oscillators(std::string filePath, vtkm::filter::OscillatorSource& filt
|
||||
|
||||
if (stype == "damped")
|
||||
{
|
||||
filter.AddDamped(x, y, z, r, omega0, zeta);
|
||||
source.AddDamped(x, y, z, r, omega0, zeta);
|
||||
}
|
||||
else if (stype == "decaying")
|
||||
{
|
||||
filter.AddDecaying(x, y, z, r, omega0, zeta);
|
||||
source.AddDecaying(x, y, z, r, omega0, zeta);
|
||||
}
|
||||
else if (stype == "periodic")
|
||||
{
|
||||
filter.AddPeriodic(x, y, z, r, omega0, zeta);
|
||||
source.AddPeriodic(x, y, z, r, omega0, zeta);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -303,22 +303,19 @@ int main(int argc, char** argv)
|
||||
std::cout << " - end: " << endTime << std::endl;
|
||||
std::cout << "=======================================\n" << std::endl;
|
||||
|
||||
vtkm::cont::DataSetBuilderUniform builder;
|
||||
vtkm::cont::DataSet dataset = builder.Create(vtkm::Id3(sizeX, sizeY, sizeZ));
|
||||
|
||||
vtkm::filter::OscillatorSource filter;
|
||||
read_oscillators(oscillatorConfigFile, filter);
|
||||
vtkm::source::Oscillator source(vtkm::Id3{ sizeX, sizeY, sizeZ });
|
||||
read_oscillators(oscillatorConfigFile, source);
|
||||
|
||||
std::cout << "=========== start computation ============" << std::endl;
|
||||
int count = 0;
|
||||
while (currentTime < endTime)
|
||||
{
|
||||
filter.SetTime(currentTime);
|
||||
vtkm::cont::DataSet rdata = filter.Execute(dataset);
|
||||
source.SetTime(currentTime);
|
||||
vtkm::cont::DataSet rdata = source.Execute();
|
||||
if (generateOutput)
|
||||
{
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> tmp;
|
||||
rdata.GetField("oscillation", vtkm::cont::Field::Association::POINTS).GetData().CopyTo(tmp);
|
||||
rdata.GetField("scalars", vtkm::cont::Field::Association::POINTS).GetData().CopyTo(tmp);
|
||||
double* values = tmp.GetStorage().GetArray();
|
||||
writeData(outputDirectory, count++, sizeX, sizeY, sizeZ, values);
|
||||
}
|
||||
|
@ -49,7 +49,6 @@ set(headers
|
||||
MeshQuality.h
|
||||
NDEntropy.h
|
||||
NDHistogram.h
|
||||
OscillatorSource.h
|
||||
Pathline.h
|
||||
PointAverage.h
|
||||
PointElevation.h
|
||||
@ -115,7 +114,6 @@ set(header_template_sources
|
||||
MeshQuality.hxx
|
||||
NDEntropy.hxx
|
||||
NDHistogram.hxx
|
||||
OscillatorSource.hxx
|
||||
Pathline.hxx
|
||||
PointAverage.hxx
|
||||
PointElevation.hxx
|
||||
|
@ -1,81 +0,0 @@
|
||||
//============================================================================
|
||||
// Copyright (c) Kitware, Inc.
|
||||
// All rights reserved.
|
||||
// See LICENSE.txt for details.
|
||||
//
|
||||
// This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
// PURPOSE. See the above copyright notice for more information.
|
||||
//============================================================================
|
||||
#include <vtkm/worklet/DispatcherMapField.h>
|
||||
|
||||
namespace vtkm
|
||||
{
|
||||
namespace filter
|
||||
{
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VTKM_CONT OscillatorSource::OscillatorSource()
|
||||
: Worklet()
|
||||
{
|
||||
this->SetUseCoordinateSystemAsField(true);
|
||||
this->SetOutputFieldName("oscillation");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VTKM_CONT void OscillatorSource::SetTime(vtkm::Float64 time)
|
||||
{
|
||||
this->Worklet.SetTime(time);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VTKM_CONT void OscillatorSource::AddPeriodic(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddPeriodic(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VTKM_CONT void OscillatorSource::AddDamped(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddDamped(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline VTKM_CONT void OscillatorSource::AddDecaying(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddDecaying(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
template <typename T, typename StorageType, typename DerivedPolicy>
|
||||
inline VTKM_CONT vtkm::cont::DataSet OscillatorSource::DoExecute(
|
||||
const vtkm::cont::DataSet& inDataSet,
|
||||
const vtkm::cont::ArrayHandle<T, StorageType>& field,
|
||||
const vtkm::filter::FieldMetadata& fieldMetadata,
|
||||
const vtkm::filter::PolicyBase<DerivedPolicy>&)
|
||||
{
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> outArray;
|
||||
//todo, we need to use the policy to determine the valid conversions
|
||||
//that the dispatcher should do
|
||||
this->Invoke(this->Worklet, field, outArray);
|
||||
|
||||
return CreateResult(inDataSet, outArray, this->GetOutputFieldName(), fieldMetadata);
|
||||
}
|
||||
}
|
||||
} // namespace vtkm::filter
|
@ -9,12 +9,14 @@
|
||||
##============================================================================
|
||||
|
||||
set(headers
|
||||
Oscillator.h
|
||||
Source.h
|
||||
Tangle.h
|
||||
Wavelet.h
|
||||
)
|
||||
|
||||
set(device_sources
|
||||
Oscillator.cxx
|
||||
Source.cxx
|
||||
Tangle.cxx
|
||||
Wavelet.cxx
|
||||
|
94
vtkm/source/Oscillator.cxx
Normal file
94
vtkm/source/Oscillator.cxx
Normal file
@ -0,0 +1,94 @@
|
||||
//============================================================================
|
||||
// Copyright (c) Kitware, Inc.
|
||||
// All rights reserved.
|
||||
// See LICENSE.txt for details.
|
||||
//
|
||||
// This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
// PURPOSE. See the above copyright notice for more information.
|
||||
//============================================================================
|
||||
#include <vtkm/source/Oscillator.h>
|
||||
|
||||
namespace vtkm
|
||||
{
|
||||
namespace source
|
||||
{
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
Oscillator::Oscillator(vtkm::Id3 dims)
|
||||
: Dims(dims)
|
||||
, Worklet()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void Oscillator::SetTime(vtkm::Float64 time)
|
||||
{
|
||||
this->Worklet.SetTime(time);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void Oscillator::AddPeriodic(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddPeriodic(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void Oscillator::AddDamped(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddDamped(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void Oscillator::AddDecaying(vtkm::Float64 x,
|
||||
vtkm::Float64 y,
|
||||
vtkm::Float64 z,
|
||||
vtkm::Float64 radius,
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta)
|
||||
{
|
||||
this->Worklet.AddDecaying(x, y, z, radius, omega, zeta);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
vtkm::cont::DataSet Oscillator::Execute() const
|
||||
{
|
||||
VTKM_LOG_SCOPE_FUNCTION(vtkm::cont::LogLevel::Perf);
|
||||
|
||||
vtkm::cont::DataSet dataSet;
|
||||
|
||||
vtkm::cont::CellSetStructured<3> cellSet;
|
||||
cellSet.SetPointDimensions(this->Dims);
|
||||
dataSet.SetCellSet(cellSet);
|
||||
|
||||
const vtkm::Vec3f origin(0.0f, 0.0f, 0.0f);
|
||||
const vtkm::Vec3f spacing(1.0f / static_cast<vtkm::FloatDefault>(this->Dims[0]),
|
||||
1.0f / static_cast<vtkm::FloatDefault>(this->Dims[1]),
|
||||
1.0f / static_cast<vtkm::FloatDefault>(this->Dims[2]));
|
||||
|
||||
const vtkm::Id3 pdims{ this->Dims + vtkm::Id3{ 1, 1, 1 } };
|
||||
vtkm::cont::ArrayHandleUniformPointCoordinates coordinates(pdims, origin, spacing);
|
||||
dataSet.AddCoordinateSystem(vtkm::cont::CoordinateSystem("coordinates", coordinates));
|
||||
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> outArray;
|
||||
//todo, we need to use the policy to determine the valid conversions
|
||||
//that the dispatcher should do
|
||||
this->Invoke(this->Worklet, coordinates, outArray);
|
||||
dataSet.AddField(vtkm::cont::make_FieldPoint("scalars", outArray));
|
||||
|
||||
return dataSet;
|
||||
}
|
||||
}
|
||||
} // namespace vtkm::filter
|
@ -7,30 +7,31 @@
|
||||
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
// PURPOSE. See the above copyright notice for more information.
|
||||
//============================================================================
|
||||
#ifndef vtk_m_filter_OscillatorSource_h
|
||||
#define vtk_m_filter_OscillatorSource_h
|
||||
#ifndef vtk_m_source_OscillatorSource_h
|
||||
#define vtk_m_source_OscillatorSource_h
|
||||
|
||||
#include <vtkm/filter/FilterField.h>
|
||||
#include <vtkm/source/Source.h>
|
||||
#include <vtkm/worklet/OscillatorSource.h>
|
||||
|
||||
namespace vtkm
|
||||
{
|
||||
namespace filter
|
||||
namespace source
|
||||
{
|
||||
|
||||
/**\brief An analytical, time-varying array-source filter.
|
||||
*
|
||||
* This filter will create a new array (named "oscillation" by default)
|
||||
* that evaluates to a sum of time-varying Gaussian exponentials
|
||||
* specified in its configuration.
|
||||
*/
|
||||
class OscillatorSource : public vtkm::filter::FilterField<OscillatorSource>
|
||||
/**\brief An analytical, time-varying uniform dataset with a point based array
|
||||
*
|
||||
* The Execute method creates a complete structured dataset that have a
|
||||
* point field names 'scalars'
|
||||
*
|
||||
* This array is based on the coordinates and evaluates to a sum of time-varying
|
||||
* Gaussian exponentials specified in its configuration.
|
||||
*/
|
||||
class VTKM_SOURCE_EXPORT Oscillator final : public vtkm::source::Source
|
||||
{
|
||||
public:
|
||||
using SupportedTypes = vtkm::TypeListTagFieldVec3;
|
||||
|
||||
///Construct a Oscillator with Cell Dimensions
|
||||
VTKM_CONT
|
||||
OscillatorSource();
|
||||
Oscillator(vtkm::Id3 dims);
|
||||
|
||||
VTKM_CONT
|
||||
void SetTime(vtkm::Float64 time);
|
||||
@ -59,18 +60,13 @@ public:
|
||||
vtkm::Float64 omega,
|
||||
vtkm::Float64 zeta);
|
||||
|
||||
template <typename T, typename StorageType, typename DerivedPolicy>
|
||||
VTKM_CONT vtkm::cont::DataSet DoExecute(const vtkm::cont::DataSet& input,
|
||||
const vtkm::cont::ArrayHandle<T, StorageType>& field,
|
||||
const vtkm::filter::FieldMetadata& fieldMeta,
|
||||
const vtkm::filter::PolicyBase<DerivedPolicy>& policy);
|
||||
VTKM_CONT vtkm::cont::DataSet Execute() const;
|
||||
|
||||
private:
|
||||
vtkm::Id3 Dims;
|
||||
vtkm::worklet::OscillatorSource Worklet;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#include <vtkm/filter/OscillatorSource.hxx>
|
||||
|
||||
#endif // vtk_m_filter_OscillatorSource_h
|
||||
#endif // vtk_m_source_Oscillator_h
|
@ -31,6 +31,7 @@ namespace source
|
||||
class VTKM_SOURCE_EXPORT Tangle final : public vtkm::source::Source
|
||||
{
|
||||
public:
|
||||
///Construct a Tangle with Cell Dimensions
|
||||
VTKM_CONT
|
||||
Tangle(vtkm::Id3 dims)
|
||||
: Dims(dims)
|
||||
|
Loading…
Reference in New Issue
Block a user