/Users/jack/Code/basso_dev/inc/FEInput.h

Go to the documentation of this file.
00001 
00011 #ifndef _FEINPUT_BASSO_H_
00012 #define _FEINPUT_BASSO_H_
00013 
00014 // std includes 
00015  
00016 // Basso includes
00017 #include "basso.h" 
00018 #include "Input.h"
00019 #include "Node.h"
00020 #include "Element.h"
00021 
00022 namespace basso {
00023         
00027         class FEInput : public Input 
00028         {
00029         public:
00031                 FEInput( ) : Input ( )  { }
00032                 
00034                 FEInput( const String &file ) : Input(file) {  }
00035 
00039                 virtual void ReadNodes( Array<Node> &nodes ) = 0;
00040                 
00048                 virtual void AddElements( list<Element> &elem, int pid=-999 ) const = 0;
00049                 
00057                 virtual void AddElements( list<Element> &elem, iArray &pids ) const;
00058                 
00065                 virtual void AddNodeSet( set<int> &nid, int sid ) const = 0;
00066                 
00073                 virtual void AddNodeSet( set<int> &nid, const iArray &sids ) const;
00074                 
00075         protected:
00076                 
00077                 
00078                 void SetNodeMap( const iArray &nids )
00079                 {
00080                         for ( int i=0; i<vect_size(nids); ++i )
00081                                 mNodeMap[ nids[i] ] = i;
00082                 }
00083                 
00084                 void RenumberNodeIds( list<Element> &elem ) const 
00085                 {
00086                         list<Element>::iterator eItr;
00087                         Element::iterator nItr;
00088                         map<int,int>::const_iterator mItr;
00089                         for ( eItr=elem.begin(); eItr!=elem.end(); ++eItr )
00090                                 for ( nItr=eItr->begin(); nItr!=eItr->begin(); ++nItr )
00091                                 {
00092                                         mItr = mNodeMap.find( *nItr );
00093                                         *nItr = mItr->second;
00094                                 }
00095                 }
00096                 
00097                 void RenumberNodeIds( set<int> &nids ) const 
00098                 {
00099                         set<int> newSet;
00100                         set<int>::iterator nItr;
00101                         map<int,int>::const_iterator mItr;
00102                         for ( nItr=nids.begin(); nItr!=nids.end(); ++nItr )
00103                         {
00104                                 mItr = mNodeMap.find( *nItr );
00105                                 newSet.insert( mItr->second );
00106                         }
00107                         nids=newSet;
00108                 }               
00109                 
00110         protected:      
00111                 map<int,int> mNodeMap;
00112                 
00113         };
00114         
00115         void FEInput::AddElements( list<Element> &elem, iArray &pids ) const
00116         {
00117                 iArray::const_iterator pItr;
00118                 for ( pItr=pids.begin(); pItr!=pids.end(); ++pItr )
00119                         AddElements( elem, *pItr );
00120         }
00121         
00122         void FEInput::AddNodeSet( set<int> &nid, const iArray &sids ) const
00123         {
00124                 iArray::const_iterator pItr;
00125                 for ( pItr=sids.begin(); pItr!=sids.end(); ++pItr )
00126                         AddNodeSet( nid, *pItr );
00127         }
00128         
00129 } // end namespace
00130 
00131 #endif

Generated on Sat Jan 19 09:03:57 2008 for Basso by  doxygen 1.5.2