305 lines
7.1 KiB
C++
305 lines
7.1 KiB
C++
namespace femmviewdata{
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNode -- structure that holds information about each control point.
|
|
|
|
class CNode
|
|
{
|
|
public:
|
|
CNode();
|
|
|
|
double x,y;
|
|
int xs,ys;
|
|
BOOL IsSelected;
|
|
int BoundaryMarker;
|
|
|
|
double GetDistance(double xo, double yo);
|
|
CComplex CC();
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CMeshNode
|
|
{
|
|
public:
|
|
CMeshNode();
|
|
|
|
double x,y; // coordinates of the node
|
|
CComplex A; // vector potential
|
|
double msk; // mask value, used for creating weighted stress tensor integrals
|
|
int xs,ys; // screen coordinates of the node
|
|
double Aprev; // previous solution for incremental permeability problems
|
|
|
|
double GetDistance(double xo, double yo);
|
|
CComplex CC();
|
|
|
|
private:
|
|
|
|
};
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSegment -- structure that holds information about lines joining control pts
|
|
|
|
class CSegment
|
|
{
|
|
public:
|
|
CSegment();
|
|
|
|
int n0,n1;
|
|
double MaxSideLength;
|
|
BOOL IsSelected;
|
|
BOOL Hidden;
|
|
int BoundaryMarker;
|
|
int InGroup;
|
|
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CArcSegment
|
|
{
|
|
public:
|
|
CArcSegment();
|
|
|
|
int n0,n1;
|
|
BOOL IsSelected;
|
|
BOOL Hidden;
|
|
double MaxSideLength,ArcLength;
|
|
int BoundaryMarker;
|
|
int InGroup;
|
|
|
|
void ToggleSelect();
|
|
|
|
private:
|
|
|
|
};
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CBlockLabel -- structure that holds block label information
|
|
|
|
class CBlockLabel
|
|
{
|
|
public:
|
|
CBlockLabel();
|
|
|
|
double x,y;
|
|
double MaxArea;
|
|
double MagDir;
|
|
CString MagDirFctn;
|
|
int Turns;
|
|
BOOL IsSelected;
|
|
int InCircuit;
|
|
int BlockType;
|
|
int InGroup;
|
|
BOOL IsExternal;
|
|
BOOL IsDefault;
|
|
|
|
int Case;
|
|
CComplex J,dVolts;
|
|
|
|
// attributes used to keep track of wound coil properties...
|
|
double FillFactor;
|
|
CComplex o,mu;
|
|
double LocalEnergy;
|
|
|
|
void ToggleSelect();
|
|
double GetDistance(double xo, double yo);
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CMaterialProp
|
|
{
|
|
public:
|
|
|
|
CMaterialProp();
|
|
~CMaterialProp();
|
|
|
|
void GetSlopes(double omega);
|
|
CComplex LaminatedBH(double w, int i);
|
|
|
|
double GetH(double b);
|
|
CComplex GetH(CComplex b); // ``raw'' results
|
|
CComplex GetdHdB(double B);
|
|
double GetB(double h);
|
|
|
|
void GetMu(double b1,double b2,double &mu1, double &mu2);
|
|
void GetMu(CComplex b1,CComplex b2,CComplex &mu1, CComplex &mu2);
|
|
void IncrementalPermeability(double B, CComplex &mu1, CComplex &mu2);
|
|
void IncrementalPermeability(double B, double &mu1, double &mu2);
|
|
double GetEnergy(double b); // straight from the
|
|
double GetCoEnergy(double b); // BH curve data
|
|
|
|
// routines that are actually called to get
|
|
// energy and coenergy. These catch and take
|
|
// care of all of the weird special cases
|
|
// that arise with laminated materials.
|
|
double DoEnergy(double bx, double by);
|
|
double DoCoEnergy(double bx, double by);
|
|
double DoEnergy(CComplex bx, CComplex by);
|
|
double DoCoEnergy(CComplex b1, CComplex b2);
|
|
|
|
CString BlockName;
|
|
double mu_x,mu_y; // permeabilities, relative
|
|
int BHpoints; // number of points in the BH curve...
|
|
double *Bdata;
|
|
CComplex *Hdata; // entries in B-H curve;
|
|
CComplex *slope; // slopes used in interpolation
|
|
// of BHdata
|
|
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 H_c; // magnetization, A/m
|
|
double Nrg;
|
|
double Jr,Ji; // applied current density, MA/m^2
|
|
double Cduct; // conductivity of the material, MS/m
|
|
double Lam_d; // lamination thickness, mm
|
|
double Theta_hn; // hysteresis angle, degrees
|
|
double Theta_hx; // hysteresis angle, degrees
|
|
double Theta_hy; // hysteresis angle, degrees
|
|
int NStrands; // number of strands per wire
|
|
double WireD; // strand diameter, mm
|
|
|
|
CComplex mu_fdx,mu_fdy; // complex permeability for harmonic problems;
|
|
double MuMax; // maximum effective permeability, needed for incremental permeability problems
|
|
double Frequency; // problem frequency in Hz, needed for incremental permeability problems
|
|
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
|
|
|
|
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
|
|
|
|
private:
|
|
};
|
|
|
|
class CPointProp
|
|
{
|
|
public:
|
|
|
|
CPointProp();
|
|
|
|
CString PointName;
|
|
double Jr,Ji; // applied point current, A
|
|
double Ar,Ai; // prescribed nodal value;
|
|
|
|
private:
|
|
};
|
|
|
|
class CCircuit
|
|
{
|
|
public:
|
|
|
|
CCircuit();
|
|
|
|
CString CircName;
|
|
CComplex Amps;
|
|
int CircType;
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CElement
|
|
{
|
|
public:
|
|
|
|
int p[3];
|
|
int blk,lbl;
|
|
CComplex B1,B2;
|
|
CComplex b1[3],b2[3];
|
|
double magdir;
|
|
CComplex ctr;
|
|
double rsqr;
|
|
int n[3]; // Add 3 ints to store elem's neigh.
|
|
|
|
double B1p,B2p; // previous solution elemental flux density for incremental permeability problems
|
|
double Jp; // previous solution elemental current density for incremental permeability problems
|
|
|
|
private:
|
|
};
|
|
|
|
class CPointVals
|
|
{
|
|
public:
|
|
|
|
CComplex A; // vector potential
|
|
CComplex B1,B2; // flux density
|
|
CComplex mu1,mu2; // permeability
|
|
CComplex mu12; // permeability cross-term, needed for incremental permeability problems
|
|
CComplex H1,H2; // field intensity
|
|
CComplex Je,Js; // eddy current and source current densities
|
|
CComplex Hc; // Magnetization for regions with a PM.
|
|
double c; // conductivity
|
|
double E; // energy stored in the magnetic field
|
|
double Ph; // power dissipated by hysteresis
|
|
double Pe; // power dissipated by eddy currents
|
|
double ff; // winding fill factor
|
|
|
|
CPointVals();
|
|
|
|
private:
|
|
};
|
|
|
|
class CQuadPoint
|
|
{
|
|
public:
|
|
int n0,n1,n2,n3;
|
|
double w0,w1,w2,w3;
|
|
};
|
|
|
|
class CAirGapElement
|
|
{
|
|
public:
|
|
|
|
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;
|
|
double InnerShift;
|
|
double OuterShift;
|
|
CComplex agc; // center of the air gap element
|
|
|
|
CQuadPoint *qp;
|
|
|
|
int nn;
|
|
CComplex aco;
|
|
CComplex *brc, *brs; // harmonic components of air gap centerline flux density
|
|
CComplex *btc, *bts;
|
|
CComplex *br, *bt;
|
|
double *brcPrev, *brsPrev; // harmonic components of air gap centerline flux density
|
|
double *btcPrev, *btsPrev;
|
|
double *brPrev,*btPrev;
|
|
int *nh; // list of number associated with each harmonic
|
|
|
|
|
|
private:
|
|
};
|
|
|
|
}
|
|
|
|
using namespace femmviewdata; |