Return complex fc3_sum instead of fc3_sum squared. This is for implementing frequency shift of instantaneous phonon.

This commit is contained in:
Atsushi Togo 2013-10-25 23:37:01 +09:00
parent 07749dc45d
commit 120d7abc82
1 changed files with 36 additions and 38 deletions

View File

@ -4,31 +4,24 @@
#include "phonoc_math.h"
#include "phonon3_h/reciprocal_to_normal.h"
static double fc3_sum_squared(const int bi0,
const int bi1,
const int bi2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const int num_atom);
void reciprocal_to_normal(double *fc3_normal_squared,
const lapack_complex_double *fc3_reciprocal,
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 double *masses,
const int *band_indices,
const int num_band0,
const int num_band,
const double cutoff_frequency)
void reciprocal_to_normal_squared
(double *fc3_normal_squared,
const lapack_complex_double *fc3_reciprocal,
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 double *masses,
const int *band_indices,
const int num_band0,
const int num_band,
const double cutoff_frequency)
{
int i, j, k, bi, num_atom;
double fff;
double fff, sum_real, sum_imag;
lapack_complex_double fc3_sum;
num_atom = num_band / 3;
@ -40,14 +33,18 @@ void reciprocal_to_normal(double *fc3_normal_squared,
for (k = 0; k < num_band; k++) {
if (freqs2[k] > cutoff_frequency) {
fff = freqs0[bi] * freqs1[j] * freqs2[k];
fc3_sum = fc3_sum_in_reciprocal_to_normal
(bi, j, k,
eigvecs0, eigvecs1, eigvecs2,
fc3_reciprocal,
masses,
num_atom);
sum_real = lapack_complex_double_real(fc3_sum);
sum_imag = lapack_complex_double_imag(fc3_sum);
fc3_normal_squared[i * num_band * num_band +
j * num_band +
k] =
fc3_sum_squared(bi, j, k,
eigvecs0, eigvecs1, eigvecs2,
fc3_reciprocal,
masses,
num_atom) / fff;
(sum_real * sum_real + sum_imag * sum_imag) / fff;
}
}
} else {
@ -65,15 +62,16 @@ void reciprocal_to_normal(double *fc3_normal_squared,
}
}
static double fc3_sum_squared(const int bi0,
const int bi1,
const int bi2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const int num_atom)
lapack_complex_double fc3_sum_in_reciprocal_to_normal
(const int bi0,
const int bi1,
const int bi2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const int num_atom)
{
int i, j, k, l, m, n;
double sum_real, sum_imag, sum_real_cart, sum_imag_cart, mmm;
@ -110,5 +108,5 @@ static double fc3_sum_squared(const int bi0,
}
}
}
return sum_real * sum_real + sum_imag * sum_imag;
return lapack_make_complex_double(sum_real, sum_imag);
}