Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何提高计算编程技巧?_C++ - Fatal编程技术网

C++ 如何提高计算编程技巧?

C++ 如何提高计算编程技巧?,c++,C++,我是一名物理系学生,为电磁波的模拟编写代码。我在这里发布了我的一个代码,我的问题是如何改进我的代码。(不是速度) #包括 #包括 #包括 #包括 使用名称空间std; #定义IE 100 #定义JE 100 #定义KE100 双***alloc3d(内部l、内部m、内部n){ 双精度*数据=新双精度[l*m*n]; 双***数组=新双***[l]; 对于(inti=0;i,我立刻想到三件事 首先,更长、更具描述性的变量名和/或常量 像l、m和n这样的事情不会告诉我有关变量的任何信息 第二,更多的

我是一名物理系学生,为电磁波的模拟编写代码。我在这里发布了我的一个代码,我的问题是如何改进我的代码。(不是速度)

#包括
#包括
#包括
#包括
使用名称空间std;
#定义IE 100
#定义JE 100
#定义KE100
双***alloc3d(内部l、内部m、内部n){
双精度*数据=新双精度[l*m*n];
双***数组=新双***[l];

对于(inti=0;i,我立刻想到三件事

首先,更长、更具描述性的变量名和/或常量

l
m
n
这样的事情不会告诉我有关变量的任何信息

第二,更多的注释。每一个做了重要事情的块都应该有一个注释,在较高的层次上说明它做了什么(不是如何,除了非常一般的情况外,我可以阅读代码来找到它)

第三,我们不缺少函数原型,因此您不必将几乎每一条语句放入
main()
:-)


如果单个函数占用大约50行以上(例如),它可能太长了,应该调用更多的子函数。)

请先用单词来表示变量,而不是用一个或两个字母。我的直觉是,如果遇到这样的代码,我会小心地按原样重命名。或者,如果不可能的话,将其丢弃并重写。

下载现有的像GLM、Eigen、Boost.UBLAS这样的库为您提供矩阵函数


另外,在代码中使用多个想法

我想到的第一个问题是,为什么不使用matlab进行这样的数学模拟

第二,我是一名电气工程专业的学生,因此我对电磁波有着相当的了解。我真的认为,如果我看到模拟电磁波的代码,我至少会识别出它的大致轮廓。但我在你的代码中看不到任何东西能告诉我一些事情。为了改进这一点:

  • 更改您的变量名,有时使用长的变量名可能会令人厌烦,但如果您希望稍后重新阅读代码并进行更改,则完全值得
  • 你真的不应该使用三个指针
  • 要摆脱一些循环,请编写为您执行循环的函数,为这些函数指定一个明确的名称,告诉您它的确切功能。这将清理大部分代码

