Ejemplo n.º 1
0
void MmaSink::put(const Field & x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:number " << this << '\n';
#endif

  /* New version by MAURICIO that uses strings */
  MLPutFunction(d_mlink, "ToExpression", 1);
  MLPutString(d_mlink, x.str().c_str());

  /* COMMENTED BY MAURICIO, NOV 09
  const long long & num = x.numerator().internal();
  const long long & den = x.denominator().internal();

  if(den==1L) {
    MLPutInteger(d_mlink,num);
  } else {
    MLPutFunction(d_mlink,"Rational",2L);
    MLPutInteger(d_mlink,num);
    MLPutInteger(d_mlink,den);
  };
  */
  
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 2
0
void MmaSink::put(const symbolGB & x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:symbol " << this << ' ' << x.value().chars() << '\n';
#endif
  MLPutSymbol(d_mlink,(const char *) x.value().chars());
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 3
0
void MmaSink::put(const char * x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink::symbol " << this << ' ' << x << '\n';
#endif
  MLPutSymbol(d_mlink,x);
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 4
0
void MmaSink::put(long long x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:long " << this << ' ' << x << '\n';
#endif
  MLPutInteger(d_mlink,x);
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 5
0
void MmaSink::noOutput() {
#ifdef DEBUG_MMASINK
  GBStream << "sink:null" << this << '\n';
#endif
  if(!MLPutSymbol(d_mlink,"Null")) errorc(__LINE__);
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 6
0
Alias<ISink> MmaSink::outputFunction(const char* x,long L) {
  if(!MLPutFunction(d_mlink,x,L)) errorc(__LINE__);
  ++d_count;
// DO NOT INCLUDE d_count -= L; since this will be done by the new MmaSink 
  Alias<ISink> al(new MmaSink(*this),Adopt::s_dummy);
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
return al;
};
Ejemplo n.º 7
0
Alias<ISink> MmaSink::outputFunction(const symbolGB & x,long L) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:function " << x.value().chars() << ' ' << L << ' ' << this << '\n';
#endif
  Alias<ISink> result(outputFunction((const char *)x.value().chars(),L));
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  return result;
};
Ejemplo n.º 8
0
void MmaSink::put(const GroebnerRule& x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:rule " << this << ' ' << x << '\n';
#endif
  MLPutFunction(d_mlink,"Rule",2L);
  put(x.LHS());
  put(x.RHS());
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
};
Ejemplo n.º 9
0
void MmaSink::put(const Variable& x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:variable " << this << x.cstring() << '\n';
#endif
  MLPutFunction(d_mlink,"ToExpression",1L);
  MLPutString(d_mlink,x.cstring());
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 10
0
void MmaSink::put(const Term& x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:term " << this << ' ' << x << '\n';
#endif
  MLPutFunction(d_mlink,"Times",2L);
  ++d_count;
  d_count -= 2;
  put(x.CoefficientPart());
  put(x.MonomialPart());
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
};
Ejemplo n.º 11
0
void MmaSink::put(bool b) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:bool " << this << ' ' << b << '\n';
#endif
  if(b) {
    MLPutSymbol(d_mlink,"True");
  } else {
    MLPutSymbol(d_mlink,"False");
  };
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
  ++d_count;
};
Ejemplo n.º 12
0
void MmaSink::put(const Polynomial& x) {
#ifdef DEBUG_MMASINK
  GBStream << "sink:polynomial " << this << ' ' << x << '\n';
#endif
  int len = x.numberOfTerms();
  if(len==0) {
    MLPutInteger(d_mlink,0);
    ++d_count;
  } else if(len==1) {
    put(*x.begin());
  } else {
    MLPutFunction(d_mlink,"Plus",len);
    ++d_count;
    d_count -= len;
    PolynomialIterator w = x.begin();
    while(len) {
      put(*w);
      --len;++w;
    };
  };
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
};
Ejemplo n.º 13
0
 void MmaSink::put(const Monomial& x) {
#ifdef DEBUG_MMASINK
   GBStream << "sink:monomial " << this << ' ' << x << '\n';
#endif
  int len = x.numberOfFactors();
  if(len==0) {
    MLPutInteger(d_mlink,1);
    ++d_count;
  } else if(len==1) {
    put(*x.begin());
  } else {
    MLPutFunction(d_mlink,"NonCommutativeMultiply",len);
    ++d_count;
    d_count -= len;
    MonomialIterator w = x.begin();
    while(len) {
      put(*w);
      --len;++w;
    };
  };
#ifdef DEBUG_MMASINK
  checkforerror();
#endif
};
Ejemplo n.º 14
0
/*=======================================================================*/
void readparameterfile(char *filename)
/*=======================================================================
  This routine reads the parameterfile that is valid for ALL postprocessing 
  programs. The parameters are declared in readparameterfile.h

  The codes (especially 'galaxies') work only for the Choice of standard 
  units.
   
  Seed                          Seed for the random number generator.
                                Use any POSITIVE integer between 1 and 100.
  Path 				Path of the directory containing a Snapshot 
                                subdirectory with the snapshot files of one 
                                simulation.
  FileBasename			Snapshotnames without the 3-digit number.
  MaxSnapshot			Snapshot number for z=0.
  Omega				Omega Matter
  OmegaLambda			Omega Lambda
  Hubble_h			Hubble constant in units of 100 km/s/Mpc
  H0				Hubble constant in code units of Gadget, as 
                                written out during the simulation. 0.1 for 
                                standard choice of units.
  G				Gravitational constant in Gadget code units. 
                                As above.
  GroupMinLen   		Minimum particle number for the FOF 
                                identification.
  BaryonFrac			Original baryon fraction.
  EnergySN			Energy released by one supernova explosion. 
                                (In erg)
  EtaSN				Relative number of SN per amount of stars.
  Yield				Mass fraction of metals produced during 
                                star formation.
  VcFactor			Assumption: Vmax = Vcircular * VcFactor
  Alpha				Star formation efficiency.
  Epsilon			Feedback efficiency.	
  ThreshMerger			Threshold for the mass ratio when a merging 
                                event will be treated as "major merger".
  ThreshGasBurst		Threshold for the Cold gas-disc ratio which 
                                will defined if would be star burst in a minor 
                                merger
  LowerMerger			Limit of mass ratio used to determined if 
                                would be a star burst in a minor merger
  Identifier			Text string written into the final galaxy 
                                output filename.
  TimeBetSnapshot		As entered in Gadget.
  TimeOfFirstSnapshot 		As entered in Gadget.
  UnitLength_in_cm 		As entered in Gadget. (3.085678e21 for 1.0 
                                kpc)
  UnitMass_in_g       		As entered in Gadget. (1.989e43 for 1.0e10 
                                solar masses)
  UnitVelocity_in_cm_per_s 	As entered in Gadget. (1e5 for 1 km/sec)
  =======================================================================*/
{
  FILE *fp;
  int elements, check;
  char *error;
  char buffer[256], buffer2[256];
#ifndef HDF5OUTPUT
  FILE *fw;
  char saveparam_fname[FILENAME_MAX];
#endif
  void checkforerror(char *error, int elements, char *buf);

  
  fp = fopen(filename, "r");
  if (fp==NULL) {
    fprintf(stdout, 
	    "Error (readparameterfile): file '%s' not found - Stop.\n",
	    filename); fflush(stdout);
    exit(EXIT_FAILURE);     
  }
  fprintf(stdout,"Reading from parameters file %s...\n", filename);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Seed%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  Seed = atoi(buffer2);
  printf("  Seed            %d\n", Seed);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Path1%s",path1);
  checkforerror(error,elements,&buffer[0]);
  printf("  Path1           %s\n", path1);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Path%s",path);
  checkforerror(error,elements,&buffer[0]);
  printf("  Path            %s\n", path);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Path2%s",path2);
  checkforerror(error,elements,&buffer[0]);
  printf("  Path2           %s\n", path2);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Path3%s",path3);
  checkforerror(error,elements,&buffer[0]);
  printf("  Path3           %s\n", path3);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FileBasename%s",filebasename);
  checkforerror(error,elements,&buffer[0]);
  printf("  FileBasename    %s\n", filebasename);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Files%s",buffer2);
  checkforerror(error,elements,&buffer[0]);   
  Files = atoi(buffer2);
  printf("  Files           %d\n", Files);
  
  printf("\n");

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"MaxSnapshot%s",buffer2);
  checkforerror(error,elements,&buffer[0]);   
  MaxSnapshot = atoi(buffer2);
  printf("  MaxSnapshot                  %d\n", MaxSnapshot);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Omega%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);   
  Omega = atof(buffer2);
  printf("  Omega                        %g\n", Omega);
  
  error = fgets(buffer,sizeof(buffer),fp);  
  elements = sscanf(buffer,"OmegaLambda%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);   
  OmegaLambda = atof(buffer2);
  printf("  OmegaLambda                  %g\n", OmegaLambda);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Hubble_h%s",buffer2); 
  checkforerror(error,elements,&buffer[0]);    
  Hubble_h = atof(buffer2);
  printf("  Hubble_h                     %g\n", Hubble_h);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"H0%s",buffer2); 
  checkforerror(error,elements,&buffer[0]);    
  H0 = atof(buffer2);
  printf("  H0                           %g\n", H0);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"G%s",buffer2); 
  checkforerror(error,elements,&buffer[0]);    
  G = atof(buffer2);
  printf("  G                            %g\n", G);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"GroupMinLen%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);   
  GroupMinLen = atoi(buffer2);
  printf("  GroupMinLen                  %d\n", GroupMinLen);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"BaryonFrac%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  BaryonFrac = atof(buffer2);
  printf("  BaryonFrac                   %g\n", BaryonFrac);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EnergySN%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EnergySN = atof(buffer2);
  printf("  EnergySN                     %g\n", EnergySN);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EtaSN%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EtaSN = atof(buffer2);
  printf("  EtaSN                        %g\n", EtaSN);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EnergySNgamma%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EnergySNgamma = atof(buffer2);
  printf("  EnergySNgamma                %g\n", EnergySNgamma);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"BinFrac%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  BinFrac = atof(buffer2);
  printf("  BinFrac                      %g\n", BinFrac);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"VcFactor%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  VcFactor = atof(buffer2);
  printf("  VcFactor                     %g\n", VcFactor);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Alpha%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  Alpha = atof(buffer2);
  printf("  Alpha                        %g\n", Alpha);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Epsilon%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  Epsilon = atof(buffer2);
  printf("  Epsilon                      %g\n", Epsilon);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ThreshMerger%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  ThreshMerger = atof(buffer2);
  printf("  ThreshMerger                 %g\n", ThreshMerger);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ThreshGasBurst%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  ThreshGasBurst = atof(buffer2);
  printf("  ThreshGasBurst               %g\n", ThreshGasBurst);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"LowerMerger%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  LowerMerger = atof(buffer2);
  printf("  LowerMerger                  %g\n", LowerMerger);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ThreshDisk%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  ThreshDisk = atof(buffer2);
  printf("  ThreshDisk                   %g\n", ThreshDisk);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"PertDist%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  PertDist = atof(buffer2);
  printf("  PertDist                     %g\n", PertDist);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FracEj%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  FracEj = atof(buffer2);
  printf("  FracEj                       %g\n", FracEj);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FracH%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  FracH = atof(buffer2);
  printf("  FracH                        %g\n", FracH);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FracHe%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  FracHe = atof(buffer2);
  printf("  FracHe                       %g\n", FracHe);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FracBH%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  FracBH = atof(buffer2); 
  printf("  FracBH                       %g\n", FracBH);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EtaBH%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EtaBH = atof(buffer2);
  printf("  EtaBH                        %g\n", EtaBH);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"K_AGN%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  K_AGN = atof(buffer2);
  printf("  K_AGN                        %g\n", K_AGN);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SNIa_TimeToExplode%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  SNIa_TimeToExplode = atof(buffer2);
  printf("  SNIa_TimeToExplode           %g\n", SNIa_TimeToExplode);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SNIa_RateCte%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  SNIa_RateCte = atof(buffer2);
  printf("  SNIa_RateCte                 %g\n", SNIa_RateCte);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SpinMeanLambda%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  SpinMeanLambda = atof(buffer2);
  printf("  SpinMeanLambda               %g\n", SpinMeanLambda);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SpinSigmaLambda%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  SpinSigmaLambda = fabsf(log(atof(buffer2)));
  printf("  SpinSigmaLambda              %g\n", atof(buffer2));
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"GasRscale%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  GasRscale = atof(buffer2);
  printf("  GasRscale                    %g\n", GasRscale);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"AlphaRP%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  AlphaRP = atof(buffer2);
  printf("  AlphaRP                      %g\n", AlphaRP);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"MaxCvirRedshift%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  MaxCvirRedshift = atof(buffer2);
  printf("  MaxCvirRedshift              %g\n", MaxCvirRedshift);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"MajorWetParameter%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  MajorWetParameter = atof(buffer2);
  printf("  MajorWetParameter            %g\n", MajorWetParameter);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EpsGrav%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EpsGrav = atof(buffer2);
  printf("  EpsGrav                      %g\n", EpsGrav);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"IMFModel%s",IMFModel);
  checkforerror(error,elements,&buffer[0]);
  printf("  IMFModel                     %s\n", IMFModel);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"RtidalModel%s",RtidalModel);
  checkforerror(error,elements,&buffer[0]);
  printf("  RtidalModel                  %s\n", RtidalModel);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"TSTimescaleModel%s",TSTimescaleModel);
  checkforerror(error,elements,&buffer[0]);
  printf("  TSTimescaleModel             %s\n", TSTimescaleModel);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"Identifier%s",identifier);
  checkforerror(error,elements,&buffer[0]);
  printf("  Identifier                   %s\n", identifier);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"TimeBetSnapshot%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  TimeBetSnapshot = atof(buffer2);
  printf("  TimeBetSnapshot              %g\n", TimeBetSnapshot);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"TimeOfFirstSnapshot%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  TimeOfFirstSnapshot = atof(buffer2);
  printf("  TimeOfFirstSnapshot          %g\n", TimeOfFirstSnapshot);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"UnitLength_in_cm%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  UnitLength_in_cm = atof(buffer2);
  printf("  UnitLength_in_cm             %g\n", UnitLength_in_cm);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"UnitMass_in_g%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  UnitMass_in_g = atof(buffer2);
  printf("  UnitMass_in_g                %g\n", UnitMass_in_g);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"UnitVelocity_in_cm_per_s%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  UnitVelocity_in_cm_per_s = atof(buffer2);
  printf("  UnitVelocity_in_cm_per_s     %g\n", UnitVelocity_in_cm_per_s);
  
  printf("\n");
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameOutputsSelection%s",NameOutputsSelection);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameOutputsSelection    %s\n", NameOutputsSelection);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameCatalogue%s",NameCatalogue);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameCatalogue           %s\n", NameCatalogue);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameContamination%s",NameContamination);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameContamination       %s\n", NameContamination);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameHistory%s",NameHistory);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameHistory             %s\n", NameHistory);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameProperties%s",NameProperties);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameProperties          %s\n", NameProperties);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSnapshot%s",NameSnapshot);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSnapshot            %s\n", NameSnapshot);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubgalaxies%s",NameSubgalaxies);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubgalaxies         %s\n", NameSubgalaxies);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubgalfuture%s",NameSubgalfuture);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubgalfuture        %s\n", NameSubgalfuture);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubgalhistory%s",NameSubgalhistory);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubgalhistory       %s\n", NameSubgalhistory);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubhistory%s",NameSubhistory);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubhistory          %s\n", NameSubhistory);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubids%s",NameSubids);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubids              %s\n", NameSubids);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSublist%s",NameSublist);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSublist             %s\n", NameSublist);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSuborbits%s",NameSuborbits);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSuborbits           %s\n", NameSuborbits);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubproperties%s",NameSubproperties);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubproperties       %s\n", NameSubproperties);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameSubstructures%s",NameSubstructures);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameSubstructures       %s\n", NameSubstructures);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameVolatile%s",NameVolatile);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameVolatile            %s\n", NameVolatile);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameDMordered%s",NameDMordered);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameDMordered           %s\n", NameDMordered);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameConcentration%s",NameConcentration);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameConcentration       %s\n", NameConcentration);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameRscaleTables%s",NameRscaleTables);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameRscaleTables        %s\n", NameRscaleTables);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameVcTables%s",NameVcTables);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameVcTables            %s\n", NameVcTables);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"NameICMProperties%s",NameICMProperties);
  checkforerror(error,elements,&buffer[0]);
  printf("  NameICMProperties       %s\n", NameICMProperties);
  
  /*
   * Code options
   */
  printf("\n");
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EjectionOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EjectionOn = atoi(buffer2);
  printf("  EjectionOn                    %d\n", EjectionOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ReIncorporateOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  ReIncorporateOn = atoi(buffer2);
  printf("  ReIncorporateOn               %d\n", ReIncorporateOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SubGalaxyTreeOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  SubGalaxyTreeOn = atoi(buffer2);
  printf("  SubGalaxyTreeOn               %d\n", SubGalaxyTreeOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DustOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  DustOn = atoi(buffer2);
  printf("  DustOn                        %d\n", DustOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"IRAOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  IRAOn = atoi(buffer2);
  printf("  IRAOn                         %d\n", IRAOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"AlphaConstantOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  AlphaConstantOn = atoi(buffer2);
  printf("  AlphaConstantOn               %d\n", AlphaConstantOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FormatGadgetHDM5On%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  FormatGadgetHDM5On = atoi(buffer2);
  printf("  FormatGadgetHDM5On            %d\n", FormatGadgetHDM5On);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DMPartOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  DMPartOn = atoi(buffer2);
  printf("  DMPartOn                      %d\n", DMPartOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"AGNOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  AGNOn = atoi(buffer2);
  printf("  AGNOn                         %d\n", AGNOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"AGNFeedbackInQSOModeOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  AGNFeedbackInQSOModeOn = atoi(buffer2);
  printf("  AGNFeedbackInQSOModeOn        %d\n", AGNFeedbackInQSOModeOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DiskInstabilitiesOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  DiskInstabilitiesOn = atoi(buffer2);
  printf("  DiskInstabilitiesOn           %d\n", DiskInstabilitiesOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"GradualInstabilitiesOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  GradualInstabilitiesOn = atoi(buffer2);
  printf("  GradualInstabilitiesOn        %d\n", GradualInstabilitiesOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EddingtonOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  EddingtonOn = atoi(buffer2);
  printf("  EddingtonOn                   %d\n", EddingtonOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"GrasilOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  GrasilOn = atoi(buffer2);
  printf("  GrasilOn                      %d\n", GrasilOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DumpNoPositions%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  DumpNoPositions = atoi(buffer2);
  printf("  DumpNoPositions               %d\n", DumpNoPositions);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DumpNoVelocities%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  DumpNoVelocities = atoi(buffer2);
  printf("  DumpNoVelocities              %d\n", DumpNoVelocities);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"OutputListOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  OutputListOn = atoi(buffer2);
  printf("  OutputListOn                  %d\n", OutputListOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"RamPressureOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  RamPressureOn = atoi(buffer2);
  printf("  RamPressureOn                 %d\n", RamPressureOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"RamPressureHaloOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  RamPressureHaloOn = atoi(buffer2);
  printf("  RamPressureHaloOn             %d\n", RamPressureHaloOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"IncreaseYieldsOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  IncreaseYieldsOn = atoi(buffer2);
  printf("  IncreaseYieldsOn              %d\n", IncreaseYieldsOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"JiangTimeFrictionOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  JiangTimeFrictionOn = atoi(buffer2);
  printf("  JiangTimeFrictionOn           %d\n", JiangTimeFrictionOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"BoylanTimeFrictionOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  BoylanTimeFrictionOn = atoi(buffer2);
  printf("  BoylanTimeFrictionOn          %d\n", BoylanTimeFrictionOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ComputeBHSpinOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  ComputeBHSpinOn = atoi(buffer2);
  printf("  ComputeBHSpinOn               %d\n", ComputeBHSpinOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"RandomBHSpinOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  RandomBHSpinOn = atof(buffer2);
  printf("  RandomBHSpinOn                %d\n", RandomBHSpinOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"FollowingJGal%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  FollowingJGal = atof(buffer2);
  printf("  FollowingJGal                 %d\n", FollowingJGal);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SpecialDumpOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  SpecialDumpOn = atoi(buffer2);
  printf("  SpecialDumpOn                 %d\n", SpecialDumpOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"UseInclinationRPOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  UseInclinationRPOn = atoi(buffer2);
  printf("  UseInclinationRPOn            %d\n", UseInclinationRPOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"EllipticalViaMinorMergerOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  EllipticalViaMinorMergerOn = atoi(buffer2);
  printf("  EllipticalViaMinorMergerOn    %d\n", EllipticalViaMinorMergerOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"RPFitOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  RPFitOn = atoi(buffer2);
  printf("  RPFitOn                       %d\n", RPFitOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"CrotonSFOn%s",buffer2);  
  checkforerror(error,elements,&buffer[0]);
  CrotonSFOn = atoi(buffer2);
  printf("  CrotonSFOn                    %d\n", CrotonSFOn);
   
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"CoolingFeHOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  CoolingFeHOn = atoi(buffer2);
  printf("  CoolingFeHOn                  %d\n", CoolingFeHOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DMPosAvailableOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  DMPosAvailableOn = atof(buffer2);
  printf("  DMPosAvailableOn              %d\n", DMPosAvailableOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"StripColdGasToStarsOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  StripColdGasToStarsOn = atoi(buffer2);
  printf("  StripColdGasToStarsOn         %d\n", StripColdGasToStarsOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"BC2003OldTablesOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  BC2003OldTablesOn = atoi(buffer2);
  printf("  BC2003OldTablesOn             %d\n", BC2003OldTablesOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"QeffectiveOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  QeffectiveOn = atoi(buffer2);
  printf("  QeffectiveOn                  %d\n", QeffectiveOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"UseRscaleTablesOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  UseRscaleTablesOn = atoi(buffer2);
  printf("  UseRscaleTablesOn             %d\n", UseRscaleTablesOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"DynamicalFrictionOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  DynamicalFrictionOn = atoi(buffer2);
  printf("  DynamicalFrictionOn           %d\n", DynamicalFrictionOn);
  
  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"TidalStrippingOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  TidalStrippingOn = atoi(buffer2);
  printf("  TidalStrippingOn              %d\n", TidalStrippingOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"ProximityMergerOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  ProximityMergerOn = atoi(buffer2);
  printf("  ProximityMergerOn             %d\n", ProximityMergerOn);

  error = fgets(buffer,sizeof(buffer),fp);
  elements = sscanf(buffer,"SatelliteRelocationDisabledOn%s",buffer2);
  checkforerror(error,elements,&buffer[0]);
  SatelliteRelocationDisabledOn = atoi(buffer2);
  printf("  SatelliteRelocationDisabledOn %d\n", 
	 SatelliteRelocationDisabledOn);

  printf("\n");
  fclose(fp);

  /*
   * Safety checks
   */
  if (SpecialDumpOn == 1 && RamPressureOn == 1) {
    printf("WARNING: RamPressureOn = 1 but special dump "
	   "has been selected\n");
    printf("Check values in parameters file and try again - Exit\n");
    fflush(stderr);
    exit(EXIT_FAILURE);
  }

  IMFSelect = 10;
  if (strcmp(IMFModel, "Salpeter") == 0) IMFSelect = IMFSALPETER;
  if (strcmp(IMFModel, "Kroupa") == 0) IMFSelect = IMFKROUPA;
  if (strcmp(IMFModel, "Chabrier") == 0) IMFSelect = IMFCHABRIER;
  if (strcmp(IMFModel, "WKTopheavy") == 0) IMFSelect = IMFTOPHEAVY;
  if (IMFSelect >= 10) {
    fprintf(stderr, 
	    "Error (readparameterfile): invalid IMF model '%s' selected\n",
	    IMFModel);
    fprintf(stderr, "Check parameters file and try again - Exit\n");
    fflush(stderr);
    exit(EXIT_FAILURE);
  }

  RtidalSelect = 10;
  if (strcmp(RtidalModel, "TDS98") == 0) RtidalSelect = RTIDAL_TDS98;
  if (strcmp(RtidalModel, "ZB03") == 0) RtidalSelect = RTIDAL_ZB03; 
  if (RtidalSelect >= 10) {
    fprintf(stderr, 
	    "Error (readparameterfile): invalid tidal radius approximation"
	    " '%s' selected\n", RtidalModel);
    fprintf(stderr, "Check parameters file and try again - Exit\n");
    fflush(stderr);
    exit(EXIT_FAILURE);
  }

  TSTimescaleSelect = 10;
  if (strcmp(TSTimescaleModel, "subhalo") == 0) 
    TSTimescaleSelect = TSTIME_SUBHALO;
  if (strcmp(TSTimescaleModel, "subinfall") == 0) 
    TSTimescaleSelect = TSTIME_SUBINFALL; 
  if (TSTimescaleSelect >= 10) {
    fprintf(stderr, 
	    "Error (readparameterfile): invalid TS timescale option "
	    "'%s' selected\n", TSTimescaleModel);
    fprintf(stderr, "Check parameters file and try again - Exit\n");
    fflush(stderr);
    exit(EXIT_FAILURE);
  }
 
  /* 
   * TOMAS 2013-05-17:
   * Satellite relocation, with the current subhalo scheme, does not work.
   * Some type 1 galaxies are later ejected from their host halo, so if any
   * of its satellites are relocated they will no longer see the correct 
   * FOF central. In other cases, the subhalo goes from type 1 to 0 because
   * the original main subhalo disappears in the current snapshot. There
   * are also cases where the type 0 and the type 1 trade places. The 
   * simple scheme cannot handle these cases, especially in the case where
   * the original main subhalo disappears. Therefore we suspend the 
   * relocation of galaxies until we can find a better treatment for the
   * stripping of satellites.
   */
  if (SatelliteRelocationDisabledOn != 1) {
    fprintf(stderr, "Error (readparameterfile): in this version of the "
	    "code, satellite relocation must be disabled.\n"
	    "If you are sure you need to use that, edit file "
	    "readparameterfile.c to remove this control.\n");
    fflush(stderr);
    exit(EXIT_FAILURE);
  }

  return;
}