Esempio n. 1
0
static void real_to_normal(double *fc3_normal_squared,
			   const double *freqs0,
			   const double *freqs1,
			   const double *freqs2,		      
			   const lapack_complex_double *eigvecs0,
			   const lapack_complex_double *eigvecs1,
			   const lapack_complex_double *eigvecs2,
			   const Darray *fc3,
			   const int *atc, //atom triplet cut off
			   const int *atc_rec,
               const char* g_skip,
			   const double q[9], /* q0, q1, q2 */
			   const Darray *shortest_vectors,
			   const Iarray *multiplicity,
			   const double *masses,
			   const int *p2s_map,
			   const int *s2p_map,
			   const int *band_indices,
			   const int num_band0,
			   const int num_band,
			   const int pos_band0,
			   const double cutoff_frequency,
			   const double cutoff_hfrequency,
               const double cutoff_delta)
			   
{
  int num_patom;
  lapack_complex_double *fc3_reciprocal;

  num_patom = num_band / 3;

  fc3_reciprocal =
    (lapack_complex_double*)malloc(sizeof(lapack_complex_double) *
				   num_patom * num_patom * num_patom * 27);

  real_to_reciprocal(fc3_reciprocal,
		     q,
		     fc3,
		     atc,
		     shortest_vectors,
		     multiplicity,
		     p2s_map,
		     s2p_map);

  reciprocal_to_normal(fc3_normal_squared,
		       fc3_reciprocal,
		       atc_rec,
		       freqs0,
		       freqs1,
		       freqs2,
		       eigvecs0,
		       eigvecs1,
		       eigvecs2,
		       masses,
		       band_indices,
		       num_band0,
		       num_band,
		       pos_band0,
               g_skip,
		       cutoff_frequency,
		       cutoff_hfrequency,
               cutoff_delta);

  free(fc3_reciprocal);
}
Esempio n. 2
0
static void real_to_normal(double *fc3_normal_squared,
			   const char* g_zero,
			   const double *freqs0,
			   const double *freqs1,
			   const double *freqs2,		      
			   const lapack_complex_double *eigvecs0,
			   const lapack_complex_double *eigvecs1,
			   const lapack_complex_double *eigvecs2,
			   const Darray *fc3,
			   const double q[9], /* q0, q1, q2 */
			   const Darray *shortest_vectors,
			   const Iarray *multiplicity,
			   const double *masses,
			   const int *p2s_map,
			   const int *s2p_map,
			   const int *band_indices,
			   const int num_band0,
			   const int num_band,
			   const double cutoff_frequency,
			   const int triplet_index,
			   const int num_triplets,
			   const int openmp_at_bands)
{
  int num_patom;
  lapack_complex_double *fc3_reciprocal;

  num_patom = num_band / 3;

  fc3_reciprocal =
    (lapack_complex_double*)malloc(sizeof(lapack_complex_double) *
				   num_patom * num_patom * num_patom * 27);

  real_to_reciprocal(fc3_reciprocal,
		     q,
		     fc3,
		     shortest_vectors,
		     multiplicity,
		     p2s_map,
		     s2p_map,
		     openmp_at_bands);

  if (openmp_at_bands) {
#ifdef MEASURE_R2N
    printf("At triplet %d/%d (# of bands=%d):\n",
	   triplet_index, num_triplets, num_band0);
#endif
    reciprocal_to_normal_squared_openmp(fc3_normal_squared,
					g_zero,
					fc3_reciprocal,
					freqs0,
					freqs1,
					freqs2,
					eigvecs0,
					eigvecs1,
					eigvecs2,
					masses,
					band_indices,
					num_band0,
					num_band,
					cutoff_frequency);
  } else {
    reciprocal_to_normal_squared(fc3_normal_squared,
				 g_zero,
				 fc3_reciprocal,
				 freqs0,
				 freqs1,
				 freqs2,
				 eigvecs0,
				 eigvecs1,
				 eigvecs2,
				 masses,
				 band_indices,
				 num_band0,
				 num_band,
				 cutoff_frequency);
  }

  free(fc3_reciprocal);
}