3DFDTD场值取样与探测取样的数据取样保存实现

本文介绍了3DFDTD(三维时域有限差分法)中场值取样和探测取样的数据取样保存实现。通过管理代码复杂度、接口编程和编写自说明代码,实现了数据的高效处理。代码涉及C++,包括对取样点和取样面数据矩阵的修改、保存和删除操作,并与FDTD算法紧密关联。
摘要由CSDN通过智能技术生成

                                     3DFDTD场值取样与探测取样的数据取样保存实现

心得:1.管理好代码复杂度很重要,决定了写出的代码是否整洁,是否给予了每一个函数它应该得到的权限!!!

            2.是否在同一个抽样层次上编写函数代码及其命名的一致性规则!!!

            3.应对接口进行编程,注重于功能的实现,编写自说明的代码,而不必让阅读你代码的人去纠结于细节!此乃是功能应当明确而专一!

            4.尽量较少函数代码的长度,以增加可读性,减少阅读者的记忆压力!

            5.充分利用C++的各种支持规则,来实现代码,让逻辑飞起来!哈哈!

附录:

目录

(1)由FDTD所调用的代码... 2

(2)与探测取样相关的代码... 6

(3)与场值取样相关的代码... 11

(4) FDTD算法内相关的代码... 16

 

 (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();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值