hsoskstmpl.h
namespace sc {
class LocalHSOSKSContribution {
private:
double * const gmat;
double * const gmato;
double * const pmat;
double * const pmato;
double a0;
public:
LocalHSOSKSContribution(double *g, double *p, double *go, double *po,
double _a0) :
gmat(g), gmato(go), pmat(p), pmato(po), a0(_a0) {}
~LocalHSOSKSContribution() {}
void set_bound(double, double) {}
inline void cont1(int ij, int kl, double val) {
gmat[ij] += val*pmat[kl];
gmat[kl] += val*pmat[ij];
}
inline void cont2(int ij, int kl, double val) {
val *= 0.25*a0;
gmat[ij] -= val*pmat[kl];
gmat[kl] -= val*pmat[ij];
gmato[ij] += val*pmato[kl];
gmato[kl] += val*pmato[ij];
}
inline void cont3(int ij, int kl, double val) {
val *= 0.5*a0;
gmat[ij] -= val*pmat[kl];
gmat[kl] -= val*pmat[ij];
gmato[ij] += val*pmato[kl];
gmato[kl] += val*pmato[ij];
}
inline void cont4(int ij, int kl, double val) {
gmat[ij] += (1.0 - 0.25*a0)*val*pmat[kl];
gmat[kl] += (1.0 - 0.25*a0)*val*pmat[ij];
gmato[ij] += a0*0.25*val*pmato[kl];
gmato[kl] += a0*0.25*val*pmato[ij];
}
inline void cont5(int ij, int kl, double val) {
gmat[ij] += (1.0 - 0.5*a0)*val*pmat[kl];
gmat[kl] += (1.0 - 0.5*a0)*val*pmat[ij];
gmato[ij] += 0.5*a0*val*pmato[kl];
gmato[kl] += 0.5*a0*val*pmato[ij];
}
};
class LocalHSOSKSEnergyContribution {
private:
double * const pmat;
double * const pmato;
double a0;
public:
double ec;
double ex;
LocalHSOSKSEnergyContribution(double *p, double *po,
double _a0) : pmat(p), pmato(po), a0(_a0) {
ec=ex=0;
}
~LocalHSOSKSEnergyContribution() {}
void set_bound(double, double) {}
inline void cont1(int ij, int kl, double val) {
ec += val*pmat[ij]*pmat[kl];
}
inline void cont2(int ij, int kl, double val) {
ex -= a0*0.25*val*(pmat[ij]*pmat[kl] + pmato[ij]*pmato[kl]);
}
inline void cont3(int ij, int kl, double val) {
ex -= a0*0.5*val*(pmat[ij]*pmat[kl] + pmato[ij]*pmato[kl]);
}
inline void cont4(int ij, int kl, double val) {
ec += val*pmat[ij]*pmat[kl];
ex -= a0*0.25*val*(pmat[ij]*pmat[kl] + pmato[ij]*pmato[kl]);
}
inline void cont5(int ij, int kl, double val) {
ec += val*pmat[ij]*pmat[kl];
ex -= a0*0.5*val*(pmat[ij]*pmat[kl] + pmato[ij]*pmato[kl]);
}
};
}