00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "QCPm3.hpp"
00021 #include "QCPm3Param.hpp"
00022
00023
00024
00025
00029 QCPm3::QCPm3 (const int& nbAOsp, const int& nbAOspd) :
00030 QCMndo(nbAOsp, nbAOspd)
00031 {}
00032
00033
00034
00035
00039 QCPm3::~QCPm3 (void)
00040 {}
00041
00042
00043
00044
00045
00046
00050 template <class TPParam>
00051 QCPm3T<TPParam>::QCPm3T () :
00052 QCPm3( (TPParam::NB_S_ORB + TPParam::NB_P_ORB),
00053 (TPParam::NB_S_ORB + TPParam::NB_P_ORB + TPParam::NB_D_ORB) )
00054 {}
00055
00056
00057
00058
00062 template <class TPParam>
00063 QCPm3T<TPParam>::~QCPm3T ()
00064 {}
00065
00066
00067
00068
00073 template <class TPParam>
00074 QCFloat
00075 QCPm3T<TPParam>::exponentialExpansion(const TPParam* QCRestrict parameterA,
00076 const TPParam* QCRestrict parameterB,
00077 const QCFloat& rAB) {
00078 register QCFloat expansionVal = QC_ZERO;
00079 register QCFloat interExp, interExp2;
00080 register int i;
00081
00082 for (i = 0; i < QCPm3Param::NB_TERM_REP_DEVEL; ++i) {
00083 interExp = QCExp ( ( -parameterA->getBRepDevel(i) *
00084 QCPow<2>(rAB - parameterA->getCRepDevel(i)) ) );
00085 if (interExp != QC_ZERO) {
00086 expansionVal += parameterA->getARepDevel(i) * interExp;
00087 }
00088 interExp2 = QCExp( ( -parameterB->getBRepDevel(i) *
00089 QCPow<2>(rAB - parameterB->getCRepDevel(i)) ) );
00090 if (interExp2 != QC_ZERO) {
00091 expansionVal += parameterB->getARepDevel(i) * interExp2;
00092 }
00093 }
00094
00095 return expansionVal;
00096 }
00097
00098
00099
00100
00104 template <class TPParam>
00105 QCFloat
00106 QCPm3T<TPParam>::dExponentialExpansion(const TPParam* QCRestrict parameterA,
00107 const TPParam* QCRestrict parameterB,
00108 const QCFloat& rAB) {
00109 register QCFloat dExpansionVal = QC_ZERO;
00110 QCFloat rABmcIA, rABmcIB;
00111 register QCFloat interExp, interExp2;
00112 register int i;
00113
00114 for (i = 0; i < QCPm3Param::NB_TERM_REP_DEVEL; ++i) {
00115 rABmcIA = rAB - parameterA->getCRepDevel(i);
00116 interExp = QCExp(-parameterA->getBRepDevel(i) * QCPow<2>(rABmcIA) );
00117 if (interExp != QC_ZERO) {
00118 dExpansionVal += ( parameterA->getARepDevel(i) *
00119 (-QC_TWO * parameterA->getBRepDevel(i) * rABmcIA) *
00120 interExp );
00121 }
00122 rABmcIB = rAB - parameterB->getCRepDevel(i);
00123 interExp2 = QCExp(-parameterB->getBRepDevel(i) * QCPow<2>(rABmcIB) );
00124 if (interExp2 != QC_ZERO) {
00125 dExpansionVal += ( parameterB->getARepDevel(i) *
00126 (-QC_TWO * parameterB->getBRepDevel(i) * rABmcIB) *
00127 interExp2 );
00128 }
00129 }
00130
00131 return dExpansionVal;
00132 }
00133
00134
00135
00136
00137
00138
00139
00140
00141
00145 template class QCPm3T<QCPm3Param>;