Beispiel #1
0
bool CDocument::saveToFile(const QString &file){

    QString savename( m_fileInfo.absoluteFilePath() );

    if( file.length() > 0 )
        savename = file;
    else if( !m_fileInfo.exists() ){
        savename = QFileDialog::getSaveFileName( 0 , "Save to.." );
    }

    QFile fileq( savename );

    if( !fileq.open( QIODevice::WriteOnly ) ){
        QMessageBox::critical( 0 , "Save failed!" , "Unable to open the file for save!" );
        return false;
    }

    QByteArray bit8 = m_editor->toPlainText().toLocal8Bit();
    qint64 savedBytes = fileq.write( bit8 );

    fileq.close();

    if( savedBytes != bit8.size() ){
        QMessageBox::critical( 0 , "Save failed!" , "Seem that not all bytes have been written." );
        return false;
    }

    editor()->document()->setModified( false );
    return true;
}
Beispiel #2
0
// #include"reaction.h"
int main()
{

////////Input Parameters of the potential (fit parameters) /////
std::string parameters_filename="Input.inp";

NuclearParameters Nu = read_nucleus_parameters( "Input/pca40.inp" );

double Ef=Nu.Ef;
int lmax=5;
double z0=20.0;
double zp0;
double A0=40.0;
double tz=0.5;

int type=1;
int mvolume = 4;
int AsyVolume = 1;

double A = 40.0;

if (tz>0) { zp0=1;}
else {zp0=0;}

double ph_gap = Nu.ph_gap;
double  rStart = .05;
double  rmax = 12.;
double  ham_pts = 180; 

double  rdelt = rmax / ham_pts;

        // Construct Parameters Object
        Parameters p = get_parameters( parameters_filename, Nu.A, Nu.Z, zp0 );

        // Construct Potential Object
        pot pottt = get_bobs_pot2( type, mvolume, AsyVolume, tz, Nu, p );
	pot * pott = &pottt;

        // store coulomb potential in order to compare with




 boundRspace initiate(rmax , ham_pts , Ef, ph_gap , lmax , Nu.Z , zp0 , Nu.A , pott);


  
 double Elower = -11.61818;
 double Eupper = -9.4;
 double jj = .5;
 int ll = 0;
 int Ifine = 1;
 initiate.searchNonLoc( Elower, Eupper, jj,  ll,  Ifine);
 initiate.exteriorWaveFunct(ll);
 initiate.normalizeWF();


double tol=.01;
double estart=Ef;

///// Making rmesh///

// std::vector<double> rmesh_p= initiate.make_rmesh_point();
 std::vector<double> rmesh_p= initiate.make_rmesh_point();
 std::vector<double> rmesh= initiate.make_rmesh();


////////////////////////////
//// s and d wave functions////
///////////////////////////
int N = 0;
int L = 1;
double J = 0.5;

double Emax=2*-4.7;
double Emin=-200.0 + Emax;

eigen_t waves0=initiate.find_boundstate(rmesh_p, estart,0,L,J,tol);
eigen_t waves1=initiate.find_boundstate(rmesh_p, estart,1,L,J,tol);
eigen_t waves2=initiate.find_boundstate(rmesh_p, estart,2,L,J,tol);
eigen_t waves3=initiate.find_boundstate(rmesh_p, estart,3,L,J,tol);
eigen_t waves4=initiate.find_boundstate(rmesh_p, estart,4,L,J,tol);
eigen_t waves5=initiate.find_boundstate(rmesh_p, estart,5,L,J,tol);
eigen_t waves6=initiate.find_boundstate(rmesh_p, estart,6,0,0.5,tol);

std::ofstream filee("waves/wave.out");
std::cout<<Elower<<std::endl;
//////////
////////////

// Plottinge Pot and wavefuntionsa and their log//
// and also the derivitaves
//////////////////////
double norm0=0,norm1=0,norm2=0,norm3=0,norm4=0,norm5=0,norm6=0;
double normAsymp_s = 0.;
double normAsymp_d = 0.;
double Mproton = 931.5;// 937.27;
double normbob= 0.;

//double Ed = -waves_d.first;
//double Es = -waves_s.first;
//double bbetta_d = std::sqrt(2. * Mproton * (40./41.) * Ed /(197. * 197.));
//double bbetta_s = std::sqrt(2. * Mproton * (40./41.) * Es /(197. * 197.));
//double llambbda = 2.0 * Mproton * (40./41.) * 1.44 * 19. /(197. * 197.);

for(int ii=0;ii<rmesh_p.size();++ii){
      norm0 += rdelt * std::pow(rmesh_p[ii] * waves0.second[ii],2) ;
			norm1 += rdelt * std::pow(rmesh_p[ii] * waves1.second[ii],2) ;
			norm2 += rdelt * std::pow(rmesh_p[ii] * waves2.second[ii],2) ;
			norm3 += rdelt * std::pow(rmesh_p[ii] * waves3.second[ii],2) ;
			norm4 += rdelt * std::pow(rmesh_p[ii] * waves4.second[ii],2) ;
			norm5 += rdelt * std::pow(rmesh_p[ii] * waves5.second[ii],2) ;
			norm6 += rdelt * std::pow(rmesh_p[ii] * waves6.second[ii],2) ;
      //normAsymp_s += rdelt * std::pow((exp(-bbetta_s * rmesh_p[ii]) * std::pow(rmesh_p[ii], -llambbda /( 2.0 * bbetta_s))) ,2); 
      //normAsymp_d += rdelt * std::pow((exp(-bbetta_d * rmesh_p[ii]) * std::pow(rmesh_p[ii], -llambbda /( 2.0 * bbetta_d))) ,2); 
      //normbob += rdelt * std::pow(rmesh_p[ii] * initiate.WaveArray[ii],2);
}


/////////////////////// ADDING CODE FOR SPECTRAL FUNCTION FOLDING WITH SKYRME ////////////////////////

int index=initiate.index_from_LJ(L,J);

std::vector< lj_eigen_t > bound_levels = initiate.get_bound_levels( rmesh, tol );

std::vector< mesh_t > emesh_vec =
        initiate.get_emeshes( rmesh, Emin, Emax, bound_levels );

cout<<"emesh_vec = "<<emesh_vec.size()<<endl;

std::vector< prop_t > prop_vec = initiate.get_propagators( rmesh, emesh_vec );

const prop_t &propE = prop_vec.at(index);

const mesh_t &emesh = emesh_vec.at(index);

std::vector< double > bspec = initiate.spectral_strength( L, J, rmesh, emesh_vec, prop_vec );

mesh_t energym = initiate.get_lj_emesh(L,J,emesh_vec ); 

eigen_t bound_info = initiate.find_boundstate( rmesh, estart, N, L, J, tol );

std::vector< double > &QPF = bound_info.second;

double QPE = bound_info.first;

double S = initiate.sfactor( rmesh, QPE, L, J, QPF );

std::vector< double > chd = initiate.charge_density(rmesh, Emax, emesh_vec, prop_vec, bound_levels);

vector <double> pdist = initiate.point_distribution(rmesh_p,Emax,emesh_vec,prop_vec,bound_levels);

matrix_t d_mtx( rmesh.size(), rmesh.size() ); // density matrix
d_mtx.clear();

//making it so that wavefunction takes skyrme wavefunction as the input and finds the skyrme spectral function

std::ifstream filein("waves/upp12.txt");

double skyrme[rmesh.size()];

std::string line;

double part=0;
double part2=0;

for(int i=0;i<rmesh.size();i++){
	part += chd[i] * rdelt * pow(rmesh[i],2) * 4 * M_PI;
	part2 += pdist[i] * rdelt * pow(rmesh[i],2) * 4 * M_PI;
}

cout<<"Particle Number = "<<part<<endl;
cout<<"Particle Number2 = "<<part2<<endl;

int iii;
iii=0;
while(getline(filein,line)){
	skyrme[iii]=atof(line.c_str());
	iii++;
}

filein.close();

int esize;
esize=emesh.size();

std::vector<double> spec;
std::vector<double> spec2;

std::vector <double> dom0,dom1,dom2,dom3,dom4,dom5,dom6;
double dwave0,dwave1,dwave2,dwave3,dwave4,dwave5,dwave6;

for(int i=0;i<rmesh.size();i++){
	dwave0=rmesh[i]*waves0.second[i]/norm0;
	dom0.push_back(dwave0);
	dwave1=rmesh[i]*waves1.second[i]/norm1;
	dom1.push_back(dwave1);
	dwave2=rmesh[i]*waves2.second[i]/norm2;
	dom2.push_back(dwave2);
	dwave3=rmesh[i]*waves3.second[i]/norm3;
	dom3.push_back(dwave3);
	dwave4=rmesh[i]*waves4.second[i]/norm4;
	dom4.push_back(dwave4);
	dwave5=rmesh[i]*waves5.second[i]/norm5;
	dom5.push_back(dwave5);
	dwave6=rmesh[i]*waves6.second[i]/norm6;
	dom6.push_back(dwave6);
}


//Remember that propE is actually G*r*r'*rdelt
for(unsigned int n=0;n<emesh.size();++n){
	double spf=0.0;
	double spf2=0.0;
	double Edelt=emesh[n].second;
 for( unsigned int i = 0; i < rmesh.size(); ++i ) {
		for( unsigned int j = 0; j < rmesh.size(); ++j ) {
			//d_mtx(i,j) += Edelt * imag(propE[n](i,j)) / (M_PI * rmesh[i] * rmesh[j] * rdelt);
			d_mtx(i,j) += Edelt * imag(propE[n](i,j)) / M_PI; 
  		spf -= rdelt * skyrme[i] * skyrme[j] *imag( propE[n]( i, j ) ) / M_PI;
			spf2 -= rdelt * dom0[i]*dom0[j] *imag( propE[n]( i, j ) ) / M_PI;
			//spf -= rmesh[i] * rmesh[j] * rdelt / M_PI
      //            * QPF[i] * QPF[j] * imag( propE[n]( i, j ) );
  	} 
	} 
	spec.push_back(spf);
	spec2.push_back(spf2);
}

std::ofstream fmtx("waves/dmtx.txt");

for(int i=0;i<rmesh.size();i++){
	for(int j=0;j<rmesh.size();j++){
		fmtx<<d_mtx(i,j)<<" ";
	}
	fmtx<<endl;
}

fmtx.close();
		

std::vector <eigen_t> eig = initiate.real_eigvecs(d_mtx);

double norme=0.0;
double norm=0.0;
double eigsum=0.0;
double maxeig=0.0;

norm0=0,norm1=0,norm2=0,norm3=0,norm4=0,norm5=0,norm6=0;

for(int i=0;i<rmesh.size();++i){
	norm0 += rdelt * pow( eig[0].second[i],2);
	norm1 += rdelt * pow( eig[1].second[i],2);
	norm2 += rdelt * pow( eig[2].second[i],2);
	norm3 += rdelt * pow( eig[3].second[i],2);
	norm4 += rdelt * pow( eig[4].second[i],2);
}

double occ=0.0;

for (int i=0;i<rmesh.size();++i){
	for (int j=0;j<rmesh.size();++j){
		occ += rdelt*rdelt * d_mtx(i,j) * eig[N].second[i]/std::sqrt(norm) * eig[N].second[j]/std::sqrt(norm) * pow(rmesh[i],2) * pow(rmesh[j],2);
	}
}

//cout<<"QP OCCUPATION NUMBER = "<<initiate.occupation(rmesh,d_mtx,QPF)<<endl;

//cout<<"occupation number = "<<occ<<endl;

ofstream fval("waves/i13 2.txt");

fval<<eig[0].first*-1<<std::endl;
fval<<eig[1].first*-1<<std::endl;
fval<<eig[2].first*-1<<endl;
fval<<eig[3].first*-1<<endl;
fval<<eig[4].first*-1<<endl;



std::ofstream feig("waves/eig.out");

//std::cout<<"Here is an eigenvector"<<std::endl;
double esum=0.0;
for(int i=0;i<rmesh.size();++i){
	//want to give R(r), so print out u(r)/r
	feig<<rmesh[i]<<" "<<eig[0].second[i]/sqrt(norm0)/rmesh[i];
	feig<<" "<<eig[1].second[i]/sqrt(norm1)/rmesh[i];
	feig<<" "<<eig[2].second[i]/sqrt(norm2)/rmesh[i];
	feig<<" "<<eig[3].second[i]/sqrt(norm3)/rmesh[i];
	feig<<" "<<eig[4].second[i]/sqrt(norm4)/rmesh[i]<<endl;;
//	esum += rdelt*pow(rmesh[i]*eig[N].second[i]/sqrt(norme),2);
}

//std::cout<<"esum = "<<esum<<std::endl;

//This is where I will find rhobar, ask houssein how to put in clebsch gordon and spherical harmonics
double dens=0.0;
int nt=50;
int np=25;
double dt=2*M_PI/nt;
double dp=M_PI/np;
for(int i=0;i<rmesh.size();i++){
	for(int j=0;j<nt;j++){
		for(int k=0;k<np;k++){
			dens+= rdelt*rdelt * skyrme[i]*skyrme[i] * chd[i]; //* spherical harmonics and clebsch gordon * sin(theta)
		}
	}
}

std::vector< double >  s_of_Eqh = initiate.spectral_strength_QH( L, J, rmesh, emesh_vec, prop_vec, QPF);

std::ofstream fden("waves/chd.out");
ofstream fpoint("waves/p.out");
std::ofstream fileout("waves/spec.out");
std::ofstream files("waves/skyrme.out");
std::ofstream fileq("waves/quasi.out");
std::ofstream filef("waves/fold.out");
std::ofstream filed("waves/dom.out");
std::ofstream filer("waves/r.out");
//std::ofstream filep("waves/prop.out");

for(int i=0;i<rmesh.size();i++){
	files<<skyrme[i]<<endl;
	fileq<<QPF[i]<<endl;
	filer<<rmesh[i]<<" "<<rmesh_p[i]<<endl;
	fden<<rmesh[i]<<" "<<chd[i]<<endl;
	fpoint<<rmesh[i]<<" "<<pdist[i]<<endl;
}

for(int i=0;i<bspec.size();i++){
	fileout<<energym[i].first<<" "<<energym[i].second<<" "<<spec[i]<<endl;
	filed<<energym[i].first<<" "<<energym[i].second<<" "<<spec2[i]<<endl;
	filef<<energym[i].first<<" "<<energym[i].second<<" "<<s_of_Eqh[i]<<endl;	
}

filed.close();
filer.close();
filef.close();
fileq.close();
files.close();
fileout.close();

///////////  END OF ADDED CODE ///////////////////////////////////////



////////
//normalizing wavefunctions at 4.008 to s wave to compare the asymptotic behaviour and energy
//the value of s at 4.008 is .023309//d is .132997 , s_asymp is .000271922 , d_asymp  i s .000336918
/////////
for(int ii=0;ii<rmesh.size();++ii){
      filee<<dom0[ii]/rmesh[ii]<<" "<<dom1[ii]<<" "<<dom2[ii]<<" "<<dom3[ii]<<" "<<dom4[ii]<<" "<<dom5[ii]<<std::endl;  
}
//std::cout <<"Es =" << waves_s.first << " " << "Ed= " << waves_d.first <<std::endl;
//std::cout << zp0 << " " << tz<<" "<<norm_s<<" "<< norm_d<<" "<< normAsymp_s<<" norm bob=" << normbob<< std::endl;
//std::cout <<"Elower = "<< Elower <<" " << "Eupper = " << Eupper<<std::endl;
filee.close();
std::cout<<"Spectral Factor = "<<S<<endl;
std::cout<<"Quasi-hole Energy = "<<QPE<<endl;
return 0;

}