00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _chemistry_qc_scf_scflocal_h
00029 #define _chemistry_qc_scf_scflocal_h
00030
00031 #include <math/scmat/block.h>
00032
00033 namespace sc {
00034
00035 static inline double *
00036 get_tri_block(SCMatrixBlock* blk,
00037 int& istart, int& iend, int& jstart, int& jend, int& sub)
00038 {
00039 double *data=0;
00040
00041 if (dynamic_cast<SCMatrixLTriBlock*>(blk)) {
00042 SCMatrixLTriBlock *lblk = dynamic_cast<SCMatrixLTriBlock*>(blk);
00043 istart = lblk->start; iend=lblk->end;
00044 jstart = lblk->start; jend=lblk->end;
00045 data = lblk->data;
00046 sub=0;
00047 } else if (dynamic_cast<SCMatrixLTriSubBlock*>(blk)) {
00048 SCMatrixLTriSubBlock *lblk = dynamic_cast<SCMatrixLTriSubBlock*>(blk);
00049 istart = lblk->istart; iend=lblk->iend;
00050 jstart = lblk->jstart; jend=lblk->jend;
00051 data = lblk->data;
00052 sub=1;
00053 }
00054
00055 return data;
00056 }
00057
00058 }
00059
00060 #endif
00061
00062
00063
00064
00065