welcome: please sign in

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment
What is the Admin password?

location: For BDF developers

BDF development manual

 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