1C MHP 6/2014
2C Subroutine to remap new, more intuitively named, namelist parameters
3C onto existing code parameters
4C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
5C REMAP
6C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
7 SUBROUTINE REMAP
8C 10/14/26 MHP via Claude
9C code changed to convert COMMON/CROSS/ into CROSS_MOD.
10 USE CROSS_MOD
11C 10/14/26 MHP via Claude
12C code changed to convert COMMON/NMLBYPASS/ into NMLBYPASS_MOD.
13 USE NMLBYPASS_MOD
14C 10/14/26 MHP via Claude
15C code changed to convert COMMON/NMLPAR/ into NMLPAR_MOD.
16 USE NMLPAR_MOD
17C 10/20/26 MHP via Claude
18C code changed to replace implicit typing with IMPLICIT NONE and
19C explicit declarations.
20 IMPLICIT NONE
21 REAL*8 QQS0EE_1_12_A98,QQS0EE_1_13_A98,QQS0EE_1_16_A98,
22 * * QQS0EE_1_BE7P_A98,QS0E_1_12_A98,QS0E_1_13_A98,
23 * * QS0E_1_14_A98,QS0E_1_16_A98,QS0E_1_1_A98,QS0E_1_BE7P_A98,
24 * * QS0E_3_3_A98,QS0E_3_4_A98,S0_1_12_REF,S0_1_13_REF,
25 * * S0_1_14_REF,S0_1_15_C12ALP_REF,S0_1_15_O16_REF,S0_1_16_REF,
26 * * S0_1_12_A98,S0_1_13_A98,S0_1_14_A98,S0_1_16_A98,
27 * * S0_1_1_A98,S0_1_1_REF,S0_1_BE7E_REF,S0_1_BE7P_A98,
28 * * S0_1_BE7P_REF,S0_3_3_A98,S0_3_3_REF,S0_3_4_A98,S0_3_4_REF,
29 * * S0_HEP_REF,S0_PEP_REF
30 INTEGER I
31C PARAMETERS NT AND NG FOR TABULATED SURFACE PRESSURES.
32C PARAMETERS NTA AND NGA FOR TABULATED ALLARD MODEL SURFACE PRESSURES.
33C 10/12/26 MHP via Claude
34C code changed to extend COMMON/NMLPAR/ to 234 members, adding the
35C namelist variables that the physics routines read from 27 COMMON
36C blocks which also held derived or working members. Those blocks keep
37C only their non-namelist members; five of them -- NEWMX, VMULT,
38C PMMWIND, CCOUT1 and ENVGEN -- had nothing left and are gone.
39C Derivation-only namelist variables from the same blocks went to
40C COMMON/NMLBYPASS/ instead, not here.
41C
42C Declared identically in all 121 files that hold any of these members.
43C Generated from one member list, so every copy is byte-identical; the
44C linker's 'size of symbol changed' warning is the check that they are.
45C 10/13/26 MHP via Claude: removed the unused COMMON/CTOL/ declaration
46C (no member referenced here; residue of the obsolete-option removals).
47C 10/13/26 MHP via Claude
48C code changed to drop COMMON/CTLIM/, declared here but never used.
49C MHP 8/96 CROSS SECTIONS PUT IN COMMON BLOCK
50C MHP 6/14 DERIVATIVES ADDED
51C 10/12/26 MHP via Claude
52C code changed to merge COMMON/NEWPARAM/, COMMON/NEWCROSS/ and
53C COMMON/XSECT/ into a single COMMON/NMLBYPASS/, declared here, in
54C remap.f and in starin.f.
55C
56C These are namelist variables that exist only to set other quantities,
57C or that are reserved for future development; none is read by the wider
58C code. Keeping them in their own block keeps them OUT of the single
59C consolidated namelist block being built, so that block holds only
60C variables the physics routines actually consume. starin.f declares it
61C although it uses none of them yet, so the isotope and cross-section
62C machinery there can reach them without reopening this layout.
63C
64C Member order is NEWPARAM, then NEWCROSS, then XSECT, and the three
65C declarations are generated from one list so all files agree.
66C 10/14 MHP NEW PARAMETERS - REPLACING DTDIF,DTWIND, HPTTOL & ATIME VECTORS
67C KC 2025-05-30 reordered common block elements
68 SAVE
69 DATA S0_1_1_REF,S0_3_3_REF,S0_3_4_REF,S0_1_12_REF,S0_1_13_REF/
70 * * 4.07D-22,5.15D3,5.4D-1,1.45D0,5.5D0/
71C NOTE: PEP IS THE PROPORTIONALITY CONSTANT RELATIVE TO PP
72C NOTE: BE7+E- IS THE PROPORTIONALITY CONSTANT IN THE LINEAR TERM
73C THE CODE USES T9, NOT T6, SO ANY EXPRESSION IN TERMS OF T/10^6 K
74C NEEDS TO BE DIVIDED BY 1000^0.5 (FOR BOTH PEP AND BE7+E-)
75 DATA S0_1_14_REF,S0_1_16_REF,S0_PEP_REF,S0_1_BE7E_REF/
76 * * 3.32D0,9.4D0,3.4848D-6,1.752D-10/
77 DATA S0_1_BE7P_REF,S0_HEP_REF,S0_1_15_C12ALP_REF,S0_1_15_O16_REF/
78 * * 0.0243D0,8.0D-20,6.75D4,6.4D1/
79C REFERENCE ADELBERGER ET AL. 1998 CROSS SECTIONS - USED IN HARD-CODED
80C FIRST AND SECOND DERIVATIVE TERMS (EXPRESSED AS S'/S AND S''/S)
81C UNITS ARE KeV b
82C 10/27/26 MHP via Claude
83C code changed to restore the A98 S0 values for reactions 2-7. Each
84C QS0E/QQS0EE below is normalized by its own reaction's A98 S'/S0, but
85C reactions 2-7 divided by S0_1_1_A98 instead. That left QS0E(2-7) and
86C QQS0EE(4,5,7) near 1D-22, so the S' and S'' terms were dropped and
87C the S0P_*/S0PP_* inputs had no effect. The typo also left these
88C values unreferenced, which is why they had been commented out.
89 DATA S0_1_1_A98,S0_3_3_A98,S0_3_4_A98,S0_1_12_A98,S0_1_13_A98/
90 * * 4.00D-22,5.4D3,5.3D-1,1.34D0,7.6D0/
91 DATA S0_1_14_A98,S0_1_16_A98/3.5D0,9.4D0/
92C DATA S0_1_14_A98,S0_1_16_A98,S0_PEP_A98,S0_1_BE7E_A98/
93C * 3.5D0,9.4D0,3.5734D-6,1.77088D-10/
94C DATA S0_1_BE7P_A98,S0_HEP_A98,S0_1_15_C12ALP_A98,S0_1_15_O16_A98/
95C * 0.019D0,2.3D-20,6.75D4,6.4D1/
96 DATA S0_1_BE7P_A98/0.019D0/
97C REFERENCE FIRST DERRIVATIVES OF CROSS-SECTIONS (ADELBERGER ET AL. 1998)
98C UNITS ARE b
99 DATA QS0E_1_1_A98,QS0E_3_3_A98,QS0E_3_4_A98,QS0E_1_12_A98/
100 * * 4.48D-24,-4.1D0,-3.0D-4,2.6D-3/
101 DATA QS0E_1_13_A98,QS0E_1_14_A98,QS0E_1_16_A98,QS0E_1_BE7P_A98/
102 * * -7.8D-3,-1.28D-2,-2.4D-2,-1.33D-5/
103C REFERENCE SECOND DERIVATIVES OF CROSS SECTIONS (ADELBERGER ET AL. 1998)
104 DATA QQS0EE_1_12_A98,QQS0EE_1_13_A98,QQS0EE_1_16_A98,
105 * * QQS0EE_1_BE7P_A98/
106 * * 8.3D-5,7.3D-4,5.7D-5,7.22D-8/
107C The code explicitly treats non-equilibrium C12,C13,N14,O16.
108C N15 burning is assumed to immediately follow N14+p, with the
109C branching ratio between C12+Alpha and O16+Gamma calculated using
110C the relative S0 for the two. To change the branching ratio, change
111C S0_1_15_C12ALP and S0_1_15_O16. O17 proton capture is assumed to
112C immediately follow O16 proton capture, producing N14.
113C He-burning reactions triple-alpha,C12+He4,C13+He4,N14+He4 are tracked
114C in the code, using the Caughlin&Fowler(1988) cross-sections. As resonances
115C are important for these reactions, a simple scaling by S0 is not sufficient,
116C and updates should instead use different functional forms (e.g. NACRE II).
117C IF THE LNEWNUC FLAG IS SET TRUE THE SSTANDARD VECTOR IS NORMALIZED TO UNITY
118C AND THE INDIVIDUAL CROSS-SECTION VALUES AND THEIR DERIVATIVES ARE USED INSTEAD.
119 DO I = 1,8
120 QS0E(I) = 1.0D0
121 QQS0EE(I) = 1.0D0
122 END DO
123 FC12 = 1.0D0
124 FO16 = 1.0D0
125C WRITE(*,911)(QS0E(I),I=1,8),(QQS0EE(I),I=1,8),
126C * (SSTANDARD(I),I=1,17),LNEWNUC
127C 911 FORMAT(8E12.3/8E12.3/8E12.3/9E12.3/L5)
128 IF(LNEWNUC)THEN
129 DO I = 1,17
130 SSTANDARD(I) = 1.0D0
131 END DO
132C The energy generation subroutine engeb has a vector, SSTANDARD,
133C which is the ratio of the desired S0 to that of Bahcall & Ulrich (1988).
134C If this option is true, the namelist SSTANDARD vector is replaced
135C by explicit cross-sections for individual reactions, and the implied
136C Sstandard vector is derived here. The first and second derivatives
137C of the reactions are permitted to be separately modified, unlike in the
138C original version of engeb. In this case the inputs are the ratios
139C S'/S0 and S''/S0, relative to the Solar Fusion I (Adelberger et al. 1998) ratios.
140 SSTANDARD(1) = S0_1_1/S0_1_1_REF
141 SSTANDARD(2) = S0_3_3/S0_3_3_REF
142 SSTANDARD(3) = S0_3_4/S0_3_4_REF
143 SSTANDARD(4) = S0_1_12/S0_1_12_REF
144 SSTANDARD(5) = S0_1_13/S0_1_13_REF
145 SSTANDARD(6) = S0_1_14/S0_1_14_REF
146 SSTANDARD(7) = S0_1_16/S0_1_16_REF
147C SSTANDARD(8) = S0_4_13/S0_4_13_REF resonant; not fit by simple S0
148C SSTANDARD(9) = S0_4_16/S0_4_16_REF not used
149C SSTANDARD(10) = S0_4_12/S0_4_12_REF resonant; not fit by simple S0
150C SSTANDARD(11) = S0_4_14/S0_4_14_REF resonant; not fit by simple S0
151C SSTANDARD(12) = S0_3A/S0_3A_REF resonant; not fit by simple S0
152C SSTANDARD(13) = S0_12_12/S0_12_12_REF not used
153 SSTANDARD(14) = S0_PEP/S0_PEP_REF
154 SSTANDARD(15) = S0_1_BE7E/S0_1_BE7E_REF
155 SSTANDARD(16) = S0_1_BE7P/S0_1_BE7P_REF
156 SSTANDARD(17) = S0_HEP/S0_HEP_REF
157C ABILITY TO CHANGE THE HARD-CODED BRANCHING RATIOS FOR THE OUTCOME OF N15+P
158 FC12 = S0_1_15_C12ALP/S0_1_15_C12ALP_REF
159 FO16 = S0_1_15_O16/S0_1_15_O16_REF
160C NUCLEAR REACTION DERIVATIVES ARE USED IN THE VECTORS Q2-Q5 IN ENGEB AND NRATES.
161C THE Q2 AND Q3 FACTORS ARE DEFINED PROPORTIONAL TO S'/S (REFERENCE: SOLAR FUSION I IN 1998)
162C THE Q4 AND Q5 FACTORS ARE DEFINTED PROPORTIONAL TO S''/S (SAME REFERENCE)
163C FIRST DERIVATIVE TERMS - TO BE USED TO MULTIPLY Q2 AND Q3 TERMS IN ENGEB
164C MHP 4/25 FIXED TYPOS AND TRAPPED OUT POTENTIAL DIVIDE BY ZERO ERRORS
165 IF(S0_1_1.GT.0.0D0)THEN
166 QS0E(1) = (S0P_1_1/S0_1_1)/(QS0E_1_1_A98/S0_1_1_A98)
167 ELSE
168 QS0E(1) = 0.0D0
169 ENDIF
170 IF(S0_3_3.GT.0.0D0)THEN
171 QS0E(2) = (S0P_3_3/S0_3_3)/(QS0E_3_3_A98/S0_3_3_A98)
172 ELSE
173 QS0E(2) = 0.0D0
174 ENDIF
175 IF(S0_3_4.GT.0.0D0)THEN
176 QS0E(3) = (S0P_3_4/S0_3_4)/(QS0E_3_4_A98/S0_3_4_A98)
177 ELSE
178 QS0E(3) = 0.0D0
179 ENDIF
180 IF(S0_1_12.GT.0.0D0)THEN
181 QS0E(4) = (S0P_1_12/S0_1_12)/(QS0E_1_12_A98/S0_1_12_A98)
182 ELSE
183 QS0E(4) = 0.0D0
184 ENDIF
185 IF(S0_1_13.GT.0.0D0)THEN
186 QS0E(5) = (S0P_1_13/S0_1_13)/(QS0E_1_13_A98/S0_1_13_A98)
187 ELSE
188 QS0E(5) = 0.0D0
189 ENDIF
190 IF(S0_1_14.GT.0.0D0)THEN
191 QS0E(6) = (S0P_1_14/S0_1_14)/(QS0E_1_14_A98/S0_1_14_A98)
192 ELSE
193 QS0E(6) = 0.0D0
194 ENDIF
195 IF(S0_1_16.GT.0.0D0)THEN
196 QS0E(7) = (S0P_1_16/S0_1_16)/(QS0E_1_16_A98/S0_1_16_A98)
197 ELSE
198 QS0E(7) = 0.0D0
199 ENDIF
200c QS0E(8)=(S0P_1_BE7P/S0_1_BE7P)/(QS0E_1_BE7P_A98/S0_1_BE7P__A98)
201 IF(S0_1_BE7P.GT.0.0D0)THEN
202 QS0E(8)=(S0P_1_BE7P/S0_1_BE7P)/(QS0E_1_BE7P_A98/S0_1_BE7P_A98)
203 ELSE
204 QS0E(8) = 0.0D0
205 ENDIF
206C SECOND DERIVATIVE TERMS - TO BE USED TO MULTIPLY Q4 AND Q5 TERMS IN ENGEB
207C QQS0EE(1) = (S0PP_1_1/S0_1_1)/(QQS0EE_1_1_A98/S0_1_1_A98) ZEROED OUT IN 2003 VERSION
208C QQS0EE(2) = (S0PP_3_3/S0_3_3)/(QQS0EE_3_3_A98/S0_3_3_A98) ZEROED OUT IN 2003 VERSION
209C QQS0EE(3) = (S0PP_3_4/S0_3_4)/(QQS0EE_3_4_A98/S0_3_4_A98) ZEROED OUT IN 2003 VERSION
210 IF(S0_1_12.GT.0.0D0)THEN
211 QQS0EE(4) = (S0PP_1_12/S0_1_12)/(QQS0EE_1_12_A98/S0_1_12_A98)
212 ELSE
213 QQS0EE(4)=0.0D0
214 ENDIF
215 IF(S0_1_13.GT.0.0D0)THEN
216 QQS0EE(5) = (S0PP_1_13/S0_1_13)/(QQS0EE_1_13_A98/S0_1_13_A98)
217 ELSE
218 QQS0EE(5)=0.0D0
219 ENDIF
220C QQS0EE(6) = (S0PP_1_14/S0_1_14)/(QQS0EE_1_14_A98/S0_1_14_A98) ZEROED OUT IN 2003 VERSION
221 IF(S0_1_16.GT.0.0D0)THEN
222 QQS0EE(7) = (S0PP_1_16/S0_1_16)/(QQS0EE_1_16_A98/S0_1_16_A98)
223 ELSE
224 QQS0EE(7)=0.0D0
225 ENDIF
226 IF(S0_1_BE7P.GT.0.0D0)THEN
227 QQS0EE(8)=(S0PP_1_BE7P/S0_1_BE7P)/
228 * * (QQS0EE_1_BE7P_A98/S0_1_BE7P_A98)
229 ELSE
230 QQS0EE(8)=0.0D0
231 ENDIF
232 ENDIF
233C OPTION TO OVERWRITE SPATIAL AND TEMPORAL TOLERANCES WITH MORE INTUITIVE VARIABLE NAMES.
234C NOTE: THIS OVERWRITES THE HPTTOL AND ATIME VECTORS.
235 IF(LNEWVARS)THEN
236C MINIMUM LOG MASS SPACING BETWEEN SHELLS
237 HPTTOL(1) = TOL_DM_MIN
238C MAXIMUM LOG MASS SPACING BETWEEN SHELLS
239 HPTTOL(2) = TOL_DM_MAX
240C MAXIMUM L/LSURF SPACING BETWEEN SHELLS
241 HPTTOL(9) = TOL_DL_MAX
242C MAXIMUM LOG P SPACING BETWEEN SHELLS, RADIATIVE INTERIOR
243 HPTTOL(11) = TOL_DP_CORE_MAX
244C MAXIMUM LOG P SPACING BETWEEN SHELLS, CONVECTIVE ENVELOPE
245 HPTTOL(8) = TOL_DP_ENV_MAX
246C MAXIMUM LOG P SPACING BETWEEN SHELLS, NEAR CZ BASE
247 HPTTOL(10) = TOL_DP_CZBASE_MAX
248C WIDTH (IN LOG P) OF FINELY ZONED REGION NEAR THE CZ BASE
249 HPTTOL(7) = TOL_CZBASE_FINE_WIDTH
250C MAXIMUM X SPACING BETWEEN SHELLS (USUALLY DISABLED)
251 HPTTOL(5) = TOL_DX_MAX
252C MAXIMUM Z SPACING BETWEEN SHELLS (USUALLY DISABLED)
253 HPTTOL(6) = TOL_DZ_MAX
254C X DIFFERENCE BETWEEN SHELLS REQUIRED TO FLAG (AVOID NUMERICAL DIFFUSION)
255 HPTTOL(3) = FLAG_DX
256C Z DIFFERENCE BETWEEN SHELLS REQUIRED TO FLAG (AVOID NUMERICAL DIFFUSION)
257 HPTTOL(4) = FLAG_DZ
258C MAXIMUM LOG OMEGA SPACING BETWEEN SHELLS (ROTATING MODELS ONLY)
259 HPTTOL(12) = FLAG_DW
260C MINIMUM CENTRAL ABUNDANCE TO USE CORE BURNING DT CRITERION
261 ATIME(1) = TIME_CORE_MIN
262C MAX PERMITTED ABSOLUTE DELTA X BURNED IN CORE IN TIMESTEP
263 ATIME(2) = TIME_DX_CORE_TOT
264C MAX PERMITTED FRACTION OF X BURNED IN CORE IN TIMESTEP
265 ATIME(3) = TIME_DX_CORE_FRAC
266C MAX PERMITTED SOLAR MASSES OF X BURNED IN TIMESTEP
267 ATIME(6) = TIME_DX_TOTAL
268C MAX PERMITTED FRACTION OF X BURNED IN SHELL IN TIMESTEP
269 ATIME(7) = TIME_DX_SHELL
270C MAX PERMITTED ABSOLUTE DELTA Y BURNED IN CORE IN TIMESTEP
271 ATIME(4) = TIME_DY_CORE_TOT
272C MAX PERMITTED FRACTION OF Y BURNED IN CORE IN TIMESTEP
273 ATIME(5) = TIME_DY_CORE_FRAC
274C MAX PERMITTED FRACTION OF Y BURNED IN SHELL IN TIMESTEP
275 ATIME(12) = TIME_DY_SHELL
276C MAX PERMITTED SOLAR MASSES OF Y BURNED IN SHELL IN TIMESTEP
277 ATIME(14) = TIME_DY_TOTAL
278C MAX PERMITTED CHANGES IN T, P, R, L AT ANY GIVEN SHELL IN TIMESTEP
279 ATIME(8) = TIME_DT
280 ATIME(9) = TIME_DP
281 ATIME(10) = TIME_DR
282 ATIME(11) = TIME_DL
283C MASTER FLAG THAT USES/DOES NOT USE ATIME(8)-(11)
284C NOTE: THIS IS USED ONLY IN THE PRE-MS AND DISABLED FOR MS STARS AUTOMATICALLY.
285 LPTIME = LSTRUCT_TIME
286C MAX PERMITTED CHANGE IN OMEGA PER GLOBAL TIMESTEP
287 DTWIND = TIME_DW_GLOBAL
288C THE CODE CAN MIX IN A SERIES OF SMALLER TIMESTEPS; THIS IS
289C THE MAX PERMITTED CHANGE IN OMEGA IN A SMALL, ROTATIONAL MIXING STEP
290 DTDIF = TIME_DW_MIX
291C THE TIMESTEP IS NOT PERMITTED TO CHANGE FROM ONE MODEL TO THE NEXT BY
292C MORE THAN THIS SCALE FACTOR
293C ATIME(13) = TIME_MAX_DT_FAC
294 ATIME(13) = TIME_MAX_DT_FRAC
295 ENDIF
296 RETURN
297 END
298
1"""Python version of remap.f (YREC 7be4133): translates the newer,
2"more intuitively named" namelist parameters into the arrays the rest of
3the code uses."""
4
5from pyrec import cross_mod
6from pyrec import nmlbypass_mod
7from pyrec import nmlpar_mod
8
9# DATA: the reference S-factors that RATES and ENGEB assume (keV b)
10# (Fortran lines 69–77).
11S0_1_1_REF = 4.07e-22
12S0_3_3_REF = 5.15e3
13S0_3_4_REF = 5.4e-1
14S0_1_12_REF = 1.45
15S0_1_13_REF = 5.5
16S0_1_14_REF = 3.32
17S0_1_16_REF = 9.4
18S0_PEP_REF = 3.4848e-6 # relative to pp
19S0_1_BE7E_REF = 1.752e-10 # Be7+e-, in T9 units
20S0_1_BE7P_REF = 0.0243
21S0_HEP_REF = 8.0e-20
22S0_1_15_C12ALP_REF = 6.75e4
23S0_1_15_O16_REF = 6.4e1
24
25# DATA: Adelberger et al. 1998 (Solar Fusion I) values (keV b), each the
26# normalization of its own reaction's derivative factors below; the others
27# are commented out in the Fortran (KC 2025-05-31) (Fortran lines 78–96).
28S0_1_1_A98 = 4.00e-22
29S0_3_3_A98 = 5.4e3
30S0_3_4_A98 = 5.3e-1
31S0_1_12_A98 = 1.34
32S0_1_13_A98 = 7.6
33S0_1_14_A98 = 3.5
34S0_1_16_A98 = 9.4
35S0_1_BE7P_A98 = 0.019
36
37# First derivatives (b) (Fortran lines 97–101).
38QS0E_1_1_A98 = 4.48e-24
39QS0E_3_3_A98 = -4.1
40QS0E_3_4_A98 = -3.0e-4
41QS0E_1_12_A98 = 2.6e-3
42QS0E_1_13_A98 = -7.8e-3
43QS0E_1_14_A98 = -1.28e-2
44QS0E_1_16_A98 = -2.4e-2
45QS0E_1_BE7P_A98 = -1.33e-5
46
47# Second derivatives (Fortran lines 103–106).
48QQS0EE_1_12_A98 = 8.3e-5
49QQS0EE_1_13_A98 = 7.3e-4
50QQS0EE_1_16_A98 = 5.7e-5
51QQS0EE_1_BE7P_A98 = 7.22e-8
52
53
54def _ratio(s0, s0p, ref_deriv, ref_s0):
55 """(S'/S0) / (S'/S0)_A98, or 0 when S0 <= 0 (MHP 4/25)."""
56
57 if s0 > 0.0:
58 return (s0p / s0) / (ref_deriv / ref_s0)
59 return 0.0
60
61
62def remap() -> None:
63 """With LNEWNUC, set SSTANDARD, the N15+p branching factors FC12, FO16
64 and the derivative factors QS0E, QQS0EE from the individual
65 cross sections; with LNEWVARS, copy the new tolerance names into
66 HPTTOL, ATIME, LPTIME, DTWIND and DTDIF.
67
68 Translates: remap.f#REMAP (7be4133)
69
70 No arguments; nothing is returned. Reads nmlbypass_mod, sets
71 cross_mod and nmlpar_mod.
72
73 """
74
75 nb = nmlbypass_mod
76 nml = nmlpar_mod
77 cr = cross_mod
78
79 # Defaults: no change to the rates (Fortran lines 117–124).
80 for i in range(1, 9):
81 cr.qs0e[i] = 1.0
82 cr.qqs0ee[i] = 1.0
83 cr.fc12 = 1.0
84 cr.fo16 = 1.0
85
86 # With LNEWNUC, SSTANDARD from the individual S-factors (Fortran lines
87 # 128–156).
88 if nb.lnewnuc:
89 for i in range(1, 18):
90 nml.sstandard[i] = 1.0
91 nml.sstandard[1] = nb.s0_1_1 / S0_1_1_REF
92 nml.sstandard[2] = nb.s0_3_3 / S0_3_3_REF
93 nml.sstandard[3] = nb.s0_3_4 / S0_3_4_REF
94 nml.sstandard[4] = nb.s0_1_12 / S0_1_12_REF
95 nml.sstandard[5] = nb.s0_1_13 / S0_1_13_REF
96 nml.sstandard[6] = nb.s0_1_14 / S0_1_14_REF
97 nml.sstandard[7] = nb.s0_1_16 / S0_1_16_REF
98 # 8, 10, 11, 12 are resonant (not fit by a simple S0); 9, 13 unused.
99 nml.sstandard[14] = nb.s0_pep / S0_PEP_REF
100 nml.sstandard[15] = nb.s0_1_be7e / S0_1_BE7E_REF
101 nml.sstandard[16] = nb.s0_1_be7p / S0_1_BE7P_REF
102 nml.sstandard[17] = nb.s0_hep / S0_HEP_REF
103
104 # The branching of N15+p (Fortran lines 157–159).
105 cr.fc12 = nb.s0_1_15_c12alp / S0_1_15_C12ALP_REF
106 cr.fo16 = nb.s0_1_15_o16 / S0_1_15_O16_REF
107
108 # First-derivative factors (multiply Q2 and Q3 in ENGEB and RATES)
109 # (Fortran lines 160–205).
110 cr.qs0e[1] = _ratio(nb.s0_1_1, nb.s0p_1_1, QS0E_1_1_A98, S0_1_1_A98)
111 cr.qs0e[2] = _ratio(nb.s0_3_3, nb.s0p_3_3, QS0E_3_3_A98, S0_3_3_A98)
112 cr.qs0e[3] = _ratio(nb.s0_3_4, nb.s0p_3_4, QS0E_3_4_A98, S0_3_4_A98)
113 cr.qs0e[4] = _ratio(nb.s0_1_12, nb.s0p_1_12, QS0E_1_12_A98,
114 S0_1_12_A98)
115 cr.qs0e[5] = _ratio(nb.s0_1_13, nb.s0p_1_13, QS0E_1_13_A98,
116 S0_1_13_A98)
117 cr.qs0e[6] = _ratio(nb.s0_1_14, nb.s0p_1_14, QS0E_1_14_A98,
118 S0_1_14_A98)
119 cr.qs0e[7] = _ratio(nb.s0_1_16, nb.s0p_1_16, QS0E_1_16_A98,
120 S0_1_16_A98)
121 cr.qs0e[8] = _ratio(nb.s0_1_be7p, nb.s0p_1_be7p, QS0E_1_BE7P_A98,
122 S0_1_BE7P_A98)
123
124 # Second-derivative factors (multiply Q4 and Q5); 1-3 and 6 were
125 # zeroed out (Fortran lines 206–232).
126 cr.qqs0ee[4] = _ratio(nb.s0_1_12, nb.s0pp_1_12, QQS0EE_1_12_A98,
127 S0_1_12_A98)
128 cr.qqs0ee[5] = _ratio(nb.s0_1_13, nb.s0pp_1_13, QQS0EE_1_13_A98,
129 S0_1_13_A98)
130 cr.qqs0ee[7] = _ratio(nb.s0_1_16, nb.s0pp_1_16, QQS0EE_1_16_A98,
131 S0_1_16_A98)
132 cr.qqs0ee[8] = _ratio(nb.s0_1_be7p, nb.s0pp_1_be7p,
133 QQS0EE_1_BE7P_A98, S0_1_BE7P_A98)
134
135 # Overwrite the HPTTOL and ATIME vectors with the newer names (Fortran
136 # lines 233–295).
137 if nb.lnewvars:
138 nml.hpttol[1] = nb.tol_dm_min # min log mass spacing
139 nml.hpttol[2] = nb.tol_dm_max # max log mass spacing
140 nml.hpttol[9] = nb.tol_dl_max # max L/Lsurf spacing
141 nml.hpttol[11] = nb.tol_dp_core_max # max log P, radiative interior
142 nml.hpttol[8] = nb.tol_dp_env_max # max log P, convective envelope
143 nml.hpttol[10] = nb.tol_dp_czbase_max # max log P, near the CZ base
144 nml.hpttol[7] = nb.tol_czbase_fine_width # width of the fine zone
145 nml.hpttol[5] = nb.tol_dx_max # max X spacing (usually off)
146 nml.hpttol[6] = nb.tol_dz_max # max Z spacing (usually off)
147 nml.hpttol[3] = nb.flag_dx # X difference to flag
148 nml.hpttol[4] = nb.flag_dz # Z difference to flag
149 nml.hpttol[12] = nb.flag_dw # max log omega spacing
150 nml.atime[1] = nb.time_core_min # min central abundance for core dt
151 nml.atime[2] = nb.time_dx_core_tot # max delta X burned in the core
152 nml.atime[3] = nb.time_dx_core_frac # max fraction of X, core
153 nml.atime[6] = nb.time_dx_total # max Msun of X burned
154 nml.atime[7] = nb.time_dx_shell # max fraction of X, shell
155 nml.atime[4] = nb.time_dy_core_tot # max delta Y burned in the core
156 nml.atime[5] = nb.time_dy_core_frac # max fraction of Y, core
157 nml.atime[12] = nb.time_dy_shell # max fraction of Y, shell
158 nml.atime[14] = nb.time_dy_total # max Msun of Y burned in a shell
159 # Max changes in T, P, R, L at any shell in a step.
160 nml.atime[8] = nb.time_dt
161 nml.atime[9] = nb.time_dp
162 nml.atime[10] = nb.time_dr
163 nml.atime[11] = nb.time_dl
164 # Master flag for ATIME(8)-(11) (pre-MS only).
165 nml.lptime = nb.lstruct_time
166 nml.dtwind = nb.time_dw_global # max change in omega per step
167 nml.dtdif = nb.time_dw_mix # the same, per mixing substep
168 nml.atime[13] = nb.time_max_dt_frac # max factor between steps