3DFDTD场值取样与探测取样的数据取样保存实现
心得:1.管理好代码复杂度很重要,决定了写出的代码是否整洁,是否给予了每一个函数它应该得到的权限!!!
2.是否在同一个抽样层次上编写函数代码及其命名的一致性规则!!!
3.应对接口进行编程,注重于功能的实现,编写自说明的代码,而不必让阅读你代码的人去纠结于细节!此乃是功能应当明确而专一!
4.尽量较少函数代码的长度,以增加可读性,减少阅读者的记忆压力!
5.充分利用C++的各种支持规则,来实现代码,让逻辑飞起来!哈哈!
附录:
目录
(1)由FDTD所调用的代码
void CSimulationShowDlg::ModifySamplingDataMatrix(
COutputSet * const pOutputSet,
C3DArray &PointsData,
CObArray &mSurfaceData,
CTransmissionSamplingDoc * const pTransmissionSamplingDoc,
C3DArray &TransmissionSamplingPointsData,
std::vector<C3DArray * const> &pTransmissionSamplingPointData1,
std::vector<C3DArray * const> &pTransmissionSamplingPointData2,
const CString &SourceDirection,
const unsigned int SimulationSteps,
const unsigned int ie,
const unsigned int je,
const unsigned int ke)
{
if (nullptr!=pOutputSet)
{
pOutputSet->ModifySamplingDataMatrix(
PointsData,mSurfaceData,SimulationSteps,ie,je,ke);
}
if (nullptr!=pTransmissionSamplingDoc)
{
pTransmissionSamplingDoc->ModifySamplingDataMatrix(
TransmissionSamplingPointsData,
pTransmissionSamplingPointData1,
pTransmissionSamplingPointData2,
SourceDirection,
SimulationSteps,ie,je,ke);
}
}
void CSimulationShowDlg::SaveSamplingDataToMatrix(
COutputSet * const pOutputSet,
C3DArray &PointsData,
CObArray &mSurfaceData,
CTransmissionSamplingDoc * const pTransmissionSamplingDoc,
C3DArray &TransmissionSamplingPointsData,
std::vector<C3DArray * const> &pTransmissionSamplingPointData1,
std::vector<C3DArray * const> &pTransmissionSamplingPointData2,
const std::vector<const C3DArray * const> &pNoBcElecMagnicFields,
const CString &SourceDirection,
const unsigned int CurrentStep,
const double Space_dx)
{
if (nullptr!=pOutputSet)
{
pOutputSet->SaveSamplingDataToMatrix(
PointsData,mSurfaceData,pNoBcElecMagnicFields,CurrentStep,Space_dx);
}
if (nullptr!=pTransmissionSamplingDoc)
{
pTransmissionSamplingDoc->SaveSamplingDataToMatrix(
TransmissionSamplingPointsData,
pTransmissionSamplingPointData1,
pTransmissionSamplingPointData2,
pNoBcElecMagnicFields,
CurrentStep,SourceDirection,Space_dx);
}
}
void CSimulationShowDlg::SaveSamplingDataToFile(
const COutputSet * const pOutputSet,
const C3DArray &PointsData,
const CObArray &mSurfaceData,
CTransmissionSamplingDoc * const pTransmissionSamplingDoc,
const C3DArray &TransmissionSamplingPointsData,
const std::vector<C3DArray * const> &pTransmissionSamplingPointData1,
const std::vector<C3DArray * const> &pTransmissionSamplingPointData2,
const CString &CurrentPath)
{
if (nullptr!=pOutputSet)
{
SaveFieldSamplingDataToFile(pOutputSet,PointsData,mSurfaceData,CurrentPath);
}
if (nullptr!=pTransmissionSamplingDoc)
{
SaveTransmissionSamplingDataToFile(
pTransmissionSamplingDoc,
TransmissionSamplingPointsData,
pTransmissionSamplingPointData1,
pTransmissionSamplingPointData2,
CurrentPath);
}
}
void CSimulationShowDlg::SaveFieldSamplingDataToFile(
const COutputSet * const pOutputSet,
const C3DArray &PointsData,
const CObArray &mSurfaceData,
const CString &CurrentPath)
{
ofstream fout;
if (!pOutputSet->GetSamplePointsPointer()->IsEmpty())
{
//保存取样点数据到文件
if (GetFileAttributes(CurrentPath+"\\"+"Points.txt") != -1)
{
DeleteFile(CurrentPath+"\\"+"Points.txt");
}
fout.open(CurrentPath+"\\"+"Points.txt",ios::out|ios::app);
for (UINT i=0;i<PointsData.GetX();i++)
{
for (UINT j=0;j<6;j++)
{
for (UINT k=0;k<PointsData.GetZ();k++)
{
fout<<PointsData.p_array[i][j][k]<<' ';
}
}
}
fout.close();
if (!pOutputSet->GetSampleSurfacesPointer()->IsEmpty())
{
if (GetFileAttributes(CurrentPath+"\\"+"Surfaces.txt") != -1)
{
DeleteFile(CurrentPath+"\\"+"Surfaces.txt");
}
fout.open(CurrentPath+"\\"+"Surfaces.txt",ios::out|ios::app); //保存取样面的数据
for (UINT Index=0;Index<UINT(mSurfaceData.GetSize());Index++)
{
UINT im=((C3DArray *)(mSurfaceData.GetAt(Index)))[0].GetX();
UINT jm=((C3DArray *)(mSurfaceData.GetAt(Index)))[0].GetY();
UINT km=((C3DArray *)(mSurfaceData.GetAt(Index)))[0].GetZ();