BDF development manual

<<TableOfContents: execution failed [list index out of range] (see also the log)>>

 This manual is for developers. 

How to add a new module into BDF package

  1. Prepare you source codes and store it in a directory named "newmodule" .
  2. 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.
  3. Edit the file "$BDFHOME/database/xianest.mh". Add your module name "newmodule "into variable PRGLIST.
    • PRGLIST = dpdmrpt2 compass xuanyuan mcscf ... newmode
  4. 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"
  5. Edit $BDFHOME/config/extralib.mh to add library for you new module and program. For example:

ifeq ($(strip $(PROGNAME)),xianci)

endif

  1. Goto directory "$BDFHOME" and run command "autoconf" to generate new configure file.
  2. Configure and make. If your program is linked correctly, you will have an executable file name "newmodule.x" in the directory $BDFHOME/bin.
  3. 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

bdfeasyinputdevguid

BDF daily test report

bdfdailytest