Access function for number of Lines
parent
bd315b1c21
commit
3b29514d16
|
@ -30,25 +30,29 @@ Engine* Engine::New(const Operator* op)
|
||||||
Engine::Engine(const Operator* op)
|
Engine::Engine(const Operator* op)
|
||||||
{
|
{
|
||||||
Op = op;
|
Op = op;
|
||||||
|
for (int n=0;n<3;++n)
|
||||||
|
{
|
||||||
|
numLines[n] = Op->GetNumberOfLines(n);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine::~Engine()
|
Engine::~Engine()
|
||||||
{
|
{
|
||||||
Reset();
|
this->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::Init()
|
void Engine::Init()
|
||||||
{
|
{
|
||||||
numTS = 0;
|
numTS = 0;
|
||||||
volt = Create_N_3DArray(Op->numLines);
|
volt = Create_N_3DArray(numLines);
|
||||||
curr = Create_N_3DArray(Op->numLines);
|
curr = Create_N_3DArray(numLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::Reset()
|
void Engine::Reset()
|
||||||
{
|
{
|
||||||
Delete_N_3DArray(volt,Op->numLines);
|
Delete_N_3DArray(volt,numLines);
|
||||||
volt=NULL;
|
volt=NULL;
|
||||||
Delete_N_3DArray(curr,Op->numLines);
|
Delete_N_3DArray(curr,numLines);
|
||||||
curr=NULL;
|
curr=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,13 +62,13 @@ inline void Engine::UpdateVoltages()
|
||||||
bool shift[3];
|
bool shift[3];
|
||||||
|
|
||||||
//voltage updates
|
//voltage updates
|
||||||
for (pos[0]=0;pos[0]<Op->numLines[0];++pos[0])
|
for (pos[0]=0;pos[0]<numLines[0];++pos[0])
|
||||||
{
|
{
|
||||||
shift[0]=pos[0];
|
shift[0]=pos[0];
|
||||||
for (pos[1]=0;pos[1]<Op->numLines[1];++pos[1])
|
for (pos[1]=0;pos[1]<numLines[1];++pos[1])
|
||||||
{
|
{
|
||||||
shift[1]=pos[1];
|
shift[1]=pos[1];
|
||||||
for (pos[2]=0;pos[2]<Op->numLines[2];++pos[2])
|
for (pos[2]=0;pos[2]<numLines[2];++pos[2])
|
||||||
{
|
{
|
||||||
shift[2]=pos[2];
|
shift[2]=pos[2];
|
||||||
//do the updates here
|
//do the updates here
|
||||||
|
@ -100,11 +104,11 @@ inline void Engine::ApplyVoltageExcite()
|
||||||
inline void Engine::UpdateCurrents()
|
inline void Engine::UpdateCurrents()
|
||||||
{
|
{
|
||||||
unsigned int pos[3];
|
unsigned int pos[3];
|
||||||
for (pos[0]=0;pos[0]<Op->numLines[0]-1;++pos[0])
|
for (pos[0]=0;pos[0]<numLines[0]-1;++pos[0])
|
||||||
{
|
{
|
||||||
for (pos[1]=0;pos[1]<Op->numLines[1]-1;++pos[1])
|
for (pos[1]=0;pos[1]<numLines[1]-1;++pos[1])
|
||||||
{
|
{
|
||||||
for (pos[2]=0;pos[2]<Op->numLines[2]-1;++pos[2])
|
for (pos[2]=0;pos[2]<numLines[2]-1;++pos[2])
|
||||||
{
|
{
|
||||||
//do the updates here
|
//do the updates here
|
||||||
//for x
|
//for x
|
||||||
|
|
|
@ -46,6 +46,8 @@ protected:
|
||||||
virtual inline void UpdateCurrents();
|
virtual inline void UpdateCurrents();
|
||||||
virtual inline void ApplyCurrentExcite();
|
virtual inline void ApplyCurrentExcite();
|
||||||
|
|
||||||
|
unsigned int numLines[3];
|
||||||
|
|
||||||
FDTD_FLOAT**** volt;
|
FDTD_FLOAT**** volt;
|
||||||
FDTD_FLOAT**** curr;
|
FDTD_FLOAT**** curr;
|
||||||
unsigned int numTS;
|
unsigned int numTS;
|
||||||
|
|
|
@ -87,14 +87,14 @@ void Engine_Multithread::Init()
|
||||||
m_startBarrier = new boost::barrier(m_numThreads+1); // numThread workers + 1 controller
|
m_startBarrier = new boost::barrier(m_numThreads+1); // numThread workers + 1 controller
|
||||||
m_stopBarrier = new boost::barrier(m_numThreads+1); // numThread workers + 1 controller
|
m_stopBarrier = new boost::barrier(m_numThreads+1); // numThread workers + 1 controller
|
||||||
|
|
||||||
unsigned int linesPerThread = round((float)Op->numLines[0] / (float)m_numThreads);
|
unsigned int linesPerThread = round((float)numLines[0] / (float)m_numThreads);
|
||||||
for (unsigned int n=0; n<m_numThreads; n++) {
|
for (unsigned int n=0; n<m_numThreads; n++) {
|
||||||
unsigned int start = n * linesPerThread;
|
unsigned int start = n * linesPerThread;
|
||||||
unsigned int stop = (n+1) * linesPerThread - 1;
|
unsigned int stop = (n+1) * linesPerThread - 1;
|
||||||
unsigned int stop_h = stop;
|
unsigned int stop_h = stop;
|
||||||
if (n == m_numThreads-1) {
|
if (n == m_numThreads-1) {
|
||||||
// last thread
|
// last thread
|
||||||
stop = Op->numLines[0]-1;
|
stop = numLines[0]-1;
|
||||||
stop_h = stop-1;
|
stop_h = stop-1;
|
||||||
}
|
}
|
||||||
//NS_Engine_Multithread::DBG().cout() << "###DEBUG## Thread " << n << ": start=" << start << " stop=" << stop << " stop_h=" << stop_h << std::endl;
|
//NS_Engine_Multithread::DBG().cout() << "###DEBUG## Thread " << n << ": start=" << start << " stop=" << stop << " stop_h=" << stop_h << std::endl;
|
||||||
|
@ -176,10 +176,10 @@ void thread::operator()()
|
||||||
for (pos[0]=m_start;pos[0]<=m_stop;++pos[0])
|
for (pos[0]=m_start;pos[0]<=m_stop;++pos[0])
|
||||||
{
|
{
|
||||||
shift[0]=pos[0];
|
shift[0]=pos[0];
|
||||||
for (pos[1]=0;pos[1]<m_enginePtr->Op->numLines[1];++pos[1])
|
for (pos[1]=0;pos[1]<m_enginePtr->numLines[1];++pos[1])
|
||||||
{
|
{
|
||||||
shift[1]=pos[1];
|
shift[1]=pos[1];
|
||||||
for (pos[2]=0;pos[2]<m_enginePtr->Op->numLines[2];++pos[2])
|
for (pos[2]=0;pos[2]<m_enginePtr->numLines[2];++pos[2])
|
||||||
{
|
{
|
||||||
shift[2]=pos[2];
|
shift[2]=pos[2];
|
||||||
//do the updates here
|
//do the updates here
|
||||||
|
@ -218,9 +218,9 @@ void thread::operator()()
|
||||||
//current updates
|
//current updates
|
||||||
for (pos[0]=m_start;pos[0]<=m_stop_h;++pos[0])
|
for (pos[0]=m_start;pos[0]<=m_stop_h;++pos[0])
|
||||||
{
|
{
|
||||||
for (pos[1]=0;pos[1]<m_enginePtr->Op->numLines[1]-1;++pos[1])
|
for (pos[1]=0;pos[1]<m_enginePtr->numLines[1]-1;++pos[1])
|
||||||
{
|
{
|
||||||
for (pos[2]=0;pos[2]<m_enginePtr->Op->numLines[2]-1;++pos[2])
|
for (pos[2]=0;pos[2]<m_enginePtr->numLines[2]-1;++pos[2])
|
||||||
{
|
{
|
||||||
//do the updates here
|
//do the updates here
|
||||||
//for x
|
//for x
|
||||||
|
|
|
@ -105,15 +105,32 @@ unsigned int Operator::CalcNyquistNum(double fmax)
|
||||||
bool Operator::SnapToMesh(double* dcoord, unsigned int* uicoord, bool lower, bool* inside)
|
bool Operator::SnapToMesh(double* dcoord, unsigned int* uicoord, bool lower, bool* inside)
|
||||||
{
|
{
|
||||||
bool ok=true;
|
bool ok=true;
|
||||||
|
unsigned int numLines[3];
|
||||||
for (int n=0;n<3;++n)
|
for (int n=0;n<3;++n)
|
||||||
{
|
{
|
||||||
|
numLines[n] = GetNumberOfLines(n);
|
||||||
if (inside) //set defaults
|
if (inside) //set defaults
|
||||||
inside[n] = true;
|
inside[n] = true;
|
||||||
uicoord[n]=0;
|
uicoord[n]=0;
|
||||||
if (dcoord[n]<discLines[n][0]) {ok=false;uicoord[n]=0; if (inside) inside[n] = false;}
|
if (dcoord[n]<discLines[n][0])
|
||||||
else if (dcoord[n]==discLines[n][0]) {uicoord[n]=0;}
|
{
|
||||||
else if (dcoord[n]>discLines[n][numLines[n]-1]) {ok=false;uicoord[n]=numLines[n]-1; if (lower) uicoord[n]=numLines[n]-2; if (inside) inside[n] = false; }
|
ok=false;uicoord[n]=0;
|
||||||
else if (dcoord[n]==discLines[n][numLines[n]-1]) {uicoord[n]=numLines[n]-1; if (lower) uicoord[n]=numLines[n]-2;}
|
if (inside) inside[n] = false;
|
||||||
|
}
|
||||||
|
else if (dcoord[n]==discLines[n][0])
|
||||||
|
uicoord[n]=0;
|
||||||
|
else if (dcoord[n]>discLines[n][numLines[n]-1])
|
||||||
|
{
|
||||||
|
ok=false;
|
||||||
|
uicoord[n]=numLines[n]-1;
|
||||||
|
if (lower) uicoord[n]=numLines[n]-2;
|
||||||
|
if (inside) inside[n] = false;
|
||||||
|
}
|
||||||
|
else if (dcoord[n]==discLines[n][numLines[n]-1])
|
||||||
|
{
|
||||||
|
uicoord[n]=numLines[n]-1;
|
||||||
|
if (lower) uicoord[n]=numLines[n]-2;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
for (unsigned int i=1;i<numLines[n];++i)
|
for (unsigned int i=1;i<numLines[n];++i)
|
||||||
{
|
{
|
||||||
|
@ -516,7 +533,6 @@ void Operator::ApplyElectricBC(bool* dirs)
|
||||||
{
|
{
|
||||||
if (dirs==NULL) return;
|
if (dirs==NULL) return;
|
||||||
unsigned int pos[3];
|
unsigned int pos[3];
|
||||||
unsigned int ipos;
|
|
||||||
for (int n=0;n<3;++n)
|
for (int n=0;n<3;++n)
|
||||||
{
|
{
|
||||||
int nP = (n+1)%3;
|
int nP = (n+1)%3;
|
||||||
|
|
|
@ -56,6 +56,8 @@ public:
|
||||||
double GetTimestep() const {return dT;};
|
double GetTimestep() const {return dT;};
|
||||||
double GetNumberCells() const;
|
double GetNumberCells() const;
|
||||||
|
|
||||||
|
virtual unsigned int GetNumberOfLines(int ny) const {return numLines[ny];}
|
||||||
|
|
||||||
void SetNyquistNum(unsigned int nyquist) {m_nyquistTS=nyquist;}
|
void SetNyquistNum(unsigned int nyquist) {m_nyquistTS=nyquist;}
|
||||||
unsigned int GetNyquistNum() const {return m_nyquistTS;};
|
unsigned int GetNyquistNum() const {return m_nyquistTS;};
|
||||||
unsigned int CalcNyquistNum(double fmax);
|
unsigned int CalcNyquistNum(double fmax);
|
||||||
|
@ -108,9 +110,10 @@ protected:
|
||||||
double* EC_L[3];
|
double* EC_L[3];
|
||||||
double* EC_R[3];
|
double* EC_R[3];
|
||||||
|
|
||||||
// engine/post-proc needs access
|
|
||||||
public:
|
|
||||||
unsigned int numLines[3];
|
unsigned int numLines[3];
|
||||||
|
|
||||||
|
// engine/post-proc needs access
|
||||||
|
public:
|
||||||
double* discLines[3];
|
double* discLines[3];
|
||||||
double gridDelta;
|
double gridDelta;
|
||||||
AdrOp* MainOp;
|
AdrOp* MainOp;
|
||||||
|
|
|
@ -66,8 +66,9 @@ int ProcessCurrent::Process()
|
||||||
m_start_inside[n] = m_stop_inside[n];
|
m_start_inside[n] = m_stop_inside[n];
|
||||||
m_stop_inside[n] = b_help;
|
m_stop_inside[n] = b_help;
|
||||||
}
|
}
|
||||||
|
if (m_stop_inside[n]==false) // integrate up to the wall, Operator::SnapToMesh would give numLines[n]-2
|
||||||
|
stop[n]=Op->GetNumberOfLines(n)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//x-current
|
//x-current
|
||||||
if (m_start_inside[1] && m_start_inside[2])
|
if (m_start_inside[1] && m_start_inside[2])
|
||||||
for (unsigned int i=start[0];i<stop[0];++i)
|
for (unsigned int i=start[0];i<stop[0];++i)
|
||||||
|
|
|
@ -173,11 +173,11 @@ double ProcessFields::CalcTotalEnergy()
|
||||||
double energy=0;
|
double energy=0;
|
||||||
if (Eng==NULL) return 0.0;
|
if (Eng==NULL) return 0.0;
|
||||||
unsigned int pos[3];
|
unsigned int pos[3];
|
||||||
for (pos[0]=0;pos[0]<Op->numLines[0];++pos[0])
|
for (pos[0]=0;pos[0]<Op->GetNumberOfLines(0);++pos[0])
|
||||||
{
|
{
|
||||||
for (pos[1]=0;pos[1]<Op->numLines[1];++pos[1])
|
for (pos[1]=0;pos[1]<Op->GetNumberOfLines(1);++pos[1])
|
||||||
{
|
{
|
||||||
for (pos[2]=0;pos[2]<Op->numLines[2];++pos[2])
|
for (pos[2]=0;pos[2]<Op->GetNumberOfLines(2);++pos[2])
|
||||||
{
|
{
|
||||||
energy+=fabs(volt[0][pos[0]][pos[1]][pos[2]] * curr[1][pos[0]][pos[1]][pos[2]]);
|
energy+=fabs(volt[0][pos[0]][pos[1]][pos[2]] * curr[1][pos[0]][pos[1]][pos[2]]);
|
||||||
energy+=fabs(volt[0][pos[0]][pos[1]][pos[2]] * curr[2][pos[0]][pos[1]][pos[2]]);
|
energy+=fabs(volt[0][pos[0]][pos[1]][pos[2]] * curr[2][pos[0]][pos[1]][pos[2]]);
|
||||||
|
|
Loading…
Reference in New Issue