⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h_abc_iter.c

📁 FDTD 模拟 天线 包含 近场-远场 外推程序(时谐场)
💻 C
字号:
/*----------------------------------------
  
   The Iteration Formulae of H Component

    at the absorbing boundary condition

*/

# include "H_ABc_Iter.h"

void H_Up_Iter(MODULE *pModule,double ****Hz)
{

  int i,j,N_k_End;
  int NHzx,NHzy,NHzz;

  double tmp,er,vel;

  NHzx=Nx;   NHzy=Ny;  NHzz=Nz+1;

  er=pModule->pPermit[pModule->nLayerNum-1];
  vel=C/sqrt(er);

  tmp=(vel*dt-dhz)/(vel*dt+dhz);
  N_k_End=pModule->pLayer[pModule->nLayerNum-1].z_end;

     switch(pModule->nSurf[0])
     {
       case 0:  /* It means that Up Plane is electric wall */

         for(i=0;i<NHzx;i++)
          {
            for(j=0;j<NHzy;j++)
              {
                Hz[1][i][j][N_k_End]=0.0;
              }
           }
           
            break;

          default:  /* G.Mur. First Order */

            for(i=0; i<NHzx; i++)
              {
                 for(j=0;j<NHzy; j++)
                  {
                        
      Hz[1][i][j][N_k_End]=Hz[0][i][j][N_k_End-1]+
                       tmp*(Hz[1][i][j][N_k_End-1]-Hz[0][i][j][N_k_End]); 

                   }
               }
             
             break;

         }  

}



void H_Down_Iter(MODULE *pModule, double ****Hz)
{

  int i,j;
  int NHzx,NHzy,NHzz;

  double tmp,er,vel;

  NHzx=Nx;   NHzy=Ny;  NHzz=Nz+1;

  er=pModule->pPermit[0];
  vel=C/sqrt(er);

  tmp=(vel*dt-dhz)/(vel*dt+dhz);


     switch(pModule->nSurf[1])
     {
       case 0:  /* It means that Down Plane is electric wall */

         for(i=0;i<NHzx;i++)
          {
            for(j=0;j<NHzy;j++)
              {
                Hz[1][i][j][0]=0.0;
              }
           }
           
            break;

          default:  /* G.Mur. First Order */

            for(i=0; i<NHzx; i++)
              {
                 for(j=0;j<NHzy; j++)
                  {
                        
                                  
           Hz[1][i][j][0]=Hz[0][i][j][1]+tmp*(Hz[1][i][j][1]-Hz[0][i][j][0]); 

                   }
               }
             
             break;

         }  

}


void H_Front_Iter(MODULE *pModule, double ****Hx)
{
  int j,k,l;

  int NHxx,NHxy,NHxz;

  double tmp,er,vel;

  NHxx=Nx+1; NHxy=Ny;   NHxz=Nz;

  /* Iteration Formulae of Hx Points */

   for(l=0;l<pModule->nLayerNum; l++)
    {
      er=pModule->pPermit[l];
      vel=C/sqrt(er);  
      tmp=(vel*dt-dhx)/(vel*dt+dhx);     

      for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end; k++)
        {
          for(j=0;j<NHxy;j++)
           {
               
         Hx[1][NHxx-1][j][k]=Hx[0][NHxx-2][j][k]+
                        tmp*(Hx[1][NHxx-2][j][k]-Hx[0][NHxx-1][j][k]);

            }
        }
    }               

         
}             
 

void H_Back_Iter(MODULE *pModule, double ****Hx)
{
  int j,k,l;

  int NHxx,NHxy,NHxz;

  double tmp,er,vel;

  NHxx=Nx+1; NHxy=Ny;   NHxz=Nz;

  /* Iteration Formulae of Hx Points */

   for(l=0;l<pModule->nLayerNum; l++)
    {
      er=pModule->pPermit[l];
      vel=C/sqrt(er);  
      tmp=(vel*dt-dhx)/(vel*dt+dhx);     

      for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end; k++)
        {
          for(j=0;j<NHxy;j++)
           {
               
         Hx[1][0][j][k]=Hx[0][1][j][k]+
                        tmp*(Hx[1][1][j][k]-Hx[0][0][j][k]);

            }
        }
    }               

}              


