Exemple #1
0
void DMRGCat::SuperBlock::calGroundState(){
	Conjugate con(Dim);
	con.setErrorBar(4.e-30);
	long iter = 0;
	bool breakfor = false;
	for (int j = 0; j < 400; j++){
		if (iter == 0){
			f1tof2(con.f0.memptr(), con.f1.memptr());// f1 = H f0
		}
		breakfor = con.abc_2(iter);
		if (breakfor){
			break;
		}	
		f1tof2(con.f2.memptr(), con.f3.memptr()); // f3 = H f2
		con.abc_4();
		iter++;

		//if (iter == 30){
		//	con.restart(iter);
		//}
	}
	
	double GsEnergy = con.eng;
	con.NormTo1(con.f0);
	GsWave.v2QWave(con.f0.memptr());// change sup.Wave = GSWave <- f0
	std::cout << "Dim=" << std::setiosflags(std::ios::left) << std::setw(8) << Dim;
	std::cout << "E=" << std::setiosflags(std::ios::left) << std::setw(16) << std::setprecision(10) << con.eng << "\n";
}
Exemple #2
0
//the point f translate to g
void Super::f1tof2(const double* f, double* g)
{

	std::vector<double> f1, g1;
	for (int i = 0; i<Dim; i++)
	{
		f1.push_back(f[i]);
	}

	f1tof2(f1, g1);

	for (int i = 0; i<Dim; i++)
	{
		g[i] = g1[i];
	}
}