Home

DMF PHP Engine – Simple Version

Technical description of the baseline Dark Matter Fissures (DMF) engine used on the SPARC galaxy sample.

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:

\[ E(R) = \begin{cases} 1, & \text{if } \text{baryon\_frac}(R) \le \text{FRAC\_START}, \\[4pt] 0, & \text{if } \text{baryon\_frac}(R) \ge \text{FRAC\_FULL}, \\[4pt] \displaystyle 1 - \frac{ \text{baryon\_frac}(R) - \text{FRAC\_START} }{ \text{FRAC\_FULL} - \text{FRAC\_START} }, & \text{otherwise.} \end{cases} \]

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:

\[ K_{\text{eff}} = \frac{F_{\text{target}}} {S_{\text{mean}}\, (1 - F_{\text{target}})}. \]

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)

  1. Read SPARC table for the galaxy (radii, velocities, SB).
  2. Compute \(g_{\text{obs}}(R)\), \(g_{\text{bar}}(R)\), \(g_{\text{bary,eff}}(R)\).
  3. Compute \(g_{\text{DM,req}}(R)\) and \(f_{\text{DM,req}}(R)\).
  4. Build normalized fields and tension \(\mathcal{T}(R)\).
  5. Evaluate susceptibility \(\chi(\mathcal{T}(R))\).
  6. Compute \(r_n = R/R_{\max}\) and \(F(r_n)\).
  7. Compute baryonic extinction \(E(R)\).
  8. Build \(S_{\text{base}}(R)\) and smooth it into \(S(R)\).
  9. Select disc points, compute \(F_{\text{target}}\) and \(S_{\text{mean}}\), then derive \(K_{\text{eff}}\).
  10. Compute \(x(R) = K_{\text{eff}} S(R)\) and \(f_{\text{DM,model}}(R) = x/(1+x)\).
  11. 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.