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); } }
/* * 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"); }