248 lines
5.0 KiB
C++
248 lines
5.0 KiB
C++
namespace femmedata
|
|
{
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNode -- structure that holds information about each control point.
|
|
|
|
class CNode
|
|
{
|
|
public:
|
|
CNode();
|
|
|
|
double x,y;
|
|
int xs,ys;
|
|
BOOL IsSelected;
|
|
CString BoundaryMarker;
|
|
int InGroup;
|
|
|
|
double GetDistance(double xo, double yo);
|
|
CComplex CC();
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSegment -- structure that holds information about lines joining control pts
|
|
|
|
class CSegment
|
|
{
|
|
public:
|
|
CSegment();
|
|
|
|
int n0,n1;
|
|
BOOL IsSelected;
|
|
BOOL Hidden;
|
|
double MaxSideLength;
|
|
CString BoundaryMarker;
|
|
int InGroup;
|
|
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CArcSegment
|
|
{
|
|
public:
|
|
CArcSegment();
|
|
|
|
int n0,n1;
|
|
BOOL NormalDirection;
|
|
BOOL IsSelected;
|
|
BOOL Hidden;
|
|
double MaxSideLength,ArcLength,mySideLength;
|
|
CString BoundaryMarker;
|
|
int InGroup;
|
|
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CBlockLabel -- structure that holds block label information
|
|
|
|
class CBlockLabel
|
|
{
|
|
public:
|
|
CBlockLabel();
|
|
|
|
double x,y;
|
|
double MaxArea;
|
|
double MagDir;
|
|
int Turns;
|
|
BOOL IsSelected;
|
|
CString BlockType;
|
|
CString InCircuit;
|
|
CString MagDirFctn;
|
|
int InGroup;
|
|
BOOL IsExternal;
|
|
BOOL IsDefault;
|
|
|
|
void ToggleSelect();
|
|
double GetDistance(double xo, double yo);
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CMaterialProp
|
|
{
|
|
public:
|
|
|
|
CMaterialProp();
|
|
~CMaterialProp();
|
|
void StripBHData(CString &b, CString &h);
|
|
void BHDataToCString(CString &b, CString &h);
|
|
|
|
CString BlockName;
|
|
double mu_x,mu_y; // permeabilities, relative
|
|
|
|
int BHpoints; // number of B-H datapoints;
|
|
CComplex *BHdata; // array of B-H pairs;
|
|
|
|
int LamType; // flag that tells how block is laminated;
|
|
// 0 = not laminated or laminated in plane;
|
|
// 1 = laminated in the x-direction;
|
|
// 2 = laminated in the y-direction;
|
|
double LamFill; // lamination fill factor, dimensionless;
|
|
double Theta_m; // direction of the magnetization, degrees
|
|
double H_c; // magnetization, A/m
|
|
CComplex Jsrc; // applied current density, MA/m^2
|
|
double Cduct; // conductivity of the material, MS/m
|
|
double Lam_d; // lamination thickness, mm
|
|
double Theta_hn; // max hysteresis angle, degrees, for nonlinear problems
|
|
double Theta_hx; // hysteresis angle, degrees, x-direction
|
|
double Theta_hy; // and y-direction, for anisotropic linear problems.
|
|
int NStrands; // number of strands per wire
|
|
double WireD; // strand diameter, mm
|
|
|
|
private:
|
|
};
|
|
|
|
class CBoundaryProp
|
|
{
|
|
public:
|
|
|
|
CBoundaryProp();
|
|
|
|
CString BdryName;
|
|
int BdryFormat; // type of boundary condition we are applying
|
|
// 0 = constant value of A
|
|
// 1 = Small skin depth eddy current BC
|
|
// 2 = Mixed BC
|
|
// 3 = SDI
|
|
// 4 = Periodic
|
|
// 5 = Antiperiodic
|
|
// 6 = Periodic air gap element
|
|
// 7 = Antiperiodic air gap element
|
|
|
|
double A0,A1,A2,phi; // set value of A for BdryFormat=0;
|
|
|
|
double Mu,Sig; // material properties necessary to apply
|
|
// eddy current BC
|
|
|
|
CComplex c0,c1; // coefficients for mixed BC
|
|
|
|
double InnerAngle; // rotation of inner bdry for air gap element
|
|
double OuterAngle; // rotation of outer bdry for air gap element
|
|
|
|
// TO DO: ``flux pipe?'' and ''line currents''
|
|
// Line currents might be redundant, since we already have magnetization.
|
|
|
|
private:
|
|
};
|
|
|
|
class CPointProp
|
|
{
|
|
public:
|
|
|
|
CPointProp();
|
|
|
|
CString PointName;
|
|
CComplex Jp; // applied point current, Amps
|
|
CComplex Ap; // prescribed nodal value of vector potential;
|
|
|
|
private:
|
|
};
|
|
|
|
class CCircuit
|
|
{
|
|
public:
|
|
|
|
CCircuit();
|
|
|
|
CString CircName;
|
|
CComplex Amps;
|
|
int CircType;
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CPeriodicBoundary
|
|
{
|
|
public:
|
|
|
|
CPeriodicBoundary();
|
|
|
|
CString BdryName;
|
|
int BdryFormat; // 0 = Periodic
|
|
// 1 = Antiperiodic
|
|
int nseg; // number of segs with this bc
|
|
int narc; // number of arcs with this bc
|
|
int seg[2]; // (arc)segments to which is applied
|
|
|
|
private:
|
|
};
|
|
|
|
class CCommonPoint
|
|
{
|
|
public:
|
|
|
|
CCommonPoint();
|
|
void Order();
|
|
|
|
int x,y,t;
|
|
|
|
private:
|
|
};
|
|
|
|
class CAirGapElement
|
|
{
|
|
public:
|
|
|
|
CAirGapElement();
|
|
~CAirGapElement();
|
|
|
|
CString BdryName;
|
|
int BdryFormat; // 0 = Periodic
|
|
// 1 = Antiperiodic
|
|
|
|
int totalArcElements; // total elements in the initial meshing
|
|
double totalArcLength; // sum of the angles of all constituent arcs
|
|
double ri,ro; // inner and outer radii of the air gap element
|
|
double InnerAngle;
|
|
double OuterAngle;
|
|
CComplex agc; // center of the air gap element
|
|
int *node; // node numbers that are part of the air gap element
|
|
|
|
private:
|
|
};
|
|
|
|
class CQuadPoint
|
|
{
|
|
public:
|
|
|
|
CQuadPoint();
|
|
|
|
int n0,n1;
|
|
double w0,w1;
|
|
};
|
|
|
|
}
|
|
|
|
using namespace femmedata; |