1C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2C RATES
3C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
4C SUBROUTINE RATES(DL,TL,X,Y,Z,XHE3,XC12,XC13,XN14,XN15,XO16,XO17,
5C *XO18,XH2,XLI6,XLI7,XBE9,IU,HR1,HR2,HR3,HR4,HR5,HR6,HR7, ! KC 2025-05-31
6 SUBROUTINE RATES(DL,TL,X,Y,XHE3,XC12,XC13,XN14,XO16,
7 * *XO18,IU,HR1,HR2,HR3,HR4,HR5,HR6,HR7,
8 * *HR8,HR9,HR10,HR11,HR12,HR13,HF1,HF2)
9C 10/15/26 MHP via Claude
10C code changed to take JSON from DIMENSIONS_MOD instead of declaring
11C PARAMETER(JSON=5000) here.
12 USE DIMENSIONS_MOD
13C 10/14/26 MHP via Claude
14C code changed to convert COMMON/CROSS/ into CROSS_MOD.
15 USE CROSS_MOD
16C 10/14/26 MHP via Claude
17C code changed to convert COMMON/NMLPAR/ into NMLPAR_MOD.
18 USE NMLPAR_MOD
19C 10/14/26 MHP via Claude
20C code changed to convert COMMON/CONSTANTS/ into CONSTANTS_MOD.
21 USE CONSTANTS_MOD
22C 10/20/26 MHP via Claude
23C code changed to replace implicit typing with IMPLICIT NONE and
24C explicit declarations.
25 IMPLICIT NONE
26 REAL*8 A1,A2,A3,A4,A5,AMU,ANUC,BE7ELECTRON,BE7PROTON,C12ALPHA,C21,
27 * * CAMUBE7,DD,DEGD,DL,EFMKT,EMU,F1,F3,F4,FPRF,HF1,HF2,HR1,
28 * * HR10,HR11,HR12,HR13,HR2,HR3,HR4,HR5,HR6,HR7,HR8,HR9,
29 * * O16GAMMA,PFMC2,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,QRBE7,R1,R2,RATE,
30 * * RHO,RWE,T9,T9M1,T9M12,T9M13,T9M2,T9M23,T9M32,T9P13,T9P23,
31 * * TEMP3,TL,TM1,TRM,UINT,USTR,UTOT,UTOTBE7P,UWK,X,XC12,XC13,
32 * * XFRAC,XHE3,XN14,XO16,XO18,XTR,XXL,XXL6,XXL8,Y,Z23,Z28,Z33,
33 * * Z43,Z53,Z58,Z86,Z86BE7P,ZBAR,ZCURL,ZET,ZNUC,ZPRD,ZPRDBE7P
34 INTEGER I,IU,NELEM,NRXNS,NZ
35
36C JULY 3, 1991 (MHP)
37C THIS SUBROUTINE COMPUTES THE NUCLEAR BURNING RATES FOR USE IN KEMCOM.
38C IT IS A STRIPPED-DOWN VERSION OF ENGEB; SEE ENGEB FOR DETAILED NOTES
39C ON THE REACTIONS.
40C ALL PHYSICAL QUANTITIES ARE CGS. THE REACTION RATES ARE IN
41C GM^{-1}S^{-1}.
42C MHP 10/97
43C
44c On 10/13/97, JNB converted the nuclear masses from neutral nuclear
45c masses to bare nuclear masses by subtracting Z(I)*(m_e)*c^2 from
46c the neutral nuclear masses. This caused changes in a number of
47c places: in ANUC(I), in Q1(I)-Q7(I), in the calculation of the Be7electron
48c Be7proton rates, and in the calculation of the N15p branching ratio.
49c
50c JNB made some purely cosmetic changes on 1/20/96. Revised all of the
51c input Q's on 9/23-25/97 to agree with submitted version of Solar
52c Fusion Workshop paper. The SStandard are fixed to agree with
53c the Workshop paper. JNB recalculated all of the EG(I) to determine
54c the best values for the energy generation for all the reactions,
55c taking account of my improved calculations of neutrino energy loss.
56c The calculations are documented in Vol. 19, 132-141, 1997 of my notes.
57c The neutral atom mass differences are taken from Table of Isotopes,
58c 8th Ed, 1996 and the neutrino energy losses from Bahcall, Gallium
59c solar neutrino experiments, Phys Rev C, in press, 1997.
60c
61C ALL NUMBERS IN THIS SUBROUTINE HAVE BEEN CHECKED AND REVISED, WHERE
62C NECESSARY, BY JOHN BAHCALL SO THAT THEY AGREE WITH THE MODERN NUMBERS
63C IN NEUTRINO ASTROPHYSICS (1989).
64C *****************************************
65C CHANGING NUCLEAR REACTION CROSS SECTIONS.
66C *****************************************
67C NUCLEAR CROSS SECTIONS CAN BE CHANGED SIMPLY BY INSERTING NEW NUMBERS
68C FOR THE DATA VALUES OF SSTANDARD(I), WHICH ARE THE RATIOS OF THE
69C DESIRED CROSS SECTION FACTORS TO THE VALUES GIVEN IN TABLES 3.2 AND
70C 3.4 OF NEUTRINO ASTROPHYSICS (1989). IF THE VALUE GIVEN IN NEUTRINO
71C ASTROPHYSICS IS USED, THEN SSTANDARD(I) = 1.0 . TO INCREASE THE CROSS
72C SECTION FOR REACTION K BY A FACTOR OF TWO COMPARED TO THE STANDARD
73C VALUE, SET SSTANDARD(K) = 2.0 . TO DETERMINE WHICH VALUE OF I GOES
74C WITH WHICH REACTION, SEE THE SECTION JUST BELOW.
75C THE ENERGY DERIVATIVES ENTER IN A FORM IN WHICH THEY ARE DIVIDED BY
76C THE ABSOLUTE VALUES OF THE CROSS SECTIONS AT ZERO ENERGY. THUS IF
77C THE SHAPE OF THE CROSS SECTION EXTRAPOLATION IS UNCHANGED AND ONLY
78C THE INTERCEPT OF S(E) AT ZERO ENERGY IS CHANGED, THEN NO CORRECTION
79C NEED BE MADE FOR THE DERIVATIVES. THEY ARE AUTOMATICALLY SCALED
80C CORRECTLY. THE EXACT WAY THAT THE DERIVATIVES ENETER THE
81C CALCUALTIONS IS DESCRIBED IN THE SECTION LABELED ``DEFINING THE
82C Q(I)' THAT IS PRESENTED BELOW.
83C ************************************
84C IDENTIFYING THE REACTIONS.
85C ************************************
86C THE VALUE OF J DENOTES WHICH OF THE REACTIONS THE COEFFICIENTS
87C REFER TO:
88C J = 1, PP; J = 2, HE3+HE3; J = 3, HE3+ HE4; J =4, P + C12; J = 5, P+C13;
89C J = 6. P + N14; J = 7, P + O16 ; J = 8, HE4+C13; J = 10, HE4+C12;
90C J = 11, HE4 + N14; J = 12, TRIPLE ALPHA.
91C REACTION 14 IS PEP; REACTION 15 IS BE7 ELECTRON CAPTURE; REACTION 16 IS
92C BE7 PROTON CAPTURE; REACTION 17 IS THE HEP REACTION.
93C do not change sstandard(14) unless you want to change the ratio of
94C pep to pp.
95C REACTIONS 14-17 WERE NOT EXPLICITLY INCLUDED IN THE YALE
96C PREVIOUS VERSION OF THE CODE, BUT THEY ARE MOST OF THE STORY FOR
97C THE SOLAR NEUTRINO PROBLEM.
98C THE BRANCHING OF THE N15 + P REACTIONS IS TREATED IN A SERIES OF
99C SEPARATE STATEMENTS FOLLOWING THE CALCULATION OF THE BE7 + P
100C REACTION. SEE THE DEFINITIONS OF F3 AND F4. IF THE CROSS-SECTION
101C FACTORS OF THE N15 + P REACTIONS ARE REVISED, THEN THE NUMERICAL
102C COEFFICIENTS MUST BE CHANGED IN THE DEFINITION OF C12ALPHA AND
103C O16GAMMA.
104C FOR Q1(I), ...,Q(5(I), I = 8 CORRESPONDS TO THE BE7 + P REACTION.
105C THIS ASSIGNMENT FOR I = 8 IS ONLY VALID FOR THE LISTED Q'S AND NOT
106C FOR OTHER ARRAYS IN THE PROGRAM.
107C IU IS THE SHELL NUMBER.
108
109C 10/12/26 MHP via Claude
110C code changed to extend COMMON/NMLPAR/ to 234 members, adding the
111C namelist variables that the physics routines read from 27 COMMON
112C blocks which also held derived or working members. Those blocks keep
113C only their non-namelist members; five of them -- NEWMX, VMULT,
114C PMMWIND, CCOUT1 and ENVGEN -- had nothing left and are gone.
115C Derivation-only namelist variables from the same blocks went to
116C COMMON/NMLBYPASS/ instead, not here.
117C
118C Declared identically in all 121 files that hold any of these members.
119C Generated from one member list, so every copy is byte-identical; the
120C linker's 'size of symbol changed' warning is the check that they are.
121C 10/13/26 MHP via Claude
122C code changed to drop COMMON/CTLIM/, declared here but never used.
123C 9/25/26 MHP via Claude
124C code changed to merge COMMON/CONST/, COMMON/CONST1/, COMMON/CONST2/,
125C and COMMON/CONST3/ into a single COMMON/CONSTANTS/
126C MHP 8/96 CROSS SECTIONS PUT IN COMMON BLOCK.
127C COMMON/CROSS/SSTANDARD(17)
128C MHP 6/14 DERIVATIVES ADDED
129 DIMENSION HR1(JSON),HR2(JSON),HR3(JSON),HR4(JSON),HR5(JSON),
130 1 1 HR6(JSON),HR7(JSON),HR8(JSON),HR9(JSON),HR10(JSON),HR11(JSON),
131 2 2 HR12(JSON),HR13(JSON),HF1(JSON),HF2(JSON)
132 DIMENSION XFRAC(13),RATE(13),UTOT(13),ZPRD(13),Z53(13),Z43(13),
133 1 1 Z23(13),Z86(13),Q1(8),Q2(8),Q3(8),Q4(8),Q5(8),Q6(7),Q7(7),Q8(7)
134 DIMENSION ANUC(13), ZNUC(13)
135
136C ***************************
137C ANUC ARE ATOMIC MASS UNITS.
138C ***************************
139c On 10/13/97, JNB converted ANUC(I) from neutral atomic masses to
140c bare nuclear masses.
141c
142c The scale is the mass of C12 divided by 12 or 931.49432 MeV,
143c which is 1.6605402 times 10^{-24} gm. The values are obtained
144c by dividing the mass excess (expressed in MeV) by 931.49432 MeV and
145c adding to this the atomic mass number, A. The value for Be7, which
146c is used implicitly in this subroutine was, 7.016930, until 13/13/97.
147c We now use the bare nuclear mass of 7.014735 .
148c
149 DATA ANUC/1.008665D0,1.007276D0,2.013553D0,3.015501D0,3.014933D0,4.001506D0,
150 1 1 11.996709D0,13.000064D0,13.999233D0,15.990526D0,17.994772D0,19.986954D0,
151 2 2 23.978458D0/,ZNUC/0.,1.,1.,1.,2.,2.,6.,6.,7.,8.,8.,10.,12./,
152 3 3 NELEM/13/
153C THE ISOTOPES ARE NEUTRON, H1, D, H3, HE3, HE4, C12, C13, N14, O16, O18,
154C NE20, MG24, RESPECTIVELY. ALL OF THESE NUMBERS WERE CHECKED.
155C NELEM IS THE NUMBER OF ISOTOPES INCLUDED.
156C **************************************************************************
157C THE QUANTITIES Q1(J), Q2(J), ...,Q5(J) ARE THE TERMS IN EQUATION 3.14 OF
158C NEUTRINO ASTROPHYSICS AND IN EQUATION 53 OF FOWLER, CAUGHLAN, AND
159C ZIMMERMAN (1967) EQ. 53, IN BOTH CASES MULTIPLIED BY T SUB 9 ^(-2/3).
160C THE REACTIONS CORRESPONDING TO EACH J ARE LISTED ABOVE, UNDER:
161C IDENTIFYING THE RECTIONS.
162C FOR THIS SET OF PARAMETERS, AND ONLY FOR THIS SET OF PARAMETERS,
163C J = 8 CORRESPONDS TO THE BE7 + P REACTION.
164C **************************************************************************
165C GENERAL EXPRESSION FOR Q'S:
166C T_9^(-2/3)[S_EFF/S(0)] =
167C [T_9^(-2/3) + Q1(I)T_9^(-1/3) + Q2(I) + Q3(I)T_9^(1/3) +
168C Q4(I)T_9^(2/3) + Q(5)T_9 ]
169C
170C BY COMPARISON WITH EQUATION 3.14 OF NEUTRINO ASTROPHYSICS, WE SEE THAT
171C
172C Q1 = (5/(12*TAU))*T_9^(-1/3) .
173C Q2 = (S'/S)(E_0))*T_9^(-2/3) .
174C Q3 = (S'/S)(35/36)(K*10^9 K)
175C Q4 = (S''/2S)(E_0^2)(T_9^(-4/3)
176C Q5 = (89/72)(S''/S)(E_0)(KT)(T_9^(-5/3)
177C
178C EACH OF THE Q'S IS INDEPENDENT OF TEMPERATURE (T), AS CAN BE SEEN FROM
179C EQUATIONS 3.10 AND 3.11 .
180C
181C ALL OF THE VALUES OF THE Q1, ...., Q5 HAVE BEEN RECALCULATED, USING
182C WHERE NEEDED NUCLEAR CROSS SECTIONS GIVEN IN TABLES 3.2 AND 3.4 OF NEUTRINO
183C ASTROPHYSICS.
184C ******************************************************************
185C Q6 IS THE COEFFICIENT OF THE TEMPERATURE TERM IN THE DEFINITION OF
186C TAU, EQUATION 3.10 OF NEUTRINO ASTROPHYSICS.
187C TAU = Q6*(T SUB 9 TO THE (-1/3) POWER ).
188C ******************************************************************
189C SLIGHT CHANGES HAVE BEEN MADE IN THE PREVIOUS VALUES OF Q6 TO MAKE
190C THE DATA MORE ACCURATE.
191C NOTE Q6 IS NEGATIVE.
192C ********************************************************************
193C Q7 IS THE CONSTANT IN FRONT OF THE REACTION RATE. THE LOGARITHMS ARE
194C RELATED TO S FACTORS BY A LOGARITHM AND VARIOUS NUMERICAL FACTORS.
195C ********************************************************************
196C THE GENERAL RELATION IS:
197C Q7 = 70.62860 + ((LN(Z0*Z1/A))/3) -LN(A0*A1) - LN(S SUB 0)
198C -LN(1 + DELTA_01)
199C HERE S SUB 0 IS THE CROSS SECTION FACTOR IN UNITS OF KEV-BARNS.
200C THE NUMERICAL VALUES USED HERE ARE TAKEN FROM TABLES 3.4 AND 3.2
201C OF NUCLEAR ASTROPHYSICS.
202C THE QUANTITY DELTA_01 IS NON-ZERO (EQUAL TO UNITY) ONLY WHEN THE
203C TWO REACTING NUCLEI, 0 AND 1, ARE IDENTICAL.
204C Q8 REFLECTS A TERM IN THE EXPONENTIAL THAT OCCURS IN THE RATES, THE
205C TERM BEING PROPORTIONAL TO E^( CONSTANT*T_9^2). SEE HARRIS, ET AL.
206C 1983, ANNUAL REV. ASTRON. ASTROPHYS.21, 165 (1983) FOR THE MEANING
207C OF THIS OBSCURE TERM.
208C THE VALUES OF Q1(I),...Q7(I) GIVEN BELOW WERE OBTAINED USING THE DATA
209C IN NEUTRINO ASTROPHYSICS WITH THE AID OF AUXILARY COMPUTER CODES
210C THAT GENERATED ACCURATE EVALUATIONS. THE NUMBERS GIVEN HERE ARE
211C IN MANY CASES COMPLETELY DIFFERENT FROM THE VALUES IN THE ORIGINAL
212C YALE CODE.
213C NRXNS IS THE NUMBER OF REACTIONS BEING TRACKED.
214C DBG 8/94 APPLIED MHP UPDATE TO NUCLEAR REACTIONS
215c 10/13/97. Changed Q(I) so that are now calculated for the bare nuclear
216c masses. The calculates were made cues.f . Last date on the calculations
217c in my notes is 10/10/97. Note Q6 is -tau(T_9 = 1); in cues.f, I calculate
218c tau(T_6 = 1). The connection is: Q6 = 0.1*tau(cues.f).
219c
220c
221C BP00 values
222C DATA Q1/0.12317,.03392,.0325,.0304,.03035,.0273,.02494,.040572/,
223C 1 Q2/1.08749,-.273,-.2085,.7630,-0.4044,-1.60,-1.224, -0.2095/,
224C 2 Q3/.93833,-.0648,-.0474,.1626,-.08598,-.3064,-.2139,-0.0595/,
225C 3 Q4/0.,0.,0.,4.79,7.456,0.0,.69703,.16762/,
226C 4 Q5/0.,0.,0.,2.595,4.032,0.0,0.3097,.12114/,
227C 5 Q6/-3.3804,-12.2757,-12.826,-13.6899,-13.7173,-15.2281,
228C 5 -16.6925/,
229C 6 Q7/20.8964,76.6003,67.8036,69.130,70.3809,69.8517,70.8012/,
230C 7 Q8/0.,0.,0.,0.0,0.0,0.0,0.0/,
231C 8NRXNS/13/
232C Revised values 7/21/03
233C DATA Q1/0.12317,.03392,.0325,.0304,.03035,.0273,.02494,.040572/,
234C 1Q2/1.08749,-.273,-.2085,.7630,-0.4044,-1.60,-1.224, 0.0/,
235C 2Q3/.93833,-.0648,-.0474,.1626,-.08598,-.3064,-.2139,0.0/,
236C 3Q4/0.,0.,0.,4.79,7.456,0.0,.69703,0.0/,
237C 4Q5/0.,0.,0.,2.595,4.032,0.0,0.3097,0.0/,
238C 5Q6/-3.3804,-12.2757,-12.826,-13.6899,-13.7173,-15.2281,-16.6925/,
239C 6Q7/20.8964,76.6003,67.8036,69.130,70.3809,69.8517,70.8012/,
240C 7Q8/0.,0.,0.,0.0,0.0,0.0,0./,
241C 8NRXNS/13/
242C MHP 9/14 RESTORED BE7+P DERIVATIVES THAT WERE ZEROED OUT
243 DATA Q1/0.12317D0,.03392D0,.0325D0,.0304D0,.03035D0,.0273D0,.02494D0,.040572D0/,
244 1 1Q2/1.08749D0,-.273D0,-.2085D0,.7630D0,-0.4044D0,-1.60D0,-1.224D0,-0.2095D0/,
245 2 2Q3/.93833D0,-.0648D0,-.0474D0,.1626D0,-.08598D0,-.3064D0,-.2139D0,-0.0595D0/,
246 3 3Q4/0.,0.,0.,4.79D0,7.456D0,0.0,.69703D0,0.16762D0/,
247 4 4Q5/0.,0.,0.,2.595D0,4.032D0,0.0,0.3097D0,0.12114D0/,
248 5 5Q6/-3.3804D0,-12.2757D0,-12.826D0,-13.6899D0,-13.7173D0,-15.2281D0,-16.6925D0/,
249 6 6Q7/20.8964D0,76.6003D0,67.8036D0,69.130D0,70.3809D0,69.8517D0,70.8012D0/,
250 7 7Q8/0.,0.,0.,0.0,0.0,0.0,0./,
251 8 8NRXNS/13/
252C For different values of SSTANDARD, check the comments in ENGEB
253C *********************************************************************
254C THE VALUES OF SSTANDARD(I) ARE TO BE CHANGED FROM UNITY IF THE CROSS
255C SECTION FACTORS ARE NOT THE ONES GIVEN IN NEUTRINO ASTROPHYSICS,
256C TABLE 3.2 AND TABLE 3.4 .
257C THE CURRENT VALUES ARE CHANGED TO BE THE PREFERRED VALUES LISTED IN
258C THE LAST COLUMN OF TABLE 1 OF BAHCALL AND PINSONNEAULT (1991),
259C 6/14/91.
260C THE VALUE OF SSTANDARD(17) FOR HEP IS TAKEN FROM WOLFS ET AL. , PHYS.
261C REV. LETTERS, 63, 2721 (1989). IT CORRESPONDS TO AN S SUB 0 =
262C 15.3E-20 KEV-BARNS, A FACTOR OF 1.913 LARGER THAN FOR THE OLDER
263C MEASUREMENTS USED IN NEUTRINO ASTROPHYSICS.
264C *********************************************************************
265C ZPRD IS USED IN SCREENING CALCULATIONS. IT IS THE PRODUCT OF THE
266C CHARGES OF THE INTERACTING IONS. ZPRD WAS CHECKED. Z86 IS USED
267C IN CALCULATING INTERMEDIATE SCREENING AND IS DEFINED BY GRABOSKE ET
268C AL, AP. J. 181, PAGE 465 (1973), IN TABLE 4. Z86 WAS CHECKED AND
269C SOME NUMERICAL VALUES WERE MADE SLIGHTLY MORE ACCURATE. Z53, Z43,
270C AND Z23 ARE ALSO DEFINED IN TABLE 4 (SEE ABOVE). SINCE THEY ARE
271C ONLY USED IN STRONG SCREENING, THE VALUES OF Z53, Z43, AND Z23
272C WERE NOT CHECKED.
273 DATA ZPRD/1.,4.,4.,6.,6.,7.,8.,12.,16.,12.,14.,12.,36./,Z53/
274 1 1 1.175D0,3.73D0,3.73D0,4.804D0,4.804D0,5.385D0,5.941D0,9.014D0,11.24D0,9.014D0,
275 2 2 10.15D0,9.104D0,23.28D0/,Z43/0.52D0,1.31D0,1.31D0,1.488D0,1.488D0,1.61D0,1.721D0,
276 3 3 2.577D0,3.025D0,2.577D0,2.81D0,2.577D0,5.668D0/,Z23/-0.413D0,-0.655D0,-0.655D0,
277 4 4 -0.643D0,-0.643D0,-0.659D0,-0.673D0,-0.889D0,-0.946D0,-0.889D0,-0.92D0,-0.889D0,
278 5 5 -1.36D0/,Z86/1.630D0,5.917D0,5.917D0,8.302D0,8.302D0,9.520D0,10.716D0,16.192D0,
279 6 6 20.978D0,16.192D0,18.606D0,16.192D0,45.6635D0/,
280 7 7 C21/5.240358D-8/
281 SAVE
282C DEFINE NEXT THE FRACTIONAL ABUNDANCES BY MASS OF THE IMPORTANT
283C ISOTOPES.
284C X, Y, Z, XHE3,..., XBE9 ARE THE MASS FRACTIONS OF THE ISOTOPES.
285C THE ABUNDANCES OF NEUTRONS, H2, H3, NE20,AND MG24, WHICH ARE,
286C RESPECTIVELY, XFRAC(I) FOR I = 1,3,4,12,13, ARE NO LONGER USED.
287 XFRAC(1) = 0.0
288 XFRAC(2) = X
289 XFRAC(3) = 0.0
290 XFRAC(4) = 0.0
291 XFRAC(5) = XHE3
292 XFRAC(6) = Y
293 XFRAC(7) = XC12
294 XFRAC(8) = XC13
295 XFRAC(9) = XN14
296 XFRAC(10) = XO16
297 XFRAC(11) = XO18
298 XFRAC(12) = 0.0
299 XFRAC(13) = 0.0
300C *******************************************************************
301C BEGIN CALCULATION OF SCREENING CORRECTION.
302C *******************************************************************
303C THE BASIC REFERENCES ARE SALPETER, AUSTRALIAN JOURNAL OF PHYSICS,
304C VOL. 7, 373 (1954). THE FORMULA FOR WEAK SCREENING THAT IS BEING
305C PROGRAMMED IS EQUATION (25) OF THIS PAPER. THE OTHER IMPORTANT
306C REFERENCES ARE: DEWITT, GRABOSKE, AND COOPER, AP. J. 181, 439 (1973)
307C AND GRABOSKE ET AL., AP. J. 181, 457 (1973). THE VALUES OF EMU AND
308C ZET ARE ESSENTIAL FOR COMPUTING WEAK SCREENING; THE VALUE OF AMU IS
309C USED IN AN NON-ESSENTIAL WAY IN THIS COMPUTATION. XTR IS USED IN
310C COMPUTING INTERMEDIATE SCREENING.
311C AMU IS ONE OVER THE MEAN MOLECULAR WEIGHT OF THE IONS, MU SUB I .
312C EMU IS ONE OVER THE ELECTRON MEAN MOLECULAR WEIGHT, MU SUB E.
313C EMU IS USED HERE AS THE NAME FOR THE SECOND PART OF THE ZETA FUNCTION
314C IN THE SALPETER EXPRESSION FOR WEAK SCREENING.
315C XTR IS USED LATER IN THE INTERMEDIATE SCREENING CALCULATION. THE AVERAGE
316C OF THE QUANTITY Z**(3B -1) IS EQUAL TO XTR/AMU.
317C ZET IS THE FIRST PART OF THE SALPETER SCREENING ZETA VARIABLE.
318C MU = SUM OVER I OF [X(I)/A(I)].
319C MU SUB E = SUM OVER I [ Z(I)*X(I)/A(I)].
320 AMU = 0.
321 EMU = 0.
322 XTR = 0.
323 ZET = 0.
324 DO 10 I = 1,NELEM
325 TRM = XFRAC(I)/ANUC(I)
326 AMU = AMU+TRM
327 EMU = EMU+TRM*ZNUC(I)
328 XTR = XTR+TRM*ZNUC(I)**1.58D0
329 ZET = ZET+TRM*ZNUC(I)**2
330 10 10 CONTINUE
331C DL AND DT ARE THE THE LOG10 OF THE DENSITY AND TEMPERATURE.
332C THE UNIT OF TEMPERATURE IS 10^9 K AND THE UNIT OF DENSITY IS
333C GM PER CM^3 .
334C DD = LOG RHO TO THE BASE 10.
335C CLN = LN10. CLN IS CONVERSION BETWEEN LOG10 AND LN.
336C CONVERT DENSITY TO UNLOGGED FORM.
337C RWE = RHO/(MU SUB E), I. E., THE NUMBER OF ELECTRONS DIVIDED BY
338C AVOGADRO'S NUMBER.
339 RWE = ( EXP(CLN*DL) )*EMU
340C THE EXPRESSION FOR RWE WAS INCORRECT IN THE ORIGINAL YALE SUBROUTINE.
341C THE ORIGINAL VERSION HAD ( EXP(CLN*DL) ) DIVIDED BY EMU INSTEAD OF
342C MULTIPLIED BY EMU. RWE IS USED LATER IN COMPUTING THE SCREENING
343C CORRECTION.
344 DD = DL
345C SET RATES EQUAL TO ZERO FOR THE LOG_10(T) < TCUT(1)
346 IF(TL.LE.TCUT(1)) THEN
347 DO 20 I = 1,NRXNS
348 RATE(I) = 0.
349 20 20 CONTINUE
350 GO TO 200
351 ENDIF
352C T9P13 IS THE TEMPERATURE IN UNITS OF 10^9 DEGREES K TO THE PLUS 1/3
353C POWER. MINUS IS DENOTED BY M. HERE T9 IS THE TEMPERATURE IN UNITS
354C OF 10^9 K, CONVERTED FROM THE LOG_10 (T) AND RHO IS THE DENSITY IN
355C CGS UNITS.
356 RHO=EXP(CLN*DD)
357 T9 = EXP(CLN*(TL - 9.0D0))
358 T9P13 = T9**CC13
359 T9P23 = T9P13**2
360 T9M13=1./T9P13
361 T9M23=T9M13**2
362 T9M1=1./T9
363 T9M2=T9M1**2
364 T9M12=1./DSQRT(T9)
365 T9M32=T9M1*T9M12
366C ***********************************
367C F PRIME/F
368C ***********************************
369C THE NEXT PIECE OF CODE COMPUTES FIRST THE FERMI ENERGY DIVIDED BY KT, WHERE
370C PFMC2 IS THE FERMI MOMENTUM DIVIDED BY MASS OF ELECTRON TIMES C, ALL
371C SQUARED AND EFMKT IS THE FERMI ENERGY DIVIDED BY KT. THE QUANTITY
372C FPRF IS THE RATIO OF F PRIME TO F IN SALPETER'S SCREENING CORRECTION.
373C THE VALUE OF FPRF IS DETERMINED IN THE INTERMEDIATE CASE BY AN
374C INTERPOLATION FORMULA DEPENDING UPON THE DEGREE OF DEGENERACY, AS
375C MEASURED BY DEGD = LOG10(E_F/KT). THE NUMERICAL VALUES FOR THE FIT
376C WERE TAKEN FROM SALPETER'S ORIGINAL PAPER, FIGURE 1. THE ONLY CHANGES
377C IN THIS PART OF THE SUBROUTINE WERE THE CORRECTION OF THE ERROR IN
378C THE DEFINITION OF RWE (SEE ABOVE) AND REFINEMENTS OF THE COEFFICIENTS
379C IN THE EXPRESSIONS FOR PFMC2 AND EFMKT.
380 PFMC2=1.017677D-4*RWE**CC23
381 EFMKT=5.92986D0*T9M1*(DSQRT(1.+PFMC2)-1.)
382 IF(EFMKT.LE.1.E-2) THEN
383 FPRF=1.0
384 ELSE
385 DEGD=DLOG10(EFMKT)
386 IF(DEGD.GE.1.5) THEN
387 FPRF=0.0
388 ELSE
389 FPRF=0.75793D0-0.54621D0*DEGD-0.30964D0*DEGD**2+0.12535D0*DEGD**3+
390 * * 0.1203D0*DEGD**4-0.012857D0*DEGD**5-0.014768D0*DEGD**6
391 ENDIF
392 ENDIF
393C END OF CALCULATION OF FERMI ENERGY DIVIDED BY KT AND THE INTERPOLATION
394C FORMULA FOR (F PRIME/F), WHICH APPEARS IN SALPETER'S SCREENING
395C FORMULA.
396C NOW WE GET TO THE COMPUTATION OF WEAK SCREENING (SEE ALSO PAGE 61 OF
397C NEUTRINO ASTROPHYSICS, WHICH GIVES ONLY A SIMPLIFIED FORMULA) AND
398C ALSO THE MORE COMPLICATED INTERMEDIATE AND STRONG SCREENING CASES
399C (SEE REFERENCES TO AP. J. 181 ABOVE FOR INTERMEDIATE
400C AND STRONG SCREENING), ESPECIALLY PAGE 465.
401C XXL IS USED IN ALL THE SCREENING FORMULAE. THIS QUANTITY IS THE
402C IS THE FUNCTION CALLED LAMBDA SUB ZERO BY GRABOSKE ET AL. THE
403C QUANTITY XXL**0.86 = XXL8 IS USED IN CALCULATING INTERMEDIATE
404C SCREENING.
405C ZCURL IS THE QUANTITY DEFINED BY EQUATION (4) OF DEWITT ET AL; IT
406C IS THEIR Z WITH A CURLY SYMBOL ON ITS TOP. ZCURL IS USED IN WEAK
407C AND IN INTERMEDIATE SCREENING AND WAS FIRST DEFINED BY SALPETER.
408C ZCURL IS THE SAME AS SALPETER'S ZETA EXCEPT FOR THE FACTOR OF 1/AMU.
409C (Z SUB 1 TIMES Z SUB 2)*XXL*ZCURL GIVES THE WEAK SCREENING FACTOR,
410C THE SAME AS SALPETER OR AS EQUATION (19) OF GRABOSKE ET AL.
411C Z BAR IS THE SAME AS Z BAR OF DE WITT ET AL AND IS THE AVERAGE CHARGE
412C OF THE IONS. IT IS EQUAL TO EMU/AMU. THE QUANTITY (Z BAR)**0.28 =
413C Z28 OCCURS IN THE COMPUTATION OF INTERMEDIATE SCREENING.
414C XXL6 IS USED FOR COMPUTING STRONG STRONG SCREENING.
415C THE NOTATION USED HERE IS EXPLAINED IN LARGE PART BY
416C EQUATION (4) OF DEWITT ET AL., AP. J. 181, PAGE 439.
417C THE FINAL EXPRESSION FOR WEAK SCREENING IS EXACTLY EQUAL TO SALPETER'S
418C FORMULA, WHICH INCLUDES A DEGENERACY CORRECTION. THE MORE GENERAL
419C EXPRESSIONS ARE GIVEN IN TABLE 4 AND EQUATION (19) OF GRABOSKE ET AL.
420 XXL=5.9426D-6*T9M32*DSQRT(RHO*AMU)
421 XXL6=XXL**CC23
422 XXL8=XXL**0.86D0
423 ZCURL=DSQRT((ZET+FPRF*EMU)/AMU)
424 ZBAR=EMU/AMU
425 Z58=ZCURL**0.58D0
426 Z28=ZBAR**0.28D0
427 Z33=ZBAR**CC13
428 TM1=XXL*ZCURL
429C COMPUTE SCREENING FOR EACH OF THE REACTIONS.
430 DO 30 I=1,NRXNS
431 UWK=TM1*ZPRD(I)
432 IF(UWK.LE.WEAKSCREENING) THEN
433C WEAKSCREENING IS A NUMERICAL PARAMETER PASSED IN THE FLUX COMMON
434C BLOCK. TO OBTAIN THE GRABOSKE ET AL. AND SALPETER STANDARD RESULTS,
435C USE: WEAKSCREENING = 0.03. FOR THE STANDARD SOLAR MODEL, THIS IS THE
436C VALUE THAT SHOULD BE ADOPTED. TO INVESTIGATE THE EFFECT OF ALWAYS USING
437C WEAK SCREENING, USE A LARGE VALUE FOR WEAKSCREENING, E. G., 30. AS
438C LONG AS WEAKSCREENING IS ASSUMED TO BE BIGGER THAN ONE, THE PROGRAM
439C WILL ALWAYS CALCULATE FOR THE SUN WITH THE WEAK SCREENING
440C APPROXIMATION.
441C UTOT IS THE FINAL SCREENING CORRECTION WHICH APPEARS IN THE
442C RATE EXPRESSION AS: EXP(UTOT) .
443 UTOT(I)=UWK
444 ELSE
445 UINT=0.38D0*XXL8*XTR*Z86(I)/(AMU*Z58*Z28)
446 IF(UWK.LE.2.) THEN
447 UTOT(I)=UINT
448 ELSE
449 USTR=0.624D0*Z33*XXL6*(Z53(I)+0.316D0*Z33*Z43(I)+0.737D0*
450 * * Z23(I)/(ZBAR*XXL6))
451 IF(USTR.LT.UINT.OR.UWK.GE.5.) THEN
452 UTOT(I)=USTR
453 ELSE
454 UTOT(I)=UINT
455 ENDIF
456 ENDIF
457 ENDIF
458 30 30 CONTINUE
459C ****************************************************************
460C END OF SCREENING CALCULATION. WEAK AND INTERMEDIATE SCREENING FORMS
461C ARE GIVEN CORRECTLY. STRONG SCREENING WAS NOT CHECKED BECAUSE IT IS
462C NOT RELEVANT FOR THE SUN.
463C ****************************************************************
464 NZ=1
465 IF(X.EQ.0.0) THEN
466 F1=0.
467 F3=0.
468 GOTO 50
469 ENDIF
470 NZ=8
471C **************************************************************
472C CALCULATE REACTION RATES FOR THE THREE PRINCIPAL REACTIONS OF
473C THE PP CHAIN: PP, HE3+HE3, HE3 +HE4, AND THE FOUR PROTON
474C BURNING REACTIONS ON C12: C13, N14, AND O16.
475C **************************************************************
476C R1 IS (T SUB 9)^(-3/2) TIMES (S SUB EFF)/(S SUB 0). THE CORRECT
477C EXPRESSION FOR (S SUB EFF)/(S SUB 0) IS GIVEN IN EQUATION 3.14 OF
478C NEUTRINO ASTROPHYSICS. THE NUMERICAL FORM THAT IS USED IS EQUATION
479C 52 OF FOWLER, CAUHLAN, AND ZIMMERMAN, VOL. 5, 1967.
480C RATE(I) IS THE RATE OF THE DIFFERENT REACTIONS PER SECOND PER GRAM,
481C EXCEPT THAT THE MASS FRACTIONS ARE OMITTED.
482C THE PREVIOUS YALE VERSION HAD THE RATE FOR THE O16 + P REACTION
483C MULTIPLIED BY T9**(-1/7). THIS FACTOR IS INCORRECT AND HAS BEEN
484C REMOVED; IT APPEARED BEFORE AS AN IF STATEMENT REFERRING ONLY TO
485C RATE(7).
486 DO 40 I=1,7
487C R1=T9M23+Q1(I)*T9M13+Q2(I)+Q3(I)*T9P13+Q4(I)*T9P23+Q5(I)*T9
488C MHP 8/14 RATES CORRECTED TO PERMIT USER MODIFICATION OF REACTION
489C RATE DERIVATIVES
490 R1=T9M23+Q1(I)*T9M13+QS0E(I)*(Q2(I)+Q3(I)*T9P13)+
491 * * QQS0EE(I)*(Q4(I)*T9P23+Q5(I)*T9)
492 RATE(I)=RHO*R1*EXP(Q6(I)*T9M13+Q7(I)+(Q8(I)*T9)**2+UTOT(I))
493 RATE(I) = RATE(I)*SSTANDARD(I)
494 IF(RATE(I).LT.1.E-30) RATE(I)=0.0D0
495 40 40 CONTINUE
496C ***************************************************************
497C END OF CALCULATION OF REACTION RATES FOR FIRST 7 REACTIONS.
498C ***************************************************************
499C ***********************************************
500C BE7 BURNING
501C ***********************************************
502C CALCULATE THE BURNING OF BE7 BY PROTONS (WHICH PRODUCES THE MOST
503C EXPERIMENTALLY ACCESSIBLE SOLAR NEUTRINOS) AND THE BURNING OF BE7
504C BY ELECTRON CAPTURE (THE DOMINANT PROCESS). THE PREVIOUSLY USED
505C EXPRESSION CONTAINED A TERM THAT WAS PHYSICALLY INCORRECT
506C AND ALSO USED CROSS SECTION FACTORS THAT WERE OUT OF DATE.
507C THE ELECTRON CAPTURE RATE IN SEC^(-1) IS GIVEN BY EQUATION (3.18) OF
508C NEUTRINO ASTROPHYSICS. CAN OMIT THE FACTOR OF RHO (IN CGS UNITS)
509C WHICH ALSO APPEARS IN THE BE7PROTON RATE. THE BE7 PROTON CAPTURE
510C RATE IS GIVEN BY TABLE 3.2 AND EQUATION (3.12). NOTE THAT 1 OVER MU
511C SUB E IS EQUAL TO EMU.
512C HERE WE USE THE NOTATION BE7 + PROTON = BE7PROTON AND
513C BE7 + E = BE7ELECTRON.
514C F1 IS THE FRACTION OF THE BE7 THAT IS BURNED BY ELECTRON CAPTURE.
515C 1-F1 IS THE FRACTION OF THE BE7 THAT IS BURNED BY PROTON CAPTURE.
516C F3 IS THE FRACTION OF THE N14 THAT IS BURNED BY P, ALPHA REACTION.
517C 1-F3 IS THE FRACTION OF THE N15 THAT IS BURNED BY P, GAMMA REACTION.
518C SEE TABLE 21 OF BAHCALL AND ULRICH (1988), REV. MOD. PHYS. 60.
519c 10/13/97. I changed Temp3 (i.e., tau) by 5/10^5 as a result of
520c using bare nuclear masses. Previously coefficient was -10.26202.
521c I did not change Be7electron for the slightly different S0 for
522c electron capture, since that is done in SStandard. Previous coefficient
523c in Be7electron expression was (3.126571E+5). 10/14/97.
524c
525 BE7ELECTRON = (1.752D-10)*T9M12*(1.0 + 0.004D0*(1000.*T9-16.))
526 BE7ELECTRON = BE7ELECTRON*EMU*SSTANDARD(15)
527 TEMP3 = (-10.2625D0*T9M13)
528 BE7PROTON = (3.128813D+5)*X*SSTANDARD(16)*EXP(TEMP3)
529
530C INCLUDE FOR BE7PROTON THE T9M23 FACTOR AND ALL CORRECTIONS PROPORTIONAL TO
531C Q1,...,Q5 FROM EQUATION 3.14 OF NEUTRINO ASTROPHYSICS. THESE
532C CORRECTIONS ARE DEFINED EARLIER IN THIS SUBROUTINE.
533C QRBE7 = T9M23 + Q1(8)*T9M13 + Q2(8)+ Q3(8)*T9P13
534C $ + Q4(8)*T9P23 + Q5(8)*T9
535C MHP 9/14 ADDED THE ABILITY TO ALTER DERIVATIVES INDEPENDENTLY
536 QRBE7 = T9M23 + Q1(8)*T9M13 + QS0E(8)*(Q2(8)+ Q3(8)*T9P13)
537 $ $ + QQS0EE(8)*(Q4(8)*T9P23 + Q5(8)*T9)
538 BE7PROTON = BE7PROTON*QRBE7
539C CALCULATE THE SCREENING CORRECTION FOR BE7 + P REACTION. USE WEAK AND
540C INTERMEDIATE SCREENING FORMULAE.
541 ZPRDBE7P = 4.0
542 Z86BE7P = 5.7790D0
543 UWK = TM1*ZPRDBE7P
544 IF(UWK.LE.WEAKSCREENING) THEN
545 UTOTBE7P = UWK
546 ELSE
547 UINT = 0.38D0*XXL8*XTR*Z86BE7P/(AMU*Z58*Z28)
548 UTOTBE7P = UINT
549 END IF
550 BE7PROTON = BE7PROTON*EXP(UTOTBE7P)
551C END OF CALCULATION OF SCREENING CORRECTION FOR BE7 + P REACTION.
552C MULTIPLY RATES BY FACTOR OF RHO/[(ATOMIC MASS UNIT)*A(BE7)] TO GET
553C IN UNITS OF GM^{-1}. CALL FACTOR CAMUBE7. Corrected for Be7 bare
554c mass number. Previously used 8.582295E+22 in the expression below.
555c These corrections were made on 10/14/97.
556c
557 CAMUBE7 = RHO*8.584981D+22
558 BE7PROTON = CAMUBE7*BE7PROTON
559 BE7ELECTRON = CAMUBE7*BE7ELECTRON
560C END OF MULTIPLICATION INSERTED NOVEMBER 6, 1990.
561 F1 = BE7ELECTRON/(BE7ELECTRON + BE7PROTON)
562C *********************************************************************
563C END OF CALCULATION OF CRUCIAL BE7 ELECTRON CAPTURE AND PROTON CAPTURE
564C RATES AND THEIR RATIO.
565C *********************************************************************
566C ***************************
567C N15 + P BRANCHING.
568C ***************************
569C THE FOLLOWING STATEMENTS COMPUTE THE BRANCHING OF N15(P,ALPHA)C12
570C AND N15(P,GAMMA)O16. THESE STATEMENTS REPLACE OUTDATED STATEMENTS
571C IN THE YALE CODE. THE CNO CROSS-SECTION FACTORS ARE FROM TABLE 3.4
572C OF NEUTRINO ASTROPHYSICS. THE RATIO OF THE REACTIONS DEPENDS ONLY
573C UPON THE EFFECTIVE ZERO ENERGY S-FACTOR, WHICH IS S0(ZERO ENERGY)
574C TIMES THE COMBINATION OF TEMPERATURE AND S-FACTOR DERIVATIVES/S0
575C THAT WAS USED PREVIOUSLY AS R1 IN THE RATE CALCULATIONS. THE
576C NUMERICAL COEFFICIENTS THAT APPEAR IN THE RATE WERE REPRESENTED
577C BY THE Q1(J),...Q5(J) FOR THE OTHER REACTIONS.
578C THE QVALUES FOR THE N15 REACTIONS HAVE BEEN COMPUTED SEPARATELY.
579C DBG 8/94 APPLIED MHP UPDATE TO NUCLEAR REACTIONS
580c To agree with Solar Fusion Workshop paper, the value of S0 in keV-b
581c has been changed from 78000. to 675000. on 9/25/97. On 10/14/97,
582c JNB changed cues.f so as to compute the Q-coefficients for the N15 + p
583c reactions. Also, checked that the coefficients are the same as the
584c ones given earlier in energy.f when we use the older CNO data.
585c
586 O16GAMMA = T9M23 + 0.0273016D0*T9M13 + 0.14374D0 + 0.027490D0*T9P13
587 $ $ + 6.14685D0*T9P23 + 2.98940D0*T9
588C MULTIPLY BY THE VALUE OF S0 IN KEV-B.
589C O16GAMMA = O16GAMMA*64.
590C MHP 9/14 ADDED THE OPTION TO MODIFY THE RELATIVE CROSS SECTIONS
591C FOR N15+P -> C12+ALPHA AND O16+GAMMA
592 O16GAMMA = O16GAMMA*64*FO16
593C
594 C12ALPHA = T9M23 + 0.0273016D0*T9M13 + 2.01186D0 + 0.384763D0*T9P13
595 $ $ + 17.0579D0*T9P23 + 8.29580D0*T9
596C C12ALPHA = C12ALPHA*67500.
597 C12ALPHA = C12ALPHA*67500*FC12
598 F3 = C12ALPHA/(C12ALPHA + O16GAMMA)
599 F4 = 1.0D0 - F3
600C END OF NEW ROUTINE FOR THE BRANCHING OF N15 + P .
601 50 50 DO 60 I=NZ,NRXNS
602 RATE(I)=0.
603 60 60 CONTINUE
604C***MHP 3/91 ALPHA CAPTURE REACTIONS UPDATED TO CAUGHLAN AND FOWLER(1988)
605C RATES. THE RATES ARE EXPRESSED IN THE SAME TERMS USED BY CZ, WITH
606C THE CONVERSION FACTOR IN THE FRONT OBTAINED FROM VANDENBERG'S
607C NOTES ON THE REACTION RATES.
608C RATE(8) HE4+C13
609C RATE(10) HE4+C12=>O16
610C RATE(11) HE4+N14=>O18
611C RATE(12) TRIPLE ALPHA
612 IF(TL.LT.TCUT(4)) GO TO 100
613C C13(ALPHA,N) O16
614 R1=T9M23+0.0129D0*T9M13+2.04D0+0.184D0*T9P13
615 A1 = 6.77D15*EXP(-32.329D0*T9M13-(T9/1.284D0)**2)
616 A2 = 3.82D5*EXP(-9.373D0*T9M1)
617 A3 = 1.41D6*EXP(-11.873D0*T9M1)
618 A4 = 2.00D9*EXP(-20.409D0*T9M1)
619 A5 = 2.92D9*EXP(-29.283D0*T9M1)
620 RATE(8) = 1.157126D22*RHO*EXP(UTOT(8))*(A1*R1+T9M32*
621 * * (A2+A3+A4+A5))
622C C12(ALPHA,GAMMA)O16
623 R1 = 1.0D0/(1.0D0+0.0489D0*T9M23)
624 R2 = 1.0D0/(1.0D0+0.2654D0*T9M23)
625 A1 = T9M2*EXP(-32.120D0*T9M13)
626 A2 = 1.04D8*R1**2*EXP(-(T9/3.496D0)**2)
627 A3 = 1.76D8*R2**2
628 A4 = 1.25D3*T9M32*EXP(-27.499D0*T9M1)
629 A5 = 1.43D-2*T9**5*EXP(-15.541D0*T9M1)
630 RATE(10) = 1.25388D22*RHO*EXP(UTOT(10))*(A1*(A2+A3)+A4+A5)
631C N14(ALPHA,GAMMA)F18 + F18=>O18+EPLUS+NU
632 R1 = T9M23+0.012D0*T9M13+1.45D0+0.177D0*T9P13+1.97D0*T9P23
633 * * +0.406D0*T9
634 A1 = 7.78D9*EXP(-36.031D0*T9M13-(T9/0.881D0)**2)
635 A2 = T9M32*2.36D-10*EXP(-2.798D0*T9M1)
636 A3 = T9M32*2.03D0*EXP(-5.054D0*T9M1)
637 A4 = T9M23*1.15D4*EXP(-12.310D0*T9M1)
638 RATE(11)= 1.07452D22*RHO*EXP(UTOT(11))*(A1*R1+A2+A3+A4)
639C TRIPLE ALPHA
640 RATE(12) = 1.565315D21*RHO**2*T9M1*T9M2*2.79D-8*
641 * * EXP(-4.4027D0*T9M1+UTOT(12))
642 100 100 CONTINUE
643 RATE(9) = 0.0D0
644 RATE(13) = 0.0D0
645C END OF XEROING OUT OF REACTIONS 9 AND 13.
646 DO 130 I=1,NRXNS
647 IF(RATE(I).LE.1.E-5) RATE(I) = 0.0
648 130 130 CONTINUE
649C ******************************************************
650C RATES PER 10^9 YEARS PER ATOMIC MASS UNIT: HRK(IU)
651C ******************************************************
652C HR1, ..., HR13 ARE THE RATES OF THE INDIVIDUAL REACTIONS.
653C THE INTERPRETATION OF WHICH REACTION GOES WITH WHICH SYMBOL CAN BE
654C MADE EASILY BY LOOKING AT THE DEFINITIONS OF THE EG(I)'S.
655C THE ABUNDANCES ARE UPDATED IN SUBROUTINE KEMCOM USING THESE MATRICES.
656C C21 IS THE PRODUCT OF (10^9 YEARS/1 SECOND)*(1 ATOMIC MASS UNIT/1
657C GRAM). I HAVE USED HERE SIDEREAL YEAR IN CONVERTING TO SECONDS.
658 200 200 HR1(IU)=RATE(1)*C21
659 HR2(IU)=RATE(2)*C21
660 HR3(IU)=RATE(3)*C21
661 HR4(IU)=RATE(4)*C21
662 HR5(IU)=RATE(5)*C21
663 HR6(IU)=RATE(6)*C21
664 HR7(IU)=RATE(7)*C21
665 HR8(IU)=RATE(8)*C21
666 HR9(IU)=RATE(9)*C21
667 HR10(IU)=RATE(10)*C21
668 HR11(IU)=RATE(11)*C21
669 HR12(IU)=RATE(12)*C21
670 HR13(IU)=RATE(13)*C21
671 HF1(IU)=F3
672 HF2(IU)=F1
673C ****************************************
674C END OF COMPUTATION OF HRK(IU).
675C ****************************************
676 RETURN
677 END1"""Python version of rates.f (YREC 7be4133): the nuclear reaction rates at
2one shell, for the abundance updates (a stripped-down ENGEB)."""
3
4import math
5
6import numpy as np
7
8from pyrec import constants_mod
9from pyrec import cross_mod
10from pyrec import nmlpar_mod
11
12NELEM = 13
13NRXNS = 13
14
15# Thresholds still written as single-precision constants in the Fortran
16# (1.E-2, 1.E-30, 1.E-5), kept at their single-precision values.
17_SP_1EM2 = float(np.float32(1.0e-2))
18_SP_1EM30 = float(np.float32(1.0e-30))
19_SP_1EM5 = float(np.float32(1.0e-5))
20
21# DATA (index 0 unused). Isotopes: n, H1, D, H3, He3, He4, C12, C13, N14,
22# O16, O18, Ne20, Mg24. ANUC: bare nuclear masses (amu); ZNUC: charges.
23ANUC = np.array([0.0, 1.008665, 1.007276, 2.013553, 3.015501, 3.014933,
24 4.001506, 11.996709, 13.000064, 13.999233, 15.990526,
25 17.994772, 19.986954, 23.978458])
26ZNUC = np.array([0.0, 0., 1., 1., 1., 2., 2., 6., 6., 7., 8., 8., 10., 12.])
27# The coefficients of eq. 3.14 of Neutrino Astrophysics, reactions 1-7 and
28# Be7+p (8).
29Q1 = np.array([0.0, 0.12317, .03392, .0325, .0304, .03035, .0273, .02494,
30 .040572])
31Q2 = np.array([0.0, 1.08749, -.273, -.2085, .7630, -0.4044, -1.60, -1.224,
32 -0.2095])
33Q3 = np.array([0.0, .93833, -.0648, -.0474, .1626, -.08598, -.3064, -.2139,
34 -0.0595])
35Q4 = np.array([0.0, 0., 0., 0., 4.79, 7.456, 0.0, .69703, 0.16762])
36Q5 = np.array([0.0, 0., 0., 0., 2.595, 4.032, 0.0, 0.3097, 0.12114])
37Q6 = np.array([0.0, -3.3804, -12.2757, -12.826, -13.6899, -13.7173,
38 -15.2281, -16.6925])
39Q7 = np.array([0.0, 20.8964, 76.6003, 67.8036, 69.130, 70.3809, 69.8517,
40 70.8012])
41Q8 = np.array([0.0, 0., 0., 0., 0.0, 0.0, 0.0, 0.])
42# Screening: charge products and the coefficients of Graboske et al. 1973.
43ZPRD = np.array([0.0, 1., 4., 4., 6., 6., 7., 8., 12., 16., 12., 14., 12.,
44 36.])
45Z53 = np.array([0.0, 1.175, 3.73, 3.73, 4.804, 4.804, 5.385, 5.941, 9.014,
46 11.24, 9.014, 10.15, 9.104, 23.28])
47Z43 = np.array([0.0, 0.52, 1.31, 1.31, 1.488, 1.488, 1.61, 1.721, 2.577,
48 3.025, 2.577, 2.81, 2.577, 5.668])
49Z23 = np.array([0.0, -0.413, -0.655, -0.655, -0.643, -0.643, -0.659,
50 -0.673, -0.889, -0.946, -0.889, -0.92, -0.889, -1.36])
51Z86 = np.array([0.0, 1.630, 5.917, 5.917, 8.302, 8.302, 9.520, 10.716,
52 16.192, 20.978, 16.192, 18.606, 16.192, 45.6635])
53# (10^9 years / 1 second) * (1 amu / 1 gram).
54C21 = 5.240358e-8
55
56# Locals kept between calls (SAVE): the branching fractions, which reach
57# the output unchanged below TCUT(1), a path no caller takes (see the page).
58f1 = 0.0
59f3 = 0.0
60
61
62def rates(dl: float, tl: float, x: float, y: float, xhe3: float, xc12: float, xc13: float, xn14: float, xo16: float,
63 xo18: float, iu: int, hr1: np.ndarray, hr2: np.ndarray, hr3: np.ndarray, hr4: np.ndarray, hr5: np.ndarray,
64 hr6: np.ndarray, hr7: np.ndarray, hr8: np.ndarray, hr9: np.ndarray, hr10: np.ndarray, hr11: np.ndarray,
65 hr12: np.ndarray, hr13: np.ndarray, hf1: np.ndarray, hf2: np.ndarray) -> None:
66 """Nuclear reaction rates at shell iu: the 13 rates (pp chain, CNO,
67 alpha captures) with weak, intermediate or strong screening, times
68 C21, and the branching fractions of N15+p (hf1) and Be7 (hf2).
69
70 Translates: rates.f#RATES (7be4133)
71
72 Arguments: log10 rho (dl), log10 T (tl), the mass fractions x ... xo18,
73 the shell index iu. Arrays changed in place: hr1 ... hr13, hf1, hf2
74 (element iu). Nothing is returned.
75
76 """
77
78 global f1, f3
79 c = constants_mod
80 cr = cross_mod
81 nml = nmlpar_mod
82 xfrac = np.zeros(NELEM + 1)
83 rate = np.zeros(NRXNS + 1)
84 utot = np.zeros(NRXNS + 1)
85
86 # Mass fractions of the 13 isotopes (Fortran lines 287–299).
87 xfrac[1] = 0.0
88 xfrac[2] = x
89 xfrac[3] = 0.0
90 xfrac[4] = 0.0
91 xfrac[5] = xhe3
92 xfrac[6] = y
93 xfrac[7] = xc12
94 xfrac[8] = xc13
95 xfrac[9] = xn14
96 xfrac[10] = xo16
97 xfrac[11] = xo18
98 xfrac[12] = 0.0
99 xfrac[13] = 0.0
100
101 # Composition sums: 1/mu_I, 1/mu_e, and the sums for screening (Fortran
102 # lines 320–330).
103 amu = 0.0
104 emu = 0.0
105 xtr = 0.0
106 zet = 0.0
107 for i in range(1, NELEM + 1):
108 trm = xfrac[i] / ANUC[i]
109 amu = amu + trm
110 emu = emu + trm * ZNUC[i]
111 xtr = xtr + trm * ZNUC[i]**1.58
112 zet = zet + trm * ZNUC[i]**2
113
114 # Fortran lines 339–344.
115 rwe = math.exp(c.cln * dl) * emu
116 dd = dl
117
118 # Below TCUT(1): no burning (Fortran lines 346–351).
119 if tl <= nml.tcut[1]:
120 for i in range(1, NRXNS + 1):
121 rate[i] = 0.0
122 # go to 200; f1, f3 keep the previous call's values.
123 else:
124 # Fortran lines 356–365.
125 rho = math.exp(c.cln * dd)
126 t9 = math.exp(c.cln * (tl - 9.0))
127 t9p13 = t9**c.cc13
128 t9p23 = t9p13**2
129 t9m13 = 1.0 / t9p13
130 t9m23 = t9m13**2
131 t9m1 = 1.0 / t9
132 t9m2 = t9m1**2
133 t9m12 = 1.0 / math.sqrt(t9)
134 t9m32 = t9m1 * t9m12
135
136 # Electron degeneracy, for Salpeter's screening (Fortran lines
137 # 380–392).
138 pfmc2 = 1.017677e-4 * rwe**c.cc23
139 efmkt = 5.92986 * t9m1 * (math.sqrt(1.0 + pfmc2) - 1.0)
140 if efmkt <= _SP_1EM2:
141 fprf = 1.0
142 else:
143 degd = math.log10(efmkt)
144 if degd >= 1.5:
145 fprf = 0.0
146 else:
147 fprf = (0.75793 - 0.54621 * degd - 0.30964 * degd**2
148 + 0.12535 * degd**3 + 0.1203 * degd**4
149 - 0.012857 * degd**5 - 0.014768 * degd**6)
150
151 # Screening (Fortran lines 420–458).
152 xxl = 5.9426e-6 * t9m32 * math.sqrt(rho * amu)
153 xxl6 = xxl**c.cc23
154 xxl8 = xxl**0.86
155 zcurl = math.sqrt((zet + fprf * emu) / amu)
156 zbar = emu / amu
157 z58 = zcurl**0.58
158 z28 = zbar**0.28
159 z33 = zbar**c.cc13
160 tm1 = xxl * zcurl
161 for i in range(1, NRXNS + 1):
162 uwk = tm1 * ZPRD[i]
163 if uwk <= nml.weakscreening:
164 utot[i] = uwk
165 else:
166 uint = 0.38 * xxl8 * xtr * Z86[i] / (amu * z58 * z28)
167 if uwk <= 2.0:
168 utot[i] = uint
169 else:
170 ustr = 0.624 * z33 * xxl6 * (
171 Z53[i] + 0.316 * z33 * Z43[i]
172 + 0.737 * Z23[i] / (zbar * xxl6))
173 if ustr < uint or uwk >= 5.0:
174 utot[i] = ustr
175 else:
176 utot[i] = uint
177
178 # No hydrogen: no pp or CNO rates (Fortran lines 464–470).
179 nz = 1
180 if x == 0.0:
181 f1 = 0.0
182 f3 = 0.0
183 else:
184 nz = 8
185
186 # Reactions 1-7 (Fortran lines 486–495).
187 for i in range(1, 8):
188 r1 = (t9m23 + Q1[i] * t9m13
189 + cr.qs0e[i] * (Q2[i] + Q3[i] * t9p13)
190 + cr.qqs0ee[i] * (Q4[i] * t9p23 + Q5[i] * t9))
191 rate[i] = rho * r1 * math.exp(Q6[i] * t9m13 + Q7[i]
192 + (Q8[i] * t9)**2 + utot[i])
193 rate[i] = rate[i] * nml.sstandard[i]
194 if rate[i] < _SP_1EM30:
195 rate[i] = 0.0
196
197 # Be7: electron and proton capture (Fortran lines 525–561).
198 be7electron = (1.752e-10 * t9m12
199 * (1.0 + 0.004 * (1000.0 * t9 - 16.0)))
200 be7electron = be7electron * emu * nml.sstandard[15]
201 temp3 = -10.2625 * t9m13
202 be7proton = 3.128813e+5 * x * nml.sstandard[16] * math.exp(temp3)
203 qrbe7 = (t9m23 + Q1[8] * t9m13
204 + cr.qs0e[8] * (Q2[8] + Q3[8] * t9p13)
205 + cr.qqs0ee[8] * (Q4[8] * t9p23 + Q5[8] * t9))
206 be7proton = be7proton * qrbe7
207 # Question (see the page): Be7+p's own screening constants,
208 # with no strong branch.
209 zprdbe7p = 4.0
210 z86be7p = 5.7790
211 uwk = tm1 * zprdbe7p
212 if uwk <= nml.weakscreening:
213 utotbe7p = uwk
214 else:
215 uint = 0.38 * xxl8 * xtr * z86be7p / (amu * z58 * z28)
216 utotbe7p = uint
217 be7proton = be7proton * math.exp(utotbe7p)
218 camube7 = rho * 8.584981e+22
219 be7proton = camube7 * be7proton
220 be7electron = camube7 * be7electron
221 f1 = be7electron / (be7electron + be7proton)
222
223 # N15+p: the (p,gamma) and (p,alpha) branches (Fortran lines
224 # 586–599).
225 o16gamma = (t9m23 + 0.0273016 * t9m13 + 0.14374
226 + 0.027490 * t9p13 + 6.14685 * t9p23 + 2.98940 * t9)
227 o16gamma = o16gamma * 64 * cr.fo16
228 c12alpha = (t9m23 + 0.0273016 * t9m13 + 2.01186
229 + 0.384763 * t9p13 + 17.0579 * t9p23 + 8.29580 * t9)
230 c12alpha = c12alpha * 67500 * cr.fc12
231 f3 = c12alpha / (c12alpha + o16gamma)
232 f4 = 1.0 - f3 # noqa: F841 (unused in the Fortran too)
233
234 # label 50 (Fortran lines 601–603).
235 for i in range(nz, NRXNS + 1):
236 rate[i] = 0.0
237
238 # Alpha captures, above TCUT(4) (Fortran line 612).
239 if tl >= nml.tcut[4]:
240 # C13(alpha,n)O16 (Fortran lines 614–621).
241 r1 = t9m23 + 0.0129 * t9m13 + 2.04 + 0.184 * t9p13
242 a1 = 6.77e15 * math.exp(-32.329 * t9m13 - (t9 / 1.284)**2)
243 a2 = 3.82e5 * math.exp(-9.373 * t9m1)
244 a3 = 1.41e6 * math.exp(-11.873 * t9m1)
245 a4 = 2.00e9 * math.exp(-20.409 * t9m1)
246 a5 = 2.92e9 * math.exp(-29.283 * t9m1)
247 rate[8] = 1.157126e22 * rho * math.exp(utot[8]) * (
248 a1 * r1 + t9m32 * (a2 + a3 + a4 + a5))
249
250 # C12(alpha,gamma)O16 (Fortran lines 623–630).
251 r1 = 1.0 / (1.0 + 0.0489 * t9m23)
252 r2 = 1.0 / (1.0 + 0.2654 * t9m23)
253 a1 = t9m2 * math.exp(-32.120 * t9m13)
254 a2 = 1.04e8 * r1**2 * math.exp(-(t9 / 3.496)**2)
255 a3 = 1.76e8 * r2**2
256 a4 = 1.25e3 * t9m32 * math.exp(-27.499 * t9m1)
257 a5 = 1.43e-2 * t9**5 * math.exp(-15.541 * t9m1)
258 rate[10] = 1.25388e22 * rho * math.exp(utot[10]) * (
259 a1 * (a2 + a3) + a4 + a5)
260
261 # N14(alpha,gamma)F18, F18 => O18 + e+ + nu (Fortran lines
262 # 632–638).
263 r1 = (t9m23 + 0.012 * t9m13 + 1.45 + 0.177 * t9p13
264 + 1.97 * t9p23 + 0.406 * t9)
265 a1 = 7.78e9 * math.exp(-36.031 * t9m13 - (t9 / 0.881)**2)
266 a2 = t9m32 * 2.36e-10 * math.exp(-2.798 * t9m1)
267 a3 = t9m32 * 2.03 * math.exp(-5.054 * t9m1)
268 a4 = t9m23 * 1.15e4 * math.exp(-12.310 * t9m1)
269 rate[11] = 1.07452e22 * rho * math.exp(utot[11]) * (
270 a1 * r1 + a2 + a3 + a4)
271
272 # Triple alpha (Fortran lines 640–641).
273 rate[12] = (1.565315e21 * rho**2 * t9m1 * t9m2 * 2.79e-8
274 * math.exp(-4.4027 * t9m1 + utot[12]))
275
276 # label 100 (Fortran lines 642–648).
277 rate[9] = 0.0
278 rate[13] = 0.0
279 # Question (see the page): a second, much higher cut to zero.
280 for i in range(1, NRXNS + 1):
281 if rate[i] <= _SP_1EM5:
282 rate[i] = 0.0
283
284 # label 200: the rates in output units (Fortran lines 658–672).
285 hr1[iu] = rate[1] * C21
286 hr2[iu] = rate[2] * C21
287 hr3[iu] = rate[3] * C21
288 hr4[iu] = rate[4] * C21
289 hr5[iu] = rate[5] * C21
290 hr6[iu] = rate[6] * C21
291 hr7[iu] = rate[7] * C21
292 hr8[iu] = rate[8] * C21
293 hr9[iu] = rate[9] * C21
294 hr10[iu] = rate[10] * C21
295 hr11[iu] = rate[11] * C21
296 hr12[iu] = rate[12] * C21
297 hr13[iu] = rate[13] * C21
298 hf1[iu] = f3
299 hf2[iu] = f1