Merge remote branch 'seb/master'
This commit is contained in:
commit
1586c76af6
@ -393,15 +393,51 @@ void Operator::DumpPEC2File( string filename )
|
|||||||
double scaling = 1;
|
double scaling = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (pos[0]=0; pos[0]<numLines[0]; pos[0]++) {
|
for (pos[0]=0; pos[0]<numLines[0]-1; pos[0]++) {
|
||||||
for (pos[1]=0; pos[1]<numLines[1]; pos[1]++) {
|
for (pos[1]=0; pos[1]<numLines[1]-1; pos[1]++) {
|
||||||
for (pos[2]=0; pos[2]<numLines[2]; pos[2]++) {
|
for (pos[2]=0; pos[2]<numLines[2]-1; pos[2]++) {
|
||||||
if ((GetVV(0,pos[0],pos[1],pos[2]) == 0) && (GetVI(0,pos[0],pos[1],pos[2]) == 0))
|
if ((pos[1] != 0) && (pos[2] != 0))
|
||||||
pec[0][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 0, pos ) * scaling; // PEC-x found
|
{
|
||||||
if ((GetVV(1,pos[0],pos[1],pos[2]) == 0) && (GetVI(1,pos[0],pos[1],pos[2]) == 0))
|
// PEC surrounds the computational area; do not output this
|
||||||
pec[1][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 1, pos ) * scaling; // PEC-y found
|
if ((GetVV(0,pos[0],pos[1],pos[2]) == 0) && (GetVI(0,pos[0],pos[1],pos[2]) == 0))
|
||||||
if ((GetVV(2,pos[0],pos[1],pos[2]) == 0) && (GetVI(2,pos[0],pos[1],pos[2]) == 0))
|
pec[0][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 0, pos ) * scaling; // PEC-x found
|
||||||
pec[2][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 2, pos ) * scaling; // PEC-z found
|
}
|
||||||
|
if ((pos[0] != 0) && (pos[2] != 0))
|
||||||
|
{
|
||||||
|
// PEC surrounds the computational area; do not output this
|
||||||
|
if ((GetVV(1,pos[0],pos[1],pos[2]) == 0) && (GetVI(1,pos[0],pos[1],pos[2]) == 0))
|
||||||
|
pec[1][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 1, pos ) * scaling; // PEC-y found
|
||||||
|
}
|
||||||
|
if ((pos[0] != 0) && (pos[1] != 0))
|
||||||
|
{
|
||||||
|
// PEC surrounds the computational area; do not output this
|
||||||
|
if ((GetVV(2,pos[0],pos[1],pos[2]) == 0) && (GetVI(2,pos[0],pos[1],pos[2]) == 0))
|
||||||
|
pec[2][pos[0]][pos[1]][pos[2]] = GetEdgeLength( 2, pos ) * scaling; // PEC-z found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// evaluate boundary conditions
|
||||||
|
for (int n=0; n<3; n++)
|
||||||
|
{
|
||||||
|
int nP = (n+1)%3;
|
||||||
|
int nPP = (n+2)%3;
|
||||||
|
for (pos[nP]=0; pos[nP]<numLines[nP]; pos[nP]++)
|
||||||
|
{
|
||||||
|
for (pos[nPP]=0; pos[nPP]<numLines[nPP]; pos[nPP]++)
|
||||||
|
{
|
||||||
|
pos[n] = 0;
|
||||||
|
if ((pos[nP] != numLines[nP]-1) && (m_BC[2*n] == 0))
|
||||||
|
pec[nP ][pos[0]][pos[1]][pos[2]] = GetEdgeLength( nP, pos ) * scaling;
|
||||||
|
if ((pos[nPP] != numLines[nPP]-1) && (m_BC[2*n] == 0))
|
||||||
|
pec[nPP][pos[0]][pos[1]][pos[2]] = GetEdgeLength( nPP, pos ) * scaling;
|
||||||
|
|
||||||
|
pos[n] = numLines[n]-1;
|
||||||
|
if ((pos[nP] != numLines[nP]-1) && (m_BC[2*n+1] == 0))
|
||||||
|
pec[nP ][pos[0]][pos[1]][pos[2]] = GetEdgeLength( nP, pos ) * scaling;
|
||||||
|
if ((pos[nPP] != numLines[nPP]-1) && (m_BC[2*n+1] == 0))
|
||||||
|
pec[nPP][pos[0]][pos[1]][pos[2]] = GetEdgeLength( nPP, pos ) * scaling;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -521,23 +557,23 @@ void Operator::Calc_ECOperatorPos(int n, unsigned int* pos)
|
|||||||
unsigned int i = MainOp->SetPos(pos[0],pos[1],pos[2]);
|
unsigned int i = MainOp->SetPos(pos[0],pos[1],pos[2]);
|
||||||
if (EC_C[n][i]>0)
|
if (EC_C[n][i]>0)
|
||||||
{
|
{
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) = (1-dT*EC_G[n][i]/2/EC_C[n][i])/(1+dT*EC_G[n][i]/2/EC_C[n][i]);
|
SetVV(n,pos[0],pos[1],pos[2], (1-dT*EC_G[n][i]/2/EC_C[n][i])/(1+dT*EC_G[n][i]/2/EC_C[n][i]) );
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) = (dT/EC_C[n][i])/(1+dT*EC_G[n][i]/2/EC_C[n][i]);
|
SetVI(n,pos[0],pos[1],pos[2], (dT/EC_C[n][i])/(1+dT*EC_G[n][i]/2/EC_C[n][i]) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) = 0;
|
SetVV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) = 0;
|
SetVI(n,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
if (EC_L[n][i]>0)
|
if (EC_L[n][i]>0)
|
||||||
{
|
{
|
||||||
GetII(n,pos[0],pos[1],pos[2]) = (1-dT*EC_R[n][i]/2/EC_L[n][i])/(1+dT*EC_R[n][i]/2/EC_L[n][i]);
|
SetII(n,pos[0],pos[1],pos[2], (1-dT*EC_R[n][i]/2/EC_L[n][i])/(1+dT*EC_R[n][i]/2/EC_L[n][i]) );
|
||||||
GetIV(n,pos[0],pos[1],pos[2]) = (dT/EC_L[n][i])/(1+dT*EC_R[n][i]/2/EC_L[n][i]);
|
SetIV(n,pos[0],pos[1],pos[2], (dT/EC_L[n][i])/(1+dT*EC_R[n][i]/2/EC_L[n][i]) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetII(n,pos[0],pos[1],pos[2]) = 0;
|
SetII(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetIV(n,pos[0],pos[1],pos[2]) = 0;
|
SetIV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,19 +668,19 @@ void Operator::ApplyElectricBC(bool* dirs)
|
|||||||
for (pos[nPP]=0;pos[nPP]<numLines[nPP];++pos[nPP])
|
for (pos[nPP]=0;pos[nPP]<numLines[nPP];++pos[nPP])
|
||||||
{
|
{
|
||||||
pos[n]=0;
|
pos[n]=0;
|
||||||
GetVV(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetVV(nP, pos[0],pos[1],pos[2], GetVV(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetVI(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetVI(nP, pos[0],pos[1],pos[2], GetVI(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetVV(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetVV(nPP,pos[0],pos[1],pos[2], GetVV(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetVI(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetVI(nPP,pos[0],pos[1],pos[2], GetVI(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
|
|
||||||
pos[n]=numLines[n]-1;
|
pos[n]=numLines[n]-1;
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1]; // these are outside the FDTD-domain as defined by the main disc
|
SetVV(n, pos[0],pos[1],pos[2], GetVV(n, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] ); // these are outside the FDTD-domain as defined by the main disc
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1]; // these are outside the FDTD-domain as defined by the main disc
|
SetVI(n, pos[0],pos[1],pos[2], GetVI(n, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] ); // these are outside the FDTD-domain as defined by the main disc
|
||||||
|
|
||||||
GetVV(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetVV(nP, pos[0],pos[1],pos[2], GetVV(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetVI(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetVI(nP, pos[0],pos[1],pos[2], GetVI(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetVV(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetVV(nPP,pos[0],pos[1],pos[2], GetVV(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetVI(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetVI(nPP,pos[0],pos[1],pos[2], GetVI(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -663,27 +699,27 @@ void Operator::ApplyMagneticBC(bool* dirs)
|
|||||||
for (pos[nPP]=0;pos[nPP]<numLines[nPP];++pos[nPP])
|
for (pos[nPP]=0;pos[nPP]<numLines[nPP];++pos[nPP])
|
||||||
{
|
{
|
||||||
pos[n]=0;
|
pos[n]=0;
|
||||||
GetII(n,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetII(n, pos[0],pos[1],pos[2], GetII(n, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetIV(n,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetIV(n, pos[0],pos[1],pos[2], GetIV(n, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetII(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetII(nP, pos[0],pos[1],pos[2], GetII(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetIV(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetIV(nP, pos[0],pos[1],pos[2], GetIV(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetII(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetII(nPP,pos[0],pos[1],pos[2], GetII(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
GetIV(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n];
|
SetIV(nPP,pos[0],pos[1],pos[2], GetIV(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n] );
|
||||||
|
|
||||||
pos[n]=numLines[n]-2;
|
pos[n]=numLines[n]-2;
|
||||||
GetII(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetII(nP, pos[0],pos[1],pos[2], GetII(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetIV(nP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetIV(nP, pos[0],pos[1],pos[2], GetIV(nP, pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetII(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetII(nPP,pos[0],pos[1],pos[2], GetII(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
GetIV(nPP,pos[0],pos[1],pos[2]) *= (FDTD_FLOAT)!dirs[2*n+1];
|
SetIV(nPP,pos[0],pos[1],pos[2], GetIV(nPP,pos[0],pos[1],pos[2]) * (FDTD_FLOAT)!dirs[2*n+1] );
|
||||||
|
|
||||||
//the last current lines are outside the FDTD domain and cannot be iterated by the FDTD engine
|
// the last current lines are outside the FDTD domain and cannot be iterated by the FDTD engine
|
||||||
pos[n]=numLines[n]-1;
|
pos[n]=numLines[n]-1;
|
||||||
GetII(n,pos[0],pos[1],pos[2]) = 0;
|
SetII(n, pos[0],pos[1],pos[2], 0 );
|
||||||
GetIV(n,pos[0],pos[1],pos[2]) = 0;
|
SetIV(n, pos[0],pos[1],pos[2], 0 );
|
||||||
GetII(nP,pos[0],pos[1],pos[2]) = 0;
|
SetII(nP, pos[0],pos[1],pos[2], 0 );
|
||||||
GetIV(nP,pos[0],pos[1],pos[2]) = 0;
|
SetIV(nP, pos[0],pos[1],pos[2], 0 );
|
||||||
GetII(nPP,pos[0],pos[1],pos[2]) = 0;
|
SetII(nPP,pos[0],pos[1],pos[2], 0 );
|
||||||
GetIV(nPP,pos[0],pos[1],pos[2]) = 0;
|
SetIV(nPP,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1161,8 +1197,8 @@ bool Operator::CalcFieldExcitation()
|
|||||||
}
|
}
|
||||||
if (elec->GetExcitType()==1) //hard excite
|
if (elec->GetExcitType()==1) //hard excite
|
||||||
{
|
{
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) = 0;
|
SetVV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) = 0;
|
SetVI(n,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1203,8 +1239,8 @@ bool Operator::CalcFieldExcitation()
|
|||||||
}
|
}
|
||||||
if (elec->GetExcitType()==3) //hard excite
|
if (elec->GetExcitType()==3) //hard excite
|
||||||
{
|
{
|
||||||
GetII(n,pos[0],pos[1],pos[2]) = 0;
|
SetII(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetIV(n,pos[0],pos[1],pos[2]) = 0;
|
SetIV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1266,8 +1302,8 @@ bool Operator::CalcFieldExcitation()
|
|||||||
}
|
}
|
||||||
if (elec->GetExcitType()==1) //hard excite
|
if (elec->GetExcitType()==1) //hard excite
|
||||||
{
|
{
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) = 0;
|
SetVV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) = 0;
|
SetVI(n,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1321,8 +1357,8 @@ void Operator::CalcPEC_Range(unsigned int startX, unsigned int stopX, unsigned i
|
|||||||
{
|
{
|
||||||
if (prop->GetType()==CSProperties::METAL) //set to PEC
|
if (prop->GetType()==CSProperties::METAL) //set to PEC
|
||||||
{
|
{
|
||||||
GetVV(n,pos[0],pos[1],pos[2]) = 0;
|
SetVV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVI(n,pos[0],pos[1],pos[2]) = 0;
|
SetVI(n,pos[0],pos[1],pos[2], 0 );
|
||||||
++counter[n];
|
++counter[n];
|
||||||
// cerr << "CartOperator::CalcPEC: PEC found at " << pos[0] << " ; " << pos[1] << " ; " << pos[2] << endl;
|
// cerr << "CartOperator::CalcPEC: PEC found at " << pos[0] << " ; " << pos[1] << " ; " << pos[2] << endl;
|
||||||
}
|
}
|
||||||
@ -1359,8 +1395,8 @@ void Operator::CalcPEC_Curves()
|
|||||||
for (size_t t=0;t<path.dir.size();++t)
|
for (size_t t=0;t<path.dir.size();++t)
|
||||||
{
|
{
|
||||||
// cerr << path.dir.at(t) << " " << path.posPath[0].at(t) << " " << path.posPath[1].at(t) << " " << path.posPath[2].at(t) << endl;
|
// cerr << path.dir.at(t) << " " << path.posPath[0].at(t) << " " << path.posPath[1].at(t) << " " << path.posPath[2].at(t) << endl;
|
||||||
GetVV(path.dir.at(t),path.posPath[0].at(t),path.posPath[1].at(t),path.posPath[2].at(t)) = 0;
|
SetVV(path.dir.at(t),path.posPath[0].at(t),path.posPath[1].at(t),path.posPath[2].at(t), 0 );
|
||||||
GetVI(path.dir.at(t),path.posPath[0].at(t),path.posPath[1].at(t),path.posPath[2].at(t)) = 0;
|
SetVI(path.dir.at(t),path.posPath[0].at(t),path.posPath[1].at(t),path.posPath[2].at(t), 0 );
|
||||||
++m_Nr_PEC[path.dir.at(t)];
|
++m_Nr_PEC[path.dir.at(t)];
|
||||||
}
|
}
|
||||||
// cerr << "found path size: " << path.dir.size() << endl;
|
// cerr << "found path size: " << path.dir.size() << endl;
|
||||||
|
@ -53,11 +53,17 @@ public:
|
|||||||
|
|
||||||
virtual bool SetupExcitation(TiXmlElement* Excite, unsigned int maxTS) {return Exc->setupExcitation(Excite,maxTS);};
|
virtual bool SetupExcitation(TiXmlElement* Excite, unsigned int maxTS) {return Exc->setupExcitation(Excite,maxTS);};
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return vv[n][x][y][z]; }
|
// the next four functions need to be reimplemented in a derived class
|
||||||
inline virtual FDTD_FLOAT& GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return vi[n][x][y][z]; }
|
inline virtual FDTD_FLOAT GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return vv[n][x][y][z]; }
|
||||||
|
inline virtual FDTD_FLOAT GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return vi[n][x][y][z]; }
|
||||||
|
inline virtual FDTD_FLOAT GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return ii[n][x][y][z]; }
|
||||||
|
inline virtual FDTD_FLOAT GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return iv[n][x][y][z]; }
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return ii[n][x][y][z]; }
|
// the next four functions need to be reimplemented in a derived class
|
||||||
inline virtual FDTD_FLOAT& GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return iv[n][x][y][z]; }
|
inline virtual void SetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { vv[n][x][y][z] = value; }
|
||||||
|
inline virtual void SetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { vi[n][x][y][z] = value; }
|
||||||
|
inline virtual void SetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { ii[n][x][y][z] = value; }
|
||||||
|
inline virtual void SetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { iv[n][x][y][z] = value; }
|
||||||
|
|
||||||
virtual void SetBoundaryCondition(int* BCs) {for (int n=0;n<6;++n) m_BC[n]=BCs[n];}
|
virtual void SetBoundaryCondition(int* BCs) {for (int n=0;n<6;++n) m_BC[n]=BCs[n];}
|
||||||
virtual void ApplyElectricBC(bool* dirs); //applied by default to all boundaries
|
virtual void ApplyElectricBC(bool* dirs); //applied by default to all boundaries
|
||||||
|
@ -207,8 +207,8 @@ void Operator_Cylinder::ApplyElectricBC(bool* dirs)
|
|||||||
{
|
{
|
||||||
for (pos[2]=0;pos[2]<numLines[2];++pos[2])
|
for (pos[2]=0;pos[2]<numLines[2];++pos[2])
|
||||||
{
|
{
|
||||||
GetVV(1,pos[0],pos[1],pos[2]) = 0;
|
SetVV(1,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVI(1,pos[0],pos[1],pos[2]) = 0;
|
SetVI(1,pos[0],pos[1],pos[2], 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ bool Operator_Ext_Cylinder::BuildExtension()
|
|||||||
C+=inEC[0]*0.5;
|
C+=inEC[0]*0.5;
|
||||||
G+=inEC[1]*0.5;
|
G+=inEC[1]*0.5;
|
||||||
}
|
}
|
||||||
m_Op->GetVV(2,0,0,pos[2]) = 1;
|
m_Op->SetVV(2,0,0,pos[2], 1);
|
||||||
vv_R0[pos[2]] = (1-dT*G/2/C)/(1+dT*G/2/C);
|
vv_R0[pos[2]] = (1-dT*G/2/C)/(1+dT*G/2/C);
|
||||||
vi_R0[pos[2]] = (dT/C)/(1+dT*G/2/C);
|
vi_R0[pos[2]] = (dT/C)/(1+dT*G/2/C);
|
||||||
}
|
}
|
||||||
|
@ -378,8 +378,8 @@ bool Operator_Ext_UPML::BuildExtension()
|
|||||||
//modify the original operator to perform eq. (7.85) by the main engine (EC-FDTD: equation is multiplied by delta_n)
|
//modify the original operator to perform eq. (7.85) by the main engine (EC-FDTD: equation is multiplied by delta_n)
|
||||||
//the engine extension will replace the original voltages with the "voltage flux" (volt*eps0) prior to the voltage updates
|
//the engine extension will replace the original voltages with the "voltage flux" (volt*eps0) prior to the voltage updates
|
||||||
//after the updates are done the extension will calculate the new voltages (see below) and place them back into the main field domain
|
//after the updates are done the extension will calculate the new voltages (see below) and place them back into the main field domain
|
||||||
m_Op->GetVV(n,pos[0],pos[1],pos[2]) = (2*__EPS0__ - kappa_v[nP]*dT) / (2*__EPS0__ + kappa_v[nP]*dT);
|
m_Op->SetVV(n,pos[0],pos[1],pos[2], (2*__EPS0__ - kappa_v[nP]*dT) / (2*__EPS0__ + kappa_v[nP]*dT) );
|
||||||
m_Op->GetVI(n,pos[0],pos[1],pos[2]) = (2*__EPS0__*dT) / (2*__EPS0__ + kappa_v[nP]*dT) * m_Op->GetEdgeLength(n,pos) / m_Op->GetEdgeArea(n,pos);
|
m_Op->SetVI(n,pos[0],pos[1],pos[2], (2*__EPS0__*dT) / (2*__EPS0__ + kappa_v[nP]*dT) * m_Op->GetEdgeLength(n,pos) / m_Op->GetEdgeArea(n,pos) );
|
||||||
|
|
||||||
|
|
||||||
//operators needed by eq. (7.88) to calculate new voltages from old voltages and old and new "voltage fluxes"
|
//operators needed by eq. (7.88) to calculate new voltages from old voltages and old and new "voltage fluxes"
|
||||||
@ -392,7 +392,7 @@ bool Operator_Ext_UPML::BuildExtension()
|
|||||||
{
|
{
|
||||||
//disable upml
|
//disable upml
|
||||||
GetVV(n,loc_pos) = m_Op->GetVV(n,pos[0],pos[1],pos[2]);
|
GetVV(n,loc_pos) = m_Op->GetVV(n,pos[0],pos[1],pos[2]);
|
||||||
m_Op->GetVV(n,pos[0],pos[1],pos[2]) = 0;
|
m_Op->SetVV(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetVVFO(n,loc_pos) = 0;
|
GetVVFO(n,loc_pos) = 0;
|
||||||
GetVVFN(n,loc_pos) = 1;
|
GetVVFN(n,loc_pos) = 1;
|
||||||
}
|
}
|
||||||
@ -405,8 +405,8 @@ bool Operator_Ext_UPML::BuildExtension()
|
|||||||
//modify the original operator to perform eq. (7.89) by the main engine (EC-FDTD: equation is multiplied by delta_n)
|
//modify the original operator to perform eq. (7.89) by the main engine (EC-FDTD: equation is multiplied by delta_n)
|
||||||
//the engine extension will replace the original currents with the "current flux" (curr*mu0) prior to the current updates
|
//the engine extension will replace the original currents with the "current flux" (curr*mu0) prior to the current updates
|
||||||
//after the updates are done the extension will calculate the new currents (see below) and place them back into the main field domain
|
//after the updates are done the extension will calculate the new currents (see below) and place them back into the main field domain
|
||||||
m_Op->GetII(n,pos[0],pos[1],pos[2]) = (2*__EPS0__ - kappa_i[nP]*dT) / (2*__EPS0__ + kappa_i[nP]*dT);
|
m_Op->SetII(n,pos[0],pos[1],pos[2], (2*__EPS0__ - kappa_i[nP]*dT) / (2*__EPS0__ + kappa_i[nP]*dT) );
|
||||||
m_Op->GetIV(n,pos[0],pos[1],pos[2]) = (2*__EPS0__*dT) / (2*__EPS0__ + kappa_i[nP]*dT) * m_Op->GetEdgeLength(n,pos,true) / m_Op->GetEdgeArea(n,pos,true);
|
m_Op->SetIV(n,pos[0],pos[1],pos[2], (2*__EPS0__*dT) / (2*__EPS0__ + kappa_i[nP]*dT) * m_Op->GetEdgeLength(n,pos,true) / m_Op->GetEdgeArea(n,pos,true) );
|
||||||
|
|
||||||
//operators needed by eq. (7.90) to calculate new currents from old currents and old and new "current fluxes"
|
//operators needed by eq. (7.90) to calculate new currents from old currents and old and new "current fluxes"
|
||||||
GetII(n,loc_pos) = (2*__EPS0__ - kappa_i[nPP]*dT) / (2*__EPS0__ + kappa_i[nPP]*dT);
|
GetII(n,loc_pos) = (2*__EPS0__ - kappa_i[nPP]*dT) / (2*__EPS0__ + kappa_i[nPP]*dT);
|
||||||
@ -418,7 +418,7 @@ bool Operator_Ext_UPML::BuildExtension()
|
|||||||
{
|
{
|
||||||
//disable upml
|
//disable upml
|
||||||
GetII(n,loc_pos) = m_Op->GetII(n,pos[0],pos[1],pos[2]);
|
GetII(n,loc_pos) = m_Op->GetII(n,pos[0],pos[1],pos[2]);
|
||||||
m_Op->GetII(n,pos[0],pos[1],pos[2]) = 0;
|
m_Op->SetII(n,pos[0],pos[1],pos[2], 0 );
|
||||||
GetIIFO(n,loc_pos) = 0;
|
GetIIFO(n,loc_pos) = 0;
|
||||||
GetIIFN(n,loc_pos) = 1;
|
GetIIFN(n,loc_pos) = 1;
|
||||||
}
|
}
|
||||||
|
@ -32,11 +32,15 @@ public:
|
|||||||
|
|
||||||
virtual void DumpOperator2File(string filename);
|
virtual void DumpOperator2File(string filename);
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_vv[n][x][y][z%numVectors].f[z/numVectors]; }
|
inline virtual FDTD_FLOAT GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_vv[n][x][y][z%numVectors].f[z/numVectors]; }
|
||||||
inline virtual FDTD_FLOAT& GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_vi[n][x][y][z%numVectors].f[z/numVectors]; }
|
inline virtual FDTD_FLOAT GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_vi[n][x][y][z%numVectors].f[z/numVectors]; }
|
||||||
|
inline virtual FDTD_FLOAT GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_ii[n][x][y][z%numVectors].f[z/numVectors]; }
|
||||||
|
inline virtual FDTD_FLOAT GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_iv[n][x][y][z%numVectors].f[z/numVectors]; }
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_ii[n][x][y][z%numVectors].f[z/numVectors]; }
|
inline virtual void SetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { f4_vv[n][x][y][z%numVectors].f[z/numVectors] = value; }
|
||||||
inline virtual FDTD_FLOAT& GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return f4_iv[n][x][y][z%numVectors].f[z/numVectors]; }
|
inline virtual void SetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { f4_vi[n][x][y][z%numVectors].f[z/numVectors] = value; }
|
||||||
|
inline virtual void SetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { f4_ii[n][x][y][z%numVectors].f[z/numVectors] = value; }
|
||||||
|
inline virtual void SetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { f4_iv[n][x][y][z%numVectors].f[z/numVectors] = value; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! use New() for creating a new Operator
|
//! use New() for creating a new Operator
|
||||||
|
@ -49,11 +49,15 @@ public:
|
|||||||
|
|
||||||
virtual int CalcECOperator();
|
virtual int CalcECOperator();
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) { if (m_Use_Compression) return f4_vv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetVV(n,x,y,z);}
|
inline virtual FDTD_FLOAT GetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { if (m_Use_Compression) return f4_vv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetVV(n,x,y,z);}
|
||||||
inline virtual FDTD_FLOAT& GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) { if (m_Use_Compression) return f4_vi_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetVI(n,x,y,z);}
|
inline virtual FDTD_FLOAT GetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { if (m_Use_Compression) return f4_vi_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetVI(n,x,y,z);}
|
||||||
|
inline virtual FDTD_FLOAT GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { if (m_Use_Compression) return f4_ii_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetII(n,x,y,z);}
|
||||||
|
inline virtual FDTD_FLOAT GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { if (m_Use_Compression) return f4_iv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetIV(n,x,y,z);}
|
||||||
|
|
||||||
inline virtual FDTD_FLOAT& GetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) { if (m_Use_Compression) return f4_ii_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetII(n,x,y,z);}
|
inline virtual void SetVV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { if (m_Use_Compression) f4_vv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors] = value; else Operator_sse::SetVV(n,x,y,z,value);}
|
||||||
inline virtual FDTD_FLOAT& GetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) { if (m_Use_Compression) return f4_iv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors]; else return Operator_sse::GetIV(n,x,y,z);}
|
inline virtual void SetVI( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { if (m_Use_Compression) f4_vi_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors] = value; else Operator_sse::SetVI(n,x,y,z,value);}
|
||||||
|
inline virtual void SetII( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { if (m_Use_Compression) f4_ii_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors] = value; else Operator_sse::SetII(n,x,y,z,value);}
|
||||||
|
inline virtual void SetIV( unsigned int n, unsigned int x, unsigned int y, unsigned int z, FDTD_FLOAT value ) { if (m_Use_Compression) f4_iv_Compressed[n][m_Op_index[x][y][z%numVectors]].f[z/numVectors] = value; else Operator_sse::SetIV(n,x,y,z,value);}
|
||||||
|
|
||||||
virtual void ShowStat() const;
|
virtual void ShowStat() const;
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ int ProcessEField::Process()
|
|||||||
field *= m_weight;
|
field *= m_weight;
|
||||||
for (size_t n=0;n<m_FD_Samples.size();++n)
|
for (size_t n=0;n<m_FD_Samples.size();++n)
|
||||||
{
|
{
|
||||||
FD_Values[pol].at(n) += (double)field * std::exp( -2.0 * II * M_PI * m_FD_Samples.at(n) * T );
|
FD_Values[pol].at(n) += (double)field * std::exp( -2.0 * _I * M_PI * m_FD_Samples.at(n) * T );
|
||||||
}
|
}
|
||||||
++m_FD_SampleCount;
|
++m_FD_SampleCount;
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ int ProcessHField::Process()
|
|||||||
field *= m_weight;
|
field *= m_weight;
|
||||||
for (size_t n=0;n<m_FD_Samples.size();++n)
|
for (size_t n=0;n<m_FD_Samples.size();++n)
|
||||||
{
|
{
|
||||||
FD_Values[pol].at(n) += (double)field * std::exp( -2.0 * II * M_PI * m_FD_Samples.at(n) * T );
|
FD_Values[pol].at(n) += (double)field * std::exp( -2.0 * _I * M_PI * m_FD_Samples.at(n) * T );
|
||||||
}
|
}
|
||||||
++m_FD_SampleCount;
|
++m_FD_SampleCount;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include <complex>
|
#include <complex>
|
||||||
typedef std::complex<double> double_complex;
|
typedef std::complex<double> double_complex;
|
||||||
#define II double_complex(0.0,1.0)
|
#define _I double_complex(0.0,1.0)
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -77,7 +77,7 @@ int ProcessIntegral::Process()
|
|||||||
double T = time;
|
double T = time;
|
||||||
for (size_t n=0;n<m_FD_Samples.size();++n)
|
for (size_t n=0;n<m_FD_Samples.size();++n)
|
||||||
{
|
{
|
||||||
FD_Values.at(n) += (double)integral * std::exp( -2.0 * II * M_PI * m_FD_Samples.at(n) * T );
|
FD_Values.at(n) += (double)integral * std::exp( -2.0 * _I * M_PI * m_FD_Samples.at(n) * T );
|
||||||
}
|
}
|
||||||
++m_FD_SampleCount;
|
++m_FD_SampleCount;
|
||||||
if (m_Flush)
|
if (m_Flush)
|
||||||
|
@ -6,9 +6,9 @@ function pass = cavity
|
|||||||
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
|
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
|
||||||
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error
|
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error
|
||||||
|
|
||||||
% engines = {'' '--engine=sse' '--engine=sse-compressed' '--engine=multithreaded' '--engine=sse-compressed-linear'};
|
engines = {'' '--engine=sse' '--engine=sse-compressed' '--engine=multithreaded'};
|
||||||
engines = {'--engine=sse-compressed' '--engine=sse-compressed-linear'};
|
% engines = {'--engine=sse-compressed' '--engine=sse-compressed-linear'};
|
||||||
engines = {'' '--engine=sse-compressed'};
|
% engines = {'' '--engine=sse-compressed'};
|
||||||
|
|
||||||
isOctave = exist('OCTAVE_VERSION','builtin') ~= 0;
|
isOctave = exist('OCTAVE_VERSION','builtin') ~= 0;
|
||||||
if isOctave
|
if isOctave
|
||||||
@ -66,7 +66,7 @@ f_stop = 10e9;
|
|||||||
% setup FDTD parameter
|
% setup FDTD parameter
|
||||||
FDTD = InitFDTD( 1000, 0 );
|
FDTD = InitFDTD( 1000, 0 );
|
||||||
FDTD = SetGaussExcite(FDTD,(f_stop-f_start)/2,(f_stop-f_start)/2);
|
FDTD = SetGaussExcite(FDTD,(f_stop-f_start)/2,(f_stop-f_start)/2);
|
||||||
BC = {'PEC' 'PEC' 'PEC' 'PEC' 'PEC' 'PEC'}; % PEC boundaries
|
BC = {'MUR' 'PML_8' 'PEC' 'PEC' 'PEC' 'PEC'}; % PEC boundaries
|
||||||
FDTD = SetBoundaryCond(FDTD,BC);
|
FDTD = SetBoundaryCond(FDTD,BC);
|
||||||
|
|
||||||
% setup CSXCAD geometry
|
% setup CSXCAD geometry
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
function [CSX,port] = AddMSLPort( CSX, portnr, materialname, start, stop, dir, evec, refplaneshift, excitename )
|
function [CSX,port] = AddMSLPort( CSX, portnr, materialname, start, stop, dir, evec, refplaneshift, excitename )
|
||||||
% [CSX,port] = AddMSLPort( CSX, portnr, materialname, start, stop, dir, evec, excitename )
|
% [CSX,port] = AddMSLPort( CSX, portnr, materialname, start, stop, dir, evec, refplaneshift, excitename )
|
||||||
%
|
%
|
||||||
% CSX: CSX-object created by InitCSX()
|
% CSX: CSX-object created by InitCSX()
|
||||||
% portnr: (integer) number of the port
|
% portnr: (integer) number of the port
|
||||||
@ -152,6 +152,7 @@ port.direction = direction;
|
|||||||
% port.idx_height = idx_height;
|
% port.idx_height = idx_height;
|
||||||
port.excite = 0;
|
port.excite = 0;
|
||||||
port.refplaneshift = 0;
|
port.refplaneshift = 0;
|
||||||
|
port.measplanepos = abs(v2_start(idx_prop) - start(idx_prop));
|
||||||
|
|
||||||
if (nargin >= 8) && (~isempty(refplaneshift))
|
if (nargin >= 8) && (~isempty(refplaneshift))
|
||||||
% refplaneshift counts from start of port
|
% refplaneshift counts from start of port
|
||||||
|
@ -12,7 +12,7 @@ function [S11,beta,ZL] = calcMSLPort( portstruct, SimDir, f, ref_shift )
|
|||||||
% ref_shift: (optional) reference plane shift measured from start of port (in drawing units)
|
% ref_shift: (optional) reference plane shift measured from start of port (in drawing units)
|
||||||
%
|
%
|
||||||
% output:
|
% output:
|
||||||
% S11: reflection coefficient
|
% S11: reflection coefficient (normalized to ZL)
|
||||||
% beta: propagation constant
|
% beta: propagation constant
|
||||||
% ZL: characteristic line impedance
|
% ZL: characteristic line impedance
|
||||||
%
|
%
|
||||||
@ -21,7 +21,7 @@ function [S11,beta,ZL] = calcMSLPort( portstruct, SimDir, f, ref_shift )
|
|||||||
%
|
%
|
||||||
% openEMS matlab interface
|
% openEMS matlab interface
|
||||||
% -----------------------
|
% -----------------------
|
||||||
% Sebastian Held <sebastian.held@uni-due.de>
|
% (C) 2010 Sebastian Held <sebastian.held@uni-due.de>
|
||||||
% See also AddMSLPort
|
% See also AddMSLPort
|
||||||
|
|
||||||
% check
|
% check
|
||||||
@ -90,15 +90,10 @@ S11 = (-1i * dEt + Et .* temp) ./ (Et .* temp + 1i * dEt); % solution 1
|
|||||||
% determine ZL
|
% determine ZL
|
||||||
ZL = sqrt(Et .* dEt ./ (Ht .* dHt));
|
ZL = sqrt(Et .* dEt ./ (Ht .* dHt));
|
||||||
|
|
||||||
% reference plane shift
|
% reference plane shift (lossless)
|
||||||
if (nargin > 3)
|
if (nargin > 3)
|
||||||
% renormalize the shift to the measurement plane
|
% renormalize the shift to the measurement plane
|
||||||
if (portstruct.stop(portstruct.idx_prop) - portstruct.start(portstruct.idx_prop) > 0)
|
ref_shift = ref_shift - portstruct.measplanepos;
|
||||||
dir = +1;
|
|
||||||
else
|
|
||||||
dir = -1;
|
|
||||||
end
|
|
||||||
ref_shift = ref_shift - dir*(portstruct.v2_start(portstruct.idx_prop) - portstruct.start(portstruct.idx_prop));
|
|
||||||
ref_shift = ref_shift * portstruct.drawingunit;
|
ref_shift = ref_shift * portstruct.drawingunit;
|
||||||
S11 = S11 .* exp(2i*real(beta)*ref_shift);
|
S11 = S11 .* exp(2i*real(beta)*ref_shift);
|
||||||
S11_corrected = S11_corrected .* exp(2i*real(beta)*ref_shift);
|
S11_corrected = S11_corrected .* exp(2i*real(beta)*ref_shift);
|
||||||
|
@ -180,8 +180,6 @@ xlabel( 'frequency f / MHz' );
|
|||||||
ylabel( 'characteristic impedance Z / Ohm' );
|
ylabel( 'characteristic impedance Z / Ohm' );
|
||||||
legend( 'real', 'imag' );
|
legend( 'real', 'imag' );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%% visualize electric and magnetic fields
|
%% visualize electric and magnetic fields
|
||||||
% you will find vtk dump files in the simulation folder (tmp/)
|
% you will find vtk dump files in the simulation folder (tmp/)
|
||||||
% use paraview to visualize them
|
% use paraview to visualize them
|
||||||
|
@ -1,139 +1,114 @@
|
|||||||
%
|
%
|
||||||
% microstrip line example
|
% EXAMPLE / microstrip / MSL2
|
||||||
%
|
|
||||||
% this example shows how to use a MSL port
|
|
||||||
%
|
%
|
||||||
|
% This example shows how to use the MSL-port.
|
||||||
% The MSL is excited at the center of the computational volume. The
|
% The MSL is excited at the center of the computational volume. The
|
||||||
% boundary at xmin is an absorbing boundary (Mur) and at xmax an electric
|
% boundary at xmin is an absorbing boundary (Mur) and at xmax an electric
|
||||||
% wall. The reflection coefficient at this wall is S11 = -1.
|
% wall. The reflection coefficient at this wall is S11 = -1.
|
||||||
|
% Direction of propagation is x.
|
||||||
%
|
%
|
||||||
|
% This example demonstrates:
|
||||||
|
% - simple microstrip geometry (made of PEC)
|
||||||
|
% - MSL port
|
||||||
|
% - MSL analysis
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% Tested with
|
||||||
|
% - Matlab 2009b
|
||||||
|
% - Octave 3.3.52
|
||||||
|
% - openEMS v0.0.14
|
||||||
|
%
|
||||||
|
% (C) 2010 Sebastian Held <sebastian.held@uni-due.de>
|
||||||
|
|
||||||
close all
|
close all
|
||||||
clear
|
clear
|
||||||
clc
|
clc
|
||||||
|
|
||||||
physical_constants
|
%% switches
|
||||||
|
postproc_only = 0;
|
||||||
|
|
||||||
postprocessing_only = 0;
|
|
||||||
|
|
||||||
|
|
||||||
%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
drawingunits = 1e-6; % specify everything in um
|
physical_constants;
|
||||||
MSL_length = 10000;
|
unit = 1e-6; % specify everything in um
|
||||||
MSL_width = 1000;
|
MSL_length = 10000;
|
||||||
|
MSL_width = 1000;
|
||||||
substrate_thickness = 254;
|
substrate_thickness = 254;
|
||||||
|
substrate_epr = 3.66;
|
||||||
|
|
||||||
mesh_res = [200 0 0];
|
% mesh_res = [200 0 0];
|
||||||
max_timesteps = 20000;
|
|
||||||
min_decrement = 1e-6;
|
%% prepare simulation folder
|
||||||
f_max = 8e9;
|
Sim_Path = 'tmp';
|
||||||
|
Sim_CSX = 'msl2.xml';
|
||||||
|
if ~postproc_only
|
||||||
|
[status, message, messageid] = rmdir( Sim_Path, 's' ); % clear previous directory
|
||||||
|
[status, message, messageid] = mkdir( Sim_Path ); % create empty simulation folder
|
||||||
|
end
|
||||||
|
|
||||||
%% setup FDTD parameters & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%% setup FDTD parameters & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
max_timesteps = 20000;
|
||||||
|
min_decrement = 1e-6;
|
||||||
|
f_max = 7e9;
|
||||||
FDTD = InitFDTD( max_timesteps, min_decrement, 'OverSampling', 10 );
|
FDTD = InitFDTD( max_timesteps, min_decrement, 'OverSampling', 10 );
|
||||||
FDTD = SetGaussExcite( FDTD, f_max/2, f_max/2 );
|
FDTD = SetGaussExcite( FDTD, f_max/2, f_max/2 );
|
||||||
BC = [2 0 0 0 0 1];
|
BC = {'MUR' 'PEC' 'PEC' 'PEC' 'PEC' 'PMC'};
|
||||||
FDTD = SetBoundaryCond( FDTD, BC );
|
FDTD = SetBoundaryCond( FDTD, BC );
|
||||||
|
|
||||||
%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
CSX = InitCSX();
|
CSX = InitCSX();
|
||||||
mesh.x = -MSL_length : mesh_res(1) : MSL_length;
|
resolution = c0/(f_max*sqrt(substrate_epr))/unit /50; % resolution of lambda/50
|
||||||
mesh.y = linspace(-MSL_width/2,MSL_width/2,10); % discretize the width of the MSL with 10 cells
|
mesh.x = SmoothMeshLines( [-MSL_length MSL_length], resolution );
|
||||||
temp1 = linspace(-4*MSL_width,mesh.y(1),20);
|
mesh.y = SmoothMeshLines( [-4*MSL_width -MSL_width/2 MSL_width/2 4*MSL_width], resolution );
|
||||||
temp2 = linspace(mesh.y(end),4*MSL_width,20);
|
mesh.z = SmoothMeshLines( [linspace(0,substrate_thickness,5) 10*substrate_thickness], resolution );
|
||||||
mesh.y = [temp1(1:end-1), mesh.y, temp2(2:end)]; % add coarser discretization
|
CSX = DefineRectGrid( CSX, unit, mesh );
|
||||||
mesh.z = linspace(0,substrate_thickness,5); % discretize the substrate with 5 cells
|
|
||||||
temp1 = linspace(substrate_thickness,2*substrate_thickness,5);
|
|
||||||
mesh.z = [mesh.z temp1(2:end)]; % add same space above the strip
|
|
||||||
temp1 = linspace(2*substrate_thickness,5*substrate_thickness,10);
|
|
||||||
mesh.z = [mesh.z temp1(2:end)]; % coarser discretization
|
|
||||||
CSX = DefineRectGrid( CSX, drawingunits, mesh );
|
|
||||||
|
|
||||||
%% Material definitions
|
|
||||||
CSX = AddMetal( CSX, 'PEC' );
|
|
||||||
CSX = AddMaterial( CSX, 'RO4350B' );
|
|
||||||
|
|
||||||
%% substrate
|
%% substrate
|
||||||
CSX = SetMaterialProperty( CSX, 'RO4350B', 'Epsilon', 3.66 );
|
CSX = AddMaterial( CSX, 'RO4350B' );
|
||||||
|
CSX = SetMaterialProperty( CSX, 'RO4350B', 'Epsilon', substrate_epr );
|
||||||
start = [mesh.x(1), mesh.y(1), 0];
|
start = [mesh.x(1), mesh.y(1), 0];
|
||||||
stop = [mesh.x(end), mesh.y(end), substrate_thickness];
|
stop = [mesh.x(end), mesh.y(end), substrate_thickness];
|
||||||
CSX = AddBox( CSX, 'RO4350B', 0, start, stop );
|
CSX = AddBox( CSX, 'RO4350B', 0, start, stop );
|
||||||
|
|
||||||
%% MSL port
|
%% MSL port
|
||||||
CSX = AddExcitation( CSX, 'excite', 0, [0 0 1]);
|
CSX = AddMetal( CSX, 'PEC' );
|
||||||
portstart = [ 0, -MSL_width/2, substrate_thickness];
|
portstart = [ 0, -MSL_width/2, substrate_thickness];
|
||||||
portstop = [ MSL_length, MSL_width/2, 0];
|
portstop = [ MSL_length, MSL_width/2, 0];
|
||||||
[CSX,portstruct] = AddMSLPort( CSX, 1, 'PEC', portstart, portstop, [1 0 0], [0 0 1], 'excite' );
|
[CSX,portstruct] = AddMSLPort( CSX, 1, 'PEC', portstart, portstop, [1 0 0], [0 0 1], [], 'excite' );
|
||||||
|
|
||||||
%% MSL
|
%% MSL
|
||||||
start = [-MSL_length, -MSL_width/2, substrate_thickness];
|
start = [-MSL_length, -MSL_width/2, substrate_thickness];
|
||||||
stop = [ 0, MSL_width/2, substrate_thickness];
|
stop = [ 0, MSL_width/2, substrate_thickness];
|
||||||
CSX = AddBox( CSX, 'PEC', 0, start, stop );
|
CSX = AddBox( CSX, 'PEC', 999, start, stop ); % priority needs to be higher than
|
||||||
|
|
||||||
%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%% define dump boxes
|
||||||
CSX = AddDump(CSX,'Et_','DumpType',0,'DumpMode',0);
|
start = [mesh.x(1), mesh.y(1), substrate_thickness/2];
|
||||||
start = [mesh.x(1) , mesh.y(1), substrate_thickness/2];
|
|
||||||
stop = [mesh.x(end), mesh.y(end), substrate_thickness/2];
|
stop = [mesh.x(end), mesh.y(end), substrate_thickness/2];
|
||||||
CSX = AddBox(CSX,'Et_',0 , start,stop);
|
CSX = AddDump( CSX, 'Et_', 'DumpType', 0,'DumpMode', 2 ); % cell interpolated
|
||||||
|
CSX = AddBox( CSX, 'Et_', 0, start, stop );
|
||||||
CSX = AddDump(CSX,'Ht_','DumpType',1,'DumpMode',0);
|
CSX = AddDump( CSX, 'Ht_', 'DumpType', 1,'DumpMode', 2 ); % cell interpolated
|
||||||
CSX = AddBox(CSX,'Ht_',0,start,stop);
|
CSX = AddBox( CSX, 'Ht_', 0, start, stop );
|
||||||
|
|
||||||
|
%% write openEMS compatible xml-file
|
||||||
%% define openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
openEMS_opts = '';
|
|
||||||
openEMS_opts = [openEMS_opts ' --disable-dumps'];
|
|
||||||
% openEMS_opts = [openEMS_opts ' --debug-material'];
|
|
||||||
% openEMS_opts = [openEMS_opts ' --debug-operator'];
|
|
||||||
% openEMS_opts = [openEMS_opts ' --debug-boxes'];
|
|
||||||
% openEMS_opts = [openEMS_opts ' --engine=sse-compressed'];
|
|
||||||
% openEMS_opts = [openEMS_opts ' --engine=multithreaded'];
|
|
||||||
openEMS_opts = [openEMS_opts ' --engine=fastest'];
|
|
||||||
|
|
||||||
Sim_Path = 'tmp';
|
|
||||||
Sim_CSX = 'MSL2.xml';
|
|
||||||
|
|
||||||
if ~postprocessing_only
|
|
||||||
rmdir(Sim_Path,'s');
|
|
||||||
end
|
|
||||||
mkdir(Sim_Path);
|
|
||||||
|
|
||||||
%% Write openEMS compatible xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
WriteOpenEMS( [Sim_Path '/' Sim_CSX], FDTD, CSX );
|
WriteOpenEMS( [Sim_Path '/' Sim_CSX], FDTD, CSX );
|
||||||
|
|
||||||
%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%% show the structure
|
||||||
savePath = pwd;
|
CSXGeomPlot( [Sim_Path '/' Sim_CSX] );
|
||||||
cd(Sim_Path); %cd to working dir
|
|
||||||
args = [Sim_CSX ' ' openEMS_opts];
|
|
||||||
if ~postprocessing_only
|
|
||||||
invoke_openEMS(args);
|
|
||||||
end
|
|
||||||
cd(savePath);
|
|
||||||
|
|
||||||
|
%% run openEMS
|
||||||
|
openEMS_opts = '';
|
||||||
%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
openEMS_opts = [openEMS_opts ' --engine=fastest'];
|
||||||
U = ReadUI({'port_ut1A','port_ut1B','et'},'tmp/');
|
% openEMS_opts = [openEMS_opts ' --debug-material'];
|
||||||
I = ReadUI({'port_it1A','port_it1B'},'tmp/');
|
% openEMS_opts = [openEMS_opts ' --debug-boxes'];
|
||||||
delta_t_2 = I.TD{1}.t(1) - U.TD{1}.t(1); % half time-step (s)
|
% openEMS_opts = [openEMS_opts ' --debug-PEC'];
|
||||||
|
if ~postproc_only
|
||||||
% create finer frequency resolution
|
RunOpenEMS( Sim_Path, Sim_CSX, openEMS_opts );
|
||||||
f = linspace( 0, f_max, 1601 );
|
|
||||||
for n=1:numel(U.FD)
|
|
||||||
U.FD{n}.f = f;
|
|
||||||
U.FD{n}.val = DFT_time2freq( U.TD{n}.t, U.TD{n}.val, f );
|
|
||||||
end
|
|
||||||
for n=1:numel(I.FD)
|
|
||||||
I.FD{n}.f = f;
|
|
||||||
I.FD{n}.val = DFT_time2freq( I.TD{n}.t, I.TD{n}.val, f );
|
|
||||||
I.FD{n}.val = I.FD{n}.val .* exp(-1i*2*pi*I.FD{n}.f*delta_t_2); % compensate half time-step advance of H-field
|
|
||||||
end
|
end
|
||||||
|
|
||||||
% interpolate et to the time spacing of the voltage probes
|
|
||||||
et = interp1( U.TD{3}.t, U.TD{3}.val, U.TD{1}.t );
|
|
||||||
|
|
||||||
f = U.FD{1}.f;
|
%% postprocess
|
||||||
|
f = linspace( 1e6, f_max, 1601 );
|
||||||
|
U = ReadUI( {'port_ut1A','port_ut1B','et'}, 'tmp/', f );
|
||||||
|
I = ReadUI( {'port_it1A','port_it1B'}, 'tmp/', f );
|
||||||
|
|
||||||
% Z = (U.FD{1}.val+U.FD{2}.val)/2 ./ I.FD{1}.val;
|
% Z = (U.FD{1}.val+U.FD{2}.val)/2 ./ I.FD{1}.val;
|
||||||
% plot( f*1e-9, [real(Z);imag(Z)],'Linewidth',2);
|
% plot( f*1e-9, [real(Z);imag(Z)],'Linewidth',2);
|
||||||
@ -143,23 +118,30 @@ f = U.FD{1}.f;
|
|||||||
% legend( {'real','imaginary'}, 'location', 'northwest' )
|
% legend( {'real','imaginary'}, 'location', 'northwest' )
|
||||||
% title( 'line impedance (will fail in case of reflections!)' );
|
% title( 'line impedance (will fail in case of reflections!)' );
|
||||||
|
|
||||||
% figure
|
figure
|
||||||
% plotyy(U.TD{1}.t/1e-6,[U.TD{1}.val;U.TD{2}.val],U.TD{1}.t/1e-6,et);
|
ax = plotyy( U.TD{1}.t/1e-6, [U.TD{1}.val;U.TD{2}.val], U.TD{3}.t/1e-6, U.TD{3}.val );
|
||||||
% xlabel('time (us)');
|
xlabel( 'time (us)' );
|
||||||
% ylabel('amplitude (V)');
|
ylabel( 'amplitude (V)' );
|
||||||
% grid on;
|
grid on
|
||||||
% title( 'Time domain voltage probes and excitation signal' );
|
title( 'Time domain voltage probes and excitation signal' );
|
||||||
%
|
legend( {'ut1A','ut1B','excitation'} );
|
||||||
% figure
|
% now make the y-axis symmetric to y=0 (align zeros of y1 and y2)
|
||||||
% plot(I.TD{1}.t/1e-6,[I.TD{1}.val;I.TD{2}.val]);
|
y1 = ylim(ax(1));
|
||||||
% xlabel('time (us)');
|
y2 = ylim(ax(2));
|
||||||
% ylabel('amplitude (A)');
|
ylim( ax(1), [-max(abs(y1)) max(abs(y1))] );
|
||||||
% grid on;
|
ylim( ax(2), [-max(abs(y2)) max(abs(y2))] );
|
||||||
% title( 'Time domain current probes' );
|
|
||||||
|
|
||||||
|
figure
|
||||||
|
plot( I.TD{1}.t/1e-6, [I.TD{1}.val;I.TD{2}.val] );
|
||||||
|
xlabel( 'time (us)' );
|
||||||
|
ylabel( 'amplitude (A)' );
|
||||||
|
grid on
|
||||||
|
title( 'Time domain current probes' );
|
||||||
|
legend( {'it1A','it1B'} );
|
||||||
|
|
||||||
%% port analysis
|
% port analysis
|
||||||
[S11,beta,ZL] = calcMSLPort( portstruct, Sim_Path, f );
|
[S11,beta,ZL] = calcMSLPort( portstruct, Sim_Path, f );
|
||||||
|
% attention! the reflection coefficient S11 is normalized to ZL!
|
||||||
|
|
||||||
figure
|
figure
|
||||||
plot( sin(0:0.01:2*pi), cos(0:0.01:2*pi), 'Color', [.7 .7 .7] );
|
plot( sin(0:0.01:2*pi), cos(0:0.01:2*pi), 'Color', [.7 .7 .7] );
|
||||||
@ -180,8 +162,9 @@ title( 'Reflection coefficient S11 at the measurement plane' );
|
|||||||
|
|
||||||
figure
|
figure
|
||||||
plotyy( f/1e9, 20*log10(abs(S11)), f/1e9, angle(S11)/pi*180 );
|
plotyy( f/1e9, 20*log10(abs(S11)), f/1e9, angle(S11)/pi*180 );
|
||||||
legend( {'abs(S11)', 'angle(S11)'} );
|
legend( {'|S11|', 'angle(S11)'} );
|
||||||
xlabel( 'frequency (GHz)' );
|
xlabel( 'frequency (GHz)' );
|
||||||
|
ylabel( '|S11| (dB)' );
|
||||||
title( 'Reflection coefficient S11 at the measurement plane' );
|
title( 'Reflection coefficient S11 at the measurement plane' );
|
||||||
|
|
||||||
figure
|
figure
|
||||||
@ -198,7 +181,6 @@ ylabel('impedance (Ohm)');
|
|||||||
grid on;
|
grid on;
|
||||||
legend( {'real','imaginary'}, 'location', 'northeast' )
|
legend( {'real','imaginary'}, 'location', 'northeast' )
|
||||||
title( 'Characteristic line impedance ZL' );
|
title( 'Characteristic line impedance ZL' );
|
||||||
ylim( [-2*mean(real(ZL)) 2*mean(real(ZL))] );
|
|
||||||
|
|
||||||
% reference plane shift (to the end of the port)
|
% reference plane shift (to the end of the port)
|
||||||
ref_shift = abs(portstop(1) - portstart(1));
|
ref_shift = abs(portstop(1) - portstart(1));
|
||||||
@ -219,3 +201,7 @@ plot( S11, 'k' );
|
|||||||
plot( real(S11(1)), imag(S11(1)), '*r' );
|
plot( real(S11(1)), imag(S11(1)), '*r' );
|
||||||
axis equal
|
axis equal
|
||||||
title( 'Reflection coefficient S11 at the reference plane (at the electric wall)' );
|
title( 'Reflection coefficient S11 at the reference plane (at the electric wall)' );
|
||||||
|
|
||||||
|
%% visualize electric and magnetic fields
|
||||||
|
% you will find vtk dump files in the simulation folder (tmp/)
|
||||||
|
% use paraview to visualize them
|
||||||
|
617
paraview/view_debug-PEC.cpd
Normal file
617
paraview/view_debug-PEC.cpd
Normal file
@ -0,0 +1,617 @@
|
|||||||
|
<CustomFilterDefinitions>
|
||||||
|
<CustomProxyDefinition name="view_debug-PEC" group="filters">
|
||||||
|
<CompoundSourceProxy id="30284" servers="1">
|
||||||
|
<Proxy group="filters" type="Calculator" id="27263" servers="1" compound_name="Calculator1">
|
||||||
|
<Property name="AttributeMode" id="27263.AttributeMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27263.AttributeMode.enum">
|
||||||
|
<Entry value="1" text="point_data"/>
|
||||||
|
<Entry value="2" text="cell_data"/>
|
||||||
|
<Entry value="5" text="field_data"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="CoordinateResults" id="27263.CoordinateResults" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27263.CoordinateResults.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Function" id="27263.Function" number_of_elements="1">
|
||||||
|
<Element index="0" value="PEC_X+PEC_Y+PEC_Z"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Input" id="27263.Input" number_of_elements="1">
|
||||||
|
<Domain name="groups" id="27263.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27263.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplaceInvalidValues" id="27263.ReplaceInvalidValues" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27263.ReplaceInvalidValues.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplacementValue" id="27263.ReplacementValue" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27263.ReplacementValue.range"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ResultArrayName" id="27263.ResultArrayName" number_of_elements="1">
|
||||||
|
<Element index="0" value="Result"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Calculator" id="27278" servers="1" compound_name="Calculator2">
|
||||||
|
<Property name="AttributeMode" id="27278.AttributeMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27278.AttributeMode.enum">
|
||||||
|
<Entry value="1" text="point_data"/>
|
||||||
|
<Entry value="2" text="cell_data"/>
|
||||||
|
<Entry value="5" text="field_data"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="CoordinateResults" id="27278.CoordinateResults" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27278.CoordinateResults.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Function" id="27278.Function" number_of_elements="1">
|
||||||
|
<Element index="0" value="PEC_X*iHat"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Input" id="27278.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27271" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27278.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27278.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplaceInvalidValues" id="27278.ReplaceInvalidValues" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27278.ReplaceInvalidValues.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplacementValue" id="27278.ReplacementValue" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27278.ReplacementValue.range"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ResultArrayName" id="27278.ResultArrayName" number_of_elements="1">
|
||||||
|
<Element index="0" value="Result"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Calculator" id="27318" servers="1" compound_name="Calculator3">
|
||||||
|
<Property name="AttributeMode" id="27318.AttributeMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27318.AttributeMode.enum">
|
||||||
|
<Entry value="1" text="point_data"/>
|
||||||
|
<Entry value="2" text="cell_data"/>
|
||||||
|
<Entry value="5" text="field_data"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="CoordinateResults" id="27318.CoordinateResults" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27318.CoordinateResults.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Function" id="27318.Function" number_of_elements="1">
|
||||||
|
<Element index="0" value="PEC_Y*jHat"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Input" id="27318.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27271" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27318.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27318.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplaceInvalidValues" id="27318.ReplaceInvalidValues" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27318.ReplaceInvalidValues.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplacementValue" id="27318.ReplacementValue" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27318.ReplacementValue.range"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ResultArrayName" id="27318.ResultArrayName" number_of_elements="1">
|
||||||
|
<Element index="0" value="Result"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Calculator" id="27354" servers="1" compound_name="Calculator4">
|
||||||
|
<Property name="AttributeMode" id="27354.AttributeMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27354.AttributeMode.enum">
|
||||||
|
<Entry value="1" text="point_data"/>
|
||||||
|
<Entry value="2" text="cell_data"/>
|
||||||
|
<Entry value="5" text="field_data"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="CoordinateResults" id="27354.CoordinateResults" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27354.CoordinateResults.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Function" id="27354.Function" number_of_elements="1">
|
||||||
|
<Element index="0" value="PEC_Z*kHat"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Input" id="27354.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27271" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27354.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27354.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplaceInvalidValues" id="27354.ReplaceInvalidValues" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27354.ReplaceInvalidValues.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ReplacementValue" id="27354.ReplacementValue" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27354.ReplacementValue.range"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ResultArrayName" id="27354.ResultArrayName" number_of_elements="1">
|
||||||
|
<Element index="0" value="Result"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Glyph" id="27306" servers="1" compound_name="Glyph1">
|
||||||
|
<Property name="Input" id="27306.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27278" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27306.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array1" id="27306.Input.input_array1">
|
||||||
|
<InputArray attribute_type="point" number_of_components="1"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array2" id="27306.Input.input_array2">
|
||||||
|
<InputArray attribute_type="point" number_of_components="3"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27306.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="MaximumNumberOfPoints" id="27306.MaximumNumberOfPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="5000"/>
|
||||||
|
<Domain name="range" id="27306.MaximumNumberOfPoints.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="RandomMode" id="27306.RandomMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27306.RandomMode.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputScalars" id="27306.SelectInputScalars" number_of_elements="5">
|
||||||
|
<Element index="0" value=""/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value=""/>
|
||||||
|
<Domain name="array_list" id="27306.SelectInputScalars.array_list"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputVectors" id="27306.SelectInputVectors" number_of_elements="5">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value="Result"/>
|
||||||
|
<Domain name="array_list" id="27306.SelectInputVectors.array_list">
|
||||||
|
<String text="PEC"/>
|
||||||
|
<String text="Result"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetOrient" id="27306.SetOrient" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27306.SetOrient.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleFactor" id="27306.SetScaleFactor" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bounds" id="27306.SetScaleFactor.bounds">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="0"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="scalar_range" id="27306.SetScaleFactor.scalar_range"/>
|
||||||
|
<Domain name="vector_range" id="27306.SetScaleFactor.vector_range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Min index="1" value="0"/>
|
||||||
|
<Min index="2" value="0"/>
|
||||||
|
<Min index="3" value="0"/>
|
||||||
|
<Max index="0" value="0.000444444"/>
|
||||||
|
<Max index="1" value="0"/>
|
||||||
|
<Max index="2" value="0"/>
|
||||||
|
<Max index="3" value="0.000444444"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleMode" id="27306.SetScaleMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27306.SetScaleMode.enum">
|
||||||
|
<Entry value="0" text="scalar"/>
|
||||||
|
<Entry value="1" text="vector"/>
|
||||||
|
<Entry value="2" text="vector_components"/>
|
||||||
|
<Entry value="3" text="off"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="Source" id="27306.Source" number_of_elements="1">
|
||||||
|
<Proxy value="27285" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27306.Source.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="glyph_sources"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27306.Source.input_type">
|
||||||
|
<DataType value="vtkPolyData"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="proxy_list" id="27306.Source.proxy_list">
|
||||||
|
<Proxy value="27285"/>
|
||||||
|
<Proxy value="27288"/>
|
||||||
|
<Proxy value="27291"/>
|
||||||
|
<Proxy value="27294"/>
|
||||||
|
<Proxy value="27297"/>
|
||||||
|
<Proxy value="27300"/>
|
||||||
|
<Proxy value="27303"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="UseMaskPoints" id="27306.UseMaskPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27306.UseMaskPoints.bool"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Glyph" id="27342" servers="1" compound_name="Glyph2">
|
||||||
|
<Property name="Input" id="27342.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27318" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27342.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array1" id="27342.Input.input_array1">
|
||||||
|
<InputArray attribute_type="point" number_of_components="1"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array2" id="27342.Input.input_array2">
|
||||||
|
<InputArray attribute_type="point" number_of_components="3"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27342.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="MaximumNumberOfPoints" id="27342.MaximumNumberOfPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="5000"/>
|
||||||
|
<Domain name="range" id="27342.MaximumNumberOfPoints.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="RandomMode" id="27342.RandomMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27342.RandomMode.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputScalars" id="27342.SelectInputScalars" number_of_elements="5">
|
||||||
|
<Element index="0" value=""/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value=""/>
|
||||||
|
<Domain name="array_list" id="27342.SelectInputScalars.array_list"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputVectors" id="27342.SelectInputVectors" number_of_elements="5">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value="Result"/>
|
||||||
|
<Domain name="array_list" id="27342.SelectInputVectors.array_list">
|
||||||
|
<String text="PEC"/>
|
||||||
|
<String text="Result"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetOrient" id="27342.SetOrient" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27342.SetOrient.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleFactor" id="27342.SetScaleFactor" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bounds" id="27342.SetScaleFactor.bounds"/>
|
||||||
|
<Domain name="scalar_range" id="27342.SetScaleFactor.scalar_range"/>
|
||||||
|
<Domain name="vector_range" id="27342.SetScaleFactor.vector_range"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleMode" id="27342.SetScaleMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27342.SetScaleMode.enum">
|
||||||
|
<Entry value="0" text="scalar"/>
|
||||||
|
<Entry value="1" text="vector"/>
|
||||||
|
<Entry value="2" text="vector_components"/>
|
||||||
|
<Entry value="3" text="off"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="Source" id="27342.Source" number_of_elements="1">
|
||||||
|
<Proxy value="27321" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27342.Source.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="glyph_sources"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27342.Source.input_type">
|
||||||
|
<DataType value="vtkPolyData"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="proxy_list" id="27342.Source.proxy_list">
|
||||||
|
<Proxy value="27321"/>
|
||||||
|
<Proxy value="27324"/>
|
||||||
|
<Proxy value="27327"/>
|
||||||
|
<Proxy value="27330"/>
|
||||||
|
<Proxy value="27333"/>
|
||||||
|
<Proxy value="27336"/>
|
||||||
|
<Proxy value="27339"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="UseMaskPoints" id="27342.UseMaskPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27342.UseMaskPoints.bool"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Glyph" id="27378" servers="1" compound_name="Glyph3">
|
||||||
|
<Property name="Input" id="27378.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27354" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27378.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array1" id="27378.Input.input_array1">
|
||||||
|
<InputArray attribute_type="point" number_of_components="1"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array2" id="27378.Input.input_array2">
|
||||||
|
<InputArray attribute_type="point" number_of_components="3"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27378.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="MaximumNumberOfPoints" id="27378.MaximumNumberOfPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="5000"/>
|
||||||
|
<Domain name="range" id="27378.MaximumNumberOfPoints.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="RandomMode" id="27378.RandomMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27378.RandomMode.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputScalars" id="27378.SelectInputScalars" number_of_elements="5">
|
||||||
|
<Element index="0" value=""/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value=""/>
|
||||||
|
<Domain name="array_list" id="27378.SelectInputScalars.array_list"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputVectors" id="27378.SelectInputVectors" number_of_elements="5">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value="Result"/>
|
||||||
|
<Domain name="array_list" id="27378.SelectInputVectors.array_list">
|
||||||
|
<String text="PEC"/>
|
||||||
|
<String text="Result"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetOrient" id="27378.SetOrient" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bool" id="27378.SetOrient.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleFactor" id="27378.SetScaleFactor" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="bounds" id="27378.SetScaleFactor.bounds">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="0"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="scalar_range" id="27378.SetScaleFactor.scalar_range"/>
|
||||||
|
<Domain name="vector_range" id="27378.SetScaleFactor.vector_range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Min index="1" value="0"/>
|
||||||
|
<Min index="2" value="0"/>
|
||||||
|
<Min index="3" value="0"/>
|
||||||
|
<Max index="0" value="0"/>
|
||||||
|
<Max index="1" value="0"/>
|
||||||
|
<Max index="2" value="0.000410997"/>
|
||||||
|
<Max index="3" value="0.000410997"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SetScaleMode" id="27378.SetScaleMode" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="enum" id="27378.SetScaleMode.enum">
|
||||||
|
<Entry value="0" text="scalar"/>
|
||||||
|
<Entry value="1" text="vector"/>
|
||||||
|
<Entry value="2" text="vector_components"/>
|
||||||
|
<Entry value="3" text="off"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="Source" id="27378.Source" number_of_elements="1">
|
||||||
|
<Proxy value="27357" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27378.Source.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="glyph_sources"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27378.Source.input_type">
|
||||||
|
<DataType value="vtkPolyData"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="proxy_list" id="27378.Source.proxy_list">
|
||||||
|
<Proxy value="27357"/>
|
||||||
|
<Proxy value="27360"/>
|
||||||
|
<Proxy value="27363"/>
|
||||||
|
<Proxy value="27366"/>
|
||||||
|
<Proxy value="27369"/>
|
||||||
|
<Proxy value="27372"/>
|
||||||
|
<Proxy value="27375"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="UseMaskPoints" id="27378.UseMaskPoints" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27378.UseMaskPoints.bool"/>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="filters" type="Threshold" id="27271" servers="1" compound_name="Threshold1">
|
||||||
|
<Property name="AllScalars" id="27271.AllScalars" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27271.AllScalars.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="Input" id="27271.Input" number_of_elements="1">
|
||||||
|
<Proxy value="27263" output_port="0"/>
|
||||||
|
<Domain name="groups" id="27271.Input.groups">
|
||||||
|
<Group value="sources"/>
|
||||||
|
<Group value="filters"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_array" id="27271.Input.input_array">
|
||||||
|
<InputArray attribute_type="any" number_of_components="1"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="input_type" id="27271.Input.input_type">
|
||||||
|
<DataType value="vtkDataSet"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="SelectInputScalars" id="27271.SelectInputScalars" number_of_elements="5">
|
||||||
|
<Element index="0" value=""/>
|
||||||
|
<Element index="1" value=""/>
|
||||||
|
<Element index="2" value=""/>
|
||||||
|
<Element index="3" value="0"/>
|
||||||
|
<Element index="4" value="Result"/>
|
||||||
|
<Domain name="array_list" id="27271.SelectInputScalars.array_list">
|
||||||
|
<String text="Result"/>
|
||||||
|
</Domain>
|
||||||
|
<Domain name="field_list" id="27271.SelectInputScalars.field_list">
|
||||||
|
<Entry value="0" text="Point Data"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ThresholdBetween" id="27271.ThresholdBetween" number_of_elements="2">
|
||||||
|
<Element index="0" value="1e-10"/>
|
||||||
|
<Element index="1" value="9e+99"/>
|
||||||
|
<Domain name="range" id="27271.ThresholdBetween.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="0.000945444"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="sources" type="ArrowSource" id="27285" servers="1" compound_name="auto_27285">
|
||||||
|
<Property name="Invert" id="27285.Invert" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27285.Invert.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftRadius" id="27285.ShaftRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0.1"/>
|
||||||
|
<Domain name="range" id="27285.ShaftRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="5"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftResolution" id="27285.ShaftResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="10"/>
|
||||||
|
<Domain name="range" id="27285.ShaftResolution.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipLength" id="27285.TipLength" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27285.TipLength.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="1"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipRadius" id="27285.TipRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27285.TipRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="10"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipResolution" id="27285.TipResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="range" id="27285.TipResolution.range">
|
||||||
|
<Min index="0" value="1"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="sources" type="ArrowSource" id="27321" servers="1" compound_name="auto_27321">
|
||||||
|
<Property name="Invert" id="27321.Invert" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27321.Invert.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftRadius" id="27321.ShaftRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0.1"/>
|
||||||
|
<Domain name="range" id="27321.ShaftRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="5"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftResolution" id="27321.ShaftResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="10"/>
|
||||||
|
<Domain name="range" id="27321.ShaftResolution.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipLength" id="27321.TipLength" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27321.TipLength.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="1"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipRadius" id="27321.TipRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27321.TipRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="10"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipResolution" id="27321.TipResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="range" id="27321.TipResolution.range">
|
||||||
|
<Min index="0" value="1"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<Proxy group="sources" type="ArrowSource" id="27357" servers="1" compound_name="auto_27357">
|
||||||
|
<Property name="Invert" id="27357.Invert" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="bool" id="27357.Invert.bool"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftRadius" id="27357.ShaftRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0.1"/>
|
||||||
|
<Domain name="range" id="27357.ShaftRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="5"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="ShaftResolution" id="27357.ShaftResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="10"/>
|
||||||
|
<Domain name="range" id="27357.ShaftResolution.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipLength" id="27357.TipLength" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27357.TipLength.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="1"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipRadius" id="27357.TipRadius" number_of_elements="1">
|
||||||
|
<Element index="0" value="0"/>
|
||||||
|
<Domain name="range" id="27357.TipRadius.range">
|
||||||
|
<Min index="0" value="0"/>
|
||||||
|
<Max index="0" value="10"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
<Property name="TipResolution" id="27357.TipResolution" number_of_elements="1">
|
||||||
|
<Element index="0" value="1"/>
|
||||||
|
<Domain name="range" id="27357.TipResolution.range">
|
||||||
|
<Min index="0" value="1"/>
|
||||||
|
<Max index="0" value="128"/>
|
||||||
|
</Domain>
|
||||||
|
</Property>
|
||||||
|
</Proxy>
|
||||||
|
<ExposedProperties>
|
||||||
|
<Property name="Input" proxy_name="Calculator1" exposed_name="Input"/>
|
||||||
|
</ExposedProperties>
|
||||||
|
<OutputPort name="Output1" proxy="Glyph1" port_index="0"/>
|
||||||
|
<OutputPort name="Output2" proxy="Glyph2" port_index="0"/>
|
||||||
|
<OutputPort name="Output3" proxy="Glyph3" port_index="0"/>
|
||||||
|
</CompoundSourceProxy>
|
||||||
|
</CustomProxyDefinition>
|
||||||
|
</CustomFilterDefinitions>
|
Loading…
Reference in New Issue
Block a user