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

Legend:
Removed from v.121  
changed lines
  Added in v.1388

  ViewVC Help
Powered by ViewVC 1.1.26