next up previous contents
Next: File IO Up: BP_ANG Previous: Introduction   Contents

Program Structure

bp_ang performs computing and saving angular data in files for consquent use by bp_mat.

Figure 7.21: bp_ang() program structure.
\begin{figure}\begin{center}
\centerline{\psfig{figure=tex/fig/bp_ang_main.epsi}}\end{center}\end{figure}

The initial data, which the user interactively enters is processed by inp_atom(), brevala(), the user have the choice to select options about the calculation:

  1. Relativistic or nonrelativistic calculation
  2. Gradient or Slater integral form
  3. Selection of operators, SO, SOO, SS, OO.
  4. Default Rydberg constant
  5. All interactions. This option can be used upon discretion of the user to select relativistic calculation only for desired range of the configuration list.

All angular data is generated in brevala(), which first requests from the user data about the operators to be included, and sets ISPORB,ISOORB,ISPSPN,IORBORB,ICOLOM to true if the corresponding operators if requested.

Figure 7.22: brevala() processes the list of configurations in breitgg() after collecting from the user more information about the type of calculation which includes type of operators and interactions to be considered.
\begin{figure}\begin{center}
\centerline{\psfig{figure=tex/fig/bp_ang_brevala.epsi}}\end{center}\end{figure}

Then, initial data about the type and the number of integrals is generated in genintbr():

Figure 7.23: genitbr() computes integrals.
\begin{figure}\begin{center}
\centerline{\psfig{figure=tex/fig/bp_ang_genintbr.epsi}}\end{center}\end{figure}

genitbr() is an interface to comp_genitbr(), which performs the calculation of the integrals. comp_genitbr() is called twice, the first time, it only sweeps over all possible integrals without computing them, and the total number of integrals are determined. The total number of integrals is then used to allocate memory for intptr, value, which are correspondingly the arrays containing the integral and pointer data. In the next phase comp_genitbr() computes the integral data for all orbitals.

The main loop is over the entire configuration list and the data for matrix elements are generated by column. The interaction matrix is symmetric and only the lower or upper part needs to be evaluated. breitgg() generates the nonrelativistic hamiltonian assuming orthogonal orbitals. Thus the computational sequence is:

 For column = 1 to ncfg
    For row = column to ncfg

For each column, data is written to a set of files, described in  14.15, and further below:

      DO jb = 1, ncfg
         if(mod(jb,100).eq.0) write(ISCW,'(A,I5)') '   jb = ',jb
         if(jb == ncfg) write(ISCW,'(A,I5)') '   jb = ',jb
         CALL SHELLSJB(JB)
         call BreitGG(NEW,NZERO,IFIRST,idg,skip,nze)
         write(11) nih, (jan(i),i=1,nih);
         write(12) nih, (ico(i),i=1,nih);
         mycol = mycol + 1
         jptr(mycol) = nij
      end do

Figure  7.24 shows the steps of processing each configuration. All routines are from the angular library libang.a.

Figure 7.24: Subroutines breitgg().
\begin{figure}\begin{center}
\centerline{\psfig{figure=tex/fig/bp_ang_breitgg.epsi,height=15cm}}\end{center}\end{figure}


next up previous contents
Next: File IO Up: BP_ANG Previous: Introduction   Contents
2001-10-11