Ejemplo n.º 1
0
/* Calculate first velocity moment of psi */
void CollisionD2Q9LPMChai::getDPsi(double **retX, double **retY) {
    if (psi == NULL) {
        cerr << "Unable to compute grad(Psi), MEM ERROR!" << endl;
        return;
    }

//    double sum;
    for (int j = 0; j < lm->n.y; j++) {
        for (int i = 0; i < lm->n.x; i++) {
            //sum = 0;
            retX[j][i] = 0;
            retY[j][i] = 0;
            for (int d = 1; d < lm->UDIRS; d++) {
                //  cout<<"f: "<<f[0][j][i][d]<<endl;
                retX[j][i] += (f[0][j][i][d] - fEq(d, getPsi(f[0][j][i], j, i)))
                              * lm->ex[d];
                retY[j][i] += (f[0][j][i][d] - fEq(d, getPsi(f[0][j][i], j, i)))
                              * lm->ey[d];
//
//              if(i == 0 && j == 0){
//                  //cout<<"f"<<d<<": "<<f[0][j][i][d]<<endl;
//                  //cout<<"fEQ"<<d<<": "<<fEq(d, getPsi(f[0][j][i], j, i))<<endl;
//                  //cout<<"RETY: "<<retY[j][i]<<endl;
//              }
                //  sum += f[0][j][i][d];
            }
            //retX[j][i] += 0.01;
            //retY[j][i] += 0.01;
            retX[j][i] *= -3.0;
            retY[j][i] *= -3.0;
        }
    }

//    cout<<"RETY0: "<<retY[0][0]<<endl;
//    cout<<"RETY1: "<<retY[0][1]<<endl;
//    cout<<"RETY2: "<<retY[0][2]<<endl;
    // retY[0][0] = retY[0][1];
    // retY[0][lm->n.x-1] = retY[0][1];
    // retY[lm->n.y-1][0] = retY[lm->n.y-1][1];
    // retY[lm->n.y-1][lm->n.x-1] = retY[lm->n.y-1][1];

//    cout<<"f_eq: "<<fEq(2, psi[1][lm->n.x/2])<<endl;
//    cout<<"f: "<<f[0][1][lm->n.x/2][2]<<endl;
//    for(int j = 0; j < lm->n.y-1; j++){
//        for(int i = 0; i < lm->n.x-1; i++){
//            retX[j][i] = psi[j][i+1] - psi[j][i];
//            retY[j][i] = psi[j+1][i] - psi[j][i];
//        }
//    }
//    for(int j = 0; j < lm->n.y; j++){
//        retY[j][lm->n.x-1] = retY[j][lm->n.x-2];
//    }
//
//    for(int i = 0; i < lm->n.x; i++){
//        retY[lm->n.y-1][i] = retY[lm->n.y-2][i];
//    }
}
void CollisionD2Q9LPMWang::collide() {
    cout<<"WANG"<<endl;
    double dQ;

    for(int j = 0; j < n.y; j++) {
        for(int i = 0; i < n.x; i++) {
            psi[j][i] = getPsi(f[0][j][i], i, j);
            dQ = (1 - 0.5*w)*g_rhs(i, j);
            for(int d = 0; d < 9; d++) {
                f[0][j][i][d] += w*( fEq(d, psi[j][i]) - f[0][j][i][d] ) + W[d]*dQ;
            }
            psi[j][i] = getPsi(f[0][j][i], i, j);
        }
    }
}
Ejemplo n.º 3
0
void CollisionD2Q9LPMChai::collide() {
    UnitHandlerLPM *uh = dynamic_cast<UnitHandlerLPM*>(unitHandler);
    //cout<<"Chai collision"<<endl;
    for (int j = 0; j < n.y; j++) {
        for (int i = 0; i < n.x; i++) {
            psi[j][i] = getPsi(f[0][j][i], i, j);

            //if(skip != NULL && skip[j][i]) continue;
            //cout<<"psi: "<<psi[j][i]<<endl;
            for (int d = 0; d < 9; d++) {
                f[0][j][i][d] += w * (fEq(d, psi[j][i]) - f[0][j][i][d])
                                 + (0.5 - 1.0 / w) / 3.0 * Wa[d] * g_rhs(i, j) * uh->getTimeStep()
                                 * uh->getTimeStep();
            }
            psi[j][i] = getPsi(f[0][j][i], i, j);
        }
    }
}