Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sreekanth Arikatla
VTK-m
Commits
c6a4e335
Commit
c6a4e335
authored
Dec 18, 2017
by
Dave Pugmire
Committed by
Robert Maynard
Dec 19, 2017
Browse files
Normalize worklet (both in place, and copy).
parent
f98f42de
Changes
4
Hide whitespace changes
Inline
Side-by-side
vtkm/worklet/CMakeLists.txt
View file @
c6a4e335
...
...
@@ -48,6 +48,7 @@ set(headers
NDimsEntropy.h
NDimsHistogram.h
NDimsHistMarginalization.h
Normalize.h
ParticleAdvection.h
PointAverage.h
PointElevation.h
...
...
vtkm/worklet/Normalize.h
0 → 100644
View file @
c6a4e335
//============================================================================
// 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.
//
// Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
// Copyright 2014 UT-Battelle, LLC.
// Copyright 2014 Los Alamos National Security.
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
// Laboratory (LANL), the U.S. Government retains certain rights in
// this software.
//============================================================================
#ifndef vtk_m_worklet_Normalize_h
#define vtk_m_worklet_Normalize_h
#include
<vtkm/worklet/WorkletMapField.h>
#include
<vtkm/VectorAnalysis.h>
namespace
vtkm
{
namespace
worklet
{
class
Normal
:
public
vtkm
::
worklet
::
WorkletMapField
{
public:
typedef
void
ControlSignature
(
FieldIn
<
VecAll
>
,
FieldOut
<
VecAll
>
);
typedef
void
ExecutionSignature
(
_1
,
_2
);
template
<
typename
T
,
typename
T2
>
VTKM_EXEC
void
operator
()(
const
T
&
inValue
,
T2
&
outValue
)
const
{
outValue
=
vtkm
::
Normal
(
inValue
);
}
};
class
Normalize
:
public
vtkm
::
worklet
::
WorkletMapField
{
public:
typedef
void
ControlSignature
(
FieldInOut
<
VecAll
>
);
typedef
void
ExecutionSignature
(
_1
);
template
<
typename
T
>
VTKM_EXEC
void
operator
()(
T
&
value
)
const
{
vtkm
::
Normalize
(
value
);
}
};
}
}
// namespace vtkm::worklet
#endif // vtk_m_worklet_Normalize_h
vtkm/worklet/testing/CMakeLists.txt
View file @
c6a4e335
...
...
@@ -38,6 +38,7 @@ set(unit_tests
UnitTestMarchingCubes.cxx
UnitTestMask.cxx
UnitTestMaskPoints.cxx
UnitTestNormalize.cxx
UnitTestNDimsEntropy.cxx
UnitTestNDimsHistogram.cxx
UnitTestNDimsHistMarginalization.cxx
...
...
vtkm/worklet/testing/UnitTestNormalize.cxx
0 → 100644
View file @
c6a4e335
//============================================================================
// 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.
//
// Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
// Copyright 2014 UT-Battelle, LLC.
// Copyright 2014 Los Alamos National Security.
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
// Laboratory (LANL), the U.S. Government retains certain rights in
// this software.
//============================================================================
#include
<vtkm/worklet/DispatcherMapField.h>
#include
<vtkm/worklet/Normalize.h>
#include
<vtkm/cont/testing/Testing.h>
namespace
{
template
<
typename
T
>
void
createVectors
(
std
::
vector
<
vtkm
::
Vec
<
T
,
3
>>&
vecs
)
{
vecs
.
push_back
(
vtkm
::
make_Vec
(
2
,
0
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
0
,
2
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
0
,
0
,
2
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
1
,
1
,
1
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
2
,
2
,
2
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
2
,
1
,
1
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
1000000
,
0
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
static_cast
<
T
>
(
.1
),
static_cast
<
T
>
(
0
),
static_cast
<
T
>
(
0
)));
vecs
.
push_back
(
vtkm
::
make_Vec
(
static_cast
<
T
>
(
.001
),
static_cast
<
T
>
(
0
),
static_cast
<
T
>
(
0
)));
}
template
<
typename
T
>
void
createVectors
(
std
::
vector
<
vtkm
::
Vec
<
T
,
2
>>&
vecs
)
{
vecs
.
push_back
(
vtkm
::
make_Vec
(
1
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
0
,
1
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
1
,
1
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
2
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
0
,
2
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
2
,
2
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
1000000
,
0
));
vecs
.
push_back
(
vtkm
::
make_Vec
(
static_cast
<
T
>
(
.1
),
static_cast
<
T
>
(
0
)));
vecs
.
push_back
(
vtkm
::
make_Vec
(
static_cast
<
T
>
(
.001
),
static_cast
<
T
>
(
0
)));
}
template
<
typename
T
,
int
N
>
void
TestNormal
()
{
std
::
vector
<
vtkm
::
Vec
<
T
,
N
>>
inputVecs
;
createVectors
(
inputVecs
);
vtkm
::
cont
::
ArrayHandle
<
vtkm
::
Vec
<
T
,
N
>>
inputArray
;
vtkm
::
cont
::
ArrayHandle
<
vtkm
::
Vec
<
T
,
N
>>
outputArray
;
inputArray
=
vtkm
::
cont
::
make_ArrayHandle
(
inputVecs
);
vtkm
::
worklet
::
Normal
normalWorklet
;
vtkm
::
worklet
::
DispatcherMapField
<
vtkm
::
worklet
::
Normal
>
dispatcherNormal
(
normalWorklet
);
dispatcherNormal
.
Invoke
(
inputArray
,
outputArray
);
//Validate results.
//Make sure the number of values match.
VTKM_TEST_ASSERT
(
outputArray
.
GetNumberOfValues
()
==
inputArray
.
GetNumberOfValues
(),
"Wrong number of results for Normalize worklet"
);
//Make sure each vector is correct.
for
(
vtkm
::
Id
i
=
0
;
i
<
inputArray
.
GetNumberOfValues
();
i
++
)
{
//Make sure that the value is correct.
vtkm
::
Vec
<
T
,
N
>
v
=
inputArray
.
GetPortalConstControl
().
Get
(
i
);
vtkm
::
Vec
<
T
,
N
>
vN
=
outputArray
.
GetPortalConstControl
().
Get
(
i
);
T
len
=
vtkm
::
Magnitude
(
v
);
VTKM_TEST_ASSERT
(
test_equal
(
v
/
len
,
vN
),
"Wrong result for Normalize worklet"
);
//Make sure the magnitudes are all 1.0
len
=
vtkm
::
Magnitude
(
vN
);
VTKM_TEST_ASSERT
(
test_equal
(
len
,
1
),
"Wrong magnitude for Normalize worklet"
);
}
}
template
<
typename
T
,
int
N
>
void
TestNormalize
()
{
std
::
vector
<
vtkm
::
Vec
<
T
,
N
>>
inputVecs
;
createVectors
(
inputVecs
);
vtkm
::
cont
::
ArrayHandle
<
vtkm
::
Vec
<
T
,
N
>>
inputArray
;
vtkm
::
cont
::
ArrayHandle
<
vtkm
::
Vec
<
T
,
N
>>
outputArray
;
inputArray
=
vtkm
::
cont
::
make_ArrayHandle
(
inputVecs
);
vtkm
::
worklet
::
Normalize
normalizeWorklet
;
vtkm
::
worklet
::
DispatcherMapField
<
vtkm
::
worklet
::
Normalize
>
dispatcherNormalize
(
normalizeWorklet
);
dispatcherNormalize
.
Invoke
(
inputArray
);
//Make sure each vector is correct.
for
(
vtkm
::
Id
i
=
0
;
i
<
inputArray
.
GetNumberOfValues
();
i
++
)
{
//Make sure that the value is correct.
vtkm
::
Vec
<
T
,
N
>
v
=
inputVecs
[
static_cast
<
std
::
size_t
>
(
i
)];
vtkm
::
Vec
<
T
,
N
>
vN
=
inputArray
.
GetPortalConstControl
().
Get
(
i
);
T
len
=
vtkm
::
Magnitude
(
v
);
VTKM_TEST_ASSERT
(
test_equal
(
v
/
len
,
vN
),
"Wrong result for Normalize worklet"
);
//Make sure the magnitudes are all 1.0
len
=
vtkm
::
Magnitude
(
vN
);
VTKM_TEST_ASSERT
(
test_equal
(
len
,
1
),
"Wrong magnitude for Normalize worklet"
);
}
}
void
TestNormalWorklets
()
{
std
::
cout
<<
"Testing Normal Worklet"
<<
std
::
endl
;
TestNormal
<
vtkm
::
Float32
,
2
>
();
TestNormal
<
vtkm
::
Float64
,
2
>
();
TestNormal
<
vtkm
::
Float32
,
3
>
();
TestNormal
<
vtkm
::
Float64
,
3
>
();
std
::
cout
<<
"Testing Normalize Worklet"
<<
std
::
endl
;
TestNormalize
<
vtkm
::
Float32
,
2
>
();
TestNormalize
<
vtkm
::
Float64
,
2
>
();
TestNormalize
<
vtkm
::
Float32
,
3
>
();
TestNormalize
<
vtkm
::
Float64
,
3
>
();
}
}
int
UnitTestNormalize
(
int
,
char
*
[])
{
return
vtkm
::
cont
::
testing
::
Testing
::
Run
(
TestNormalWorklets
);
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment