psi::psimrcc::CCTransform Class Reference

#include <transform.h>


Public Member Functions

void print ()
void read_oei_from_transqt ()
void read_integrals_from_transqt ()
void read_integrals_mrpt2 ()
int read_tei_mo_integrals_block (int first_irrep)
void free_tei_mo_integrals_block (int first_irrep, int last_irrep)
void free_memory ()
void transform_tei_integrals ()
double oei (int p, int q)
double tei (int p, int q, int r, int s)
double tei_block (int p, int q, int r, int s)
double tei_mrpt2 (int p, int q, int r, int s)


Detailed Description

Author:
Francesco A. Evangelista and Andrew C. Simmonett <frank@ccc.uga.edu>

Definition at line 17 of file psimrcc/transform.h.


Member Function Documentation

int psi::psimrcc::CCTransform::read_tei_mo_integrals_block ( int  first_irrep  ) 

Read at least one block of the two electron MO integrals from an iwl buffer assuming Pitzer ordering and store them in the packed array tei_mo

Definition at line 42 of file transform_block.cc.

References psi::psimrcc::CCBLAS::get_index(), psi::psimrcc::CCIndex::get_tuple_index(), psi::psimrcc::CCIndex::get_tuple_irrep(), iwl_buf_close(), iwl_buf_fetch(), and iwl_buf_init().

00043 {
00044   // Read all the (frozen + non-frozen) TEI in Pitzer order
00045   // and store them in a in-core block-matrix
00046   CCIndex* mo_indexing = blas->get_index("[n>=n]");
00047 
00048   int last_irrep = allocate_tei_mo_block(first_irrep);
00049 
00050   double value;
00051   size_t p,q,r,s,pq,rs,pqrs,irrep;
00052   size_t ilsti,nbuf,fi,index,elements;
00053   elements = 0;
00054   struct iwlbuf ERIIN;
00055   iwl_buf_init(&ERIIN,PSIF_MO_TEI,0.0,1,1);
00056     do{
00057       ilsti = ERIIN.lastbuf;
00058       nbuf  = ERIIN.inbuf;
00059       fi    = 0;
00060       for(index = 0; index < nbuf; index++){
00061         // Compute the [pq] index for this pqrs combination
00062         p = abs(ERIIN.labels[fi]);
00063         q = ERIIN.labels[fi+1];
00064         r = ERIIN.labels[fi+2];
00065         s = ERIIN.labels[fi+3];
00066         value = ERIIN.values[index];
00067         irrep = mo_indexing->get_tuple_irrep(p,q);
00068         // Fill in only the blocks that fit
00069         if((first_irrep<=irrep) && (irrep<last_irrep)){
00070           pq    = mo_indexing->get_tuple_index(p,q);
00071           rs    = mo_indexing->get_tuple_index(r,s);
00072           pqrs  = INDEX(pq,rs);
00073           tei_mo[irrep][pqrs]=value;
00074         }
00075         fi += 4;
00076         elements++;
00077       }
00078       if(!ilsti)
00079         iwl_buf_fetch(&ERIIN);
00080     } while(!ilsti);
00081   fprintf(outfile,"\n    CCTransform: read %d non-zero integrals", elements);
00082   fflush(outfile);
00083   iwl_buf_close(&ERIIN,1);
00084   return(last_irrep);
00085 }

void psi::psimrcc::CCTransform::free_tei_mo_integrals_block ( int  first_irrep,
int  last_irrep 
)

Free the blocks included in the first_irrep->last_irrep range

Definition at line 139 of file transform_block.cc.

References psi::psimrcc::MOInfo::get_nirreps(), and psi::psimrcc::CCIndex::get_pairpi().

00140 {
00141   for(int h=first_irrep;h<last_irrep;h++){
00142     if(tei_mo[h] != NULL){
00143       size_t block_size = INDEX(tei_mo_indexing->get_pairpi(h)-1,tei_mo_indexing->get_pairpi(h)-1)+1;
00144       delete[] tei_mo[h];
00145       mem->add_allocated_memory(-to_MB(block_size));
00146     }
00147   }
00148   if(last_irrep>=moinfo->get_nirreps()){
00149     delete[] tei_mo;
00150     tei_mo = NULL;
00151   }
00152 }

void psi::psimrcc::CCTransform::free_memory (  ) 

Free all the memory allocated by CCTransform

Definition at line 397 of file psimrcc/transform.cc.

00402 {
00403   free_oei_so();
00404   free_oei_mo();
00405   free_tei_so();


The documentation for this class was generated from the following files:
Generated on Wed Feb 13 16:36:16 2008 for PSI by  doxygen 1.5.4