The best input is OUTPUT.

2016-03-29
KMCLib中的Interactions

KMCLib中的Interactions

这两天由于一直在学习CMake相关的东西,没有把看的代码及时总结。特地现在补上。
Interaction类可以看作是process相应的集合,他在全局角度操作process。

成员数据

  • std::vector<Process> processes_
    通过构造函数的参数传入,是所有能在lattice上面发生的process对象的集合。

  • std::vector<Process*> process_pointers_
    存放指向processes_中process对象的指针,后面的函数都是在操作这个指针vector。

  • std::vector<std::pair<double,int> > probability_table_
    这里叫做概率列表,其实里面并没有放于概率的数据,其中的pair的第一个entry放的是incremental rate,第二个entry放的是对应这个process能在当前lattice上面发生的位点的总数(也就是他的nSite数)。

  • bool implicit_wildcards_
    是否使用通配符

  • bool use_custom_rates_
    是否使用自定义速率

其他的几个成员数据目前还没有看到具体怎么用,先挖个坑,后面填。

Read More

2016-03-27
关于CMake中添加共享库

关于CMake中添加共享库

这两天学习一下CMake的一点语法,为了以后能使用CMake跨平台构建项目。但是在为target添加共享库的时候,即使我在CMakeLists.txt中使用了LINK_DIRECTORIES()TARGET_LINK_LIBRARIES()

1
2
3
4
5
6
7
ADD_EXECUTABLE(hellomain main.c)
SET(EXECUTABLE_OUTPUT_PATH ${HELLOMAIN_BINARY_DIR}/bin)

INCLUDE_DIRECTORIES(BEFORE /mnt/hgfs/CentOS_code/cmake_practice/t4/zjshao/include/hello)
LINK_DIRECTORIES(/mnt/hgfs/CentOS_code/cmake_practice/t4/zjshao/lib)

TARGET_LINK_LIBRARIES(hellomain libhello.so)

但是在make的时候还是很出现了
1
/usr/bin/ld: cannot find -lhello

Read More

2016-03-25
消除蛋疼的^M

消除蛋疼的^M

在github上面向别人的项目代码pull request的时候遇到了一个蛋疼的问题,问题都在一个字符上面就是^M,我的代码虽然只修改了几行代码,但是使用git diff的时候发现整个文件全部修改了。


原因就是我修改的文件在每一行末尾都新增了一个^M字符,这样就导致每一行都和以前不同diff的时候自然就全部不同了,这样就非常的蛋疼,向别人项目中pull request的时候一整片红色和一整片绿色,别人包括我自己都不知道我到底是修改的哪一部分,感觉像是在捣乱的。。。像这样的pull request人家才不会给我merge呢。


真是太不好意思了,诶…效果就是这蛋疼的下图:

Read More

2016-03-24
KMCLib中的Configuration

KMCLib中的Configuration

这个类由于在之前都有提及到,而且已经针对其中重要的成员函数进行了分析,在这里就不多扯了。
总之这个类是独立于晶格LatticeMap类的类型类,我还剩听佩服作者这样抽象的,这样如果后面我想加入多位点的话,也可以独立于晶格之外描述多位点的类,这样实现起来耦合量可以尽量减小。

其实这里我一直有个疑问,不知道看完全部代码的时候能不能找到答案,就是在performProcess()函数中:

1
2
3
void Configuration::performProcess(Process & process,
const int site_index,
const LatticeMap & lattice_map)

根本就没有用到这个变量,为啥要传他进来??

Read More

2016-03-24
关于KMCLib中的Move

move来源于process并作用于configuration。

Process中的move相关

Process中与move相关的变量:

  • std::vector<int> move_origins
    说明在process中那些元素是在process发生时有移动的,(0, 1)的话就是指第一个(中心)和第二个元素发生了移动。

  • std::vector<Coordinate> move_vectors
    对应move_origin的元素移动的向量。

  • std::vector< std::pair<int,int> > id_moves_
    用于描述元素移动前后位置的变化,通过元素在process中的minimal_match_list中的索引号来表示,例如
    id_moves_[0]中存放着两个值 (1, 4),则就说明在minimal_match_list中的第1号元素(也就是第二个)通过process的作用之后会移动到第4号位置上。

Read More

2016-03-24
KMCLib中的match_list

match_list是由MinimalMatchList类对象组成的vector。

MinimalMatchListEntry类

这其实是一个结构,用于存储每个位点相关的信息,或者说每个minimal_match_list中的元素。

  • bool has_move_coordinate;
    用于标记这个元素是否移动,
    通常在创建process对象时候提供了move_origin和move_vector时会将此值设为true;

  • Coordinate move_coordinate;
    这个元素如果有移动,他的移动向量,
    通常在创建process对象时候提供了move_origin和move_vector时会将此值设为move_vector中的值。

  • int match_type;
    主要用于process中,存储process之的元素类型int

  • int update_type;
    主要用于process中,存储process之的元素类型int

Read More