void HMur_Left_Iter(MODULE *pModule,double ****Hy)
{

   int i,k,l;

   int NHyx,NHyy,NHyz;

   double tmp,vel,er;

   NHyx=Nx;     NHyy=Ny+1;    NHyz=Nz;


   /* Iteration Formulae of Hy Points  */

      er=0.5*(pModule->pPermit[0]+pModule->pPermit[1]);

      er=1.95; 

      vel=C/sqrt(er);  
      tmp=(vel*dt-dhy)/(vel*dt+dhy); 


   for(l=0;l<pModule->nLayerNum; l++)
    {
    

      for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end; k++)
        {
          for(i=0;i<NHyx;i++)
           {
               
         Hy[1][i][0][k]=Hy[0][i][1][k]+
                        tmp*(Hy[1][i][1][k]-Hy[0][i][0][k]);

            }
        }
    }               

}

void HMur_Right_Iter(MODULE *pModule,double ****Hy)
{

   int i,k,l;

   int NHyx,NHyy,NHyz;
   double tmp,vel,er;

   NHyx=Nx;     NHyy=Ny+1;    NHyz=Nz;

   /* Iteration Formulae of Hy Points  */


      er=0.5*(pModule->pPermit[0]+pModule->pPermit[1]);
      er=1.95;


      vel=C/sqrt(er);  
      tmp=(vel*dt-dhy)/(vel*dt+dhy); 


   for(l=0;l<pModule->nLayerNum; l++)
    {
    

      for(k=pModule->pLayer[l].z_start+1; k<pModule->pLayer[l].z_end; k++)
        {
          for(i=0;i<NHyx;i++)
           {
               
         Hy[1][i][NHyy-1][k]=Hy[0][i][NHyy-2][k]+
                        tmp*(Hy[1][i][NHyy-2][k]-Hy[0][i][NHyy-1][k]);

            }
        }
    }               

}




/*
   
2th Order Dispersive Absorbing Boundary Condition

*/

void H_Left_Iter(MODULE *pModule,double ****Hy,double ***pLH_Y)
{

   int i,k;

   int NHyx,NHyy,NHyz;

   double v1,v2,gama1,gama2;

   v1=C/sqrt(erff1);  v2=C/sqrt(erff2);

   gama1=(dhy-v1*dt)/(v1*dt+dhy); gama2=(dhy-v2*dt)/(v2*dt+dhy);


   NHyx=Nx;     NHyy=Ny+1;    NHyz=Nz;


   /* Iteration Formulae of Hy Points  */

    for(i=0; i<NHyx; i++)
     {
       for(k=0;k<NHyz; k++)
        {
          
      Hy[1][i][0][k]=2.0*Hy[0][i][1][k]-pLH_Y[2][i][k]+(gama1+gama2)*
                     (Hy[0][i][0][k]-Hy[1][i][1][k]-pLH_Y[1][i][k]
                      +Hy[0][i][2][k])-gama1*gama2*(pLH_Y[0][i][k]-2.0*
                       Hy[0][i][1][k]+Hy[1][i][2][k]);
         }
      } 
  

}


     
void H_Right_Iter(MODULE *pModule,double ****Hy,double ***pRH_Y)
{

   int i,k;

   int NHyx,NHyy,NHyz;

   double v1,v2,gama1,gama2;

   v1=C/sqrt(erff1);  v2=C/sqrt(erff2);

   gama1=(dhy-v1*dt)/(v1*dt+dhy);  gama2=(dhy-v2*dt)/(v2*dt+dhy);


   NHyx=Nx;     NHyy=Ny+1;    NHyz=Nz;


   /* Iteration Formulae of Hy Points  */

    for(i=0; i<NHyx; i++)
     {
       for(k=0; k<NHyz; k++)
        {
          
      Hy[1][i][NHyy-1][k]=2.0*Hy[0][i][NHyy-2][k]-pRH_Y[2][i][k]+(gama1+gama2)*
                     (Hy[0][i][NHyy-1][k]-Hy[1][i][NHyy-2][k]-pRH_Y[1][i][k]
                      +Hy[0][i][NHyy-3][k])-gama1*gama2*(pRH_Y[0][i][k]-2.0*
                       Hy[0][i][NHyy-2][k]+Hy[1][i][NHyy-3][k]);
         }
      } 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -