BDF development manual
Contents
This manual is for developers.
How to add a new module into BDF package
- Prepare you source codes and store it in a directory named "newmodule" .
- Copy the directory "newmodule" into BDF source code directory $BDFHOME/source and add it to svn version control by "svn add newmodule".
- Copy a Makefile from any BDF module directory to "newmodule" to compile and link you program.
- If your program is linked correctly, you will have a executable file name "newmodule.x" in the directory $BDFHOME/bin.
- Append a line with the content "newmodule" into the file "$BDFHOME/database/program.dat". This file defines all available BDF modules which can be executed by BDF driver.
- Edit the file "$BDFHOME/database/xianest.mh". Add your module name "newmodule "into variable PRGLIST.
- PRGLIST = dpdmrpt2 compass xuanyuan mcscf ... newmode
- Edit the file "$BDFHOME/configure.in", add you module name "newmodule" into variable "xianlistf"
- xianlistf = "class module compass sys_util ... newmodule"
- Goto directory "$BDFHOME" and run command "autoconf" to generate new configure file.
After add module and generate new configure file, you can configure BDF package and compile BDF to check if your module is compiled correctly.
Run all tests of BDF
In directory $BDFHOME/sbin, there is a shell script name "testall" can be used to run all BDF tests. If you use vi edit this file, you will see lines like
## May. 26, 2011 -BSUO- run all tests to check program automatically export BDFHOME=~/bdfsrc #Anot/0.5.dev export BDF_TMPDIR=/tmp/$RANDOM ...
You need to modify "BDFHOME". Run this script will test all examples in "$BDFHOME/tests/input". The check files in "$BDFHOME/tests/check" will be used to compare test results.
Set up a BDF tests
It is better to setup your test input in BDF package. Usually, we will test BDF package day automatically. To set up a BDF test, you need following steps.
1 Add some codes to output some important numbers in standard out. In $BDFHOME/sys_util/sysutil.F90, there is a subroutine name "checkdata" subroutine checkdata(c,n,m,idata,rdata,pname,dname) ! write check data into output for auto check implicit none character,intent(in) :: c ! data type, i for inter, r for real integer, intent(in) :: n ! number of data integer, intent(in) :: m ! number of significant digits to decimal digits, 1-9 integer, intent(in) :: idata(n) ! interger real*8, intent(in) :: rdata(n) ! real character*(*), intent(in) :: pname ! program name character*(*), intent(in) :: dname ! data name !------------------------------- end subroutine checkdata You can write integer or real number as formatted form to standard out. The output looks link CHECKDATA:HF:ENERGY: -152.05437318 For example, you want to print a number "ene=-152.05437318", you can add line call checkdata("c",1,8,1,ene,"HF","ENERGY") You will have a line CHECKDATA:HF:ENERGY: -152.05437318 2 Now, you can write down a BDF input file named "test070.inp" and put it into directory "$BDFHOME/tests/input". 3 You can generate check file name "test070.check" and put it into directory "$BDFHOME/tests/check". Support you have run BDF with input file test070.inp and redirect output into a file name log. You can generate check file via a sample command grep "CHECKDATA" log >test070.check
Some interesting libraries
Some libraries developed by Qinming Sun. It may useful but still not used in BDF.
libcint - Gaussian integrals. https://github.com/sunqm/libcint pyscf - Python SCF. http://sunqm.net/pyscf/overview.html
BDF atomic orbital order
The atomic orbital order of BDF is sorted as fortran array
AO(ncgto,nsph,nshell)
Spherical GTO order
p - -1, 0, 1 d - -2, -1, 0, 1, +1 f - -3, -2, -1, 0, 1, +1, +2, +3 etc.
BDF directory
source
There are two kinds of directories in source. One type that contains a file named mail.F90, will be compiles into a executable file (BDF module). Another type that does not contain mail.F90, should be named as name_util. This type of directories will be compiled as libname.a that is share library.
tests
input --- examples and test inputs check --- data used to check BDF codes failed --- failed tests molecule --- geometries of several molecules could be used to set up benchmark calculations.