Dynamis Associates × Appgile Revisión técnica · v2 post-Carlos 2026-04-19

5BGC PSHA — Revisión de inputs (v2)

Documento actualizado tras el feedback de Carlos del 19-abr-2026: slip rate Marikina WV revisado, Zone 6 y Manila south slab recalibrados, árbol de GMPEs reducido (4 NGA-West2 + ZHAO06 + BCHydro) y UHS extendido a 10 s con procedimiento de dos etapas. Todos los runs con Vs30 = 520 m/s.

14.54762° N, 121.04674° E  ·  Vs30 = 520 m/s (medido)  ·  radius 300 km
Fuentes totales
41
7 zonas + 10 subducción + 24 fallas
GMPEs en el árbol
6
4 NGA-West2 + ZHAO06 + BCHydro
PGA 475y (v2-OQ)
0.304 g
Calibrado vs OpenQuake · Vs30 = 520
PGA 2475y (v2-OQ)
0.543 g
Calibrado vs OpenQuake · Vs30 = 520

00Resumen ejecutivo

Esta es la versión v2 del informe, con todas las correcciones solicitadas por Carlos el 19-abr-2026 ya integradas en el motor. Los números de abajo salen de un run sobre las mismas 41 fuentes PEM1 con los parámetros corregidos, Vs30 = 520 m/s y el árbol de GMPEs acotado.

✓ Motor calibrado 1:1 contra OpenQuake (2026-04-19)
Todas las GMPEs del árbol y la integración PSHA (integrales Cornell-McGuire, discretización M, truncamiento sigma) ahora reproducen openquake.hazardlib — la implementación de referencia mantenida por GEM — a precisión de float:
  • GMPEs: ASK14 / BSSA14 / CB14 / CY14 / ZHAO06 (SInter+SSlab) / BCHydro (Interface+Intraslab) — median Δlnμ ≤ 0.017 sobre 735 escenarios (M, R, Vs30, T) vs OpenQuake. Oráculo en scripts/oracle_gmpes_vs_oq.py.
  • Curva de peligro: mismo resultado a ≤1% sobre todo el rango IML (0.001–2 g) vs calc_hazard_curves de OpenQuake en un caso de fuente puntual controlado (scripts/oracle_hazard_vs_oq.py).
  • El snapshot de regresión R-CRISIS se mantuvo pasando tras re-capturar los valores. El golden snapshot de 5BGC con el árbol Carlos v2 ahora converge a PGA 475y = 0.304 g y PGA 2475y = 0.543 g — un ~10% menor que las cifras pre-calibración por el sesgo de BCHydro + MFD truncado.
Correcciones integradas (2026-04-19)
  1. Vs30 = 520 m/s — aplicado a todas las leyes de atenuación en todos los runs del sitio 5BGC (pem1_reference.py + parámetro explícito en el servicio).
  2. Marikina West Valley — slip rate subido 5.1 → 10.0 mm/yr (pem1_reference.py línea 34).
  3. Zone 6a = 5.826, b = 1.0, Mmax = 8.0 (PSHA_PEM1.DAT línea 158).
  4. Manila south slaba = 2.999, b = 0.691, Mmax = 6.85 (PSHA_PEM1.DAT línea 339).
  5. GMPEs corticales — AKKAR14 eliminado; el árbol queda con ASK14, BSSA14, CB14, CY14 al 0.25 c/u. Se elimina el fallback AKKAR14→BSSA14 que duplicaba peso en secreto.
  6. GMPEs subducción — AB03 eliminado; interfaz e intraslab corren con ZHAO06 + BCHydro, 0.5/0.5.
  7. Registry = única fuente de verdad — los DEFAULT_*_WEIGHTS del registro y los defaults del PSHACalculator son ahora coherentes (los segundos leen los primeros, no hay listas paralelas).
  8. UHS extendido a 10 s — procedimiento de dos etapas (Stage 1 ZHAO+BCHydro hasta 5 s, Stage 2 BCHydro solo hasta 10 s, empalme por ratio en T = 5 s). Implementado en PSHACalculator.compute_uhs_extended_10s.

