一个非常简单的石墨烯模型构建,可以做一些小的分子动力学模拟。六边形模型很容易构造,关键是处理周期边界上的原子。可供物理学,材料学方面的本科生和硕士低年级参考。

效果图:

头文件head.h:

#define N 40 //40个原子
#define dx 2.4595121  //水平方向上两个原子的距离
#define dy 0.71
#define bd 1.42 //键长
#define bds 2.0164void lattic(double c[2][N]);struct nearest  //与一个原子相邻的三个原子
{int p;int n1;int n2;int n3;
};

晶体模型构造:

#include"head.h"void lattic(double c[2][N])
{int i, j, m, k, l;int q, w, e, r, t;int cir;int ii = 0;int jj = 0;/*生成x坐标*/for (m = 0; m < 2; m++){for (i = 0; i < 2; i++){c[0][ii] = 0;for (j = 0; j < 5; j++){c[0][ii + 1] = c[0][ii] + dx;ii++;}}for (k = 0; k < 2; k++){c[0][ii] = dx / 2;for (l = 0; l < 5; l++){c[0][ii + 1] = c[0][ii] + dx;ii++;}}}/*生成y坐标*/for (q = 0; q < 5; q++){c[1][q] = 0;}e = 1;jj = 5;for (w = 0; w < N / 5 - 1; w++){if (0 != e % 2){for (r = 0; r < 5; r++){c[1][jj] = c[1][jj - 5] + bd;jj++;}}else{for (t = 0; t < 5; t++){c[1][jj] = c[1][jj - 5] + dy;jj++;}}e++;}
}

