47 #ifndef Xyce_N_DEV_PDE_2DMesh__h
48 #define Xyce_N_DEV_PDE_2DMesh__h
67 #define VERTEX_A 0 // vertex A
68 #define VERTEX_B 1 // vertex B
69 #define VERTEX_C 2 // vertex C
70 #define VERTEX_D 3 // vertex D
72 #define EDGE_AB 0 // edge AB
73 #define EDGE_BC 1 // edge BC
74 #define EDGE_AC 2 // edge AC
75 #define EDGE_CD 2 // edge CD
76 #define EDGE_AD 3 // edge AD
78 #define TYPE_EDGE 7 // edge label
79 #define TYPE_REGION 8 // region label
135 double xlength,
double ylength,
136 int numElectrodes, std::string & outputMeshFileName,
137 std::map<std::string,PDE_2DElectrode*> & elMap,
140 bool resizeMesh (
double xlength,
double ylength);
161 double interp (
double *F,
double r,
double z);
162 bool interpVector (
double *F,
double r,
double z,
double & xvec,
double & yvec);
164 void findCell(
double r,
double z,
int & isuccess,
165 int & inode,
int & iCell,
int iStartCell = 0);
170 double x2,
double y2,
171 double x3,
double y3);
180 bool getXVector (std::vector<double> & xvec_tmp);
181 bool getYVector (std::vector<double> & yvec_tmp);
193 double lengthAdjust (
double x1,
double y1,
double x2,
double y2);
208 std::map<std::string,PDE_2DElectrode*> & elMap);
213 std::map<std::string,PDE_2DElectrode*> & elMap);
218 int inodeA,
int inodeB,
int inodeC);
221 double x2,
double y2,
222 double x3,
double y3);
228 bool fCCWorder (
int inode1,
int inode2,
int inode3);
233 (
NADJ &nadj,
int itri,
int iVertex,
int uIntLabel,
bool fCW);
236 (
int itri,
int *ainode,
int *aiedge,
int *aitri,
int *auLabel);
550 #define LEN_IDENT 15 // identifier length
552 #define EDGESTATUS_BOUNDARY 0
553 #define EDGESTATUS_EXTERIOR 1
554 #define EDGESTATUS_INTERIOR 2
703 ilen(0.0), elen(0.0), Area1(0.0), Area2(0.0), iedge(-1), inode(-1), ielem(-1)
867 inline double sq(
double x)
882 os << el.
name <<
":\n";
883 os <<
" node = " << el.
nodeName <<
"\n";
884 os <<
" side = " << el.
side <<
"\n";
885 os <<
" start = " << el.
start <<
"\n";
886 os <<
" end = " << el.
end <<
"\n";
double * getDopingVector()
double computeAngle(int inode1, int inode2, int inode3)
bool initializeInternalMesh(int nx, int ny, double xlength, double ylength, int numElectrodes, std::string &outputMeshFileName, std::map< std::string, PDE_2DElectrode * > &elMap, bool cylFlag)
int ** getNodeIndexVector()
bool computeIntPB(double &x, double &y, int inodeA, int inodeB, int inodeC)
Pure virtual class to augment a linear system.
const DeviceOptions * devOptions_
std::vector< double > yVector
bool setupEdge(double r, double z)
bool writeSGFMeshFile(const std::string &meshFileName_tmp)
std::vector< mLabel > mLabelVector
std::vector< mEdge > mEdgeVector
std::vector< int > mNodeVector
bool setupDefaultLabels(int numberElectrodes)
bool labelEdgeType(std::string &labelName)
bool interpVector(double *F, double r, double z, double &xvec, double &yvec)
bool setupInternalAdjacencyInfo()
void getElementInfo(int itri, int *ainode, int *aiedge, int *aitri, int *auLabel)
bool fCCWorder(int inode1, int inode2, int inode3)
void elementNodes(int itri, int *ainode)
std::map< std::string, mLabel > mLabelMap
bool scaleMesh(double xScale)
std::vector< int > visitCellFlagVec
std::vector< double > dopingVector
std::vector< int > afVisitedVec
double compAngle(double x1, double y1, double x2, double y2, double x3, double y3)
double interpReg(double r, double z)
void initNodeAdjStructure(NADJ &nadj, int itri, int iVertex, int uIntLabel, bool fCW)
std::vector< mCell > mCellVector
double findMinDist(int iCell, double r, double z)
double interp(double *F, double r, double z)
bool errorCheckElectrodes(int numElectrodes, std::map< std::string, PDE_2DElectrode * > &elMap)
union Xyce::Device::XLATCONST::@0 data
double areaAdjust(double x1, double y1, double x2, double y2, double x3, double y3)
std::vector< mNode > mNodeVector
bool setupInternalLabels(int numberElectrodes, std::map< std::string, PDE_2DElectrode * > &elMap)
PDE_2DMesh & operator=(PDE_2DMesh const &rhsMesh)
void findCell(double r, double z, int &isuccess, int &inode, int &iCell, int iStartCell=0)
bool setupInternalMesh(int nx, int ny, double xlength, double ylength)
bool initializeMesh(const std::string &meshFileName_tmp)
std::vector< int > mNodeVector
std::vector< double > xVector
bool resizeMesh(double xlength, double ylength)
double lengthAdjust(double x1, double y1, double x2, double y2)
bool readSGFMeshFile(const std::string &meshFileName_tmp)
std::ostream & operator<<(std::ostream &os, const Configuration &configuration)
std::vector< EDGEINFO > edgeInfoVector
bool labelNameExist(std::string &labelName)