https://github.com/N-BodyShop/changa
Tip revision: 61a74d6d6ae63cefba6e94660b02d8a1dca1cbca authored by Pritish Jetley on 02 January 2012, 16:16:39 UTC
runtest changed
runtest changed
Tip revision: 61a74d6
Sph.h
/* Classes to describe smooth functions needed for SPH */
#ifndef __SPH_H
#define __SPH_H
class DenDvDxSmoothParams : public SmoothParams
{
protected:
double a, H; // Cosmological parameters
int bActiveOnly;
virtual void fcnSmooth(GravityParticle *p, int nSmooth,
pqSmoothNode *nList);
virtual int isSmoothActive(GravityParticle *p);
virtual void initTreeParticle(GravityParticle *p);
virtual void postTreeParticle(GravityParticle *p) {}
virtual void initSmoothParticle(GravityParticle *p);
virtual void initSmoothCache(GravityParticle *p);
virtual void combSmoothCache(GravityParticle *p1,
ExternalSmoothParticle *p2);
public:
DenDvDxSmoothParams() {}
DenDvDxSmoothParams(int _iType, int am, CSM csm, double dTime,
int _bActiveOnly) {
iType = _iType;
activeRung = am;
bActiveOnly = _bActiveOnly;
if(csm->bComove) {
H = csmTime2Hub(csm,dTime);
a = csmTime2Exp(csm,dTime);
}
else {
H = 0.0;
a = 1.0;
}
}
PUPable_decl(DenDvDxSmoothParams);
DenDvDxSmoothParams(CkMigrateMessage *m) : SmoothParams(m) {}
virtual void pup(PUP::er &p) {
SmoothParams::pup(p);//Call base class
p|a;
p|H;
p|bActiveOnly;
}
};
// Like the above class, but only does non active particles marked
// "Neighbor of Active" for the "fast gas" option.
// Also, it doesn't mark any particles.
class DenDvDxNeighborSmParams : public DenDvDxSmoothParams
{
virtual void fcnSmooth(GravityParticle *p, int nSmooth,
pqSmoothNode *nList);
virtual int isSmoothActive(GravityParticle *p);
virtual void initTreeParticle(GravityParticle *p) {}
virtual void postTreeParticle(GravityParticle *p) {}
virtual void initSmoothParticle(GravityParticle *p) {}
virtual void initSmoothCache(GravityParticle *p) {}
virtual void combSmoothCache(GravityParticle *p1,
ExternalSmoothParticle *p2) {}
public:
DenDvDxNeighborSmParams() {}
DenDvDxNeighborSmParams(int _iType, int am, CSM csm, double dTime)
: DenDvDxSmoothParams(_iType, am, csm, dTime, 0) {}
PUPable_decl(DenDvDxNeighborSmParams);
DenDvDxNeighborSmParams(CkMigrateMessage *m) : DenDvDxSmoothParams(m) {}
virtual void pup(PUP::er &p) {
DenDvDxSmoothParams::pup(p);//Call base class
}
};
class MarkSmoothParams : public SmoothParams
{
virtual void fcnSmooth(GravityParticle *p, int nSmooth,
pqSmoothNode *nList) {}
virtual int isSmoothActive(GravityParticle *p);
virtual void initTreeParticle(GravityParticle *p) {}
virtual void postTreeParticle(GravityParticle *p) {}
virtual void initSmoothParticle(GravityParticle *p) {}
virtual void initSmoothCache(GravityParticle *p) {}
virtual void combSmoothCache(GravityParticle *p1,
ExternalSmoothParticle *p2) {}
public:
MarkSmoothParams() {}
MarkSmoothParams(int _iType, int am) {
iType = _iType;
activeRung = am;
}
PUPable_decl(MarkSmoothParams);
MarkSmoothParams(CkMigrateMessage *m) : SmoothParams(m) {}
virtual void pup(PUP::er &p) {
SmoothParams::pup(p);//Call base class
}
};
class PressureSmoothParams : public SmoothParams
{
double a, H; // Cosmological parameters
double alpha, beta; // SPH viscosity parameters
virtual void fcnSmooth(GravityParticle *p, int nSmooth,
pqSmoothNode *nList);
virtual int isSmoothActive(GravityParticle *p);
virtual void initTreeParticle(GravityParticle *p) {}
virtual void postTreeParticle(GravityParticle *p) {}
virtual void initSmoothParticle(GravityParticle *p);
virtual void initSmoothCache(GravityParticle *p);
virtual void combSmoothCache(GravityParticle *p1,
ExternalSmoothParticle *p2);
public:
PressureSmoothParams() {}
PressureSmoothParams(int _iType, int am, CSM csm, double dTime,
double _alpha, double _beta) {
iType = _iType;
activeRung = am;
if(csm->bComove) {
H = csmTime2Hub(csm,dTime);
a = csmTime2Exp(csm,dTime);
}
else {
H = 0.0;
a = 1.0;
}
alpha = _alpha;
beta = _beta;
}
PUPable_decl(PressureSmoothParams);
PressureSmoothParams(CkMigrateMessage *m) : SmoothParams(m) {}
virtual void pup(PUP::er &p) {
SmoothParams::pup(p);//Call base class
p|a;
p|H;
p|alpha;
p|beta;
}
};
/*
* SmoothParams class for distributing deleted gas to neighboring
* particles.
*/
class DistDeletedGasSmoothParams : public SmoothParams
{
virtual void fcnSmooth(GravityParticle *p, int nSmooth,
pqSmoothNode *nList);
virtual int isSmoothActive(GravityParticle *p);
virtual void initSmoothParticle(GravityParticle *p) {};
virtual void initTreeParticle(GravityParticle *p) {}
virtual void postTreeParticle(GravityParticle *p) {}
virtual void initSmoothCache(GravityParticle *p);
virtual void combSmoothCache(GravityParticle *p1,
ExternalSmoothParticle *p2);
public:
DistDeletedGasSmoothParams() {}
DistDeletedGasSmoothParams(int _iType, int am) {
iType = _iType;
activeRung = am;
}
PUPable_decl(DistDeletedGasSmoothParams);
DistDeletedGasSmoothParams(CkMigrateMessage *m) : SmoothParams(m) {}
virtual void pup(PUP::er &p) {
SmoothParams::pup(p);//Call base class
}
};
#endif