/[escript]/trunk/escript/src/FunctionSpace.cpp
ViewVC logotype

Diff of /trunk/escript/src/FunctionSpace.cpp

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

trunk/esys2/escript/src/Data/FunctionSpace.cpp revision 147 by jgs, Fri Aug 12 01:45:47 2005 UTC trunk/escript/src/FunctionSpace.cpp revision 906 by gross, Tue Nov 21 05:34:15 2006 UTC
# Line 1  Line 1 
1  /* $Id$ */  /* $Id$ */
2  /*  /*
3   ******************************************************************************   ************************************************************
4   *                                                                            *   *          Copyright 2006 by ACcESS MNRF                   *
5   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *   *                                                          *
6   *                                                                            *   *              http://www.access.edu.au                    *
7   * This software is the property of ACcESS. No part of this code              *   *       Primary Business: Queensland, Australia            *
8   * may be copied in any form or by any means without the expressed written    *   *  Licensed under the Open Software License version 3.0    *
9   * consent of ACcESS.  Copying, use or modification of this software          *   *     http://www.opensource.org/licenses/osl-3.0.php       *
10   * by any unauthorised person is illegal unless that person has a software    *   *                                                          *
11   * license agreement with ACcESS.                                             *   ************************************************************
  *                                                                            *  
  ******************************************************************************  
12  */  */
13    
14  #include "escript/Data/AbstractContinuousDomain.h"  #include "FunctionSpace.h"
15  #include "escript/Data/FunctionSpaceException.h"  #include "FunctionSpaceException.h"
16  #include "escript/Data/Data.h"  #include "Data.h"
17  #include "escript/Data/DataFactory.h"  #include "DataFactory.h"
   
 #include "escript/Data/FunctionSpace.h"  
18    
19  #include <iostream>  #include <iostream>
20  #include <sstream>  #include <sstream>
21    
22  using namespace std;  using namespace std;
23    
24  namespace escript {  namespace escript {
25    
26  //  //
27  // Create a null domain for use with a default constructed function space  // Create a null domain for use with any default-constructed function space
28  NullDomain FunctionSpace::m_nullDomainValue;  ESCRIPT_DLL_API NullDomain FunctionSpace::m_nullDomainValue;
29    
30  FunctionSpace::FunctionSpace():  FunctionSpace::FunctionSpace():
31    m_domain(static_cast<AbstractDomain*>(&m_nullDomainValue)),    m_domain(static_cast<AbstractDomain*>(&m_nullDomainValue)),
# Line 44  FunctionSpace::FunctionSpace(const Abstr Line 41  FunctionSpace::FunctionSpace(const Abstr
41    if (!m_domain->isValidFunctionSpaceType(functionSpaceType)) {    if (!m_domain->isValidFunctionSpaceType(functionSpaceType)) {
42      std::stringstream temp;      std::stringstream temp;
43      temp << "Invalid function space type: " << functionSpaceType      temp << "Invalid function space type: " << functionSpaceType
44       <<" for domain: " << m_domain->getDescription();       << " for domain: " << m_domain->getDescription();
45      throw FunctionSpaceException(temp.str());      throw FunctionSpaceException(temp.str());
46    }    }
47  }  }
# Line 72  std::string Line 69  std::string
69  FunctionSpace::toString() const  FunctionSpace::toString() const
70  {  {
71    std::stringstream temp;    std::stringstream temp;
72    temp << "Function space type: "    temp << m_domain->functionSpaceTypeAsString(m_functionSpaceType)
        << m_domain->functionSpaceTypeAsString(m_functionSpaceType)  
73         << " on " << m_domain->getDescription();         << " on " << m_domain->getDescription();
74    return temp.str();    return temp.str();
75  }  }
# Line 85  FunctionSpace::getTagFromSampleNo(int sa Line 81  FunctionSpace::getTagFromSampleNo(int sa
81  }  }
82    
83  int  int
84    FunctionSpace::getTagFromDataPointNo(int dataPointNo) const
85    {
86      //
87      // Get the number of samples and data-points per sample
88      int numSamples = getNumSamples();
89      int numDataPointsPerSample = getNumDPPSample();
90      int numDataPoints = numSamples * numDataPointsPerSample;
91    
92      if (numDataPointsPerSample==0) {
93        throw DataException("FunctionSpace::getTagFromDataPointNo error: no data-points associated with this object.");
94      }
95    
96      if (dataPointNo<0 || dataPointNo>numDataPoints) {
97        throw DataException("FunctionSpace::getTagFromDataPointNo error: invalid data-point number supplied.");
98      }
99    
100      //
101      // Determine the sample number which corresponds to this data-point number
102      int sampleNo = dataPointNo / numDataPointsPerSample;
103    
104      //
105      // Determine the tag number which corresponds to this sample number
106      int tagNo = getTagFromSampleNo(sampleNo);
107    
108      //
109      // return the tag number
110      return(tagNo);
111    }
112    
113    int
114  FunctionSpace::getReferenceNoFromSampleNo(int sampleNo) const  FunctionSpace::getReferenceNoFromSampleNo(int sampleNo) const
115  {  {
116    return m_domain->getReferenceNoFromSampleNo(m_functionSpaceType,sampleNo);    return m_domain->getReferenceNoFromSampleNo(m_functionSpaceType,sampleNo);
# Line 93  FunctionSpace::getReferenceNoFromSampleN Line 119  FunctionSpace::getReferenceNoFromSampleN
119  FunctionSpace&  FunctionSpace&
120  FunctionSpace::operator=(const FunctionSpace& other)  FunctionSpace::operator=(const FunctionSpace& other)
121  {  {
   //  
122    // explicitly defined assignment operator to emphasise pointer copy    // explicitly defined assignment operator to emphasise pointer copy
123    m_nullDomainValue=other.m_nullDomainValue;    m_nullDomainValue=other.m_nullDomainValue;
124    m_functionSpaceType=other.m_functionSpaceType;    m_functionSpaceType=other.m_functionSpaceType;
# Line 118  FunctionSpace::getX() const Line 143  FunctionSpace::getX() const
143  {  {
144    Data out=escript::Vector(0,*this,true);    Data out=escript::Vector(0,*this,true);
145    getDomain().setToX(out);    getDomain().setToX(out);
146      out.setProtection();
147    return out;    return out;
148  }  }
149    
# Line 126  FunctionSpace::getNormal() const Line 152  FunctionSpace::getNormal() const
152  {  {
153    Data out=escript::Vector(0,*this,true);    Data out=escript::Vector(0,*this,true);
154    getDomain().setToNormal(out);    getDomain().setToNormal(out);
155      out.setProtection();
156    return out;    return out;
157  }  }
158    
# Line 134  FunctionSpace::getSize() const Line 161  FunctionSpace::getSize() const
161  {  {
162    Data out=escript::Scalar(0,*this,true);    Data out=escript::Scalar(0,*this,true);
163    getDomain().setToSize(out);    getDomain().setToSize(out);
164      out.setProtection();
165    return out;    return out;
166  }  }
167    
168    void
169    FunctionSpace::setTags(const int newTag, const escript::Data& mask) const
170    {
171       if (mask.getFunctionSpace()== *this) {
172              m_domain->setTags(m_functionSpaceType,newTag,mask);
173       } else {
174              throw FunctionSpaceException("illegal function space of mask.");
175       }
176    }
177    
178  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.147  
changed lines
  Added in v.906

  ViewVC Help
Powered by ViewVC 1.1.26