您可能应该在上问这个问题,并将问题标记为
代码审查
。除此之外,请定义帮助函数以减少复制粘贴。由于没有明确的答案,这完全是离题的。有几条注释:三级指针是否定的,变量名必须是描述性的(否,“数组”或“***sx”不是。“pi”尽管如此,但要对代码进行结构化,使每个函数都适合您的屏幕(或更少),并尽量不要有太多的内存分配(如果您不是经验丰富的程序员,请将其减少到最小)你的代码主要是C。为什么你甚至使用C++ +?亚历克斯或者只是把它放到OP上,当然有资格:这个代码只是一个例子。我使用的矩阵的维数大约是400×400×400。我真的害怕分割错误问题。这些库能用这么大的矩阵来工作吗?注意,对于并行情况,我使用具有维度S的矩阵。例如400*50*400。这些库没有理由不能处理相同大小的矩阵。(对于400x400x400双精度阵列,您只需要512MB内存。应该不会有问题)@ USER 1285 136:它们可能比你更高效。你的C型内存管理比现代C++库更容易失败,它们将有更高效的算法来处理大型矩阵的乘法。我可以用MPI库使用吗?@ DATIMPMMPI是并行PR的消息传递接口库。因为我的编程技巧很低,而且测试这些库对我来说是很困难的。Matlab的问题是它的速度。C++比它快得多。;是我发现的解决分段错误问题的唯一方法。我会对此进行投票,但建议发表评论:如果您觉得您的代码需要一条评论以便于理解,请重写它,以便我可以理解它而无需解释。@sbi,评论告诉您什么,可能为什么,代码告诉您如何操作。实际上,IMO就是这样g、 函数名应该告诉我是什么(
performhyperreduce()
),以及注释(如果需要的话)(是的,我有时也会在代码中添加注释)应该告诉我如何:
//实现Przlbwlszk的第二个超简化算法
。每当我觉得需要添加注释来解释接下来几行的功能时,我会将它们移动到一个适当命名的(内联)函数中。
#include <iostream>
#include <vector>
#include <math.h>
#include <fstream>
using namespace std;

#define IE 100
#define JE 100
#define KE 100
double ***alloc3d(int l, int m, int n) {
double *data = new double [l*m*n];
double ***array = new double **[l];
for (int i=0; i<l; i++) {
    array[i] = new double *[m];
    for (int j=0; j<m; j++) {
        array[i][j] = &(data[(i*m+j)*n]);
    }
}
return array;
}



int main()

{
//////////////////////declartion/////////////////////////////
int const NFREQS=100,ia=7,ja=7,ka=7;
double const pi=3.14159;
int i,j;
double ***gax=alloc3d(IE,JE,KE);
double ***gay=alloc3d(IE,JE,KE);
double ***gaz=alloc3d(IE,JE,KE);
double ***gbx=alloc3d(IE,JE,KE);
double ***gby=alloc3d(IE,JE,KE);
double ***gbz=alloc3d(IE,JE,KE);
double ***dx=alloc3d(IE,JE,KE);
double ***dy=alloc3d(IE,JE,KE);
double ***dz=alloc3d(IE,JE,KE);
double ***ex=alloc3d(IE,JE,KE);
double ***ey=alloc3d(IE,JE,KE);
double ***ez=alloc3d(IE,JE,KE);
double ***sx=alloc3d(IE,JE,KE);
double ***sy=alloc3d(IE,JE,KE);
double ***sz=alloc3d(IE,JE,KE);
double ***hx=alloc3d(IE,JE,KE);
double ***hy=alloc3d(IE,JE,KE);
double ***hz=alloc3d(IE,JE,KE);
double ***ix=alloc3d(IE,JE,KE);
double ***iy=alloc3d(IE,JE,KE);
double ***iz=alloc3d(IE,JE,KE);
double ***idyl=alloc3d(IE,JE,KE);
double ***ihyl=alloc3d(IE,JE,KE);

double*** idxl=new double**[ia];
double*** idxh=new double**[ia];
double*** ihxl=new double**[ia];
double*** ihxh=new double**[ia];
for(i=0;i<ia;i++)
{
    idxl[i]=new double *[JE];
    idxh[i]=new double *[JE];
    ihxl[i]=new double *[JE];
    ihxh[i]=new double *[JE];
    for(j=0;j<JE;j++)
    {
        idxl[i][j]=new double [KE];
        idxh[i][j]=new double [KE];
        ihxl[i][j]=new double [KE];
        ihxh[i][j]=new double [KE];
    }
}

double***idzl=new double**[IE];
double***idzh=new double**[IE];
double***ihzl=new double**[IE];
double***ihzh=new double**[IE];
for(i=0;i<IE;i++)
{
    idzl[i]=new double *[JE];
    idzh[i]=new double *[JE];
    ihzl[i]=new double *[JE];
    ihzh[i]=new double *[JE];
    for(j=0;j<JE;j++){
        idzl[i][j]=new double [ka];
        idzh[i][j]=new double [ka];
        ihzl[i][j]=new double [ka];
        ihzh[i][j]=new double [ka];
    }
}
double *gi1=new double [IE];
double *gi2=new double [IE];
double *gi3=new double [IE];
double *gj1=new double [JE];
double *gj2=new double [JE];
double *gj3=new double [JE];
double *gk1=new double [KE];
double *gk2=new double [KE];
double *gk3=new double [KE];
double *fi1=new double [IE];
double *fi2=new double [IE];
double *fi3=new double [IE];
double *fj1=new double [JE];
double *fj2=new double [JE];
double *fj3=new double [JE];
double *fk1=new double [KE];
double *fk2=new double [KE];
double *fk3=new double [KE];
int    l,n,m,k,ic,jc,kc,nsteps,numsph,npml,ib,jb,kb,ixh,jyh,kzh,ke,percent;
double xn,xxn,xnum,xd,curl_e,curl_h,freqi,freqf;
double *ez_inc=new double [JE];
double *hx_inc=new double [JE];
double t0,spread,pulse;
double *freq=new double [NFREQS];
double *arg=new double [NFREQS];
double***real_pt=new double**[NFREQS];
double***imag_pt=new double**[NFREQS];
for(m=0;m<NFREQS;m++)
{
    real_pt[m]=new double *[IE];
    imag_pt[m]=new double *[IE];
    for(i=0;i<IE;i++){
        real_pt[m][i]=new double [JE];
        imag_pt[m][i]=new double [JE];
    }
}
double***real_pt_sx=new double**[NFREQS];
double***imag_pt_sx=new double**[NFREQS];
for(m=0;m<NFREQS;m++)
{
    real_pt_sx[m]=new double *[IE];
    imag_pt_sx[m]=new double *[IE];
    for(i=0;i<IE;i++){
        real_pt_sx[m][i]=new double [JE];
        imag_pt_sx[m][i]=new double [JE];
    }
}
double***real_pt_sy=new double**[NFREQS];
double***imag_pt_sy=new double**[NFREQS];
for(m=0;m<NFREQS;m++)
{
    real_pt_sy[m]=new double *[IE];
    imag_pt_sy[m]=new double *[IE];
    for(i=0;i<IE;i++){
        real_pt_sy[m][i]=new double [JE];
        imag_pt_sy[m][i]=new double [JE];
    }
}
double***real_pt_sz=new double**[NFREQS];
double***imag_pt_sz=new double**[NFREQS];
for(m=0;m<NFREQS;m++)
{
    real_pt_sz[m]=new double *[IE];
    imag_pt_sz[m]=new double *[IE];
    for(i=0;i<IE;i++){
        real_pt_sz[m][i]=new double [JE];
        imag_pt_sz[m][i]=new double [JE];
    }
}

double *real_in=new double[NFREQS];
double *imag_in=new double[NFREQS];
double *amp_in=new double[NFREQS];
double *phase_in=new double[NFREQS];
ic=IE/2;
jc=JE/2;
kc=KE/2;
ddx=2e-9;
dt=ddx/6e8;
epsz=8.8e-12;
ib=IE-ia-1;
jb=JE-ja-1;
kb=KE-ka-1;
/////////////////////////////initilization///////////////////////
ez_low_m2=0;
ez_high_m2=0;
ez_low_m1=0;
ez_high_m1=0;
for(j=0;j<JE;j++){
    ez_inc[j]=0.0;
    hx_inc[j]=0.0;
    for(i=0;i<IE;i++){

    }}
for (k=0;k<KE;k++){
    for(j=0;j<JE;j++){
        for(i=0;i<IE;i++){
            ex[i][j][k]=0.0;
            ey[i][j][k]=0.0;
            ez[i][j][k]=0.0;
            sx[i][j][k]=0.0;
            sy[i][j][k]=0.0;
            sz[i][j][k]=0.0;
            ix[i][j][k]=0.0;
            iy[i][j][k]=0.0;
            iz[i][j][k]=0.0;
            dx[i][j][k]=0.0;
            dy[i][j][k]=0.0;
            dz[i][j][k]=0.0;
            hx[i][j][k]=0.0;
            hy[i][j][k]=0.0;
            hz[i][j][k]=0.0;
            gax[i][j][k]=1.0;
            gay[i][j][k]=1.0;
            gaz[i][j][k]=1.0;
            gbx[i][j][k]=0.0;
            gby[i][j][k]=0.0;
            gbz[i][j][k]=0.0;
            idyl[i][j][k]=0.0;
            ihyl[i][j][k]=0.0;
        }}}
for(i=0;i<ia;i++){
    for(j=0;j<JE;j++){
        for(k=0;k<KE;k++){
            idxl[i][j][k]=0.0;
            idxh[i][j][k]=0.0;
            ihxl[i][j][k]=0.0;
            ihxh[i][j][k]=0.0;
        }}}

for(i=0;i<IE;i++){
    for(j=0;j<JE;j++){
        for(k=0;k<ka;k++){
            idzl[i][j][k]=0.0;   
            idzh[i][j][k]=0.0;
            ihzl[i][j][k]=0.0;
            ihzh[i][j][k]=0.0;
        }}}
for(i=0;i<IE;i++){
    gi1[i]=0.0;
    fi1[i]=0.0;
    gi2[i]=1.0;
    fi2[i]=1.0;
    gi3[i]=1.0;
    fi3[i]=1.0;
}
for(j=0;j<JE;j++){
    gj1[j]=0.0;
    fj1[j]=0.0;
    gj2[j]=1.0;
    fj2[j]=1.0;
    gj3[j]=1.0;
    fj3[j]=1.0;
}
for(k=0;k<KE;k++){
    gk1[k]=0.0;
    fk1[k]=0.0;
    gk2[k]=1.0;
    fk2[k]=1.0;
    gk3[k]=1.0;
    fk3[k]=1.0;
}
for(n=0;n<NFREQS;n++){
    real_in[n]=0.0;
    imag_in[n]=0.0;
    amp_in[n]=0.0;
    phase_in[n]=0.0;
    for(j=0;j<JE;j++){
        for(i=0;i<IE;i++){
            real_pt[n][i][j]=0.0;
            imag_pt[n][i][j]=0.0;
            real_pt_sx[n][i][j]=0.0;
            imag_pt_sx[n][i][j]=0.0;
            real_pt_sy[n][i][j]=0.0;
            imag_pt_sy[n][i][j]=0.0;
            real_pt_sz[n][i][j]=0.0;
            imag_pt_sz[n][i][j]=0.0;
        }}}
lambdai=200e-9;
lambdaf=700e-9;
freqi=2e8/lambdai;
freqf=7e8/lambdaf;
for(i=0;i<NFREQS;i++){
    freq[i]=freqi-i*(freqi-freqf)/NFREQS;
}
for(n=0;n<NFREQS;n++){
    arg[n]=2*pi*freq[n]*dt;
}

//////////////////////////antena//////////////////////////

t0=20.0;
spread =6.0;
T=0.0;
cout<<"enter time -->";
cin>>nsteps;
ke=0;
////////////*******************FDTD*******************///////////////////////
for (n=1;n<=nsteps;n++){
    T=T+1;
    percent=T/nsteps*100;
    if (percent>=ke+1) {
        cout<<percent<<"%"<<endl;
    }
    ke=percent;



    /////////////////////source////////////////////
    pulse=exp(-.5*(pow((t0-T)/spread,2.0)));
    ez_inc[3]=pulse;
    //////////////////ABC//////////////////////////////////
    ez_inc[0]=ez_low_m2;
    ez_low_m2=ez_low_m1;
    ez_low_m1=ez_inc[1];
    ez_inc[JE-1]=ez_high_m2;
    ez_high_m2=ez_high_m1;
    ez_high_m1=ez_inc[JE-2];
    //////////////////////////update dx///////////////////////////////
    for(i=1;i<ia;i++){
        for(j=1;j<JE;j++){
            for(k=1;k<KE;k++){
                curl_h=(hz[i][j][k]-hz[i][j-1][k]-hy[i][j][k]+hy[i][j][k-1]);
                idxl[i][j][k]=idxl[i][j][k]+curl_h;
                dx[i][j][k]=x[i][j][k]+gj2[j]*gk2[k]*.5*(curl_h+gi1[i]*idxl[i][j][k]);
            }}}
    for(i=ia;i<=ib;i++){
        for(j=1;j<JE;j++){
            for(k=1;k<KE;k++){
                curl_h=(hz[i][j][k]-hz[i][j-1][k]-hy[i][j][k]+hy[i][j][k-1]);
                dx[i][j][k]=gj3[j]*gk3[k]*dx[i][j][k]+gj2[j]*gk2[k]*.5*curl_h;
            }}}
    for(i=ib+1;i<IE;i++){
        ixh=IE-i-1;
        for(j=1;j<JE;j++){
            for(k=1;k<KE;k++){
                curl_h=(hz[i][j][k]-hz[i][j-1][k]-hy[i][j][k]+hy[i][j][k-1]);
                idxh[ixh][j][k]=idxh[ixh][j][k]+curl_h;
                dx[i][j][k]=dx[i][j][k]+gj2[j]*gk2[k]*.5*(curl_h+gi1[i]*idxh[ixh][j][k]);
            }}}
    /////////////////////////update dy/////////////////////////////////
    for(i=1;i<IE;i++){
        for(j=1;j<JE;j++){
            for(k=1;k<KE;k++){
                curl_h=(hx[i][j][k]-hx[i][j][k-1]-hz[i][j][k]+hz[i-1][j][k]);
                idyl[i][j][k]=idyl[i][j][k]+curl_h;
                dy[i][j][k]=y[i][j][k]+gi2[i]*gk2[k]*.5*(curl_h+gj1[j]*idyl[i][j][k]);
            }}}


    ////////////////////////update dz///////////////////////////////////

    for(i=1;i<IE;i++){
        for(j=1;j<JE;j++){
            for(k=0;k<ka;k++){
                curl_h=(hy[i][j][k]-hy[i-1][j][k]-hx[i][j][k]+hx[i][j-1][k]);
                idzl[i][j][k]=idzl[i][j][k]+curl_h;
                dz[i][j][k]=gi3[i]*gj3[j]*dz[i][j][k]+gi2[i]*gj2[j]*.5*(curl_h+gk1[k]*idzl[i][j][k]);
            }}}
    for(i=1;i<IE;i++){
        for(j=1;j<JE;j++){
            for(k=ka;k<=kb;k++){
                curl_h=(hy[i][j][k]-hy[i-1][j][k]-hx[i][j][k]+hx[i][j-1][k]);
                dz[i][j][k]=gi3[i]*gj3[j];
            }}}
    for(i=1;i<IE;i++){
        for(j=1;j<JE;j++){
            for(k=kb+1;k<KE;k++){
                kzh=KE-k-1;
                curl_h=(hy[i][j][k]-hy[i-1][j][k]-hx[i][j][k]+hx[i][j-1][k]);
                idzh[i][j][kzh]=idzh[i][j][kzh]+curl_h;
                dz[i][j][k]=gi3[i]*gj3[j]*dz[i][j][k]+
            }}}
    ///////////////////////////////<<<<<<<<<incident dz>>>>>>>>>>>>>////////////////////////////

    ////////////////////////////source///////////////////////////

     pulse=exp(-.5*(pow((t0-T)/spread,2.0)));
     dz[ic][jc][kc]=pulse;



    ////////////////////////////////{{{{{{{{{{{update ex,ey,ez}}}}}}}}}}}}///////////////////////
    for(i=1;i<IE-1;i++){
        for(j=1;j<JE-1;j++){
            for(k=1;k<KE-1;k++){
                ex[i][j][k]=gax[i][j][k]*(dx[i][j][k]-ix[i][j][k]);
                ix[i][j][k]=ix[i][j][k]+gbx[i][j][k]*ex[i][j][k];
                ey[i][j][k]=gay[i][j][k]*(dy[i][j][k]-iy[i][j][k]);
                iy[i][j][k]=iy[i][j][k]+gby[i][j][k]*ey[i][j][k];
                ez[i][j][k]=gaz[i][j][k]*(dz[i][j][k]-iz[i][j][k]);
                iz[i][j][k]=iz[i][j][k]+gbz[i][j][k]*ez[i][j][k];
            }}}

    //////////////////////////////update hx///////////////////////////////////
    for(i=0;i<ia;i++){
        for(j=0;j<JE-1;j++){
            for(k=0;k<KE-1;k++){
                curl_e=(ey[i][j][k+1]-ey[i][j][k]-ez[i][j+1][k]+ez[i][j][k]);
                ihxl[i][j][k]=ihxl[i][j][k]+curl_e;
                hx[i][j][k]=fj3[j]*fk3[k]*hx[i][j][k]+fj2[j]*fk2[k]*.5*(curl_e+fi1[i]*ihxl[i][j][k]);
            }}}
    for(i=ia;i<=ib;i++){
        for(j=0;j<JE-1;j++){
            for(k=0;k<KE-1;k++){
                curl_e=(ey[i][j][k+1]-ey[i][j][k]-ez[i][j+1][k]+ez[i][j][k]);
                hx[i][j][k]=.5*curl_e;
            }}}
    for(i=ib+1;i<IE;i++){
        ixh=IE-i-1;
        for(j=0;j<JE-1;j++){
            for(k=0;k<KE-1;k++){
                curl_e=(ey[i][j][k+1]-ey[i][j][k]-ez[i][j+1][k]+ez[i][j][k]);
                ihxh[ixh][j][k]=ihxh[ixh][j][k]+curl_e;
     fj3[j]*fk3[k]*hx[i][j][k]+fj2[j]*fk2[k]*.5*(curl_e+fi1[i]*ihxh[ixh][j][k]);
            }}}
    /////////////////////////////incident hx////////////////////////////////////
    /*for(i=ia;i<=ib;i++){
        for(k=ka;k<=kb;k++){
            hx[i][ja-1][k]=hx[i][ja-1][k]+.5*ez_inc[ja];
            hx[i][jb][k]=hx[i][jb][k]-.5*ez_inc[jb];
        }
    }*/
    //////////////////////////////update hy/////////////////////////////////////
    for(i=0;i<IE-1;i++){
        for(j=0;j<JE;j++){
            for(k=0;k<KE-1;k++){
                curl_e=(ez[i+1][j][k]-ez[i][j][k]-ex[i][j][k+1]+ex[i][j][k]);
                ihyl[i][j][k]=ihyl[i][j][k]+curl_e;
                hy[i][j][k]=fi3[i]*fk3[k]*hy[i][j][k]+fi2[i]*fk2[k]*.5*(curl_e+fj1[j]*ihyl[i][j][k]);
            }}}
    /*for(i=0;i<IE-1;i++){
        for(j=ja;j<=jb;j++){
            for(k=0;k<KE-1;k++){
                curl_e=(ez[i+1][j][k]-ez[i][j][k]-ex[i][j][k+1]+ex[i][j][k]);
                hy[i][j][k]=fi3[i]*fk3[k]*hy[i][j][k]+fi2[i]*fk2[k]*.5*curl_e;
            }}}
    for(i=0;i<IE-1;i++){
        for(j=jb+1;j<JE;j++){
            jyh=JE-j-1;
            for(k=0;k<KE-1;k++){
                curl_e=(ez[i+1][j][k]-ez[i][j][k]-ex[i][j][k+1]+ex[i][j][k]);
                ihyh[i][jyh][k]=ihyh[i][jyh][k]+curl_e;
                hy[i][j][k]=fi3[i]*fk3[k]*hy[i][j][k]+fi2[i]*fk2[k]*.5*(curl_e+fj1[j]*ihyh[i][jyh][k]);
            }}}*/
    /////////////////////////////incident hy////////////////////////////////////
    /*for(j=ja;j<=jb;j++){
        for(k=ka;k<=kb;k++){
            hy[ia-1][j][k]=hy[ia-1][j][k]-.5*ez_inc[j];
            hy[ib][j][k]  =hy[ib][j][k]  +.5*ez_inc[j];
        }
    }*/
    /////////////////////////////update hz////////////////////////////////////////
    for(i=0;i<IE-1;i++){
        for(j=0;j<JE-1;j++){
            for(k=0;k<ka;k++){
                curl_e=(ex[i][j+1][k]-ex[i][j][k]-ey[i+1][j][k]+ey[i][j][k]);
                ihzl[i][j][k]=ihzl[i][j][k]+curl_e;
                hz[i][j][k]=fi3[i]*fj3[j]*hz[i][j][k]+fi2[i]*fj2[j]*.5*         (curl_e+fk1[k]*ihzl[i][j][k]);
            }}}
    for(i=0;i<IE-1;i++){
        for(j=0;j<JE-1;j++){
            for(k=ka;k<=kb;k++){
                curl_e=(ex[i][j+1][k]-ex[i][j][k]-ey[i+1][j][k]+ey[i][j][k]);
                hz[i][j][k]=fi3[i]*fj3[j]*hz[i][j][k]+fi2[i]*fj2[j]*.5*curl_e;
            }}}
    for(i=0;i<IE-1;i++){
        for(j=0;j<JE-1;j++){
            for(k=kb+1;k<KE;k++){
                kzh=KE-k-1;
                curl_e=(ex[i][j+1][k]-ex[i][j][k]-ey[i+1][j][k]+ey[i][j][k]);
                ihzh[i][j][kzh]=ihzh[i][j][kzh]+curl_e;
                hz[i][j][k]=fi3[i]*fj3[j]*hz[i][j][k]+fi2[i]*fj2[j]*.5*(curl_e+fk1[k]*ihzh[i][j][kzh]);
            }}} 

}//********************************END OF FDTD*******************************////////////




}