最后加上main函数:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include"head.h"double sq(double x1, double x2, double y1, double y2)
{return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}void main()
{double c[2][N];double bc[2][20];double con[2][N+20];int qw,er;int i,j=0;int ii;int jj;int q,w;int nc1,nc2,nc3;lattic(c); double dis;int store[3];int kk;int op;int te;struct nearest near3[N];for (i = 0; i < N; i++){if (c[0][i] == 0)  //left-->right{bc[0][j] = 5 * dx;bc[1][j] = c[1][i];j++;}if (c[0][i] >10) //right-->left{bc[0][j] = 0 - dx/2;bc[1][j] = c[1][i];j++;}if (c[1][i] == 0) //bottom-->top{bc[0][j] = c[0][i];bc[1][j] = (bd+dy)*4;j++;}if (c[1][i] >6.60 ) //top-->bottom{bc[0][j] = c[0][i];bc[1][j] = 0-dy;j++;}}bc[0][18] = -dx/2;bc[1][18] = -dy;bc[0][19] = 5 * dx;bc[1][19] = (bd + dy) * 4;/*put all points in a array*/for(qw=0;qw<N;qw++){con[0][qw]=c[0][qw];con[1][qw]=c[1][qw];}for(er=N;er<N+20;er++){con[0][er]=bc[0][er-N];con[1][er]=bc[1][er-N];}/*for(q = 0; q < N+20; q++){    printf("%lf\t%lf\n",con[0][q],con[1][q]);}*//*the nearest 3 atoms around a atoms*/for (q = 0; q < N; q++){kk=0;for (w = 0; w < N+20; w++){if ((c[0][q] == con[0][w]) && (c[1][q] == con[1][w])) continue; dis = sq(c[0][q], con[0][w], c[1][q], con[1][w]);if(dis<2.1) {store[kk]=w;kk++;}}              for(op=0;op<3;op++){  if(c[0][q]==con[0][store[op]]) near3[q].n1=store[op];   /*store bonds information*/if(c[0][q]> con[0][store[op]]) near3[q].n2=store[op];if(c[0][q]< con[0][store[op]]) near3[q].n3=store[op];}}c[0][11]=5.0;c[1][11]=2.8;c[0][12]=7.4;c[1][12]=2.8;for(te=0;te<N;te++){    near3[te].p=te;printf("%lf\t%lf\n",c[0][near3[te].p],c[1][near3[te].p]);        /*ouput the data for plot*/printf("%lf\t%lf\n",con[0][near3[te].n1],con[1][near3[te].n1]);printf("\n");printf("%lf\t%lf\n",c[0][near3[te].p],c[1][near3[te].p]);printf("%lf\t%lf\n",con[0][near3[te].n2],con[1][near3[te].n2]);printf("\n");printf("%lf\t%lf\n",c[0][near3[te].p],c[1][near3[te].p]);printf("%lf\t%lf\n",con[0][near3[te].n3],con[1][near3[te].n3]);printf("\n");}
}

用C语言构建简单的石墨烯六边形模型(附带边界条件)相关推荐

  1. Linux守护进程service Daemon 【C语言构建简单的守护进程】

    Linux Daemon Writing HOWTO 这里视频讲的很清楚 牛客网-c/C++Linux课程-守护进程 int main() {// 1.创建子进程,退出父进程pid_t pid = f ...

  2. R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型

    R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...

  3. antlr idea 入门_ANTLR入门:构建简单的表达语言

    antlr idea 入门 这是该系列的第一篇文章. 本系列的目的是描述如何创建有用的语言和所有支持工具. 在本文中,我们将开始研究一种非常简单的表达语言. 我们将在语言沙箱中构建它,因此我们将其称为 ...

  4. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用attributes函数查看线性回归模型的属性信息、获取模型拟合对应的残差值residuals

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用attributes函数查看线性回归模型的属性信息.获取模型拟合对应的残差值residuals 目录

  5. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、添加拟合值点和实际数据点之间的线段表示残差大小、col参数自定义设置

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.添加拟合

  6. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.可视化残差与拟合值之间的散点图来看残差的分布模式 目录

  7. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、计算残差和和残差平方和

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.计算残差和和残差平方和 目录

  8. R语言lm函数构建简单线性回归(建立线性回归模型)、拟合回归直线、通过方差分析按变异的来源把结果变量的自由度、平方和、平均平方和进行分解、使用回归平方和与总的平方和计算调整R方指标(调整后的决定系数)

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.通过方差分析按变异的来源把结果变量的自由度.平方和.

  9. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、可视化散点图并添加简单线性回归直线、添加模型拟合值数据点、自定义pch参数设置数据点形式

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.可视化散点图并添加简单线性回归直线.添加模型拟合值数据点.自定义pch参数设置数据点形式 目录

最新文章

  1. jquery ajax中使用jsonp的限制[转]
  2. [转]ASP.NET Core基本原理(11)-管理应用程序状态
  3. React with Webpack - 2: css 处理
  4. 扩展jquery scroll事件,支持 scroll start 和 scroll stop
  5. 已经发车的票还能取出来吗_网上预订汽车票不知道怎么退票?
  6. 推荐一个用Flutter写的仿网易云音乐项目(已开源)
  7. paip.Log4j配置不起作用的解决
  8. SVPWM算法原理及详解
  9. Python优化算法07——布谷鸟搜索算法
  10. 简述 矩阵-DirectX 原理,并详解世界坐标转屏幕坐标,附C++实现。
  11. N、NP、NPC问题分析
  12. JAVA程序员工作常用英语
  13. Android 获取照相机图片或本地图片
  14. 用PPT作数模论文图片的方法与技巧
  15. T2-小度养小猫(贪心)
  16. 财经APP富途牛牛商业模式分析
  17. 关于阅读论文的一些感想
  18. 理解这篇分布式事务文章,可以做到吊打面试官
  19. TCGA数据库的利用(二)—— 数据处理
  20. 小程序中将lees转成wxss

热门文章

  1. ice storm暴风雪加盟_暴风雪Storm VR中文版-暴风雪VR下载 VR版--pc6下载站
  2. r6034 an application has made an......解决办法
  3. 阿里巴巴校招笔试题10.8
  4. 微信小程序实现俄罗斯方块
  5. 横跨欧亚大陆的城市-----★美丽的伊斯坦布尔★游记
  6. linux离线安装Fastdfs
  7. 【iMessage苹果源码家庭推】tils扩大软件安装大概释放事变是由程序员筑造的,很轻易发生MemoryLeak控制
  8. 直观理解神经网络和感知机
  9. 人形机器人火出圈!OpenAI领投挪威人形机器人公司“1X”
  10. hdu5338 ZZX and Permutations