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

📄 util.c

📁 三维矢量有限元-矩量法电磁场分析程序。 EMAP5 is a full-wave electromagnetic field solver that combines the method of m
💻 C
字号:

/*****************************************************************************
 * The following functions are provided to support 3D vector operations      *
 * in the (x, y, z) Cartesian system. All vectors are of length of 3, and    *
 * store  the x, y, and z coordinates.					           *
 *									                       *
 * Authors:  Dr. Mohammad W. Ali,   Yun  Ji,  Dr. Todd. H. Hubing            *
 * Version:  1.1							                       *
 * Last updated:  Dec 16, 1998   				                       *
 *****************************************************************************/


/*  prototype definition */

void    VTXadd(double *, double *, double *);
void    VTXadd2(double *, double *, double *, double *);
void    VTXcross(double *,double *,double *);
void    VTXcross1(int, int, double [][3], double *);
double  VTXdot(double *, double *);
double  VTXmag(double *, double *);
void    VTXsub(double *, double *, double *);
void    VTXsub1(int ,int ,double [][3], double *);




/****************************************************************************
Prototype:     void    VTXadd(double *Buff1, double *Buff2, double *Buff) 
Description:    To add vector Buff1 and Buff2, put result to vector Buff 
Input value: 
    double *Buff1, *Buff2, *Buff --- three vectors. 
Return value: none 
*****************************************************************************/
void VTXadd(double *Buff1, double *Buff2, double *Buff)
{
    int Count_j;

    for(Count_j=0;Count_j<=2;Count_j++)
        Buff[Count_j] = Buff1[Count_j]+Buff2[Count_j];

}
 
 
/*****************************************************************************
Prototype:    void    VTXadd2(double *Buff1, double *Buff2, double *Buff3, 
                              double *Buff ) 
Description:  To add vector Buff1,Buff2 and Buff3, put result to vector Buff. 
Input value: 
    double *Buff1, *Buff2, *Buff3, *Buff  ---- four vectors 
Return value:     none  
*****************************************************************************/
void VTXadd2(double *Buff1, double *Buff2, double *Buff3, double *Buff)
{
    int Count_j;

    for(Count_j=0;Count_j<=2;Count_j++)
        Buff[Count_j] = Buff1[Count_j]+Buff2[Count_j]+Buff3[Count_j];
}
 


/******************************************************************************
Prototype:    void    VTXcross(double *Buff1, double *Buff2, double *Buff) 
Description:  To get the cross product of vector Buff1 and Buff2, store the 
    results in vector Buff.  If Buff1=(x1, y1, z1), Buff2=(x2, y2, z2),
    Buff= (y1z2-y2z1, z1x2-z2x1, x1y2-x2y1) 
Input value: 
    double *Buff1, *Buff2, *Buff ---three vectors 
Return value:     none 
******************************************************************************/
void VTXcross(double *Buff1, double *Buff2, double *Buff)
{
    Buff[0] = Buff1[1]*Buff2[2] - Buff2[1]*Buff1[2];
    Buff[1] = Buff1[2]*Buff2[0] - Buff2[2]*Buff1[0];
    Buff[2] = Buff1[0]*Buff2[1] - Buff2[0]*Buff1[1];
}
 
 

/*****************************************************************************
Prototype:   void   VTXcross1(int j, int k, double Buff[][3], double *Buff1) 
Description:  To get the cross product of two vectors Buff[j] and Buff[k],
              store the results in Buff1. 
Input value: 
    int j, k --- row index of the two vectors 
    double **Buff --- a vector array. Buff[i] & Buff[j] are two vectors 
    double *Buff1 --- where to store the results. 
Return value:     none  
*****************************************************************************/
void VTXcross1(int Count_j, int Count_k, double Buff[][3], double *Buff1)
{
    Buff1[0]=Buff[Count_j][1]*Buff[Count_k][2]-Buff[Count_k][1]*Buff[Count_j][2];
    Buff1[1]=Buff[Count_j][2]*Buff[Count_k][0]-Buff[Count_k][2]*Buff[Count_j][0];
    Buff1[2]=Buff[Count_j][0]*Buff[Count_k][1]-Buff[Count_k][0]*Buff[Count_j][1];
}



/*****************************************************************************
Prototype:    double    VTXdot( double *Buff1, double *Buff2) 
Description:     To get the dot product of two vectors Buff1 and Buff2. 
Input value:     double *Buff1, * Buff2 --- two vectors 
Return value:     If Buff1=(x1,y1, z1), Buff2=(x2, y2, z2), 
                      return (x1x2+y1y2+z1z2) 
*****************************************************************************/
double VTXdot(double *Buff1, double *Buff2)
{
    double Value;

    Value = Buff1[0]*Buff2[0] + Buff1[1]*Buff2[1] + Buff1[2]*Buff2[2];
    return Value;
}


 
/*****************************************************************************
Prototype:     double    VTXmag(double *Buff1, double *Buff2) 
Description:    To  return the Euclid distance between two vectors. 
Input value: 
    double *Buff1, *Buff2 --- two vectors 
Return value:  If Buff1=(x1,y1, z1), Buff2=(x2, y2, z2), 
               return sqrt( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ).  *****************************************************************************/
double VTXmag(double *Buff1, double *Buff2)
{
    double Value,ValueX,ValueY,ValueZ;

    ValueX = Buff1[0] - Buff2[0];
    ValueY = Buff1[1] - Buff2[1];
    ValueZ = Buff1[2] - Buff2[2];
    Value  = sqrt(ValueX*ValueX + ValueY*ValueY + ValueZ*ValueZ);

    return Value;
}


/*****************************************************************************
Prototype:    void    VTXsub( double *Buff1, double *Buff2, double *Buff) 
Description:     To subtract vector Buff2 from vector Buff1, put 
                 the results in vector Buff 
Input value: 
    double *Buff, *Buff1, *Buff2 --- three vectors. 
Return value:    none 
*****************************************************************************/
void VTXsub(double *Buff1, double *Buff2, double *Buff)
{
    int Count_j;

    for(Count_j=0;Count_j<=2;Count_j++)
        Buff[Count_j] = Buff1[Count_j]-Buff2[Count_j];
}
 


/*****************************************************************************
Prototype:    void    VTXsub1(int row_i, int row_k, double Buff[ ][3], 
                              double *Buff1) 
Description:    To subtract row_k from row_i in vector array Buff[][3], 
                store result in Buff1 
Input value: 
    int row_i, row_k --- row number 
    double *Buff[3] --- a vector array, each element is a vector. 
    double  *Buff1 --- where to store the results 
Return value:     none 
*****************************************************************************/
void VTXsub1(int Count_i,int Count_k,double Buff[][3],double *Buff1)
{
    int Count_j;

    for(Count_j=0;Count_j<=2;Count_j++)
        Buff1[Count_j] = Buff[Count_i][Count_j]-Buff[Count_k][Count_j];
}

⌨️ 快捷键说明

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