4 #ifndef GRAVITYPARTICLE_H
5 #define GRAVITYPARTICLE_H
13 #if defined(DTADJUST) || defined(SUPERBUBBLE)
38 Vector3D<cosmoType> position;
41 void pup(PUP::er &p) {
61 double _fTimeCoolIsOffUntil;
62 Vector3D<double> _vPred;
66 Vector3D<double> _curlv;
74 double _BalsaraSwitch;
97 double _fMFracOxygenDot;
98 double _fMFracIronDot;
99 double _fMFracOxygenPred;
100 double _fMFracIronPred;
110 double _fThermalCond;
112 double _fPromoteSumuPred;
113 double _fPromoteuPredInit;
117 inline double& u() {
return _u;}
119 inline int64_t& iSplitOrder() {
return _iSplitOrder;}
121 inline double& fMetals() {
return _fMetals;}
122 inline double& fMFracOxygen() {
return _fMFracOxygen;}
123 inline double& fMFracIron() {
return _fMFracIron;}
124 inline double& fESNrate() {
return _fESNrate;}
125 inline double& fTimeCoolIsOffUntil() {
return _fTimeCoolIsOffUntil;}
126 inline Vector3D<double>& vPred() {
return _vPred;}
127 inline double& uPred() {
return _uPred;}
128 inline double& divv() {
return _divv;}
129 inline Vector3D<double>& curlv() {
return _curlv;}
130 inline double& mumax() {
return _mumax;}
131 inline double& PdV() {
return _PdV;}
132 inline double& uDotPdV() {
return _uDotPdV;}
133 inline double& uDotAV() {
return _uDotAV;}
134 inline double& uDotDiff() {
return _uDotDiff;}
135 inline double& c() {
return _c;}
136 inline double& PoverRho2() {
return _PoverRho2;}
137 inline double& BalsaraSwitch() {
return _BalsaraSwitch;}
138 inline double& fBallMax() {
return _fBallMax;}
140 inline double CullenAlpha()
const {
return _CullenAlpha;}
141 inline double& CullenAlpha() {
return _CullenAlpha;}
142 inline double& TimeDivV() {
return _TimeDivV;}
143 inline double& dvds() {
return _dvds;}
144 inline double& dvdsOnSFull() {
return _dvdsOnSFull;}
145 inline double& dvds_old() {
return _dvds_old;}
148 inline double& dtNew() {
return _dtNew;}
150 inline double& dTimeFB() {
return _dTimeFB;}
152 inline double& uDot() {
return _uDot;}
153 inline COOLPARTICLE& CoolParticle() {
return _CoolParticle;}
156 inline double& diff() {
return _diff;}
157 inline double& fMetalsDot() {
return _fMetalsDot;}
158 inline double& fMetalsPred() {
return _fMetalsPred;}
159 inline double& fMFracOxygenDot() {
return _fMFracOxygenDot;}
160 inline double& fMFracOxygenPred() {
return _fMFracOxygenPred;}
161 inline double& fMFracIronDot() {
return _fMFracIronDot;}
162 inline double& fMFracIronPred() {
return _fMFracIronPred;}
165 inline COOLPARTICLE& CoolParticleHot() {
return _CoolParticleHot;}
166 inline int& cpHotInit() {
return _cpHotInit;}
167 inline double& uHot() {
return _uHot;}
168 inline double& uHotPred() {
return _uHotPred;}
169 inline double& uHotDot() {
return _uHotDot;}
170 inline double& massHot() {
return _massHot;}
171 inline double& fDensityU() {
return _fDensityU;}
172 inline double& fThermalCond() {
return _fThermalCond;}
173 inline double& fPromoteSum() {
return _fPromoteSum;}
174 inline double& fPromoteSumuPred() {
return _fPromoteSumuPred;}
175 inline double& fPromoteuPredInit() {
return _fPromoteuPredInit;}
178 void pup(PUP::er &p) {
187 p | _fTimeCoolIsOffUntil;
214 p((
char *) &_CoolParticle,
sizeof(_CoolParticle));
221 p| _fMFracOxygenPred;
226 p((
char *) &_CoolParticleHot,
sizeof(_CoolParticleHot));
235 p| _fPromoteSumuPred;
236 p| _fPromoteuPredInit;
252 double _fMFracOxygen;
258 int64_t _iEaterOrder;
261 #ifdef COOLING_MOLECULARH
262 double _dStarLymanWerner;
265 inline double& fMetals() {
return _fMetals;}
266 inline double& fTimeForm() {
return _fTimeForm;}
267 inline double& fMassForm() {
return _fMassForm;}
268 inline double& fESNrate() {
return _fESNrate;}
269 inline double& fNSN() {
return _fNSN;}
270 inline double& fMSN() {
return _fMSN;}
271 inline double& fMFracOxygen() {
return _fMFracOxygen;}
272 inline double& fMFracIron() {
return _fMFracIron;}
273 inline double& fMIronOut() {
return _fMIronOut;}
274 inline double& fMOxygenOut() {
return _fMOxygenOut;}
275 inline double& fSNMetals() {
return _fSNMetals;}
276 inline int64_t& iGasOrder() {
return _iGasOrder;}
277 inline int64_t& iEaterOrder() {
return _iEaterOrder;}
278 inline double& dMDot() {
return _dMDot;}
279 inline double& dDeltaM() {
return _dDeltaM;}
280 #ifdef COOLING_MOLECULARH
281 inline double dStarLymanWerner()
const {
return _dStarLymanWerner;}
282 inline double& dStarLymanWerner() {
return _dStarLymanWerner;}
284 void pup(PUP::er &p) {
300 #ifdef COOLING_MOLECULARH
301 p | _dStarLymanWerner;
319 Vector3D<double> velocity;
320 Vector3D<cosmoType> treeAcceleration;
332 int iNSIDMInteractions;
363 void pup(PUP::er &p) {
364 ExternalGravityParticle::pup(p);
367 p | treeAcceleration;
375 p | iNSIDMInteractions;
389 #define GP_DEBUG_EXTRAS
391 #ifdef GP_DEBUG_EXTRAS
392 #define IMAGAS CkAssert(isGas())
395 #define IMASTAR CkAssert(isStar())
408 inline int64_t& iSplitOrder() {
IMAGAS;
return (((
extraSPHData*)extraData)->iSplitOrder());}
411 inline double& fMFracOxygen() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracOxygen());}
412 inline double& fMFracIron() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracIron());}
414 inline double& fTimeCoolIsOffUntil() {
IMAGAS;
return (((
extraSPHData*)extraData)->fTimeCoolIsOffUntil());}
415 inline Vector3D<double>& vPred() {
IMAGAS;
return (((
extraSPHData*)extraData)->vPred());}
418 inline Vector3D<double>& curlv() {
IMAGAS;
return (((
extraSPHData*)extraData)->curlv());}
425 inline double& PoverRho2() {
IMAGAS;
return (((
extraSPHData*)extraData)->PoverRho2());}
426 inline double& BalsaraSwitch() {
IMAGAS;
return (((
extraSPHData*)extraData)->BalsaraSwitch());}
429 inline double CullenAlpha()
const {
IMAGAS;
return (((
extraSPHData*)extraData)->CullenAlpha());}
430 inline double& CullenAlpha() {
IMAGAS;
return (((
extraSPHData*)extraData)->CullenAlpha());}
433 inline double& dvdsOnSFull() {
IMAGAS;
return (((
extraSPHData*)extraData)->dvdsOnSFull());}
446 inline double& fMetalsDot() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMetalsDot());}
447 inline double& fMetalsPred() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMetalsPred());}
448 inline double& fMFracOxygenDot() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracOxygenDot());}
449 inline double& fMFracIronDot() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracIronDot());}
450 inline double& fMFracOxygenPred() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracOxygenPred());}
451 inline double& fMFracIronPred() {
IMAGAS;
return (((
extraSPHData*)extraData)->fMFracIronPred());}
460 inline double& fDensityU() {
IMAGAS;
return (((
extraSPHData*)extraData)->fDensityU());}
461 inline double& fThermalCond() {
IMAGAS;
return (((
extraSPHData*)extraData)->fThermalCond());}
462 inline double& fPromoteSum() {
IMAGAS;
return (((
extraSPHData*)extraData)->fPromoteSum());}
463 inline double& fPromoteSumuPred() {
IMAGAS;
return (((
extraSPHData*)extraData)->fPromoteSumuPred());}
464 inline double& fPromoteuPredInit() {
IMAGAS;
return (((
extraSPHData*)extraData)->fPromoteuPredInit());}
470 inline double& fStarMFracOxygen() {
IMASTAR;
return (((
extraStarData*)extraData)->fMFracOxygen());}
484 #ifdef COOLING_MOLECULARH
485 inline double dStarLymanWerner()
const {
IMASTAR;
return (((
extraStarData*)extraData)->dStarLymanWerner());}
486 inline double& dStarLymanWerner() {
IMASTAR;
return (((
extraStarData*)extraData)->dStarLymanWerner());}
495 #define TYPE_GAS (1<<0)
496 #define TYPE_DARK (1<<1)
497 #define TYPE_STAR (1<<2)
499 #define TYPE_DELETED (1<<3)
501 #define TYPE_PHOTOGENIC (1<<4)
502 #define TYPE_NbrOfACTIVE (1<<5)
503 #define TYPE_SMOOTHACTIVE (1<<6)
505 #define TYPE_SINK (1<<7)
506 #define TYPE_SINKING (1<<8)
507 #define TYPE_NEWSINKING (1<<9)
508 #define TYPE_PROMOTED (1<<10)
509 #define TYPE_FEEDBACK (1<<11)
510 #define TYPE_MAXTYPE (1<<12)
512 inline bool isDark()
const {
return TYPETest(
this, TYPE_DARK);}
513 inline bool isGas()
const {
return TYPETest(
this, TYPE_GAS);}
514 inline bool isStar()
const {
return TYPETest(
this, TYPE_STAR);}
519 position = p.position;
530 return a->
iType |= b;
534 return a->
iType &= (~b);
543 CkAssert(
TYPETest(p, TYPE_DELETED));
561 starp.fStarMetals() = p->fMetals();
562 starp.fStarMFracOxygen() = p->fMFracOxygen();
563 starp.fStarMFracIron() = p->fMFracIron();
574 Vector3D<cosmoType> position;
575 Vector3D<double> velocity;
583 Vector3D<double> vPred;
584 Vector3D<cosmoType> treeAcceleration;
592 double BalsaraSwitch;
607 double fTimeCoolIsOffUntil;
608 Vector3D<double> curlv;
612 double fMFracOxygenDot;
613 double fMFracIronDot;
624 double fPromoteSumuPred;
625 double fPromoteuPredInit;
638 fDensity = p->fDensity;
639 position = p->position;
640 velocity = p->velocity;
644 treeAcceleration = p->treeAcceleration;
649 uDotPdV = p->uDotPdV();
650 uDotAV = p->uDotAV();
651 uDotDiff = p->uDotDiff();
653 PoverRho2 = p->PoverRho2();
654 BalsaraSwitch = p->BalsaraSwitch();
655 fBallMax = p->fBallMax();
657 CullenAlpha = p->CullenAlpha();
658 TimeDivV = p->TimeDivV();
660 dvds_old = p->dvds_old();
668 fMetals = p->fMetals();
669 fESNrate = p->fESNrate();
670 fMFracOxygen = p->fMFracOxygen();
671 fMFracIron = p->fMFracIron();
672 fTimeCoolIsOffUntil = p->fTimeCoolIsOffUntil();
675 fMetalsDot = p->fMetalsDot();
676 fMFracOxygenDot = p->fMFracOxygenDot();
677 fMFracIronDot = p->fMFracIronDot();
680 CoolParticle = p->CoolParticle();
682 uHotPred = p->uHotPred();
683 uHotDot = p->uHotDot();
684 massHot = p->massHot();
685 fDensityU = p->fDensityU();
686 fThermalCond = p->fThermalCond();
687 fPromoteSum = p->fPromoteSum();
688 fPromoteSumuPred = p->fPromoteSumuPred();
689 fPromoteuPredInit = p->fPromoteuPredInit();
695 dTimeFB = p->dTimeFB();
699 iEaterOrder = p->iEaterOrder();
707 tmp->fDensity = fDensity;
708 tmp->position = position;
709 tmp->velocity = velocity;
713 tmp->treeAcceleration = treeAcceleration;
715 tmp->vPred() = vPred;
716 tmp->mumax() = mumax;
718 tmp->uDotPdV() = uDotPdV;
719 tmp->uDotAV() = uDotAV;
720 tmp->uDotDiff() = uDotDiff;
722 tmp->PoverRho2() = PoverRho2;
723 tmp->BalsaraSwitch() = BalsaraSwitch;
724 tmp->fBallMax() = fBallMax;
726 tmp->CullenAlpha() = CullenAlpha;
727 tmp->TimeDivV() = TimeDivV;
729 tmp->dvds_old() = dvds_old;
731 tmp->curlv() = curlv;
736 tmp->uPred() = uPred;
737 tmp->fMetals() = fMetals;
738 tmp->fESNrate() = fESNrate;
739 tmp->fMFracOxygen() = fMFracOxygen;
740 tmp->fMFracIron() = fMFracIron;
741 tmp->fTimeCoolIsOffUntil() = fTimeCoolIsOffUntil;
744 tmp->fMetalsDot() = fMetalsDot;
745 tmp->fMFracOxygenDot() = fMFracOxygenDot;
746 tmp->fMFracIronDot() = fMFracIronDot;
749 tmp->CoolParticle() = CoolParticle;
751 tmp->uHotPred() = uHotPred;
752 tmp->uHotDot() = uHotDot;
753 tmp->massHot() = massHot;
754 tmp->fDensityU() = fDensityU;
755 tmp->fThermalCond() = fThermalCond;
756 tmp->fPromoteSum() = fPromoteSum;
757 tmp->fPromoteSumuPred() = fPromoteSumuPred;
758 tmp->fPromoteuPredInit() = fPromoteuPredInit;
762 tmp->dtNew() = dtNew;
764 tmp->dTimeFB() = dTimeFB;
768 tmp->iEaterOrder() = iEaterOrder;
773 void pup(PUP::er &p) {
786 p | treeAcceleration;
811 p | fTimeCoolIsOffUntil;
819 p((
char *) &CoolParticle,
sizeof(CoolParticle));
827 p | fPromoteSumuPred;
828 p | fPromoteuPredInit;
Class for cross processor data needed for smooth operations.
Definition: GravityParticle.h:568
unsigned int iType
Bitmask to hold particle type information.
Definition: GravityParticle.h:330
int64_t iOrder
Input order of particles; unique particle ID.
Definition: GravityParticle.h:328
int TYPEReset(GravityParticle *a, unsigned int b)
Unset a type flag.
Definition: GravityParticle.h:533
void getParticle(GravityParticle *tmp) const
Fill in a full gravity particle from this object.
Definition: GravityParticle.h:704
bool operator<(const GravityParticle &p) const
Used to sort the particles into tree order.
Definition: GravityParticle.h:358
GravityParticle StarFromGasParticle(GravityParticle *p)
Create star particle from gas particle Note that new memory is allocated for the extradata.
Definition: GravityParticle.h:556
int TYPESet(GravityParticle *a, unsigned int b)
Set a type flag.
Definition: GravityParticle.h:529
Information needed to calculate gravity.
Definition: GravityParticle.h:33
Object to bookkeep a Bucket Walk.
Definition: GravityParticle.h:18
void unDeleteParticle(GravityParticle *p)
unmark particle as deleted
Definition: GravityParticle.h:541
unsigned int bucketSize
Definition: ParallelGravity.cpp:125
void deleteParticle(GravityParticle *p)
mark particle as deleted
Definition: GravityParticle.h:549
per-particle cooling data
Definition: cooling_boley.h:68
#define IMASTAR
Definition: GravityParticle.h:397
int TYPETest(const GravityParticle *a, unsigned int b)
Test for a type flag.
Definition: GravityParticle.h:525
Fundamental type for a particle.
Definition: GravityParticle.h:316
cosmoType dtGrav
Definition: GravityParticle.h:322
double fBall
Neighbor search radius for smoothing.
Definition: GravityParticle.h:326
ExternalSmoothParticle getExternalSmoothParticle()
Get quantities needed for SPH smooths.
Definition: GravityParticle.h:838
#define IMAGAS
Definition: GravityParticle.h:394
int rung
the current rung (greater means faster)
Definition: GravityParticle.h:329