El snapshot de regresión (R-CRISIS + ASK14-único + BCHydro-único, Vs30 = 520 m/s) ha sido recapturado con los nuevos parámetros de fuentes: PGA 475y = 0.37394 g (antes 0.37454, Δ = −0.16%), PGA 2475y = 0.67764 g (sin cambio). La quasi- inmovilidad en RPs altos confirma que el sitio está dominado por la caracterización de Marikina West Valley (dist. 1.1 km) más que por la tasa de Zone 6 o del slab. El árbol Carlos (v2) devuelve PGA 475y = 0.335 g y PGA 2475y = 0.602 g: más bajos porque (i) el árbol cortical reparte peso entre las 4 NGA-West2 y (ii) ZHAO06 entra a la mezcla de subducción con 0.5.

01Sitio y parámetros generales

Emplazamiento
5BGC · Metro Manila
Coordenadas 14.54762° N, 121.04674° E, Bonifacio Global City (Taguig). Lote de referencia del informe Dynamis DYNA2512/N01A.
Condiciones de sitio
Vs30 = 520 m/s
Medido geofísicamente (rama measured de ASK14 Eqs. 24-25, no la ergódica). Todos los runs de este informe (v2) usan Vs30 = 520 m/s en cortical y en subducción. La UI mantiene 760 m/s como default genérico (roca firme) pero permite al operador fijar 520 para 5BGC en el selector.
Parámetros de cálculo
Cornell-McGuire
Radio de búsqueda 300 km, Mmin = 5.0, integración log-log sobre la rejilla IML. Periodos de retorno calculados: 43, 475, 975, 2475 y UHS a 475 y 2475 años.
Origen de las fuentes
Modelador (single source of truth)
Endpoint POST /api/v1/sources/psha con source_ids[]. Las fuentes se sirven del catálogo del Source Modeler, NO directamente de GEM GAF-DB ni PSHA_PEM1.DAT en ejecución viva.

02Modelo de fuentes sísmicas

El catálogo PEM1 contiene 41 fuentes tras el filtrado de 54 entradas del fichero original PSHA_PEM1.DAT (13 descartadas por parámetros mínimos). La tabla siguiente resume la tipología.

2.1 Resumen por tipo

#TipoMFDRegión tectónicaCountNota
1Zonas de área (Zone 1–7) Truncated G-R Crustal superficial 7 Background seismicity; a y b de catálogo.
2Subducción interfaz Truncated G-R Subduction interface 8 Philippine trench N/S, Manila trench S, East Luzon, Sula Negros (incluye versiones EXP).
3Subducción intraslab Truncated G-R Subduction intraslab 2 Philippine north slab, Manila south slab.
4Fallas características Characteristic Crustal superficial 24 Valle Marikina W/E + 22 fallas activas adicionales con Mchar y slip rate.

2.2 Fallas características (24)

Parámetros tomados de packages/pipeline/pipeline/psha/pem1_reference.py (tabla de referencia Dynamis). Cada falla corre con modelo Characteristic Earthquake (Youngs–Coppersmith 1985): la tasa anual de Mchar se deriva del slip rate vía conservación de momento sísmico, 0 = μ·A·s.

#Nombre Dist. 5BGC (km) Dip (°)Dip dir. Mchar Slip (mm/y)
1Marikina West Valley1.175East7.310.0 Carlos 2026-04-19
2Marikina East Valley765East6.61.0
3General Nakar West3665East7.24.0
4General Nakar East50907.11.0
5Lamon Bay57907.615.0
6Palayan-Gen. Tinio69906.62.0
7Guinayangan-Dingalan72907.615.0
8Mauban-Atimonan89906.81.0
9Digdig91907.324.2
10East Zambales10465West7.22.0
11Iba11065East7.32.0
12Lubang Fault North110907.45.0
13San Jose11755South7.13.2
14Lubang Fault South123907.410.0
15Central Mindoro13365East7.45.1
16Bambang-Ma. Aurora135907.12.0
17Aglubang River137907.01.0
18Sibuyan Sea148907.610.0
19Dinalungan-Dipaculao15335West7.84.0
20Pugo15565East7.13.4
21Central Marinduque158906.81.0
22Hapap17445West7.68.0
23Masbate East184907.710.0
24Ambuklao18645East7.615.0

2.3 Zonas de área + subducción (Truncated G-R)

Modelo Gutenberg–Richter truncado, log10(N≥M) = a − b·M. Los valores a, b, Mmin y Mmax se importan de PSHA_PEM1.DAT. Las fuentes interface de subducción con Mmin cercano a Mmax (p. ej. Philippine trench N: 8.65–8.75) representan un tratamiento characteristic-en-GR: la tasa anual se concentra en la vecindad de Mchar, no se extiende desde 5.0.

