Main Page | Class Hierarchy | Class List | File List | Class Members

pfeap.hh

00001 // $Id: pfeap.hh,v 1.7 2004/05/04 15:26:18 adams Exp $ 00002 // Author: Mark F. Adams 00003 // Copyright (c) 2003 by Mark F. Adams 00004 // Filename: pfeap.hh 00005 // 00006 #ifndef __PFEAP_H__ 00007 #define __PFEAP_H__ 00008 00009 #include "prometheus.hh" 00010 00011 class Prometheus_LinSysCore; 00012 00016 class FEComponentIterface 00017 { 00018 public: 00019 virtual int GetSolution( PromVector *const XX ) = 0; 00020 virtual int GetResidual( PromVector *const RR ) = 0; 00021 virtual int ComputeResidual() = 0; 00022 virtual int Reac( int nnodes ) = 0; 00023 virtual int FormTangent(Prometheus_LinSysCore*const)=0; 00024 virtual int FormTangentAndResidual(Prometheus_LinSysCore*const) = 0; 00025 virtual int ReadMesh(char *feapname, int nlocalelems=0)=0; 00026 virtual int SetDT( double ) = 0; 00027 virtual int StepTime() = 0; 00028 virtual int Finalize() = 0; 00029 }; 00030 00034 class FEDataClient 00035 { 00036 public: 00037 virtual int GetMeshSpecs(int*nNds,int*nElems,int*nLocEls,int*ndf)const=0; 00038 virtual int GetNElemBlks(int *nsets)const=0; 00039 virtual int GetNMaterials( int *nm )const=0; 00040 virtual int GetNElemsDegree(int ElBlkID, int *nconn)const=0; 00041 virtual int GetNNodes( int * )const = 0; 00042 virtual int GetElemMeshBlk(int ElBlkID, double coords[], 00043 int matids[], int elems[] )const=0; 00044 virtual int GetElemBlkAtr(int ElBlkID, int nel, float* )const=0; 00045 virtual int GetNElemAtr(int ElBlkID, int *na )const=0; 00046 virtual int GetNodeDisp( float array[], int)const=0; 00047 }; 00048 00052 class pFEAP : public FEComponentIterface, public FEDataClient 00053 { 00054 public: 00055 pFEAP(const PromComm &comm, PromOptions &opts, PromPerfMonitor &perf); 00056 ~pFEAP(); 00057 // FEDataClient 00058 int GetMeshSpecs( int *nNds, int *nElems, int *nLocEls, int * )const; 00059 int GetNElemBlks(int *nsets)const{ *nsets=1; return 0;} 00060 int GetNMaterials( int *nm )const; 00061 int GetNElemsDegree(int ElBlkID, int *nconn)const; 00062 int GetNNodes( int *nn )const; 00063 int GetElemMeshBlk( int ElBlkID, double coords[], 00064 int matids[], int elems[] )const; 00065 int GetElemBlkAtr(int ElBlkID, int nel, float * )const; 00066 int GetNElemAtr(int ElBlkID, int *na )const; 00067 int GetNodeDisp( float array[], int ) const; 00068 // FEComponentIterface 00069 int GetSolution( PromVector *const XX ); 00070 int GetResidual( PromVector *const RR ); 00071 int ComputeResidual(); 00072 int Reac( int nnodes ); 00073 int FormTangent(Prometheus_LinSysCore*const); 00074 int FormTangentAndResidual(Prometheus_LinSysCore*const); 00075 // 00076 //int CopyVectorOut( PromVector *const BB, double const*const array ); 00077 //int CopyVectorIn( const PromVector *const XX, double *const array ); 00078 // methods 00079 int ReadMesh( char *feapname, int nlocalelems = 0 ); 00080 int SetUpLinSys(Prometheus_LinSysCore *prom, const int npLoc, 00081 const int npGst, const int ghost_gnode[], int &my0Nd ); 00082 int SetDT( double ); 00083 int StepTime(); 00084 int Finalize(); 00085 // feap displacemetn output 00086 int WriteDispFile() const; 00087 int WriteDisp( const int step, int )const; 00088 // util 00089 int SetMaps( const int nlocalnd, const int pnode_fnode[], 00090 const int ndf, const int my0Nd ); 00091 private: 00092 int GetSolution_private( const PromVector *const XX ); 00093 // data 00094 protected: 00095 IS lpetsc_gfeapIS_; // used to put petsc.x back to real feap 00096 IS lfeap_gpetscIS_; // used to put petsc.b out of feap 00097 IS afeap_gpetscIS_; // used to put petsc.x into feap 00098 public: 00099 int nfixed_; // includes ghost nodes 00100 int nLocalFixed_; // includes non-ghost nodes only 00101 int nNodes_; 00102 int nneq_; // total equations locally 00103 int feapEQIDsz_; // feapEQIDsz_ = nneq - nLocalFixed_ 00104 int nLocElems_; 00105 int *promeq_appeq_; //[feapEQIDsz_]: X = promeq_appeq_[promEq] + nfixed_ 00106 int *feapEQID_lid_; //[feapEQIDsz_+1] lid(X) = feapEQID_lid_[X] 00107 int *lid_gid_; 00108 // data 00109 const PromComm &Comm_; 00110 PromOptions &options_; 00111 PromPerfMonitor &perf_mon_; 00112 protected: 00113 Vec work_nfl_; 00114 Vec work_neq_; 00115 IS identID_nfl_; 00116 IS identID_neq_; 00117 VecScatter scatter_nfl_; 00118 VecScatter scatter_neq_; 00119 }; 00120 00121 #endif // __PFEAP_H__

Generated on Fri May 21 14:17:53 2004 by doxygen 1.3.7