added support for Lorentz dispersive material
Signed-off-by: Thorsten Liebig <Thorsten.Liebig@gmx.de>
This commit is contained in:
parent
130f07aef2
commit
57dfd64c9b
@ -23,11 +23,57 @@ Engine_Ext_LorentzMaterial::Engine_Ext_LorentzMaterial(Operator_Ext_LorentzMater
|
|||||||
{
|
{
|
||||||
m_Op_Ext_Lor = op_ext_lorentz;
|
m_Op_Ext_Lor = op_ext_lorentz;
|
||||||
m_Order = m_Op_Ext_Lor->GetDispersionOrder();
|
m_Order = m_Op_Ext_Lor->GetDispersionOrder();
|
||||||
|
int order = m_Op_Ext_Lor->m_Order;
|
||||||
|
|
||||||
|
curr_Lor_ADE = new FDTD_FLOAT**[order];
|
||||||
|
volt_Lor_ADE = new FDTD_FLOAT**[order];
|
||||||
|
for (int o=0;o<order;++o)
|
||||||
|
{
|
||||||
|
curr_Lor_ADE[o] = new FDTD_FLOAT*[3];
|
||||||
|
volt_Lor_ADE[o] = new FDTD_FLOAT*[3];
|
||||||
|
for (int n=0; n<3; ++n)
|
||||||
|
{
|
||||||
|
if (m_Op_Ext_Lor->m_curr_Lor_ADE_On[o]==true)
|
||||||
|
{
|
||||||
|
curr_Lor_ADE[o][n] = new FDTD_FLOAT[m_Op_Ext_Lor->m_LM_Count[o]];
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count[o]; ++i)
|
||||||
|
curr_Lor_ADE[o][n][i]=0.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
curr_Lor_ADE[o][n] = NULL;
|
||||||
|
|
||||||
|
if (m_Op_Ext_Lor->m_volt_Lor_ADE_On[o]==true)
|
||||||
|
{
|
||||||
|
volt_Lor_ADE[o][n] = new FDTD_FLOAT[m_Op_Ext_Lor->m_LM_Count[o]];
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count[o]; ++i)
|
||||||
|
volt_Lor_ADE[o][n][i]=0.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
volt_Lor_ADE[o][n] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine_Ext_LorentzMaterial::~Engine_Ext_LorentzMaterial()
|
Engine_Ext_LorentzMaterial::~Engine_Ext_LorentzMaterial()
|
||||||
{
|
{
|
||||||
|
if (curr_Lor_ADE==NULL && volt_Lor_ADE==NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int o=0;o<m_Op_Ext_Lor->m_Order;++o)
|
||||||
|
{
|
||||||
|
for (int n=0; n<3; ++n)
|
||||||
|
{
|
||||||
|
delete[] curr_Lor_ADE[o][n];
|
||||||
|
delete[] volt_Lor_ADE[o][n];
|
||||||
|
}
|
||||||
|
delete[] curr_Lor_ADE[o];
|
||||||
|
delete[] volt_Lor_ADE[o];
|
||||||
|
}
|
||||||
|
delete[] curr_Lor_ADE;
|
||||||
|
curr_Lor_ADE=NULL;
|
||||||
|
|
||||||
|
delete[] volt_Lor_ADE;
|
||||||
|
volt_Lor_ADE=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine_Ext_LorentzMaterial::DoPreVoltageUpdates()
|
void Engine_Ext_LorentzMaterial::DoPreVoltageUpdates()
|
||||||
@ -38,53 +84,116 @@ void Engine_Ext_LorentzMaterial::DoPreVoltageUpdates()
|
|||||||
|
|
||||||
unsigned int **pos = m_Op_Ext_Lor->m_LM_pos[o];
|
unsigned int **pos = m_Op_Ext_Lor->m_LM_pos[o];
|
||||||
|
|
||||||
//switch for different engine types to access faster inline engine functions
|
if (m_Op_Ext_Lor->m_volt_Lor_ADE_On[o])
|
||||||
switch (m_Eng->GetType())
|
|
||||||
{
|
{
|
||||||
case Engine::BASIC:
|
//switch for different engine types to access faster inline engine functions
|
||||||
{
|
switch (m_Eng->GetType())
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
|
||||||
{
|
{
|
||||||
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
case Engine::BASIC:
|
||||||
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * m_Eng->Engine::GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
{
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
volt_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][0][i]*volt_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * (m_Eng->Engine::GetVolt(0,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
volt_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][1][i]*volt_ADE[o][1][i];
|
||||||
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * m_Eng->Engine::GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * (m_Eng->Engine::GetVolt(1,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][2][i]);
|
||||||
|
|
||||||
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
volt_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][2][i]*volt_ADE[o][2][i];
|
||||||
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * m_Eng->Engine::GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * (m_Eng->Engine::GetVolt(2,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Engine::SSE:
|
||||||
|
{
|
||||||
|
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
volt_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][0][i]*volt_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * (eng_sse->Engine_sse::GetVolt(0,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
|
volt_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][1][i]*volt_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * (eng_sse->Engine_sse::GetVolt(1,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][1][i]);
|
||||||
|
|
||||||
|
volt_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][2][i]*volt_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * (eng_sse->Engine_sse::GetVolt(2,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
volt_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][0][i]*volt_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * (m_Eng->GetVolt(0,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
|
volt_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][1][i]*volt_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * (m_Eng->GetVolt(1,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][1][i]);
|
||||||
|
|
||||||
|
volt_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->v_Lor_ADE[o][2][i]*volt_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * (m_Eng->GetVolt(2,pos[0][i],pos[1][i],pos[2][i])-volt_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case Engine::SSE:
|
else
|
||||||
{
|
{
|
||||||
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
//switch for different engine types to access faster inline engine functions
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
switch (m_Eng->GetType())
|
||||||
{
|
{
|
||||||
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
case Engine::BASIC:
|
||||||
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * eng_sse->Engine_sse::GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
|
|
||||||
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
|
||||||
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * eng_sse->Engine_sse::GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
|
|
||||||
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
|
||||||
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * eng_sse->Engine_sse::GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
|
||||||
{
|
{
|
||||||
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * m_Eng->GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
{
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * m_Eng->Engine::GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * m_Eng->GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * m_Eng->Engine::GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * m_Eng->GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * m_Eng->Engine::GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Engine::SSE:
|
||||||
|
{
|
||||||
|
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * eng_sse->Engine_sse::GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * eng_sse->Engine_sse::GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * eng_sse->Engine_sse::GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
volt_ADE[o][0][i] *= m_Op_Ext_Lor->v_int_ADE[o][0][i];
|
||||||
|
volt_ADE[o][0][i] += m_Op_Ext_Lor->v_ext_ADE[o][0][i] * m_Eng->GetVolt(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
volt_ADE[o][1][i] *= m_Op_Ext_Lor->v_int_ADE[o][1][i];
|
||||||
|
volt_ADE[o][1][i] += m_Op_Ext_Lor->v_ext_ADE[o][1][i] * m_Eng->GetVolt(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
volt_ADE[o][2][i] *= m_Op_Ext_Lor->v_int_ADE[o][2][i];
|
||||||
|
volt_ADE[o][2][i] += m_Op_Ext_Lor->v_ext_ADE[o][2][i] * m_Eng->GetVolt(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,53 +206,116 @@ void Engine_Ext_LorentzMaterial::DoPreCurrentUpdates()
|
|||||||
|
|
||||||
unsigned int **pos = m_Op_Ext_Lor->m_LM_pos[o];
|
unsigned int **pos = m_Op_Ext_Lor->m_LM_pos[o];
|
||||||
|
|
||||||
//switch for different engine types to access faster inline engine functions
|
if (m_Op_Ext_Lor->m_curr_Lor_ADE_On[o])
|
||||||
switch (m_Eng->GetType())
|
|
||||||
{
|
{
|
||||||
case Engine::BASIC:
|
//switch for different engine types to access faster inline engine functions
|
||||||
{
|
switch (m_Eng->GetType())
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
|
||||||
{
|
{
|
||||||
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
case Engine::BASIC:
|
||||||
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * m_Eng->Engine::GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
{
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
curr_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][0][i]*curr_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * (m_Eng->Engine::GetCurr(0,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
curr_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][1][i]*curr_ADE[o][1][i];
|
||||||
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * m_Eng->Engine::GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * (m_Eng->Engine::GetCurr(1,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][1][i]);
|
||||||
|
|
||||||
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
curr_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][2][i]*curr_ADE[o][2][i];
|
||||||
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * m_Eng->Engine::GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * (m_Eng->Engine::GetCurr(2,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Engine::SSE:
|
||||||
|
{
|
||||||
|
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
curr_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][0][i]*curr_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * (eng_sse->Engine_sse::GetCurr(0,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
|
curr_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][1][i]*curr_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * (eng_sse->Engine_sse::GetCurr(1,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][1][i]);
|
||||||
|
|
||||||
|
curr_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][2][i]*curr_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * (eng_sse->Engine_sse::GetCurr(2,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
curr_Lor_ADE[o][0][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][0][i]*curr_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * (m_Eng->GetCurr(0,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][0][i]);
|
||||||
|
|
||||||
|
curr_Lor_ADE[o][1][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][1][i]*curr_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * (m_Eng->GetCurr(1,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][1][i]);
|
||||||
|
|
||||||
|
curr_Lor_ADE[o][2][i]+=m_Op_Ext_Lor->i_Lor_ADE[o][2][i]*curr_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * (m_Eng->GetCurr(2,pos[0][i],pos[1][i],pos[2][i])-curr_Lor_ADE[o][2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case Engine::SSE:
|
else
|
||||||
{
|
{
|
||||||
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
//switch for different engine types to access faster inline engine functions
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
switch (m_Eng->GetType())
|
||||||
{
|
{
|
||||||
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
case Engine::BASIC:
|
||||||
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * eng_sse->Engine_sse::GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
|
|
||||||
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
|
||||||
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * eng_sse->Engine_sse::GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
|
|
||||||
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
|
||||||
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * eng_sse->Engine_sse::GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
|
||||||
{
|
{
|
||||||
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * m_Eng->GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
{
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * m_Eng->Engine::GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * m_Eng->GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * m_Eng->Engine::GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * m_Eng->GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * m_Eng->Engine::GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Engine::SSE:
|
||||||
|
{
|
||||||
|
Engine_sse* eng_sse = (Engine_sse*)m_Eng;
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * eng_sse->Engine_sse::GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * eng_sse->Engine_sse::GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * eng_sse->Engine_sse::GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
for (unsigned int i=0; i<m_Op_Ext_Lor->m_LM_Count.at(o); ++i)
|
||||||
|
{
|
||||||
|
curr_ADE[o][0][i] *= m_Op_Ext_Lor->i_int_ADE[o][0][i];
|
||||||
|
curr_ADE[o][0][i] += m_Op_Ext_Lor->i_ext_ADE[o][0][i] * m_Eng->GetCurr(0,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
curr_ADE[o][1][i] *= m_Op_Ext_Lor->i_int_ADE[o][1][i];
|
||||||
|
curr_ADE[o][1][i] += m_Op_Ext_Lor->i_ext_ADE[o][1][i] * m_Eng->GetCurr(1,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
|
||||||
|
curr_ADE[o][2][i] *= m_Op_Ext_Lor->i_int_ADE[o][2][i];
|
||||||
|
curr_ADE[o][2][i] += m_Op_Ext_Lor->i_ext_ADE[o][2][i] * m_Eng->GetCurr(2,pos[0][i],pos[1][i],pos[2][i]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,15 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
Operator_Ext_LorentzMaterial* m_Op_Ext_Lor;
|
Operator_Ext_LorentzMaterial* m_Op_Ext_Lor;
|
||||||
|
|
||||||
|
//! ADE Lorentz voltages
|
||||||
|
// Array setup: volt_Lor_ADE[N_order][direction][mesh_pos]
|
||||||
|
FDTD_FLOAT ***volt_Lor_ADE;
|
||||||
|
|
||||||
|
//! ADE Lorentz currents
|
||||||
|
// Array setup: curr_Lor_ADE[N_order][direction][mesh_pos]
|
||||||
|
FDTD_FLOAT ***curr_Lor_ADE;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ENGINE_EXT_LORENTZMATERIAL_H
|
#endif // ENGINE_EXT_LORENTZMATERIAL_H
|
||||||
|
@ -28,6 +28,12 @@ Operator_Ext_LorentzMaterial::Operator_Ext_LorentzMaterial(Operator* op) : Opera
|
|||||||
v_ext_ADE = NULL;
|
v_ext_ADE = NULL;
|
||||||
i_int_ADE = NULL;
|
i_int_ADE = NULL;
|
||||||
i_ext_ADE = NULL;
|
i_ext_ADE = NULL;
|
||||||
|
|
||||||
|
v_Lor_ADE = NULL;
|
||||||
|
i_Lor_ADE = NULL;
|
||||||
|
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator_Ext_LorentzMaterial::Operator_Ext_LorentzMaterial(Operator* op, Operator_Ext_LorentzMaterial* op_ext) : Operator_Ext_Dispersive(op,op_ext)
|
Operator_Ext_LorentzMaterial::Operator_Ext_LorentzMaterial(Operator* op, Operator_Ext_LorentzMaterial* op_ext) : Operator_Ext_Dispersive(op,op_ext)
|
||||||
@ -36,6 +42,12 @@ Operator_Ext_LorentzMaterial::Operator_Ext_LorentzMaterial(Operator* op, Operato
|
|||||||
v_ext_ADE = NULL;
|
v_ext_ADE = NULL;
|
||||||
i_int_ADE = NULL;
|
i_int_ADE = NULL;
|
||||||
i_ext_ADE = NULL;
|
i_ext_ADE = NULL;
|
||||||
|
|
||||||
|
v_Lor_ADE = NULL;
|
||||||
|
i_Lor_ADE = NULL;
|
||||||
|
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator_Ext_LorentzMaterial::~Operator_Ext_LorentzMaterial()
|
Operator_Ext_LorentzMaterial::~Operator_Ext_LorentzMaterial()
|
||||||
@ -54,6 +66,10 @@ Operator_Ext_LorentzMaterial::~Operator_Ext_LorentzMaterial()
|
|||||||
delete[] i_int_ADE[i][n];
|
delete[] i_int_ADE[i][n];
|
||||||
delete[] i_ext_ADE[i][n];
|
delete[] i_ext_ADE[i][n];
|
||||||
}
|
}
|
||||||
|
if (m_volt_Lor_ADE_On[i])
|
||||||
|
delete[] v_Lor_ADE[i][n];
|
||||||
|
if (m_curr_Lor_ADE_On[i])
|
||||||
|
delete[] i_Lor_ADE[i][n];
|
||||||
}
|
}
|
||||||
if (m_volt_ADE_On[i])
|
if (m_volt_ADE_On[i])
|
||||||
{
|
{
|
||||||
@ -65,6 +81,10 @@ Operator_Ext_LorentzMaterial::~Operator_Ext_LorentzMaterial()
|
|||||||
delete[] i_int_ADE[i];
|
delete[] i_int_ADE[i];
|
||||||
delete[] i_ext_ADE[i];
|
delete[] i_ext_ADE[i];
|
||||||
}
|
}
|
||||||
|
if (m_volt_Lor_ADE_On[i])
|
||||||
|
delete[] v_Lor_ADE[i];
|
||||||
|
if (m_curr_Lor_ADE_On[i])
|
||||||
|
delete[] i_Lor_ADE[i];
|
||||||
}
|
}
|
||||||
delete[] v_int_ADE;
|
delete[] v_int_ADE;
|
||||||
delete[] v_ext_ADE;
|
delete[] v_ext_ADE;
|
||||||
@ -74,6 +94,16 @@ Operator_Ext_LorentzMaterial::~Operator_Ext_LorentzMaterial()
|
|||||||
v_ext_ADE = NULL;
|
v_ext_ADE = NULL;
|
||||||
i_int_ADE = NULL;
|
i_int_ADE = NULL;
|
||||||
i_ext_ADE = NULL;
|
i_ext_ADE = NULL;
|
||||||
|
|
||||||
|
delete[] v_Lor_ADE;
|
||||||
|
delete[] i_Lor_ADE;
|
||||||
|
v_Lor_ADE = NULL;
|
||||||
|
i_Lor_ADE = NULL;
|
||||||
|
|
||||||
|
delete[] m_curr_Lor_ADE_On;
|
||||||
|
delete[] m_volt_Lor_ADE_On;
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
|
m_curr_Lor_ADE_On = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator_Extension* Operator_Ext_LorentzMaterial::Clone(Operator* op)
|
Operator_Extension* Operator_Ext_LorentzMaterial::Clone(Operator* op)
|
||||||
@ -91,15 +121,24 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
unsigned int numLines[3] = {m_Op->GetNumberOfLines(0,true),m_Op->GetNumberOfLines(1,true),m_Op->GetNumberOfLines(2,true)};
|
unsigned int numLines[3] = {m_Op->GetNumberOfLines(0,true),m_Op->GetNumberOfLines(1,true),m_Op->GetNumberOfLines(2,true)};
|
||||||
CSPropLorentzMaterial* mat = NULL;
|
CSPropLorentzMaterial* mat = NULL;
|
||||||
|
|
||||||
double w_plasma,t_relax;
|
|
||||||
bool b_pos_on;
|
bool b_pos_on;
|
||||||
|
vector<unsigned int> v_pos[3];
|
||||||
|
|
||||||
|
// drude material parameter
|
||||||
|
double w_plasma,t_relax;
|
||||||
double L_D[3], C_D[3];
|
double L_D[3], C_D[3];
|
||||||
double R_D[3], G_D[3];
|
double R_D[3], G_D[3];
|
||||||
vector<double> v_int[3];
|
vector<double> v_int[3];
|
||||||
vector<double> v_ext[3];
|
vector<double> v_ext[3];
|
||||||
vector<double> i_int[3];
|
vector<double> i_int[3];
|
||||||
vector<double> i_ext[3];
|
vector<double> i_ext[3];
|
||||||
vector<unsigned int> v_pos[3];
|
|
||||||
|
//additional Dorentz material parameter
|
||||||
|
double w_Lor_Pol;
|
||||||
|
double C_L[3];
|
||||||
|
double L_L[3];
|
||||||
|
vector<double> v_Lor[3];
|
||||||
|
vector<double> i_Lor[3];
|
||||||
|
|
||||||
m_Order = 0;
|
m_Order = 0;
|
||||||
vector<CSProperties*> LD_props = m_Op->CSX->GetPropertyByType(CSProperties::LORENTZMATERIAL);
|
vector<CSProperties*> LD_props = m_Op->CSX->GetPropertyByType(CSProperties::LORENTZMATERIAL);
|
||||||
@ -112,27 +151,40 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
m_Order=LorMat->GetDispersionOrder();
|
m_Order=LorMat->GetDispersionOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_LM_pos = new unsigned int**[m_Order];
|
||||||
|
|
||||||
m_volt_ADE_On = new bool[m_Order];
|
m_volt_ADE_On = new bool[m_Order];
|
||||||
m_curr_ADE_On = new bool[m_Order];
|
m_curr_ADE_On = new bool[m_Order];
|
||||||
m_LM_pos = new unsigned int**[m_Order];
|
m_volt_Lor_ADE_On = new bool[m_Order];
|
||||||
|
m_curr_Lor_ADE_On = new bool[m_Order];
|
||||||
|
|
||||||
v_int_ADE = new FDTD_FLOAT**[m_Order];
|
v_int_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
v_ext_ADE = new FDTD_FLOAT**[m_Order];
|
v_ext_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
i_int_ADE = new FDTD_FLOAT**[m_Order];
|
i_int_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
i_ext_ADE = new FDTD_FLOAT**[m_Order];
|
i_ext_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
|
|
||||||
|
v_Lor_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
|
i_Lor_ADE = new FDTD_FLOAT**[m_Order];
|
||||||
|
|
||||||
for (int order=0;order<m_Order;++order)
|
for (int order=0;order<m_Order;++order)
|
||||||
{
|
{
|
||||||
m_volt_ADE_On[order]=false;
|
m_volt_ADE_On[order]=false;
|
||||||
m_curr_ADE_On[order]=false;
|
m_curr_ADE_On[order]=false;
|
||||||
|
|
||||||
|
m_volt_Lor_ADE_On[order]=false;
|
||||||
|
m_curr_Lor_ADE_On[order]=false;
|
||||||
|
|
||||||
for (int n=0;n<3;++n)
|
for (int n=0;n<3;++n)
|
||||||
{
|
{
|
||||||
|
v_pos[n].clear();
|
||||||
|
|
||||||
v_int[n].clear();
|
v_int[n].clear();
|
||||||
v_ext[n].clear();
|
v_ext[n].clear();
|
||||||
i_int[n].clear();
|
i_int[n].clear();
|
||||||
i_ext[n].clear();
|
i_ext[n].clear();
|
||||||
v_pos[n].clear();
|
|
||||||
|
v_Lor[n].clear();
|
||||||
|
i_Lor[n].clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pos[0]=0; pos[0]<numLines[0]; ++pos[0])
|
for (pos[0]=0; pos[0]<numLines[0]; ++pos[0])
|
||||||
@ -148,11 +200,15 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
{
|
{
|
||||||
L_D[n]=0;
|
L_D[n]=0;
|
||||||
R_D[n]=0;
|
R_D[n]=0;
|
||||||
|
C_L[n]=0;
|
||||||
if (m_Op->GetYeeCoords(n,pos,coord,false)==false)
|
if (m_Op->GetYeeCoords(n,pos,coord,false)==false)
|
||||||
continue;
|
continue;
|
||||||
if (m_CC_R0_included && (n==2) && (pos[0]==0))
|
if (m_CC_R0_included && (n==2) && (pos[0]==0))
|
||||||
coord[1] = m_Op->GetDiscLine(1,0);
|
coord[1] = m_Op->GetDiscLine(1,0);
|
||||||
|
|
||||||
|
if (m_Op->GetVI(n,pos[0],pos[1],pos[2])==0)
|
||||||
|
continue;
|
||||||
|
|
||||||
CSProperties* prop = m_Op->GetGeometryCSX()->GetPropertyByCoordPriority(coord,(CSProperties::PropertyType)(CSProperties::METAL | CSProperties::MATERIAL), true);
|
CSProperties* prop = m_Op->GetGeometryCSX()->GetPropertyByCoordPriority(coord,(CSProperties::PropertyType)(CSProperties::METAL | CSProperties::MATERIAL), true);
|
||||||
if ((mat = prop->ToLorentzMaterial()))
|
if ((mat = prop->ToLorentzMaterial()))
|
||||||
{
|
{
|
||||||
@ -168,6 +224,12 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
{
|
{
|
||||||
R_D[n] = L_D[n]/t_relax;
|
R_D[n] = L_D[n]/t_relax;
|
||||||
}
|
}
|
||||||
|
w_Lor_Pol = mat->GetEpsLorPoleFreqWeighted(order,n,coord) * 2 * PI;
|
||||||
|
if ((w_Lor_Pol>0) && (L_D[n]>0))
|
||||||
|
{
|
||||||
|
m_volt_Lor_ADE_On[order] = true;
|
||||||
|
C_L[n] = 1/(w_Lor_Pol*w_Lor_Pol*L_D[n]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,8 +237,11 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
{
|
{
|
||||||
C_D[n]=0;
|
C_D[n]=0;
|
||||||
G_D[n]=0;
|
G_D[n]=0;
|
||||||
|
L_L[n]=0;
|
||||||
if (m_Op->GetYeeCoords(n,pos,coord,true)==false)
|
if (m_Op->GetYeeCoords(n,pos,coord,true)==false)
|
||||||
continue;
|
continue;
|
||||||
|
if (m_Op->GetIV(n,pos[0],pos[1],pos[2])==0)
|
||||||
|
continue;
|
||||||
|
|
||||||
CSProperties* prop = m_Op->GetGeometryCSX()->GetPropertyByCoordPriority(coord,(CSProperties::PropertyType)(CSProperties::METAL | CSProperties::MATERIAL), true);
|
CSProperties* prop = m_Op->GetGeometryCSX()->GetPropertyByCoordPriority(coord,(CSProperties::PropertyType)(CSProperties::METAL | CSProperties::MATERIAL), true);
|
||||||
if ((mat = prop->ToLorentzMaterial()))
|
if ((mat = prop->ToLorentzMaterial()))
|
||||||
@ -193,10 +258,16 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
{
|
{
|
||||||
G_D[n] = C_D[n]/t_relax;
|
G_D[n] = C_D[n]/t_relax;
|
||||||
}
|
}
|
||||||
|
w_Lor_Pol = mat->GetMueLorPoleFreqWeighted(order,n,coord) * 2 * PI;
|
||||||
|
if ((w_Lor_Pol>0) && (C_D[n]>0))
|
||||||
|
{
|
||||||
|
m_curr_Lor_ADE_On[order] = true;
|
||||||
|
L_L[n] = 1/(w_Lor_Pol*w_Lor_Pol*C_D[n]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b_pos_on) //this position has active lorentz material
|
if (b_pos_on) //this position has active drude material
|
||||||
{
|
{
|
||||||
for (unsigned int n=0; n<3; ++n)
|
for (unsigned int n=0; n<3; ++n)
|
||||||
{
|
{
|
||||||
@ -225,7 +296,14 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
i_int[n].push_back(1);
|
i_int[n].push_back(1);
|
||||||
i_ext[n].push_back(0);
|
i_ext[n].push_back(0);
|
||||||
}
|
}
|
||||||
// cerr << v_int[n].back() << " " << v_ext[n].back() << " " << i_int[n].back() << " " << i_ext[n].back() << endl;
|
if (C_L[n]>0)
|
||||||
|
v_Lor[n].push_back(dT/C_L[n]/m_Op->GetVI(n,pos[0],pos[1],pos[2]));
|
||||||
|
else
|
||||||
|
v_Lor[n].push_back(0);
|
||||||
|
if (L_L[n]>0)
|
||||||
|
i_Lor[n].push_back(dT/L_L[n]/m_Op->GetIV(n,pos[0],pos[1],pos[2]));
|
||||||
|
else
|
||||||
|
i_Lor[n].push_back(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -259,6 +337,16 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
i_ext_ADE[order] = NULL;
|
i_ext_ADE[order] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_volt_Lor_ADE_On[order])
|
||||||
|
v_Lor_ADE[order] = new FDTD_FLOAT*[3];
|
||||||
|
else
|
||||||
|
v_Lor_ADE[order] = NULL;
|
||||||
|
|
||||||
|
if (m_curr_Lor_ADE_On[order])
|
||||||
|
i_Lor_ADE[order] = new FDTD_FLOAT*[3];
|
||||||
|
else
|
||||||
|
i_Lor_ADE[order] = NULL;
|
||||||
|
|
||||||
for (int n=0; n<3; ++n)
|
for (int n=0; n<3; ++n)
|
||||||
{
|
{
|
||||||
m_LM_pos[order][n] = new unsigned int[m_LM_Count.at(order)];
|
m_LM_pos[order][n] = new unsigned int[m_LM_Count.at(order)];
|
||||||
@ -286,6 +374,19 @@ bool Operator_Ext_LorentzMaterial::BuildExtension()
|
|||||||
i_ext_ADE[order][n][i] = i_ext[n].at(i);
|
i_ext_ADE[order][n][i] = i_ext[n].at(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_volt_Lor_ADE_On[order])
|
||||||
|
{
|
||||||
|
v_Lor_ADE[order][n] = new FDTD_FLOAT[m_LM_Count.at(order)];
|
||||||
|
for (unsigned int i=0; i<m_LM_Count.at(order); ++i)
|
||||||
|
v_Lor_ADE[order][n][i] = v_Lor[n].at(i);
|
||||||
|
}
|
||||||
|
if (m_curr_Lor_ADE_On[order])
|
||||||
|
{
|
||||||
|
i_Lor_ADE[order][n] = new FDTD_FLOAT[m_LM_Count.at(order)];
|
||||||
|
for (unsigned int i=0; i<m_LM_Count.at(order); ++i)
|
||||||
|
i_Lor_ADE[order][n][i] = i_Lor[n].at(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,5 +401,15 @@ Engine_Extension* Operator_Ext_LorentzMaterial::CreateEngineExtention()
|
|||||||
|
|
||||||
void Operator_Ext_LorentzMaterial::ShowStat(ostream &ostr) const
|
void Operator_Ext_LorentzMaterial::ShowStat(ostream &ostr) const
|
||||||
{
|
{
|
||||||
Operator_Ext_Dispersive::ShowStat(ostr);
|
Operator_Extension::ShowStat(ostr);
|
||||||
|
string On_Off[2] = {"Off", "On"};
|
||||||
|
ostr << " Max. Dispersion Order N = " << m_Order << endl;
|
||||||
|
for (int i=0;i<m_Order;++i)
|
||||||
|
{
|
||||||
|
ostr << " N=" << i << ":\t Active cells\t\t: " << m_LM_Count.at(i) << endl;
|
||||||
|
ostr << " N=" << i << ":\t Voltage ADE is \t: " << On_Off[m_volt_ADE_On[i]] << endl;
|
||||||
|
ostr << " N=" << i << ":\t Voltage Lor-ADE is \t: " << On_Off[m_volt_Lor_ADE_On[i]] << endl;
|
||||||
|
ostr << " N=" << i << ":\t Current ADE is \t: " << On_Off[m_curr_ADE_On[i]] << endl;
|
||||||
|
ostr << " N=" << i << ":\t Current Lor-ADE is \t: " << On_Off[m_curr_Lor_ADE_On[i]] << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,12 @@ protected:
|
|||||||
FDTD_FLOAT ***v_ext_ADE;
|
FDTD_FLOAT ***v_ext_ADE;
|
||||||
FDTD_FLOAT ***i_int_ADE;
|
FDTD_FLOAT ***i_int_ADE;
|
||||||
FDTD_FLOAT ***i_ext_ADE;
|
FDTD_FLOAT ***i_ext_ADE;
|
||||||
|
|
||||||
|
bool *m_curr_Lor_ADE_On;
|
||||||
|
bool *m_volt_Lor_ADE_On;
|
||||||
|
|
||||||
|
FDTD_FLOAT ***v_Lor_ADE;
|
||||||
|
FDTD_FLOAT ***i_Lor_ADE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OPERATOR_EXT_LORENTZMATERIAL_H
|
#endif // OPERATOR_EXT_LORENTZMATERIAL_H
|
||||||
|
Loading…
Reference in New Issue
Block a user