00001 #ifndef _APPROX_MANAGER_H_
00002 #define _APPROX_MANAGER_H_
00003
00004 #include"Plugin.h"
00005 #include"ApproxServer.h"
00006
00007 #include<string>
00008 #include<map>
00009
00010 namespace Approx {
00011
00012 class IApproximator {
00013 public:
00014 virtual ~IApproximator() {}
00015 virtual int init_mesh(int Control, char * Filename) = 0;
00016 virtual int free_mesh(int Mesh_id) = 0;
00017 virtual int get_nmno(int Mesh_id) = 0;
00018 virtual int get_nmed(int Mesh_id) = 0;
00019 virtual int get_nmfa(int Mesh_id) = 0;
00020 virtual int get_nmel(int Mesh_id) = 0;
00021 virtual int get_next_act_elem(int Mesh_id,int El) = 0;
00022 virtual int get_next_elem(int Mesh_id,int El) = 0;
00023 virtual int get_next_face(int Mesh_id,int Fa) = 0;
00024 virtual int get_next_edge(int Mesh_id,int Ed) = 0;
00025 virtual int get_next_node(int Mesh_id,int Node) = 0;
00026 virtual int get_el_status(int Mesh_id,int el) = 0;
00027 virtual int get_el_type(int Mesh_id,int El) = 0;
00028 virtual int get_el_mate(int Mesh_id,int El) = 0;
00029 virtual int get_el_faces(int Mesh_id,int El,int* Faces, int* Orient) = 0;
00030 virtual int get_el_fam(int Mesh_id,int El,int* Elsons,int* Type) = 0;
00031 virtual int get_el_struct(int Mesh_id,int El_id,int *El_struct) = 0;
00032 virtual int get_el_node_coor(int Mesh_id,int El,int* Nodes, double *Xcoor) = 0;
00033 virtual int get_fa_status(int Mesh_id,int Fa) = 0;
00034 virtual int get_fa_type(int Mesh_id,int Fa) = 0;
00035 virtual int get_fa_sub_bnd(int Mesh_id,int Fa) = 0;
00036 virtual int get_fa_node_coor(int Mesh_id,int Fa,int* Nodes,double* Coords) = 0;
00037 virtual void get_fa_neig(int Mesh_id, int Fa, int* Fa_neig,
00038 int* Neig_sides, int* Node_shift, int* Diff_gen,
00039 double* Acceff, double* Bcceff) = 0;
00040 virtual int get_face_edges(int Mesh_id,int Fa,int *Edges,int *Orient) = 0;
00041 virtual int get_face_struct(int Mesh_id,int Fa,int *Fa_struct) = 0;
00042 virtual int get_edge_status(int Mesh_id,int Ed) = 0;
00043 virtual int get_edge_struct(int Mesh_id,int Ed,int *Ed_struct) = 0;
00044 virtual int get_edge_nodes(int Mesh_id,int Ed,int *Ed_nodes) = 0;
00045 virtual int get_node_status(int Mesh_id,int Node) = 0;
00046 virtual int get_node_coor(int Mesh_id,int Node,double *Coor) = 0;
00047
00048 virtual int init_field(char Field_type,int Mesh_id,const char * Filename) = 0;
00049 virtual int free_field(int Field_id) = 0;
00050 virtual int get_nreq(int Field_id) = 0;
00051 virtual int get_nr_sol(int Field_id) = 0;
00052 virtual int get_base_type(int Field_id) = 0;
00053 virtual int get_el_pdeg(int Field_id,int El,int* Pdeg_vec) = 0;
00054 virtual int get_element_dofs(int Field_id,int El_id,int Vec_id,double *Dofs) = 0;
00055 virtual int create_constr_data(int Field_id) = 0;
00056 virtual double apr_elem_calc(
00057
00058
00059
00060 int Control,
00061
00062
00063
00064
00065 int Nreq,
00066 int *Pdeg_vec,
00067 int Base_type,
00068
00069
00070 double *Eta,
00071 double *Node_coor,
00072 double *Sol_dofs,
00073 double *Base_phi,
00074 double *Base_dphix,
00075 double *Base_dphiy,
00076 double *Base_dphiz,
00077 double *Xcoor,
00078 double *Sol,
00079 double *Dsolx,
00080 double *Dsoly,
00081 double *Dsolz,
00082 double *Vec_nor
00083 ) = 0;
00084 };
00085
00086 class ApproxManager {
00087 private:
00088 static ApproxManager *pInstance;
00089
00090 typedef std::map<std::string,Plugin> ApproxModuleMap;
00091 ApproxModuleMap LoadedModules;
00092 ApproxServer ServerModules;
00093
00094
00095 ApproxManager();
00096 public:
00097 static ApproxManager & GetInstance();
00098
00099 ApproxServer & GetApproxServer() { return ServerModules; }
00100
00101 void LoadApproxModule(const std::string & sModuleName);
00102 };
00103
00104
00105
00106
00107 }
00108
00109 #endif
00110