示例#1
0
bool swap(Replica box1, Replica box2, RanMars *random) {
    double beta1 = 1/box1.temp, beta2 = 1/box2.temp;
    double u1 = box1.u, u2 = box2.u;
    double delta = -1*(beta2-beta1)*(u2-u1);
//    cout << delta << "\t" << exp(-delta) << endl;
    
    //check if swap move is accepted
    bool accept = false;
    if (delta<=0) {
        accept = true;
//        cout << "accepted" << endl;
    }
    else {
        double prob = exp(-delta);
        double rand = random->uniform();
        if (rand<prob) {
            accept=true;
//            cout << "accepted here!" << endl;
        }
    }
    
    //if accepted, then swap
    if (accept) {
        double **x1 = box1.get_pos();
        box1.set_pos(box2.get_pos());
        box2.set_pos(x1);
    }
//    else
//        cout << "rejected" << endl;
    
    return accept;
}