Commit 93a89dae authored by hrchilds's avatar hrchilds
Browse files

Update from October 7, 2006

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@742 18c085ea-50e0-402c-830e-de6fd14e8384
parent b94e370c
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtAbelInversionExpression.C //
// ************************************************************************* //
#include <avtAbelInversionExpression.h>
#include <math.h>
#include <vtkDataArray.h>
#include <vtkRectilinearGrid.h>
#include <vtkStructuredGrid.h>
#include <avtCallback.h>
#include <ExpressionException.h>
// ****************************************************************************
// Method: avtAbelInversionExpression constructor
//
// Purpose:
// Defines the constructor. Note: this should not be inlined in the
// header because it causes problems for certain compilers.
//
// Programmer: Hank Childs
// Creation: October 6, 2006
//
// ****************************************************************************
avtAbelInversionExpression::avtAbelInversionExpression()
{
haveIssuedWarning = false;
}
// ****************************************************************************
// Method: avtAbelInversionExpression destructor
//
// Purpose:
// Defines the destructor. Note: this should not be inlined in the header
// because it causes problems for certain compilers.
//
// Programmer: Hank Childs
// Creation: October 6, 2006
//
// ****************************************************************************
avtAbelInversionExpression::~avtAbelInversionExpression()
{
;
}
// ****************************************************************************
// Method: avtAbelInversionExpression::PreExecute
//
// Purpose:
// Initialize the haveIssuedWarning flag.
//
// Programmer: Hank Childs
// Creation: October 6, 2006
//
// ****************************************************************************
void
avtAbelInversionExpression::PreExecute(void)
{
avtUnaryMathFilter::PreExecute();
haveIssuedWarning = false;
}
// ****************************************************************************
// Method: avtAbelInversionExpression::DoOperation
//
// Purpose:
// Calculates the mean.
//
// Arguments:
// in1 The first input data array.
// out The output data array.
// ncomponents The number of components ('1' for scalar, '2' or '3' for
// vectors, etc.)
// ntuples The number of tuples (ie 'npoints' or 'ncells')
//
// Programmer: Hank Childs
// Creation: October 6, 2006
//
// ****************************************************************************
void
avtAbelInversionExpression::DoOperation(vtkDataArray *in1, vtkDataArray *out,
int ncomponents,int ntuples)
{
if (cur_mesh->GetDataObjectType() != VTK_RECTILINEAR_GRID)
{
if (!haveIssuedWarning)
{
avtCallback::IssueWarning("The inverse abel transform expression "
"only operates on rectilinear grids.");
haveIssuedWarning = true;
}
return;
}
vtkRectilinearGrid *rgrid = (vtkRectilinearGrid *) cur_mesh;
int dims[3];
rgrid->GetDimensions(dims);
if (dims[2] > 1)
{
if (!haveIssuedWarning)
{
avtCallback::IssueWarning("The inverse abel transform expression "
"only operates on 2D grids.");
haveIssuedWarning = true;
}
}
bool nodeCentered = true;
if (dims[0]*dims[1] != ntuples)
nodeCentered = false;
if (!nodeCentered)
{
dims[0] -= 1;
dims[1] -= 1;
}
vtkDataArray *yCoord = rgrid->GetYCoordinates();
for (int i = 0 ; i < dims[0] ; i++)
{
for (int j = 0 ; j < dims[1] ; j++)
{
double integral = 0;
for (int k = j ; k < dims[1]-1 ; k++)
{
double grad;
int idx = k*dims[0]+i;
int idx_p1 = (k+1)*dims[0]+i;
int idx_m1 = (k-1)*dims[0]+i;
if (k == dims[1]-1)
{
grad = in1->GetTuple1(idx) - in1->GetTuple1(idx_m1);
grad /= yCoord->GetTuple1(k) - yCoord->GetTuple1(k-1);
}
else if (k == 0)
{
grad = in1->GetTuple1(idx_p1) - in1->GetTuple1(idx);
grad /= yCoord->GetTuple1(k+1) - yCoord->GetTuple1(k);
}
else
{
grad = in1->GetTuple1(idx_p1) - in1->GetTuple1(idx_m1);
grad /= yCoord->GetTuple1(k+1) - yCoord->GetTuple1(k-1);
}
double y1 = yCoord->GetTuple1(k);
double y2 = yCoord->GetTuple1(k+1);
double r = yCoord->GetTuple1(j);
double yMid = (y1+y2)/2.;
integral += grad / sqrt(yMid*yMid - r*r) * (y2-y1);
}
integral *= -1./M_PI;
int idx = j*dims[0]+i;
out->SetTuple1(idx, integral);
}
}
}
/*****************************************************************************
*
* Copyright (c) 2000 - 2006, The Regents of the University of California
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. 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 materials provided with the distribution.
* - Neither the name of the UC/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 THE REGENTS OF THE UNIVERSITY OF
* CALIFORNIA, 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.
*
*****************************************************************************/
// ************************************************************************* //
// avtAbelInversionExpression.h //
// ************************************************************************* //
#ifndef AVT_ABEL_INVERSION_EXPRESSION_H
#define AVT_ABEL_INVERSION_EXPRESSION_H
#include <avtUnaryMathFilter.h>
class vtkDataArray;
// ****************************************************************************
// Class: avtAbelInversionExpression
//
// Purpose:
// A filter that calculates the inverse of the Abel transform for
// the projection of axially symmetric data.
//
// Programmer: Hank Childs
// Creation: October 6, 2006
//
// ****************************************************************************
class EXPRESSION_API avtAbelInversionExpression : public avtUnaryMathFilter
{
public:
avtAbelInversionExpression();
virtual ~avtAbelInversionExpression();
virtual const char *GetType(void)
{ return "avtAbelInversionExpression"; };
virtual const char *GetDescription(void)
{ return "Calculating inverse of Abel transform"; };
protected:
bool haveIssuedWarning;
virtual void PreExecute(void);
virtual void DoOperation(vtkDataArray *in1, vtkDataArray *out,
int ncomps, int ntuples);
};
#endif
......@@ -169,6 +169,9 @@
# Hank Childs, Thu May 11 12:14:51 PDT 2006
# Added avtCurvatureExpression.
#
# Hank Childs, Fri Oct 6 15:33:13 PDT 2006
# Added avtAbelInversionExpression.
#
##############################################################################
@SET_MAKE@
......@@ -255,6 +258,7 @@ General_src= \
General/avtVectorDecomposeFilter.C
ImageProcessing_src= \
ImageProcessing/avtAbelInversionExpression.C \
ImageProcessing/avtConservativeSmoothingExpression.C \
ImageProcessing/avtMeanFilterExpression.C \
ImageProcessing/avtMedianFilterExpression.C
......
......@@ -121,6 +121,7 @@
#include <avtNeighborEvaluatorFilter.h>
#include <avtDataIdFilter.h>
#include <avtExpressionComponentMacro.h>
#include <avtAbelInversionExpression.h>
#include <avtConservativeSmoothingExpression.h>
#include <avtMeanFilterExpression.h>
#include <avtMedianFilterExpression.h>
......@@ -495,6 +496,9 @@ avtVectorExpr::CreateFilters(ExprPipelineState *state)
// Make the parsing more robust when the wrong number of arguments are
// specified.
//
// Hank Childs, Fri Oct 6 15:45:26 PDT 2006
// Add inverse of Abel transform.
//
// ****************************************************************************
void
avtFunctionExpr::CreateFilters(ExprPipelineState *state)
......@@ -728,6 +732,8 @@ avtFunctionExpr::CreateFilters(ExprPipelineState *state)
f = new avtMeanFilterExpression;
else if (functionName == "median_filter")
f = new avtMedianFilterExpression;
else if (functionName == "abel_inversion")
f = new avtAbelInversionExpression;
else if (functionName == "conn_cmfe")
f = new avtConnCMFEExpression;
else if (functionName == "pos_cmfe")
......
......@@ -297,11 +297,16 @@ avtCompactnessQuery::MidExecute(void)
// Jeremy Meredith, Wed Jul 23 13:34:18 PDT 2003
// Turned xBound and yBound into class data members, and free them here.
//
// Hank Childs, Fri Oct 6 09:39:54 PDT 2006
// Made the compactness query return an array for Python.
//
// ****************************************************************************
void
avtCompactnessQuery::PostExecute(void)
{
doubleVector values;
SumIntAcrossAllProcessors(numDomains);
SumDoubleAcrossAllProcessors(distBound_da_xsa);
SumDoubleAcrossAllProcessors(distBound_da_vol);
......@@ -355,6 +360,13 @@ avtCompactnessQuery::PostExecute(void)
distBound_dv_xsa,
distBound_dv_vol,
distOrigin_da);
values.push_back(totalXSectArea);
values.push_back(totalRotVolume);
values.push_back(distBound_da_xsa);
values.push_back(distBound_da_vol);
values.push_back(distBound_dv_xsa);
values.push_back(distBound_dv_vol);
values.push_back(distOrigin_da);
// If we have a density variable available
......@@ -388,7 +400,14 @@ avtCompactnessQuery::PostExecute(void)
distBound_dv_den_vol,
distCMass_dv_den_vol);
SetResultMessage(msg2);
values.push_back(totalRotMass);
values.push_back(centMassX);
values.push_back(centMassY);
values.push_back(distBound_dv_den_vol);
values.push_back(distCMass_dv_den_vol);
}
SetResultValues(values);
}
// ****************************************************************************
......
......@@ -106,6 +106,9 @@
// Added mean_curvature, gauss_curvature, compose vector, and compose
// tensor.
//
// Hank Childs, Fri Oct 6 15:47:04 PDT 2006
// Added abel_inversion.
//
// ****************************************************************************
struct ExprNameList
{
......@@ -270,6 +273,7 @@ const char *expr_misc[] = {
};
const char *expr_imageprocessing[] = {
"abel_inversion",
"conservative_smoothing",
"mean_filter",
"median_filter",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment