From 7b822d54e0ec965e8aa4f6fcb6ff5f6d34adb0bd Mon Sep 17 00:00:00 2001 From: Baptiste LENIAU <baptiste.leniau@subatech.in2p3.fr> Date: Mon, 14 Sep 2015 15:36:58 +0000 Subject: [PATCH] delete an old branche which I don't what it is git-svn-id: svn+ssh://svn.in2p3.fr/class@736 0e7d625b-0364-4367-a6be-d5be4a48d228 --- .../Equivalence/EQM_BakerRoss_FBR_MOX.cxx | 138 -- .../Equivalence/EQM_BakerRoss_FBR_MOX.hxx | 104 -- .../Model/Equivalence/EQM_LIN_PWR_MOX.cxx | 262 ---- .../Model/Equivalence/EQM_LIN_PWR_MOX.hxx | 80 -- .../Model/Equivalence/EQM_MLP_PWR_MOX.cxx | 183 --- .../Model/Equivalence/EQM_MLP_PWR_MOX.hxx | 81 -- .../Model/Equivalence/EQM_POL_PWR_UO2.cxx | 73 - .../Model/Equivalence/EQM_POL_PWR_UO2.hxx | 71 - .../Model/Equivalence/EQM_QUAD_PWR_MOX.cxx | 139 -- .../Model/Equivalence/EQM_QUAD_PWR_MOX.hxx | 79 -- .../CLASSV4.1/Model/Irradiation/IM_Matrix.cxx | 301 ----- .../CLASSV4.1/Model/Irradiation/IM_Matrix.hxx | 83 -- .../CLASSV4.1/Model/Irradiation/IM_RK4.cxx | 396 ------ .../CLASSV4.1/Model/Irradiation/IM_RK4.hxx | 122 -- .../CLASSV4.1/Model/XS/XSM_CLOSEST.cxx | 372 ------ .../CLASSV4.1/Model/XS/XSM_CLOSEST.hxx | 166 --- .../branches/CLASSV4.1/Model/XS/XSM_MLP.cxx | 550 -------- .../branches/CLASSV4.1/Model/XS/XSM_MLP.hxx | 113 -- .../CLASSV4.1/include/CLASSBackEnd.hxx | 154 --- .../CLASSV4.1/include/CLASSConstante.hxx | 22 - .../CLASSV4.1/include/CLASSFacility.hxx | 214 --- .../branches/CLASSV4.1/include/CLASSFuel.hxx | 85 -- .../CLASSV4.1/include/CLASSFuelPlan.hxx | 100 -- .../CLASSV4.1/include/CLASSHeaders.hxx | 22 - .../CLASSV4.1/include/CLASSLogger.hxx | 216 --- .../include/CLASSNucleiFiliation.hxx | 123 -- .../CLASSV4.1/include/CLASSObject.hxx | 102 -- .../CLASSV4.1/include/DecayDataBank.hxx | 181 --- .../CLASSV4.1/include/DynamicalSystem.hxx | 127 -- .../CLASSV4.1/include/EquivalenceModel.hxx | 150 --- .../CLASSV4.1/include/EvolutionData.hxx | 253 ---- .../CLASSV4.1/include/FabricationPlant.hxx | 240 ---- .../CLASSV4.1/include/IrradiationModel.hxx | 264 ---- .../CLASSV4.1/include/IsotopicVector.hxx | 183 --- .../CLASSV4.1/include/PhysicsModels.hxx | 120 -- source/branches/CLASSV4.1/include/Pool.hxx | 173 --- source/branches/CLASSV4.1/include/Reactor.hxx | 308 ----- .../branches/CLASSV4.1/include/Scenario.hxx | 309 ----- .../CLASSV4.1/include/SeparationPlant.hxx | 131 -- source/branches/CLASSV4.1/include/Storage.hxx | 157 --- .../branches/CLASSV4.1/include/StringLine.hxx | 306 ----- source/branches/CLASSV4.1/include/XSModel.hxx | 97 -- source/branches/CLASSV4.1/include/ZAI.hxx | 96 -- source/branches/CLASSV4.1/include/ZAIHeat.hxx | 70 - source/branches/CLASSV4.1/include/ZAIMass.hxx | 70 - source/branches/CLASSV4.1/include/ZAITox.hxx | 70 - .../branches/CLASSV4.1/src/CLASSBackEnd.cxx | 138 -- .../branches/CLASSV4.1/src/CLASSFacility.cxx | 91 -- source/branches/CLASSV4.1/src/CLASSFuel.cxx | 26 - .../branches/CLASSV4.1/src/CLASSFuelPlan.cxx | 69 - source/branches/CLASSV4.1/src/CLASSLogger.cxx | 112 -- .../CLASSV4.1/src/CLASSNucleiFiliation.cxx | 322 ----- source/branches/CLASSV4.1/src/CLASSObject.cxx | 24 - .../branches/CLASSV4.1/src/DecayDataBank.cxx | 242 ---- .../CLASSV4.1/src/DynamicalSystem.cxx | 214 --- .../CLASSV4.1/src/EquivalenceModel.cxx | 223 ---- .../branches/CLASSV4.1/src/EvolutionData.cxx | 1172 ----------------- .../CLASSV4.1/src/FabricationPlant.cxx | 693 ---------- .../CLASSV4.1/src/IrradiationModel.cxx | 694 ---------- .../branches/CLASSV4.1/src/IsotopicVector.cxx | 716 ---------- source/branches/CLASSV4.1/src/Makefile | 128 -- .../branches/CLASSV4.1/src/PhysicsModels.cxx | 57 - source/branches/CLASSV4.1/src/Pool.cxx | 226 ---- source/branches/CLASSV4.1/src/Reactor.cxx | 607 --------- source/branches/CLASSV4.1/src/Scenario.cxx | 900 ------------- .../CLASSV4.1/src/SeparationPlant.cxx | 141 -- source/branches/CLASSV4.1/src/Storage.cxx | 215 --- source/branches/CLASSV4.1/src/XSModel.cxx | 61 - source/branches/CLASSV4.1/src/ZAI.cxx | 62 - source/branches/CLASSV4.1/src/ZAIHeat.cxx | 99 -- source/branches/CLASSV4.1/src/ZAIMass.cxx | 81 -- source/branches/CLASSV4.1/src/ZAITox.cxx | 99 -- 72 files changed, 15068 deletions(-) delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.hxx delete mode 100644 source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.cxx delete mode 100644 source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.hxx delete mode 100644 source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.cxx delete mode 100644 source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.hxx delete mode 100644 source/branches/CLASSV4.1/Model/XS/XSM_MLP.cxx delete mode 100644 source/branches/CLASSV4.1/Model/XS/XSM_MLP.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSBackEnd.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSConstante.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSFacility.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSFuel.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSFuelPlan.hxx delete mode 100755 source/branches/CLASSV4.1/include/CLASSHeaders.hxx delete mode 100755 source/branches/CLASSV4.1/include/CLASSLogger.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSNucleiFiliation.hxx delete mode 100644 source/branches/CLASSV4.1/include/CLASSObject.hxx delete mode 100644 source/branches/CLASSV4.1/include/DecayDataBank.hxx delete mode 100755 source/branches/CLASSV4.1/include/DynamicalSystem.hxx delete mode 100644 source/branches/CLASSV4.1/include/EquivalenceModel.hxx delete mode 100755 source/branches/CLASSV4.1/include/EvolutionData.hxx delete mode 100644 source/branches/CLASSV4.1/include/FabricationPlant.hxx delete mode 100644 source/branches/CLASSV4.1/include/IrradiationModel.hxx delete mode 100755 source/branches/CLASSV4.1/include/IsotopicVector.hxx delete mode 100644 source/branches/CLASSV4.1/include/PhysicsModels.hxx delete mode 100755 source/branches/CLASSV4.1/include/Pool.hxx delete mode 100755 source/branches/CLASSV4.1/include/Reactor.hxx delete mode 100755 source/branches/CLASSV4.1/include/Scenario.hxx delete mode 100644 source/branches/CLASSV4.1/include/SeparationPlant.hxx delete mode 100644 source/branches/CLASSV4.1/include/Storage.hxx delete mode 100755 source/branches/CLASSV4.1/include/StringLine.hxx delete mode 100644 source/branches/CLASSV4.1/include/XSModel.hxx delete mode 100755 source/branches/CLASSV4.1/include/ZAI.hxx delete mode 100644 source/branches/CLASSV4.1/include/ZAIHeat.hxx delete mode 100644 source/branches/CLASSV4.1/include/ZAIMass.hxx delete mode 100644 source/branches/CLASSV4.1/include/ZAITox.hxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSBackEnd.cxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSFacility.cxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSFuel.cxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSFuelPlan.cxx delete mode 100755 source/branches/CLASSV4.1/src/CLASSLogger.cxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSNucleiFiliation.cxx delete mode 100644 source/branches/CLASSV4.1/src/CLASSObject.cxx delete mode 100644 source/branches/CLASSV4.1/src/DecayDataBank.cxx delete mode 100644 source/branches/CLASSV4.1/src/DynamicalSystem.cxx delete mode 100644 source/branches/CLASSV4.1/src/EquivalenceModel.cxx delete mode 100755 source/branches/CLASSV4.1/src/EvolutionData.cxx delete mode 100644 source/branches/CLASSV4.1/src/FabricationPlant.cxx delete mode 100644 source/branches/CLASSV4.1/src/IrradiationModel.cxx delete mode 100755 source/branches/CLASSV4.1/src/IsotopicVector.cxx delete mode 100755 source/branches/CLASSV4.1/src/Makefile delete mode 100644 source/branches/CLASSV4.1/src/PhysicsModels.cxx delete mode 100755 source/branches/CLASSV4.1/src/Pool.cxx delete mode 100755 source/branches/CLASSV4.1/src/Reactor.cxx delete mode 100755 source/branches/CLASSV4.1/src/Scenario.cxx delete mode 100644 source/branches/CLASSV4.1/src/SeparationPlant.cxx delete mode 100644 source/branches/CLASSV4.1/src/Storage.cxx delete mode 100644 source/branches/CLASSV4.1/src/XSModel.cxx delete mode 100755 source/branches/CLASSV4.1/src/ZAI.cxx delete mode 100644 source/branches/CLASSV4.1/src/ZAIHeat.cxx delete mode 100644 source/branches/CLASSV4.1/src/ZAIMass.cxx delete mode 100644 source/branches/CLASSV4.1/src/ZAITox.cxx diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.cxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.cxx deleted file mode 100644 index db23f1862..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.cxx +++ /dev/null @@ -1,138 +0,0 @@ -#include "EQM_BakerRoss_FBR_MOX.hxx" -#include "CLASSLogger.hxx" - -#include <vector> - -//________________________________________________________________________ -// -// EQM_BakerRoss_FBR_MOX -// -// Equivalenve Model based on Plutonium 239 equivalent -// using the formula of Baker&Ross -// -//________________________________________________________________________ - - -EQM_BakerRoss_FBR_MOX::EQM_BakerRoss_FBR_MOX(double Weight_U_235, double Weight_Pu_238, double Weight_Pu_240, double Weight_Pu_241, double Weight_Pu_242, double Weight_Am_241, double EquivalentFissile):EquivalenceModel(new CLASSLogger("EQM_BakerRoss_FBR_MOX.log")) -{ - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); //Default Fertile composition (if no Fertile Storage is set for the FabricationPlant ) - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; //ZAI to be extracted by the FabricationPlant in its affiliated Fissile Storage - - fReferenceFissilContent=EquivalentFissile;//Equivalent fissile content - SetBuildFuelFirstGuess(fReferenceFissilContent); - - fWeight_U_235 = Weight_U_235 ; - fWeight_Pu_238 = Weight_Pu_238; - fWeight_Pu_240 = Weight_Pu_240; - fWeight_Pu_241 = Weight_Pu_241; - fWeight_Pu_242 = Weight_Pu_242; - fWeight_Am_241 = Weight_Am_241; - - - INFO<<"__An equivalence model of FBR MOX has been defined__"<<endl; - INFO<<"\tThis model is based on Plutonium 239 equivalent"<<endl; - INFO<<"\t\t Weigt values : "<<endl; - INFO<<"\t\t Fertile : "<<endl; - INFO<<"\t\t\tU_235 "<< Weight_U_235<<endl; - INFO<<"\t\t\tU_238 0 (by definition)"<<endl; - INFO<<"\t\t Fissile : "<<endl; - INFO<<"\t\t\tPu_238 "<<Weight_Pu_238<<endl; - INFO<<"\t\t\tPu_239 1 (by definition)"<<endl; - INFO<<"\t\t\tPu_240 "<<Weight_Pu_240<<endl; - INFO<<"\t\t\tPu_241 "<<Weight_Pu_241<<endl; - INFO<<"\t\t\tPu_242 "<<Weight_Pu_242<<endl; - INFO<<"\t\t\tAm_241 "<<Weight_Am_241<<endl; - -} -//________________________________________________________________________ -EQM_BakerRoss_FBR_MOX::EQM_BakerRoss_FBR_MOX(CLASSLogger* log, double Weight_U_235, double Weight_Pu_238, double Weight_Pu_240, double Weight_Pu_241, double Weight_Pu_242, double Weight_Am_241, double EquivalentFissile ):EquivalenceModel(log) -{ - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); //Default Fertile composition (if no Fertile Storage is set for the FabricationPlant ) - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; //ZAI to be extracted by the FabricationPlant in its affiliated Fissile Storage - - fReferenceFissilContent=EquivalentFissile;//Equivalent fissile content - SetBuildFuelFirstGuess(fReferenceFissilContent); - - fWeight_U_235 = Weight_U_235 ; - fWeight_Pu_238 = Weight_Pu_238; - fWeight_Pu_240 = Weight_Pu_240; - fWeight_Pu_241 = Weight_Pu_241; - fWeight_Pu_242 = Weight_Pu_242; - fWeight_Am_241 = Weight_Am_241; - - - INFO<<"__An equivalence model of FBR MOX has been defined__"<<endl; - INFO<<"\tThis model is based on Plutonium 239 equivalent"<<endl; - INFO<<"\t\t Weigt values : "<<endl; - INFO<<"\t\t Fertile : "<<endl; - INFO<<"\t\t\tU_235 "<< Weight_U_235<<endl; - INFO<<"\t\t\tU_238 0 (by definition)"<<endl; - INFO<<"\t\t Fissile : "<<endl; - INFO<<"\t\t\tPu_238 "<<Weight_Pu_238<<endl; - INFO<<"\t\t\tPu_239 1 (by definition)"<<endl; - INFO<<"\t\t\tPu_240 "<<Weight_Pu_240<<endl; - INFO<<"\t\t\tPu_241 "<<Weight_Pu_241<<endl; - INFO<<"\t\t\tPu_242 "<<Weight_Pu_242<<endl; - INFO<<"\t\t\tAm_241 "<<Weight_Am_241<<endl; - - -} -//________________________________________________________________________ -double EQM_BakerRoss_FBR_MOX::GetFissileMolarFraction(IsotopicVector Fissile,IsotopicVector Fertile,double BurnUp) -{ - double FissileContent = 0.; - - IsotopicVector FissileListPlusDecay; - FissileListPlusDecay.Add(94,238,0,1); - FissileListPlusDecay.Add(94,239,0,1); - FissileListPlusDecay.Add(94,240,0,1); - FissileListPlusDecay.Add(94,241,0,1); - FissileListPlusDecay.Add(94,242,0,1); - FissileListPlusDecay.Add(95,241,0,1); - - IsotopicVector FertileList; - FertileList.Add(92,238,0,1); - FertileList.Add(92,239,0,1); - - //Getting the fissile from the Fissile input & normalize it - IsotopicVector FissileFromInput = Fissile.GetThisComposition(FissileListPlusDecay); - FissileFromInput=FissileFromInput/FissileFromInput.GetSumOfAll(); - - //Getting the fissile from the Fissile input & normalize it - IsotopicVector FertileFromInput = Fertile.GetThisComposition(FertileList); - FertileFromInput=FertileFromInput/FertileFromInput.GetSumOfAll(); - - double SumWeightNFissile = fWeight_Pu_238 * FissileFromInput.GetZAIIsotopicQuantity(94,238,0) - + 1 * FissileFromInput.GetZAIIsotopicQuantity(94,239,0) - + fWeight_Pu_240 * FissileFromInput.GetZAIIsotopicQuantity(94,240,0) - + fWeight_Pu_241 * FissileFromInput.GetZAIIsotopicQuantity(94,241,0) - + fWeight_Pu_242 * FissileFromInput.GetZAIIsotopicQuantity(94,242,0) - + fWeight_Am_241 * FissileFromInput.GetZAIIsotopicQuantity(95,241,0) ; - - double SumWeightNFertile = fWeight_U_235 * FertileFromInput.GetZAIIsotopicQuantity(92,235,0); - - FissileContent = (fReferenceFissilContent - SumWeightNFertile )/(SumWeightNFissile-SumWeightNFertile); //Baker & Ross formula - - - return FissileContent; - - -} diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.hxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.hxx deleted file mode 100644 index 0c6b27130..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_BakerRoss_FBR_MOX.hxx +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef _EQM_BakerRoss_FBR_MOX_HXX -#define _EQM_BakerRoss_FBR_MOX_HXX - -#include "EquivalenceModel.hxx" - -#include <string> - -/*! - \file - \brief Header file for EQM_BakerRoss_FBR_MOX class. - - - @author BLG - @version 1.0 - */ - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines an EquivalenceModel based on Baker and Ross formula - -/*! - The aim of these class is to constuct a fuel from an equivalence model - based on a @f$^{239}Pu@f$ equivalent from Baker and Ross formula : - - It returns Pu content (E) needed for the FBR-Na loaded with a given Pu vector according - : - - @f$E = \frac{E_{ref} - \sum_{fertile}N_{i}W_{i} }{\sum_{fissile}N_{i}W_{i}-\sum_{fertile}N_{i}W_{i}}@f$ - - with : - - @f$W_i = \frac{\alpha_{i} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - and - @f$\alpha_{i} = \bar{\nu_{i}}\cdot\sigma_{i}^{fis} - \sigma_{i}^{abs}@f$ - - @author BLG - @version 3.0 - */ -//________________________________________________________________________ - -class EQM_BakerRoss_FBR_MOX : public EquivalenceModel -{ - public : - - /*! - \name Constructor - */ - //@{ - //{ - /// Logger constructor - - /*! - Make a new EQM_BakerRoss_FBR_MOX : the default values have been calculated for a FBR-Na of type : ESFR like (without blanket) - \param log : use for the log - \param Weight_U_235 : reactivity weight @f$W_{^{235}U} = \frac{\alpha_{{^{235}U}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_238 : reactivity weight @f$W_{^{238}Pu} = \frac{\alpha_{{^{238}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_240 : reactivity weight @f$W_{^{240}Pu} = \frac{\alpha_{{^{240}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_241 : reactivity weight @f$W_{^{241}Pu} = \frac{\alpha_{{^{241}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_242 : reactivity weight @f$W_{^{242}Pu} = \frac{\alpha_{{^{242}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Am_241 : reactivity weight @f$W_{^{241}Pu} = \frac{\alpha_{{^{241}Am}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param EquivalentFissile : reference fresh fuel @f$^{239}Pu@f$ content neeed in a @f$^{238}U@f$ + @f$^{239}Pu@f$ fuel to satisfy criticality at t=0 - */ - EQM_BakerRoss_FBR_MOX(CLASSLogger* log, double Weight_U_235 =0.793671, double Weight_Pu_238=0.6836, double Weight_Pu_240=0.13558, double Weight_Pu_241=1.5503, double Weight_Pu_242=0.0803952, double Weight_Am_241=-0.342553, double EquivalentFissile = 0.106); - //} - - //{ - /// normal constructor - - /*! - Make a new EQM_BakerRoss_FBR_MOX : the default values have been calculated for a FBR-Na of type : ESFR like (without blanket) - \param Weight_U_235 : reactivity weight @f$W_{^{235}U} = \frac{\alpha_{{^{235}U}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_238 : reactivity weight @f$W_{^{238}Pu} = \frac{\alpha_{{^{238}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_240 : reactivity weight @f$W_{^{240}Pu} = \frac{\alpha_{{^{240}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_241 : reactivity weight @f$W_{^{241}Pu} = \frac{\alpha_{{^{241}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Pu_242 : reactivity weight @f$W_{^{242}Pu} = \frac{\alpha_{{^{242}Pu}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param Weight_Am_241 : reactivity weight @f$W_{^{241}Pu} = \frac{\alpha_{{^{241}Am}} - \alpha_{^{238}U} }{\alpha_{^{239}Pu}-\alpha_{^{238}U}}@f$ - \param EquivalentFissile : reference fresh fuel @f$^{239}Pu@f$ content neeed in a @f$^{238}U@f$ + @f$^{239}Pu@f$ fuel to satisfy criticality at t=0 - */ - EQM_BakerRoss_FBR_MOX(double Weight_U_235 =0.793671, double Weight_Pu_238=0.6836, double Weight_Pu_240=0.13558, double Weight_Pu_241=1.5503, double Weight_Pu_242=0.0803952, double Weight_Am_241=-0.342553, double EquivalentFissile = 0.106); - //} - //@} - - virtual double GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp); - - private : - double fReferenceFissilContent; //!<The reference fraction of Pu for BurnUp=100Gwj/t with a ideal model(only @f$^{239}Pu@f$ and &@f$^{238}U@f$ are taken into account) - - /*! - \name Reactivity coefficients : - */ - //@{ - double fWeight_U_235; //!< weight for @f$^{235}U@f$ - double fWeight_Pu_238; //!< weight for @f$^{238}Pu@f$ - double fWeight_Pu_240; //!< weight for @f$^{240}Pu@f$ - double fWeight_Pu_241; //!< weight for @f$^{241}Pu@f$ - double fWeight_Pu_242; //!< weight for @f$^{242}Pu@f$ - double fWeight_Am_241; //!< weight for @f$^{241}Am@f$ - //@} -}; - -#endif - - diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.cxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.cxx deleted file mode 100644 index 90279f074..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.cxx +++ /dev/null @@ -1,262 +0,0 @@ -#include "EQM_LIN_PWR_MOX.hxx" - -#include "CLASSConstante.hxx" - -#include <vector> - -#include "StringLine.hxx" -#include "CLASSLogger.hxx" -#include "IsotopicVector.hxx" - - - -EQM_LIN_PWR_MOX::EQM_LIN_PWR_MOX(string WeightPath):EquivalenceModel(new CLASSLogger("EQM_LIN_PWR_MOX.log")) -{ - fWeightPath = WeightPath; - - ifstream DataDB(fWeightPath.c_str()); // Open the File - if(!DataDB) - WARNING << "Can't open \"" << fWeightPath << "\"\n" << endl; - - string line; - int start = 0; // First Get Fuel Parameter - getline(DataDB, line); - - if( StringLine::NextWord(line, start, ' ') != "PARAM") - { - ERROR << " Bad Database file : " << fWeightPath << " Can't find the Parameter of the DataBase " << endl; - exit (1); - } - while(start < (int)line.size()) - fFuelParameter.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - INFO << " " << (int)fFuelParameter.size() << " parameters have been read " << endl; - - - - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - // ADD ENrichment of the U reading !!!!!!!!!!!!!!!!!!!!!!!!!!!! // - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - - -} - - -EQM_LIN_PWR_MOX::EQM_LIN_PWR_MOX(CLASSLogger* log, string WeightPath):EquivalenceModel(log) -{ - fWeightPath = WeightPath; - - ifstream DataDB(fWeightPath.c_str()); // Open the File - if(!DataDB) - WARNING << " Can't open \"" << fWeightPath << "\"\n" << endl; - - string line; - int start = 0; // First Get Fuel Parameter - getline(DataDB, line); - - if( StringLine::NextWord(line, start, ' ') != "PARAM") - { - ERROR << " Bad Database file : " << fWeightPath << " Can't find the Parameter of the DataBase"<< endl; - exit (1); - } - while(start < (int)line.size()) - fFuelParameter.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - INFO << fFuelParameter.size() << " have been read"<< endl; - - - - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - // ADD ENrichment of the U reading !!!!!!!!!!!!!!!!!!!!!!!!!!!! // - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - - -} - -EQM_LIN_PWR_MOX::~EQM_LIN_PWR_MOX() -{ - -} - -//________________________________________________________________________ -vector<double> EQM_LIN_PWR_MOX::BuildFuel(double BurnUp, double HMMass,vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray) -{ - - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - // ADD ENrichment of the U check ++ Check Un seul fertile !!!! // - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - //-----------------------------------------------------------------------------// - - - vector<double> lambda; - for(int i = 0; i < (int) (FissilArray.size() + FertilArray.size()); i++) - lambda.push_back(0); - - - double Na = 6.02214129e23; //N Avogadro - - IsotopicVector FullUsedStock; - IsotopicVector stock; - - bool FuelBuild = false; - if(FissilArray.size() == 0) - { - for(int i = 0; i < (int)lambda.size(); i++) - lambda[i] = -1; - - FuelBuild = true; - } - int N_FissilStock_OnCheck = 0; - - while(!FuelBuild) - { - - double nPu_0 = 0; - double MPu_0 = 0; - { - map<ZAI ,double>::iterator it; - - map<ZAI ,double> isotopicquantity = FullUsedStock.GetSpeciesComposition(94).GetIsotopicQuantity(); - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++ ) - nPu_0 += (*it).second; - - IsotopicVector IV_Pm_Am = (FullUsedStock.GetSpeciesComposition(94) - + ZAI(94,241,0)*FullUsedStock.GetZAIIsotopicQuantity(95,241,0)); - //Add the 241Am as 241Pu... the Pu is not old in the Eq Model but is in the FissileArray....; - MPu_0 += cZAIMass.GetMass(IV_Pm_Am); - } - stock = FissilArray[N_FissilStock_OnCheck]; - double nPu_1 = 0; - double MPu_1 = 0; - double Sum_AlphaI_nPuI = 0; - double Sum_AlphaI_nPuI0 = 0; - { - map<ZAI ,double>::iterator it; - map<ZAI ,double> isotopicquantity = stock.GetSpeciesComposition(94).GetIsotopicQuantity(); - - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++ ) - { - if ((*it).first.A() >= 238 && (*it).first.A() <= 242) - { - nPu_1 += (*it).second; - Sum_AlphaI_nPuI += fFuelParameter[(*it).first.A() -237]*(*it).second; - } - } - - isotopicquantity = (stock.GetSpeciesComposition(94) + ZAI(94,241,0)*stock.GetZAIIsotopicQuantity(95,241,0)).GetIsotopicQuantity(); - IsotopicVector IV_Pm_Am = (stock.GetSpeciesComposition(94) - + ZAI(94,241,0)*stock.GetZAIIsotopicQuantity(95,241,0)); - //Add the 241Am as 241Pu... the Pu is not old in the Eq Model but is in the FissileArray.... - MPu_1 += cZAIMass.GetMass(IV_Pm_Am); - - isotopicquantity = FullUsedStock.GetSpeciesComposition(94).GetIsotopicQuantity(); - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++ ) - if ((*it).first.A() >= 238 && (*it).first.A() <= 242) - { - Sum_AlphaI_nPuI0 += fFuelParameter[(*it).first.A() -237]*(*it).second; - } - } - - double StockFactionToUse = 0; - - double NT = HMMass*1e6 * Na / (cZAIMass.GetMass( ZAI(92,238,0) ) * 0.997 - + cZAIMass.GetMass( ZAI(92,235,0) ) * 0.003 ); - - double N1 = (BurnUp - fFuelParameter[6]) * NT; - double N2 = -Sum_AlphaI_nPuI0; - double N3 = -fFuelParameter[0] * Na / (cZAIMass.GetMass( ZAI(92,238,0) )*0.997 - + cZAIMass.GetMass( ZAI(92,235,0) )*0.003 ) - * (HMMass*1e6 - MPu_0*1e6); - - double D1 = Sum_AlphaI_nPuI; - double D2 = -fFuelParameter[0] * MPu_1*1e6 * Na / (cZAIMass.GetMass( ZAI(92,238,0) )*0.997 - + cZAIMass.GetMass( ZAI(92,235,0) )*0.003 ); - - StockFactionToUse = (N1 + N2 + N3) / (D1 + D2); - - if(StockFactionToUse < 0) - { - WARNING << "!!!FabricationPlant!!! Oups Bug in calculating stock fraction to use "<< endl; - lambda[N_FissilStock_OnCheck] = 0.; - N_FissilStock_OnCheck++; - FuelBuild = false; - } - else if( StockFactionToUse > 1 ) - { - - FullUsedStock += stock; - lambda[N_FissilStock_OnCheck] = 1; - N_FissilStock_OnCheck++; - FuelBuild = false; - } - else - { - lambda[N_FissilStock_OnCheck] = StockFactionToUse; - - FuelBuild = true; - - double U8_Quantity = (HMMass - (MPu_0+StockFactionToUse*MPu_1 ))/(cZAIMass.GetMass( ZAI(92,238,0))*0.997 + cZAIMass.GetMass( ZAI(92,235,0))*0.003 )*Na/1e-6; - - lambda.back() = U8_Quantity / FertilArray[0].GetSumOfAll(); - } - - - if( N_FissilStock_OnCheck == (int) FissilArray.size() ) // Check if the last Fissil stock has been tested... quit if so... - { - for(int i = 0; i < (int)lambda.size(); i++) - lambda[i] = -1; - - FuelBuild = true; - } - } - - - - return lambda; -} diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.hxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.hxx deleted file mode 100644 index 851bcd3d7..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_LIN_PWR_MOX.hxx +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef _EQM_LIN_PWR_MOX_HXX -#define _EQM_LIN_PWR_MOX_HXX - -#include "EquivalenceModel.hxx" - -#include <string> - -/*! - \file - \brief Header file for EQM_LIN_PWR_MOX class. - - - @author BaM - @version 1.0 - */ - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines an EquivalenceModel based on a linear fit - -/*! - The aim of these class is to constuct a fuel from an equivalence model - based on a Linear Eq Model @f$BU = \alpha_{0} + \sum_{i\in fissile}\alpha_{i}\cdot n_{i} @f$ - For one set of @f$\alpha @f$ values the fabrication time is fixed in order to decrease - the dimentionality by 1 (@f$^{241}Am@f$ is thus fixed by this fixed decay time) . - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - -class EQM_LIN_PWR_MOX : public EquivalenceModel -{ - public : - /*! - \name Constructor - */ - //@{ - - //{ - /// Simple constructor - - /*! - Make a new EQM_LIN_PWR_MOX - \param WeightPath : Path to the file containing the @f$\alpha_{i}@f$. The file is format as : - - @f$PARAM@f$ @f$\alpha_{0}@f$ @f$\alpha_{^{238}Pu}@f$ @f$\alpha_{^{239}Pu}@f$ @f$\alpha_{^{240}Pu}@f$ @f$\alpha_{^{241}Pu}@f$ @f$\alpha_{^{242}Pu}@f$ - - */ - EQM_LIN_PWR_MOX(string WeightPath); - //} - - //{ - /// Logger constructor - - /*! - Make a new EQM_LIN_PWR_MOX - \param log : use for the log - \param WeightPath : Path to the file containing the @f$\alpha_{i}@f$. The file is format as : - - @f$PARAM@f$ @f$\alpha_{0}@f$ @f$\alpha_{^{238}Pu}@f$ @f$\alpha_{^{239}Pu}@f$ @f$\alpha_{^{240}Pu}@f$ @f$\alpha_{^{241}Pu}@f$ @f$\alpha_{^{242}Pu}@f$ - - */ - EQM_LIN_PWR_MOX(CLASSLogger* log, string WeightPath); - //} - - ~EQM_LIN_PWR_MOX(); - //@} - - virtual vector<double> BuildFuel(double BurnUp, double HMMass, vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray ); - - private : - - string fWeightPath; //!< The full path to the file containing the @f$\alpha_{i}@f$ - vector<double> fFuelParameter; //!< The vector of @f$\alpha_{i}@f$ - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.cxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.cxx deleted file mode 100644 index a09d3e904..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.cxx +++ /dev/null @@ -1,183 +0,0 @@ -#include "EquivalenceModel.hxx" -#include "EQM_MLP_PWR_MOX.hxx" -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> -#include <cassert> - -#include "TSystem.h" -#include "TMVA/Reader.h" -#include "TMVA/Tools.h" -#include "TMVA/MethodCuts.h" - - -//________________________________________________________________________ -// -// EQM_MLP_PWR_MOX -// -// Equivalenve Model based on multi layer perceptron from TMVA (root cern) -// For REP MOX use -// -//________________________________________________________________________ - -EQM_MLP_PWR_MOX::EQM_MLP_PWR_MOX(string TMVAWeightPath):EquivalenceModel(new CLASSLogger("EQM_MLP_PWR_MOX.log")) -{ - fTMVAWeightPath = TMVAWeightPath; - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - SetBuildFuelFirstGuess(0.04); - - INFO<<"__An equivalence model of PWR MOX has been define__"<<endl; - INFO<<"\tThis model is based on a multi layer perceptron"<<endl; - INFO<<"\t\tThe TMVA weight file is :"<<endl; - INFO<<"\t\t\t"<<fTMVAWeightPath<<endl; - -} - -//________________________________________________________________________ -EQM_MLP_PWR_MOX::EQM_MLP_PWR_MOX(CLASSLogger* log, string TMVAWeightPath):EquivalenceModel(log) -{ - fTMVAWeightPath = TMVAWeightPath; - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - SetBuildFuelFirstGuess(0.04); - - INFO<<"__An equivalence model of PWR MOX has been define__"<<endl; - INFO<<"\tThis model is based on a multi layer perceptron"<<endl; - INFO<<"\t\tThe TMVA weight file is :"<<endl; - INFO<<"\t\t\t"<<fTMVAWeightPath<<endl; - -} - -//________________________________________________________________________ -TTree* EQM_MLP_PWR_MOX::CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp) -{ - TTree* InputTree = new TTree("EQTMP", "EQTMP"); - float Pu8 = 0; - float Pu9 = 0; - float Pu10 = 0; - float Pu11 = 0; - float Pu12 = 0; - float Am1 = 0; - float U5_enrichment = 0; - float BU = 0; - - InputTree->Branch( "Pu8" ,&Pu8 ,"Pu8/F" ); - InputTree->Branch( "Pu9" ,&Pu9 ,"Pu9/F" ); - InputTree->Branch( "Pu10" ,&Pu10 ,"Pu10/F" ); - InputTree->Branch( "Pu11" ,&Pu11 ,"Pu11/F" ); - InputTree->Branch( "Pu12" ,&Pu12 ,"Pu12/F" ); - InputTree->Branch( "Am1" ,&Am1 ,"Am1/F" ); - InputTree->Branch( "U5_enrichment" ,&U5_enrichment ,"U5_enrichment/F" ); - InputTree->Branch( "BU" ,&BU ,"BU/F" ); - - - float U8 = Fertil.GetZAIIsotopicQuantity(92,238,0); - float U5 = Fertil.GetZAIIsotopicQuantity(92,235,0); - float U4 = Fertil.GetZAIIsotopicQuantity(92,234,0); - - float UTOT = U8 + U5 + U4; - - Pu8 = Fissil.GetZAIIsotopicQuantity(94,238,0); - Pu9 = Fissil.GetZAIIsotopicQuantity(94,239,0); - Pu10 = Fissil.GetZAIIsotopicQuantity(94,240,0); - Pu11 = Fissil.GetZAIIsotopicQuantity(94,241,0); - Pu12 = Fissil.GetZAIIsotopicQuantity(94,242,0); - Am1 = Fissil.GetZAIIsotopicQuantity(95,241,0); - - double TOTPU=(Pu8+Pu9+Pu10+Pu11+Pu12+Am1); - - Pu8 = Pu8 / TOTPU; - Pu9 = Pu9 / TOTPU; - Pu10= Pu10 / TOTPU; - Pu11= Pu11 / TOTPU; - Pu12= Pu12 / TOTPU; - Am1 = Am1 / TOTPU; - - U5_enrichment = U5 / UTOT; - - BU=BurnUp; - if(Pu8 + Pu9 + Pu10 + Pu11 + Pu12 + Am1 > 1.00001 )//?????1.00001??? I don't know it! goes in condition if =1 !! may be float/double issue ... - { - ERROR << Pu8 << " " << Pu9 << " " << Pu10 << " " << Pu11 << " " << Pu12 << " " << Am1 << endl; - exit(0); - } - // All value are molar (!weight) - - InputTree->Fill(); - return InputTree; -} -//________________________________________________________________________ -double EQM_MLP_PWR_MOX::ExecuteTMVA(TTree* theTree) -{ - // --- Create the Reader object - TMVA::Reader *reader = new TMVA::Reader( "Silent" ); - // Create a set of variables and declare them to the reader - // - the variable names MUST corresponds in name and type to those given in the weight file(s) used - Float_t Pu8,Pu9,Pu10,Pu11,Pu12,Am1,BU,U5_enrichment; - - reader->AddVariable( "BU" ,&BU ); - reader->AddVariable( "U5_enrichment",&U5_enrichment ); - reader->AddVariable( "Pu8" ,&Pu8 ); - reader->AddVariable( "Pu9" ,&Pu9 ); - reader->AddVariable( "Pu10" ,&Pu10); - reader->AddVariable( "Pu11" ,&Pu11); - reader->AddVariable( "Pu12" ,&Pu12); - reader->AddVariable( "Am1" ,&Am1 ); - - // --- Book the MVA methods - - // Book method MLP - TString methodName = "MLP method"; - reader->BookMVA( methodName, fTMVAWeightPath ); - theTree->SetBranchAddress( "BU" ,&BU ); - theTree->SetBranchAddress( "U5_enrichment" ,&U5_enrichment ) ; - theTree->SetBranchAddress( "Pu8" ,&Pu8 ); - theTree->SetBranchAddress( "Pu9" ,&Pu9 ); - theTree->SetBranchAddress( "Pu10" ,&Pu10 ); - theTree->SetBranchAddress( "Pu11" ,&Pu11 ); - theTree->SetBranchAddress( "Pu12" ,&Pu12 ); - theTree->SetBranchAddress( "Am1" ,&Am1 ); - theTree->GetEntry(0); - - Float_t val = (reader->EvaluateRegression( methodName ))[0]; - - delete reader; - delete theTree; - - return (double)val; //retourne teneur -} -//________________________________________________________________________ -double EQM_MLP_PWR_MOX::GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp) -{DBGL - return ExecuteTMVA(CreateTMVAInputTree(Fissil,Fertil,BurnUp)); -} diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.hxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.hxx deleted file mode 100644 index 50fd621d0..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_MLP_PWR_MOX.hxx +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef _EQM_MLP_PWR_MOX_HXX -#define _EQM_MLP_PWR_MOX_HXX - -#include "EquivalenceModel.hxx" -#include "TTree.h" - -/*! - \file - \brief Header file for EQM_MLP_PWR_MOX class. - - - @author BLG - @version 1.0 - */ - - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines an EquivalenceModel based on neural network - -/*! - The aim of these class is to constuct a fuel from an equivalence model - based on a Multi layer perceptron - - @author BLG - @version 3.0 - */ -//________________________________________________________________________ - - -class EQM_MLP_PWR_MOX : public EquivalenceModel -{ - public : - /*! - \name Constructor - */ - //@{ - - //{ - /// normal constructor - /*! - Create a EQM_MLP_PWR_MOX - \param TMVAWeightPath : PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight) - */ - EQM_MLP_PWR_MOX(string TMVAWeightPath); - //} - - //{ - /// Logger constructor - /*! - Create a EQM_MLP_PWR_MOX - \param log : use for log - \param TMVAWeightPath : PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight) - */ - EQM_MLP_PWR_MOX(CLASSLogger* log, string TMVAWeightPath); - //} - //@} - - //{ - /// Return the molar fissile fraction according fissile & ferile content using a Multi Layer Peceptron (MLP) - /*! - \param Fissil : The composition of the fissile matter - \param Fertil : The composition of the Fertil matter - \param BurnUp : Maximum achievable burn up envisaged - */ - virtual double GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp); - //} - - private : - - TTree* CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Create input tmva tree to be read by ExecuteTMVA - double ExecuteTMVA(TTree* theTree);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree - - - string fTMVAWeightPath;;//!<The weight needed by TMVA to construct and execute the multilayer perceptron - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.cxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.cxx deleted file mode 100644 index 17e13ab96..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.cxx +++ /dev/null @@ -1,73 +0,0 @@ -#include "EquivalenceModel.hxx" -#include "EQM_POL_PWR_UO2.hxx" -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - - -// ________________________________________________________________________ -// EQM_POL_PWR_UO2 -// -// ________________________________________________________________________ - - - - -//Constructor(s) -EQM_POL_PWR_UO2::EQM_POL_PWR_UO2(string PathToWeightFile):EquivalenceModel(new CLASSLogger("EQM_POL_PWR_UO2.log")) -{ - - // Fertile - ZAI U8(92 ,238 ,0) ; - fFertileList = U8*1; - // Fissile - ZAI U5(92 ,235 ,0) ; - // ... - fFissileList = U5*1; - - ReadWeightFile(PathToWeightFile); - -} -// _______________________________________________________________________ -EQM_POL_PWR_UO2::EQM_POL_PWR_UO2(CLASSLogger* log,string PathToWeightFile):EquivalenceModel(log) -{ - - // Fertile - ZAI U8(92 ,238 ,0) ; - fFertileList = U8*1; - // Fissile - ZAI U5(92 ,235 ,0) ; - // ... - fFissileList = U5*1; - - ReadWeightFile(PathToWeightFile); - -} -// _______________________________________________________________________ -void EQM_POL_PWR_UO2::ReadWeightFile(string PathToWeightFile) -{ - ifstream DataDB(PathToWeightFile.c_str()); // Open the File - if(!DataDB) - WARNING << " Can't open \"" << PathToWeightFile << "\"" << endl; - - string line; - int start = 0; // First Get Fuel Parameter - getline(DataDB, line); - - if( StringLine::NextWord(line, start, ' ') != "PARAM") - { - ERROR << "Bad Database file : " << PathToWeightFile << " Can't find the Parameter of the DataBase " << endl; - exit (1); - } - fParam_Bu_0 = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - fParam_Bu = atof(StringLine::NextWord(line, start, ' ').c_str()); - fParam_BuSquare = atof(StringLine::NextWord(line, start, ' ').c_str()); - - INFO << "Weight parameters has been read "<<endl; - INFO <<"\t U enrichment = "<<fParam_Bu_0<<" + "<<fParam_Bu<<"*Burnup + "<< fParam_BuSquare<<"*Burnup*Burnup"<<endl; -} -// _______________________________________________________________________ -double EQM_POL_PWR_UO2::GetFissileMolarFraction ( IsotopicVector Fissil , IsotopicVector Fertil , double BurnUp ) -{ - return fParam_Bu_0 + fParam_Bu*BurnUp + fParam_BuSquare*BurnUp*BurnUp ; - -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.hxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.hxx deleted file mode 100644 index 6f8631669..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_POL_PWR_UO2.hxx +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef _EQM_POL_PWR_UO2_HXX -#define _EQM_POL_PWR_UO2_HXX - -#include "EquivalenceModel.hxx" - -using namespace std; - -//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−--------------−−−−−−−−−−−−−−−// -//! Define an EquivalenceModel based on a polynomial fit - -/*! - Defines a EQM_POL_PWR_UO2 - It returns the @f$^{235}U@f$ enrichment e according to this polynom : - - @f$e=\alpha_{0} + \alpha_{1}\cdot Burnup + \alpha_{2}\cdot Burnup \cdot Burnup @f$ - - BU : Maximum achievable burnup - - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - - - -class EQM_POL_PWR_UO2 : public EquivalenceModel -{ - -public: - /*! - \name Constructor - */ - //@{ - - //{ - /// normal constructor - /*! - Create a EQM_POL_PWR_UO2 - \param PathToWeightFile : Path to the file containing the @f$\alpha_{i}@f$ - Format : @f$PARAM@f$ @f$\alpha_{0}@f$ @f$\alpha_{1}@f$ @f$\alpha_{2}@f$ - */ - EQM_POL_PWR_UO2(string PathToWeightFile); - //} - - //{ - /// logger constructor - /*! - Create a EQM_POL_PWR_UO2 - \param log : Use for the log - \param PathToWeightFile : Path to the file containing the @f$\alpha_{i}@f$ - Format : @f$PARAM@f$ @f$\alpha_{0}@f$ @f$\alpha_{1}@f$ @f$\alpha_{2}@f$ - */ - EQM_POL_PWR_UO2(CLASSLogger* log, string PathToWeightFile); - //} - - //@} - /**This function IS the equivalence model**/ - double GetFissileMolarFraction(IsotopicVector Fissil, IsotopicVector Fertil,double BurnUp) ; // !<Return the molar fraction of fissile element - - -private: - - void ReadWeightFile(string PathToWeightFile); //!< Function to read the weight file & file the parameters - - double fParam_Bu_0 ; //!< @f$\alpha_{0}@f$ - double fParam_Bu ; //!< @f$\alpha_{1}@f$ - double fParam_BuSquare ; //!< @f$\alpha_{2}@f$ - -}; - -#endif \ No newline at end of file diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.cxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.cxx deleted file mode 100644 index 7632745c0..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.cxx +++ /dev/null @@ -1,139 +0,0 @@ -#include "EQM_QUAD_PWR_MOX.hxx" - -#include <vector> - -#include "StringLine.hxx" -#include "CLASSLogger.hxx" - - - - -EQM_QUAD_PWR_MOX::EQM_QUAD_PWR_MOX(string WeightPath):EquivalenceModel(new CLASSLogger("EQM_QUAD_PWR_MOX.log")) -{ - fWeightPath = WeightPath; - - ifstream DataDB(fWeightPath.c_str()); // Open the File - if(!DataDB) - WARNING << " Can't open \"" << fWeightPath << "\"" << endl; - - string line; - int start = 0; // First Get Fuel Parameter - getline(DataDB, line); - - if( StringLine::NextWord(line, start, ' ') != "PARAM") - { - ERROR << "Bad Database file : " << fWeightPath << " Can't find the Parameter of the DataBase " << endl; - exit (1); - } - while(start < (int)line.size()) - fFuelParameter.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - INFO << fFuelParameter.size() << " have been read " << endl; - - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - - SetBuildFuelFirstGuess(0.04); - - -} - -EQM_QUAD_PWR_MOX::EQM_QUAD_PWR_MOX(CLASSLogger* log, string WeightPath):EquivalenceModel(log) -{ - fWeightPath = WeightPath; - - ifstream DataDB(fWeightPath.c_str()); // Open the File - if(!DataDB) - WARNING << " Can't open \"" << fWeightPath << "\"" << endl; - - string line; - int start = 0; // First Get Fuel Parameter - getline(DataDB, line); - - if( StringLine::NextWord(line, start, ' ') != "PARAM") - { - ERROR << "Bad Database file : " << fWeightPath << " Can't find the Parameter of the DataBase " << endl; - exit (1); - } - while(start < (int)line.size()) - fFuelParameter.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - INFO << fFuelParameter.size() << " have been read " << endl; - - - ZAI U8(92,238,0); - ZAI U5(92,235,0); - double U5_enrich= 0.0025; - fFertileList = U5*U5_enrich + U8*(1-U5_enrich); - - - ZAI Pu8(94,238,0); - ZAI Pu9(94,239,0); - ZAI Pu0(94,240,0); - ZAI Pu1(94,241,0); - ZAI Pu2(94,242,0); - fFissileList = Pu8*1+Pu9*1+Pu0*1+Pu1*1+Pu2*1; - - SetBuildFuelFirstGuess(0.04); - -} - - - -EQM_QUAD_PWR_MOX::~EQM_QUAD_PWR_MOX() -{ - -} - - - - -double EQM_QUAD_PWR_MOX::GetFissileMolarFraction(IsotopicVector Fissile,IsotopicVector Fertile,double BurnUp) -{ - - - ZAI ZAIList[6] = {ZAI(94,238,0), ZAI(94,239,0), ZAI(94,240,0), ZAI(94,241,0), ZAI(94,242,0), ZAI(95,241,0) }; - - vector<double> PuCompo; - double Sum = Fissile.GetSumOfAll(); - - - for(int i = 0; i< 5; i++) - PuCompo.push_back( Fissile.GetZAIIsotopicQuantity(ZAIList[i])/Sum); - - PuCompo[2] += Fissile.GetZAIIsotopicQuantity(ZAIList[5])/Sum; - double A = 0; - - if(PuCompo[0] <= PuCompo[2] && PuCompo[0] <= PuCompo[4] && PuCompo[1] + PuCompo[3] >= 0.40 && PuCompo[1] >0 ) - { - int par = 0; - for(int j = 0 ; j < 5 ; j++) - { - A += fFuelParameter[par] * PuCompo[j] ; - par++; - for(int i = j ; i < 5 ; i++) - { - A += fFuelParameter[par] *PuCompo[i] *PuCompo[j]; - par++; - } - } - A += fFuelParameter[par]; - } - else - { - cout << "the composition is not in the range of the Model" << endl; - } - return A; -} - diff --git a/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.hxx b/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.hxx deleted file mode 100644 index 365b75d39..000000000 --- a/source/branches/CLASSV4.1/Model/Equivalence/EQM_QUAD_PWR_MOX.hxx +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef _EQM_QUAD_PWR_MOX_HXX -#define _EQM_QUAD_PWR_MOX_HXX - -#include "EquivalenceModel.hxx" - -#include <string> - -/*! - \file - \brief Header file for EQM_QUAD_PWR_MOX class. - - - @author BaM - @version 1.0 - */ - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines an EquivalenceModel based on a quadratic fit - -/*! - The aim of these class is to constuct a fuel from an equivalence model - based on a Quadratic Pu equivalent Model - The Plutonium content e is calculated using : - - @f$ e = \alpha_{0} + \sum_{i\in Pu}^{N} \left(\alpha_{i} \cdot n_{i}\ + \sum_{j\leq i} \alpha_{ij} \cdot n_{i}\cdot n_{j}\right)@f$ - - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - -class EQM_QUAD_PWR_MOX : public EquivalenceModel -{ - public : - - /*! - \name Constructor - */ - //@{ - - //{ - /// normal constructor - /*! - Create a EQM_POL_PWR_UO2 - \param WeightPath : Path to the file containing the @f$\alpha_{i}@f$ - Format : @f$PARAM@f$ @f$\alpha_{^{238}Pu}@f$ @f$\alpha_{^{238}Pu ^{238}Pu}@f$ @f$\alpha_{^{238}Pu ^{239}Pu}@f$ .... @f$\alpha_{^{238}Pu ^{242}Pu}@f$ @f$\alpha_{^{239}Pu}@f$ ... - @f$\alpha_{^{242}Pu}@f$ @f$\alpha_{^{242}Pu ^{242}Pu}@f$ @f$\alpha_{0}@f$ - */ - EQM_QUAD_PWR_MOX(string WeightPath); - //} - - //{ - /// Logger constructor - /*! - Create a EQM_POL_PWR_UO2 - \param log : Use for the log - \param WeightPath : Path to the file containing the @f$\alpha_{i}@f$ - Format : @f$PARAM@f$ @f$\alpha_{^{238}Pu}@f$ @f$\alpha_{^{238}Pu ^{238}Pu}@f$ @f$\alpha_{^{238}Pu ^{239}Pu}@f$ .... @f$\alpha_{^{238}Pu ^{242}Pu}@f$ @f$\alpha_{^{239}Pu}@f$ ... - @f$\alpha_{^{242}Pu}@f$ @f$\alpha_{^{242}Pu ^{242}Pu}@f$ @f$\alpha_{0}@f$ - */ - EQM_QUAD_PWR_MOX(CLASSLogger* log, string WeightPath); - //} - - ~EQM_QUAD_PWR_MOX(); - //@} - - virtual double GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp); - - private : - - string fWeightPath; //!< Path to the file containing the @f$\alpha_{ij}@f$ - vector<double> fFuelParameter; //!< vector containing the @f$\alpha_{ij}@f$ - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.cxx b/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.cxx deleted file mode 100644 index 8b0fcd201..000000000 --- a/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.cxx +++ /dev/null @@ -1,301 +0,0 @@ -// -// IM_Matrix.cxx -// CLASSSource -// -// Created by BaM on 04/05/2014. -// Copyright (c) 2014 BaM. All rights reserved. -// - -#include "IM_Matrix.hxx" - -#include "IsotopicVector.hxx" -#include "CLASSConstante.hxx" -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - -#include <TGraph.h> -#include <TString.h> - - -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - - - -using namespace std; - - -//________________________________________________________________________ -IM_Matrix::IM_Matrix():IrradiationModel(new CLASSLogger("IM_Matrix.log")) -{ - fShorstestHalflife = 3600.*24*160.; //cut by default all nuclei with a shorter liftime than the Cm242 -> remain 33 actinides -} - - -IM_Matrix::IM_Matrix(CLASSLogger* log):IrradiationModel(log) -{ - fShorstestHalflife = 3600.*24*160.; //cut by default all nuclei with a shorter liftime than the Cm242 -> remain 33 actinides -} - - - - -//________________________________________________________________________ -/* Evolution Calculation */ -//________________________________________________________________________ -EvolutionData IM_Matrix::GenerateEvolutionData(IsotopicVector isotopicvector, EvolutionData XSSet, double Power, double cycletime) -{ - DBGL - if(fFastDecay.size() == 0) - NuclearDataInitialization(); - - - string ReactorType; - - - vector< TMatrixT<double> > NMatrix ;// TMatrixT<double>(decayindex.size(),1)) - { // Filling the t=0 State; - map<ZAI, double > isotopicquantity = isotopicvector.GetIsotopicQuantity(); - TMatrixT<double> N_0Matrix = TMatrixT<double>( fReverseMatrixIndex.size(),1) ; - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - N_0Matrix[i] = 0; - - map<ZAI, double >::iterator it ; - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - N_0Matrix[i] = 0; - - for(it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - /// Need TO change with FP managment - map<ZAI, int >::iterator it2; - - if( (*it).first.Z() < fZAIThreshold ) - it2 = fMatrixIndex.find( ZAI(-2,-2,-2) ); - else it2 = fMatrixIndex.find( (*it).first ); - - if(it2 == fMatrixIndex.end() ) //If not in index should be TMP, can't be fast decay for new Fuel !!! - it2 = fMatrixIndex.find( ZAI(-3,-3,-3) ); - N_0Matrix[ (*it2).second ][0] = (*it).second ; - - - } - - isotopicquantity.clear(); - - NMatrix.push_back(N_0Matrix); - N_0Matrix.Clear(); - - } - - - //-------------------------// - //--- Perform Evolution ---// - //-------------------------// - ReactorType = XSSet.GetReactorType(); - - double M_ref = XSSet.GetHeavyMetalMass(); - double M = cZAIMass.GetMass(isotopicvector.GetActinidesComposition()); - double Power_ref = XSSet.GetPower(); - - int NStep = XSSet.GetFissionXS().begin()->second->GetN(); - double* DBTimeStep = XSSet.GetFissionXS().begin()->second->GetX(); - - int InsideStep = 10; - - double timevector[NStep]; - timevector[0] = 0; - - double Flux[NStep]; - - TMatrixT<double> FissionEnergy = TMatrixT<double>(fReverseMatrixIndex.size(),1); - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - FissionEnergy[i] = 0; - - { - map< ZAI, int >::iterator it; - for(it = fMatrixIndex.begin(); it != fMatrixIndex.end(); it++) - { - map< ZAI, double >::iterator it2 = fFissionEnergy.find(it->first); - if(it2 == fFissionEnergy.end()) - { - if(it->first.Z() > fZAIThreshold) - FissionEnergy[it->second][0] = 1.9679e6*it->first.A()-2.601e8; // //simple linear fit to known values ;extrapolation to unknown isotopes - else FissionEnergy[it->second][0] = 0; - } - else - FissionEnergy[it->second][0] = it2->second; - - } - } - - vector< TMatrixT<double> > FissionXSMatrix; // Store The Fisison XS Matrix - vector< TMatrixT<double> > CaptureXSMatrix; // Store The Capture XS Matrix - vector< TMatrixT<double> > n2nXSMatrix; // Store The n2N XS Matrix - DBGL - for(int i = 0; i < NStep-1; i++) - { - double TStepMax = ( (DBTimeStep[i+1]-DBTimeStep[i] ) ) * Power_ref/M_ref / Power*M ; // Get the next Time step - - - TMatrixT<double> BatemanMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - TMatrixT<double> BatemanReactionMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - - TMatrixT<double> NEvolutionMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),1); - NEvolutionMatrix = NMatrix.back(); - - - - FissionXSMatrix.push_back(GetFissionXsMatrix(XSSet, DBTimeStep[i])); //Feel the fission reaction Matrix - CaptureXSMatrix.push_back(GetCaptureXsMatrix(XSSet, DBTimeStep[i])); //Feel the capture reaction Matrix - n2nXSMatrix.push_back(Getn2nXsMatrix(XSSet, DBTimeStep[i])); //Feel the (n,2n) reaction Matrix - - // ---------------- Evolution - - BatemanReactionMatrix = FissionXSMatrix[i]; - BatemanReactionMatrix += CaptureXSMatrix[i]; - BatemanReactionMatrix += n2nXSMatrix[i]; - - for(int k=0; k < InsideStep; k++) - { - double ESigmaN = 0; - for (int j = 0; j < (int)fReverseMatrixIndex.size() ; j++) - ESigmaN -= FissionXSMatrix[i][j][j]*NEvolutionMatrix[j][0]*1.6e-19*FissionEnergy[j][0]; - // Update Flux - double Flux_k = Power/ESigmaN; - - if(k==0) - Flux[i]=Flux_k; - - BatemanMatrix = BatemanReactionMatrix; - BatemanMatrix *= Flux_k; - BatemanMatrix += fDecayMatrix ; - BatemanMatrix *= TStepMax/InsideStep ; - - - TMatrixT<double> IdMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - for(int j = 0; j < (int)fReverseMatrixIndex.size(); j++) - for(int k = 0; k < (int)fReverseMatrixIndex.size(); k++) - { - if(k == j) IdMatrix[j][k] = 1; - else IdMatrix[j][k] = 0; - } - - - TMatrixT<double> BatemanMatrixDL = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); // Order 0 Term from the DL : Id - TMatrixT<double> BatemanMatrixDLTermN = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); // Addind it; - - { - BatemanMatrix *= TStepMax ; - BatemanMatrixDLTermN = IdMatrix; - BatemanMatrixDL = BatemanMatrixDLTermN; - int j = 1; - double NormN; - - do - { - TMatrixT<double> BatemanMatrixDLTermtmp = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); // Adding it; - BatemanMatrixDLTermtmp = BatemanMatrixDLTermN; - - BatemanMatrixDLTermN.Mult(BatemanMatrixDLTermtmp, BatemanMatrix ); - - BatemanMatrixDLTermN *= 1./j; - BatemanMatrixDL += BatemanMatrixDLTermN; - - NormN = 0; - for(int m = 0; m < (int)fReverseMatrixIndex.size(); m++) - for(int n = 0; n < (int)fReverseMatrixIndex.size(); n++) - NormN += BatemanMatrixDLTermN[m][n]*BatemanMatrixDLTermN[m][n]; - j++; - - } while ( NormN != 0 ); - } - NEvolutionMatrix = BatemanMatrixDL * NEvolutionMatrix ; - } - NMatrix.push_back(NEvolutionMatrix); - - - timevector[i+1] = timevector[i] + TStepMax; - - BatemanMatrix.Clear(); - BatemanReactionMatrix.Clear(); - NEvolutionMatrix.Clear(); - - - } - DBGL - FissionXSMatrix.push_back(GetFissionXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - CaptureXSMatrix.push_back(GetCaptureXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - n2nXSMatrix.push_back(Getn2nXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - - - EvolutionData GeneratedDB = EvolutionData(GetLog()); - - double ESigmaN = 0; - for (int j = 0; j < (int)fReverseMatrixIndex.size() ; j++) - ESigmaN -= FissionXSMatrix.back()[j][j]*NMatrix.back()[j][0]*1.6e-19*FissionEnergy[j][0]; - - Flux[NStep-1] = Power/ESigmaN; - - GeneratedDB.SetFlux( new TGraph(NStep, timevector, Flux) ); - - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - { - double ZAIQuantity[NMatrix.size()]; - double FissionXS[NStep]; - double CaptureXS[NStep]; - double n2nXS[NStep]; - for(int j = 0; j < (int)NMatrix.size(); j++) - ZAIQuantity[j] = (NMatrix[j])[i][0]; - - for(int j = 0; j < NStep; j++) - { - FissionXS[j] = FissionXSMatrix[j][i][i]; - CaptureXS[j] = CaptureXSMatrix[j][i][i]; - n2nXS[j] = n2nXSMatrix[j][i][i]; - } - - GeneratedDB.NucleiInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NMatrix.size(), timevector, ZAIQuantity))); - GeneratedDB.FissionXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, FissionXS))); - GeneratedDB.CaptureXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, CaptureXS))); - GeneratedDB.n2nXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, n2nXS))); - } - - GeneratedDB.SetPower(Power ); - GeneratedDB.SetHeavyMetalMass(M); - GeneratedDB.SetReactorType(ReactorType ); - GeneratedDB.SetCycleTime(cycletime); - - for (int i = 0; i < (int) FissionXSMatrix.size(); i++) - { - FissionXSMatrix[i].Clear(); - CaptureXSMatrix[i].Clear(); - n2nXSMatrix[i].Clear(); - } - FissionXSMatrix.clear(); - CaptureXSMatrix.clear(); - n2nXSMatrix.clear(); - DBGL - return GeneratedDB; - -} - - - - - - - - - - - - - - - - - diff --git a/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.hxx b/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.hxx deleted file mode 100644 index 7bc03449a..000000000 --- a/source/branches/CLASSV4.1/Model/Irradiation/IM_Matrix.hxx +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef _IMMATRIX_ -#define _IMMATRIX_ - - -/*! - \file - \brief Header file for IrradiationModel class. - - - @author BaM - @version 2.0 - */ -#include "IrradiationModel.hxx" - - -using namespace std; - - -class CLASSLogger; - -//-----------------------------------------------------------------------------// -//! Defines an IrradiationModel based on power series of the exponential of the Bateman matrix - -/*! - Define a IM_Matrix. - The aim of these class is to solve numericaly the Bateman equations using the - development in a power series of the exponential of the Bateman matrix. - - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - -class EvolutionData; - -class IM_Matrix : public IrradiationModel -{ - - public : - /*! - \name Constructor - */ - //@{ - - //{ - /// Default constructor - - /*! - Make a new IM_Matrix : */ - IM_Matrix(); - //} - - /// Logger constructor - - /*! - Make a new IM_Matrix : */ - //param log : Use for the log - IM_Matrix(CLASSLogger* log); - //} - - //@} - - - /// virtual method called to perform the irradiation calculation using a set of cross section. - /*! - Perform the Irradiation Calcultion using the XSSet data - \param IsotopicVector IV isotopic vector to irradiate - \param EvolutionData XSSet set of corss section to use to perform the evolution calculation - */ - virtual EvolutionData GenerateEvolutionData(IsotopicVector IV, EvolutionData XSSet, double Power, double cycletime); - //} - - - - - private : - - - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.cxx b/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.cxx deleted file mode 100644 index 8fe82f0cc..000000000 --- a/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.cxx +++ /dev/null @@ -1,396 +0,0 @@ -// -// IM_RK4.cxx -// CLASSSource -// -// Created by BaM on 04/05/2014. -// Copyright (c) 2014 BaM. All rights reserved. -// - -#include "IM_RK4.hxx" - -#include "IsotopicVector.hxx" -#include "CLASSConstante.hxx" -#include "CLASSLogger.hxx" - -#include "StringLine.hxx" - -#include <TGraph.h> -#include <TString.h> - - -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - - - -using namespace std; - - -//________________________________________________________________________ -IM_RK4::IM_RK4():IrradiationModel(new CLASSLogger("IM_RK4.log")), DynamicalSystem() -{ - fTheNucleiVector = 0; - fTheMatrix = 0; - - SetForbidNegativeValue(); - -} - - -IM_RK4::IM_RK4(CLASSLogger* log):IrradiationModel(log), DynamicalSystem() -{ - fTheNucleiVector = 0; - fTheMatrix = 0; - - SetForbidNegativeValue(); - -} - - - - - - - - - -//________________________________________________________________________ -/* Evolution Calculation */ -//________________________________________________________________________ -EvolutionData IM_RK4::GenerateEvolutionData(IsotopicVector isotopicvector, EvolutionData XSSet, double Power, double cycletime) -{ - DBGL - if(fFastDecay.size() == 0) - { - NuclearDataInitialization(); - fNVar = fReverseMatrixIndex.size(); - } - - SetTheMatrixToZero(); - SetTheNucleiVectorToZero(); - - string ReactorType; - - - vector< TMatrixT<double> > NMatrix ;// TMatrixT<double>(decayindex.size(),1)) - { // Filling the t=0 State; - map<ZAI, double > isotopicquantity = isotopicvector.GetIsotopicQuantity(); - TMatrixT<double> N_0Matrix = TMatrixT<double>( fReverseMatrixIndex.size(),1) ; - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - N_0Matrix[i] = 0; - - map<ZAI, double >::iterator it ; - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - N_0Matrix[i] = 0; - - for(it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - /// Need TO change with FP managment - map<ZAI, int >::iterator it2; - - if( (*it).first.Z() < fZAIThreshold ) - it2 = fMatrixIndex.find( ZAI(-2,-2,-2) ); - else it2 = fMatrixIndex.find( (*it).first ); - - if(it2 == fMatrixIndex.end() ) //If not in index should be TMP, can't be fast decay for new Fuel !!! - it2 = fMatrixIndex.find( ZAI(-3,-3,-3) ); - - N_0Matrix[ (*it2).second ][0] = (*it).second ; - - - } - - isotopicquantity.clear(); - - NMatrix.push_back(N_0Matrix); - N_0Matrix.Clear(); - - } - - - //-------------------------// - //--- Perform Evolution ---// - //-------------------------// - ReactorType = XSSet.GetReactorType(); - - double M_ref = XSSet.GetHeavyMetalMass(); - double M = cZAIMass.GetMass(isotopicvector.GetActinidesComposition()); - double Power_ref = XSSet.GetPower(); - - - int NStep = XSSet.GetFissionXS().begin()->second->GetN(); - double* DBTimeStep = XSSet.GetFissionXS().begin()->second->GetX(); - - int InsideStep = 10; - - double timevector[NStep]; - timevector[0] = 0; - - double Flux[NStep]; - - TMatrixT<double> FissionEnergy = TMatrixT<double>(fReverseMatrixIndex.size(),1); - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - FissionEnergy[i] = 0; - - { - map< ZAI, int >::iterator it; - for(it = fMatrixIndex.begin(); it != fMatrixIndex.end(); it++) - { - map< ZAI, double >::iterator it2 = fFissionEnergy.find(it->first); - if(it2 == fFissionEnergy.end()) - { - if(it->first.Z() > fZAIThreshold) - FissionEnergy[it->second][0] = 1.9679e6*it->first.A()-2.601e8; // //simple linear fit to known values ;extrapolation to unknown isotopes - else FissionEnergy[it->second][0] = 0; - } - else - FissionEnergy[it->second][0] = it2->second; - - } - } - - vector< TMatrixT<double> > FissionXSMatrix; // Store The Fisison XS Matrix - vector< TMatrixT<double> > CaptureXSMatrix; // Store The Capture XS Matrix - vector< TMatrixT<double> > n2nXSMatrix; // Store The n2N XS Matrix - DBGL - for(int i = 0; i < NStep-1; i++) - { - double TStepMax = ( (DBTimeStep[i+1]-DBTimeStep[i] ) ) * Power_ref/M_ref / Power*M ; // Get the next Time step - - - TMatrixT<double> BatemanMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - TMatrixT<double> BatemanReactionMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - - TMatrixT<double> NEvolutionMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),1); - NEvolutionMatrix = NMatrix.back(); - - - - FissionXSMatrix.push_back(GetFissionXsMatrix(XSSet, DBTimeStep[i])); //Feel the fission reaction Matrix - CaptureXSMatrix.push_back(GetCaptureXsMatrix(XSSet, DBTimeStep[i])); //Feel the capture reaction Matrix - n2nXSMatrix.push_back(Getn2nXsMatrix(XSSet, DBTimeStep[i])); //Feel the (n,2n) reaction Matrix - - // ---------------- Evolution - - BatemanReactionMatrix = FissionXSMatrix[i]; - BatemanReactionMatrix += CaptureXSMatrix[i]; - BatemanReactionMatrix += n2nXSMatrix[i]; - - for(int k=0; k < InsideStep; k++) - { - double ESigmaN = 0; - for (int j = 0; j < (int)fReverseMatrixIndex.size() ; j++) - ESigmaN -= FissionXSMatrix[i][j][j]*NEvolutionMatrix[j][0]*1.6e-19*FissionEnergy[j][0]; - // Update Flux - double Flux_k = Power/ESigmaN; - - if(k==0) - Flux[i]=Flux_k; - - BatemanMatrix = BatemanReactionMatrix; - BatemanMatrix *= Flux_k; - BatemanMatrix += fDecayMatrix ; - SetTheMatrixToZero(); - SetTheNucleiVectorToZero(); - - SetTheMatrix(BatemanMatrix); - SetTheNucleiVector(NEvolutionMatrix); - - - RungeKutta(fTheNucleiVector, timevector[i]+TStepMax/InsideStep*k, timevector[i]+TStepMax/InsideStep*(k+1), fNVar); - NEvolutionMatrix = GetTheNucleiVector(); - - } - NEvolutionMatrix = GetTheNucleiVector(); - NMatrix.push_back(NEvolutionMatrix); - - timevector[i+1] = timevector[i] + TStepMax; - - BatemanMatrix.Clear(); - BatemanReactionMatrix.Clear(); - NEvolutionMatrix.Clear(); - - - } - FissionXSMatrix.push_back(GetFissionXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - CaptureXSMatrix.push_back(GetCaptureXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - n2nXSMatrix.push_back(Getn2nXsMatrix(XSSet, DBTimeStep[NStep-1])); //Feel the reaction Matrix - - - EvolutionData GeneratedDB = EvolutionData(GetLog()); - - double ESigmaN = 0; - for (int j = 0; j < (int)fReverseMatrixIndex.size() ; j++) - ESigmaN -= FissionXSMatrix.back()[j][j]*NMatrix.back()[j][0]*1.6e-19*FissionEnergy[j][0]; - - Flux[NStep-1] = Power/ESigmaN; - - GeneratedDB.SetFlux( new TGraph(NStep, timevector, Flux) ); - - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - { - double ZAIQuantity[NMatrix.size()]; - double FissionXS[NStep]; - double CaptureXS[NStep]; - double n2nXS[NStep]; - for(int j = 0; j < (int)NMatrix.size(); j++) - ZAIQuantity[j] = (NMatrix[j])[i][0]; - - for(int j = 0; j < NStep; j++) - { - FissionXS[j] = FissionXSMatrix[j][i][i]; - CaptureXS[j] = CaptureXSMatrix[j][i][i]; - n2nXS[j] = n2nXSMatrix[j][i][i]; - } - - GeneratedDB.NucleiInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NMatrix.size(), timevector, ZAIQuantity))); - GeneratedDB.FissionXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, FissionXS))); - GeneratedDB.CaptureXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, CaptureXS))); - GeneratedDB.n2nXSInsert(pair<ZAI, TGraph*> (fReverseMatrixIndex[i], new TGraph(NStep, timevector, n2nXS))); - } - DBGL - GeneratedDB.SetPower(Power ); - GeneratedDB.SetHeavyMetalMass(M); - GeneratedDB.SetReactorType(ReactorType ); - GeneratedDB.SetCycleTime(cycletime); - - ResetTheMatrix(); - ResetTheNucleiVector(); - - for (int i = 0; i < (int) FissionXSMatrix.size(); i++) - { - FissionXSMatrix[i].Clear(); - CaptureXSMatrix[i].Clear(); - n2nXSMatrix[i].Clear(); - } - FissionXSMatrix.clear(); - CaptureXSMatrix.clear(); - n2nXSMatrix.clear(); - DBGL - return GeneratedDB; - -} - - -void IM_RK4::ResetTheMatrix() -{ - - if(fTheMatrix) - { - for(int i= 0; i<fNVar; i++) - delete [] fTheMatrix[i]; - delete [] fTheMatrix; - } - fTheMatrix = 0; -} - -void IM_RK4::SetTheMatrixToZero() -{ - ResetTheMatrix(); - - fNVar = fReverseMatrixIndex.size(); - fTheMatrix = new double*[fNVar]; - -#pragma omp parallel for - for(int i= 0; i < fNVar; i++) - fTheMatrix[i] = new double[fNVar]; - - for(int i = 0; i < fNVar; i++) - for(int k = 0; k < fNVar; k++) - { - fTheMatrix[i][k]=0.0; - } - -} - -//________________________________________________________________________ -void IM_RK4::ResetTheNucleiVector() -{ - if(fTheNucleiVector) - delete [] fTheNucleiVector; - fTheNucleiVector = 0; -} - -//________________________________________________________________________ -void IM_RK4::SetTheNucleiVectorToZero() -{ - ResetTheNucleiVector(); - fTheNucleiVector = new double[fNVar]; - -#pragma omp parallel for - for(int i = 0; i < fNVar; i++) - fTheNucleiVector[i]=0.0; - -} - -//________________________________________________________________________ -void IM_RK4::BuildEqns(double t, double *N, double *dNdt) -{ - double sum=0; - // pragma omp parallel for reduction(+:sum) - for(int i = 0; i < fNVar; i++) - { - sum=0; - for(int k = 0; k < fNVar; k++) - { - sum += fTheMatrix[i][k]*N[k]; - } - dNdt[i] = sum; - } -} - -//________________________________________________________________________ -void IM_RK4::SetTheMatrix(TMatrixT<double> BatemanMatrix) -{ - for (int k = 0; k < (int)fNVar; k++) - for (int l = 0; l < (int)fMatrixIndex.size(); l++) - fTheMatrix[l][k] = BatemanMatrix[l][k]; -} - -//________________________________________________________________________ -TMatrixT<double> IM_RK4::GetTheMatrix() -{ - TMatrixT<double> BatemanMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),fReverseMatrixIndex.size()); - for (int k = 0; k < (int)fNVar; k++) - for (int l = 0; l < (int)fMatrixIndex.size(); l++) - BatemanMatrix[l][k] = fTheMatrix[l][k]; - - return BatemanMatrix; -} - -//________________________________________________________________________ -void IM_RK4::SetTheNucleiVector(TMatrixT<double> NEvolutionMatrix) -{ - for (int k = 0; k < (int)fNVar; k++) - fTheNucleiVector[k] = NEvolutionMatrix[k][0]; -} - -//________________________________________________________________________ -TMatrixT<double> IM_RK4::GetTheNucleiVector() -{ - TMatrixT<double> NEvolutionMatrix = TMatrixT<double>(fReverseMatrixIndex.size(),1); - for (int k = 0; k < (int)fNVar; k++) - NEvolutionMatrix[k][0] = fTheNucleiVector[k]; - - return NEvolutionMatrix; -} - - - - - - - - - - - - - - - - diff --git a/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.hxx b/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.hxx deleted file mode 100644 index 6c8a9bb97..000000000 --- a/source/branches/CLASSV4.1/Model/Irradiation/IM_RK4.hxx +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef _IMRK4_ -#define _IMRK4_ - - -/*! - \file - \brief Header file for IrradiationModel class. - - - @author BaM - @version 2.0 - */ -#include "DynamicalSystem.hxx" -#include "IrradiationModel.hxx" - - -using namespace std; - - -class CLASSLogger; - -//-----------------------------------------------------------------------------// -//! Defines an IrradiationModel based on Runge Kutta 4th order -/*! - The aim of these class is to solve numericaly the Bateman equations using - Runge Kutta 4th order method - - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - -class EvolutionData; - -class IM_RK4 : public IrradiationModel, DynamicalSystem -{ - - public : - - /*! - \name Constructor - */ - //@{ - - //{ - /// Default constructor - // - /*! - Make a new IM_Matrix : */ - IM_RK4(); - //} - - //{ - /// Logger constructor - // - /*! - Make a new IM_Matrix : - \param log : Use for the log - */ - IM_RK4(CLASSLogger* Log); - //} - - //@} - - /// virtual method called to perform the irradiation calculation using a set of cross section. - /*! - Perform the Irradiation Calcultion using the XSSet data - \param IsotopicVector IV isotopic vector to irradiate - \param EvolutionData XSSet set of corss section to use to perform the evolution calculation - */ - virtual EvolutionData GenerateEvolutionData(IsotopicVector IV, EvolutionData XSSet, double Power, double cycletime); - //} - - //********* RK4 Method *********// - - //@} - /*! - \name RK4 Method - */ - //@{ - - - using DynamicalSystem::RungeKutta; - //! Pre-treatment Runge-Kutta method. - /*! - // This method does initialization and then call DynamicalSystem::RungeKutta - // \param t1: initial time - // \param t2: final time - */ - - - void BuildEqns(double t, double *N, double *dNdt); - void SetTheMatrixToZero(); //!< Initialize the evolution Matrix - void ResetTheMatrix(); - void SetTheMatrix(TMatrixT<double> BatemanMatrix); //!< Set the Evolution Matrix (Bateman equations) - TMatrixT<double> GetTheMatrix(); //!< return the Evolution Matrix (Bateman equations) - - void SetTheNucleiVectorToZero(); //!< Initialize the evolution Matrix - void ResetTheNucleiVector(); - void SetTheNucleiVector(TMatrixT<double> NEvolutionMatrix); //!< Set the Evolution Matrix (Bateman equations) - TMatrixT<double> GetTheNucleiVector(); //!< return the Evolution Matrix (Bateman equations) - //@} - - - - private : - - double *fTheNucleiVector; //!< The evolving atoms copied from Material proportions. - double **fTheMatrix; //!< The evolution Matrix - - double fPrecision; //!< Precision of the RungeKutta - double fHestimate; //!< RK Step estimation. - double fHmin; //!< RK minimum Step. - double fMaxHdid; //!< store the effective RK max step - double fMinHdid; //!< store the effective RK min step - bool fIsNegativeValueAllowed; //!< whether or not negative value are physical. - - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.cxx b/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.cxx deleted file mode 100644 index c8be61c8c..000000000 --- a/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.cxx +++ /dev/null @@ -1,372 +0,0 @@ -#include "XSModel.hxx" -#include "XSM_CLOSEST.hxx" -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - - -#include <TGraph.h> -#include <TString.h> -#include "TSystem.h" -#include "TROOT.h" - -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - - - - -//________________________________________________________________________ -// -// XSM_CLOSEST -// -// -// -// -//________________________________________________________________________ - -XSM_CLOSEST::XSM_CLOSEST(string DB_index_file, bool oldreadmethod ): XSModel(new CLASSLogger("XSM_CLOSEST.log")) -{ - fOldReadMethod = oldreadmethod; - fDataBaseIndex = DB_index_file; - fDistanceType = 0; - fWeightedDistance = false; - fEvolutionDataInterpolation = false; - ReadDataBase(); - - // Warning - INFO << " A EvolutionData has been define :" << endl; - INFO << "\t His index is : \"" << DB_index_file << "\" " << endl; - INFO << "\t " << fFuelDataBank.size() << " EvolutionData have been read."<< endl << endl; - -} - -//________________________________________________________________________ -XSM_CLOSEST::XSM_CLOSEST(CLASSLogger* Log,string DB_index_file, bool oldreadmethod ): XSModel(Log) -{ - fOldReadMethod = oldreadmethod; - fDataBaseIndex = DB_index_file; - fDistanceType = 0; - fWeightedDistance = false; - fEvolutionDataInterpolation = false; - ReadDataBase(); - - // Warning - INFO << " A EvolutionData has been define :" << endl; - INFO << "\t His index is : \"" << DB_index_file << "\" " << endl; - INFO << "\t " << fFuelDataBank.size() << " EvolutionData have been read."<< endl << endl; - -} - -//________________________________________________________________________ -XSM_CLOSEST::~XSM_CLOSEST() -{ - for( int i = 0; i < (int)fFuelDataBank.size(); i++) - fFuelDataBank[i].DeleteEvolutionData(); - fFuelDataBank.clear(); -} - -//________________________________________________________________________ -void XSM_CLOSEST::ReadDataBase() -{ - - if(fFuelDataBank.size() != 0) - { - for( int i = 0; i < (int)fFuelDataBank.size(); i++) - fFuelDataBank[i].DeleteEvolutionData(); - fFuelDataBank.clear(); - } - - - ifstream DataDB(fDataBaseIndex.c_str()); // Open the File - if(!DataDB) - WARNING << " Can't open \"" << fDataBaseIndex << "\"\n" << endl; - - vector<double> vTime; - vector<double> vTimeErr; - - string line; - int start = 0; - - - // First Get Fuel Type - getline(DataDB, line); - if( StringLine::NextWord(line, start, ' ') != "TYPE") - { - ERROR << " Bad Database file : " << fDataBaseIndex << " Can't find the type of the DataBase"<< endl; - exit (1); - } - fFuelType = StringLine::NextWord(line, start, ' '); - - //Then Get All the Database - - while (!DataDB.eof()) - { - getline(DataDB, line); - if(line != "") - { - EvolutionData evolutionproduct(GetLog(), line, fOldReadMethod); - fFuelDataBank.push_back(evolutionproduct); - } - } - -} -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -/* Distance Calculation */ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -map<double, int> XSM_CLOSEST::GetDistancesTo(IsotopicVector isotopicvector, double t) -{ - - map<double, int> distances; - - for( int i = 0; i < (int)fFuelDataBank.size(); i++) - { - pair<map<double, int>::iterator, bool> IResult; - - IsotopicVector ActinidesCompositionAtT = fFuelDataBank[i].GetIsotopicVectorAt(t).GetActinidesComposition(); - IsotopicVector IV_ActinidesComposition = isotopicvector.GetActinidesComposition(); - - double NormalisationFactor = Norme(IV_ActinidesComposition) / Norme( ActinidesCompositionAtT ); - - - double distance = Distance( IV_ActinidesComposition, - ActinidesCompositionAtT / NormalisationFactor, - fDistanceType, - fDistanceParameter); - - IResult = distances.insert( pair< double, int >(distance, i) ); - } - - return distances; - -} -//________________________________________________________________________ -EvolutionData XSM_CLOSEST::GetCrossSections(IsotopicVector isotopicvector, double t) -{ - DBGL - double distance = 0; - int N_BestEvolutionData = 0; - - - if(fWeightedDistance) - { - DBGL - IsotopicVector ActinidesCompositionAtT = fFuelDataBank[0].GetIsotopicVectorAt(t).GetActinidesComposition(); - IsotopicVector IV_ActinidesComposition = isotopicvector.GetActinidesComposition(); - - double NormalisationFactor = Norme( ActinidesCompositionAtT ) / Norme(IV_ActinidesComposition); - - - distance = Distance( IV_ActinidesComposition / NormalisationFactor, - fFuelDataBank[0]); - - - for( int i = 1; i < (int)fFuelDataBank.size(); i++) - { - double D = 0; - ActinidesCompositionAtT = fFuelDataBank[i].GetIsotopicVectorAt(t).GetActinidesComposition(); - IV_ActinidesComposition = isotopicvector.GetActinidesComposition(); - NormalisationFactor = Norme( ActinidesCompositionAtT ) / Norme(IV_ActinidesComposition); - - D = Distance( IV_ActinidesComposition / NormalisationFactor, - fFuelDataBank[i]); - - - if (D< distance) - { - distance = D; - N_BestEvolutionData = i; - } - } - DBGL - return fFuelDataBank[N_BestEvolutionData]; - } - else if (fEvolutionDataInterpolation) - { - DBGL - map<double, int> distance_map = GetDistancesTo(isotopicvector, t); - map<double, int>::iterator it_distance; - int NClose = 64; - int Nstep = 0; - EvolutionData EvolInterpolate; - double SumOfDistance = 0; - for( it_distance = distance_map.begin(); it_distance != distance_map.end(); it_distance++) - { - - double distance = (*it_distance).first; - int ED_Indice = (*it_distance).second; - - if(distance == 0 ) - { - EvolInterpolate = Multiply(1,fFuelDataBank[ED_Indice]); - return EvolInterpolate; - } - - if(Nstep == 0) - EvolInterpolate = Multiply(1./distance, fFuelDataBank[ED_Indice]); - else - { - - EvolutionData Evoltmp = EvolInterpolate; - EvolutionData Evoltmp2 = Multiply(1./distance, fFuelDataBank[ED_Indice]); - - EvolInterpolate = Sum(Evoltmp, Evoltmp2); - Evoltmp.DeleteEvolutionData(); - Evoltmp2.DeleteEvolutionData(); - - - } - - SumOfDistance += 1./distance; - Nstep++; - if(Nstep == NClose) break; - - } - - EvolutionData Evoltmp = EvolInterpolate; - EvolInterpolate.Clear(); - - EvolInterpolate = Multiply(1/SumOfDistance, Evoltmp); - - Evoltmp.DeleteEvolutionData(); - DBGL - return EvolInterpolate; - - } - else - { - DBGL - IsotopicVector ActinidesCompositionAtT = fFuelDataBank[0].GetIsotopicVectorAt(t).GetActinidesComposition(); - IsotopicVector IV_ActinidesComposition = isotopicvector.GetActinidesComposition(); - - - double NormalisationFactor = Norme(IV_ActinidesComposition) / Norme( ActinidesCompositionAtT ); - - - distance = Distance( IV_ActinidesComposition, - ActinidesCompositionAtT / NormalisationFactor, - fDistanceType, - fDistanceParameter); - - for( int i = 1; i < (int)fFuelDataBank.size(); i++) - { - double D = 0; - ActinidesCompositionAtT = fFuelDataBank[i].GetIsotopicVectorAt(t).GetActinidesComposition(); - IV_ActinidesComposition = isotopicvector.GetActinidesComposition(); - - NormalisationFactor = Norme(IV_ActinidesComposition) / Norme( ActinidesCompositionAtT ); - D = Distance( IV_ActinidesComposition, - ActinidesCompositionAtT / NormalisationFactor, - fDistanceType, - fDistanceParameter); - - if (D< distance) - { - distance = D; - N_BestEvolutionData = i; - } - } - - - INFO << distance << endl; - DBGL - - return fFuelDataBank[N_BestEvolutionData]; - } - -} -//________________________________________________________________________ -void XSM_CLOSEST::CalculateDistanceParameter() -{ - DBGL - if(fDistanceType!=1){ - WARNING << " Distance Parameter will be calculate even if the distance type is not the good one. Any Distance Parameters given by the user will be overwriten" << endl; - } - - fDistanceParameter.Clear(); - - //We calculate the weight for the distance calculation. - int NevolutionDatainFuelDataBank = 0; - - for( int i = 0; i < (int)fFuelDataBank.size(); i++) - { - NevolutionDatainFuelDataBank++; - map<ZAI ,double>::iterator itit; - map<ZAI ,double> isovector = fFuelDataBank[i].GetIsotopicVectorAt(0).GetIsotopicQuantity(); - for(itit=isovector.begin(); itit != isovector.end(); itit++) //Boucle sur ZAI - { - double TmpXS=0; - - for( int i=1; i<4; i++ ) //Loop on Reactions 1==fission, 2==capture, 3==n2n - TmpXS+= fFuelDataBank[i].GetXSForAt(0, (*itit).first, i); - - fDistanceParameter.Add((*itit).first,TmpXS); - } - - - } - fDistanceParameter.Multiply( (double)1.0/NevolutionDatainFuelDataBank ); - - if(GetLog()) - { - INFO <<"!!INFO!! Distance Parameters "<<endl; - map<ZAI ,double >::iterator it2; - for(it2 = fDistanceParameter.GetIsotopicQuantity().begin();it2 != fDistanceParameter.GetIsotopicQuantity().end(); it2++) - { - INFO << (*it2).first.Z() << " "; - INFO << (*it2).first.A() << " "; - INFO << (*it2).first.I() << " "; - INFO << ": " << (*it2).second; - INFO << endl; - } - INFO << endl; - } - - DBGL -} -//________________________________________________________________________ -void XSM_CLOSEST::SetDistanceParameter(IsotopicVector DistanceParameter) -{ - - fDistanceParameter = DistanceParameter; - - INFO <<"!!INFO!! Distance Parameters "<<endl; - map<ZAI ,double >::iterator it2; - for(it2 = fDistanceParameter.GetIsotopicQuantity().begin();it2 != fDistanceParameter.GetIsotopicQuantity().end(); it2++) - { - INFO << (*it2).first.Z() << " "; - INFO << (*it2).first.A() << " "; - INFO << (*it2).first.I() << " "; - INFO << ": " << (*it2).second; - INFO << endl; - } - INFO << endl; - -} - -//________________________________________________________________________ -void XSM_CLOSEST::SetDistanceType(int DistanceType) -{ - - fDistanceType=DistanceType; - if(fDistanceType==1){ - CalculateDistanceParameter(); - } - else if(fDistanceType == 2 && Norme(fDistanceParameter)==0){ - // This is so bad!! You will probably unsynchronize all the reactor.... - WARNING << " Distance use weight defined by user for each isotope, but no weight have been given" << endl<<"Use SetDistanceParameter()"<<endl; - exit(1); - } - else if (fDistanceType != 0 && fDistanceType != 1 && fDistanceType != 2 ){ - ERROR << " Distancetype defined by the user isn't recognized by the code"<<endl; - exit(1); - } - -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.hxx b/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.hxx deleted file mode 100644 index 6f79fb100..000000000 --- a/source/branches/CLASSV4.1/Model/XS/XSM_CLOSEST.hxx +++ /dev/null @@ -1,166 +0,0 @@ - -#ifndef _XSM_CLOSEST_HXX -#define _XSM_CLOSEST_HXX - - -/*! - \file - \brief Header file for XSM_MLP_PWR_MOX class. - - - @authors BaM,BLG - @version 1.0 - */ -#include "XSModel.hxx" -#include <string> -#include <fstream> -#include <iostream> -#include <map> -#include <vector> -typedef long long int cSecond; -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines a XSModel getting mean cross sections from the closest EvolutionData - -/*! - Define a XSM_CLOSEST. - Class to get cross sections from a set of pre-calculation - (with MURE,or other depletion code). -With this class, cross sections needed to solves Bateman equation come from an - already performed depletion calculation contained in a set of many depletion calculations. - The way to pick up these or these depletion calculation is related to a distance : - The depletion calculation (or EvolutionData) the closest from the new fresh fuel composition - is selected. Different distances are defined : - - \li Standard euclidean distance (weights : 1) IS THE DEFAULT - \li Euclidean distance with weights assigned according mean cross section values - \li Euclidean distance with weights assigned by user - - @authors BaM,BLG - @version 1.0 - */ -//________________________________________________________________________ - - -class XSM_CLOSEST : public XSModel -{ - - public : - - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// normal constructor - // - /*! - Make a new XSM_CLOSEST - \param DB_index_file : File listing the path of all depletion calculations (in EvolutionData format (.dat file) ) - \param oldreadmethod : - */ - XSM_CLOSEST(string DB_index_file, bool oldreadmethod = false ); - //} - - //{ - /// Logger constructor - // - /*! - Make a new XSM_CLOSEST - \param log : Use for the log - \param DB_index_file : File listing the path of all depletion calculations (in EvolutionData format (.dat file) ) - \param oldreadmethod : - */ - XSM_CLOSEST(CLASSLogger* Log, string DB_index_file, bool oldreadmethod = false ); - //} - - ~XSM_CLOSEST(); - //@} - - - //********* Get Method *********// - /*! - \name Get Method - */ - //@{ - virtual EvolutionData GetCrossSections(IsotopicVector isotopicvector,double t=0) ; //!< Reason to live of this CLASS : Return the closest Evolutiondata - vector< EvolutionData > GetFuelDataBank() const { return fFuelDataBank; } //!< Return the FuelDataBank - string GetDataBaseIndex() const { return fDataBaseIndex; } //!< Return the index Name - string GetFuelType() const { return fFuelType; } //!< Return the fuel type of the DB - vector<double> GetFuelParameter() const { return fFuelParameter; } //!< Return the Fuel parameters of the DB - pair<double,double> GetBurnUpRange() const { return fBurnUpRange;} //!< Return the Burnup range of the DB - bool IsDefine(IsotopicVector IV) const; //!< True if the key is define, false instead - - map<double, int> GetDistancesTo(IsotopicVector isotopicvector, double t = 0); //! Return a map containing the distance of each EvolutionData in the DataBase to the set IV at the time t - //@} - - //********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - void SetFuelDataBank(vector< EvolutionData > mymap) { fFuelDataBank = mymap; } //!< Set the FuelDataBank map - - void SetDataBaseIndex(string database) { fDataBaseIndex = database;; ReadDataBase(); } //!< Set the Name of the database index - void SetOldReadMethod(bool val) { fOldReadMethod = val; ReadDataBase();} //!< use the old reading method - - - - void SetWeightedDistanceCalculation(bool val = true) { fWeightedDistance = val;} //!< Set weighted distance calculation - void SetInventoryEvolutionInterpolation(bool val = true) { fEvolutionDataInterpolation = val;} //!< \deprecated The 64 closest EvolutionData (ED) are used to build a new ED. The cross section from each ED are weighted according to their distance - void SetDistanceParameter(IsotopicVector DistanceParameter); //!< Define mannually the weight for each ZAI in the distance calculation - //@} - - //{ - /// Choose the way to calculate the distance between two isotopic vectors. - /*! - // The different algorythms are: - // \li 0 is for the standard norme, - // \li 1 for each ZAI weighted with its XS, - // \li 2 for each ZAI weighted with coefficient given by the user. - */ - void SetDistanceType(int DistanceType); - //} - - //********* Other Method *********// - /*! - \name Other Method - */ - //@{ - void ReadDataBase(); //!< read the index file and fill the evolutionData map - void CalculateDistanceParameter(); //!< Calcul of the weight for each ZAI in the distance calculation from the mean XS of the FuelDataBank - - //@} - - private : - - vector< EvolutionData > fFuelDataBank; //!< DataBank map - - string fDataBaseIndex; //!< Name of the index - - bool fOldReadMethod; //!< use old DB format - bool fWeightedDistance; //!< USe XS weighted distance calculation - bool fEvolutionDataInterpolation; //!< USe XS weighted distance calculation - - - string fFuelType; //!< Type of fuel of the FuelDataBank - pair<double,double> fBurnUpRange; //!< Range of the Burn-up range of the FuelDataBank - vector<double> fFuelParameter; //!< Parameter needed by the equivalence model - - - - int fDistanceType; //!< Set the distance calculation algorythm - /// \li 0 is for the standard norm (Default = 0), - /// \li 1 for each ZAI weighted with its XS, - /// \li 2 for each ZAI weighted with coefficient given by the user. - - IsotopicVector fDistanceParameter; //!< weight for each ZAI in the distance calculation - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/Model/XS/XSM_MLP.cxx b/source/branches/CLASSV4.1/Model/XS/XSM_MLP.cxx deleted file mode 100644 index 1ae0e7f39..000000000 --- a/source/branches/CLASSV4.1/Model/XS/XSM_MLP.cxx +++ /dev/null @@ -1,550 +0,0 @@ - -#include "XSModel.hxx" -#include "XSM_MLP.hxx" -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - -#include "TMVA/Reader.h" -#include "TMVA/Tools.h" -#include "TMVA/MethodCuts.h" - -#include <TGraph.h> -#include <TString.h> -#include "TFile.h" -#include "TSystem.h" -#include "TROOT.h" -#include "TStopwatch.h" - -#include <dirent.h> -#include <errno.h> -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - -//________________________________________________________________________ -// -// XSM_MLP -// -// -// -// -//________________________________________________________________________ -XSM_MLP::XSM_MLP(string TMVA_Weight_Directory,string InformationFile, bool IsTimeStep):XSModel(new CLASSLogger("XSM_MLP.log")) -{ - - fIsStepTime=IsTimeStep; - fTMVAWeightFolder = TMVA_Weight_Directory; - if(InformationFile=="") - fMLPInformationFile = TMVA_Weight_Directory+"/Data_Base_Info.nfo"; - else - fMLPInformationFile=fTMVAWeightFolder+InformationFile; - - GetMLPWeightFiles(); - GetDataBaseInformation(); - - INFO<<"__A cross section interpolator using" <<endl; - INFO<<"Multi Layer Perceptron has been define__"<<endl; - INFO << " \t His TMVA folder is : \" " << fTMVAWeightFolder << "\"" << endl; - -} -//________________________________________________________________________ -XSM_MLP::XSM_MLP(CLASSLogger* Log,string TMVA_Weight_Directory,string InformationFile, bool IsTimeStep):XSModel(Log) -{ - - fIsStepTime=IsTimeStep; - fTMVAWeightFolder = TMVA_Weight_Directory; - if(InformationFile=="") - fMLPInformationFile = TMVA_Weight_Directory+"/Data_Base_Info.nfo"; - else - fMLPInformationFile=fTMVAWeightFolder+InformationFile; - - GetMLPWeightFiles(); - GetDataBaseInformation(); - - INFO<<"__A cross section interpolator using" <<endl; - INFO<<"Multi Layer Perceptron has been define__"<<endl; - INFO << " \t His TMVA folder is : \" " << fTMVAWeightFolder << "\"" << endl; - -} -//________________________________________________________________________ -XSM_MLP::~XSM_MLP() -{ - fMapOfTMVAVariableNames.clear(); -} -//________________________________________________________________________ -void XSM_MLP::GetDataBaseInformation() -{ - ifstream FILE(fMLPInformationFile.c_str()); - - if(FILE.good()) - { - while(!FILE.eof()) - { - string line; - getline(FILE, line); - size_t foundRType = line.find("ReactorType :"); - size_t foundFType = line.find("FuelType :"); - size_t foundHM = line.find("Heavy Metal (t) :"); - size_t foundPower = line.find("Thermal Power (W) :"); - size_t foundTime = line.find("Time (s) :"); - size_t foundZAI = line.find("Z A I Name (input MLP) :"); - size_t foundDomain = line.find("Fuel range (Z A I min max) :"); - - int pos=0; - if(foundRType != std::string::npos) - { StringLine::NextWord(line,pos,':'); - fDataBaseRType = atof( (StringLine::NextWord(line,pos,':')).c_str() ); - } - pos=0; - if(foundFType != std::string::npos) - { StringLine::NextWord(line,pos,':'); - fDataBaseFType = atof( (StringLine::NextWord(line,pos,':')).c_str() ); - } - pos=0; - if(foundHM != std::string::npos) - { StringLine::NextWord(line,pos,':'); - fDataBaseHMMass = atof( (StringLine::NextWord(line,pos,':')).c_str() ); - } - pos=0; - if(foundPower !=std::string::npos) - { StringLine::NextWord(line,pos,':'); - fDataBasePower = atof( (StringLine::NextWord(line,pos,':') ).c_str() ); - } - pos=0; - if(foundTime!=std::string::npos) - { - StringLine::NextWord(line,pos,':'); - while( pos< (int)line.size() ) - fMLP_Time.push_back( atof( (StringLine::NextWord(line,pos,' ')).c_str() )); - } - pos=0; - if(foundZAI != std::string::npos) - { string Z; - string A; - string I; - string Name; - int posoflinebeforbadline=0; - do - { posoflinebeforbadline = FILE.tellg(); - getline(FILE, line); - stringstream ssline; - ssline<<line; - ssline>>Z>>A>>I>>Name; - if(StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) ) - { - fMapOfTMVAVariableNames.insert( pair<ZAI,string>(ZAI(atoi(Z.c_str()),atoi(A.c_str()),atoi(I.c_str())),Name) ); - } - - }while((StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I)) && !FILE.eof()); - - FILE.seekg(posoflinebeforbadline); //return one line before - - } - if(foundDomain != std::string::npos) - { string Z; - string A; - string I; - string min; - string max; - int posoflinebeforbadline=0; - do - { posoflinebeforbadline = FILE.tellg(); - getline(FILE, line); - stringstream ssline; - ssline<<line; - ssline>>Z>>A>>I>>min>>max; - if(StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) && StringLine::IsDouble(min) && StringLine::IsDouble(max) ) - { - fFreshFuelDomain.insert( pair<ZAI,pair<double,double> >(ZAI(atoi(Z.c_str()),atoi(A.c_str()),atoi(I.c_str())),make_pair(atof(min.c_str()),atof(max.c_str()))) ); - } - - } - while((StringLine::IsDouble(Z) && StringLine::IsDouble(A) && StringLine::IsDouble(I) )&& !FILE.eof()); - FILE.seekg(posoflinebeforbadline); //return one line before - - } - - } - } - else - { - ERROR << "Can't find/open file " << fMLPInformationFile << endl; - exit(0); - } - - /********DEBUG*************************************/ - INFO<<"\tMLP XS Data Base Information : "<<endl; - INFO<<"\t\tHeavy Metal (t) :"<<fDataBaseHMMass<<endl; - INFO<<"\t\tThermal Power (W) :"<<fDataBasePower<<endl; - INFO<<"\t\tTime (s) :"<<endl; - for (int i = 0; i < (int)fMLP_Time.size(); ++i) - INFO<<"\t\t\t"<<fMLP_Time[i]<<endl; - INFO<<"\t\tZ A I Name (input MLP) :"<<endl; - - map<ZAI ,string >::iterator it; - - for (it= fMapOfTMVAVariableNames.begin();it!=fMapOfTMVAVariableNames.end();it++) - INFO<<"\t\t\t"<< it->first.Z()<<" "<<it->first.A()<<" "<<it->second<<endl; - - INFO<<"\t\tFuel range"<<endl; - for (map<ZAI,pair<double,double> >::iterator it_dom = fFreshFuelDomain.begin();it_dom!=fFreshFuelDomain.end();it_dom++) - INFO<<"\t\t\t"<< it_dom->second.first<<" <= "<<it_dom->first.Z()<<" "<<it_dom->first.A()<<" "<<it_dom->first.I()<<" <= "<<it_dom->second.second<<endl;; - - -} -//________________________________________________________________________ -void XSM_MLP::GetMLPWeightFiles() -{DBGL - /**********Get All TMVA weight files*******************/ - //check if the folder containing weights exists - DIR* rep = NULL; - struct dirent* fichierLu = NULL; - rep = opendir(fTMVAWeightFolder.c_str()); - if (rep == NULL) - { - ERROR<<" Reading error for TMVA weight folder "<<fTMVAWeightFolder.c_str()<<" : "<<strerror(errno)<<endl; - exit(1); - } - - /**Save file names of TMVA weights*/ - fWeightFiles.resize(0); - while ((fichierLu = readdir(rep)) != NULL) - { - string FileName= fichierLu->d_name ; - if(FileName != "." && FileName != ".." ) - { - if(FileName[FileName.size()-3]=='x' && FileName[FileName.size()-2]=='m' && FileName[FileName.size()-1]=='l' && FileName[0]!='.' ) - fWeightFiles.push_back(FileName); - - } - } - DBGL -} -//________________________________________________________________________ -//________________________________________________________________________ -// -// Time (MLP take time as parameter) -//________________________________________________________________________ -//________________________________________________________________________ -void XSM_MLP::ReadWeightFile(string Filename, int &Z, int &A, int &I, int &Reaction) -{ - Z=-1; - A=-1; - I=-1; - Reaction=-1; - - size_t found = Filename.find("XS"); - - string NameJOB; - NameJOB=Filename.substr(found); - int pos=0; - - StringLine::NextWord(NameJOB, pos, '_'); - - Z = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - - A = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - - I = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - - string sReaction = (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ; - size_t foundext = sReaction.find(".weights.xml"); - sReaction = sReaction.substr(0,foundext); - - if(sReaction=="fis") - Reaction=0; - if(sReaction=="cap") - Reaction=1; - if(sReaction=="n2n") - Reaction=2; - - if(Z<=0 || A<=0 || I<0 || Reaction==-1) - { - ERROR << " wrong TMVA weight format " << endl; - exit(0); - } - -} -//________________________________________________________________________ -TTree* XSM_MLP::CreateTMVAInputTree(IsotopicVector isotopicvector,int TimeStep) -{ - /******Create Input data tree to be interpreted by TMVA::Reader***/ - TTree* InputTree = new TTree("InTMP", "InTMP"); - - vector<float> InputTMVA; - for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++) - InputTMVA.push_back(0); - - float Time=0; - - IsotopicVector IVInputTMVA; - map<ZAI ,string >::iterator it; - int j=0; - - for( it = fMapOfTMVAVariableNames.begin() ; it!=fMapOfTMVAVariableNames.end() ; it++) - { - InputTree->Branch( ((*it).second).c_str() ,&InputTMVA[j], ((*it).second + "/F").c_str()); - IVInputTMVA+= ((*it).first)*1; - j++; - } - - if( !fIsStepTime) - InputTree->Branch( "Time" ,&Time ,"Time/F" ); - - IsotopicVector IVAccordingToUserInfoFile = isotopicvector.GetThisComposition(IVInputTMVA); - - double Ntot = IVAccordingToUserInfoFile.GetSumOfAll(); - - IVAccordingToUserInfoFile = IVAccordingToUserInfoFile/Ntot; - - j=0; - map<ZAI ,string >::iterator it2; - DBGV("INPUT TMVA"); - for( it2 = fMapOfTMVAVariableNames.begin() ; it2!=fMapOfTMVAVariableNames.end() ; it2++) - { - InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first ) ; - DBGV((*it2).first.Z()<<" "<<(*it2).first.A()<<" "<<InputTMVA[j]); - j++; - } - - Time=fMLP_Time[TimeStep]; - - InputTree->Fill(); - - return InputTree; -} -//________________________________________________________________________ -double XSM_MLP::ExecuteTMVA(string WeightFile,TTree* InputTree) -{ - DBGV( "File :" << WeightFile); - // --- Create the Reader object - TMVA::Reader *reader = new TMVA::Reader( "Silent" ); - - // Create a set of variables and declare them to the reader - // - the variable names MUST corresponds in name and type to those given in the weight file(s) used - vector<float> InputTMVA; - for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++) - InputTMVA.push_back(0); - Float_t Time; - - map<ZAI ,string >::iterator it; - int j=0; - for( it = fMapOfTMVAVariableNames.begin() ; it!=fMapOfTMVAVariableNames.end() ; it++) - { reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]); - j++; - } - if(!fIsStepTime) - reader->AddVariable( "Time" ,&Time); - - // --- Book the MVA methods - - string dir = fTMVAWeightFolder; - if(dir[dir.size()-1]!='/') - dir+="/"; - - // Book method MLP - TString methodName = "MLP method"; - TString weightpath = dir + WeightFile ; - reader->BookMVA( methodName, weightpath ); - - map<ZAI ,string >::iterator it2; - j=0; - for( it2 = fMapOfTMVAVariableNames.begin() ; it2!=fMapOfTMVAVariableNames.end() ; it2++) - { - InputTree->SetBranchAddress(( (*it2).second ).c_str(),&InputTMVA[j]); - j++; - } - - if(!fIsStepTime) - InputTree->SetBranchAddress( "Time" ,&Time ); - - InputTree->GetEntry(0); - Float_t val = (reader->EvaluateRegression( methodName ))[0]; - - delete reader; - DBGL - - return (double)val; -} -//________________________________________________________________________ -EvolutionData XSM_MLP::GetCrossSectionsTime(IsotopicVector IV) -{DBGL - - EvolutionData EvolutionDataFromMLP = EvolutionData(); - - map<ZAI,TGraph*> ExtrapolatedXS[3]; - /*************DATA BASE INFO****************/ - EvolutionDataFromMLP.SetReactorType(fDataBaseRType); - EvolutionDataFromMLP.SetFuelType(fDataBaseFType); - EvolutionDataFromMLP.SetPower(fDataBasePower); - EvolutionDataFromMLP.SetHeavyMetalMass(fDataBaseHMMass); - /************* The Cross sections***********/ - for(int i=0;i<int(fWeightFiles.size());i++) - { - int Z=-2; - int A=-2; - int I=-2; - int Reaction=-2; - ReadWeightFile( fWeightFiles[i], Z, A, I, Reaction); - if( Z >= GetZAIThreshold() ) - { - for(int TimeStep=0;TimeStep<int(fMLP_Time.size());TimeStep++) - { - TTree* InputTree = CreateTMVAInputTree(IV,TimeStep); - - pair< map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = ExtrapolatedXS[Reaction].insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph() ) ); - - double XSValue = ExecuteTMVA(fWeightFiles[i],InputTree ); - if(IResult.second ) - { - (IResult.first)->second->SetPoint(0, (double)fMLP_Time[TimeStep], XSValue ); - - } - else - { - (IResult.first)->second->SetPoint( (IResult.first)->second->GetN(), (double)fMLP_Time[TimeStep], XSValue ); - } - - delete InputTree; - } - } - } - - /**********Sorting TGraph*********/ - for(int x=0;x<3;x++) - { map<ZAI,TGraph*>::iterator it; - for(it = ExtrapolatedXS[x].begin(); it != ExtrapolatedXS[x].end(); it++) - it->second->Sort(); - - } - /**********Filling Matrices*/ - EvolutionDataFromMLP.SetFissionXS(ExtrapolatedXS[0]); - EvolutionDataFromMLP.SetCaptureXS(ExtrapolatedXS[1]); - EvolutionDataFromMLP.Setn2nXS(ExtrapolatedXS[2]); - - - DBGL - return EvolutionDataFromMLP; -} -//________________________________________________________________________ -//________________________________________________________________________ -// -// Time step (1 MLP per time step) -//________________________________________________________________________ -//________________________________________________________________________ -void XSM_MLP::ReadWeightFileStep(string Filename, int &Z, int &A, int &I, int &Reaction, int &TimeStep) -{ - Z=-1; - A=-1; - I=-1; - Reaction=-1; - - size_t found = Filename.find("XS"); - - string NameJOB; - NameJOB=Filename.substr(found); - int pos=0; - - StringLine::NextWord(NameJOB, pos, '_'); - - Z = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - A = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - I = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - - string sReaction = (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ; - if(sReaction=="fis") - Reaction=0; - if(sReaction=="cap") - Reaction=1; - if(sReaction=="n2n") - Reaction=2; - - TimeStep = atof( (StringLine::NextWord(NameJOB,pos,'_') ).c_str() ); - - if(Z==-1 || A==-1 || I==-1 || Reaction==-1 || TimeStep==-1) - { - ERROR << " wrong TMVA weight format " << endl; - exit(0); - } -} - -//________________________________________________________________________ -EvolutionData XSM_MLP::GetCrossSectionsStep(IsotopicVector IV) -{DBGL - TTree* InputTree=CreateTMVAInputTree(IV); - - EvolutionData EvolutionDataFromMLP = EvolutionData(); - - map<ZAI,TGraph*> ExtrapolatedXS[3]; - /*************DATA BASE INFO****************/ - EvolutionDataFromMLP.SetReactorType("PWR"); - EvolutionDataFromMLP.SetFuelType("MOX"); - EvolutionDataFromMLP.SetPower(fDataBasePower); - EvolutionDataFromMLP.SetHeavyMetalMass(fDataBaseHMMass); - - /************* The Cross sections***********/ - - for(int i=0;i<int(fWeightFiles.size());i++) - { - int Z=-2; - int A=-2; - int I=-2; - int Reaction=-2; - int TimeStep=-2; - ReadWeightFileStep( fWeightFiles[i], Z, A, I, Reaction, TimeStep); - if( Z >= GetZAIThreshold() ) - { - ZAI zaitmp = ZAI(Z,A,I); - - pair< map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = ExtrapolatedXS[Reaction].insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph() ) ); - - if( IResult.second ) - { - (IResult.first)->second->SetPoint(0, (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],InputTree) ); - } - else - { - (IResult.first)->second->SetPoint( (IResult.first)->second->GetN(), (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],InputTree) ); - } - } - } - - /**********Sorting TGraph*********/ - for(int x=0;x<3;x++) - { map<ZAI,TGraph*>::iterator it; - for(it = ExtrapolatedXS[x].begin(); it != ExtrapolatedXS[x].end(); it++) - it->second->Sort(); - } - /**********Filling Matrices*/ - EvolutionDataFromMLP.SetFissionXS(ExtrapolatedXS[0]); - EvolutionDataFromMLP.SetCaptureXS(ExtrapolatedXS[1]); - EvolutionDataFromMLP.Setn2nXS(ExtrapolatedXS[2]); - - delete InputTree; - DBGL - return EvolutionDataFromMLP; -} -//________________________________________________________________________ -EvolutionData XSM_MLP::GetCrossSections(IsotopicVector IV ,double t) -{DBGL - if(t!=0) - WARNING << " Argument t has non effect here " << endl; - - EvolutionData EV; - if(fIsStepTime) - EV=GetCrossSectionsStep(IV); - - else - EV=GetCrossSectionsTime(IV); - - DBGL - return EV; -} -//________________________________________________________________________ diff --git a/source/branches/CLASSV4.1/Model/XS/XSM_MLP.hxx b/source/branches/CLASSV4.1/Model/XS/XSM_MLP.hxx deleted file mode 100644 index 03570b303..000000000 --- a/source/branches/CLASSV4.1/Model/XS/XSM_MLP.hxx +++ /dev/null @@ -1,113 +0,0 @@ - -#ifndef _XSM_MLP_HXX -#define _XSM_MLP_HXX - - -/*! - \file - \brief Header file for XSM_MLP class. - - - @authors BLG - @version 1.0 - */ -#include "XSModel.hxx" -#include "TTree.h" -#include <string> -#include <fstream> -#include <iostream> -#include <map> -#include <vector> -typedef long long int cSecond; -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines a XSModel getting mean cross sections from neural network execution - -/*! - Define a XSM_MLP. - This is the class to predict cross sections with a - set of Multi Layer Perceptrons (MLP) - - @authors BLG - @version 1.0 - */ -//________________________________________________________________________ - - -class XSM_MLP : public XSModel -{ - public : - - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// Normal Constructor - /*! - \param TMVA_Weight_Directory : The directory where all the TMVA weight are located - \param InformationFile : Name of the information file located in TMVA_Weight_Directory (default : Data_Base_Info.nfo) - \param IsTimeStep : if true , one TMVA weihgt per step time is requiered otherwise it assumes time is part of the MLP inputs - - */ - XSM_MLP(string TMVA_Weight_Directory,string InformationFile="",bool IsTimeStep=false); - //} - - //{ - /// CLASSLogger Constructor - /*! - \param log : The CLASSLogger - \param TMVA_Weight_Directory : The directory where all the TMVA weight are located - \param InformationFile : Name of the information file located in TMVA_Weight_Directory (default : Data_Base_Info.nfo) - \param IsTimeStep : if true , one TMVA weihgt per step time is requiered otherwise it assumes time is part of the MLP inputs - - */ - XSM_MLP(CLASSLogger* Log,string TMVA_Weight_Directory,string InformationFile="",bool IsTimeStep=false); - //} - - ~XSM_MLP(); - //@} - - - virtual EvolutionData GetCrossSections(IsotopicVector IV,double t=0); //!< Return calculated cross section by the MLP regression - - - private : - - void GetDataBaseInformation(); //!< Read information file and fill Reactor Type, Fuel type, HM mass, Power, time vector, and TMVA input variables names - - void GetMLPWeightFiles(); //!< Find all .xml file in TMVA_Weight_Directory - EvolutionData GetCrossSectionsStep(IsotopicVector IV); //!< Return calculated cross section by the MLP regression when fIsTimeStep==true - EvolutionData GetCrossSectionsTime(IsotopicVector IV); //!< Return calculated cross section by the MLP regression when fIsTimeStep==false - - void ReadWeightFile(string Filename, int &Z, int &A, int &I, int &Reaction) ; //!< Select the reaction according to the weight file name - void ReadWeightFileStep(string Filename, int &Z, int &A, int &I, int &Reaction, int &TimeStep);; //!< Select the reaction according to the weight file name - - - - double ExecuteTMVA(string WeightFile, TTree* InputTree); //!<Execute the MLP according to the input tree created - TTree* CreateTMVAInputTree(IsotopicVector isotopicvector,int TimeStep=0); //!<Create input tmva tree to be read by ExecuteTMVA - - - vector<double> fMLP_Time; //!< Time vector of the data base - vector<string> fWeightFiles; //!< All the weight file contains in fTMVAWeightFolder - - string fTMVAWeightFolder; //!< folder containing all the weight file - string fMLPInformationFile; //!< file containing Reactor Type, Fuel type, HM mass, Power, time vector, and TMVA input variables names (looks the manual for format details) - - double fDataBasePower; //!< Power of the data base (read from fMLPInformationFile ) - double fDataBaseHMMass; //!< Heavy metal mass of the data base (read from fMLPInformationFile ) - string fDataBaseFType; //!< Reactor Type (e.g PWR, FBR-Na, ADS..) - string fDataBaseRType; //!< Fuel Type (e.g MOX, UOX, ThU, ThPu ...) - - bool fIsStepTime; //!< true if one TMVA weihgt per step time is requiered otherwise it assumes time is part of the MLP inputs - - map<ZAI,string> fMapOfTMVAVariableNames;//!< List of TMVA input variable names (read from fMLPInformationFile ) , name depends on the training step - - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/CLASSBackEnd.hxx b/source/branches/CLASSV4.1/include/CLASSBackEnd.hxx deleted file mode 100644 index 334e95ecd..000000000 --- a/source/branches/CLASSV4.1/include/CLASSBackEnd.hxx +++ /dev/null @@ -1,154 +0,0 @@ - -#ifndef _CLASSBACKEND_ -#define _CLASSBACKEND_ - - -/*! - \file - \brief Header file for CLASSFacility class. - - */ - -#include <string> -#include <fstream> -#include <map> - - -#include "CLASSFacility.hxx" -#include "IsotopicVector.hxx" -#include "DecayDataBank.hxx" - -#include "TNamed.h" - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Class defining the common properties of all back end fuel cycle facilities - -/*! - Define a CLASS Facility. - The aim of these class is to gather all the commom properties of the - facilities which are involve in the BackEnd Fuel cycle. - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - -class CLASSBackEnd : public CLASSFacility -{ - public : - //{ - /// Default Constructor. - /*!Create an empty CLASSBackEnd - \param type - \li -2 :SeparationPlant - \li -1 :Storage - \li 8 :Pool - */ - CLASSBackEnd(int type = 0); - //} - - //{ - /// CLASSLogger Constructor. - /*! - Create an empty CLASSBackEnd loading a CLASSLogger - \param log : used for the log. - \param type - \li -2 :SeparationPlant - \li -1 :Storage - \li 8 :Pool */ - CLASSBackEnd(CLASSLogger* log,int type = 0); - //} - - //{ - /// Cycle time Constructor. - /*! - Create an empty CLASSBackEnd loading a CLASSLogger - \param log : used for the log. - \param cycletime Cycle time of the CLASSBackend (e.g. Cooling time for the pool) in [s], - \param type -2 :SeparationPlant -1 : Storage ; 8 :Pool - */ - CLASSBackEnd(CLASSLogger* log, cSecond cycletime, int type = 0); - //} - //@} - - //********* Get Method *********// - /*! - \name Get Function - */ - //@{ - - - vector<IsotopicVector> GetIVArray() const { return fIVArray; } //!< Return the IsotopicVector Array - vector<cSecond> GetIVArrayArrivalTime() const { return fIVArrayArrivalTime;} //!<Vector of arrival time of each IV in the CLASSBackEnd - - int GetIVNumber() const { return fIVArray.size();} //!< Return the number of Isotopic Vector present in the CLASSBackEnd object - bool GetStorageType() const { return fIsStorageType;} //!< Return the storageType : True if it is a Storage - IsotopicVector GetIV(int i) const { if(i < (int)fIVArray.size()) return fIVArray[i]; - else return IsotopicVector(); } -#ifndef __CINT__ - DecayDataBank* GetDecayDataBank() { return fDecayDataBase;} //!< Return the pointer to the decay DataBank - CLASSBackEnd* GetOutBackEndFacility() const { return fOutBackEndFacility;} //!<Return the pointer to the OUtBackEndFacility - virtual map<cSecond,int> GetTheBackEndTimePath(); //!< Get the full path - -#endif - - //@} - - //********* Set Method *********// - /*! - \name Set Function - */ - //@{ - void SetIsStorageType(bool val = true) { fIsStorageType = val;} //! Set the fIsStorage bool - virtual void SetIVArray(vector<IsotopicVector> ivarray) { fIVArray = ivarray; } //!< Set The isotopicVector Array -#ifndef __CINT__ - void SetDecayDataBank(DecayDataBank* decayDB) { fDecayDataBase = decayDB;} //! Set the Decay DataBank - virtual void SetOutBackEndFacility(CLASSBackEnd* befacility) { fOutBackEndFacility = befacility; - fIsStorageType = false; } //! Set an out Facility - -#endif - - using CLASSFacility::SetName; - - //@} - - - /*! - \name BackEndFacility specific Method - */ - //@{ - virtual void ApplyZAIThreshold(int z = 90); //!< Put all nuclei below the threshold in -2 -2 -2 ZAI... - - virtual void AddIV(IsotopicVector isotopicvector); //!< Add an Isotopicvector to the IVArray - void ClearIVArray(); //!< Empty the IVArray removing all fuel stored - - //@} - virtual void Evolution(cSecond t) {} //!< Performs the Evolution until time t - void UpdateInsideIV(); - - - protected : - IsotopicVector GetDecay(IsotopicVector isotopicvector, cSecond t); //!< Get IsotopicVector decay at time t [s] - vector<IsotopicVector> fIVArray; ///< Vector containning all the fuel stored. - vector<cSecond> fIVArrayArrivalTime; ///< Vector containning the arrival time of each fuel in [s] - -#ifndef __CINT__ - CLASSBackEnd* fOutBackEndFacility; //!< Facility getting the fuel at the end of the cycle -#endif - - //********* Internal Parameter *********// - private : - bool fIsStorageType; //!< True if there is no out CLASSBackEnd facility (like a Storage...) - -#ifndef __CINT__ - DecayDataBank* fDecayDataBase; //!< Pointer to the DecayDataBank -#endif - - ClassDef(CLASSBackEnd,2); -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/CLASSConstante.hxx b/source/branches/CLASSV4.1/include/CLASSConstante.hxx deleted file mode 100644 index 489b48acd..000000000 --- a/source/branches/CLASSV4.1/include/CLASSConstante.hxx +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _CLASSConstante_ -#define _CLASSConstante_ - -//CLASS library -#include "ZAIMass.hxx" -#include "ZAIHeat.hxx" -#include "ZAITox.hxx" -#include "DecayDataBank.hxx" - -typedef long long int cSecond; - -static const double AVOGADRO = 6.02214129e23; // Avogadro Number [1/mol] - -static const ZAIMass cZAIMass; // Mass list of all nuclei stored in [g/mol] -static const ZAIHeat cZAIHeat; // Thermal power list of all nuclei [W/nucleus] -static const ZAITox cZAITox; - -static const cSecond cYear = 3600*24*365.25; // Seconds in a year -static DecayDataBank cDecayData; // Seconds in a year - - -#endif diff --git a/source/branches/CLASSV4.1/include/CLASSFacility.hxx b/source/branches/CLASSV4.1/include/CLASSFacility.hxx deleted file mode 100644 index 8950b40a2..000000000 --- a/source/branches/CLASSV4.1/include/CLASSFacility.hxx +++ /dev/null @@ -1,214 +0,0 @@ - -#ifndef _CLASSFACILITY_ -#define _CLASSFACILITY_ - - -/*! - \file - \brief Header file for CLASSFacility class. - - */ - -#include <string> -#include <fstream> - -#include "CLASSObject.hxx" -#include "IsotopicVector.hxx" - -#include "TNamed.h" - -using namespace std; - -class Scenario; -//-----------------------------------------------------------------------------// -//! Defines the common properties of all facilities - -/*! - Define a CLASS Facility. - The aim of these class is to gather all the commom properties of the facilities. - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - - -class CLASSFacility : public CLASSObject -{ -public : - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// Normal Constructor. - /*! - Make a new Facility - \param type identification type of the facility : - \li 4 Reactor, - \li 8 Pool, - \li 16 FabricationPlant. - */ - - CLASSFacility(int type = 0); - //} - - //{ - /// Special Constructor. - /*! - Make a new Facility - \param log : used for the log. - \param type identification type of the facility : - \li 4 Reactor, - \li 8 Pool, - \li 16 FabricationPlant. - - */ - CLASSFacility(CLASSLogger* log, int type = 0); - //} - - //{ - /// Special Constructor. - /*! - Make a new Facility - \param log : used for the log. - \param cycletime duration of the cycle [s], - \param type identification type of the facility : - \li 4 Reactor, - \li 8 Pool, - \li 16 FabricationPlant. - - */ - CLASSFacility(CLASSLogger* log, cSecond cycletime, int type = 0); - //} - - //{ - /// Special Constructor. - /*! - Make a new Facility - \param log : used for the log. - \param creationtime creation date of the Facility [s], - \param lifetime operating duration [s], - \param type identification type of the facility : - \li 4 Reactor, - \li 8 Pool, - \li 16 FabricationPlant. - - */ - CLASSFacility(CLASSLogger* log, cSecond creationtime, cSecond lifetime, int type = 0); - //} - - //{ - /// Special Constructor. - /*! - Make a new Facility - \param log : used for the log. - \param creationtime creation date of the Facility [s], - \param lifetime operating duration [s], - \param cycletime duration of the cycle [s], - \param type identification type of the facility : - \li 4 Reactor, - \li 8 Pool, - \li 16 FabricationPlant. - - */ - CLASSFacility(CLASSLogger* log, cSecond startingtime, cSecond lifetime, cSecond cycletime, int type = 0); - //} - - //********* Get Method *********// - /*! - \name Get Function - */ - //@{ - - int GetId() const { return fId; } //!< Return the Facility Parc'Is - IsotopicVector GetInsideIV() const { return fInsideIV; } //!< Return the IV contained in the Facility - - int GetFacilityType() const { return fFacilityType; } //!< Return the Facility Type id - - cSecond GetInternalTime() const { return fInternalTime; } //!< Return Creation Time - - cSecond GetCycleTime() const { return fCycleTime; } //!< Return the cycle time of the Facility - cSecond GetCreationTime() const { return fCreationTime; } //!< Return the creation time of the Facility - cSecond GetLifeTime() const { return fLifeTime; } //!< Return the life time of the Facility - Scenario* GetParc() { return fParc; } //!< return the pointer to the Park - - - IsotopicVector GetCumulativeIVIn() { return fCumulativeIVIn;} //!< return the cumulative sum of all incoming IV - IsotopicVector GetCumulativeIVOut() { return fCumulativeIVOut;} //!< return the cumulative sum of all outcoming IV - //@} - - //********* Set Method *********// - /*! - \name Set Function - */ - //@{ - void SetId(int id) { fId = id; } //!< Set The Facility Parc'Id - void SetParc(Scenario* parc) { fParc = parc; } //!< Set the Pointer to the Parc - void SetFacilityType(int type) { fFacilityType = type; } //!< Set the facility type : - /// \li 2 reactor Studown - /// \li 4 start/End of reactor cycle, - /// \li 8 end of Cooling, - /// \li 16 fuel Fabrication - using CLASSObject::SetName; - using CLASSObject::GetName; - - - void SetInsideIV(IsotopicVector isotopicvector) { fInsideIV = isotopicvector; } //!< Set the IV inside the Facility - void SetCreationTime(double creationtime) { fCreationTime = (cSecond)creationtime;} //!< Set the creation Time - void SetLifeTime(double lifetime) { fLifeTime = (cSecond)lifetime; } //!< Set the life time of the facility - virtual void SetCycleTime(double cycletime) { fCycleTime = (cSecond)cycletime; } //!< Set the cycle time (Cycle of the loading Plan) - void SetInCycleTime(double incycletime) { fInCycleTime = (cSecond)incycletime; fIsStarted = true; } //!< Set the cycle time (Cycle of the loading Plan) - void SetInternalTime(double internaltime) { fInternalTime = (cSecond)internaltime; } //!< Set the cycle time (Cycle of the loading Plan) - - //@} - - - /*! - \name Evolution Method - */ - //@{ - virtual void ApplyZAIThreshold(int z = 90); //!< Put all nuclei below the threshold in -2 -2 -2 ZAI... - void AddCumulativeIVIn(IsotopicVector IV) { fCumulativeIVIn += IV;} //!< Add the Input IsotopicVector in the cumulative IV IN - void AddCumulativeIVOut(IsotopicVector IV) { fCumulativeIVOut += IV;} //!< Add the Input IsotopicVector in the cumulative IV OUT - virtual void Evolution(cSecond t) = 0; //!< Performs the Evolution to time t - virtual void Dump() { } //!< Write Modification (IV In/Out, filling the TF...) - - //@} -protected : - bool fIsStarted; ///< True if Running, False Otherwise - bool fIsShutDown; ///< True if the facility is stoped, False Otherwise - bool fIsAtEndOfCycle; ///< True if Reaching the end of a Facility cycle - - - cSecond fInternalTime; ///< Internal Clock [s] - cSecond fInCycleTime; ///< Time spent since the beginning of the last Cycle [s] - cSecond fCycleTime; ///< Cycle duration Time [s] - - IsotopicVector fInsideIV; ///< All IV in the Facility (fuel for reactor, total for all others...) - IsotopicVector fCumulativeIVIn; ///< All IV in the Facility (fuel for reactor, total for all others...) - IsotopicVector fCumulativeIVOut; ///< All IV in the Facility (fuel for reactor, total for all others...) - - //********* Internal Parameter *********// -private : - int fId; //!< Identity of the Facility inside the Scenario - int fFacilityType; ///< Type of facility : - /// \li 4 reactor, - /// \li 8 Pool, - /// \li 16 FabricationPlant. - - - Scenario* fParc; //!< Pointer to the main Scenario - - cSecond fCreationTime; ///< CLASS Universal Time of Creation [s] - cSecond fLifeTime; ///< Time of life Of the Reactor (operating's duration) [s] - - ClassDef(CLASSFacility,1); -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/CLASSFuel.hxx b/source/branches/CLASSV4.1/include/CLASSFuel.hxx deleted file mode 100644 index 03d9dbc96..000000000 --- a/source/branches/CLASSV4.1/include/CLASSFuel.hxx +++ /dev/null @@ -1,85 +0,0 @@ - -#ifndef _CLASSFUEL_ -#define _CLASSFUEL_ - - -/*! - \file - \brief Header file for CLASSFuel class. - - - @author BaM - @version 2.0 - */ - -#include <string> -#include <fstream> - -#include "CLASSObject.hxx" -#include "PhysicsModels.hxx" -#include "EvolutionData.hxx" - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Allows to define PhysicsModels & EvolutionData as a CLASSFuel - -/*! - Define a CLASS Object. - The aim of these class is to handle PhysicsModels & - EvolutionData as a CLASSFuel . - - @author BaM - @version 3.0 - */ -//________________________________________________________________________ - - - -class CLASSFuel : public CLASSObject -{ - public : - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// EvolutionData Constructor. - /*! - Make a new CLASSObject - /param evo : EvolutionData stored - */ - CLASSFuel(EvolutionData* evo); - //} - - //{ - /// PhysicsModels Constructor. - /*! - Make a new CLASSObject - /param evo : PhysicsModels stored - */ - CLASSFuel(PhysicsModels* evo); - //} - //@} - - - virtual CLASSFuel* Clone() { return new CLASSFuel(*this); } //!< Correct way to copy a CLASSFuel in case of derivation - - - EvolutionData* GetEvolutionData() {return fEvolutionData;} //!< Return the EvolutionData (NULL if PhysicsModels) - PhysicsModels* GetPhysicsModels() {return fPhysicsModels;} //!< Return the PhysicsModels (NULL if EvolutionData) - - using CLASSObject::SetName; - using CLASSObject::GetName; - protected : - - - private : - - EvolutionData* fEvolutionData; //!< the EvolutionData (NULL if PhysicsModels) - PhysicsModels* fPhysicsModels; //!< the PhysicsModels (NULL if EvolutionData) -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/CLASSFuelPlan.hxx b/source/branches/CLASSV4.1/include/CLASSFuelPlan.hxx deleted file mode 100644 index e0042f747..000000000 --- a/source/branches/CLASSV4.1/include/CLASSFuelPlan.hxx +++ /dev/null @@ -1,100 +0,0 @@ - -#ifndef _CLASSFUELPLAN_HXX -#define _CLASSFUELPLAN_HXX - - -/*! - \file - \brief Header file for CLASSFuelPlan class. - - - @author BaM - @version 2.0 - */ - -#include <string> -#include <fstream> -#include <map> - -#include "CLASSObject.hxx" -#include "CLASSFuel.hxx" - -using namespace std; -typedef long long int cSecond; - - -//-----------------------------------------------------------------------------// -//! Allows a Reactor to change its CLASSFuel and/or burnup - -/*! - Define a CLASS Object. - The aim of these class is to allow a Reactor to change its CLASSFuel and/or burnup - during its lifetime - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class CLASSFuelPlan : public CLASSObject -{ - public : - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// CLASSFuelPlan Constructor. - /*! - Make a new CLASSFuelPlan - */ - CLASSFuelPlan(); - //} - - //{ - /// CLASSFuelPlan Constructor. - /*! - Make a new CLASSFuelPlan - \param log : used for the log. - */ CLASSFuelPlan(CLASSLogger* log); - //} - //@} - - /*! - \name Adding Method - */ - //@{ - - void AddFuel(cSecond time, CLASSFuel fuel, double BurnUp); //!< Add A new CLASSFuel at the corresponding time and Burnup - void AddFuel(cSecond time, EvolutionData* fuel, double BurnUp) - { AddFuel( time, CLASSFuel(fuel), BurnUp); } //!< Add A new EvolutionData at the corresponding time and Burnup - void AddFuel(cSecond time, PhysicsModels* fuel, double BurnUp) - { AddFuel( time, CLASSFuel(fuel), BurnUp); } //!< Add A new Physicis Model at the corresponding time and Burnup - - //a} - - /*! - \name Get Method - */ - //@{ - - pair< CLASSFuel, double> GetFuelAt(cSecond t); //!< Get fuel and associated Burnup loaded at the time t - - - //@} - using CLASSObject::SetName; - using CLASSObject::GetName; - protected : - - - private : - - map< cSecond, pair< CLASSFuel, double > > fLoadingPlan; ///< Loading plan to change the EvolutionData (and the associeted Burnup) according to the plan - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/CLASSHeaders.hxx b/source/branches/CLASSV4.1/include/CLASSHeaders.hxx deleted file mode 100755 index 08575e6ac..000000000 --- a/source/branches/CLASSV4.1/include/CLASSHeaders.hxx +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _CLASSHEADERS_ -#define _CLASSHEADERS_ - - - - -//CLASS library -#include "CLASSConstante.hxx" -#include "Scenario.hxx" -#include "Reactor.hxx" -#include "Pool.hxx" -#include "FabricationPlant.hxx" -#include "SeparationPlant.hxx" -#include "Storage.hxx" -#include "IsotopicVector.hxx" -#include "ZAI.hxx" -#include "CLASSLogger.hxx" - -#include "EvolutionData.hxx" -#include "PhysicsModels.hxx" - -#endif diff --git a/source/branches/CLASSV4.1/include/CLASSLogger.hxx b/source/branches/CLASSV4.1/include/CLASSLogger.hxx deleted file mode 100755 index f1282977b..000000000 --- a/source/branches/CLASSV4.1/include/CLASSLogger.hxx +++ /dev/null @@ -1,216 +0,0 @@ -#ifndef _LOG_ -#define _LOG_ - - -/*! - \file - \brief Header file for CLASSLogger class. - - - @author BaM - @version 2.0 - */ - -#include <string> -#include <fstream> - -#include <iostream> -#include <cstring> -#include <sstream> -#include "stdlib.h" -using namespace std; - - -#ifndef __CINT__ - -#define ERROR if(fLog)if(fLog->GetMaxOutPutLVL() >= 0) fLog->E() << "!!!ERROR!!! " << "[" << __FILE__ << ":" << __FUNCTION__ << "] " -#define WARNING if(fLog)if(fLog->GetMaxOutPutLVL() >= 1) fLog->W() << "!!WARNING!! " << "[" << __FILE__ << ":" << __FUNCTION__ << "] " -#define INFO if(fLog)if(fLog->GetMaxOutPutLVL() >= 2) fLog->I() << "!!!!INFO!!! " << "[" << __FILE__ << "] " - -#define DBGL if(fLog)if(fLog->GetMaxOutPutLVL() >= 3) fLog->D() << __FILE__ << " : " << __LINE__ << " [" << __FUNCTION__ << "]" << endl; -#define DBGV(x) {if(fLog)if(fLog->GetMaxOutPutLVL() >= 3) fLog->D() << __FILE__ << " : " << __LINE__ << " [" << __FUNCTION__ << "]" << x << endl;} - -#else - -#define ERROR cout -#define INFO cout -#define WARNING cout -#define DBGL -#define DBGV(x) - - -#endif - - - -#ifndef _LOGTYPE_ -#define _LOGTYPE_ - -//-----------------------------------------------------------------------------// -//!handles output stream in CLASS - -/*! - Define a LogType. - The aim of this class is to handle output stream in CLASS. - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - -class LogType -{ -public: - //********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// Normal Constructor. - /*! - Make a new LogType - \param Log : ostream output - */ - LogType(ostream &Log) { fLog = &Log; fLog2 = 0; } //!< Normal Constructor - //} - - ~LogType() {} //!< Normal Destructor - - //@} - - //********* In/Out Method *********// - - /*! - \name In/Out - */ - //@{ - string GetCLASSLoggerName() const { return fCLASSLoggerName; } //!< return the CLASSLogger name - - LogType &operator<<(std::ostream& (*manip)(std::ostream &)) - { - manip( *(this->fLog) ); - if(fLog2) - manip( *(this->fLog2) ); - return *this; - } - - - template<typename T> - inline LogType& operator<<(T something) - { - *(this->fLog) << something; - if(fLog2) - *(this->fLog2) << something; - return *this; - } - //} - - void SetSecondOutput(ostream &log) {fLog2 = &log;} // used to direct the stream into two output ostream - - private : - - ostream *fLog; //!< Main ostream output - ostream *fLog2; //!< secondary ostream output - - string fCLASSLoggerName; //!< Log File name -}; - - -#endif - - -#ifndef _CLASSLogger_ -#define _CLASSLogger_ - -//-----------------------------------------------------------------------------// -//! Object to handle output messages - -/*! - Define a CLASSLogger. - The aim of this class is to centralize the all CLASS software message inside a file. - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - -class CLASSLogger -{ -public: - - //********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - //{ - /// Normal Constructor. - /*! - Make a new LogType - \param CLASSLoggerName : name of the CLASSLogFile wnated for the log - \param VerboseLvl : verbose level in terminal - \param OutputLvl : verbose level in the CLASSLogFile - - The different available levels are : - \li 0 : ERROR only - \li 1 : WARNING + lvl 0 - \li 2 : INFO + lvl 1 - \li 3 : DEBUG + lvl 2 - - */ - CLASSLogger(string CLASSLoggerName = "CLASS_OUTPUT.log", int VerboseLvl = 0, int OutputLvl = 1 ); - //} - - ~CLASSLogger(); //!< Normal Destructor - - //@} - - //********* In/Out Method *********// - - /*! - \name In/Out - */ - //@{ - string GetCLASSLoggerName() const { return fCLASSLoggerName; } //!< return the CLASSLogger name - int GetMaxOutPutLVL() const { return fMaxOutPutLVL; } //!< Return File Output lvl - int GetVerboseLVL() const { return fVerboseLVL; } - - LogType E() {return *fError;} //!< Return the ERROR Streamer - LogType W() {return *fWarning;} //!< Return the WARNING Streamer - LogType I() {return *fInfo;} //!< Return the INFO Streamer - LogType D() {return *fDebug;} //!< Return the DEBUG Streamer - -//@} - - - - - private : - int fMaxOutPutLVL; //!< Maximal output/verbose lvl - int fVerboseLVL; - - LogType* fError; //!< ERROR streamer - LogType* fInfo; //!< INFO streamer - LogType* fWarning; //!< WARNING streamer - LogType* fDebug; //!< DEBUG streamer - - ofstream fOutPutFile; //!< Log Output File name - string fCLASSLoggerName; //!< Log File name -}; - -#endif - - - -#endif - - - diff --git a/source/branches/CLASSV4.1/include/CLASSNucleiFiliation.hxx b/source/branches/CLASSV4.1/include/CLASSNucleiFiliation.hxx deleted file mode 100644 index 47e4ffee2..000000000 --- a/source/branches/CLASSV4.1/include/CLASSNucleiFiliation.hxx +++ /dev/null @@ -1,123 +0,0 @@ -#ifndef _CLASSNucleiFiliation_ -#define _CLASSNucleiFiliation_ - -/*! - \file - \brief Header file for CLASSNucleiFiliation classes. - */ - -#include "CLASSObject.hxx" -#include "IsotopicVector.hxx" - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Handles connection between nuclei (decay/reaction) - -/*! - Define a nuclei as : Z A I. - The aim of this class is to discribe each CLASSNucleiFiliation. It connects nuclei to their daughter nuclei through a nuclear process using the correct branching ratio. - Note that this class can be used to connect nulei to their daughter through any reaction (Fission, capture...) or natural decay process... - - In the case of decay process, it is possible to put (by multiplying) the decay constant to the branching ratio (ie : BR*log(2)/HalfLife, see IrradiationModel).... - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class CLASSNucleiFiliation : public CLASSObject -{ -public: - - - //********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - CLASSNucleiFiliation(); ///< Default constructor - - - /*! - \name Constructor/Desctructor - */ - //@{ - //{ - /*! - Use to load a CLASSNucleiFiliation - \param log : used for the log. - */ - CLASSNucleiFiliation(CLASSLogger* log); ///< Default constructor - //} - - CLASSNucleiFiliation(const CLASSNucleiFiliation& CNF); ///< Copy Constructor - - - ~CLASSNucleiFiliation(); ///< Normal Destructor. - - //@} - - - //********* Get Method *********// - - /*! - \name Set/Get Method - */ - //@{ - map<ZAI, IsotopicVector> GetNucleiFIliation() const {return fNucleiFiliation;} //!< Return the full filiation list - vector<ZAI> GetZAIList() const; //!< Return the list of mother ZAI present in the filiation list - int size() const{return (int)fNucleiFiliation.size();} //!< Return the number of mother ZAI (then filiation path) - - IsotopicVector GetFiliation(ZAI Mother); //!< Return the filiation isotopic vector of the ZAI mother - - ZAI GetArtificialDecay(ZAI Mother); //!< Make an artificial and instantaneus decay of the ZAI, (desexcitation, or Beta decay) - - - void SetNucleiFIliation(map<ZAI, IsotopicVector> Fiiliation) { fNucleiFiliation = Fiiliation;} //!< Return the full filiation list - - //} - - //********* Add Method *********// - - /*! - \name Adding Method - */ - //@{ - void Add(ZAI Mother, IsotopicVector Daughter ); //!< Add A ZAI and its IsotopicVector of daughter(s) to the filiation - //} - - - //********* Modification Method *********// - - /*! - \name Modification Method - */ - //@{ - - - void FiliationCleanUp(map<ZAI, int> GoodNuclei, CLASSNucleiFiliation CuttedNuclei); //!< Cutting all pathway until each path ends on a nuclei in the GoodList following the CuttedNuclei. If nuclei are neither in the GoodNuclei list or in CuttedNuclei, then artificial decay are performed - - void SelfFiliationCleanUp(map<ZAI, int> GoodNuclei); //!< Cutting all the pathway ending on a nuclei not present as a motehr nuclei - - void NormalizeBranchingRatio(double Value = 1); //!< Normalization of all the branching ratio to 1 - - void NormalizeBranchingRatio(ZAI Mother, double Value); //!< Normalize the branching ratio pathway of the Mother ZAI to the set value - - //} - - - protected : - - map<ZAI, IsotopicVector> fNucleiFiliation; //! Map of all the pathway - - -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/CLASSObject.hxx b/source/branches/CLASSV4.1/include/CLASSObject.hxx deleted file mode 100644 index 8d2f1d538..000000000 --- a/source/branches/CLASSV4.1/include/CLASSObject.hxx +++ /dev/null @@ -1,102 +0,0 @@ - -#ifndef _CLASSOBJECT_ -#define _CLASSOBJECT_ - - -/*! - \file - \brief Header file for CLASSObject class. - - - @author BaM - @version 2.0 - */ - -#include <string> -#include <fstream> - -#include "CLASSLogger.hxx" - -#include "TNamed.h" - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Define common proporties of all objects - -/*! - Defines a CLASS Object. - The aim of these class is to gather all the commom properties of all CLASS objects. - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class CLASSObject : public TNamed -{ -public : - /*! - \name Constructor/Desctructor - */ - //@{ - - //{ - /// Normal Constructor. - /*! - Make a new CLASSObject - */ - CLASSObject(); - //} - - //{ - /// Log Constructor. - /*! - Make a new CLASSObject - \param log : used for the log. - */ - - CLASSObject(CLASSLogger* log); - //} - //@} - - /*! - \name Clone - */ - //@{ - - virtual CLASSObject* Clone() { return new CLASSObject(*this); } //!< Correct way to copy a CLASSObject in case of derivation - //} - //@} - - - /*! - \name Set/Get - */ - //@{ - - -#ifndef __CINT__ - void SetLog(CLASSLogger* log) { fLog = log;} //!< Set the CLASSLogger - CLASSLogger* GetLog() { return fLog; } //!< Return the Pointer to the Log -#endif - //@} - - using TNamed::SetName; - using TNamed::GetName; -protected : -#ifndef __CINT__ - CLASSLogger* fLog; //!< Pointer to the Log -#endif - - -private : - - ClassDef(CLASSObject,0); -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/DecayDataBank.hxx b/source/branches/CLASSV4.1/include/DecayDataBank.hxx deleted file mode 100644 index e9a3d7615..000000000 --- a/source/branches/CLASSV4.1/include/DecayDataBank.hxx +++ /dev/null @@ -1,181 +0,0 @@ -#ifndef _DecayDataBank_ -#define _DecayDataBank_ - -/*! - \file - \brief Header file for DecayDataBank class. - @version 2.0 - */ - -#include "CLASSObject.hxx" -#include "EvolutionData.hxx" -#include "IsotopicVector.hxx" - -#include <map> -#include <vector> - - -using namespace std; -typedef long long int cSecond; - -class ZAI; -class CLASSLogger; - -double ReactionRateWeightedDistance(IsotopicVector IV1, EvolutionData DB ); -double ReactionRateWeightedDistance(EvolutionData DB, IsotopicVector IV1 ); - -//-----------------------------------------------------------------------------// -//! Describes outcore radioactive decays - -/*! - Define a DecayDataBank. - The aim of these class is to describe the evolution of "all" evoluting systems in CLASS. - - For the Decay Matrix the DecayDataBank mainly contains a map of <ZAI,EvolutionData>.This map do the correspondance between a ZAI and its decay evolution (containing all the daughter nuclei comming from the decay of the original ZAI and quantities evolutions). - - @author BaM - @author Marc - @author PTO for a part of the Decay management -- steal from MURE (Even if he does not kown it!! :)) - @version 2.0 - */ -//________________________________________________________________________ - - - -class DecayDataBank : public CLASSObject -{ - - public : - - - //********* Constructor/Desctructor *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - /// Normal Constructor. - DecayDataBank(); - - - //{ - /// Special Constructor. - /*! - Use to load a DecayDataBank - \param DB_index_file : path to the index file - \param olfreadmethod : true if the old format of EvolutionData are used (deprecated) (ie without the key word such as Inv, XSFiss...) - */ - DecayDataBank(string DB_index_file, bool olfreadmethod = false ); - //} - //{ - /// Special Constructor. - /*! - Use to load a DecayDataBank - \param Log : CLASSLogger used for the log. - \param DB_index_file : path to the index file - \param olfreadmethod : true if the old format of EvolutionData are used (ie without the key word such as Inv, XSFiss...) - */ - DecayDataBank(CLASSLogger* Log, string DB_index_file, bool olfreadmethod = false ); - //} - - //{ - /// Normal Destructor. - /*! - Delete the DecayDataBank and all associated EvolutionData(s)... - */ - ~DecayDataBank(); - //} - - //{ - /// Reset the DecayDataBank. - /*! - Use to reset the DecayDataBank to its default values whihout deleting the EvolutionData (which contain pointer... ). - it just clears the different maps - */ - void Clear(); - //} - //@} - - - - - //********* Get Method *********// - /*! - \name Get Method - */ - //@{ - map<ZAI ,EvolutionData > GetDecayDataBank() const { return fDecayDataBank; } //!< Return the DecayDataBank - bool IsDefine(const ZAI& zai) const; //!< True if the key is define, false unstead - - string GetDataBaseIndex() const { return fDataBaseIndex; } //!< Return the index name - - IsotopicVector GetDecay(IsotopicVector isotopicvector, cSecond t); //!< Get IsotopicVector decay at time t - - //@} - - - - - //********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - void SetDecayDataBank(map<ZAI ,EvolutionData > mymap) - { fDecayDataBank = mymap; } //!< Set the DecayDataBank map - - void SetDataBaseIndex(string database) { fDataBaseIndex = database;; ReadDataBase(); } //!< Set the name of the database index - - void SetOldReadMethod(bool val) { fOldReadMethod = val; ReadDataBase();} ///< use the old reading method - - void SetFastCalculation(bool val) { fFastCalculation = val; } - //} - - - - - //********* Evolution Method *********// - - //@} - /*! - \name Evolution Method - */ - //@{ - - IsotopicVector Evolution(const ZAI& zai, double dt); ///< Return the IsotopicVector from the decay of zai during a dt period - - //@} - - - - - //********* Other Method *********// - /*! - \name Other Method - */ - //@{ - void ReadDataBase(); ///< Read the index file and fill the EvolutionData map - - void Print() const; - - //@} - - - - - - protected : - - bool fFastCalculation; - - map<ZAI, EvolutionData> fDecayDataBank; ///< DataBank map - string fDataBaseIndex; ///< Name of the index - bool fOldReadMethod; ///< use old DB format - -}; - - - -#endif diff --git a/source/branches/CLASSV4.1/include/DynamicalSystem.hxx b/source/branches/CLASSV4.1/include/DynamicalSystem.hxx deleted file mode 100755 index 242342f72..000000000 --- a/source/branches/CLASSV4.1/include/DynamicalSystem.hxx +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef _DynamicalSystem_ -#define _DynamicalSystem_ -/*! - \file - \brief Header file for DynamicalSystem class. -*/ - -#include <math.h> -#include <vector> - - -using namespace std; - -//-----------------------------------------------------------------------------// - - - -//! DynamicalSystem class solves system of differential equations. -/*! -// A DynamicalSystem is a base class that solves system differential equations of 1st order. -// @f[ \frac{d\vec{Y}}{dt}=A\vec{Y}@f] -// The differential equations are built in DynamicalSystem::BuildEqns ; the method MUST be -// defined in the derived classes. -// In this first version only Runge-Kutta method is implemented, but the aim of this class -// is to provide also other methods such as CRAM (Chebyshev rational approximation method). -// -// -// @author PTO. -// @version 1.0 -*/ -//________________________________________________________________________ - -class DynamicalSystem -{ - public : - - DynamicalSystem(); //!< Normal Constructor - DynamicalSystem(const DynamicalSystem & DS); //!< Copy Constructor - virtual ~DynamicalSystem(); //!< Destructor - - /*! - \name Mains attributes of the DynamicalSystem - */ - //@{ - int GetNumberOfEquationSize(){return fNVar;} //!< return the number of equations. - void SetNumberOfEquationSize(int n){fNVar=n;} //!< set the number of equations. - //@} - - /*! - \name Runge-Kutta related methods - Algorithms are taken from Numerical Receipes. - */ - //@{ - - void SetPrecision(double eps=1e-5){fPrecision=eps;} //!< set RK precision to change the integration step - - //! Forbid negative value during integration. - /*! - For some quantities (such as nuclei composition), negative values are forbidden. - But, due to integration step and very fast variation of the integrated variables - Runge-Kutta wil produce very small negative value. This method is used to force - negative value to be zero. - */ - void SetForbidNegativeValue(){fIsNegativeValueAllowed=false;} - - //! Runge Kutta calling method. - /*! - // \param YStart: input : the initial condition Y(t1) ; output the final value Y(t2) - // \param t1: initial time - // \param t2: final time - */ - void RungeKutta(double *YStart, double t1, double t2, int EquationNumber); - - //! Builds the equations for integration. - /*! - This method is an abstract method ; it MUST be overwritten by derived classes. - // \param t: time at which the equations are built - // \param Y: array of variable at time t - // \param dYdt: ode's variable. - */ - virtual void BuildEqns(double t, double *Y, double *dYdt){} - - //@} - - /*! - \name Miscellaneous methods - */ - //@{ - - //@} - - protected : - //! Runge Kutta main method. - /*! - // Call by RungeKutta - // \param y: initial values to integrate - // \param dydx: ode's equations (variable is x) - // \param x: variable of integration - // \param h: step size for integration - // \param yout: result after integration - */ - void RK4(double *y, double *dydx, double x, double h, double *yout); - //! Adaptative Step Size method for RK. - /*! - // Call by RK4 - // \param y: initial values to integrate - // \param dydx: ode's equations (variable is x) - // \param x: new value of the variable after the adaptative step - // \param htry: try step size for integration - // \param eps: precision - // \param yscal: result after hdid step integration - // \param hdid: did step size for integration - // \param hnext: next step size for integration - */ - void AdaptStepSize(double *y, double *dydx, double *x, double htry, double eps, double *yscal, double *hdid, double *hnext); - - int fNVar; //!< The size of the composition vector and /or number of ZAIs involved. - double fPrecision; //!< Precision of the RungeKutta - double fHestimate; //!< RK Step estimation. - double fHmin; //!< RK minimum Step. - double fMaxHdid; //!< store the effective RK max step - double fMinHdid; //!< store the effective RK min step - bool fIsNegativeValueAllowed; //!< whether or not negative value are physical. -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/EquivalenceModel.hxx b/source/branches/CLASSV4.1/include/EquivalenceModel.hxx deleted file mode 100644 index 81e1ef904..000000000 --- a/source/branches/CLASSV4.1/include/EquivalenceModel.hxx +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef _EQUIVALENCEMODEL_ -#define _EQUIVALENCEMODEL_ - - -/*! - \file - \brief Header file for EquivalenceModel class. - - - @author BaM - @author BLG - @version 3.0 - */ - -#include "IsotopicVector.hxx" -#include <math.h> -#include "CLASSObject.hxx" - - -using namespace std; - -//-----------------------------------------------------------------------------// - -//! Determines how to build a fresh fuel -/*! - Define an EquivalenceModel. - The aim of these class is to gather all the commum properties of all - Equivalence Model. - - \warning - Never instantiate EquivalenceModel in your CLASS input but it's derivated class - @see EQM_BakerRoss_FBR_MOX - @see EQM_LIN_PWR_MOX - @see EQM_MLP_PWR_MOX - @see EQM_POL_PWR_UO2 - @see EQM_QUAD_PWR_MOX - - @author BaM - @author BLG - @version 3.0 - */ -//________________________________________________________________________ - - -class EquivalenceModel : public CLASSObject -{ - public : - /*! - \name Constructor/Desctructor - */ - //@{ - EquivalenceModel(); //!< Default constructor - EquivalenceModel(CLASSLogger* log); //!< Logger constructor - - virtual ~EquivalenceModel(); //!< Destructor - //@} - - /*! - \name Fuel Construction Method - */ - //@{ - - //{ - /// BuildFuel function. - /*! - Build the fuel following the equivalance model with the proper requierment in term of mass, burnup.... - \param double burnup reached by the fuel at the end of irradiation - \param double HMMass, Heavy metal mass needed - \param vector<double> &lambda, fraction of the stock to take (initialy should be 0) - \param vector<IsotopicVector> FissilArray, isotopicvectors to use to get the fissile part of the fuel - \param vector<IsotopicVector> FertilArray, isotopicvectors to use to get the fertile part of the fuel (if empty take it from the OutIncome) - */ - virtual vector<double> BuildFuel(double BurnUp, double HMMass, vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray ); - //} - - //@} - - /*! - \name Get/Set Method - */ - //@{ - - IsotopicVector GetFertileList() {return fFertileList;} //!<return the fertile list - IsotopicVector GetFissileList() {return fFissileList;} //!<return the fissile list - - double GetBuildFuelFirstGuess(){return fFirstGuessFissilContent;} //!<Get the initialization value for BuildFuel algorithm - virtual double GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp) {return 0;} //!< Return the molar fraction of fissile element in the fuel according to the burnup, and a given fuel composition (this is the heart of the equivalence model) - - double GetRelativMassPrecision() const { return fRelativMassPrecision; } //!< Mass precision - int GetMaxInterration() const { return fMaxInterration; } //!< Max iterration in build fueld algorythm - - double GetActualFissileContent() const { return fActualFissileContent; } //!< Get the fissile content at the actual dichotomy step (usefull for EQM_MLP_Kinf) - - void SetFertileList(IsotopicVector IV) {fFertileList = IV;}//!<set the fertile list - void SetFissileList(IsotopicVector IV) {fFissileList = IV;}//!<set the fissile list - void SetBuildFuelFirstGuess(double FirstGuess){fFirstGuessFissilContent = FirstGuess;} //!<set the initialization value for BuildFuel algorithm - void SetRelativMassPrecision( double val) { fRelativMassPrecision = val; } //!< Mass precision - void SetMaxInterration(int val) { fMaxInterration = val; } //!< Max iterration in build fueld algorythm - - //@} - - protected : - - IsotopicVector fFertileList; //!< contain the list of zai, needed as fertile, taken in a stock before fabrication - //!< if no stock are provided, will take the isotopic vector in the Park income - - IsotopicVector fFissileList; //!< contain the list of zai, needed as fissile, taken in a stock before fabrication - //!< if no stock are provided the fuel will not be made - - double fFirstGuessFissilContent;//!< fissile content for BuildFuel initialization (in weight proportion) - double fActualFissileContent; //!< fissile content at the actual dichotomy step (usefull for EQM_MLP_Kinf) - - - private : - /*! - \name Algorithm parameters - */ - //@{ - double fRelativMassPrecision; //!< Mass precision - int fMaxInterration; //!< Max iterration in build fueld algorythm - //@} - - /*! - \name Algorithm related functions for default BuildFuel function - */ - //@{ - void SetLambda(vector<double>& lambda ,int FirstStockID, int LastStockID, double LAMBDA_TOT); //!< Set individual lambda according to the LAMBDA_TOT (lambda of all stocks) - double LAMBDA_TOT_FOR(double MassNeeded, vector<IsotopicVector> StockArray, string FisOrFer);//!< Calculate the proportion of each stocks in StockArray to take in oder to get a mass of MassNeeded (can be Fer(fertile) or Fis(Fissile)) - bool Build_Fuel_According_Lambda(vector<double> &lambda,vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray, double HMMass,IsotopicVector &Fissile, IsotopicVector &Fertile); - //@} - - /*! - \name Others - */ - //@{ - double fTotalFissileMassInStocks;//!< Total mass in fissile stocks - double fTotalFertileMassInStocks;//!< Total mass in fertile stocks - //@} -}; - -#endif - - - - - - - - - diff --git a/source/branches/CLASSV4.1/include/EvolutionData.hxx b/source/branches/CLASSV4.1/include/EvolutionData.hxx deleted file mode 100755 index 7d0a20e9e..000000000 --- a/source/branches/CLASSV4.1/include/EvolutionData.hxx +++ /dev/null @@ -1,253 +0,0 @@ -#ifndef _EvolutionData_ -#define _EvolutionData_ - -/*! - \file - \brief Header file for EvolutionData class. - @version 2.0 - */ - -#include <string> -#include <map> - -#include "IsotopicVector.hxx" -#include "CLASSObject.hxx" -#include "ZAI.hxx" - -#include "TMatrix.h" - -class TGraph; -class EvolutionData; -class CLASSLogger; - -using namespace std; -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 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 ); - -//-----------------------------------------------------------------------------// -//! Stores fuel inventory evolution , mean cross sections evolution, flux evolution, power , ... - -/*! - Define an EvolutionData. - The aim of these class is to describe the evolution of a single evoluting system in CLASS. - The system can either be a fuel evolution trough irradiation or a nuclei which produce, trough its decay, a large nuclei tree. - - The nuclei tree resulting of the evolution are stored in a map of ZAI and TGraph, each TGraph correspond to the evolution of the quantity of the associeted ZAI. - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class EvolutionData : public CLASSObject -{ - -public : - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - EvolutionData(); ///< Normal DB Constructor. - - - //{ - /// CLASSLogger Constructor. - /*! - Use create an empty EvolutionData loading a CLASSLogger - \param log : used for the log. - */ - EvolutionData(CLASSLogger* log); ///< Make a new Evolutive Product evolution - //} - - //{ - /// Special Constructor. - /*! - Make a new EvolutionData - \param log : used for the log. - \param DB_file path to the DataBase file - \param oldread true if the oldmethod should be use to read the DatBase File (deprecated) - \param zai set the ZAI if you want to add a stable nuclei. - */ - EvolutionData(CLASSLogger* log, string DB_file, bool oldread = false, ZAI zai = ZAI(0,0,0) ); - //} - - - //{ - /// Normal Destructor. - /*! - Only remove the map without deleting the pointer to TGraph... - One need to call the DeleteEvolutionData() method to fully delete the EvolutionData, and then avoiding memory leak... - */ - ~EvolutionData(); - //} - - //{ - /// Delete the EvolutionData. - /*! - Use to fully delete the EvolutionData and all associeted TGraph. - In some case needed to be called to avoid memory leaks. - */ - void DeleteEvolutionData(); - //} - - //@} - - - - -//********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - void SetHeavyMetalMass(double Mass) {fHeavyMetalMass = Mass;} //!< Set the heavy metal Mass [t] - - void SetReactorType(string reactortype) { fReactorType = reactortype; } ///< Set the reactor type (e.g PWR, FBR-Na,...) - void SetFuelType(string fueltype) { fFuelType = fueltype; } ///< Set the fuel type (e.g MOX,UOX,...) - void SetPower(double power) { fPower = power; } ///< Set the power of the EvolutionData [W] - void SetFlux(TGraph* flux ) { fFlux = flux; } ///< Set the neutron flux of the EvolutionData [cm^{-2}.s^{-1}] - void SetCycleTime(cSecond cycletime) { fCycleTime = cycletime; } ///< Set cycletime of the EvolutionData [s] - - - void SetInventoryEvolution(map<ZAI, TGraph*> maptoinsert) { fInventoryEvolution = maptoinsert;}///< Set EvolutionData map - void SetFissionXS(map<ZAI, TGraph*> maptoinsert) { fFissionXS = maptoinsert;} ///< Set fission cross section map - void SetCaptureXS(map<ZAI, TGraph*> maptoinsert) { fCaptureXS = maptoinsert;} ///< Set capture cross section map - void Setn2nXS(map<ZAI, TGraph*> maptoinsert) { fn2nXS = maptoinsert;} ///< Set (n,2n) cross section map - - //@} - - - - -//********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - -#ifndef __CINT__ - map<ZAI ,TGraph* > GetInventoryEvolution() const { return fInventoryEvolution; } //!< return the EvolutionData map - map<ZAI ,TGraph* > GetFissionXS() const { return fFissionXS; } //!< return the fission cross section map - map<ZAI ,TGraph* > GetCaptureXS() const { return fCaptureXS; } //!< return the capture cross section map - map<ZAI ,TGraph* > Getn2nXS() const { return fn2nXS; } //!< return the (n,2n) cross section map - TGraph* GetKeff() const { return fKeff; } //!< return the evolution of the keff (TGraph*) - TGraph* GetFlux() const { return fFlux; } //!< return the evolution of the neutron flux (TGraph*) -#endif - - double GetFinalTime() const { return fFinalTime; } //!< return the final time - last point (double) - double GetCycleTime() const { return fCycleTime; } //!< return the cycletime (double) - double GetPower() const { return fPower; } //!< return the power (double) - string GetDB_file() const { return fDB_file; } //!< return the name of the Database file (string) - string GetReactorType() const { return fReactorType; } //!< return the type of reactor (string) - TGraph* GetEvolutionTGraph(const ZAI& zai); //!< return the evolution of the ZAI quantity (TGraph*) - - IsotopicVector GetIsotopicVectorAt(double t); ///< Return the Product IsotopicVector at time t - - double GetHeavyMetalMass() const { return fHeavyMetalMass; } //!< Return the heavy metal mass in the core at the begining of the cycle [t] - - - //{ - /// Return the XS for a reactionId on zai at t time - /*! - // This method cross section of a reaction for a ZAI at a time - // \param t time - // \param ZAI ZAI for which the cross section if asked - // \param ReactionId ID of the reaction asked - - // The different reaction ID are : - \li 1 fission, - \li 2 capture, - \li 3 (n,2n). - */ - double GetXSForAt(double t, ZAI zai, int ReactionId); - //} - - //@} - - - - -//********* Insertion Method *********// - - //@} - /*! - \name Insertion Method - */ - //@{ - - bool NucleiInsert(pair<ZAI, TGraph*> zaitoinsert); //!< Add a nuclei evolution to the evolution map - bool FissionXSInsert(pair<ZAI, TGraph*> zaitoinsert); //!< Add a nuclei to the fission cross section map - bool CaptureXSInsert(pair<ZAI, TGraph*> zaitoinsert); //!< Add a nuclei to the capture cross section map - bool n2nXSInsert(pair<ZAI, TGraph*> zaitoinsert); //!< Add a nuclei to the (n,2n) cross section map - - - //@} - - - -protected : - - string fDB_file; ///!< path to the DataBase file - - -#ifndef __CINT__ - map<ZAI ,TGraph* > fInventoryEvolution; //!< evolution map - map<ZAI ,TGraph* > fFissionXS; //!< fission cross section map - map<ZAI ,TGraph* > fCaptureXS; //!< capture cross section map - map<ZAI ,TGraph* > fn2nXS; //!< (n,2n) cross section map - TGraph* fKeff; //!< Keff evolution - TGraph* fFlux; //!< Flux evolution -#endif - - cSecond fFinalTime; ///< time of the last point - bool fIsCrossSection; ///< true if some cross section are present in the database - - - - string fReactorType; ///< Type of reactor - string fFuelType; ///< Type of fuel - double fPower; ///< Power in W - double fCycleTime; ///< Cycle time of the DataBase - double fHeavyMetalMass; ///< Cycle time of the DataBase - - - void OldReadDB(string DBfile); //!< Read old format database - void ReadDB(string DBfile, bool oldread = false); //!< Main function to read database - void ReadKeff(string line, double* time, int NTimeStep); //!< Read the Keff in the database - void ReadFlux(string line, double* time, int NTimeStep); //!< Read the Flux in the database - void ReadInv(string line, double* time, int NTimeStep); //!< Read the Inventory evolution in the database - void ReadXSFis(string line, double* time, int NTimeStep); //!< Read the fission cross section evolution in the database - void ReadXSCap(string line, double* time, int NTimeStep); //!< Read the capture cross evolution in the database - void ReadXSn2n(string line, double* time, int NTimeStep); //!< Read the (n,2n) cross evolution in the database - void ReadInfo(); //!< Read the info file of the database - - - double Interpolate(double t, TGraph& EvolutionGraph); ///< Interpolating the value of EvolutionGraph at the t time - - void AddAsStable(ZAI zai); ///< Use when adding an EvolutionData of a stable nuclei (for "non" decay) - - ClassDef(EvolutionData,0); -}; - - - - -#endif diff --git a/source/branches/CLASSV4.1/include/FabricationPlant.hxx b/source/branches/CLASSV4.1/include/FabricationPlant.hxx deleted file mode 100644 index f4eda5669..000000000 --- a/source/branches/CLASSV4.1/include/FabricationPlant.hxx +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef _FabricationPlant_ -#define _FabricationPlant_ - -/*! - \file - \brief Header file for FabricationPlant class. - @version 2.0 - */ - - - -#include <vector> -#include <map> - -#include "CLASSConstante.hxx" -#include "CLASSFacility.hxx" -#include "IsotopicVector.hxx" -#include "EvolutionData.hxx" -#include "Scenario.hxx" -#include "Storage.hxx" -#include "Reactor.hxx" -#include "CLASSLogger.hxx" -#include "ZAI.hxx" - -using namespace std; -typedef long long int cSecond; - -//-----------------------------------------------------------------------------// -//! CLASS object to build the fresh fuel (do chemical separation) & store it until core loading - -/*! - Define a FabricationPLant. - The aim of these class is to manage the manufacturing of reprocessed fuel. - It includes the fabrication of the fuel from a stock of material, using the appropriate - algrorithm, and the storage of the fresh fuel until reactor loading. - The parameters used for the fuel fabrication are recover from a PhysicsModels. - The PhysicsModels MUST include an EquivalenceModel to build the fuel. -Some EquivalenceModel are available in the CLASS package, but an user can make his own. - -Once the fuel is built, the FabricationPlant store the corresponding EvolutionData - generated using the PhysicsModels. - @see PhysicsModels.hxx - @see EquivalenceModel.hxx - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - -class DecayDataBank; -class FuelDataBank; - - -class FabricationPlant : public CLASSFacility -{ - -public : - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - FabricationPlant(); ///< Normal constructor - - - //{ - /// Special Constructor. - /*! - Make a new FabricationPlant - \param log : used for the log. - \param fabricationtime duration of the fabrication process (default : 2 years) in [s]. - */ - FabricationPlant(CLASSLogger* log, double fabricationtime = cYear*2); - //} - - ~FabricationPlant(); ///< Normal Destructor. - - //@} - - - - -//********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - void SetDecayDataBank(DecayDataBank* decayDB) {fDecayDataBase = decayDB;} //! Set the Decay DataBank - - void SetFiFo(bool bval = true) { fFiFo = bval;} //!< Set the chronological priority (true for chronological, false instead) - - void SetSubstitutionFuel(EvolutionData fuel, bool ReplaceTheStock = false); //!< To use a substitution fuel if the fabrication fail (not enough material in stock) - void SetSubstitutionFissile(IsotopicVector IV); //!< To use a substitution fissile if the fabrication fail (not enough material in stock) the composition of the fissile is given normalize to 1 by IV. - - - void AddReactor(int reactorid, double creationtime) - { fReactorNextStep.insert( pair<int,cSecond> (reactorid, (cSecond)creationtime-GetCycleTime() ) ); } //!< Add a new reactor to be filled with the fresh fuel build by the FabricationPlant - -#ifndef __CINT__ - void SetReUsableStorage(Storage* store) { fReUsable = store; fIsReusable = true;} //!< Set the Storage where all the separated matetial not used in the fabrication process will be sent. (if not present it goes to WASTE) -#endif - - using CLASSFacility::SetName; - - //@} - - - - -//********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - -#ifndef __CINT__ - vector<Storage*> GetFissileStorage() { return fFissileStorage; } //!< Return the Pointer to the fissile Storage - vector<Storage*> GetFertileStorage() { return fFertileStorage; } //!< Return the Pointer to the fertile Storage - - EvolutionData GetReactorEvolutionDB(int ReactorId); //!< Return the EvolutionData of Reactor ReactorId -#endif - IsotopicVector GetDecay(IsotopicVector isotopicvector, cSecond t); //!< Get IsotopicVector Decay at time t - - map<int, IsotopicVector > GetReactorFuturIncome() const - { return fReactorFuturIV;} //!< Return the list of the futur fuel IV - - - //@} - - - -#ifndef __CINT__ - void AddFissileStorage(Storage* stock) { fFissileStorage.push_back(stock); } //!< Add a new Storage to the list of fissile material provider. - void AddFertileStorage(Storage* stock) { fFertileStorage.push_back(stock); } //!< Add a new Storage to the list of fertile material provider. -#endif - -//********* Fabrication & Evolution Method *********// - - /*! - \name Fabrication & Evolution Method - */ - //@{ - - void SetSeparartionEfficiencyIV(ZAI zai, double factor); //!< Set the extraction efficiency of zai to factor (0<=factor<=1) - void Evolution(cSecond t); //!< Perform the FabricationPlant evolution - - void DumpStock(vector<double> lambdaArray); //!< Update the Stock status after building process - - void TakeReactorFuel(int ReactorId) ; //!< Remove the fuel of reactor ReactorId from stock - void UpdateInsideIV(); - - IsotopicVector BuildFuelFromEqModel(vector<double> LambdaArray); //!<Build the fresh fuel for the reactor according the results of the EquivalenceModel (@see EquivalenceModel) - void BuildFissileArray(); //!< virtualy extract fissile nuclei from Storage according EquivalenceModel fFissileList and make it virtually decay FabricationTime - void BuildFertileArray(); //!< virtualy extract fertile nuclei from Storage according EquivalenceModel fFertileList and make it virtually decay FabricationTime - -#ifndef __CINT__ - void BuildFuelForReactor(int ReactorId, cSecond t); //!< Build a fuel for the reactor ReactorId -#endif - - void SortArray(int i); //!< Sort IsotopicVector array according priority preferences (e.g first in first out) - - //@} - - - - -protected : - - - -//********* Internal Parameter *********// - IsotopicVector fSeparationLostFraction; ///< The lost fraction table during separation (1- efficiency) - map<int, cSecond > fReactorNextStep; ///< Next time step to build a new fuel - -#ifndef __CINT__ - map< int,EvolutionData > fReactorFuturDB; ///< List of the futur EvolutionData use in the reactor -#endif - map< int,IsotopicVector > fReactorFuturIV; ///< List of the futur fuel IsotopicVector used in the reactor - - - - - bool fFiFo; //!< First In First Out flag - - bool fSubstitutionFuel; //!< true if a substitution fuel as been set - bool fSubstitutionFissile; //!< true if a substitution fissile as been set - bool fIsReplaceFissileStock; //!< If there is not enough fissile: true all the fissile comes from an infinite stock; false: just the missing Pu quantity comes from this infinite stock - - void FabricationPlantEvolution(cSecond t); //!< Deal the FabricationPlant evolution - void ResetArrays(); //!< empty the fFertileArray and fFissileArray - - -#ifndef __CINT__ - - vector<Storage*> fFissileStorage; //!< Pointer to the Storage used to get the fissile part of the fuel - vector<IsotopicVector> fFissileArray; //!< The vector of isotopicVector use as fissile material - vector<cSecond> fFissileArrayTime; //!< Time when a IsotopicVector arrives in its storage - vector< pair<int,int> > fFissileArrayAdress; - IsotopicVector fFissileList; //!< The list of fissile ZAI to consider - - vector<Storage*> fFertileStorage; //!< Pointer to the Storage used to get the fertile part of the fuel - vector<IsotopicVector> fFertileArray; //!< The vector of isotopicVector used as fissile material - vector<cSecond> fFertileArrayTime; //!< Time when a IsotopicVector arrives in its storage - - vector< pair<int,int> > fFertileArrayAdress; - IsotopicVector fFertileList; //!< The List of fertile ZAI to consider - - Storage* fReUsable; //!< Pointer to the Storage using for storing unused material - bool fIsReusable; - - EvolutionData fSubstitutionEvolutionData; //!< EvolutionData of the subtitution fuel - IsotopicVector fSubstitutionFissileIV; //!< IsotopicVector of the subtitution fissile - - DecayDataBank* fDecayDataBase; //!< Pointer to the DecayDataBank - - - //{ - /// Separation Method - /*! - Make the Separation - \li IV[0] -> To Keep - \li IV[1] -> To Waste - */ - pair<IsotopicVector, IsotopicVector> Separation(IsotopicVector isotopicvector, IsotopicVector ExtractedList); - //} - -#endif - - - ClassDef(FabricationPlant,3); - -}; - -#endif diff --git a/source/branches/CLASSV4.1/include/IrradiationModel.hxx b/source/branches/CLASSV4.1/include/IrradiationModel.hxx deleted file mode 100644 index 08a0eaf60..000000000 --- a/source/branches/CLASSV4.1/include/IrradiationModel.hxx +++ /dev/null @@ -1,264 +0,0 @@ -#ifndef _IRRADIATIONMODEL_ -#define _IRRADIATIONMODEL_ - - -/*! - \file - \brief Header file for IrradiationModel class. - - - @author BaM - @author BLG - @version 2.0 - */ - - -#include "CLASSObject.hxx" - -#include "IsotopicVector.hxx" -#include "CLASSNucleiFiliation.hxx" -#include "EvolutionData.hxx" - -#include "TMatrix.h" - - -#include <map> -#include <vector> - - -using namespace std; -typedef long long int cSecond; - -class ZAI; -class CLASSLogger; -//-----------------------------------------------------------------------------// -//! The Bateman equation solver - -/*! - Define an IrradiationModel. - An IrradiationModel is a Bateman equation solving method. - This is the mother class. - see derivated classes : - \li @see IM_Matrix - \li @see IM_RK4 - - The aim of these class is to gather all the commom properties of all the - derivated Irradiation Model. - - @author BaM - @author BLG - @version 3.0 - */ -//________________________________________________________________________ - -class IrradiationModel : public CLASSObject -{ - - public : - /*! - \name Constructors - */ - //@{ - IrradiationModel(); //!< Default constructor - - IrradiationModel(CLASSLogger* log); //!< Logger constructor - - //@} - - //{ - /// virtual method called to perform the irradiation calculation using a set of cross section. - /*! - Perform the Irradiation Calcultion using the XSSet data - \param IV : isotopic vector to irradiate - \param XSSet : set of mean cross section to use in order to perform the depletion calculation - \param Power : constant power to use for irradation [W] - \param irradiationtime : irradiation time [s] - */ - virtual EvolutionData GenerateEvolutionData(IsotopicVector IV, EvolutionData XSSet, double Power, double cycletime) {return EvolutionData();} - //} - - - - - //********* Get Method *********// - /*! - \name Get Method - */ - //@{ - string GetDataFileName() const { return fDataFileName; } // File name where decay constants and branching ratios are written. - string GetDataDirectoryName() const { return fDataDirectoryName; } //!< Path to fDataFileName - - double GetShorstestHalflife() const { return fShorstestHalflife; } //!< Nuclei with HL below fShorstestHalflife are cut (replaced by their daughter(s)) - - - void GetNuclearProcessMatrix(TMatrixT<double> &myMatrix, ZAI Mother, IsotopicVector ProductedIV, double XSValue = 1); - - void BuildReactionFiliation(); - - string GetSpectrumType(){return fSpectrumType;} //!< Get the type of neutron spectrum (thermal or fast) - - IsotopicVector GetDecayConstant() const {return fDecayConstante;}//!< Get the decay constants - double GetDecayConstant(const ZAI& zai) const;//!< Get the decay constants of ZAI - - - //@} - - - - - //********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - - //{ - /// set Fission Energy using a file - /*! - // This method fill the Fission Energy [eV] map using a file - // \param FissionEnergyFile: filename containing the Fission Energy of some nuclei - (format : Z A I Energy[eV]) - */ - void SetFissionEnergy(string FissionEnergyFile); - //} - - //{ - /// set Fission Energy for a ZAI using ZAI(Z,A,I) - /*! - // This method fill the Fission Energy map of a set ZAI - // \param zai : the ZAI - // \param E : Energy released by fission for nuclei zai [eV] - */ - void SetFissionEnergy(ZAI zai, double E); - //} - - //{ - /// set Fission Energy for a ZAI using the Z, A, I - /*! - // This method fill the Fission Energy map of a set ZAI - // \param Z : Z of the ZAI - // \param A : A of the ZAI - // \param I : I of the ZAI - // \param E : Fission energy of the ZAI [eV] - */ - void SetFissionEnergy(int Z, int A, int I, double E ) { SetFissionEnergy(ZAI(Z,A,I), E);} - //} - - void SetShortestHalfLife(double halflife) { fShorstestHalflife = halflife;} //!< Set the Half Life cut - void SetZAIThreshold(double zaithreshold) { fZAIThreshold = zaithreshold;} //!< Set the zai threshold - - void LoadFPYield(string SponfaneusYield, string ReactionYield); //!< Build Fision Yields maps - - void SetSpectrumType(string type); //!< Set the type of neutron spectrum (thermal or fast) - - //@} - - - - //********* Evolution Method *********// - /*! - \name Evolution Method - */ - //@{ - - - void BuildDecayMatrix(); //!< Build the Decay Matrix for the futur time step - virtual void LoadDecay(); //!< Load the decay properties (HL,BR) - - virtual void NuclearDataInitialization(); //!< Build Decay matrices & read FpYields if any - //@} - - - //********* Other Method *********// - /*! - \name Other Method - */ - //@{ - void Print() const; - - int GetZAIThreshold(){return fZAIThreshold;} //!< Gives the threshold (in charge number Z). The nuclei below this threshold are not managed - //@} - - //{ - //! Returns a particular decay mode. - /*! - \param DecayModes : a list of decay modes with their branching ratios and isomeric state of the Daughters. - \param BR : branching ratio of the current decay mode - \param Iso : isomeric state of the Daughter of the current decay mode. - \param StartPos : the current decay mode to extract. - */ - string GetDecay(string DecayModes, double &BR,int &Iso, int &StartPos); - //} - - - protected : - - double fShorstestHalflife; //!< Limit on the half life of nuclei to take it into account - int fZAIThreshold; //!< Lowest Mass deal by the evolution (default 90) - string fDataFileName; //!< Name of the decay list - string fDataDirectoryName; //!< Path to the decay list file - - map<ZAI, double > fFissionEnergy; //!< Store the Energy per fission use for the flux normalisation. - - map<ZAI, int> fMatrixIndex; //!< correspondance matrix from ZAI to the column (or line) of the different Reaction/Decay matrix - vector<ZAI> fReverseMatrixIndex; //!< correspondance matrix from the column (or line) of the different Reaction/Decay matrix to the ZAI - - TMatrixT<double> fDecayMatrix; //!< Matrix with half life for each nuclei - - CLASSNucleiFiliation fFastDecay; //!< Store the nuclei being cut (HL threshold) - CLASSNucleiFiliation fNormalDecay; //!< Store the uncut nuclei - IsotopicVector fDecayConstante; //!< List of decay constants - - CLASSNucleiFiliation fSpontaneusYield; //!< Store the spontaneus fission yield - CLASSNucleiFiliation fReactionYield; //!< Store the reaction fission yield - - CLASSNucleiFiliation fCaptureReaction; //!< Store the reaction capture Filiation - CLASSNucleiFiliation fn2nReaction; //!< Store the reaction n,2n Filiation - - string fSpontaneusYieldFile; //!< Store the name of the spontaneus fission yield file - string fReactionYieldFile; //!< Store the name of the reaction fission yield file - - string fSpectrumType; //!< Type of the spectrum : thermal or fast. (needed for Isomeric branching ratios) - - //{ - /// Return the Fission XS Matrix at the time TStep - /*! - // This method extract the fission cross section of an EvolutionData at the set time - // \param EvolutionDataStep : EvolutionData - // \param TStep : time - */ - TMatrixT<double> GetFissionXsMatrix(EvolutionData EvolutionDataStep,double TStep); - //} - - //{ - /// Return the capture cross section matrix at the time TStep - /*! - // This Method extract the capture cross section of an EvolutionData at the set time - // \param EvolutionDataStep : EvolutionData - // \param TStep : time - */ - TMatrixT<double> GetCaptureXsMatrix(EvolutionData EvolutionDataStep,double TStep); - //} - - //{ - /// Return the n2n XS matrix at the time TStep - /*! - // This Method extract the (n,2n) Cross section of an EvolutionData at the set time - // \param EvolutionDataStep : EvolutionData - // \param TStep : time - */ - TMatrixT<double> Getn2nXsMatrix(EvolutionData EvolutionDataStep,double TStep); - //} - - - - CLASSNucleiFiliation ReadFPYield(string Yield); ///< Read a CLASSYield file and return the correpsponding map - - private : - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/IsotopicVector.hxx b/source/branches/CLASSV4.1/include/IsotopicVector.hxx deleted file mode 100755 index 7ecd75dd5..000000000 --- a/source/branches/CLASSV4.1/include/IsotopicVector.hxx +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef _ISOTOPICVECTOR_ -#define _ISOTOPICVECTOR_ - - -/*! - \file - \brief Header file for IsotopicVector class. - @version 2.0 - */ -#include "ZAI.hxx" - -#include "TObject.h" -#include <string> -#include <vector> -#include <map> - -using namespace std; -typedef long long int cSecond; - -//-----------------------------------------------------------------------------// -//! Allows to store & operate on radioactive sample - -/*! - Defines an Isotopicvector. - An isotopicVector is a map of ZAI and double (e.g number of atoms). - Its aim is to define a radioactive sample. - - @author BaM - @author BLG - @author Marc - @version 2.0 - */ -//________________________________________________________________________ - - - -class IsotopicVector : public TObject -{ -public : - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - IsotopicVector(); ///< Normal Constructor. - - - ~IsotopicVector(); ///< Normal Destructor. - - //@} - - -//********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - - map<ZAI ,double> GetIsotopicQuantity() const - { return fIsotopicQuantity; } //!< Return the IsotopicVector as a map - map<ZAI ,double> GetIsotopicQuantityNeeded() const - { return fIsotopicQuantityNeeded; } //!< Return the needed IsotopicVector as a map - IsotopicVector GetSpeciesComposition(int z) const; //!< Return the Species composition of the "z" atom - IsotopicVector GetThisComposition(IsotopicVector IV) const; //!< Return the composition according the IV list... - vector<ZAI> GetZAIList() const; //!< Return the list of ZAI present in the IV - IsotopicVector GetActinidesComposition() const; //!< Return the Actinides composition (Z >= 89) - - double GetZAIIsotopicQuantity(const ZAI& zai) const; ///< Return the quantity of the ZAI - double GetZAIIsotopicQuantity(const int z, const int a, const int i) const; ///< Return the quantity of the ZAI - double GetQuantity(const int z, const int a, const int i) const {return GetZAIIsotopicQuantity(z,a,i);} - double GetQuantity(const ZAI& zai) const {return GetZAIIsotopicQuantity(zai);} - - void Initiatlize(double val); - - - double GetTotalMass() const; //!< Return the mass (in tons) of the isotopic vector - double GetMeanMolarMass() const; //<! Return the mean molar mass of the isotopic vector - - vector<int> GetChemicalSpecies() const; //!< Return the list of chemichal species contained - int GetZAIQuantity() const - {return fIsotopicQuantity.size(); } //!< Return the number of different ZAI in the IsotopicVector - - double GetSumOfAll() const; //!< Return the Sum of nuclei in the IsotopicVector - - //@} - - - - -//********* Internal Operation Method *********// - - /*! - \name Internal Operation Method - */ - //@{ - - - void Clear(); //!< Empty all the IV - void ClearNeed(); //!< Empty Need componant of the IV - - void Add(const ZAI& zai, double quantity); //!< Add Quantity gramme of the ZAI Element - void Add(const IsotopicVector& isotopicvector); //!< Add IsotopicVector to the existing IsotopicVector - void Add(const map<ZAI ,double>& quantity); //!< Add IsotopicVector to the existing IsotopicVector - void Add(int Z, int A, int I, double quantity) - { (*this).Add(ZAI(Z,A,I), quantity); } //!< Add Quantity gramme of the ZAI Element - - - void Need(const ZAI& zai, double quantity); //!< Fill the fIsotopicQuantityNeeded - void Need(const IsotopicVector& isotopicvector); //!< Fill the fIsotopicQuantityNeeded - void Need(const map<ZAI ,double>& quantityneeded) { fIsotopicQuantityNeeded = quantityneeded; } - //!< Fill the fIsotopicQuantityNeeded - - void Remove(const ZAI& zai, double quantity); //!< Remove Quantity gramme of the ZAI Element - void Remove(const IsotopicVector& isotopicvector); //!< Remove IsotopicVector to the existing IsotopicVector - - void Multiply(double factor); //!< Multiply the IV by a Factor - - void ApplyZAIThreshold(int z = 90); //!< Put all nuclei below the threshold in -2 -2 -2 ZAI... - - IsotopicVector& operator+=(IsotopicVector const& IVb); //!< Operator += definition - IsotopicVector& operator-=(IsotopicVector const& IVb); //!< Operator -= definition - IsotopicVector& operator*=(IsotopicVector const& IVb); //!< Operator *= definition - IsotopicVector& operator*=(double const& factor); //!< Operator *= definition (scalar) - bool operator <(const IsotopicVector& isotopicvector) const; //!< IsotopicVector Comparator - - //@} - - - -//********* In/Out related Method *********// - - /*! - \name In/Out Method - */ - //@{ - - void Write(string filename, cSecond time = -1 ) const; //!< Write the Content of the IV in the filename file - - void Print(string o =" ") const ; //!< Print the composition of the IV in terminal - string sPrint() const ; //!< Print the composition of the IV in a string - - void PrintList(string o =" ") const ; //!< Print the composition of the IV - - //@} - - -//***************************************************///< - - - protected : - - map<ZAI ,double> fIsotopicQuantity; ///< Isotopic vector composition in atomes Number - - map<ZAI ,double> fIsotopicQuantityNeeded; ///< map where negative value are saved - - ClassDef(IsotopicVector,1); -}; - -IsotopicVector operator/(IsotopicVector const& IVA, double F); -IsotopicVector operator/(ZAI const& zai, double F); -IsotopicVector operator*(IsotopicVector const& IVA, double F); -IsotopicVector operator*(ZAI const& zai, double F); -IsotopicVector operator*(double F, IsotopicVector const& IVA); -IsotopicVector operator*(double F, ZAI const& zai); -IsotopicVector operator+(IsotopicVector const& IVa, IsotopicVector const& IVb); -IsotopicVector operator-(IsotopicVector const& IVa, IsotopicVector const& IVb); - -IsotopicVector operator*(IsotopicVector const& IVa, IsotopicVector const& IVb); - - -double RelativDistance(IsotopicVector IV1, IsotopicVector IV2 ); //!< return the euclidean distance between two IV. The two IV are normalize to unity -double Distance(IsotopicVector IV1, IsotopicVector IV2 ,int DistanceType=0, IsotopicVector DistanceParameter=IsotopicVector()); //!< return weighted euclidean distance between two IV - -double DistanceStandard(IsotopicVector IV1, IsotopicVector IV2); //!< return the euclidean distance between two IV -double DistanceAdjusted(IsotopicVector IV1, IsotopicVector IV2, IsotopicVector DistanceParameter); //!< return the weighted euclidean distance between two IV -double Norme(IsotopicVector IV1,int DistanceType=0, IsotopicVector DistanceParameter=IsotopicVector()); //!< return the norm of an IV - - -#endif diff --git a/source/branches/CLASSV4.1/include/PhysicsModels.hxx b/source/branches/CLASSV4.1/include/PhysicsModels.hxx deleted file mode 100644 index 43bfb8201..000000000 --- a/source/branches/CLASSV4.1/include/PhysicsModels.hxx +++ /dev/null @@ -1,120 +0,0 @@ - -#ifndef _PhysicsModels_ -#define _PhysicsModels_ - - -/*! - \file - \brief Header file for XS_INTERPOLATOR class. - - - @author BaM - @author BLG - @version 1.0 - */ -#include "EquivalenceModel.hxx" -#include "XSModel.hxx" -#include "IrradiationModel.hxx" -#include "EvolutionData.hxx" - - -using namespace std; -typedef long long int cSecond; - -//-----------------------------------------------------------------------------// -//! Container object of XSModel, EquivalenceModel and IrradiationModel - -/*! - Define a contener of all physics models used for a specific couple (reactor,fuel). - -These class aim is basicaly to store 3 differents physics model : - - The 2 following are data base related (for one Reactor and one fuel type ) : -User can either define his own (see manual) or uses the provided ones : -\li XSModel : Mean cross section prediction (Closest, MLP ) -\li EquivalenceModel : Fissile content prediction ( Linear,Quadratique, MLP , Baker & Ross, ...) - - This one is bateman solvers related : -\li IrradiationModel : can be Runge Kutta 4 or Matrix - - - @author BaM - @author BLG - @version 1.0 - */ -//________________________________________________________________________ - - -class PhysicsModels : public CLASSObject -{ - - public : - - /*! - \name Constructor/Desctructor - */ - //@{ - - PhysicsModels(); //!< Default Constructor - - //{ - /// XS, EM, IM Contructor - /*! - \param XS : The XSModel (Mean cross section predictor) - \param EM : The EquivalenceModel (Fissile content predictor) - \param IM : The IrradiationModel (Bateman solver) - */ - PhysicsModels(XSModel* XS, EquivalenceModel* EM, IrradiationModel* IM ); - //} - - //{ - /// CLASSLogger Contructor - /*! - \param log : The CLASSLogger - \param XS : The XSModel (Mean cross section predictor) - \param EM : The EquivalenceModel (Fissile content predictor) - \param IM : The IrradiationModel (Bateman solver) - */ - PhysicsModels(CLASSLogger* log, XSModel* XS, EquivalenceModel* EM, IrradiationModel* IM ); - //} - - ~PhysicsModels() {;} - //@} - - //{ - - //{ - /// GenerateEvolutionData - /*! - Call the 3 Physics models to compute the depletion calculation for the right fresh fuel with - the right mean cross sections - \param IV : The fresh fuel composition - \param cycletime : The irradiation time [s] - \param Power : The thermal (as always in CLASS) Power [W] - */ - EvolutionData GenerateEvolutionData(IsotopicVector IV, double cycletime, double Power); - //} - - XSModel* GetXSModel() {return fXSModel;} //!< return the mean cross section predictor - EquivalenceModel* GetEquivalenceModel() {return fEquivalenceModel;} //!< return Fissile content predictor - IrradiationModel* GetIrradiationModel() {return fIrradiationModel;} //!< return the Bateman solver - - PhysicsModels* GetPhysicsModels() {return this;}//!< return the PhysicsModels - - - - - - - private : - - XSModel* fXSModel; //!< The XSModel (mean cross sections prediction) - EquivalenceModel* fEquivalenceModel; //!< The EquivalenceModel (fresh fissile content prediction) - IrradiationModel* fIrradiationModel; //!< The IrradiationModel (The Bateman's solver) - - - -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/Pool.hxx b/source/branches/CLASSV4.1/include/Pool.hxx deleted file mode 100755 index c1c8da2a5..000000000 --- a/source/branches/CLASSV4.1/include/Pool.hxx +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef _Pool_ -#define _Pool_ -/*! - \file - \brief Header file for Pool class. - */ - -#include <string> -#include <map> - -#include "CLASSConstante.hxx" -#include "CLASSBackEnd.hxx" -#include "IsotopicVector.hxx" - -using namespace std; -typedef long long int cSecond; - -class CLASSBackEnd; -class CLASSLogger; -class DecayDataBank; - -//-----------------------------------------------------------------------------// -//! Defines the spent fuel pool - -/*! - This class deal with the management of the spent fuel pool - - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class Pool : public CLASSBackEnd -{ -public : - - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - Pool(); ///< Normal Constructor. - - //{ - /// Special Constructor. - /*! - Make a new Pool - \param log : used for the log. - \param coolingtime : duration of the cooling (default : 5 years) in [s]. - */ - Pool(CLASSLogger* Log, cSecond coolingtime = 5*cYear); //!< - //} - - - //{ - /// Special Constructor. - /*! - Make a new Pool - \param log : used for the log. - \param backend : CLASSBackend which get the fuel after the cooling - \param coolingtime : duration of the cooling (default : 5 years) in [s]. - */ - Pool(CLASSLogger* log, CLASSBackEnd* backend, - cSecond coolingtime = 5*cYear); //!< - //} - - - ~Pool(); ///< Normal Destructor. - //@} - - - - -//********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - void SetOutBackEndFacility(CLASSBackEnd* befacility) - { fOutBackEndFacility = befacility; - SetIsStorageType(false); - fPutToWaste = false; } //!< Set the pointer to facility at the back end of the pool - - void SetPutToWaste(bool val) { fPutToWaste = val; } //!< Set true if IV goes to waste after cooling false instead - - void SetIVArray(vector<IsotopicVector> ivarray); //! not use there (does nothing) - void SetIVArray(vector<IsotopicVector> ivarray, vector<cSecond> timearray); //!< Set the IsotopicVector Array at the corresponding time - - - using CLASSBackEnd::SetName; - - //@} - - - - -//********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - - bool GetPutToWaste() const { return fPutToWaste; } //!< Return true if IV goes to waste after cooling, false instead - - //@} - - - - -//********* IsotopicVector Managment Method *********// - - /*! - \name IsotopicVector Managment Method - */ - //@{ - - vector<cSecond> GetCoolingStartingTime() const - { return GetIVArrayArrivalTime(); } //!< Return vector of the arrival time of each IV in the Pool - void RemoveIVCooling(int i); //!< Remove a IsotopicVector from cooling - - void AddIV(IsotopicVector isotopicvector); //!< Add an Isotopicvector to the IVArray - //@} - - - - -//********* Other Method *********// - - //@} - /*! - \name Other Method - */ - //@{ - - void Evolution(cSecond t); //!< Perform the evolution until time t - void Dump(); //!< Write modification (exchange between Cooling, Separation and Storage) - - //@} - -protected : - - - -//********* Internal Parameter *********// - bool fPutToWaste; //!< True if IV goes to waste after cooling false instead - - -//********* Isotopic Quantity *********// -//--------- Cooling ---------// - vector<int> fCoolingIndex; ///< Vector of the cooling index - int fCoolingLastIndex; //!< Number of cooling IV handle - vector<int> fCoolingEndOfCycle; //!< Index of the cooling IV reaching the end of a cooling cycle - - -//********* Private Method *********// - void CoolingEvolution(cSecond t); //!< Deal the cooling evolution - - - - - ClassDef(Pool,3); -}; - -#endif diff --git a/source/branches/CLASSV4.1/include/Reactor.hxx b/source/branches/CLASSV4.1/include/Reactor.hxx deleted file mode 100755 index 9728d9f3d..000000000 --- a/source/branches/CLASSV4.1/include/Reactor.hxx +++ /dev/null @@ -1,308 +0,0 @@ -#ifndef _Reactor_ -#define _Reactor_ - -/*! - \file - \brief Header file for reactor classes. - */ - -#include <string> -#include <map> - -#include "CLASSFacility.hxx" -#include "IsotopicVector.hxx" -#include "EvolutionData.hxx" -#include "PhysicsModels.hxx" -#include "CLASSFuelPlan.hxx" - -using namespace std; - - -class CLASSBackEnd; -class EvolutionData; -class FabricationPlant; -class Storage; -class CLASSLogger; - -//-----------------------------------------------------------------------------// -//! Defines the Reactor - -/*! - The aim of this class is to deal the evolution of the fuel inside a reactor. - The fuel state in the reactor is describe in the IsotopicVector. Its evolution is contained in an EvolutionData - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class Reactor : public CLASSFacility -{ - public : - - - //********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - Reactor(); ///< Normal Constructor. - - //{ - /// CLASSLogger Constructor. - /*! - Use create an empty Reactor loading a CLASSLogger - \param log: used for the log. - */ - Reactor(CLASSLogger* log); - //} - - //{ - /// Special Constructor for reprocessed fuel using cycletime and Burn-Up. - /*! - Make a new reactor - \param log: used for the log, - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s], - \param Power: Thermal power of the reactor in [W], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param CapacityFactor effective charge of the reactor, fraction between 0 & 1. - */ - Reactor(CLASSLogger* log, CLASSBackEnd* backend, - cSecond creationtime , cSecond lifetime, double Power, - double HMMass, double CapacityFactor = 1); - //} - - //{ - /// Special Constructor for reprocessed fuel using cycletime and Burn-Up. - /*! - Make a new reactor - \param log: used for the log. - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s], - \param cycletime: duration of a cycle in [s], - \param Power: Thermal power of the reactor in [W], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param CapacityFactor effective charge of the reactor, fraction between 0 & 1. - */ - Reactor(CLASSLogger* log, - FabricationPlant* fabricationplant, CLASSBackEnd* backend, - cSecond creationtime , cSecond lifetime, double Power, - double HMMass, double CapacityFactor = 1); - //} - - //{ - /// Special Constructor for reprocessed fuel using cycletime and Burn-Up. - /*! - Make a new reactor - \param log: used for the log, - \param fueltypeDB Databank describing the evolution of the fuel; - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s], - \param cycletime: duration of a cycle in [s], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param BurnUp: Burnup reach by the fuel at the end of the cycle in [GWd/t]. - */ - Reactor(CLASSLogger* log, PhysicsModels* fueltypeDB, - FabricationPlant* fabricationplant, CLASSBackEnd* Pool, - cSecond creationtime , cSecond lifetime, cSecond cycletime, - double HMMass, double BurnUp); - //} - - //{ - /// Special Constructor for reprocessed fuel using Power and Burn-Up. - /*! - Make a new reactor - \param log: used for the log, - \param fueltypeDB Databank describing the evolution of the fuel, - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s], - \param Power: Thermal power of the reactor in [W], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param BurnUp: Burnup reach by the fuel at the end of the cycle in [GWd/t], - \param CapacityFactor effective charge of the reactor, fraction between 0 & 1. - */ - Reactor(CLASSLogger* log, PhysicsModels* fueltypeDB, - FabricationPlant* fabricationplant, CLASSBackEnd* backend, - cSecond creationtime , cSecond lifetime, - double Power, double HMMass, double BurnUp, double CapacityFactor); - //} - - //{ - /// Special Constructor for fixed fuel using Power and Burn-Up. - /*! - Make a new reactor - \param log: used for the log, - \param evolutivedb: EvolutionData describing the evolution of the fuel, - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s], - \param Power: Thermal power of the reactor in [W], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param BurnUp: Burnup reach by the fuel at the end of the cycle in [GWd/t], - \param CapacityFactor: effective charge of the reactor, fraction between 0 & 1. - */ - Reactor(CLASSLogger* log, EvolutionData* evolutivedb, CLASSBackEnd* backend, - cSecond creationtime, cSecond lifetime, - double power, double HMMass, double BurnUp, double CapacityFactor); - //} - - //{ - /// Special Constructor for fixed fuel using Power and Burn-Up. - /*! - Make a new reactor - \param log: used for the log, - \param evolutivedb: EvolutionData describing the evolution of the fuel, - \param backend: CLASSBackend which get the fuel after the cooling, - \param creationtime: creation time in [s], - \param lifetime: working time duration in [s] - \param Power: Thermal power of the reactor in [W], - \param HMMass: Mass of Heavy Metal in the Reactor in [t] of heavy metal, - \param BurnUp: Burnup reach by the fuel at the end of the cycle in [GWd/t], - */ - Reactor(CLASSLogger* log, EvolutionData* evolutivedb, CLASSBackEnd* backend, - cSecond creationtime, cSecond lifetime, - cSecond cycletime, double HMMass, double BurnUp); - //} - - ~Reactor(); ///< Normal Destructor - - //@} - - - - - //********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - - IsotopicVector GetIVReactor() const { return GetInsideIV(); } //!< Return the IV contain in the Reactor - IsotopicVector GetIVBeginCycle() const { return fIVBeginCycle; } //!< Return the Starting Cycle IV - //!< (Note : IVBegin != IVIn, only if using charging plan) - IsotopicVector GetIVOutCycle() const { return fIVOutCycle; } //!< Return the Out Cycle IV - IsotopicVector GetIVInCycle() const { return fIVInCycle; } //!< Return the In Cycle IV - //!< (Note : IVIn != IVBegin, only if using charging plan) - - - - bool IsFuelFixed() const { return fFixedFuel; } //!< True if using fixed fuel, False otherwise - double GetHeavyMetalMass() const { return fHeavyMetalMass; } //!< Return the HeavyMetal Mass in the Core at the begining of the cycle - double GetBurnUp() const { return fBurnUp; } //!< Return the Burn Up of the Fuel at the end of the cycle - double GetPower() const { return fPower; } //!< Return the cycle time of the Reactor - -#ifndef __CINT__ - - EvolutionData GetEvolutionDB() const { return fEvolutionDB; } //!< Return the Evolution database of the fuel - CLASSBackEnd* GetOutBackEndFacility() const { return fOutBackEndFacility; } //!< Return the pointer to Associeted BackEnd Facility - FabricationPlant* GetFabricationPlant() const { return fFabricationPlant; } //!< Return the pointer to the FabricationPlant - - - CLASSFuelPlan* GetFuelPlan() const { return fFuelPlan; } //!< return the LoadingPlan - -#endif - //@} - - - - - //********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - void SetFuelPlan(CLASSFuelPlan* fuelplan) { fFuelPlan = fuelplan; } //!< return the LoadingPlan - void SetHMMass(double Mass) {fHeavyMetalMass = Mass;} //!< Set the heavy metal mass in the core at the begining of the cycle - void SetCycleTime(double cycletime); //!< Set the cycle time (Power fixed) - void SetPower(double Power); //!< Set the power (burnup cte) - void SetBurnUp(double BU); //!< Set the burnUp reach at end of cycle (Power cte) - - void SetIVReactor(IsotopicVector isotopicvector) { fInsideIV = isotopicvector; } //!< Set the IV inside the Reactor core - void SetIVBeginCycle(IsotopicVector isotopicvector) { fIVBeginCycle = isotopicvector;} //!< Set the IV at the beginging of the Reactor cycle - void SetIVOutCycle(IsotopicVector isotopicvector){ fIVOutCycle = isotopicvector;} //!< Set the IV Going out at the end of the cycle - void SetIVInCycle(IsotopicVector isotopicvector) { fIVInCycle = isotopicvector;} //!< Set the IV coming In at the beginning of the cycle - - - - -#ifndef __CINT__ - - void SetOutBackEndFacility(CLASSBackEnd* pool) { fOutBackEndFacility = pool; } //!< Return the pointer to OutBackEnd Facility - void SetStorage(Storage* storage) { fStorage = storage; fIsStorage = true;} //!< Set the pointer to the Storage - void SetFabricationPlant(FabricationPlant* FP) { fFabricationPlant = FP;} //!< Set the Pointer to the FabricationPlant - void SetEvolutionDB(EvolutionData evolutionDB); //!< Set the pointer to the DB evolution of the Reactor -#endif - - using CLASSFacility::SetName; - using CLASSFacility::GetName; - - //@} - - - - - //********* Evolution & Modification Method *********// - - /*! - \name Evolution & Modification Method - */ - //@{ - - void Evolution(cSecond t); //!< Performs the Evolution until time t - void Dump(); //!< Write modification (IV In/Out, filling the TF...) - void SetNewFuel(EvolutionData ivdb); //!< Change the Evolutive DB of the Reactor - - //@} - - - - protected : - - bool fFixedFuel; //!< true if the fuel is fixed (not reprocessed) - bool fIsStorage; //!< true if a storage has been define (to approximate the reprocessing using fixed fuel) - - //********* Internal Parameter *********// - - double fPower; ///< Power (in Watt) - - IsotopicVector fIVBeginCycle; ///< Fuel IV at the beginning of a cycle - IsotopicVector fIVInCycle; ///< IVBegin add at the beginning of the cycle - IsotopicVector fIVOutCycle; ///< IV wich get out at the end of a cycle - -#ifndef __CINT__ - EvolutionData fEvolutionDB; //!< Pointer to the actual evolution DataBase - - CLASSBackEnd* fOutBackEndFacility; //!< Pointer to the BackEnd Facility which collect the spend fuel - - - CLASSFuelPlan* fFuelPlan; //!< Pointer to the fuel Plan - - FabricationPlant* fFabricationPlant; //!< Pointer to the FabricationPlant - - Storage* fStorage; //!< Pointer to the Stock (only for reprocessing fuel in fixed base...) - - -#endif - //********* Unfixed Fuel Parameter *********// - - - double fHeavyMetalMass; ///< In tons - double fBurnUp; ///< In GWd/tHM - - ClassDef(Reactor,3); -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/Scenario.hxx b/source/branches/CLASSV4.1/include/Scenario.hxx deleted file mode 100755 index 42b15471c..000000000 --- a/source/branches/CLASSV4.1/include/Scenario.hxx +++ /dev/null @@ -1,309 +0,0 @@ -#ifndef _SCENARIO_ -#define _SCENARIO_ -/*! - \file - \brief Header file for CLASS classes. - */ - -#include "CLASSObject.hxx" -#include "IsotopicVector.hxx" - -#include <TFile.h> -#include <TTree.h> -#include <vector> -#include <string> -#include <map> -#include <iostream> - - - -using namespace std; -typedef long long int cSecond; - -class DecayDataBank; -class FabricationPlant; -class SeparationPlant; -class Reactor; -class Pool; -class Storage; - -//-----------------------------------------------------------------------------// -//! Defines a Scenario (the whole electro-nuclear system) - -/*! - The aim of these Scenario is to manage the park and its evolution and to lead all Storage, FabricationPlant, Reactor, Pool,... - - - @author BaM - @author BLG - @version 2.0 - */ -//________________________________________________________________________ - - -class Scenario : public CLASSObject -{ - public : - - //********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - //{ - /*! - Use to load a CLASSLogger - \param log : used for the log. - \param abstime: Starting time of the Parc in second - */ - Scenario(CLASSLogger* Log, cSecond abstime = 0); ///< Log Constructor. - //} - - //{ - /*! - Use to set the starting time of the Parc - \param abstime: Starting time of the Parc in second - */ - Scenario(cSecond abstime); - //} - - //{ - /*! - Use to set the starting time of the Parc - \param abstime: Starting time of the Parc in second - \param log : used for the log. - */ - Scenario(cSecond abstime, CLASSLogger* log); - //} - - ~Scenario(); ///< Normal Destructor. - //@} - - - //********* Get Method *********// - /*! - \name Get Function - */ - //@{ - cSecond GetAbsoluteTime() { return fAbsoluteTime; } ///< Return the Absolute Clock - map<cSecond, int> GetTimeStep() { return fTimeStep; } ///< Return the Time Step vector - vector<Reactor*> GetReactor() { return fReactor; } ///< Return the Reactor vector - vector<Storage*> GetStorage() { return fStorage; } ///< Return the Storage vector - vector<Pool*> GetPool() { return fPool; } ///< Return the Pool Vector - vector<FabricationPlant*> GetFabricationPlant() { return fFabricationPlant; } ///< Return the FabricationPlant vector - DecayDataBank* GetDecayDataBase() { return fDecayDataBase; } //!< Return the Pointer to the DecayDataBank - - cSecond GetPrintSet() { return fPrintStep; } ///< Return the print step periodicity - bool GetStockManagement() { return fStockManagement; } ///< Return the StockManagement method (True or False) - string GetOutputFileName() { return fOutputFileName; } ///< Return the Output File name - string GetOutputTreeName() { return fOutputTreeName; } ///< Return the Output ROOT TTree name - - IsotopicVector GetWaste() { return fWaste;} ///< Return the waste IsotopicVcetor - - //@} - - - - - //********* Set Method *********// - /*! - \name Set Function - */ - //@{ - - //{ - /// Set the printing step periodicity - /*! - Use to set the periodicity of the output - \param timestep: periodicity of outpout in second - */ - void SetTimeStep(cSecond timestep) { fPrintStep = timestep; } - //} - - //{ - /// Set the StockManagement method - /*! - Use to define the stock managment method : true all fuel are stored individualy and false all fuel are mixed in a stock, and one can separate each isotope as needed - \param val: true or false depending on the stock management method used - */ - void SetStockManagement(bool val) { fStockManagement = val; } - //} - - //{ - /// Set the DecayDataBank - /*! - Use to define Decay DataBank to be used - \param decaydatabase: a DecayDataBank which should contain the evolution of each nuclei of the chart - */ - void SetDecayDataBase(DecayDataBank* decaydatabase) { fDecayDataBase = decaydatabase; } - //} - - //{ - /// Set the Output File Name - /*! - Use to define name of the output file - \param name: a string which correspond to the output file name - */ - void SetOutputFileName(string name) { fOutputFileName = name; } - //} - - - //{ - /// Set the Output TTree Name - /*! - Use to define name of the output ROOT TTree - \param name: a string which correspond to the output ROOT TTree name - */ - void SetOutputTreeName(string name) { fOutputTreeName = name; } - //} - //@} - - void SetLogTimeStep(bool val = true) { fLogTimeStep = true; } - - - void SetZAIThreshold(int z = 90) { fZAIThreshold = z;} - - - //********* Add Method *********// - /*! - \name Adding Facilities - */ - //@{ - - void AddPool(Pool* Pool); ///< Add a Pool to the Park - void AddReactor(Reactor* reactor); ///< Add a Reactor to the Park - void AddStorage(Storage* storage); ///< Add a Storage to the Park - void AddFabricationPlant(FabricationPlant* fabricationplant); ///< Add a Storage to the Park - void AddSeparationPlant(SeparationPlant* separationplant); - - void Add(Pool* Pool) {AddPool(Pool);} ///< Add a Pool to the Park - void Add(Reactor* reactor) {AddReactor(reactor);} ///< Add a Reactor to the Park - void Add(Storage* storage) {AddStorage(storage);} ///< Add a Storage to the Park - void Add(FabricationPlant* fabricationplant) {AddFabricationPlant(fabricationplant);} ///< Add a Storage to the Park - void Add(SeparationPlant* separationplant) {AddSeparationPlant(separationplant);} ///< Add a Storage to the Park - - //@} - - - - //********* Evolution Method *********// - /*! - \name Evolution Method - */ - //@{ - - void BuildTimeVector(cSecond t); ///< Build the Time Evolution Vector where : - /// \li 1 printing, - /// \li 2 reactor Studown - /// \li 4 start/End of reactor cycle, - /// \li 8 end of Cooling, - /// \li 16 fuel Fabrication - - void Evolution(cSecond t); ///< Perform the Evolution - void BackEndEvolution(); ///< Perform BackEnd Evolution - void PoolEvolution(); ///< Perform Pool Evolution - void PoolDump(); - - void ReactorEvolution(); ///< Perform the Reactor Evolution - void FabricationPlantEvolution(); ///< Perform the FabricationPlant Evolution - void StorageEvolution(); ///< Perform the Storage Evolution - - //@} - - - - //-------- IsotopicVector --------// - - /*! - \name IsotopicVector Sum - */ - //@{ - - - IsotopicVector GetOutIncome() const { return fOutIncome; } //!< Return the OutIncome Providings IsotopicVector - - void AddOutIncome(ZAI zai, double quantity) { AddOutIncome(zai*quantity); } //!< Add a ZAI*quantity to OutIncomeIncome - void AddOutIncome(IsotopicVector isotopicvector){ fOutIncome.Add(isotopicvector); } //!< Add a isotopicVector to OutIncomeIncome - void AddWaste(ZAI zai, double quantity) { AddWaste(zai*quantity); } //!< Add a ZAI*quantity to Waste - void AddWaste(IsotopicVector isotopicvector) { fWaste.Add(isotopicvector); } //!< Add a isotopicVector to Waste - void AddToPower(double power) { fParcPower += power;} //!< Add power to the installed power in the Parc - - - void ApplyZAIThreshold(); - //@} - - - - //********* In/Out related Method *********// - - /*! - \name In/Out Method - */ - //@{ - - - void ProgressPrintout(cSecond t); //!< Update the prompt output to the time t - - void Print(); //!< Print some information about the Parc - void Write(); //!< Write information in a file - - void OpenOutputTree(); //!< Open and define the Ouput ROOT TTree - void CloseOutputTree(); //!< Close and delete the Ouput ROOT TTree - void OutAttach(); //!< Attach the Branch to the Ouput ROOT TTree - - void ResetQuantity(); //!< Reset the values of the GLobal IsotopicVector - void UpdateParc(); //!< Update the Global IsotopicVector - - //@} - - - - protected : - bool fNewTtree; //!< Tru if we want to define a new TTree in the output File - bool fStockManagement; ///< True if real StockManagement false unstead (Default = true) - bool fLogTimeStep; - - cSecond fPrintStep; ///< Time interval between two output update in [s] - cSecond fAbsoluteTime; ///< Absolute Clock in [s] - cSecond fStartingTime; ///< Starting Time in [s] - map<cSecond, int> fTimeStep; ///< Time Step Vector in [s] for the evolution : - /// \li 1 printing, - /// \li 2 reactor Studown - /// \li 4 start/End of reactor cycle, - /// \li 8 end of Cooling, - /// \li 16 fuel Fabrication - - - int fZAIThreshold; ///< - - vector<Storage*> fStorage; ///< Vector of Storages - vector<Pool*> fPool; ///< Vector of Pool - vector<Reactor*> fReactor; ///< Vector of Reactor - vector<FabricationPlant*> fFabricationPlant; ///< Vector of FabricationPlant - vector<SeparationPlant*> fSeparationPlant; ///< Vector of FabricationPlant - DecayDataBank* fDecayDataBase; //!< Pointer to the Decay DataBase - - - TFile* fOutFile; ///< Pointer to the Root Output File - string fOutputFileName; //! Name of the Output File - TTree* fOutT; ///< Pointer to the Root Output TTr3ee - string fOutputTreeName; //! Name of the Output TTree - string fOutputLogName; ///< Name of the Ouput log File - - IsotopicVector fWaste; ///< Waste IV - IsotopicVector fTotalStorage; ///< Sum of all IV in Storage IV - IsotopicVector fOutIncome; ///< OutIncomeIncome IV - IsotopicVector fTotalCooling; ///< Sum of all IV in Cooling IV - IsotopicVector fFuelFabrication; ///< Sum of all IV in Fabrication IV - IsotopicVector fTotalInReactor; ///< Sum of all IV in Reactor IV - - - IsotopicVector fIVInCycleTotal; ///< Sum of all IV in the cycle (without Waste) IV - IsotopicVector fIVTotal; ///< Sum of all IV in the parc (including Waste) IV - double fParcPower; ///< Sum of the Power of all reactor in the parc - -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/SeparationPlant.hxx b/source/branches/CLASSV4.1/include/SeparationPlant.hxx deleted file mode 100644 index cf988d6b9..000000000 --- a/source/branches/CLASSV4.1/include/SeparationPlant.hxx +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef _SeparationPlant_ -#define _SeparationPlant_ -/*! - \file - \brief Header file for SeparationPlant class. - */ - -#include <string> -#include <map> - -#include "CLASSConstante.hxx" -#include "CLASSBackEnd.hxx" -#include "Storage.hxx" -#include "IsotopicVector.hxx" - -using namespace std; -typedef long long int cSecond; - -class CLASSBackEnd; -class CLASSLogger; -class DecayDataBank; - -//-----------------------------------------------------------------------------// -//! Defines a SeparationPlant. - -/*! - The aim of this class is to separate an IV into several IV (MA, Pu, PF, etc...) and - to send it to one or several Storage - - @author NT - @author BaM - @version 1.0 - */ -//________________________________________________________________________ - - - -class SeparationPlant : public CLASSBackEnd -{ -public : - - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - SeparationPlant(); ///< Normal Constructor. - - //{ - /// Special Constructor. - /*! - Make a new SeparationPlant - \param log : used for the log. - */ - SeparationPlant(CLASSLogger* Log); - //} - - ~SeparationPlant(); ///< Normal Destructor. - //@} - - -//********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - - void SetBackEndDestination(CLASSBackEnd* storagedestination, IsotopicVector isotopicvector, cSecond destinationstartingtime); //!< Tell Separation plant to begin separation at time destinationstartingtime according efficiency (between [0-1]) defined in isotopicvector and to send the separated materials to storagedestination - - void AddIV(IsotopicVector IV); - - void SetPutToWaste(bool val) { fPutToWaste = val; } //!< Set True if IV goes to waste after cooling false instead - - - using CLASSBackEnd::SetName; - - //@} - - - - -//********* Get Method *********// - - /*! - \name Get Method - */ - //@{ - - bool GetPutToWaste() const { return fPutToWaste; } //!< Return True if IV goes to waste after cooling false instead - - //@} - - - map<cSecond,int> GetTheBackEndTimePath(); - - -//********* IsotopicVector Managment Method *********// - - /*! - \name IsotopicVector Managment Method - */ - //@{ - - vector<cSecond> GetCoolingStartingTime() const - { return GetIVArrayArrivalTime(); } //!< Return the vector of Cooling starting Time - //@} - -protected : - - - -//********* Internal Parameter *********// - bool fPutToWaste; //!< True if IV goes to waste after cooling false instead - vector<CLASSBackEnd* > fDestinationStorage; //!< Vector containing destination storage of the IV in the Separation Plant - vector<IsotopicVector > fDestinationStorageIV; //!< Vector containing destination storage of the IV in the Separation Plant - vector<cSecond> fDestinationStorageStartingTime; //!< Vector containing destination storage starting time of the IV in the Separation Plant - -//********* Private Method *********// - - - - - ClassDef(SeparationPlant,3); -}; - -#endif diff --git a/source/branches/CLASSV4.1/include/Storage.hxx b/source/branches/CLASSV4.1/include/Storage.hxx deleted file mode 100644 index 9c3b5f108..000000000 --- a/source/branches/CLASSV4.1/include/Storage.hxx +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef _Storage_ -#define _Storage_ - -/*! - \file - \brief Header file for Storage class. - */ - - -#include <vector> - -#include "CLASSBackEnd.hxx" -#include "IsotopicVector.hxx" - - -using namespace std; -typedef long long int cSecond; - -class CLASSLogger; -class DecayDataBank; - -//-----------------------------------------------------------------------------// -//! Defines a Storage object - -/*! - A Storage is a CLASSBackEnd facility. It is almost the same as a Pool with a - infinite cooling time. - A CLASSFacility can take IsotopicVector(s) contained in a Storage but a Storage - cannot send its content in other CLASSFacility (its a kind of passive facility) - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class Storage : public CLASSBackEnd -{ -public : - - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - Storage(); ///< Normal Constructor. - - //{ - /// CLASSLogger Constructor. - /*! - Use to create an empty Storage with a CLASSLogger - \param log : used for the log. - */ - Storage(CLASSLogger* log); - //} - - - //{ - /// Special Constructor. - /*! - Make a new Storage - \param log : used for the log. - \param evolutivedb : DecayDataBank for decay management - */ - Storage(CLASSLogger* log, DecayDataBank* evolutivedb); - //} - - - ~Storage(); ///< Normal Destructor. - - //@} - - - - -//********* Set Method *********// - - /*! - \name Set Method - */ - //@{ - - using CLASSBackEnd::SetName; - using CLASSBackEnd::SetIsStorageType; - - //@} - -//********* Storage specific Method *********// - - /*! - \name Storage specific methods - */ - //@{ - - void TakeFractionFromStock(int IVId,double fraction); //!< Take a part from an IV in sotck; - void TakeFromStock(IsotopicVector isotopicvector); //!< Take an entire IV from stock - - - void AddIV(IsotopicVector isotopicvector); //!< Add an Isotopicvector to the IVArray - void AddToStock(IsotopicVector isotopicvector) {AddIV(isotopicvector);} //!< Add an Isotopicvector to the IVArray - void RemoveEmptyStocks(); //!< delete the empty Isotopicvector(s) contained in IVArray - - //@} - - - - -//********* Evolution Method *********// - - /*! - \name Evolution Method - */ - //@{ - - void Evolution(cSecond t); //!< Perform the evolution until time t - - //@} - - //********* In/Out Method *********// - - /*! - \name In/Out Method - */ - //@{ - - //{ - /// Write the Isotope composition of all IsotopicVector stored. - /*! - Make a new reactor - \param filename : CLASSLogger used for the log. - \param date : only use to write a date in the file - */ - void Write(string filename,cSecond date = -1); - //} - - //@} - -protected : - -//********* Isotopic Quantity *********// - - - -//********* Private Method *********// - void StorageEvolution(cSecond t); //!< Deal the Storage Decay Evolution - - - - - ClassDef(Storage,3); -}; - -#endif diff --git a/source/branches/CLASSV4.1/include/StringLine.hxx b/source/branches/CLASSV4.1/include/StringLine.hxx deleted file mode 100755 index 429e560eb..000000000 --- a/source/branches/CLASSV4.1/include/StringLine.hxx +++ /dev/null @@ -1,306 +0,0 @@ -#ifndef _STRINGLINE_ -#define _STRINGLINE_ - -#include <string> -#include <sstream> -#include <iostream> -#include <algorithm> -#include <cctype> -using namespace std; -/*! - \file - \brief Header file for StingLine class. -*/ - -//! Class extracting fields from a string / line. -/*! - The aim of this class is to provide tools to extract fields ("word") from - a string and convert a string in Upper/Lower case. - All methods are static so that it is not necessary to create object to use them - - example: - \code - string line="The temperature is : 300.6 K"; - int start; - - 1st method: creation of StringLine - - start=0; - StringLine SL; - string the=SL.NextWord(line,start); - string temperature_is=SL.NextWord(line,start,':'); - string colon=SL.NextWord(line,start); - double T=atof(SL.NextWord(line,start).c_str()); - cout<<the<<endl<<temperature_is<<endl<<T<<endl; - - 2nd method: "using" the static methods - - start=0; - the=StringLine::NextWord(line,start); - temperature_is=StringLine::NextWord(line,start,':'); - colon=StringLine::NextWord(line,start); - T=atof(StringLine::NextWord(line,start).c_str()); - cout<<the<<endl<<temperature_is<<endl<<T<<endl; - \endcode - @author PTO - @version 0.1 -*/ - -class StringLine -{ - public: - //! Find the next word in a line. - /*! - Find Next word in a line starting from position "start" in the line. If an alternative - separator is given, the word length is defined by the first position of sep or alt_sep found. - The first value of start is in general 0 (i.e. the beginning of the Line) - \param Line : a line containing words - \param start : from where to start to find the begining of a word - \param sep : the separator between 2 words (default=space) - \param alt_sep : the alternative separator between 2 words (default='') - */ - static string NextWord(string Line,int &start,char sep=' ', char alt_sep='\0'); - //! Find the previous word in a line. - /*! - Find Previous word in a line starting from position "start" in the line. If an alternative - separator is given, the word length is defined by the first position of sep or alt_sep found. - The first value of start is in general the end of the Line. - \param Line : a line containing words - \param start : from where to start to find the begining of a word - \param sep : the separator between 2 words (default=space) - \param alt_sep : the alternative separator between 2 words (default='') - */ - static string PreviousWord(string Line,int &start,char sep=' ', char alt_sep='\0'); - static void ToLower(string &Line); //!< convert a string to Lower case - static void ToUpper(string &Line); //!< convert a string to Upper case - - //! Find \p search in \p Line from the begining. - /*! - returns the position, starting from the begenning of the first occurence - of \p search in \p Line if it is found, else returns -1 - \param search : a string to find - \param Line : where to search - */ - static int Find(const char *search,string Line); - //! Find \p search in \p Line from the end. - /*! - returns the position, starting from the end of the first occurence - of \p search in \p Line if it is found, else returns -1 - \param search : a string to find - \param Line : where to search - */ - static int rFind(const char *search,string Line); - //! convert a input type (\p in_T) to another (\p out_T). - /*! - Example: - \code - string s="32.12"; - double t=StringLine::convert<double>(s); - string temperature=StringLine::convert<string>(300.); - \endcode - \param t : the input value - */ - template <class out_T, class in_T> static out_T convert(const in_T & t); - //! try to convert a string to a number. - /*! - Example: - \code - string s="32.12"; - double d; - if(StringLine::ToNumber(d,s,std::dec)) - cout<<"double="<<d<<endl; - string hexanum="ff"; - int i; - if(StringLine::ToNumber(i,hexanum,std::hex)) - cout<<"int="<<i<<endl; - \endcode - \param s : the input string - \param t : the output value - \param f : string format (ie hex, dec, oct) - */ - template <class T> static bool ToNumber(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)) - { - if(s.size()==0) return true; - std::istringstream iss(s); - return !(iss >> f >> t).fail(); - } - //! Find the start of a word in a line. - /*! - \param Line : a line containing words - \param CurrentPosition : from where to start to find the begining of a word - \param sep : the separator between 2 words (default=space) - \param alt_sep : the alternative separator between 2 words (default='') - */ - static int GetStartWord(string Line,int CurrentPosition,char sep=' ', char alt_sep='\0'); - //! Find the end of a word in a line. - /*! - \param Line : a line containing words - \param CurrentPosition : from where to start to find the end of a word - \param sep : the separator between 2 words (default=space) - \param alt_sep : the alternative separator between 2 words (default='') - */ - static int GetEndWord(string Line,int CurrentPosition,char sep=' ', char alt_sep='\0'); - //! Replace a sub-string by an other in a string. - /*! - \param InLine : the string which contains the sub-string to replace - \param ToReplace : the sub-string to replace - \param By : the sub-string ToReplace is replaced by the sub-string By in Inline - */ - static string ReplaceAll(string InLine, string ToReplace, string By); - static bool IsDouble(const std::string& s); -}; - - -//_________________________________________________________________________________ -inline string StringLine::NextWord(string Line,int &start,char sep, char alt_sep) -{ - string Word=""; - if(start>=int(Line.size())) - { - return Word; - } - start=GetStartWord(Line,start,sep,alt_sep); - int wordlength=GetEndWord(Line,start,sep,alt_sep)-start; - - Word=Line.substr(start,wordlength); - - start+=wordlength; - return Word; -} -//_________________________________________________________________________________ -inline string StringLine::PreviousWord(string Line,int &start,char sep, char alt_sep) -{ - string Word=""; - if(start<=0) - { - return Word; - } - int pos=Line.rfind(sep,start); - int alt_pos=-1; - int real_pos=pos; - char real_sep=sep; - if(alt_sep!='\0') - { - alt_pos=Line.rfind(alt_sep,start); - real_pos=max(pos,alt_pos); - if(real_pos!=pos) - real_sep=alt_sep; - } - int wordlength=start-Line.rfind(real_sep,real_pos); - if(real_pos<=0) - { - Word=Line.substr(0,start+1); - start=0; - return Word; - } - Word=Line.substr(real_pos+1,wordlength); - - start-=wordlength+1; - return Word; -} - -//_________________________________________________________________________________ -inline void StringLine::ToLower(string &Line) -{ - transform (Line.begin(), Line.end(), // source - Line.begin(), // destination - (int(*)(int))tolower); // operation -} - -//_________________________________________________________________________________ -inline void StringLine::ToUpper(string &Line) -{ - transform (Line.begin(), Line.end(), // source - Line.begin(), // destination - (int(*)(int))toupper); // operation -} - -//_________________________________________________________________________________ -inline int StringLine::GetStartWord(string Line,int CurrentPosition,char sep, char alt_sep) -{ - int pos=Line.find(sep,CurrentPosition); - int alt_pos=-1; - if(alt_sep!='\0') - alt_pos=Line.find(alt_sep,CurrentPosition); - int real_pos=pos; - char real_sep=sep; - if(alt_pos>=0) - { - real_pos=min(pos,alt_pos); - if(pos==int(string::npos))real_pos=alt_pos; - if(real_pos!=pos) - real_sep=alt_sep; - } - if(real_pos==int(string::npos)) return CurrentPosition; - while(CurrentPosition<int(Line.size()) && Line[CurrentPosition]==real_sep) - CurrentPosition++; - return CurrentPosition; -} - -//_________________________________________________________________________________ -inline int StringLine::GetEndWord(string Line,int CurrentPosition,char sep, char alt_sep) -{ - int pos=Line.find(sep,CurrentPosition); - int alt_pos=-1; - if(alt_sep!='\0') - alt_pos=Line.find(alt_sep,CurrentPosition); - int real_pos=pos; - if(alt_pos>=0) - { - real_pos=min(pos,alt_pos); - if(pos==int(string::npos))real_pos=alt_pos; - } - if(real_pos==int(string::npos)) - return Line.size(); - return real_pos; -} - -//_________________________________________________________________________________ -inline int StringLine::Find(const char *search,string Line) -{ - size_t Pos=Line.find(search); - if(Pos != string::npos ) return Pos; - return -1; -} - -//_________________________________________________________________________________ -inline int StringLine::rFind(const char *search,string Line) -{ - size_t Pos=Line.rfind(search); - if(Pos != string::npos) return Pos; - return -1; -} - -//_________________________________________________________________________________ -template <class out_T, class in_T> -inline out_T StringLine::convert(const in_T & t) -{ - stringstream stream; - stream << t; // insert value to stream - out_T result; // store conversion's result here - stream >> result; // write value to result - return result; -} - -//_________________________________________________________________________________ -inline string StringLine::ReplaceAll(string InLine, string ToReplace, string By) -{ - int start=0; - int pos=InLine.find(ToReplace,start); - while(pos!=int(string::npos)) - { - InLine.replace(pos,ToReplace.size(),By); - start=0; - pos=InLine.find(ToReplace,start); - } - return InLine; -} -//_________________________________________________________________________________ -inline bool StringLine::IsDouble(const std::string& s) -{ - std::istringstream i(s); - double temp; - return ( (i >> temp) ? true : false ); -} - -#endif diff --git a/source/branches/CLASSV4.1/include/XSModel.hxx b/source/branches/CLASSV4.1/include/XSModel.hxx deleted file mode 100644 index 73b326797..000000000 --- a/source/branches/CLASSV4.1/include/XSModel.hxx +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef _XSMODEL_ -#define _XSMODEL_ - - -/*! - \file - \brief Header file for XSMODEL class. - - - @author BaM - @author BLG - @version 1.0 - */ -#include "EvolutionData.hxx" -#include "CLASSObject.hxx" - - -using namespace std; - -class IsotopicVector; - -//-----------------------------------------------------------------------------// -//! Defines a mean cross section predictor - -/*! -This is the mother class for methods related to XS prediction - -\warning - Never instantiate XSModel in your CLASS input but it's derivated class - - @see XSM_CLOSEST - @see XSM_MLP - - @author BaM - @author BLG - @version 1.0 - */ -//________________________________________________________________________ - - -class XSModel : public CLASSObject -{ - - public : - - /*! - \name Constructor/Desctructor - */ - //@{ - - XSModel(); //!<Default constructor - - - XSModel(CLASSLogger* log); //!<Logger constructor - - //@} - - - /*! - \name Virtual methods : This following methods are overloaded in the derivated classes : XSM_CLOSEST & XSM_MLP & ... - */ - //@{ - - //{ - /// Pure virtual method called to estimates mean cross sections. - /*! - Estimates the mean cross sections evolution according the fresh fuel composition - \param IV : Fresh fuel composition - \param t : deprecated parameter : - \deprecated t : XS update time (used in XSM_Closest) - */ - //} - virtual EvolutionData GetCrossSections(IsotopicVector IV,double t=0) = 0 ; - - /// Check either the IsotopicVector IV is in the validity domain of the models. - /*! - return true if IV is in ValidityDomain - return false + a warning if IV is not in ValidityDomain - \param IsotopicVector IV, Fresh fuel composition - \param t : deprecated parameter : - \deprecated t : XS update time (used in XSM_Closest) - */ - virtual bool isIVInDomain(IsotopicVector IV) ; - //@} - - - - void SetZAIThreshold(int Z_Threshold){fZAIThreshold = Z_Threshold;}//!< Set the Z threshold : ZAI with Z < fZAIThreshold are not manage by CLASS - int GetZAIThreshold(){return fZAIThreshold;}//!< Get the Z threshold - - protected : - map< ZAI, pair<double,double> > fFreshFuelDomain; //!< Fresh fuel range : map<ZAI<min edge ,max edge >> - int fZAIThreshold; //!< Z threshold for handling nuclei mean cross section (take only ZAI reaction of Z>=fZAIThresold) -}; - -#endif - diff --git a/source/branches/CLASSV4.1/include/ZAI.hxx b/source/branches/CLASSV4.1/include/ZAI.hxx deleted file mode 100755 index 785e319a7..000000000 --- a/source/branches/CLASSV4.1/include/ZAI.hxx +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef _ZAI_ -#define _ZAI_ - -/*! - \file - \brief Header file for ZAI classes. - */ - -#include <string> -#include "TObject.h" -#include <iostream> - -using namespace std; - -//-----------------------------------------------------------------------------// -//! Defines a nucleus - -/*! - Define a nuclei as 3 integer Z,A,I: - \li its charge number : Z - \li its mass number : A - \li its Isomeric state : I (0 : fundamental, 1 : first isomeric state ,...) - - The aim of this class is to discribe each ZAI. - - @author BaM - @version 2.0 - */ -//________________________________________________________________________ - - - -class ZAI : public TObject -{ -public: - - -//********* Constructor/Destructor Method *********// - - /*! - \name Constructor/Desctructor - */ - //@{ - - ZAI(); ///< Default constructor - - //{ - ///< Normal Constructor. - /*! - Default: No parent - \param Z : number of protons - \param A : number of nucleons (A=0 means natural isotopes) - */ - ZAI(int Z, int A, int I=0); - //} - - - ~ZAI(); ///< Normal Destructor. - - -//********* ZAI main attributes Method *********// - - /*! - \name ZAI main attributes - */ - //@{ - int Z() const { return fZ; } //!< returns the number of protons - int A() const { return fA; } //!< returns the number of nucleons - int I() const { return fI; } //!< returns the Isomeric State - int N() const { return fA-fZ; } //!< returns the number of neutrons - - //@} - - - - ZAI operator=(ZAI IVa); //!< - bool operator <(const ZAI& zai) const { return (fZ != zai.Z())? - (fZ < zai.Z()) : ( (fA != zai.A())? - (fA < zai.A()) : (fI < zai.I()) ); }//!< Compartor operator - - bool operator !=(const ZAI& zai) const { return ( fZ != zai.Z() ) || ( fA != zai.A() ) || ( fI != zai.I() ); }//!< Compartor operator - bool operator ==(const ZAI& zai) const { return ( fZ == zai.Z() && fA == zai.A() && fI == zai.I()); }//!< Compartor operator - void Print() const { cout << fZ << " " << fA << " " << fI << endl;}//!< Print in standard output : Z A I - - -protected : - - short fZ; ///< number of protons - short fA; ///< number of nucleons (A=0 means natural isotopes) - short fI; ///< Isomeric state - - ClassDef(ZAI,1); -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/ZAIHeat.hxx b/source/branches/CLASSV4.1/include/ZAIHeat.hxx deleted file mode 100644 index f126c7348..000000000 --- a/source/branches/CLASSV4.1/include/ZAIHeat.hxx +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _ZAIHeat_ -#define _ZAIHeat_ - -/*! - \file - \brief Header file for ZAIHeat classes. - - - @author BaM - @author BLG - @version 2.0 - */ - -#include <map> - -#include "ZAI.hxx" -#include "TObject.h" -#include <iostream> - -using namespace std; - - -class IsotopicVector; - -//-----------------------------------------------------------------------------// -//! Defines the decay heat of a ZAI - /*! - The aims of this class is to handle decay heat - Activity-to-Heat factors are from (92SDOe + M.e.Brendan, dec 98). - Values are in CLASS_PATH/data/HeatTox.dat - - @author BLG - @author BaM - @version 1.0 - */ -//________________________________________________________________________ - - -class ZAIHeat -{ - - -public: - /*! - \name Constructor/Desctructor - */ - //@{ - - ZAIHeat();//!< Normal Constructor. - - ~ZAIHeat();//!< Normal Destructor. - //@} - - /*! - \name Fucntions returning decay Heat [W] - */ - //@{ - double GetHeat(ZAI zai ) const; //!< get with ZAI - double GetHeat(const int Z, const int A, const int I ) const { return GetHeat( ZAI(Z, A, I) ); } //!< Get with Z, A - - double GetHeat(const IsotopicVector IV) const; //return Heat of IV [W] - //@} -private: - map<ZAI, double> fZAIHeat; //! ZAI Heat list - - -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/ZAIMass.hxx b/source/branches/CLASSV4.1/include/ZAIMass.hxx deleted file mode 100644 index 252e69c90..000000000 --- a/source/branches/CLASSV4.1/include/ZAIMass.hxx +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _ZAIMass_ -#define _ZAIMass_ - -/*! - \file - \brief Header file for ZAIMass classes. - - - @author BaM - @author BLG - @version 2.0 - */ - -#include <map> - -#include "ZAI.hxx" -#include "TObject.h" -#include <iostream> - -using namespace std; - - -class IsotopicVector; - -//-----------------------------------------------------------------------------// -//! Defines the molar mass of a ZAI - -/*! - The aims of this class is to handle the molar mass of each ZAI - - @author BaM - @author BLG - @version 1.0 - */ -//________________________________________________________________________ - - -class ZAIMass -{ - - -public: - /*! - \name Constructor/Desctructor - */ - //@{ - - ZAIMass();//!< Normal Constructor. - - ~ZAIMass();//!< Normal Destructor. - //@} - - /*! - \name Fucntions returning molar mass [g/mol] - */ - //@{ - double GetMass(ZAI zai ) const; //!< get with ZAI - double GetMass(const int Z, const int A ) const { return GetMass( ZAI(Z, A, 0) ); } //!< Get with Z, A - //@} - - double GetMass(const IsotopicVector IV) const; //return Mass of IV [t] - -private: - map<ZAI, double> fZAIMass; //! ZAI mass list - - -}; - - -#endif diff --git a/source/branches/CLASSV4.1/include/ZAITox.hxx b/source/branches/CLASSV4.1/include/ZAITox.hxx deleted file mode 100644 index 9a7b05904..000000000 --- a/source/branches/CLASSV4.1/include/ZAITox.hxx +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _ZAITox_ -#define _ZAITox_ - -/*! - \file - \brief Header file for ZAITox classes. - - - @author BaM - @author BLG - @version 2.0 - */ - -#include <map> - -#include "ZAI.hxx" -#include "TObject.h" -#include <iostream> - -using namespace std; - - -class IsotopicVector; - -//-----------------------------------------------------------------------------// -//! Defines the Radiotoxicity of a ZAI - /*! - The aims of this class is to handle radiotoxicity - Activity-to-Sievert factors are from (??). - Values are in CLASS_PATH/data/HeatTox.dat - - @author BLG - @author BaM - @version 1.0 - */ -//________________________________________________________________________ - - -class ZAITox -{ - - -public: - /*! - \name Constructor/Desctructor - */ - //@{ - - ZAITox();//!< Normal Constructor. - - ~ZAITox();//!< Normal Destructor. - //@} - - /*! - \name Fucntions returning radiotoxicity [Sv] - */ - //@{ - double GetRadioTox(ZAI zai ) const; //!< get with ZAI - double GetRadioTox(const int Z, const int A, const int I ) const { return GetRadioTox( ZAI(Z, A, I) ); } //!< Get with Z, A - - double GetRadioTox(const IsotopicVector IV) const; //return Heat of IV [W] - //@} -private: - map<ZAI, double> fZAITox; //! ZAI Radiotox list - - -}; - - -#endif diff --git a/source/branches/CLASSV4.1/src/CLASSBackEnd.cxx b/source/branches/CLASSV4.1/src/CLASSBackEnd.cxx deleted file mode 100644 index 37c5659f2..000000000 --- a/source/branches/CLASSV4.1/src/CLASSBackEnd.cxx +++ /dev/null @@ -1,138 +0,0 @@ -#include "CLASSBackEnd.hxx" - -#include "DecayDataBank.hxx" -#include "Scenario.hxx" -#include "CLASSLogger.hxx" - - -#include <sstream> -#include <string> -#include <iostream> -#include <cmath> -#include <algorithm> - -//________________________________________________________________________ -// -// CLASSBackEnd -// -// -// -// -//________________________________________________________________________ -ClassImp(CLASSBackEnd) - -CLASSBackEnd::CLASSBackEnd(int type):CLASSFacility(type) -{ - fDecayDataBase = 0; -} - -CLASSBackEnd::CLASSBackEnd(CLASSLogger* log, int type):CLASSFacility(log, type) -{ - fDecayDataBase = 0; -} - - -CLASSBackEnd::CLASSBackEnd(CLASSLogger* log, cSecond cycletime, int type):CLASSFacility(log, cycletime, type) -{ - fDecayDataBase = 0; -} - -//________________________________________________________________________ -void CLASSBackEnd::ClearIVArray() -{ - - IsotopicVector EmptyIV; - fInsideIV = EmptyIV; - fIVArray.clear(); - fIVArrayArrivalTime.clear(); -} - -//________________________________________________________________________ -void CLASSBackEnd::AddIV(IsotopicVector isotopicvector) -{ - - AddCumulativeIVIn(isotopicvector); - - fIVArray.push_back(isotopicvector); - fIVArrayArrivalTime.push_back(fInternalTime); - - -} -//________________________________________________________________________ -void CLASSBackEnd::UpdateInsideIV() -{ - DBGL - fInsideIV = IsotopicVector(); - for(int i = 0; i < (int)fIVArray.size(); i++) - fInsideIV += fIVArray[i]; - DBGL -} - - -//________________________________________________________________________ -// Get Decay -//________________________________________________________________________ -IsotopicVector CLASSBackEnd::GetDecay(IsotopicVector isotopicvector, cSecond t) -{ - DBGL - - IsotopicVector IV; - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - if((*it).second > 0) - { - IsotopicVector ivtmp = fDecayDataBase->Evolution(it->first, t) * (*it).second ; - IV += ivtmp; - } - } - - DBGL - return IV; -} - - -void CLASSBackEnd::ApplyZAIThreshold(int z) -{ - fInsideIV.ApplyZAIThreshold(z); - fCumulativeIVIn.ApplyZAIThreshold(z); - fCumulativeIVOut.ApplyZAIThreshold(z); - - for(int i = 0; i < (int)fIVArray.size(); i++) - fIVArray[i].ApplyZAIThreshold(z); - -} - - -map<cSecond,int> CLASSBackEnd::GetTheBackEndTimePath() -{ - DBGL - map<cSecond, int> TheBackEndTimePath; - - if(!fIsStorageType) - { - int FacilityType = GetFacilityType(); - cSecond step = GetCycleTime(); - - pair< map<cSecond, int>::iterator, bool > IResult = TheBackEndTimePath.insert(pair<cSecond,int> (step, FacilityType)); - if( !IResult.second ) IResult.first->second |= FacilityType; - - map<cSecond, int> TheBackEndTimePath_tmp = GetOutBackEndFacility()->GetTheBackEndTimePath(); - - map<cSecond, int>::iterator it; - for (it = TheBackEndTimePath_tmp.begin(); it != TheBackEndTimePath_tmp.end(); it++) - { - pair< map<cSecond, int>::iterator, bool > IResult; - - IResult = TheBackEndTimePath.insert( pair<cSecond ,int>(step + (*it).first, (*it).second) ); - if( !IResult.second ) - IResult.first->second |= (*it).second; - - } - } - - DBGL - return TheBackEndTimePath; -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/CLASSFacility.cxx b/source/branches/CLASSV4.1/src/CLASSFacility.cxx deleted file mode 100644 index eca60a50e..000000000 --- a/source/branches/CLASSV4.1/src/CLASSFacility.cxx +++ /dev/null @@ -1,91 +0,0 @@ -#include "CLASSFacility.hxx" -#include "Scenario.hxx" - -using namespace std; - - //________________________________________________________________________ - // - // CLASSFacility - // - // - // - // - //________________________________________________________________________ - -ClassImp(CLASSFacility) - - - - -CLASSFacility::CLASSFacility(int type):CLASSObject() -{ - fParc = 0; - - fFacilityType = type; - - fInternalTime = 0; - fInCycleTime = 0; - fCycleTime = -1; -} - -CLASSFacility::CLASSFacility(CLASSLogger* log, int type):CLASSObject(log) -{ - fParc = 0; - - fFacilityType = type; - - fInternalTime = 0; - fInCycleTime = 0; - fCycleTime = -1; -} - - -CLASSFacility::CLASSFacility(CLASSLogger* log, cSecond cycletime, int type):CLASSObject(log) -{ - fParc = 0; - - fFacilityType = type; - - fInternalTime = 0; - fInCycleTime = 0; - fCycleTime = cycletime; - -} - -CLASSFacility::CLASSFacility(CLASSLogger* log, cSecond creationtime, cSecond lifetime, int type):CLASSObject(log) -{ - fParc = 0; - - fFacilityType = type; - - fInternalTime = 0; - fInCycleTime = 0; - fCycleTime = -1; - - fCreationTime = creationtime; - fLifeTime = lifetime; -} - -CLASSFacility::CLASSFacility(CLASSLogger* log, cSecond creationtime, cSecond lifetime, cSecond cycletime, int type):CLASSObject(log) -{ - fParc = 0; - - fFacilityType = type; - - fInternalTime = fCreationTime; - fInCycleTime = 0; - fCycleTime = cycletime; - - fCreationTime = creationtime; - fLifeTime = lifetime; -} - - - -void CLASSFacility::ApplyZAIThreshold(int z) -{ - fInsideIV.ApplyZAIThreshold(z); - fCumulativeIVIn.ApplyZAIThreshold(z); - fCumulativeIVOut.ApplyZAIThreshold(z); - -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/CLASSFuel.cxx b/source/branches/CLASSV4.1/src/CLASSFuel.cxx deleted file mode 100644 index de1d23c3a..000000000 --- a/source/branches/CLASSV4.1/src/CLASSFuel.cxx +++ /dev/null @@ -1,26 +0,0 @@ -#include "CLASSFuel.hxx" - -#include "CLASSLogger.hxx" - -using namespace std; - -//________________________________________________________________________ -// -// CLASSFuel -// -// -// -// -//________________________________________________________________________ - -CLASSFuel::CLASSFuel(EvolutionData* evo) -{ - fEvolutionData = evo; - fPhysicsModels = 0; -} - -CLASSFuel::CLASSFuel(PhysicsModels* evo) -{ - fEvolutionData = 0; - fPhysicsModels = evo; -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/CLASSFuelPlan.cxx b/source/branches/CLASSV4.1/src/CLASSFuelPlan.cxx deleted file mode 100644 index a57a24d78..000000000 --- a/source/branches/CLASSV4.1/src/CLASSFuelPlan.cxx +++ /dev/null @@ -1,69 +0,0 @@ -#include "CLASSFuelPlan.hxx" - -#include "CLASSLogger.hxx" - -using namespace std; - -//________________________________________________________________________ -// -// CLASSFuelPlan -// -// -// -// -//________________________________________________________________________ - -CLASSFuelPlan::CLASSFuelPlan():CLASSObject() -{ - DBGL -} - -CLASSFuelPlan::CLASSFuelPlan(CLASSLogger* log):CLASSObject(log) -{ - DBGL - DBGL -} - -void CLASSFuelPlan::AddFuel(cSecond time, CLASSFuel fuel, double BurnUp) -{ - DBGL - fLoadingPlan.insert(pair< cSecond, pair< CLASSFuel, double > >(time, pair< CLASSFuel, double > (fuel, BurnUp)) ); - DBGL -} - -pair< CLASSFuel, double > CLASSFuelPlan::GetFuelAt(cSecond t) -{ - DBGL - - pair< CLASSFuel, double > FuelAtT = fLoadingPlan.begin()->second; - - map< cSecond, pair< CLASSFuel, double > >::iterator it; - - cSecond ThisFuelTime; - - for (it = fLoadingPlan.begin(); it != fLoadingPlan.end(); it++ ) - { - if( it == fLoadingPlan.begin()) - { - FuelAtT = (*it).second; - } - else - { - ThisFuelTime = (*it).first; - - if( t < ThisFuelTime ) - { - DBGL - return FuelAtT; - } - else - { - FuelAtT = (*it).second; - } - - } - } - - DBGL - return FuelAtT; -} diff --git a/source/branches/CLASSV4.1/src/CLASSLogger.cxx b/source/branches/CLASSV4.1/src/CLASSLogger.cxx deleted file mode 100755 index 31839ca64..000000000 --- a/source/branches/CLASSV4.1/src/CLASSLogger.cxx +++ /dev/null @@ -1,112 +0,0 @@ - -#include "CLASSLogger.hxx" - -#include <iostream> -#include <ostream> -#include <algorithm> -using namespace std; - -//________________________________________________________________________ -// -// CLASSLogger -// -// -// -// -//________________________________________________________________________ -CLASSLogger::CLASSLogger(string CLASSLoggerName, int VerboseLvl, int OutputLvl ) -{ - fCLASSLoggerName = CLASSLoggerName; - fOutPutFile.open(CLASSLoggerName.c_str()); - fVerboseLVL = VerboseLvl; - if(!fOutPutFile) - { - cout << "Could not open the CLASSLogger: " << CLASSLoggerName << " !" << endl; - exit(-1); - } - - fError = 0; - fWarning = 0; - fDebug = 0; - fInfo = 0; - - if (VerboseLvl <= OutputLvl) - fMaxOutPutLVL = OutputLvl; - else - fMaxOutPutLVL = VerboseLvl; - - if(VerboseLvl >= 0) - { - if (!fError) - fError = new LogType(std::cout); - else - fError->SetSecondOutput(std::cout); - } - - if(VerboseLvl >= 1) - { - if (!fWarning) - fWarning = new LogType(std::cout); - else - fWarning->SetSecondOutput(std::cout); - } - if(VerboseLvl >= 2) - { - if (!fInfo) - fInfo = new LogType(std::cout); - else - fInfo->SetSecondOutput(std::cout); - } - if(VerboseLvl >= 3) - { - if (!fDebug) - fDebug = new LogType(std::cout); - else - fDebug->SetSecondOutput(std::cout); - } - - - if(OutputLvl >= 0) - { - if (!fError) - fError = new LogType(fOutPutFile); - else - fError->SetSecondOutput(fOutPutFile); - } - if(OutputLvl >= 1) - { - if (!fWarning) - fWarning = new LogType(fOutPutFile); - else - fWarning->SetSecondOutput(fOutPutFile); - } - if(OutputLvl >= 2) - { - if (!fInfo) - fInfo = new LogType(fOutPutFile); - else - fInfo->SetSecondOutput(fOutPutFile); - } - if(OutputLvl >= 3) - { - if (!fDebug) - fDebug = new LogType(fOutPutFile); - else - fDebug->SetSecondOutput(fOutPutFile); - } - - - -} - -//________________________________________________________________________ -CLASSLogger::~CLASSLogger() -{ - - fOutPutFile.close(); - -} - - - - diff --git a/source/branches/CLASSV4.1/src/CLASSNucleiFiliation.cxx b/source/branches/CLASSV4.1/src/CLASSNucleiFiliation.cxx deleted file mode 100644 index 481b6e915..000000000 --- a/source/branches/CLASSV4.1/src/CLASSNucleiFiliation.cxx +++ /dev/null @@ -1,322 +0,0 @@ -#include "CLASSNucleiFiliation.hxx" -#include "ZAI.hxx" -#include "IsotopicVector.hxx" - -#include <map> -#include <vector> -#include <cmath> - -using namespace std; - -//const string DEFAULTDATABASE = "DecayBase.dat"; -//________________________________________________________________________ -// -// CLASSNucleiFiliation -// -// -// -// -//________________________________________________________________________ -//____________________________InClass Operator____________________________ -//________________________________________________________________________ - -CLASSNucleiFiliation::CLASSNucleiFiliation():CLASSObject() -{ -} -CLASSNucleiFiliation::CLASSNucleiFiliation(CLASSLogger* log):CLASSObject(log) -{ -} - -CLASSNucleiFiliation::CLASSNucleiFiliation(const CLASSNucleiFiliation& CNF):CLASSObject() -{ - fNucleiFiliation = CNF.GetNucleiFIliation(); -} -//________________________________________________________________________ -CLASSNucleiFiliation::~CLASSNucleiFiliation() -{ - fNucleiFiliation.clear() ; -} -//________________________________________________________________________ -void CLASSNucleiFiliation::Add( ZAI Mother, IsotopicVector Daughter ) -{ - DBGL - - pair< map<ZAI, IsotopicVector>::iterator, bool> IResult; - - - IResult = fNucleiFiliation.insert( pair<ZAI, IsotopicVector> ( Mother, Daughter ) ); - - if( !IResult.second) - (*IResult.first).second += Daughter ; - - - DBGL -} - - -//________________________________________________________________________ -IsotopicVector CLASSNucleiFiliation::GetFiliation(ZAI Mother) -{ - DBGV(Mother.Z()<<" "<<Mother.A()<<" "<<Mother.I()); - map<ZAI, IsotopicVector>::iterator it_Filiation; - - it_Filiation = fNucleiFiliation.find(Mother); // search for the ZAI in the map - - DBGL - if(it_Filiation != fNucleiFiliation.end()) // test if it is present in the map - return it_Filiation->second; - else - return ZAI(-1,-1,-1)*1; // return -1 -1 _1 ZAI if unknown nuclei.... - -} - -//________________________________________________________________________ -void CLASSNucleiFiliation::FiliationCleanUp(map<ZAI, int> GoodNuclei, CLASSNucleiFiliation CuttedNuclei) -{ - DBGL - map<ZAI, IsotopicVector>::iterator it_Filiation; - for(it_Filiation = fNucleiFiliation.begin(); it_Filiation != fNucleiFiliation.end(); it_Filiation++) // loop on the filiation map (on the Mother ZAI) - { - vector<ZAI> DautherList = it_Filiation->second.GetZAIList(); // recover for each mother ZAI, the list of its daughter ZAI - - for (int i = 0; i < (int)DautherList.size(); i++) // Loop on the Daughter ZAI - { - if(GoodNuclei.find(DautherList[i]) == GoodNuclei.end() ) // if the ZAI is not in a dealed nuclei (cutted or unknown) - { - double Daughter_BR = it_Filiation->second.GetQuantity(DautherList[i]); // Get the quantity of the ZAI - it_Filiation->second -= Daughter_BR * DautherList[i]; // Remove it from the daughter list - - - IsotopicVector FastDecayChain = CuttedNuclei.GetFiliation(DautherList[i]); // Get the fast decay chain of it - - if(FastDecayChain.GetQuantity(-1, -1, -1) == 0) // Check if the FastDecayChain is known - it_Filiation->second += Daughter_BR * FastDecayChain; // Add the FastDecayCHain & apply the BR for the cutted Daughter - else - { - - ZAI Mother = DautherList[i]; - while (FastDecayChain.GetQuantity(-1, -1, -1) != 0 && GoodNuclei.find(Mother) == GoodNuclei.end()) - { - Mother = GetArtificialDecay(Mother); // Do an Artifial decay on the nuclei - FastDecayChain = CuttedNuclei.GetFiliation(Mother); // Get the fast decay chain of it - } - - if(GoodNuclei.find(Mother) != GoodNuclei.end()) - it_Filiation->second += Mother * Daughter_BR; - - else if ( FastDecayChain.GetQuantity(-1, -1, -1) == 0) - it_Filiation->second += FastDecayChain * Daughter_BR; - - else - { - ERROR << "Problem in Articial Decay!! check it!!" << endl; - exit(1); - } - - } - } - } - - } - DBGL -} -//________________________________________________________________________ - -ZAI CLASSNucleiFiliation::GetArtificialDecay(ZAI Mother) -{ - DBGL - - int A = Mother.A(); - int Z = Mother.Z(); - int I = Mother.I(); - - if(I!=0) - return ZAI(Z,A,I-1); - else - { - //Coef Ac & As of Bette & Weisacker are approximativ but enough precise for this application.... - double Ac = 0.695; - double As = 23.2; - - double ZTh = A/2 * ( 1 )/ ( 1 + Ac / (4*As) * pow(A,2/3) ); // Stable Z from isobarn calculation using Bette & Weisacker formula. - - - if( Z > ZTh ) // Then Beta+ - return ZAI(Z-1,A,I); - else // Then Beta- - return ZAI(Z+1,A,I); - - } - - - DBGL -} - - -//________________________________________________________________________ -void CLASSNucleiFiliation::SelfFiliationCleanUp(map<ZAI, int> GoodNuclei) -{ - DBGL - - bool Cleaned = false; - - while (!Cleaned) // loop until all the map is cleaned (all cut have been done) - { - int count = 0; - map<ZAI, IsotopicVector> CopyfNucleiFiliation = fNucleiFiliation; - map<ZAI, IsotopicVector>::iterator it_Filiation; - for(it_Filiation = fNucleiFiliation.begin(); it_Filiation != fNucleiFiliation.end(); it_Filiation++) // Loop on the mother ZAI - { - vector<ZAI> DautherList = it_Filiation->second.GetZAIList(); // Get the list of daughter ZAI - - for (int i = 0; i < (int)DautherList.size(); i++) //Loop on daughter - { - if(GoodNuclei.find(DautherList[i]) == GoodNuclei.end() ) // if the ZAI is not in a dealed nuclei (cutted or unknown) - { count++; - map<ZAI, IsotopicVector>::iterator it_FiliationCopy = CopyfNucleiFiliation.find(it_Filiation->first) ; - - double Daughter_BR = it_FiliationCopy->second.GetQuantity(DautherList[i]); // Get the quantity of the ZAI - it_FiliationCopy->second -= Daughter_BR * DautherList[i]; // Remove it from the daughter list - IsotopicVector FastDecayChain = (*this).GetFiliation(DautherList[i]); // Get the fast decay chain of it - - if(FastDecayChain.GetQuantity(-1, -1, -1) == 0) // Check if the FastDecayChain is known - it_FiliationCopy->second += Daughter_BR * FastDecayChain; // Add the FastDecayCHain & apply the BR for the cutted Daughter - else - { - ZAI Mother = DautherList[i]; - while (FastDecayChain.GetQuantity(-1, -1, -1) != 0 && GoodNuclei.find(Mother) == GoodNuclei.end()) - { - Mother = GetArtificialDecay(Mother); // Do an Artifial decay on the nuclei - FastDecayChain = (*this).GetFiliation(Mother); // Get the fast decay chain of it - } - - if(GoodNuclei.find(Mother) != GoodNuclei.end()) - it_FiliationCopy->second += Mother * Daughter_BR; - - else if ( FastDecayChain.GetQuantity(-1, -1, -1) == 0) - it_FiliationCopy->second += FastDecayChain * Daughter_BR; - - else - { - ERROR << "Problem in Articial Decay!! check it!!" << endl; - exit(1); - } - - } - } - } - - } - fNucleiFiliation = CopyfNucleiFiliation; - Cleaned = true; - for(it_Filiation = fNucleiFiliation.begin(); it_Filiation != fNucleiFiliation.end(); it_Filiation++) // Loop on the mother ZAI - { - vector<ZAI> DautherList = it_Filiation->second.GetZAIList(); // Get the list of daughter ZAI - - for (int i = 0; i < (int)DautherList.size(); i++) //Loop on daughter - if(GoodNuclei.find(DautherList[i]) == GoodNuclei.end() ) // if the ZAI is not in a dealed nuclei (cutted or unknown) - Cleaned = false; - } - - } - - NormalizeBranchingRatio(); - DBGL -} - - - -//________________________________________________________________________ -void CLASSNucleiFiliation::NormalizeBranchingRatio(double Value) -{ - DBGL - map<ZAI, IsotopicVector>::iterator it_Filiation; - for(it_Filiation = fNucleiFiliation.begin(); it_Filiation != fNucleiFiliation.end(); it_Filiation++) - { - it_Filiation->second *= Value/it_Filiation->second.GetSumOfAll(); - } - - DBGL -} - - -//________________________________________________________________________ -void CLASSNucleiFiliation::NormalizeBranchingRatio(ZAI Mother, double Value) -{ - DBGL - map<ZAI, IsotopicVector>::iterator it_Filiation = fNucleiFiliation.find(Mother); - - if( it_Filiation != fNucleiFiliation.end()) - it_Filiation->second *= Value/it_Filiation->second.GetSumOfAll(); - else - WARNING << "Trying to normaliza a Branching Ratio for a Mother wich are not present in the Filiatiuon List...." << endl; - - DBGL -} - - -//________________________________________________________________________ - -vector<ZAI> CLASSNucleiFiliation::GetZAIList() const -{ - - map<ZAI ,IsotopicVector > IsotopicQuantity = GetNucleiFIliation(); - map<ZAI ,IsotopicVector >::iterator it; - vector<ZAI> zailist; - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - zailist.push_back( (*it).first ); - - return zailist; - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/branches/CLASSV4.1/src/CLASSObject.cxx b/source/branches/CLASSV4.1/src/CLASSObject.cxx deleted file mode 100644 index 85413d5b2..000000000 --- a/source/branches/CLASSV4.1/src/CLASSObject.cxx +++ /dev/null @@ -1,24 +0,0 @@ -#include "CLASSObject.hxx" - -using namespace std; - - //________________________________________________________________________ - // - // CLASSObject - // - // - // - // - //________________________________________________________________________ - -ClassImp(CLASSObject) - -CLASSObject::CLASSObject() -{ - fLog = 0; -} - -CLASSObject::CLASSObject(CLASSLogger* log) -{ - fLog = log; -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/DecayDataBank.cxx b/source/branches/CLASSV4.1/src/DecayDataBank.cxx deleted file mode 100644 index 6110a657b..000000000 --- a/source/branches/CLASSV4.1/src/DecayDataBank.cxx +++ /dev/null @@ -1,242 +0,0 @@ -#include "DecayDataBank.hxx" - -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - -#include <TGraph.h> -#include <TString.h> - - -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - - -//________________________________________________________________________ -// -// DecayDataBank -// -// -// -// -//________________________________________________________________________ - -DecayDataBank::DecayDataBank():CLASSObject(new CLASSLogger("DecayDataBank.log")) -{ - - string CLASSPATH = getenv("CLASS_PATH"); - string DB_index_file = CLASSPATH + "/DATA_BASES/DECAY/ALL/Decay.idx"; - fDataBaseIndex = DB_index_file; - fOldReadMethod = false; - fFastCalculation = true; - - // Warning - INFO << " A EvolutionData has been define :" << endl; - INFO << "\t His index is : \"" << DB_index_file << "\"" << endl << endl; - -} - -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ - -//________________________________________________________________________ - -DecayDataBank::DecayDataBank(string DB_index_file, bool olfreadmethod):CLASSObject(new CLASSLogger("DecayDataBank.log")) -{ - - fDataBaseIndex = DB_index_file; - fOldReadMethod = olfreadmethod; - fFastCalculation = true; - - // Warning - INFO << " A EvolutionData has been define :" << endl; - INFO << "\t His index is : \"" << DB_index_file << "\"" << endl << endl; - -} -//________________________________________________________________________ - -DecayDataBank::DecayDataBank(CLASSLogger* log, string DB_index_file, bool olfreadmethod):CLASSObject(log) -{ - - fDataBaseIndex = DB_index_file; - fOldReadMethod = olfreadmethod; - fFastCalculation = true; - - // Warning - INFO << " A EvolutionData has been define :" << endl; - INFO << "\t His index is : \"" << DB_index_file << "\"" << endl << endl; - -} - -//________________________________________________________________________ -DecayDataBank::~DecayDataBank() -{ - -} - -//________________________________________________________________________ -IsotopicVector DecayDataBank::Evolution(const ZAI& zai, double dt) -{ -DBGL - IsotopicVector returnIV; - - map<ZAI ,EvolutionData >::iterator it = fDecayDataBank.find(zai); - - if (it == fDecayDataBank.end() ) - { - ifstream DB_index(fDataBaseIndex.c_str()); - if( !DB_index) - { - ERROR << " Can't open \"" << fDataBaseIndex << "\"" << endl; - exit (1); - } - bool zaifind = false; - string tmp; - getline(DB_index,tmp); // Read first line - while (!DB_index.eof()) - { - string line; - int start=0; - getline(DB_index,line); // Read first line - string first=StringLine::NextWord(line,start); // Read first word - - if(first.size()==0) break; // If First word is null.... quit - - int rZ=atoi(first.c_str()); // Get Z - int rA=atoi(StringLine::NextWord(line,start).c_str()); // Get A - int rI=atoi(StringLine::NextWord(line,start).c_str()); // Get Isomeric State - - if(rZ == zai.Z() && rA == zai.A() && rI == zai.I() ) - { - string file_name = StringLine::NextWord(line,start); - EvolutionData evolutionproduct = EvolutionData(GetLog(), file_name, fOldReadMethod); -#pragma omp critical(DBupdate) - {fDecayDataBank.insert( pair<ZAI ,EvolutionData >(zai, evolutionproduct) );} - returnIV = evolutionproduct.GetIsotopicVectorAt(dt); - zaifind = true; - } - } - - if(!zaifind) - { - WARNING << " Oups... Can't Find the ZAI : " - << zai.Z() << " " << zai.A() << " " << zai.I() << "!!! It will be considered as stable !!" << endl; - - EvolutionData evolutionproduct = EvolutionData(GetLog()," " , false, zai); - {fDecayDataBank.insert( pair<ZAI, EvolutionData >(zai, evolutionproduct) );} - returnIV = evolutionproduct.GetIsotopicVectorAt(dt); - - - } - - - } - else returnIV = (*it).second.GetIsotopicVectorAt(dt); - -DBGL - return returnIV; -} - -bool DecayDataBank::IsDefine(const ZAI& zai) const -{ - - map<ZAI ,EvolutionData > evolutiondb = (*this).GetDecayDataBank(); - if (evolutiondb.find(zai) != evolutiondb.end()) - return true; - else - return false; - -} - - - -//________________________________________________________________________ -// Get Decay -//________________________________________________________________________ -/*IsotopicVector DecayDataBank::GetDecay(IsotopicVector isotopicvector, cSecond t) -{ -DBGL - IsotopicVector IV; - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - if((*it).second > 0) - { - IsotopicVector ivtmp = Evolution(it->first, t) * (*it).second ; - IV += ivtmp; - } - } - -DBGL - return IV; -} -*/ - -IsotopicVector DecayDataBank::GetDecay(IsotopicVector isotopicvector, cSecond t) -{ - DBGL - IsotopicVector IV; - - // Time slicing - - if( t > 1e16) - { - ERROR << " To long decay ... cut it !!! (max = 1e16 s ~ 300 000 000 years )" << endl; - exit(1); - } - - if(fFastCalculation) - { - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - if((*it).second > 0) - { - IsotopicVector ivtmp = Evolution(it->first, t) * (*it).second ; - IV += ivtmp; - } - } - - } - else - { - int evolutionDecade[17]; - cSecond remainingTime = t; - for(int i = 16; i >= 0; i--) - { - evolutionDecade[i] = (cSecond)remainingTime/pow(10,i); - remainingTime -= evolutionDecade[i]*pow(10,i); - } - - - IV = isotopicvector; - - for (int i = 16; i >= 0; i--) - { - if(evolutionDecade[i]!=0) - { - map<ZAI ,double> isotopicquantity = IV.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - - IV = IsotopicVector(); - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - IV += Evolution(it->first, evolutionDecade[i]*pow(10,i) ) * (*it).second ; - } - } - } - DBGL - return IV; -} -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ diff --git a/source/branches/CLASSV4.1/src/DynamicalSystem.cxx b/source/branches/CLASSV4.1/src/DynamicalSystem.cxx deleted file mode 100644 index 5ec154052..000000000 --- a/source/branches/CLASSV4.1/src/DynamicalSystem.cxx +++ /dev/null @@ -1,214 +0,0 @@ -#include <cstdio> -#include <iostream> -#include <fstream> -#include <cmath> -#include <vector> -#include <algorithm> - -#include "DynamicalSystem.hxx" - -using namespace std; - -//________________________________________________________________________ -DynamicalSystem::DynamicalSystem() -{ - - SetPrecision(); - fHestimate=1.; //this value is change in DynamicalSystem::RungeKutta - fHmin=0.; - fMaxHdid=-1e30; - fMinHdid=1e30; - fIsNegativeValueAllowed=true; -} - -//________________________________________________________________________ -DynamicalSystem::DynamicalSystem(const DynamicalSystem & DS) -{ - fNVar=DS.fNVar; - fPrecision=DS.fPrecision; - fHestimate=DS.fHestimate; - fHmin=DS.fHmin; - fMaxHdid=DS.fMaxHdid; - fMinHdid=DS.fMinHdid; - fIsNegativeValueAllowed=DS.fIsNegativeValueAllowed; -} - -//________________________________________________________________________ -DynamicalSystem::~DynamicalSystem() -{ - -} - -//________________________________________________________________________ -void DynamicalSystem::RungeKutta(double *YStart,double t1, double t2, int EquationNumber) -{ - //double shortestHalfLife=gMURE->GetShortestHalfLife(); - fNVar = EquationNumber; - int nstp; - double t,hnext,hdid,h; - double *yscal=new double[fNVar]; - double *y=new double[fNVar]; - double *dydt=new double[fNVar]; - - const double MAXSTP = 10000; - const double TINY = 1.0e-30; - - - - if(fabs(t1-t2)<=TINY) - cout << "Integration time is 0." << endl; - - t=t1; - fHestimate=(t2-t1)/100; - //h=(t2 > t1) ? fabs(fHestimate) : -fabs(fHestimate); - h=fHestimate; - - // pragma omp parallel for - for (int i = 0; i < fNVar; i++) y[i] = YStart[i]; - - for ( nstp = 1; nstp <= MAXSTP; nstp++) - { - BuildEqns(t,y,dydt); - - // pragma omp parallel for - for ( int i = 0; i < fNVar; i++) - yscal[i] = fabs(y[i]) + fabs(dydt[i]*h)+TINY; - - if ( (t+h-t2) * (t+h-t1) > 0.0 ) h=t2-t; - - AdaptStepSize(y,dydt,&t,h,fPrecision,yscal,&hdid,&hnext); - - if(fMaxHdid<hdid) fMaxHdid=hdid; - if(fMinHdid>hdid) fMinHdid=hdid; - - if ((t-t2)*(t2-t1) >= 0.0) - { - // pragma omp parallel for - for (int i=0;i<fNVar;i++) YStart[i]=y[i]; - - delete [] dydt; - delete [] y; - delete [] yscal; - //cout << "The maximum step used in RK was "<<fMaxHdid<<" Step NUM in RK was "<<nstp << endl; - return; - } - if (fabs(hnext) <= fHmin) - cout << "Step size too small in RungeKutta" << endl; - - h=hnext; - } - cout << "Too many steps in routine RungeKutta" << endl; -} - -//________________________________________________________________________ -void DynamicalSystem::RK4(double *y, double *dydx, double x, double h, double *yout) -{ - //cout<<"Calling Function RK4"<<endl; - double xh,hh,h6; - - double *dym=new double[fNVar]; - double *dyt=new double[fNVar]; - double *yt=new double[fNVar]; - hh=h*0.5; - h6=h/6.0; - xh=x+hh; - - // pragma omp parallel for - for (int i=0;i<fNVar;i++) yt[i]=y[i]+hh*dydx[i]; - - BuildEqns(xh,yt,dyt); - - // pragma omp parallel for - for (int i=0;i<fNVar;i++) yt[i]=y[i]+hh*dyt[i]; - - BuildEqns(xh,yt,dym); - - for (int i=0;i<fNVar;i++) - { - yt[i]=y[i]+h*dym[i]; - dym[i] += dyt[i]; - } - - BuildEqns(x+h,yt,dyt); - // pragma omp parallel for - for (int i=0;i<fNVar;i++) - { - yout[i]=y[i]+h6*(dydx[i]+dyt[i]+2.0*dym[i]); - if(!fIsNegativeValueAllowed && yout[i]<0) - { - //cout << "Material composition is negative " - //<<"i="<<i<<" ("/*<<fEvolvingMaterial->GetComposition()[i]->GetZAI()->PrintName() - // */<<") old proportion="<<y[i]<<" new="<<yout[i] - //<<". Setting to 0." << endl; - yout[i]=0.; - } - } - delete [] yt; - delete [] dyt; - delete [] dym; -} - -//________________________________________________________________________ -void DynamicalSystem::AdaptStepSize(double *y, double *dydx, double *x, double htry, - double eps, double *yscal, double *hdid, double *hnext) -{ - //cout<<"Calling Function AdaptStepSize()"<<endl; - double xsav,hh,h,temp,errmax; - double *dysav=new double[fNVar]; - double *ysav=new double[fNVar]; - double *ytemp=new double[fNVar]; - - const double PGROW =-0.20; - const double PSHRNK =-0.25; - const double FCOR =0.06666666 ; - const double SAFETY =0.9; - const double ERRCON =6.0e-4; - - xsav=(*x); - - // pragma omp parallel for - for (int i=0;i<fNVar;i++) - { - ysav[i]=y[i]; - dysav[i]=dydx[i]; - } - h=htry; - for (;;) - { - hh=0.5*h; - RK4(ysav,dysav,xsav,hh,ytemp); - *x=xsav+hh; - - BuildEqns(*x,ytemp,dydx); - RK4(ytemp,dydx,*x,hh,y); - *x=xsav+h; - if (*x == xsav ) - { - //cout << "Step size ("<<h<<") too small in routine AdaptStepSize" << endl; - } - RK4(ysav,dysav,xsav,h,ytemp); - errmax=0.0; - - for (int i=0;i<fNVar;i++) - { - ytemp[i]=y[i]-ytemp[i]; - temp=fabs(ytemp[i]/yscal[i]); - if (errmax < temp) errmax=temp; - } - errmax /= eps; - if (errmax <= 1.0) - { - *hdid=h; - *hnext=(errmax > ERRCON ? SAFETY*h*exp(PGROW*log(errmax)) : 4.0*h); - break; - } - h=SAFETY*h*exp(PSHRNK*log(errmax)); - } - - for (int i=0;i<fNVar;i++) y[i] += ytemp[i]*FCOR; - - delete [] ytemp; - delete [] dysav; - delete [] ysav; -} - diff --git a/source/branches/CLASSV4.1/src/EquivalenceModel.cxx b/source/branches/CLASSV4.1/src/EquivalenceModel.cxx deleted file mode 100644 index 0937f2e2f..000000000 --- a/source/branches/CLASSV4.1/src/EquivalenceModel.cxx +++ /dev/null @@ -1,223 +0,0 @@ -#include "EquivalenceModel.hxx" - - -EquivalenceModel::EquivalenceModel():CLASSObject() -{ - fRelativMassPrecision = 1/10000.; // Mass precision - fMaxInterration = 100; // Max iterration in build fueld algorythum - fFirstGuessFissilContent = 0.02; - -} - -EquivalenceModel::EquivalenceModel(CLASSLogger* log):CLASSObject(log) -{ - fRelativMassPrecision = 1/10000.; // Mass precision - fMaxInterration = 100; // Max iterration in build fueld algorythm - fFirstGuessFissilContent = 0.02; - -} - -EquivalenceModel::~EquivalenceModel() -{ - -} -//________________________________________________________________________ -double EquivalenceModel::LAMBDA_TOT_FOR(double MassNeeded, vector<IsotopicVector> Stocks, string FisOrFer) -{ - double Lambda_tot = 0; - - // Calculating total mass of stock once and for all - if( fTotalFissileMassInStocks==0 || fTotalFertileMassInStocks==0 ) - { - double TotalMassInStocks = 0; - for( int i = 0 ; i<(int)Stocks.size() ; i++ ) - TotalMassInStocks += Stocks[i].GetTotalMass() ; - - if(FisOrFer == "Fis") - fTotalFissileMassInStocks = TotalMassInStocks * 1e6; // in grams - else - fTotalFertileMassInStocks = TotalMassInStocks * 1e6; // in grams - } - - double TotalMassInStocks = 0; - - if(FisOrFer == "Fis") - TotalMassInStocks = fTotalFissileMassInStocks; - else - TotalMassInStocks = fTotalFertileMassInStocks; - - // If there is not enought matter in stocks construction fails - if( MassNeeded > TotalMassInStocks ) - { - WARNING<<"Not enought "<< FisOrFer <<" material to build fuel"<<endl; - WARNING<<TotalMassInStocks<<endl; - return -1; - } - - for( int i = 0 ; i<(int)Stocks.size() ; i++ ) - { - - if( MassNeeded >= (Stocks[i].GetTotalMass()*1e6) ) - { - Lambda_tot+=1; - MassNeeded -= (Stocks[i].GetTotalMass()*1e6); - } - else - { - Lambda_tot+=MassNeeded/(Stocks[i].GetTotalMass()*1e6); - break; - } - } - - return Lambda_tot; -} -//________________________________________________________________________ -bool EquivalenceModel::Build_Fuel_According_Lambda(vector<double> &lambda,vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray, double HMMass, IsotopicVector &Fissile, IsotopicVector &Fertile) -{ - //Build the Plutonium vector from stocks - Fissile.Clear(); - for( int i = 0; i < (int)FissilArray.size(); i++ ) - Fissile += lambda[i] * FissilArray[i]; - - - double AvailablePuMass = Fissile.GetTotalMass() * 1e6; // in grams - - // Building complementary Fertile from stocks - double FertilMassNeeded = HMMass - AvailablePuMass; - double LAMBDA_FERTILE = LAMBDA_TOT_FOR( FertilMassNeeded , FertilArray , "Fer" ); - - SetLambda(lambda, (int)FissilArray.size(), (int)lambda.size()-1, LAMBDA_FERTILE); - - int j=-1; - Fertile.Clear(); - for(int i = (int)FissilArray.size() ; i < (int)FissilArray.size()+(int)FertilArray.size() ; i++) - { - j++; - Fertile += lambda[i] * FertilArray[j]; - } - - if( fabs(Fertile.GetTotalMass()*1e6 - FertilMassNeeded) > FertilMassNeeded * 1e-6) // Not enought fertile in stocks - { - WARNING << "Not enought fertile material to build fuel" << endl; - return false; - } - - return true; -} -//________________________________________________________________________ -vector<double> EquivalenceModel::BuildFuel(double BurnUp, double HMMass, vector<IsotopicVector> FissilArray, vector<IsotopicVector> FertilArray) -{ - - DBGL - vector<double> lambda ; // vector of portion of stocks taken (fissile & fertil) - - - /*** Test if there is a stock **/ - if( (int)FissilArray.size()==0 ) - { - WARNING << " No fissile stocks available ! Fuel not build" << endl; - lambda[0] = -1; - return lambda; - } - - HMMass *= 1e6; // Unit onversion : tons to gram - - /**** Some initializations **/ - fTotalFissileMassInStocks = 0; - fTotalFertileMassInStocks = 0; - - fActualFissileContent = GetBuildFuelFirstGuess(); - - for(int i = 0 ; i < (int)FissilArray.size() + (int)FertilArray.size() ; i++ ) - lambda.push_back(0); - - IsotopicVector Fertile; - IsotopicVector Fissile; - - double AvailablePuMass = 0; - double PuMassNeeded = HMMass * fActualFissileContent; - double WeightPuContent = 0; - int loopCount = 0; - - do - { - double LAMBDA_NEEDED = LAMBDA_TOT_FOR(PuMassNeeded,FissilArray,"Fis"); - if( LAMBDA_NEEDED == -1 ) // Check if previous lambda was well calculated - { - for(int i=0 ; i < (int)FissilArray.size() + (int)FertilArray.size();i++ ) - lambda[i]= -1; - - WARNING << "Not enought fissile material to build fuel" << endl; - - return lambda; - } - - SetLambda(lambda, 0, FissilArray.size()-1, LAMBDA_NEEDED ); - - bool succeed = Build_Fuel_According_Lambda(lambda, FissilArray, FertilArray, HMMass, Fissile, Fertile); - - if(!succeed) - { - for( int i = 0; i < (int)FissilArray.size() + (int)FertilArray.size(); i++ ) - lambda[i] = -1; // Error code (readed by FabricationPlant) - - return lambda; - } - - AvailablePuMass = Fissile.GetTotalMass() * 1e6; //in grams - - if (loopCount > fMaxInterration) - { - ERROR << "Too much iterration in BuildFuel Method !"; - ERROR << "Need improvement in fuel fabrication ! Ask for it or D.I.Y. !!" << endl; - exit(1); - } - - /* Calcul the quantity of this composition needed to reach the burnup */ - double MolarPuContent = GetFissileMolarFraction(Fissile, Fertile, BurnUp); - - double MeanMolarPu = Fissile.GetMeanMolarMass(); - double MeanMolarDepletedU = Fertile.GetMeanMolarMass(); - - double MeanMolar = MeanMolarPu * MolarPuContent + (1-MolarPuContent) *MeanMolarDepletedU; - - - WeightPuContent = MolarPuContent * MeanMolarPu / MeanMolar; - fActualFissileContent = MolarPuContent; //fActualFissileContent can be accessed by a derivated EquivalenModel to accelerate GetFissileMolarFraction function (exemple in EQM_MLP_Kinf) - PuMassNeeded = WeightPuContent * HMMass ; - - DBGV( "MolarPuContent " << MolarPuContent << " DeltaM " << PuMassNeeded - AvailablePuMass << " g" ); - - loopCount++; - - }while( fabs( PuMassNeeded - AvailablePuMass )/HMMass > fRelativMassPrecision ); - - - DBGV( "Weight percent fissil : " << PuMassNeeded/HMMass ); - DBGV( "Lambda vector : " ); - for(int i = 0; i < (int)FissilArray.size() + (int)FertilArray.size(); i++ ) - DBGV(lambda[i]); - - return lambda; -} -//________________________________________________________________________ -void EquivalenceModel::SetLambda(vector<double>& lambda ,int FirstStockID, int LastStockID, double LAMBDA_TOT) -{ - if( LAMBDA_TOT > LastStockID - FirstStockID + 1 ) - { - ERROR << " FATAL ERROR " << endl; - exit(0); - } - - for( int i = FirstStockID; i <= LastStockID; i++ ) //set to 0 all non touched value (to be sure) - lambda[i] = 0 ; - - int IntegerPart = floor( LAMBDA_TOT ); - double DecimalPart = LAMBDA_TOT - IntegerPart; - - for( int i=FirstStockID; i < FirstStockID +IntegerPart; i++ ) - lambda[i] = 1; - - lambda[FirstStockID + IntegerPart] = DecimalPart; -} -//________________________________________________________________________ diff --git a/source/branches/CLASSV4.1/src/EvolutionData.cxx b/source/branches/CLASSV4.1/src/EvolutionData.cxx deleted file mode 100755 index 75e5afa07..000000000 --- a/source/branches/CLASSV4.1/src/EvolutionData.cxx +++ /dev/null @@ -1,1172 +0,0 @@ -#include "EvolutionData.hxx" - -#include "CLASSLogger.hxx" -#include "CLASSConstante.hxx" -#include "StringLine.hxx" - -#include <TGraph.h> -#include <TString.h> - -#include <cmath> -#include <iostream> -#include <fstream> -#include <algorithm> - - //________________________________________________________________________ - // - // EvolutionData - // - // - // - // - //________________________________________________________________________ - - - -struct my_tolower -{ - char operator()(char c) const - { - return std::tolower(static_cast<unsigned char>(c)); - } -}; - - //To Lower Case, convert any string in lower case -string tlc(string data) -{ - transform(data.begin(), data.end(), data.begin(), my_tolower()); - return data; -} - - - -double Distance(IsotopicVector IV1, EvolutionData Evd1 ) -{ - - double d2=0; - IsotopicVector IV2 = Evd1.GetIsotopicVectorAt(0.); - - IsotopicVector IVtmp = IV1; - map<ZAI ,double> IVtmpIsotopicQuantity = IVtmp.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - - double SumOfXs = 0; - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - - SumOfXs += Evd1.GetXSForAt(0., (*it).first, 1); - SumOfXs += Evd1.GetXSForAt(0., (*it).first, 2); - SumOfXs += Evd1.GetXSForAt(0., (*it).first, 3); - - } - - - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - double Z1 = 0.0; - double Z2 = 0.0; - double XS = 0.0; - - Z1 = IV1.GetZAIIsotopicQuantity( (*it).first ); - Z2 = IV2.GetZAIIsotopicQuantity( (*it).first ); - XS = Evd1.GetXSForAt(0., (*it).first, 1) - + Evd1.GetXSForAt(0., (*it).first, 2) - + Evd1.GetXSForAt(0., (*it).first, 3); - - d2 += pow(Z1-Z2 , 2 ) * pow(XS,2); - - } - - return sqrt(d2)/SumOfXs; - -} - -double Distance(EvolutionData Evd1, IsotopicVector IV1 ) -{ - return Distance(IV1,Evd1); -} - //________________________________________________________________________ - //________________________________________________________________________ - //________________________________________________________________________ -EvolutionData operator*(EvolutionData const& evol, double F) -{ - - EvolutionData evoltmp; - - map<ZAI ,TGraph* > EvolutionData = evol.GetInventoryEvolution(); - 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) ) ); - - } - evoltmp.SetPower(evol.GetPower()*F); - evoltmp.SetFissionXS(evol.GetFissionXS()); - evoltmp.SetCaptureXS(evol.GetCaptureXS()); - evoltmp.Setn2nXS(evol.Getn2nXS()); - - - return evoltmp; - -} -//________________________________________________________________________ -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.GetInventoryEvolution(); - 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) -{ - EvolutionData EvolSum = evol1; - map<ZAI ,TGraph* > EvolutionData1 = EvolSum.GetInventoryEvolution(); - map<ZAI ,TGraph* > EvolutionData2 = evol2.GetInventoryEvolution(); - map<ZAI ,TGraph* >::iterator it; - - for(it = EvolutionData2.begin(); it != EvolutionData2.end(); it++) - { - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = EvolutionData1.insert( pair<ZAI, TGraph*> ( *it ) ); - if(!(IResult.second) ) - { - double X[(*it).second->GetN()]; - double Y[(*it).second->GetN()]; - map<ZAI ,TGraph* >::iterator it2 = EvolutionData1.find( (*it).first ); - - - for(int i = 0; i < (*it).second->GetN(); i++) - { - double y; - (*it).second->GetPoint( i, X[i], y ); - Y[i] = y + (*it2).second->Eval(X[i]); - } - IResult.first->second = new TGraph((*it).second->GetN(), X, Y); - - } - - } - EvolSum.SetInventoryEvolution(EvolutionData1); - - - EvolutionData1 = evol1.GetFissionXS(); - EvolutionData2 = evol2.GetFissionXS(); - - for(it = EvolutionData2.begin(); it != EvolutionData2.end(); it++) - { - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = EvolutionData1.insert( pair<ZAI, TGraph*> ( *it ) ); - - if(!(IResult.second) ) - { - double X[(*it).second->GetN()]; - double Y[(*it).second->GetN()]; - map<ZAI ,TGraph* >::iterator it2 = EvolutionData1.find( (*it).first ); - - - for(int i = 0; i < (*it).second->GetN(); i++) - { - double y; - (*it).second->GetPoint( i, X[i], y ); - Y[i] = y + (*it2).second->Eval(X[i]); - } - IResult.first->second = new TGraph((*it).second->GetN(), X, Y); - } - } - EvolSum.SetFissionXS(EvolutionData1); - - - EvolutionData1 = EvolSum.GetCaptureXS(); - EvolutionData2 = evol2.GetCaptureXS(); - - for(it = EvolutionData2.begin(); it != EvolutionData2.end(); it++) - { - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = EvolutionData1.insert( pair<ZAI, TGraph*> ( *it ) ); - - if(!(IResult.second) ) - { - double X[(*it).second->GetN()]; - double Y[(*it).second->GetN()]; - map<ZAI ,TGraph* >::iterator it2 = EvolutionData1.find( (*it).first ); - - - for(int i = 0; i < (*it).second->GetN(); i++) - { - double y; - (*it).second->GetPoint( i, X[i], y ); - Y[i] = y + (*it2).second->Eval(X[i]); - } - IResult.first->second = new TGraph((*it).second->GetN(), X, Y); - } - } - EvolSum.SetCaptureXS(EvolutionData1); - - - EvolutionData1 = EvolSum.Getn2nXS(); - EvolutionData2 = evol2.Getn2nXS(); - - for(it = EvolutionData2.begin(); it != EvolutionData2.end(); it++) - { - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - - IResult = EvolutionData1.insert( pair<ZAI, TGraph*> ( *it ) ); - - if(!(IResult.second) ) - { - double X[(*it).second->GetN()]; - double Y[(*it).second->GetN()]; - map<ZAI ,TGraph* >::iterator it2 = EvolutionData1.find( (*it).first ); - - - for(int i = 0; i < (*it).second->GetN(); i++) - { - double y; - (*it).second->GetPoint( i, X[i], y ); - Y[i] = y + (*it2).second->Eval(X[i]); - } - IResult.first->second = new TGraph((*it).second->GetN(), X, Y); - } - } - EvolSum.Setn2nXS(EvolutionData1); - - return EvolSum; -} - - - - -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ -//________________________________________________________________________ - - -ClassImp(EvolutionData) - - - -EvolutionData::EvolutionData():CLASSObject() -{ - fIsCrossSection = false; - fPower = 0; - fCycleTime = 0; - fKeff = 0; - fFlux = 0; -} - - //________________________________________________________________________ -EvolutionData::EvolutionData(CLASSLogger* log):CLASSObject(log) -{ - fIsCrossSection = false; - fPower = 0; - fCycleTime = 0; - fKeff = 0; - fFlux = 0; -} - - //________________________________________________________________________ -EvolutionData::EvolutionData(CLASSLogger* log, string DB_file, bool oldread, ZAI zai):CLASSObject(log) -{ - - fIsCrossSection = false; - fDB_file = DB_file; - fPower = 0; - fCycleTime = 0; - fKeff = 0; - fFlux = 0; - - if(zai != ZAI(0,0,0)) - AddAsStable(zai); - else - ReadDB( fDB_file, oldread); // Read Evolution Produc DB file name - - - - -} - - //________________________________________________________________________ -EvolutionData::~EvolutionData() -{ - -} -//________________________________________________________________________ -void EvolutionData::DeleteEvolutionData() -{ - - map<ZAI ,TGraph* >::iterator it_del; - - for( it_del = fInventoryEvolution.begin(); it_del != fInventoryEvolution.end(); it_del++) - { - delete (*it_del).second; - (*it_del).second = 0; - } - for( it_del = fFissionXS.begin(); it_del != fFissionXS.end(); it_del++) - { - delete (*it_del).second; - (*it_del).second = 0; - } - for( it_del = fCaptureXS.begin(); it_del != fCaptureXS.end(); it_del++) - { - delete (*it_del).second; - (*it_del).second = 0; - } - for( it_del = fn2nXS.begin(); it_del != fn2nXS.end(); it_del++) - { - delete (*it_del).second; - (*it_del).second = 0; - } - - - delete fKeff; - delete fFlux; - - fInventoryEvolution.clear(); - fFissionXS.clear(); - fCaptureXS.clear(); - fn2nXS.clear(); - - fFlux = 0; - fKeff = 0; - -} - - -bool EvolutionData::NucleiInsert(pair<ZAI, TGraph*> zaitoinsert) -{ - - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - IResult = fInventoryEvolution.insert( zaitoinsert); - return IResult.second; - -} - -bool EvolutionData::FissionXSInsert(pair<ZAI, TGraph*> zaitoinsert) -{ - - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - IResult = fFissionXS.insert( zaitoinsert); - return IResult.second; - -} - -bool EvolutionData::CaptureXSInsert(pair<ZAI, TGraph*> zaitoinsert) -{ - - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - IResult = fCaptureXS.insert( zaitoinsert); - return IResult.second; - -} - -bool EvolutionData::n2nXSInsert(pair<ZAI, TGraph*> zaitoinsert) -{ - - pair<map<ZAI, TGraph*>::iterator, bool> IResult; - IResult = fn2nXS.insert( zaitoinsert); - return IResult.second; - -} - - //________________________________________________________________________ -void EvolutionData::AddAsStable(ZAI zai) -{ - - double time[2] = {0, (500*cYear)}; - double quantity[2] = {1., 1.}; - - fInventoryEvolution.insert(pair<ZAI ,TGraph* >(zai, new TGraph(2, time, quantity) ) ); - -} - - //________________________________________________________________________ -Double_t EvolutionData::Interpolate(double t, TGraph& EvolutionGraph) -{ - - TString fOption; - return (double)EvolutionGraph.Eval(t,0x0,fOption); - -} - - //________________________________________________________________________ -TGraph* EvolutionData::GetEvolutionTGraph(const ZAI& zai) -{ - - map<ZAI ,TGraph *>::iterator it = GetInventoryEvolution().find(zai) ; - - if ( it != GetInventoryEvolution().end() ) - return it->second; - else - return new TGraph(); - - -} - - //________________________________________________________________________ -IsotopicVector EvolutionData::GetIsotopicVectorAt(double t) -{ - - IsotopicVector IsotopicVectorTmp; - map<ZAI ,TGraph* >::iterator it; - for( it = fInventoryEvolution.begin(); it != fInventoryEvolution.end(); it++ ) - { - IsotopicVectorTmp.Add( (*it).first, Interpolate(t, *((*it).second)) ); - } - - - return IsotopicVectorTmp; -} - - //________________________________________________________________________ -double EvolutionData::GetXSForAt(double t, ZAI zai, int ReactionId) -{ - - map<ZAI ,TGraph* > XSEvol; - switch(ReactionId) - { - case 1: XSEvol = GetFissionXS(); - break; - case 2: XSEvol = GetCaptureXS(); - break; - case 3: XSEvol = Getn2nXS(); - break; - default:ERROR << " Wrong ReactionId !!" << endl; - exit(1); - } - - map<ZAI ,TGraph* >::iterator it = XSEvol.find(zai); - - - if (it == XSEvol.end()) - return 0.; - else - return Interpolate(t, *((*it).second) ); - -} - - - - - - - - - - - - //________________________________________________________________________ - - //________________________________________________________________________ - - - - -void EvolutionData::ReadDB(string DBfile, bool oldread) -{ - - if(oldread) - { - - OldReadDB(DBfile); - return; - } - - ReadInfo(); // Read the .info associeted - - ifstream DecayDB(DBfile.c_str()); // Open the File - if(!DecayDB) //check if file is correctly open - { - ERROR << " \n Can't open \"" << DBfile << "\"\n" << endl; - } - vector<double> vTime; - - string line; - int start = 0; - - getline(DecayDB, line); - if( tlc(StringLine::NextWord(line, start, ' ')) != "time") - { - ERROR << " Bad Database file : " << DBfile << endl; - ERROR << " The first Line MUST be the time line !!!" << endl; - exit (1); - } - - while(start < (int)line.size()) - vTime.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - fFinalTime = vTime.back(); - double Time[vTime.size()]; - for(int i=0; i < (int)vTime.size();i++) - Time[i] = vTime[i]; - const int NTimeStep = sizeof(Time)/sizeof(double); - - - enum { Keff=1, Flux, Inv, XSFis, XSCap, XSn2n }; - - map<string, int> keyword_map; - keyword_map["keff"] = Keff; - keyword_map["flux"] = Flux; - keyword_map["xsfis"] = XSFis; - keyword_map["xscap"] = XSCap; - keyword_map["xsn2n"] = XSn2n; - keyword_map["inv"] = Inv; - - getline(DecayDB, line); - do - { - start = 0; - switch (keyword_map[tlc(StringLine::NextWord(line, start, ' '))]) - { - case Keff: - ReadKeff(line, Time, NTimeStep); - break; - - case Flux: - ReadFlux(line, Time, NTimeStep); - break; - - case Inv: - ReadInv(line, Time, NTimeStep); - break; - - case XSFis: - ReadXSFis(line, Time, NTimeStep); - break; - - case XSCap: - ReadXSCap(line, Time, NTimeStep); - break; - - case XSn2n: - ReadXSn2n(line, Time, NTimeStep); - break; - - - default: - break; - } - - getline(DecayDB, line); - - - }while ( !DecayDB.eof() ); - - fHeavyMetalMass = cZAIMass.GetMass( GetIsotopicVectorAt(0.).GetActinidesComposition() ); - - DecayDB.close(); - - -} - -void EvolutionData::ReadKeff(string line, double* time, int NTimeStep) -{ - if(fKeff != 0) - delete fKeff; - - int start = 0; - if( tlc(StringLine::NextWord(line, start, ' ')) != "keff" ) // Check the keyword - { - ERROR << " Bad keyword : \"keff\" not found !" << endl; - exit(1); - } - - - double Keff[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - Keff[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - - - fKeff = new TGraph(NTimeStep, time, Keff); // Add the TGraph - - - - -} - -void EvolutionData::ReadFlux(string line, double* time, int NTimeStep) -{ - - if(fFlux != 0) - delete fFlux; - - int start = 0; - - if( tlc(StringLine::NextWord(line, start, ' ')) != "flux" ) // Check the keyword - { - ERROR << " Bad keyword : \"flux\" not found !" << endl; - exit(1); - } - - double Flux[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - Flux[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - - - fFlux = new TGraph(NTimeStep, time, Flux); // Add the TGraph - - - -} - - -void EvolutionData::ReadInv(string line, double* time, int NTimeStep) -{ - - - int start = 0; - if( tlc(StringLine::NextWord(line, start, ' ')) != "inv" ) // Check the keyword - { - ERROR << " Bad keyword : \"inv\" not found !" << endl; - exit(1); - } - // Read the Z A I - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - double Inv[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - Inv[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - // Add the TGraph - fInventoryEvolution.insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph(NTimeStep, time, Inv) ) ); - } - - -} - - -void EvolutionData::ReadXSFis(string line, double* time, int NTimeStep) -{ - - - int start = 0; - if( tlc(StringLine::NextWord(line, start, ' ')) != "xsfis" ) // Check the keyword - { - ERROR << " Bad keyword : \"xsfis\" not found !" << endl; - exit(1); - } - // Read the Z A I - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - double XSFis[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - XSFis[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - - // Add the TGraph - fFissionXS.insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph(NTimeStep, time, XSFis) ) ); - } - - -} - -void EvolutionData::ReadXSCap(string line, double* time, int NTimeStep) -{ - - - int start = 0; - if( tlc(StringLine::NextWord(line, start, ' ')) != "xscap" ) // Check the keyword - { - ERROR << " Bad keyword : \"xscap\" not found !" << endl; - exit(1); - } - // Read the Z A I - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - double XSCap[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - XSCap[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - - // Add the TGraph - fCaptureXS.insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph(NTimeStep, time, XSCap) ) ); - } - - -} - -void EvolutionData::ReadXSn2n(string line, double* time, int NTimeStep) -{ - - - int start = 0; - if( tlc(StringLine::NextWord(line, start, ' ')) != "xsn2n" ) // Check the keyword - { - ERROR << " Bad keyword : \"xsn2n\" not found !" << endl; - exit(1); - } - // Read the Z A I - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - double XSn2n[NTimeStep]; - - int i = 0; - while(start < (int)line.size() && i < NTimeStep ) // Read the Data - { - XSn2n[i] = atof(StringLine::NextWord(line, start, ' ').c_str()) ; - i++; - } - // Add the TGraph - fn2nXS.insert(pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph(NTimeStep, time, XSn2n) ) ); - } - - -} - - - -void EvolutionData::ReadInfo() -{ - string InfoDBFile = fDB_file.erase(fDB_file.size()-3,fDB_file.size()); - InfoDBFile += "Info"; - ifstream InfoDB_tmp(InfoDBFile.c_str()); // Open the File - - if(!InfoDB_tmp) - { - InfoDBFile = InfoDBFile.erase(InfoDBFile.size()-4,InfoDBFile.size()); - InfoDBFile += "info"; - - } - InfoDB_tmp.close(); - - ifstream InfoDB(InfoDBFile.c_str()); // Open the File - if(!InfoDB) - { - WARNING << "!!ERROR!! !!!EvolutionData!!! \n Can't open \"" << InfoDBFile << "\"\n" << endl; - } - - int start = 0; - string line; - getline(InfoDB, line); - if ( tlc(StringLine::NextWord(line, start, ' ')) == "reactor") - fReactorType = StringLine::NextWord(line, start, ' '); - - start = 0; - getline(InfoDB, line); - if (tlc(StringLine::NextWord(line, start, ' ')) == "fueltype") - fFuelType = StringLine::NextWord(line, start, ' '); - start = 0; - getline(InfoDB, line); - if ( tlc(StringLine::NextWord(line, start, ' ')) == "cycletime") - fCycleTime = atof(StringLine::NextWord(line, start, ' ').c_str());; - getline(InfoDB, line); // Assembly HM Mass - start = 0; - getline(InfoDB, line); - if ( tlc(StringLine::NextWord(line, start, ' ')) == "constantpower") - fPower = atof(StringLine::NextWord(line, start, ' ').c_str()); - InfoDB.close(); -} - -void EvolutionData::OldReadDB(string DBfile) -{ - - - ifstream DecayDB(DBfile.c_str()); // Open the File - if(!DecayDB) - { - ERROR << " Can't open \"" << DBfile << "\"\n" << endl; - } - vector<double> vTime; - vector<double> vTimeErr; - - string line; - int start = 0; - - getline(DecayDB, line); - if( StringLine::NextWord(line, start, ' ') != "time") - { - ERROR << " Bad Database file : " << DBfile << endl; - exit (1); - } - - while(start < (int)line.size()) - vTime.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - fFinalTime = vTime.back(); - double Time[vTime.size()]; - for(int i=0; i < (int)vTime.size();i++) - Time[i] = vTime[i]; - vector<double> vFlux; - start = 0; - getline(DecayDB, line); - string tmp = StringLine::NextWord(line, start, ' '); - if ( tmp == "keff" || tmp == "Keff" ) - { - vector<double> vKeff; - while(start < (int)line.size()) - vKeff.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - double Keff[vKeff.size()]; - for(int i=0; i < (int)vKeff.size();i++) - Keff[i] = vKeff[i]; - - fKeff = new TGraph(vTime.size(), Time, Keff); - - start = 0; - getline(DecayDB, line); - if (StringLine::NextWord(line, start, ' ') == "flux") - { - - - while(start < (int)line.size()) - vFlux.push_back(atof(StringLine::NextWord(line, start, ' ').c_str())); - - double Flux[vFlux.size()]; - for(int i=0; i < (int)vFlux.size();i++) - Flux[i] = vFlux[i]; - - fFlux = new TGraph(vTime.size(), Time, Flux); - - } - } - - - do - { - - - start = 0; - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - double DPQuantity[vTime.size()]; - for(int k = 0; k < (int)vTime.size(); k++ ) - DPQuantity[k] = 0; - - - ZAI zaitmp(Z, A, I); - int i=0; - while(start < (int)line.size()) - { - double DPQuantityTmp = atof(StringLine::NextWord(line, start, ' ').c_str()); - DPQuantity[i] = (double)DPQuantityTmp; - i++; - - } - TGraph* tgraphtmp = new TGraph((int)vTime.size()-1, Time, DPQuantity); - fInventoryEvolution.insert(pair<ZAI ,TGraph* >(zaitmp, tgraphtmp) ); - } - - getline(DecayDB, line); - if(line == "" || line == "CrossSection" ) break; - }while (!DecayDB.eof() ); - - if(line == "CrossSection") - { - fIsCrossSection = true; - getline(DecayDB, line); - - if (line == "Fission") - { - getline(DecayDB, line); - - do - { - double DPQuantity[vTime.size()]; - for(int k = 0; k < (int)vTime.size(); k++ ) - DPQuantity[k] = 0; - - start = 0; - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - if(A!=0 && Z!=0) - { - - - ZAI zaitmp(Z, A, I); - int i=0; - while(start < (int)line.size()) - { - long double DPQuantityTmp = atof(StringLine::NextWord(line, start, ' ').c_str()); - DPQuantity[i] = (double)DPQuantityTmp; - i++; - - } - fFissionXS.insert(pair<ZAI ,TGraph* >(zaitmp, new TGraph(vTime.size()-1, Time, DPQuantity) ) ); - } - getline(DecayDB, line); - if(line == "" || line == "Capture" ) break; - }while ( !DecayDB.eof() ); - } - - if (line == "Capture") - { - getline(DecayDB, line); // Nuclei is given with "A Z" - - do - { - double DPQuantity[vTime.size()]; - for(int k = 0; k < (int)vTime.size(); k++ ) - DPQuantity[k] = 0; - - - start = 0; - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - - - ZAI zaitmp(Z, A, I); - int i=0; - while(start < (int)line.size()) - { - long double DPQuantityTmp = atof(StringLine::NextWord(line, start, ' ').c_str()); - DPQuantity[i] = (double)DPQuantityTmp; - i++; - - } - fCaptureXS.insert(pair<ZAI ,TGraph* >(zaitmp, new TGraph(vTime.size()-1, Time, DPQuantity) ) ); - } - getline(DecayDB, line); // Nuclei is given with "A Z" - if(line == "" || line == "n2n" ) break; - }while ( !DecayDB.eof() ); - - } - - if (line == "n2n") - { - - getline(DecayDB, line); // Nuclei is given with "A Z" - - do - { - double DPQuantity[vTime.size()]; - for(int k = 0; k < (int)vTime.size(); k++ ) - DPQuantity[k] = 0; - - start = 0; - int Z = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int A = atoi(StringLine::NextWord(line, start, ' ').c_str()); - int I = atoi(StringLine::NextWord(line, start, ' ').c_str()); - - if(A!=0 && Z!=0) - { - - - ZAI zaitmp(Z, A, I); - int i=0; - while(start < (int)line.size()) - { - long double DPQuantityTmp = atof(StringLine::NextWord(line, start, ' ').c_str()); - DPQuantity[i] = (double)DPQuantityTmp; - i++; - - } - fn2nXS.insert(pair<ZAI ,TGraph* >(zaitmp, new TGraph(vTime.size()-1, Time, DPQuantity) ) ); - } - getline(DecayDB, line); // Nuclei is given with "A Z" - if(line == "" ) break; - - }while ( !DecayDB.eof() ); - } - - } - DecayDB.close(); - start = 0; - - string InfoDBFile = DBfile.erase(DBfile.size()-3,DBfile.size()); - InfoDBFile += "info"; - ifstream InfoDB(InfoDBFile.c_str()); // Open the File - if(!InfoDB) - { - INFO << " Can't open \"" << InfoDBFile << "\"\n" << endl; - return; - } - - start = 0; - getline(InfoDB, line); - if (StringLine::NextWord(line, start, ' ') == "Reactor") - fReactorType = StringLine::NextWord(line, start, ' '); - start = 0; - getline(InfoDB, line); - if (StringLine::NextWord(line, start, ' ') == "Fueltype") - fFuelType = StringLine::NextWord(line, start, ' '); - start = 0; - getline(InfoDB, line); - if (StringLine::NextWord(line, start, ' ') == "CycleTime") - fCycleTime = atof(StringLine::NextWord(line, start, ' ').c_str());; - getline(InfoDB, line); // Assembly HM Mass - start = 0; - getline(InfoDB, line); - if (StringLine::NextWord(line, start, ' ') == "ConstantPower") - fPower = atof(StringLine::NextWord(line, start, ' ').c_str()); - getline(InfoDB, line); // cutoff - getline(InfoDB, line); // NUmber of Nuclei - start = 0; - getline(InfoDB, line); - if (StringLine::NextWord(line, start, ' ') == "NormalizationFactor") - { - double NormFactor = atof(StringLine::NextWord(line, start, ' ').c_str()); - fPower = fPower * NormFactor; - double Flux[vFlux.size()]; - for(int i=0; i < (int)vFlux.size();i++) - Flux[i] = vFlux[i]; - - fFlux = new TGraph(vTime.size()-1, Time, Flux); - } - InfoDB.close(); -} - - - - - diff --git a/source/branches/CLASSV4.1/src/FabricationPlant.cxx b/source/branches/CLASSV4.1/src/FabricationPlant.cxx deleted file mode 100644 index 341802fc7..000000000 --- a/source/branches/CLASSV4.1/src/FabricationPlant.cxx +++ /dev/null @@ -1,693 +0,0 @@ -#include "FabricationPlant.hxx" - -#include "Storage.hxx" -#include "Reactor.hxx" -#include "EvolutionData.hxx" -#include "PhysicsModels.hxx" -#include "IsotopicVector.hxx" -#include "Scenario.hxx" -#include "CLASSLogger.hxx" -#include "CLASSConstante.hxx" - - - - -#include "TMatrixT.h" - -#include <sstream> -#include <string> -#include <iostream> -#include <cmath> -#include <algorithm> - -ClassImp(FabricationPlant) - - //________________________________________________________________________ - //________________________________________________________________________ - //________________________________________________________________________ - // - // FabricationPlant - // - // - // - // - //________________________________________________________________________ - //________________________________________________________________________ - - -FabricationPlant::FabricationPlant():CLASSFacility(16) -{ - SetName("F_FabricationPLant."); - - fReUsable = 0; - fIsReusable = false; -} - - -FabricationPlant::FabricationPlant(CLASSLogger* log, double fabricationtime):CLASSFacility(log, fabricationtime, 16) -{ -DBGL - SetName("F_FabricationPLant."); - - fFiFo = false; - fSubstitutionFuel = false; - fSubstitutionFissile = false; - fIsReplaceFissileStock = false; - - fReUsable = 0; - fIsReusable = false; - - INFO << " A FabricationPlant has been define :" << endl; - INFO << "\t Chronological Stock Priority has been set! "<< endl; - INFO << "\t Fabrication time set to \t " << (double)(GetCycleTime()/cYear) << " year" << endl << endl; -DBGL -} - - - - //________________________________________________________________________ -FabricationPlant::~FabricationPlant() -{ - - -} - - - //________________________________________________________________________ -void FabricationPlant::SetSeparartionEfficiencyIV(ZAI zai, double factor) -{ - - pair<map<ZAI, double>::iterator, bool> IResult; - if(factor > 1) factor = 1; - - if(factor > 0) - { - IResult = fSeparationLostFraction.GetIsotopicQuantity().insert( pair<ZAI ,double>(zai, 1 - factor)); - if(!IResult.second) - IResult.first->second = 1 - factor; - } - -} - - - - //________________________________________________________________________ - //_______________________________ Evolution ______________________________ - //________________________________________________________________________ -void FabricationPlant::Evolution(cSecond t) -{ - - // Check if the FabricationPlant has been created ... - if(t == fInternalTime && t != 0) return; - // Make the evolution for the FabricationPlant ... - FabricationPlantEvolution(t); - //Update Inside IsotopicVector - UpdateInsideIV(); - // ... And Finaly update the AbsoluteInternalTime - fInternalTime = t; - -} - - //________________________________________________________________________ -void FabricationPlant::FabricationPlantEvolution(cSecond t) -{ -DBGL - map<int ,cSecond >::iterator it; - for( it = fReactorNextStep.begin(); it!= fReactorNextStep.end(); it++ ) - { - double R_CreactionTime = GetParc()->GetReactor()[ (*it).first ]->GetCreationTime(); - double R_LifeTime = GetParc()->GetReactor()[ (*it).first ]->GetLifeTime(); - - int ReactorId = (*it).first; - pair<CLASSFuel, double> R_Fuel = GetParc()->GetReactor()[ReactorId]->GetFuelPlan()->GetFuelAt( t + GetCycleTime() ); - double R_BU = R_Fuel.second; - double R_Power = GetParc()->GetReactor()[ReactorId]->GetPower(); - double R_HMMass = GetParc()->GetReactor()[ReactorId]->GetHeavyMetalMass(); - cSecond R_CycleTime = cSecond (R_BU / R_Power * R_HMMass * 1e9 *3600*24); - if( R_CycleTime < GetCycleTime()) - { - ERROR << "Reactor Cycle Time is shorter than Fabrication Time of the fuel, we cannot deal it upto now!!!"<< endl; - exit(1); - } - - if( t + GetCycleTime() >= R_CreactionTime - && t + GetCycleTime() < R_CreactionTime + R_LifeTime) - { - if( (*it).second == t ) - { -#pragma omp critical(FuelBuild) - { - if( R_Fuel.first.GetPhysicsModels() ) - { - BuildFuelForReactor( (*it).first, t ); - } - (*it).second += R_CycleTime; - } - - } - else if ( (*it).second - R_CycleTime + GetCycleTime() >= t && (*it).second - R_CycleTime < t ) - { - map<int ,IsotopicVector >::iterator it2 = fReactorFuturIV.find( (*it).first ); - if (it2 != fReactorFuturIV.end()) - (*it2).second = GetDecay((*it2).second, t - fInternalTime ); - } - } - } - - -DBGL -} - -void FabricationPlant::UpdateInsideIV() -{ - DBGL - fInsideIV = IsotopicVector(); - - map< int,IsotopicVector >::iterator it; - for( it = fReactorFuturIV.begin(); it != fReactorFuturIV.end(); it++ ) - fInsideIV += (*it).second; - - DBGL -} - - - //________________________________________________________________________ -void FabricationPlant::BuildFuelForReactor(int ReactorId, cSecond t) -{ - DBGL - if(fFissileStorage.size() == 0) - { - ERROR << " One need at least one Fissile storage to build fuel " << endl; - ERROR << " Use AddFissileStorage to add a stock to provide fissil material... " << endl; - ERROR << " One need at least one Fissile storage to build fuel " << endl; - exit(1); - } - - - - double R_HM_Mass = GetParc()->GetReactor()[ ReactorId ]->GetHeavyMetalMass(); - double R_CycleTime = GetParc()->GetReactor()[ ReactorId ]->GetCycleTime(); - double R_Power = GetParc()->GetReactor()[ ReactorId ]->GetPower(); - - pair<CLASSFuel, double > FuelBU = GetParc()->GetReactor()[ReactorId]->GetFuelPlan()->GetFuelAt(t+GetCycleTime()) ; - PhysicsModels FuelType = *FuelBU.first.GetPhysicsModels(); - double R_BU = FuelBU.second; - - fFissileList = FuelType.GetEquivalenceModel()->GetFissileList(); - BuildFissileArray(); - - // If there is not enough Fissile its possible to take from an infinite fissile stock - if( !fIsReplaceFissileStock && fSubstitutionFissile )//if it is defined and wanted - { IsotopicVector CooledSeparatedIV = GetDecay( fSubstitutionFissileIV , GetCycleTime()); - fFissileArray.push_back( CooledSeparatedIV/ CooledSeparatedIV.GetTotalMass() * R_HM_Mass ); - } - - - fFertileList = FuelType.GetEquivalenceModel()->GetFertileList(); - - - if(fFertileStorage.size() != 0) // If the fertile need to be taken in stock - BuildFertileArray(); - else // if their is not stock and the fertile come from outside of the park - { - fFertileArray.push_back( fFertileList / fFertileList.GetTotalMass() * R_HM_Mass ); - DBGV("Fertile Array size : "<<fFertileArray.size()) - } - - - vector<double> LambdaArray = FuelType.GetEquivalenceModel()->BuildFuel(R_BU, R_HM_Mass, fFissileArray, fFertileArray); - - double LambdaSum = 0; - for(int i = 0; i < (int)fFissileArray.size();i++) - LambdaSum += LambdaArray[i]; - - if(LambdaArray[0] != -1 && LambdaSum > 0 ) - { - DBGV("Building process suceed: ") - - IsotopicVector IV = BuildFuelFromEqModel(LambdaArray); - EvolutionData EvolDB = FuelType.GenerateEvolutionData( GetDecay(IV,fCycleTime), R_CycleTime, R_Power); - - { - pair<map<int, IsotopicVector>::iterator, bool> IResult; - IResult = fReactorFuturIV.insert( pair<int, IsotopicVector>(ReactorId, IV) ); - if(!IResult.second) - IResult.first->second = IV; - } - { - pair<map<int, EvolutionData>::iterator, bool> IResult; - IResult = fReactorFuturDB.insert( pair<int, EvolutionData>(ReactorId,EvolDB) ); - if(!IResult.second) - IResult.first->second = EvolDB; - } - fInsideIV += IV; - AddCumulativeIVIn(IV); - DBGL - return; - } - else - { - DBGV("Building process failed: ") - if (!fSubstitutionFuel) - { DBGV("Reactor not loaded ") - { - EvolutionData EmptyDB; - pair<map<int, EvolutionData>::iterator, bool> IResult; - IResult = fReactorFuturDB.insert( pair<int, EvolutionData>(ReactorId,EmptyDB) ); - if(!IResult.second) - IResult.first->second = EmptyDB; - } - { - IsotopicVector EmptyIV; - pair<map<int, IsotopicVector>::iterator, bool> IResult; - IResult = fReactorFuturIV.insert( pair<int, IsotopicVector>(ReactorId,EmptyIV) ); - if(!IResult.second) - IResult.first->second = EmptyIV; - } - } - else - { DBGV("Using substitute : ") - if(fSubstitutionFissile)//if the build fail possibility to take a fissile material from an infinite fissile stock (if infinite stock defined) - { DBGV("->From an infinite stock") - //make the user specified fissil composition to decay the fabrication time - IsotopicVector CooledSeparatedIV = GetDecay(fSubstitutionFissileIV, GetCycleTime()); - //Building the fuel : - double MolarFissileContent = FuelType.GetEquivalenceModel()->GetFissileMolarFraction(CooledSeparatedIV,fFertileList, R_BU); - IsotopicVector BuiltFuel = MolarFissileContent*fSubstitutionFissileIV/fSubstitutionFissileIV.GetSumOfAll() + (1-MolarFissileContent)*fFertileList/fFertileList.GetSumOfAll(); - IsotopicVector IV = BuiltFuel/ BuiltFuel.GetTotalMass() * R_HM_Mass; - - //Generating the EvolutionData - EvolutionData EvolDB = FuelType.GenerateEvolutionData( GetDecay(IV,fCycleTime), R_CycleTime, R_Power); - - { - pair<map<int, IsotopicVector>::iterator, bool> IResult; - IResult = fReactorFuturIV.insert( pair<int, IsotopicVector>(ReactorId, IV) ); - if(!IResult.second) - IResult.first->second = IV; - } - { - pair<map<int, EvolutionData>::iterator, bool> IResult; - IResult = fReactorFuturDB.insert( pair<int, EvolutionData>(ReactorId,EvolDB) ); - if(!IResult.second) - IResult.first->second = EvolDB; - } - - GetParc()->AddOutIncome(IV); - fInsideIV += IV; - AddCumulativeIVIn(IV); - - DBGL - } - else - { DBGV("->From a fixed data base") - IsotopicVector IV = fSubstitutionEvolutionData.GetIsotopicVectorAt(0); - EvolutionData evolutiondb = fSubstitutionEvolutionData * R_HM_Mass / IV.GetTotalMass(); - - IV = IV* R_HM_Mass / IV.GetTotalMass(); - { - pair<map<int, IsotopicVector>::iterator, bool> IResult; - IResult = fReactorFuturIV.insert( pair<int, IsotopicVector>(ReactorId, IV) ); - if(!IResult.second) - IResult.first->second = IV; - } - { - pair<map<int, EvolutionData>::iterator, bool> IResult; - IResult = fReactorFuturDB.insert( pair<int, EvolutionData>(ReactorId,evolutiondb) ); - if(!IResult.second) - IResult.first->second = evolutiondb; - } - GetParc()->AddOutIncome( IV ); - fInsideIV += IV; - AddCumulativeIVIn(IV); - } - - }DBGL - ResetArrays(); - - return; - } -DBGL -} - - - -void FabricationPlant::BuildFissileArray() -{ -DBGL - - for(int i = 0; i < (int)fFissileStorage.size(); i++) - { - - vector<IsotopicVector> IVArray = fFissileStorage[i]->GetIVArray(); - - for(int j = 0; j < (int)IVArray.size(); j++) - { - - IsotopicVector SeparatedIV = Separation(IVArray[j], fFissileList).first; - - if(Norme(SeparatedIV) != 0) - { - IsotopicVector CooledSeparatedIV = GetDecay( SeparatedIV , GetCycleTime()); - - fFissileArray.push_back( CooledSeparatedIV ); - fFissileArrayAdress.push_back( pair<int,int>(i,j) ); - fFissileArrayTime.push_back(fFissileStorage[i]->GetIVArrayArrivalTime()[j]); - } - - } - - } - - SortArray(0); -DBGL -} - - -void FabricationPlant::BuildFertileArray() -{ -DBGL - - for(int i = 0; i < (int)fFertileStorage.size(); i++) - { - vector<IsotopicVector> IVArray = fFertileStorage[i]->GetIVArray(); - for(int j = 0; j < (int)IVArray.size(); j++) - { - - IsotopicVector SeparatedIV = Separation(IVArray[j], fFertileList).first; - if(Norme(SeparatedIV) != 0) - { - IsotopicVector CooledSeparatedIV = GetDecay( SeparatedIV , GetCycleTime()); - - fFertileArray.push_back( CooledSeparatedIV ); - fFertileArrayAdress.push_back( pair<int,int>(i,j) ); - fFertileArrayTime.push_back(fFertileStorage[i]->GetIVArrayArrivalTime()[j]); - } - } - - } - - SortArray(1); -DBGL -} - -void FabricationPlant::SortArray(int i) -{ - - - vector<IsotopicVector> IVArray; - vector<cSecond> TimeArray; - vector< pair<int,int> > AdressArray; - - if(i==0) //Fissile - { - IVArray = fFissileArray; - TimeArray = fFissileArrayTime; - AdressArray = fFissileArrayAdress; - } - else if (i==1) //Fertile - { - IVArray = fFertileArray; - TimeArray = fFertileArrayTime; - AdressArray = fFertileArrayAdress; - - } - - if(fFiFo) - { - for(int j = 0; j < (int)TimeArray.size(); j++) - { - for (int k = j+1; k < (int)TimeArray.size(); k++) - { - cSecond time_tmp = TimeArray[j]; - pair<int,int> Adress_tmp = AdressArray[j]; - IsotopicVector IV_tmp = IVArray[j]; - - if(time_tmp > TimeArray[k]) - { - TimeArray[j] = TimeArray[k]; - TimeArray[k] = time_tmp; - - AdressArray[j] = AdressArray[k]; - AdressArray[k] = Adress_tmp; - - IVArray[j] = IVArray[k]; - IVArray[k] = IV_tmp; - } - - } - } - } - else - { - for(int j = 0; j < (int)fFissileArrayTime.size(); j++) - { - for (int k = j+1; k < (int)TimeArray.size(); k++) - { - cSecond time_tmp = TimeArray[j]; - pair<int,int> Adress_tmp = AdressArray[j]; - IsotopicVector IV_tmp = IVArray[j]; - - if(time_tmp < TimeArray[k]) - { - TimeArray[j] = TimeArray[k]; - TimeArray[k] = time_tmp; - - AdressArray[j] = AdressArray[k]; - AdressArray[k] = Adress_tmp; - - IVArray[j] = IVArray[k]; - IVArray[k] = IV_tmp; - } - - } - } - } - - - if(i==0) //Fissile - { - fFissileArray = IVArray; - fFissileArrayTime = TimeArray; - fFissileArrayAdress = AdressArray; - } - else if (i==1) //Fertile - { - fFertileArray = IVArray; - fFertileArrayTime = TimeArray; - fFertileArrayAdress = AdressArray; - - } - - -} - - - - -//________________________________________________________________________ -void FabricationPlant::SetSubstitutionFuel(EvolutionData fuel, bool ReplaceTheStock) -{ - - fSubstitutionFuel = true; - fIsReplaceFissileStock = ReplaceTheStock; - - double M0 = cZAIMass.GetMass( fuel.GetIsotopicVectorAt(0.).GetActinidesComposition() ); - fSubstitutionEvolutionData = fuel / M0; - -} -//________________________________________________________________________ -void FabricationPlant::SetSubstitutionFissile(IsotopicVector IV) -{ - - fSubstitutionFuel = true; - fSubstitutionFissile = true; - - fSubstitutionFissileIV = IV / IV.GetSumOfAll(); - -} - - //________________________________________________________________________ - //_____________________________ Reactor & DB _____________________________ - //________________________________________________________________________ - //________________________________________________________________________ -void FabricationPlant::TakeReactorFuel(int Id) -{ -DBGL - IsotopicVector IV; - map<int ,IsotopicVector >::iterator it2 = fReactorFuturIV.find( Id ); - - AddCumulativeIVOut(it2->second); - - if (it2 != fReactorFuturIV.end()) - (*it2).second = IV; - - map< int,EvolutionData >::iterator it = fReactorFuturDB.find(Id); - (*it).second = EvolutionData(); - - UpdateInsideIV(); -DBGL -} - -//________________________________________________________________________ -EvolutionData FabricationPlant::GetReactorEvolutionDB(int ReactorId) -{ - - map< int,EvolutionData >::iterator it = fReactorFuturDB.find(ReactorId); - return (*it).second; -} - //________________________________________________________________________ - //_______________________________ Storage ________________________________ - //________________________________________________________________________ -IsotopicVector FabricationPlant::BuildFuelFromEqModel(vector<double> LambdaArray) -{ -DBGL - IsotopicVector BuildedFuel; - IsotopicVector Lost; - - int StockCorrection = 0; - if( !fIsReplaceFissileStock && fSubstitutionFissile) - { - StockCorrection=1; - BuildedFuel += fFissileArray.back()*LambdaArray[fFissileArray.size()-1]; - } - - for(int i = 0; i < (int)fFissileArray.size() - StockCorrection ; i++) - { - if(LambdaArray[i] != 0) - { - int Stor_N = fFissileArrayAdress[i].first; - int IV_N = fFissileArrayAdress[i].second; - - pair<IsotopicVector, IsotopicVector> Separated_Lost; - Separated_Lost = Separation( fFissileStorage[Stor_N]->GetIVArray()[IV_N]*LambdaArray[i], fFissileList ); - BuildedFuel += Separated_Lost.first; - Lost += Separated_Lost.second; - - } - } - - if(fFertileStorage.size() != 0) - { - for(int i = fFissileArray.size(); i < (int)(fFertileArray.size()+fFissileArray.size()); i++) - { - if(LambdaArray[i] != 0) - { - int Stor_N = fFertileArrayAdress[i].first; - int IV_N = fFertileArrayAdress[i].second; - - pair<IsotopicVector, IsotopicVector> Separated_Lost; - Separated_Lost = Separation( fFertileStorage[Stor_N]->GetIVArray()[IV_N]*LambdaArray[i], fFertileList); - BuildedFuel += Separated_Lost.first; - Lost += Separated_Lost.second; - } - } - } - else - BuildedFuel += fFertileArray[0]*LambdaArray.back(); - - if(fIsReusable) - fReUsable->AddIV(Lost); - else - GetParc()->AddWaste(Lost); - - DumpStock(LambdaArray); - -DBGL - return BuildedFuel; -} - - - //________________________________________________________________________ -void FabricationPlant::DumpStock(vector<double> LambdaArray) -{ -DBGL - int StockCorrection = 0; - if( !fIsReplaceFissileStock && fSubstitutionFissile) - { StockCorrection=1; - GetParc()->AddOutIncome( fFissileArray.back()*LambdaArray[fFissileArray.size()-1] ); - } - for(int i = 0; i < (int)fFissileArray.size() - StockCorrection; i++) - { - if(LambdaArray[i] != 0) - { - int Stor_N = fFissileArrayAdress[i].first; - int IV_N = fFissileArrayAdress[i].second; - fFissileStorage[Stor_N]->TakeFractionFromStock( IV_N, LambdaArray[i] ); - } - } - if(fFertileStorage.size() != 0) - { - for(int i = fFissileArray.size(); i < (int)(fFertileArray.size()+fFissileArray.size()); i++) - { - if(LambdaArray[i] != 0) - { - int Stor_N = fFertileArrayAdress[i].first; - int IV_N = fFertileArrayAdress[i].second; - - fFertileStorage[Stor_N]->TakeFractionFromStock( IV_N, LambdaArray[i] ); - } - } - } - else - GetParc()->AddOutIncome( fFertileArray[0]*LambdaArray.back() ); - - ResetArrays(); - - -DBGL -} -//________________________________________________________________________ -void FabricationPlant::ResetArrays() -{ - //Clear the Building Array (Fissile and Fertile) - fFissileArray.clear(); - fFissileArrayTime.clear(); - fFissileArrayAdress.clear(); - fFertileArray.clear(); - fFertileArrayTime.clear(); - fFertileArrayAdress.clear(); - - fFertileList = fFissileList = IsotopicVector(); -} -//________________________________________________________________________ -pair<IsotopicVector, IsotopicVector> FabricationPlant::Separation(IsotopicVector isotopicvector, IsotopicVector ExtractedList) -{ -DBGL - //[0] = re-use ; [1] = waste - IsotopicVector LostInReprocessing = isotopicvector.GetThisComposition(ExtractedList) * fSeparationLostFraction; - IsotopicVector SeparatedPart = isotopicvector.GetThisComposition(ExtractedList) - LostInReprocessing; - IsotopicVector LostPart = isotopicvector - SeparatedPart; -DBGL - return pair<IsotopicVector, IsotopicVector> (SeparatedPart, LostPart); -} - - - -//________________________________________________________________________ -// Get Decay -//________________________________________________________________________ -IsotopicVector FabricationPlant::GetDecay(IsotopicVector isotopicvector, cSecond t) -{ - - IsotopicVector IV; - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - if((*it).second > 0) - { - IsotopicVector ivtmp = fDecayDataBase->Evolution(it->first, t) * (*it).second ; - IV += ivtmp; - } - } - - return IV; - -} - - - - - - diff --git a/source/branches/CLASSV4.1/src/IrradiationModel.cxx b/source/branches/CLASSV4.1/src/IrradiationModel.cxx deleted file mode 100644 index 89f077c92..000000000 --- a/source/branches/CLASSV4.1/src/IrradiationModel.cxx +++ /dev/null @@ -1,694 +0,0 @@ -// -// IrradiationModel.cxx -// CLASSSource -// -// Created by BaM on 04/05/2014. -// Copyright (c) 2014 BaM. All rights reserved. -// - -#include "IrradiationModel.hxx" - -#include "CLASSLogger.hxx" -#include "StringLine.hxx" - -#include <TGraph.h> -#include <TString.h> - - -#include <sstream> -#include <string> -#include <iostream> -#include <fstream> -#include <algorithm> -#include <cmath> - - -using namespace std; - -IrradiationModel::IrradiationModel():CLASSObject() -{ - fShorstestHalflife = 3600.*24*2.; - fZAIThreshold = 90; - fSpectrumType ="thermal"; - - - fDataDirectoryName = getenv("CLASS_PATH"); - fDataDirectoryName += "/data/"; - fDataFileName = "chart.JEF3T"; - -} - -IrradiationModel::IrradiationModel(CLASSLogger* log):CLASSObject(log) -{ - fShorstestHalflife = 3600.*24*2.; - fZAIThreshold = 90; - fSpectrumType ="thermal"; - - fDataDirectoryName = getenv("CLASS_PATH"); - fDataDirectoryName += "/data/"; - fDataFileName = "chart.JEF3T"; - - fNormalDecay = CLASSNucleiFiliation( log ); - fFastDecay = CLASSNucleiFiliation( log ); - - fCaptureReaction= CLASSNucleiFiliation( log ); - fn2nReaction = CLASSNucleiFiliation( log ); -} -//________________________________________________________________________ -//________________________________________________________________________ -/* Physics */ -//________________________________________________________________________ -//________________________________________________________________________ - - - -//________________________________________________________________________ -/* Decay Stuff */ -//________________________________________________________________________ -string IrradiationModel::GetDecay(string DecayModes, double &BR,int &Iso, int &StartPos) -{ - string header; - - BR = 0; - string DecayBR = StringLine::NextWord(DecayModes,StartPos,','); //extraction of the decay mode and the BR - - int ss = 0; - string Decay = StringLine::NextWord(DecayBR,ss,':'); //extraction of the decay - - - if( ss < (int)DecayBR.size() ) //extraction of the BR if exist (i.e. for non stable isotop) - BR = atof(DecayBR.substr(ss+1).c_str()); - - BR /= 100.; //BR in % -> BR - - - Iso = 0; - if( Decay.find("/",0) < string::npos ) //find the Isomeric state of Daughter - { - Iso = atoi( Decay.substr( Decay.find("/") + 1 ).c_str() ); - Decay = Decay.substr( 0, Decay.find("/") ); - } - return Decay; -} - -//________________________________________________________________________ -void IrradiationModel::LoadDecay() -{ - DBGL - - // Add TMP and PF as a stable nuclei in the normal decay lsit - fNormalDecay.Add(ZAI(-3,-3,-3), IsotopicVector() ); // TMP - fNormalDecay.Add(ZAI(-2,-2,-2), IsotopicVector() ); // PF - - - - string DataFullPathName = GetDataDirectoryName()+ GetDataFileName(); - ifstream infile(DataFullPathName.c_str()); - - if(!infile) - WARNING << " Can't open \"" << DataFullPathName<< "\"" << endl; - - - do - { - int A = -1; - int Z = -1; - int I = -1; - string zainame; - string Iname; - int unkown; - double HalfLife; - string DecayModes; - - infile >> A >> Z >> zainame >> Iname >> unkown >> HalfLife >> DecayModes; - if(Z >= fZAIThreshold ) - { - // Get Isomeric State; - - if(Iname=="gs") - I = 0; - else - { - if(Iname[0]=='m') - { - if( atoi( Iname.substr(1).c_str() )==0 ) - I = 1; - else - I = atoi( Iname.substr(1).c_str() ); - } - } - - int start = 0; - double branch_test = 0; - double branch_test_f = 0; - - ZAI ParentZAI = ZAI(Z,A,I); - IsotopicVector DaughtersIV; - bool stable = true; - - while(start<int(DecayModes.size())) - { - double BR; - int daughter_A=0; - int daughter_N=0; - int daughter_Z=0; - int Iso=0; - int DM=-1; - // FPDistribution *FP=0; - string decay_name = GetDecay(DecayModes, BR, Iso, start); - - if (decay_name == "s") {DM=0;daughter_N=(A-Z); daughter_Z=Z;BR=1;} - if (decay_name == "b-") {DM=1;stable=false; daughter_N=(A-Z)-1; daughter_Z=Z+1;} - if (decay_name == "n") {DM=2;stable=false; daughter_N=(A-Z)-1; daughter_Z=Z;} - if (decay_name == "nn") {DM=3;stable=false; daughter_N=(A-Z)-2; daughter_Z=Z;} - if (decay_name == "b-n"){DM=4;stable=false; daughter_N=(A-Z)-2; daughter_Z=Z+1;} - if (decay_name == "p") {DM=5;stable=false; daughter_N=(A-Z); daughter_Z=Z-1;} - if (decay_name == "b-a"){DM=6;stable=false; daughter_N=(A-Z)-3; daughter_Z=Z-1;} - if (decay_name == "pp") {DM=7;stable=false; daughter_N=(A-Z); daughter_Z=Z-2;} - if (decay_name == "ce") {DM=8;stable=false; daughter_N=(A-Z)+1; daughter_Z=Z-1;} - if (decay_name == "a") {DM=9;stable=false; daughter_N=(A-Z)-2; daughter_Z=Z-2;} - if (decay_name == "cen"){DM=10;stable=false; daughter_N=(A-Z); daughter_Z=Z-1;} - if (decay_name == "cep"){DM=11;stable=false; daughter_N=(A-Z)+1; daughter_Z=Z-2;} - if (decay_name == "it") {DM=12;stable=false; daughter_N=(A-Z); daughter_Z=Z;} - if (decay_name == "db-"){DM=13;stable=false; daughter_N=(A-Z)-2; daughter_Z=Z+2;} - if (decay_name == "db+"){DM=14;stable=false; daughter_N=(A-Z)+2; daughter_Z=Z-2;} - if (decay_name == "ita"){DM=15;stable=false; daughter_N=(A-Z)-2; daughter_Z=Z-2;} - if (decay_name == "sf") {DM=16;stable=false; daughter_N=0; daughter_Z=-2; Iso = -2;} - if (decay_name == "cesf"){DM=17;stable=false; daughter_N=0; daughter_Z=-2; Iso = -2;} - if (decay_name == "b-sf"){DM=18;stable=false; daughter_N=0; daughter_Z=-2; Iso = -2;} - - daughter_A = daughter_Z + daughter_N; - { - if( daughter_Z < fZAIThreshold && daughter_Z!=-2 ) - daughter_A = daughter_Z = Iso = -3; - // not spontaneous fission - - if((BR>1e-10) && (!stable)) - { - if(DM <= 15) - { - ZAI DaughterZAI = ZAI(daughter_Z,daughter_A,Iso); - DaughtersIV += BR * DaughterZAI; - branch_test+=BR; - } - else if( DM <= 18) - { - if(fSpontaneusYield.size() == 0 ) - { - DaughtersIV += 2*BR * ZAI(-2,-2,-2); - - branch_test_f += 2*BR; - } - else - { - - IsotopicVector SpontanuesFissionProduct = fSpontaneusYield.GetFiliation( ParentZAI ); - if(SpontanuesFissionProduct.GetQuantity(-1,-1,-1) == 0) - { - DaughtersIV += BR* SpontanuesFissionProduct ; - branch_test_f += BR* SpontanuesFissionProduct.GetSumOfAll(); - - } - else - { - WARNING << " Unknwon Spontanues yield for ZAI : " << ParentZAI.Z() << " " << ParentZAI.A() << " " << ParentZAI.I() << endl; - DaughtersIV += 2*BR * ZAI(-2,-2,-2); - branch_test_f += 2*BR; - } - } - } - - } - - } - if (DM !=0) - stable = false; - // End of While loop - } - - double btest = fabs(branch_test + branch_test_f/2.-1.0); - if ( btest > 1e-8 && !stable ) - DaughtersIV = DaughtersIV / (branch_test+branch_test_f/2.); - - - - if (HalfLife < fShorstestHalflife && !stable) - fFastDecay.Add( ParentZAI, DaughtersIV ); // Fill the FastDecay by the Daughter IV - else if (stable) - { - fNormalDecay.Add(ParentZAI, IsotopicVector() ); // Fill the NormalDecay with a empty IV (mother is stable) - } - else - { - fNormalDecay.Add( ParentZAI, DaughtersIV ); // FIll the NormalDecay with the daughter IV scaled by the decay constante. - fDecayConstante += ParentZAI*log(2)/HalfLife; - } - } - - } while (!infile.eof()); - DBGL - - //Build the Matrix index : - fReverseMatrixIndex = fNormalDecay.GetZAIList(); - for(int i = 0; i< (int)fReverseMatrixIndex.size(); i++) - fMatrixIndex.insert(pair<ZAI, int> (fReverseMatrixIndex[i], i) ); - - DBGL - fFastDecay.SelfFiliationCleanUp(fMatrixIndex); - DBGL - fNormalDecay.FiliationCleanUp(fMatrixIndex, fFastDecay); - - - DBGL -} - - -void IrradiationModel::BuildDecayMatrix() -{ - DBGL - fDecayMatrix.Clear(); - - fDecayMatrix.ResizeTo( fMatrixIndex.size(), fMatrixIndex.size() ); - for(int i = 0; i < (int)fMatrixIndex.size(); i++) - for(int j = 0; j < (int)fMatrixIndex.size(); j++) - fDecayMatrix[i][j] = 0; - - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - { - - IsotopicVector DaughterIV = fNormalDecay.GetFiliation(fReverseMatrixIndex[i]); - (*this).GetNuclearProcessMatrix(fDecayMatrix, fReverseMatrixIndex[i], DaughterIV, fDecayConstante.GetQuantity(fReverseMatrixIndex[i]) ); - - } - DBGL -} - - -void IrradiationModel::GetNuclearProcessMatrix(TMatrixT<double> &NuclearProcessMatrix, ZAI Mother, IsotopicVector ProductedIV, double XSValue) -{ - DBGL - - vector<ZAI> ProductedZAIList = ProductedIV.GetZAIList(); - - if(fMatrixIndex.find(Mother) != fMatrixIndex.end()) - { - - - int i = fMatrixIndex[Mother]; - - NuclearProcessMatrix[i][i] -= XSValue; - - for(int j = 0; j < (int)ProductedZAIList.size(); j++) - { - if(fMatrixIndex.find(ProductedZAIList[j]) != fMatrixIndex.end() ) - { NuclearProcessMatrix[fMatrixIndex[ ProductedZAIList[j] ]][i] += ProductedIV.GetQuantity(ProductedZAIList[j])*XSValue; - } - else - NuclearProcessMatrix[0][i] += ProductedIV.GetQuantity(ProductedZAIList[j])*XSValue; - } - } - else - WARNING << " Can't have nuclear process on this nucleus, ZAI " << Mother.Z() << " " << Mother.A() << " " << Mother.I() << " : its halflife seems to be below the threshold!" << endl; - - DBGL -} - - -//________________________________________________________________________ -/* Fission Stuff */ -//________________________________________________________________________ -void IrradiationModel::SetFissionEnergy(ZAI zai, double E) -{ - pair<map<ZAI, double>::iterator, bool> IResult; - IResult = fFissionEnergy.insert( pair<ZAI ,double>(zai, E)); - if(!IResult.second) - IResult.first->second = E; - -} - -//________________________________________________________________________ -void IrradiationModel::SetFissionEnergy(string FissionEnergyFile) -{ - ifstream FissionFile( FissionEnergyFile.c_str() ); // Open the File - if(!FissionFile) //check if file is correctly open - WARNING << " Can't open \"" << FissionEnergyFile << "\" File" << endl; - - do - { - int Z = 0; - int A = 0; - int I = 0; - double E = 0; - FissionFile >> Z >> A >> I >> E; - SetFissionEnergy(Z, A, I, E); - } while (!FissionFile.eof()); -} - -//________________________________________________________________________ -CLASSNucleiFiliation IrradiationModel::ReadFPYield(string Yield) -{ - DBGL - - CLASSNucleiFiliation MyYield = CLASSNucleiFiliation( fLog ); - - ifstream infile(Yield.c_str()); - if(!infile) - WARNING << " Can't open \"" << Yield<< "\" File !!!" << endl; - - - string line; - int start = 0; - - getline(infile, line); - vector<ZAI> Fissile; - vector<IsotopicVector> FPYields; - do - { - int Z = atof(StringLine::NextWord(line, start, ' ').c_str()); - int A = atof(StringLine::NextWord(line, start, ' ').c_str()); - int I = atof(StringLine::NextWord(line, start, ' ').c_str()); - Fissile.push_back(ZAI(Z,A,I)); - FPYields.push_back( IsotopicVector() ); - - }while(start < (int)line.size()-1); - - getline(infile, line); - do - { - start = 0; - - int Z = atof(StringLine::NextWord(line, start, ' ').c_str()); - int A = atof(StringLine::NextWord(line, start, ' ').c_str()); - int I = atof(StringLine::NextWord(line, start, ' ').c_str()); - int i=0; - - do - { - double Yield_values = atof(StringLine::NextWord(line, start, ' ').c_str()); - - FPYields[i] += Yield_values * ZAI(Z,A,I); - - i++; - - }while(start < (int)line.size()-1); - - getline(infile, line); - - } while (!infile.eof()); - - - for(int i=0 ; i<(int) Fissile.size() ; i++) // Fill the CLASSNucleiFiliation - MyYield.Add( Fissile[i], FPYields[i] ); - - - DBGL - return MyYield; -} - -//________________________________________________________________________ -void IrradiationModel::LoadFPYield(string SpontaneusYield, string ReactionYield) -{ - fSpontaneusYieldFile = SpontaneusYield; - fReactionYieldFile = ReactionYield; - fZAIThreshold = 0; -} -//________________________________________________________________________ -void IrradiationModel::NuclearDataInitialization() -{ - DBGL - - if(fSpontaneusYieldFile!="") - fSpontaneusYield = ReadFPYield(fSpontaneusYieldFile); - if(fReactionYieldFile!="") - fReactionYield = ReadFPYield(fReactionYieldFile); - - LoadDecay(); - - - if(fSpontaneusYieldFile!="") - fSpontaneusYield.FiliationCleanUp(fMatrixIndex, fFastDecay); // remove the cutted nuclei.... - if(fReactionYieldFile!="") - fReactionYield.FiliationCleanUp(fMatrixIndex, fFastDecay); // remove the cutted nuclei.... - - - BuildDecayMatrix(); - BuildReactionFiliation(); - - DBGL -} - - -void IrradiationModel::BuildReactionFiliation() -{ - DBGL - - //Isomeric Branching ratios : - - double BR_AM_242M = 0; - double BR_HO_166M = 0; - double BR_PM_148M = 0; - double BR_AG_110M = 0; - double BR_AG_108M = 0; - double BR_NP_236M = 0; - if(GetSpectrumType()=="thermal") - { - BR_AM_242M = 0.1267; - BR_HO_166M = 0.0510; - BR_PM_148M = 0.4670; - BR_AG_110M = 0.0492; - BR_AG_108M = 0.0105; - BR_NP_236M = 0.8; - } - if(GetSpectrumType()=="fast") - { - BR_AM_242M = 0.15; - BR_HO_166M = 0.0519; - BR_PM_148M = 0.4670; - BR_AG_110M = 0.0466; - BR_AG_108M = 0.0135; - BR_NP_236M = 0.8; - } - // (n,Gamma) Special Reaction..... - { - // 241Am(n,Gamma) - { - fCaptureReaction.Add( ZAI(95,241,0), ZAI(96,242,0) * (1-BR_AM_242M)*0.827 ); //directly cut the Am242 as in MURE - fCaptureReaction.Add( ZAI(95,241,0), ZAI(94,242,0) * (1-BR_AM_242M)*0.173 ); //directly cut the Am242 as in MURE - fCaptureReaction.Add( ZAI(95,241,0), ZAI(95,242,1) * BR_AM_242M ); - } - - if(fReactionYieldFile!="") - {// 165Ho(n,Gamma) - { - fCaptureReaction.Add( ZAI(67,165,0), ZAI(68,166,0) * (1-BR_HO_166M) ); // - fCaptureReaction.Add( ZAI(67,165,0), ZAI(67,166,1) * BR_HO_166M ); // - } - - // 147Pm(n,Gamma) - { - fCaptureReaction.Add( ZAI(61,147,0), ZAI(61,148,0) * (1-BR_PM_148M) ); - fCaptureReaction.Add( ZAI(61,147,0), ZAI(61,148,1) * BR_PM_148M ); - - } - - // 109Ag(n, Gamma) - { - fCaptureReaction.Add( ZAI(47,109,0), ZAI(48,110,0) * 0.9970*(1-BR_AG_110M)); - fCaptureReaction.Add( ZAI(47,109,0), ZAI(46,110,0) * 0.0030*(1-BR_AG_110M)); - fCaptureReaction.Add( ZAI(47,109,0), ZAI(47,110,1) *BR_AG_110M); - } - - - // 107Ag(n, Gamma) - { - fCaptureReaction.Add( ZAI(47,107,0), ZAI(48,108,0) * 0.9715*(1-BR_AG_108M) ); - fCaptureReaction.Add( ZAI(47,107,0), ZAI(46,108,0) * 0.0285*(1-BR_AG_108M) ); - fCaptureReaction.Add( ZAI(47,107,0), ZAI(47,108,1) *BR_AG_108M); - } - } - } - - - // (n,2n) Special Reaction..... - { - // 237Np(n,2n) - { - fn2nReaction.Add(ZAI(93,237,0), ZAI(93,236,0) * (1-BR_NP_236M) ); - fn2nReaction.Add(ZAI(93,237,0), ZAI(93,236,1) * BR_NP_236M); - } - - } - - - - for(int i = 2; i < (int)fReverseMatrixIndex.size(); i++) // Start at 2 to skeep "TMP" ZAI and "PF" ZAI - { - - int Z = fReverseMatrixIndex[i].Z(); - int A = fReverseMatrixIndex[i].A(); - - if(fCaptureReaction.GetFiliation(fReverseMatrixIndex[i]).GetQuantity(ZAI(-1,-1,-1)) == 1 ) - { - fCaptureReaction.Add(fReverseMatrixIndex[i], ZAI(Z,A+1)*1); - } - if(fn2nReaction.GetFiliation(fReverseMatrixIndex[i]).GetQuantity(ZAI(-1,-1,-1)) == 1 ) - { - if(A>1) - fn2nReaction.Add(fReverseMatrixIndex[i], ZAI(Z,A-1)*1); - } - } - - - fCaptureReaction.FiliationCleanUp(fMatrixIndex, fFastDecay); // clean the filiation link - fCaptureReaction.NormalizeBranchingRatio(); // normalize it - - - fn2nReaction.FiliationCleanUp(fMatrixIndex, fFastDecay); // clean the filiation link - fn2nReaction.NormalizeBranchingRatio(); // normalize it - - - DBGL -} - - -//________________________________________________________________________ -/* Reaction Stuff */ -//________________________________________________________________________ -TMatrixT<double> IrradiationModel::GetFissionXsMatrix(EvolutionData EvolutionDataStep,double TStep) -{ - DBGL - TMatrixT<double> FissionMatrix = TMatrixT<double>( fReverseMatrixIndex.size(),fReverseMatrixIndex.size() ); - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - for(int j = 0; j < (int)fReverseMatrixIndex.size(); j++) - FissionMatrix[i][j] = 0; - - // ---------------- A(n,.) X+Y - - map<ZAI ,TGraph* > FissionXS = EvolutionDataStep.GetFissionXS(); - map<ZAI ,TGraph* >::iterator it_XS; - - for(it_XS = FissionXS.begin() ; it_XS != FissionXS.end(); it_XS++) //loop on fissionable nuclei - { - ZAI Mother = (*it_XS).first; // Note the Mother ZAI (not necessary but help for reading the code) - double XS_Value = (*it_XS).second->Eval(TStep) * 1e-24; // Get Cross section values - - IsotopicVector FissionProductIV = fReactionYield.GetFiliation(Mother); // Get the Isotopicvector produced by the reaction - - if(FissionProductIV.GetQuantity(ZAI(-1,-1,-1)) != 1) // Check if ZAI is dealed - GetNuclearProcessMatrix( FissionMatrix, Mother, FissionProductIV, XS_Value ); // add the Nuclear process in the Reaction Matrix - else - { - if(fReactionYieldFile!="") - WARNING << "Don't have fission Yield for this nuclei, ZAI : " << Mother.Z() << " " << Mother.A() << " " << Mother.I() << endl; - - GetNuclearProcessMatrix(FissionMatrix, Mother, ZAI(-2, -2, -2) * 2 , XS_Value ); // add the Nuclear process in the Reaction Matrix - } - - - } - - DBGL - return FissionMatrix; -} - -//________________________________________________________________________ -TMatrixT<double> IrradiationModel::GetCaptureXsMatrix(EvolutionData EvolutionDataStep,double TStep) -{ - DBGL - TMatrixT<double> CaptureMatrix = TMatrixT<double>( fReverseMatrixIndex.size(),fReverseMatrixIndex.size() ); - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - for(int j = 0; j < (int)fReverseMatrixIndex.size(); j++) - CaptureMatrix[i][j] = 0; - - // ---------------- A(n,Gamma) A+1 - - map<ZAI ,TGraph* > CaptureXS = EvolutionDataStep.GetCaptureXS(); - map<ZAI ,TGraph* >::iterator it_XS; - - for(it_XS = CaptureXS.begin() ; it_XS != CaptureXS.end(); it_XS++) //loop on nuclei - { - ZAI Mother = (*it_XS).first; // Note the Mother ZAI (not necessary but help for reading the code) - double XS_Value = (*it_XS).second->Eval(TStep) * 1e-24; // Get Cross section values - - IsotopicVector CaptureProductIV = fCaptureReaction.GetFiliation(Mother); // Get the Isotopicvector produced by the reaction - - if(CaptureProductIV.GetQuantity(ZAI(-1,-1,-1)) != 1) // Check if ZAI is dealed - GetNuclearProcessMatrix(CaptureMatrix, Mother, CaptureProductIV, XS_Value ); // add the Nuclear process in the Reaction Matrix - else - WARNING << "Can't have capture reaction on this nuclei, ZAI : " << Mother.Z() << " " << Mother.A() << " " << Mother.I() << endl; - - - - - - } - - DBGL - return CaptureMatrix; -} - - -//________________________________________________________________________ -TMatrixT<double> IrradiationModel::Getn2nXsMatrix(EvolutionData EvolutionDataStep,double TStep) -{ - DBGL - - TMatrixT<double> n2nMatrix = TMatrixT<double>( fReverseMatrixIndex.size(),fReverseMatrixIndex.size() ); - for(int i = 0; i < (int)fReverseMatrixIndex.size(); i++) - for(int j = 0; j < (int)fReverseMatrixIndex.size(); j++) - n2nMatrix[i][j] = 0; - - // ---------------- A(n,2n) A-1 - - map<ZAI ,TGraph* > CaptureXS = EvolutionDataStep.Getn2nXS(); - map<ZAI ,TGraph* >::iterator it_XS; - - for(it_XS = CaptureXS.begin() ; it_XS != CaptureXS.end(); it_XS++) //loop on nuclei - { - ZAI Mother = (*it_XS).first; // Note the Mother ZAI (not necessary but help for reading the code) - double XS_Value = (*it_XS).second->Eval(TStep) * 1e-24; // Get Cross section values - - IsotopicVector n2nProductIV = fn2nReaction.GetFiliation(Mother); // Get the Isotopicvector produced by the reaction - - if(n2nProductIV.GetQuantity(ZAI(-1,-1,-1)) != 1) // Check if ZAI is dealed - GetNuclearProcessMatrix(n2nMatrix, Mother, n2nProductIV, XS_Value ); // add the Nuclear process in the Reaction Matrix - else - WARNING << "Can't have n,2n reaction on this nuclei, ZAI : " << Mother.Z() << " " << Mother.A() << " " << Mother.I() << endl; - - - } - - DBGL - return n2nMatrix; -} -//________________________________________________________________________ -void IrradiationModel::SetSpectrumType(string type) -{ - if(type !="fast" && type != "thermal") - { - ERROR<<type<<" is not a valid spectrum type"<<endl; - ERROR<<"\tSpectrum type must be either fast or thermal"<<endl; - exit(0); - } - else - fSpectrumType=type; - -} -//________________________________________________________________________ -double IrradiationModel::GetDecayConstant(const ZAI& zai) const -{ - map<ZAI ,double> DecayConstante = fDecayConstante.GetIsotopicQuantity(); - - map<ZAI ,double>::iterator it; - it = DecayConstante.find(zai); - - - if ( it != DecayConstante.end() ) - { - return it->second; - } - else - { - return 0; - } -} diff --git a/source/branches/CLASSV4.1/src/IsotopicVector.cxx b/source/branches/CLASSV4.1/src/IsotopicVector.cxx deleted file mode 100755 index 0bb262668..000000000 --- a/source/branches/CLASSV4.1/src/IsotopicVector.cxx +++ /dev/null @@ -1,716 +0,0 @@ -#include "IsotopicVector.hxx" - -#include "CLASSLogger.hxx" -#include "CLASSConstante.hxx" - - -#include <cmath> -#include <iostream> -#include <fstream> -#include <string> -#include <algorithm> -//________________________________________________________________________ -//________________________________________________________________________ -// -// -// -// IsotopicVector -// -// -//________________________________________________________________________ -//________________________________________________________________________ - - - - -//________________________________________________________________________ -//__________________________Operator Overlaoding__________________________ -//________________________________________________________________________ - - - -//____________________________General Operator____________________________ -//________________________________________________________________________ - -ClassImp(IsotopicVector) - -double Norme(IsotopicVector IV1, int DistanceType, IsotopicVector DistanceParameter) -{ - - IsotopicVector IV; - - return Distance(IV1, IV, DistanceType,DistanceParameter); - -} -double DistanceStandard(IsotopicVector IV1, IsotopicVector IV2) -{ - - double d2=0; - IsotopicVector IVtmp = IV1 + IV2; - map<ZAI ,double> IVtmpIsotopicQuantity = IVtmp.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - double Z1 = IV1.GetZAIIsotopicQuantity( (*it).first ); - double Z2 = IV2.GetZAIIsotopicQuantity( (*it).first ); - d2 += pow(Z1-Z2 , 2 ); - } - return sqrt(d2); - -} -double DistanceAdjusted(IsotopicVector IV1, IsotopicVector IV2, IsotopicVector DistanceParameter) -{ - - double d2=0; - IsotopicVector IVtmp = IV1 + IV2; - map<ZAI ,double> IVtmpIsotopicQuantity = IVtmp.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - double Z1 = IV1.GetZAIIsotopicQuantity( (*it).first ); - double Z2 = IV2.GetZAIIsotopicQuantity( (*it).first ); - double lambda = DistanceParameter.GetZAIIsotopicQuantity( (*it).first ); - d2 += lambda*abs(Z1-Z2); - } - return d2; - -} - - - -double Distance(IsotopicVector IV1, IsotopicVector IV2, int DistanceType, IsotopicVector DistanceParameter) -{ - - if(DistanceType==0) - { - return DistanceStandard(IV1,IV2); - } - else if(DistanceType==1||DistanceType==2){ - return DistanceAdjusted(IV1,IV2,DistanceParameter); - } - else - { - cout << " DistanceType defined by the user isn't recognized by the code" << endl; - - exit(1); - } - -} - - -double RelativDistance(IsotopicVector IV1, IsotopicVector IV2 ) -{ - - double d2 = 0; - - IsotopicVector IVtmp = IV1 + IV2; - map<ZAI ,double> IVtmpIsotopicQuantity = IVtmp.GetIsotopicQuantity(); - - double Z1total = 0; - double Z2total = 0; - map<ZAI ,double >::iterator it; - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - Z1total += IV1.GetZAIIsotopicQuantity( (*it).first ); - Z2total += IV2.GetZAIIsotopicQuantity( (*it).first ); - } - for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++) - { - double Z1 = IV1.GetZAIIsotopicQuantity( (*it).first ); - double Z2 = IV2.GetZAIIsotopicQuantity( (*it).first ); - d2 += pow( (Z1/Z1total - Z2/Z2total) , 2 ); - } - - - return sqrt(d2); -} - - -IsotopicVector operator+(IsotopicVector const& IVa, IsotopicVector const& IVb) -{ - - IsotopicVector IVtmp; - IVtmp = IVa; - return IVtmp += IVb; -} - -//________________________________________________________________________ -IsotopicVector operator-(IsotopicVector const& IVa, IsotopicVector const& IVb) -{ - - IsotopicVector IVtmp; - IVtmp = IVa; - return IVtmp -= IVb; -} - - -//________________________________________________________________________ -IsotopicVector operator*(ZAI const& zai, double F) -{ - - IsotopicVector IVtmp; - - IVtmp.Add( zai, F); - return IVtmp; -} - - -//________________________________________________________________________ -IsotopicVector operator/(ZAI const& zai, double F) -{ - IsotopicVector IVtmp; - - IVtmp.Add( zai, 1./F); - - return IVtmp; -} - - -//________________________________________________________________________ -IsotopicVector operator*(double F, IsotopicVector const& IVA) {return IVA*F;} - -//________________________________________________________________________ -IsotopicVector operator*(IsotopicVector const& IVA, double F) -{ - - IsotopicVector IV = IVA; - IV.Multiply(F); - return IV; -} - -//________________________________________________________________________ -IsotopicVector operator*(double F, ZAI const& zai) -{ - return zai*F; -} - -//________________________________________________________________________ -IsotopicVector operator*(IsotopicVector const& IVa, IsotopicVector const& IVb) -{ - - IsotopicVector IVtmp; - IVtmp = IVa; - IVtmp *= IVb; - return IVtmp; -} - -//________________________________________________________________________ -IsotopicVector operator/(IsotopicVector const& IVA, double F) -{ - - IsotopicVector IV = IVA; - IV.Multiply(1./F); - return IV; -} - - -//____________________________InClass Operator____________________________ - -//________________________________________________________________________ -IsotopicVector& IsotopicVector::operator+=(const IsotopicVector& IVa) -{ - - Add(IVa); - return *this; - -} - -//________________________________________________________________________ -IsotopicVector& IsotopicVector::operator-=(const IsotopicVector& IVa) -{ - - Remove(IVa); - return *this; - -} -//________________________________________________________________________ -IsotopicVector& IsotopicVector::operator*=(const IsotopicVector& IVa) -{ - map<ZAI, double> IVA_isotopicquantity = IVa.GetIsotopicQuantity(); - - map<ZAI, double> isotopicquantity = (*this).GetIsotopicQuantity(); // get the isotopic quantity to loop on it - map<ZAI, double>::iterator isotopicIT; // iterator on a isotopic quantity map - - for(isotopicIT = isotopicquantity.begin(); isotopicIT != isotopicquantity.end(); isotopicIT++) // loop on the isotopicquantity... - { - map<ZAI, double>::iterator IVa_isotopicIT = IVA_isotopicquantity.find( (*isotopicIT).first ); - - if( IVa_isotopicIT != IVA_isotopicquantity.end() ) - (*isotopicIT).second *= (*IVa_isotopicIT).second; - else - (*isotopicIT).second = 0; - - } - - fIsotopicQuantity = isotopicquantity; - - return *this; - -} - -//________________________________________________________________________ -IsotopicVector& IsotopicVector::operator*=(const double& factor) -{ - - Multiply(factor); - - return *this; - -} - - -//________________________________________________________________________ -bool IsotopicVector::operator<(const IsotopicVector& isotopicvector) const -{ - - if( Norme(*this) != Norme(isotopicvector) ) - return Norme(*this) < Norme(isotopicvector); - else if( (*this).GetIsotopicQuantity().size() != isotopicvector.GetIsotopicQuantity().size() ) - return (*this).GetIsotopicQuantity().size() < isotopicvector.GetIsotopicQuantity().size(); - else - { - map<ZAI ,double>::iterator it; - map<ZAI ,double>::iterator it2 = isotopicvector.GetIsotopicQuantity().begin(); - map<ZAI ,double> IsotopicQuantity = (*this).GetIsotopicQuantity(); - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++ ) - { - if( (*it).first != (*it2).first ) - return (*it).first < (*it2).first; - else it2++; - } - return false; - } - -} - - -//________________________________________________________________________ -//________________________Constructor & Destructor________________________ -//________________________________________________________________________ -IsotopicVector::IsotopicVector() -{ -} - - -//_____________________________________________________GetSpeciesComposition___________________ -IsotopicVector::~IsotopicVector() -{ - fIsotopicQuantity.clear(); - fIsotopicQuantityNeeded.clear(); -} - - - -//________________________________________________________________________ -//_____________________________General Method_____________________________ -//________________________________________________________________________ -void IsotopicVector::Clear() -{ - - fIsotopicQuantityNeeded.clear(); - fIsotopicQuantity.clear(); - -} -//________________________________________________________________________ -void IsotopicVector::ClearNeed() -{ - - fIsotopicQuantityNeeded.clear(); - -} - -//________________________________________________________________________ -void IsotopicVector::Multiply(double factor) -{ - - map<ZAI ,double >::iterator it; - for( it = fIsotopicQuantity.begin(); it != fIsotopicQuantity.end(); it++) - (*it).second = (*it).second * factor; - for( it = fIsotopicQuantityNeeded.begin(); it != fIsotopicQuantityNeeded.end(); it++) - (*it).second = (*it).second * factor; - - -} - -//________________________________________________________________________ - -double IsotopicVector::GetSumOfAll() const -{ - double Sum = 0; - map<ZAI ,double >::iterator it; - map<ZAI ,double > isotopicquantity = GetIsotopicQuantity(); - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - Sum += (*it).second; - - return Sum; - -} -//________________________________________________________________________ -void IsotopicVector::Add(const ZAI& zai, double quantity) -{ - - if( ceil(quantity*1e50) - quantity*1e50 > quantity*1e50 - floor(quantity*1e50) ) - quantity = floor(quantity*1e50)*1/1e50; - else quantity = ceil(quantity*1e50)*1/1e50; - - - if(quantity > 0) - { - pair<map<ZAI, double>::iterator, bool> IResult; - IResult = fIsotopicQuantity.insert( pair<ZAI ,double>(zai, quantity)); - if(!IResult.second) - IResult.first->second += quantity; - } - - -} -//________________________________________________________________________ - -void IsotopicVector::Add(const IsotopicVector& isotopicvector) -{ - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - Add( (*it).first, (*it).second); - - -} -//________________________________________________________________________ - -void IsotopicVector::Add(const map<ZAI ,double>& quantity) -{ - - map<ZAI ,double> isotopicquantity = quantity; - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - Add( (*it).first, (*it).second); - - -} - - -//________________________________________________________________________ -void IsotopicVector::Remove(const ZAI& zai, double quantity) -{ - - - map<ZAI ,double>::iterator it; - it = fIsotopicQuantity.find(zai); - - if(quantity > 0) - { - if ( it != fIsotopicQuantity.end() ) - { - if (it->second > quantity) - it->second = it->second - quantity; - else - { - if( (it->second - quantity)/it->second > 1e-16 ) // to fit with double precision : 16 digits - Need(zai, quantity - it->second ); - it->second = 0; - } - } - else - { - Need(zai, quantity); - } - } - - if(it->second == 0) - fIsotopicQuantity.erase(it); -} - -//________________________________________________________________________ -void IsotopicVector::Remove(const IsotopicVector& isotopicvector) -{ - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - Remove( (*it).first, (*it).second); - -} - -//________________________________________________________________________ - -void IsotopicVector::ApplyZAIThreshold(int z) -{ - map<ZAI ,double> cleanedIsotopicQuantity; - cleanedIsotopicQuantity.insert( pair<ZAI ,double>(ZAI(-2,-2,-2), 0)); - - map<ZAI ,double> isotopicquantity = (*this).GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - if( (*it).first.Z() < z) - cleanedIsotopicQuantity[ZAI(-2,-2,-2)] += (*it).second; - else - cleanedIsotopicQuantity.insert(*it); - - } - - fIsotopicQuantity = cleanedIsotopicQuantity; - -} - - - - -//________________________________________________________________________ -void IsotopicVector::Need(const ZAI& zai, double quantity) -{ - if(quantity < 0.5) quantity = 0; - - pair<map<ZAI, double>::iterator, bool> IResult; - if(quantity > 0) - { cout << "Negative quantity : "<<quantity <<" for ZAI " << zai.Z() << " " << zai.A() << " " << zai.I() << " in this IsotopicVector" << endl; - exit(0); - IResult = fIsotopicQuantityNeeded.insert( pair<ZAI ,double>(zai, quantity)); - if(!IResult.second) - IResult.first->second += quantity; - } - - -} - -//________________________________________________________________________ -void IsotopicVector::Need(const IsotopicVector& isotopicvector) -{ - - map<ZAI ,double> isotopicquantity = isotopicvector.GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - Need( (*it).first, (*it).second); - -} - - -//________________________________________________________________________ -double IsotopicVector::GetZAIIsotopicQuantity(const ZAI& zai) const -{ - - map<ZAI ,double> IsotopicQuantity = fIsotopicQuantity; - - map<ZAI ,double>::iterator it; - it = IsotopicQuantity.find(zai); - - - if ( it != IsotopicQuantity.end() ) - { - return it->second; - } - else - { - return 0; - } -} - -//________________________________________________________________________ -double IsotopicVector::GetZAIIsotopicQuantity(const int z, const int a, const int i) const -{ - - ZAI zai(z, a, i); - return GetZAIIsotopicQuantity(zai); -} - -IsotopicVector IsotopicVector::GetSpeciesComposition(int z) const -{ - - IsotopicVector IV; - map<ZAI ,double > IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - if( (*it).first.Z() == z ) - IV += (*it).first * (*it).second; - - return IV; - -} - - -IsotopicVector IsotopicVector::GetThisComposition(IsotopicVector IV) const -{ - IsotopicVector IVtmp; - map<ZAI ,double > IsotopicQuantity = IV.GetIsotopicQuantity(); - map<ZAI ,double > THISIsotopicQuantity = (*this).GetIsotopicQuantity(); - - map<ZAI ,double >::iterator it; - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - { - map<ZAI ,double >::iterator it2 = THISIsotopicQuantity.find( (*it).first ); - if(it2 != THISIsotopicQuantity.end()) - IVtmp += (*it2).first * (*it2).second ; - - } - - return IVtmp; - -} -//________________________________________________________________________ -double IsotopicVector::GetTotalMass() const -{ - return cZAIMass.GetMass(*this);//in tons -} -//________________________________________________________________________ - -double IsotopicVector::GetMeanMolarMass() const -{ - return GetTotalMass() * 1e6 * AVOGADRO / GetActinidesComposition().GetSumOfAll(); -} -//________________________________________________________________________ - -vector<ZAI> IsotopicVector::GetZAIList() const -{ - - map<ZAI ,double > IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - vector<ZAI> zailist; - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - zailist.push_back( (*it).first ); - - return zailist; - -} - -void IsotopicVector::Initiatlize(double val) -{ - map<ZAI ,double >::iterator it; - vector<ZAI> zailist; - for( it = fIsotopicQuantity.begin(); it != fIsotopicQuantity.end(); it++) - (*it).second = 1; - -} - - -IsotopicVector IsotopicVector::GetActinidesComposition() const -{ - - IsotopicVector IV; - for (int i = 0; i <12; i++) - IV += GetSpeciesComposition(89+i); - return IV; - -} - -vector<int> IsotopicVector::GetChemicalSpecies() const -{ - - vector<int> ChemicalSpecies; - - map<ZAI ,double > IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for( it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - if( (int)ChemicalSpecies.size() ==0 || (*it).first.Z() != ChemicalSpecies.back() ) - ChemicalSpecies.push_back((*it).first.Z()); - - - return ChemicalSpecies; -} - - -//________________________________________________________________________ -void IsotopicVector::Write(string filename, cSecond time) const -{ - ofstream IVfile(filename.c_str(), ios_base::app); // Open the File - if(!IVfile) - cout << "!!Warning!! !!!IsotopicVector!!! \n Can't open \"" << filename << "\"\n" << endl; - - if(time != -1) - IVfile << "Time "<< time/cYear << endl; - - map<ZAI ,double> IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for(it = IsotopicQuantity.begin(); it != IsotopicQuantity.end(); it++) - { - IVfile << (*it).first.Z() << " "; - IVfile << (*it).first.A() << " "; - IVfile << (*it).first.I() << " "; - IVfile << (*it).second << " " << endl; - } - IVfile << endl; -} -//________________________________________________________________________ -void IsotopicVector::Print(string option) const -{ - - cout<<sPrint(); - -} -//________________________________________________________________________ -string IsotopicVector::sPrint() const -{ - stringstream ss; - ss << "**************************" << endl; - ss << "*Isotopic Vector Property*" << endl; - ss << "**************************" << endl << endl; - - bool QuantityPrint = false; - bool DBPrint = false; - - QuantityPrint = true; - - if(QuantityPrint) - { - ss << "*Isotopic Vector Quantity*" << endl; - map<ZAI ,double> IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for(it = IsotopicQuantity.begin();it != IsotopicQuantity.end(); it++) - { - ss << (*it).first.Z() << " "; - ss << (*it).first.A() << " "; - ss << (*it).first.I() << " "; - ss << ": " << (*it).second; - ss << endl; - } - ss << endl; - ss << "*Isotopic Vector Quantity Needed*" << endl; - map<ZAI ,double> IsotopicQuantityNeeded = GetIsotopicQuantityNeeded(); - for(it = IsotopicQuantityNeeded.begin(); it != IsotopicQuantityNeeded.end(); it++) - { - ss << (*it).first.Z() << " "; - ss << (*it).first.A() << " "; - ss << (*it).first.I() << " "; - ss << ": " << (*it).second; - ss << endl; - } - ss << endl; - } - if(DBPrint) - { - ss << "****Isotopic Vector DB****" << endl; - } -return ss.str(); -} -//________________________________________________________________________ -void IsotopicVector::PrintList(string option) const -{ - bool QuantityPrint = false; - bool DBPrint = false; - - QuantityPrint = true; - - if(QuantityPrint) - { - map<ZAI ,double> IsotopicQuantity = GetIsotopicQuantity(); - map<ZAI ,double >::iterator it; - for(it = IsotopicQuantity.begin();it != IsotopicQuantity.end(); it++) - { - cout << (*it).first.Z() << " "; - cout << (*it).first.A() << " "; - cout << (*it).first.I() << " "; - cout << endl; - } - cout << endl; - - } - if(DBPrint) - { - cout << "****Isotopic Vector DB****" << endl; - } - -} - - - - diff --git a/source/branches/CLASSV4.1/src/Makefile b/source/branches/CLASSV4.1/src/Makefile deleted file mode 100755 index bfa87aee7..000000000 --- a/source/branches/CLASSV4.1/src/Makefile +++ /dev/null @@ -1,128 +0,0 @@ -# Directory containing libraries -LIBDIR = $(CLASS_lib) -# Directory containing includes for CLASS -LOCALINC = $(CLASS_include) - - -EQM = ../Model/Equivalence -IM = ../Model/Irradiation -XSM = ../Model/XS - - -ROOTCFLAGS = `root-config --cflags` -ROOTLIBS = `root-config --libs` -ROOTGLIBS = `root-config --glibs` - -######### nothing to change from here ######### -INCLUDES = $(LOCALINC)/*.hxx -LIBNAME = CLASSpkg -OBJS = CLASSLogger.o \ - ZAI.o ZAIDict.o \ - IsotopicVector.o IsotopicVectorDict.o \ - ZAIMass.o ZAIHeat.o ZAITox.o \ - CLASSNucleiFiliation.o \ - CLASSObject.o CLASSObjectDict.o\ - CLASSFacility.o CLASSFacilityDict.o\ - FabricationPlant.o FabricationPlantDict.o \ - Reactor.o ReactorDict.o \ - CLASSBackEnd.o CLASSBackEndDict.o\ - SeparationPlant.o SeparationPlantDict.o\ - Storage.o StorageDict.o\ - Pool.o PoolDict.o\ - DecayDataBank.o \ - DynamicalSystem.o\ - IrradiationModel.o \ - EquivalenceModel.o \ - XSModel.o \ - CLASSFuel.o\ - PhysicsModels.o \ - EvolutionData.o EvolutionDataDict.o \ - CLASSFuelPlan.o\ - Scenario.o - -OBJMODEL = $(EQM)/EQM_MLP_PWR_MOX.o $(EQM)/EQM_QUAD_PWR_MOX.o $(EQM)/EQM_POL_PWR_UO2.o\ - $(EQM)/EQM_LIN_PWR_MOX.o $(EQM)/EQM_BakerRoss_FBR_MOX.o\ - $(XSM)/XSM_MLP.o $(XSM)/XSM_CLOSEST.o \ - $(IM)/IM_RK4.o $(IM)/IM_Matrix.o \ - $(IM)/IM_Matrix_Decay.o - - -ROOTOBJS = CLASSLogger.o \ - ZAI.o ZAIDict.o \ - IsotopicVector.o IsotopicVectorDict.o \ - ZAIMass.o ZAIHeat.o ZAITox.o \ - CLASSNucleiFiliation.o \ - CLASSObject.o CLASSObjectDict.o\ - CLASSFacility.o CLASSFacilityDict.o\ - Reactor.o ReactorDict.o \ - FabricationPlant.o FabricationPlantDict.o \ - CLASSBackEnd.o CLASSBackEndDict.o\ - Storage.o StorageDict.o\ - Pool.o PoolDict.o\ - SeparationPlant.o SeparationPlantDict.o\ - DecayDataBank.o \ - IrradiationModel.o \ - CLASSFuel.o\ - EvolutionData.o EvolutionDataDict.o \ - CLASSFuelPlan.o\ - PhysicsModels.o - - -CXX = g++ -CXXFLAGS = -O2 -g -Wall -fopenmp -fPIC -I$(LOCALINC) $(ROOTCFLAGS) -LD = g++ -LDFLAGS = -g -Wall -fPIC $(ROOTLIBS) -lTMVA -shared -lgomp - -all: $(OBJS) $(OBJMODEL) - $(LD) $(LDFLAGS) $(OBJS) $(OBJMODEL) -o $(LIBDIR)/lib$(LIBNAME).so - @echo "lib$(LIBNAME).so done" - $(LD) $(LDFLAGS) $(ROOTOBJS) -o $(LIBDIR)/lib$(LIBNAME)_root.so - @echo "lib$(LIBNAME)_root.so done" - -clean: - @rm -vf $(OBJS) $(OBJMODEL) *~ core *Dict.cxx *Dict.h - - -install: - @ln -sf ../Model/* ../include/ - - - -CLASSObjectDict.cxx: $(LOCALINC)/CLASSObject.hxx - rootcint -f $@ -c $^ - -CLASSFacilityDict.cxx: $(LOCALINC)/CLASSFacility.hxx - rootcint -f $@ -c $^ - -CLASSBackEndDict.cxx: $(LOCALINC)/CLASSBackEnd.hxx - rootcint -f $@ -c $^ - -StorageDict.cxx: $(LOCALINC)/Storage.hxx - rootcint -f $@ -c $^ - -ReactorDict.cxx: $(LOCALINC)/Reactor.hxx - rootcint -f $@ -c $^ - -FabricationPlantDict.cxx: $(LOCALINC)/FabricationPlant.hxx - rootcint -f $@ -c $^ - -PoolDict.cxx: $(LOCALINC)/Pool.hxx - rootcint -f $@ -c $^ - -SeparationPlantDict.cxx: $(LOCALINC)/SeparationPlant.hxx - rootcint -f $@ -c $^ - -IsotopicVectorDict.cxx: $(LOCALINC)/IsotopicVector.hxx - rootcint -f $@ -c $^ - -ZAIDict.cxx: $(LOCALINC)/ZAI.hxx - rootcint -f $@ -c $^ - -EvolutionDataDict.cxx: $(LOCALINC)/EvolutionData.hxx - rootcint -f $@ -c $^ - - -.SUFFIXES: .cxx - -%.o: %.cxx $(INCLUDES) - $(CXX) $(CXXFLAGS) -c $*.cxx -o $*.o diff --git a/source/branches/CLASSV4.1/src/PhysicsModels.cxx b/source/branches/CLASSV4.1/src/PhysicsModels.cxx deleted file mode 100644 index ab9f23061..000000000 --- a/source/branches/CLASSV4.1/src/PhysicsModels.cxx +++ /dev/null @@ -1,57 +0,0 @@ -#include "PhysicsModels.hxx" - -//________________________________________________________________________ -// -// PhysicsModels -// -// -// -// -//________________________________________________________________________ - - - -PhysicsModels::PhysicsModels():CLASSObject() -{ - - fXSModel = 0; - fEquivalenceModel = 0; - fIrradiationModel = 0; - - -} -//________________________________________________________________________ -PhysicsModels::PhysicsModels(XSModel* XS, EquivalenceModel* EM, IrradiationModel* IM ):CLASSObject() -{ - - fXSModel = XS; - fEquivalenceModel = EM; - fIrradiationModel = IM; - - int Z_ZAIThreshold = fIrradiationModel->GetZAIThreshold(); - fXSModel->SetZAIThreshold(Z_ZAIThreshold); - - -} -//________________________________________________________________________ -PhysicsModels::PhysicsModels(CLASSLogger* log, XSModel* XS, EquivalenceModel* EM, IrradiationModel* IM ):CLASSObject(log) -{ - - fXSModel = XS; - fEquivalenceModel = EM; - fIrradiationModel = IM; - - int Z_ZAIThreshold = fIrradiationModel->GetZAIThreshold(); - fXSModel->SetZAIThreshold(Z_ZAIThreshold); - - -} - -//________________________________________________________________________ -EvolutionData PhysicsModels::GenerateEvolutionData(IsotopicVector IV, double cycletime, double Power) -{ - fXSModel->isIVInDomain(IV); - - return fIrradiationModel->GenerateEvolutionData(IV, fXSModel->GetCrossSections(IV), Power, cycletime); -} -//________________________________________________________________________ diff --git a/source/branches/CLASSV4.1/src/Pool.cxx b/source/branches/CLASSV4.1/src/Pool.cxx deleted file mode 100755 index ed9844e44..000000000 --- a/source/branches/CLASSV4.1/src/Pool.cxx +++ /dev/null @@ -1,226 +0,0 @@ -#include "Pool.hxx" - -#include "IsotopicVector.hxx" -#include "Storage.hxx" -#include "Scenario.hxx" -#include "CLASSLogger.hxx" - -#include <sstream> -#include <string> -#include <iostream> -#include <cmath> -#include <algorithm> - -//________________________________________________________________________ -// -// Pool -// -// -// -// -//________________________________________________________________________ -ClassImp(Pool) - - -Pool::Pool():CLASSBackEnd(8) -{ - fOutBackEndFacility = 0; - SetName("P_Pool."); -} - - //________________________________________________________________________ -Pool::Pool(CLASSLogger* log, cSecond coolingtime):CLASSBackEnd(log, coolingtime, 8) -{ - DBGL - - - fCycleTime = (cSecond)coolingtime; - fPutToWaste = true; - fCoolingLastIndex = 0; - - fOutBackEndFacility = 0; - SetName("P_Pool."); - - - INFO << " A new Pool has been define :" << endl; - INFO << "\t The Cooling Time set at\t " << (double)(fCycleTime/cYear) << " year" << endl; - WARNING << " All Cooled Fuel goes directly to WASTE after cooling !! " << endl; - - DBGL - -} - -//________________________________________________________________________ -Pool::Pool(CLASSLogger* log, CLASSBackEnd* storage, cSecond coolingtime):CLASSBackEnd(log, coolingtime, 8) -{ - DBGL - - fOutBackEndFacility = storage; - SetIsStorageType(false); - - fPutToWaste = false; - fCoolingLastIndex = 0; - SetName("P_Pool."); - - - - INFO << " A new Pool has been define :" << endl; - INFO << "\t The Cooling Time set at\t " << (double)(fCycleTime/cYear) << " year" << endl; - - DBGL - -} - -//________________________________________________________________________ -Pool::~Pool() -{ - - -} - -//________________________________________________________________________ -//________________________________________________________________________ -void Pool::SetIVArray(vector<IsotopicVector> ivarray) -{ - INFO << "This method as no effect !!!" << endl; - INFO << "Use SetIVArray(vector<IsotopicVector> ivarray, vector<cSecond>n timearray) unstead!!!!"<<endl; -} - - -//________________________________________________________________________ -void Pool::SetIVArray(vector<IsotopicVector> ivarray, vector<cSecond> timearray) -{ - fIVArray = ivarray; - fIVArrayArrivalTime = timearray; - -} -//________________________________________________________________________ -// Add Temporary IV : -// Cooling -// -//________________________________________________________________________ -void Pool::AddIV(IsotopicVector IV) -{ - - fIVArray.push_back(IV); - fInsideIV += IV; - fIVArrayArrivalTime.push_back(fInternalTime); - fCoolingLastIndex++; - fCoolingIndex.push_back(fCoolingLastIndex); - - AddCumulativeIVIn(IV); - -} - - -//________________________________________________________________________ -void Pool::RemoveIVCooling(int i) //!< Remove a Cooling IsotopicVector -{ - AddCumulativeIVOut(fIVArray[i]); - - fIVArray.erase(fIVArray.begin()+i); - fIVArrayArrivalTime.erase( fIVArrayArrivalTime.begin()+i); - fCoolingIndex.erase(fCoolingIndex.begin()+i); - UpdateInsideIV(); -} - - - - -//________________________________________________________________________ -// Time Action with the reste of the Universe : -// Out Storage -// Evolution : -// Cooling -//________________________________________________________________________ - - - - -//________________________________________________________________________ -void Pool::CoolingEvolution(cSecond t) -{ -DBGL - - if(t == fInternalTime && t!=0) return; - int RemainingCoolingTime; - cSecond EvolutionTime = t - fInternalTime; - -#pragma omp parallel for - for ( int i = 0 ; i < (int)fIVArray.size() ; i++) - { - if ( abs(t - fIVArrayArrivalTime[i] - fCycleTime) < 3600 ) // ">" should not append, only "=" is normal... - { - if (t - fIVArrayArrivalTime[i] > fCycleTime) // Warning & Quit - { - ERROR << " Cooling Step : " << t/cYear<< " :" << " an evolution Step is probably missing ! " << " " << endl; - exit (1); - } - - RemainingCoolingTime = fCycleTime - (fInternalTime - fIVArrayArrivalTime[i]); - //Cooling Decay - fIVArray[i] = GetDecay( fIVArray[i], RemainingCoolingTime); - - -#pragma omp critical(DeleteCoolingIVPB) - {fCoolingEndOfCycle.push_back(i);} - - } - else if ( fIVArrayArrivalTime[i] != t ) - { - fIVArray[i] = GetDecay( fIVArray[i] , EvolutionTime); - } - } -#pragma omp critical(DeleteCoolingIVPB) - {sort (fCoolingEndOfCycle.begin(), fCoolingEndOfCycle.end());} - -DBGL -} - - -//________________________________________________________________________ -void Pool::Evolution(cSecond t) -{ - - // Check if the Pool has been created ... - if(t == fInternalTime && t!=0) return; - // Make the evolution for the Cooling IV ... - CoolingEvolution(t); - // Update Inside IV - UpdateInsideIV(); - // ... And Finaly update the AbsoluteInternalTime - fInternalTime = t; - - - -} - - -//________________________________________________________________________ -void Pool::Dump() -{ -DBGL -//------ Cooling ------// - for(int i = (int)fCoolingEndOfCycle.size()-1; i >=0 ; i--) // IV End Of Cooling - { - - int idx = fCoolingEndOfCycle[i]; // Get Index number - - if(!fPutToWaste) - fOutBackEndFacility->AddIV(fIVArray[idx]); - else - GetParc()->AddWaste(fIVArray[idx]); - - fCoolingEndOfCycle.erase(fCoolingEndOfCycle.begin()+i); // Remove index entry - RemoveIVCooling(idx); // Remove IVcooling - } - - if((int)fCoolingEndOfCycle.size() != 0 )// Control - { - ERROR << "Problem while Dumping Cooling"<< endl; - exit (1); - } -DBGL -} - - diff --git a/source/branches/CLASSV4.1/src/Reactor.cxx b/source/branches/CLASSV4.1/src/Reactor.cxx deleted file mode 100755 index e2281c8e9..000000000 --- a/source/branches/CLASSV4.1/src/Reactor.cxx +++ /dev/null @@ -1,607 +0,0 @@ -#include "Reactor.hxx" - -#include "EvolutionData.hxx" -#include "Pool.hxx" -#include "FabricationPlant.hxx" -#include "Storage.hxx" -#include "Scenario.hxx" -#include "CLASSConstante.hxx" - -#include <iostream> -#include <cmath> -#include <omp.h> -#include <typeinfo> - -//________________________________________________________________________ -// -// Reactor -// -// -// -// -//________________________________________________________________________ - - - -ClassImp(Reactor) - - -Reactor::Reactor():CLASSFacility(4) -{ - - SetName("R_Reactor."); - - fOutBackEndFacility = 0; - fStorage = 0; - fFabricationPlant = 0; - -} - -Reactor::Reactor(CLASSLogger* log):CLASSFacility(log, 4) -{ - DBGL - - fOutBackEndFacility = 0; - fStorage = 0; - fFabricationPlant = 0; - SetName("R_Reactor."); - - DBGL -} - -Reactor::Reactor(CLASSLogger* log, - CLASSBackEnd* Pool, - cSecond creationtime, - cSecond lifetime, - double power, double HMMass, double CapacityFactor ):CLASSFacility(log, creationtime, lifetime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fStorage = 0; - fFabricationPlant = 0; - - fFixedFuel = true; - fIsStorage = false; - - fOutBackEndFacility = Pool; - - fPower = power * CapacityFactor; - - fHeavyMetalMass = HMMass; - - fBurnUp = -1; - fCycleTime = (-1); - - fIVBeginCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVInCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - - - fFuelPlan = 0; - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is fixed (for now)! "<< endl; - INFO << "\t Creation time set at \t " << ((double)GetCreationTime())/((double)cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetLifeTime())/((double)cYear) << " year" << endl; - INFO << "\t The Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW (with Full Power " << power << " and " << CapacityFactor << " capacity factor)"<< endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - DBGL - -} - -Reactor::Reactor(CLASSLogger* log, - FabricationPlant* fabricationplant, CLASSBackEnd* Pool, - cSecond creationtime, cSecond lifetime, - double Power, double HMMass, double CapacityFactor):CLASSFacility(log, creationtime, lifetime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fStorage = 0; - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fFabricationPlant = fabricationplant; - fFixedFuel = false; - - fOutBackEndFacility = Pool; - - fBurnUp = -1; - fHeavyMetalMass = HMMass; - fPower = Power*CapacityFactor; - fCycleTime = -1; //BU in GWd/t - - fFuelPlan = 0; - - - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is not fixed (for now)! "<< endl; - INFO << "\t Creation time set at \t " << ((double)GetCreationTime())/((double)cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetLifeTime())/((double)cYear) << " year" << endl; - INFO << "\t The Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW (with Full Power " << Power << " and " << CapacityFactor << " capacity factor)"<< endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - - DBGL - -} - - -Reactor::Reactor(CLASSLogger* log, PhysicsModels* fueltypeDB, FabricationPlant* fabricationplant, CLASSBackEnd* Pool, - cSecond creationtime, cSecond lifetime, - double Power, double HMMass, double BurnUp, double CapacityFactor):CLASSFacility(log, creationtime, lifetime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fStorage = 0; - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fFabricationPlant = fabricationplant; - - fFixedFuel = false; - - fOutBackEndFacility = Pool; - - fBurnUp = BurnUp; - fHeavyMetalMass = HMMass; - fPower = Power*CapacityFactor; - fCycleTime = (cSecond) (fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); //BU in GWd/t - - fFuelPlan = new CLASSFuelPlan(log); - fFuelPlan->AddFuel(creationtime, CLASSFuel(fueltypeDB), fBurnUp); - - - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is not fixed ! "<< endl; - INFO << "\t Creation time set at \t " << (double)(GetCreationTime()/cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetLifeTime())/((double)cYear) << " year" << endl; - INFO << "\t The Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW (with Full Power " << Power << " and " << CapacityFactor << " capacity factor)"<< endl; - INFO << "\t Burn-Up at end of Cycle set at \t " << (double)(fBurnUp) << " GWj/t" << endl; - INFO << "\t The corresponding Cycle Time is\t " << ((double)fCycleTime)/((double)cYear) << " year" << endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - - DBGL - -} - -Reactor::Reactor(CLASSLogger* log, PhysicsModels* fueltypeDB, - FabricationPlant* fabricationplant, - CLASSBackEnd* Pool, - cSecond creationtime, cSecond lifetime, cSecond cycletime, - double HMMass, double BurnUp):CLASSFacility(log, creationtime, lifetime, cycletime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fStorage = 0; - - fFabricationPlant = fabricationplant; - fFixedFuel = false; - fBurnUp = BurnUp; - fHeavyMetalMass = HMMass; - - fOutBackEndFacility = Pool; - fPower = BurnUp*3600.*24. / (fCycleTime) * HMMass *1e9; //BU in GWd/t - - fFuelPlan = new CLASSFuelPlan(log); - fFuelPlan->AddFuel(creationtime, CLASSFuel(fueltypeDB), fBurnUp); - - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is not fixed ! "<< endl; - INFO << "\t Creation time set at \t " << ((double)GetCreationTime())/((double)cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetCreationTime())/((double)cYear) << " year" << endl; - INFO << "\t The Cycle Time set at\t " << ((double)fCycleTime)/((double)cYear) << " year" << endl; - INFO << "\t Burn-Up at end of Cycle set at \t " << (double)(fBurnUp) << " GWj/t" << endl; - INFO << "\t The corresponding Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW" << endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - - DBGL - -} - - -Reactor::Reactor(CLASSLogger* log, EvolutionData* evolutivedb, - CLASSBackEnd* Pool, - cSecond creationtime, - cSecond lifetime, - double power, double HMMass, double BurnUp, double CapacityFactor ):CLASSFacility(log, creationtime, lifetime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fStorage = 0; - fFabricationPlant = 0; - - fFixedFuel = true; - fIsStorage = false; - - fOutBackEndFacility = Pool; - - fPower = power * CapacityFactor; - - fHeavyMetalMass = HMMass; - - double M0 = cZAIMass.GetMass( evolutivedb->GetIsotopicVectorAt(0.).GetActinidesComposition() ); - - fEvolutionDB = (*evolutivedb) * (fHeavyMetalMass/M0); - - fBurnUp = BurnUp; - fCycleTime = (cSecond) (fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); - - fIVBeginCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVInCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - - fFuelPlan = new CLASSFuelPlan(log); - fFuelPlan->AddFuel(creationtime, CLASSFuel(evolutivedb), fBurnUp); - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is fixed ! "<< endl; - INFO << "\t Creation time set at \t " << (double)(GetCreationTime()/cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetLifeTime())/((double)cYear) << " year" << endl; - INFO << "\t The Cycle Time set at\t " << ((double)fCycleTime)/((double)cYear) << " year" << endl; - INFO << "\t The Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW (with Full Power " << power << " and " << CapacityFactor << " capacity factor)"<< endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - - DBGL -} - -Reactor::Reactor(CLASSLogger* log, EvolutionData* evolutivedb, - CLASSBackEnd* Pool, - cSecond creationtime, cSecond lifetime, cSecond cycletime, - double HMMass, double BurnUp ):CLASSFacility(log, creationtime, lifetime, cycletime, 4) -{ - DBGL - (*this).SetName("R_Reactor."); - - - fIsStarted = false; - fIsShutDown = false; - fIsAtEndOfCycle = false; - - fStorage = 0; - fFabricationPlant = 0; - - fFixedFuel = true; - fIsStorage = false; - - fOutBackEndFacility = Pool; - - fPower = BurnUp*3600.*24. / (fCycleTime) * HMMass *1e9; //BU in GWd/t - - fHeavyMetalMass = HMMass; - - double M0 = cZAIMass.GetMass( evolutivedb->GetIsotopicVectorAt(0.).GetActinidesComposition() ); - - fEvolutionDB = (*evolutivedb) * (fHeavyMetalMass/M0); - - fBurnUp = BurnUp; - - fIVBeginCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVInCycle = fEvolutionDB.GetIsotopicVectorAt(0); - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - - - fFuelPlan->AddFuel(creationtime, CLASSFuel(evolutivedb), fBurnUp); - - INFO << " A Reactor has been define :" << endl; - INFO << "\t Fuel Composition is fixed ! "<< endl; - INFO << "\t Creation time set at \t " << ((double)GetCreationTime())/((double)cYear) << " year" << endl; - INFO << "\t Life time (Operating's Duration) set at \t " << ((double)GetLifeTime())/((double)cYear) << " year" << endl; - INFO << "\t The Cycle Time set at\t " << ((double)fCycleTime)/((double)cYear) << " year" << endl; - INFO << "\t The Effective Thermal Power is \t " << (double)(fPower *1e-6) << " MW (with Full Power " << fPower << endl; - INFO << "\t The Heavy Metal Mass in the Core set at " << (double)(fHeavyMetalMass) << " tons" << endl << endl; - - DBGL -} - - -//________________________________________________________________________ -Reactor::~Reactor() -{ - - -} - -//________________________________________________________________________ -void Reactor::SetCycleTime(double cycletime) -{ - fCycleTime = (cSecond)cycletime; - - if(fFixedFuel==true) - { - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt(fCycleTime/fEvolutionDB.GetPower()*fPower); - fBurnUp = fPower*fCycleTime/3600./24./fHeavyMetalMass; - } - else - { - fBurnUp = fPower*fCycleTime/3600./24./fHeavyMetalMass; - } -} -//________________________________________________________________________ -void Reactor::SetPower(double Power) -{ - fPower = Power; - - if(fFixedFuel==true) - { - fCycleTime = (cSecond) (fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - } - else - fCycleTime = (cSecond)(fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); //BU in GWd/t - - -} -//________________________________________________________________________ -void Reactor::SetBurnUp(double BU) -{ - - fBurnUp = BU; - - if(fFixedFuel==true) - { - fCycleTime = (cSecond) (fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - } - else - fCycleTime = (cSecond) (fBurnUp*1e9 / (fPower) * fHeavyMetalMass *3600*24); - -} - -//________________________________________________________________________ -void Reactor::SetEvolutionDB(EvolutionData evolutionDB) -{ - double M0 = cZAIMass.GetMass( evolutionDB.GetIsotopicVectorAt(0.).GetActinidesComposition() ); - fEvolutionDB = evolutionDB * (fHeavyMetalMass/M0); - - fIVOutCycle = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fCycleTime/fEvolutionDB.GetPower()*fPower) ); - fIVBeginCycle = fEvolutionDB.GetIsotopicVectorAt(0); - - - -} - -//________________________________________________________________________ -void Reactor::SetNewFuel(EvolutionData ivdb) -{ - - SetEvolutionDB(ivdb); - -} - -//________________________________________________________________________ -void Reactor::Evolution(cSecond t) -{ -DBGL - - - if( fIsShutDown || t < GetCreationTime() ) return; // Reactor stop or not started... - - if(Norme(fInsideIV)!=0) - { -#pragma omp critical(ParcPowerUpdate) - {GetParc()->AddToPower(fPower);} - } - else if(fIsStarted==true) - { - WARNING << " Reactor should be working but have no Heavy Nucleus Inside. It's not working so have a zero power..." - << " Time : "<< t/cYear << " years" << endl; - } - - - if( t < fInternalTime ) return; - if( t == fInternalTime && t!=GetCreationTime() ) return; - - - - if( t == GetCreationTime() && !fIsStarted) // Start of the Reactor - { - fIsAtEndOfCycle = true; - fInsideIV = fIVBeginCycle; - fInternalTime = t; - fInCycleTime = 0; - - } - - // Check if the Reactor if started ... - if(!fIsStarted) return; // If the reactor just start don't need to make Fuel evolution - - - cSecond EvolutionTime = t - fInternalTime; // Calculation of the evolution time (relativ) - - - if( EvolutionTime + fInCycleTime == fCycleTime ) //End of Cycle - { - fIsAtEndOfCycle = true; - fInternalTime += EvolutionTime; // Update Internal Time - fInCycleTime += EvolutionTime; // Update InCycleTime - - if(t >= GetCreationTime() + GetLifeTime()) // if the Next Cycle don't 'Exist... - fIsShutDown = true; - - - } - else if(EvolutionTime + fInCycleTime < fCycleTime ) // During Cycle - { - - fInternalTime += EvolutionTime; // Update Internal Time - fInCycleTime += EvolutionTime; // Update InCycleTime - - fInsideIV = fEvolutionDB.GetIsotopicVectorAt( (cSecond)(fInCycleTime/fEvolutionDB.GetPower()*fPower) ); // update the fuel composition - if(t>=GetCreationTime() + GetLifeTime()) fIsShutDown = true; - } - else - { - // Evolution goes after the end of cycle.... check it - ERROR << " " << (*this).GetName() << endl; - ERROR << " Evolution Time is " << t << endl; - ERROR << " Evolution is too long! There is a problem in Reactor evolution at " << t/cYear << endl; - ERROR << " This is too long of : " << EvolutionTime + fInCycleTime - fCycleTime << endl; - ERROR << " I have spend " << fInCycleTime +EvolutionTime << " and should have been " << fCycleTime << endl; - exit(1); - } - -DBGL -} - -//________________________________________________________________________ -void Reactor::Dump() -{ -DBGL - - - if(fInternalTime < GetCreationTime()) return; - if(fIsShutDown && !fIsStarted) return; // Reactor stopped... - if(!fIsAtEndOfCycle && !fIsShutDown) return; - -// First trash the irradiated fuel - if(fIsAtEndOfCycle && !fIsShutDown ) - { - if(fIsStarted ) // A Cycle has already been done - { - fOutBackEndFacility->AddIV(fInsideIV); - AddCumulativeIVOut(fInsideIV); - } - else fIsStarted = true; // Just start the first cycle - - } - else if (fIsAtEndOfCycle && fIsShutDown ) //shutdown at end of Cycle - { - - fOutBackEndFacility->AddIV(fIVOutCycle); - AddCumulativeIVOut(fIVOutCycle); - fInsideIV.Clear(); - fInCycleTime = 0; - fIsStarted = false; // shut down the Reactor - } - else if (!fIsAtEndOfCycle && fIsShutDown ) //shutdown during Cycle - { - fOutBackEndFacility->AddIV(fInsideIV); - AddCumulativeIVOut(fInsideIV); - fInsideIV.Clear(); - fInCycleTime = 0; - fIsStarted = false; // shut down the Reactor - } - - - DBGL - - -// Get the new Fuel ! - pair<CLASSFuel, double> NextFuel = fFuelPlan->GetFuelAt(fInternalTime); - SetBurnUp((NextFuel).second); - - if( NextFuel.first.GetPhysicsModels() ) - fFixedFuel = false; - else if( NextFuel.first.GetEvolutionData() ) - fFixedFuel = true; - else - { - ERROR << typeid(NextFuel.first).name() << endl; - ERROR << "WRONG Fuel Format Correct it !! " << endl; - exit(1); - } - DBGL - - if(fFixedFuel ) - { - DBGL - if(fIsAtEndOfCycle && !fIsShutDown ) - { - SetEvolutionDB( *(NextFuel.first.GetEvolutionData()) ); - fIsAtEndOfCycle = false; - - - if(!GetParc()->GetStockManagement() && fIsStorage ) - { - IsotopicVector BuildIVtmp ; - IsotopicVector OutIncomePart; - - //Get The Storage Compostion - BuildIVtmp.Add(fStorage->GetInsideIV().GetIsotopicQuantity()); - //Get the rest after IVIn creation - BuildIVtmp -= fIVInCycle; - //Get the OutIncome part form this rest - OutIncomePart.Add(BuildIVtmp.GetIsotopicQuantityNeeded()) ; - //Take what you can from Storage... - fStorage->TakeFromStock( fIVInCycle - OutIncomePart); - //And Get the rest from OutIncome - GetParc()->AddOutIncome(OutIncomePart); - - } - else GetParc()->AddOutIncome(fIVInCycle); - - - fInsideIV = fIVBeginCycle; - AddCumulativeIVIn(fIVBeginCycle); - - fInCycleTime = 0; - } - DBGL - - } - else - { - DBGL - if(!GetParc()->GetStockManagement()) - { - ERROR << " Can't have unfixedFuel without stock management" << endl; - exit(1); - } - - if(fIsAtEndOfCycle && !fIsShutDown ) - { - fIsAtEndOfCycle = false; - - SetNewFuel(fFabricationPlant->GetReactorEvolutionDB(GetId())); - fFabricationPlant->TakeReactorFuel(GetId()); - - - fInsideIV = fIVBeginCycle; - AddCumulativeIVIn(fIVBeginCycle); - - fInCycleTime = 0; - } - - DBGL - - - - } - -DBGL -} - - - - diff --git a/source/branches/CLASSV4.1/src/Scenario.cxx b/source/branches/CLASSV4.1/src/Scenario.cxx deleted file mode 100755 index 5afb2dcf7..000000000 --- a/source/branches/CLASSV4.1/src/Scenario.cxx +++ /dev/null @@ -1,900 +0,0 @@ -#include "Scenario.hxx" - -#include <ctime> -#include "time.h" -#include <cmath> -#include <iomanip> -#include <fstream> -#include <sstream> -#include <algorithm> -#include <omp.h> -#include "stdlib.h" - -#include "Storage.hxx" -#include "Reactor.hxx" -#include "CLASSBackEnd.hxx" -#include "Pool.hxx" -#include "FabricationPlant.hxx" -#include "SeparationPlant.hxx" -#include "CLASSLogger.hxx" - - -//________________________________________________________________________ -// -// CLASS -// -// -// -// -//________________________________________________________________________ - - - -float random(float a, float b) //peak random numebr between a and b -{ - float range = pow(2., 31); - srand(time(NULL)); //initialize the srand - return (float)a + (float)(b-a)*rand()/range; -} - -string dtoa(double num) -{ - ostringstream os(ostringstream::out); - os<<setprecision(3)<<num; - return os.str(); -} - -//________________________________________________________________________ -Scenario::Scenario(CLASSLogger* log, cSecond abstime):CLASSObject(log) -{ - - - fNewTtree = true; - fPrintStep = (cSecond)(cYear); // One Step per Year - fAbsoluteTime = abstime; - fStartingTime = fAbsoluteTime; - - fStockManagement = true; - fLogTimeStep = false; - - fOutputFileName = "CLASS_Default.root"; - fOutputTreeName = "Data"; - fOutFile = 0; - fOutT = 0; - - fParcPower = 0; - - fZAIThreshold = -1; - - // Warning - - - INFO << " Parc has been define :" << endl; - INFO << " Print set at : " << (double)(fPrintStep/cYear) << " year" << endl; - INFO << " StockManagement set at : true" << endl; - INFO << " OutPut will be in \"" << fOutputFileName << "\" File and \"" << fOutputTreeName << "\" TTree" << endl; - INFO << " Log will be in " << GetLog()->GetCLASSLoggerName() << endl; - - - -} - - -//________________________________________________________________________ -Scenario::Scenario( cSecond abstime, CLASSLogger* log):CLASSObject(log) -{ - - - fNewTtree = true; - fPrintStep = (cSecond)(cYear); // One Step per Year - fAbsoluteTime = abstime; - fStartingTime = fAbsoluteTime; - - fStockManagement = true; - fLogTimeStep = false; - - fOutputFileName = "CLASS_Default.root"; - fOutputTreeName = "Data"; - fOutFile = 0; - fOutT = 0; - - fParcPower = 0; - - fZAIThreshold = -1; - - // Warning - - - INFO << " Parc has been define :" << endl; - INFO << " Print set at : " << (double)(fPrintStep/cYear) << " year" << endl; - INFO << " StockManagement set at : true" << endl; - INFO << " OutPut will be in \"" << fOutputFileName << "\" File and \"" << fOutputTreeName << "\" TTree" << endl; - INFO << " Log will be in " << GetLog()->GetCLASSLoggerName() << endl; - - - -} - -//________________________________________________________________________ -Scenario::Scenario( cSecond abstime ):CLASSObject(new CLASSLogger("CLASS_OUTPUT.log")) -{ - - - fNewTtree = true; - fPrintStep = (cSecond)(cYear); // One Step per Year - fAbsoluteTime = abstime; - fStartingTime = fAbsoluteTime; - - fStockManagement = true; - fLogTimeStep = false; - - fOutputFileName = "CLASS_Default.root"; - fOutputTreeName = "Data"; - fOutFile = 0; - fOutT = 0; - - fParcPower = 0; - - fZAIThreshold = -1; - - // Warning - - - INFO << " Parc has been define :" << endl; - INFO << " Print set at : " << (double)(fPrintStep/cYear) << " year" << endl; - INFO << " StockManagement set at : true" << endl; - INFO << " OutPut will be in \"" << fOutputFileName << "\" File and \"" << fOutputTreeName << "\" TTree" << endl; - INFO << " Log will be in " << GetLog()->GetCLASSLoggerName() << endl; - - - -} - - -//________________________________________________________________________ -Scenario::~Scenario() -{ - -#pragma omp single - {CloseOutputTree();} - - -} - -//________________________________________________________________________ -void Scenario::AddPool(Pool* Pool) -{ - - - fPool.push_back(Pool); - fPool.back()->SetParc(this); - fPool.back()->SetDecayDataBank( (*this).GetDecayDataBase() ); - fPool.back()->SetLog(GetLog()); - fPool.back()->SetId((int)fPool.size()-1); - fPool.back()->SetInternalTime(fAbsoluteTime); - - - string Pool_name = fPool.back()->GetName(); - if(Pool_name == "P_Pool.") - { - Pool_name = "P_Pool"; - Pool_name += dtoa(fPool.back()->GetId()); - Pool_name += "."; - fPool.back()->SetName(Pool_name.c_str()); - } - else - { - string name_tmp = Pool_name; - Pool_name = "P_"; - Pool_name += name_tmp; - Pool_name += "."; - fPool.back()->SetName(Pool_name.c_str()); - } - - if(!fNewTtree) - fOutT->Branch(fPool.back()->GetName(), "Pool", &fPool.back()); - - -} - -//________________________________________________________________________ -void Scenario::AddReactor(Reactor* reactor) -{ - - fReactor.push_back(reactor); - fReactor.back()->SetParc(this); - fReactor.back()->SetLog(GetLog()); - fReactor.back()->SetId((int)fReactor.size()-1); - fReactor.back()->SetInternalTime(fAbsoluteTime); - - - string Reactor_name = fReactor.back()->GetName(); - if(Reactor_name == "R_Reactor.") - { - Reactor_name = "R_Reactor"; - Reactor_name += dtoa(fReactor.back()->GetId()); - Reactor_name += "."; - fReactor.back()->SetName(Reactor_name.c_str()); - } - else - { - string name_tmp = Reactor_name; - Reactor_name = "R_"; - Reactor_name += name_tmp; - Reactor_name += "."; - fReactor.back()->SetName(Reactor_name.c_str()); - } - - if(!fNewTtree) - fOutT->Branch(fReactor.back()->GetName(), "Reactor", &fReactor.back()); - - -} - -//________________________________________________________________________ -void Scenario::AddStorage(Storage* storage) -{ - - fStorage.push_back(storage); - fStorage.back()->SetParc(this); - fStorage.back()->SetDecayDataBank( (*this).GetDecayDataBase() ); - fStorage.back()->SetLog(GetLog()); - fStorage.back()->SetId((int)fStorage.size()-1); - fStorage.back()->SetInternalTime(fAbsoluteTime); - - string Storage_name = fStorage.back()->GetName(); - - if(Storage_name == "S_Storage.") - { - Storage_name = "S_Storage"; - Storage_name += dtoa(fStorage.back()->GetId()); - Storage_name += "."; - fStorage.back()->SetName(Storage_name.c_str()); - } - else - { - string name_tmp = Storage_name; - Storage_name = "S_"; - Storage_name += name_tmp; - Storage_name += "."; - fStorage.back()->SetName(Storage_name.c_str()); - } - - if(!fNewTtree) - fOutT->Branch(fStorage.back()->GetName(), "Storage", &fStorage.back()); - - -} -//________________________________________________________________________ -void Scenario::AddFabricationPlant(FabricationPlant* fabricationplant) -{ - - fFabricationPlant.push_back(fabricationplant); - fFabricationPlant.back()->SetParc(this); - fFabricationPlant.back()->SetDecayDataBank( (*this).GetDecayDataBase() ); - fFabricationPlant.back()->SetLog(GetLog()); - fFabricationPlant.back()->SetId((int)fStorage.size()-1); - fFabricationPlant.back()->SetInternalTime(fAbsoluteTime); - - - string FP_name = fFabricationPlant.back()->GetName(); - if(FP_name == "F_FabricationPlant.") - { - FP_name = "F_FabricationPlant"; - FP_name += dtoa(fFabricationPlant.back()->GetId()); - FP_name += "."; - fFabricationPlant.back()->SetName(FP_name.c_str()); - } - else - { - string name_tmp = FP_name; - FP_name = "F_"; - FP_name += name_tmp; - FP_name += "."; - fFabricationPlant.back()->SetName(FP_name.c_str()); - } - - if(!fNewTtree) - fOutT->Branch(fFabricationPlant.back()->GetName(), "FabricationPlant", &fFabricationPlant.back()); -} -//________________________________________________________________________ -void Scenario::AddSeparationPlant(SeparationPlant* SeparationPlant) -{ - - - fSeparationPlant.push_back(SeparationPlant); - fSeparationPlant.back()->SetParc(this); - fSeparationPlant.back()->SetDecayDataBank( (*this).GetDecayDataBase() ); - fSeparationPlant.back()->SetLog(GetLog()); - fSeparationPlant.back()->SetId((int)fSeparationPlant.size()-1); - fSeparationPlant.back()->SetInternalTime(fAbsoluteTime); - - - string SeparationPlant_name = fSeparationPlant.back()->GetName(); - if(SeparationPlant_name == "C_SepPlant.") - { - SeparationPlant_name = "C_SepPlant"; - SeparationPlant_name += dtoa(fSeparationPlant.back()->GetId()); - SeparationPlant_name += "."; - fSeparationPlant.back()->SetName(SeparationPlant_name.c_str()); - } - else - { - string name_tmp = SeparationPlant_name; - SeparationPlant_name = "C_"; - SeparationPlant_name += name_tmp; - SeparationPlant_name += "."; - fSeparationPlant.back()->SetName(SeparationPlant_name.c_str()); - } - - if(!fNewTtree) - fOutT->Branch(fSeparationPlant.back()->GetName(), "SeparationPlant", &fSeparationPlant.back()); - - -} - - -//________________________________________________________________________ - - -//________________________________________________________________________ -void Scenario::BuildTimeVector(cSecond t) -{ - DBGL - fTimeStep.clear(); - fTimeStep.insert( pair<cSecond ,int>(t,1) ); - //********* Printing Step *********// - { - DBGL - cSecond step = fStartingTime; - - if(step >= fAbsoluteTime ) - fTimeStep.insert( pair<cSecond ,int>(step,1) ); - step += fPrintStep; - cSecond timescale = 1; - - do - { - - if(step >= fAbsoluteTime ) - fTimeStep.insert( pair<cSecond ,int>(step,1) ); - - if(fLogTimeStep) - { - timescale *= 10; - step = fPrintStep*timescale; - } - else - step += fPrintStep; - - } - while( step < t ); - DBGL - } - - - for(int i = 0; i < (int)fReactor.size();i++) - { - DBGL - cSecond R_StartingTime = fReactor[i]->GetCreationTime(); - cSecond R_ShutDownTime = fReactor[i]->GetCreationTime() + fReactor[i]->GetLifeTime(); - - double R_Power = fReactor[i]->GetPower(); - double R_HMMass = fReactor[i]->GetHeavyMetalMass(); - pair<CLASSFuel, double> R_Fuel = fReactor[i]->GetFuelPlan()->GetFuelAt(R_StartingTime); - - double R_BU = R_Fuel.second; - cSecond R_CycleTime = (cSecond) (R_BU*1e9 / R_Power * R_HMMass *3600*24); - if(R_CycleTime == 0) - { - ERROR << " Be carefull a reactor cycletime is set to 0 second....\"\n" << endl; - exit(1); - } - - int R_FacilityType = fReactor[i]->GetFacilityType(); - - - cSecond F_CycleTime = 0; - - - cSecond step = R_StartingTime; - - map< cSecond, int > R_BackEndTimePath = fReactor[i]->GetOutBackEndFacility()->GetTheBackEndTimePath(); - - if( R_Fuel.first.GetPhysicsModels() ) - F_CycleTime = fReactor[i]->GetFabricationPlant()->GetCycleTime(); - - - //********* Reactor Evolution Step *********// - // ShutDown of a reactor - - // Test if the shutdown of the reactor is after the actual time (AbsolutreTime) and before the end of the evolution (t) - if( R_ShutDownTime < t ) - { - // Shutdown - if( R_ShutDownTime > fAbsoluteTime) - { - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = fTimeStep.insert( pair<cSecond ,int>(R_ShutDownTime, 2) ); - if( !IResult.second ) - IResult.first->second |= 2; - } - - // BackEnd fuel Cycle after reactor Shutdown - - map< cSecond, int >::iterator TV_it; // the time vector iterator - - // Loop on the BackEnd fuel Cycle Time path - for(TV_it = R_BackEndTimePath.begin(); TV_it != R_BackEndTimePath.end(); TV_it++) - { - // Test if each step of the Fuel Cycle BackEnd is after the actual time (AbsolutreTime) and before the end of the evolution (t) - if( R_ShutDownTime + (*TV_it).first >= fAbsoluteTime && R_ShutDownTime + (*TV_it).first <= t) - { - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = fTimeStep.insert( pair<cSecond ,int>(R_ShutDownTime + (*TV_it).first, (*TV_it).second) ); - if( !IResult.second ) - IResult.first->second |= (*TV_it).second; - } - } - - - } - - // Start the reactor and the Fuel Fabrication - if(step >= fAbsoluteTime && step <= t && step < R_ShutDownTime) - { - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = fTimeStep.insert( pair<cSecond ,int>(step, R_FacilityType) ); - if( !IResult.second ) - IResult.first->second |= R_FacilityType; - } - - - //********* FabricationPlant Evolution Step *********// - - - if( R_Fuel.first.GetPhysicsModels() ) - { - - fReactor[i]->GetFabricationPlant()->AddReactor( i, step ); - - - F_CycleTime = fReactor[i]->GetFabricationPlant()->GetCycleTime(); - - if(step - F_CycleTime >= fAbsoluteTime && step - F_CycleTime <= t && step < R_ShutDownTime) - { // Set End of reactor cycle - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = fTimeStep.insert( pair<cSecond ,int>(step - F_CycleTime,16) ); - if( !IResult.second ) IResult.first->second |= 16; - } - else if( step - F_CycleTime < fStartingTime ) - { - ERROR << " Can't Build Fuel before Scenario's start\"\n" << endl; - exit(1); - } - } - - step += R_CycleTime; - //Prepare the first Cycle - R_Fuel = fReactor[i]->GetFuelPlan()->GetFuelAt(step); - - R_BU = fReactor[i]->GetFuelPlan()->GetFuelAt(step).second; - R_CycleTime = (cSecond) (R_BU*1e9 / R_Power * R_HMMass *3600*24); - - if(R_CycleTime == 0) - { - ERROR << " Be carefull a reactor cycletime is set to 0 second....\"\n" << endl; - exit(1); - } - - - while(step <= t && step <= R_ShutDownTime ) - { - DBGL - - // FabricationPlant Evolution Step - if( R_Fuel.first.GetPhysicsModels() ) - { - fReactor[i]->GetFabricationPlant()->AddReactor( i, step ); - - F_CycleTime = fReactor[i]->GetFabricationPlant()->GetCycleTime(); - - if(step - F_CycleTime >= fAbsoluteTime && step - F_CycleTime <= t && step < R_ShutDownTime) - { // Set End of reactor cycle - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = fTimeStep.insert( pair<cSecond ,int>(step - F_CycleTime,16) ); - if( !IResult.second ) IResult.first->second |= 16; - } - } - - - if(step >= fAbsoluteTime && step <= t && step < R_ShutDownTime) - { // Set End of reactor cycle - pair< map<cSecond, int>::iterator, bool > IResult = fTimeStep.insert( pair<cSecond ,int>(step,4) ); - if( !IResult.second ) IResult.first->second |= 4; - } - - // End/Start Of Reactor Cycle Step // - - - map< cSecond, int >::iterator TV_it; // the time vector iterator - // BackEnd fuel Cycle - // Loop on the BackEnd fuel Cycle Time path - for(TV_it = R_BackEndTimePath.begin(); TV_it != R_BackEndTimePath.end(); TV_it++) - { - - if(step + (*TV_it).first >= fAbsoluteTime && - step + (*TV_it).first <= t) - { // Test if each step of the Fuel Cycle BackEnd is after the actual time (AbsolutreTime) and before the end of the evolution (t) - pair< map<cSecond, int>::iterator, bool > IResult; - - IResult = fTimeStep.insert( pair<cSecond ,int>(step + (*TV_it).first, (*TV_it).second) ); - if( !IResult.second ) - IResult.first->second |= (*TV_it).second; - } - } - - - step += R_CycleTime; - - // Update to the next fuel - R_Fuel = fReactor[i]->GetFuelPlan()->GetFuelAt(step); - - R_BU = fReactor[i]->GetFuelPlan()->GetFuelAt(step).second; - R_CycleTime = (cSecond) (R_BU*1e9 / R_Power * R_HMMass *3600*24); - if(R_CycleTime == 0) - { - ERROR << " Be carefull a reactor cycletime is set to 0 second....\"\n" << endl; - exit(1); - } - - DBGL - } - - - - DBGL - } - //****** Print the Time Index ******// - ofstream TimeStepfile("CLASS_TimeStep", ios_base::app); // Open the File - - if(!TimeStepfile) - WARNING << " Can't open \" CLASS_TimeStep \"\n" << endl; - - map<cSecond ,int >::iterator it; - for( it = fTimeStep.begin(); it != fTimeStep.end(); it++) - TimeStepfile << (*it).first << " " << (*it).second << endl; - - DBGL -} - - -//________________________________________________________________________ -//___________________________ Evolution Method ___________________________ -//________________________________________________________________________ - -void Scenario::BackEndEvolution() -{ - DBGL - StorageEvolution(); - PoolEvolution(); - - PoolDump(); - DBGL -} - -void Scenario::PoolEvolution() -{ - DBGL -#pragma omp parallel for - for(int i = 0; i < (int) fPool.size();i++) - fPool[i]->Evolution(fAbsoluteTime); - - DBGL -} - -void Scenario::StorageEvolution() -{ - DBGL -#pragma omp parallel for - for(int i = 0; i < (int) fStorage.size();i++) - fStorage[i]->Evolution(fAbsoluteTime); - - DBGL -} - -void Scenario::FabricationPlantEvolution() -{ - DBGL - //#pragma omp parallel for - for(int i = 0; i < (int) fFabricationPlant.size();i++) - fFabricationPlant[i]->Evolution(fAbsoluteTime); - - DBGL -} - - -void Scenario::PoolDump() -{ - DBGL - for(int i = 0; i < (int) fPool.size();i++) - fPool[i]->Dump(); - DBGL -} - -//________________________________________________________________________ -void Scenario::ReactorEvolution() -{ - DBGL - fParcPower = 0; -#pragma omp parallel for - for(int i = 0; i < (int)fReactor.size(); i++) - fReactor[i]->Evolution(fAbsoluteTime); - - - for(int i = 0; i < (int)fReactor.size(); i++) - fReactor[i]->Dump(); - - DBGL -} - -//________________________________________________________________________ -void Scenario::Evolution(cSecond t) -{ - DBGL - - BuildTimeVector(t); - - if(fNewTtree) - { - OpenOutputTree(); - OutAttach(); - UpdateParc(); - fOutT->Fill(); - } - - map<cSecond ,int >::iterator it; - for(it = fTimeStep.begin(); it != fTimeStep.end(); it++) - { - - fWaste = fDecayDataBase->GetDecay(fWaste, (*it).first - fAbsoluteTime); - fAbsoluteTime = (*it).first; - - if( (*it).second & 1 || (*it).second & 2 || (*it).second & 4 || (*it).second & 8 || (*it).second & 16 ) - BackEndEvolution(); - - if( (*it).second & 1 || (*it).second & 2 || (*it).second & 4 || (*it).second & 16 ) - FabricationPlantEvolution(); - - if( (*it).second & 1 || (*it).second & 2 || (*it).second & 4 ) - ReactorEvolution(); - - if( (*it).second & 1 || it == fTimeStep.begin() ) - { -#pragma omp single - { - if(fZAIThreshold != -1) - ApplyZAIThreshold(); - - UpdateParc(); - fOutT->Fill(); - ProgressPrintout( (cSecond)t); - } - } - - } - cout << endl; - - DBGL -} - -void Scenario::ProgressPrintout(cSecond t) -{ - - double Time = (fAbsoluteTime-fStartingTime)/cYear ; - double Total = (t-fStartingTime)/cYear; - - // Reset the line - for(int i = 0; i < 10; i++) - cout << " "; - cout << flush ; - - cout << "\r["; - for(int i = 0; i < (int)(Time/Total*20.0); i++) - cout << "|"; - for(int i = 20; i >= (int)(Time/Total*20.0); i--) - cout << "-"; - cout << "] "; - - cout << " Processed "; - if (Time < 10) cout << " "; - if (Time < 100) cout << " "; - cout << (int)Time << " / " << (int)Total << " Years \r"; - if( fLog->GetVerboseLVL() < 2) cout << flush; - else cout << endl; - - - INFO << " Proccessed " << (int)Time << " / " << (int)Total << " Years \r" << endl; - -} - -//________________________________________________________________________ -//______________________________ Out Method ______________________________ -//________________________________________________________________________ - -void Scenario::ApplyZAIThreshold() -{ - for(int i =0; i < (int)fFabricationPlant.size(); i++) - fFabricationPlant[i]->ApplyZAIThreshold(fZAIThreshold); - - for(int i = 0; i < (int) fPool.size();i++) - fPool[i]->ApplyZAIThreshold(fZAIThreshold); - - for(int i = 0; i < (int)fStorage.size(); i++) - fStorage[i]->ApplyZAIThreshold(fZAIThreshold); - - for(int i = 0; i < (int)fReactor.size(); i++) - fReactor[i]->ApplyZAIThreshold(fZAIThreshold); - - - fWaste.ApplyZAIThreshold(fZAIThreshold); - - -} - - - - -void Scenario::UpdateParc() -{ - - ResetQuantity(); - - for(int i =0; i < (int)fFabricationPlant.size(); i++) - fFuelFabrication += fFabricationPlant[i]->GetInsideIV(); - - for(int i = 0; i < (int) fPool.size();i++) - fTotalCooling += fPool[i]->GetInsideIV(); - - for(int i = 0; i < (int)fStorage.size(); i++) - fTotalStorage += fStorage[i]->GetInsideIV(); - - for(int i = 0; i < (int)fReactor.size(); i++) - fTotalInReactor += fReactor[i]->GetIVReactor(); - - fIVTotal = fWaste + fTotalStorage + fTotalCooling + fFuelFabrication + fTotalInReactor; - fIVInCycleTotal = fTotalStorage + fTotalCooling + fFuelFabrication + fTotalInReactor; -} - - - -void Scenario::ResetQuantity() -{ - - fTotalInReactor.Clear(); - fTotalStorage.Clear(); - fTotalCooling.Clear(); - fFuelFabrication.Clear(); - fIVInCycleTotal.Clear(); - fIVTotal.Clear(); - -} - -//________________________________________________________________________ -void Scenario::OpenOutputTree() -{ - - - INFO << "Opening : " << fOutputFileName << " ...\t"; - fOutFile = new TFile(fOutputFileName.c_str(),"UPDATE"); - - if(!fOutFile) - { - ERROR << "\nCould not open " << fOutputFileName <<endl; - exit(-1); - } - INFO << "\t ...OK!" << endl; - - - fOutT = new TTree(fOutputTreeName.c_str(), "Data Tree"); - INFO << "Creating Data Tree ...\t"; - if(!fOutT) - { - ERROR << "\nCould not create Data Tree in " << fOutputFileName << endl; - exit(-1); - } - fNewTtree = false; - INFO << "\t ...OK!" << endl; - -} -void Scenario::CloseOutputTree() -{ - - - fOutFile->ls(); - INFO << "Writing outTree " << fOutputFileName << endl; - fOutFile->Write(); - - if(fOutFile->IsOpen()) { - INFO << "Deleting outTree : " << endl; - delete fOutT; - INFO << "Closing file : " << fOutputFileName <<endl; - fOutFile-> Close(); - delete fOutFile; - } else { - ERROR << "File was not opened " << fOutputFileName << endl; - exit(-1); - } -} -//________________________________________________________________________ -void Scenario::OutAttach() -{ - - ResetQuantity(); - //Branch Absolut Time - fOutT->Branch("AbsTime",&fAbsoluteTime,"AbsoluteTime/L"); - //Branch The Power installed in the Parc - fOutT->Branch("ParcPower",&fParcPower,"ParcPower/D"); - - - - // Branch the Sum IV - - - fOutT->Branch("STOCK.", "IsotopicVector", &fTotalStorage); - fOutT->Branch("FUELFABRICATION.", "IsotopicVector", &fFuelFabrication); - fOutT->Branch("COOLING.", "IsotopicVector", &fTotalCooling); - fOutT->Branch("REACTOR.", "IsotopicVector", &fTotalInReactor); - fOutT->Branch("INCYCLE.", "IsotopicVector", &fIVInCycleTotal); - fOutT->Branch("TOTAL.", "IsotopicVector", &fIVTotal); - - fOutT->Branch("OUTINCOME.", "IsotopicVector", &fOutIncome); - fOutT->Branch("WASTE.", "IsotopicVector", &fWaste); - - // Branch the separate object - - for(int i = 0; i < (int)fStorage.size(); i++) - fOutT->Branch(fStorage[i]->GetName(), "Storage", &fStorage[i]); - - for(int i = 0; i < (int)fPool.size(); i++) - - fOutT->Branch(fPool[i]->GetName(), "Pool", &fPool[i]); - - for(int i = 0; i < (int)fReactor.size(); i++) - - fOutT->Branch(fReactor[i]->GetName(), "Reactor", &fReactor[i]); - - for(int i = 0; i < (int)fFabricationPlant.size(); i++) - fOutT->Branch(fFabricationPlant[i]->GetName(), "FabricationPlant", &fFabricationPlant[i]); - - -} - -//________________________________________________________________________ -void Scenario::Write() -{ - - - - -} - -//________________________________________________________________________ -void Scenario::Print() -{ - - for(int i = 0; i < (int) fPool.size();i++) - { - INFO << "!!!!!!!!!STEP : " << fAbsoluteTime/(int)(cYear) << endl; - INFO << "Pool : " << endl; - INFO << "Cooling "; - INFO << fPool[i]->GetIVArray().size()<< endl; - } - - for(int i = 0; i < (int)fReactor.size(); i++) - { - INFO << "Reactor" << endl; - fReactor[i]->GetIVReactor().Print(); - } - -} diff --git a/source/branches/CLASSV4.1/src/SeparationPlant.cxx b/source/branches/CLASSV4.1/src/SeparationPlant.cxx deleted file mode 100644 index c9781b914..000000000 --- a/source/branches/CLASSV4.1/src/SeparationPlant.cxx +++ /dev/null @@ -1,141 +0,0 @@ -#include "SeparationPlant.hxx" - -#include "Scenario.hxx" -#include "CLASSLogger.hxx" - -#include <sstream> -#include <string> -#include <iostream> -#include <cmath> -#include <algorithm> - -//________________________________________________________________________ -// -// SeparationPlant -// -// -// -// -//________________________________________________________________________ -ClassImp(SeparationPlant) - - -SeparationPlant::SeparationPlant():CLASSBackEnd(-2) -{ - fOutBackEndFacility = 0; - SetName("C_SeparationPlant."); - SetIsStorageType(); -} - -//________________________________________________________________________ -SeparationPlant::SeparationPlant(CLASSLogger* log):CLASSBackEnd(log, -2) -{ - - - fCycleTime = 0; - fIsStarted = false; - fPutToWaste = true; - - fOutBackEndFacility = 0; - SetName("C_SeparationPlant."); - - SetIsStorageType(); - - INFO << " A new SeparationPlant has been define :" << endl; - INFO << "\t The Separation Time set at\t " << (double)(fCycleTime/cYear) << " year" << endl; - WARNING << " All Separated Fuel go directly to WASTE after cooling !! " << endl; - - -} - - -//________________________________________________________________________ -SeparationPlant::~SeparationPlant() -{ - - -} - -//________________________________________________________________________ - -//________________________________________________________________________ -void SeparationPlant::SetBackEndDestination(CLASSBackEnd* storagedestination, IsotopicVector isotopicvector, cSecond destinationstartingtime) -{ - DBGL - - fDestinationStorageStartingTime.push_back(destinationstartingtime); - fDestinationStorage.push_back(storagedestination); - fDestinationStorageIV.push_back(isotopicvector); - - if (fDestinationStorage.size() != fDestinationStorageIV.size()) - ERROR << " fDestinationStorage.size() != fDestinationStorageIV.size() !! " << endl; - - DBGL - -} - - -void SeparationPlant::AddIV(IsotopicVector IV) -{ -DBGL - for(int fds=0; fds<(int)fDestinationStorage.size(); fds++) - { - cSecond CurrentTime = GetParc()->GetAbsoluteTime(); - - INFO << "Separation..." <<endl; - INFO << "Current Time : " << CurrentTime <<endl; - INFO << "IV Separation Time : " << fDestinationStorageStartingTime[fds] <<endl; - - if(CurrentTime >= fDestinationStorageStartingTime[fds]) - { - IsotopicVector IVtmp; - IVtmp = IV*fDestinationStorageIV[fds]; - fDestinationStorage[fds]->AddIV(IVtmp); - IV -= IVtmp; - } - - } - - GetParc()->AddWaste(IV); - - DBGL -} - - - -map<cSecond,int> SeparationPlant::GetTheBackEndTimePath() -{ - DBGL - - map<cSecond, int> TheBackEndTimePath; - for( int i = 0; i < (int)fDestinationStorage.size(); i++ ) - { - map<cSecond, int> TheBackEndTimePath_tmp = fDestinationStorage[i]->GetTheBackEndTimePath(); - map<cSecond, int>::iterator it; - for (it = TheBackEndTimePath_tmp.begin(); it != TheBackEndTimePath_tmp.end(); it++) - { - pair< map<cSecond, int>::iterator, bool > IResult; - IResult = TheBackEndTimePath.insert( pair<cSecond ,int>((*it).first, (*it).second) ); - if( !IResult.second ) - IResult.first->second |= (*it).second; - - } - } - - DBGL - return TheBackEndTimePath; -} - - - - - -//________________________________________________________________________ -// Time Action with the reste of the Universe : -// Out Storage -// Evolution : -// Cooling -//________________________________________________________________________ - - - diff --git a/source/branches/CLASSV4.1/src/Storage.cxx b/source/branches/CLASSV4.1/src/Storage.cxx deleted file mode 100644 index e40a4f55b..000000000 --- a/source/branches/CLASSV4.1/src/Storage.cxx +++ /dev/null @@ -1,215 +0,0 @@ -#include "Storage.hxx" - -#include "Scenario.hxx" -#include "CLASSLogger.hxx" - - -#include <sstream> -#include <string> -#include <iostream> -#include <cmath> -#include <algorithm> - -//________________________________________________________________________ -// -// Storage -// -// -// -// -//________________________________________________________________________ -ClassImp(Storage) - - - - -Storage::Storage():CLASSBackEnd(-1) -{ - DBGL - SetIsStorageType(); - SetName("S_Storage."); - - DBGL -} - -Storage::Storage(CLASSLogger* log):CLASSBackEnd(log, -1) -{ - DBGL - SetIsStorageType(); - - SetName("S_Storage."); - - INFO << " A new Storage has been define." << endl; - -} -//________________________________________________________________________ -Storage::Storage(CLASSLogger* log, DecayDataBank* evolutivedb):CLASSBackEnd(log, -1) -{ - DBGL - SetIsStorageType(); - - SetDecayDataBank(evolutivedb); - - SetName("S_Storage."); - - INFO << " A new Storage has been define." << endl; - - - DBGL -} - -//________________________________________________________________________ -Storage::~Storage() -{ - - -} - -//________________________________________________________________________ -void Storage::AddIV(IsotopicVector isotopicvector) -{ - - AddCumulativeIVIn(isotopicvector); - - if(GetParc()) - { - if(GetParc()->GetStockManagement() ) - { - fIVArray.push_back(isotopicvector); - fIVArrayArrivalTime.push_back(fInternalTime); - } - } - else - { - fIVArray.push_back(isotopicvector); - fIVArrayArrivalTime.push_back(fInternalTime); - } - UpdateInsideIV(); -} - -//________________________________________________________________________ -void Storage::TakeFractionFromStock(int IVId,double fraction) -{ -DBGL - if(GetParc()) - { - if(GetParc()->GetStockManagement() ) - { - if(fraction > 1 || fraction < 0) - { - WARNING << " You try to remove fraction superior than 1 or a negative one..." << endl; - } - else - { - AddCumulativeIVOut(fIVArray[IVId]*fraction); - fIVArray[IVId] -= fIVArray[IVId] * fraction; - } - - } - else - { - ERROR << " TakeFractionFromStock can't be DEFINE without REAL stock management" << endl; - exit(1); - - } - } - else - { - if(fraction > 1 || fraction < 0) - { - WARNING << " You try to remove fraction superior than 1 or a negative one..." << endl; - } - else - { - AddCumulativeIVOut(fIVArray[IVId]*fraction); - fIVArray[IVId] -= fIVArray[IVId] * fraction; - } - - } - UpdateInsideIV(); - DBGL -} - -void Storage::TakeFromStock(IsotopicVector isotopicvector) -{ - - if(GetParc()) - { - if(!GetParc()->GetStockManagement()) - { - - AddCumulativeIVOut(isotopicvector); - fInsideIV -= isotopicvector; - } - else - { - ERROR << " TakeFromStock can't be DEFINE WITH REAL stock management" << endl; - exit(1); - } - } - else - { - AddCumulativeIVOut(isotopicvector); - fInsideIV -= isotopicvector; - - } - -} - -//________________________________________________________________________ -void Storage::StorageEvolution(cSecond t) -{ -DBGL - - if(t == fInternalTime && t != 0 ) return; - - RemoveEmptyStocks(); - - cSecond EvolutionTime = t - fInternalTime; - -#pragma omp parallel for - for (int i=0; i <(int) fIVArray.size() ; i++) - { - fIVArray[i] = GetDecay(fIVArray[i] , EvolutionTime); - } -DBGL -} - -//________________________________________________________________________ -void Storage::Evolution(cSecond t) -{ - - // Check if the Storage has been created ... - if(t == fInternalTime && t!=0) return; - // Make the evolution for the Storage ... - - StorageEvolution(t); - // Update Inside IV; - UpdateInsideIV(); - - // ... And Finaly update the AbsoluteInternalTime - fInternalTime = t; - -} - -void Storage::Write(string filename, cSecond date) -{ - - for(int i=0;i < (int)fIVArray.size(); i++) - { - - fIVArray[i].Write(filename, date); - } - -} -//________________________________________________________________________ -void Storage::RemoveEmptyStocks() -{ - for(int i = (int)fIVArray.size()-1 ; i >=0; i--) //Removing empty Stock - if(fIVArray[i].GetSumOfAll() == 0) - { - fIVArray.erase(fIVArray.begin()+i); - fIVArrayArrivalTime.erase(fIVArrayArrivalTime.begin()+i); - - } -} diff --git a/source/branches/CLASSV4.1/src/XSModel.cxx b/source/branches/CLASSV4.1/src/XSModel.cxx deleted file mode 100644 index 8f6aa2ee5..000000000 --- a/source/branches/CLASSV4.1/src/XSModel.cxx +++ /dev/null @@ -1,61 +0,0 @@ -// -// XSModel.cxx -// CLASSSource -// -// Created by BaM on 04/05/2014. -// Copyright (c) 2014 BLG. All rights reserved. -// - -#include "XSModel.hxx" - -using namespace std; - -XSModel::XSModel():CLASSObject() -{ - -} - - -XSModel::XSModel(CLASSLogger* log):CLASSObject(log) -{ - -} - -bool XSModel::isIVInDomain(IsotopicVector IV) -{DBGL - bool IsInDomain=true; - - if(fFreshFuelDomain.empty()) - { - WARNING << "Fresh Fuel variation domain is not set" << endl; - WARNING << "CLASS has no clue if the computed evolution for this fresh fuel is correct" << endl; - WARNING << "Proceed finger crossed !!" << endl; - return true; - } - - else - { - IsotopicVector IVNorm = IV /IV.GetSumOfAll(); - for (map< ZAI,pair<double,double> >::iterator Domain_it=fFreshFuelDomain.begin(); Domain_it!=fFreshFuelDomain.end(); Domain_it++) - { - double ThatZAIProp = IVNorm.GetIsotopicQuantity()[Domain_it->first] ; - double ThatZAIMin = Domain_it->second.first; - double ThatZAIMax = Domain_it->second.second; - if( (ThatZAIProp > ThatZAIMax) || (ThatZAIProp < ThatZAIMin) ) - { - IsInDomain = false; - - WARNING<<"Fresh fuel out of model range"<<endl; - WARNING<<"\t AT LEAST this ZAI is accused to be outrange :"<<endl; - WARNING<<"\t\t"<<Domain_it->first.Z()<<" "<<Domain_it->first.A()<<" "<<Domain_it->first.I()<<endl; - WARNING<<"\t\t min="<<ThatZAIMin<<" value="<<ThatZAIProp<<" max="<<ThatZAIMax<<endl; - WARNING<<"\t IV accused :"<<endl<<endl; - WARNING<<IVNorm.sPrint()<<endl; - break; - } - } - } -DBGL -return IsInDomain; - -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/ZAI.cxx b/source/branches/CLASSV4.1/src/ZAI.cxx deleted file mode 100755 index a75992d85..000000000 --- a/source/branches/CLASSV4.1/src/ZAI.cxx +++ /dev/null @@ -1,62 +0,0 @@ -#include "ZAI.hxx" -#include "stdlib.h" - - -//const string DEFAULTDATABASE = "DecayBase.dat"; -//________________________________________________________________________ -// -// ZAI -// -// -// -// -//________________________________________________________________________ -//____________________________InClass Operator____________________________ -//________________________________________________________________________ -ClassImp(ZAI) - -ZAI ZAI::operator=(ZAI IVa) -{ - fZ = IVa.Z(); - fA = IVa.A(); - fI = IVa.I(); - return *this; -} - - - -ZAI::ZAI() -{ - - fZ=0; - fA=0; - fI=0; - -} - - -//________________________________________________________________________ -ZAI::ZAI(int Z, int A, int I) -{ - - if( Z > A ) - { - cout << "!!!ERROR!!! " << "[" << __FILE__ << ":" << __FUNCTION__ << "]" << endl; - cout << "!!!ERROR!!! Z:" << Z << " is higher than A: " << A << endl; - cout << "!!!ERROR!!! CLASS did not manage yet anti-mater!!! Update comming soon !!!" << endl; - exit(1); - } - - fZ=Z; - fA=A; - fI=I; - -} - - -ZAI::~ZAI() -{ - -} - - diff --git a/source/branches/CLASSV4.1/src/ZAIHeat.cxx b/source/branches/CLASSV4.1/src/ZAIHeat.cxx deleted file mode 100644 index 72b1ea663..000000000 --- a/source/branches/CLASSV4.1/src/ZAIHeat.cxx +++ /dev/null @@ -1,99 +0,0 @@ -#include "ZAIHeat.hxx" - -//#include "CLASSConstante.hxx" - -#include "stdlib.h" -#include <fstream> -#include <string> - -#include "IsotopicVector.hxx" -#include "StringLine.hxx" - -#include "IrradiationModel.hxx" - - //________________________________________________________________________ - // - // ZAI - // - // - // - // - //________________________________________________________________________ - //____________________________InClass Operator____________________________ - //________________________________________________________________________ - -//________________________________________________________________________ -ZAIHeat::ZAIHeat() -{ - string CLASSPATH = getenv("CLASS_PATH"); - string HeatToxFile = CLASSPATH + "/data/HeatTox.dat"; - - ifstream infile(HeatToxFile.c_str()); - - if(!infile.good()) - { - cout << "Error in ZAIHeat : can't find/open file " << HeatToxFile << endl; - exit(1); - } - - IrradiationModel* IM = new IrradiationModel(); - IM->SetZAIThreshold(0); - IM->LoadDecay(); - - int Z,A,I; - string Name; - double WperBq,SvperBq; - while (!infile.eof()) - { - string line; - stringstream ossline; - getline(infile, line); - ossline<<line; - - if(StringLine::IsDouble(line.substr(0,1))) //else is a comment - { ossline>>Z>>A>>I>>WperBq>>SvperBq; - fZAIHeat.insert( pair< ZAI,double >( ZAI(Z,A,I),IM->GetDecayConstant(ZAI(Z,A,I))*WperBq) ); - } - } - - delete IM; - infile.close(); -} -//________________________________________________________________________ -ZAIHeat::~ZAIHeat() -{ - fZAIHeat.clear(); -} -//________________________________________________________________________ -double ZAIHeat::GetHeat(ZAI zai ) const -{ - - map<ZAI ,double> ZAIHeat = fZAIHeat; - map<ZAI ,double>::iterator it; - it = ZAIHeat.find(zai); - - if ( it != ZAIHeat.end() ) - { - return it->second; - } - else - { - return 0; - } - -} -//________________________________________________________________________ -double ZAIHeat::GetHeat(const IsotopicVector IV) const -{ - double TotalHeat = 0; - - map<ZAI ,double >::iterator it; - map<ZAI ,double > isotopicquantity = IV.GetIsotopicQuantity(); - - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - TotalHeat += (*it).second * GetHeat( (*it).first ) ; - - - return TotalHeat; - -} diff --git a/source/branches/CLASSV4.1/src/ZAIMass.cxx b/source/branches/CLASSV4.1/src/ZAIMass.cxx deleted file mode 100644 index de948ee16..000000000 --- a/source/branches/CLASSV4.1/src/ZAIMass.cxx +++ /dev/null @@ -1,81 +0,0 @@ -#include "ZAIMass.hxx" - -//#include "CLASSConstante.hxx" - -#include "stdlib.h" -#include <fstream> -#include <string> - -#include "IsotopicVector.hxx" - //________________________________________________________________________ - // - // ZAI - // - // - // - // - //________________________________________________________________________ - //____________________________InClass Operator____________________________ - //________________________________________________________________________ - - -ZAIMass::ZAIMass() -{ - string CLASSPATH = getenv("CLASS_PATH"); - string MassDataFile = CLASSPATH + "/data/Mass.dat"; - - ifstream infile(MassDataFile.c_str()); - - if(!infile.good()) - { - cout << " ZAIMass Error.\n can't find/open file " << MassDataFile << endl; - exit(1); - } - - int Z,A; - string Name; - double MassUnity,MassDec,error; - while (infile>>Z>>A>>Name>>MassUnity>>MassDec>>error) - { - double Masse = MassUnity + MassDec * 1e-6; - fZAIMass.insert( pair< ZAI,double >( ZAI(Z,A,0), Masse ) ); - } - - infile.close(); -} - - -ZAIMass::~ZAIMass() -{ - fZAIMass.clear(); -} - - -double ZAIMass::GetMass(ZAI zai ) const -{ - map<ZAI,double> ZAIMasscpy = fZAIMass ; - map<ZAI,double>::iterator MassIT = ZAIMasscpy.find( ZAI(zai.Z(), zai.A(), 0) ); - - if(MassIT==fZAIMass.end()) - return zai.A(); - else - return MassIT->second; - -} - - -double ZAIMass::GetMass(const IsotopicVector IV) const -{ - double AVOGADRO = 6.02214129e23; - double TotalMass = 0; - - map<ZAI ,double >::iterator it; - map<ZAI ,double > isotopicquantity = IV.GetIsotopicQuantity(); - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - { - TotalMass += (*it).second/AVOGADRO * GetMass( (*it).first ) ; - } - - return TotalMass*1e-6; - -} \ No newline at end of file diff --git a/source/branches/CLASSV4.1/src/ZAITox.cxx b/source/branches/CLASSV4.1/src/ZAITox.cxx deleted file mode 100644 index 05dcba41e..000000000 --- a/source/branches/CLASSV4.1/src/ZAITox.cxx +++ /dev/null @@ -1,99 +0,0 @@ -#include "ZAITox.hxx" - -//#include "CLASSConstante.hxx" - -#include "stdlib.h" -#include <fstream> -#include <string> - -#include "IsotopicVector.hxx" -#include "StringLine.hxx" - -#include "IrradiationModel.hxx" - - //________________________________________________________________________ - // - // ZAI - // - // - // - // - //________________________________________________________________________ - //____________________________InClass Operator____________________________ - //________________________________________________________________________ - -//________________________________________________________________________ -ZAITox::ZAITox() -{ - string CLASSPATH = getenv("CLASS_PATH"); - string HeatToxFile = CLASSPATH + "/data/HeatTox.dat"; - - ifstream infile(HeatToxFile.c_str()); - - if(!infile.good()) - { - cout << "Error in ZAITox : can't find/open file " << HeatToxFile << endl; - exit(1); - } - - IrradiationModel* IM = new IrradiationModel(); - IM->SetZAIThreshold(1); - IM->LoadDecay(); - - int Z,A,I; - string Name; - double WperBq,SvperBq; - while (!infile.eof()) - { - string line; - stringstream ossline; - getline(infile, line); - ossline<<line; - - if(StringLine::IsDouble(line.substr(0,1))) //else is a comment - { ossline>>Z>>A>>I>>WperBq>>SvperBq; - fZAITox.insert( pair< ZAI,double >( ZAI(Z,A,I),IM->GetDecayConstant(ZAI(Z,A,I))*SvperBq) ); - } - } - - delete IM; - infile.close(); -} -//________________________________________________________________________ -ZAITox::~ZAITox() -{ - fZAITox.clear(); -} -//________________________________________________________________________ -double ZAITox::GetRadioTox(ZAI zai ) const -{ - - map<ZAI ,double> ZAITox = fZAITox; - map<ZAI ,double>::iterator it; - it = ZAITox.find(zai); - - if ( it != ZAITox.end() ) - { - return it->second; - } - else - { - return 0; - } - -} -//________________________________________________________________________ -double ZAITox::GetRadioTox(const IsotopicVector IV) const -{ - double TotalTox = 0; - - map<ZAI ,double >::iterator it; - map<ZAI ,double > isotopicquantity = IV.GetIsotopicQuantity(); - - for( it = isotopicquantity.begin(); it != isotopicquantity.end(); it++) - TotalTox += (*it).second * GetRadioTox( (*it).first ) ; - - - return TotalTox; - -} -- GitLab