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. #3. Copy a Makefile from any BDF module directory to "newmodule" to compile and link you program. 4. 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"(module)/"xianlistlib"(Library)/"xianlistprog"(program). For example: xianlistf = "class module compass sys_util ... newmodule"
- Edit $BDFHOME/config/extralib.mh to add library for you new module and program. For example:
ifeq ($(strip $(PROGNAME)),xianci)
- LEXTR = -lxianci_util -lmcmodule -lmcscf_util
endif
- Goto directory "$BDFHOME" and run command "autoconf" to generate new configure file.
- Configure and make. If your program is linked correctly, you will have an executable file name "newmodule.x" in the directory $BDFHOME/bin.
- add it to git control by "git add new module". Add tests and run all the tests.
#After adding a module and generating a 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 the 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 set up your test input in BDF package. Usually, we will test BDF package day automatically. To set up a BDF test, you need the 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 numbers as a 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 the directory "$BDFHOME/tests/input". 3 You can generate the check file name "test070.check" and put it into the directory "$BDFHOME/tests/check". Support you have run BDF with input file test070.inp and redirect the output into a file name log. You can generate a check file via a sample command grep "CHECKDATA" log >test070.check
Some interesting libraries
Some libraries were developed by Qiming Sun.
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.
BDF easy input developing guide