diff --git a/source/trunk/include/EvolutionData.hxx b/source/trunk/include/EvolutionData.hxx index 4fb36cb9b673812f6d5e038e1c975b526cd89175..3252ebb218194802e00467b325ef170bc6162c18 100755 --- a/source/trunk/include/EvolutionData.hxx +++ b/source/trunk/include/EvolutionData.hxx @@ -31,7 +31,10 @@ typedef long long int cSecond; EvolutionData operator*(EvolutionData const& evol, double F); EvolutionData operator*(double F, EvolutionData const& evol); EvolutionData operator/(EvolutionData const& evol, double F); -EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2); +//EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2); +EvolutionData Sum(EvolutionData const& evol1, EvolutionData const& evol2); +EvolutionData Multiply(EvolutionData const& evol, double F); +EvolutionData Multiply(double F, EvolutionData const& evol); double Distance(IsotopicVector IV1, EvolutionData Evd1 ); double Distance(EvolutionData Evd1, IsotopicVector IV1 ); diff --git a/source/trunk/src/DataBank.cxx b/source/trunk/src/DataBank.cxx index 95acc4e18a026fb2d41789ae264dbebd6dca59cc..51b0b38078a24a3c3cd8b7b37bd9648f49cb6300 100755 --- a/source/trunk/src/DataBank.cxx +++ b/source/trunk/src/DataBank.cxx @@ -1321,10 +1321,9 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector { double D = 0; D = Distance(isotopicvector.GetActinidesComposition() - * evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll() + * (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll() / isotopicvector.GetActinidesComposition().GetSumOfAll(), - evolutiondb.begin()->second); - + (*it).second); if (D< distance) { @@ -1337,6 +1336,7 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector } else if (fEvolutionDataInterpolation) { + map<double, EvolutionData> distance_map; map<double, EvolutionData>::iterator it_distance; int NClose = 64; @@ -1345,16 +1345,25 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector double SumOfDistance = 0; for( it_distance = distance_map.begin(); Nstep < NClose; it_distance++) { + + cout << (*it_distance).first << endl; + if((*it_distance).first == 0 ) + { + EvolInterpolate = Multiply(1,(*it_distance).second); + return EvolInterpolate; + } if(Nstep == 0) - EvolInterpolate = 1./(*it_distance).first * (*it_distance).second; + EvolInterpolate = Multiply(1./(*it_distance).first, (*it_distance).second); else - EvolInterpolate = EvolInterpolate + 1./(*it_distance).first * (*it_distance).second; + EvolInterpolate = Sum(EvolInterpolate, Multiply(1./(*it_distance).first, (*it_distance).second)); SumOfDistance += 1./(*it_distance).first; Nstep++; } - return 1/SumOfDistance * EvolInterpolate; + EvolInterpolate = Multiply(1/SumOfDistance, EvolInterpolate); + + return EvolInterpolate; } else @@ -1364,21 +1373,23 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector / evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll() * isotopicvector.GetActinidesComposition().GetSumOfAll(), fDistanceType, fDistanceParameter); + for( it = evolutiondb.begin(); it != evolutiondb.end(); it++ ) + { - - double D = 0; + double D = 0; - D = Distance(isotopicvector.GetActinidesComposition(), - evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition() - / evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll() - * isotopicvector.GetActinidesComposition().GetSumOfAll(), - fDistanceType, fDistanceParameter); + D = Distance(isotopicvector.GetActinidesComposition(), + (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition() + / (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll() + * isotopicvector.GetActinidesComposition().GetSumOfAll(), + fDistanceType, fDistanceParameter); - if (D< distance) - { - distance = D; - it_close = it; + if (D< distance) + { + distance = D; + it_close = it; + } } return (*it_close).second; diff --git a/source/trunk/src/EvolutionData.cxx b/source/trunk/src/EvolutionData.cxx index 52f893a3e015e26f607da29793bfb53bf1634cae..9ea942dfb07e1847f995b3826d2380d6a67671ee 100755 --- a/source/trunk/src/EvolutionData.cxx +++ b/source/trunk/src/EvolutionData.cxx @@ -60,8 +60,6 @@ double Distance(IsotopicVector IV1, EvolutionData Evd1 ) } - - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) { double Z1 = IV1.GetZAIIsotopicQuantity( (*it).first ); @@ -71,9 +69,9 @@ double Distance(IsotopicVector IV1, EvolutionData Evd1 ) + Evd1.GetXSForAt(0., (*it).first, 3); d2 += pow(Z1-Z2 , 2 ) * pow(XS,2); + } - return sqrt(d2)/SumOfXs; } @@ -107,10 +105,118 @@ EvolutionData operator*(EvolutionData const& evol, double F) } evoltmp.SetPower(evol.GetPower()*F); + evoltmp.SetFissionXS(evol.GetFissionXS()); + evoltmp.SetCaptureXS(evol.GetCaptureXS()); + evoltmp.Setn2nXS(evol.Getn2nXS()); + + return evoltmp; } -EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2) +//________________________________________________________________________ +EvolutionData operator*(double F, EvolutionData const& evol) +{ + + return evol*F; + +} +//________________________________________________________________________ +EvolutionData operator/(EvolutionData const& evol, double F) +{ + + return evol*(1./F); + +} + +EvolutionData Multiply(EvolutionData const& evol, double F) +{ + + EvolutionData evoltmp; + + map<ZAI ,TGraph* > EvolutionData = evol.GetEvolutionData(); + map<ZAI ,TGraph* >::iterator it; + for(it = EvolutionData.begin(); it != EvolutionData.end(); it++) + { + double X[(*it).second->GetN()]; + double Y[(*it).second->GetN()]; + + for(int i = 0; i < (*it).second->GetN(); i++) + { + double y; + (*it).second->GetPoint( i, X[i], y ); + Y[i] = y*F; + } + evoltmp.NucleiInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) ); + + } + + + EvolutionData = evol.GetFissionXS(); + for(it = EvolutionData.begin(); it != EvolutionData.end(); it++) + { + double X[(*it).second->GetN()]; + double Y[(*it).second->GetN()]; + + for(int i = 0; i < (*it).second->GetN(); i++) + { + double y; + (*it).second->GetPoint( i, X[i], y ); + Y[i] = y*F; + } + evoltmp.FissionXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) ); + + } + + EvolutionData = evol.GetCaptureXS(); + for(it = EvolutionData.begin(); it != EvolutionData.end(); it++) + { + double X[(*it).second->GetN()]; + double Y[(*it).second->GetN()]; + + for(int i = 0; i < (*it).second->GetN(); i++) + { + double y; + (*it).second->GetPoint( i, X[i], y ); + Y[i] = y*F; + } + evoltmp.CaptureXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) ); + + } + EvolutionData = evol.Getn2nXS(); + for(it = EvolutionData.begin(); it != EvolutionData.end(); it++) + { + double X[(*it).second->GetN()]; + double Y[(*it).second->GetN()]; + + for(int i = 0; i < (*it).second->GetN(); i++) + { + double y; + (*it).second->GetPoint( i, X[i], y ); + Y[i] = y*F; + } + evoltmp.n2nXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) ); + + } + + + + evoltmp.SetPower(evol.GetPower()*F); + + + + return evoltmp; + +} + +//________________________________________________________________________ +EvolutionData Multiply(double F, EvolutionData const& evol) +{ + + return Multiply(evol,F); + +} + +EvolutionData Sum(EvolutionData const& evol1, EvolutionData const& evol2) { @@ -235,20 +341,7 @@ EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2) } - //________________________________________________________________________ -EvolutionData operator*(double F, EvolutionData const& evol) -{ - - return evol*F; - -} - //________________________________________________________________________ -EvolutionData operator/(EvolutionData const& evol, double F) -{ - - return evol*(1./F); - -} + //________________________________________________________________________ //________________________________________________________________________