Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

allvars.h

Go to the documentation of this file.
00001 
00016 #ifndef ALLVARS_H
00017 #define ALLVARS_H
00018 
00019 #include <stdio.h>
00020 #include <gsl/gsl_rng.h>
00021 #include "tags.h"
00022 
00023 #define  GADGETVERSION   "2.0"   
00025 #define  TIMEBASE        (1<<28) 
00029 #define  MAXTOPNODES     200000   
00032 typedef  long long  peanokey;    
00034 #define  BITS_PER_DIMENSION 18   
00038 #define  PEANOCELLS (((peanokey)1)<<(3*BITS_PER_DIMENSION))  
00041 #define  RNDTABLE         3000   
00044 #define  MAX_REAL_NUMBER  1e37
00045 #define  MIN_REAL_NUMBER  1e-37
00046 
00047 #define  MAXLEN_FILENAME  100    
00049 #ifdef   ISOTHERM_EQS
00050 #define  GAMMA         (1.0)     
00051 #else
00052 #define  GAMMA         (5.0/3)   
00053 #endif
00054 
00055 #define  GAMMA_MINUS1  (GAMMA-1)
00056 
00057 #define  HYDROGEN_MASSFRAC 0.76  
00059 /* Some physical constants in cgs units */
00060 
00061 #define  GRAVITY           6.672e-8   
00062 #define  SOLAR_MASS        1.989e33
00063 #define  SOLAR_LUM         3.826e33
00064 #define  RAD_CONST         7.565e-15
00065 #define  AVOGADRO          6.0222e23
00066 #define  BOLTZMANN         1.3806e-16
00067 #define  GAS_CONST         8.31425e7
00068 #define  C                 2.9979e10
00069 #define  PLANCK            6.6262e-27
00070 #define  CM_PER_MPC        3.085678e24
00071 #define  PROTONMASS        1.6726e-24
00072 #define  ELECTRONMASS      9.10953e-28
00073 #define  THOMPSON          6.65245e-25
00074 #define  ELECTRONCHARGE    4.8032e-10
00075 #define  HUBBLE            3.2407789e-18        /* in h/sec */
00076 
00077 /* Some conversion factors */
00078 
00079 #define  SEC_PER_MEGAYEAR  3.155e13
00080 #define  SEC_PER_YEAR      3.155e7
00081 
00082 #ifndef ASMTH
00083 #define ASMTH 1.25  
00084 #endif
00085 
00086 #ifndef RCUT
00087 #define RCUT  4.5   
00089 #endif
00090 
00091 #define MAX_NGB             20000  
00093 #define MAXLEN_OUTPUTLIST   500    
00095 #define DRIFT_TABLE_LENGTH  1000   
00097 #define MAXITER             150    
00100 #ifdef DOUBLEPRECISION             
00101 #define FLOAT double
00102 #else
00103 #define FLOAT float
00104 #endif
00105 
00106 
00107 #ifndef  TWODIMS
00108 #define  NUMDIMS 3                                      
00109 #define  KERNEL_COEFF_1  2.546479089470                 
00110 #define  KERNEL_COEFF_2  15.278874536822
00111 #define  KERNEL_COEFF_3  45.836623610466
00112 #define  KERNEL_COEFF_4  30.557749073644
00113 #define  KERNEL_COEFF_5  5.092958178941
00114 #define  KERNEL_COEFF_6  (-15.278874536822)
00115 #define  NORM_COEFF      4.188790204786                 
00116 #else
00117 #define  NUMDIMS 2                                      
00118 #define  KERNEL_COEFF_1  (5.0/7*2.546479089470)         
00119 #define  KERNEL_COEFF_2  (5.0/7*15.278874536822)
00120 #define  KERNEL_COEFF_3  (5.0/7*45.836623610466)
00121 #define  KERNEL_COEFF_4  (5.0/7*30.557749073644)
00122 #define  KERNEL_COEFF_5  (5.0/7*5.092958178941)
00123 #define  KERNEL_COEFF_6  (5.0/7*(-15.278874536822))
00124 #define  NORM_COEFF      M_PI                           
00125 #endif
00126 
00127 
00128 
00129 extern int ThisTask;            
00130 extern int NTask;               
00131 extern int PTask;               
00133 extern int NumPart;             
00134 extern int N_gas;               
00135 extern long long Ntype[6];      
00136 extern int NtypeLocal[6];       
00138 extern int NumForceUpdate;      
00139 extern int NumSphUpdate;        
00141 extern double CPUThisRun;       
00144 extern int RestartFlag;         
00148 extern char *Exportflag;        
00150 extern int  *Ngblist;           
00152 extern int TreeReconstructFlag; 
00154 extern int Flag_FullStep;       
00157 extern gsl_rng *random_generator; 
00159 extern double RndTable[RNDTABLE]; 
00162 extern double DomainCorner[3];    
00163 extern double DomainCenter[3];    
00164 extern double DomainLen;          
00165 extern double DomainFac;          
00166 extern int    DomainMyStart;      
00167 extern int    DomainMyLast;       
00168 extern int    *DomainStartList;   
00169 extern int    *DomainEndList;     
00170 extern double *DomainWork;        
00171 extern int    *DomainCount;       
00172 extern int    *DomainCountSph;    
00174 extern int    *DomainTask;        
00175 extern int    *DomainNodeIndex;   
00176 extern FLOAT  *DomainTreeNodeLen; 
00177 extern FLOAT  *DomainHmax;        
00179 extern struct DomainNODE
00180 {
00181   FLOAT s[3];                     
00182   FLOAT vs[3];                    
00183   FLOAT mass;                     
00184 #ifdef UNEQUALSOFTENINGS
00185 #ifndef ADAPTIVE_GRAVSOFT_FORGAS
00186   int   bitflags;                 
00187 #else
00188   FLOAT maxsoft;                  
00190 #endif
00191 #endif
00192 }
00193  *DomainMoment;                   
00195 extern peanokey *DomainKeyBuf;    
00197 extern peanokey *Key;             
00198 extern peanokey *KeySorted;       
00201 extern int NTopnodes;             
00202 extern int NTopleaves;            
00204 extern struct topnode_data
00205 {
00206   int Daughter;                   
00207   int Pstart;                     
00208   int Blocks;                     
00209   int Leaf;                       
00210   peanokey Size;                  
00211   peanokey StartKey;              
00212   long long Count;                
00213 }
00214  *TopNodes;                       
00217 extern double TimeOfLastTreeConstruction; 
00221 /* variables for input/output, usually only used on process 0 */
00222 
00223 extern char ParameterFile[MAXLEN_FILENAME];  
00225 extern FILE *FdInfo;       
00226 extern FILE *FdEnergy;     
00227 extern FILE *FdTimings;    
00228 extern FILE *FdCPU;        
00230 #ifdef FORCETEST
00231 extern FILE *FdForceTest;  
00232 #endif
00233 
00234 
00235 extern double DriftTable[DRIFT_TABLE_LENGTH];      
00236 extern double GravKickTable[DRIFT_TABLE_LENGTH];   
00237 extern double HydroKickTable[DRIFT_TABLE_LENGTH];  
00239 extern void *CommBuffer;   
00249 extern struct global_data_all_processes
00250 {
00251   long long TotNumPart;         
00252   long long TotN_gas;           
00254   int MaxPart;                  
00255   int MaxPartSph;               
00257   double BoxSize;               
00259   int ICFormat;                 
00261   int SnapFormat;               
00263   int NumFilesPerSnapshot;      
00264   int NumFilesWrittenInParallel;
00267   int BufferSize;               
00268   int BunchSizeForce;           
00269   int BunchSizeDensity;         
00270   int BunchSizeHydro;           
00271   int BunchSizeDomain;          
00273   double PartAllocFactor;       
00277   double TreeAllocFactor;       
00281   /* some SPH parameters */
00282 
00283   double DesNumNgb;             
00284   double MaxNumNgbDeviation;    
00286   double ArtBulkViscConst;      
00287   double InitGasTemp;           
00288   double MinGasTemp;            
00289   double MinEgySpec;            
00292   /* some force counters  */
00293 
00294   long long TotNumOfForces;                  
00295   long long NumForcesSinceLastDomainDecomp;  
00298   /* system of units  */
00299 
00300   double G;                        
00301   double UnitTime_in_s;            
00302   double UnitMass_in_g;            
00303   double UnitVelocity_in_cm_per_s; 
00304   double UnitLength_in_cm;         
00305   double UnitPressure_in_cgs;      
00306   double UnitDensity_in_cgs;       
00307   double UnitCoolingRate_in_cgs;   
00308   double UnitEnergy_in_cgs;        
00309   double UnitTime_in_Megayears;    
00310   double GravityConstantInternal;  
00315   /* Cosmological parameters */
00316 
00317   double Hubble;       
00318   double Omega0;       
00319   double OmegaLambda;  
00320   double OmegaBaryon;  
00321   double HubbleParam;  
00324   /* Code options */
00325 
00326   int ComovingIntegrationOn;    
00327   int PeriodicBoundariesOn;     
00328   int ResubmitOn;               
00329   int TypeOfOpeningCriterion;   
00330   int TypeOfTimestepCriterion;  
00331   int OutputListOn;             
00334   /* Parameters determining output frequency */
00335 
00336   int SnapshotFileCount;        
00337   double TimeBetSnapshot;       
00338   double TimeOfFirstSnapshot;   
00339   double CpuTimeBetRestartFile; 
00340   double TimeLastRestartFile;   
00341   double TimeBetStatistics;     
00342   double TimeLastStatistics;    
00343   int NumCurrentTiStep;         
00346   /* Current time of the simulation, global step, and end of simulation */
00347 
00348   double Time;                  
00349   double TimeBegin;             
00350   double TimeStep;              
00351   double TimeMax;               
00354   /* variables for organizing discrete timeline */
00355 
00356   double Timebase_interval;     
00357   int Ti_Current;               
00358   int Ti_nextoutput;            
00359 #ifdef FLEXSTEPS
00360   int PresentMinStep;           
00361   int PresentMaxStep;           
00362 #endif
00363 #ifdef PMGRID
00364   int PM_Ti_endstep;            
00365   int PM_Ti_begstep;            
00366 #endif
00367 
00368 
00369   /* Placement of PM grids */
00370 
00371 #ifdef PMGRID
00372   double Asmth[2];              
00373   double Rcut[2];               
00374   double Corner[2][3];          
00375   double UpperCorner[2][3];     
00376   double Xmintot[2][3];         
00377   double Xmaxtot[2][3];         
00378   double TotalMeshSize[2];      
00379 #endif
00380 
00381 
00382   /* Variables that keep track of cumulative CPU consumption */
00383 
00384   double TimeLimitCPU;          
00385   double CPU_TreeConstruction;  
00386   double CPU_TreeWalk;          
00387   double CPU_Gravity;           
00388   double CPU_Potential;         
00389   double CPU_Domain;            
00390   double CPU_Snapshot;          
00391   double CPU_Total;             
00392   double CPU_CommSum;           
00393   double CPU_Imbalance;         
00394   double CPU_HydCompWalk;       
00395   double CPU_HydCommSumm;       
00396   double CPU_HydImbalance;      
00397   double CPU_Hydro;             
00398   double CPU_EnsureNgb;         
00399   double CPU_Predict;           
00400   double CPU_TimeLine;          
00401   double CPU_PM;                
00402   double CPU_Peano;             
00404   /* tree code opening criterion */
00405 
00406   double ErrTolTheta;           
00407   double ErrTolForceAcc;        
00410   /* adjusts accuracy of time-integration */
00411 
00412   double ErrTolIntAccuracy;     
00415   double MinSizeTimestep;       
00417   double MaxSizeTimestep;       
00419   double MaxRMSDisplacementFac; 
00426   double CourantFac;            
00429   /* frequency of tree reconstruction/domain decomposition */
00430 
00431   double TreeDomainUpdateFrequency; 
00434   /* Gravitational and hydrodynamical softening lengths (given in terms of an `equivalent' Plummer softening length).
00435    * Five groups of particles are supported 0="gas", 1="halo", 2="disk", 3="bulge", 4="stars", 5="bndry"
00436    */
00437 
00438   double MinGasHsmlFractional;  
00439   double MinGasHsml;            
00442   double SofteningGas;          
00443   double SofteningHalo;         
00444   double SofteningDisk;         
00445   double SofteningBulge;        
00446   double SofteningStars;        
00447   double SofteningBndry;        
00449   double SofteningGasMaxPhys;   
00450   double SofteningHaloMaxPhys;  
00451   double SofteningDiskMaxPhys;  
00452   double SofteningBulgeMaxPhys; 
00453   double SofteningStarsMaxPhys; 
00454   double SofteningBndryMaxPhys; 
00456   double SofteningTable[6];     
00457   double ForceSoftening[6];     
00460   double MassTable[6];          
00466   /* some filenames */
00467 
00468   char InitCondFile[MAXLEN_FILENAME];          
00469   char OutputDir[MAXLEN_FILENAME];             
00470   char SnapshotFileBase[MAXLEN_FILENAME];      
00471   char EnergyFile[MAXLEN_FILENAME];            
00472   char CpuFile[MAXLEN_FILENAME];               
00473   char InfoFile[MAXLEN_FILENAME];              
00474   char TimingsFile[MAXLEN_FILENAME];           
00475   char RestartFile[MAXLEN_FILENAME];           
00476   char ResubmitCommand[MAXLEN_FILENAME];       
00477   char OutputListFilename[MAXLEN_FILENAME];    
00479   double OutputListTimes[MAXLEN_OUTPUTLIST];   
00480   int OutputListLength;                        
00482 }
00483  All;                                          
00490 extern struct particle_data
00491 {
00492   FLOAT Pos[3];                 
00493   FLOAT Mass;                   
00494   FLOAT Vel[3];                 
00495   FLOAT GravAccel[3];           
00496 #ifdef PMGRID
00497   FLOAT GravPM[3];              
00498 #endif
00499 #ifdef FORCETEST
00500   FLOAT GravAccelDirect[3];     
00501 #endif
00502   FLOAT Potential;              
00503   FLOAT OldAcc;                 
00504 #ifndef LONGIDS
00505   unsigned int ID;              
00506 #else
00507   unsigned long long ID;        
00508 #endif
00509 
00510   int Type;                     
00511   int Ti_endstep;               
00512   int Ti_begstep;               
00513 #ifdef FLEXSTEPS
00514   int FlexStepGrp;              
00515 #endif
00516   float GravCost;               
00517 #ifdef PSEUDOSYMMETRIC
00518   float AphysOld;               
00522 #endif
00523 }
00524  *P,              
00525  *DomainPartBuf;  
00528 /* the following struture holds data that is stored for each SPH particle in addition to the collisionless
00529  * variables.
00530  */
00531 extern struct sph_particle_data
00532 {
00533   FLOAT Entropy;                
00534   FLOAT Density;                
00535   FLOAT Hsml;                   
00536   FLOAT Left;                   
00537   FLOAT Right;                  
00538   FLOAT NumNgb;                 
00539   FLOAT Pressure;               
00540   FLOAT DtEntropy;              
00541   FLOAT HydroAccel[3];          
00542   FLOAT VelPred[3];             
00543   FLOAT DivVel;                 
00544   FLOAT CurlVel;                
00545   FLOAT Rot[3];                 
00546   FLOAT DhsmlDensityFactor;     
00547   FLOAT MaxSignalVel;           
00548 }
00549  *SphP,                         
00550  *DomainSphBuf;                 
00556 /*  Variables for Tree
00557  */
00558 
00559 extern int MaxNodes;            
00560 extern int Numnodestree;        
00562 extern struct NODE
00563 {
00564   FLOAT len;                    
00565   FLOAT center[3];              
00566 #ifdef ADAPTIVE_GRAVSOFT_FORGAS
00567   FLOAT maxsoft;                
00569 #endif
00570   union
00571   {
00572     int suns[8];                
00573     struct
00574     {
00575       FLOAT s[3];               
00576       FLOAT mass;               
00577       int bitflags;             
00578       int sibling;              
00579       int nextnode;             
00580       int father;               
00581     }
00582     d;
00583   }
00584   u;
00585 }
00586  *Nodes_base,                   
00587  *Nodes;                        
00591 extern int *Nextnode;           
00592 extern int *Father;             
00595 extern struct extNODE           
00596 {
00597   FLOAT hmax;                   
00598   FLOAT vs[3];                  
00599 }
00600  *Extnodes_base,                
00601  *Extnodes;                     
00609 extern struct io_header
00610 {
00611   int npart[6];                        
00612   double mass[6];                      
00614   double time;                         
00615   double redshift;                     
00616   int flag_sfr;                        
00617   int flag_feedback;                   
00618   unsigned int npartTotal[6];          
00620   int flag_cooling;                    
00621   int num_files;                       
00622   double BoxSize;                      
00623   double Omega0;                       
00624   double OmegaLambda;                  
00625   double HubbleParam;                  
00626   int flag_stellarage;                 
00627   int flag_metals;                     
00628   unsigned int npartTotalHighWord[6];  
00629   int  flag_entropy_instead_u;         
00630   char fill[60];                       
00631 }
00632  header;                               
00635 #define IO_NBLOCKS 11   
00638 enum iofields           
00639 { 
00640   IO_POS,
00641   IO_VEL,
00642   IO_ID,
00643   IO_MASS,
00644   IO_U,
00645   IO_RHO,
00646   IO_HSML,
00647   IO_POT,
00648   IO_ACCEL,
00649   IO_DTENTR,
00650   IO_TSTP,
00651 };
00652 
00653 
00654 extern char Tab_IO_Labels[IO_NBLOCKS][4];   /*<! This table holds four-byte character tags used for fileformat 2 */
00655 
00656 
00657 /* global state of system, used for global statistics
00658  */
00659 extern struct state_of_system
00660 {
00661   double Mass;
00662   double EnergyKin;
00663   double EnergyPot;
00664   double EnergyInt;
00665   double EnergyTot;
00666   double Momentum[4];
00667   double AngMomentum[4];
00668   double CenterOfMass[4];
00669   double MassComp[6];
00670   double EnergyKinComp[6];
00671   double EnergyPotComp[6];
00672   double EnergyIntComp[6];
00673   double EnergyTotComp[6];
00674   double MomentumComp[6][4]; 
00675   double AngMomentumComp[6][4]; 
00676   double CenterOfMassComp[6][4];
00677 }
00678  SysState;                       /*<! Structure for storing some global statistics about the simulation. */
00679  
00680 
00681 
00682 /* Various structures for communication
00683  */
00684 extern struct gravdata_in
00685 {
00686   union
00687   {
00688     FLOAT Pos[3];
00689     FLOAT Acc[3];
00690     FLOAT Potential;
00691   }
00692   u;
00693 #ifdef UNEQUALSOFTENINGS
00694   int Type;
00695 #ifdef ADAPTIVE_GRAVSOFT_FORGAS
00696   FLOAT Soft;
00697 #endif
00698 #endif
00699   union
00700   {
00701     FLOAT OldAcc;
00702     int Ninteractions;
00703   }
00704   w;
00705 }
00706  *GravDataIn,                   
00707  *GravDataGet,                  
00708  *GravDataResult,               
00709  *GravDataOut;                  
00711 extern struct gravdata_index
00712 {
00713   int Task;
00714   int Index;
00715   int SortIndex;
00716 }
00717  *GravDataIndexTable;           
00721 extern struct densdata_in
00722 {
00723   FLOAT Pos[3];
00724   FLOAT Vel[3];
00725   FLOAT Hsml;
00726   int Index;
00727   int Task;
00728 }
00729  *DensDataIn,                   
00730  *DensDataGet;                  
00732 extern struct densdata_out
00733 {
00734   FLOAT Rho;
00735   FLOAT Div, Rot[3];
00736   FLOAT DhsmlDensity;
00737   FLOAT Ngb;
00738 }
00739  *DensDataResult,               
00740  *DensDataPartialResult;        
00744 extern struct hydrodata_in
00745 {
00746   FLOAT Pos[3];
00747   FLOAT Vel[3];
00748   FLOAT Hsml;
00749   FLOAT Mass;
00750   FLOAT Density;
00751   FLOAT Pressure;
00752   FLOAT F1;
00753   FLOAT DhsmlDensityFactor;
00754   int   Timestep;
00755   int   Task;
00756   int   Index;
00757 }
00758  *HydroDataIn,                  
00759  *HydroDataGet;                 
00761 extern struct hydrodata_out
00762 {
00763   FLOAT Acc[3];
00764   FLOAT DtEntropy;
00765   FLOAT MaxSignalVel;
00766 }
00767  *HydroDataResult,              
00768  *HydroDataPartialResult;       
00771 #endif
00772 

Generated on Sat Apr 22 15:29:40 2006 for GADGET-2 by  doxygen 1.3.9.1