SundanceFieldBase.cpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                              Sundance
00005 //                 Copyright (2005) Sandia Corporation
00006 // 
00007 // Copyright (year first published) Sandia Corporation.  Under the terms 
00008 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 
00009 // retains certain rights in this software.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //                                                                                 
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA                                                                                
00025 // Questions? Contact Kevin Long (krlong@sandia.gov), 
00026 // Sandia National Laboratories, Livermore, California, USA
00027 // 
00028 // ************************************************************************
00029 /* @HEADER@ */
00030 
00031 #include "SundanceFieldBase.hpp"
00032 #include "PlayaExceptions.hpp"
00033 #include "SundanceCellFilter.hpp"
00034 #include "SundanceMaximalCellFilter.hpp"
00035 #include "SundanceMesh.hpp"
00036 
00037 using namespace Sundance;
00038 using namespace Sundance;
00039 using namespace Sundance;
00040 using namespace Teuchos;
00041 
00042 using Sundance::CellSet;
00043 using Sundance::CellIterator;
00044 using Sundance::CellFilter;
00045 using Sundance::MaximalCellFilter;
00046 
00047 
00048 void FieldBase::getDataBatch(
00049   int cellDim, 
00050   const Array<int>& cellID,
00051   const Array<int>& funcElem,
00052   Array<double>& batch) const
00053 {
00054   /* This is a silly default implementation */
00055   
00056   int nFunc = funcElem.size();
00057   batch.resize(cellID.size() * funcElem.size());
00058 
00059   for (int c=0; c<cellID.size(); c++)
00060   {
00061     for (int f=0; f<funcElem.size(); f++)
00062     {
00063       batch[c*nFunc + f] = getData(cellDim, cellID[c], f);
00064     }
00065   }
00066 }
00067 
00068 const CellFilter& FieldBase::domain() const 
00069 {
00070   static CellFilter dum = new MaximalCellFilter();
00071   return dum;
00072 }
00073 
00074 
00075 namespace Sundance
00076 {
00077 
00078 using Sundance::CellSet;
00079 
00080 CellSet connectedNodeSet(const CellFilter& f, const Mesh& mesh)
00081 {
00082   CellSet cells = f.getCells(mesh);
00083   int dim = cells.dimension();
00084   if (dim==0) return cells;
00085 
00086 
00087   Array<int> cellLID;
00088 
00089   for (CellIterator i=cells.begin(); i!=cells.end(); i++)
00090   {
00091     cellLID.append(*i);
00092   }
00093 
00094   Array<int> nodes;
00095   Array<int> fo;
00096 
00097   mesh.getFacetLIDs(dim, cellLID, 0, nodes, fo);
00098 
00099   Set<int> nodeSet;
00100 
00101   for (int i=0; i<nodes.size(); i++)
00102   {
00103     nodeSet.put(nodes[i]);
00104   }
00105   
00106   return CellSet(mesh, 0, PointCell, nodeSet);
00107 }
00108 
00109 
00110 RCP<Array<int> > cellSetToLIDArray(const CellSet& cs)
00111 {
00112   RCP<Array<int> > cellLID = rcp(new Array<int>());
00113 
00114   for (CellIterator i=cs.begin(); i!=cs.end(); i++)
00115   {
00116     cellLID->append(*i);
00117   }
00118   
00119   return cellLID;
00120 }
00121 
00122 }

Site Contact