1. Scope of This Page
This page documents the simple DMF PHP engine, i.e. the current minimal version used as a clean baseline for the project. It includes:
- the main equations;
- the numerical protocol applied to each SPARC galaxy;
- a short description of what is exported for further analysis.
Advanced features of the older “full” engine (families A/B/C/D, strong locking, hard extinction layers, Δf-based modulation, etc.) are intentionally not included here.
2. Input Data per Galaxy
For each SPARC galaxy, the engine reads a radial table with:
- radius \(R_i\) (in kpc),
- observed rotation \(V_{\text{obs},i}\) (km/s),
- baryonic components \(V_{\text{gas},i}\), \(V_{\text{disk},i}\), \(V_{\text{bul},i}\),
- surface brightness information (to estimate surface density).
For each radius \(R\) the baryonic circular velocity is:
\[ V_{\text{bar}}^2(R) = V_{\text{gas}}^2(R) + V_{\text{disk}}^2(R) + V_{\text{bul}}^2(R). \]
3. Observed & Baryonic Accelerations
The observed and baryonic accelerations are defined as:
\[ g_{\text{obs}}(R) = \frac{V_{\text{obs}}^2(R)}{R},\quad g_{\text{bar}}(R) = \frac{V_{\text{bar}}^2(R)}{R}. \]
In the simple engine, we define an effective baryonic field \(g_{\text{bary,eff}}(R)\). In the most basic implementation:
\[ g_{\text{bary,eff}}(R) \approx g_{\text{bar}}(R), \]
but the code allows for mild central renormalisations if needed (for instance, to reduce bulge dominance at the very first radii).
The required dark component is:
\[ g_{\text{DM,req}}(R) = \max\!\big(0,\; g_{\text{obs}}(R) - g_{\text{bary,eff}}(R) \big). \]
The required dark fraction is:
\[ f_{\text{DM,req}}(R) = \frac{g_{\text{DM,req}}(R)}{g_{\text{obs}}(R)}. \]
4. Tension Field \(\mathcal{T}(R)\)
The state of the space-time fabric is encoded in a scalar “tension” \(\mathcal{T}(R)\). It is constructed from three normalized fields:
- \(g_{\text{norm}}(R)\): baryonic gravity normalized to its maximum over the galaxy;
- \(\Sigma_{\text{norm}}(R)\): baryonic surface density (estimated from surface brightness) normalized to its maximum;
- \(\text{grad}_{\text{norm}}(R)\): normalized gradient of \(\ln g_{\text{bar}}\).
Explicitly:
\[ g_{\text{norm}}(R) = \frac{g_{\text{bar}}(R)} {\max\_R g_{\text{bar}}(R)},\quad \Sigma_{\text{norm}}(R) = \frac{\Sigma(R)}{\max\_R \Sigma(R)}, \]
\[ \text{grad}_{\text{norm}}(R) \propto \left| \frac{d\ln g_{\text{bar}}}{d\ln R} \right| \quad\text{(rescaled into }[0,1]\text{).} \]
The effective tension is then:
\[ \mathcal{T}(R) = \alpha_g\, g_{\text{norm}}(R) + \alpha_\Sigma\, \Sigma_{\text{norm}}(R) + \alpha_{\text{grad}}\, \text{grad}_{\text{norm}}(R), \]
where \(\alpha_g\), \(\alpha_\Sigma\), \(\alpha_{\text{grad}}\) are global parameters.
5. Susceptibility \(\chi(\mathcal{T})\)
The susceptibility \(\chi(\mathcal{T})\) encodes how active the fissures are as a function of tension. It is non-monotonic:
- small \(\mathcal{T}\): very few effective fissures,
- intermediate \(\mathcal{T}\): strong fissure activity,
- large \(\mathcal{T}\): locked regime with reduced DMF.
A convenient parametrization is a log-normal bump plus a high-tension floor:
\[ \chi(\mathcal{T}) = \chi_{\min} + \big(\chi_{\text{peak}} - \chi_{\min}\big) \exp\!\left[ -\frac{\ln^2(\mathcal{T}/\mathcal{T}_*)}{2\sigma^2} \right] + \chi_{\text{high,add}}(\mathcal{T}), \]
where:
- \(\mathcal{T}_*\): optimal tension for maximum fissure activity,
- \(\sigma\): width of the log-normal bump,
- \(\chi_{\min}\): minimum susceptibility at very low tension,
- \(\chi_{\text{high,add}}(\mathcal{T})\): extra term smoothly interpolating to a high-tension plateau \(\chi_{\text{high}}\).
6. Radial DMF Profile \(F(r_n)\)
We introduce a normalized radius:
\[ r_n = \frac{R}{R_{\max}},\quad r_n \in [0,1], \]
where \(R_{\max}\) is the last measured SPARC radius for the galaxy.
In the simple engine, the DMF halo profile is:
\[ F(r_n) = F_{\text{floor}} + \big(1 - F_{\text{floor}}\big)\, r_n^{P_{\text{RDMF}}}, \]
where:
- \(F_{\text{floor}}\): minimum DMF level near the centre,
- \(P_{\text{RDMF}}\): global slope parameter (same for all galaxies).
7. Baryonic Extinction \(E(R)\)
The DMF field is suppressed where baryons already explain the observed gravity. We define a local baryonic fraction:
\[ \text{baryon\_frac}(R) = \frac{g_{\text{bary,eff}}(R)}{g_{\text{obs}}(R)}. \]
Two global thresholds are used:
- \(\text{FRAC\_START}\): above this, extinction starts,
- \(\text{FRAC\_FULL}\): above this, DMF is fully collapsed.
The extinction factor \(E(R)\) is:
8. DMF Field \(S(R)\) & Smoothing
The raw DMF field before smoothing is:
\[ S_{\text{base}}(R) = \chi\big(\mathcal{T}(R)\big)\, F(r_n)\, E(R). \]
To avoid unphysical point-to-point fluctuations, the engine applies a radial smoothing using a short kernel, for example:
\[ K = [1,2,3,2,1] / 9, \]
and defines:
\[ S(R_i) = \sum_j K_{i-j}\, S_{\text{base}}(R_j), \]
where the sum runs over neighbouring radii with appropriate boundary handling. In the simple engine, there is no extra exponent on \(S\): we do not apply \(S^\gamma\) with \(\gamma < 1\).
9. Calibration & Logistic Mapping
Each galaxy has its own calibration factor \(K_g\). A global constant \(K_{\text{DMF,GLOBAL}}\) is fixed to 1 in the simple engine:
\[ K_{\text{eff}} = K_{\text{DMF,GLOBAL}} \times K_g = K_g. \]
For a given galaxy, we select all radii where:
- \(f_{\text{DM,req}}(R)\) is defined,
- \(S(R) > 0\),
- and \(R\) lies in the disc region (not in problematic inner/outer bins).
On this selection, we compute:
\[ F_{\text{target}} = \langle f_{\text{DM,req}} \rangle,\quad S_{\text{mean}} = \langle S(R) \rangle. \]
The model uses a logistic mapping from the DMF field to the dark fraction:
\[ x(R) = K_{\text{eff}}\, S(R),\quad f_{\text{DM,model}}(R) = \frac{x(R)}{1 + x(R)}. \]
Imposing that the mean modelled dark fraction matches the mean required one:
\[ F_{\text{target}} \approx \left\langle \frac{K_{\text{eff}} S(R)}{1 + K_{\text{eff}} S(R)} \right\rangle \approx \frac{K_{\text{eff}} S_{\text{mean}}} {1 + K_{\text{eff}} S_{\text{mean}}}, \]
leads to:
Since \(K_{\text{DMF,GLOBAL}} = 1\) in the simple engine, we set \(K_g = K_{\text{eff}}\) for that galaxy.
10. Output & Numerical Protocol
10.1 Per-Galaxy Numerical Protocol (Summary)
- Read SPARC table for the galaxy (radii, velocities, SB).
- Compute \(g_{\text{obs}}(R)\), \(g_{\text{bar}}(R)\), \(g_{\text{bary,eff}}(R)\).
- Compute \(g_{\text{DM,req}}(R)\) and \(f_{\text{DM,req}}(R)\).
- Build normalized fields and tension \(\mathcal{T}(R)\).
- Evaluate susceptibility \(\chi(\mathcal{T}(R))\).
- Compute \(r_n = R/R_{\max}\) and \(F(r_n)\).
- Compute baryonic extinction \(E(R)\).
- Build \(S_{\text{base}}(R)\) and smooth it into \(S(R)\).
- Select disc points, compute \(F_{\text{target}}\) and \(S_{\text{mean}}\), then derive \(K_{\text{eff}}\).
- Compute \(x(R) = K_{\text{eff}} S(R)\) and \(f_{\text{DM,model}}(R) = x/(1+x)\).
- Store all radial arrays and summary statistics for export.
10.2 Typical JSON Structure (Conceptual)
The PHP engine exports a JSON file summarizing the run. A typical structure for the simple engine is:
{
"params": {
"alpha_g": ...,
"alpha_Sigma": ...,
"alpha_grad": ...,
"F_floor": ...,
"P_RDMF": ...,
"FRAC_START": ...,
"FRAC_FULL": ...,
"chi_Tstar": ...,
"chi_sigma": ...,
...
},
"per_galaxy": [
{
"name": "GalaxyName",
"Kg": ...,
"F_target_disc": ...,
"F_model_disc": ...,
"error_disc": ...,
"corr_disc": ...,
"radial": {
"R": [...],
"g_obs": [...],
"g_bary_eff": [...],
"f_DM_req": [...],
"S": [...],
"f_DM_model": [...]
}
},
...
]
}
This JSON is then used for global statistics, plotting and further analysis of the DMF model on the full SPARC sample.