1 | // |
---|
2 | // ******************************************************************** |
---|
3 | // * License and Disclaimer * |
---|
4 | // * * |
---|
5 | // * The Geant4 software is copyright of the Copyright Holders of * |
---|
6 | // * the Geant4 Collaboration. It is provided under the terms and * |
---|
7 | // * conditions of the Geant4 Software License, included in the file * |
---|
8 | // * LICENSE and available at http://cern.ch/geant4/license . These * |
---|
9 | // * include a list of copyright holders. * |
---|
10 | // * * |
---|
11 | // * Neither the authors of this software system, nor their employing * |
---|
12 | // * institutes,nor the agencies providing financial support for this * |
---|
13 | // * work make any representation or warranty, express or implied, * |
---|
14 | // * regarding this software system or assume any liability for its * |
---|
15 | // * use. Please see the license in the file LICENSE and URL above * |
---|
16 | // * for the full disclaimer and the limitation of liability. * |
---|
17 | // * * |
---|
18 | // * This code implementation is the result of the scientific and * |
---|
19 | // * technical work of the GEANT4 collaboration. * |
---|
20 | // * By using, copying, modifying or distributing the software (or * |
---|
21 | // * any work based on the software) you agree to acknowledge its * |
---|
22 | // * use in resulting scientific publications, and indicate your * |
---|
23 | // * acceptance of all terms of the Geant4 Software license. * |
---|
24 | // ******************************************************************** |
---|
25 | // |
---|
26 | // $Id: G4Abla.cc,v 1.14 2007/12/03 19:36:06 miheikki Exp $ |
---|
27 | // Translation of INCL4.2/ABLA V3 |
---|
28 | // Pekka Kaitaniemi, HIP (translation) |
---|
29 | // Christelle Schmidt, IPNL (fission code) |
---|
30 | // Alain Boudard, CEA (contact person INCL/ABLA) |
---|
31 | // Aatos Heikkinen, HIP (project coordination) |
---|
32 | |
---|
33 | #include <time.h> |
---|
34 | |
---|
35 | #include "G4Abla.hh" |
---|
36 | #include "G4InclAblaDataFile.hh" |
---|
37 | #include "Randomize.hh" |
---|
38 | #include <assert.h> |
---|
39 | |
---|
40 | G4Abla::G4Abla() |
---|
41 | { |
---|
42 | |
---|
43 | } |
---|
44 | |
---|
45 | G4Abla::G4Abla(G4Hazard *hazard, G4Volant *volant) |
---|
46 | { |
---|
47 | verboseLevel = 0; |
---|
48 | |
---|
49 | volant = volant; // ABLA internal particle data |
---|
50 | volant->iv = 0; |
---|
51 | hazard = hazard; // Random seeds |
---|
52 | |
---|
53 | varntp = new G4VarNtp(); |
---|
54 | pace = new G4Pace(); |
---|
55 | ald = new G4Ald(); |
---|
56 | ablamain = new G4Ablamain(); |
---|
57 | emdpar = new G4Emdpar(); |
---|
58 | eenuc = new G4Eenuc(); |
---|
59 | ec2sub = new G4Ec2sub(); |
---|
60 | ecld = new G4Ecld(); |
---|
61 | fb = new G4Fb(); |
---|
62 | fiss = new G4Fiss(); |
---|
63 | opt = new G4Opt(); |
---|
64 | } |
---|
65 | |
---|
66 | G4Abla::G4Abla(G4Hazard *aHazard, G4Volant *aVolant, G4VarNtp *aVarntp) |
---|
67 | { |
---|
68 | verboseLevel = 0; |
---|
69 | |
---|
70 | volant = aVolant; // ABLA internal particle data |
---|
71 | volant->iv = 0; |
---|
72 | hazard = aHazard; // Random seeds |
---|
73 | varntp = aVarntp; // Output data structure |
---|
74 | varntp->ntrack = 0; |
---|
75 | |
---|
76 | pace = new G4Pace(); |
---|
77 | ald = new G4Ald(); |
---|
78 | ablamain = new G4Ablamain(); |
---|
79 | emdpar = new G4Emdpar(); |
---|
80 | eenuc = new G4Eenuc(); |
---|
81 | ec2sub = new G4Ec2sub(); |
---|
82 | ecld = new G4Ecld(); |
---|
83 | fb = new G4Fb(); |
---|
84 | fiss = new G4Fiss(); |
---|
85 | opt = new G4Opt(); |
---|
86 | } |
---|
87 | |
---|
88 | G4Abla::~G4Abla() |
---|
89 | { |
---|
90 | delete pace; |
---|
91 | delete ald; |
---|
92 | delete ablamain; |
---|
93 | delete emdpar; |
---|
94 | delete eenuc; |
---|
95 | delete ec2sub; |
---|
96 | delete ecld; |
---|
97 | delete fb; |
---|
98 | delete fiss; |
---|
99 | delete opt; |
---|
100 | } |
---|
101 | |
---|
102 | // Main interface to the evaporation |
---|
103 | |
---|
104 | // Possible problem with generic Geant4 interface: ABLA evaporation |
---|
105 | // needs angular momentum information (calculated by INCL) to |
---|
106 | // work. Maybe there is a way to obtain this information from |
---|
107 | // G4Fragment? |
---|
108 | |
---|
109 | void G4Abla::breakItUp(G4double nucleusA, G4double nucleusZ, G4double nucleusMass, G4double excitationEnergy, |
---|
110 | G4double angularMomentum, G4double recoilEnergy, G4double momX, G4double momY, G4double momZ, |
---|
111 | G4int eventnumber) |
---|
112 | { |
---|
113 | // C ************************* EVAPORATION KHS ********* |
---|
114 | |
---|
115 | const G4double uma = 931.4942; |
---|
116 | const G4double melec = 0.511; |
---|
117 | const G4double fmp = 938.27231; |
---|
118 | const G4double fmn = 939.56563; |
---|
119 | |
---|
120 | // Rotation matrix... |
---|
121 | G4double sitet = 0.0; |
---|
122 | G4double R[4][4]; |
---|
123 | |
---|
124 | G4double plab1, gam1, eta1; |
---|
125 | |
---|
126 | G4double plab2, gam2, eta2; |
---|
127 | |
---|
128 | G4double stet1; |
---|
129 | G4double stet2; |
---|
130 | |
---|
131 | G4int nbpevap; |
---|
132 | G4int mempaw = 0, memiv = 0; |
---|
133 | |
---|
134 | G4double csdir1[4]; |
---|
135 | G4double csdir2[4]; |
---|
136 | |
---|
137 | G4double csrem[4]; |
---|
138 | G4double alrem = 0.0, berem = 0.0, garem = 0.0; |
---|
139 | |
---|
140 | G4double pfis_rem[4]; |
---|
141 | G4double pf1_rem[4]; |
---|
142 | |
---|
143 | G4double e_evapo = 0.0; |
---|
144 | G4double el; |
---|
145 | G4double fmcv; |
---|
146 | |
---|
147 | G4double aff1; |
---|
148 | G4double zff1; |
---|
149 | G4double eff1; |
---|
150 | |
---|
151 | G4double aff2; |
---|
152 | G4double zff2; |
---|
153 | G4double eff2; |
---|
154 | |
---|
155 | G4double v1, v2; |
---|
156 | |
---|
157 | G4double t2 = 0.0; |
---|
158 | G4double ctet1; |
---|
159 | G4double ctet2 = 0.0; |
---|
160 | G4double phi1; |
---|
161 | G4double phi2 = 0.0; |
---|
162 | G4double p2 = 0.0; |
---|
163 | G4double epf2_out = 0.0 ; ///AH adding initialization |
---|
164 | G4int lma_pf1 = 0, lmi_pf1 = 0; |
---|
165 | G4int lma_pf2 = 0, lmi_pf2 = 0; |
---|
166 | G4int nopart = 0; |
---|
167 | |
---|
168 | G4double cst, sst, csf, ssf; |
---|
169 | |
---|
170 | G4double zf, af, mtota, pleva, pxeva, pyeva; |
---|
171 | G4int ff = 0; |
---|
172 | G4int inum = eventnumber; |
---|
173 | G4int inttype; |
---|
174 | G4double esrem = excitationEnergy; |
---|
175 | |
---|
176 | G4double aprf = nucleusA; |
---|
177 | G4double zprf = nucleusZ; |
---|
178 | G4double mcorem = nucleusMass; |
---|
179 | G4double ee = excitationEnergy; |
---|
180 | G4double jprf = angularMomentum; // actually root-mean-squared |
---|
181 | |
---|
182 | G4double erecrem = recoilEnergy; |
---|
183 | G4double trem; |
---|
184 | G4double pxrem = momX; |
---|
185 | G4double pyrem = momY; |
---|
186 | G4double pzrem = momZ; |
---|
187 | |
---|
188 | G4double remmass; |
---|
189 | |
---|
190 | varntp->ntrack = 0; |
---|
191 | volant->iv = 0; |
---|
192 | |
---|
193 | G4double pcorem = std::sqrt(erecrem*(erecrem +2.*938.2796*nucleusA)); |
---|
194 | // G4double pcorem = std::sqrt(std::pow(momX,2) + std::pow(momY,2) + std::pow(momZ,2)); |
---|
195 | // assert(isnan(pcorem) == false); |
---|
196 | if(esrem >= 1.0e-3) { //then |
---|
197 | // void evapora(G4double zprf, G4double aprf, G4double ee, G4double jprf, |
---|
198 | // G4double *zf_par, G4double *af_par, G4double *mtota_par, |
---|
199 | // G4double *pleva_par, G4double *pxeva_par, G4double *pyeva_par, |
---|
200 | // G4double *ff_par, G4int *inttype_par, G4int *inum_par); |
---|
201 | // G4cout <<"Evaporating nucleus: " << G4endl; |
---|
202 | // G4cout <<"A = " << aprf << " Z = " << zprf << G4endl; |
---|
203 | evapora(zprf,aprf,ee,jprf, &zf, &af, &mtota, &pleva, &pxeva, &pyeva, &ff, &inttype, &inum); |
---|
204 | // assert(isnan(pleva) == false); |
---|
205 | // assert(isnan(pxeva) == false); |
---|
206 | // assert(isnan(pyeva) == false); |
---|
207 | } |
---|
208 | else { |
---|
209 | ff = 0; |
---|
210 | zf = zprf; |
---|
211 | af = aprf; |
---|
212 | pxeva = pxrem; |
---|
213 | pyeva = pyrem; |
---|
214 | pleva = pzrem; |
---|
215 | } // endif |
---|
216 | // assert(isnan(zf) == false); |
---|
217 | // assert(isnan(af) == false); |
---|
218 | // assert(isnan(ee) == false); |
---|
219 | // |
---|
220 | // AFP,ZFP is the final fragment if no fission occurs (FF=0) |
---|
221 | // In case of fission (FF=1) it is the nucleus that undergoes fission. |
---|
222 | // G4double zfp = idnint(zf); |
---|
223 | // G4double afp = idnint(af); |
---|
224 | |
---|
225 | if (ff == 1) { //then |
---|
226 | // --------------------- Here, a FISSION occures -------------------------- |
---|
227 | // |
---|
228 | // FEE: (EE) energy of fissioning nucleus ABOVE the fission barrier. |
---|
229 | // |
---|
230 | // calcul des impulsions des particules evaporees (avant fission) |
---|
231 | // dans le systeme labo: |
---|
232 | |
---|
233 | trem = double(erecrem); |
---|
234 | remmass = pace2(aprf,zprf) + aprf*uma - zprf*melec; // canonic |
---|
235 | remmass = mcorem + double(esrem); // ok |
---|
236 | remmass = mcorem; //cugnon |
---|
237 | varntp->kfis = 1; |
---|
238 | G4double gamrem = (remmass + trem)/remmass; |
---|
239 | G4double etrem = std::sqrt(trem*(trem + 2.0*remmass))/remmass; |
---|
240 | // assert(isnan(etrem) == false); |
---|
241 | // This is not treated as accurately as for the non fission case for which |
---|
242 | // the remnant mass is computed to satisfy the energy conservation |
---|
243 | // of evaporated particles. But it is not bad and more canonical! |
---|
244 | remmass = pace2(aprf,zprf) + aprf*uma - zprf*melec+double(esrem); // !canonic |
---|
245 | // Essais avec la masse de KHS (9/2002): |
---|
246 | el = 0.0; |
---|
247 | mglms(aprf,zprf,0,&el); |
---|
248 | remmass = zprf*fmp + (aprf-zprf)*fmn + el + double(esrem); |
---|
249 | |
---|
250 | gamrem = std::sqrt(std::pow(pcorem,2) + std::pow(remmass,2))/remmass; |
---|
251 | // assert(isnan(gamrem) == false); |
---|
252 | etrem = pcorem/remmass; |
---|
253 | // assert(isnan(etrem) == false); |
---|
254 | |
---|
255 | alrem = pxrem/pcorem; |
---|
256 | // assert(isnan(alrem) == false); |
---|
257 | berem = pyrem/pcorem; |
---|
258 | // assert(isnan(berem) == false); |
---|
259 | garem = pzrem/pcorem; |
---|
260 | // assert(isnan(garem) == false); |
---|
261 | |
---|
262 | csrem[0] = 0.0; // Should not be used. |
---|
263 | csrem[1] = alrem; |
---|
264 | csrem[2] = berem; |
---|
265 | csrem[3] = garem; |
---|
266 | |
---|
267 | // C Pour Vérif Remnant = evapo(Pre fission) + Noyau_fissionant (systÚme Remnant) |
---|
268 | G4double bil_e = 0.0; |
---|
269 | G4double bil_px = 0.0; |
---|
270 | G4double bil_py = 0.0; |
---|
271 | G4double bil_pz = 0.0; |
---|
272 | G4double masse = 0.0; |
---|
273 | |
---|
274 | for(G4int iloc = 1; iloc <= volant->iv; iloc++) { //DO iloc=1,iv |
---|
275 | // assert(isnan(volant->zpcv[iloc]) == false); |
---|
276 | // assert(volant->acv[iloc] != 0); |
---|
277 | // assert(volant->zpcv[iloc] != 0); |
---|
278 | mglms(double(volant->acv[iloc]),double(volant->zpcv[iloc]),0,&el); |
---|
279 | // assert(isnan(el) == false); |
---|
280 | masse = volant->zpcv[iloc]*fmp + (volant->acv[iloc] - volant->zpcv[iloc])*fmn + el; |
---|
281 | // assert(isnan(masse) == false); |
---|
282 | bil_e = bil_e + std::sqrt(std::pow(volant->pcv[iloc],2) + std::pow(masse,2)); |
---|
283 | // assert(isnan(bil_e) == false); |
---|
284 | bil_px = bil_px + volant->pcv[iloc]*(volant->xcv[iloc]); |
---|
285 | bil_py = bil_py + volant->pcv[iloc]*(volant->ycv[iloc]); |
---|
286 | bil_pz = bil_pz + volant->pcv[iloc]*(volant->zcv[iloc]); |
---|
287 | } // enddo |
---|
288 | // C Ce bilan (impulsion nulle) est parfait. (Bil_Px=Bil_Px+PXEVA....) |
---|
289 | |
---|
290 | G4int ndec = 1; |
---|
291 | |
---|
292 | if(volant->iv != 0) { //then |
---|
293 | if(verboseLevel > 2) { |
---|
294 | G4cout <<"varntp->ntrack = " << varntp->ntrack << G4endl; |
---|
295 | G4cout <<"1st Translab: Adding indices from " << ndec << " to " << volant->iv << G4endl; |
---|
296 | } |
---|
297 | nopart = varntp->ntrack - 1; |
---|
298 | translab(gamrem,etrem,csrem,nopart,ndec); |
---|
299 | if(verboseLevel > 2) { |
---|
300 | G4cout <<"Translab complete!" << G4endl; |
---|
301 | G4cout <<"varntp->ntrack = " << varntp->ntrack << G4endl; |
---|
302 | } |
---|
303 | } |
---|
304 | nbpevap = volant->iv; // nombre de particules d'evaporation traitees |
---|
305 | |
---|
306 | // C |
---|
307 | // C Now calculation of the fission fragment distribution including |
---|
308 | // C evaporation from the fragments. |
---|
309 | // C |
---|
310 | |
---|
311 | // C Distribution of the fission fragments: |
---|
312 | |
---|
313 | // void fissionDistri(G4double a,G4double z,G4double e, |
---|
314 | // G4double &a1,G4double &z1,G4double &e1,G4double &v1, |
---|
315 | // G4double &a2,G4double &z2,G4double &e2,G4double &v2); |
---|
316 | |
---|
317 | fissionDistri(af,zf,ee,aff1,zff1,eff1,v1,aff2,zff2,eff2,v2); |
---|
318 | |
---|
319 | // C verif des A et Z decimaux: |
---|
320 | G4int na_f = int(std::floor(af + 0.5)); |
---|
321 | G4int nz_f = int(std::floor(zf + 0.5)); |
---|
322 | varntp->izfis = nz_f; // copie dans le ntuple |
---|
323 | varntp->iafis = na_f; |
---|
324 | G4int na_pf1 = int(std::floor(aff1 + 0.5)); |
---|
325 | G4int nz_pf1 = int(std::floor(zff1 + 0.5)); |
---|
326 | G4int na_pf2 = int(std::floor(aff2 + 0.5)); |
---|
327 | G4int nz_pf2 = int(std::floor(zff2 + 0.5)); |
---|
328 | |
---|
329 | if((na_f != (na_pf1+na_pf2)) || (nz_f != (nz_pf1+nz_pf2))) { |
---|
330 | if(verboseLevel > 2) { |
---|
331 | G4cout <<"problemes arrondis dans la fission " << G4endl; |
---|
332 | G4cout << "af,zf,aff1,zff1,aff2,zff2" << G4endl; |
---|
333 | G4cout << af <<" , " << zf <<" , " << aff1 <<" , " << zff1 <<" , " << aff2 <<" , " << zff2 << G4endl; |
---|
334 | G4cout << "a,z,a1,z1,a2,z2 integer" << G4endl; |
---|
335 | G4cout << na_f <<" , " << nz_f <<" , " << na_pf1 <<" , " << nz_pf1 <<" , " << na_pf2 <<" , " << nz_pf2 << G4endl; |
---|
336 | } |
---|
337 | } |
---|
338 | |
---|
339 | // Calcul de l'impulsion des PF dans le syteme noyau de fission: |
---|
340 | G4int kboud = idnint(zf); |
---|
341 | G4int jboud = idnint(af-zf); |
---|
342 | //G4double ef = fb->efa[kboud][jboud]; // barriere de fission |
---|
343 | G4double ef = fb->efa[jboud][kboud]; // barriere de fission |
---|
344 | // assert(isnan(ef) == false); |
---|
345 | varntp->estfis = ee + ef; // copie dans le ntuple |
---|
346 | |
---|
347 | // C MASSEF = pace2(AF,ZF) |
---|
348 | // C MASSEF = MASSEF + AF*UMA - ZF*MELEC + EE + EF |
---|
349 | // C MASSE1 = pace2(DBLE(AFF1),DBLE(ZFF1)) |
---|
350 | // C MASSE1 = MASSE1 + AFF1*UMA - ZFF1*MELEC + EFF1 |
---|
351 | // C MASSE2 = pace2(DBLE(AFF2),DBLE(ZFF2)) |
---|
352 | // C MASSE2 = MASSE2 + AFF2*UMA - ZFF2*MELEC + EFF2 |
---|
353 | // C WRITE(6,*) 'MASSEF,MASSE1,MASSE2',MASSEF,MASSE1,MASSE2 |
---|
354 | // C MGLMS est la fonction de masse cohérente avec KHS evapo-fis. |
---|
355 | // C Attention aux parametres, ici 0=OPTSHP, NO microscopic correct. |
---|
356 | mglms(af,zf,0,&el); |
---|
357 | // assert(isnan(el) == false); |
---|
358 | G4double massef = zf*fmp + (af - zf)*fmn + el + ee + ef; |
---|
359 | // assert(isnan(massef) == false); |
---|
360 | mglms(double(aff1),double(zff1),0,&el); |
---|
361 | // assert(isnan(el) == false); |
---|
362 | G4double masse1 = zff1*fmp + (aff1-zff1)*fmn + el + eff1; |
---|
363 | // assert(isnan(masse1) == false); |
---|
364 | mglms(aff2,zff2,0,&el); |
---|
365 | // assert(isnan(el) == false); |
---|
366 | G4double masse2 = zff2*fmp + (aff2 - zff2)*fmn + el + eff2; |
---|
367 | // assert(isnan(masse2) == false); |
---|
368 | // C WRITE(6,*) 'MASSEF,MASSE1,MASSE2',MASSEF,MASSE1,MASSE2 |
---|
369 | G4double b = massef - masse1 - masse2; |
---|
370 | if(b < 0.0) { //then |
---|
371 | b=0.0; |
---|
372 | if(verboseLevel > 2) { |
---|
373 | G4cout <<"anomalie dans la fission: " << G4endl; |
---|
374 | G4cout << inum<< " , " << af<< " , " <<zf<< " , " <<massef<< " , " <<aff1<< " , " <<zff1<< " , " <<masse1<< " , " <<aff2<< " , " <<zff2<< " , " << masse2 << G4endl; |
---|
375 | } |
---|
376 | } //endif |
---|
377 | G4double t1 = b*(b + 2.0*masse2)/(2.0*massef); |
---|
378 | // assert(isnan(t1) == false); |
---|
379 | G4double p1 = std::sqrt(t1*(t1 + 2.0*masse1)); |
---|
380 | // assert(isnan(p1) == false); |
---|
381 | |
---|
382 | G4double rndm; |
---|
383 | standardRandom(&rndm, &(hazard->igraine[13])); |
---|
384 | ctet1 = 2.0*rndm - 1.0; |
---|
385 | standardRandom(&rndm,&(hazard->igraine[9])); |
---|
386 | phi1 = rndm*2.0*3.141592654; |
---|
387 | |
---|
388 | // C ----Coefs de la transformation de Lorentz (noyau de fission -> Remnant) |
---|
389 | G4double peva = std::pow(pxeva,2) + std::pow(pyeva,2) + std::pow(pleva,2); |
---|
390 | G4double gamfis = std::sqrt(std::pow(massef,2) + peva)/massef; |
---|
391 | // assert(isnan(gamfis) == false); |
---|
392 | peva = std::sqrt(peva); |
---|
393 | // assert(isnan(peva) == false); |
---|
394 | G4double etfis = peva/massef; |
---|
395 | |
---|
396 | G4double epf1_in; |
---|
397 | G4double epf1_out; |
---|
398 | |
---|
399 | // C ----Matrice de rotation (noyau de fission -> Remnant) |
---|
400 | if(peva >= 1.0e-4) { |
---|
401 | sitet = std::sqrt(std::pow(pxeva,2)+std::pow(pyeva,2))/peva; |
---|
402 | // assert(isnan(sitet) == false); |
---|
403 | } |
---|
404 | if(sitet > 1.0e-5) { //then |
---|
405 | G4double cstet = pleva/peva; |
---|
406 | G4double siphi = pyeva/(sitet*peva); |
---|
407 | G4double csphi = pxeva/(sitet*peva); |
---|
408 | |
---|
409 | R[1][1] = cstet*csphi; |
---|
410 | R[1][2] = -siphi; |
---|
411 | R[1][3] = sitet*csphi; |
---|
412 | R[2][1] = cstet*siphi; |
---|
413 | R[2][2] = csphi; |
---|
414 | R[2][3] = sitet*siphi; |
---|
415 | R[3][1] = -sitet; |
---|
416 | R[3][2] = 0.0; |
---|
417 | R[3][3] = cstet; |
---|
418 | } |
---|
419 | else { |
---|
420 | R[1][1] = 1.0; |
---|
421 | R[1][2] = 0.0; |
---|
422 | R[1][3] = 0.0; |
---|
423 | R[2][1] = 0.0; |
---|
424 | R[2][2] = 1.0; |
---|
425 | R[2][3] = 0.0; |
---|
426 | R[3][1] = 0.0; |
---|
427 | R[3][2] = 0.0; |
---|
428 | R[3][3] = 1.0; |
---|
429 | } // endif |
---|
430 | // c test de verif: |
---|
431 | |
---|
432 | if((zff1 <= 0.0) || (aff1 <= 0.0) || (aff1 < zff1)) { //then |
---|
433 | if(verboseLevel > 2) { |
---|
434 | G4cout <<"zf = " << zf <<" af = " << af <<"ee = " << ee <<"zff1 = " << zff1 <<"aff1 = " << aff1 << G4endl; |
---|
435 | } |
---|
436 | } |
---|
437 | else { |
---|
438 | // C ---------------------- PF1 will evaporate |
---|
439 | epf1_in = double(eff1); |
---|
440 | epf1_out = epf1_in; |
---|
441 | // void evapora(G4double zprf, G4double aprf, G4double ee, G4double jprf, |
---|
442 | // G4double *zf_par, G4double *af_par, G4double *mtota_par, |
---|
443 | // G4double *pleva_par, G4double *pxeva_par, G4double *pyeva_par, |
---|
444 | // G4double *ff_par, G4int *inttype_par, G4int *inum_par); |
---|
445 | G4double zf1, af1, malpha1, ffpleva1, ffpxeva1, ffpyeva1; |
---|
446 | G4int ff1, ftype1; |
---|
447 | evapora(zff1, aff1, epf1_out, 0.0, &zf1, &af1, &malpha1, &ffpleva1, |
---|
448 | &ffpxeva1, &ffpyeva1, &ff1, &ftype1, &inum); |
---|
449 | // C On ajoute le fragment: |
---|
450 | // assert(af1 > 0); |
---|
451 | volant->iv = volant->iv + 1; |
---|
452 | // assert(af1 != 0); |
---|
453 | // assert(zf1 != 0); |
---|
454 | volant->acv[volant->iv] = af1; |
---|
455 | volant->zpcv[volant->iv] = zf1; |
---|
456 | if(verboseLevel > 2) { |
---|
457 | G4cout <<"Added fission fragment: a = " << volant->acv[volant->iv] << " z = " << volant->zpcv[volant->iv] << G4endl; |
---|
458 | } |
---|
459 | peva = std::sqrt(std::pow(ffpxeva1,2) + std::pow(ffpyeva1,2) + std::pow(ffpleva1,2)); |
---|
460 | // assert(isnan(peva) == false); |
---|
461 | volant->pcv[volant->iv] = peva; |
---|
462 | if(peva > 0.001) { // then |
---|
463 | volant->xcv[volant->iv] = ffpxeva1/peva; |
---|
464 | volant->ycv[volant->iv] = ffpyeva1/peva; |
---|
465 | volant->zcv[volant->iv] = ffpleva1/peva; |
---|
466 | } |
---|
467 | else { |
---|
468 | volant->xcv[volant->iv] = 1.0; |
---|
469 | volant->ycv[volant->iv] = 0.0; |
---|
470 | volant->zcv[volant->iv] = 0.0; |
---|
471 | } // end if |
---|
472 | |
---|
473 | // C Pour Vérif evapo de PF1 dans le systeme du Noyau Fissionant |
---|
474 | G4double bil1_e = 0.0; |
---|
475 | G4double bil1_px = 0.0; |
---|
476 | G4double bil1_py=0.0; |
---|
477 | G4double bil1_pz=0.0; |
---|
478 | for(G4int iloc = nbpevap + 1; iloc <= volant->iv; iloc++) { //do iloc=nbpevap+1,iv |
---|
479 | // for(G4int iloc = nbpevap + 1; iloc <= volant->iv + 1; iloc++) { //do iloc=nbpevap+1,iv |
---|
480 | mglms(volant->acv[iloc], volant->zpcv[iloc],0,&el); |
---|
481 | masse = volant->zpcv[iloc]*fmp + (volant->acv[iloc] - volant->zpcv[iloc])*fmn + el; |
---|
482 | // assert(isnan(masse) == false); |
---|
483 | bil1_e = bil1_e + std::sqrt(std::pow(volant->pcv[iloc],2) + std::pow(masse,2)); |
---|
484 | // assert(isnan(bil1_e) == false); |
---|
485 | bil1_px = bil1_px + volant->pcv[iloc]*(volant->xcv[iloc]); |
---|
486 | bil1_py = bil1_py + volant->pcv[iloc]*(volant->ycv[iloc]); |
---|
487 | bil1_pz = bil1_pz + volant->pcv[iloc]*(volant->zcv[iloc]); |
---|
488 | } // enddo |
---|
489 | |
---|
490 | // Calcul des cosinus directeurs de PF1 dans le Remnant et calcul |
---|
491 | // des coefs pour la transformation de Lorentz Systeme PF --> Systeme Remnant |
---|
492 | translabpf(masse1,t1,p1,ctet1,phi1,gamfis,etfis,R,&plab1,&gam1,&eta1,csdir1); |
---|
493 | |
---|
494 | // calcul des impulsions des particules evaporees dans le systeme Remnant: |
---|
495 | if(verboseLevel > 2) { |
---|
496 | G4cout <<"2nd Translab (pf1 evap): Adding indices from " << nbpevap+1 << " to " << volant->iv << G4endl; |
---|
497 | } |
---|
498 | nopart = varntp->ntrack - 1; |
---|
499 | translab(gam1,eta1,csdir1,nopart,nbpevap+1); |
---|
500 | if(verboseLevel > 2) { |
---|
501 | G4cout <<"After translab call... varntp->ntrack = " << varntp->ntrack << G4endl; |
---|
502 | } |
---|
503 | memiv = nbpevap + 1; // memoires pour la future transformation |
---|
504 | mempaw = nopart; // remnant->labo pour pf1 et pf2. |
---|
505 | lmi_pf1 = nopart + nbpevap + 1; // indices min et max dans /var_ntp/ |
---|
506 | lma_pf1 = nopart + volant->iv; // des particules issues de pf1 |
---|
507 | nbpevap = volant->iv; // nombre de particules d'evaporation traitees |
---|
508 | } // end if |
---|
509 | // C --------------------- End of PF1 calculation |
---|
510 | |
---|
511 | // c test de verif: |
---|
512 | if((zff2 <= 0.0) || (aff2 <= 0.0) || (aff2 <= zff2)) { //then |
---|
513 | if(verboseLevel > 2) { |
---|
514 | G4cout << zf << " " << af << " " << ee << " " << zff2 << " " << aff2 << G4endl; |
---|
515 | } |
---|
516 | } |
---|
517 | else { |
---|
518 | // C ---------------------- PF2 will evaporate |
---|
519 | G4double epf2_in = double(eff2); |
---|
520 | G4double epf2_out = epf2_in; |
---|
521 | // void evapora(G4double zprf, G4double aprf, G4double ee, G4double jprf, |
---|
522 | // G4double *zf_par, G4double *af_par, G4double *mtota_par, |
---|
523 | // G4double *pleva_par, G4double *pxeva_par, G4double *pyeva_par, |
---|
524 | // G4double *ff_par, G4int *inttype_par, G4int *inum_par); |
---|
525 | G4double zf2, af2, malpha2, ffpleva2, ffpxeva2, ffpyeva2; |
---|
526 | G4int ff2, ftype2; |
---|
527 | evapora(zff2,aff2,epf2_out,0.0,&zf2,&af2,&malpha2,&ffpleva2, |
---|
528 | &ffpxeva2,&ffpyeva2,&ff2,&ftype2,&inum); |
---|
529 | // C On ajoute le fragment: |
---|
530 | volant->iv = volant->iv + 1; |
---|
531 | volant->acv[volant->iv] = af2; |
---|
532 | volant->zpcv[volant->iv] = zf2; |
---|
533 | if(verboseLevel > 2) { |
---|
534 | G4cout <<"Added fission fragment: a = " << volant->acv[volant->iv] << " z = " << volant->zpcv[volant->iv] << G4endl; |
---|
535 | } |
---|
536 | peva = std::sqrt(std::pow(ffpxeva2,2) + std::pow(ffpyeva2,2) + std::pow(ffpleva2,2)); |
---|
537 | // assert(isnan(peva) == false); |
---|
538 | volant->pcv[volant->iv] = peva; |
---|
539 | // exit(0); |
---|
540 | if(peva > 0.001) { //then |
---|
541 | volant->xcv[volant->iv] = ffpxeva2/peva; |
---|
542 | volant->ycv[volant->iv] = ffpyeva2/peva; |
---|
543 | volant->zcv[volant->iv] = ffpleva2/peva; |
---|
544 | } |
---|
545 | else { |
---|
546 | volant->xcv[volant->iv] = 1.0; |
---|
547 | volant->ycv[volant->iv] = 0.0; |
---|
548 | volant->zcv[volant->iv] = 0.0; |
---|
549 | } //end if |
---|
550 | // C Pour Vérif evapo de PF1 dans le systeme du Noyau Fissionant |
---|
551 | G4double bil2_e = 0.0; |
---|
552 | G4double bil2_px = 0.0; |
---|
553 | G4double bil2_py = 0.0; |
---|
554 | G4double bil2_pz = 0.0; |
---|
555 | // for(G4int iloc = nbpevap + 1; iloc <= volant->iv; iloc++) { //do iloc=nbpevap+1,iv |
---|
556 | for(G4int iloc = nbpevap + 1; iloc <= volant->iv; iloc++) { //do iloc=nbpevap+1,iv |
---|
557 | mglms(volant->acv[iloc],volant->zpcv[iloc],0,&el); |
---|
558 | masse = volant->zpcv[iloc]*fmp + (volant->acv[iloc] - volant->zpcv[iloc])*fmn + el; |
---|
559 | bil2_e = bil2_e + std::sqrt(std::pow(volant->pcv[iloc],2) + std::pow(masse,2)); |
---|
560 | // assert(isnan(bil2_e) == false); |
---|
561 | bil2_px = bil2_px + volant->pcv[iloc]*(volant->xcv[iloc]); |
---|
562 | bil2_py = bil2_py + volant->pcv[iloc]*(volant->ycv[iloc]); |
---|
563 | bil2_pz = bil2_pz + volant->pcv[iloc]*(volant->zcv[iloc]); |
---|
564 | } //enddo |
---|
565 | |
---|
566 | // C ----Calcul des cosinus directeurs de PF2 dans le Remnant et calcul |
---|
567 | // c des coefs pour la transformation de Lorentz Systeme PF --> Systeme Remnant |
---|
568 | G4double t2 = b - t1; |
---|
569 | // G4double ctet2 = -ctet1; |
---|
570 | ctet2 = -1.0*ctet1; |
---|
571 | assert(std::fabs(ctet2) <= 1.0); |
---|
572 | // assert(isnan(ctet2) == false); |
---|
573 | phi2 = dmod(phi1+3.141592654,6.283185308); |
---|
574 | // assert(isnan(phi2) == false); |
---|
575 | G4double p2 = std::sqrt(t2*(t2+2.0*masse2)); |
---|
576 | // assert(isnan(p2) == false); |
---|
577 | |
---|
578 | // void translabpf(G4double masse1, G4double t1, G4double p1, G4double ctet1, |
---|
579 | // G4double phi1, G4double gamrem, G4double etrem, G4double R[][4], |
---|
580 | // G4double *plab1, G4double *gam1, G4double *eta1, G4double csdir[]); |
---|
581 | translabpf(masse2,t2,p2,ctet2,phi2,gamfis,etfis,R,&plab2,&gam2,&eta2,csdir2); |
---|
582 | // C |
---|
583 | // C calcul des impulsions des particules evaporees dans le systeme Remnant: |
---|
584 | // c |
---|
585 | if(verboseLevel > 2) { |
---|
586 | G4cout <<"3rd Translab (pf2 evap): Adding indices from " << nbpevap+1 << " to " << volant->iv << G4endl; |
---|
587 | } |
---|
588 | nopart = varntp->ntrack - 1; |
---|
589 | translab(gam2,eta2,csdir2,nopart,nbpevap+1); |
---|
590 | lmi_pf2 = nopart + nbpevap + 1; // indices min et max dans /var_ntp/ |
---|
591 | lma_pf2 = nopart + volant->iv; // des particules issues de pf2 |
---|
592 | } // end if |
---|
593 | // C --------------------- End of PF2 calculation |
---|
594 | |
---|
595 | // C Pour vérifications: calculs du noyau fissionant et des PF dans |
---|
596 | // C le systeme du remnant. |
---|
597 | for(G4int iloc = 1; iloc <= 3; iloc++) { // do iloc=1,3 |
---|
598 | pfis_rem[iloc] = 0.0; |
---|
599 | } // enddo |
---|
600 | G4double efis_rem, pfis_trav[4]; |
---|
601 | lorab(gamfis,etfis,massef,pfis_rem,&efis_rem,pfis_trav); |
---|
602 | rotab(R,pfis_trav,pfis_rem); |
---|
603 | |
---|
604 | stet1 = std::sqrt(1.0 - std::pow(ctet1,2)); |
---|
605 | // assert(isnan(stet1) == false); |
---|
606 | pf1_rem[1] = p1*stet1*std::cos(phi1); |
---|
607 | pf1_rem[2] = p1*stet1*std::sin(phi1); |
---|
608 | pf1_rem[3] = p1*ctet1; |
---|
609 | G4double e1_rem; |
---|
610 | lorab(gamfis,etfis,masse1+t1,pf1_rem,&e1_rem,pfis_trav); |
---|
611 | rotab(R,pfis_trav,pf1_rem); |
---|
612 | |
---|
613 | stet2 = std::sqrt(1.0 - std::pow(ctet2,2)); |
---|
614 | assert(std::pow(ctet2,2) >= 0.0); |
---|
615 | assert(std::pow(ctet2,2) <= 1.0); |
---|
616 | // assert(isnan(stet2) == false); |
---|
617 | |
---|
618 | G4double pf2_rem[4]; |
---|
619 | G4double e2_rem; |
---|
620 | pf2_rem[1] = p2*stet2*std::cos(phi2); |
---|
621 | pf2_rem[2] = p2*stet2*std::sin(phi2); |
---|
622 | pf2_rem[3] = p2*ctet2; |
---|
623 | lorab(gamfis,etfis,masse2+t2,pf2_rem,&e2_rem,pfis_trav); |
---|
624 | rotab(R,pfis_trav,pf2_rem); |
---|
625 | // C Verif 0: Remnant = evapo_pre_fission + Noyau Fissionant |
---|
626 | bil_e = remmass - efis_rem - bil_e; |
---|
627 | bil_px = bil_px + pfis_rem[1]; |
---|
628 | bil_py = bil_py + pfis_rem[2]; |
---|
629 | bil_pz = bil_pz + pfis_rem[3]; |
---|
630 | // C Verif 1: noyau fissionant = PF1 + PF2 dans le systeme remnant |
---|
631 | // G4double bilan_e = efis_rem - e1_rem - e2_rem; |
---|
632 | // G4double bilan_px = pfis_rem[1] - pf1_rem[1] - pf2_rem[1]; |
---|
633 | // G4double bilan_py = pfis_rem[2] - pf1_rem[2] - pf2_rem[2]; |
---|
634 | // G4double bilan_pz = pfis_rem[3] - pf1_rem[3] - pf2_rem[3]; |
---|
635 | // C Verif 2: PF1 et PF2 egaux a toutes leurs particules evaporees |
---|
636 | // C (Systeme remnant) |
---|
637 | if((lma_pf1-lmi_pf1) != 0) { //then |
---|
638 | G4double bil_e_pf1 = e1_rem - epf1_out; |
---|
639 | G4double bil_px_pf1 = pf1_rem[1]; |
---|
640 | G4double bil_py_pf1 = pf1_rem[2]; |
---|
641 | G4double bil_pz_pf1 = pf1_rem[3]; |
---|
642 | for(G4int ipf1 = lmi_pf1; ipf1 <= lma_pf1; ipf1++) { //do ipf1=lmi_pf1,lma_pf1 |
---|
643 | bil_e_pf1 = bil_e_pf1 - (std::pow(varntp->plab[ipf1],2) + std::pow(varntp->enerj[ipf1],2))/(2.0*(varntp->enerj[ipf1])); |
---|
644 | cst = std::cos(varntp->tetlab[ipf1]/57.2957795); |
---|
645 | sst = std::sin(varntp->tetlab[ipf1]/57.2957795); |
---|
646 | csf = std::cos(varntp->philab[ipf1]/57.2957795); |
---|
647 | ssf = std::sin(varntp->philab[ipf1]/57.2957795); |
---|
648 | bil_px_pf1 = bil_px_pf1 - varntp->plab[ipf1]*sst*csf; |
---|
649 | bil_py_pf1 = bil_py_pf1 - varntp->plab[ipf1]*sst*ssf; |
---|
650 | bil_pz_pf1 = bil_pz_pf1 - varntp->plab[ipf1]*cst; |
---|
651 | } // enddo |
---|
652 | } //endif |
---|
653 | |
---|
654 | if((lma_pf2-lmi_pf2) != 0) { //then |
---|
655 | G4double bil_e_pf2 = e2_rem - epf2_out; |
---|
656 | G4double bil_px_pf2 = pf2_rem[1]; |
---|
657 | G4double bil_py_pf2 = pf2_rem[2]; |
---|
658 | G4double bil_pz_pf2 = pf2_rem[3]; |
---|
659 | for(G4int ipf2 = lmi_pf2; ipf2 <= lma_pf2; ipf2++) { //do ipf2=lmi_pf2,lma_pf2 |
---|
660 | bil_e_pf2 = bil_e_pf2 - (std::pow(varntp->plab[ipf2],2) + std::pow(varntp->enerj[ipf2],2))/(2.0*(varntp->enerj[ipf2])); |
---|
661 | G4double cst = std::cos(varntp->tetlab[ipf2]/57.2957795); |
---|
662 | G4double sst = std::sin(varntp->tetlab[ipf2]/57.2957795); |
---|
663 | G4double csf = std::cos(varntp->philab[ipf2]/57.2957795); |
---|
664 | G4double ssf = std::sin(varntp->philab[ipf2]/57.2957795); |
---|
665 | bil_px_pf2 = bil_px_pf2 - varntp->plab[ipf2]*sst*csf; |
---|
666 | bil_py_pf2 = bil_py_pf2 - varntp->plab[ipf2]*sst*ssf; |
---|
667 | bil_pz_pf2 = bil_pz_pf2 - varntp->plab[ipf2]*cst; |
---|
668 | } // enddo |
---|
669 | } //endif |
---|
670 | // C |
---|
671 | // C ---- Transformation systeme Remnant -> systeme labo. (evapo de PF1 ET PF2) |
---|
672 | // C |
---|
673 | // G4double mempaw, memiv; |
---|
674 | if(verboseLevel > 2) { |
---|
675 | G4cout <<"4th Translab: Adding indices from " << memiv << " to " << volant->iv << G4endl; |
---|
676 | } |
---|
677 | translab(gamrem,etrem,csrem,mempaw,memiv); |
---|
678 | // C ******************* END of fission calculations ************************ |
---|
679 | } |
---|
680 | else { |
---|
681 | // C ************************ Evapo sans fission ***************************** |
---|
682 | // C Here, FF=0, --> Evapo sans fission, on ajoute le fragment: |
---|
683 | // C ************************************************************************* |
---|
684 | varntp->kfis = 0; |
---|
685 | if(verboseLevel > 2) { |
---|
686 | G4cout <<"Evaporation without fission" << G4endl; |
---|
687 | } |
---|
688 | volant->iv = volant->iv + 1; |
---|
689 | volant->acv[volant->iv] = af; |
---|
690 | volant->zpcv[volant->iv] = zf; |
---|
691 | G4double peva = std::sqrt(std::pow(pxeva,2)+std::pow(pyeva,2)+std::pow(pleva,2)); |
---|
692 | // assert(isnan(peva) == false); |
---|
693 | volant->pcv[volant->iv] = peva; |
---|
694 | if(peva > 0.001) { //then |
---|
695 | volant->xcv[volant->iv] = pxeva/peva; |
---|
696 | volant->ycv[volant->iv] = pyeva/peva; |
---|
697 | volant->zcv[volant->iv] = pleva/peva; |
---|
698 | } |
---|
699 | else { |
---|
700 | volant->xcv[volant->iv] = 1.0; |
---|
701 | volant->ycv[volant->iv] = 0.0; |
---|
702 | volant->zcv[volant->iv] = 0.0; |
---|
703 | } // end if |
---|
704 | |
---|
705 | // C |
---|
706 | // C calcul des impulsions des particules evaporees dans le systeme labo: |
---|
707 | // c |
---|
708 | trem = double(erecrem); |
---|
709 | // C REMMASS = pace2(APRF,ZPRF) + APRF*UMA - ZPRF*MELEC !Canonic |
---|
710 | // C REMMASS = MCOREM + DBLE(ESREM) !OK |
---|
711 | remmass = mcorem; //Cugnon |
---|
712 | // C GAMREM = (REMMASS + TREM)/REMMASS !OK |
---|
713 | // C ETREM = DSQRT(TREM*(TREM + 2.*REMMASS))/REMMASS !OK |
---|
714 | csrem[0] = 0.0; // Should not be used. |
---|
715 | csrem[1] = alrem; |
---|
716 | csrem[2] = berem; |
---|
717 | csrem[3] = garem; |
---|
718 | |
---|
719 | // for(G4int j = 1; j <= volant->iv; j++) { //do j=1,iv |
---|
720 | for(G4int j = 1; j <= volant->iv; j++) { //do j=1,iv |
---|
721 | if(volant->acv[j] == 0) { |
---|
722 | if(verboseLevel > 2) { |
---|
723 | G4cout <<"volant->acv[" << j << "] = 0" << G4endl; |
---|
724 | G4cout <<"volant->iv = " << volant->iv << G4endl; |
---|
725 | } |
---|
726 | } |
---|
727 | if(volant->acv[j] > 0) { |
---|
728 | assert(volant->acv[j] != 0); |
---|
729 | // assert(volant->zpcv[j] != 0); |
---|
730 | mglms(volant->acv[j],volant->zpcv[j],0,&el); |
---|
731 | fmcv = volant->zpcv[j]*fmp + (volant->acv[j] - volant->zpcv[j])*fmn + el; |
---|
732 | e_evapo = e_evapo + std::sqrt(std::pow(volant->pcv[j],2) + std::pow(fmcv,2)); |
---|
733 | // assert(isnan(e_evapo) == false); |
---|
734 | } |
---|
735 | } // enddo |
---|
736 | |
---|
737 | // C Redefinition pour conservation d'impulsion!!! |
---|
738 | // C this mass obtained by energy balance is very close to the |
---|
739 | // C mass of the remnant computed by pace2 + excitation energy (EE). (OK) |
---|
740 | remmass = e_evapo; |
---|
741 | |
---|
742 | G4double gamrem = std::sqrt(std::pow(pcorem,2)+std::pow(remmass,2))/remmass; |
---|
743 | // assert(isnan(gamrem) == false); |
---|
744 | G4double etrem = pcorem/remmass; |
---|
745 | |
---|
746 | if(verboseLevel > 2) { |
---|
747 | G4cout <<"5th Translab (no fission): Adding indices from " << 1 << " to " << volant->iv << G4endl; |
---|
748 | } |
---|
749 | nopart = varntp->ntrack - 1; |
---|
750 | translab(gamrem,etrem,csrem,nopart,1); |
---|
751 | |
---|
752 | // C End of the (FISSION - NO FISSION) condition (FF=1 or 0) |
---|
753 | } //end if |
---|
754 | // C *********************** FIN de l'EVAPO KHS ******************** |
---|
755 | } |
---|
756 | |
---|
757 | // Evaporation code |
---|
758 | void G4Abla::initEvapora() |
---|
759 | { |
---|
760 | // 6 C ******************************************************************* |
---|
761 | // 7 C |
---|
762 | // 8 C SUBROUTINE ABLAINIT(STATUS,TSTAT,NAME,FPATH) |
---|
763 | // 9 C******************************************************************** |
---|
764 | // 10 |
---|
765 | // 11 SUBROUTINE INIT_EVAPORA(RACINE) |
---|
766 | // 12 |
---|
767 | // 13 C******************************************************************** |
---|
768 | // 14 C ON INPUT: INPUT PARAMETERS FROM FILE |
---|
769 | // 15 C--------------------------------------------------------------------- |
---|
770 | // 16 C ON OUTPUT: |
---|
771 | // 17 C STATUS - FLAG FOR END OF INPUT FILE |
---|
772 | // 18 C TSTAT - FLAG FOR NTUPLE-OUTPUT |
---|
773 | // 19 C NAME - NAME FOR ISOTOPIC PRODUCTION CROSS SECTION FILES |
---|
774 | // 20 C FPATH - PATH FOR " " " " " |
---|
775 | // 21 C--------------------------------------------------------------------- |
---|
776 | // 22 C |
---|
777 | // 23 C Modification 5-january-2000 by KHS and BJ |
---|
778 | // 24 C |
---|
779 | // 25 C New treatment of dissipation. |
---|
780 | // 26 C See report of Beatriz Jurado, Jan. 2000 |
---|
781 | // 27 C |
---|
782 | // 28 C--------------------------------------------------------------------- |
---|
783 | // 29 C |
---|
784 | // 30 C MODIFICATION 6-aug-1999 by JB and MVR |
---|
785 | // 31 C |
---|
786 | // 32 C Some problems arised from an uncorrect evaluation of the fission barrier |
---|
787 | // 33 C { 1) shell correction ( ECGNZ(J,K) ) was not subctracted (20-jul-99) |
---|
788 | // 34 C 2) fiss. barrier EF was calc. before ang. mom. correct. (6-aug-99) } |
---|
789 | // 35 C |
---|
790 | // 36 C--------------------------------------------------------------------- |
---|
791 | // 37 C PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS |
---|
792 | // 38 C COMMON /ABLAMAIN/ AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC, |
---|
793 | // 39 C R_0,R_P,R_T, IMAX,IRNDM,PI, |
---|
794 | // 40 C BFPRO,SNPRO,SPPRO,SHELL |
---|
795 | // 41 C |
---|
796 | // 42 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES |
---|
797 | // 43 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C |
---|
798 | // 44 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. |
---|
799 | // 45 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION |
---|
800 | // 46 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII |
---|
801 | // 47 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... |
---|
802 | // 48 C BFPRO - FISSION BARRIER OF THE PROJECTILE |
---|
803 | // 49 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE |
---|
804 | // 50 C SPPRO - PROTON " " " " " |
---|
805 | // 51 C SHELL - GROUND STATE SHELL CORRECTION |
---|
806 | // 52 C--------------------------------------------------------------------- |
---|
807 | // 53 C |
---|
808 | // 54 C ENERGIES WIDTHS AND CROSS SECTIONS FOR EM EXCITATION |
---|
809 | // 55 C COMMON /EMDPAR/ EGDR,EGQR,FWHMGDR,FWHMGQR,CREMDE1,CREMDE2, |
---|
810 | // 56 C AE1,BE1,CE1,AE2,BE2,CE2,SR1,SR2,XR |
---|
811 | // 57 C |
---|
812 | // 58 C EGDR,EGQR - MEAN ENERGY OF GDR AND GQR |
---|
813 | // 59 C FWHMGDR,FWHMGQR - FWHM OF GDR, GQR |
---|
814 | // 60 C CREMDE1,CREMDE2 - EM CROSS SECTION FOR E1 AND E2 |
---|
815 | // 61 C AE1,BE1,CE1 - ARRAYS TO CALCULATE |
---|
816 | // 62 C AE2,BE2,CE2 - THE EXCITATION ENERGY AFTER E.M. EXC. |
---|
817 | // 63 C SR1,SR2,XR - WITH MONTE CARLO |
---|
818 | // 64 C--------------------------------------------------------------------- |
---|
819 | // 65 C |
---|
820 | // 66 C DEFORMATIONS AND G.S. SHELL EFFECTS |
---|
821 | // 67 C COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA |
---|
822 | // 68 C |
---|
823 | // 69 C ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. |
---|
824 | // 70 C ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) |
---|
825 | // 71 C VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE |
---|
826 | // 72 C ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) |
---|
827 | // 73 C BETA2 = SQRT(5/(4PI)) * ALPHA |
---|
828 | // 74 C--------------------------------------------------------------------- |
---|
829 | // 75 C |
---|
830 | // 76 C ARRAYS FOR EXCITATION ENERGY BY STATISTICAL HOLE ENERY MODEL |
---|
831 | // 77 C COMMON /EENUC/ SHE, XHE |
---|
832 | // 78 C |
---|
833 | // 79 C SHE, XHE - ARRAYS TO CALCULATE THE EXC. ENERGY AFTER |
---|
834 | // 80 C ABRASION BY THE STATISTICAL HOLE ENERGY MODEL |
---|
835 | // 81 C--------------------------------------------------------------------- |
---|
836 | // 82 C |
---|
837 | // 83 C G.S. SHELL EFFECT |
---|
838 | // 84 C COMMON /EC2SUB/ ECNZ |
---|
839 | // 85 C |
---|
840 | // 86 C ECNZ G.S. SHELL EFFECT FOR THE MASSES (IDENTICAL TO ECGNZ) |
---|
841 | // 87 C--------------------------------------------------------------------- |
---|
842 | // 88 C |
---|
843 | // 89 C OPTIONS AND PARAMETERS FOR FISSION CHANNEL |
---|
844 | // 90 C COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF,IFIS, |
---|
845 | // 91 C OPTSHP,OPTXFIS,OPTLES,OPTCOL |
---|
846 | // 92 C |
---|
847 | // 93 C AKAP - HBAR**2/(2* MN * R_0**2) = 10 MEV |
---|
848 | // 94 C BET - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1) |
---|
849 | // 95 C HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV |
---|
850 | // 96 C KOEFF - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0 |
---|
851 | // 97 C IFIS - 0/1 FISSION CHANNEL OFF/ON |
---|
852 | // 98 C OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY |
---|
853 | // 99 C = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY |
---|
854 | // 100 C = 1 SHELL , NO PAIRING |
---|
855 | // 101 C = 2 PAIRING, NO SHELL |
---|
856 | // 102 C = 3 SHELL AND PAIRING |
---|
857 | // 103 C OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF |
---|
858 | // 104 C OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV |
---|
859 | // 105 C FISSILITY PARAMETER. |
---|
860 | // 106 C OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224 |
---|
861 | // 107 C OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON |
---|
862 | // 108 C--------------------------------------------------------------------- |
---|
863 | // 109 C |
---|
864 | // 110 C OPTIONS |
---|
865 | // 111 C COMMON /OPT/ OPTEMD,OPTCHA,EEFAC |
---|
866 | // 112 C |
---|
867 | // 113 C OPTEMD - 0/1 NO EMD / INCL. EMD |
---|
868 | // 114 C OPTCHA - 0/1 0 GDR / 1 HYPERGEOMETRICAL PREFRAGMENT-CHARGE-DIST. |
---|
869 | // 115 C *** RECOMMENDED IS OPTCHA = 1 *** |
---|
870 | // 116 C EEFAC - EXCITATION ENERGY FACTOR, 2.0 RECOMMENDED |
---|
871 | // 117 C--------------------------------------------------------------------- |
---|
872 | // 118 C |
---|
873 | // 119 C FISSION BARRIERS |
---|
874 | // 120 C COMMON /FB/ EFA |
---|
875 | // 121 C EFA - ARRAY OF FISSION BARRIERS |
---|
876 | // 122 C--------------------------------------------------------------------- |
---|
877 | // 123 C |
---|
878 | // 124 C p LEVEL DENSITY PARAMETERS |
---|
879 | // 125 C COMMON /ALD/ AV,AS,AK,OPTAFAN |
---|
880 | // 126 C AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE |
---|
881 | // 127 C LEVEL DENSITY PARAMETER |
---|
882 | // 128 C OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 |
---|
883 | // 129 C RECOMMENDED IS OPTAFAN = 0 |
---|
884 | // 130 C--------------------------------------------------------------------- |
---|
885 | // 131 C ____________________________________________________________________ |
---|
886 | // 132 C / |
---|
887 | // 133 C / INITIALIZES PARAMETERS IN COMMON /ABRAMAIN/, /EMDPAR/, /ECLD/ ... |
---|
888 | // 134 C / PROJECTILE PARAMETERS, EMD PARAMETERS, SHELL CORRECTION TABLES. |
---|
889 | // 135 C / CALCULATES MAXIMUM IMPACT PARAMETER FOR NUCLEAR COLLISIONS AND |
---|
890 | // 136 C / TOTAL GEOMETRICAL CROSS SECTION + EMD CROSS SECTIONS |
---|
891 | // 137 C ____________________________________________________________________ |
---|
892 | // 138 C |
---|
893 | // 139 C |
---|
894 | // 201 C |
---|
895 | // 202 C---------- SET INPUT VALUES |
---|
896 | // 203 C |
---|
897 | // 204 C *** INPUT FROM UNIT 10 IN THE FOLLOWING SEQUENCE ! |
---|
898 | // 205 C AP1 = INTEGER ! |
---|
899 | // 206 C ZP1 = INTEGER ! |
---|
900 | // 207 C AT1 = INTEGER ! |
---|
901 | // 208 C ZT1 = INTEGER ! |
---|
902 | // 209 C EAP = REAL ! |
---|
903 | // 210 C IMAX = INTEGER ! |
---|
904 | // 211 C IFIS = INTEGER SWITCH FOR FISSION |
---|
905 | // 212 C OPTSHP = INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY |
---|
906 | // 213 C =0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY |
---|
907 | // 214 C =1 SHELL , NO PAIRING CORRECTION |
---|
908 | // 215 C =2 PAIRING, NO SHELL CORRECTION |
---|
909 | // 216 C =3 SHELL AND PAIRING CORRECTION IN MASSES AND ENERGY |
---|
910 | // 217 C OPTEMD =0,1 0 NO EMD, 1 INCL. EMD |
---|
911 | // 218 C ELECTROMAGNETIC DISSOZIATION IS CALCULATED AS WELL. |
---|
912 | // 219 C OPTCHA =0,1 0 GDR- , 1 HYPERGEOMETRICAL PREFRAGMENT-CHARGE-DIST. |
---|
913 | // 220 C RECOMMENDED IS OPTCHA=1 |
---|
914 | // 221 C OPTCOL =0,1 COLLECTIVE ENHANCEMENT SWITCHED ON 1 OR OFF 0 IN DENSN |
---|
915 | // 222 C OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN DENSNIV 0 AF/AN>1 1 AF/AN=1 |
---|
916 | // 223 C AKAP = REAL ALWAYS EQUALS 10 |
---|
917 | // 224 C BET = REAL REDUCED FRICTION COEFFICIENT / 10**(+21) S**(-1) |
---|
918 | // 225 C HOMEGA = REAL CURVATURE / MEV RECOMMENDED = 1. MEV |
---|
919 | // 226 C KOEFF = REAL COEFFICIENT FOR FISSION BARRIER |
---|
920 | // 227 C OPTXFIS= INTEGER 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV |
---|
921 | // 228 C FISSILITY PARAMETER. |
---|
922 | // 229 C EEFAC = REAL EMPIRICAL FACTOR FOR THE EXCITATION ENERGY |
---|
923 | // 230 C RECOMMENDED 2.D0, STATISTICAL ABRASION MODELL 1.D0 |
---|
924 | // 231 C AV = REAL KOEFFICIENTS FOR CALCULATION OF A(TILDE) |
---|
925 | // 232 C AS = REAL LEVEL DENSITY PARAMETER |
---|
926 | // 233 C AK = REAL |
---|
927 | // 234 C |
---|
928 | // 235 C This following inputs will be initialized in the main through the |
---|
929 | // 236 C common /ABLAMAIN/ (A.B.) |
---|
930 | // 237 |
---|
931 | |
---|
932 | // switch-fission.1=on.0=off |
---|
933 | fiss->ifis = 1; |
---|
934 | |
---|
935 | // shell+pairing.0-1-2-3 |
---|
936 | fiss->optshp = 0; |
---|
937 | |
---|
938 | // optemd =0,1 0 no emd, 1 incl. emd |
---|
939 | opt->optemd = 1; |
---|
940 | // read(10,*,iostat=io) dum(10),optcha |
---|
941 | opt->optcha = 1; |
---|
942 | |
---|
943 | // not.to.be.changed.(akap) |
---|
944 | fiss->akap = 10.0; |
---|
945 | |
---|
946 | // nuclear.viscosity.(beta) |
---|
947 | fiss->bet = 1.5; |
---|
948 | |
---|
949 | // potential-curvature |
---|
950 | fiss->homega = 1.0; |
---|
951 | |
---|
952 | // fission-barrier-coefficient |
---|
953 | fiss->koeff = 1.; |
---|
954 | |
---|
955 | //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.) |
---|
956 | fiss->optcol = 0; |
---|
957 | |
---|
958 | // switch-for-low-energy-sys |
---|
959 | fiss->optles = 0; |
---|
960 | |
---|
961 | opt->eefac = 2.; |
---|
962 | |
---|
963 | ald->optafan = 0; |
---|
964 | |
---|
965 | ald->av = 0.073e0; |
---|
966 | ald->as = 0.095e0; |
---|
967 | ald->ak = 0.0e0; |
---|
968 | |
---|
969 | if(verboseLevel > 3) { |
---|
970 | G4cout <<"ifis " << fiss->ifis << G4endl; |
---|
971 | G4cout <<"optshp " << fiss->optshp << G4endl; |
---|
972 | G4cout <<"optemd " << opt->optemd << G4endl; |
---|
973 | G4cout <<"optcha " << opt->optcha << G4endl; |
---|
974 | G4cout <<"akap " << fiss->akap << G4endl; |
---|
975 | G4cout <<"bet " << fiss->bet << G4endl; |
---|
976 | G4cout <<"homega " << fiss->homega << G4endl; |
---|
977 | G4cout <<"koeff " << fiss->koeff << G4endl; |
---|
978 | G4cout <<"optcol " << fiss->optcol << G4endl; |
---|
979 | G4cout <<"optles " << fiss->optles << G4endl; |
---|
980 | G4cout <<"eefac " << opt->eefac << G4endl; |
---|
981 | G4cout <<"optafan " << ald->optafan << G4endl; |
---|
982 | G4cout <<"av " << ald->av << G4endl; |
---|
983 | G4cout <<"as " << ald->as << G4endl; |
---|
984 | G4cout <<"ak " << ald->ak << G4endl; |
---|
985 | } |
---|
986 | fiss->optxfis = 1; |
---|
987 | |
---|
988 | G4InclAblaDataFile *dataInterface = new G4InclAblaDataFile(); |
---|
989 | if(dataInterface->readData() == true) { |
---|
990 | if(verboseLevel > 0) { |
---|
991 | G4cout <<"G4Abla: Datafiles read successfully." << G4endl; |
---|
992 | } |
---|
993 | } |
---|
994 | else { |
---|
995 | G4Exception("ERROR: Failed to read datafiles."); |
---|
996 | } |
---|
997 | |
---|
998 | for(int z = 0; z < 98; z++) { //do 30 z = 0,98,1 |
---|
999 | for(int n = 0; n < 154; n++) { //do 31 n = 0,153,1 |
---|
1000 | ecld->ecfnz[n][z] = 0.e0; |
---|
1001 | ec2sub->ecnz[n][z] = dataInterface->getEcnz(n,z); |
---|
1002 | ecld->ecgnz[n][z] = dataInterface->getEcnz(n,z); |
---|
1003 | ecld->alpha[n][z] = dataInterface->getAlpha(n,z); |
---|
1004 | ecld->vgsld[n][z] = dataInterface->getVgsld(n,z); |
---|
1005 | } |
---|
1006 | } |
---|
1007 | |
---|
1008 | for(int z = 0; z < 500; z++) { |
---|
1009 | for(int a = 0; a < 500; a++) { |
---|
1010 | pace->dm[z][a] = dataInterface->getPace2(z,a); |
---|
1011 | } |
---|
1012 | } |
---|
1013 | |
---|
1014 | delete dataInterface; |
---|
1015 | } |
---|
1016 | |
---|
1017 | void G4Abla::qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr) |
---|
1018 | { |
---|
1019 | // QROT INCLUDING DAMPING |
---|
1020 | // INPUT: Z,A,BET,SIG,U |
---|
1021 | // OUTPUT: QR - COLLECTIVE ENHANCEMENT FACTOR |
---|
1022 | // |
---|
1023 | // SEE JUNGHANS ET AL., NUCL. PHYS. A 629 (1998) 635 |
---|
1024 | // |
---|
1025 | // |
---|
1026 | // FR(U) EXPONENTIAL FUNCTION TO DEFINE DAMPING |
---|
1027 | // UCR CRITICAL ENERGY FOR DAMPING |
---|
1028 | // DCR WIDTH OF DAMPING |
---|
1029 | // BET BETA-DEFORMATION ! |
---|
1030 | // SIG PERPENDICULAR SPIN CUTOFF FACTOR |
---|
1031 | // U ENERGY |
---|
1032 | // QR COEFFICIENT OF COLLECTIVE ENHANCEMENT |
---|
1033 | // A MASS NUMBER |
---|
1034 | // Z CHARGE NUMBER |
---|
1035 | |
---|
1036 | G4double ucr,dcr,ponq,dn,n,dz; |
---|
1037 | |
---|
1038 | dcr = 10.0; |
---|
1039 | |
---|
1040 | ucr = 40.0; |
---|
1041 | |
---|
1042 | if(((std::fabs(bet)-1.15) < 0) || ((std::fabs(bet)-1.15) == 0)) { |
---|
1043 | goto qrot10; |
---|
1044 | } |
---|
1045 | |
---|
1046 | if((std::fabs(bet)-1.15) > 0) { |
---|
1047 | goto qrot11; |
---|
1048 | } |
---|
1049 | |
---|
1050 | qrot10: |
---|
1051 | n = a - z; |
---|
1052 | dz = std::fabs(z - 82.0); |
---|
1053 | if (n > 104) { |
---|
1054 | dn = std::fabs(n-126.e0); |
---|
1055 | } |
---|
1056 | else { |
---|
1057 | dn = std::fabs(n - 82.0); |
---|
1058 | } |
---|
1059 | |
---|
1060 | bet = 0.022 + 0.003*dn + 0.005*dz; |
---|
1061 | |
---|
1062 | sig = 25.0*std::pow(bet,2) * sig; |
---|
1063 | |
---|
1064 | qrot11: |
---|
1065 | ponq = (u - ucr)/dcr; |
---|
1066 | |
---|
1067 | if (ponq > 700.0) { |
---|
1068 | ponq = 700.0; |
---|
1069 | } |
---|
1070 | if (sig < 1.0) { |
---|
1071 | sig = 1.0; |
---|
1072 | } |
---|
1073 | (*qr) = 1.0/(1.0 + std::exp(ponq)) * (sig - 1.0) + 1.0; |
---|
1074 | |
---|
1075 | if ((*qr) < 1.0) { |
---|
1076 | (*qr) = 1.0; |
---|
1077 | } |
---|
1078 | |
---|
1079 | return; |
---|
1080 | } |
---|
1081 | |
---|
1082 | void G4Abla::mglw(G4double a, G4double z, G4double *el) |
---|
1083 | { |
---|
1084 | // MODEL DE LA GOUTTE LIQUIDE DE C. F. WEIZSACKER. |
---|
1085 | // USUALLY AN OBSOLETE OPTION |
---|
1086 | |
---|
1087 | G4int a1,z1; |
---|
1088 | G4double xv = 0.0, xs = 0.0, xc = 0.0, xa = 0.0; |
---|
1089 | |
---|
1090 | a1 = idnint(a); |
---|
1091 | z1 = idnint(z); |
---|
1092 | |
---|
1093 | if ((a <= 0.01) || (z < 0.01)) { |
---|
1094 | (*el) = 1.0e38; |
---|
1095 | } |
---|
1096 | else { |
---|
1097 | xv = -15.56*a; |
---|
1098 | xs = 17.23*std::pow(a,(2.0/3.0)); |
---|
1099 | |
---|
1100 | if (a > 1.0) { |
---|
1101 | xc = 0.7*z*(z-1.0)*std::pow((a-1.0),(-1.e0/3.e0)); |
---|
1102 | } |
---|
1103 | else { |
---|
1104 | xc = 0.0; |
---|
1105 | } |
---|
1106 | } |
---|
1107 | |
---|
1108 | xa = 23.6*(std::pow((a-2.0*z),2)/a); |
---|
1109 | (*el) = xv+xs+xc+xa; |
---|
1110 | return; |
---|
1111 | } |
---|
1112 | |
---|
1113 | void G4Abla::mglms(G4double a, G4double z, G4int refopt4, G4double *el) |
---|
1114 | { |
---|
1115 | // USING FUNCTION EFLMAC(IA,IZ,0) |
---|
1116 | // |
---|
1117 | // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORRECTIONS |
---|
1118 | // REFOPT4 = 1 : WITH SHELL CORRECTION |
---|
1119 | // REFOPT4 = 2 : WITH PAIRING CORRECTION |
---|
1120 | // REFOPT4 = 3 : WITH SHELL- AND PAIRING CORRECTION |
---|
1121 | |
---|
1122 | // 1839 C----------------------------------------------------------------------- |
---|
1123 | // 1840 C A1 LOCAL MASS NUMBER (INTEGER VARIABLE OF A) |
---|
1124 | // 1841 C Z1 LOCAL NUCLEAR CHARGE (INTEGER VARIABLE OF Z) |
---|
1125 | // 1842 C REFOPT4 OPTION, SPECIFYING THE MASS FORMULA (SEE ABOVE) |
---|
1126 | // 1843 C A MASS NUMBER |
---|
1127 | // 1844 C Z NUCLEAR CHARGE |
---|
1128 | // 1845 C DEL PAIRING CORRECTION |
---|
1129 | // 1846 C EL BINDING ENERGY |
---|
1130 | // 1847 C ECNZ( , ) TABLE OF SHELL CORRECTIONS |
---|
1131 | // 1848 C----------------------------------------------------------------------- |
---|
1132 | // 1849 C |
---|
1133 | G4int a1 = idnint(a); |
---|
1134 | G4int z1 = idnint(z); |
---|
1135 | |
---|
1136 | if ( (a1 <= 0) || (z1 <= 0) || ((a1-z1) <= 0) ) { //then |
---|
1137 | // modif pour récupérer une masse p et n correcte: |
---|
1138 | (*el) = 0.0; |
---|
1139 | return; |
---|
1140 | // goto mglms50; |
---|
1141 | } |
---|
1142 | else { |
---|
1143 | // binding energy incl. pairing contr. is calculated from |
---|
1144 | // function eflmac |
---|
1145 | assert(a1 != 0); |
---|
1146 | (*el) = eflmac(a1,z1,0,refopt4); |
---|
1147 | // assert(isnan((*el)) == false); |
---|
1148 | if (refopt4 > 0) { |
---|
1149 | if (refopt4 != 2) { |
---|
1150 | (*el) = (*el) + ec2sub->ecnz[a1-z1][z1]; |
---|
1151 | //(*el) = (*el) + ec2sub->ecnz[z1][a1-z1]; |
---|
1152 | //assert(isnan((*el)) == false); |
---|
1153 | } |
---|
1154 | } |
---|
1155 | } |
---|
1156 | return; |
---|
1157 | } |
---|
1158 | |
---|
1159 | G4double G4Abla::spdef(G4int a, G4int z, G4int optxfis) |
---|
1160 | { |
---|
1161 | |
---|
1162 | // INPUT: A,Z,OPTXFIS MASS AND CHARGE OF A NUCLEUS, |
---|
1163 | // OPTION FOR FISSILITY |
---|
1164 | // OUTPUT: SPDEF |
---|
1165 | |
---|
1166 | // ALPHA2 SADDLE POINT DEF. COHEN&SWIATECKI ANN.PHYS. 22 (1963) 406 |
---|
1167 | // RANGING FROM FISSILITY X=0.30 TO X=1.00 IN STEPS OF 0.02 |
---|
1168 | |
---|
1169 | G4int index; |
---|
1170 | G4double x,v,dx; |
---|
1171 | |
---|
1172 | const G4int alpha2Size = 37; |
---|
1173 | // The value 0.0 at alpha2[0] added by PK. |
---|
1174 | G4double alpha2[alpha2Size] = {0.0, 2.5464e0, 2.4944e0, 2.4410e0, 2.3915e0, 2.3482e0, |
---|
1175 | 2.3014e0, 2.2479e0, 2.1982e0, 2.1432e0, 2.0807e0, 2.0142e0, 1.9419e0, |
---|
1176 | 1.8714e0, 1.8010e0, 1.7272e0, 1.6473e0, 1.5601e0, 1.4526e0, 1.3164e0, |
---|
1177 | 1.1391e0, 0.9662e0, 0.8295e0, 0.7231e0, 0.6360e0, 0.5615e0, 0.4953e0, |
---|
1178 | 0.4354e0, 0.3799e0, 0.3274e0, 0.2779e0, 0.2298e0, 0.1827e0, 0.1373e0, |
---|
1179 | 0.0901e0, 0.0430e0, 0.0000e0}; |
---|
1180 | |
---|
1181 | dx = 0.02; |
---|
1182 | x = fissility(a,z,optxfis); |
---|
1183 | |
---|
1184 | if (x > 1.0) { |
---|
1185 | x = 1.0; |
---|
1186 | } |
---|
1187 | |
---|
1188 | if (x < 0.0) { |
---|
1189 | x = 0.0; |
---|
1190 | } |
---|
1191 | |
---|
1192 | v = (x - 0.3)/dx + 1.0; |
---|
1193 | index = idnint(v); |
---|
1194 | |
---|
1195 | if (index < 1) { |
---|
1196 | return(alpha2[1]); // alpha2[0] -> alpha2[1] |
---|
1197 | } |
---|
1198 | |
---|
1199 | if (index == 36) { //then // :::FIXME:: Possible off-by-one bug... |
---|
1200 | return(alpha2[36]); |
---|
1201 | } |
---|
1202 | else { |
---|
1203 | return(alpha2[index] + (alpha2[index+1] - alpha2[index]) / dx * ( x - (0.3e0 + dx*(index-1)))); //:::FIXME::: Possible off-by-one |
---|
1204 | } |
---|
1205 | |
---|
1206 | return alpha2[0]; // The algorithm is not supposed to reach this point. |
---|
1207 | } |
---|
1208 | |
---|
1209 | G4double G4Abla::fissility(int a,int z, int optxfis) |
---|
1210 | { |
---|
1211 | // CALCULATION OF FISSILITY PARAMETER |
---|
1212 | // |
---|
1213 | // INPUT: A,Z INTEGER MASS & CHARGE OF NUCLEUS |
---|
1214 | // OPTXFIS = 0 : MYERS, SWIATECKI |
---|
1215 | // 1 : DAHLINGER |
---|
1216 | // 2 : ANDREYEV |
---|
1217 | |
---|
1218 | G4double aa,zz,i; |
---|
1219 | G4double fissilityResult = 0.0; |
---|
1220 | |
---|
1221 | aa = double(a); |
---|
1222 | zz = double(z); |
---|
1223 | i = double(a-2*z) / aa; |
---|
1224 | |
---|
1225 | // myers & swiatecki droplet modell |
---|
1226 | if (optxfis == 0) { //then |
---|
1227 | fissilityResult = std::pow(zz,2) / aa /50.8830e0 / (1.0e0 - 1.7826e0 * std::pow(i,2)); |
---|
1228 | } |
---|
1229 | |
---|
1230 | if (optxfis == 1) { |
---|
1231 | // dahlinger fit: |
---|
1232 | fissilityResult = std::pow(zz,2) / aa * std::pow((49.22e0*(1.e0 - 0.3803e0*std::pow(i,2) - 20.489e0*std::pow(i,4))),(-1)); |
---|
1233 | } |
---|
1234 | |
---|
1235 | if (optxfis == 2) { |
---|
1236 | // dubna fit: |
---|
1237 | fissilityResult = std::pow(zz,2) / aa /(48.e0*(1.e0 - 17.22e0*std::pow(i,4))); |
---|
1238 | } |
---|
1239 | |
---|
1240 | return fissilityResult; |
---|
1241 | } |
---|
1242 | |
---|
1243 | void G4Abla::evapora(G4double zprf, G4double aprf, G4double ee, G4double jprf, |
---|
1244 | G4double *zf_par, G4double *af_par, G4double *mtota_par, |
---|
1245 | G4double *pleva_par, G4double *pxeva_par, G4double *pyeva_par, |
---|
1246 | G4int *ff_par, G4int *inttype_par, G4int *inum_par) |
---|
1247 | { |
---|
1248 | G4double zf = (*zf_par); |
---|
1249 | G4double af = (*af_par); |
---|
1250 | G4double mtota = (*mtota_par); |
---|
1251 | G4double pleva = (*pleva_par); |
---|
1252 | G4double pxeva = (*pxeva_par); |
---|
1253 | G4double pyeva = (*pyeva_par); |
---|
1254 | G4int ff = (*ff_par); |
---|
1255 | G4int inttype = (*inttype_par); |
---|
1256 | G4int inum = (*inum_par); |
---|
1257 | |
---|
1258 | // 533 C |
---|
1259 | // 534 C INPUT: |
---|
1260 | // 535 C |
---|
1261 | // 536 C ZPRF, APRF, EE(EE IS MODIFIED!), JPRF |
---|
1262 | // 537 C |
---|
1263 | // 538 C PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS |
---|
1264 | // 539 C COMMON /ABRAMAIN/ AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC, |
---|
1265 | // 540 C R_0,R_P,R_T, IMAX,IRNDM,PI, |
---|
1266 | // 541 C BFPRO,SNPRO,SPPRO,SHELL |
---|
1267 | // 542 C |
---|
1268 | // 543 C AP,ZP,AT,ZT - PROJECTILE AND TARGET MASSES |
---|
1269 | // 544 C EAP,BETA - BEAM ENERGY PER NUCLEON, V/C |
---|
1270 | // 545 C BMAXNUC - MAX. IMPACT PARAMETER FOR NUCL. REAC. |
---|
1271 | // 546 C CRTOT,CRNUC - TOTAL AND NUCLEAR REACTION CROSS SECTION |
---|
1272 | // 547 C R_0,R_P,R_T, - RADIUS PARAMETER, PROJECTILE+ TARGET RADII |
---|
1273 | // 548 C IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141... |
---|
1274 | // 549 C BFPRO - FISSION BARRIER OF THE PROJECTILE |
---|
1275 | // 550 C SNPRO - NEUTRON SEPARATION ENERGY OF THE PROJECTILE |
---|
1276 | // 551 C SPPRO - PROTON " " " " " |
---|
1277 | // 552 C SHELL - GROUND STATE SHELL CORRECTION |
---|
1278 | // 553 C |
---|
1279 | // 554 C--------------------------------------------------------------------- |
---|
1280 | // 555 C FISSION BARRIERS |
---|
1281 | // 556 C COMMON /FB/ EFA |
---|
1282 | // 557 C EFA - ARRAY OF FISSION BARRIERS |
---|
1283 | // 558 C--------------------------------------------------------------------- |
---|
1284 | // 559 C OUTPUT: |
---|
1285 | // 560 C ZF, AF, MTOTA, PLEVA, PTEVA, FF, INTTYPE, INUM |
---|
1286 | // 561 C |
---|
1287 | // 562 C ZF,AF - CHARGE AND MASS OF FINAL FRAGMENT AFTER EVAPORATION |
---|
1288 | // 563 C MTOTA _ NUMBER OF EVAPORATED ALPHAS |
---|
1289 | // 564 C PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL BY EVAPORATION |
---|
1290 | // 565 C INTTYPE - TYPE OF REACTION 0/1 NUCLEAR OR ELECTROMAGNETIC |
---|
1291 | // 566 C FF - 0/1 NO FISSION / FISSION EVENT |
---|
1292 | // 567 C INUM - EVENTNUMBER |
---|
1293 | // 568 C ____________________________________________________________________ |
---|
1294 | // 569 C / |
---|
1295 | // 570 C / CALCUL DE LA MASSE ET CHARGE FINALES D'UNE CHAINE D'EVAPORATION |
---|
1296 | // 571 C / |
---|
1297 | // 572 C / PROCEDURE FOR CALCULATING THE FINAL MASS AND CHARGE VALUES OF A |
---|
1298 | // 573 C / SPECIFIC EVAPORATION CHAIN, STARTING POINT DEFINED BY (APRF, ZPRF, |
---|
1299 | // 574 C / EE) |
---|
1300 | // 575 C / On ajoute les 3 composantes de l'impulsion (PXEVA,PYEVA,PLEVA) |
---|
1301 | // 576 C / (actuellement PTEVA n'est pas correct; mauvaise norme...) |
---|
1302 | // 577 C /____________________________________________________________________ |
---|
1303 | // 578 C |
---|
1304 | // 612 C |
---|
1305 | // 613 C----------------------------------------------------------------------- |
---|
1306 | // 614 C IRNDM DUMMY ARGUMENT FOR RANDOM-NUMBER FUNCTION |
---|
1307 | // 615 C SORTIE LOCAL HELP VARIABLE TO END THE EVAPORATION CHAIN |
---|
1308 | // 616 C ZF NUCLEAR CHARGE OF THE FRAGMENT |
---|
1309 | // 617 C ZPRF NUCLEAR CHARGE OF THE PREFRAGMENT |
---|
1310 | // 618 C AF MASS NUMBER OF THE FRAGMENT |
---|
1311 | // 619 C APRF MASS NUMBER OF THE PREFRAGMENT |
---|
1312 | // 620 C EPSILN ENERGY BURNED IN EACH EVAPORATION STEP |
---|
1313 | // 621 C MALPHA LOCAL MASS CONTRIBUTION TO MTOTA IN EACH EVAPORATION |
---|
1314 | // 622 C STEP |
---|
1315 | // 623 C EE EXCITATION ENERGY (VARIABLE) |
---|
1316 | // 624 C PROBP PROTON EMISSION PROBABILITY |
---|
1317 | // 625 C PROBN NEUTRON EMISSION PROBABILITY |
---|
1318 | // 626 C PROBA ALPHA-PARTICLE EMISSION PROBABILITY |
---|
1319 | // 627 C PTOTL TOTAL EMISSION PROBABILITY |
---|
1320 | // 628 C E LOWEST PARTICLE-THRESHOLD ENERGY |
---|
1321 | // 629 C SN NEUTRON SEPARATION ENERGY |
---|
1322 | // 630 C SBP PROTON SEPARATION ENERGY PLUS EFFECTIVE COULOMB |
---|
1323 | // 631 C BARRIER |
---|
1324 | // 632 C SBA ALPHA-PARTICLE SEPARATION ENERGY PLUS EFFECTIVE |
---|
1325 | // 633 C COULOMB BARRIER |
---|
1326 | // 634 C BP EFFECTIVE PROTON COULOMB BARRIER |
---|
1327 | // 635 C BA EFFECTIVE ALPHA COULOMB BARRIER |
---|
1328 | // 636 C MTOTA TOTAL MASS OF THE EVAPORATED ALPHA PARTICLES |
---|
1329 | // 637 C X UNIFORM RANDOM NUMBER FOR NUCLEAR CHARGE |
---|
1330 | // 638 C AMOINS LOCAL MASS NUMBER OF EVAPORATED PARTICLE |
---|
1331 | // 639 C ZMOINS LOCAL NUCLEAR CHARGE OF EVAPORATED PARTICLE |
---|
1332 | // 640 C ECP KINETIC ENERGY OF PROTON WITHOUT COULOMB |
---|
1333 | // 641 C REPULSION |
---|
1334 | // 642 C ECN KINETIC ENERGY OF NEUTRON |
---|
1335 | // 643 C ECA KINETIC ENERGY OF ALPHA PARTICLE WITHOUT COULOMB |
---|
1336 | // 644 C REPULSION |
---|
1337 | // 645 C PLEVA TRANSVERSAL RECOIL MOMENTUM OF EVAPORATION |
---|
1338 | // 646 C PTEVA LONGITUDINAL RECOIL MOMENTUM OF EVAPORATION |
---|
1339 | // 647 C FF FISSION FLAG |
---|
1340 | // 648 C INTTYPE INTERACTION TYPE FLAG |
---|
1341 | // 649 C RNDX RECOIL MOMENTUM IN X-DIRECTION IN A SINGLE STEP |
---|
1342 | // 650 C RNDY RECOIL MOMENTUM IN Y-DIRECTION IN A SINGLE STEP |
---|
1343 | // 651 C RNDZ RECOIL MOMENTUM IN Z-DIRECTION IN A SINGLE STEP |
---|
1344 | // 652 C RNDN NORMALIZATION OF RECOIL MOMENTUM FOR EACH STEP |
---|
1345 | // 653 C----------------------------------------------------------------------- |
---|
1346 | // 654 C |
---|
1347 | // 655 SAVE |
---|
1348 | // SAVE -> static |
---|
1349 | |
---|
1350 | static G4int sortie; |
---|
1351 | static G4double epsiln,probp,probn,proba,ptotl,e; |
---|
1352 | static G4double sn,sbp,sba,x,amoins,zmoins,ecn,ecp,eca,bp,ba; |
---|
1353 | static G4double pteva; |
---|
1354 | |
---|
1355 | static G4int itest; |
---|
1356 | static G4double probf; |
---|
1357 | |
---|
1358 | static G4int k, j, il; |
---|
1359 | |
---|
1360 | static G4double ctet1,stet1,phi1; |
---|
1361 | static G4double sbfis,rnd; |
---|
1362 | static G4double selmax; |
---|
1363 | static G4double segs; |
---|
1364 | static G4double ef; |
---|
1365 | static G4int irndm; |
---|
1366 | |
---|
1367 | static G4double pc, malpha; |
---|
1368 | |
---|
1369 | zf = zprf; |
---|
1370 | af = aprf; |
---|
1371 | pleva = 0.0; |
---|
1372 | pteva = 0.0; |
---|
1373 | pxeva = 0.0; |
---|
1374 | pyeva = 0.0; |
---|
1375 | |
---|
1376 | sortie = 0; |
---|
1377 | ff = 0; |
---|
1378 | |
---|
1379 | itest = 0; |
---|
1380 | if (itest == 1) { |
---|
1381 | G4cout << "***************************" << G4endl; |
---|
1382 | } |
---|
1383 | |
---|
1384 | evapora10: |
---|
1385 | |
---|
1386 | if (itest == 1) { |
---|
1387 | G4cout <<"------zf,af,ee------" << idnint(zf) << "," << idnint(af) << "," << ee << G4endl; |
---|
1388 | } |
---|
1389 | |
---|
1390 | // calculation of the probabilities for the different decay channels |
---|
1391 | // plus separation energies and kinetic energies of the particles |
---|
1392 | direct(zf,af,ee,jprf,&probp,&probn,&proba,&probf,&ptotl, |
---|
1393 | &sn,&sbp,&sba,&ecn,&ecp,&eca,&bp,&ba,inttype,inum,itest); //:::FIXME::: Call |
---|
1394 | // assert(isnan(proba) == false); |
---|
1395 | // assert(isnan(probp) == false); |
---|
1396 | // assert(isnan(probn) == false); |
---|
1397 | // assert(isnan(probf) == false); |
---|
1398 | assert((eca+ba) >= 0); |
---|
1399 | assert((ecp+bp) >= 0); |
---|
1400 | // assert(isnan(ecp) == false); |
---|
1401 | // assert(isnan(ecn) == false); |
---|
1402 | // assert(isnan(bp) == false); |
---|
1403 | // assert(isnan(ba) == false); |
---|
1404 | k = idnint(zf); |
---|
1405 | j = idnint(af-zf); |
---|
1406 | |
---|
1407 | // now ef is calculated from efa that depends on the subroutine |
---|
1408 | // barfit which takes into account the modification on the ang. mom. |
---|
1409 | // jb mvr 6-aug-1999 |
---|
1410 | // note *** shell correction! (ecgnz) jb mvr 20-7-1999 |
---|
1411 | il = idnint(jprf); |
---|
1412 | barfit(k,k+j,il,&sbfis,&segs,&selmax); |
---|
1413 | // assert(isnan(sbfis) == false); |
---|
1414 | |
---|
1415 | if ((fiss->optshp == 1) || (fiss->optshp == 3)) { //then |
---|
1416 | // fb->efa[k][j] = G4double(sbfis) - ecld->ecgnz[j][k]; |
---|
1417 | fb->efa[j][k] = G4double(sbfis) - ecld->ecgnz[j][k]; |
---|
1418 | } |
---|
1419 | else { |
---|
1420 | fb->efa[j][k] = G4double(sbfis); |
---|
1421 | // fb->efa[j][k] = G4double(sbfis); |
---|
1422 | } //end if |
---|
1423 | ef = fb->efa[j][k]; |
---|
1424 | // ef = fb->efa[j][k]; |
---|
1425 | // assert(isnan(fb->efa[j][k]) == false); |
---|
1426 | // here the final steps of the evaporation are calculated |
---|
1427 | if ((sortie == 1) || (ptotl == 0.e0)) { |
---|
1428 | e = dmin1(sn,sbp,sba); |
---|
1429 | if (e > 1.0e30) { |
---|
1430 | if(verboseLevel > 2) { |
---|
1431 | G4cout <<"erreur a la sortie evapora,e>1.e30,af=" << af <<" zf=" << zf << G4endl; |
---|
1432 | } |
---|
1433 | } |
---|
1434 | if (zf <= 6.0) { |
---|
1435 | goto evapora100; |
---|
1436 | } |
---|
1437 | if (e < 0.0) { |
---|
1438 | if (sn == e) { |
---|
1439 | af = af - 1.e0; |
---|
1440 | } |
---|
1441 | else if (sbp == e) { |
---|
1442 | af = af - 1.0; |
---|
1443 | zf = zf - 1.0; |
---|
1444 | } |
---|
1445 | else if (sba == e) { |
---|
1446 | af = af - 4.0; |
---|
1447 | zf = zf - 2.0; |
---|
1448 | } |
---|
1449 | if (af < 2.5) { |
---|
1450 | goto evapora100; |
---|
1451 | } |
---|
1452 | goto evapora10; |
---|
1453 | } |
---|
1454 | goto evapora100; |
---|
1455 | } |
---|
1456 | irndm = irndm + 1; |
---|
1457 | |
---|
1458 | // here the normal evaporation cascade starts |
---|
1459 | |
---|
1460 | // random number for the evaporation |
---|
1461 | // x = double(Rndm(irndm))*ptotl; |
---|
1462 | x = double(haz(1))*ptotl; |
---|
1463 | |
---|
1464 | // G4cout <<"proba = " << proba << G4endl; |
---|
1465 | // G4cout <<"probp = " << probp << G4endl; |
---|
1466 | // G4cout <<"probn = " << probn << G4endl; |
---|
1467 | // G4cout <<"probf = " << probf << G4endl; |
---|
1468 | |
---|
1469 | itest = 0; |
---|
1470 | if (x < proba) { |
---|
1471 | // alpha evaporation |
---|
1472 | if (itest == 1) { |
---|
1473 | G4cout <<"< alpha evaporation >" << G4endl; |
---|
1474 | } |
---|
1475 | amoins = 4.0; |
---|
1476 | zmoins = 2.0; |
---|
1477 | epsiln = sba + eca; |
---|
1478 | assert((std::pow((1.0 + (eca+ba)/3.72834e3),2) - 1.0) >= 0); |
---|
1479 | pc = std::sqrt(std::pow((1.0 + (eca+ba)/3.72834e3),2) - 1.0) * 3.72834e3; |
---|
1480 | // assert(isnan(pc) == false); |
---|
1481 | malpha = 4.0; |
---|
1482 | |
---|
1483 | // volant: |
---|
1484 | volant->iv = volant->iv + 1; |
---|
1485 | volant->acv[volant->iv] = 4.; |
---|
1486 | volant->zpcv[volant->iv] = 2.; |
---|
1487 | volant->pcv[volant->iv] = pc; |
---|
1488 | } |
---|
1489 | else if (x < proba+probp) { |
---|
1490 | // proton evaporation |
---|
1491 | if (itest == 1) { |
---|
1492 | G4cout <<"< proton evaporation >" << G4endl; |
---|
1493 | } |
---|
1494 | amoins = 1.0; |
---|
1495 | zmoins = 1.0; |
---|
1496 | epsiln = sbp + ecp; |
---|
1497 | assert((std::pow((1.0 + (ecp + bp)/9.3827e2),2) - 1.0) >= 0); |
---|
1498 | pc = std::sqrt(std::pow((1.0 + (ecp + bp)/9.3827e2),2) - 1.0) * 9.3827e2; |
---|
1499 | // assert(isnan(pc) == false); |
---|
1500 | malpha = 0.0; |
---|
1501 | // volant: |
---|
1502 | volant->iv = volant->iv + 1; |
---|
1503 | volant->acv[volant->iv] = 1.; |
---|
1504 | volant->zpcv[volant->iv] = 1.; |
---|
1505 | volant->pcv[volant->iv] = pc; |
---|
1506 | } |
---|
1507 | else if (x < proba+probp+probn) { |
---|
1508 | // neutron evaporation |
---|
1509 | if (itest == 1) { |
---|
1510 | G4cout <<"< neutron evaporation >" << G4endl; |
---|
1511 | } |
---|
1512 | amoins = 1.0; |
---|
1513 | zmoins = 0.0; |
---|
1514 | epsiln = sn + ecn; |
---|
1515 | assert((std::pow((1.0 + (ecn)/9.3956e2),2) - 1.0) >= 0); |
---|
1516 | pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2) - 1.0) * 9.3956e2; |
---|
1517 | // assert(isnan(pc) == false); |
---|
1518 | malpha = 0.0; |
---|
1519 | |
---|
1520 | // volant: |
---|
1521 | volant->iv = volant->iv + 1; |
---|
1522 | volant->acv[volant->iv] = 1.; |
---|
1523 | volant->zpcv[volant->iv] = 0.; |
---|
1524 | volant->pcv[volant->iv] = pc; |
---|
1525 | } |
---|
1526 | else { |
---|
1527 | // fission |
---|
1528 | // in case of fission-events the fragment nucleus is the mother nucleus |
---|
1529 | // before fission occurs with excitation energy above the fis.- barrier. |
---|
1530 | // fission fragment mass distribution is calulated in subroutine fisdis |
---|
1531 | if (itest == 1) { |
---|
1532 | G4cout <<"< fission >" << G4endl; |
---|
1533 | } |
---|
1534 | amoins = 0.0; |
---|
1535 | zmoins = 0.0; |
---|
1536 | epsiln = ef; |
---|
1537 | |
---|
1538 | malpha = 0.0; |
---|
1539 | pc = 0.0; |
---|
1540 | ff = 1; |
---|
1541 | // ff = 0; // For testing, allows to disable fission! |
---|
1542 | } |
---|
1543 | |
---|
1544 | if (itest == 1) { |
---|
1545 | G4cout <<"sn,sbp,sba,ef" << sn << "," << sbp << "," << sba <<"," << ef << G4endl; |
---|
1546 | G4cout <<"probn,probp,proba,probf,ptotl " <<","<< probn <<","<< probp <<","<< proba <<","<< probf <<","<< ptotl << G4endl; |
---|
1547 | } |
---|
1548 | |
---|
1549 | // calculation of the daughter nucleus |
---|
1550 | af = af - amoins; |
---|
1551 | zf = zf - zmoins; |
---|
1552 | ee = ee - epsiln; |
---|
1553 | if (ee <= 0.01) { |
---|
1554 | ee = 0.01; |
---|
1555 | } |
---|
1556 | mtota = mtota + malpha; |
---|
1557 | |
---|
1558 | if(ff == 0) { |
---|
1559 | standardRandom(&rnd,&(hazard->igraine[8])); |
---|
1560 | ctet1 = 2.0*rnd - 1.0; |
---|
1561 | standardRandom(&rnd,&(hazard->igraine[4])); |
---|
1562 | phi1 = rnd*2.0*3.141592654; |
---|
1563 | stet1 = std::sqrt(1.0 - std::pow(ctet1,2)); |
---|
1564 | // assert(isnan(stet1) == false); |
---|
1565 | volant->xcv[volant->iv] = stet1*std::cos(phi1); |
---|
1566 | volant->ycv[volant->iv] = stet1*std::sin(phi1); |
---|
1567 | volant->zcv[volant->iv] = ctet1; |
---|
1568 | pxeva = pxeva - pc * volant->xcv[volant->iv]; |
---|
1569 | pyeva = pyeva - pc * volant->ycv[volant->iv]; |
---|
1570 | pleva = pleva - pc * ctet1; |
---|
1571 | // assert(isnan(pleva) == false); |
---|
1572 | } |
---|
1573 | |
---|
1574 | // condition for end of evaporation |
---|
1575 | if ((af < 2.5) || (ff == 1)) { |
---|
1576 | goto evapora100; |
---|
1577 | } |
---|
1578 | goto evapora10; |
---|
1579 | |
---|
1580 | evapora100: |
---|
1581 | (*zf_par) = zf; |
---|
1582 | (*af_par) = af; |
---|
1583 | (*mtota_par) = mtota; |
---|
1584 | (*pleva_par) = pleva; |
---|
1585 | (*pxeva_par) = pxeva; |
---|
1586 | (*pyeva_par) = pyeva; |
---|
1587 | (*ff_par) = ff; |
---|
1588 | (*inttype_par) = inttype; |
---|
1589 | (*inum_par) = inum; |
---|
1590 | |
---|
1591 | return; |
---|
1592 | } |
---|
1593 | |
---|
1594 | void G4Abla::direct(G4double zprf, G4double a, G4double ee, G4double jprf, |
---|
1595 | G4double *probp_par, G4double *probn_par, G4double *proba_par, |
---|
1596 | G4double *probf_par, G4double *ptotl_par, G4double *sn_par, |
---|
1597 | G4double *sbp_par, G4double *sba_par, G4double *ecn_par, |
---|
1598 | G4double *ecp_par,G4double *eca_par, G4double *bp_par, |
---|
1599 | G4double *ba_par, G4int inttype, G4int inum, G4int itest) |
---|
1600 | { |
---|
1601 | G4int dummy0; |
---|
1602 | |
---|
1603 | G4double probp = (*probp_par); |
---|
1604 | G4double probn = (*probn_par); |
---|
1605 | G4double proba = (*proba_par); |
---|
1606 | G4double probf = (*probf_par); |
---|
1607 | G4double ptotl = (*ptotl_par); |
---|
1608 | G4double sn = (*sn_par); |
---|
1609 | G4double sbp = (*sbp_par); |
---|
1610 | G4double sba = (*sba_par); |
---|
1611 | G4double ecn = (*ecn_par); |
---|
1612 | G4double ecp = (*ecp_par); |
---|
1613 | G4double eca = (*eca_par); |
---|
1614 | G4double bp = (*bp_par); |
---|
1615 | G4double ba = (*ba_par); |
---|
1616 | |
---|
1617 | // CALCULATION OF PARTICLE-EMISSION PROBABILITIES & FISSION / |
---|
1618 | // BASED ON THE SIMPLIFIED FORMULAS FOR THE DECAY WIDTH BY / |
---|
1619 | // MORETTO, ROCHESTER MEETING TO AVOID COMPUTING TIME / |
---|
1620 | // INTENSIVE INTEGRATION OF THE LEVEL DENSITIES / |
---|
1621 | // USES EFFECTIVE COULOMB BARRIERS AND AN AVERAGE KINETIC ENERGY/ |
---|
1622 | // OF THE EVAPORATED PARTICLES / |
---|
1623 | // COLLECTIVE ENHANCMENT OF THE LEVEL DENSITY IS INCLUDED / |
---|
1624 | // DYNAMICAL HINDRANCE OF FISSION IS INCLUDED BY A STEP FUNCTION/ |
---|
1625 | // APPROXIMATION. SEE A.R. JUNGHANS DIPLOMA THESIS / |
---|
1626 | // SHELL AND PAIRING STRUCTURES IN THE LEVEL DENSITY IS INCLUDED/ |
---|
1627 | |
---|
1628 | // INPUT: |
---|
1629 | // ZPRF,A,EE CHARGE, MASS, EXCITATION ENERGY OF COMPOUND |
---|
1630 | // NUCLEUS |
---|
1631 | // JPRF ROOT-MEAN-SQUARED ANGULAR MOMENTUM |
---|
1632 | |
---|
1633 | // DEFORMATIONS AND G.S. SHELL EFFECTS |
---|
1634 | // COMMON /ECLD/ ECGNZ,ECFNZ,VGSLD,ALPHA |
---|
1635 | |
---|
1636 | // ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S. |
---|
1637 | // ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0) |
---|
1638 | // VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE |
---|
1639 | // ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!) |
---|
1640 | // BETA2 = SQRT((4PI)/5) * ALPHA |
---|
1641 | |
---|
1642 | //OPTIONS AND PARAMETERS FOR FISSION CHANNEL |
---|
1643 | //COMMON /FISS/ AKAP,BET,HOMEGA,KOEFF,IFIS, |
---|
1644 | // OPTSHP,OPTXFIS,OPTLES,OPTCOL |
---|
1645 | // |
---|
1646 | // AKAP - HBAR**2/(2* MN * R_0**2) = 10 MEV, R_0 = 1.4 FM |
---|
1647 | // BET - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1) |
---|
1648 | // HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV |
---|
1649 | // KOEFF - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0 |
---|
1650 | // IFIS - 0/1 FISSION CHANNEL OFF/ON |
---|
1651 | // OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY |
---|
1652 | // = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY |
---|
1653 | // = 1 SHELL , NO PAIRING |
---|
1654 | // = 2 PAIRING, NO SHELL |
---|
1655 | // = 3 SHELL AND PAIRING |
---|
1656 | // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF |
---|
1657 | // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV |
---|
1658 | // FISSILITY PARAMETER. |
---|
1659 | // OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224 |
---|
1660 | // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON |
---|
1661 | |
---|
1662 | // LEVEL DENSITY PARAMETERS |
---|
1663 | // COMMON /ALD/ AV,AS,AK,OPTAFAN |
---|
1664 | // AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE |
---|
1665 | // LEVEL DENSITY PARAMETER |
---|
1666 | // OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 |
---|
1667 | // RECOMMENDED IS OPTAFAN = 0 |
---|
1668 | |
---|
1669 | // FISSION BARRIERS |
---|
1670 | // COMMON /FB/ EFA |
---|
1671 | // EFA - ARRAY OF FISSION BARRIERS |
---|
1672 | |
---|
1673 | |
---|
1674 | // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: |
---|
1675 | // - EMISSION PROBABILITIES FOR N EUTRON, P ROTON, A LPHA |
---|
1676 | // PARTICLES, F ISSION AND NORMALISATION |
---|
1677 | // SN,SBP,SBA: SEPARATION ENERGIES N P A |
---|
1678 | // INCLUDING EFFECTIVE BARRIERS |
---|
1679 | // ECN,ECP,ECA,BP,BA |
---|
1680 | // - AVERAGE KINETIC ENERGIES (2*T) AND EFFECTIVE BARRIERS |
---|
1681 | |
---|
1682 | static G4double bk; |
---|
1683 | static G4int afp; |
---|
1684 | static G4double at; // = 0.0; |
---|
1685 | static G4double bet; // = 0.0; |
---|
1686 | static G4double bs; |
---|
1687 | static G4double bshell; |
---|
1688 | static G4double cf; |
---|
1689 | static G4double dconst; |
---|
1690 | static G4double defbet; |
---|
1691 | static G4double denomi; |
---|
1692 | static G4double densa; |
---|
1693 | static G4double densf; |
---|
1694 | static G4double densg; |
---|
1695 | static G4double densn; |
---|
1696 | static G4double densp; |
---|
1697 | static G4double edyn; |
---|
1698 | static G4double eer; |
---|
1699 | static G4double ef; |
---|
1700 | static G4double ft; |
---|
1701 | static G4double ga; // = 0.0; |
---|
1702 | static G4double gf; // = 0.0; |
---|
1703 | static G4double gn; // = 0.0; |
---|
1704 | static G4double gngf; |
---|
1705 | static G4double gp; // = 0.0; |
---|
1706 | static G4double gsum; |
---|
1707 | static G4double hbar = 6.582122e-22; // = 0.0; |
---|
1708 | static G4double homega; // = 0.0; |
---|
1709 | static G4double iflag; |
---|
1710 | static G4int il; |
---|
1711 | static G4int ilast; |
---|
1712 | static G4int imaxwell; |
---|
1713 | static G4int in; |
---|
1714 | static G4int iz; |
---|
1715 | static G4int j; |
---|
1716 | static G4int k; |
---|
1717 | static G4double ma1z; |
---|
1718 | static G4double ma1z1; |
---|
1719 | static G4double ma4z2; |
---|
1720 | static G4double maz; |
---|
1721 | static G4double nprf; |
---|
1722 | static G4double nt; |
---|
1723 | static G4double parc; |
---|
1724 | static G4double pi = 3.14159265; |
---|
1725 | static G4double pt; |
---|
1726 | static G4double ra; |
---|
1727 | static G4double rat; |
---|
1728 | static G4double refmod; |
---|
1729 | static G4double rf; |
---|
1730 | static G4double rn; |
---|
1731 | static G4double rnd; |
---|
1732 | static G4double rnt; |
---|
1733 | static G4double rp; |
---|
1734 | static G4double rpt; |
---|
1735 | static G4double sa; |
---|
1736 | static G4double sbf; |
---|
1737 | static G4double sbfis; |
---|
1738 | static G4double segs; |
---|
1739 | static G4double selmax; |
---|
1740 | static G4double sp; |
---|
1741 | static G4double tauc; |
---|
1742 | static G4double tconst; |
---|
1743 | static G4double temp; |
---|
1744 | static G4double ts1; |
---|
1745 | static G4double tsum; |
---|
1746 | static G4double wf; // = 0.0; |
---|
1747 | static G4double wfex; |
---|
1748 | static G4double xx; |
---|
1749 | static G4double y; |
---|
1750 | |
---|
1751 | imaxwell = 1; |
---|
1752 | inttype = 0; |
---|
1753 | |
---|
1754 | // limiting of excitation energy where fission occurs |
---|
1755 | // Note, this is not the dynamical hindrance (see end of routine) |
---|
1756 | edyn = 1000.0; |
---|
1757 | |
---|
1758 | // no limit if statistical model is calculated. |
---|
1759 | if (bet <= 1.0e-16) { |
---|
1760 | edyn = 10000.0; |
---|
1761 | } |
---|
1762 | |
---|
1763 | // just a change of name until the end of this subroutine |
---|
1764 | eer = ee; |
---|
1765 | if (inum == 1) { |
---|
1766 | ilast = 1; |
---|
1767 | } |
---|
1768 | |
---|
1769 | // calculation of masses |
---|
1770 | // refmod = 1 ==> myers,swiatecki model |
---|
1771 | // refmod = 0 ==> weizsaecker model |
---|
1772 | refmod = 1; // Default = 1 |
---|
1773 | |
---|
1774 | if (refmod == 1) { |
---|
1775 | mglms(a,zprf,fiss->optshp,&maz); |
---|
1776 | mglms(a-1.0,zprf,fiss->optshp,&ma1z); |
---|
1777 | mglms(a-1.0,zprf-1.0,fiss->optshp,&ma1z1); |
---|
1778 | mglms(a-4.0,zprf-2.0,fiss->optshp,&ma4z2); |
---|
1779 | } |
---|
1780 | else { |
---|
1781 | mglw(a,zprf,&maz); |
---|
1782 | mglw(a-1.0,zprf,&ma1z); |
---|
1783 | mglw(a-1.0,zprf-1.0,&ma1z1); |
---|
1784 | mglw(a-4.0,zprf-2.0,&ma4z2); |
---|
1785 | } |
---|
1786 | // assert(isnan(maz) == false); |
---|
1787 | // assert(isnan(ma1z) == false); |
---|
1788 | // assert(isnan(ma1z1) == false); |
---|
1789 | // assert(isnan(ma4z2) == false); |
---|
1790 | |
---|
1791 | // separation energies and effective barriers |
---|
1792 | sn = ma1z - maz; |
---|
1793 | sp = ma1z1 - maz; |
---|
1794 | sa = ma4z2 - maz - 28.29688; |
---|
1795 | if (zprf < 1.0e0) { |
---|
1796 | sbp = 1.0e75; |
---|
1797 | goto direct30; |
---|
1798 | } |
---|
1799 | |
---|
1800 | // parameterisation gaimard: |
---|
1801 | // bp = 1.44*(zprf-1.d0)/(1.22*std::pow((a - 1.0),(1.0/3.0))+5.6) |
---|
1802 | // parameterisation khs (12-99) |
---|
1803 | bp = 1.44*(zprf - 1.0)/(2.1*std::pow((a - 1.0),(1.0/3.0)) + 0.0); |
---|
1804 | |
---|
1805 | sbp = sp + bp; |
---|
1806 | // assert(isnan(sbp) == false); |
---|
1807 | // assert(isinf(sbp) == false); |
---|
1808 | if (a-4.0 <= 0.0) { |
---|
1809 | sba = 1.0e+75; |
---|
1810 | goto direct30; |
---|
1811 | } |
---|
1812 | |
---|
1813 | // new effective barrier for alpha evaporation d=6.1: khs |
---|
1814 | // ba = 2.88d0*(zprf-2.d0)/(1.22d0*(a-4.d0)**(1.d0/3.d0)+6.1d0) |
---|
1815 | // parametrisation khs (12-99) |
---|
1816 | ba = 2.88*(zprf - 2.0)/(2.2*std::pow((a - 4.0),(1.0/3.0)) + 0.0); |
---|
1817 | |
---|
1818 | sba = sa + ba; |
---|
1819 | // assert(isnan(sba) == false); |
---|
1820 | // assert(isinf(sba) == false); |
---|
1821 | direct30: |
---|
1822 | |
---|
1823 | // calculation of surface and curvature integrals needed to |
---|
1824 | // to calculate the level density parameter (in densniv) |
---|
1825 | if (fiss->ifis > 0) { |
---|
1826 | k = idnint(zprf); |
---|
1827 | j = idnint(a - zprf); |
---|
1828 | |
---|
1829 | // now ef is calculated from efa that depends on the subroutine |
---|
1830 | // barfit which takes into account the modification on the ang. mom. |
---|
1831 | // jb mvr 6-aug-1999 |
---|
1832 | // note *** shell correction! (ecgnz) jb mvr 20-7-1999 |
---|
1833 | il = idnint(jprf); |
---|
1834 | barfit(k,k+j,il,&sbfis,&segs,&selmax); |
---|
1835 | // assert(isnan(sbfis) == false); |
---|
1836 | if ((fiss->optshp == 1) || (fiss->optshp == 3)) { |
---|
1837 | // fb->efa[k][j] = G4double(sbfis) - ecld->ecgnz[j][k]; |
---|
1838 | // fb->efa[j][k] = G4double(sbfis) - ecld->ecgnz[j][k]; |
---|
1839 | fb->efa[j][k] = double(sbfis) - ecld->ecgnz[j][k]; |
---|
1840 | } |
---|
1841 | else { |
---|
1842 | // fb->efa[k][j] = G4double(sbfis); |
---|
1843 | fb->efa[j][k] = double(sbfis); |
---|
1844 | } |
---|
1845 | // ef = fb->efa[k][j]; |
---|
1846 | ef = fb->efa[j][k]; |
---|
1847 | |
---|
1848 | // to avoid negative values for impossible nuclei |
---|
1849 | // the fission barrier is set to zero if smaller than zero. |
---|
1850 | // if (fb->efa[k][j] < 0.0) { |
---|
1851 | // fb->efa[k][j] = 0.0; |
---|
1852 | // } |
---|
1853 | if (fb->efa[j][k] < 0.0) { |
---|
1854 | if(verboseLevel > 2) { |
---|
1855 | G4cout <<"Setting fission barrier to 0" << G4endl; |
---|
1856 | } |
---|
1857 | fb->efa[j][k] = 0.0; |
---|
1858 | } |
---|
1859 | // assert(isnan(fb->efa[j][k]) == false); |
---|
1860 | |
---|
1861 | // factor with jprf should be 0.0025d0 - 0.01d0 for |
---|
1862 | // approximate influence of ang. momentum on bfis a.j. 22.07.96 |
---|
1863 | // 0.0 means no angular momentum |
---|
1864 | |
---|
1865 | if (ef < 0.0) { |
---|
1866 | ef = 0.0; |
---|
1867 | } |
---|
1868 | xx = fissility((k+j),k,fiss->optxfis); |
---|
1869 | // assert(isnan(xx) == false); |
---|
1870 | // assert(isinf(xx) == false); |
---|
1871 | |
---|
1872 | y = 1.00 - xx; |
---|
1873 | if (y < 0.0) { |
---|
1874 | y = 0.0; |
---|
1875 | } |
---|
1876 | if (y > 1.0) { |
---|
1877 | y = 1.0; |
---|
1878 | } |
---|
1879 | bs = bipol(1,y); |
---|
1880 | // assert(isnan(bs) == false); |
---|
1881 | // assert(isinf(bs) == false); |
---|
1882 | bk = bipol(2,y); |
---|
1883 | // assert(isnan(bk) == false); |
---|
1884 | // assert(isinf(bk) == false); |
---|
1885 | } |
---|
1886 | else { |
---|
1887 | ef = 1.0e40; |
---|
1888 | bs = 1.0; |
---|
1889 | bk = 1.0; |
---|
1890 | } |
---|
1891 | sbf = ee - ef; |
---|
1892 | |
---|
1893 | afp = idnint(a); |
---|
1894 | iz = idnint(zprf); |
---|
1895 | in = afp - iz; |
---|
1896 | bshell = ecld->ecfnz[in][iz]; |
---|
1897 | // assert(isnan(bshell) == false); |
---|
1898 | |
---|
1899 | // ld saddle point deformation |
---|
1900 | // here: beta2 = std::sqrt(5/(4pi)) * alpha2 |
---|
1901 | |
---|
1902 | // for the ground state def. 1.5d0 should be used |
---|
1903 | // because this was just the factor to produce the |
---|
1904 | // alpha-deformation table 1.5d0 should be used |
---|
1905 | // a.r.j. 6.8.97 |
---|
1906 | defbet = 1.58533e0 * spdef(idnint(a),idnint(zprf),fiss->optxfis); |
---|
1907 | // assert(isnan(defbet) == false); |
---|
1908 | |
---|
1909 | // level density and temperature at the saddle point |
---|
1910 | // G4cout <<"a = " << a << G4endl; |
---|
1911 | // G4cout <<"zprf = " << zprf << G4endl; |
---|
1912 | // G4cout <<"ee = " << ee << G4endl; |
---|
1913 | // G4cout <<"ef = " << ef << G4endl; |
---|
1914 | // G4cout <<"bshell = " << bshell << G4endl; |
---|
1915 | // G4cout <<"bs = " << bs << G4endl; |
---|
1916 | // G4cout <<"bk = " << bk << G4endl; |
---|
1917 | // G4cout <<"defbet = " << defbet << G4endl; |
---|
1918 | densniv(a,zprf,ee,ef,&densf,bshell,bs,bk,&temp,int(fiss->optshp),int(fiss->optcol),defbet); |
---|
1919 | // G4cout <<"densf = " << densf << G4endl; |
---|
1920 | // G4cout <<"temp = " << temp << G4endl; |
---|
1921 | // assert(isnan(densf) == false); |
---|
1922 | // assert(isnan(temp) == false); |
---|
1923 | // assert(temp != 0); |
---|
1924 | ft = temp; |
---|
1925 | if (iz >= 2) { |
---|
1926 | bshell = ecld->ecgnz[in][iz-1] - ecld->vgsld[in][iz-1]; |
---|
1927 | defbet = 1.5 * (ecld->alpha[in][iz-1]); |
---|
1928 | |
---|
1929 | // level density and temperature in the proton daughter |
---|
1930 | densniv(a-1.0,zprf-1.0e0,ee,sbp,&densp, bshell,1.e0,1.e0,&temp,int(fiss->optshp),int(fiss->optcol),defbet); |
---|
1931 | assert(temp >= 0); |
---|
1932 | // assert(isnan(temp) == false); |
---|
1933 | pt = temp; |
---|
1934 | if (imaxwell == 1) { |
---|
1935 | // valentina - random kinetic energy in a maxwelliam distribution |
---|
1936 | // modif juin/2002 a.b. c.v. for light targets; limit on the energy |
---|
1937 | // from the maxwell distribution. |
---|
1938 | rpt = pt; |
---|
1939 | ecp = 2.0 * pt; |
---|
1940 | if(rpt <= 1.0e-3) { |
---|
1941 | goto direct2914; |
---|
1942 | } |
---|
1943 | iflag = 0; |
---|
1944 | direct1914: |
---|
1945 | ecp = fmaxhaz(rpt); |
---|
1946 | iflag = iflag + 1; |
---|
1947 | if(iflag >= 10) { |
---|
1948 | standardRandom(&rnd,&(hazard->igraine[5])); |
---|
1949 | ecp=std::sqrt(rnd)*(eer-sbp); |
---|
1950 | // assert(isnan(ecp) == false); |
---|
1951 | goto direct2914; |
---|
1952 | } |
---|
1953 | if((ecp+sbp) > eer) { |
---|
1954 | goto direct1914; |
---|
1955 | } |
---|
1956 | } |
---|
1957 | else { |
---|
1958 | ecp = 2.0 * pt; |
---|
1959 | } |
---|
1960 | |
---|
1961 | direct2914: |
---|
1962 | dummy0 = 0; |
---|
1963 | // G4cout <<""<<G4endl; |
---|
1964 | } |
---|
1965 | else { |
---|
1966 | densp = 0.0; |
---|
1967 | ecp = 0.0; |
---|
1968 | pt = 0.0; |
---|
1969 | } |
---|
1970 | |
---|
1971 | if (in >= 2) { |
---|
1972 | bshell = ecld->ecgnz[in-1][iz] - ecld->vgsld[in-1][iz]; |
---|
1973 | defbet = 1.5e0 * (ecld->alpha[in-1][iz]); |
---|
1974 | |
---|
1975 | // level density and temperature in the neutron daughter |
---|
1976 | densniv(a-1.0,zprf,ee,sn,&densn,bshell, 1.e0,1.e0,&temp,int(fiss->optshp),int(fiss->optcol),defbet); |
---|
1977 | nt = temp; |
---|
1978 | |
---|
1979 | if (imaxwell == 1) { |
---|
1980 | // valentina - random kinetic energy in a maxwelliam distribution |
---|
1981 | // modif juin/2002 a.b. c.v. for light targets; limit on the energy |
---|
1982 | // from the maxwell distribution. |
---|
1983 | rnt = nt; |
---|
1984 | ecn = 2.0 * nt; |
---|
1985 | if(rnt <= 1.e-3) { |
---|
1986 | goto direct2915; |
---|
1987 | } |
---|
1988 | |
---|
1989 | iflag=0; |
---|
1990 | |
---|
1991 | ecn = fmaxhaz(rnt); |
---|
1992 | iflag=iflag+1; |
---|
1993 | if(iflag >= 10) { |
---|
1994 | standardRandom(&rnd,&(hazard->igraine[6])); |
---|
1995 | ecn = std::sqrt(rnd)*(eer-sn); |
---|
1996 | // assert(isnan(ecn) == false); |
---|
1997 | goto direct2915; |
---|
1998 | } |
---|
1999 | // if((ecn+sn) > eer) { |
---|
2000 | // goto direct1915; |
---|
2001 | // } |
---|
2002 | // else { |
---|
2003 | // ecn = 2.e0 * nt; |
---|
2004 | // } |
---|
2005 | if((ecn + sn) <= eer) { |
---|
2006 | ecn = 2.0 * nt; |
---|
2007 | } |
---|
2008 | direct2915: |
---|
2009 | dummy0 = 0; |
---|
2010 | // G4cout <<"" <<G4endl; |
---|
2011 | } |
---|
2012 | } |
---|
2013 | else { |
---|
2014 | densn = 0.0; |
---|
2015 | ecn = 0.0; |
---|
2016 | nt = 0.0; |
---|
2017 | } |
---|
2018 | |
---|
2019 | if ((in >= 3) && (iz >= 3)) { |
---|
2020 | bshell = ecld->ecgnz[in-2][iz-2] - ecld->vgsld[in-2][iz-2]; |
---|
2021 | defbet = 1.5 * (ecld->alpha[in-2][iz-2]); |
---|
2022 | |
---|
2023 | // level density and temperature in the alpha daughter |
---|
2024 | densniv(a-4.0,zprf-2.0e0,ee,sba,&densa,bshell,1.e0,1.e0,&temp,int(fiss->optshp),int(fiss->optcol),defbet); |
---|
2025 | |
---|
2026 | // valentina - random kinetic energy in a maxwelliam distribution |
---|
2027 | at = temp; |
---|
2028 | if (imaxwell == 1) { |
---|
2029 | // modif juin/2002 a.b. c.v. for light targets; limit on the energy |
---|
2030 | // from the maxwell distribution. |
---|
2031 | rat = at; |
---|
2032 | eca= 2.e0 * at; |
---|
2033 | if(rat <= 1.e-3) { |
---|
2034 | goto direct2916; |
---|
2035 | } |
---|
2036 | iflag=0; |
---|
2037 | direct1916: |
---|
2038 | eca = fmaxhaz(rat); |
---|
2039 | iflag=iflag+1; |
---|
2040 | if(iflag >= 10) { |
---|
2041 | standardRandom(&rnd,&(hazard->igraine[7])); |
---|
2042 | eca=std::sqrt(rnd)*(eer-sba); |
---|
2043 | // assert(isnan(eca) == false); |
---|
2044 | goto direct2916; |
---|
2045 | } |
---|
2046 | if((eca+sba) > eer) { |
---|
2047 | goto direct1916; |
---|
2048 | } |
---|
2049 | else { |
---|
2050 | eca = 2.0 * at; |
---|
2051 | } |
---|
2052 | direct2916: |
---|
2053 | dummy0 = 0; |
---|
2054 | // G4cout <<"" << G4endl; |
---|
2055 | } |
---|
2056 | else { |
---|
2057 | densa = 0.0; |
---|
2058 | eca = 0.0; |
---|
2059 | at = 0.0; |
---|
2060 | } |
---|
2061 | } // PK |
---|
2062 | |
---|
2063 | // special treatment for unbound nuclei |
---|
2064 | if (sn < 0.0) { |
---|
2065 | probn = 1.0; |
---|
2066 | probp = 0.0; |
---|
2067 | proba = 0.0; |
---|
2068 | probf = 0.0; |
---|
2069 | goto direct70; |
---|
2070 | } |
---|
2071 | if (sbp < 0.0) { |
---|
2072 | probp = 1.0; |
---|
2073 | probn = 0.0; |
---|
2074 | proba = 0.0; |
---|
2075 | probf = 0.0; |
---|
2076 | goto direct70; |
---|
2077 | } |
---|
2078 | |
---|
2079 | if ((a < 50.e0) || (ee > edyn)) { // no fission if e*> edyn or mass < 50 |
---|
2080 | // G4cout <<"densf = 0.0" << G4endl; |
---|
2081 | densf = 0.e0; |
---|
2082 | } |
---|
2083 | |
---|
2084 | bshell = ecld->ecgnz[in][iz] - ecld->vgsld[in][iz]; |
---|
2085 | defbet = 1.5e0 * (ecld->alpha[in][iz]); |
---|
2086 | |
---|
2087 | // compound nucleus level density |
---|
2088 | densniv(a,zprf,ee,0.0e0,&densg,bshell,1.e0,1.e0,&temp,int(fiss->optshp),int(fiss->optcol),defbet); |
---|
2089 | // assert(isnan(densg) == false); |
---|
2090 | // assert(isnan(temp) == false); |
---|
2091 | |
---|
2092 | if ( densg > 0.e0) { |
---|
2093 | // calculation of the partial decay width |
---|
2094 | // used for both the time scale and the evaporation decay width |
---|
2095 | gp = (std::pow(a,(2.0/3.0))/fiss->akap)*densp/densg/pi*std::pow(pt,2); |
---|
2096 | gn = (std::pow(a,(2.0/3.0))/fiss->akap)*densn/densg/pi*std::pow(nt,2); |
---|
2097 | ga = (std::pow(a,(2.0/3.0))/fiss->akap)*densa/densg/pi*2.0*std::pow(at,2); |
---|
2098 | gf = densf/densg/pi/2.0*ft; |
---|
2099 | // assert(isnan(gf) == false); |
---|
2100 | |
---|
2101 | // assert(isnan(gp) == false); |
---|
2102 | // assert(isnan(gn) == false); |
---|
2103 | // assert(isnan(ga) == false); |
---|
2104 | // assert(isnan(ft) == false); |
---|
2105 | // assert(ft != 0); |
---|
2106 | // assert(isnan(gf) == false); |
---|
2107 | |
---|
2108 | if(itest == 1) { |
---|
2109 | G4cout <<"gn,gp,ga,gf " << gn <<","<< gp <<","<< ga <<","<< gf << G4endl; |
---|
2110 | } |
---|
2111 | } |
---|
2112 | else { |
---|
2113 | if(verboseLevel > 2) { |
---|
2114 | G4cout <<"direct: densg <= 0.e0 " << a <<","<< zprf <<","<< ee << G4endl; |
---|
2115 | } |
---|
2116 | } |
---|
2117 | |
---|
2118 | gsum = ga + gp + gn; |
---|
2119 | // assert(isinf(gsum) == false); |
---|
2120 | // assert(isnan(gsum) == false); |
---|
2121 | if (gsum > 0.0) { |
---|
2122 | ts1 = hbar / gsum; |
---|
2123 | } |
---|
2124 | else { |
---|
2125 | ts1 = 1.0e99; |
---|
2126 | } |
---|
2127 | |
---|
2128 | if (inum > ilast) { // new event means reset the time scale |
---|
2129 | tsum = 0; |
---|
2130 | } |
---|
2131 | |
---|
2132 | // calculate the relative probabilities for all decay channels |
---|
2133 | if (densf == 0.0) { |
---|
2134 | if (densp == 0.0) { |
---|
2135 | if (densn == 0.0) { |
---|
2136 | if (densa == 0.0) { |
---|
2137 | // no reaction is possible |
---|
2138 | probf = 0.0; |
---|
2139 | probp = 0.0; |
---|
2140 | probn = 0.0; |
---|
2141 | proba = 0.0; |
---|
2142 | goto direct70; |
---|
2143 | } |
---|
2144 | |
---|
2145 | // alpha evaporation is the only open channel |
---|
2146 | rf = 0.0; |
---|
2147 | rp = 0.0; |
---|
2148 | rn = 0.0; |
---|
2149 | ra = 1.0; |
---|
2150 | goto direct50; |
---|
2151 | } |
---|
2152 | |
---|
2153 | // alpha emission and neutron emission |
---|
2154 | rf = 0.0; |
---|
2155 | rp = 0.0; |
---|
2156 | rn = 1.0; |
---|
2157 | ra = densa*2.0/densn*std::pow((at/nt),2); |
---|
2158 | goto direct50; |
---|
2159 | } |
---|
2160 | // alpha, proton and neutron emission |
---|
2161 | rf = 0.0; |
---|
2162 | rp = 1.0; |
---|
2163 | rn = densn/densp*std::pow((nt/pt),2); |
---|
2164 | // assert(isnan(rn) == false); |
---|
2165 | ra = densa*2.0/densp*std::pow((at/pt),2); |
---|
2166 | // assert(isnan(ra) == false); |
---|
2167 | goto direct50; |
---|
2168 | } |
---|
2169 | |
---|
2170 | // here fission has taken place |
---|
2171 | rf = 1.0; |
---|
2172 | |
---|
2173 | // cramers and weidenmueller factors for the dynamical hindrances of |
---|
2174 | // fission |
---|
2175 | if (bet <= 1.0e-16) { |
---|
2176 | cf = 1.0; |
---|
2177 | wf = 1.0; |
---|
2178 | } |
---|
2179 | else if (sbf > 0.0e0) { |
---|
2180 | cf = cram(bet,homega); |
---|
2181 | // if fission barrier ef=0.d0 then fission is the only possible |
---|
2182 | // channel. to avoid std::log(0) in function tau |
---|
2183 | // a.j. 7/28/93 |
---|
2184 | if (ef <= 0.0) { |
---|
2185 | rp = 0.0; |
---|
2186 | rn = 0.0; |
---|
2187 | ra = 0.0; |
---|
2188 | goto direct50; |
---|
2189 | } |
---|
2190 | else { |
---|
2191 | // transient time tau() |
---|
2192 | tauc = tau(bet,homega,ef,ft); |
---|
2193 | // assert(isnan(tauc) == false); |
---|
2194 | } |
---|
2195 | wfex = (tauc - tsum)/ts1; |
---|
2196 | |
---|
2197 | if (wfex < 0.0) { |
---|
2198 | wf = 1.0; |
---|
2199 | } |
---|
2200 | else { |
---|
2201 | wf = std::exp( -wfex); |
---|
2202 | } |
---|
2203 | } |
---|
2204 | else { |
---|
2205 | cf=1.0; |
---|
2206 | wf=1.0; |
---|
2207 | } |
---|
2208 | |
---|
2209 | if(verboseLevel > 2) { |
---|
2210 | G4cout <<"tsum,wf,cf " << tsum <<","<< wf <<","<< cf << G4endl; |
---|
2211 | } |
---|
2212 | |
---|
2213 | tsum = tsum + ts1; |
---|
2214 | |
---|
2215 | // change by g.k. and a.h. 5.9.95 |
---|
2216 | tconst = 0.7; |
---|
2217 | dconst = 12.0/std::sqrt(a); |
---|
2218 | // assert(isnan(dconst) == false); |
---|
2219 | nprf = a - zprf; |
---|
2220 | |
---|
2221 | if (fiss->optshp >= 2) { //then |
---|
2222 | parite(nprf,&parc); |
---|
2223 | // assert(isnan(parc) == false); |
---|
2224 | dconst = dconst*parc; |
---|
2225 | } |
---|
2226 | else { |
---|
2227 | dconst= 0.0; |
---|
2228 | } |
---|
2229 | if ((ee <= 17.e0) && (fiss->optles == 1) && (iz >= 90) && (in >= 134)) { //then |
---|
2230 | // constant changed to 5.0 accord to moretto & vandenbosch a.j. 19.3.96 |
---|
2231 | gngf = std::pow(a,(2.0/3.0))*tconst/10.0*std::exp((ef-sn+dconst)/tconst); |
---|
2232 | |
---|
2233 | // if the excitation energy is so low that densn=0 ==> gn = 0 |
---|
2234 | // fission remains the only channel. |
---|
2235 | // a. j. 10.1.94 |
---|
2236 | if (gn == 0.0) { |
---|
2237 | rn = 0.0; |
---|
2238 | rp = 0.0; |
---|
2239 | ra = 0.0; |
---|
2240 | } |
---|
2241 | else { |
---|
2242 | rn=gngf; |
---|
2243 | // assert(isnan(rn) == false); |
---|
2244 | rp=gngf*gp/gn; |
---|
2245 | // assert(isnan(rp) == false); |
---|
2246 | ra=gngf*ga/gn; |
---|
2247 | // assert(isnan(ra) == false); |
---|
2248 | } |
---|
2249 | } else { |
---|
2250 | // assert(isnan(cf) == false); |
---|
2251 | // assert(isinf(gn) == false); |
---|
2252 | // assert(isinf(gf) == false); |
---|
2253 | // assert(isinf(cf) == false); |
---|
2254 | assert(gn > 0 || (gf != 0 && cf != 0)); |
---|
2255 | rn = gn/(gf*cf); |
---|
2256 | // G4cout <<"rn = " << G4endl; |
---|
2257 | // G4cout <<"gn = " << gn << " gf = " << gf << " cf = " << cf << G4endl; |
---|
2258 | // assert(isnan(rn) == false); |
---|
2259 | rp = gp/(gf*cf); |
---|
2260 | // assert(isnan(rp) == false); |
---|
2261 | ra = ga/(gf*cf); |
---|
2262 | // assert(isnan(ra) == false); |
---|
2263 | } |
---|
2264 | direct50: |
---|
2265 | // relative decay probabilities |
---|
2266 | // assert(isnan(ra) == false); |
---|
2267 | // assert(isnan(rp) == false); |
---|
2268 | // assert(isnan(rn) == false); |
---|
2269 | // assert(isnan(rf) == false); |
---|
2270 | |
---|
2271 | denomi = rp+rn+ra+rf; |
---|
2272 | // assert(isnan(denomi) == false); |
---|
2273 | assert(denomi > 0); |
---|
2274 | // decay probabilities after transient time |
---|
2275 | probf = rf/denomi; |
---|
2276 | // assert(isnan(probf) == false); |
---|
2277 | probp = rp/denomi; |
---|
2278 | // assert(isnan(probp) == false); |
---|
2279 | probn = rn/denomi; |
---|
2280 | // assert(isnan(probn) == false); |
---|
2281 | proba = ra/denomi; |
---|
2282 | // assert(isnan(proba) == false); |
---|
2283 | // assert(isinf(proba) == false); |
---|
2284 | |
---|
2285 | // new treatment of grange-weidenmueller factor, 5.1.2000, khs !!! |
---|
2286 | |
---|
2287 | // decay probabilites with transient time included |
---|
2288 | // assert(isnan(wf) == false); |
---|
2289 | assert(std::fabs(probf) <= 1.0); |
---|
2290 | probf = probf * wf; |
---|
2291 | if(probf == 1.0) { |
---|
2292 | probp = 0.0; |
---|
2293 | probn = 0.0; |
---|
2294 | proba = 0.0; |
---|
2295 | } |
---|
2296 | else { |
---|
2297 | probp = probp * (wf + (1.e0-wf)/(1.e0-probf)); |
---|
2298 | probn = probn * (wf + (1.e0-wf)/(1.e0-probf)); |
---|
2299 | proba = proba * (wf + (1.e0-wf)/(1.e0-probf)); |
---|
2300 | } |
---|
2301 | direct70: |
---|
2302 | // assert(isnan(probp) == false); |
---|
2303 | // assert(isnan(probn) == false); |
---|
2304 | // assert(isnan(probf) == false); |
---|
2305 | // assert(isnan(proba) == false); |
---|
2306 | ptotl = probp+probn+proba+probf; |
---|
2307 | // assert(isnan(ptotl) == false); |
---|
2308 | |
---|
2309 | ee = eer; |
---|
2310 | ilast = inum; |
---|
2311 | |
---|
2312 | // Return values: |
---|
2313 | // assert(isnan(proba) == false); |
---|
2314 | (*probp_par) = probp; |
---|
2315 | (*probn_par) = probn; |
---|
2316 | (*proba_par) = proba; |
---|
2317 | (*probf_par) = probf; |
---|
2318 | (*ptotl_par) = ptotl; |
---|
2319 | (*sn_par) = sn; |
---|
2320 | (*sbp_par) = sbp; |
---|
2321 | (*sba_par) = sba; |
---|
2322 | (*ecn_par) = ecn; |
---|
2323 | (*ecp_par) = ecp; |
---|
2324 | (*eca_par) = eca; |
---|
2325 | (*bp_par) = bp; |
---|
2326 | (*ba_par) = ba; |
---|
2327 | } |
---|
2328 | |
---|
2329 | void G4Abla::densniv(G4double a, G4double z, G4double ee, G4double esous, G4double *dens, G4double bshell, G4double bs, G4double bk, |
---|
2330 | G4double *temp, G4int optshp, G4int optcol, G4double defbet) |
---|
2331 | { |
---|
2332 | // 1498 C |
---|
2333 | // 1499 C INPUT: |
---|
2334 | // 1500 C A,EE,ESOUS,OPTSHP,BS,BK,BSHELL,DEFBET |
---|
2335 | // 1501 C |
---|
2336 | // 1502 C LEVEL DENSITY PARAMETERS |
---|
2337 | // 1503 C COMMON /ALD/ AV,AS,AK,OPTAFAN |
---|
2338 | // 1504 C AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE |
---|
2339 | // 1505 C LEVEL DENSITY PARAMETER |
---|
2340 | // 1506 C OPTAFAN - 0/1 AF/AN >=1 OR AF/AN ==1 |
---|
2341 | // 1507 C RECOMMENDED IS OPTAFAN = 0 |
---|
2342 | // 1508 C--------------------------------------------------------------------- |
---|
2343 | // 1509 C OUTPUT: DENS,TEMP |
---|
2344 | // 1510 C |
---|
2345 | // 1511 C ____________________________________________________________________ |
---|
2346 | // 1512 C / |
---|
2347 | // 1513 C / PROCEDURE FOR CALCULATING THE STATE DENSITY OF A COMPOUND NUCLEUS |
---|
2348 | // 1514 C /____________________________________________________________________ |
---|
2349 | // 1515 C |
---|
2350 | // 1516 INTEGER AFP,IZ,OPTSHP,OPTCOL,J,OPTAFAN |
---|
2351 | // 1517 REAL*8 A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y21,PA,BS,BK,TEMP |
---|
2352 | // 1518 C=====INSERTED BY KUDYAEV=============================================== |
---|
2353 | // 1519 COMMON /ALD/ AV,AS,AK,OPTAFAN |
---|
2354 | // 1520 REAL*8 ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE,HE,ECOR,ECOR1,Pi6 |
---|
2355 | // 1521 REAL*8 BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE,DEFBET,QR,SIG,FP |
---|
2356 | // 1522 C======================================================================= |
---|
2357 | // 1523 C |
---|
2358 | // 1524 C |
---|
2359 | // 1525 C----------------------------------------------------------------------- |
---|
2360 | // 1526 C A MASS NUMBER OF THE DAUGHTER NUCLEUS |
---|
2361 | // 1527 C EE EXCITATION ENERGY OF THE MOTHER NUCLEUS |
---|
2362 | // 1528 C ESOUS SEPARATION ENERGY PLUS EFFECTIVE COULOMB BARRIER |
---|
2363 | // 1529 C DENS STATE DENSITY OF DAUGHTER NUCLEUS AT EE-ESOUS-EC |
---|
2364 | // 1530 C BSHELL SHELL CORRECTION |
---|
2365 | // 1531 C TEMP NUCLEAR TEMPERATURE |
---|
2366 | // 1532 C E LOCAL EXCITATION ENERGY OF THE DAUGHTER NUCLEUS |
---|
2367 | // 1533 C E1 LOCAL HELP VARIABLE |
---|
2368 | // 1534 C Y0,Y1,Y2,Y01,Y11,Y21 |
---|
2369 | // 1535 C LOCAL HELP VARIABLES |
---|
2370 | // 1536 C PA LOCAL STATE-DENSITY PARAMETER |
---|
2371 | // 1537 C EC KINETIC ENERGY OF EMITTED PARTICLE WITHOUT |
---|
2372 | // 1538 C COULOMB REPULSION |
---|
2373 | // 1539 C IDEN FAKTOR FOR SUBSTRACTING KINETIC ENERGY IDEN*TEMP |
---|
2374 | // 1540 C DELTA0 PAIRING GAP 12 FOR GROUND STATE |
---|
2375 | // 1541 C 14 FOR SADDLE POINT |
---|
2376 | // 1542 C EITERA HELP VARIABLE FOR TEMPERATURE ITERATION |
---|
2377 | // 1543 C----------------------------------------------------------------------- |
---|
2378 | // 1544 C |
---|
2379 | // 1545 C |
---|
2380 | G4double afp; |
---|
2381 | G4double delta0; |
---|
2382 | G4double deltau; |
---|
2383 | G4double deltpp; |
---|
2384 | G4double e; |
---|
2385 | G4double ecor = 0.0; |
---|
2386 | G4double ecor1; |
---|
2387 | G4double ecr; |
---|
2388 | G4double er; |
---|
2389 | G4double fe; |
---|
2390 | G4double fp; |
---|
2391 | G4double he; |
---|
2392 | G4double iz; |
---|
2393 | G4double pa; |
---|
2394 | G4double para; |
---|
2395 | G4double parz; |
---|
2396 | G4double ponfe; |
---|
2397 | G4double ponniv; |
---|
2398 | G4double qr; |
---|
2399 | G4double sig; |
---|
2400 | G4double y01; |
---|
2401 | G4double y11; |
---|
2402 | G4double y2; |
---|
2403 | G4double y21; |
---|
2404 | G4double y1; |
---|
2405 | G4double y0; |
---|
2406 | |
---|
2407 | G4double pi6 = std::pow(3.1415926535,2) / 6.0; |
---|
2408 | ecr=10.0; |
---|
2409 | er=28.0; |
---|
2410 | afp=idnint(a); |
---|
2411 | iz=idnint(z); |
---|
2412 | |
---|
2413 | // level density parameter |
---|
2414 | if((ald->optafan == 1)) { |
---|
2415 | pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0)); |
---|
2416 | } |
---|
2417 | else { |
---|
2418 | pa = (ald->av)*a + (ald->as)*bs*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bk*std::pow(a,(1.e0/3.e0)); |
---|
2419 | } |
---|
2420 | |
---|
2421 | fp = 0.01377937231e0 * std::pow(a,(5.e0/3.e0)) * (1.e0 + defbet/3.e0); |
---|
2422 | |
---|
2423 | // pairing corrections |
---|
2424 | if (bs > 1.0) { |
---|
2425 | delta0 = 14; |
---|
2426 | } |
---|
2427 | else { |
---|
2428 | delta0 = 12; |
---|
2429 | } |
---|
2430 | |
---|
2431 | if (esous > 1.0e30) { |
---|
2432 | (*dens) = 0.0; |
---|
2433 | (*temp) = 0.0; |
---|
2434 | goto densniv100; |
---|
2435 | } |
---|
2436 | |
---|
2437 | e = ee - esous; |
---|
2438 | |
---|
2439 | if (e < 0.0) { |
---|
2440 | (*dens) = 0.0; |
---|
2441 | (*temp) = 0.0; |
---|
2442 | goto densniv100; |
---|
2443 | } |
---|
2444 | |
---|
2445 | // shell corrections |
---|
2446 | if (optshp > 0) { |
---|
2447 | deltau = bshell; |
---|
2448 | if (optshp == 2) { |
---|
2449 | deltau = 0.0; |
---|
2450 | } |
---|
2451 | if (optshp >= 2) { |
---|
2452 | // pairing energy shift with condensation energy a.r.j. 10.03.97 |
---|
2453 | // deltpp = -0.25e0* (delta0/std::pow(std::sqrt(a),2)) * pa /pi6 + 2.e0*delta0/std::sqrt(a); |
---|
2454 | deltpp = -0.25e0* std::pow((delta0/std::sqrt(a)),2) * pa /pi6 + 2.e0*delta0/std::sqrt(a); |
---|
2455 | // assert(isnan(deltpp) == false); |
---|
2456 | |
---|
2457 | parite(a,¶); |
---|
2458 | if (para < 0.0) { |
---|
2459 | e = e - delta0/std::sqrt(a); |
---|
2460 | // assert(isnan(e) == false); |
---|
2461 | } else { |
---|
2462 | parite(z,&parz); |
---|
2463 | if (parz > 0.e0) { |
---|
2464 | e = e - 2.0*delta0/std::sqrt(a); |
---|
2465 | // assert(isnan(e) == false); |
---|
2466 | } else { |
---|
2467 | e = e; |
---|
2468 | // assert(isnan(e) == false); |
---|
2469 | } |
---|
2470 | } |
---|
2471 | } else { |
---|
2472 | deltpp = 0.0; |
---|
2473 | } |
---|
2474 | } else { |
---|
2475 | deltau = 0.0; |
---|
2476 | deltpp = 0.0; |
---|
2477 | } |
---|
2478 | if (e < 0.0) { |
---|
2479 | e = 0.0; |
---|
2480 | (*temp) = 0.0; |
---|
2481 | } |
---|
2482 | |
---|
2483 | // washing out is made stronger ! g.k. 3.7.96 |
---|
2484 | ponfe = -2.5*pa*e*std::pow(a,(-4.0/3.0)); |
---|
2485 | |
---|
2486 | if (ponfe < -700.0) { |
---|
2487 | ponfe = -700.0; |
---|
2488 | } |
---|
2489 | fe = 1.0 - std::exp(ponfe); |
---|
2490 | if (e < ecr) { |
---|
2491 | // priv. comm. k.-h. schmidt |
---|
2492 | he = 1.0 - std::pow((1.0 - e/ecr),2); |
---|
2493 | } |
---|
2494 | else { |
---|
2495 | he = 1.0; |
---|
2496 | } |
---|
2497 | |
---|
2498 | // Excitation energy corrected for pairing and shell effects |
---|
2499 | // washing out with excitation energy is included. |
---|
2500 | ecor = e + deltau*fe + deltpp*he; |
---|
2501 | |
---|
2502 | if (ecor <= 0.1) { |
---|
2503 | ecor = 0.1; |
---|
2504 | } |
---|
2505 | |
---|
2506 | // statt 170.d0 a.r.j. 8.11.97 |
---|
2507 | |
---|
2508 | // iterative procedure according to grossjean and feldmeier |
---|
2509 | // to avoid the singularity e = 0 |
---|
2510 | if (ee < 5.0) { |
---|
2511 | y1 = std::sqrt(pa*ecor); |
---|
2512 | // assert(isnan(y1) == false); |
---|
2513 | for(int j = 0; j < 5; j++) { |
---|
2514 | y2 = pa*ecor*(1.e0-std::exp(-y1)); |
---|
2515 | // assert(isnan(y2) == false); |
---|
2516 | y1 = std::sqrt(y2); |
---|
2517 | // assert(isnan(y1) == false); |
---|
2518 | } |
---|
2519 | |
---|
2520 | y0 = pa/y1; |
---|
2521 | // assert(isnan(y0) == false); |
---|
2522 | assert(y0 != 0.0); |
---|
2523 | (*temp)=1.0/y0; |
---|
2524 | (*dens) = std::exp(y0*ecor)/ (std::pow((std::pow(ecor,3)*y0),0.5)*std::pow((1.0-0.5*y0*ecor*std::exp(-y1)),0.5))* std::exp(y1)*(1.0-std::exp(-y1))*0.1477045; |
---|
2525 | if (ecor < 1.0) { |
---|
2526 | ecor1=1.0; |
---|
2527 | y11 = std::sqrt(pa*ecor1); |
---|
2528 | // assert(isnan(y11) == false); |
---|
2529 | for(int j = 0; j < 7; j++) { |
---|
2530 | y21 = pa*ecor1*(1.0-std::exp(-y11)); |
---|
2531 | // assert(isnan(21) == false); |
---|
2532 | y11 = std::sqrt(y21); |
---|
2533 | // assert(isnan(y11) == false); |
---|
2534 | } |
---|
2535 | |
---|
2536 | y01 = pa/y11; |
---|
2537 | // assert(isnan(y01) == false); |
---|
2538 | (*dens) = (*dens)*std::pow((y01/y0),1.5); |
---|
2539 | (*temp) = (*temp)*std::pow((y01/y0),1.5); |
---|
2540 | } |
---|
2541 | } |
---|
2542 | else { |
---|
2543 | ponniv = 2.0*std::sqrt(pa*ecor); |
---|
2544 | // assert(isnan(ponniv) == false); |
---|
2545 | if (ponniv > 700.0) { |
---|
2546 | ponniv = 700.0; |
---|
2547 | } |
---|
2548 | |
---|
2549 | // fermi gas state density |
---|
2550 | (*dens) = std::pow(pa,(-0.25e0))*std::pow(ecor,(-1.25e0))*std::exp(ponniv) * 0.1477045e0; |
---|
2551 | // assert(isnan(std::sqrt(ecor/pa)) == false); |
---|
2552 | (*temp) = std::sqrt(ecor/pa); |
---|
2553 | } |
---|
2554 | densniv100: |
---|
2555 | |
---|
2556 | // spin cutoff parameter |
---|
2557 | sig = fp * (*temp); |
---|
2558 | |
---|
2559 | // collective enhancement |
---|
2560 | if (optcol == 1) { |
---|
2561 | qrot(z,a,defbet,sig,ecor,&qr); |
---|
2562 | } |
---|
2563 | else { |
---|
2564 | qr = 1.0; |
---|
2565 | } |
---|
2566 | |
---|
2567 | (*dens) = (*dens) * qr; |
---|
2568 | } |
---|
2569 | |
---|
2570 | |
---|
2571 | G4double G4Abla::bfms67(G4double zms, G4double ams) |
---|
2572 | { |
---|
2573 | // This subroutine calculates the fission barriers |
---|
2574 | // of the liquid-drop model of Myers and Swiatecki (1967). |
---|
2575 | // Analytic parameterization of Dahlinger 1982 |
---|
2576 | // replaces tables. Barrier heights from Myers and Swiatecki !!! |
---|
2577 | |
---|
2578 | G4double nms,ims,ksims,xms, ums; |
---|
2579 | |
---|
2580 | nms = ams - zms; |
---|
2581 | ims = (nms-zms)/ams; |
---|
2582 | ksims= 50.15e0 * (1.- 1.78 * std::pow(ims,2)); |
---|
2583 | xms = std::pow(zms,2) / (ams * ksims); |
---|
2584 | ums = 0.368e0-5.057e0*xms+8.93e0*std::pow(xms,2)-8.71*std::pow(xms,3); |
---|
2585 | return(0.7322e0*std::pow(zms,2)/std::pow(ams,(0.333333e0))*std::pow(10.e0,ums)); |
---|
2586 | } |
---|
2587 | |
---|
2588 | void G4Abla::lpoly(G4double x, G4int n, G4double pl[]) |
---|
2589 | { |
---|
2590 | // THIS SUBROUTINE CALCULATES THE ORDINARY LEGENDRE POLYNOMIALS OF |
---|
2591 | // ORDER 0 TO N-1 OF ARGUMENT X AND STORES THEM IN THE VECTOR PL. |
---|
2592 | // THEY ARE CALCULATED BY RECURSION RELATION FROM THE FIRST TWO |
---|
2593 | // POLYNOMIALS. |
---|
2594 | // WRITTEN BY A.J.SIERK LANL T-9 FEBRUARY, 1984 |
---|
2595 | |
---|
2596 | // NOTE: PL AND X MUST BE DOUBLE PRECISION ON 32-BIT COMPUTERS! |
---|
2597 | |
---|
2598 | pl[0] = 1.0; |
---|
2599 | pl[1] = x; |
---|
2600 | |
---|
2601 | for(int i = 2; i < n; i++) { |
---|
2602 | pl[i] = ((2*double(i+1) - 3.0)*x*pl[i-1] - (double(i+1) - 2.0)*pl[i-2])/(double(i+1)-1.0); |
---|
2603 | } |
---|
2604 | } |
---|
2605 | |
---|
2606 | G4double G4Abla::eflmac(G4int ia, G4int iz, G4int flag, G4int optshp) |
---|
2607 | { |
---|
2608 | // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS. |
---|
2609 | // SWITCH FOR PAIRING INCLUDED AS WELL. |
---|
2610 | // BINDING = EFLMAC(IA,IZ,0,OPTSHP) |
---|
2611 | // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C |
---|
2612 | // A.J. 15.07.96 |
---|
2613 | |
---|
2614 | // this function will calculate the liquid-drop nuclear mass for spheri |
---|
2615 | // configuration according to the preprint NUCLEAR GROUND-STATE |
---|
2616 | // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p. |
---|
2617 | // All constants are taken from this publication for consistency. |
---|
2618 | |
---|
2619 | // Parameters: |
---|
2620 | // a: nuclear mass number |
---|
2621 | // z: nuclear charge |
---|
2622 | // flag: 0 - return mass excess |
---|
2623 | // otherwise - return pairing (= -1/2 dpn + 1/2 (Dp + Dn)) |
---|
2624 | |
---|
2625 | G4double eflmacResult; |
---|
2626 | |
---|
2627 | G4int in; |
---|
2628 | G4double z,n,a,av,as,a0,c1,c4,b1,b3,f,ca,w,dp,dn,dpn,efl,pi; |
---|
2629 | G4double rmac,bs,h,r0,kf,ks,kv,rp,ay,aden,x0,y0,mh,mn,esq,ael,i; |
---|
2630 | pi = 3.141592653589793238e0; |
---|
2631 | |
---|
2632 | // fundamental constants |
---|
2633 | // hydrogen-atom mass excess |
---|
2634 | mh = 7.289034; |
---|
2635 | |
---|
2636 | // neutron mass excess |
---|
2637 | mn = 8.071431; |
---|
2638 | |
---|
2639 | // electronic charge squared |
---|
2640 | esq = 1.4399764; |
---|
2641 | |
---|
2642 | // constants from considerations other than nucl. masses |
---|
2643 | // electronic binding |
---|
2644 | ael = 1.433e-5; |
---|
2645 | |
---|
2646 | // proton rms radius |
---|
2647 | rp = 0.8; |
---|
2648 | |
---|
2649 | // nuclear radius constant |
---|
2650 | r0 = 1.16; |
---|
2651 | |
---|
2652 | // range of yukawa-plus-expon. potential |
---|
2653 | ay = 0.68; |
---|
2654 | |
---|
2655 | // range of yukawa function used to generate |
---|
2656 | // nuclear charge distribution |
---|
2657 | aden= 0.70; |
---|
2658 | |
---|
2659 | // constants from considering odd-even mass differences |
---|
2660 | // average pairing gap |
---|
2661 | rmac= 4.80; |
---|
2662 | |
---|
2663 | // neutron-proton interaction |
---|
2664 | h = 6.6; |
---|
2665 | |
---|
2666 | // wigner constant |
---|
2667 | w = 30.0; |
---|
2668 | |
---|
2669 | // adjusted parameters |
---|
2670 | // volume energy |
---|
2671 | av = 16.00126; |
---|
2672 | |
---|
2673 | // volume asymmetry |
---|
2674 | kv = 1.92240; |
---|
2675 | |
---|
2676 | // surface energy |
---|
2677 | as = 21.18466; |
---|
2678 | |
---|
2679 | // surface asymmetry |
---|
2680 | ks = 2.345; |
---|
2681 | // a^0 constant |
---|
2682 | a0 = 2.615; |
---|
2683 | |
---|
2684 | // charge asymmetry |
---|
2685 | ca = 0.10289; |
---|
2686 | |
---|
2687 | // we will account for deformation by using the microscopic |
---|
2688 | // corrections tabulated from p. 68ff */ |
---|
2689 | bs = 1.0; |
---|
2690 | |
---|
2691 | z = double(iz); |
---|
2692 | a = double(ia); |
---|
2693 | in = ia - iz; |
---|
2694 | n = double(in); |
---|
2695 | dn = rmac*bs/std::pow(n,(1.0/3.0)); |
---|
2696 | dp = rmac*bs/std::pow(z,(1.0/3.0)); |
---|
2697 | dpn = h/bs/std::pow(a,(2.0/3.0)); |
---|
2698 | // assert(isnan(dpn) == false); |
---|
2699 | |
---|
2700 | c1 = 3.0/5.0*esq/r0; |
---|
2701 | // assert(isnan(c1) == false); |
---|
2702 | // assert(isinf(c1) == false); |
---|
2703 | |
---|
2704 | c4 = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1; |
---|
2705 | // assert(isnan(c4) == false); |
---|
2706 | // assert(isinf(c4) == false); |
---|
2707 | |
---|
2708 | // assert(isnan(pi) == false); |
---|
2709 | // assert(isnan(z) == false); |
---|
2710 | // assert(isnan(a) == false); |
---|
2711 | // assert(isnan(r0) == false); |
---|
2712 | kf = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0; |
---|
2713 | // assert(isnan(kf) == false); |
---|
2714 | // assert(isinf(kf) == false); |
---|
2715 | |
---|
2716 | f = -1.0/8.0*rp*rp*esq/std::pow(r0,3) * (145.0/48.0 - 327.0/2880.0*std::pow(kf,2) * std::pow(rp,2) + 1527.0/1209600.0*std::pow(kf,4) * std::pow(rp,4)); |
---|
2717 | i = (n-z)/a; |
---|
2718 | |
---|
2719 | x0 = r0 * std::pow(a,(1.0/3.0)) / ay; |
---|
2720 | y0 = r0 * std::pow(a,(1.0/3.0)) / aden; |
---|
2721 | |
---|
2722 | b1 = 1.0 - 3.0/(std::pow(x0,2)) + (1.0 + x0) * (2.0 + 3.0/x0 + 3.0/std::pow(x0,2)) * std::exp(-2.0*x0); |
---|
2723 | |
---|
2724 | b3 = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3)) |
---|
2725 | - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2) |
---|
2726 | + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0)); |
---|
2727 | |
---|
2728 | // now calulation of total binding energy a.j. 16.7.96 |
---|
2729 | |
---|
2730 | efl = -1.0 * av*(1.0 - kv*i*i)*a + as*(1.0 - ks*i*i)*b1 * std::pow(a,(2.0/3.0)) + a0 |
---|
2731 | + c1*z*z*b3/std::pow(a,(1.0/3.0)) - c4*std::pow(z,(4.0/3.0))/std::pow(a,(1.e0/3.e0)) |
---|
2732 | + f*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0)); |
---|
2733 | |
---|
2734 | if ((in == iz) && (mod(in,2) == 1) && (mod(iz,2) == 1)) { |
---|
2735 | // n and z odd and equal |
---|
2736 | efl = efl + w*(utilabs(i)+1.e0/a); |
---|
2737 | } |
---|
2738 | else { |
---|
2739 | efl= efl + w* utilabs(i); |
---|
2740 | } |
---|
2741 | |
---|
2742 | // pairing is made optional |
---|
2743 | if (optshp >= 2) { |
---|
2744 | // average pairing |
---|
2745 | if ((mod(in,2) == 1) && (mod(iz,2) == 1)) { |
---|
2746 | efl = efl - dpn; |
---|
2747 | } |
---|
2748 | if (mod(in,2) == 1) { |
---|
2749 | efl = efl + dn; |
---|
2750 | } |
---|
2751 | if (mod(iz,2) == 1) { |
---|
2752 | efl = efl + dp; |
---|
2753 | } |
---|
2754 | // end if for pairing term |
---|
2755 | } |
---|
2756 | |
---|
2757 | if (flag != 0) { |
---|
2758 | eflmacResult = (0.5*(dn + dp) - 0.5*dpn); |
---|
2759 | } |
---|
2760 | else { |
---|
2761 | eflmacResult = efl; |
---|
2762 | } |
---|
2763 | |
---|
2764 | return eflmacResult; |
---|
2765 | } |
---|
2766 | |
---|
2767 | void G4Abla::appariem(G4double a, G4double z, G4double *del) |
---|
2768 | { |
---|
2769 | // CALCUL DE LA CORRECTION, DUE A L'APPARIEMENT, DE L'ENERGIE DE |
---|
2770 | // LIAISON D'UN NOYAU |
---|
2771 | // PROCEDURE FOR CALCULATING THE PAIRING CORRECTION TO THE BINDING |
---|
2772 | // ENERGY OF A SPECIFIC NUCLEUS |
---|
2773 | |
---|
2774 | double para,parz; |
---|
2775 | // A MASS NUMBER |
---|
2776 | // Z NUCLEAR CHARGE |
---|
2777 | // PARA HELP VARIABLE FOR PARITY OF A |
---|
2778 | // PARZ HELP VARIABLE FOR PARITY OF Z |
---|
2779 | // DEL PAIRING CORRECTION |
---|
2780 | |
---|
2781 | parite(a, ¶); |
---|
2782 | |
---|
2783 | if (para < 0.0) { |
---|
2784 | (*del) = 0.0; |
---|
2785 | } |
---|
2786 | else { |
---|
2787 | parite(z, &parz); |
---|
2788 | if (parz > 0.0) { |
---|
2789 | // assert(isnan(std::sqrt(a)) == false); |
---|
2790 | (*del) = -12.0/std::sqrt(a); |
---|
2791 | } |
---|
2792 | else { |
---|
2793 | // assert(isnan(std::sqrt(a)) == false); |
---|
2794 | (*del) = 12.0/std::sqrt(a); |
---|
2795 | } |
---|
2796 | } |
---|
2797 | } |
---|
2798 | |
---|
2799 | void G4Abla::parite(G4double n, G4double *par) |
---|
2800 | { |
---|
2801 | // CALCUL DE LA PARITE DU NOMBRE N |
---|
2802 | // |
---|
2803 | // PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N. |
---|
2804 | // RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN |
---|
2805 | |
---|
2806 | G4double n1, n2, n3; |
---|
2807 | |
---|
2808 | // N NUMBER TO BE TESTED |
---|
2809 | // N1,N2 HELP VARIABLES |
---|
2810 | // PAR HELP VARIABLE FOR PARITY OF N |
---|
2811 | |
---|
2812 | n3 = double(idnint(n)); |
---|
2813 | n1 = n3/2.0; |
---|
2814 | n2 = n1 - dint(n1); |
---|
2815 | |
---|
2816 | if (n2 > 0.0) { |
---|
2817 | (*par) = -1.0; |
---|
2818 | } |
---|
2819 | else { |
---|
2820 | (*par) = 1.0; |
---|
2821 | } |
---|
2822 | } |
---|
2823 | |
---|
2824 | G4double G4Abla::tau(G4double bet, G4double homega, G4double ef, G4double t) |
---|
2825 | { |
---|
2826 | // INPUT : BET, HOMEGA, EF, T |
---|
2827 | // OUTPUT: TAU - RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED |
---|
2828 | // 90 PERCENT OF ITS FINAL VALUE |
---|
2829 | // |
---|
2830 | // BETA - NUCLEAR VISCOSITY |
---|
2831 | // HOMEGA - CURVATURE OF POTENTIAL |
---|
2832 | // EF - FISSION BARRIER |
---|
2833 | // T - NUCLEAR TEMPERATURE |
---|
2834 | |
---|
2835 | G4double tauResult; |
---|
2836 | |
---|
2837 | G4double tlim; |
---|
2838 | tlim = 8.e0 * ef; |
---|
2839 | if (t > tlim) { |
---|
2840 | t = tlim; |
---|
2841 | } |
---|
2842 | |
---|
2843 | // modified bj and khs 6.1.2000: |
---|
2844 | if (bet/(std::sqrt(2.0)*10.0*(homega/6.582122)) <= 1.0) { |
---|
2845 | tauResult = std::log(10.0*ef/t)/(bet*1.0e21); |
---|
2846 | // assert(isnan(tauResult) == false); |
---|
2847 | } |
---|
2848 | else { |
---|
2849 | tauResult = std::log(10.0*ef/t)/ (2.0*std::pow((10.0*homega/6.582122),2))*(bet*1.0e-21); |
---|
2850 | // assert(isnan(tauResult) == false); |
---|
2851 | } //end if |
---|
2852 | |
---|
2853 | return tauResult; |
---|
2854 | } |
---|
2855 | |
---|
2856 | G4double G4Abla::cram(G4double bet, G4double homega) |
---|
2857 | { |
---|
2858 | // INPUT : BET, HOMEGA NUCLEAR VISCOSITY + CURVATURE OF POTENTIAL |
---|
2859 | // OUTPUT: KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY |
---|
2860 | // INDEPENDENT OF EXCITATION ENERGY |
---|
2861 | |
---|
2862 | G4double rel = bet/(20.0*homega/6.582122); |
---|
2863 | G4double cramResult = std::sqrt(1.0 + std::pow(rel,2)) - rel; |
---|
2864 | // limitation introduced 6.1.2000 by khs |
---|
2865 | |
---|
2866 | if (cramResult > 1.0) { |
---|
2867 | cramResult = 1.0; |
---|
2868 | } |
---|
2869 | |
---|
2870 | // assert(isnan(cramResult) == false); |
---|
2871 | return cramResult; |
---|
2872 | } |
---|
2873 | |
---|
2874 | G4double G4Abla::bipol(int iflag, G4double y) |
---|
2875 | { |
---|
2876 | // CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS |
---|
2877 | // RELATIVE TO THE SPHERICAL CONFIGURATION |
---|
2878 | // BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES |
---|
2879 | |
---|
2880 | // INPUT: IFLAG - 0/1 BK/BS CALCULATION |
---|
2881 | // Y - (1 - X) COMPLEMENT OF THE FISSILITY |
---|
2882 | |
---|
2883 | // LINEAR INTERPOLATION OF BS BK TABLE |
---|
2884 | |
---|
2885 | int i; |
---|
2886 | |
---|
2887 | G4double bipolResult; |
---|
2888 | |
---|
2889 | const int bsbkSize = 54; |
---|
2890 | |
---|
2891 | G4double bk[bsbkSize] = {0.0, 1.00000,1.00087,1.00352,1.00799,1.01433,1.02265,1.03306, |
---|
2892 | 1.04576,1.06099,1.07910,1.10056,1.12603,1.15651,1.19348, |
---|
2893 | 1.23915,1.29590,1.35951,1.41013,1.44103,1.46026,1.47339, |
---|
2894 | 1.48308,1.49068,1.49692,1.50226,1.50694,1.51114,1.51502, |
---|
2895 | 1.51864,1.52208,1.52539,1.52861,1.53177,1.53490,1.53803, |
---|
2896 | 1.54117,1.54473,1.54762,1.55096,1.55440,1.55798,1.56173, |
---|
2897 | 1.56567,1.56980,1.57413,1.57860,1.58301,1.58688,1.58688, |
---|
2898 | 1.58688,1.58740,1.58740, 0.0}; //Zeroes at bk[0], and at the end added by PK |
---|
2899 | |
---|
2900 | G4double bs[bsbkSize] = {0.0, 1.00000,1.00086,1.00338,1.00750,1.01319, |
---|
2901 | 1.02044,1.02927,1.03974, |
---|
2902 | 1.05195,1.06604,1.08224,1.10085,1.12229,1.14717,1.17623,1.20963, |
---|
2903 | 1.24296,1.26532,1.27619,1.28126,1.28362,1.28458,1.28477,1.28450, |
---|
2904 | 1.28394,1.28320,1.28235,1.28141,1.28042,1.27941,1.27837,1.27732, |
---|
2905 | 1.27627,1.27522,1.27418,1.27314,1.27210,1.27108,1.27006,1.26906, |
---|
2906 | 1.26806,1.26707,1.26610,1.26514,1.26418,1.26325,1.26233,1.26147, |
---|
2907 | 1.26147,1.26147,1.25992,1.25992, 0.0}; |
---|
2908 | |
---|
2909 | i = idint(y/(2.0e-02)) + 1; |
---|
2910 | assert(i >= 1); |
---|
2911 | |
---|
2912 | if(i >= bsbkSize) { |
---|
2913 | if(verboseLevel > 2) { |
---|
2914 | G4cout <<"G4Abla error: index i = " << i << " is greater than array size permits." << G4endl; |
---|
2915 | } |
---|
2916 | bipolResult = 0.0; |
---|
2917 | } |
---|
2918 | else { |
---|
2919 | if (iflag == 1) { |
---|
2920 | bipolResult = bs[i] + (bs[i+1] - bs[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); |
---|
2921 | } |
---|
2922 | else { |
---|
2923 | bipolResult = bk[i] + (bk[i+1] - bk[i])/2.0e-02 * (y - 2.0e-02*(i - 1)); |
---|
2924 | } |
---|
2925 | } |
---|
2926 | |
---|
2927 | // assert(isnan(bipolResult) == false); |
---|
2928 | return bipolResult; |
---|
2929 | } |
---|
2930 | |
---|
2931 | void G4Abla::barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax) |
---|
2932 | { |
---|
2933 | // 2223 C VERSION FOR 32BIT COMPUTER |
---|
2934 | // 2224 C THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE |
---|
2935 | // 2225 C GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM |
---|
2936 | // 2226 C AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF |
---|
2937 | // 2227 C H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC |
---|
2938 | // 2228 C NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR |
---|
2939 | // 2229 C MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY |
---|
2940 | // 2230 C 2*PI). |
---|
2941 | // 2231 C |
---|
2942 | // 2232 C THE FISSION BARRIER FO IL = 0 IS CALCULATED FROM A 7TH |
---|
2943 | // 2233 C ORDER FIT IN TWO VARIABLES TO 638 CALCULATED FISSION |
---|
2944 | // 2234 C BARRIERS FOR Z VALUES FROM 20 TO 110. THESE 638 BARRIERS ARE |
---|
2945 | // 2235 C FIT WITH AN RMS DEVIATION OF 0.10 MEV BY THIS 49-PARAMETER |
---|
2946 | // 2236 C FUNCTION. |
---|
2947 | // 2237 C IF BARFIT IS CALLED WITH (IZ,IA) VALUES OUTSIDE THE RANGE OF |
---|
2948 | // 2238 C THE BARRIER HEIGHT IS SET TO 0.0, AND A MESSAGE IS PRINTED |
---|
2949 | // 2239 C ON THE DEFAULT OUTPUT FILE. |
---|
2950 | // 2240 C |
---|
2951 | // 2241 C FOR IL VALUES NOT EQUAL TO ZERO, THE VALUES OF L AT WHICH |
---|
2952 | // 2242 C THE BARRIER IS 80% AND 20% OF THE L=0 VALUE ARE RESPECTIVELY |
---|
2953 | // 2243 C FIT TO 20-PARAMETER FUNCTIONS OF Z AND A, OVER A MORE |
---|
2954 | // 2244 C RESTRICTED RANGE OF A VALUES, THAN IS THE CASE FOR L = 0. |
---|
2955 | // 2245 C THE VALUE OF L WHERE THE BARRIER DISAPPEARS, LMAX IS FIT TO |
---|
2956 | // 2246 C A 24-PARAMETER FUNCTION OF Z AND A, WITH THE SAME RANGE OF |
---|
2957 | // 2247 C Z AND A VALUES AS L-80 AND L-20. |
---|
2958 | // 2248 C ONCE AGAIN, IF AN (IZ,IA) PAIR IS OUTSIDE OF THE RANGE OF |
---|
2959 | // 2249 C VALIDITY OF THE FIT, THE BARRIER VALUE IS SET TO 0.0 AND A |
---|
2960 | // 2250 C MESSAGE IS PRINTED. THESE THREE VALUES (BFIS(L=0),L-80, AND |
---|
2961 | // 2251 C L-20) AND THE CONSTRINTS OF BFIS = 0 AND D(BFIS)/DL = 0 AT |
---|
2962 | // 2252 C L = LMAX AND L=0 LEAD TO A FIFTH-ORDER FIT TO BFIS(L) FOR |
---|
2963 | // 2253 C L>L-20. THE FIRST THREE CONSTRAINTS LEAD TO A THIRD-ORDER FIT |
---|
2964 | // 2254 C FOR THE REGION L < L-20. |
---|
2965 | // 2255 C |
---|
2966 | // 2256 C THE GROUND STATE ENERGIES ARE CALCULATED FROM A |
---|
2967 | // 2257 C 120-PARAMETER FIT IN Z, A, AND L TO 214 GROUND-STATE ENERGIES |
---|
2968 | // 2258 C FOR 36 DIFFERENT Z AND A VALUES. |
---|
2969 | // 2259 C (THE RANGE OF Z AND A IS THE SAME AS FOR L-80, L-20, AND |
---|
2970 | // 2260 C L-MAX) |
---|
2971 | // 2261 C |
---|
2972 | // 2262 C THE CALCULATED BARRIERS FROM WHICH THE FITS WERE MADE WERE |
---|
2973 | // 2263 C CALCULATED IN 1983-1984 BY A. J. SIERK OF LOS ALAMOS |
---|
2974 | // 2264 C NATIONAL LABORATORY GROUP T-9, USING YUKAWA-PLUS-EXPONENTIAL |
---|
2975 | // 2265 C G4DOUBLE FOLDED NUCLEAR ENERGY, EXACT COULOMB DIFFUSENESS |
---|
2976 | // 2266 C CORRECTIONS, AND DIFFUSE-MATTER MOMENTS OF INERTIA. |
---|
2977 | // 2267 C THE PARAMETERS OF THE MODEL R-0 = 1.16 FM, AS 21.13 MEV, |
---|
2978 | // 2268 C KAPPA-S = 2.3, A = 0.68 FM. |
---|
2979 | // 2269 C THE DIFFUSENESS OF THE MATTER AND CHARGE DISTRIBUTIONS USED |
---|
2980 | // 2270 C CORRESPONDS TO A SURFACE DIFFUSENESS PARAMETER (DEFINED BY |
---|
2981 | // 2271 C MYERS) OF 0.99 FM. THE CALCULATED BARRIERS FOR L = 0 ARE |
---|
2982 | // 2272 C ACCURATE TO A LITTLE LESS THAN 0.1 MEV; THE OUTPUT FROM |
---|
2983 | // 2273 C THIS SUBROUTINE IS A LITTLE LESS ACCURATE. WORST ERRORS MAY BE |
---|
2984 | // 2274 C AS LARGE AS 0.5 MEV; CHARACTERISTIC UNCERTAINY IS IN THE RANGE |
---|
2985 | // 2275 C OF 0.1-0.2 MEV. THE RMS DEVIATION OF THE GROUND-STATE FIT |
---|
2986 | // 2276 C FROM THE 214 INPUT VALUES IS 0.20 MEV. THE MAXIMUM ERROR |
---|
2987 | // 2277 C OCCURS FOR LIGHT NUCLEI IN THE REGION WHERE THE GROUND STATE |
---|
2988 | // 2278 C IS PROLATE, AND MAY BE GREATER THAN 1.0 MEV FOR VERY NEUTRON |
---|
2989 | // 2279 C DEFICIENT NUCLEI, WITH L NEAR LMAX. FOR MOST NUCLEI LIKELY TO |
---|
2990 | // 2280 C BE ENCOUNTERED IN REAL EXPERIMENTS, THE MAXIMUM ERROR IS |
---|
2991 | // 2281 C CLOSER TO 0.5 MEV, AGAIN FOR LIGHT NUCLEI AND L NEAR LMAX. |
---|
2992 | // 2282 C |
---|
2993 | // 2283 C WRITTEN BY A. J. SIERK, LANL T-9 |
---|
2994 | // 2284 C VERSION 1.0 FEBRUARY, 1984 |
---|
2995 | // 2285 C |
---|
2996 | // 2286 C THE FOLLOWING IS NECESSARY FOR 32-BIT MACHINES LIKE DEC VAX, |
---|
2997 | // 2287 C IBM, ETC |
---|
2998 | |
---|
2999 | G4double pa[7],pz[7],pl[10]; |
---|
3000 | G4double a,z,amin,amax,amin2,amax2,aa,zz,bfis; |
---|
3001 | G4double bfis0,ell,el,egs,el80,el20,elmax,sel80,sel20,x,y,q,qa,qb; |
---|
3002 | G4double aj,ak,a1,a2; |
---|
3003 | |
---|
3004 | G4int i,j,k,m; |
---|
3005 | G4int l; |
---|
3006 | |
---|
3007 | G4double emncof[4][5] = {{-9.01100e+2,-1.40818e+3, 2.77000e+3,-7.06695e+2, 8.89867e+2}, |
---|
3008 | {1.35355e+4,-2.03847e+4, 1.09384e+4,-4.86297e+3,-6.18603e+2}, |
---|
3009 | {-3.26367e+3, 1.62447e+3, 1.36856e+3, 1.31731e+3, 1.53372e+2}, |
---|
3010 | {7.48863e+3,-1.21581e+4, 5.50281e+3,-1.33630e+3, 5.05367e-2}}; |
---|
3011 | |
---|
3012 | G4double elmcof[4][5] = {{1.84542e+3,-5.64002e+3, 5.66730e+3,-3.15150e+3, 9.54160e+2}, |
---|
3013 | {-2.24577e+3, 8.56133e+3,-9.67348e+3, 5.81744e+3,-1.86997e+3}, |
---|
3014 | {2.79772e+3,-8.73073e+3, 9.19706e+3,-4.91900e+3, 1.37283e+3}, |
---|
3015 | {-3.01866e+1, 1.41161e+3,-2.85919e+3, 2.13016e+3,-6.49072e+2}}; |
---|
3016 | |
---|
3017 | G4double emxcof[4][6] = {{9.43596e4,-2.241997e5,2.223237e5,-1.324408e5,4.68922e4,-8.83568e3}, |
---|
3018 | {-1.655827e5,4.062365e5,-4.236128e5,2.66837e5,-9.93242e4,1.90644e4}, |
---|
3019 | {1.705447e5,-4.032e5,3.970312e5,-2.313704e5,7.81147e4,-1.322775e4}, |
---|
3020 | {-9.274555e4,2.278093e5,-2.422225e5,1.55431e5,-5.78742e4,9.97505e3}}; |
---|
3021 | |
---|
3022 | G4double elzcof[7][7] = {{5.11819909e+5,-1.30303186e+6, 1.90119870e+6,-1.20628242e+6, 5.68208488e+5, 5.48346483e+4,-2.45883052e+4}, |
---|
3023 | {-1.13269453e+6, 2.97764590e+6,-4.54326326e+6, 3.00464870e+6, -1.44989274e+6,-1.02026610e+5, 6.27959815e+4}, |
---|
3024 | {1.37543304e+6,-3.65808988e+6, 5.47798999e+6,-3.78109283e+6, 1.84131765e+6, 1.53669695e+4,-6.96817834e+4}, |
---|
3025 | {-8.56559835e+5, 2.48872266e+6,-4.07349128e+6, 3.12835899e+6, -1.62394090e+6, 1.19797378e+5, 4.25737058e+4}, |
---|
3026 | {3.28723311e+5,-1.09892175e+6, 2.03997269e+6,-1.77185718e+6, 9.96051545e+5,-1.53305699e+5,-1.12982954e+4}, |
---|
3027 | {4.15850238e+4, 7.29653408e+4,-4.93776346e+5, 6.01254680e+5, -4.01308292e+5, 9.65968391e+4,-3.49596027e+3}, |
---|
3028 | {-1.82751044e+5, 3.91386300e+5,-3.03639248e+5, 1.15782417e+5, -4.24399280e+3,-6.11477247e+3, 3.66982647e+2}}; |
---|
3029 | |
---|
3030 | const G4int sizex = 5; |
---|
3031 | const G4int sizey = 6; |
---|
3032 | const G4int sizez = 4; |
---|
3033 | |
---|
3034 | G4double egscof[sizey][sizey][sizez]; |
---|
3035 | |
---|
3036 | G4double egs1[sizey][sizex] = {{1.927813e5, 7.666859e5, 6.628436e5, 1.586504e5,-7.786476e3}, |
---|
3037 | {-4.499687e5,-1.784644e6,-1.546968e6,-4.020658e5,-3.929522e3}, |
---|
3038 | {4.667741e5, 1.849838e6, 1.641313e6, 5.229787e5, 5.928137e4}, |
---|
3039 | {-3.017927e5,-1.206483e6,-1.124685e6,-4.478641e5,-8.682323e4}, |
---|
3040 | {1.226517e5, 5.015667e5, 5.032605e5, 2.404477e5, 5.603301e4}, |
---|
3041 | {-1.752824e4,-7.411621e4,-7.989019e4,-4.175486e4,-1.024194e4}}; |
---|
3042 | |
---|
3043 | G4double egs2[sizey][sizex] = {{-6.459162e5,-2.903581e6,-3.048551e6,-1.004411e6,-6.558220e4}, |
---|
3044 | {1.469853e6, 6.564615e6, 6.843078e6, 2.280839e6, 1.802023e5}, |
---|
3045 | {-1.435116e6,-6.322470e6,-6.531834e6,-2.298744e6,-2.639612e5}, |
---|
3046 | {8.665296e5, 3.769159e6, 3.899685e6, 1.520520e6, 2.498728e5}, |
---|
3047 | {-3.302885e5,-1.429313e6,-1.512075e6,-6.744828e5,-1.398771e5}, |
---|
3048 | {4.958167e4, 2.178202e5, 2.400617e5, 1.167815e5, 2.663901e4}}; |
---|
3049 | |
---|
3050 | G4double egs3[sizey][sizex] = {{3.117030e5, 1.195474e6, 9.036289e5, 6.876190e4,-6.814556e4}, |
---|
3051 | {-7.394913e5,-2.826468e6,-2.152757e6,-2.459553e5, 1.101414e5}, |
---|
3052 | {7.918994e5, 3.030439e6, 2.412611e6, 5.228065e5, 8.542465e3}, |
---|
3053 | {-5.421004e5,-2.102672e6,-1.813959e6,-6.251700e5,-1.184348e5}, |
---|
3054 | {2.370771e5, 9.459043e5, 9.026235e5, 4.116799e5, 1.001348e5}, |
---|
3055 | {-4.227664e4,-1.738756e5,-1.795906e5,-9.292141e4,-2.397528e4}}; |
---|
3056 | |
---|
3057 | G4double egs4[sizey][sizex] = {{-1.072763e5,-5.973532e5,-6.151814e5, 7.371898e4, 1.255490e5}, |
---|
3058 | {2.298769e5, 1.265001e6, 1.252798e6,-2.306276e5,-2.845824e5}, |
---|
3059 | {-2.093664e5,-1.100874e6,-1.009313e6, 2.705945e5, 2.506562e5}, |
---|
3060 | {1.274613e5, 6.190307e5, 5.262822e5,-1.336039e5,-1.115865e5}, |
---|
3061 | {-5.715764e4,-2.560989e5,-2.228781e5,-3.222789e3, 1.575670e4}, |
---|
3062 | {1.189447e4, 5.161815e4, 4.870290e4, 1.266808e4, 2.069603e3}}; |
---|
3063 | |
---|
3064 | for(i = 0; i < sizey; i++) { |
---|
3065 | for(j = 0; j < sizex; j++) { |
---|
3066 | // egscof[i][j][0] = egs1[i][j]; |
---|
3067 | // egscof[i][j][1] = egs2[i][j]; |
---|
3068 | // egscof[i][j][2] = egs3[i][j]; |
---|
3069 | // egscof[i][j][3] = egs4[i][j]; |
---|
3070 | egscof[i][j][0] = egs1[i][j]; |
---|
3071 | egscof[i][j][1] = egs2[i][j]; |
---|
3072 | egscof[i][j][2] = egs3[i][j]; |
---|
3073 | egscof[i][j][3] = egs4[i][j]; |
---|
3074 | } |
---|
3075 | } |
---|
3076 | |
---|
3077 | // the program starts here |
---|
3078 | if (iz < 19 || iz > 111) { |
---|
3079 | goto barfit900; |
---|
3080 | } |
---|
3081 | |
---|
3082 | if(iz > 102 && il > 0) { |
---|
3083 | goto barfit902; |
---|
3084 | } |
---|
3085 | |
---|
3086 | z=double(iz); |
---|
3087 | a=double(ia); |
---|
3088 | el=double(il); |
---|
3089 | amin= 1.2e0*z + 0.01e0*z*z; |
---|
3090 | amax= 5.8e0*z - 0.024e0*z*z; |
---|
3091 | |
---|
3092 | if(a < amin || a > amax) { |
---|
3093 | goto barfit910; |
---|
3094 | } |
---|
3095 | |
---|
3096 | // angul.mom.zero barrier |
---|
3097 | aa=2.5e-3*a; |
---|
3098 | zz=1.0e-2*z; |
---|
3099 | ell=1.0e-2*el; |
---|
3100 | bfis0 = 0.0; |
---|
3101 | lpoly(zz,7,pz); |
---|
3102 | lpoly(aa,7,pa); |
---|
3103 | |
---|
3104 | for(i = 0; i < 7; i++) { //do 10 i=1,7 |
---|
3105 | for(j = 0; j < 7; j++) { //do 10 j=1,7 |
---|
3106 | bfis0=bfis0+elzcof[j][i]*pz[i]*pa[j]; |
---|
3107 | //bfis0=bfis0+elzcof[i][j]*pz[j]*pa[i]; |
---|
3108 | } |
---|
3109 | } |
---|
3110 | |
---|
3111 | bfis=bfis0; |
---|
3112 | // assert(isnan(bfis) == false); |
---|
3113 | |
---|
3114 | (*sbfis)=bfis; |
---|
3115 | egs=0.0; |
---|
3116 | (*segs)=egs; |
---|
3117 | |
---|
3118 | // values of l at which the barrier |
---|
3119 | // is 20%(el20) and 80%(el80) of l=0 value |
---|
3120 | amin2 = 1.4e0*z + 0.009e0*z*z; |
---|
3121 | amax2 = 20.e0 + 3.0e0*z; |
---|
3122 | |
---|
3123 | if((a < amin2-5.e0 || a > amax2+10.e0) && il > 0) { |
---|
3124 | goto barfit920; |
---|
3125 | } |
---|
3126 | |
---|
3127 | lpoly(zz,5,pz); |
---|
3128 | lpoly(aa,4,pa); |
---|
3129 | el80=0.0; |
---|
3130 | el20=0.0; |
---|
3131 | elmax=0.0; |
---|
3132 | |
---|
3133 | for(i = 0; i < 4; i++) { |
---|
3134 | for(j = 0; j < 5; j++) { |
---|
3135 | // el80 = el80 + elmcof[j][i]*pz[j]*pa[i]; |
---|
3136 | // el20 = el20 + emncof[j][i]*pz[j]*pa[i]; |
---|
3137 | el80 = el80 + elmcof[i][j]*pz[j]*pa[i]; |
---|
3138 | el20 = el20 + emncof[i][j]*pz[j]*pa[i]; |
---|
3139 | } |
---|
3140 | } |
---|
3141 | |
---|
3142 | sel80 = el80; |
---|
3143 | sel20 = el20; |
---|
3144 | |
---|
3145 | // value of l (elmax) where barrier disapp. |
---|
3146 | lpoly(zz,6,pz); |
---|
3147 | lpoly(ell,9,pl); |
---|
3148 | |
---|
3149 | for(i = 0; i < 4; i++) { //do 30 i= 1,4 |
---|
3150 | for(j = 0; j < 6; j++) { //do 30 j=1,6 |
---|
3151 | //elmax = elmax + emxcof[j][i]*pz[j]*pa[i]; |
---|
3152 | // elmax = elmax + emxcof[j][i]*pz[i]*pa[j]; |
---|
3153 | elmax = elmax + emxcof[i][j]*pz[j]*pa[i]; |
---|
3154 | } |
---|
3155 | } |
---|
3156 | |
---|
3157 | // assert(isnan(elmax) == false); |
---|
3158 | (*selmax)=elmax; |
---|
3159 | |
---|
3160 | // value of barrier at ang.mom. l |
---|
3161 | if(il < 1){ |
---|
3162 | return; |
---|
3163 | } |
---|
3164 | |
---|
3165 | x = sel20/(*selmax); |
---|
3166 | // assert(isnan(x) == false); |
---|
3167 | y = sel80/(*selmax); |
---|
3168 | // assert(isnan(y) == false); |
---|
3169 | |
---|
3170 | if(el <= sel20) { |
---|
3171 | // low l |
---|
3172 | q = 0.2/(std::pow(sel20,2)*std::pow(sel80,2)*(sel20-sel80)); |
---|
3173 | qa = q*(4.0*std::pow(sel80,3) - std::pow(sel20,3)); |
---|
3174 | qb = -q*(4.0*std::pow(sel80,2) - std::pow(sel20,2)); |
---|
3175 | bfis = bfis*(1.0 + qa*std::pow(el,2) + qb*std::pow(el,3)); |
---|
3176 | } |
---|
3177 | else { |
---|
3178 | // high l |
---|
3179 | aj = (-20.0*std::pow(x,5) + 25.e0*std::pow(x,4) - 4.0)*std::pow((y-1.0),2)*y*y; |
---|
3180 | ak = (-20.0*std::pow(y,5) + 25.0*std::pow(y,4) - 1.0) * std::pow((x-1.0),2)*x*x; |
---|
3181 | q = 0.2/(std::pow((y-x)*((1.0-x)*(1.0-y)*x*y),2)); |
---|
3182 | qa = q*(aj*y - ak*x); |
---|
3183 | qb = -q*(aj*(2.0*y + 1.0) - ak*(2.0*x + 1.0)); |
---|
3184 | z = el/(*selmax); |
---|
3185 | a1 = 4.0*std::pow(z,5) - 5.0*std::pow(z,4) + 1.0; |
---|
3186 | a2 = qa*(2.e0*z + 1.e0); |
---|
3187 | bfis=bfis*(a1 + (z - 1.e0)*(a2 + qb*z)*z*z*(z - 1.e0)); |
---|
3188 | } |
---|
3189 | |
---|
3190 | if(bfis <= 0.0) { |
---|
3191 | bfis=0.0; |
---|
3192 | } |
---|
3193 | |
---|
3194 | if(el > (*selmax)) { |
---|
3195 | bfis=0.0; |
---|
3196 | } |
---|
3197 | (*sbfis)=bfis; |
---|
3198 | |
---|
3199 | // now calculate rotating ground state energy |
---|
3200 | if(el > (*selmax)) { |
---|
3201 | return; |
---|
3202 | } |
---|
3203 | |
---|
3204 | for(k = 0; k < 4; k++) { |
---|
3205 | for(l = 0; l < 6; l++) { |
---|
3206 | for(m = 0; m < 5; m++) { |
---|
3207 | //egs = egs + egscof[l][m][k]*pz[l]*pa[k]*pl[2*m-1]; |
---|
3208 | egs = egs + egscof[l][m][k]*pz[l]*pa[k]*pl[2*m]; |
---|
3209 | // egs = egs + egscof[m][l][k]*pz[l]*pa[k]*pl[2*m-1]; |
---|
3210 | } |
---|
3211 | } |
---|
3212 | } |
---|
3213 | |
---|
3214 | (*segs)=egs; |
---|
3215 | if((*segs) < 0.0) { |
---|
3216 | (*segs)=0.0; |
---|
3217 | } |
---|
3218 | |
---|
3219 | return; |
---|
3220 | |
---|
3221 | barfit900: //continue |
---|
3222 | (*sbfis)=0.0; |
---|
3223 | // for z<19 sbfis set to 1.0e3 |
---|
3224 | if (iz < 19) { |
---|
3225 | (*sbfis) = 1.0e3; |
---|
3226 | } |
---|
3227 | (*segs)=0.0; |
---|
3228 | (*selmax)=0.0; |
---|
3229 | return; |
---|
3230 | |
---|
3231 | barfit902: |
---|
3232 | (*sbfis)=0.0; |
---|
3233 | (*segs)=0.0; |
---|
3234 | (*selmax)=0.0; |
---|
3235 | return; |
---|
3236 | |
---|
3237 | barfit910: |
---|
3238 | (*sbfis)=0.0; |
---|
3239 | (*segs)=0.0; |
---|
3240 | (*selmax)=0.0; |
---|
3241 | return; |
---|
3242 | |
---|
3243 | barfit920: |
---|
3244 | (*sbfis)=0.0; |
---|
3245 | (*segs)=0.0; |
---|
3246 | (*selmax)=0.0; |
---|
3247 | return; |
---|
3248 | } |
---|
3249 | |
---|
3250 | G4double G4Abla::expohaz(G4int k, G4double T) |
---|
3251 | { |
---|
3252 | // TIRAGE ALEATOIRE DANS UNE EXPONENTIELLLE : Y=EXP(-X/T) |
---|
3253 | |
---|
3254 | // assert(isnan((-1*T*std::log(haz(k)))) == false); |
---|
3255 | return (-1.0*T*std::log(haz(k))); |
---|
3256 | } |
---|
3257 | |
---|
3258 | G4double G4Abla::fd(G4double E) |
---|
3259 | { |
---|
3260 | // DISTRIBUTION DE MAXWELL |
---|
3261 | |
---|
3262 | return (E*std::exp(-E)); |
---|
3263 | } |
---|
3264 | |
---|
3265 | G4double G4Abla::f(G4double E) |
---|
3266 | { |
---|
3267 | // FONCTION INTEGRALE DE FD(E) |
---|
3268 | return (1.0 - (E + 1.0) * std::exp(-E)); |
---|
3269 | } |
---|
3270 | |
---|
3271 | G4double G4Abla::fmaxhaz(G4double T) |
---|
3272 | { |
---|
3273 | // tirage aleatoire dans une maxwellienne |
---|
3274 | // t : temperature |
---|
3275 | // |
---|
3276 | // declaration des variables |
---|
3277 | // |
---|
3278 | |
---|
3279 | const int pSize = 101; |
---|
3280 | static G4double p[pSize]; |
---|
3281 | |
---|
3282 | // ial generateur pour le cascade (et les iy pour eviter les correlations) |
---|
3283 | static G4int i; |
---|
3284 | static G4int itest = 0; |
---|
3285 | // programme principal |
---|
3286 | |
---|
3287 | // calcul des p(i) par approximation de newton |
---|
3288 | p[pSize-1] = 8.0; |
---|
3289 | G4double x = 0.1; |
---|
3290 | G4double x1; |
---|
3291 | G4double y; |
---|
3292 | |
---|
3293 | if (itest == 1) { |
---|
3294 | goto fmaxhaz120; |
---|
3295 | } |
---|
3296 | |
---|
3297 | for(i = 1; i <= 99; i++) { |
---|
3298 | fmaxhaz20: |
---|
3299 | x1 = x - (f(x) - double(i)/100.0)/fd(x); |
---|
3300 | x = x1; |
---|
3301 | if (std::fabs(f(x) - double(i)/100.0) < 1e-5) { |
---|
3302 | goto fmaxhaz100; |
---|
3303 | } |
---|
3304 | goto fmaxhaz20; |
---|
3305 | fmaxhaz100: |
---|
3306 | p[i] = x; |
---|
3307 | } //end do |
---|
3308 | |
---|
3309 | // itest = 1; |
---|
3310 | itest = 0; |
---|
3311 | // tirage aleatoire et calcul du x correspondant |
---|
3312 | // par regression lineaire |
---|
3313 | fmaxhaz120: |
---|
3314 | standardRandom(&y, &(hazard->igraine[17])); |
---|
3315 | i = nint(y*100); |
---|
3316 | |
---|
3317 | // 2590 c ici on evite froidement les depassements de tableaux....(a.b. 3/9/99) |
---|
3318 | if(i == 0) { |
---|
3319 | goto fmaxhaz120; |
---|
3320 | } |
---|
3321 | |
---|
3322 | if (i == 1) { |
---|
3323 | x = p[i]*y*100; |
---|
3324 | } |
---|
3325 | else { |
---|
3326 | x = (p[i] - p[i-1])*(y*100 - i) + p[i]; |
---|
3327 | } |
---|
3328 | |
---|
3329 | return(x*T); |
---|
3330 | } |
---|
3331 | |
---|
3332 | G4double G4Abla::pace2(G4double a, G4double z) |
---|
3333 | { |
---|
3334 | // PACE2 |
---|
3335 | // Cette fonction retourne le defaut de masse du noyau A,Z en MeV |
---|
3336 | // Révisée pour a, z flottants 25/4/2002 = |
---|
3337 | |
---|
3338 | G4double pace2; |
---|
3339 | |
---|
3340 | G4int ii = idint(a+0.5); |
---|
3341 | G4int jj = idint(z+0.5); |
---|
3342 | |
---|
3343 | if(ii <= 0 || jj < 0) { |
---|
3344 | pace2=0.; |
---|
3345 | return pace2; |
---|
3346 | } |
---|
3347 | |
---|
3348 | if(jj > 300) { |
---|
3349 | pace2=0.0; |
---|
3350 | } |
---|
3351 | else { |
---|
3352 | pace2=pace->dm[ii][jj]; |
---|
3353 | } |
---|
3354 | pace2=pace2/1000.; |
---|
3355 | |
---|
3356 | if(pace->dm[ii][jj] == 0.) { |
---|
3357 | if(ii < 12) { |
---|
3358 | pace2=-500.; |
---|
3359 | } |
---|
3360 | else { |
---|
3361 | guet(&a, &z, &pace2); |
---|
3362 | pace2=pace2-ii*931.5; |
---|
3363 | pace2=pace2/1000.; |
---|
3364 | } |
---|
3365 | } |
---|
3366 | |
---|
3367 | return pace2; |
---|
3368 | } |
---|
3369 | |
---|
3370 | void G4Abla::guet(G4double *x_par, G4double *z_par, G4double *find_par) |
---|
3371 | { |
---|
3372 | // TABLE DE MASSES ET FORMULE DE MASSE TIRE DU PAPIER DE BRACK-GUET |
---|
3373 | // Gives the theoritical value for mass excess... |
---|
3374 | // Révisée pour x, z flottants 25/4/2002 |
---|
3375 | |
---|
3376 | //real*8 x,z |
---|
3377 | // dimension q(0:50,0:70) |
---|
3378 | G4double x = (*x_par); |
---|
3379 | G4double z = (*z_par); |
---|
3380 | G4double find = (*find_par); |
---|
3381 | |
---|
3382 | const G4int qrows = 50; |
---|
3383 | const G4int qcols = 70; |
---|
3384 | G4double q[qrows][qcols]; |
---|
3385 | |
---|
3386 | G4int ix=G4int(std::floor(x+0.5)); |
---|
3387 | G4int iz=G4int(std::floor(z+0.5)); |
---|
3388 | G4double zz = iz; |
---|
3389 | G4double xx = ix; |
---|
3390 | find = 0.0; |
---|
3391 | G4double avol = 15.776; |
---|
3392 | G4double asur = -17.22; |
---|
3393 | G4double ac = -10.24; |
---|
3394 | G4double azer = 8.0; |
---|
3395 | G4double xjj = -30.03; |
---|
3396 | G4double qq = -35.4; |
---|
3397 | G4double c1 = -0.737; |
---|
3398 | G4double c2 = 1.28; |
---|
3399 | |
---|
3400 | if(ix <= 7) { |
---|
3401 | q[0][1]=939.50; |
---|
3402 | q[1][1]=938.21; |
---|
3403 | q[1][2]=1876.1; |
---|
3404 | q[1][3]=2809.39; |
---|
3405 | q[2][4]=3728.34; |
---|
3406 | q[2][3]=2809.4; |
---|
3407 | q[2][5]=4668.8; |
---|
3408 | q[2][6]=5606.5; |
---|
3409 | q[3][5]=4669.1; |
---|
3410 | q[3][6]=5602.9; |
---|
3411 | q[3][7]=6535.27; |
---|
3412 | q[4][6]=5607.3; |
---|
3413 | q[4][7]=6536.1; |
---|
3414 | q[5][7]=6548.3; |
---|
3415 | find=q[iz][ix]; |
---|
3416 | } |
---|
3417 | else { |
---|
3418 | G4double xneu=xx-zz; |
---|
3419 | G4double si=(xneu-zz)/xx; |
---|
3420 | G4double x13=std::pow(xx,.333); |
---|
3421 | G4double ee1=c1*zz*zz/x13; |
---|
3422 | G4double ee2=c2*zz*zz/xx; |
---|
3423 | G4double aux=1.+(9.*xjj/4./qq/x13); |
---|
3424 | G4double ee3=xjj*xx*si*si/aux; |
---|
3425 | G4double ee4=avol*xx+asur*(std::pow(xx,.666))+ac*x13+azer; |
---|
3426 | G4double tota = ee1 + ee2 + ee3 + ee4; |
---|
3427 | find = 939.55*xneu+938.77*zz - tota; |
---|
3428 | } |
---|
3429 | |
---|
3430 | (*x_par) = x; |
---|
3431 | (*z_par) = z; |
---|
3432 | (*find_par) = find; |
---|
3433 | } |
---|
3434 | |
---|
3435 | |
---|
3436 | // Fission code |
---|
3437 | |
---|
3438 | void G4Abla::even_odd(G4double r_origin,G4double r_even_odd,G4int &i_out) |
---|
3439 | { |
---|
3440 | // Procedure to calculate I_OUT from R_IN in a way that |
---|
3441 | // on the average a flat distribution in R_IN results in a |
---|
3442 | // fluctuating distribution in I_OUT with an even-odd effect as |
---|
3443 | // given by R_EVEN_ODD |
---|
3444 | |
---|
3445 | // /* ------------------------------------------------------------ */ |
---|
3446 | // /* EXAMPLES : */ |
---|
3447 | // /* ------------------------------------------------------------ */ |
---|
3448 | // /* If R_EVEN_ODD = 0 : */ |
---|
3449 | // /* CEIL(R_IN) ---- */ |
---|
3450 | // /* */ |
---|
3451 | // /* R_IN -> */ |
---|
3452 | // /* (somewhere in between CEIL(R_IN) and FLOOR(R_IN)) */ */ |
---|
3453 | // /* */ |
---|
3454 | // /* FLOOR(R_IN) ---- --> I_OUT */ |
---|
3455 | // /* ------------------------------------------------------------ */ |
---|
3456 | // /* If R_EVEN_ODD > 0 : */ |
---|
3457 | // /* The interval for the above treatment is */ |
---|
3458 | // /* larger for FLOOR(R_IN) = even and */ |
---|
3459 | // /* smaller for FLOOR(R_IN) = odd */ |
---|
3460 | // /* For R_EVEN_ODD < 0 : just opposite treatment */ |
---|
3461 | // /* ------------------------------------------------------------ */ |
---|
3462 | |
---|
3463 | // /* ------------------------------------------------------------ */ |
---|
3464 | // /* On input: R_ORIGIN nuclear charge (real number) */ |
---|
3465 | // /* R_EVEN_ODD requested even-odd effect */ |
---|
3466 | // /* Intermediate quantity: R_IN = R_ORIGIN + 0.5 */ |
---|
3467 | // /* On output: I_OUT nuclear charge (integer) */ |
---|
3468 | // /* ------------------------------------------------------------ */ |
---|
3469 | |
---|
3470 | // G4double R_ORIGIN,R_IN,R_EVEN_ODD,R_REST,R_HELP; |
---|
3471 | G4double r_in,r_rest,r_help; |
---|
3472 | G4double r_floor; |
---|
3473 | G4double r_middle; |
---|
3474 | // G4int I_OUT,N_FLOOR; |
---|
3475 | G4int n_floor; |
---|
3476 | |
---|
3477 | r_in = r_origin + 0.5; |
---|
3478 | r_floor = (float)((int)(r_in)); |
---|
3479 | if (r_even_odd < 0.001) { |
---|
3480 | i_out = (int)(r_floor); |
---|
3481 | } |
---|
3482 | else { |
---|
3483 | r_rest = r_in - r_floor; |
---|
3484 | r_middle = r_floor + 0.5; |
---|
3485 | n_floor = (int)(r_floor); |
---|
3486 | if (n_floor%2 == 0) { |
---|
3487 | // even before modif. |
---|
3488 | r_help = r_middle + (r_rest - 0.5) * (1.0 - r_even_odd); |
---|
3489 | } |
---|
3490 | else { |
---|
3491 | // odd before modification |
---|
3492 | r_help = r_middle + (r_rest - 0.5) * (1.0 + r_even_odd); |
---|
3493 | } |
---|
3494 | i_out = (int)(r_help); |
---|
3495 | } |
---|
3496 | } |
---|
3497 | |
---|
3498 | G4double G4Abla::umass(G4double z,G4double n,G4double beta) |
---|
3499 | { |
---|
3500 | // liquid-drop mass, Myers & Swiatecki, Lysekil, 1967 |
---|
3501 | // pure liquid drop, without pairing and shell effects |
---|
3502 | |
---|
3503 | // On input: Z nuclear charge of nucleus |
---|
3504 | // N number of neutrons in nucleus |
---|
3505 | // beta deformation of nucleus |
---|
3506 | // On output: binding energy of nucleus |
---|
3507 | |
---|
3508 | G4double a,umass; |
---|
3509 | G4double alpha; |
---|
3510 | G4double xcom,xvs,xe; |
---|
3511 | const G4double pi = 3.1416; |
---|
3512 | |
---|
3513 | a = n + z; |
---|
3514 | alpha = ( std::sqrt(5.0/(4.0*pi)) ) * beta; |
---|
3515 | // assert(isnan(alpha) == false); |
---|
3516 | |
---|
3517 | xcom = 1.0 - 1.7826 * ((a - 2.0*z)/a)*((a - 2.0*z)/a); |
---|
3518 | // assert(isnan(xcom) == false); |
---|
3519 | // factor for asymmetry dependence of surface and volume term |
---|
3520 | xvs = - xcom * ( 15.4941 * a - |
---|
3521 | 17.9439 * std::pow(a,0.66667) * (1.0+0.4*alpha*alpha) ); |
---|
3522 | // sum of volume and surface energy |
---|
3523 | xe = z*z * (0.7053/(std::pow(a,0.33333)) * (1.0-0.2*alpha*alpha) - 1.1529/a); |
---|
3524 | // assert(isnan(xe) == false); |
---|
3525 | umass = xvs + xe; |
---|
3526 | |
---|
3527 | return umass; |
---|
3528 | } |
---|
3529 | |
---|
3530 | G4double G4Abla::ecoul(G4double z1,G4double n1,G4double beta1,G4double z2,G4double n2,G4double beta2,G4double d) |
---|
3531 | { |
---|
3532 | // Coulomb potential between two nuclei |
---|
3533 | // surfaces are in a distance of d |
---|
3534 | // in a tip to tip configuration |
---|
3535 | |
---|
3536 | // approximate formulation |
---|
3537 | // On input: Z1 nuclear charge of first nucleus |
---|
3538 | // N1 number of neutrons in first nucleus |
---|
3539 | // beta1 deformation of first nucleus |
---|
3540 | // Z2 nuclear charge of second nucleus |
---|
3541 | // N2 number of neutrons in second nucleus |
---|
3542 | // beta2 deformation of second nucleus |
---|
3543 | // d distance of surfaces of the nuclei |
---|
3544 | |
---|
3545 | // G4double Z1,N1,beta1,Z2,N2,beta2,d,ecoul; |
---|
3546 | G4double ecoul; |
---|
3547 | G4double dtot; |
---|
3548 | const G4double r0 = 1.16; |
---|
3549 | |
---|
3550 | dtot = r0 * ( std::pow((z1+n1),0.33333) * (1.0+(2.0/3.0)*beta1) |
---|
3551 | + std::pow((z2+n2),0.33333) * (1.0+(2.0/3.0)*beta2) ) + d; |
---|
3552 | ecoul = z1 * z2 * 1.44 / dtot; |
---|
3553 | |
---|
3554 | // assert(isnan(ecoul) == false); |
---|
3555 | return ecoul; |
---|
3556 | } |
---|
3557 | |
---|
3558 | void G4Abla::fissionDistri(G4double &a,G4double &z,G4double &e, |
---|
3559 | G4double &a1,G4double &z1,G4double &e1,G4double &v1, |
---|
3560 | G4double &a2,G4double &z2,G4double &e2,G4double &v2) |
---|
3561 | { |
---|
3562 | // On input: A, Z, E (mass, atomic number and exc. energy of compound nucleus |
---|
3563 | // before fission) |
---|
3564 | // On output: Ai, Zi, Ei (mass, atomic number and exc. energy of fragment 1 and 2 |
---|
3565 | // after fission) |
---|
3566 | |
---|
3567 | // Additionally calculated but not put in the parameter list: |
---|
3568 | // Kinetic energy of prefragments EkinR1, EkinR2 |
---|
3569 | |
---|
3570 | // Translation of SIMFIS18.PLI (KHS, 2.1.2001) |
---|
3571 | |
---|
3572 | // This program calculates isotopic distributions of fission fragments |
---|
3573 | // with a semiempirical model |
---|
3574 | // Copy from SIMFIS3, KHS, 8. February 1995 |
---|
3575 | // Modifications made by Jose Benlliure and KHS in August 1996 |
---|
3576 | // Energy counted from lowest barrier (J. Benlliure, KHS 1997) |
---|
3577 | // Some bugs corrected (J. Benlliure, KHS 1997) |
---|
3578 | // Version used for thesis S. Steinhaueser (August 1997) |
---|
3579 | // (Curvature of LD potential increased by factor of 2!) |
---|
3580 | |
---|
3581 | // Weiter veraendert mit der Absicht, eine Version zu erhalten, die |
---|
3582 | // derjenigen entspricht, die von J. Benlliure et al. |
---|
3583 | // in Nucl. Phys. A 628 (1998) 458 verwendet wurde, |
---|
3584 | // allerdings ohne volle Neutronenabdampfung. |
---|
3585 | |
---|
3586 | // The excitation energy was calculate now for each fission channel |
---|
3587 | // separately. The dissipation from saddle to scission was taken from |
---|
3588 | // systematics, the deformation energy at scission considers the shell |
---|
3589 | // effects in a simplified way, and the fluctuation is included. |
---|
3590 | // KHS, April 1999 |
---|
3591 | |
---|
3592 | // The width in N/Z was carefully adapted to values given by Lang et al. |
---|
3593 | |
---|
3594 | // The width and eventually a shift in N/Z (polarization) follows the |
---|
3595 | // following rules: |
---|
3596 | |
---|
3597 | // The line N/Z following UCD has an angle of std::atan(Zcn/Ncn) |
---|
3598 | // to the horizontal axis on a chart of nuclides. |
---|
3599 | // (For 238U the angle is 32.2 deg.) |
---|
3600 | |
---|
3601 | // The following relations hold: (from Armbruster) |
---|
3602 | // |
---|
3603 | // sigma(N) (A=const) = sigma(Z) (A=const) |
---|
3604 | // sigma(A) (N=const) = sigma(Z) (N=const) |
---|
3605 | // sigma(A) (Z=const) = sigma(N) (Z=const) |
---|
3606 | // |
---|
3607 | // From this we get: |
---|
3608 | // sigma(Z) (N=const) * N = sigma(N) (Z=const) * Z |
---|
3609 | // sigma(A) (Z=const) = sigma(Z) (A=const) * A/Z |
---|
3610 | // sigma(N) (Z=const) = sigma(Z) (A=const) * A/Z |
---|
3611 | // Z*sigma(N) (Z=const) = N*sigma(Z) (N=const) = A*sigma(Z) (A=const) |
---|
3612 | |
---|
3613 | // Excitation energy now calculated above the lowest potential point |
---|
3614 | // Inclusion of a distribution of excitation energies |
---|
3615 | |
---|
3616 | // Several modifications, starting from SIMFIS12: KHS November 2000 |
---|
3617 | // This version seems to work quite well for 238U. |
---|
3618 | // The transition from symmetric to asymmetric fission around 226Th |
---|
3619 | // is reasonably well reproduced, although St. I is too strong and St. II |
---|
3620 | // is too weak. St. I and St. II are also weakly seen for 208Pb. |
---|
3621 | |
---|
3622 | // Extensions for an event generator of fission events (21.11.2000,KHS) |
---|
3623 | |
---|
3624 | // Defalt parameters (IPARS) rather carefully adjusted to |
---|
3625 | // pre-neutron mass distributions of Vives et al. (238U + n) |
---|
3626 | // Die Parameter Fgamma1 und Fgamma2 sind kleiner als die resultierenden |
---|
3627 | // Breiten der Massenverteilungen!!! |
---|
3628 | // Fgamma1 und Fgamma2 wurden angepaᅵ, so daᅵ |
---|
3629 | // Sigma-A(ST-I) = 3.3, Sigma-A(St-II) = 5.8 (nach Vives) |
---|
3630 | |
---|
3631 | // Parameters of the model carefully adjusted by KHS (2.2.2001) to |
---|
3632 | // 238U + 208Pb, 1000 A MeV, Timo Enqvist et al. |
---|
3633 | |
---|
3634 | |
---|
3635 | G4double n; |
---|
3636 | G4double nlight1,nlight2; |
---|
3637 | G4double aheavy1,alight1,aheavy2,alight2; |
---|
3638 | G4double eheavy1,elight1,eheavy2,elight2; |
---|
3639 | G4double zheavy1_shell,zheavy2_shell; |
---|
3640 | G4double zlight1,zlight2; |
---|
3641 | G4double masscurv; |
---|
3642 | G4double sasymm1,sasymm2,ssymm,ysum,yasymm; |
---|
3643 | G4double ssymm_mode1,ssymm_mode2; |
---|
3644 | G4double cz_asymm1_saddle,cz_asymm2_saddle; |
---|
3645 | // Curvature at saddle, modified by ld-potential |
---|
3646 | G4double wzasymm1_saddle, wzasymm2_saddle, wzsymm_saddle; |
---|
3647 | G4double wzasymm1_scission, wzasymm2_scission, wzsymm_scission; |
---|
3648 | G4double wzasymm1,wzasymm2,wzsymm; |
---|
3649 | G4double nlight1_eff, nlight2_eff; |
---|
3650 | G4int imode = 0; |
---|
3651 | G4double rmode; |
---|
3652 | G4double z1mean = 0.0, z2mean = 0.0, z1width = 0.0, za1width = 0.0; |
---|
3653 | // G4double Z1,Z2,N1R,N2R,A1R,A2R,N1,N2,A1,A2; |
---|
3654 | G4double n1r,n2r,a1r,a2r,n1,n2; |
---|
3655 | |
---|
3656 | G4double zsymm,nsymm,asymm; |
---|
3657 | G4double n1mean = 0.0, n2mean, n1width; |
---|
3658 | G4double dueff; |
---|
3659 | // effective shell effect at lowest barrier |
---|
3660 | G4double eld; |
---|
3661 | // Excitation energy with respect to ld barrier |
---|
3662 | G4double re1,re2,re3; |
---|
3663 | G4double eps1,eps2; |
---|
3664 | G4double n1ucd,n2ucd,z1ucd,z2ucd; |
---|
3665 | G4double beta = 0.0, beta1 = 0.0, beta2 = 0.0; |
---|
3666 | |
---|
3667 | G4double dn1_pol; |
---|
3668 | // shift of most probable neutron number for given Z, |
---|
3669 | // according to polarization |
---|
3670 | G4int i_help; |
---|
3671 | |
---|
3672 | // /* Parameters of the semiempirical fission model */ |
---|
3673 | G4double a_levdens; |
---|
3674 | // /* level-density parameter */ |
---|
3675 | G4double a_levdens_light1,a_levdens_light2; |
---|
3676 | G4double a_levdens_heavy1,a_levdens_heavy2; |
---|
3677 | const G4double r_null = 1.16; |
---|
3678 | // /* radius parameter */ |
---|
3679 | G4double epsilon_1_saddle,epsilon0_1_saddle; |
---|
3680 | G4double epsilon_2_saddle,epsilon0_2_saddle,epsilon_symm_saddle; |
---|
3681 | G4double epsilon_1_scission,epsilon0_1_scission; |
---|
3682 | G4double epsilon_2_scission,epsilon0_2_scission; |
---|
3683 | G4double epsilon_symm_scission; |
---|
3684 | // /* modified energy */ |
---|
3685 | G4double e_eff1_saddle,e_eff2_saddle; |
---|
3686 | G4double epot0_mode1_saddle,epot0_mode2_saddle,epot0_symm_saddle; |
---|
3687 | G4double epot_mode1_saddle,epot_mode2_saddle,epot_symm_saddle; |
---|
3688 | G4double e_defo, e_defo1,e_defo2, e_scission = 0.0, e_asym; |
---|
3689 | G4double e1exc = 0.0, e2exc = 0.0; |
---|
3690 | G4double e1exc_sigma,e2exc_sigma; |
---|
3691 | G4double e1final,e2final; |
---|
3692 | |
---|
3693 | const G4double r0 = 1.16; |
---|
3694 | G4double tker; |
---|
3695 | G4double ekin1,ekin2; |
---|
3696 | // G4double EkinR1,EkinR2,E1,E2,V1,V2; |
---|
3697 | G4double ekinr1,ekinr2; |
---|
3698 | G4int icz,k; |
---|
3699 | |
---|
3700 | // Input parameters: |
---|
3701 | //OMMENT(Nuclear charge number); |
---|
3702 | // G4double Z; |
---|
3703 | //OMMENT(Nuclear mass number); |
---|
3704 | // G4double A; |
---|
3705 | //OMMENT(Excitation energy above fission barrier); |
---|
3706 | // G4double E; |
---|
3707 | |
---|
3708 | // Model parameters: |
---|
3709 | //OMMENT(position of heavy peak valley 1); |
---|
3710 | const G4double nheavy1 = 83.0; |
---|
3711 | //OMMENT(position of heavy peak valley 2); |
---|
3712 | const G4double nheavy2 = 90.0; |
---|
3713 | //OMMENT(Shell effect for valley 1); |
---|
3714 | const G4double delta_u1_shell = -2.65; |
---|
3715 | // Parameter (Delta_U1_shell = -2) |
---|
3716 | //OMMENT(Shell effect for valley 2); |
---|
3717 | const G4double delta_u2_shell = -3.8; |
---|
3718 | // Parameter (Delta_U2_shell = -3.2) |
---|
3719 | //OMMENT(I: used shell effect); |
---|
3720 | G4double delta_u1; |
---|
3721 | //omment(I: used shell effect); |
---|
3722 | G4double delta_u2; |
---|
3723 | //OMMENT(Curvature of asymmetric valley 1); |
---|
3724 | const G4double cz_asymm1_shell = 0.7; |
---|
3725 | //OMMENT(Curvature of asymmetric valley 2); |
---|
3726 | const G4double cz_asymm2_shell = 0.15; |
---|
3727 | //OMMENT(Factor for width of distr. valley 1); |
---|
3728 | const G4double fwidth_asymm1 = 0.63; |
---|
3729 | //OMMENT(Factor for width of distr. valley 2); |
---|
3730 | const G4double fwidth_asymm2 = 0.97; |
---|
3731 | // Parameter (CZ_asymm2_scission = 0.12) |
---|
3732 | //OMMENT(Parameter x: a = A/x); |
---|
3733 | const G4double xlevdens = 12.0; |
---|
3734 | //OMMENT(Factor to gamma_heavy1); |
---|
3735 | const G4double fgamma1 = 2.0; |
---|
3736 | //OMMENT(I: fading of shells (general)); |
---|
3737 | G4double gamma; |
---|
3738 | //OMMENT(I: fading of shell 1); |
---|
3739 | G4double gamma_heavy1; |
---|
3740 | //OMMENT(I: fading of shell 2); |
---|
3741 | G4double gamma_heavy2; |
---|
3742 | //OMMENT(Zero-point energy at saddle); |
---|
3743 | const G4double e_zero_point = 0.5; |
---|
3744 | //OMMENT(I: friction from saddle to scission); |
---|
3745 | G4double e_saddle_scission; |
---|
3746 | //OMMENT(Friction factor); |
---|
3747 | const G4double friction_factor = 1.0; |
---|
3748 | //OMMENT(I: Internal counter for different modes); INIT(0,0,0) |
---|
3749 | // Integer*4 I_MODE(3) |
---|
3750 | //OMMENT(I: Yield of symmetric mode); |
---|
3751 | G4double ysymm = 0.0; |
---|
3752 | //OMMENT(I: Yield of asymmetric mode 1); |
---|
3753 | G4double yasymm1 = 0.0; |
---|
3754 | //OMMENT(I: Yield of asymmetric mode 2); |
---|
3755 | G4double yasymm2 = 0.0; |
---|
3756 | //OMMENT(I: Effective position of valley 1); |
---|
3757 | G4double nheavy1_eff; |
---|
3758 | //OMMENT(I: position of heavy peak valley 1); |
---|
3759 | G4double zheavy1; |
---|
3760 | //omment(I: Effective position of valley 2); |
---|
3761 | G4double nheavy2_eff; |
---|
3762 | //OMMENT(I: position of heavy peak valley 2); |
---|
3763 | G4double zheavy2; |
---|
3764 | //omment(I: Excitation energy above saddle 1); |
---|
3765 | G4double eexc1_saddle; |
---|
3766 | //omment(I: Excitation energy above saddle 2); |
---|
3767 | G4double eexc2_saddle; |
---|
3768 | //omment(I: Excitation energy above lowest saddle); |
---|
3769 | G4double eexc_max; |
---|
3770 | //omment(I: Effective mass mode 1); |
---|
3771 | G4double aheavy1_mean; |
---|
3772 | //omment(I: Effective mass mode 2); |
---|
3773 | G4double aheavy2_mean; |
---|
3774 | //omment(I: Width of symmetric mode); |
---|
3775 | G4double wasymm_saddle; |
---|
3776 | //OMMENT(I: Width of asymmetric mode 1); |
---|
3777 | G4double waheavy1_saddle; |
---|
3778 | //OMMENT(I: Width of asymmetric mode 2); |
---|
3779 | G4double waheavy2_saddle; |
---|
3780 | //omment(I: Width of symmetric mode); |
---|
3781 | G4double wasymm; |
---|
3782 | //OMMENT(I: Width of asymmetric mode 1); |
---|
3783 | G4double waheavy1; |
---|
3784 | //OMMENT(I: Width of asymmetric mode 2); |
---|
3785 | G4double waheavy2; |
---|
3786 | //OMMENT(I: Even-odd effect in Z); |
---|
3787 | G4double r_e_o,r_e_o_exp; |
---|
3788 | //OMMENT(I: Curveture of symmetric valley); |
---|
3789 | G4double cz_symm; |
---|
3790 | //OMMENT(I: Curvature of mass distribution for fixed Z); |
---|
3791 | G4double cn; |
---|
3792 | //OMMENT(I: Curvature of Z distribution for fixed A); |
---|
3793 | G4double cz; |
---|
3794 | //OMMENT(Minimum neutron width for constant Z); |
---|
3795 | const G4double sigzmin = 1.16; |
---|
3796 | //OMMENT(Surface distance of scission configuration); |
---|
3797 | const G4double d = 2.0; |
---|
3798 | |
---|
3799 | // /* Charge polarisation from Wagemanns p. 397: */ |
---|
3800 | //OMMENT(Charge polarisation standard I); |
---|
3801 | const G4double cpol1 = 0.65; |
---|
3802 | //OMMENT(Charge polarisation standard II); |
---|
3803 | const G4double cpol2 = 0.55; |
---|
3804 | //OMMENT(=1: Polarisation simult. in N and Z); |
---|
3805 | const G4int nzpol = 1; |
---|
3806 | //OMMENT(=1: test output, =0: no test output); |
---|
3807 | const G4int itest = 0; |
---|
3808 | |
---|
3809 | // G4double UMASS, ECOUL, reps1, reps2, rn1_pol; |
---|
3810 | G4double reps1, reps2, rn1_pol; |
---|
3811 | // Float_t HAZ,GAUSSHAZ; |
---|
3812 | G4int kkk = 0; |
---|
3813 | // G4int kkk = 10; // PK |
---|
3814 | |
---|
3815 | // I_MODE = 0; |
---|
3816 | |
---|
3817 | if(itest == 1) { |
---|
3818 | G4cout << " cn mass " << a << G4endl; |
---|
3819 | G4cout << " cn charge " << z << G4endl; |
---|
3820 | G4cout << " cn energy " << e << G4endl; |
---|
3821 | } |
---|
3822 | |
---|
3823 | // /* average Z of asymmetric and symmetric components: */ |
---|
3824 | n = a - z; /* neutron number of the fissioning nucleus */ |
---|
3825 | |
---|
3826 | k = 0; |
---|
3827 | icz = 0; |
---|
3828 | if ( (std::pow(z,2)/a < 25.0) || (n < nheavy2) || (e > 500.0) ) { |
---|
3829 | icz = -1; |
---|
3830 | // GOTO 1002; |
---|
3831 | goto milledeux; |
---|
3832 | } |
---|
3833 | |
---|
3834 | nlight1 = n - nheavy1; |
---|
3835 | nlight2 = n - nheavy2; |
---|
3836 | |
---|
3837 | // /* Polarisation assumed for standard I and standard II: |
---|
3838 | // Z - Zucd = cpol (for A = const); |
---|
3839 | // from this we get (see Armbruster) |
---|
3840 | // Z - Zucd = Acn/Ncn * cpol (for N = const) */ |
---|
3841 | |
---|
3842 | zheavy1_shell = ((nheavy1/n) * z) - ((a/n) * cpol1); |
---|
3843 | zheavy2_shell = ((nheavy2/n) * z) - ((a/n) * cpol2); |
---|
3844 | |
---|
3845 | e_saddle_scission = |
---|
3846 | (-24.0 + 0.02227 * (std::pow(z,2))/(std::pow(a,0.33333)) ) * friction_factor; |
---|
3847 | |
---|
3848 | // /* Energy dissipated from saddle to scission */ |
---|
3849 | // /* F. Rejmund et al., Nucl. Phys. A 678 (2000) 215, fig. 4 b */ |
---|
3850 | // E_saddle_scission = DMAX1(0.,E_saddle_scission); |
---|
3851 | if (e_saddle_scission > 0.) { |
---|
3852 | e_saddle_scission = e_saddle_scission; |
---|
3853 | } |
---|
3854 | else { |
---|
3855 | e_saddle_scission = 0.; |
---|
3856 | } |
---|
3857 | // /* Semiempirical fission model: */ |
---|
3858 | |
---|
3859 | // /* Fit to experimental result on curvature of potential at saddle */ |
---|
3860 | // /* reference: */ |
---|
3861 | // /* IF Z**2/A < 33.15E0 THEN |
---|
3862 | // MassCurv = 30.5438538E0 - 4.00212049E0 * Z**2/A |
---|
3863 | // + 0.11983384E0 * Z**4 / (A**2) ; |
---|
3864 | // ELSE |
---|
3865 | // MassCurv = 10.E0 ** (7.16993332E0 - 0.26602401E0 * Z**2/A |
---|
3866 | // + 0.00283802E0 * Z**4 / (A**2)) ; */ |
---|
3867 | // /* New parametrization of T. Enqvist according to Mulgin et al. 1998 */ |
---|
3868 | if ( (std::pow(z,2))/a < 34.0) { |
---|
3869 | masscurv = std::pow( 10.0,(-1.093364 + 0.082933 * (std::pow(z,2)/a) |
---|
3870 | - 0.0002602 * (std::pow(z,4)/std::pow(a,2))) ); |
---|
3871 | } else { |
---|
3872 | masscurv = std::pow( 10.0,(3.053536 - 0.056477 * (std::pow(z,2)/a) |
---|
3873 | + 0.0002454 * (std::pow(z,4)/std::pow(a,2))) ); |
---|
3874 | } |
---|
3875 | |
---|
3876 | cz_symm = (8.0/std::pow(z,2)) * masscurv; |
---|
3877 | |
---|
3878 | if(itest == 1) { |
---|
3879 | G4cout << "cz_symmetry= " << cz_symm << G4endl; |
---|
3880 | } |
---|
3881 | |
---|
3882 | if (cz_symm < 0) { |
---|
3883 | icz = -1; |
---|
3884 | // GOTO 1002; |
---|
3885 | goto milledeux; |
---|
3886 | } |
---|
3887 | |
---|
3888 | // /* proton number in symmetric fission (centre) */ |
---|
3889 | zsymm = z/2.0; |
---|
3890 | nsymm = n/2.0; |
---|
3891 | asymm = nsymm + zsymm; |
---|
3892 | |
---|
3893 | zheavy1 = (cz_symm*zsymm + cz_asymm1_shell*zheavy1_shell)/(cz_symm + cz_asymm1_shell); |
---|
3894 | zheavy2 = (cz_symm*zsymm + cz_asymm2_shell*zheavy2_shell)/(cz_symm + cz_asymm2_shell); |
---|
3895 | // /* position of valley due to influence of liquid-drop potential */ |
---|
3896 | nheavy1_eff = (zheavy1 + (a/n * cpol1))*(n/z); |
---|
3897 | nheavy2_eff = (zheavy2 + (a/n * cpol2))*(n/z); |
---|
3898 | nlight1_eff = n - nheavy1_eff; |
---|
3899 | nlight2_eff = n - nheavy2_eff; |
---|
3900 | // /* proton number of light fragments (centre) */ |
---|
3901 | zlight1 = z - zheavy1; |
---|
3902 | // /* proton number of light fragments (centre) */ |
---|
3903 | zlight2 = z - zheavy2; |
---|
3904 | aheavy1 = nheavy1_eff + zheavy1; |
---|
3905 | aheavy2 = nheavy2_eff + zheavy2; |
---|
3906 | aheavy1_mean = aheavy1; |
---|
3907 | aheavy2_mean = aheavy2; |
---|
3908 | alight1 = nlight1_eff + zlight1; |
---|
3909 | alight2 = nlight2_eff + zlight2; |
---|
3910 | |
---|
3911 | a_levdens = a / xlevdens; |
---|
3912 | a_levdens_heavy1 = aheavy1 / xlevdens; |
---|
3913 | a_levdens_heavy2 = aheavy2 / xlevdens; |
---|
3914 | a_levdens_light1 = alight1 / xlevdens; |
---|
3915 | a_levdens_light2 = alight2 / xlevdens; |
---|
3916 | gamma = a_levdens / (0.4 * (std::pow(a,1.3333)) ); |
---|
3917 | gamma_heavy1 = ( a_levdens_heavy1 / (0.4 * (std::pow(aheavy1,1.3333)) ) ) * fgamma1; |
---|
3918 | gamma_heavy2 = a_levdens_heavy2 / (0.4 * (std::pow(aheavy2,1.3333)) ); |
---|
3919 | |
---|
3920 | cz_asymm1_saddle = cz_asymm1_shell + cz_symm; |
---|
3921 | cz_asymm2_saddle = cz_asymm2_shell + cz_symm; |
---|
3922 | |
---|
3923 | // Up to here: Ok! Checked CS 10/10/05 |
---|
3924 | |
---|
3925 | cn = umass(zsymm,(nsymm+1.),0.0) + umass(zsymm,(nsymm-1.),0.0) |
---|
3926 | + 1.44 * (std::pow(zsymm,2))/ |
---|
3927 | ( (std::pow(r_null,2)) * |
---|
3928 | ( std::pow((asymm+1.0),0.33333) + std::pow((asymm-1.0),0.33333) ) * |
---|
3929 | ( std::pow((asymm+1.0),0.33333) + std::pow((asymm-1.0),0.33333) ) ) |
---|
3930 | - 2.0 * umass(zsymm,nsymm,0.0) |
---|
3931 | - 1.44 * (std::pow(zsymm,2))/ |
---|
3932 | ( ( 2.0 * r_null * (std::pow(asymm,0.33333)) ) * |
---|
3933 | ( 2.0 * r_null * (std::pow(asymm,0.33333)) ) ); |
---|
3934 | |
---|
3935 | // /* shell effect in valley of mode 1 */ |
---|
3936 | delta_u1 = delta_u1_shell + (std::pow((zheavy1_shell-zheavy1),2))*cz_asymm1_shell; |
---|
3937 | // /* shell effect in valley of mode 2 */ |
---|
3938 | delta_u2 = delta_u2_shell + (std::pow((zheavy2_shell-zheavy2),2))*cz_asymm2_shell; |
---|
3939 | |
---|
3940 | // /* liquid drop energies |
---|
3941 | // at the centres of the different shell effects |
---|
3942 | // with respect to liquid drop at symmetry: */ |
---|
3943 | epot0_mode1_saddle = (std::pow((zheavy1-zsymm),2)) * cz_symm; |
---|
3944 | epot0_mode2_saddle = (std::pow((zheavy2-zsymm),2)) * cz_symm; |
---|
3945 | epot0_symm_saddle = 0.0; |
---|
3946 | |
---|
3947 | if (itest == 1) { |
---|
3948 | G4cout << "check zheavy1 = " << zheavy1 << G4endl; |
---|
3949 | G4cout << "check zheavy2 = " << zheavy2 << G4endl; |
---|
3950 | G4cout << "check zsymm = " << zsymm << G4endl; |
---|
3951 | G4cout << "check czsymm = " << cz_symm << G4endl; |
---|
3952 | G4cout << "check epot0_mode1_saddle = " << epot0_mode1_saddle << G4endl; |
---|
3953 | G4cout << "check epot0_mode2_saddle = " << epot0_mode2_saddle << G4endl; |
---|
3954 | G4cout << "check epot0_symm_saddle = " << epot0_symm_saddle << G4endl; |
---|
3955 | G4cout << "delta_u1 = " << delta_u1 << G4endl; |
---|
3956 | G4cout << "delta_u2 = " << delta_u2 << G4endl; |
---|
3957 | } |
---|
3958 | |
---|
3959 | // /* energies including shell effects |
---|
3960 | // at the centres of the different shell effects |
---|
3961 | // with respect to liquid drop at symmetry: */ |
---|
3962 | epot_mode1_saddle = epot0_mode1_saddle + delta_u1; |
---|
3963 | epot_mode2_saddle = epot0_mode2_saddle + delta_u2; |
---|
3964 | epot_symm_saddle = epot0_symm_saddle; |
---|
3965 | if (itest == 1) { |
---|
3966 | G4cout << "check epot_mode1_saddle = " << epot_mode1_saddle << G4endl; |
---|
3967 | G4cout << "check epot_mode2_saddle = " << epot_mode2_saddle << G4endl; |
---|
3968 | G4cout << "check epot_symm_saddle = " << epot_symm_saddle << G4endl; |
---|
3969 | } |
---|
3970 | |
---|
3971 | // /* Minimum of potential with respect to ld potential at symmetry */ |
---|
3972 | dueff = min(epot_mode1_saddle,epot_mode2_saddle); |
---|
3973 | dueff = min(dueff,epot_symm_saddle); |
---|
3974 | dueff = dueff - epot_symm_saddle; |
---|
3975 | |
---|
3976 | eld = e + dueff + e_zero_point; |
---|
3977 | |
---|
3978 | if (itest == 1) { |
---|
3979 | G4cout << "check dueff = " << dueff << G4endl; |
---|
3980 | G4cout << "check e = " << e << G4endl; |
---|
3981 | G4cout << "check e_zero_point = " << e_zero_point << G4endl; |
---|
3982 | G4cout << "check eld = " << eld << G4endl; |
---|
3983 | } |
---|
3984 | // Up to here: Ok! Checked CS 10/10/05 |
---|
3985 | |
---|
3986 | // /* E = energy above lowest effective barrier */ |
---|
3987 | // /* Eld = energy above liquid-drop barrier */ |
---|
3988 | |
---|
3989 | // /* Due to this treatment the energy E on input means the excitation */ |
---|
3990 | // /* energy above the lowest saddle. */ |
---|
3991 | |
---|
3992 | // /* These energies are not used */ |
---|
3993 | eheavy1 = e * aheavy1 / a; |
---|
3994 | eheavy2 = e * aheavy2 / a; |
---|
3995 | elight1 = e * alight1 / a; |
---|
3996 | elight2 = e * alight2 / a; |
---|
3997 | |
---|
3998 | epsilon0_1_saddle = eld - e_zero_point - epot0_mode1_saddle; |
---|
3999 | // /* excitation energy at saddle mode 1 without shell effect */ |
---|
4000 | epsilon0_2_saddle = eld - e_zero_point - epot0_mode2_saddle; |
---|
4001 | // /* excitation energy at saddle mode 2 without shell effect */ |
---|
4002 | |
---|
4003 | epsilon_1_saddle = eld - e_zero_point - epot_mode1_saddle; |
---|
4004 | // /* excitation energy at saddle mode 1 with shell effect */ |
---|
4005 | epsilon_2_saddle = eld - e_zero_point - epot_mode2_saddle; |
---|
4006 | // /* excitation energy at saddle mode 2 with shell effect */ |
---|
4007 | epsilon_symm_saddle = eld - e_zero_point - epot_symm_saddle; |
---|
4008 | |
---|
4009 | // /* global parameters */ |
---|
4010 | eexc1_saddle = epsilon_1_saddle; |
---|
4011 | eexc2_saddle = epsilon_2_saddle; |
---|
4012 | eexc_max = max(eexc1_saddle,eexc2_saddle); |
---|
4013 | eexc_max = max(eexc_max,eld); |
---|
4014 | |
---|
4015 | // /* EEXC_MAX is energy above the lowest saddle */ |
---|
4016 | |
---|
4017 | |
---|
4018 | epsilon0_1_scission = eld + e_saddle_scission - epot0_mode1_saddle; |
---|
4019 | // /* excitation energy without shell effect */ |
---|
4020 | epsilon0_2_scission = eld + e_saddle_scission - epot0_mode2_saddle; |
---|
4021 | // /* excitation energy without shell effect */ |
---|
4022 | |
---|
4023 | epsilon_1_scission = eld + e_saddle_scission - epot_mode1_saddle; |
---|
4024 | // /* excitation energy at scission */ |
---|
4025 | epsilon_2_scission = eld+ e_saddle_scission - epot_mode2_saddle; |
---|
4026 | // /* excitation energy at scission */ |
---|
4027 | epsilon_symm_scission = eld + e_saddle_scission - epot_symm_saddle; |
---|
4028 | // /* excitation energy of symmetric fragment at scission */ |
---|
4029 | |
---|
4030 | // /* Calculate widhts at the saddle: */ |
---|
4031 | |
---|
4032 | e_eff1_saddle = epsilon0_1_saddle - delta_u1 * (std::exp((-epsilon_1_saddle*gamma))); |
---|
4033 | |
---|
4034 | if (e_eff1_saddle > 0.0) { |
---|
4035 | wzasymm1_saddle = std::sqrt( (0.5 * |
---|
4036 | (std::sqrt(1.0/a_levdens*e_eff1_saddle)) / |
---|
4037 | (cz_asymm1_shell * std::exp((-epsilon_1_saddle*gamma)) + cz_symm) ) ); |
---|
4038 | } |
---|
4039 | else { |
---|
4040 | wzasymm1_saddle = 1.0; |
---|
4041 | } |
---|
4042 | |
---|
4043 | e_eff2_saddle = epsilon0_2_saddle - delta_u2 * (std::exp((-epsilon_2_saddle*gamma))); |
---|
4044 | if (e_eff2_saddle > 0.0) { |
---|
4045 | wzasymm2_saddle = std::sqrt( (0.5 * |
---|
4046 | (std::sqrt(1.0/a_levdens*e_eff2_saddle)) / |
---|
4047 | (cz_asymm2_shell * std::exp((-epsilon_2_saddle*gamma)) + cz_symm) ) ); |
---|
4048 | } |
---|
4049 | else { |
---|
4050 | wzasymm2_saddle = 1.0; |
---|
4051 | } |
---|
4052 | |
---|
4053 | if (eld > e_zero_point) { |
---|
4054 | if ( (eld + epsilon_symm_saddle) < 0.0) { |
---|
4055 | G4cout << "<e> eld + epsilon_symm_saddle < 0" << G4endl; |
---|
4056 | } |
---|
4057 | wzsymm_saddle = std::sqrt( (0.5 * |
---|
4058 | (std::sqrt(1.0/a_levdens*(eld+epsilon_symm_saddle))) / cz_symm ) ); |
---|
4059 | } else { |
---|
4060 | wzsymm_saddle = 1.0; |
---|
4061 | } |
---|
4062 | |
---|
4063 | if (itest == 1) { |
---|
4064 | G4cout << "wz1(saddle) = " << wzasymm1_saddle << G4endl; |
---|
4065 | G4cout << "wz2(saddle) = " << wzasymm2_saddle << G4endl; |
---|
4066 | G4cout << "wzsymm(saddle) = " << wzsymm_saddle << G4endl; |
---|
4067 | } |
---|
4068 | |
---|
4069 | // /* Calculate widhts at the scission point: */ |
---|
4070 | // /* fits of ref. Beizin 1991 (Plots brought to GSI by Sergei Zhdanov) */ |
---|
4071 | |
---|
4072 | wzsymm_scission = wzsymm_saddle; |
---|
4073 | |
---|
4074 | if (e_saddle_scission == 0.0) { |
---|
4075 | |
---|
4076 | wzasymm1_scission = wzasymm1_saddle; |
---|
4077 | wzasymm2_scission = wzasymm2_saddle; |
---|
4078 | |
---|
4079 | } |
---|
4080 | else { |
---|
4081 | |
---|
4082 | if (nheavy1_eff > 75.0) { |
---|
4083 | wzasymm1_scission = (std::sqrt(21.0)) * z/a; |
---|
4084 | wzasymm2_scission = (std::sqrt (max( (70.0-28.0)/3.0*(z*z/a-35.0)+28.,0.0 )) ) * z/a; |
---|
4085 | } |
---|
4086 | else { |
---|
4087 | wzasymm1_scission = wzasymm1_saddle; |
---|
4088 | wzasymm2_scission = wzasymm2_saddle; |
---|
4089 | } |
---|
4090 | |
---|
4091 | } |
---|
4092 | |
---|
4093 | wzasymm1_scission = max(wzasymm1_scission,wzasymm1_saddle); |
---|
4094 | wzasymm2_scission = max(wzasymm2_scission,wzasymm2_saddle); |
---|
4095 | |
---|
4096 | wzasymm1 = wzasymm1_scission * fwidth_asymm1; |
---|
4097 | wzasymm2 = wzasymm2_scission * fwidth_asymm2; |
---|
4098 | wzsymm = wzsymm_scission; |
---|
4099 | |
---|
4100 | /* if (ITEST == 1) { |
---|
4101 | G4cout << "WZ1(scission) = " << WZasymm1_scission << G4endl; |
---|
4102 | G4cout << "WZ2(scission) = " << WZasymm2_scission << G4endl; |
---|
4103 | G4cout << "WZsymm(scission) = " << WZsymm_scission << G4endl; |
---|
4104 | } |
---|
4105 | if (ITEST == 1) { |
---|
4106 | G4cout << "WZ1(scission) final= " << WZasymm1 << G4endl; |
---|
4107 | G4cout << "WZ2(scission) final= " << WZasymm2 << G4endl; |
---|
4108 | G4cout << "WZsymm(scission) final= " << WZsymm << G4endl; |
---|
4109 | } */ |
---|
4110 | |
---|
4111 | wasymm = wzsymm * a/z; |
---|
4112 | waheavy1 = wzasymm1 * a/z; |
---|
4113 | waheavy2 = wzasymm2 * a/z; |
---|
4114 | |
---|
4115 | wasymm_saddle = wzsymm_saddle * a/z; |
---|
4116 | waheavy1_saddle = wzasymm1_saddle * a/z; |
---|
4117 | waheavy2_saddle = wzasymm2_saddle * a/z; |
---|
4118 | |
---|
4119 | if (itest == 1) { |
---|
4120 | G4cout << "wasymm = " << wzsymm << G4endl; |
---|
4121 | G4cout << "waheavy1 = " << waheavy1 << G4endl; |
---|
4122 | G4cout << "waheavy2 = " << waheavy2 << G4endl; |
---|
4123 | } |
---|
4124 | // Up to here: Ok! Checked CS 11/10/05 |
---|
4125 | |
---|
4126 | if ( (epsilon0_1_saddle - delta_u1*std::exp((-epsilon_1_saddle*gamma_heavy1))) < 0.0) { |
---|
4127 | sasymm1 = -10.0; |
---|
4128 | } |
---|
4129 | else { |
---|
4130 | sasymm1 = 2.0 * std::sqrt( a_levdens * (epsilon0_1_saddle - |
---|
4131 | delta_u1*(std::exp((-epsilon_1_saddle*gamma_heavy1))) ) ); |
---|
4132 | } |
---|
4133 | |
---|
4134 | if ( (epsilon0_2_saddle - delta_u2*std::exp((-epsilon_2_saddle*gamma_heavy2))) < 0.0) { |
---|
4135 | sasymm2 = -10.0; |
---|
4136 | } |
---|
4137 | else { |
---|
4138 | sasymm2 = 2.0 * std::sqrt( a_levdens * (epsilon0_2_saddle - |
---|
4139 | delta_u2*(std::exp((-epsilon_2_saddle*gamma_heavy2))) ) ); |
---|
4140 | } |
---|
4141 | |
---|
4142 | if (epsilon_symm_saddle > 0.0) { |
---|
4143 | ssymm = 2.0 * std::sqrt( a_levdens*(epsilon_symm_saddle) ); |
---|
4144 | } |
---|
4145 | else { |
---|
4146 | ssymm = -10.0; |
---|
4147 | } |
---|
4148 | |
---|
4149 | if (ssymm > -10.0) { |
---|
4150 | ysymm = 1.0; |
---|
4151 | |
---|
4152 | if (epsilon0_1_saddle < 0.0) { |
---|
4153 | // /* low energy */ |
---|
4154 | yasymm1 = std::exp((sasymm1-ssymm)) * wzasymm1_saddle / wzsymm_saddle * 2.0; |
---|
4155 | // /* factor of 2 for symmetry classes */ |
---|
4156 | } |
---|
4157 | else { |
---|
4158 | // /* high energy */ |
---|
4159 | ssymm_mode1 = 2.0 * std::sqrt( a_levdens*(epsilon0_1_saddle) ); |
---|
4160 | yasymm1 = ( std::exp((sasymm1-ssymm)) - std::exp((ssymm_mode1 - ssymm)) ) |
---|
4161 | * wzasymm1_saddle / wzsymm_saddle * 2.0; |
---|
4162 | } |
---|
4163 | |
---|
4164 | if (epsilon0_2_saddle < 0.0) { |
---|
4165 | // /* low energy */ |
---|
4166 | yasymm2 = std::exp((sasymm2-ssymm)) * wzasymm2_saddle / wzsymm_saddle * 2.0; |
---|
4167 | // /* factor of 2 for symmetry classes */ |
---|
4168 | } |
---|
4169 | else { |
---|
4170 | // /* high energy */ |
---|
4171 | ssymm_mode2 = 2.0 * std::sqrt( a_levdens*(epsilon0_2_saddle) ); |
---|
4172 | yasymm2 = ( std::exp((sasymm2-ssymm)) - std::exp((ssymm_mode2 - ssymm)) ) |
---|
4173 | * wzasymm2_saddle / wzsymm_saddle * 2.0; |
---|
4174 | } |
---|
4175 | // /* difference in the exponent in order */ |
---|
4176 | // /* to avoid numerical overflow */ |
---|
4177 | |
---|
4178 | } |
---|
4179 | else { |
---|
4180 | if ( (sasymm1 > -10.0) && (sasymm2 > -10.0) ) { |
---|
4181 | ysymm = 0.0; |
---|
4182 | yasymm1 = std::exp(sasymm1) * wzasymm1_saddle * 2.0; |
---|
4183 | yasymm2 = std::exp(sasymm2) * wzasymm2_saddle * 2.0; |
---|
4184 | } |
---|
4185 | } |
---|
4186 | |
---|
4187 | // /* normalize */ |
---|
4188 | ysum = ysymm + yasymm1 + yasymm2; |
---|
4189 | if (ysum > 0.0) { |
---|
4190 | ysymm = ysymm / ysum; |
---|
4191 | yasymm1 = yasymm1 / ysum; |
---|
4192 | yasymm2 = yasymm2 / ysum; |
---|
4193 | yasymm = yasymm1 + yasymm2; |
---|
4194 | } |
---|
4195 | else { |
---|
4196 | ysymm = 0.0; |
---|
4197 | yasymm1 = 0.0; |
---|
4198 | yasymm2 = 0.0; |
---|
4199 | // /* search minimum threshold and attribute all events to this mode */ |
---|
4200 | if ( (epsilon_symm_saddle < epsilon_1_saddle) && (epsilon_symm_saddle < epsilon_2_saddle) ) { |
---|
4201 | ysymm = 1.0; |
---|
4202 | } |
---|
4203 | else { |
---|
4204 | if (epsilon_1_saddle < epsilon_2_saddle) { |
---|
4205 | yasymm1 = 1.0; |
---|
4206 | } |
---|
4207 | else { |
---|
4208 | yasymm2 = 1.0; |
---|
4209 | } |
---|
4210 | } |
---|
4211 | } |
---|
4212 | |
---|
4213 | if (itest == 1) { |
---|
4214 | G4cout << "ysymm normalized= " << ysymm << G4endl; |
---|
4215 | G4cout << "yasymm1 normalized= " << yasymm1 << G4endl; |
---|
4216 | G4cout << "yasymm2 normalized= " << yasymm2 << G4endl; |
---|
4217 | } |
---|
4218 | // Up to here: Ok! Ckecked CS 11/10/05 |
---|
4219 | |
---|
4220 | // /* even-odd effect */ |
---|
4221 | // /* simple parametrization KHS, Nov. 2000. From Rejmund et al. */ |
---|
4222 | if ((int)(z) % 2 == 0) { |
---|
4223 | r_e_o_exp = -0.017 * (e_saddle_scission + eld) * (e_saddle_scission + eld); |
---|
4224 | if ( r_e_o_exp < -307.0) { |
---|
4225 | r_e_o_exp = -307.0; |
---|
4226 | r_e_o = std::pow(10.0,r_e_o_exp); |
---|
4227 | } |
---|
4228 | else { |
---|
4229 | r_e_o = std::pow(10.0,r_e_o_exp); |
---|
4230 | } |
---|
4231 | } |
---|
4232 | else { |
---|
4233 | r_e_o = 0.0; |
---|
4234 | } |
---|
4235 | |
---|
4236 | // $LOOP; /* event loop */ |
---|
4237 | // I_COUNT = I_COUNT + 1; |
---|
4238 | |
---|
4239 | // /* random decision: symmetric or asymmetric */ |
---|
4240 | // /* IMODE = 1 means asymmetric fission, mode 1, |
---|
4241 | // IMODE = 2 means asymmetric fission, mode 2, |
---|
4242 | // IMODE = 3 means symmetric */ |
---|
4243 | // RMODE = dble(HAZ(k)); |
---|
4244 | // rmode = rnd.rndm(); |
---|
4245 | rmode = haz(k); |
---|
4246 | // Cast for test CS 11/10/05 |
---|
4247 | // RMODE = 0.54; |
---|
4248 | // rmode = 0.54; |
---|
4249 | if (rmode < yasymm1) { |
---|
4250 | imode = 1; |
---|
4251 | } |
---|
4252 | if ( (rmode > yasymm1) && (rmode < (yasymm1+yasymm2)) ) { |
---|
4253 | imode = 2; |
---|
4254 | } |
---|
4255 | if ( (rmode > yasymm1) && (rmode > (yasymm1+yasymm2)) ) { |
---|
4256 | imode = 3; |
---|
4257 | } |
---|
4258 | |
---|
4259 | // /* determine parameters of the Z distribution */ |
---|
4260 | // force imode (for testing, PK) |
---|
4261 | // imode = 3; |
---|
4262 | if (imode == 1) { |
---|
4263 | z1mean = zheavy1; |
---|
4264 | z1width = wzasymm1; |
---|
4265 | } |
---|
4266 | if (imode == 2) { |
---|
4267 | z1mean = zheavy2; |
---|
4268 | z1width = wzasymm2; |
---|
4269 | } |
---|
4270 | if (imode == 3) { |
---|
4271 | z1mean = zsymm; |
---|
4272 | z1width = wzsymm; |
---|
4273 | } |
---|
4274 | |
---|
4275 | if (itest == 1) { |
---|
4276 | G4cout << "nbre aleatoire tire " << rmode << G4endl; |
---|
4277 | G4cout << "fission mode " << imode << G4endl; |
---|
4278 | G4cout << "z1mean= " << z1mean << G4endl; |
---|
4279 | G4cout << "z1width= " << z1width << G4endl; |
---|
4280 | } |
---|
4281 | |
---|
4282 | // /* random decision: Z1 and Z2 at scission: */ |
---|
4283 | z1 = 1.0; |
---|
4284 | z2 = 1.0; |
---|
4285 | while ( (z1<5.0) || (z2<5.0) ) { |
---|
4286 | // Z1 = dble(GAUSSHAZ(K,sngl(Z1mean),sngl(Z1width))); |
---|
4287 | // z1 = rnd.gaus(z1mean,z1width); |
---|
4288 | z1 = gausshaz(k, z1mean, z1width); |
---|
4289 | z2 = z - z1; |
---|
4290 | } |
---|
4291 | if (itest == 1) { |
---|
4292 | G4cout << "ff charge sample " << G4endl; |
---|
4293 | G4cout << "z1 = " << z1 << G4endl; |
---|
4294 | G4cout << "z2 = " << z2 << G4endl; |
---|
4295 | } |
---|
4296 | |
---|
4297 | // CALL EVEN_ODD(Z1,R_E_O,I_HELP); |
---|
4298 | // /* Integer proton number with even-odd effect */ |
---|
4299 | // Z1 = REAL(I_HELP) |
---|
4300 | // /* Z1 = INT(Z1+0.5E0); */ |
---|
4301 | z2 = z - z1; |
---|
4302 | |
---|
4303 | // /* average N of both fragments: */ |
---|
4304 | if (imode == 1) { |
---|
4305 | n1mean = (z1 + cpol1 * a/n) * n/z; |
---|
4306 | } |
---|
4307 | if (imode == 2) { |
---|
4308 | n1mean = (z1 + cpol2 * a/n) * n/z; |
---|
4309 | } |
---|
4310 | /* CASE(99) ! only for testing; |
---|
4311 | N1UCD = Z1 * N/Z; |
---|
4312 | N2UCD = Z2 * N/Z; |
---|
4313 | re1 = UMASS(Z1,N1UCD,0.6) +; |
---|
4314 | & UMASS(Z2,N2UCD,0.6) +; |
---|
4315 | & ECOUL(Z1,N1UCD,0.6,Z2,N2UCD,0.6,d); |
---|
4316 | re2 = UMASS(Z1,N1UCD+1.,0.6) +; |
---|
4317 | & UMASS(Z2,N2UCD-1.,0.6) +; |
---|
4318 | & ECOUL(Z1,N1UCD+1.,0.6,Z2,N2UCD-1.,0.6,d); |
---|
4319 | re3 = UMASS(Z1,N1UCD+2.,0.6) +; |
---|
4320 | & UMASS(Z2,N2UCD-2.,0.6) +; |
---|
4321 | & ECOUL(Z1,N1UCD+2.,0.6,Z2,N2UCD-2.,0.6,d); |
---|
4322 | eps2 = (re1-2.0*re2+re3) / 2.0; |
---|
4323 | eps1 = re2 - re1 - eps2; |
---|
4324 | DN1_POL = - eps1 / (2.0 * eps2); |
---|
4325 | N1mean = N1UCD + DN1_POL; */ |
---|
4326 | if (imode == 3) { |
---|
4327 | n1ucd = z1 * n/z; |
---|
4328 | n2ucd = z2 * n/z; |
---|
4329 | re1 = umass(z1,n1ucd,0.6) + umass(z2,n2ucd,0.6) + ecoul(z1,n1ucd,0.6,z2,n2ucd,0.6,d); |
---|
4330 | re2 = umass(z1,n1ucd+1.,0.6) + umass(z2,n2ucd-1.,0.6) + ecoul(z1,n1ucd+1.,0.6,z2,n2ucd-1.,0.6,d); |
---|
4331 | re3 = umass(z1,n1ucd+2.,0.6) + umass(z2,n2ucd-2.,0.6) + ecoul(z1,n1ucd+2.,0.6,z2,n2ucd-2.,0.6,d); |
---|
4332 | eps2 = (re1-2.0*re2+re3) / 2.0; |
---|
4333 | eps1 = re2 - re1 - eps2; |
---|
4334 | dn1_pol = - eps1 / (2.0 * eps2); |
---|
4335 | n1mean = n1ucd + dn1_pol; |
---|
4336 | } |
---|
4337 | // all fission modes features have been checked CS 11/10/05 |
---|
4338 | n2mean = n - n1mean; |
---|
4339 | z2mean = z - z1mean; |
---|
4340 | |
---|
4341 | // /* Excitation energies */ |
---|
4342 | // /* formulated in energies in close consistency with the fission model */ |
---|
4343 | |
---|
4344 | // /* E_defo = UMASS(Z*0.5E0,N*0.5E0,0.6E0) - |
---|
4345 | // UMASS(Z*0.5E0,N*0.5E0,0); */ |
---|
4346 | // /* calculates the deformation energy of the liquid drop for |
---|
4347 | // deformation beta = 0.6 which is most probable at scission */ |
---|
4348 | |
---|
4349 | // /* N1R and N2R provisionaly taken without fluctuations in |
---|
4350 | // polarisation: */ |
---|
4351 | n1r = n1mean; |
---|
4352 | n2r = n2mean; |
---|
4353 | a1r = n1r + z1; |
---|
4354 | a2r = n2r + z2; |
---|
4355 | |
---|
4356 | if (imode == 1) { /* N = 82 */; |
---|
4357 | //! /* Eexc at scission */ |
---|
4358 | e_scission = max(epsilon_1_scission,1.0); |
---|
4359 | if (n1mean > (n * 0.5) ) { |
---|
4360 | //! /* 1. fragment is spherical */ |
---|
4361 | beta1 = 0.0; |
---|
4362 | beta2 = 0.6; |
---|
4363 | e1exc = epsilon_1_scission * a1r / a; |
---|
4364 | e_defo = umass(z2,n2r,beta2) - umass(z2,n2r,0.0); |
---|
4365 | e2exc = epsilon_1_scission * a2r / a + e_defo; |
---|
4366 | } |
---|
4367 | else { |
---|
4368 | //! /* 2. fragment is spherical */ |
---|
4369 | beta1 = 0.6; |
---|
4370 | beta2 = 0.0; |
---|
4371 | e_defo = umass(z1,n1r,beta1) - umass(z1,n1r,0.0); |
---|
4372 | e1exc = epsilon_1_scission * a1r / a + e_defo; |
---|
4373 | e2exc = epsilon_1_scission * a2r / a; |
---|
4374 | } |
---|
4375 | } |
---|
4376 | |
---|
4377 | if (imode == 2) { |
---|
4378 | //! /* N appr. 86 */ |
---|
4379 | e_scission = max(epsilon_2_scission,1.0); |
---|
4380 | if (n1mean > (n * 0.5) ) { |
---|
4381 | //! /* 2. fragment is spherical */ |
---|
4382 | beta1 = (n1r - nheavy2) * 0.034 + 0.3; |
---|
4383 | e_defo = umass(z1,n1r,beta1) - umass(z1,n1r,0.0); |
---|
4384 | e1exc = epsilon_2_scission * a1r / a + e_defo; |
---|
4385 | beta2 = 0.6 - beta1; |
---|
4386 | e_defo = umass(z2,n2r,beta2) - umass(z2,n2r,0.0); |
---|
4387 | e2exc = epsilon_2_scission * a2r / a + e_defo; |
---|
4388 | } |
---|
4389 | else { |
---|
4390 | //! /* 1. fragment is spherical */ |
---|
4391 | beta2 = (n2r - nheavy2) * 0.034 + 0.3; |
---|
4392 | e_defo = umass(z2,n2r,beta2) - umass(z2,n2r,0.0); |
---|
4393 | e2exc = epsilon_2_scission * a2r / a + e_defo; |
---|
4394 | beta1 = 0.6 - beta2; |
---|
4395 | e_defo = umass(z1,n1r,beta1) - umass(z1,n1r,0.0); |
---|
4396 | e1exc = epsilon_2_scission * a1r / a + e_defo; |
---|
4397 | } |
---|
4398 | } |
---|
4399 | |
---|
4400 | if (imode == 3) { |
---|
4401 | // ! /* Symmetric fission channel */ |
---|
4402 | |
---|
4403 | // /* the fit function for beta is the deformation for |
---|
4404 | // optimum energy at the scission point, d = 2 */ |
---|
4405 | // /* beta : deformation of symmetric fragments */ |
---|
4406 | // /* beta1 : deformation of first fragment */ |
---|
4407 | // /* beta2 : deformation of second fragment */ |
---|
4408 | beta = 0.177963 + 0.0153241 * zsymm - 0.000162037 * zsymm*zsymm; |
---|
4409 | beta1 = 0.177963 + 0.0153241 * z1 - 0.000162037 * z1*z1; |
---|
4410 | // beta1 = 0.6 |
---|
4411 | e_defo1 = umass(z1,n1r,beta1) - umass(z1,n1r,0.0); |
---|
4412 | beta2 = 0.177963 + 0.0153241 * z2 - 0.000162037 * z2*z2; |
---|
4413 | // beta2 = 0.6 |
---|
4414 | e_defo2 = umass(z2,n2r,beta2) - umass(z2,n2r,0.0); |
---|
4415 | e_asym = umass(z1 , n1r, beta1) + umass(z2, n2r ,beta2) |
---|
4416 | + ecoul(z1,n1r,beta1,z2,n2r,beta2,2.0) |
---|
4417 | - 2.0 * umass(zsymm,nsymm,beta) |
---|
4418 | - ecoul(zsymm,nsymm,beta,zsymm,nsymm,beta,2.0); |
---|
4419 | // E_asym = CZ_symm * (Z1 - Zsymm)**2 |
---|
4420 | e_scission = max((epsilon_symm_scission - e_asym),1.0); |
---|
4421 | // /* $LIST(Z1,N1R,Z2,N2R,E_asym,E_scission); */ |
---|
4422 | e1exc = e_scission * a1r / a + e_defo1; |
---|
4423 | e2exc = e_scission * a2r / a + e_defo2; |
---|
4424 | } |
---|
4425 | // Energies checked for all the modes CS 11/10/05 |
---|
4426 | |
---|
4427 | // /* random decision: N1R and N2R at scission, before evaporation: */ |
---|
4428 | // /* CN = UMASS(Zsymm , Nsymm + 1.E0,0) + |
---|
4429 | // UMASS(Zsymm, Nsymm - 1.E0,0) |
---|
4430 | // + 1.44E0 * (Zsymm)**2 / |
---|
4431 | // (r_null**2 * ((Asymm+1)**1/3 + (Asymm-1)**1/3)**2 ) |
---|
4432 | // - 2.E0 * UMASS(Zsymm,Nsymm,0) |
---|
4433 | // - 1.44E0 * (Zsymm)**2 / (r_null * 2.E0 * (Asymm)**1/3)**2; */ |
---|
4434 | |
---|
4435 | |
---|
4436 | // /* N1width = std::sqrt(0.5E0 * std::sqrt(1.E0/A_levdens*(Eld+E_saddle_scission)) / CN); */ |
---|
4437 | // /* 8. 9. 1998: KHS (see also consideration in the first comment block) |
---|
4438 | // sigma_N(Z=const) = A/Z * sigma_Z(A=const) |
---|
4439 | // sigma_Z(A=const) = 0.4 to 0.5 (from Lang paper Nucl Phys. A345 (1980) 34) |
---|
4440 | // sigma_N(Z=const) = 0.45 * A/Z (= 1.16 for 238U) |
---|
4441 | // therefore: SIGZMIN = 1.16 */ |
---|
4442 | |
---|
4443 | if ( (imode == 1) || (imode == 2) ) { |
---|
4444 | cn=(umass(z1,n1mean+1.,beta1) + umass(z1,n1mean-1.,beta1) |
---|
4445 | + umass(z2,n2mean+1.,beta2) + umass(z2,n2mean-1.,beta2) |
---|
4446 | + ecoul(z1,n1mean+1.,beta1,z2,n2mean-1.,beta2,2.0) |
---|
4447 | + ecoul(z1,n1mean-1.,beta1,z2,n2mean+1.,beta2,2.0) |
---|
4448 | - 2.0 * ecoul(z1,n1mean,beta1,z2,n2mean,beta2,2.0) |
---|
4449 | - 2.0 * umass(z1, n1mean, beta1) |
---|
4450 | - 2.0 * umass(z2, n2mean, beta2) ) * 0.5; |
---|
4451 | // /* Coulomb energy neglected for the moment! */ |
---|
4452 | // IF (E_scission.lt.0.) Then |
---|
4453 | // write(6,*)'<E> E_scission < 0, MODE 1,2' |
---|
4454 | // ENDIF |
---|
4455 | // IF (CN.lt.0.) Then |
---|
4456 | // write(6,*)'CN < 0, MODE 1,2' |
---|
4457 | // ENDIF |
---|
4458 | n1width=std::sqrt( (0.5 * (std::sqrt(1.0/a_levdens*(e_scission)))/cn) ); |
---|
4459 | n1width=max(n1width, sigzmin); |
---|
4460 | |
---|
4461 | // /* random decision: N1R and N2R at scission, before evaporation: */ |
---|
4462 | n1r = 1.0; |
---|
4463 | n2r = 1.0; |
---|
4464 | while ( (n1r<5.0) || (n2r<5.0) ) { |
---|
4465 | // n1r = dble(gausshaz(k,sngl(n1mean),sngl(n1width))); |
---|
4466 | // n1r = rnd.gaus(n1mean,n1width); |
---|
4467 | n1r = gausshaz(k, n1mean, n1width); |
---|
4468 | n2r = n - n1r; |
---|
4469 | } |
---|
4470 | // N1R = GAUSSHAZ(K,N1mean,N1width) |
---|
4471 | if (itest == 1) { |
---|
4472 | G4cout << "after neutron sample " << n1r << G4endl; |
---|
4473 | } |
---|
4474 | n1r = (float)( (int)((n1r+0.5)) ); |
---|
4475 | n2r = n - n1r; |
---|
4476 | |
---|
4477 | even_odd(z1,r_e_o,i_help); |
---|
4478 | // /* proton number with even-odd effect */ |
---|
4479 | z1 = (float)(i_help); |
---|
4480 | z2 = z - z1; |
---|
4481 | |
---|
4482 | a1r = z1 + n1r; |
---|
4483 | a2r = z2 + n2r; |
---|
4484 | } |
---|
4485 | |
---|
4486 | if (imode == 3) { |
---|
4487 | //! /* When(3) */ |
---|
4488 | if (nzpol > 0.0) { |
---|
4489 | // /* We treat a simultaneous split in Z and N to determine polarisation */ |
---|
4490 | cz = ( umass(z1-1., n1mean+1.,beta1) |
---|
4491 | + umass(z2+1., n2mean-1.,beta1) |
---|
4492 | + umass(z1+1., n1mean-1.,beta2) |
---|
4493 | + umass(z2 - 1., n2mean + 1.,beta2) |
---|
4494 | + ecoul(z1-1.,n1mean+1.,beta1,z2+1.,n2mean-1.,beta2,2.0) |
---|
4495 | + ecoul(z1+1.,n1mean-1.,beta1,z2-1.,n2mean+1.,beta2,2.0) |
---|
4496 | - 2.0 * ecoul(z1,n1mean,beta1,z2,n2mean,beta2,2.0) |
---|
4497 | - 2.0 * umass(z1, n1mean,beta1) |
---|
4498 | - 2.0 * umass(z2, n2mean,beta2) ) * 0.5; |
---|
4499 | // IF (E_scission.lt.0.) Then |
---|
4500 | // write(6,*) '<E> E_scission < 0, MODE 1,2' |
---|
4501 | // ENDIF |
---|
4502 | // IF (CZ.lt.0.) Then |
---|
4503 | // write(6,*) 'CZ < 0, MODE 1,2' |
---|
4504 | // ENDIF |
---|
4505 | za1width=std::sqrt( (0.5 * std::sqrt(1.0/a_levdens*(e_scission)) / cz) ); |
---|
4506 | za1width=std::sqrt( (max((za1width*za1width-(1.0/12.0)),0.1)) ); |
---|
4507 | // /* Check the value of 0.1 ! */ |
---|
4508 | // /* Shephard correction */ |
---|
4509 | a1r = z1 + n1mean; |
---|
4510 | a1r = (float)((int)((a1r+0.5))); |
---|
4511 | a2r = a - a1r; |
---|
4512 | // /* A1R and A2R are integer numbers now */ |
---|
4513 | // /* $LIST(A1R,A2R,ZA1WIDTH); */ |
---|
4514 | |
---|
4515 | n1ucd = n/a * a1r; |
---|
4516 | n2ucd = n/a * a2r; |
---|
4517 | z1ucd = z/a * a1r; |
---|
4518 | z2ucd = z/a * a2r; |
---|
4519 | |
---|
4520 | re1 = umass(z1ucd-1.,n1ucd+1.,beta1) + umass(z2ucd+1.,n2ucd-1.,beta2) |
---|
4521 | + ecoul(z1ucd-1.,n1ucd+1.,beta1,z2ucd+1.,n2ucd-1.,beta2,d); |
---|
4522 | re2 = umass(z1ucd,n1ucd,beta1) + umass(z2ucd,n2ucd,beta2) |
---|
4523 | + ecoul(z1ucd,n1ucd,beta1,z2ucd,n2ucd,beta2,d); |
---|
4524 | re3 = umass(z1ucd+1.,n1ucd-1.,beta1) + umass(z2ucd-1.,n2ucd+1.,beta2) + |
---|
4525 | + ecoul(z1ucd+1.,n1ucd-1.,beta1,z2ucd-1.,n2ucd+1.,beta2,d); |
---|
4526 | |
---|
4527 | eps2 = (re1-2.0*re2+re3) / 2.0; |
---|
4528 | eps1 = (re3 - re1)/2.0; |
---|
4529 | dn1_pol = - eps1 / (2.0 * eps2); |
---|
4530 | z1 = z1ucd + dn1_pol; |
---|
4531 | if (itest == 1) { |
---|
4532 | G4cout << "before proton sample " << z1 << G4endl; |
---|
4533 | } |
---|
4534 | // Z1 = dble(GAUSSHAZ(k,sngl(Z1),sngl(ZA1width))); |
---|
4535 | // z1 = rnd.gaus(z1,za1width); |
---|
4536 | z1 = gausshaz(k, z1, za1width); |
---|
4537 | if (itest == 1) { |
---|
4538 | G4cout << "after proton sample " << z1 << G4endl; |
---|
4539 | } |
---|
4540 | even_odd(z1,r_e_o,i_help); |
---|
4541 | // /* proton number with even-odd effect */ |
---|
4542 | z1 = (float)(i_help); |
---|
4543 | z2 = (float)((int)( (z - z1 + 0.5)) ); |
---|
4544 | |
---|
4545 | n1r = a1r - z1; |
---|
4546 | n2r = n - n1r; |
---|
4547 | } |
---|
4548 | else { |
---|
4549 | // /* First division of protons, then adjustment of neutrons */ |
---|
4550 | cn = ( umass(z1, n1mean+1.,beta1) + umass(z1, n1mean-1., beta1) |
---|
4551 | + umass(z2, n2mean+1.,beta2) + umass(z2, n2mean-1., beta2) |
---|
4552 | + ecoul(z1,n1mean+1.,beta1,z2,n2mean-1.,beta2,2.0) |
---|
4553 | + ecoul(z1,n1mean-1.,beta1,z2,n2mean+1.,beta2,2.0) |
---|
4554 | - 2.0 * ecoul(z1,n1mean,beta1,z2,n2mean,beta2,2.0) |
---|
4555 | - 2.0 * umass(z1, n1mean, 0.6) |
---|
4556 | - 2.0 * umass(z2, n2mean, 0.6) ) * 0.5; |
---|
4557 | // /* Coulomb energy neglected for the moment! */ |
---|
4558 | // IF (E_scission.lt.0.) Then |
---|
4559 | // write(6,*) '<E> E_scission < 0, MODE 1,2' |
---|
4560 | // Endif |
---|
4561 | // IF (CN.lt.0.) Then |
---|
4562 | // write(6,*) 'CN < 0, MODE 1,2' |
---|
4563 | // Endif |
---|
4564 | n1width=std::sqrt( (0.5 * std::sqrt(1.0/a_levdens*(e_scission)) / cn) ); |
---|
4565 | n1width=max(n1width, sigzmin); |
---|
4566 | |
---|
4567 | // /* random decision: N1R and N2R at scission, before evaporation: */ |
---|
4568 | // N1R = dble(GAUSSHAZ(k,sngl(N1mean),sngl(N1width))); |
---|
4569 | // n1r = rnd.gaus(n1mean,n1width); |
---|
4570 | n1r = gausshaz(k, n1mean, n1width); |
---|
4571 | n1r = (float)( (int)((n1r+0.5)) ); |
---|
4572 | n2r = n - n1r; |
---|
4573 | |
---|
4574 | even_odd(z1,r_e_o,i_help); |
---|
4575 | // /* Integer proton number with even-odd effect */ |
---|
4576 | z1 = (float)(i_help); |
---|
4577 | z2 = z - z1; |
---|
4578 | |
---|
4579 | a1r = z1 + n1r; |
---|
4580 | a2r = z2 + n2r; |
---|
4581 | |
---|
4582 | } |
---|
4583 | } |
---|
4584 | |
---|
4585 | if (itest == 1) { |
---|
4586 | G4cout << "remid imode = " << imode << G4endl; |
---|
4587 | G4cout << "n1width = " << n1width << G4endl; |
---|
4588 | G4cout << "n1r = " << n1r << G4endl; |
---|
4589 | G4cout << "a1r = " << a1r << G4endl; |
---|
4590 | G4cout << "n2r = " << n2r << G4endl; |
---|
4591 | G4cout << "a2r = " << a2r << G4endl; |
---|
4592 | } |
---|
4593 | // Up to here: checked CS 11/10/05 |
---|
4594 | |
---|
4595 | // /* Extracted from Lang et al. Nucl. Phys. A 345 (1980) 34 */ |
---|
4596 | e1exc_sigma = 5.5; |
---|
4597 | e2exc_sigma = 5.5; |
---|
4598 | |
---|
4599 | neufcentquatrevingtsept: |
---|
4600 | // E1final = dble(Gausshaz(k,sngl(E1exc),sngl(E1exc_sigma))); |
---|
4601 | // E2final = dble(Gausshaz(k,sngl(E2exc),sngl(E2exc_sigma))); |
---|
4602 | // e1final = rnd.gaus(e1exc,e1exc_sigma); |
---|
4603 | // e2final = rnd.gaus(e2exc,e2exc_sigma); |
---|
4604 | e1final = gausshaz(k, e1exc, e1exc_sigma); |
---|
4605 | e2final = gausshaz(k, e2exc, e2exc_sigma); |
---|
4606 | if ( (e1final < 0.0) || (e2final < 0.0) ) goto neufcentquatrevingtsept; |
---|
4607 | if (itest == 1) { |
---|
4608 | G4cout << "sampled exc 1 " << e1final << G4endl; |
---|
4609 | G4cout << "sampled exc 2 " << e2final << G4endl; |
---|
4610 | } |
---|
4611 | |
---|
4612 | // /* OUTPUT QUANTITIES OF THE EVENT GENERATOR: */ |
---|
4613 | |
---|
4614 | // /* Quantities before neutron evaporation */ |
---|
4615 | |
---|
4616 | // /* Neutron number of prefragments: N1R and N2R */ |
---|
4617 | // /* Atomic number of fragments: Z1 and Z2 */ |
---|
4618 | // /* Kinetic energy of fragments: EkinR1, EkinR2 *7 |
---|
4619 | |
---|
4620 | // /* Quantities after neutron evaporation: */ |
---|
4621 | |
---|
4622 | // /* Neutron number of fragments: N1 and N2 */ |
---|
4623 | // /* Mass number of fragments: A1 and A2 */ |
---|
4624 | // /* Atomic number of fragments: Z1 and Z2 */ |
---|
4625 | // /* Number of evaporated neutrons: N1R-N1 and N2R-N2 */ |
---|
4626 | // /* Kinetic energy of fragments: EkinR1*A1/A1R and |
---|
4627 | // EkinR2*A2/A2R */ |
---|
4628 | |
---|
4629 | n1 = n1r; |
---|
4630 | n2 = n2r; |
---|
4631 | a1 = n1 + z1; |
---|
4632 | a2 = n2 + z2; |
---|
4633 | e1 = e1final; |
---|
4634 | e2 = e2final; |
---|
4635 | |
---|
4636 | // /* Pre-neutron-emission total kinetic energy: */ |
---|
4637 | tker = (z1 * z2 * 1.44) / |
---|
4638 | ( r0 * std::pow(a1,0.33333) * (1.0 + 2.0/3.0 * beta1) + |
---|
4639 | r0 * std::pow(a2,0.33333) * (1.0 + 2.0/3.0 * beta2) + 2.0 ); |
---|
4640 | // /* Pre-neutron-emission kinetic energy of 1. fragment: */ |
---|
4641 | ekinr1 = tker * a2 / a; |
---|
4642 | // /* Pre-neutron-emission kinetic energy of 2. fragment: */ |
---|
4643 | ekinr2 = tker * a1 / a; |
---|
4644 | |
---|
4645 | v1 = std::sqrt( (ekinr1/a1) ) * 1.3887; |
---|
4646 | v2 = std::sqrt( (ekinr2/a2) ) * 1.3887; |
---|
4647 | |
---|
4648 | if (itest == 1) { |
---|
4649 | G4cout << "ekinr1 " << ekinr1 << G4endl; |
---|
4650 | G4cout << "ekinr2 " << ekinr2 << G4endl; |
---|
4651 | } |
---|
4652 | |
---|
4653 | milledeux: |
---|
4654 | //************************** |
---|
4655 | //*** only symmetric fission |
---|
4656 | //************************** |
---|
4657 | // Symmetric fission: Ok! Checked CS 10/10/05 |
---|
4658 | if ( (icz == -1) || (a1 < 0.0) || (a2 < 0.0) ) { |
---|
4659 | // IF (z.eq.92) THEN |
---|
4660 | // write(6,*)'symmetric fission' |
---|
4661 | // write(6,*)'Z,A,E,A1,A2,icz,Atot',Z,A,E,A1,A2,icz,Atot |
---|
4662 | // END IF |
---|
4663 | |
---|
4664 | if (itest == 1) { |
---|
4665 | G4cout << "milledeux: liquid-drop option " << G4endl; |
---|
4666 | } |
---|
4667 | |
---|
4668 | n = a-z; |
---|
4669 | // proton number in symmetric fission (centre) * |
---|
4670 | zsymm = z / 2.0; |
---|
4671 | nsymm = n / 2.0; |
---|
4672 | asymm = nsymm + zsymm; |
---|
4673 | |
---|
4674 | a_levdens = a / xlevdens; |
---|
4675 | |
---|
4676 | masscurv = 2.0; |
---|
4677 | cz_symm = 8.0 / std::pow(z,2) * masscurv; |
---|
4678 | |
---|
4679 | wzsymm = std::sqrt( (0.5 * std::sqrt(1.0/a_levdens*e) / cz_symm) ) ; |
---|
4680 | |
---|
4681 | if (itest == 1) { |
---|
4682 | G4cout << " symmetric high energy fission " << G4endl; |
---|
4683 | G4cout << "wzsymm " << wzsymm << G4endl; |
---|
4684 | } |
---|
4685 | |
---|
4686 | z1mean = zsymm; |
---|
4687 | z1width = wzsymm; |
---|
4688 | |
---|
4689 | // random decision: Z1 and Z2 at scission: */ |
---|
4690 | z1 = 1.0; |
---|
4691 | z2 = 1.0; |
---|
4692 | while ( (z1 < 5.0) || (z2 < 5.0) ) { |
---|
4693 | // z1 = dble(gausshaz(kkk,sngl(z1mean),sngl(z1width))); |
---|
4694 | // z1 = rnd.gaus(z1mean,z1width); |
---|
4695 | z1 = gausshaz(kkk, z1mean, z1width); |
---|
4696 | z2 = z - z1; |
---|
4697 | } |
---|
4698 | |
---|
4699 | if (itest == 1) { |
---|
4700 | G4cout << " z1 " << z1 << G4endl; |
---|
4701 | G4cout << " z2 " << z2 << G4endl; |
---|
4702 | } |
---|
4703 | if (itest == 1) { |
---|
4704 | G4cout << " zsymm " << zsymm << G4endl; |
---|
4705 | G4cout << " nsymm " << nsymm << G4endl; |
---|
4706 | G4cout << " asymm " << asymm << G4endl; |
---|
4707 | } |
---|
4708 | // CN = UMASS(Zsymm , Nsymm + 1.E0) + UMASS(Zsymm, Nsymm - 1.E0) |
---|
4709 | // # + 1.44E0 * (Zsymm)**2 / |
---|
4710 | // # (r_null**2 * ((Asymm+1)**(1./3.) + |
---|
4711 | // # (Asymm-1)**(1./3.))**2 ) |
---|
4712 | // # - 2.E0 * UMASS(Zsymm,Nsymm) |
---|
4713 | // # - 1.44E0 * (Zsymm)**2 / |
---|
4714 | // # (r_null * 2.E0 * (Asymm)**(1./3.))**2 |
---|
4715 | |
---|
4716 | n1ucd = z1 * n/z; |
---|
4717 | n2ucd = z2 * n/z; |
---|
4718 | re1 = umass(z1,n1ucd,0.6) + umass(z2,n2ucd,0.6) + |
---|
4719 | ecoul(z1,n1ucd,0.6,z2,n2ucd,0.6,2.0); |
---|
4720 | re2 = umass(z1,n1ucd+1.,0.6) + umass(z2,n2ucd-1.,0.6) + |
---|
4721 | ecoul(z1,n1ucd+1.,0.6,z2,n2ucd-1.,0.6,2.0); |
---|
4722 | re3 = umass(z1,n1ucd+2.,0.6) + umass(z2,n2ucd-2.,0.6) + |
---|
4723 | ecoul(z1,n1ucd+2.,0.6,z2,n2ucd-2.,0.6,2.0); |
---|
4724 | reps2 = (re1-2.0*re2+re3)/2.0; |
---|
4725 | reps1 = re2 - re1 -reps2; |
---|
4726 | rn1_pol = -reps1/(2.0*reps2); |
---|
4727 | n1mean = n1ucd + rn1_pol; |
---|
4728 | n2mean = n - n1mean; |
---|
4729 | |
---|
4730 | if (itest == 1) { |
---|
4731 | G4cout << " n1mean " << n1mean << G4endl; |
---|
4732 | G4cout << " n2mean " << n2mean << G4endl; |
---|
4733 | } |
---|
4734 | |
---|
4735 | cn = (umass(z1,n1mean+1.,0.0) + umass(z1,n1mean-1.,0.0) + |
---|
4736 | + umass(z2,n2mean+1.,0.0) + umass(z2,n2mean-1.,0.0) |
---|
4737 | - 2.0 * umass(z1,n1mean,0.0) + |
---|
4738 | - 2.0 * umass(z2,n2mean,0.0) ) * 0.5; |
---|
4739 | // This is an approximation! Coulomb energy is neglected. |
---|
4740 | |
---|
4741 | n1width = std::sqrt( (0.5 * std::sqrt(1.0/a_levdens*e) / cn) ); |
---|
4742 | |
---|
4743 | if (itest == 1) { |
---|
4744 | G4cout << " cn " << cn << G4endl; |
---|
4745 | G4cout << " n1width " << n1width << G4endl; |
---|
4746 | } |
---|
4747 | |
---|
4748 | // random decision: N1R and N2R at scission, before evaporation: */ |
---|
4749 | // N1R = dfloat(NINT(GAUSSHAZ(KKK,sngl(N1mean),sngl(N1width)))); |
---|
4750 | // n1r = (float)( (int)(rnd.gaus(n1mean,n1width)) ); |
---|
4751 | n1r = (float)( (int)(gausshaz(k, n1mean,n1width)) ); |
---|
4752 | n2r = n - n1r; |
---|
4753 | // Mass of first and second fragment */ |
---|
4754 | a1 = z1 + n1r; |
---|
4755 | a2 = z2 + n2r; |
---|
4756 | |
---|
4757 | e1 = e*a1/(a1+a2); |
---|
4758 | e2 = e - e*a1/(a1+a2); |
---|
4759 | if (itest == 1) { |
---|
4760 | G4cout << " n1r " << n1r << G4endl; |
---|
4761 | G4cout << " n2r " << n2r << G4endl; |
---|
4762 | } |
---|
4763 | |
---|
4764 | } |
---|
4765 | |
---|
4766 | if (itest == 1) { |
---|
4767 | G4cout << " a1 " << a1 << G4endl; |
---|
4768 | G4cout << " z1 " << z1 << G4endl; |
---|
4769 | G4cout << " a2 " << a2 << G4endl; |
---|
4770 | G4cout << " z2 " << z2 << G4endl; |
---|
4771 | G4cout << " e1 " << e1 << G4endl; |
---|
4772 | G4cout << " e2 " << e << G4endl; |
---|
4773 | } |
---|
4774 | |
---|
4775 | // /* Pre-neutron-emission total kinetic energy: */ |
---|
4776 | tker = (z1 * z2 * 1.44) / |
---|
4777 | ( r0 * std::pow(a1,0.33333) * (1.0 + 2.0/3.0 * beta1) + |
---|
4778 | r0 * std::pow(a2,0.33333) * (1.0 + 2.0/3.0 * beta2) + 2.0 ); |
---|
4779 | // /* Pre-neutron-emission kinetic energy of 1. fragment: */ |
---|
4780 | ekin1 = tker * a2 / a; |
---|
4781 | // /* Pre-neutron-emission kinetic energy of 2. fragment: */ |
---|
4782 | ekin2 = tker * a1 / a; |
---|
4783 | |
---|
4784 | v1 = std::sqrt( (ekin1/a1) ) * 1.3887; |
---|
4785 | v2 = std::sqrt( (ekin2/a2) ) * 1.3887; |
---|
4786 | |
---|
4787 | if (itest == 1) { |
---|
4788 | G4cout << " kinetic energies " << G4endl; |
---|
4789 | G4cout << " ekin1 " << ekin1 << G4endl; |
---|
4790 | G4cout << " ekin2 " << ekin2 << G4endl; |
---|
4791 | } |
---|
4792 | } |
---|
4793 | |
---|
4794 | // SUBROUTINE TRANSLAB(GAMREM,ETREM,CSREM,NOPART,NDEC) |
---|
4795 | void G4Abla::translab(G4double gamrem, G4double etrem, G4double csrem[4], G4int nopart, G4int ndec) |
---|
4796 | { |
---|
4797 | // c Ce subroutine transforme dans un repere 1 les impulsions pcv des |
---|
4798 | // c particules acv, zcv et de cosinus directeurs xcv, ycv, zcv calculees |
---|
4799 | // c dans un repere 2. |
---|
4800 | // c La transformation de lorentz est definie par GAMREM (gamma) et |
---|
4801 | // c ETREM (eta). La direction du repere 2 dans 1 est donnees par les |
---|
4802 | // c cosinus directeurs ALREM,BEREM,GAREM (axe oz du repere 2). |
---|
4803 | // c L'axe oy(2) est fixe par le produit vectoriel oz(1)*oz(2). |
---|
4804 | // c Le calcul est fait pour les particules de NDEC a iv du common volant. |
---|
4805 | // C Resultats dans le NTUPLE (common VAR_NTP) decale de NOPART (cascade). |
---|
4806 | |
---|
4807 | // REAL*8 GAMREM,ETREM,ER,PLABI(3),PLABF(3),R(3,3) |
---|
4808 | // real*8 MASSE,PTRAV2,CSREM(3),UMA,MELEC,EL |
---|
4809 | // real*4 acv,zpcv,pcv,xcv,ycv,zcv |
---|
4810 | // common/volant/acv(200),zpcv(200),pcv(200),xcv(200), |
---|
4811 | // s ycv(200),zcv(200),iv |
---|
4812 | |
---|
4813 | // parameter (max=250) |
---|
4814 | // real*4 EXINI,ENERJ,BIMPACT,PLAB,TETLAB,PHILAB,ESTFIS |
---|
4815 | // integer AVV,ZVV,JREMN,KFIS,IZFIS,IAFIS |
---|
4816 | // common/VAR_NTP/MASSINI,MZINI,EXINI,MULNCASC,MULNEVAP, |
---|
4817 | // +MULNTOT,BIMPACT,JREMN,KFIS,ESTFIS,IZFIS,IAFIS,NTRACK, |
---|
4818 | // +ITYPCASC(max),AVV(max),ZVV(max),ENERJ(max),PLAB(max), |
---|
4819 | // +TETLAB(max),PHILAB(max) |
---|
4820 | |
---|
4821 | // DATA UMA,MELEC/931.4942,0.511/ |
---|
4822 | |
---|
4823 | // C Matrice de rotation dans le labo: |
---|
4824 | G4double sitet = std::sqrt(std::pow(csrem[1],2)+std::pow(csrem[2],2)); |
---|
4825 | G4double cstet, siphi, csphi; |
---|
4826 | G4double R[4][4]; |
---|
4827 | |
---|
4828 | if(sitet > 1.0e-6) { //then |
---|
4829 | cstet = csrem[3]; |
---|
4830 | siphi = csrem[2]/sitet; |
---|
4831 | csphi = csrem[1]/sitet; |
---|
4832 | |
---|
4833 | R[1][1] = cstet*csphi; |
---|
4834 | R[1][2] = -siphi; |
---|
4835 | R[1][3] = sitet*csphi; |
---|
4836 | R[2][1] = cstet*siphi; |
---|
4837 | R[2][2] = csphi; |
---|
4838 | R[2][3] = sitet*siphi; |
---|
4839 | R[3][1] = -sitet; |
---|
4840 | R[3][2] = 0.0; |
---|
4841 | R[3][3] = cstet; |
---|
4842 | } |
---|
4843 | else { |
---|
4844 | R[1][1] = 1.0; |
---|
4845 | R[1][2] = 0.0; |
---|
4846 | R[1][3] = 0.0; |
---|
4847 | R[2][1] = 0.0; |
---|
4848 | R[2][2] = 1.0; |
---|
4849 | R[2][3] = 0.0; |
---|
4850 | R[3][1] = 0.0; |
---|
4851 | R[3][2] = 0.0; |
---|
4852 | R[3][3] = 1.0; |
---|
4853 | } //endif |
---|
4854 | |
---|
4855 | G4int intp = 0; |
---|
4856 | G4double el = 0.0; |
---|
4857 | G4double masse = 0.0; |
---|
4858 | G4double er = 0.0; |
---|
4859 | G4double plabi[4]; |
---|
4860 | G4double ptrav2 = 0.0; |
---|
4861 | G4double plabf[4]; |
---|
4862 | G4double bidon = 0.0; |
---|
4863 | |
---|
4864 | for(G4int i = ndec; i <= volant->iv; i++) { //do i=ndec,iv |
---|
4865 | intp = i + nopart; |
---|
4866 | varntp->ntrack = varntp->ntrack + 1; |
---|
4867 | if(nint(volant->acv[i]) == 0 && nint(volant->zpcv[i]) == 0) { |
---|
4868 | if(verboseLevel > 2) { |
---|
4869 | G4cout <<"Error: Particles with A = 0 Z = 0 detected! " << G4endl; |
---|
4870 | } |
---|
4871 | continue; |
---|
4872 | } |
---|
4873 | if(varntp->ntrack >= VARNTPSIZE) { |
---|
4874 | if(verboseLevel > 2) { |
---|
4875 | G4cout <<"Error! Output data structure not big enough!" << G4endl; |
---|
4876 | } |
---|
4877 | } |
---|
4878 | varntp->avv[intp] = nint(volant->acv[i]); |
---|
4879 | varntp->zvv[intp] = nint(volant->zpcv[i]); |
---|
4880 | varntp->itypcasc[intp] = 0; |
---|
4881 | // transformation de lorentz remnan --> labo: |
---|
4882 | if (varntp->avv[intp] == -1) { //then |
---|
4883 | masse = 138.00; // cugnon |
---|
4884 | // c if (avv(intp).eq.1) masse=938.2796 !cugnon |
---|
4885 | // c if (avv(intp).eq.4) masse=3727.42 !ok |
---|
4886 | } |
---|
4887 | else { |
---|
4888 | mglms(double(volant->acv[i]),double(volant->zpcv[i]),0, &el); |
---|
4889 | // assert(isnan(el) == false); |
---|
4890 | masse = volant->zpcv[i]*938.27 + (volant->acv[i] - volant->zpcv[i])*939.56 + el; |
---|
4891 | } //end if |
---|
4892 | |
---|
4893 | er = std::sqrt(std::pow(volant->pcv[i],2) + std::pow(masse,2)); |
---|
4894 | // assert(isnan(er) == false); |
---|
4895 | plabi[1] = volant->pcv[i]*(volant->xcv[i]); |
---|
4896 | plabi[2] = volant->pcv[i]*(volant->ycv[i]); |
---|
4897 | plabi[3] = er*etrem + gamrem*(volant->pcv[i])*(volant->zcv[i]); |
---|
4898 | |
---|
4899 | ptrav2 = std::pow(plabi[1],2) + std::pow(plabi[2],2) + std::pow(plabi[3],2); |
---|
4900 | // assert(isnan(ptrav2) == false); |
---|
4901 | varntp->plab[intp] = std::sqrt(ptrav2); |
---|
4902 | varntp->enerj[intp] = std::sqrt(ptrav2 + std::pow(masse,2)) - masse; |
---|
4903 | |
---|
4904 | // Rotation dans le labo: |
---|
4905 | for(G4int j = 1; j <= 3; j++) { //do j=1,3 |
---|
4906 | plabf[j] = 0.0; |
---|
4907 | for(G4int k = 1; k <= 3; k++) { //do k=1,3 |
---|
4908 | plabf[j] = plabf[j] + R[k][j]*plabi[k]; // :::Fixme::: (indices?) |
---|
4909 | } // end do |
---|
4910 | } // end do |
---|
4911 | // C impulsions dans le nouveau systeme copiees dans /volant/ |
---|
4912 | volant->pcv[i] = varntp->plab[intp]; |
---|
4913 | ptrav2 = std::sqrt(std::pow(plabf[1],2) + std::pow(plabf[2],2) + std::pow(plabf[3],2)); |
---|
4914 | if(ptrav2 >= 1.0e-6) { //then |
---|
4915 | volant->xcv[i] = plabf[1]/ptrav2; |
---|
4916 | volant->ycv[i] = plabf[2]/ptrav2; |
---|
4917 | volant->zcv[i] = plabf[3]/ptrav2; |
---|
4918 | } |
---|
4919 | else { |
---|
4920 | volant->xcv[i] = 1.0; |
---|
4921 | volant->ycv[i] = 0.0; |
---|
4922 | volant->zcv[i] = 0.0; |
---|
4923 | } //endif |
---|
4924 | // impulsions dans le nouveau systeme copiees dans /VAR_NTP/ |
---|
4925 | if(varntp->plab[intp] >= 1.0e-6) { //then |
---|
4926 | bidon = plabf[3]/(varntp->plab[intp]); |
---|
4927 | // assert(isnan(bidon) == false); |
---|
4928 | if(bidon > 1.0) { |
---|
4929 | bidon = 1.0; |
---|
4930 | } |
---|
4931 | if(bidon < -1.0) { |
---|
4932 | bidon = -1.0; |
---|
4933 | } |
---|
4934 | varntp->tetlab[intp] = std::acos(bidon); |
---|
4935 | sitet = std::sin(varntp->tetlab[intp]); |
---|
4936 | varntp->philab[intp] = std::atan2(plabf[2],plabf[1]); |
---|
4937 | varntp->tetlab[intp] = varntp->tetlab[intp]*57.2957795; |
---|
4938 | varntp->philab[intp] = varntp->philab[intp]*57.2957795; |
---|
4939 | } |
---|
4940 | else { |
---|
4941 | varntp->tetlab[intp] = 90.0; |
---|
4942 | varntp->philab[intp] = 0.0; |
---|
4943 | } // endif |
---|
4944 | } // end do |
---|
4945 | } |
---|
4946 | // C------------------------------------------------------------------------- |
---|
4947 | |
---|
4948 | // SUBROUTINE TRANSLABPF(MASSE1,T1,P1,CTET1,PHI1,GAMREM,ETREM,R, |
---|
4949 | // s PLAB1,GAM1,ETA1,CSDIR) |
---|
4950 | void G4Abla::translabpf(G4double masse1, G4double t1, G4double p1, G4double ctet1, |
---|
4951 | G4double phi1, G4double gamrem, G4double etrem, G4double R[][4], |
---|
4952 | G4double *plab1, G4double *gam1, G4double *eta1, G4double csdir[]) |
---|
4953 | { |
---|
4954 | // C Calcul de l'impulsion du PF (PLAB1, cos directeurs CSDIR(3)) dans le |
---|
4955 | // C systeme remnant et des coefs de Lorentz GAM1,ETA1 de passage |
---|
4956 | // c du systeme PF --> systeme remnant. |
---|
4957 | // c |
---|
4958 | // C Input: MASSE1, T1 (energie cinetique), CTET1,PHI1 (cosTHETA et PHI) |
---|
4959 | // C (le PF dans le systeme du Noyau de Fission (NF)). |
---|
4960 | // C GAMREM,ETREM les coefs de Lorentz systeme NF --> syst remnant, |
---|
4961 | // C R(3,3) la matrice de rotation systeme NF--> systeme remnant. |
---|
4962 | // C |
---|
4963 | // C |
---|
4964 | // REAL*8 MASSE1,T1,P1,CTET1,PHI1,GAMREM,ETREM,R(3,3), |
---|
4965 | // s PLAB1,GAM1,ETA1,CSDIR(3),ER,SITET,PLABI(3),PLABF(3) |
---|
4966 | |
---|
4967 | G4double er = t1 + masse1; |
---|
4968 | |
---|
4969 | G4double sitet = std::sqrt(1.0 - std::pow(ctet1,2)); |
---|
4970 | |
---|
4971 | G4double plabi[4]; |
---|
4972 | G4double plabf[4]; |
---|
4973 | // C ----Transformation de Lorentz Noyau fissionnant --> Remnant: |
---|
4974 | plabi[1] = p1*sitet*std::cos(phi1); |
---|
4975 | plabi[2] = p1*sitet*std::sin(phi1); |
---|
4976 | plabi[3] = er*etrem + gamrem*p1*ctet1; |
---|
4977 | |
---|
4978 | // C ----Rotation du syst Noyaut Fissionant vers syst remnant: |
---|
4979 | for(G4int j = 1; j <= 3; j++) { // do j=1,3 |
---|
4980 | plabf[j] = 0.0; |
---|
4981 | for(G4int k = 1; k <= 3; k++) { //do k=1,3 |
---|
4982 | // plabf[j] = plabf[j] + R[j][k]*plabi[k]; |
---|
4983 | plabf[j] = plabf[j] + R[k][j]*plabi[k]; |
---|
4984 | } //end do |
---|
4985 | } //end do |
---|
4986 | // C ----Cosinus directeurs et coefs de la transf de Lorentz dans le |
---|
4987 | // c nouveau systeme: |
---|
4988 | (*plab1) = std::pow(plabf[1],2) + std::pow(plabf[2],2) + std::pow(plabf[3],2); |
---|
4989 | (*gam1) = std::sqrt(std::pow(masse1,2) + (*plab1))/masse1; |
---|
4990 | (*plab1) = std::sqrt((*plab1)); |
---|
4991 | (*eta1) = (*plab1)/masse1; |
---|
4992 | |
---|
4993 | if((*plab1) <= 1.0e-6) { //then |
---|
4994 | csdir[1] = 0.0; |
---|
4995 | csdir[2] = 0.0; |
---|
4996 | csdir[3] = 1.0; |
---|
4997 | } |
---|
4998 | else { |
---|
4999 | for(G4int i = 1; i <= 3; i++) { //do i=1,3 |
---|
5000 | csdir[i] = plabf[i]/(*plab1); |
---|
5001 | } // end do |
---|
5002 | } //endif |
---|
5003 | } |
---|
5004 | |
---|
5005 | // SUBROUTINE LOR_AB(GAM,ETA,Ein,Pin,Eout,Pout) |
---|
5006 | void G4Abla::lorab(G4double gam, G4double eta, G4double ein, G4double pin[], |
---|
5007 | G4double *eout, G4double pout[]) |
---|
5008 | { |
---|
5009 | // C Transformation de lorentz brute pour vérifs. |
---|
5010 | // C P(3) = P_longitudinal (transformé) |
---|
5011 | // C P(1) et P(2) = P_transvers (non transformés) |
---|
5012 | // DIMENSION Pin(3),Pout(3) |
---|
5013 | // REAL*8 GAM,ETA,Ein |
---|
5014 | |
---|
5015 | pout[1] = pin[1]; |
---|
5016 | pout[2] = pin[2]; |
---|
5017 | (*eout) = gam*ein + eta*pin[3]; |
---|
5018 | pout[3] = eta*ein + gam*pin[3]; |
---|
5019 | } |
---|
5020 | |
---|
5021 | // SUBROUTINE ROT_AB(R,Pin,Pout) |
---|
5022 | void G4Abla::rotab(G4double R[4][4], G4double pin[4], G4double pout[4]) |
---|
5023 | { |
---|
5024 | // C Rotation d'un vecteur |
---|
5025 | // DIMENSION Pin(3),Pout(3) |
---|
5026 | // REAL*8 R(3,3) |
---|
5027 | |
---|
5028 | for(G4int i = 1; i <= 3; i++) { // do i=1,3 |
---|
5029 | pout[i] = 0.0; |
---|
5030 | for(G4int j = 1; j <= 3; j++) { //do j=1,3 |
---|
5031 | // pout[i] = pout[i] + R[i][j]*pin[j]; |
---|
5032 | pout[i] = pout[i] + R[j][i]*pin[j]; |
---|
5033 | } // enddo |
---|
5034 | } //enddo |
---|
5035 | } |
---|
5036 | |
---|
5037 | // Methods related to the internal ABLA random number generator. In |
---|
5038 | // the future the random number generation must be factored into its |
---|
5039 | // own class |
---|
5040 | |
---|
5041 | void G4Abla::standardRandom(G4double *rndm, G4long *seed) |
---|
5042 | { |
---|
5043 | (*seed) = (*seed); // Avoid warning during compilation. |
---|
5044 | // Use Geant4 G4UniformRand |
---|
5045 | (*rndm) = G4UniformRand(); |
---|
5046 | } |
---|
5047 | |
---|
5048 | G4double G4Abla::haz(G4int k) |
---|
5049 | { |
---|
5050 | const G4int pSize = 110; |
---|
5051 | static G4double p[pSize]; |
---|
5052 | static G4long ix,i; |
---|
5053 | static G4double x,y,a,haz; |
---|
5054 | // k =< -1 on initialise |
---|
5055 | // k = -1 c'est reproductible |
---|
5056 | // k < -1 || k > -1 ce n'est pas reproductible |
---|
5057 | |
---|
5058 | // Zero is invalid random seed. Set proper value from our random seed collection: |
---|
5059 | if(ix == 0) { |
---|
5060 | ix = hazard->ial; |
---|
5061 | } |
---|
5062 | |
---|
5063 | if (k <= -1) { //then |
---|
5064 | if(k == -1) { //then |
---|
5065 | ix = 0; |
---|
5066 | } |
---|
5067 | else { |
---|
5068 | x = 0.0; |
---|
5069 | y = secnds(int(x)); |
---|
5070 | ix = int(y * 100 + 43543000); |
---|
5071 | if(mod(ix,2) == 0) { |
---|
5072 | ix = ix + 1; |
---|
5073 | } |
---|
5074 | } |
---|
5075 | |
---|
5076 | // Here we are using random number generator copied from INCL code |
---|
5077 | // instead of the CERNLIB one! This causes difficulties for |
---|
5078 | // automatic testing since the random number generators, and thus |
---|
5079 | // the behavior of the routines in C++ and FORTRAN versions is no |
---|
5080 | // longer exactly the same! |
---|
5081 | standardRandom(&x, &ix); |
---|
5082 | for(G4int i = 0; i < pSize; i++) { //do i=1,110 |
---|
5083 | standardRandom(&(p[i]), &ix); |
---|
5084 | } |
---|
5085 | standardRandom(&a, &ix); |
---|
5086 | k = 0; |
---|
5087 | } |
---|
5088 | |
---|
5089 | i = nint(100*a)+1; |
---|
5090 | haz = p[i]; |
---|
5091 | standardRandom(&a, &ix); |
---|
5092 | p[i] = a; |
---|
5093 | |
---|
5094 | hazard->ial = ix; |
---|
5095 | |
---|
5096 | return haz; |
---|
5097 | } |
---|
5098 | |
---|
5099 | |
---|
5100 | G4double G4Abla::gausshaz(int k, double xmoy, double sig) |
---|
5101 | { |
---|
5102 | // Gaussian random numbers: |
---|
5103 | |
---|
5104 | // 1005 C*** TIRAGE ALEATOIRE DANS UNE GAUSSIENNE DE LARGEUR SIG ET MOYENNE XMOY |
---|
5105 | static G4int iset = 0; |
---|
5106 | static G4double v1,v2,r,fac,gset,gausshaz; |
---|
5107 | |
---|
5108 | if(iset == 0) { //then |
---|
5109 | do { |
---|
5110 | v1 = 2.0*haz(k) - 1.0; |
---|
5111 | v2 = 2.0*haz(k) - 1.0; |
---|
5112 | r = std::pow(v1,2) + std::pow(v2,2); |
---|
5113 | } while(r >= 1); |
---|
5114 | |
---|
5115 | fac = std::sqrt(-2.*std::log(r)/r); |
---|
5116 | // assert(isnan(fac) == false); |
---|
5117 | gset = v1*fac; |
---|
5118 | gausshaz = v2*fac*sig+xmoy; |
---|
5119 | iset = 1; |
---|
5120 | } |
---|
5121 | else { |
---|
5122 | gausshaz=gset*sig+xmoy; |
---|
5123 | iset=0; |
---|
5124 | } |
---|
5125 | |
---|
5126 | return gausshaz; |
---|
5127 | } |
---|
5128 | |
---|
5129 | |
---|
5130 | // Utilities |
---|
5131 | |
---|
5132 | G4double G4Abla::min(G4double a, G4double b) |
---|
5133 | { |
---|
5134 | if(a < b) { |
---|
5135 | return a; |
---|
5136 | } |
---|
5137 | else { |
---|
5138 | return b; |
---|
5139 | } |
---|
5140 | } |
---|
5141 | |
---|
5142 | G4int G4Abla::min(G4int a, G4int b) |
---|
5143 | { |
---|
5144 | if(a < b) { |
---|
5145 | return a; |
---|
5146 | } |
---|
5147 | else { |
---|
5148 | return b; |
---|
5149 | } |
---|
5150 | } |
---|
5151 | |
---|
5152 | G4double G4Abla::max(G4double a, G4double b) |
---|
5153 | { |
---|
5154 | if(a > b) { |
---|
5155 | return a; |
---|
5156 | } |
---|
5157 | else { |
---|
5158 | return b; |
---|
5159 | } |
---|
5160 | } |
---|
5161 | |
---|
5162 | G4int G4Abla::max(G4int a, G4int b) |
---|
5163 | { |
---|
5164 | if(a > b) { |
---|
5165 | return a; |
---|
5166 | } |
---|
5167 | else { |
---|
5168 | return b; |
---|
5169 | } |
---|
5170 | } |
---|
5171 | |
---|
5172 | G4int G4Abla::nint(G4double number) |
---|
5173 | { |
---|
5174 | G4double intpart; |
---|
5175 | G4double fractpart; |
---|
5176 | fractpart = std::modf(number, &intpart); |
---|
5177 | if(number == 0) { |
---|
5178 | return 0; |
---|
5179 | } |
---|
5180 | if(number > 0) { |
---|
5181 | if(fractpart < 0.5) { |
---|
5182 | return int(std::floor(number)); |
---|
5183 | } |
---|
5184 | else { |
---|
5185 | return int(std::ceil(number)); |
---|
5186 | } |
---|
5187 | } |
---|
5188 | if(number < 0) { |
---|
5189 | if(fractpart < -0.5) { |
---|
5190 | return int(std::floor(number)); |
---|
5191 | } |
---|
5192 | else { |
---|
5193 | return int(std::ceil(number)); |
---|
5194 | } |
---|
5195 | } |
---|
5196 | |
---|
5197 | return int(std::floor(number)); |
---|
5198 | } |
---|
5199 | |
---|
5200 | G4int G4Abla::secnds(G4int x) |
---|
5201 | { |
---|
5202 | time_t mytime; |
---|
5203 | tm *mylocaltime; |
---|
5204 | |
---|
5205 | time(&mytime); |
---|
5206 | mylocaltime = localtime(&mytime); |
---|
5207 | |
---|
5208 | if(x == 0) { |
---|
5209 | return(mylocaltime->tm_hour*60*60 + mylocaltime->tm_min*60 + mylocaltime->tm_sec); |
---|
5210 | } |
---|
5211 | else { |
---|
5212 | return(mytime - x); |
---|
5213 | } |
---|
5214 | } |
---|
5215 | |
---|
5216 | G4int G4Abla::mod(G4int a, G4int b) |
---|
5217 | { |
---|
5218 | if(b != 0) { |
---|
5219 | return (a - (a/b)*b); |
---|
5220 | } |
---|
5221 | else { |
---|
5222 | return 0; |
---|
5223 | } |
---|
5224 | } |
---|
5225 | |
---|
5226 | G4double G4Abla::dmod(G4double a, G4double b) |
---|
5227 | { |
---|
5228 | if(b != 0) { |
---|
5229 | return (a - (a/b)*b); |
---|
5230 | } |
---|
5231 | else { |
---|
5232 | return 0.0; |
---|
5233 | } |
---|
5234 | } |
---|
5235 | |
---|
5236 | G4double G4Abla::dint(G4double a) |
---|
5237 | { |
---|
5238 | G4double value = 0.0; |
---|
5239 | |
---|
5240 | if(a < 0.0) { |
---|
5241 | value = double(std::ceil(a)); |
---|
5242 | } |
---|
5243 | else { |
---|
5244 | value = double(std::floor(a)); |
---|
5245 | } |
---|
5246 | |
---|
5247 | return value; |
---|
5248 | } |
---|
5249 | |
---|
5250 | G4int G4Abla::idint(G4double a) |
---|
5251 | { |
---|
5252 | G4int value = 0; |
---|
5253 | |
---|
5254 | if(a < 0) { |
---|
5255 | value = int(std::ceil(a)); |
---|
5256 | } |
---|
5257 | else { |
---|
5258 | value = int(std::floor(a)); |
---|
5259 | } |
---|
5260 | |
---|
5261 | return value; |
---|
5262 | } |
---|
5263 | |
---|
5264 | G4int G4Abla::idnint(G4double value) |
---|
5265 | { |
---|
5266 | G4double valueCeil = int(std::ceil(value)); |
---|
5267 | G4double valueFloor = int(std::floor(value)); |
---|
5268 | |
---|
5269 | if(std::fabs(value - valueCeil) < std::fabs(value - valueFloor)) { |
---|
5270 | return int(valueCeil); |
---|
5271 | } |
---|
5272 | else { |
---|
5273 | return int(valueFloor); |
---|
5274 | } |
---|
5275 | } |
---|
5276 | |
---|
5277 | G4double G4Abla::dmin1(G4double a, G4double b, G4double c) |
---|
5278 | { |
---|
5279 | if(a < b && a < c) { |
---|
5280 | return a; |
---|
5281 | } |
---|
5282 | if(b < a && b < c) { |
---|
5283 | return b; |
---|
5284 | } |
---|
5285 | if(c < a && c < b) { |
---|
5286 | return c; |
---|
5287 | } |
---|
5288 | return a; |
---|
5289 | } |
---|
5290 | |
---|
5291 | G4double G4Abla::utilabs(G4double a) |
---|
5292 | { |
---|
5293 | if(a > 0) { |
---|
5294 | return a; |
---|
5295 | } |
---|
5296 | if(a < 0) { |
---|
5297 | return (-1*a); |
---|
5298 | } |
---|
5299 | if(a == 0) { |
---|
5300 | return a; |
---|
5301 | } |
---|
5302 | |
---|
5303 | return a; |
---|
5304 | } |
---|