00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #if !defined(ICONN_AMR_HPP)
00013 #define ICONN_AMR_HPP
00014
00015 #include "gtypes.h"
00016 #include <iostream.h>
00017 #include <stdlib.h>
00018 #include "gelemlist.hpp"
00019 #include "gelemindex.hpp"
00020 #include "gfieldlist.hpp"
00021 #include "vdb.hpp"
00022 #include "gtlist.hpp"
00023 #include "gttlist.hpp"
00024 #include "point.hpp"
00025 #include "glop.hpp"
00026 #include "gkeygen.hpp"
00027 #include "gs.hpp"
00028
00029 #if 0
00030 #if !defined(GELEM_INDEX_DEF)
00031 #define GELEM_INDEX_DEF
00032 struct stElemIndex {
00033 GINT i_elem;
00034 GIBuffer v_indices;
00035 GIBuffer vv_indices;
00036 GIBuffer e_indices;
00037 };
00038 #endif
00039 #endif
00040
00041 class IConnAMR : public GS
00042 {
00043 public:
00044 IConnAMR();
00045 IConnAMR(GElemList *gelems);
00046 ~IConnAMR();
00047
00048 void SetGlobalDomain(Point *domain, GINT ndomain,
00049 GIBuffer &igPeriodicity );
00050 void SetDoJInterp(GBOOL bInterp);
00051 void SetDoJtInterp(GBOOL bInterp);
00052 void SetDoExchange(GBOOL bExch);
00053 void SetKeyGen(GKeyGen *keygen);
00054 void SetSynch(GBOOL synch);
00055 void DoProjection(GBOOL proj);
00056 void DoMult(GBOOL mult);
00057 void PreMask(GBOOL mask);
00058 void SetElements(GElemList *elems);
00059 GBOOL Init();
00060 GBOOL GSOp(GVecList &veclist, G_OP op);
00061 GBOOL DSOp(GVecList &veclist, G_OP op, GCHandle h) {
00062 return GSOp(veclist, op); }
00063 GBOOL Host2Mortar(GVecList &v);
00064 GBOOL Mortar2Host(GVecList &v);
00065 void SetCycle(GINT icycle);
00066
00067 protected:
00068
00069 GBOOL InitDB();
00070 GBOOL DoMortaring();
00071 GBOOL FindMortarIDs();
00072 GBOOL FindEdgeNeighbors(Point &v1, GINT m1, Point &v2, GINT m2,
00073 Point &mid, GINT mm, GINT md,
00074 Point &pv1, Point &pv2, GBOOL bPeriodic[],
00075 GINT hostid, GBOOL bGB, GNeighborList &eneighs);
00076 GBOOL DoPeriodicMortars();
00077 void ComputeMortarBdy(Point &vj, Point &vk, GINT jedge, GINT mm,
00078 Point &vP1, Point &vP2);
00079 GBOOL WrapPeriodicVPoint(Point &vpt, GINT ivert, Elem2D &elem);
00080 GBOOL WrapPeriodicEPoint(Point &vpt, GINT iedge, Elem2D &elem);
00081 void RegularizeMortar(GDBuffer *xreg[], GMortar1D *mortar);
00082
00083
00084
00085 GINT nprocs_;
00086 GINT nLocal_;
00087 GINT maxmsg_;
00088 GINT icycle_;
00089 GNODEID maxid_;
00090 GINT nglobDomain_;
00091 GSHORT this_rank_;
00092 GBOOL bInitialized_;
00093 GBOOL bSynchMortars_;
00094 GBOOL bDoJInterp_;
00095 GBOOL bDoJtInterp_;
00096 GBOOL bDoDataExch_;
00097 GBOOL bProjection_;
00098 GBOOL bUseMult_;
00099 GBOOL bPreMask_;
00100 GBOOL bGlobalDomain_;
00101 GDOUBLE gdL_[GDIM];
00102 GCHandle hDSOp_;
00103 VDB db_midpnt_;
00104 VDB db_vertex_;
00105 Point *globDomain_;
00106 GElemList *gelems_;
00107 GFieldList *gfields_;
00108 GNIDBuffer mortarids_;
00109 GIBuffer bgPeriodicity_;
00110 GKeyGen *keygen_;
00111 GVector flat_mortars_;
00112 GVector *xm_[GDIM];
00113 GDBuffer *xreg_[GDIM];
00114 GlOp *glop_;
00115
00116 };
00117
00118 #endif