/*=========================================================================
                                                                                
Copyright (c) 2007, Los Alamos National Security, LLC

All rights reserved.

Copyright 2007. Los Alamos National Security, LLC. 
This software was produced under U.S. Government contract DE-AC52-06NA25396 
for Los Alamos National Laboratory (LANL), which is operated by 
Los Alamos National Security, LLC for the U.S. Department of Energy. 
The U.S. Government has rights to use, reproduce, and distribute this software. 
NEITHER THE GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY,
EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE.  
If software is modified to produce derivative works, such modified software 
should be clearly marked, so as not to confuse it with the version available 
from LANL.
 
Additionally, redistribution and use in source and binary forms, with or 
without modification, are permitted provided that the following conditions 
are met:
-   Redistributions of source code must retain the above copyright notice, 
    this list of conditions and the following disclaimer. 
-   Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution. 
-   Neither the name of Los Alamos National Security, LLC, Los Alamos National
    Laboratory, LANL, the U.S. Government, nor the names of its contributors
    may be used to endorse or promote products derived from this software 
    without specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY LOS ALAMOS NATIONAL SECURITY, LLC AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
ARE DISCLAIMED. IN NO EVENT SHALL LOS ALAMOS NATIONAL SECURITY, LLC OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                                                                                
=========================================================================*/

#ifndef BasicDefinition_h
#define BasicDefinition_h

#ifdef USE_VTK_COSMO
#include "vtkType.h"
#else
#include <stdint.h>
#endif

///////////////////////////////////////////////////////////////////////////
//

#ifdef USE_VTK_COSMO
#ifdef ID_64
   typedef      vtkTypeInt64 ID_T;           // Particle and halo ids
#else
   typedef      vtkTypeInt32 ID_T;           // Particle and halo ids
#endif
#else
#ifdef ID_64
   typedef      int64_t ID_T;           // Particle and halo ids
#else
   typedef      int32_t ID_T;           // Particle and halo ids
#endif
#endif

#ifdef POSVEL_64
   typedef      double  POSVEL_T;       // Position,velocity
   typedef      double  POTENTIAL_T;    // Potential
#else
   typedef      float   POSVEL_T;       // Position,velocity
   typedef      float   POTENTIAL_T;    // Potential
#endif

#ifdef GRID_64
   typedef      double  GRID_T;         // Grid types
#else
   typedef      float   GRID_T;         // Grid types
#endif

#ifdef USE_VTK_COSMO
typedef vtkTypeInt32    STATUS_T; // Dead (which neighbor) or alive particles
typedef vtkTypeUInt16   MASK_T;   // Other particle information
#else
typedef int32_t         STATUS_T; // Dead (which neighbor) or alive particles
typedef uint16_t        MASK_T;   // Other particle information
#endif

///////////////////////////////////////////////////////////////////////////

const float MAX_FLOAT   = 1.0e15;
const float MIN_FLOAT   = -1.0e15;

const int   RECORD      = 0;    // Input data is by particle record
const int   BLOCK       = 1;    // Input data is blocked by variable

const int   DIMENSION   = 3;
const int   BUF_SZ      = 512;  // Character buffer

// Constants for Spherical Over Dense calculation
const double CHAIN_SIZE         = 2.0;           // Size for bucket mesh
const double RHO_C              = 2.77536627e11; // Critical density
                                                 // in (M_sun/h) / (Mpc/h)^3
const double RHO_RATIO          = 200.0;         // density/critical density
const double SOD_MASS           = 1.0e14;        // for initial SOD radius
                                                 // in (M_sun/h)
const double MIN_RADIUS_FACTOR  = 0.5;           // Factor of initial SOD radius
const double MAX_RADIUS_FACTOR  = 2.0;           // Factor of initial SOD radius
const int    MIN_SOD_SIZE       = 1000;          // Min FOF halo for SOD
const float  MIN_SOD_MASS       = 5.0e12;        // Min FOF mass for SOD
const int    NUM_SOD_BINS       = 20;            // Log bins for SOD halo

// Constants for subhalo finding
const int    NUM_CHILDREN	= 8;             // Barnes Hut octree
const double GRAVITY_C          = 43.015e-10;
                                // Gravitional constant for potential energy
const double ALPHA_SUBHALO	= 1.0;
                                // Controls cut/grow of subhalo
                                // 1.0 / alphaFactor is the number of times 
                                // larger a candidate must be in order for the 
                                // smaller to be cut rather than allowed to grow
                                // Set to 1.0 means always cut as in SUBFIND
                                // Set to 0.2 main halo always wins cut/grow
                                // Set to 0.01 small structures grow
const double BETA_SUBHALO	= 0.0;
                                // Controls the Poisson noise significance test
                                // If average density of particles in a group
                                // is greater than (1 + beta) * density of
                                // saddlepoint particle, group is considered
                                // significant and stands on its own
                                // Set to 0.0 means always significant
                                // Set to 0.25 helps small scale connectivity 

const int    NUM_SPH_DENSITY	= 64;
				// Number of neigbor particles used in
                                // calculating SPH smoothing length and density
const int    NUM_SUBHALO_NEIGHBOR = 20;
                                // Number of closest neighbors looked at
                                // in placing particle in a subgroup
const int    MIN_SUBHALO_SIZE	= 20;
                                // Smallest allowed subhalo
const int    MIN_FOF_SUBHALO	= 2000;
                                // Smallest FOF halo which will have
                                // subhalo finding run on it

// Constants for speeding up unbind calculation on very large subhalos
const int    MAX_UNBIND_1	= 100;
                                // When unbinding reaches less than this
                                // number of particles in subgroup remove
                                // only one particle before running unbind again