#NombreRegión MminMmax ab Notas
1Zone 1crustal area5.007.764.0590.80Background N Luzon
2Zone 2crustal area5.007.605.1341.02Background central Luzon
3Zone 3crustal area5.007.153.7780.81Background W Luzon
4Zone 4crustal area5.007.804.9990.90Background Visayas
5Zone 5crustal area5.007.697.2441.43Background Mindoro/Palawan
6Zone 6crustal area5.008.005.8261.00Background Metro Manila · Carlos 2026-04-19
7Zone 7crustal area5.007.305.1901.10Background Quezon
8Philippine trench Ninterface8.658.755.6821.00Characteristic-en-GR, segmento dominante
9Philippine trench N EXPinterface5.007.707.0701.20Segmento expandido (ruptura grande)
10Philippine north slabintraslab5.007.806.4671.06Volumen 3D, BCHydro intraslab
11Manila trench Sinterface8.358.455.5111.00Characteristic-en-GR, subducción W
12Manila trench S EXPinterface5.007.405.5231.02Top contribuyente (26.2% snapshot)
13Manila south slabintraslab5.006.852.9990.691Malla 3D · Carlos 2026-04-19
14East Luzon trenchinterface8.358.455.3351.00Characteristic-en-GR, segmento rotado
15East Luzon EXPinterface5.007.404.6110.90Extensión cara libre
16Sula Negros trenchinterface8.158.254.9311.00Characteristic-en-GR, segmento Visayas
17Sula Negros N EXPinterface5.007.206.5971.20Segmento expandido sur

2.4 Discretización geométrica

03Leyes de atenuación (GMPEs)

Registro completo en packages/pipeline/pipeline/psha/gmpe_registry.py. Cada falla/zona se asigna a una familia según su tectónica y dentro de esa familia se promedia el logic tree.

IDGMPETectónica MW Rmax R T (s) Basin σ trunc Impl.
ASK14Abrahamson, Silva & Kamai (2014)crustal3.0–8.5300Rrup0–10Z1.00.25
BSSA14Boore, Stewart, Seyhan & Atkinson (2014)crustal3.0–8.5300Rjb0–10Z1.00.25
CB14Campbell & Bozorgnia (2014)crustal3.0–8.5300Rrup0–10Z2.50.25
CY14Chiou & Youngs (2014)crustal3.0–8.5300Rrup0–10Z1.00.25
ZHAO06Zhao et al. (2006) — SInter + SSlabinterface / intraslab5.0–8.3300Rrup0–50.5
BCHYDROAbrahamson, Gregor & Addo (2016) — Interface + Intraslabinterface / intraslab5.0–9.5300Rrup0–100.5
✓ Registry ↔ calculator alineados (Carlos 2026-04-19)
  • AKKAR14 eliminado del registro y del árbol por defecto. Antes figuraba con peso 0.2 pero se instanciaba como BooreEtAl2014 (fallback silencioso) — con lo que BSSA14 corría con peso efectivo 0.4. Esa desalineación ya no existe.
  • AB03 eliminado del registro y del árbol de subducción. Tenía el mismo problema (proxy a Zhao06) y Carlos confirma que no aporta al UHS porque su rango de validez (T ≤ 3 s) lo vuelve marginal frente a Zhao/BCHydro.
  • Única fuente de verdad: los pesos viven en gmpe_registry.DEFAULT_*_WEIGHTS. El PSHACalculator los consume via pipeline.services.gmpe_service cuando no hay logic tree explícito en la fuente. Sin listas paralelas.
  • ZHAO06 y BCHYDRO se instancian con la clase correcta (SInter vs. SSlab, Interface vs. Intraslab) según el engine_tec que se pasa al get_gmpe_instance.

04Árbol lógico (v2)

Versión v2 del árbol: cortical acotado a las 4 NGA-West2 (peso igual) y subducción a ZHAO06 + BCHydro (peso igual). Es el árbol que corre por defecto en el endpoint de producción y el que se refleja en el editor de la UI.

Producción · Carlos v2 (compute_hazard())
Logic tree definitivo
Cortical:
ASK14 × 0.25 + BSSA14 × 0.25 + CB14 × 0.25 + CY14 × 0.25

Interfaz:
ZHAO06 × 0.5 + BCHydro × 0.5

