没有合适的资源?快使用搜索试试~ 我知道了~
field.pdf
需积分: 0 0 下载量 61 浏览量
2023-11-02
11:00:07
上传
评论
收藏 158KB PDF 举报
温馨提示
试读
12页
field.pdf
资源推荐
资源详情
资源评论
#include <math.h>
#include <time.h>
#include "nrutil.h"
#include "someutil.h"
#include "glob_streamer.h"
static void ProcBoundary (void); // calculate the potential at boundary points
// [Liu and Pasko, J. Phys. D: Appl. Phys., 2006]
static void ProcSource (void); // form the source term for SOR iteration
static void Sor (void);
double Elliptic1(double k); // this is for calculating boundary potentials
void solveField (int id)
{
int iz, ir;
ProcSource ();
// debug the output time
// endTime = clock();
// elapsed = (endTime-startTime)/CLOCKS_PER_SEC;
// printf("Execution Time for ProcSource: %f",elapsed);
// id determines whether update boundary condition or not
if (!id) {
//if(currStep == imodV) {
ProcBoundary ();
if (currStep <= 20)
imodV += 1;
else
imodV=imodV+stepV;
//}
}
命名头⽂件
静态函数的声明,该函数名为ProBoundary,没有参数,没有返回值。
作⽤:计算边界点上的电势。
作⽤:⽣成⽤于SOR(⼀种求解线性⽅程组的⽅法)迭代的源项。
可能⽤于执⾏SOR迭代⽅法。
作⽤:计算边界电势时调⽤的椭圆函数
记录执⾏时间
如果id不等于0,那么⼀下代码将被跳过,否则执⾏以下操作。
这个函数的功能是计算边界点上的电势。这通常是在计
算电场分布时需要更新边界条件的情况下调⽤的。
步⻓ 20步输出⼀次
Sor();
CylindricalGradient(E.phi, pErnode, pEznode, gd.r, gd.z, nr, nz, 0, 0, pEr, pEz,
g.r, g.z, z0, Rsph);
for (iz = 1; iz <= nz; iz++)
for (ir = 1; ir <= nr; ir++) {
if (g.r[ir]*g.r[ir]+(g.z[iz]-z0)*(g.z[iz]-z0)>Rsph*Rsph){
pErnode[iz][ir] = -pErnode[iz][ir];
pEznode[iz][ir] = -pEznode[iz][ir];
pEnode [iz][ir] = sqrt (pErnode[iz][ir] * pErnode[iz][ir] +
pEznode[iz][ir] *
pEznode[iz][ir]);
if (ir != nr)
pEr[iz][ir] = -pEr[iz][ir];
if (iz != nz)
pEz[iz][ir] = -pEz[iz][ir];
if (pEnode[iz][ir]>=0.)
pEnode[iz][ir]=pEnode[iz][ir];
else
nrerror ("Error in solvefield, pEnode is not numuber. \n");
}
else {
pEnode[iz][ir] = 0.;
pErnode[iz][ir] =0.;
pEznode[iz][ir] =0.;
// pEr[iz][ir] =0.;
// pEz[iz][ir] =0.;
}
}
}
static void ProcSource (void)
{
int iz, ir;
double tmp, deltar2, deltaz2;
dnorms = 0;
for (iz = 2; iz <= nz - 1; iz++) {
可能是执⾏sor迭代⽅法的地⽅,⽤于解决电场分布的问题。
计算某些梯度值。与电场分布有关,这个函数可能是电场模拟的⼀部分,⽤于更新电场
deltaz2 = gd.z[iz] + gd.z[iz - 1];
for (ir = 1; ir <= nr - 1; ir++) {
if (g.r[ir]*g.r[ir]+(g.z[iz]-z0)*(g.z[iz]-z0)>Rsph*Rsph){
if (ir != 1) {
deltar2 = gd.r[ir] + gd.r[ir - 1];
tmp = -2./deltar2/gd.r[ir]-2./deltar2/gd.r[ir-1]-
2./deltaz2/gd.z[iz]-2./deltaz2/gd.z[iz-1];
} else
tmp =
-4./gd.r[ir]/gd.r[ir]-2./deltaz2/gd.z[iz]-2./deltaz2/gd.z[iz-1];
if (pnp[iz][ir]>=0)
pnp[iz][ir]=pnp[iz][ir];
else if (pnp[iz][ir]<0. )
nrerror ("Error in procboundary, pnp is negative. \n");
else
nrerror ("Error in procboundary, pnp is not a numuber. \n");
if (pne[iz][ir]>=0)
pne[iz][ir]=pne[iz][ir];
else if (pne[iz][ir]<0. )
nrerror ("Error in procboundary, pne is negative. \n");
else
nrerror ("Error in procboundary, pne is not a numuber. \n");
if (pnn[iz][ir]>=0)
pnn[iz][ir]=pnn[iz][ir];
else if (pnn[iz][ir]<0. )
nrerror ("Error in procboundary, pnn is negative. \n");
else
nrerror ("Error in procboundary, pnn is not a numuber. \n");
E.srs[iz][ir] = -(pnp[iz][ir] - pne[iz][ir] - pnn[iz][ir]) * (eleCharge
/ epsilon0);
if (E.srs[iz][ir]>=0.||E.srs[iz][ir]<0. )
E.srs[iz][ir]=E.srs[iz][ir];
else
nrerror ("Error in procboundary, E.srs is not numuber. \n");
E.srs[iz][ir] = E.srs[iz][ir]/tmp;
dnorms += E.srs[iz][ir]*E.srs[iz][ir];
剩余11页未读,继续阅读
资源评论
2301_80809427
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Pytorch-pytorch深度学习教程之Tensorboard.zip
- 基于C++和Python开发yolov8-face作为人脸检测器dlib作为人脸识别器的人脸考勤系统源码+项目说明.zip
- Pytorch-pytorch深度学习教程之变分自动编码器.zip
- Pytorch-pytorch深度学习教程之神经风格迁移.zip
- Pytorch-pytorch深度学习教程之深度残差网络.zip
- Pytorch-pytorch深度学习教程之循环神经网络.zip
- Pytorch-pytorch深度学习教程之逻辑回归.zip
- Pytorch-pytorch深度学习教程之双向循环网络.zip
- Pytorch-pytorch深度学习教程之卷积神经网络.zip
- Pytorch-pytorch深度学习教程之前馈神经网络.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功