const int    MAX_UNBIND_2	= 2000;
                                // When unbinding reaches less than this
                                // number of particles in subgroup remove
                                // remove (1 / FACTOR_UNBIND_1) total positive
                                // energy particles before running unbind again
const int    MAX_UNBIND_3	= 40000;
                                // When unbinding reaches less than this
                                // number of particles in subgroup remove
                                // remove (1 / FACTOR_UNBIND_2) total positive
                                // energy particles before running unbind again
                                // Also maximum subhalo candidate for unbinding
                                // Used for development because that stage
                                // takes so long and normally this is only
                                // the main subhalo and all particles unbound
                                // would go to fuzz
const int    FACTOR_UNBIND_1	= 4;
				// Between MAX_UNBIND_1 and MAX_UNBIND_2
                                // remove 25% of the positive total energy
                                // particles
const int    FACTOR_UNBIND_2	= 2;
				// Betweend MAX_UNBIND_2 and MAX_UNBIND_3
                                // remove 50% of the positive total energy
                                // particles
const int    MAX_UNBIND_DELETE	= 20;
                                // To speed up unbinding when large candidate
                                // reaches this number of particles with
                                // positive total energy just quit
                                                 

// Cosmology record data in .cosmo format
const int   COSMO_FLOAT = 7;    // x,y,z location and velocity plus mass
const int   COSMO_INT   = 1;    // Particle id
const int   RECORD_SIZE = sizeof(POSVEL_T) * COSMO_FLOAT + 
                          sizeof(ID_T) * COSMO_INT;

const bool  ENFORCE_MAX_READ = false;
const int   MAX_READ    = 8000000;
                                // Maximum number of particles to read at a time
                                // Multipled by COSMO_FLOAT floats
                                // makes the largest MPI allowed buffer

const float DEAD_FACTOR = 1.20f; // Number of dead allocated is % more than max

const int   ALIVE       = -1;   // Particle belongs to this processor
const int   MIXED       = ALIVE - 1;
                                // For a trick to quickly know what
                                // particles should be output

const int   UNMARKED    = -1;   // Mixed halo needs MASTER to arbitrate
const int   INVALID     = 0;    // Mixed halo is not recorded on processor
const int   VALID       = 1;    // Mixed halo is recorded on processor

const int   MASTER      = 0;    // Processor to do merge step

const int   MERGE_COUNT = 20;   // Number of tags to merge on in mixed

// Parameters for center finding
const int   MBP_THRESHOLD = 5000; // Threshold between n^2 and AStar methods
const int   MCP_THRESHOLD = 8000;// Threshold between n^2 and Chain methods
const int   MCP_CHAIN_FACTOR = 5; // Subdivide bb for building chaining mesh

//
// Neighbors are enumerated so that particles can be attached to the correct
// neighbor, but these pairs must be preserved for the ParticleExchange.
// Every processor should be able to send and receive on every iteration of
// the exchange, so if everyone sends RIGHT and receives LEFT it works
//
// Do not change this pairing order.
//
enum NEIGHBOR
{
  X0,                   // Left face
  X1,                   // Right face

  Y0,                   // Bottom face
  Y1,                   // Top face

  Z0,                   // Front face
  Z1,                   // Back face

  X0_Y0,                // Left   bottom edge
  X1_Y1,                // Right  top    edge

  X0_Y1,                // Left   top    edge
  X1_Y0,                // Right  bottom edge

  Y0_Z0,                // Bottom front  edge
  Y1_Z1,                // Top    back   edge

  Y0_Z1,                // Bottom back   edge
  Y1_Z0,                // Top    front  edge

  Z0_X0,                // Front  left   edge
  Z1_X1,                // Back   right  edge

  Z0_X1,                // Front  right  edge
  Z1_X0,                // Back   left   edge

  X0_Y0_Z0,             // Left  bottom front corner
  X1_Y1_Z1,             // Right top    back  corner

  X0_Y0_Z1,             // Left  bottom back  corner
  X1_Y1_Z0,             // Right top    front corner

  X0_Y1_Z0,             // Left  top    front corner
  X1_Y0_Z1,             // Right bottom back  corner

  X0_Y1_Z1,             // Left  top    back  corner
  X1_Y0_Z0              // Right bottom front corner
};

const int NUM_OF_NEIGHBORS      = 26;

// Header for Gadget input files
const int GADGET_GAS            = 0;
const int GADGET_HALO           = 1;
const int GADGET_DISK           = 2;
const int GADGET_BULGE          = 3;
const int GADGET_STARS          = 4;
const int GADGET_BOUND          = 5;
const int NUM_GADGET_TYPES      = 6;    // Types of gadget particles

const int GADGET_HEADER_SIZE    = 256;  // Size when the endian matches
const int GADGET_HEADER_SIZE_SWP= 65536;// Size when the endian doesn't match
const int GADGET_FILL           = 60;   // Current fill to HEADER SIZE
const int GADGET_SKIP           = 4;    // Bytes the indicate block size
const int GADGET_2_SKIP         = 16;   // Extra bytes in gadget-2

const int GADGET_1              = 1;
const int GADGET_2              = 2;

struct GadgetHeader {
  int      npart[NUM_GADGET_TYPES];
  double   mass[NUM_GADGET_TYPES];
  double   time;
  double   redshift;
  int      flag_sfr;
  int      flag_feedback;
  int      npartTotal[NUM_GADGET_TYPES];
  int      flag_cooling;
  int      num_files;
  double   BoxSize;
  double   Omega0;
  double   OmegaLambda;
  double   HubbleParam;
  int      flag_stellarage;
  int      flag_metals;
  int      HighWord[NUM_GADGET_TYPES];
  int      flag_entropy;
  char     fill[GADGET_FILL];
};

#endif
