Exemple #1
0
void outputData(Tsph & sph) {
    if(RP::Time >= RP::TimeAscii) {
        char filename[64];
        sprintf(filename, "snap/sph_t%04d.dat", RP::NumberOfAscii);
        sph.writeParticleAscii(filename);
        RP::TimeAscii += RP::TimestepAscii;
        RP::NumberOfAscii++;        
    }
    PS::F64    etot = calcEnergy(sph);
    PS::F64vec vtot = calcMomentum(sph);
    if(PS::Comm::getRank() == 0) {
        fprintf(RP::FilePointerForLog, "time: %.10f %+e %+e %+e %+e\n",
                RP::Time, RP::Timestep, etot, vtot[0], WT::getTimeTotal());
        WT::dump(RP::Time, RP::FilePointerForTime);
        fflush(RP::FilePointerForLog);
    }
}
Exemple #2
0
/*
 * This is just an entry point.  All this routine does is shuffle the force
 * fields, so that we can save the last two forcing evaluations, and call
 * the routines in charge of each individual equation.
 */
void calcForces()
{
    debug("Calculating forces\n");

    //cycle the force pointers for any active equation.
    complex PRECISION * temp;
    if(momEquation)
    {
        temp = u->sol->poloidal->force3;
        u->sol->poloidal->force3 = u->sol->poloidal->force2;
        u->sol->poloidal->force2 = u->sol->poloidal->force1;
        u->sol->poloidal->force1 = temp;

        temp = u->sol->toroidal->force3;
        u->sol->toroidal->force3 = u->sol->toroidal->force2;
        u->sol->toroidal->force2 = u->sol->toroidal->force1;
        u->sol->toroidal->force1 = temp;

        temp = u->sol->mean_xf3;
        u->sol->mean_xf3 = u->sol->mean_xf2;
        u->sol->mean_xf2 = u->sol->mean_xf1;
        u->sol->mean_xf1 = temp;

        temp = u->sol->mean_yf3;
        u->sol->mean_yf3 = u->sol->mean_yf2;
        u->sol->mean_yf2 = u->sol->mean_yf1;
        u->sol->mean_yf1 = temp;
    }

    if(magEquation)
    {
        temp = B->sol->poloidal->force3;
        B->sol->poloidal->force3 = B->sol->poloidal->force2;
        B->sol->poloidal->force2 = B->sol->poloidal->force1;
        B->sol->poloidal->force1 = temp;

        temp = B->sol->toroidal->force3;
        B->sol->toroidal->force3 = B->sol->toroidal->force2;
        B->sol->toroidal->force2 = B->sol->toroidal->force1;
        B->sol->toroidal->force1 = temp;

        temp = B->sol->mean_xf3;
        B->sol->mean_xf3 = B->sol->mean_xf2;
        B->sol->mean_xf2 = B->sol->mean_xf1;
        B->sol->mean_xf1 = temp;

        temp = B->sol->mean_yf3;
        B->sol->mean_yf3 = B->sol->mean_yf2;
        B->sol->mean_yf2 = B->sol->mean_yf1;
        B->sol->mean_yf1 = temp;
    }

    if(tEquation)
    {
        temp = T->force3;
        T->force3 = T->force2;
        T->force2 = T->force1;
        T->force1 = temp;
    }

    //real force calculations are in these methods.
    if(momEquation)
        calcMomentum();

    if(tEquation)
        calcTemp();

    if(magEquation)
        calcMag();
   
    debug("Forces done\n");
}