Пример #1
0
WavefunctionData::WavefunctionData(SimulationData &sim_data) {
    this->psi = (MKL_Complex16*)mkl_malloc(sim_data.num_points * sizeof(MKL_Complex16), 64);
    this->psi_old = (MKL_Complex16*)mkl_malloc(sim_data.num_points * sizeof(MKL_Complex16), 64);
    this->psi_new = (MKL_Complex16*)mkl_malloc(sim_data.num_points * sizeof(MKL_Complex16), 64);
    this->conj_psi = (MKL_Complex16*)mkl_malloc(sim_data.num_points * sizeof(MKL_Complex16), 64);
    this->psi_tf = (double*)mkl_malloc(sim_data.num_points * sizeof(double), 64);
    this->psi_abs2 = (double*)mkl_malloc(sim_data.num_points * sizeof(double), 64);
    this->wavefunction_norm = 1;

    double expval;
    #pragma omp parallel for private(expval)
    for (int i = 0; i < sim_data.num_points; ++i) {
        expval = exp(-0.05 * pow(sim_data.x[i], 2.0));
        this->psi[i].real = expval;
        this->psi[i].imag = 0;
        this->psi_old[i].real = expval;
        this->psi_old[i].imag = 0;
        this->psi_new[i].real = 0;
        this->psi_new[i].imag = 0;
        this->conj_psi[i].real = 0;
        this->conj_psi[i].imag = 0;
        this->psi_abs2[i] = 0;
        this->psi_tf[i] = 0;
    }

    calc_norm(sim_data, this->psi);
    normalize_wf(sim_data, this->psi);
    vzAbs(sim_data.num_points, this->psi, this->psi_abs2);
    vdMul(sim_data.num_points, this->psi_abs2, this->psi_abs2, this->psi_abs2);
    save_data(this->psi_abs2, sim_data, "init_state.bin");

}
Пример #2
0
//vzAbs	Computation of the absolute value of vector elements
void klVSLAbs(klVector< complex<double > >& v ,klVector<double>& ans)
{
	vmlSetMode( VML_LA | VML_FTZDAZ_ON | VML_ERRMODE_ERRNO );

	const __int64_t n = v.getColumns();
	
	vzAbs( n,  v.getMemory(),ans.getMemory());
}
Пример #3
0
void WavefunctionData::calc_norm(SimulationData &sim_data, MKL_Complex16 *wf) {

    vzAbs(sim_data.num_points, wf, this->psi_abs2);
    vdMul(sim_data.num_points, this->psi_abs2, this->psi_abs2, this->psi_abs2);
    double sum = 0;
    #pragma omp parallel for reduction(+:sum)
    for (int i = 0; i < sim_data.num_points; ++i) {
        sum += this->psi_abs2[i];
    }

    this->wavefunction_norm = sum;
}