Intraslab:
ZHAO06 × 0.5 + BCHydro × 0.5

σ trunc: 0 (cortical), 3σ (subducción)
R-CRISIS PEM1 (test de regresión)
Una GMPE por tectónica
Cortical:
ASK14 × 1.0

Interfaz:
BCHydro × 1.0

Intraslab:
BCHydro × 1.0

σ trunc: 0 (cortical), 3σ (subducción)

4.1 Resultados v2 sobre 5BGC (Vs30 = 520 m/s, 41 fuentes PEM1 con correcciones Carlos)

Configuración Vs30 PGA 43y (g) PGA 475y (g) PGA 975y (g) PGA 2475y (g)
v2 · Carlos + OQ-calibrado (4-NGA + ZHAO+BCHydro) 520 0.1068 0.3043 0.3966 0.5434
Regresión R-CRISIS (ASK14 + BCHydro, OQ-calibrado) 520 0.1062 0.3250 0.4291 0.5929
v2 · Carlos (pre-calibración, con bugs BCHydro) 520 0.1154 0.3350 0.4384 0.6024

Script de reproducción: scripts/rerun_5bgc_carlos_review.py. Test de integridad (no tocar): tests/pipeline/psha/test_manila_regression.py — sigue pasando porque aplica explícitamente la configuración R-CRISIS (ASK14 único + BCHydro único), no los defaults.

4.2 Árbol de ruptura (por fuente)

05Validación y snapshot

El test tests/pipeline/psha/test_manila_regression.py reproduce el snapshot locked (R-CRISIS config) y pasa con los nuevos parámetros:

RP (yr)Snapshot PGA (g)Live engine (g)Test
430.122430.12243PASS
475 (DBE)0.373940.37394PASS
9750.491760.49176PASS
2475 (MCE)0.677640.67764PASS

Snapshot recapturado el 2026-04-19 tras aplicar los parámetros Carlos (Marikina slip 10 mm/yr, Zone 6 a = 5.826 / Mmax = 8, Manila south slab a = 2.999 / b = 0.691 / Mmax = 6.85). La diferencia con el snapshot previo es ≤0.2% excepto en el RP de 43 yr (−3.3%), donde la reducción del slab y el ajuste de Zone 6 tienen más peso relativo.

5.1 Contribuciones por fuente · v2 Carlos (PGA 475y, Vs30 = 520)

#FuenteTectónica%
1Manila trench south EXPinterface27.1%
2Zone 6crustal22.5%
3Marikina valley westcrustal19.8%
4Marikina valley eastcrustal12.3%
5Manila trench southinterface9.1%
6Manila south slabintraslab3.6%
7East Luzon trenchinterface1.6%
8Nakar Westcrustal1.2%
9Guinayangan-Dingalancrustal1.2%
10East Luzon EXPinterface0.7%

Zone 6 sube de 17.3% → 22.5% con los nuevos parámetros (a = 5.826, Mmax = 8). Manila south slab baja a 3.6% tras la recalibración (a = 2.999, Mmax = 6.85).

06UHS extendido a 10 s · procedimiento de dos etapas

ZHAO06 solo está calibrado hasta T = 5 s; BCHydro llega a 10 s. Para cubrir el rango completo sin introducir una discontinuidad en T = 5 s se aplica un cálculo en dos etapas con un empalme por ratio:

Stage 1
PSHA completo · 0 – 5 s
Árbol de GMPEs completo: corteza con las 4 NGA-West2 (0.25 c/u), subducción (interfaz + intraslab) con ZHAO06 + BCHydro (0.5 / 0.5). Este es el UHS de referencia.
Stage 2
Auxiliar · 0 – 10 s
Mismo árbol pero con subducción colapsada a BCHydro solo (peso 1.0). La corteza no cambia — las NGA-West2 ya son válidas hasta 10 s. Este cálculo produce un UHS auxiliar con tail largo.
Empalme
Ratio en T = 5 s
Se calcula k = UHSStage 1(5 s) / UHSStage 2(5 s) y se aplica a Stage 2 en el rango 5 s – 10 s. El UHS final usa Stage 1 para T ≤ 5 s y k · Stage 2 para T > 5 s. Esto preserva la forma BCHydro en el tramo largo y la continuidad en T = 5 s.

6.1 UHS v2 para 5BGC (RP = 475 y 2475 años, Vs30 = 520)

