00001
00011 #ifndef _FEINPUT_BASSO_H_
00012 #define _FEINPUT_BASSO_H_
00013
00014
00015
00016
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 }
00130
00131 #endif