Exemplo n.º 1
0
extern double
cubepm_calcFactorParticleMassInMsunh(const cubepm_t cubepm)
{
	assert(cubepm != NULL);

	return POW3(cubepm->boxsize) / (POW3((double)(cubepm->ngrid)))
	       * cubepm->omega0 * RHO_CRIT_0 * cubepm->mass_p;
}
Exemplo n.º 2
0
static void
local_calcFactorWeight(artHeader_t header)
{
	double boxsize      = artHeader_getBoxsizeInMpch(header);
	double numParticles = POW3(header->ngridc);
	double totalMass    = RHO_CRIT_0 * header->Om0 * POW3(boxsize);

	header->factorFileWeightToMsunh = totalMass / numParticles;
}
Exemplo n.º 3
0
/*--- Implementations of exported functions -----------------------------*/
extern cubepm_t
cubepm_new(const char *path, const char *stem, int nodesDim, int ngrid)
{
	cubepm_t cubepm;

	assert(path != NULL);
	assert(stem != NULL);
	assert(nodesDim > 0);
	assert((ngrid > 0) && (ngrid % nodesDim == 0));

	cubepm            = xmalloc(sizeof(struct cubepm_struct));
	cubepm->nodesDim  = nodesDim;
	cubepm->ngrid     = ngrid;

	cubepm->numFiles  = POW3(nodesDim);
	assert(cubepm->numFiles < CUBEPM_MAX_NUMFILES);
	cubepm->fileNames = local_constructFileNames(path, stem,
	                                             cubepm->numFiles);
	cubepm->np_local  = xmalloc(sizeof(int32_t) * cubepm->numFiles);
	local_nullRestOfStructure(cubepm);

	return cubepm;
}
Exemplo n.º 4
0
///
/// Return a metric in <i>naturalized</i> coordinates.
/// Frequency coordinates of spindown order \f$s\f$ are scaled by
/// \f[ \frac{2\pi}{(s+1)!} \left(\frac{\overline{\Delta T}}{2}\right)^{s+1} \f]
/// where \f$\overline{\Delta T}\equiv\sum_{k}^{N} \Delta T_k\f$ is the average segment-length
/// over all \f$N\f$ segments.
///
/// Sky coordinates are scaled by Holgers' units, see Eq.(44) in PRD82,042002(2010),
/// without the equatorial rotation in alpha:
/// \f[ \frac{2\pi f R_{E}  \cos(\delta_{D})}{c} \f]
/// where \f$f\f$ is the frequency and
/// \f$R_{E}\f$ the Earth radius, and \f$\delta_{D}\f$ is the detectors latitude.
///
/// If \c p_transform is non-NULL, return the naturalization transform in \c *p_transform.
/// If \c p_gpr_ij is non-NULL, apply the transform to the metric \c *p_gpr_ij.
///
/// \note \c *p_gpr_ij and \c *p_transform will be allocated if \c NULL. \c *p_gpr_ij and \c g_ij
/// may point to the same matrix.
///
int
XLALNaturalizeMetric(
  gsl_matrix **p_gpr_ij,			///< [in,out,optional] Pointer to transformed matrix \f$g^{\prime}_{ij}\f$
  gsl_matrix **p_transform,			///< [in,out,optional] Pointer to naturalization transform
  const gsl_matrix *g_ij,			///< [in] Matrix to transform \f$g_{ij}\f$
  const DopplerMetricParams *metricParams	///< [in] Input parameters used to calculate naturalization transform
  )
{

  // Check input
  XLAL_CHECK( g_ij != NULL, XLAL_EFAULT );
  XLAL_CHECK( g_ij->size1 == g_ij->size2, XLAL_ESIZE );
  if ( p_transform != NULL ) {
    if ( *p_transform != NULL ) {
      XLAL_CHECK( (*p_transform)->size1 == g_ij->size1, XLAL_ESIZE );
      XLAL_CHECK( (*p_transform)->size2 == g_ij->size2, XLAL_ESIZE );
    } else {
      GAMAT( *p_transform, g_ij->size1, g_ij->size2 );
    }
  }
  XLAL_CHECK( metricParams != NULL, XLAL_EFAULT );

  // Compute average segment length
  XLAL_CHECK ( XLALSegListIsInitialized ( &(metricParams->segmentList) ), XLAL_EINVAL, "Passed un-initialzied segment list 'metricParams->segmentList'\n");
  UINT4 Nseg = metricParams->segmentList.length;
  REAL8 sumTseg = 0;
  for ( UINT4 k=0; k < Nseg; k ++ )
    {
      LIGOTimeGPS *startTime_k = &(metricParams->segmentList.segs[k].start);
      LIGOTimeGPS *endTime_k   = &(metricParams->segmentList.segs[k].end);
      sumTseg += XLALGPSDiff( endTime_k, startTime_k );
    }
  REAL8 avgTseg = sumTseg / Nseg;

  // Compute naturalization transform
  gsl_matrix *GAMAT( transform, g_ij->size1, g_ij->size2 );
  gsl_matrix_set_zero( transform );
  for (size_t i = 0; i < g_ij->size1; ++i) {
    const DopplerCoordinateID coordID = metricParams->coordSys.coordIDs[i];
    const double Freq = metricParams->signalParams.Doppler.fkdot[0];
    const double T = avgTseg;
    double scale = 0;
    switch (coordID) {
    case DOPPLERCOORD_NONE:
      scale = 1;
      break;

    case DOPPLERCOORD_FREQ:
    case DOPPLERCOORD_GC_NU0:
      scale = LAL_TWOPI * LAL_FACT_INV[1] * (0.5 * T);
      break;

    case DOPPLERCOORD_F1DOT:
    case DOPPLERCOORD_GC_NU1:
      scale = LAL_TWOPI * LAL_FACT_INV[2] * POW2(0.5 * T);
      break;

    case DOPPLERCOORD_F2DOT:
    case DOPPLERCOORD_GC_NU2:
      scale = LAL_TWOPI * LAL_FACT_INV[3] * POW3(0.5 * T);
      break;

    case DOPPLERCOORD_F3DOT:
    case DOPPLERCOORD_GC_NU3:
      scale = LAL_TWOPI * LAL_FACT_INV[4] * POW4(0.5 * T);
      break;

    case DOPPLERCOORD_ALPHA:
    case DOPPLERCOORD_DELTA:
    case DOPPLERCOORD_N2X_EQU:
    case DOPPLERCOORD_N2Y_EQU:
    case DOPPLERCOORD_N2X_ECL:
    case DOPPLERCOORD_N2Y_ECL:
    case DOPPLERCOORD_N3X_EQU:
    case DOPPLERCOORD_N3Y_EQU:
    case DOPPLERCOORD_N3Z_EQU:
    case DOPPLERCOORD_N3X_ECL:
    case DOPPLERCOORD_N3Y_ECL:
    case DOPPLERCOORD_N3Z_ECL:
    case DOPPLERCOORD_N3SX_EQU:
    case DOPPLERCOORD_N3SY_EQU:
    case DOPPLERCOORD_N3OX_ECL:
    case DOPPLERCOORD_N3OY_ECL:
      {
        const REAL8 rEarth_c = (LAL_REARTH_SI / LAL_C_SI);
        REAL8 cosdD = cos ( metricParams->multiIFO.sites[0].frDetector.vertexLatitudeRadians );
        scale = LAL_TWOPI * Freq * rEarth_c * cosdD;
      }
      break;

    default:
      scale = 1;
      break;
    } // switch(coordID)
    gsl_matrix_set( transform, i, i, 1.0 / scale );
  }

  // Apply transform
  if ( p_gpr_ij != NULL ) {
    XLAL_CHECK( XLALTransformMetric( p_gpr_ij, transform, g_ij ) == XLAL_SUCCESS, XLAL_EFUNC );
  }

  // Return transform
  if ( p_transform != NULL ) {
    gsl_matrix_memcpy( *p_transform, transform );
  }

  // Cleanup
  GFMAT( transform );

  return XLAL_SUCCESS;

} // XLALNaturalizeMetric()