/[escript]/branches/ripleygmg_from_3668/ripley/src/RipleyDomain.cpp
ViewVC logotype

Diff of /branches/ripleygmg_from_3668/ripley/src/RipleyDomain.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3740 by caltinay, Tue Dec 13 01:37:21 2011 UTC revision 3744 by caltinay, Tue Dec 13 06:41:54 2011 UTC
# Line 47  RipleyDomain::~RipleyDomain() Line 47  RipleyDomain::~RipleyDomain()
47      Esys_MPIInfo_free(m_mpiInfo);      Esys_MPIInfo_free(m_mpiInfo);
48  }  }
49    
50    bool RipleyDomain::operator==(const AbstractDomain& other) const
51    {
52        const RipleyDomain* o=dynamic_cast<const RipleyDomain*>(&other);
53        if (o) {
54            return (m_tagMap==o->m_tagMap && m_nodeTags==o->m_nodeTags
55                    && m_elementTags==o->m_elementTags
56                    && m_faceTags==o->m_faceTags);
57        }
58        return false;
59    }
60    
61  bool RipleyDomain::isValidFunctionSpaceType(int fsType) const  bool RipleyDomain::isValidFunctionSpaceType(int fsType) const
62  {  {
63      switch (fsType) {      switch (fsType) {
# Line 89  pair<int,int> RipleyDomain::getDataShape Line 100  pair<int,int> RipleyDomain::getDataShape
100      const int ptsPerSample = (m_numDim==2 ? 4 : 8);      const int ptsPerSample = (m_numDim==2 ? 4 : 8);
101      switch (fsType) {      switch (fsType) {
102          case Nodes:          case Nodes:
103          case ReducedNodes:          case ReducedNodes: //FIXME: reduced
         case DegreesOfFreedom:  
         case ReducedDegreesOfFreedom:  
104              return pair<int,int>(1, getNumNodes());              return pair<int,int>(1, getNumNodes());
105            case DegreesOfFreedom:
106            case ReducedDegreesOfFreedom: //FIXME: reduced
107                return pair<int,int>(1, getNumDOF());
108          case Elements:          case Elements:
109              return pair<int,int>(ptsPerSample, getNumElements());              return pair<int,int>(ptsPerSample, getNumElements());
110          case FaceElements:          case FaceElements:
# Line 283  void RipleyDomain::interpolateOnDomain(e Line 295  void RipleyDomain::interpolateOnDomain(e
295          << " -> "          << " -> "
296          << functionSpaceTypeAsString(target.getFunctionSpace().getTypeCode());          << functionSpaceTypeAsString(target.getFunctionSpace().getTypeCode());
297    
298      switch (in.getFunctionSpace().getTypeCode()) {      const int inFS = in.getFunctionSpace().getTypeCode();
299          case Nodes:      const int outFS = target.getFunctionSpace().getTypeCode();
         case ReducedNodes:  
         case DegreesOfFreedom:  
         case ReducedDegreesOfFreedom:  
             switch (target.getFunctionSpace().getTypeCode()) {  
                 case Nodes:  
                 case ReducedNodes:  
                 case DegreesOfFreedom:  
                 case ReducedDegreesOfFreedom:  
                     // FIXME  
                     copyNodalData(target, *const_cast<escript::Data*>(&in));  
                     break;  
   
                 case Elements:  
                     interpolateNodesOnElements(target, *const_cast<escript::Data*>(&in), false);  
                     break;  
   
                 case ReducedElements:  
                     interpolateNodesOnElements(target, *const_cast<escript::Data*>(&in), true);  
                     break;  
   
                 case FaceElements:  
                     interpolateNodesOnFaces(target, *const_cast<escript::Data*>(&in), false);  
                     break;  
   
                 case ReducedFaceElements:  
                     interpolateNodesOnFaces(target, *const_cast<escript::Data*>(&in), true);  
                     break;  
300    
301                  default:      // simplest case: 1:1 copy
302                      throw RipleyException(msg.str());      if (inFS==outFS) {
303              }          copyData(target, *const_cast<escript::Data*>(&in));
304              break;      // not allowed: reduced->non-reduced
305          default:      } else if ((inFS==ReducedNodes || inFS==ReducedDegreesOfFreedom)
306              throw RipleyException(msg.str());              && (outFS==Nodes || outFS==DegreesOfFreedom)) {
307            throw RipleyException("interpolateOnDomain(): Cannot interpolate reduced data to non-reduced data.");
308        } else if ((inFS==Elements && outFS==ReducedElements)
309                || (inFS==FaceElements && outFS==ReducedFaceElements)) {
310            averageData(target, *const_cast<escript::Data*>(&in));
311        } else {
312            switch (inFS) {
313                case Nodes:
314                case ReducedNodes: //FIXME: reduced
315                case DegreesOfFreedom:
316                case ReducedDegreesOfFreedom: //FIXME: reduced
317                    switch (outFS) {
318                        case Nodes:
319                        case ReducedNodes: //FIXME: reduced
320                        case DegreesOfFreedom:
321                        case ReducedDegreesOfFreedom: //FIXME: reduced
322                            // TODO
323                            break;
324    
325                        case Elements:
326                            interpolateNodesOnElements(target, *const_cast<escript::Data*>(&in), false);
327                            break;
328    
329                        case ReducedElements:
330                            interpolateNodesOnElements(target, *const_cast<escript::Data*>(&in), true);
331                            break;
332    
333                        case FaceElements:
334                            interpolateNodesOnFaces(target, *const_cast<escript::Data*>(&in), false);
335                            break;
336    
337                        case ReducedFaceElements:
338                            interpolateNodesOnFaces(target, *const_cast<escript::Data*>(&in), true);
339                            break;
340    
341                        default:
342                            throw RipleyException(msg.str());
343                    }
344                    break;
345                default:
346                    throw RipleyException(msg.str());
347            }
348      }      }
349  }  }
350    
# Line 581  void RipleyDomain::setNewX(const escript Line 607  void RipleyDomain::setNewX(const escript
607  }  }
608    
609  //protected  //protected
610  void RipleyDomain::copyNodalData(escript::Data& out, escript::Data& in) const  void RipleyDomain::averageData(escript::Data& out, escript::Data& in) const
611    {
612        const dim_t numComp = in.getDataPointSize();
613        const dim_t dpp = in.getNumDataPointsPerSample();
614        out.requireWrite();
615    #pragma omp parallel for
616        for (index_t i=0; i<in.getNumSamples(); i++) {
617            const double* src = in.getSampleDataRO(i);
618            double* dest = out.getSampleDataRW(i);
619            for (index_t c=0; c<numComp; c++) {
620                double res=0.;
621                for (index_t q=0; q<dpp; q++)
622                    res+=src[c+q*numComp];
623                *dest++ = res/dpp;
624            }
625        }
626    }
627    
628    //protected
629    void RipleyDomain::copyData(escript::Data& out, escript::Data& in) const
630  {  {
631      const dim_t numComp = in.getDataPointSize();      const dim_t numComp = in.getDataPointSize();
632      out.requireWrite();      out.requireWrite();
# Line 661  string RipleyDomain::getDescription() co Line 706  string RipleyDomain::getDescription() co
706      throw RipleyException("getDescription() not implemented");      throw RipleyException("getDescription() not implemented");
707  }  }
708    
 bool RipleyDomain::operator==(const AbstractDomain& other) const  
 {  
     throw RipleyException("operator==() not implemented");  
 }  
   
709  void RipleyDomain::write(const string& filename) const  void RipleyDomain::write(const string& filename) const
710  {  {
711      throw RipleyException("write() not implemented");      throw RipleyException("write() not implemented");
# Line 812  dim_t RipleyDomain::getNumNodes() const Line 852  dim_t RipleyDomain::getNumNodes() const
852      throw RipleyException("getNumNodes() not implemented");      throw RipleyException("getNumNodes() not implemented");
853  }  }
854    
855    dim_t RipleyDomain::getNumDOF() const
856    {
857        throw RipleyException("getNumDOF() not implemented");
858    }
859    
860  void RipleyDomain::assembleCoordinates(escript::Data& arg) const  void RipleyDomain::assembleCoordinates(escript::Data& arg) const
861  {  {
862      throw RipleyException("assembleCoordinates() not implemented");      throw RipleyException("assembleCoordinates() not implemented");

Legend:
Removed from v.3740  
changed lines
  Added in v.3744

  ViewVC Help
Powered by ViewVC 1.1.26