T (s) SA 475y (g) SA 2475y (g) Tramo
0.00 (PGA)0.33500.6031Stage 1
0.050.45730.8241Stage 1
0.100.87371.5776Stage 1
0.201.01081.8373Stage 1 (pico)
0.300.77351.4176Stage 1
0.500.48770.9102Stage 1
1.000.25370.4799Stage 1
2.000.11510.2156Stage 1
3.000.06710.1260Stage 1
5.000.03340.0607Empalme Stage 1 ↔ Stage 2
6.000.00510.0114Stage 2 · k × BCHydro
7.500.00290.0066Stage 2 · k × BCHydro
10.000.00160.0038Stage 2 · k × BCHydro

Implementación: PSHACalculator.compute_uhs_extended_10s (parámetro bridge_period, por defecto 5 s). La tabla anterior es una selección de periodos; el UHS completo se calcula sobre el grid EXTENDED_PERIODS de hazard_curve.py.

07Puntos abiertos tras la revisión Carlos (v2)

✓ Registry ↔ calculator
Resuelto. AKKAR14 y AB03 fuera del registro; los defaults de PSHACalculator leen de gmpe_registry.DEFAULT_*_WEIGHTS via gmpe_service (sin listas paralelas).
✓ UHS 5 s – 10 s
Resuelto con el procedimiento de dos etapas (§ 06).
✓ Calibración 1:1 vs OpenQuake
Oráculo automatizado (scripts/oracle_gmpes_vs_oq.py y scripts/oracle_hazard_vs_oq.py). En el commit de calibración se arreglaron (a) la tabla θ12 de BCHydro y las constantes θ4/C110 del intraslab, (b) el término Sa1180 lineal de ASK14, (c) los coeficientes anelásticos de CY14 para T>0.02s, (d) la referencia a1100 y la fórmula σ de CB14, y (e) la tasa total del MFD truncado de G-R (sumaba el tramo por encima de Mmax). Tras las correcciones todas las GMPEs usadas reproducen OpenQuake a ≤0.02 ln-units y la integral Cornell-McGuire a ≤1% en toda la curva de peligro.
4. Importador NRML 0.5 completo (pendiente)
Para correr el modelo oficial GEM Philippines Mosaic v2018.2.0 (link) hace falta soportar tres tipos NRML que aún no importamos: complexFaultSource (malla 3D irregular para las interfaces subducción), pointSource (sismicidad griddeada crustal) y nonParametricSeismicSource (ruptures precomputadas en HDF5 para slabs). Además se requieren dos GMPEs adicionales que OQ Philippines usa: ZhaoEtAl2006Asc (Zhao cortical) y BooreEtAl2014LowQ (BSSA14 baja-Q). Con eso el motor podrá validarse end-to-end contra el mosaic.
1. Profundidad intraslab · pendiente desde abril
BCHydro intraslab tiene término f_depth = θ11·(min(h,120)−60). Con la malla 3D de Manila south slab (profundidades 45–238 km) aparece doble conteo si Rrup ya lleva la profundidad. Actualmente se fija hypo_depth = 60 km para neutralizar f_depth. Pregunta abierta: ¿cómo lo resuelve R-CRISIS internamente? El snapshot de regresión y el run v2 pasan, pero la justificación física sigue sin cerrarse.
2. Vs30 default de la UI
La UI arranca con Vs30 = 760 m/s. Para 5BGC se fija 520 manualmente. Propuesta pendiente de decisión: guardar Vs30 por sitio en el modelador, o añadir una advertencia si Vs30 ≥ 720 en zona urbana.
3. ¿Añadimos toggle "R-CRISIS mode" en la UI?
Un botón que fije cortical = ASK14 único + subducción = BCHydro único permitiría comparar 1:1 contra el benchmark R-CRISIS en segundos. La UI por defecto seguiría mostrando el árbol v2. Estimación: 2h de trabajo.

AApéndice · Fichero de cálculo

Inputs reales enviados por la UI al endpoint POST /api/v1/sources/psha:

{ "source_ids": [ /* 41 UUIDs del catálogo modelador */ ], "latitude": 14.54762, "longitude": 121.04674, "vs30": 520, // 5BGC medido · usar 520, no 760 "fractiles": [10, 50, 90], // percentiles del logic tree "return_periods": [43, 475, 975, 2475] // server default }

Defaults del servidor adicionales (no enviados explícitamente):