Gromacs源码收获(三)

来源:互联网 发布:安卓软件源码破解 编辑:程序博客网 时间:2024/06/05 03:09

          哎,真是苦逼的,对分子动力学的不熟悉导致对Gromacs源码的解读不太顺利。目前摸索出来的Gromacs程序集中最主要的计算程序为mdrun,所以很自然地想要了解mdrun程序源码都包含哪些。经过解读,终于有了初步的了解:

         Gromacs中的核心运算程序为mdrun程序,为了查找mdrun程序的源码,通过查看CMake中发现如下语句:

其程序信息主要在kernel\CMakeLists.txt中。

set(MDRUN_SOURCES

    gctio.c    ionize.c runner.c

    do_gct.c     repl_ex.c  xutils.c pme_loadbal.c

md.c         mdrun.c    genalg.c membed.c)

add_executable(mdrun ${MDRUN_SOURCES} main.c)

       而gpu相关的则在gmxlib目录下面的Cmake中。

if(GMX_GPU)

    add_subdirectory(cuda_tools)

    add_subdirectory(gpu_utils)  

    set(GMX_GPU_LIBRARIES gpu_utils cuda_tools)

endif()

         可以看到应该是生成了两个库,同时其子文件夹为cuda_tools以及gpu_utils两个文件夹。

同时通过查看生成的exe的方式,可以看到main.c只有一个文件,只是起到一个入口的作用。

set(GMX_KERNEL_PROGRAMS

    grompp tpbconv pdb2gmx g_protonate gmxdump g_x2top gmxcheck)

if (NOT GMX_NO_QUOTES)

  set(GMX_KERNEL_PROGRAMS ${GMX_KERNEL_PROGRAMS} g_luck)

endif (NOT GMX_NO_QUOTES)

foreach(PROGRAM ${GMX_KERNEL_PROGRAMS})

    add_executable(${PROGRAM} ${PROGRAM}.c main.c)

    if (NOT ${PROGRAM} STREQUAL "g_luck")

        gmx_add_man_page(${PROGRAM})

    endif()

    target_link_libraries(${PROGRAM} gmxpreprocess md gmx ${OpenMP_LINKER_FLAGS})

    set_target_properties(${PROGRAM} PROPERTIES OUTPUT_NAME "${PROGRAM}${GMX_BINARY_SUFFIX}")

endforeach()

如表格中红色字体标注部分,也就是说对于所有的gromacs程序,都是用main.c这个文件作为入口,通过其中对各个程序的链接入口(暂且这么叫吧)cmain()函数链接到其他程序。

main.c中内容:

#ifdef __cplusplus

extern "C" {

#endif

int cmain(int argc, char *argv[]);

#ifdef __cplusplus

}

#endif

int main(int argc, char *argv[])

{

    return cmain(argc, argv);

}

真正的入口是cmain,这样就可以用一个main.c搞定了所有函数入口,不需要写多个main.c给管理带来灵活性。

例如:mdrun.c中,实际上就是有一个cmain函数作为入口。


0 0
原创粉丝点击