本文整理汇总了C#中DoubleMatrix.Min方法的典型用法代码示例。如果您正苦于以下问题:C# DoubleMatrix.Min方法的具体用法?C# DoubleMatrix.Min怎么用?C# DoubleMatrix.Min使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DoubleMatrix
的用法示例。
在下文中一共展示了DoubleMatrix.Min方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Get_ChargeDensity
public override void Get_ChargeDensity(ILayer[] layers, ref SpinResolved_Data charge_density, Band_Data chem_pot)
{
// convert the chemical potential into a quantum mechanical potential
Band_Data dft_pot = chem_pot.DeepenThisCopy();
Get_Potential(ref dft_pot, layers);
double[,] xy_energy = new double[nx, ny];
xy_energy = Solve_Eigenvector_Problem(dft_pot, ref charge_density);
/*int max_wavefunction = (from val in eig_decomp.EigenValues
where val < no_kb_T * Physics_Base.kB * temperature
select val).ToArray().Length;
double[,] dens_xy = new double[nx, ny];
// and generate a density for the y-direction
for (int i = 0; i < nx; i++)
for (int j = 0; j < ny; j++)
for (int k = 0; k < max_wavefunction; k++)
dens_xy[i, j] += DoubleComplex.Norm(eig_decomp.EigenVector(k)[i * ny + j]) * DoubleComplex.Norm(eig_decomp.EigenVector(k)[i * ny + j]) * Get_Fermi_Function(energies[k]);
*/
IExperiment exp_green;
exp_green = new Iterative_Greens_Function_Test.Experiment();
Iterative_Greens_Function_Test.Iterative_Greens_Function iter = new Iterative_Greens_Function_Test.Iterative_Greens_Function(exp_green, xy_energy);
double[,] dens_xy = new double[nx, ny];
double max_energy = Physics_Base.kB * temperature * no_kb_T;
DoubleMatrix xy_energy_mat = new DoubleMatrix(xy_energy);
double min_energy = xy_energy_mat.Min();
double dE = 0.1;
//double min_energy = -1.0 * max_energy;
int n_slices = (int)((max_energy - min_energy) / dE);
for (int n = 1; n < n_slices-1; n++)
{
double energy = min_energy + n * dE;
double[,] dens_per_E = iter.GetDoS(energy);
double fermi_func = Get_Fermi_Function(energy);
for (int i = 0; i < nx; i++)
for (int j = 0; j < ny; j++)
{
dens_xy[i, j] += dens_per_E[i,j] * fermi_func;
}
}
//double fermi_fact_max = Math.Exp(max_energy / (Physics_Base.kB * temperature)) + 1;
//double fermi_fact_min = 2.0;
double[,] dens_per_E_max = iter.GetDoS(max_energy);
double[,] dens_per_E_min = iter.GetDoS(min_energy);
double fermi_func_max = Get_Fermi_Function(max_energy);
double fermi_func_min = Get_Fermi_Function(min_energy);
for (int i = 0; i < nx; i++)
for (int j = 0; j < ny; j++)
{
dens_xy[i, j] += 0.5*(dens_per_E_max[i, j] * fermi_func_max + dens_per_E_min[i,j] * fermi_func_min);
}
// multiply the z-densities by the xy-density
for (int i = 0; i < nx; i++)
for (int j = 0; j < ny; j++)
for (int k = 0; k < nz; k++)
{
charge_density.Spin_Up.vol[k][i, j] *= dens_xy[i, j];
charge_density.Spin_Down.vol[k][i, j] *= dens_xy[i, j];
}
// and multiply the density by -e to get the charge density (as these are electrons)
charge_density = unit_charge * charge_density;
}