TeamOverkill / md

Molecular Dynamics
MIT License
0 stars 0 forks source link

Add periodic boundary conditions #2

Closed slaymuel closed 6 years ago

slaymuel commented 6 years ago

Periodic boundary conditions (for a box where are angles are 90 degrees):

void Atom::pbc(){
    //Translate particles according to periodic boundary conditions
    if(this->pos[0] > base::boxDim){
        this->pos[0] = this->pos[0] - base::boxDim;
    }
    if(this->pos[0] < 0){
        this->pos[0] = this->pos[0] + base::boxDim;
    }
    if(this->pos[1] > base::boxDim){
        this->pos[1] = this->pos[1] - base::boxDim;
    }
    if(this->pos[1] < 0){
        this->pos[1] = this->pos[1] + base::boxDim;
    }
    if(this->pos[2] > zL){
        this->pos[2] = this->com[2] - base::boxDim;
    }
    if(this->pos[2] < 0){
        this->pos[2] = this->pos[2] + base::boxDim;
    }
}

Distance between atoms then becomes:

double Atom::distance(Atom *a){
    //Calculate distance between particles
    Eigen::Vector3d displacement;
    disp = a->pos - this->pos;

    if(disp[0] < -1 * xL/2){
        disp[0] += xL;
    }
    if(disp[0] > xL/2){
        disp[0] -= xL;
    }
    if(disp[1] < -1 * yL/2){
        disp[1] += yL;
    }
    if(disp[1] > yL/2){
        disp[1] -= yL;
    }
    if(disp[2] < -1 * zL/2){
        disp[2] += zL;
    }
    if(disp[2] > zL/2){
        disp[2] -= zL;
    }
    return sqrt(disp.dot(disp));
}
slaymuel commented 6 years ago

Done