pfeap.hh
00001
00002
00003
00004
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
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
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
00077
00078
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
00086
int WriteDispFile()
const;
00087
int WriteDisp(
const int step,
int )
const;
00088
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
00094
protected:
00095 IS lpetsc_gfeapIS_;
00096 IS lfeap_gpetscIS_;
00097 IS afeap_gpetscIS_;
00098
public:
00099
int nfixed_;
00100
int nLocalFixed_;
00101
int nNodes_;
00102
int nneq_;
00103
int feapEQIDsz_;
00104
int nLocElems_;
00105
int *promeq_appeq_;
00106
int *feapEQID_lid_;
00107
int *lid_gid_;
00108
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
1.3.7