1CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2C ENGEB
3CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4 SUBROUTINE ENGEB(EPP1,EPP2,EPP3,ECN,E3AL,PEP,PET,SUM1,DL,
5C *TL,PDT,PDP,X,Y,Z,XHE3,XC12,XC13,XN14,XN15,XO16,XO17,
6C *XO18,XH2,XLI6,XLI7,XBE9,IU,HR1,HR2,HR3,HR4,HR5,HR6,HR7, ! KC 2025-05-31
7 * *TL,X,Y,XHE3,XC12,XC13,XN14,XO16,
8 * *XO18,XH2,IU,HR1,HR2,HR3,HR4,HR5,HR6,HR7,
9 * *HR8,HR9,HR10,HR11,HR12,HR13,HF1,HF2,BE7MASSFRACTION,EALPCA,ENU)
10C 10/15/26 MHP via Claude
11C code changed to take JSON from DIMENSIONS_MOD instead of declaring
12C PARAMETER(JSON=5000) here.
13 USE DIMENSIONS_MOD
14C 10/14/26 MHP via Claude
15C code changed to convert COMMON/OVRTRN/ into OVRTRN_MOD.
16 USE OVRTRN_MOD
17C 10/14/26 MHP via Claude
18C code changed to convert COMMON/FLUXES/ into FLUXES_MOD.
19 USE FLUXES_MOD
20C 10/14/26 MHP via Claude
21C code changed to convert COMMON/DEUTER/ into DEUTER_MOD.
22 USE DEUTER_MOD
23C 10/14/26 MHP via Claude
24C code changed to convert COMMON/CROSS/ into CROSS_MOD.
25 USE CROSS_MOD
26C 10/14/26 MHP via Claude
27C code changed to convert COMMON/NMLPAR/ into NMLPAR_MOD.
28 USE NMLPAR_MOD
29C 10/14/26 MHP via Claude
30C code changed to convert COMMON/CONSTANTS/ into CONSTANTS_MOD.
31 USE CONSTANTS_MOD
32C 10/20/26 MHP via Claude
33C code changed to replace implicit typing with IMPLICIT NONE and
34C explicit declarations.
35 IMPLICIT NONE
36 REAL*8 A1,A2,A3,A4,A5,AMU,ANUC,BE7ELECTRON,BE7MASSFRACTION,
37 * * BE7PROTON,C12ALPHA,C21,CAMUBE7,CONVERT,D,DA1,DD,DEGD,DG,
38 * * DGDEUT,DL,DR1,DRATRO,DRATT,DSCR,DSCT,DSNUDD,DSNUDT,E3AL,
39 * * EALPCA,ECN,EFMKT,EG,EGDEUT,EL,EL2,ELI,EMU,EMUE,EN,ENU,EPP1,
40 * * EPP2,EPP3,EX1,EX2,EX3,EZ,EZ3,F1,F2,F3,F4,FOURPIAU2,FPRF,
41 * * HF1,HF2,HR1,HR10,HR11,HR12,HR13,HR2,HR3,HR4,HR5,HR6,HR7,
42 * * HR8,HR9,O16GAMMA,PEP,PET,PFMC2,POLX10,POLX11,POLX12,POLX21,
43 * * POLX22,POLX31,POLX32,Q1,Q2,Q3,Q4,Q5,Q6,Q6HEP,Q7,Q8,QDEUT,
44 * * QEDN,QEDNX,QETN,QETNX,QRBE7,QRTDEUT,R1,R2,RATE,RDEUT,
45 * * RDEUT2,RDEUTMAX,RHO,RWE,SNU,SUM1,SUM2,SUM3,T,T9,T9M1,T9M12,
46 * * T9M13,T9M2,T9M23,T9M32,T9P13,T9P23,TEMP,TEMP3,TFACDEUT,
47 * * TFACDEUT2,TL,TM1,TRM,UINT,USTR,UTOT,UTOTBE7P,UTOTHE3P,UWK,
48 * * V1,V2,V3,X,XC12,XC13,XFRAC,XH2,XHE3,XN14,XO16,XO18,XTR,XXL,
49 * * XXL6,XXL8,Y,Z23,Z28,Z33,Z43,Z53,Z58,Z86,Z86BE7P,Z86HE3P,
50 * * ZBAR,ZC,ZCURL,ZET,ZNUC,ZO,ZPRD,ZPRDBE7P,ZPRDHE3P,ZZ
51 INTEGER I,IU,K,NELEM,NRXNS,NZ
52
53
54C 3/92 DBG Added new neutrino loss calculation routines
55C NOVEMBER 6, 1990 (JNB)
56C THE FOLLOWING SUBROUTINE CALCULATES THE NUCLEAR REACTION RATES WITH
57C SPECIAL ATTENTION TO DETAIL REQUIRED FOR CALCULATING SOLAR NEUTRINO
58C FLUXES. THE NEUTRINO FLUXES ARE EVALUATED ALSO IN THIS SUBROUTINE.
59C ALL PHYSICAL QUANTITIES ARE CGS. THE REACTION RATES ARE IN
60C GM^{-1}S^{-1}.
61C MHP 10/97
62C
63c On 10/13/97, JNB converted the nuclear masses from neutral nuclear
64c masses to bare nuclear masses by subtracting Z(I)*(m_e)*c^2 from
65c the neutral nuclear masses. This caused changes in a number of
66c places: in ANUC(I), in Q1(I)-Q7(I), in the calculation of the Be7electron
67c Be7proton rates, and in the calculation of the N15p branching ratio.
68c
69c JNB made some purely cosmetic changes on 1/20/96. Revised all of the
70c input Q's on 9/23-25/97 to agree with submitted version of Solar
71c Fusion Workshop paper. The SStandard are fixed to agree with
72c the Workshop paper. JNB recalculated all of the EG(I) to determine
73c the best values for the energy generation for all the reactions,
74c taking account of my improved calculations of neutrino energy loss.
75c The calculations are documented in Vol. 19, 132-141, 1997 of my notes.
76c The neutral atom mass differences are taken from Table of Isotopes,
77c 8th Ed, 1996 and the neutrino energy losses from Bahcall, Gallium
78c solar neutrino experiments, Phys Rev C, in press, 1997.
79c
80c All numbers in this subroutine have been calculated by John Bahcall
81c so that they agree with the modern numbers in Neutrino
82c Astrophysics (1989) or much more recent results, as indicated in
83c comments lines.
84C
85C PREVIOUS VERSIONS OF THE YALE CODE
86C USED THE NUCLEAR REACTION RATES PRIMARILY FROM FOWLER, CAUGHLAN, AND
87C ZIMMERMAN IN ANN. REV. ASTR. AND ASTROPHYS. (1975) OR, FOR THE BE7 AND
88C B8 RATES, THE VALUES FROM BAHCALL AND SEARS (1972), ALSO. ANN. REV. ASTR.
89C AND ASTROPHYS. SOME VALUES WERE FROM HARRIS ET AL (1983, ANN. REV. ASTR.
90C IN A FEW CASES, NUMERICAL ERRORS (NOT DUE TO REVISIONS IN THE NUCLEAR DATA)
91C HAVE BEEN CORRECTED. IN A SMALL NUMBER OF OTHER PLACES, THE PREVIOUS
92C PROGRAM CONTAINED PHYSICALLY INCORRECT STATEMENTS, WHICH HAVE BEEN CORRECTED
93C IN THE PRESENT VERSION. IN THE COURSE OF THE CHECKING AND REVISIONS, I
94C HAVE ADDED MANY COMMENT STATEMENTS IN ORDER TO MAKE THE PROGRAM MORE
95C TRANSPARENT AND SIMPLER TO REVISE. SOME STATEMENTS HAVE BEEN ADDED
96C TO SIMPLIFY THE PROCESS OF REVISING THE SUBROUTINE AS IMPROVED DATA
97C BECOME AVAILABLE. FOR EXAMPLE, I HAVE INSERTED EXPLICITLY
98C THE STANDARD CROSS SECTION FACTORS IN A WAY THAT IS EASY TO REVISE;
99C SSTANDARD(I) = 1.0 WHEN THE ITH CROSS SECTION HAS THE STANDARD VALUE
100C MEASUREMENTS USED IN NEUTRINO ASTROPHYSICS.
101C MHP 10/97
102C
103c The PREVIOUS standard values of SStandard(I) used were those that
104c were given in Table 1 of Bahcall and Pinsonneault (1992). This work
105c was published in the Reviews of Modern Physics, 64,885, 1992. The
106c current version of SStandard(I) refers to Bahcall and
107c Pinsonneault(1995) , Rev. Mod. Phys. 67, 781 (1995), Table 1, if
108c changes have occured. Otherwise, they are the same as in the
109c Bahcall-Pinsonnealt (1992) Rev. Mod. Phys. article.
110C
111c Weakscreening is a parameter set in this subroutine. To obtain
112c the Graboske et al. and Salpeter standard results, use:
113c weakscreening = 0.03. To investigate the effect of always using
114c weak screening, use a value for weakscreening greater than unity,
115c e. g., 30. The transition region between weak and strong screening
116c is defined by Graboske et al. as $\Lambda_{12} = 0.1$, see page
117c ApJ 181, 465 (1973) [5/15/97].
118c
119c The value of SStandard(17) for hep is taken from Carlson et al (1991)
120c Phys. Rev. C 44, 619. It corresponds to an S sub 0 =
121c 1.3 E-20 keV-barns, a factor of 0.1625 smaller than indicated by the
122c older measurements and calculations used in Neutrino Astrophysics.
123c
124C THE NUCLEAR ENERGY RELEASE TO THE STAR FROM EACH REACTION
125C IS TAKEN FROM BAHCALL AND ULRICH, RMP 60, 297 (1988) AND TAKES ACCOUNT
126C ACCURATELY OF NEUTRINO ENERGY LOSS.
127C
128C I HAVE ADDED A NEW SECTION AT THE END OF THE SUBROUTINE THAT
129C CALCULATES THE SOLAR NEUTRINO FLUXES AT THE EARTH. THESE FLUXES
130C ARE IN THE UNITS OF CM^-2 SEC^-2 PER GM. TO GET THE FLUX
131C FROM A SHELL, MULTIPLY BY THE MASS OF THE SHELL IN UNITS OF
132C GRAMS. THE FLUXES ARE IN A COMMON BLOCK, FLUXES. I ALSO CALCULATE
133C THE FICTIONAL NEUTRINO FLUXES ASSOCIATED WITH THE HE3 + HE3 AND WITH
134C THE HE3 + HE4 RECTIONS; THESE FICTIONAL FLUXES ARE USEFUL DIAGNOSTICS
135C OF THE SOLAR MODEL.
136C
137C *****************************************
138C CHANGING NUCLEAR REACTION CROSS SECTIONS.
139C *****************************************
140C NUCLEAR CROSS SECTIONS CAN BE CHANGED SIMPLY BY INSERTING NEW NUMBERS
141C FOR THE DATA VALUES OF SSTANDARD(I), WHICH ARE THE RATIOS OF THE
142C DESIRED CROSS SECTION FACTORS TO THE VALUES GIVEN IN TABLES 3.2 AND
143C 3.4 OF NEUTRINO ASTROPHYSICS (1989). IF THE VALUE GIVEN IN NEUTRINO
144C ASTROPHYSICS IS USED, THEN SSTANDARD(I) = 1.0 . TO INCREASE THE CROSS
145C SECTION FOR REACTION K BY A FACTOR OF TWO COMPARED TO THE STANDARD
146C VALUE, SET SSTANDARD(K) = 2.0 . TO DETERMINE WHICH VALUE OF I GOES
147C WITH WHICH REACTION, SEE THE SECTION JUST BELOW.
148C THE ENERGY DERIVATIVES ENTER IN A FORM IN WHICH THEY ARE DIVIDED BY
149C THE ABSOLUTE VALUES OF THE CROSS SECTIONS AT ZERO ENERGY. THUS IF
150C THE SHAPE OF THE CROSS SECTION EXTRAPOLATION IS UNCHANGED AND ONLY
151C THE INTERCEPT OF S(E) AT ZERO ENERGY IS CHANGED, THEN NO CORRECTION
152C NEED BE MADE FOR THE DERIVATIVES. THEY ARE AUTOMATICALLY SCALED
153C CORRECTLY. THE EXACT WAY THAT THE DERIVATIVES ENTER THE
154C CALCULATIONS IS DESCRIBED IN THE SECTION LABELED ``DEFINING THE
155C Q(I)'' THAT IS PRESENTED BELOW.
156C ************************************
157C IDENTIFYING THE REACTIONS.
158C ************************************
159C THE VALUE OF J DENOTES WHICH OF THE REACTIONS THE COEFFICIENTS
160C REFER TO:
161C J = 1, PP; J = 2, HE3+HE3; J = 3, HE3+ HE4; J =4, P + C12; J = 5, P+C13;
162C J = 6. P + N14; J = 7, P + O16.
163C REACTIONS J = 8, 13 ARE NOT RELEVANT FOR THE SOLAR INTERIOR; THEY ARE
164C HOLDOVERS FROM THE EARLIER YALE CODE.
165C REACTION 14 IS PEP; REACTION 15 IS BE7 ELECTRON CAPTURE; REACTION 16 IS
166C BE7 PROTON CAPTURE; REACTION 17 IS THE HEP REACTION.
167C do not change sstandard(14) unless you want to change the ratio of
168C pep to pp.
169C REACTIONS 14-17 WERE NOT EXPLICITLY INCLUDED IN THE YALE
170C PREVIOUS VERSION OF THE CODE, BUT THEY ARE IMPORTANT FOR
171C SOLAR NEUTRINO CALCULATIONS.
172C THE BRANCHING OF THE N15 + P REACTIONS IS TREATED IN A SERIES OF
173C SEPARATE STATEMENTS FOLLOWING THE CALCULATION OF THE BE7 + P
174C REACTION. SEE THE DEFINITIONS OF F3 AND F4. IF THE CROSS-SECTION
175C FACTORS OF THE N15 + P REACTIONS ARE REVISED, THEN THE NUMERICAL
176C COEFFICIENTS MUST BE CHANGED IN THE DEFINITION OF C12ALPHA AND
177C O16GAMMA.
178C FOR Q1(I), ...,Q(5(I), I = 8 CORRESPONDS TO THE BE7 + P REACTION.
179C THIS ASSIGNMENT FOR I = 8 IS ONLY VALID FOR THE LISTED Q'S AND NOT
180C FOR OTHER ARRAYS IN THE PROGRAM.
181C IU IS THE SHELL NUMBER.
182
183
184
185
186C 10/13/26 MHP via Claude: removed the unused COMMON/IOUNITS/ declaration
187C (no member referenced here; residue of the obsolete-option removals).
188C 10/12/26 MHP via Claude
189C code changed to extend COMMON/NMLPAR/ to 234 members, adding the
190C namelist variables that the physics routines read from 27 COMMON
191C blocks which also held derived or working members. Those blocks keep
192C only their non-namelist members; five of them -- NEWMX, VMULT,
193C PMMWIND, CCOUT1 and ENVGEN -- had nothing left and are gone.
194C Derivation-only namelist variables from the same blocks went to
195C COMMON/NMLBYPASS/ instead, not here.
196C
197C Declared identically in all 121 files that hold any of these members.
198C Generated from one member list, so every copy is byte-identical; the
199C linker's 'size of symbol changed' warning is the check that they are.
200C 10/13/26 MHP via Claude
201C code changed to drop COMMON/CTLIM/, declared here but never used.
202C 9/25/26 MHP via Claude
203C code changed to merge COMMON/CONST/, COMMON/CONST1/, COMMON/CONST2/,
204C and COMMON/CONST3/ into a single COMMON/CONSTANTS/
205C 10/13/26 MHP via Claude
206C code changed to replace COMMON/NEWEPS/ with explicit arguments: engeb.f
207C computes EALPCA and ENU, and coefft.f and ytime.f read them right after
208C their own CALL ENGEB, so they are returned as arguments. main.f, the
209C third caller, passes locals it does not use.
210C 10/13/26 MHP via Claude
211C code changed to replace COMMON/BE7/ with an explicit argument. ENGEB
212C computes BE7MASSFRACTION and main.f is its only reader, storing it into
213C BE7M(I) right after the call, so it is now ENGEB's last argument.
214C ENGEB's other two callers, coefft.f and ytime.f, pass a local they do
215C not use.
216C 9/06 GN --- New neutrino loss common block
217C KC 2025-05-30 reordered common block elements
218C COMMON/NULOSS/LNULOS1,DSNUDT,DSNUDD
219C 10/13/26 MHP via Claude
220C code changed to remove COMMON/NULOSS/: engeb.f assigns DSNUDT and
221C DSNUDD and nothing reads them, in engeb.f or anywhere else, so they are
222C now plain locals there. parmin.f declared the block without using it.
223C MHP 8/96 CROSS SECTIONS PUT IN COMMON BLOCK.
224C COMMON/CROSS/SSTANDARD(17)
225C MHP 6/14 DERIVATIVES ADDED
226C G Somers 3/17, ADDING NEW TAUCZ COMMON BLOCK
227C JVS 10/11 Common block for He3+He3 luminosity
228 DIMENSION HR1(JSON),HR2(JSON),HR3(JSON),HR4(JSON),HR5(JSON),
229 1 1 HR6(JSON),HR7(JSON),HR8(JSON),HR9(JSON),HR10(JSON),HR11(JSON),
230 2 2 HR12(JSON),HR13(JSON),HF1(JSON),HF2(JSON)
231 DIMENSION XFRAC(13),RATE(13),DRATRO(13),DRATT(13),UTOT(13),
232 1 1 DSCR (13),DSCT(13),DG(13),ZPRD(13),Z53(13),Z43(13),Z23(13),
233 2 2 Z86(13),Q1(8),Q2(8),Q3(8),Q4(8),Q5(8),Q6(7),Q7(7),Q8(7),EG(50)
234 DIMENSION ANUC(13), ZNUC(13)
235 DIMENSION V1(7),V2(7),V3(7)
236
237
238C***MHP 5/91 STATEMENTS ADDED FOR EVOLVED STAR NEUTRINO LOSSES.
239C NEUTRINO COEFFICIENTS
240
241
242 DATA V1,V2,V3/
243 1 1 6.002D19,2.084D20,1.872D21,9.383D-1,-4.141D-1,5.829D-2,5.5924D0,
244 2 2 4.886D10,7.580D10,6.023D10,6.290D-3,7.483D-3,3.061D-4,1.5654D0,
245 3 3 2.320D-7,8.449D-8,1.787D-8,2.581D-2,1.734D-2,6.990D-4,0.56457D0/
246C ***************************
247C ANUC ARE ATOMIC MASS UNITS.
248C ***************************
249c On 10/13/97, JNB converted ANUC(I) from neutral atomic masses to
250c bare nuclear masses.
251c
252c The scale is the mass of C12 divided by 12 or 931.49432 MeV,
253c which is 1.6605402 times 10^{-24} gm. The values are obtained
254c by dividing the mass excess (expressed in MeV) by 931.49432 MeV and
255c adding to this the atomic mass number, A. The value for Be7, which
256c is used implicitly in this subroutine was, 7.016930, until 13/13/97.
257c We now use the bare nuclear mass of 7.014735 .
258c
259 DATA ANUC/1.008665D0,1.007276D0,2.013553D0,3.015501D0,3.014933D0,4.001506D0,
260 1 1 11.996709D0,13.000064D0,13.999233D0,15.990526D0,17.994772D0,19.986954D0,
261 2 2 23.978458D0/,ZNUC/0.,1.,1.,1.,2.,2.,6.,6.,7.,8.,8.,10.,12./,
262 3 3 NELEM/13/
263
264
265C THE ISOTOPES ARE NEUTRON, H1, D, H3, HE3, HE4, C12, C13, N14, O16, O18,
266C NE20, MG24, RESPECTIVELY. ALL OF THESE NUMBERS WERE CHECKED.
267C NELEM IS THE NUMBER OF ISOTOPES INCLUDED.
268C **************************************************************************
269C THE QUANTITIES Q1(J), Q2(J), ...,Q5(J) ARE THE TERMS IN EQUATION 3.14 OF
270C NEUTRINO ASTROPHYSICS AND IN EQUATION 53 OF FOWLER, CAUGHLAN, AND
271C ZIMMERMAN (1967) EQ. 53, IN BOTH CASES MULTIPLIED BY T SUB 9 ^(-2/3).
272C THE REACTIONS CORRESPONDING TO EACH J ARE LISTED ABOVE, UNDER:
273C IDENTIFYING THE RECTIONS.
274C FOR THIS SET OF PARAMETERS, AND ONLY FOR THIS SET OF PARAMETERS,
275C J = 8 CORRESPONDS TO THE BE7 + P REACTION.
276C **************************************************************************
277C GENERAL EXPRESSION FOR Q'S:
278C T_9^(-2/3)[S_EFF/S(0)] =
279C [T_9^(-2/3) + Q1(I)T_9^(-1/3) + Q2(I) + Q3(I)T_9^(1/3) +
280C Q4(I)T_9^(2/3) + Q(5)T_9 ]
281C
282C BY COMPARISON WITH EQUATION 3.14 OF NEUTRINO ASTROPHYSICS, WE SEE THAT
283C
284C Q1 = (5/(12*TAU))*T_9^(-1/3) .
285C Q2 = (S'/S)(E_0))*T_9^(-2/3) .
286C Q3 = (S'/S)(35/36)(K*10^9 K)
287C Q4 = (S''/2S)(E_0^2)(T_9^(-4/3)
288C Q5 = (89/72)(S''/S)(E_0)(KT)(T_9^(-5/3)
289C
290C EACH OF THE Q'S IS INDEPENDENT OF TEMPERATURE (T), AS CAN BE SEEN FROM
291C EQUATIONS 3.10 AND 3.11 .
292C
293C MHP 10/97
294c All of the values of the Q1, ...., Q5 have been recalculated, using
295c where needed nuclear cross sections given in Tables 3.2 and 3.4 of
296c Neutrino Astrophysics. They have been updated on 9/16/97 to reflect
297c the derivatives and cross section factors in Adelberger et al. 1998,
298c the paper on the Solar Fusion Workshop.
299c
300C ******************************************************************
301C Q6 IS THE COEFFICIENT OF THE TEMPERATURE TERM IN THE DEFINITION OF
302C TAU, EQUATION 3.10 OF NEUTRINO ASTROPHYSICS.
303C TAU = Q6*(T SUB 9 TO THE (-1/3) POWER ).
304C ******************************************************************
305C SLIGHT CHANGES HAVE BEEN MADE IN THE PREVIOUS VALUES OF Q6 TO MAKE
306C THE DATA MORE ACCURATE.
307C NOTE THAT Q6 IS NEGATIVE.
308C ********************************************************************
309C Q7 IS THE CONSTANT IN FRONT OF THE REACTION RATE. THE LOGARITHMS ARE
310C RELATED TO S FACTORS BY A LOGARITHM AND VARIOUS NUMERICAL FACTORS.
311C ********************************************************************
312C THE GENERAL RELATION IS:
313C Q7 = 70.62860 + ((LN(Z0*Z1/A))/3) -LN(A0*A1) - LN(S SUB 0)
314C -LN(1 + DELTA_01)
315C HERE S SUB 0 IS THE CROSS SECTION FACTOR IN UNITS OF KEV-BARNS.
316C THE NUMERICAL VALUES USED HERE ARE TAKEN FROM TABLES 3.4 AND 3.2
317C OF NUCLEAR ASTROPHYSICS.
318C THE QUANTITY DELTA_01 IS NON-ZERO (EQUAL TO UNITY) ONLY WHEN THE
319C TWO REACTING NUCLEI, 0 AND 1, ARE IDENTICAL.
320C Q8 REFLECTS A TERM IN THE EXPONENTIAL THAT OCCURS IN THE RATES, THE
321C TERM BEING PROPORTIONAL TO E^( CONSTANT*T_9^2). SEE HARRIS, ET AL.
322C 1983, ANNUAL REV. ASTRON. ASTROPHYS.21, 165 (1983) FOR THE MEANING
323C OF THIS OBSCURE TERM.
324C THE VALUES OF Q1(I),...Q7(I) GIVEN BELOW WERE OBTAINED USING THE DATA
325C IN NEUTRINO ASTROPHYSICS WITH THE AID OF AUXILARY COMPUTER CODES
326C THAT GENERATED ACCURATE EVALUATIONS. THE NUMBERS GIVEN HERE ARE
327C IN MANY CASES COMPLETELY DIFFERENT FROM THE VALUES IN THE ORIGINAL
328C YALE CODE.
329C NRXNS IS THE NUMBER OF REACTIONS BEING TRACKED.
330C DBG 8/94 APPLIED MHP UPDATE TO NUCLEAR REACTIONS
331c 10/13/97. Changed Q(I) so that are now calculated for the bare nuclear
332c masses. The calculates were made cues.f . Last date on the calculations
333c in my notes is 10/10/97. Note Q6 is -tau(T_9 = 1); in cues.f, I calculate
334c tau(T_6 = 1). The connection is: Q6 = 0.1*tau(cues.f).
335c
336c
337C BP00 values
338C DATA Q1/0.12317,.03392,.0325,.0304,.03035,.0273,.02494,.040572/,
339C 1Q2/1.08749,-.273,-.2085,.7630,-0.4044,-1.60,-1.224, -0.2095/,
340C 2Q3/.93833,-.0648,-.0474,.1626,-.08598,-.3064,-.2139,-0.0595/,
341C 3Q4/0.,0.,0.,4.79,7.456,0.0,.69703,.16762/,
342C 4Q5/0.,0.,0.,2.595,4.032,0.0,0.3097,.12114/,
343C 5Q6/-3.3804,-12.2757,-12.826,-13.6899,-13.7173,-15.2281,-16.6925/,
344C 6Q7/20.8964,76.6003,67.8036,69.130,70.3809,69.8517,70.8012/,
345C 7Q8/0.,0.,0.,0.0,0.0,0.0,0./,
346C 8NRXNS/13/
347C Revised values 7/21/03
348C DATA Q1/0.12317,.03392,.0325,.0304,.03035,.0273,.02494,.040572/,
349C 1Q2/1.08749,-.273,-.2085,.7630,-0.4044,-1.60,-1.224, 0.0/,
350C 2Q3/.93833,-.0648,-.0474,.1626,-.08598,-.3064,-.2139,0.0/,
351C 3Q4/0.,0.,0.,4.79,7.456,0.0,.69703,0.0/,
352C 4Q5/0.,0.,0.,2.595,4.032,0.0,0.3097,0.0/,
353C 5Q6/-3.3804,-12.2757,-12.826,-13.6899,-13.7173,-15.2281,-16.6925/,
354C 6Q7/20.8964,76.6003,67.8036,69.130,70.3809,69.8517,70.8012/,
355C 7Q8/0.,0.,0.,0.0,0.0,0.0,0./,
356C 8NRXNS/13/
357C MHP 9/14 RESTORED BE7+P DERIVATIVES THAT WERE ZEROED OUT
358 DATA Q1/0.12317D0,.03392D0,.0325D0,.0304D0,.03035D0,.0273D0,.02494D0,.040572D0/,
359 1 1Q2/1.08749D0,-.273D0,-.2085D0,.7630D0,-0.4044D0,-1.60D0,-1.224D0,-0.2095D0/,
360 2 2Q3/.93833D0,-.0648D0,-.0474D0,.1626D0,-.08598D0,-.3064D0,-.2139D0,-0.0595D0/,
361 3 3Q4/0.,0.,0.,4.79D0,7.456D0,0.0,.69703D0,0.16762D0/,
362 4 4Q5/0.,0.,0.,2.595D0,4.032D0,0.0,0.3097D0,0.12114D0/,
363 5 5Q6/-3.3804D0,-12.2757D0,-12.826D0,-13.6899D0,-13.7173D0,-15.2281D0,-16.6925D0/,
364 6 6Q7/20.8964D0,76.6003D0,67.8036D0,69.130D0,70.3809D0,69.8517D0,70.8012D0/,
365 7 7Q8/0.,0.,0.,0.0,0.0,0.0,0./,
366 8 8NRXNS/13/
367C ***NOTE THAT SSTANDARD IS AN INPUT PARAMETER SET IN THE NAMELIST;
368C PREVIOUS PUBLISHED SETS OF SSTANDARD ARE INDICATED BELOW.
369c Changed slightly 3He-3He on 9/25/97 to take account of the S'.
370c
371c****************FD Feb 09 ************************************
372c Original data from Neutrino Astrophysics 1989 Bahcall
373c Table 3.2 and 3.4
374c Table 3.2 pp
375c Q(MeV) S_0(KeV barns)
376c H-p 1.44 4.07E-022
377c He3-He3 12.86 5.15E+003
378c He3-He4 1.59 0.54
379c 7Be-p 0.14 0.02
380c He-p 19.8 8.00E-020
381c
382c
383c Table 3.4 cno Q(MeV) S_0(MeV barns)
384c
385c C12-p 1.94 1.45E-003
386c C13-p 7.55 5.50E-003
387c N14-p 7.3 3.32E-003
388c N15-p O16 12.13 6.40E-002
389c N15-p C12 4.97 78
390c O16-p 0.6 9.40E-003
391c
392c****************************************************************************
393C FD-MP Fev 2009 values changed to included the results presented at Gran Sasso
394C by A. Formicola
395C Cross sections are:
396C s11 pp = 3.92 +- 0.08 D-25 MeVb Physun talk Formicola
397C s13 Hep = 8.6 +- 1.3 D-20 KeVb
398C s33 He3-He3 = 5.32 +- 0.08 MeVb
399C s34 He3_He4 = 0.568 +- 0.014 KeVb mean LUNA 2007 - Brown 2007 - Singh 2004
400C s17 Be7+p = 22.1 +-0.6 +-0.6 eVb A.Junghans PRC70(2004)045501
401C s114 N14-p = 1.57 +- 0.13 KeVb Marta et al. Luna coll. PRC 78 (2008) 022802)
402c
403c This cross section factor gives the following SSTANDARD
404c
405c SSTANDARD=0.9631,1.0330,1.0519,0.9241,1.3818,0.47290,1.0,
406c 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0108,0.84770,1.0750
407c**********************************************************************
408C BP03 values, changed 7/21/03
409C SStandard/0.9681,1.0485,0.9815,0.9241,1.3818,1.0542,1.0,
410C $ 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0108,0.8807,1.075/
411c Previously (6/16/97) used S at Gamow Peak. Agrees with Workshop paper.
412c
413C SStandard/0.9828,1.0485,0.9815,0.9241,1.3818,1.0542,1.0,
414C $ 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0108,0.7819,0.2875/
415c This is the revised version created from the Seattle Workshop paper
416c on Solar Fusion Reactions. Corrections inserted 9/16/1997. See pg.
417c 132, Volume 19, of notes.
418C 9 SStandard/0.9828,1.0291,0.9815,0.9241,1.3818,1.0542,1.0,
419C $ 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.018,0.7819,0.2875/
420C VALUES BASED ON PARKER REVIEW ARTICLE.
421C 9 SSTANDARD/1.0049,0.9709,0.9870,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,
422C $ 1.0,1.0,1.0,1.0,1.0,1.913/
423C BP 92 VALUES
424c 9 SSTANDARD/0.9828,0.9709,0.9870,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,
425c $ 1.0,1.0,1.0,1.0,0.9218,0.1625/
426C BP 95 VALUES
427C 9 SSTANDARD/0.9558,0.9690,0.9712,1.0,1.0,0.992,1.0,1.0,1.0,1.0,
428C $ 1.0,1.0,1.0,1.0,1.0,0.92088,0.1625/
429C LATEST VALUES, INCLUDING NEW PP RATE
430C 9 SSTANDARD/0.9558,0.9709,0.9870,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,
431C $ 1.0,1.0,1.0,1.0,0.9218,0.1625/
432C Dar & Shaviv Values
433C 9 SSTANDARD/0.9828,0.9709,0.8333,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,
434C $ 1.0,1.0,1.0,1.0,0.6996,0.1625/
435C Schramm & Shi Values
436C 9 SSTANDARD/0.9828,1.0874,0.9870,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,
437C $ 1.0,1.0,1.0,1.0,0.8313,0.1625/
438C *********************************************************************
439C THE VALUES OF SSTANDARD(I) ARE TO BE CHANGED FROM UNITY IF THE CROSS
440C SECTION FACTORS ARE NOT THE ONES GIVEN IN NEUTRINO ASTROPHYSICS,
441C TABLE 3.2 AND TABLE 3.4 .
442C THE CURRENT VALUES ARE CHANGED TO BE THE PREFERRED VALUES LISTED IN
443C THE LAST COLUMN OF TABLE 1 OF BAHCALL AND PINSONNEAULT (1991),
444C 6/14/91.
445C *********************************************************************
446C ZPRD IS USED IN SCREENING CALCULATIONS. IT IS THE PRODUCT OF THE
447C CHARGES OF THE INTERACTING IONS. ZPRD WAS CHECKED. Z86 IS USED
448C IN CALCULATING INTERMEDIATE SCREENING AND IS DEFINED BY GRABOSKE ET
449C AL, AP. J. 181, PAGE 465 (1973), IN TABLE 4. Z86 WAS CHECKED AND
450C SOME NUMERICAL VALUES WERE MADE SLIGHTLY MORE ACCURATE. Z53, Z43,
451C AND Z23 ARE ALSO DEFINED IN TABLE 4 (SEE ABOVE). SINCE THEY ARE
452C ONLY USED IN STRONG SCREENING, THE VALUES OF Z53, Z43, AND Z23
453C WERE NOT CHECKED.
454 DATA ZPRD/1.,4.,4.,6.,6.,7.,8.,12.,16.,12.,14.,12.,36./,Z53/1.175D0,
455 1 1 3.73D0,3.73D0,4.804D0,4.804D0,5.385D0,5.941D0,9.014D0,11.24D0,9.014D0,10.15D0,
456 2 2 9.104D0,23.28D0/,Z43/0.52D0,1.31D0,1.31D0,1.488D0,1.488D0,1.61D0,1.721D0,2.577D0,
457 3 3 3.025D0,2.577D0,2.81D0,2.577D0,5.668D0/,Z23/-0.413D0,-0.655D0,-0.655D0,-0.643D0,
458 4 4 -0.643D0,-0.659D0,-0.673D0,-0.889D0,-0.946D0,-0.889D0,-0.92D0,-0.889D0,-1.36D0/,
459 5 5 Z86/1.630D0,5.917D0,5.917D0,8.302D0,8.302D0,9.520D0,10.716D0,16.192D0,20.978D0,
460 6 6 16.192D0,18.606D0,16.192D0,45.6635D0/,
461 7 7 C21/5.240358D-8/
462 SAVE
463C ZERO OUT THE ENERGY YIELDS FROM NEUTRINOS(ENU) AND ALPHA CAPTURE
464C REACTIONS (EALPCA).
465 ENU = 0.0D0
466 EALPCA = 0.0D0
467C DEFINE NEXT THE FRACTIONAL ABUNDANCES BY MASS OF THE IMPORTANT
468C ISOTOPES.
469C X, Y, Z, XHE3,..., XBE9 ARE THE MASS FRACTIONS OF THE ISOTOPES.
470C THE ABUNDANCES OF NEUTRONS, H2, H3, NE20,AND MG24, WHICH ARE,
471C RESPECTIVELY, XFRAC(I) FOR I = 1,3,4,12,13, ARE NO LONGER USED.
472 XFRAC(1) = 0.0
473 XFRAC(2) = X
474C MHP 5/02 ADDED DEUTERIUM
475C XFRAC(3) = 0.0
476 XFRAC(3) = XH2
477 XFRAC(4) = 0.0
478 XFRAC(5) = XHE3
479 XFRAC(6) = Y
480 XFRAC(7) = XC12
481 XFRAC(8) = XC13
482 XFRAC(9) = XN14
483 XFRAC(10) = XO16
484 XFRAC(11) = XO18
485 XFRAC(12) = 0.0
486 XFRAC(13) = 0.0
487C *******************************************************************
488C BEGIN CALCULATION OF SCREENING CORRECTION.
489C *******************************************************************
490C THE BASIC REFERENCES ARE SALPETER, AUSTRALIAN JOURNAL OF PHYSICS,
491C VOL. 7, 373 (1954). THE FORMULA FOR WEAK SCREENING THAT IS BEING
492C PROGRAMMED IS EQUATION (25) OF THIS PAPER. THE OTHER IMPORTANT
493C REFERENCES ARE: DEWITT, GRABOSKE, AND COOPER, AP. J. 181, 439 (1973)
494C AND GRABOSKE ET AL., AP. J. 181, 457 (1973). THE VALUES OF EMU AND
495C ZET ARE ESSENTIAL FOR COMPUTING WEAK SCREENING; THE VALUE OF AMU IS
496C USED IN AN NON-ESSENTIAL WAY IN THIS COMPUTATION. XTR IS USED IN
497C COMPUTING INTERMEDIATE SCREENING.
498C AMU IS ONE OVER THE MEAN MOLECULAR WEIGHT OF THE IONS, MU SUB I .
499C EMU IS ONE OVER THE ELECTRON MEAN MOLECULAR WEIGHT, MU SUB E.
500C EMU IS USED HERE AS THE NAME FOR THE SECOND PART OF THE ZETA FUNCTION
501C IN THE SALPETER EXPRESSION FOR WEAK SCREENING.
502C XTR IS USED LATER IN THE INTERMEDIATE SCREENING CALCULATION. THE AVERAGE
503C OF THE QUANTITY Z**(3B -1) IS EQUAL TO XTR/AMU.
504C ZET IS THE FIRST PART OF THE SALPETER SCREENING ZETA VARIABLE.
505C MU = SUM OVER I OF [X(I)/A(I)].
506C MU SUB E = SUM OVER I [ Z(I)*X(I)/A(I)].
507 AMU = 0.
508 EMU = 0.
509 XTR = 0.
510 ZET = 0.
511 DO 10 I = 1,NELEM
512 TRM = XFRAC(I)/ANUC(I)
513 AMU = AMU+TRM
514 EMU = EMU+TRM*ZNUC(I)
515 XTR = XTR+TRM*ZNUC(I)**1.58D0
516 ZET = ZET+TRM*ZNUC(I)**2
517 10 10 CONTINUE
518C DL AND DT ARE THE THE LOG10 OF THE DENSITY AND TEMPERATURE.
519C THE UNIT OF TEMPERATURE IS 10^9 K AND THE UNIT OF DENSITY IS
520C GM PER CM^3 .
521C PDT AND PDP ARE THE DERIVATIVES OF THE DENSITY WITH RESPECT TO
522C TEMPERATURE AND DENSITY.
523C DD = LOG RHO TO THE BASE 10.
524C CLN = LN10. CLN IS CONVERSION BETWEEN LOG10 AND LN.
525C CONVERT DENSITY TO UNLOGGED FORM.
526C RWE = RHO/(MU SUB E), I. E., THE NUMBER OF ELECTRONS DIVIDED BY
527C AVOGADRO'S NUMBER.
528 RWE = ( EXP(CLN*DL) )*EMU
529C THE EXPRESSION FOR RWE WAS INCORRECT IN THE ORIGINAL YALE SUBROUTINE.
530C THE ORIGINAL VERSION HAD ( EXP(CLN*DL) ) DIVIDED BY EMU INSTEAD OF
531C MULTIPLIED BY EMU. RWE IS USED LATER IN COMPUTING THE SCREENING
532C CORRECTION.
533 DD = DL
534C SET RATES EQUAL TO ZERO FOR THE LOG_10(T) < 6.0.
535C REPLACED FIXED 1 MILLION K THRESHOLD WITH TCUT(1).
536C IF(TL.LE.6.0) THEN
537 IF(TL.LE.TCUT(1)) THEN
538C MHP 5/02 DEUTERIUM BURNING
539 DGDEUT = 0.0D0
540 QRTDEUT = 0.0D0
541 EN = -20.
542 PEP = 0.
543 PET = 0.
544 DO 20 I = 1,NRXNS
545 EG(I) = 0.
546 RATE(I) = 0.
547 DG(I) = 0.
548 20 20 CONTINUE
549 GO TO 200
550 ENDIF
551C T9P13 IS THE TEMPERATURE IN UNITS OF 10^9 DEGREES K TO THE PLUS 1/3
552C POWER. MINUS IS DENOTED BY M. HERE T9 IS THE TEMPERATURE IN UNITS
553C OF 10^9 K, CONVERTED FROM THE LOG_10 (T) AND RHO IS THE DENSITY IN
554C CGS UNITS.
555 RHO=EXP(CLN*DD)
556 T9 = EXP(CLN*(TL - 9.0D0))
557 T9P13 = T9**CC13
558 T9P23 = T9P13**2
559 T9M13=1./T9P13
560 T9M23=T9M13**2
561 T9M1=1./T9
562 T9M2=T9M1**2
563 T9M12=1./DSQRT(T9)
564 T9M32=T9M1*T9M12
565C MHP 5/02 ADD DEUTERIUM BURNING TERM TO THE CODE
566C IF DEUTERIUM IS ABOVE A MINIMUM THRESHOLD VALUE.
567C RDEUT IS THE RATE (EXCLUDING FACTORS OF THE
568C ABUNDANCES) AND QRTDEUT IS THE DERIVATIVE W/R/T T.
569C NOTE THAT SCREENING IS EXCLUDED - REASONABLE GIVEN
570C THE LOW TEMPERATURES INVOLVED.
571 IF(XH2.LE.1.0D-11)THEN
572 RDEUT = 0.0D0
573 QRTDEUT = 0.0D0
574 ELSE
575C ENERGY YIELD FOR DEUTERIUM BURNING
576 QDEUT = 5.494D0
577 ZZ = -3.72D0*T9M13
578 TFACDEUT = 1.0D0+0.112D0*T9P13+3.38D0*T9P23+2.65D0*T9
579C FACTOR OF CAVOG/ANUC(3) REFLECTS AVAGADROS NUMBER DIVIDED BY THE
580C MASS OF THE DEUTERON IN AMU
581C 10/27/26 MHP via Claude
582C code changed to correct two errors in RDEUT. The leading power of
583C T9 is now T9M23, not T9P23: the rate goes as T9**(-2/3), which the
584C -2 term in QRTDEUT already assumed. The 6.023D23 approximation to
585C Avogadro's number is replaced by CAVOG (CONSTANTS_MOD), here and in
586C RDEUTMAX below.
587 RDEUT = RHO*2.240D3*T9M23*EXP(ZZ)*TFACDEUT*CAVOG/ANUC(3)
588 TFACDEUT2 = 0.112D0*T9P13+6.76D0*T9P23+7.95D0*T9
589 QRTDEUT = CC13*((TFACDEUT2/TFACDEUT) -2.0D0 - ZZ)
590C NOW LIMIT DEUTERIUM BURNING IN A SURFACE CZ TO BE ON A TIME SCALE
591C NO SHORTER THAN THE CONVECTIVE OVERTURN TIMESCALE.
592 IF(IU.GE.JCZ .AND. TAUCZ.GT.1.0D0)THEN
593 RDEUTMAX = CAVOG/ANUC(3)/TAUCZ
594 RDEUT2 = RDEUT*X
595 IF(RDEUT2.GT.RDEUTMAX)THEN
596C JVS 0712 Commented out write command
597C WRITE(*,*)RDEUT2,RDEUTMAX
598 IF(X.GT.1.0D-6)THEN
599 RDEUT = RDEUTMAX/X
600 ENDIF
601 ENDIF
602 ENDIF
603 ENDIF
604C ***********************************
605C F PRIME/F
606C ***********************************
607C THE NEXT PIECE OF CODE COMPUTES FIRST THE FERMI ENERGY DIVIDED BY KT, WHERE
608C PFMC2 IS THE FERMI MOMENTUM DIVIDED BY MASS OF ELECTRON TIMES C, ALL
609C SQUARED AND EFMKT IS THE FERMI ENERGY DIVIDED BY KT. THE QUANTITY
610C FPRF IS THE RATIO OF F PRIME TO F IN SALPETER'S SCREENING CORRECTION.
611C THE VALUE OF FPRF IS DETERMINED IN THE INTERMEDIATE CASE BY AN
612C INTERPOLATION FORMULA DEPENDING UPON THE DEGREE OF DEGENERACY, AS
613C MEASURED BY DEGD = LOG10(E_F/KT). THE NUMERICAL VALUES FOR THE FIT
614C WERE TAKEN FROM SALPETER'S ORIGINAL PAPER, FIGURE 1. THE ONLY CHANGES
615C IN THIS PART OF THE SUBROUTINE WERE THE CORRECTION OF THE ERROR IN
616C THE DEFINITION OF RWE (SEE ABOVE) AND REFINEMENTS OF THE COEFFICIENTS
617C IN THE EXPRESSIONS FOR PFMC2 AND EFMKT.
618 PFMC2=1.017677D-4*RWE**CC23
619 EFMKT=5.92986D0*T9M1*(DSQRT(1.+PFMC2)-1.)
620 IF(EFMKT.LE.1.E-2) THEN
621 FPRF=1.0
622 ELSE
623 DEGD=DLOG10(EFMKT)
624 IF(DEGD.GE.1.5) THEN
625 FPRF=0.0
626 ELSE
627 FPRF=0.75793D0-0.54621D0*DEGD-0.30964D0*DEGD**2+0.12535D0*DEGD**3+
628 * * 0.1203D0*DEGD**4-0.012857D0*DEGD**5-0.014768D0*DEGD**6
629 ENDIF
630 ENDIF
631C END OF CALCULATION OF FERMI ENERGY DIVIDED BY KT AND THE INTERPOLATION
632C FORMULA FOR (F PRIME/F), WHICH APPEARS IN SALPETER'S SCREENING
633C FORMULA.
634C NOW WE GET TO THE COMPUTATION OF WEAK SCREENING (SEE ALSO PAGE 61 OF
635C NEUTRINO ASTROPHYSICS, WHICH GIVES ONLY A SIMPLIFIED FORMULA) AND
636C ALSO THE MORE COMPLICATED INTERMEDIATE AND STRONG SCREENING CASES
637C (SEE REFERENCES TO AP. J. 181 ABOVE FOR INTERMEDIATE
638C AND STRONG SCREENING), ESPECIALLY PAGE 465.
639C XXL IS USED IN ALL THE SCREENING FORMULAE. THIS QUANTITY IS THE
640C IS THE FUNCTION CALLED LAMBDA SUB ZERO BY GRABOSKE ET AL. THE
641C QUANTITY XXL**0.86 = XXL8 IS USED IN CALCULATING INTERMEDIATE
642C SCREENING.
643C ZCURL IS THE QUANTITY DEFINED BY EQUATION (4) OF DEWITT ET AL; IT
644C IS THEIR Z WITH A CURLY SYMBOL ON ITS TOP. ZCURL IS USED IN WEAK
645C AND IN INTERMEDIATE SCREENING AND WAS FIRST DEFINED BY SALPETER.
646C ZCURL IS THE SAME AS SALPETER'S ZETA EXCEPT FOR THE FACTOR OF 1/AMU.
647C (Z SUB 1 TIMES Z SUB 2)*XXL*ZCURL GIVES THE WEAK SCREENING FACTOR,
648C THE SAME AS SALPETER OR AS EQUATION (19) OF GRABOSKE ET AL.
649C Z BAR IS THE SAME AS Z BAR OF DE WITT ET AL AND IS THE AVERAGE CHARGE
650C OF THE IONS. IT IS EQUAL TO EMU/AMU. THE QUANTITY (Z BAR)**0.28 =
651C Z28 OCCURS IN THE COMPUTATION OF INTERMEDIATE SCREENING.
652C XXL6 IS USED FOR COMPUTING STRONG STRONG SCREENING.
653C THE NOTATION USED HERE IS EXPLAINED IN LARGE PART BY
654C EQUATION (4) OF DEWITT ET AL., AP. J. 181, PAGE 439.
655C THE FINAL EXPRESSION FOR WEAK SCREENING IS EXACTLY EQUAL TO SALPETER'S
656C FORMULA, WHICH INCLUDES A DEGENERACY CORRECTION. THE MORE GENERAL
657C EXPRESSIONS ARE GIVEN IN TABLE 4 AND EQUATION (19) OF GRABOSKE ET AL.
658 XXL=5.9426D-6*T9M32*DSQRT(RHO*AMU)
659 XXL6=XXL**CC23
660 XXL8=XXL**0.86D0
661 ZCURL=DSQRT((ZET+FPRF*EMU)/AMU)
662 ZBAR=EMU/AMU
663 Z58=ZCURL**0.58D0
664 Z28=ZBAR**0.28D0
665 Z33=ZBAR**CC13
666 TM1=XXL*ZCURL
667C COMPUTE SCREENING FOR EACH OF THE REACTIONS.
668 DO 30 I=1,NRXNS
669 UWK=TM1*ZPRD(I)
670 IF(UWK.LE.WEAKSCREENING) THEN
671C WEAKSCREENING IS A NUMERICAL PARAMETER PASSED IN THE FLUX COMMON
672C BLOCK. TO OBTAIN THE GRABOSKE ET AL. AND SALPETER STANDARD RESULTS,
673C USE: WEAKSCREENING = 0.03. FOR THE STANDARD SOLAR MODEL, THIS IS THE
674C VALUE THAT SHOULD BE ADOPTED. TO INVESTIGATE THE EFFECT OF ALWAYS USING
675C WEAK SCREENING, USE A LARGE VALUE FOR WEAKSCREENING, E. G., 30. AS
676C LONG AS WEAKSCREENING IS ASSUMED TO BE BIGGER THAN ONE, THE PROGRAM
677C WILL ALWAYS CALCULATE FOR THE SUN WITH THE WEAK SCREENING
678C APPROXIMATION.
679C UTOT IS THE FINAL SCREENING CORRECTION WHICH APPEARS IN THE
680C RATE EXPRESSION AS: EXP(UTOT) .
681C DSCR IS THE LOGARITHMIC DERIVATIVE WITH RESPECT TO DENSITY OF THE
682C SCREENING CORRECTION, D LOG (E^(U_TOT)) /D LOG RHO .
683C DSCT IS THE LOGARITHMIC DERIVATIVE OF THE SCREENING WITH RESPECT TO T,
684C D LOG (E^(U_TOT)) /D LOG T . THE LIMITING FORMULAE GIVEN IN THE FIRST
685C OPTION ARE OBVIOUS SINCE IN THE WEAK LIMIT SALPETER'S FORMULA SHOWS
686C THAT U IS PROPORTIONAL TO THE SQUARE ROOT OF RHO TIMES T^(-3/2).
687 UTOT(I)=UWK
688 DSCR(I)=0.5*UWK
689 DSCT(I)=-1.5*UWK
690 ELSE
691 UINT=0.38D0*XXL8*XTR*Z86(I)/(AMU*Z58*Z28)
692 IF(UWK.LE.2.) THEN
693 UTOT(I)=UINT
694 DSCR(I)=0.43D0*UINT
695 DSCT(I)=-1.29D0*UINT
696 ELSE
697 USTR=0.624D0*Z33*XXL6*(Z53(I)+0.316D0*Z33*Z43(I)+0.737D0*
698 * * Z23(I)/(ZBAR*XXL6))
699 IF(USTR.LT.UINT.OR.UWK.GE.5.) THEN
700 UTOT(I)=USTR
701 DSCR(I)=0.208D0*Z33*(Z53(I)+0.316D0*Z33*Z43(I))*XXL6
702 DSCT(I)=-3.*DSCR(I)
703 ELSE
704 UTOT(I)=UINT
705 DSCR(I)=0.43D0*UINT
706 DSCT(I)=-1.29D0*UINT
707 ENDIF
708 ENDIF
709 ENDIF
710 30 30 CONTINUE
711C ****************************************************************
712C END OF SCREENING CALCULATION. WEAK AND INTERMEDIATE SCREENING FORMS
713C ARE GIVEN CORRECTLY. STRONG SCREENING WAS NOT CHECKED BECAUSE IT IS
714C NOT RELEVANT FOR THE SUN.
715C ****************************************************************
716 NZ=1
717 IF(X.EQ.0.0) THEN
718 F1=0.
719 F2=0.
720 F3=0.
721 F4=0.
722 GOTO 50
723 ENDIF
724 NZ=8
725C **************************************************************
726C CALCULATE REACTION RATES FOR THE THREE PRINCIPAL RECTIONS OF
727C THE PP CHAIN: PP, HE3+HE3, HE3 +HE4, AND THE FOUR PROTON
728C BURNING REACTIONS ON C12: C13, N14, AND O16.
729C **************************************************************
730C R1 IS (T SUB 9)^(-3/2) TIMES (S SUB EFF)/(S SUB 0). THE CORRECT
731C EXPRESSION FOR (S SUB EFF)/(S SUB 0) IS GIVEN IN EQUATION 3.14 OF
732C NEUTRINO ASTROPHYSICS. THE NUMERICAL FORM THAT IS USED IS EQUATION
733C 52 OF FOWLER, CAUHLAN, AND ZIMMERMAN, VOL. 5, 1967.
734C RATE(I) IS THE RATE OF THE DIFFERENT REACTIONS PER SECOND PER GRAM,
735C EXCEPT THAT THE MASS FRACTIONS ARE OMITTED AT THIS POINT AND PUT IN
736C LATER.
737C DRATT IS LOGARITHMIC DERIVATIVE OF RATE WITH RESPECT TO TEMPERATURE,
738C D LOG RATE DIVIDED BY D LOG T, LOG TO BASE 10.
739C DRATRO IS THE LOGARITHMIC DERIVATIVE OF THE RATE WITH RESPECT TO
740C DENSITY, D LOG RATE/D LOG RHO, LOG TO BASE 10.
741C THE PREVIOUS YALE VERSION HAD THE RATE FOR THE O16 + P REACTION
742C MULTIPLIED BY T9**(-1/7). THIS FACTOR IS INCORRECT AND HAS BEEN
743C REMOVED; IT APPEARED BEFORE AS AN IF STATEMENT REFERRING ONLY TO
744C RATE(7).
745 DO 40 I=1,7
746C R1=T9M23+Q1(I)*T9M13+Q2(I)+Q3(I)*T9P13+Q4(I)*T9P23+Q5(I)*T9
747C MHP 8/14 RATES CORRECTED TO PERMIT USER MODIFICATION OF REACTION
748C RATE DERIVATIVES
749 R1=T9M23+Q1(I)*T9M13+QS0E(I)*(Q2(I)+Q3(I)*T9P13)+
750 * * QQS0EE(I)*(Q4(I)*T9P23+Q5(I)*T9)
751 RATE(I)=RHO*R1*EXP(Q6(I)*T9M13+Q7(I)+(Q8(I)*T9)**2+UTOT(I))
752 RATE(I) = RATE(I)*SSTANDARD(I)
753 IF(RATE(I).LT.1.E-30) THEN
754 RATE(I)=0.
755 DRATT(I)=0.
756 ELSE
757 DRATRO(I)=1.+DSCR(I)
758C 10/27/26 MHP via Claude
759C code changed to carry the QS0E and QQS0EE factors into DRATT. R1
760C above scales the Q3 term by QS0E and the Q4 and Q5 terms by QQS0EE,
761C but the derivative of R1 used the unscaled Q3-Q5, so it disagreed
762C with the rate whenever either factor differed from 1 (LNEWNUC).
763 DRATT(I)=DSCT(I)-(Q6(I)*T9M13+(2.*T9M23+Q1(I)*T9M13-
764 * * QS0E(I)*Q3(I)*T9P13-QQS0EE(I)*(2.*Q4(I)*T9P23+3.*Q5(I)*T9))
765 * * /R1)/3.+2.*(Q8(I)*T9)**2
766 ENDIF
767 40 40 CONTINUE
768C ***************************************************************
769C END OF CALCULATION OF REACTION RATES FOR FIRST 7 REACTIONS.
770C ***************************************************************
771C ***********************************************
772C BE7 BURNING
773C ***********************************************
774C CALCULATE THE BURNING OF BE7 BY PROTONS (WHICH PRODUCES THE MOST
775C EXPERIMENTALLY ACCESSIBLE SOLAR NEUTRINOS) AND THE BURNING OF BE7
776C BY ELECTRON CAPTURE (THE DOMINANT PROCESS).
777C THE ELECTRON CAPTURE RATE IN SEC^(-1) IS GIVEN BY EQUATION (3.18) OF
778C NEUTRINO ASTROPHYSICS. CAN OMIT THE FACTOR OF RHO (IN CGS UNITS)
779C WHICH ALSO APPEARS IN THE BE7PROTON RATE. THE BE7 PROTON CAPTURE
780C RATE IS GIVEN BY TABLE 3.2 AND EQUATION (3.12). NOTE THAT 1 OVER MU
781C SUB E IS EQUAL TO EMU.
782C HERE WE USE THE NOTATION BE7 + PROTON = BE7PROTON AND
783C BE7 + E = BE7ELECTRON.
784C F1 IS THE FRACTION OF THE BE7 THAT IS BURNED BY ELECTRON CAPTURE.
785C F2 IS THE FRACTION OF THE BE7 THAT IS BURNED BY PROTON CAPTURE.
786C F3 IS THE FRACTION OF THE N14 THAT IS BURNED BY P, ALPHA REACTION.
787C F4 IS THE FRACTION OF THE N15 THAT IS BURNED BY P, GAMMA REACTION.
788C SEE TABLE 21 OF BAHCALL AND ULRICH (1988), REV. MOD. PHYS. 60.
789c 10/13/97. I changed Temp3 (i.e., tau) by 5/10^5 as a result of
790c using bare nuclear masses. Previously coefficient was -10.26202.
791c I did not change Be7electron for the slightly different S0 for
792c electron capture, since that is done in SStandard. Previous coefficient
793c in Be7electron expression was (3.126571E+5). 10/14/97.
794c
795 BE7ELECTRON = (1.752D-10)*T9M12*(1.0 + 0.004D0*(1000.*T9 - 16.))
796 BE7ELECTRON = BE7ELECTRON*EMU*SSTANDARD(15)
797 TEMP3 = (-10.2625D0*T9M13)
798 BE7PROTON = (3.128813D+5)*X*SSTANDARD(16)*EXP(TEMP3)
799C INCLUDE FOR BE7PROTON THE T9M23 FACTOR AND ALL CORRECTIONS PROPORTIONAL TO
800C Q1,...,Q5 FROM EQUATION 3.14 OF NEUTRINO ASTROPHYSICS. THESE
801C CORRECTIONS ARE DEFINED EARLIER IN THIS SUBROUTINE.
802C QRBE7 = T9M23 + Q1(8)*T9M13 + Q2(8)+ Q3(8)*T9P13
803C $ + Q4(8)*T9P23 + Q5(8)*T9
804C MHP 9/14 ADDED THE ABILITY TO ALTER DERIVATIVES INDEPENDENTLY
805 QRBE7 = T9M23 + Q1(8)*T9M13 + QS0E(8)*(Q2(8)+ Q3(8)*T9P13)
806 $ $ + QQS0EE(8)*(Q4(8)*T9P23 + Q5(8)*T9)
807 BE7PROTON = BE7PROTON*QRBE7
808C CALCULATE THE SCREENING CORRECTION FOR BE7 + P REACTION. USE WEAK AND
809C INTERMEDIATE SCREENING FORMULAE.
810 ZPRDBE7P = 4.0
811 Z86BE7P = 5.7790D0
812 UWK = TM1*ZPRDBE7P
813 IF(UWK.LE.WEAKSCREENING) THEN
814 UTOTBE7P = UWK
815 ELSE
816 UINT = 0.38D0*XXL8*XTR*Z86BE7P/(AMU*Z58*Z28)
817 UTOTBE7P = UINT
818 END IF
819 BE7PROTON = BE7PROTON*EXP(UTOTBE7P)
820C END OF CALCULATION OF SCREENING CORRECTION FOR BE7 + P REACTION.
821C MULTIPLY RATES BY FACTOR OF RHO/[(ATOMIC MASS UNIT)*A(BE7)] TO GET
822C IN UNITS OF GM^{-1}. CALL FACTOR CAMUBE7. Corrected for Be7 bare
823c mass number. Previously used 8.582295E+22 in the expression below.
824c These corrections were made on 10/14/97.
825c
826 CAMUBE7 = RHO*8.584981D+22
827 BE7PROTON = CAMUBE7*BE7PROTON
828 BE7ELECTRON = CAMUBE7*BE7ELECTRON
829C END OF MULTIPLICATION INSERTED NOVEMBER 6, 1990.
830 F1 = BE7ELECTRON/(BE7ELECTRON + BE7PROTON)
831 F2 = BE7PROTON/(BE7ELECTRON + BE7PROTON)
832C *********************************************************************
833C END OF CALCULATION OF CRUCIAL BE7 ELECTRON CAPTURE AND PROTON CAPTURE
834C RATES AND THEIR RATIO.
835C *********************************************************************
836C ***************************
837C N15 + P BRANCHING.
838C ***************************
839C THE FOLLOWING STATEMENTS COMPUTE THE BRANCHING OF N15(P,ALPHA)C12
840C AND N15(P,GAMMA)O16. THESE STATEMENTS REPLACE OUTDATED STATEMENTS
841C IN THE YALE CODE. THE CNO CROSS-SECTION FACTORS ARE FROM TABLE 3.4
842C OF NEUTRINO ASTROPHYSICS. THE RATIO OF THE REACTIONS DEPENDS ONLY
843C UPON THE EFFECTIVE ZERO ENERGY S-FACTOR, WHICH IS S0(ZERO ENERGY)
844C TIMES THE COMBINATION OF TEMPERATURE AND S-FACTOR DERIVATIVES/S0
845C THAT WAS USED PREVIOUSLY AS R1 IN THE RATE CALCULATIONS. THE
846C NUMERICAL COEFFICIENTS THAT APPEAR IN THE RATE WERE REPRESENTED
847C BY THE Q1(J),...Q5(J) FOR THE OTHER REACTIONS.
848C THE QVALUES FOR THE N15 REACTIONS HAVE BEEN COMPUTED SEPARATELY.
849C DBG 8/94 APPLIED MHP UPDATE TO NUCLEAR REACTIONS
850c To agree with Solar Fusion Workshop paper, the value of S0 in keV-b
851c has been changed from 78000. to 675000. on 9/25/97. On 10/14/97,
852c JNB changed cues.f so as to compute the Q-coefficients for the N15 + p
853c reactions. Also, checked that the coefficients are the same as the
854c ones given earlier in energy.f when we use the older CNO data.
855c
856 O16GAMMA = T9M23 + 0.0273016D0*T9M13 + 0.14374D0 + 0.027490D0*T9P13
857 $ $ + 6.14685D0*T9P23 + 2.98940D0*T9
858C MULTIPLY BY THE VALUE OF S0 IN KEV-B.
859C O16GAMMA = O16GAMMA*64.
860C MHP 9/14 ADDED THE OPTION TO MODIFY THE RELATIVE CROSS SECTIONS
861C FOR N15+P -> C12+ALPHA AND O16+GAMMA
862 O16GAMMA = O16GAMMA*64*FO16
863C
864 C12ALPHA = T9M23 + 0.0273016D0*T9M13 + 2.01186D0 + 0.384763D0*T9P13
865 $ $ + 17.0579D0*T9P23 + 8.29580D0*T9
866C C12ALPHA = C12ALPHA*67500
867 C12ALPHA = C12ALPHA*67500*FC12
868 F3 = C12ALPHA/(C12ALPHA + O16GAMMA)
869 F4 = 1.0D0 - F3
870C END OF NEW ROUTINE FOR THE BRANCHING OF N15 + P .
871 50 50 DO 60 I=NZ,NRXNS
872 RATE(I)=0.
873 DRATRO(I)=0.
874 DRATT(I)=0.
875 60 60 CONTINUE
876C***MHP 3/91 ALPHA CAPTURE REACTIONS UPDATED TO CAUGHLAN AND FOWLER(1988)
877C RATES. THE RATES ARE EXPRESSED IN THE SAME TERMS USED BY CZ, WITH
878C THE CONVERSION FACTOR IN THE FRONT OBTAINED FROM VANDENBERG'S
879C NOTES ON THE REACTION RATES.
880C RATE(8) HE4+C13
881C RATE(10) HE4+C12=>O16
882C RATE(11) HE4+N14=>O18
883C RATE(12) TRIPLE ALPHA
884 IF(TL.LT.TCUT(4)) GO TO 100
885C C13(ALPHA,N) O16
886 R1=T9M23+0.0129D0*T9M13+2.04D0+0.184D0*T9P13
887 A1 = 6.77D15*EXP(-32.329D0*T9M13-(T9/1.284D0)**2)
888 A2 = 3.82D5*EXP(-9.373D0*T9M1)
889 A3 = 1.41D6*EXP(-11.873D0*T9M1)
890 A4 = 2.00D9*EXP(-20.409D0*T9M1)
891 A5 = 2.92D9*EXP(-29.283D0*T9M1)
892 RATE(8) = 1.157126D22*RHO*EXP(UTOT(8))*(A1*R1+T9M32*(A2+A3+A4+A5))
893 DRATRO(8)=1.0D0+DSCR(8)
894 DR1 = CC13*(-2.0D0*T9M23-0.0129D0*T9M13+0.184D0*T9P13)
895 DA1 = A1*(CC13*32.329D0*T9M13 - 2.0D0*(T9/1.284D0)**2)
896 DRATT(8) = DSCT(8)+RHO/RATE(8)*(DR1*A1 + R1*DA1 +
897 * * A2*(9.373D0*T9M1-1.5D0)+A3*(11.873D0*T9M1-1.5D0)+
898 * * A4*(20.409D0*T9M1-1.5D0)+A5*(29.283D0*T9M1-1.5D0))
899C C12(ALPHA,GAMMA)O16
900 R1 = 1.0D0/(1.0D0+0.0489D0*T9M23)
901 R2 = 1.0D0/(1.0D0+0.2654D0*T9M23)
902 A1 = T9M2*EXP(-32.120D0*T9M13)
903 A2 = 1.04D8*R1**2*EXP(-(T9/3.496D0)**2)
904 A3 = 1.76D8*R2**2
905 A4 = 1.25D3*T9M32*EXP(-27.499D0*T9M1)
906 A5 = 1.43D-2*T9**5*EXP(-15.541D0*T9M1)
907 RATE(10) = 1.25388D22*RHO*EXP(UTOT(10))*(A1*(A2+A3)+A4+A5)
908 DRATRO(10) = 1.0D0+DSCR(10)
909 DRATT(10) = DSCT(10)+RHO/RATE(10)*(A1*((CC13*32.120D0*T9M13-2.0D0)*
910 * * (A2+A3)+A2*(R1*CC13*0.1956D0-2.0D0*(T9/3.496D0)**2)+A3*
911 * * (CC13*1.0616D0*R2))+A4*(27.499D0*T9M1-1.5D0)+A5*
912 * * (5.0D0+15.541D0*T9M1))
913C N14(ALPHA,GAMMA)F18 + F18=>O18+EPLUS+NU
914 R1 = T9M23+0.012D0*T9M13+1.45D0+0.177D0*T9P13+1.97D0*T9P23
915 * * +0.406D0*T9
916 A1 = 7.78D9*EXP(-36.031D0*T9M13-(T9/0.881D0)**2)
917 A2 = T9M32*2.36D-10*EXP(-2.798D0*T9M1)
918 A3 = T9M32*2.03D0*EXP(-5.054D0*T9M1)
919 A4 = T9M23*1.15D4*EXP(-12.310D0*T9M1)
920 RATE(11)= 1.07452D22*RHO*EXP(UTOT(11))*(A1*R1+A2+A3+A4)
921 DRATRO(11)=1.+DSCR(11)
922 DR1 = CC13*(-2.0D0*T9M23-0.012D0*T9M13+0.177D0*T9P13+
923 * * 3.94D0*T9P23)+0.406D0*T9
924 DA1 = A1*(CC13*36.031D0*T9M13-2.0D0*(T9/0.881D0)**2)
925 DRATT(11) = DSCT(11)+RHO/RATE(11)*(DR1*A1+R1*DA1+A2*
926 * * (2.798D0*T9M1-1.5D0)+A3*(5.054D0*T9M1-1.5D0)+
927 * * A4*(12.310D0*T9M1-CC23))
928C TRIPLE ALPHA
929 RATE(12) = 1.565315D21*RHO**2*T9M1*T9M2*2.79D-8*
930 * * EXP(-4.4027D0*T9M1+UTOT(12))
931 DRATRO(12) = 2.0D0+DSCR(12)
932 DRATT(12) = -3.0D0+DSCT(12)+4.4027D0*T9M1
933C *******************
934C EG(I)
935C *******************
936C MULTIPLY THE RATES PER GRAM, RATE(I), BY THE ABUNDANCES OF THE
937C REACTING SPECIES BY MASS, TO GET THE TOTAL RATES PER GRAM, EG.
938 100 100 EG(1)=RATE(1)*X*X
939C MHP 5/02 ADD DEUTERIUM BURNING IF RELEVANT
940 IF(XH2.GT.1.0D-11)THEN
941 EGDEUT = RDEUT*X*XH2
942 ELSE
943 EGDEUT = 0.0D0
944 ENDIF
945 EG(2)=RATE(2)*XHE3*XHE3
946 EG(3)=RATE(3)*XHE3*Y
947 EG(4)=RATE(4)*X*XC12
948 EG(5)=RATE(5)*X*XC13
949 EG(6)=RATE(6)*X*XN14
950 EG(7)=RATE(7)*X*XO16
951 EG(8)=RATE(8)*Y*XC13
952C EG(9)=RATE(9)*Y*X016
953 EG(10)=RATE(10)*Y*XC12
954 EG(11)=RATE(11)*Y*XN14
955 EG(12)=RATE(12)*Y**3
956C EG(13)=RATE(13)*XC12*XC12
957C ******************************************************************
958C ****************************************
959C ENERGY GENERATION.
960C ****************************************
961C CALCULATE ENERGY GENERATION BY MULTIPLYING RATES PER GRAM PER SEC BY
962C THE ENERGY RELEASE. THE ENERGIES ARE TAKEN FROM TABLE 21 OF BAHCALL AND
963C ULRICH (1988), REV. MOD. PHYS. 60, 297. THIS TABLE IS BASED UPON A CAREFUL
964C CALCULATION OF THE AVERAGE AMOUNT OF ENERGY LOSS BY NEUTRINOS FOR
965C EACH REACTION. THE NUMBERS FOR THE C12 + P REACTION SEQUENCE AND THE
966C C13 + P REACTION ARE BROKEN DOWN SEPARATELY FOR THIS
967C SUBROUTINE.
968C THE FINAL NUMBERS ARE IN ERG PER GM PER SECOND.
969C DEFINE THE CONSTANT TO CONVERT MEV'S TO ERGS. THE NUMBERS THAT APPEAR
970C ARE IN MEV SO THEY CAN BE EASILY IDENTIFIED.
971 CONVERT = 1.602177D-6
972C THE MULTIPLYING CONSTANTS BELOW ARE IN MEV.
973c JNB changed the pp energy release by 0.002 MeV because of a better
974c estimate of the neutrino energy loss on 9/25/97. See pg. 139 of
975c Vol. 19 of my notes. On pgs. 139-141, I document other small changes
976c to this energy generation. No large changes; all of order keV changes
977c except for the rare 8B reaction. 9/28/97.
978c
979 DG(1)=EG(1)*6.664D0*CONVERT
980C MHP 5/02 ADD DEUTERIUM BURNING
981 IF(XH2.GT.1.0D-11)THEN
982 DGDEUT = EGDEUT*QDEUT*CONVERT
983 ELSE
984 DGDEUT = 0.0D0
985 ENDIF
986 DG(2)=EG(2)*12.860D0*CONVERT
987 DG(3)=EG(3)*(1.586D0+F1*17.394D0+F2*11.499D0)*CONVERT
988 DG(4)=EG(4)*3.457372D0*CONVERT
989 DG(5)=EG(5)*7.550628D0*CONVERT
990 DG(6)=EG(6)*(9.054D0+F3*4.966D0+F4*12.128D0)*CONVERT
991 DG(7)=EG(7)*3.553D0*CONVERT
992 DG(8)=EG(8)*2.216D0*CONVERT
993 DG(10)=EG(10)*7.162D0*CONVERT
994C 10/29/26 MHP via Claude
995C N14(A,G)F18(E+ NU)O18: 5.815 -> 5.646 MeV. From atomic mass excesses
996C (AME2020) Q = D(He4) + D(N14) - D(O18) = 6.071 MeV; atomic masses
997C already count the positron's annihilation, so only the neutrino energy
998C is lost. F18 decays 96.73% by beta+ (<E_nu> = 0.3837 MeV) and 3.27%
999C by electron capture (E_nu = 1.6559 MeV), so <E_nu> = 0.425 MeV and the
1000C deposited energy is 6.071 - 0.425 = 5.646 MeV. 5.815 had subtracted
1001C the mean positron energy (0.25 MeV) instead.
1002 DG(11)=EG(11)*5.646D0*CONVERT
1003 DG(12)=EG(12)*7.275D0*CONVERT
1004C 11/02/26 MHP via Claude
1005C code changed to drop ENGHE3 and HE3ALL (GRAB_MOD). They fed only
1006C COEFFT's UMHE33 and UMHEAL arrays, which nothing read.
1007
1008C *******************************************************************
1009C END OF CALCULATION OF ENERGY RELEASE.
1010C *******************************************************************
1011C SET TO ZERO O16+ALPHA AND C12+C12 RATES.
1012 DRATRO(9) = 0.0
1013 DRATT(9) = 0.0
1014 DG(9) = 0.0
1015 DRATRO(13) = 0.0
1016 DRATT(13) = 0.0
1017 DG(13) = 0.0
1018C END OF XEROING OUT OF REACTIONS 9 AND 13.
1019 SUM1=0.0
1020 SUM2=0.0
1021 SUM3=0.0
1022 DO 110 I=1,NRXNS
1023C *******************************************************************
1024C SUM OF THE TOTAL ENERGY GENERATION IN ERGS PER GRM PER SECOND WITH
1025C DERIVATIVES WITH RESPECT TO DENSITY AND TO TEMPERATURE.
1026C *******************************************************************
1027C SUM1 = SUM OF ALL ENERGY GENERATION RATES. NOTE THAT THE BURNING OF
1028C BE7 IS INCLUDED IN DG(3) ABOVE.
1029C SUM2 = SUM OVER I OF DG(I)* [D LOG RATE(I) / D LOG RHO ].
1030C SUM3 = SUM OVER I OF DG(I)* [D LOG RATE(I) / D LOG T ].
1031 SUM1=SUM1+DG(I)
1032 SUM2=SUM2+DG(I)*DRATRO(I)
1033 SUM3=SUM3+DG(I)*DRATT(I)
1034 110 110 CONTINUE
1035C MHP 5/02 ADD DEUTERIUM BURNING
1036C IF(IU.LE.10)THEN
1037C WRITE(*,911)IU,SUM1,DGDEUT,SUM2,SUM3,QRTDEUT
1038C ENDIF
1039C 911 FORMAT(I5,1P5E13.3)
1040 SUM1 = SUM1 + DGDEUT
1041 SUM2 = SUM2 + DGDEUT
1042 SUM3 = SUM3 + DGDEUT*QRTDEUT
1043 IF(SUM1.LE.1.E-12) THEN
1044 EN=-20.
1045 PEP=0.
1046 PET=0.
1047 DO 120 I=1,NRXNS
1048 EG(I)=0.
1049 120 120 CONTINUE
1050 ELSE
1051C ******************************************************
1052C GLOBAL QUANTITIES THAT ARE RETURNED BY THE SUBROUTINE.
1053C ******************************************************
1054C PEP AND PET ARE THE DERIVATIVES OF THE TOTAL ENERGY GENERATION RATE
1055C WITH RESPECT TO DENSITY AND TEMPERATURE.
1056C MHP 5/90 CHANGE DERIVATIVES TO BE D LN EPS/D LN RHO AND D LN EPS/D LN T
1057C TO PUT THEM IN THE SAME FORM AS PRATHER DERIVATIVES.
1058C EN=DLOG10(SUM1)
1059C PEPD=SUM2/SUM1
1060C PEP=PDP*PEPD
1061C PET=SUM3/SUM1+PDT*PEPD
1062 PEP = SUM2
1063 PET = SUM3
1064 ENDIF
1065C PDP = D LOG RHO/ D LOG P; PDT = D LOG RHO/ D LOG T.
1066C *****************************************************
1067C END OF COMPUTATION OF THE GLOBAL QUANTITIES.
1068C *****************************************************
1069 DO 130 I=1,NRXNS
1070 IF(RATE(I).LE.1.E-5) RATE(I) = 0.0
1071 130 130 CONTINUE
1072C ******************************************************
1073C RATES PER 10^9 YEARS PER ATOMIC MASS UNIT: HRK(IU)
1074C ******************************************************
1075C HR1, ..., HR13 ARE THE RATES OF THE INDIVIDUAL REACTIONS.
1076C THE INTERPRETATION OF WHICH REACTION GOES WITH WHICH SYMBOL CAN BE
1077C MADE EASILY BY LOOKING AT THE DEFINITIONS OF THE EG(I)'S.
1078C THE ABUNDANCES ARE UPDATED IN SUBROUTINE KEMCOM USING THESE MATRICES.
1079C C21 IS THE PRODUCT OF (10^9 YEARS/1 SECOND)*(1 ATOMIC MASS UNIT/1
1080C GRAM). I HAVE USED HERE SIDEREAL YEAR IN CONVERTING TO SECONDS.
1081 200 200 HR1(IU)=RATE(1)*C21
1082 HR2(IU)=RATE(2)*C21
1083 HR3(IU)=RATE(3)*C21
1084 HR4(IU)=RATE(4)*C21
1085 HR5(IU)=RATE(5)*C21
1086 HR6(IU)=RATE(6)*C21
1087 HR7(IU)=RATE(7)*C21
1088 HR8(IU)=RATE(8)*C21
1089 HR9(IU)=RATE(9)*C21
1090 HR10(IU)=RATE(10)*C21
1091 HR11(IU)=RATE(11)*C21
1092 HR12(IU)=RATE(12)*C21
1093 HR13(IU)=RATE(13)*C21
1094 HF1(IU)=F3
1095 HF2(IU)=F1
1096C ****************************************
1097C END OF COMPUTATION OF HRK(IU).
1098C ****************************************
1099C ****************************************
1100C CALCULATING THE TOTAL ENERGY GENERATION.
1101C ****************************************
1102C THE SUMMATION OF THE ENERGIES IS GIVEN IN TABLE 21 OF NEUTRINO
1103C ASTROPHYSICS.
1104C THE ORIGINAL YALE SUBROUTINE CONTAINED SERIOUS ERRORS. THE
1105C CALCULATION OF THE RATE OF ENERGY THROUGH EPP2 AND EPP3 (SEE
1106C BELOW) CONTAINED TWO FACTORS OF BRANCHING RATIOS, RATHER THAN
1107C THE SINGLE FACTOR THAT SHOULD BE PRESENT. THIS HAD THE EFFECT
1108C OF REDUCING ARTIFICIALLY THE ENERGY CALCULATED FROM THESE
1109C REACTIONS.
1110C EPP1 INCLUDES THE ENERGY GENERATED BY THE PP REACTION, BY THE H2 + P
1111C REACTION, AND BY THE HE3 + HE3 REACTION. SEE TABLE 21 OF NEUTRINO
1112C ASTROPHYSICS.
1113 EPP1 = DG(1)+DG(2)+DGDEUT
1114C EPP1 = DG(1)+DG(2)
1115C EPP3 INCLUDES THE ENERGY GENERATED BY THE HE3 + HE4 REACTION AND BY
1116C THE BURNING OF BE7 THROUGH PROTON CAPTURE.
1117C EPP3 = EG(3)*(1.586 + F2*11.499)*CONVERT
1118 EPP3 = EG(3)*F2*(1.586D0 + 11.499D0)*CONVERT
1119C EPP2 INCLUDES THE ENERGY GENERATED BY THE HE3 + HE4 REACTION AND BY
1120C THE BURNING OF BE7 THROUGH ELECTRON CAPTURE.
1121C EPP2 = EG(3)*(1.586 + F1*17.394)*CONVERT
1122 EPP2 = DG(3) - EPP3
1123C ECN IS THE ENERGY GENERATED THROUGH THE CNO CYCLE.
1124 ECN=DG(4)+DG(5)+DG(6)+DG(7)
1125C E3AL IS THE ENERGY GENERATED THROUGH THE TRIPLE-ALPHA REACTION AND
1126C IS NEGLIGIBLE FOR THE SUN.
1127 E3AL = DG(12)
1128
1129
1130C ENERGY FROM ALPHA CAPTURE REACTIONS.
1131 EALPCA=DG(8)+DG(10)+DG(11)
1132 IF(LSNU)THEN
1133C MHP 9/91 CHANGE TO TURN OFF NEUTRINO CALC FOR HYDROGEN-EXHAUSTED CORE.
1134 IF(X.LE.1.0D-6)THEN
1135 DO I=1,10
1136 FLUX(I)=0.0D0
1137 END DO
1138 ELSE
1139C ****************************************************************
1140C CALCULATION OF NEUTRINO FLUXES
1141C ****************************************************************
1142C THIS PART OF THE SUBROUTINE CALCULATES THE NEUTRINOS FLUXES IN
1143C NUMBER PER GRAM PER SQUARE CENTIMETER PER SECOND AT THE EARTH'S SURFACE
1144C (ASSUMING NOTHING HAPPENS TO THE NEUTRINOS AFTER THEY ARE CREATED).
1145C SEE TABLES 3.1 AND 3.3 OF NEUTRINOS ASTROPHYSICS OR EQUATIONS 6.1-6.8
1146C FOR THE REACTIONS. THE ORDER OF THE REACTIONS IS THE SAME AS IN
1147C EQUATIONS 6.1-6.8 .
1148C DEFINE 4*PI*(AU)**2 .
1149 FOURPIAU2 = 2.812295D+27
1150C FLUX OF PP NEUTRINOS.
1151 FLUX(1) = EG(1)/FOURPIAU2
1152C FLUX OF PEP NEUTRINOS. USE EQUATION 3.17 OF NEUTRINO ASTROPHYSICS.
1153c Note that should not change SStandard(14) unless the ratio of pep to pp
1154c is changed. Pep rate is explicitly scaled here with respect to the pp
1155c rate.
1156 FLUX(2) = (3.4848D-6)*RWE*T9M12*(1.0 + 20.*T9)*EG(1)
1157 FLUX(2) = FLUX(2)*SSTANDARD(14)/FOURPIAU2
1158C FLUX OF HEP NEUTRINOS. USE EQUATION 3.12 DIRECTLY.
1159 Q6HEP = -6.1399D0
1160C Q6 IS THE NEGATIVE OF THE COEFFICIENT OF T9M13 IN TAU, EQUATION 3.10.
1161 FLUX(3) = (1.71724D+11)*RHO*T9M23*EXP(Q6HEP*T9M13)
1162C THE DERIVATIVES OF THE CROSS SECTION FACTOR ARE NOT KNOWN AND ARE
1163C TAKEN TO BE ZERO. THE ONLY TERM FROM EQUATION 3.14 THAT SURVIVES
1164C IS 5/(12*TAU).
1165 FLUX(3) = (1.0 + 0.067862D0*T9P13)*SSTANDARD(17)*FLUX(3)
1166C CALCULATE WEAK OR INTERMEDIATE SCREENING FOR HEP NEUTRINOS.
1167 ZPRDHE3P = 2.0
1168 Z86HE3P = 3.08687D0
1169 UWK = TM1*ZPRDHE3P
1170 IF(UWK.LE.WEAKSCREENING) THEN
1171 UTOTHE3P = UWK
1172 ELSE
1173 UINT = 0.38D0*XXL8*XTR*Z86HE3P/(AMU*Z58*Z28)
1174 UTOTHE3P = UINT
1175 END IF
1176C END OF CALCULATION OF SCREENING CORRECTION FOR HE3 + P REACTION.
1177 FLUX(3) = FLUX(3)*EXP(UTOTHE3P)
1178 FLUX(3) = FLUX(3)*X*XHE3/FOURPIAU2
1179C COMPUTE BE7MASSFRACTION. THIS IS NOT REQUIRED FOR THE NEUTRINO
1180C FLUXES SINCE BE7 IS ALWAYS IN EQUILIBRIUM WITH THE SLOWER PRODUCTION
1181C RATE OF HE3 + HE4. HOWEVER, IT IS OF INTEREST IN SOME APPLICATIONS
1182C TO KNOW THE BE7 MASS FRACTION, SO I COMPUTE IT HERE AND IT CAN BE
1183C 10/13/26 MHP via Claude
1184C RETURNED AS AN ARGUMENT. THE LINE ABOVE PREVIOUSLY READ "EXTRACTED
1185C WITH A COMMON STATEMENT IF DESIRED", WHICH DESCRIBED COMMON/BE7/;
1186C THAT BLOCK IS GONE AND BE7MASSFRACTION IS NOW THE LAST ARGUMENT.
1187C NOTE THIS ASSIGNMENT SITS INSIDE A CONDITIONAL, SO CALLERS MUST KEEP
1188C THE VARIABLE STATIC TO RETAIN THE LAST COMPUTED VALUE AS THE COMMON
1189C BLOCK DID; main.f's BLANKET SAVE PROVIDES THAT.
1190 BE7MASSFRACTION = EG(3)/(BE7PROTON + BE7ELECTRON)
1191C END OF NOVEMBER 6, 1990 ADDITION.
1192C FLUX OF BE7 NEUTRINOS.
1193 FLUX(4) = EG(3)*F1/FOURPIAU2
1194C FLUX OF B8 NEUTRINOS.
1195 FLUX(5) = EG(3)*F2/FOURPIAU2
1196C FLUX OF N13 NEUTRINOS.
1197 FLUX(6) = EG(4)/FOURPIAU2
1198C FLUX OF O15 NEUTRINOS.
1199 FLUX(7) = EG(6)/FOURPIAU2
1200C FLUX OF F17 NEUTRINOS.
1201 FLUX(8) = EG(7)/FOURPIAU2
1202C FLUX OF FICTIONAL HE3 + HE3 NEUTRINOS.
1203 FLUX(9) = EG(2)/FOURPIAU2
1204C FLUX OF FICTIONAL HE3 + HE4 NEUTRINOS.
1205 FLUX(10) = EG(3)/FOURPIAU2
1206C SET UNITS OF NEUTRINO FLUXES TO BE 10**10 PER CM^2 PER SEC PER GM AT THE
1207C EARTH. MULTIPLY BY 10**-10.
1208C IF THE VALUE FOR THIS SHELL IS NEGLIGIBLY SMALL, SET EQUAL TO ZERO.
1209 DO K = 1,10
1210 FLUX(K) = (1.0D-10)*FLUX(K)
1211 TEMP = FLUX(K)
1212C KC 2025-05-30 CHANGED 1.E-50 TO 0.0 TO AVOID UNDERFLOW
1213 IF(TEMP.LE.0.0) THEN
1214 FLUX(K) = 0.0
1215 END IF
1216 END DO
1217C MHP 9/91 ENDIF INSERTED HERE.
1218 ENDIF
1219 ENDIF
1220C END OF NEUTRINO FLUX ROUTINE.
1221C
1222C***MHP 5/91
1223CC CALCULATE NEUTRINO LOSSES FOR NEUTRINO-COOLED CORES OF EVOLVED STARS.
1224C 3/92 DBG Added option to use new (more sophisticated) neutrino loss
1225C routines. See subroutine NEUTR for complete description.
1226
1227
1228 IF(TL.LE.TCUT(5)) RETURN
1229
1230
1231 ZC = XC12+XC13
1232 ZO = XO16+XO18
1233 T=10.0**TL
1234 D=10.0**DL
1235
1236
1237***** Itoh 1996 Neutrino loss routines - Grant Newsham 9/06 *****
1238
1239
1240 IF (LNULOS1) THEN
1241
1242
1243
1244 CALL NEUTRINO(T,D,X,Y,ZC,ZO,SNU,DSNUDT,DSNUDD)
1245
1246
1247 ENU = -SNU
1248 DSNUDT = -DSNUDT*T/ENU
1249 DSNUDD = -DSNUDD*D/ENU
1250
1251
1252 SUM1 = SUM1 + ENU
1253
1254
1255 PEP = PEP + DSNUDD
1256 PET = PEP + DSNUDT
1257
1258
1259*****************************************************************
1260
1261
1262 ELSE
1263
1264
1265
1266C THESE ARE OLD NEUTRINO LOSS ROUTINES
1267
1268
1269 EL = T9/5.9302D0
1270 ELI = 1.0/EL
1271 EZ = EXP(CC13*CLN*(DL-9.0))*ELI*(0.7937D0+0.2063D0*X)
1272 EZ3 = EZ**3
1273 EMUE = 0.5*(1.0+X)
1274 EX1 = 0.0
1275 IF(T9.GE.0.2) THEN
1276CC PAIR NEUTRINOS
1277 EL2 = EL*EL
1278 POLX10=(1.+EL2*(-13.04D0+EL2*(133.5+EL2*(1534.+EL2*918.6D0))))
1279 POLX11 = V1(1) + EZ*(V1(2) + EZ*V1(3))
1280 POLX12 = EZ3 + ELI*(V1(4) + ELI*(V1(5) + ELI*V1(6)))
1281 EX1 = DEXP(-EZ*V1(7)-ELI-ELI-CLN*DL)*POLX10*POLX11/POLX12
1282 ENDIF
1283CC PHOTO NEUTRINOS
1284 POLX21 = V2(1) + EZ*(V2(2) + EZ*V2(3))
1285 POLX22 = EZ3 + ELI*(V2(4) + ELI*(V2(5) + ELI*V2(6)))
1286 EX2 = EMUE*EL**5*DEXP(-EZ*V2(7))*POLX21/POLX22
1287CC PLASMA NEUTRINOS
1288 POLX31 = V3(1) + EZ*(V3(2) + EZ*V3(3))
1289 POLX32 = EZ3 + ELI*(V3(4) + ELI*(V3(5) + ELI*V3(6)))
1290 EX3 = EMUE**3*DEXP(-EZ*V3(7)+CLN*(DL+DL))*POLX31/POLX32
1291 ENU = -(EX1 + EX2 + EX3)
1292 SUM1 = SUM1 + ENU
1293 QETNX = 0.0
1294 QEDNX = 0.0
1295 IF(T9.GE.0.2) THEN
1296C MHP 10/02 fixed column 72 problem
1297 QEDN= EZ*(V1(2)+2.*EZ*V1(3))/POLX11 - EZ*V1(7)
1298 * * - 3.0d0*EZ3/POLX12
1299 QETN= -QEDN+ ELI*(V1(4)+ELI*(2.*V1(5)+3.*ELI*V1(6)))/POLX12
1300 QETNX= EL2*(-26.08D0+EL2*(534.+EL2*(9204.+EL2*7348.8D0)))/POLX10
1301 QETNX = (QETNX + QETN + ELI+ELI)*EX1
1302 QEDNX = (-1.0 +CC13*QEDN)*EX1
1303 ENDIF
1304 QEDN= EZ*(V2(2)+2.*EZ*V2(3))/POLX21 - EZ*V2(7) - 3.*EZ3/POLX22
1305 QETN= -QEDN+ ELI*(V2(4)+ELI*(2.*V2(5)+3.*ELI*V2(6)))/POLX22
1306 QETNX = QETNX + (5.0 + QETN)*EX2
1307 QEDNX = QEDNX +CC13*QEDN*EX2
1308 QEDN= EZ*(V3(2)+2.*EZ*V3(3))/POLX31 - EZ*V3(7) - 3.*EZ3/POLX32
1309 QETN=-QEDN + ELI*(V3(4)+ELI*(2.*V3(5)+3.*ELI*V3(6)))/POLX32
1310 QETNX = QETNX + QETN*EX3
1311 QEDNX = QEDNX + (2.0 +CC13*QEDN)*EX3
1312
1313
1314 PET = PET - QETNX
1315 PEP = PEP - QEDNX
1316
1317
1318
1319 END IF
1320
1321
1322 RETURN
1323 END1"""Python version of engeb.f (YREC 7be4133): nuclear energy generation at
2one point, its derivatives, the reaction rates, the solar neutrino fluxes
3and the neutrino losses."""
4
5import math
6
7import numpy as np
8
9from pyrec import constants_mod
10from pyrec import cross_mod
11from pyrec import deuter_mod
12from pyrec import fluxes_mod
13from pyrec import nmlpar_mod
14from pyrec import ovrtrn_mod
15from pyrec.neutrino import neutrino
16
17# ---- DATA (all arrays with index 0 unused) ----
18
19# Old neutrino-loss fits (pair, photo, plasma): DATA V1,V2,V3/21 values/.
20V1 = np.array([0.0, 6.002e19, 2.084e20, 1.872e21, 9.383e-1, -4.141e-1,
21 5.829e-2, 5.5924])
22V2 = np.array([0.0, 4.886e10, 7.580e10, 6.023e10, 6.290e-3, 7.483e-3,
23 3.061e-4, 1.5654])
24V3 = np.array([0.0, 2.320e-7, 8.449e-8, 1.787e-8, 2.581e-2, 1.734e-2,
25 6.990e-4, 0.56457])
26# Bare nuclear masses (amu) and charges of the 13 isotopes:
27# n, p, 2H, 3H, 3He, 4He, 12C, 13C, 14N, 16O, 18O, 20Ne, 24Mg.
28ANUC = np.array([0.0, 1.008665, 1.007276, 2.013553, 3.015501, 3.014933,
29 4.001506, 11.996709, 13.000064, 13.999233, 15.990526,
30 17.994772, 19.986954, 23.978458])
31ZNUC = np.array([0.0, 0., 1., 1., 1., 2., 2., 6., 6., 7., 8., 8., 10., 12.])
32NELEM = 13
33# Rate coefficients of reactions 1-7 (eq. 3.14 form); Q1-Q5 element 8 is
34# Be7 + p.
35Q1 = np.array([0.0, 0.12317, .03392, .0325, .0304, .03035, .0273, .02494,
36 .040572])
37Q2 = np.array([0.0, 1.08749, -.273, -.2085, .7630, -0.4044, -1.60, -1.224,
38 -0.2095])
39Q3 = np.array([0.0, .93833, -.0648, -.0474, .1626, -.08598, -.3064, -.2139,
40 -0.0595])
41Q4 = np.array([0.0, 0., 0., 0., 4.79, 7.456, 0.0, .69703, 0.16762])
42Q5 = np.array([0.0, 0., 0., 0., 2.595, 4.032, 0.0, 0.3097, 0.12114])
43Q6 = np.array([0.0, -3.3804, -12.2757, -12.826, -13.6899, -13.7173,
44 -15.2281, -16.6925])
45Q7 = np.array([0.0, 20.8964, 76.6003, 67.8036, 69.130, 70.3809, 69.8517,
46 70.8012])
47Q8 = np.zeros(8)
48NRXNS = 13
49# Screening: charge products and the strong/intermediate coefficients.
50ZPRD = np.array([0.0, 1., 4., 4., 6., 6., 7., 8., 12., 16., 12., 14., 12.,
51 36.])
52Z53 = np.array([0.0, 1.175, 3.73, 3.73, 4.804, 4.804, 5.385, 5.941, 9.014,
53 11.24, 9.014, 10.15, 9.104, 23.28])
54Z43 = np.array([0.0, 0.52, 1.31, 1.31, 1.488, 1.488, 1.61, 1.721, 2.577,
55 3.025, 2.577, 2.81, 2.577, 5.668])
56Z23 = np.array([0.0, -0.413, -0.655, -0.655, -0.643, -0.643, -0.659,
57 -0.673, -0.889, -0.946, -0.889, -0.92, -0.889, -1.36])
58Z86 = np.array([0.0, 1.630, 5.917, 5.917, 8.302, 8.302, 9.520, 10.716,
59 16.192, 20.978, 16.192, 18.606, 16.192, 45.6635])
60# (s per 1e9 yr) * (amu in g), per the comment.
61C21 = 5.240358e-8
62
63# ---- SAVE: locals kept between calls ----
64# Below TCUT(1) the routine jumps to label 200, and these keep the previous
65# call's values there. Suspected bug (see the page): the stale values.
66xfrac = np.zeros(NELEM + 1)
67rate = np.zeros(NRXNS + 1)
68dratro = np.zeros(NRXNS + 1)
69dratt = np.zeros(NRXNS + 1)
70utot = np.zeros(NRXNS + 1)
71dscr = np.zeros(NRXNS + 1)
72dsct = np.zeros(NRXNS + 1)
73dg = np.zeros(NRXNS + 1)
74eg = np.zeros(51)
75f1 = f2 = f3 = f4 = 0.0
76rho = t9 = t9m1 = t9m12 = t9m13 = t9m23 = t9p13 = 0.0
77tm1 = xxl8 = z58 = z28 = 0.0
78be7proton = be7electron = 0.0
79convert = 0.0 # set above TCUT(1); read at label 200 on every path
80
81
82def _screen_weak_or_int(uwk, z86, amu, xtr):
83 """Weak screening, or Graboske et al.'s intermediate form (as used for
84 Be7 + p and He3 + p): UWK if at most WEAKSCREENING, else UINT."""
85
86 if uwk <= nmlpar_mod.weakscreening:
87 return uwk
88 return 0.38 * xxl8 * xtr * z86 / (amu * z58 * z28)
89
90
91def engeb(epp1: float, epp2: float, epp3: float, ecn: float, e3al: float, pep: float, pet: float, sum1: float,
92 dl: float, tl: float, x: float, y: float, xhe3: float, xc12: float, xc13: float, xn14: float, xo16: float,
93 xo18: float, xh2: float, iu: int, hr1: np.ndarray, hr2: np.ndarray, hr3: np.ndarray, hr4: np.ndarray,
94 hr5: np.ndarray, hr6: np.ndarray, hr7: np.ndarray, hr8: np.ndarray, hr9: np.ndarray, hr10: np.ndarray,
95 hr11: np.ndarray, hr12: np.ndarray, hr13: np.ndarray, hf1: np.ndarray, hf2: np.ndarray,
96 be7massfraction: float, ealpca: float, enu: float) -> tuple[float, float, float, float, float, float, float,
97 float, float, float, float]:
98 """Nuclear energy generation at one point: screening, the pp/CNO rates
99 with S-factor scaling, the Be7 and N15 branchings, alpha captures,
100 deuterium burning, energies net of neutrinos, the derivatives PEP and
101 PET, the per-reaction rates HR1-HR13, the solar neutrino fluxes and
102 the neutrino losses.
103
104 Translates: engeb.f#ENGEB (7be4133)
105
106 Arguments: dl, tl (log rho, log T); the mass fractions x, y, xhe3,
107 xc12, xc13, xn14, xo16, xo18, xh2; iu, the point's index; hr1-hr13,
108 hf1, hf2, arrays set at index iu (index 0 unused). The other scalars
109 are only set (passed in with any value).
110
111 Returns (epp1, epp2, epp3, ecn, e3al, pep, pet, sum1, be7massfraction,
112 ealpca, enu): the energy of the pp chain's three branches, CNO and
113 triple alpha; d eps/d ln rho and d eps/d ln T; the total (erg/g/s);
114 the Be7 mass fraction (set only with LSNU and X > 1e-6); the energy
115 from alpha captures; the neutrino losses (negative). Also sets
116 fluxes_mod.flux.
117
118 """
119
120 global f1, f2, f3, f4, rho, t9, t9m1, t9m12, t9m13, t9m23, t9p13
121 global tm1, xxl8, z58, z28, be7proton, be7electron, convert
122 c = constants_mod
123 nml = nmlpar_mod
124 cr = cross_mod
125
126 # Fortran lines 465–466.
127 enu = 0.0
128 ealpca = 0.0
129
130 # Mass fractions of the 13 isotopes (n, 3H, Ne, Mg taken as zero)
131 # (Fortran lines 472–486).
132 xfrac[1] = 0.0
133 xfrac[2] = x
134 xfrac[3] = xh2
135 xfrac[4] = 0.0
136 xfrac[5] = xhe3
137 xfrac[6] = y
138 xfrac[7] = xc12
139 xfrac[8] = xc13
140 xfrac[9] = xn14
141 xfrac[10] = xo16
142 xfrac[11] = xo18
143 xfrac[12] = 0.0
144 xfrac[13] = 0.0
145
146 # 1/mu_I, 1/mu_e, the sum for intermediate screening, and zeta
147 # (Fortran lines 507–517).
148 amu = 0.0
149 emu = 0.0
150 xtr = 0.0
151 zet = 0.0
152 for i in range(1, NELEM + 1): # loop 10
153 trm = xfrac[i] / ANUC[i]
154 amu = amu + trm
155 emu = emu + trm * ZNUC[i]
156 xtr = xtr + trm * ZNUC[i]**1.58
157 zet = zet + trm * ZNUC[i]**2
158
159 # Fortran lines 528–533.
160 rwe = math.exp(c.cln * dl) * emu
161 dd = dl
162
163 # Fortran lines 537–550.
164 low_t = tl <= nml.tcut[1]
165 if low_t:
166 # Below TCUT(1): no burning; jump to label 200.
167 # Suspected bug (see the page): SUM1, F1, F3 and the Be7 terms are
168 # stale.
169 dgdeut = 0.0
170 qrtdeut = 0.0
171 en = -20.0 # noqa: F841 (unused in the Fortran too)
172 pep = 0.0
173 pet = 0.0
174 for i in range(1, NRXNS + 1): # loop 20
175 eg[i] = 0.0
176 rate[i] = 0.0
177 dg[i] = 0.0
178 else:
179 # Fortran lines 555–564.
180 rho = math.exp(c.cln * dd)
181 t9 = math.exp(c.cln * (tl - 9.0))
182 t9p13 = t9**c.cc13
183 t9p23 = t9p13**2
184 t9m13 = 1.0 / t9p13
185 t9m23 = t9m13**2
186 t9m1 = 1.0 / t9
187 t9m2 = t9m1**2
188 t9m12 = 1.0 / math.sqrt(t9)
189 t9m32 = t9m1 * t9m12
190
191 # Deuterium burning, as in DEUTRATE (MHP 5/02) (Fortran lines
192 # 571–603).
193 if xh2 <= 1.0e-11:
194 rdeut = 0.0
195 qrtdeut = 0.0
196 else:
197 qdeut = 5.494
198 zz = -3.72 * t9m13
199 tfacdeut = 1.0 + 0.112 * t9p13 + 3.38 * t9p23 + 2.65 * t9
200 # CAVOG/ANUC(3): Avogadro's number over the deuteron's mass in amu.
201 rdeut = (rho * 2.240e3 * t9m23 * math.exp(zz) * tfacdeut
202 * c.cavog / ANUC[3])
203 tfacdeut2 = 0.112 * t9p13 + 6.76 * t9p23 + 7.95 * t9
204 qrtdeut = c.cc13 * ((tfacdeut2 / tfacdeut) - 2.0 - zz)
205 # Cap in the surface convection zone by the overturn time.
206 if iu >= deuter_mod.jcz and ovrtrn_mod.taucz > 1.0:
207 rdeutmax = c.cavog / ANUC[3] / ovrtrn_mod.taucz
208 rdeut2 = rdeut * x
209 if rdeut2 > rdeutmax:
210 if x > 1.0e-6:
211 rdeut = rdeutmax / x
212
213 # Degeneracy factor f'/f, a fit to Salpeter's figure 1 (Fortran
214 # lines 618–630).
215 pfmc2 = 1.017677e-4 * rwe**c.cc23
216 efmkt = 5.92986 * t9m1 * (math.sqrt(1.0 + pfmc2) - 1.0)
217 if efmkt <= 1.0e-2:
218 fprf = 1.0
219 else:
220 degd = math.log10(efmkt)
221 if degd >= 1.5:
222 fprf = 0.0
223 else:
224 fprf = (0.75793 - 0.54621 * degd - 0.30964 * degd**2
225 + 0.12535 * degd**3 + 0.1203 * degd**4
226 - 0.012857 * degd**5 - 0.014768 * degd**6)
227
228 # Screening: weak, intermediate or strong, for each reaction
229 # (Fortran lines 658–709).
230 xxl = 5.9426e-6 * t9m32 * math.sqrt(rho * amu)
231 xxl6 = xxl**c.cc23
232 xxl8 = xxl**0.86
233 zcurl = math.sqrt((zet + fprf * emu) / amu)
234 zbar = emu / amu
235 z58 = zcurl**0.58
236 z28 = zbar**0.28
237 z33 = zbar**c.cc13
238 tm1 = xxl * zcurl
239 for i in range(1, NRXNS + 1): # loop 30
240 uwk = tm1 * ZPRD[i]
241 if uwk <= nml.weakscreening:
242 utot[i] = uwk
243 dscr[i] = 0.5 * uwk
244 dsct[i] = -1.5 * uwk
245 else:
246 uint = 0.38 * xxl8 * xtr * Z86[i] / (amu * z58 * z28)
247 if uwk <= 2.0:
248 utot[i] = uint
249 dscr[i] = 0.43 * uint
250 dsct[i] = -1.29 * uint
251 else:
252 ustr = 0.624 * z33 * xxl6 * (
253 Z53[i] + 0.316 * z33 * Z43[i]
254 + 0.737 * Z23[i] / (zbar * xxl6))
255 if ustr < uint or uwk >= 5.0:
256 utot[i] = ustr
257 dscr[i] = (0.208 * z33 * (Z53[i] + 0.316 * z33
258 * Z43[i]) * xxl6)
259 dsct[i] = -3.0 * dscr[i]
260 else:
261 utot[i] = uint
262 dscr[i] = 0.43 * uint
263 dsct[i] = -1.29 * uint
264
265 # pp chain and CNO, reactions 1-7 (none without hydrogen) (Fortran
266 # lines 716–767).
267 if x == 0.0:
268 nz = 1
269 f1 = 0.0
270 f2 = 0.0
271 f3 = 0.0
272 f4 = 0.0
273 else:
274 nz = 8
275 for i in range(1, 8): # loop 40
276 r1 = (t9m23 + Q1[i] * t9m13
277 + cr.qs0e[i] * (Q2[i] + Q3[i] * t9p13)
278 + cr.qqs0ee[i] * (Q4[i] * t9p23 + Q5[i] * t9))
279 rate[i] = rho * r1 * math.exp(Q6[i] * t9m13 + Q7[i]
280 + (Q8[i] * t9)**2 + utot[i])
281 rate[i] = rate[i] * nml.sstandard[i]
282 if rate[i] < 1.0e-30:
283 rate[i] = 0.0
284 dratt[i] = 0.0
285 else:
286 dratro[i] = 1.0 + dscr[i]
287 # The bracket's derivative carries the same QS0E, QQS0EE
288 # factors as R1.
289 dratt[i] = (dsct[i] - (Q6[i] * t9m13
290 + (2.0 * t9m23 + Q1[i] * t9m13
291 - cr.qs0e[i] * Q3[i] * t9p13
292 - cr.qqs0ee[i]
293 * (2.0 * Q4[i] * t9p23
294 + 3.0 * Q5[i] * t9)) / r1)
295 / 3.0
296 + 2.0 * (Q8[i] * t9)**2)
297
298 # Be7: electron capture against proton capture (Fortran lines
299 # 795–831).
300 be7electron = (1.752e-10 * t9m12
301 * (1.0 + 0.004 * (1000.0 * t9 - 16.0)))
302 be7electron = be7electron * emu * nml.sstandard[15]
303 temp3 = -10.2625 * t9m13
304 be7proton = 3.128813e+5 * x * nml.sstandard[16] * math.exp(temp3)
305 qrbe7 = (t9m23 + Q1[8] * t9m13
306 + cr.qs0e[8] * (Q2[8] + Q3[8] * t9p13)
307 + cr.qqs0ee[8] * (Q4[8] * t9p23 + Q5[8] * t9))
308 be7proton = be7proton * qrbe7
309 # Screening of Be7 + p (ZPRD = 4).
310 utotbe7p = _screen_weak_or_int(tm1 * 4.0, 5.7790, amu, xtr)
311 be7proton = be7proton * math.exp(utotbe7p)
312 camube7 = rho * 8.584981e+22
313 be7proton = camube7 * be7proton
314 be7electron = camube7 * be7electron
315 f1 = be7electron / (be7electron + be7proton)
316 f2 = be7proton / (be7electron + be7proton)
317
318 # N15 + p: (p,alpha) to C12 against (p,gamma) to O16 (Fortran
319 # lines 856–869).
320 o16gamma = (t9m23 + 0.0273016 * t9m13 + 0.14374
321 + 0.027490 * t9p13 + 6.14685 * t9p23 + 2.98940 * t9)
322 o16gamma = o16gamma * 64 * cr.fo16
323 c12alpha = (t9m23 + 0.0273016 * t9m13 + 2.01186
324 + 0.384763 * t9p13 + 17.0579 * t9p23 + 8.29580 * t9)
325 c12alpha = c12alpha * 67500 * cr.fc12
326 f3 = c12alpha / (c12alpha + o16gamma)
327 f4 = 1.0 - f3
328
329 # Fortran lines 871–875.
330 for i in range(nz, NRXNS + 1): # label 50, loop 60
331 rate[i] = 0.0
332 dratro[i] = 0.0
333 dratt[i] = 0.0
334
335 # Alpha captures, above TCUT(4) (Fortran line 884).
336 # Suspected bug (see the page): the derivatives DRATT(8, 10, 11).
337 if tl >= nml.tcut[4]:
338 # C13(alpha,n)O16 (Fortran lines 886–898).
339 r1 = t9m23 + 0.0129 * t9m13 + 2.04 + 0.184 * t9p13
340 a1 = 6.77e15 * math.exp(-32.329 * t9m13 - (t9 / 1.284)**2)
341 a2 = 3.82e5 * math.exp(-9.373 * t9m1)
342 a3 = 1.41e6 * math.exp(-11.873 * t9m1)
343 a4 = 2.00e9 * math.exp(-20.409 * t9m1)
344 a5 = 2.92e9 * math.exp(-29.283 * t9m1)
345 rate[8] = (1.157126e22 * rho * math.exp(utot[8])
346 * (a1 * r1 + t9m32 * (a2 + a3 + a4 + a5)))
347 dratro[8] = 1.0 + dscr[8]
348 dr1 = c.cc13 * (-2.0 * t9m23 - 0.0129 * t9m13 + 0.184 * t9p13)
349 da1 = a1 * (c.cc13 * 32.329 * t9m13 - 2.0 * (t9 / 1.284)**2)
350 dratt[8] = dsct[8] + rho / rate[8] * (
351 dr1 * a1 + r1 * da1
352 + a2 * (9.373 * t9m1 - 1.5) + a3 * (11.873 * t9m1 - 1.5)
353 + a4 * (20.409 * t9m1 - 1.5) + a5 * (29.283 * t9m1 - 1.5))
354
355 # C12(alpha,gamma)O16 (Fortran lines 900–912).
356 r1 = 1.0 / (1.0 + 0.0489 * t9m23)
357 r2 = 1.0 / (1.0 + 0.2654 * t9m23)
358 a1 = t9m2 * math.exp(-32.120 * t9m13)
359 a2 = 1.04e8 * r1**2 * math.exp(-(t9 / 3.496)**2)
360 a3 = 1.76e8 * r2**2
361 a4 = 1.25e3 * t9m32 * math.exp(-27.499 * t9m1)
362 a5 = 1.43e-2 * t9**5 * math.exp(-15.541 * t9m1)
363 rate[10] = (1.25388e22 * rho * math.exp(utot[10])
364 * (a1 * (a2 + a3) + a4 + a5))
365 dratro[10] = 1.0 + dscr[10]
366 dratt[10] = dsct[10] + rho / rate[10] * (
367 a1 * ((c.cc13 * 32.120 * t9m13 - 2.0) * (a2 + a3)
368 + a2 * (r1 * c.cc13 * 0.1956 - 2.0 * (t9 / 3.496)**2)
369 + a3 * (c.cc13 * 1.0616 * r2))
370 + a4 * (27.499 * t9m1 - 1.5) + a5 * (5.0 + 15.541 * t9m1))
371
372 # N14(alpha,gamma)F18, F18 -> O18 + e+ + nu (Fortran lines
373 # 914–927).
374 r1 = (t9m23 + 0.012 * t9m13 + 1.45 + 0.177 * t9p13
375 + 1.97 * t9p23 + 0.406 * t9)
376 a1 = 7.78e9 * math.exp(-36.031 * t9m13 - (t9 / 0.881)**2)
377 a2 = t9m32 * 2.36e-10 * math.exp(-2.798 * t9m1)
378 a3 = t9m32 * 2.03 * math.exp(-5.054 * t9m1)
379 a4 = t9m23 * 1.15e4 * math.exp(-12.310 * t9m1)
380 rate[11] = (1.07452e22 * rho * math.exp(utot[11])
381 * (a1 * r1 + a2 + a3 + a4))
382 dratro[11] = 1.0 + dscr[11]
383 dr1 = (c.cc13 * (-2.0 * t9m23 - 0.012 * t9m13 + 0.177 * t9p13
384 + 3.94 * t9p23) + 0.406 * t9)
385 da1 = a1 * (c.cc13 * 36.031 * t9m13 - 2.0 * (t9 / 0.881)**2)
386 dratt[11] = dsct[11] + rho / rate[11] * (
387 dr1 * a1 + r1 * da1 + a2 * (2.798 * t9m1 - 1.5)
388 + a3 * (5.054 * t9m1 - 1.5) + a4 * (12.310 * t9m1 - c.cc23))
389
390 # Triple alpha (Fortran lines 929–932).
391 rate[12] = (1.565315e21 * rho**2 * t9m1 * t9m2 * 2.79e-8
392 * math.exp(-4.4027 * t9m1 + utot[12]))
393 dratro[12] = 2.0 + dscr[12]
394 dratt[12] = -3.0 + dsct[12] + 4.4027 * t9m1
395
396 # Label 100: rates times abundances (Fortran lines 938–955).
397 eg[1] = rate[1] * x * x
398 if xh2 > 1.0e-11:
399 egdeut = rdeut * x * xh2
400 else:
401 egdeut = 0.0
402 eg[2] = rate[2] * xhe3 * xhe3
403 eg[3] = rate[3] * xhe3 * y
404 eg[4] = rate[4] * x * xc12
405 eg[5] = rate[5] * x * xc13
406 eg[6] = rate[6] * x * xn14
407 eg[7] = rate[7] * x * xo16
408 eg[8] = rate[8] * y * xc13
409 eg[10] = rate[10] * y * xc12
410 eg[11] = rate[11] * y * xn14
411 eg[12] = rate[12] * y**3
412
413 # Energies, MeV net of neutrinos, converted to erg (Fortran lines
414 # 971–1003).
415 convert = 1.602177e-6
416 dg[1] = eg[1] * 6.664 * convert
417 if xh2 > 1.0e-11:
418 dgdeut = egdeut * qdeut * convert
419 else:
420 dgdeut = 0.0
421 dg[2] = eg[2] * 12.860 * convert
422 dg[3] = eg[3] * (1.586 + f1 * 17.394 + f2 * 11.499) * convert
423 dg[4] = eg[4] * 3.457372 * convert
424 dg[5] = eg[5] * 7.550628 * convert
425 dg[6] = eg[6] * (9.054 + f3 * 4.966 + f4 * 12.128) * convert
426 dg[7] = eg[7] * 3.553 * convert
427 dg[8] = eg[8] * 2.216 * convert
428 dg[10] = eg[10] * 7.162 * convert
429 # N14(a,g)F18(e+ nu)O18: Q = 6.071 MeV less <E_nu> = 0.425 MeV.
430 dg[11] = eg[11] * 5.646 * convert
431 dg[12] = eg[12] * 7.275 * convert
432
433 # Reactions 9 and 13 are zeroed (Fortran lines 1012–1017).
434 dratro[9] = 0.0
435 dratt[9] = 0.0
436 dg[9] = 0.0
437 dratro[13] = 0.0
438 dratt[13] = 0.0
439 dg[13] = 0.0
440
441 # Total, and its absolute derivatives d eps/d ln rho, d eps/d ln T
442 # (Fortran lines 1019–1042).
443 sum1 = 0.0
444 sum2 = 0.0
445 sum3 = 0.0
446 for i in range(1, NRXNS + 1): # loop 110
447 sum1 = sum1 + dg[i]
448 sum2 = sum2 + dg[i] * dratro[i]
449 sum3 = sum3 + dg[i] * dratt[i]
450 sum1 = sum1 + dgdeut
451 sum2 = sum2 + dgdeut
452 sum3 = sum3 + dgdeut * qrtdeut
453
454 # Question (see the page): the comment says relative derivatives;
455 # the hard-coded thresholds (Fortran lines 1043–1071).
456 if sum1 <= 1.0e-12:
457 en = -20.0 # noqa: F841 (unused in the Fortran too)
458 pep = 0.0
459 pet = 0.0
460 for i in range(1, NRXNS + 1): # loop 120
461 eg[i] = 0.0
462 else:
463 pep = sum2
464 pet = sum3
465 for i in range(1, NRXNS + 1): # loop 130
466 if rate[i] <= 1.0e-5:
467 rate[i] = 0.0
468
469 # Label 200: rates per Gyr per amu, for the abundance routines
470 # (Fortran lines 1081–1095).
471 hr1[iu] = rate[1] * C21
472 hr2[iu] = rate[2] * C21
473 hr3[iu] = rate[3] * C21
474 hr4[iu] = rate[4] * C21
475 hr5[iu] = rate[5] * C21
476 hr6[iu] = rate[6] * C21
477 hr7[iu] = rate[7] * C21
478 hr8[iu] = rate[8] * C21
479 hr9[iu] = rate[9] * C21
480 hr10[iu] = rate[10] * C21
481 hr11[iu] = rate[11] * C21
482 hr12[iu] = rate[12] * C21
483 hr13[iu] = rate[13] * C21
484 hf1[iu] = f3
485 hf2[iu] = f1
486
487 # Energy by branch: pp I (with deuterium), pp II, pp III; CNO (Fortran
488 # lines 1113–1131).
489 epp1 = dg[1] + dg[2] + dgdeut
490 epp3 = eg[3] * f2 * (1.586 + 11.499) * convert
491 epp2 = dg[3] - epp3
492 ecn = dg[4] + dg[5] + dg[6] + dg[7]
493 e3al = dg[12]
494 ealpca = dg[8] + dg[10] + dg[11]
495
496 # Solar neutrino fluxes per gram at 1 AU, in 1e10 cm^-2 s^-1 (Fortran
497 # lines 1132–1219).
498 flux = fluxes_mod.flux
499 if nml.lsnu:
500 if x <= 1.0e-6:
501 for i in range(1, 11):
502 flux[i] = 0.0
503 else:
504 fourpiau2 = 2.812295e+27
505 flux[1] = eg[1] / fourpiau2 # pp
506 flux[2] = (3.4848e-6 * rwe * t9m12 * (1.0 + 20.0 * t9)
507 * eg[1]) # pep
508 flux[2] = flux[2] * nml.sstandard[14] / fourpiau2
509 q6hep = -6.1399
510 flux[3] = 1.71724e+11 * rho * t9m23 * math.exp(q6hep * t9m13)
511 flux[3] = (1.0 + 0.067862 * t9p13) * nml.sstandard[17] * flux[3]
512 # Screening of He3 + p (ZPRD = 2), for the hep flux.
513 utothe3p = _screen_weak_or_int(tm1 * 2.0, 3.08687, amu, xtr)
514 flux[3] = flux[3] * math.exp(utothe3p)
515 flux[3] = flux[3] * x * xhe3 / fourpiau2 # hep
516 # Kept by main.f's SAVE between the calls that set it.
517 be7massfraction = eg[3] / (be7proton + be7electron)
518 flux[4] = eg[3] * f1 / fourpiau2 # Be7
519 flux[5] = eg[3] * f2 / fourpiau2 # B8
520 flux[6] = eg[4] / fourpiau2 # N13
521 flux[7] = eg[6] / fourpiau2 # O15
522 flux[8] = eg[7] / fourpiau2 # F17
523 flux[9] = eg[2] / fourpiau2 # "fictional"
524 flux[10] = eg[3] / fourpiau2 # "fictional"
525 for k in range(1, 11):
526 flux[k] = 1.0e-10 * flux[k]
527 temp = flux[k]
528 if temp <= 0.0:
529 flux[k] = 0.0
530
531 # Neutrino losses, above TCUT(5) (Fortran line 1228).
532 if tl <= nml.tcut[5]:
533 return (epp1, epp2, epp3, ecn, e3al, pep, pet, sum1,
534 be7massfraction, ealpca, enu)
535
536 # Fortran lines 1231–1234.
537 zc = xc12 + xc13
538 zo = xo16 + xo18
539 t = 10.0**tl
540 d = 10.0**dl
541
542 if nml.lnulos1:
543 # Itoh et al. 1996, through NEUTRINO (Grant Newsham 9/06) (Fortran
544 # lines 1240–1256).
545 snu, dsnudt, dsnudd = neutrino(t, d, x, y, zc, zo, 0.0, 0.0, 0.0)
546 enu = -snu
547 # Suspected bug (see the page): relative derivatives added to
548 # absolute ones.
549 dsnudt = -dsnudt * t / enu
550 dsnudd = -dsnudd * d / enu
551 sum1 = sum1 + enu
552 pep = pep + dsnudd
553 pet = pep + dsnudt # Suspected bug (see the page): PEP, not PET.
554 else:
555 # The old fits: pair, photo- and plasma neutrinos (Fortran lines
556 # 1262–1292).
557 el = t9 / 5.9302
558 eli = 1.0 / el
559 ez = math.exp(c.cc13 * c.cln * (dl - 9.0)) * eli * (0.7937 + 0.2063 * x)
560 ez3 = ez**3
561 emue = 0.5 * (1.0 + x)
562 ex1 = 0.0
563 if t9 >= 0.2:
564 el2 = el * el
565 polx10 = 1.0 + el2 * (-13.04 + el2 * (133.5 + el2 * (
566 1534.0 + el2 * 918.6)))
567 polx11 = V1[1] + ez * (V1[2] + ez * V1[3])
568 polx12 = ez3 + eli * (V1[4] + eli * (V1[5] + eli * V1[6]))
569 ex1 = (math.exp(-ez * V1[7] - eli - eli - c.cln * dl)
570 * polx10 * polx11 / polx12)
571 polx21 = V2[1] + ez * (V2[2] + ez * V2[3])
572 polx22 = ez3 + eli * (V2[4] + eli * (V2[5] + eli * V2[6]))
573 ex2 = emue * el**5 * math.exp(-ez * V2[7]) * polx21 / polx22
574 polx31 = V3[1] + ez * (V3[2] + ez * V3[3])
575 polx32 = ez3 + eli * (V3[4] + eli * (V3[5] + eli * V3[6]))
576 ex3 = (emue**3 * math.exp(-ez * V3[7] + c.cln * (dl + dl))
577 * polx31 / polx32)
578 enu = -(ex1 + ex2 + ex3)
579 sum1 = sum1 + enu
580
581 # Derivatives of the losses (Fortran lines 1293–1315).
582 qetnx = 0.0
583 qednx = 0.0
584 if t9 >= 0.2:
585 qedn = (ez * (V1[2] + 2.0 * ez * V1[3]) / polx11 - ez * V1[7]
586 - 3.0 * ez3 / polx12)
587 qetn = -qedn + eli * (V1[4] + eli * (2.0 * V1[5]
588 + 3.0 * eli * V1[6])) / polx12
589 qetnx = el2 * (-26.08 + el2 * (534.0 + el2 * (
590 9204.0 + el2 * 7348.8))) / polx10
591 qetnx = (qetnx + qetn + eli + eli) * ex1
592 qednx = (-1.0 + c.cc13 * qedn) * ex1
593 qedn = (ez * (V2[2] + 2.0 * ez * V2[3]) / polx21 - ez * V2[7]
594 - 3.0 * ez3 / polx22)
595 qetn = -qedn + eli * (V2[4] + eli * (2.0 * V2[5]
596 + 3.0 * eli * V2[6])) / polx22
597 qetnx = qetnx + (5.0 + qetn) * ex2
598 qednx = qednx + c.cc13 * qedn * ex2
599 qedn = (ez * (V3[2] + 2.0 * ez * V3[3]) / polx31 - ez * V3[7]
600 - 3.0 * ez3 / polx32)
601 qetn = -qedn + eli * (V3[4] + eli * (2.0 * V3[5]
602 + 3.0 * eli * V3[6])) / polx32
603 qetnx = qetnx + qetn * ex3
604 qednx = qednx + (2.0 + c.cc13 * qedn) * ex3
605 pet = pet - qetnx
606 pep = pep - qednx
607 return (epp1, epp2, epp3, ecn, e3al, pep, pet, sum1, be7massfraction,
608 ealpca, enu)