Beispiel #1
0
void SpinAdapted::Linear::precondition(Wavefunction& op, double e, DiagonalMatrix& diagonal, double levelshift)
{
    if (!mpigetrank())
    {
        int index = 1;
        for (int lQ = 0; lQ < op.nrows (); ++lQ)
            for (int rQ = 0; rQ < op.ncols (); ++rQ)
                if (op.allowed(lQ, rQ))
                    for (int lQState = 0; lQState < op.operator_element(lQ, rQ).Nrows (); ++lQState)
                        for (int rQState = 0; rQState < op.operator_element(lQ, rQ).Ncols (); ++rQState)
                        {
                            if (fabs(e - diagonal(index)) > 1.e-12)
                                op.operator_element(lQ, rQ).element(lQState, rQState) /= (e - diagonal(index)+levelshift);
                            ++index;
                        }
    }
#ifndef SERIAL
    //mpi::communicator world;
    //mpi::broadcast(world, op, 0);
#endif
}