| 查看: 1863 | 回复: 5 | |||
那年的小艾金虫 (初入文坛)
|
[求助]
F轨道电子云分布 已有1人参与
|
| F轨道的电子云分布应该怎么画,用一些简单的软件可以做么?我想画出非共线情况下的F轨道的电子云分布,有没有大侠会的,望指教一二。还有想问下网络上的一些轨道电子云彩图中对称结构中用的两种颜色是不是区别自旋向上向下的? |
» 猜你喜欢
自荐读博
已经有5人回复
求个博导看看
已经有16人回复
上海工程技术大学张培磊教授团队招收博士生
已经有4人回复
上海工程技术大学【激光智能制造】课题组招收硕士
已经有5人回复
求助院士们,这个如何合成呀
已经有4人回复
临港实验室与上科大联培博士招生1名
已经有9人回复
需要合成515-64-0,50g,能接单的留言
已经有4人回复
写了一篇“相变储能技术在冷库中应用”的论文,论文内容以实验为主,投什么期刊合适?
已经有6人回复
带资进组求博导收留
已经有10人回复
最近几年招的学生写论文不引自己组发的文章
已经有11人回复
» 本主题相关价值贴推荐,对您同样有帮助:
f轨道半充满的比如Gd3+,可以把f电子放到核里面算吗
已经有10人回复
没有Gaussian版权用什么看cube文件里的轨道
已经有6人回复
高斯中的分子轨道MO,NBO计算,以及电子云密度,电子云密度差计算的一些疑问
已经有6人回复
formchk转换chk后只得到文件大小为0的fchk,求解
已经有3人回复
关于H4分子轨道问题
已经有12人回复
无机化学原子轨道f轨道的形状
已经有9人回复
bader电荷布局分析怎么运行啊?
已经有14人回复
分子中电荷变化种种
已经有82人回复
如何用Gaussian view 画轨道能级图?
已经有3人回复
求助-吸电子基团使HOMO降低该如何解释?
已经有5人回复
高斯view怎么打开分子轨道
已经有19人回复
请问有没有做合成橡胶的同学?
已经有15人回复
【求助】求几个自由基、碳正离子及碳负离子的稳定性比较?
已经有11人回复
【zhou2009个人文集】关于HF、H2O的电荷计算
已经有15人回复
【求助】如何采用Matlab绘制电子云密度图
已经有8人回复
2楼2014-01-07 14:22:00
liqizuiyang
木虫 (著名写手)
- 应助: 59 (初中生)
- 金币: 6859.5
- 散金: 261
- 红花: 94
- 帖子: 2093
- 在线: 708.9小时
- 虫号: 2366686
- 注册: 2013-03-21
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
identation: 金币+3, 谢谢交流 2014-01-07 15:08:49
那年的小艾: 金币+10, ★★★很有帮助 2014-01-07 18:53:21
感谢参与,应助指数 +1
identation: 金币+3, 谢谢交流 2014-01-07 15:08:49
那年的小艾: 金币+10, ★★★很有帮助 2014-01-07 18:53:21
|
F轨道实际上是角动量模方算符L^2对应的l=3的本征态波函数。在中心势场(比如氢原子)中,L^2与哈密顿量对易,而在固体或分子中,L^2与哈密顿量不一定对易。一般程序输出的是哈密顿量与某个算符的本征态(对固体为平移算符),对这些本征态无法断定l的取值。 如果是单原子,可以根据氢原子薛定谔方程解析解求出在一系列格点上的波函数值写入cube文件,然后就可以用vesta之类的软件打开看了。 网上的程序给出的电子云图有两种:一种直接输出|n,l,m>,另一种输出|n,l,m>的线性组合。第一种波函数值是复数,作图时给出的是实部或虚部;第二种波函数值是实数,常说的px,py,pz就是这种。这两种情况下颜色一般用来区分波函数值的正负。不是自旋。 |
3楼2014-01-07 15:07:22
liqizuiyang
木虫 (著名写手)
- 应助: 59 (初中生)
- 金币: 6859.5
- 散金: 261
- 红花: 94
- 帖子: 2093
- 在线: 708.9小时
- 虫号: 2366686
- 注册: 2013-03-21
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
【答案】应助回帖
|
这是之前写的一个输出cube格式的程序源代码: /****************************************************************************** This program generates wavefunction for hydrogen-like atoms using analytical solution to Shrodinger's equation. This program requires no command-line parameters, but an input file called orb.inp. This input file must be in the form: --------------------------------------------- H4f2.real.cube // output filename 1 // which part to output, 1 for real, -1 for imaginary 1 // Zval of the nuclea 4 3 2 // n l m 20.0 20.0 20.0 // size of the box, which will be multiplied by 2 0.20 0.20 0.20 // resolution ---------------------------------------------- ******************************************************************************/ #include <stdio.h> #include <math.h> #include <stdlib.h> double factor( int ); double ReNormFactor( int, int, int ); double KummerFunc( int, int, double ); double RadialFunc( int, int, int, double ); double RealSphereHarm( int, int, double, double ); double ImagSphereHarm( int, int, double, double ); int checkinp( int, int, int ); double factor( int n ) { if ( n == 0 ) return 1.0; else{ double y; int i; y = 1.0; for( i = 1; i < n + 1; i ++ ) y = y * (double)(i); return y; } } double ReNormFactor( int Z, int n, int l ) { double A, B, C; A = 2.0 / ( (double)(n*n) * factor(2*l+1)); B = sqrt( factor(n+l) / factor(n-l-1) ); C = sqrt( (double)(Z*Z*Z) ); return A * B * C; } double KummerFunc( int alpha, int gamma, double ita ) { double sum, ck; int k; sum = 1.0; ck = 1.0; for( k = 1; k < -alpha+1; k ++ ) { ck = ck * (double)(alpha+k-1) / (double)(gamma+k-1) * (1.0/(double)(k)); sum = sum+ ck * pow( ita, (double)(k) ); } return sum; } double RadialFunc( int Z, int n, int l, double r ) { double ita, NormFactor, A, B, C; ita = 2.0 * (double)(Z) / (double)(n) * r; NormFactor = ReNormFactor( Z, n, l ); A = exp( -0.5 * ita ); B = pow( ita, (double)(l) ); C = KummerFunc( -n+l+1, 2*l+2, ita ); return NormFactor * A * B * C; } double RealSphereHarm( int l, int m, double theta, double phi ) { if (l == 0) return 2.820947917738782e-1; else if (l == 1) switch(m) { case -1: return 3.454941494713355e-1 * cos(m*phi) * sin(theta); break; case 0: return 4.886025119029199e-1 * cos(m*phi) * cos(theta); break; case 1: return -3.454941494713355e-1 * cos(m*phi) * sin(theta); break; default: return 0.0; break; } else if (l == 2) switch(m) { case -2: return 3.862742020231896e-1 * cos(m*phi) * sin(theta) * sin(theta); break; case -1: return 7.725484040463792e-1 * cos(m*phi) * sin(theta) * cos(theta); break; case 0: return 3.153915652525200e-1 * cos(m*phi) * ( 3.0*cos(theta)*cos(theta) - 1.0 ); break; case 1: return -7.725484040463792e-1 * cos(m*phi) * sin(theta) * cos(theta); break; case 2: return 3.862742020231896e-1 * cos(m*phi) * sin(theta) * sin(theta); break; default: return 0.0; break; } else if (l == 3) switch(m) { case -3: return 4.172238236327841e-1 * cos(m*phi) * sin(theta) * sin(theta) * sin(theta); break; case -2: return 1.021985476433282 * cos(m*phi) * sin(theta) * sin(theta) * cos(theta); break; case -1: return 3.231801841141507e-1 * cos(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break; case 0: return 3.731763325901154e-1 * cos(m*phi) * cos(theta) * ( 5.0*cos(theta)*cos(theta) - 3.0 ); break; case 1: return -3.231801841141507e-1 * cos(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break; case 2: return 1.021985476433282 * cos(m*phi) * sin(theta) * sin(theta) * cos(theta); break; case 3: return -4.172238236327841e-1 * cos(m*phi) * sin(theta) * sin(theta) * sin(theta); break; default: return 0.0; break; } else return 0.0; } double ImagSphereHarm( int l, int m, double theta, double phi ) { if (l == 0) return 0.0; else if (l == 1) switch(m) { case -1: return 3.454941494713355e-1 * sin(m*phi) * sin(theta); break; case 0: return 4.886025119029199e-1 * sin(m*phi) * cos(theta); break; case 1: return -3.454941494713355e-1 * sin(m*phi) * sin(theta); break; default: return 0.0; break; } else if (l == 2) switch(m) { case -2: return 3.862742020231896e-1 * sin(m*phi) * sin(theta) * sin(theta); break; case -1: return 7.725484040463792e-1 * sin(m*phi) * sin(theta) * cos(theta); break; case 0: return 3.153915652525200e-1 * sin(m*phi) * ( 3.0*cos(theta)*cos(theta) - 1.0 ); break; case 1: return -7.725484040463792e-1 * sin(m*phi) * sin(theta) * cos(theta); break; case 2: return 3.862742020231896e-1 * sin(m*phi) * sin(theta) * sin(theta); break; default: return 0.0; break; } else if (l == 3) switch(m) { case -3: return 4.172238236327841e-1 * sin(m*phi) * sin(theta) * sin(theta) * sin(theta); break; case -2: return 1.021985476433282 * sin(m*phi) * sin(theta) * sin(theta) * cos(theta); break; case -1: return 3.231801841141507e-1 * sin(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break; case 0: return 3.731763325901154e-1 * sin(m*phi) * cos(theta) * ( 5.0*cos(theta)*cos(theta) - 3.0 ); break; case 1: return -3.231801841141507e-1 * sin(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break; case 2: return 1.021985476433282 * sin(m*phi) * sin(theta) * sin(theta) * cos(theta); break; case 3: return -4.172238236327841e-1 * sin(m*phi) * sin(theta) * sin(theta) * sin(theta); break; default: return 0.0; break; } else return 0.0; } int checkinp( int l, int m, int flavor ) { if ( l < 0 ) return -1; else if ( l > 3 ) return -2; else if ( m < 0 && -m > l ) return -3; else if ( m >= 0 && m > l ) return -3; else if ( flavor != -1 && flavor != 1 ) return -4; else return 0; } int main( void ) { // these variables are related to orb.inp char cubename[32]; int flavor; int Z; int n, l, m; double xmax, ymax, zmax; double hx, hy, hz; // these variables are related to mesh-info int NGX, NGY, NGZ, NX, NY, NZ; int i, j, k; double orgx, orgy, orgz; double x, y, z, r, theta, phi, gridval; // files used through the program FILE *cube, *inp; // program status int status; // global constant const double PI = 3.14159265358979; // read in 'orb.inp' inp = fopen("orb.inp","r" ;fscanf( inp, "%s\n", &cubename ); fscanf( inp, "%d\n", &flavor ); fscanf( inp, "%d\n", &Z ); fscanf( inp, "%d%d%d\n", &n, &l, &m ); fscanf( inp, "%lf%lf%lf\n", &xmax, &ymax, &zmax ); fscanf( inp, "%lf%lf%lf\n", &hx, &hy, &hz ); fclose( inp ); // check input parameters status = checkinp( l, m, flavor ); if ( status != 0 ) { printf( "\nProgram exited with error code:" ); printf( "%4d\n", status ); printf( "Check your input" ); printf("\n" ;return status; } else { // calculate NGX, NGY, NGZ NGX = (int)(xmax/hx); NGY = (int)(ymax/hy); NGZ = (int)(zmax/hz); // origin of grid orgx = -hx * (NGX - 1) + hx * 0.5; orgy = -hy * (NGY - 1) + hy * 0.5; orgz = -hz * (NGZ - 1) + hz * 0.5; // size of grid NX = 2 * NGX; NY = 2 * NGY; NZ = 2 * NGZ; // open cube file cube = fopen(cubename,"w" ;// write first 2 lines to cube if ( flavor == 1) fprintf( cube, "Real part of atomic orbitals of H-like atoms\n" ;else fprintf( cube, "Imag part of atomic orbitals of H-like atoms\n" ;fprintf( cube, "Generated by programm orb.x\n" ;// write natom and origin of data fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", 1, orgx, orgy, orgz ); // write mesh info fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NX, hx, 0.0, 0.0 ); fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NY, 0.0, hy, 0.0 ); fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NZ, 0.0, 0.0, hz ); // write atoms info fprintf( cube, "%5d%12.6f%12.6f%12.6f%12.6f\n", Z, 1.0*Z, 0.0, 0.0, 0.0 ); // entering main loop if ( flavor == 1 ) { for ( i = 1; i <= NX; i ++ ) for ( j = 1; j <= NY; j ++ ) for( k = 1; k <= NZ; k ++ ) { x = orgx + hx * ( i - 1 ); y = orgy + hy * ( j - 1 ); z = orgz + hz * ( k - 1 ); r = sqrt( x*x + y*y + z*z ); theta = acos( z/r ); if ( y >= 0.0 ) phi = acos( x / sqrt(x*x+y*y) ); else phi = 2.0 * PI - acos( x / sqrt(x*x+y*y) ); gridval = RadialFunc( Z, n, l, r ) * RealSphereHarm( l, m, theta, phi ); fprintf( cube, "%13.5e", gridval ); if ( k == NZ || k%6==0 ) fprintf( cube, "\n" ); } } else { for ( i = 1; i <= NX; i ++ ) for ( j = 1; j <= NY; j ++ ) for( k = 1; k <= NZ; k ++ ) { x = orgx + hx * ( i - 1 ); y = orgy + hy * ( j - 1 ); z = orgz + hz * ( k - 1 ); r = sqrt( x*x + y*y + z*z ); theta = acos( z/r ); if ( y >= 0.0 ) phi = acos( x / sqrt(x*x+y*y) ); else phi = 2.0 * PI - acos( x / sqrt(x*x+y*y) ); gridval = RadialFunc( Z, n, l, r ) * ImagSphereHarm( l, m, theta, phi ); fprintf( cube, "%13.5e", gridval ); if ( k == NZ || k%6==0 ) fprintf( cube, "\n" ); } } fclose(cube); return 0; } } |
4楼2014-01-07 17:38:54
liqizuiyang
木虫 (著名写手)
- 应助: 59 (初中生)
- 金币: 6859.5
- 散金: 261
- 红花: 94
- 帖子: 2093
- 在线: 708.9小时
- 虫号: 2366686
- 注册: 2013-03-21
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
5楼2014-01-07 17:43:00
那年的小艾
金虫 (初入文坛)
- 应助: 0 (幼儿园)
- 金币: 953
- 散金: 10
- 帖子: 49
- 在线: 26.4小时
- 虫号: 1993913
- 注册: 2012-09-11
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
6楼2014-01-07 18:55:30







回复此楼
;
好些代码变表情了,楼主若需要留个邮箱吧。