00001
00002
00003 #ifndef nucleus_
00004 #define nucleus_
00005
00006 #include "CMass.h"
00007 #include "CYrast.h"
00008 #include "CLevelDensity.h"
00009 #include "CAngle.h"
00010 #include <string>
00011 #include <sstream>
00012 #include <cstdlib>
00013 #include <cmath>
00014 #include "CRandom.h"
00015 #include "CAngle.h"
00016 #include "CEvap.h"
00017 #include "CAngleDist.h"
00018 #include "CScission.h"
00019 #include "CWeight.h"
00020 #include "SStoreEvap.h"
00021 using namespace std;
00022
00028 struct SStoreSub
00029 {
00030 float weight;
00031 short unsigned L;
00032 };
00033
00040 struct SStore
00041 {
00042 double gamma;
00043 short unsigned iZ;
00044 short unsigned iA;
00045 };
00046
00047
00048
00054 struct SStoreChan
00055 {
00056 float S2;
00057 float Ek;
00058 float Ex;
00059 float gamma;
00060 float temp;
00061 float UPA;
00062 short unsigned L;
00063 };
00064
00065
00077 class CNucleus : public CNuclide, public CWeight
00078 {
00079 protected:
00080 float Ecoul;
00081
00082 bool notStatistical;
00083
00084 short unsigned notStatisticalMode;
00085 float fPairing;
00086 float fShell;
00087 float fU0;
00088 float Erot;
00089 float Jmax;
00090 float fMInertia;
00091 float logLevelDensity;
00092 float temp;
00093 int fissionZ;
00094 int fissionA;
00095 int fissioningZ;
00096 int fissioningA;
00097 int iZ1_IMF_Max;
00098
00099 float fissionU;
00100 float EdefScission;
00101
00102 bool saddleToSciss;
00103 float timeSinceSaddle;
00104 float timeSinceStart;
00105
00106 void saddleToScission();
00107 void massAsymmetry(bool);
00108 bool needSymmetricFission;
00109 static bool const noSymmetry;
00110 float timeScission;
00111 static float const viscosity_scission;
00112 static float const viscosity_saddle;
00113 static float timeTransient;
00114 static float fissionScaleFactor;
00115 static float barAdd;
00116 static int iPoint;
00117 static int iHF;
00118 int HF;
00119 static bool noIMF;
00120 static bool BohrWheeler;
00121 float selectJ(float,float,float,float);
00122 static int const nStore;
00123
00124 static short unsigned Zshell;
00125 static CYrast *yrast;
00126 CScission scission;
00127 static CLevelDensity *levelDensity;
00128 bool bStable;
00129 static float const r0;
00130 static float const sep;
00131 static float threshold;
00132
00133 CAngle spin;
00134 float velocity[3];
00135 float momentum[3];
00136
00137
00138 static CEvap *evap;
00139
00140
00141 CLightP * lightP;
00142 static int const nSub;
00143 static int const nSubTl;
00144 float S2Loop(float Ekvalue);
00145 float S2Width(float Ekvalue);
00146 float EkWidth(float ek);
00147 void getSpin( bool saddle);
00148
00149 float EkLoop();
00150 float getSumTl(float,float);
00151 float getWidthZA(float,short);
00152 void angleEvap();
00153 void angleIsotropic();
00154 void angleGamma();
00155 float S2Start;
00156 float UMin;
00157 float EcostMin;
00158 static short unsigned const lMaxQuantum;
00159 static float de;
00160 int lMin;
00161 int lMax;
00162 float lPlusSMax;
00163 float lPlusSMin;
00164 float rResidue;
00165 float rLightP;
00166
00167 float S2;
00168 float EYrast2;
00169 SStoreEvap * storeEvap;
00170 SStoreSub * storeSub;
00171
00172 int iStore;
00173 short unsigned EvapZ2;
00174 short unsigned EvapA2;
00175 short unsigned EvapZ1;
00176 short unsigned EvapA1;
00177 short unsigned EvapL;
00178 short unsigned EvapMode;
00179 float EvapEx1;
00180 float EvapEx2;
00181 float EvapS2;
00182 float EvapS1;
00183 float EvapEk;
00184 float EvapLPlusS;
00185
00186 static CAngleDist angleDist;
00187
00188 float GammaEx;
00189 float GammaJ;
00190 int GammaL;
00191
00192 static float const gammaInhibition[3];
00194 static float const wue[3];
00195 static int const nGamma;
00196 void binaryDecay();
00197 void exciteScission(float,float,bool sym=1);
00198 float asyFissionWidth();
00199 float asyFissionWidthZA();
00200 float asyFissionWidthBW();
00201 void force8Be();
00202 void force5Li();
00203 void force5He();
00204 void force9B();
00205
00206 float evaporationWidthSS();
00207 float gammaWidth();
00208 float gammaWidthE1GDR();
00209 float gammaWidthMultipole(int);
00210 float hauserFeshbach(int);
00211 float weiskopf( bool saddle);
00212 void asyFissionDivide();
00213 void recursiveDecay();
00214 CNucleus*daughterLight;
00215 CNucleus*daughterHeavy;
00216 CNucleus*parent;
00217
00218 static int const Nproducts;
00220
00221
00222 static CNucleus *allProducts[];
00224
00225 static int iProducts;
00226
00227
00228 static int const Nstable;
00229 static int iStable;
00230 static CNucleus * stableProducts[];
00232
00233
00234 bool bResidue;
00235 bool bSymmetricFission;
00236 bool bAsymmetricFission;
00237 int multPostLight;
00238 int multPostHeavy;
00239 int multPreSaddle;
00240 int multSaddleToScission;
00242
00243
00244 static float const kRotate;
00245 void split(CAngle);
00246
00247 float sigma2;
00248 float symSaddlePoint;
00249 static float sumGammaEnergy;
00250
00251 public:
00252
00253
00254 bool abortEvent;
00255 float evaporationWidth();
00256 float BohrWheelerWidth();
00257 float LestoneFissionWidth();
00258 float LestoneCorrection(float Usaddle, float momInertiaEff,short iAfAn);
00259 static CRandom ran;
00260 static float const pi;
00261 static double const EkFraction;
00262
00263
00264 CNucleus(int iZ,int iA);
00265 CNucleus(int iZ,int iA, float fEx, float fJ);
00266 ~CNucleus();
00267 float getSumGammaEnergy();
00268 float getTime();
00269
00270 void setNewIsotope(int iZ0, int iA0, float fEx0, float fJ0);
00271
00272 void setCompoundNucleus(float fEx0,float fJ0);
00273 void setCompoundNucleus(float fEx0,double dJ0);
00274 void setCompoundNucleus(double dEx0,float fJ0);
00275 void setCompoundNucleus(double dEx0,double dJ0);
00276
00277 void setSpinAxis(CAngle angle);
00278 void setSpinAxisDegrees(CAngle angle);
00279 void setVelocityPolar(float =0.,float=0.,float=0.);
00280 void setVelocityCartesian(float vx=0.,float vy=0.,float vz=0.);
00281
00282 void reset();
00283 static void resetGlobal();
00284
00285 void print();
00286 void printStableProducts();
00287 void printAllProducts();
00288 void vCMofAllProducts();
00289 void energyConservation();
00290
00291
00292 CNucleus* getProducts(int=-1);
00293 CNucleus* getParent();
00294 CNucleus* getLightDaughter();
00295 CNucleus* getHeavyDaughter();
00296 CNucleus* getCompoundNucleus();
00297
00298
00299 int getNumberOfProducts();
00300 int getZmaxEvap();
00301
00302
00303 void excite(float,float);
00304 void excite(float,double);
00305 void excite(double,float);
00306 void excite(double,double);
00307 void excite(float);
00308
00309 float getTheta();
00310 float getThetaDegrees();
00311 CAngle getAngle();
00312 CAngle getAngleDegrees();
00313 float getKE();
00314 float getVelocity();
00315 float getMomentum();
00316 float* getVelocityVector();
00317 float* getMomentumVector();
00318
00319 static void setTimeTransient(float time);
00320 static void setFissionScaleFactor(float factor);
00321 static void setBarWidth(float width);
00322 static void setDeltaE(float de0);
00323 static void setThreshold(float threshold0);
00324 static void setAddToFisBarrier(float barAdd0);
00325 static void setNoIMF();
00326 static void setYesIMF();
00327 static void setLestone();
00328 static void setBohrWheeler();
00329 static void setSolution(int isol);
00330 static void setEvapMode(int iHF0=2);
00331
00332 static float getTimeTransient();
00333 static float getFissionScaleFactor();
00334 static float getBarWidth();
00335 static float getDeltaE();
00336 static float getThreshold();
00337 static float getAddToFisBarrier();
00338
00339 void decay();
00340 bool isAsymmetricFission();
00341 bool isSymmetricFission();
00342 bool isNotStatistical();
00343 bool isSaddleToScission();
00344 bool isResidue();
00345 int getMultPost();
00346 int getMultPre();
00347 int getMultPostLight();
00348 int getMultPostHeavy();
00349 int getMultPreSaddle();
00350 int getMultSaddleToScission();
00351 float getFissionTimeSymmetric(float & timeScission);
00352 float getFissionTimeAsymmetric();
00353 float getDecayWidth();
00354 float getLogLevelDensity();
00355 int origin;
00356 int origin2;
00357 void printParameters();
00358
00359
00360
00361
00362 };
00363 #endif