[C++调试笔记]推动粒子move.cpp

news/2023/11/28 19:09:01
#include <stdio.h>
#include <math.h>
#include "define.h"
void move(particle* ptr, int* numb, double* fiel, double q, double m, double* flux, double* ener_flux)
{int i, j, ip;double tt[3], u[3], tt1, u1[3], u2[3], u3[3], tan_b;	//存放Boris算法中的各速度分量信息double z, ez, az;double l1, l2;double vx, vy, vz;double weig, ener;double cos_thet;							//入射方向与靶板法线方向夹角cos值j = 0;										//统计还在计算区域内的粒子数for (i = 0; i < 2; i++){flux[i] = 0.0;ener_flux[i] = 0.0;}for (i = 0; i < *numb; i++){z = ptr[i].z;vx = ptr[i].vx;vy = ptr[i].vy;vz = ptr[i].vz;weig = ptr[i].weig;/* 求解电场 */ip = (int)(z / dz_plas);l2 = z / dz_plas - ip;l1 = 1.0 - l2;ez = fiel[ip] * l1 + fiel[ip + 1] * l2;az = q * ez / m;/* Boris 算法 J. P. Verboncoeur, Plasma Phys Contr F 47, A231 (2005)  存在磁场情况下tan_b=tan(q*B0*dt/(2.0*m));tt[0]=tan_b*bx;tt[1]=tan_b*by;tt[2]=tan_b*bz;tt1=2.0/(1.0+tt[0]*tt[0]+tt[1]*tt[1]+tt[2]*tt[2]);u[0]=vx;u[1]=vy;u[2]=vz;u1[0]=u[0];u1[1]=u[1];u1[2]=u[2]+0.5*az*dt;u2[0]=u1[0]+(u1[1]*tt[2]-u1[2]*tt[1]);u2[1]=u1[1]+(u1[2]*tt[0]-u1[0]*tt[2]);u2[2]=u1[2]+(u1[0]*tt[1]-u1[1]*tt[0]);u3[0]=u1[0]+tt1*(u2[1]*tt[2]-u2[2]*tt[1]);u3[1]=u1[1]+tt1*(u2[2]*tt[0]-u2[0]*tt[2]);u3[2]=u1[2]+tt1*(u2[0]*tt[1]-u2[1]*tt[0]);u[0]=u3[0];u[1]=u3[1];u[2]=u3[2]+0.5*az*dt;vx=u[0];vy=u[1];vz=u[2];   */vz = vz + az * dt;z = z + vz * dt;/*判断是否到达边界,并采用吸收边界条件 */if ((z > 0.0) && (z < lz_plas)){ptr[j].z = z;ptr[j].vx = vx;ptr[j].vy = vy;ptr[j].vz = vz;ener = 0.5 * m * (vx * vx + vy * vy + vz * vz) / qi;ptr[j].ener = ener;ptr[j].weig = weig;j++;}else if (z <= 0.0){ener = 0.5 * m * (vx * vx + vy * vy + vz * vz) / qi;												//单位eV,,需要进行转换cos_thet = fabs(vz) / sqrt(vx * vx + vy * vy + vz * vz);flux[0] = (flux[0] + weig) * cos_thet;ener_flux[0] = (ener_flux[0] + weig * ener) * cos_thet;}else if (z >= lz_plas){ener = 0.5 * m * (vx * vx + vy * vy + vz * vz) / qi;												//单位eV,,需要进行转换cos_thet = fabs(vz) / sqrt(vx * vx + vy * vy + vz * vz);flux[1] = (flux[1] + weig) * cos_thet;ener_flux[1] = (ener_flux[1] + weig * ener) * cos_thet;}}*numb = j;for (i = 0; i < 2; i++){flux[i] = flux[i] / (area * dt);ener_flux[i] = ener_flux[i] * qi / (area * dt);}
}


http://www.ppmy.cn/news/970605.html

相关文章

[MATLAB粒子模拟笔记]粒子坐标速度初始化

classdef Particle < handlepropertiesx double %粒子坐标vx doublevy doublevz doubleendmethodsfunction objParticle(prm)%Initialtionobj.x zeros(prm.npt,1);obj.vxzeros(prm.npt,1);obj.vyzeros(prm.npt,1);obj.vzzeros(prm.npt,1);%粒子初始化n20;for k1:prm.nsn1…

[一维粒子模拟 version3.6]renormalization

代码renorm.m % % renormalize % function [prm, ren] renorm(prm)ren.x prm.dx;ren.t prm.dt/2;ren.v ren.x/ren.t;ren.e ren.x/(ren.t^2);ren.b 1.0/ren.t;ren.j ren.x/(ren.t^3);ren.r 1.0/(ren.t^2);ren.s (ren.x^2)/(ren.t^4);prm.cv prm.cv / ren.v;prm.wc p…

[MATLAB粒子模拟笔记]归一化输入系数

%********renormalization归一化系数ren.*实际/模拟&#xff08;归一化指的是网格距归一&#xff0c;其他参数并不归一而是等比例变化&#xff09;*********% function [prm,ren]renorm(prm)ren.xprm.dx %网格距系数ren.tprm.dt/2 %时间步长系数 ren.vr…

[一维粒子模拟 version3.6]成功实现初次诊断函数

代码diagnostics_init.m % %初次诊断函数&#xff0c;2021-10-29 % function hdiag diagnostics_initglobal prmglobal flag_exitflag_exit 0;hdiag.flag_rot 0; % for rotate3dhdiag.flag_field 0; % 0: do nothing, 1: save field datahdiag.flag_eng 0; …

智能算法系列之粒子群优化算法

