这个地方在看书的时候有点绕,花了点时间顺了顺思路,大概记一下。
先声明个二维数组:
之所以被绕进去是因为下面两点:
把上面两点合起来看的话,就有:
zippo == &zippo
zippo[0] == &zippo[0][0]
也就是有:
zippo[0] == &zippo[0] //zippo[0]存的是自己的地址??
&zippo[0] == &zippo[0][0] //两个不同值的地址竟然一样??
我就是在这里绕进去了,囧~
自己写了个小函数测试下:
Read More
在C语言中,函数处理数组的时候,传递的是指向数组的指针。被调用函数接受数组指针后通过指针对数组进行操作,但是这样很容易不小心修改了数组本身的数值。这时候,利用const修饰符可以做到保护数组内容的效果。
1
| int sum(const int ar[], int n)
|
这个原型声明是告诉编译器,函数应当吧ar所指向的数组作为一个包含常量数据的数组对待,也就是指针ar是一个常量指针(指向常量的指针)。
之所以在这里记录下这个是用来区分下普通指针和常量指针。
const
关键字可以创建数组常量,指针常量,指向常量的指针。
指针:
普通指针,指向变量的指针
常量指针,指向常量的指针
常量指针可以指向常量和变量,而且被指向的变量的值不能修改;
变量指针只能指向变量。
Read More
上周花了周末的时间完成了动力学模型energy profile的自动作图部分,写这个部分的主要目的是能够更加直观的查看整个动力学模型中的反应的热力学行为,也就是快速的数值可视化,通过做出来的图能够和动力学计算的结果做对比分析,方便查看吸附能、能垒、脱附能等数据。
此部分作图的主要实现是依赖matplotlib
库这一面向对象的作图工具,借助numpy和scipy的数组和插值函数(我自己写写了个小的插值函数)根据输入的反应热力学数据计算出energy profile中的points,进而开启Artist Mode!虽然只是作图但是为了能够做出好看的图以及能够自动显示note等功能,这个类还是写了700行左右的python代码(包括注释和空行)。
Read More
之所以把反应方程式配平拿出来写是因为之前在这段时间写完solver的过程中发现自己还是对动力学的质量作用定理理解的不够深刻,在之前的setup file中的反应方程式我默认的是以已经配平好的基元反应作为输入的,例如
1 2 3 4 5 6 7 8 9 10 11 12
| rxn_expressions = [
'CO_g + *_s -> CO_s', '3H2_g + 6*_s -> 6H_s', 'CO_s + *_s <-> C-O_s + *_s -> C_s + O_s', 'O_s + H_s -> HO_s + *_s', 'HO_s + H_s <-> H-OH_s + *_s -> H2O_g + 2*_s', 'C_s + H_s <-> H-C_s + *_s -> CH_s + *_s', 'CH_s + H_s -> CH2_s + *_s', 'CH2_s + H_s -> CH3_s + *_s', 'CH3_s + H_s -> CH4_g + 2*_s' ]
|
Read More
这部分其实在放假前就开始写了,后面在写的过程中又添加了前面的table_maker和后面的parser的一些修修补补。在这里整体介绍下这个类的一些特性和简要实现过程。
这个类最初的目的还是很简单,就是解析setup file 和 input file把所有的信息全部解析到模型对象中,其中包括模型所必需的一些属性,例如吸附物,过渡态,气体,表面等信息,能量数据,形成能数据等。。。整个类的大概属性和操作在UML图中可以看到,其中包含一个基类ParserBase
类,以及子类CsvParser类,在这里我只写了CsvParser
,可以再扩展写用于其它表格的Parser,例如利用xlrd模块直接操作excel。
解析基元反应方程式:
在KineticModel中已经通过load()方法中遍历执行setup file后的局部变量的方式将setup file加载到了model中成为model对象的属性。在setup file中定义了一个species_definitions
的字典类型变量,用来存储model中所有物种和位点的信息,例如:
1 2 3 4 5 6 7
| 'O_s': {'elements': {'O': 1}, 'formation_energy': 0.597, 'frequencies': [359.5, 393.3, 507.0], 'information': 'None', 'name': 'O', 'site': 's', 'type': 'adsorbate'}
|
Read More
table_maker类本来是没有考虑到最初的模型框架中的,写到parser部分的时候在想可以根据setup file提供的基元反应化学方程式自动生成input file表格,这样方便以后使用本模型的用户在输入能量信息的时候能够根据模型的需求输入相应的能量数据,这样在输入数据的时候就避免了过多的输入或者漏掉数据的情况。
input file 主要形式是表格,其中header包含:
surface_name, site_name, species_name, DFT_energy, formation_energy, frequencies, infomation
surface_name
: 是研究的表面的名字,例如’Pd’; 如果是气体,则为None
site_name
: 是指具体晶面,例如’111’
species_name
: 是指吸附在表面的物种名称,如果是表面则为slab
DFT_energy
: 是DFT计算出的初始能量,后面会对此能量进行处理,计算出generalized formation energy作为动力学计算的输入数据
frequencie
: 振动频率,用于热力学校正,以list的形式写在表格中,数目根据分子的构型3N-5 或者 3N-6个
information
: 数据的参考信息
Read More