Пример #1
0
//------------------------------------------------------------------------------
void OrbitalEquation::computeUMatrix(const cx_mat &C)
{
    cx_vec Ui(nGrid);
    cx_vec rho_iqrs_Cs(nGrid);

    for(int j=0; j<nOrbitals; j++){
        U.col(j) = hC->col(j);

        for(int i=0; i<nOrbitals; i++){
            Ui.zeros();

            for(int q=0; q<nOrbitals; q++){
                for(int r=0; r<nOrbitals; r++){
                    rho_iqrs_Cs.zeros();

                    for(int s=0; s<nOrbitals; s++){
                        rho_iqrs_Cs += findRho2(i,q,r,s) * C.col(s);
                    }
                    Ui += V->meanField(q,r)%rho_iqrs_Cs;
                }
            }
            U.col(j) += invRho(j,i)*Ui;
        }
    }

#ifdef DEBUG
    cout << "OrbitalEquation::computeUMatrix()" << endl;
    // cout << "U = " << endl << U << endl;
    // exit(0);
    // Hardcoded the case for 2 electrons, 1 slater determinant, one spatial orbital.
    // rightHandSide = (I - C.col(0)*C.col(0).t())*(hC->col(0) + diagmat(V->meanField(0,0))*C.col(0));
#endif
}
Пример #2
0
void Cube::RotateRight()
{
    Ui();
    SaveState();
    subCubes[0][1][0] = ROTATE_RIGHT(oldSubCubes[2][1][0]);
    subCubes[1][1][0] = ROTATE_RIGHT(oldSubCubes[2][1][1]);
    subCubes[2][1][0] = ROTATE_RIGHT(oldSubCubes[2][1][2]);
    subCubes[0][1][1] = ROTATE_RIGHT(oldSubCubes[1][1][0]);
    subCubes[1][1][1] = ROTATE_RIGHT(oldSubCubes[1][1][1]);
    subCubes[2][1][1] = ROTATE_RIGHT(oldSubCubes[1][1][2]);
    subCubes[0][1][2] = ROTATE_RIGHT(oldSubCubes[0][1][0]);
    subCubes[1][1][2] = ROTATE_RIGHT(oldSubCubes[0][1][1]);
    subCubes[2][1][2] = ROTATE_RIGHT(oldSubCubes[0][1][2]);
    D();
}
Пример #3
0
void Cube::DoMethod(CubeRotateMethod method)
{
    switch (method)
    {
    case ROTATE_NONE:
    case ROTATE_NONEi:
        break;
    case ROTATE_FRONT:
        F();
        break;
    case ROTATE_BACK:
        B();
        break;
    case ROTATE_LEFT:
        L();
        break;
    case ROTATE_RIGHT:
        R();
        break;
    case ROTATE_UP:
        U();
        break;
    case ROTATE_DOWN:
        D();
        break;
    case ROTATE_FRONTi:
        Fi();
        break;
    case ROTATE_BACKi:
        Bi();
        break;
    case ROTATE_LEFTi:
        Li();
        break;
    case ROTATE_RIGHTi:
        Ri();
        break;
    case ROTATE_UPi:
        Ui();
        break;
    case ROTATE_DOWNi:
        Di();
        break;
    case ROTATE_WHOLEX:
        RotateUp();
        break;
    case ROTATE_WHOLEY:
        RotateLeft();
        break;
    case ROTATE_WHOLEZ:
        RotateClockwise();
        break;
    case ROTATE_WHOLEXi:
        RotateDown();
        break;
    case ROTATE_WHOLEYi:
        RotateRight();
        break;
    case ROTATE_WHOLEZi:
        RotateCounterClockwise();
        break;
    default:
        break;
    }
}