本博客封面由ChatGPT DALLE 2共同创作而成。 文章目录 前言1. 算法思想2. 细节梳理2.1 超参数的选择2.2 一些trick 3. 算法实现3.1 问题场景3.2 python实现 代码仓库&#xff1a;IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第三篇文章&#xff0c;主要介绍粒子群优化…

Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS 论文学习

1. 解决了什么问题&#xff1f; Anchor-based 和 anchor-free 方法的本质差异其实是如何定义正负样本&#xff0c;如果训练过程中它们采用相同的正负样本定义&#xff0c;最终的表现是差不多的。也就是说&#xff0c;如何选取正负样本才是最重要的。 以单阶段 anchor-based 方…

【深度学习论文阅读】四大分类网络之AlexNet

ImageNet Classification with Deep Convolution Nerual Networks 论文原文&#xff1a;ImageNet Classification with Deep Convolutional Neural Networks 1 引言 解决的问题&#xff1a; 提高效率&#xff08;GPU训练&#xff09;&#xff0c;防止过拟合&#xff08;drop…

对比CahtGPT Bard Claude2对中文的理解

对比CahtGPT Bard Claude2对中文的理解 今天简单测试了一下目前这三个很火的模型对中文的理解能力 简单问题 鲁迅和周树人的关系 Bard CahtGPT Claude 介绍一下平凡的世界这本书 Bard CahtGPT

Java类加载过程是怎么样的?

Java类加载过程可以分为加载、验证、准备、解析和初始化五个阶段。下面我会详细解释每个阶段&#xff0c;并给出相应的代码演示。 1.加载(Loading) 加载阶段是将类的字节码文件加载到内存中&#xff0c;并创建一个对应的Class对象。加载阶段由类加载器(ClassLoader)完成。类加载…

C++教程(七)——函数

1 函数 1.1 概述 作用&#xff1a;将一段经常使用的代码封装起来&#xff0c;减少重复代码 一个较大的程序&#xff0c;一般分为若干个程序块&#xff0c;每个模块实现特定的功能。 1.2 函数的定义 函数的定义一般主要有5个步骤&#xff1a; 1、返回值类型 2、函数名 3…

用ChatGPT创作论文

ChatGPT 无法创作长文&#xff0c;但是可以借助他可以理解上下文的能力&#xff0c;通过引导&#xff0c;使得他一步步创造出内容 下文以写一篇《形势与政策》论文为例 我会向你一步步展示如何引导 chatGPT 一步步写出完整的文本 创作地址:https://aipro.boxly.cn/ 第一步:…

可见光遥感目标检测(一)任务概要介绍

前言 本篇开始对遥感图像的目标检测进行介绍&#xff0c;介绍了其目标前景、数据集以及评价指标。 本教程禁止转载。同时&#xff0c;本教程来自知识星球【CV技术指南】更多技术教程&#xff0c;可加入星球学习。 Transformer、目标检测、语义分割交流群 欢迎关注公众号CV技…

资源盘点丨9个经典视觉-语言多模态预训练数据集

在 ChatGPT 引爆社会与学术界的热点后&#xff0c;“大模型”与“多模态”也成为了搜索量攀升的热门词汇。这些体现了大众对人工智能的广泛关注。 事实上&#xff0c;人工智能的进步离不开深度学习方法在各个具体任务上的进展。其中&#xff0c;尤其是预训练任务的方法&#x…

巴黎时装周儿童单元上海站圆满落幕,代言人陈沫含亮相并献上精彩走秀

3月18日&#xff0c;巴黎时装周儿童单元上海站在上海宝华喜来登酒店圆满落幕。巴黎时装周儿童单元&#xff08;又名&#xff1a;巴黎儿童时装周&#xff09;由巴黎高定协会(Paris advanced customization Association,PACA)及法国视听艺术协会&#xff08;Association franaise…

ChatGPT大浪潮下,AIGC已经开始改造时尚行业了

来自&#xff1a;机器之心 进NLP群—>加入NLP交流群 AIGC 这股风&#xff0c;吹到了时尚行业&#xff0c;会带来哪些生产力革新&#xff1f; 上线五天&#xff0c;用户破百万&#xff0c;两个月突破 1 亿...... 这是科技圈 “顶流” ChatGPT 的上线战绩&#xff0c;随之引发…

前端学习——JS进阶 (Day3)

编程思想 面向过程编程 面向对象编程 (oop) 构造函数 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

原封不动-做个chatGPT的搬运工

Go 和 C 各有自己的优点&#xff1a; Go&#xff1a; 简洁易学&#xff1a;Go 语法简单&#xff0c;易于学习。 高效编译&#xff1a;Go 编译代码速度快&#xff0c;链接速度快。 并发支持&#xff1a;Go 提供了方便的并发模型&#xff0c;便于构建高效的多任务系统。 垃圾回收…

比较一下youbot和chatgpt相关技术的异同

Youbot和ChatGPT是两种不同的技术&#xff0c;应用领域和功能也不同。 Youbot是一种机器人技术&#xff0c;是一种用于工业自动化和服务机器人的平台。Youbot具有多个传感器和执行器&#xff0c;可以执行多种任务&#xff0c;如搬运、装配、清洁、安全监测等。Youbot需要通过程…

chatgpt赋能python:Python实现反向代理以提高网站SEO

Python实现反向代理以提高网站SEO 随着互联网的发展&#xff0c;搜索引擎优化(SEO)变得越来越重要。反向代理是一种可行的方法&#xff0c;可提高SEO排名。在本文中&#xff0c;我们将讨论如何使用Python实现反向代理以提高网站的SEO。 什么是反向代理&#xff1f; 反向代理…
最新文章