Un proyecto de OGR Slip2D es un único archivo JSON en texto plano, con la extensión .ogr, que contiene la geometría, los materiales, las cargas, los soportes, todos los ajustes y, una vez calculado, el campo de agua subterránea por elementos finitos. Se puede leer, comparar y mantener bajo control de versiones como cualquier archivo de texto. Los resultados de una búsqueda, que pueden alcanzar miles de superficies con sus dovelas, se guardan aparte, en un archivo HDF5. A continuación se enumeran las claves del primero y se describe la estructura del segundo.
5.4.1Un documento JSON en texto plano#
- Codificación. UTF-8, con sangría de dos espacios; los caracteres no ASCII se escriben tal cual, sin secuencias de escape.
- Unidades. Los valores se guardan en unidades del SI (m, kN por metro de talud, kPa, kN/m³, grados), sea cual sea el sistema de unidades que muestre la ventana: la conversión se hace solo allí donde la interfaz muestra o lee los datos.
- Identificadores. Cada objeto lleva un identificador UUID (una cadena de texto), y las referencias entre objetos usan esos identificadores: un material apunta a su superficie de agua con
water_surface_idy una asignación de región apunta a su material conmaterial_id. - Las regiones no se almacenan como tales. Las regiones se calculan a partir de los contornos externo y de material; lo que guarda el archivo es cada asignación, como un punto situado dentro de una región (
region_assignments), que se vuelve a localizar en las regiones recalculadas después de cada cambio de geometría. - Compartido por todos los componentes. La ventana,
ogr-slip2d-cli, la capa de operaciones y el servidor MCP leen y escriben el mismo archivo;project_getentrega a un agente una de sus secciones (Sección 5.1).
Al guardar se escribe el documento completo, por lo que un archivo guardado con la versión actual contiene todas las claves que se indican a continuación; un cálculo no modifica el archivo.
Un fragmento#
Comienzo de un talud de dos capas con nivel freático, tal como lo guarda la v0.1.235; … señala las líneas omitidas.
{
"format_version": "0.1",
"id": "ed1d8a87-0f66-45c7-9027-1d689a44c66f",
"name": "Two-layer slope with water table",
"settings": {
"units": {
"system": "metric",
"time": "d",
"permeability": "m/s",
"failure_direction": "L2R",
"system_id": "metric_kpa"
},
"methods": {
"enabled_methods": [
"bishop_simplified",
"spencer",
"gle_morgenstern_price"
],
"num_slices": 30,
"tolerance": 0.005,
"max_iterations": 50,
"interslice_function": "half_sine",
"interslice_forces": "total"
},
…
},
"boundaries": [
{
"id": "ea9a0c7f-a789-4ec7-84e8-1f58c319e9c3",
"name": "External Boundary",
"type": "EXTERNAL",
…
"polyline": {
"id": "d8620e5a-bf0d-45ad-90e8-7cc9a4062aa1",
"closed": true,
"vertices": [
[
0.0,
0.0
],
…
"materials": [
{
"id": "9c481951-90f0-4962-93f7-98cb59eae48d",
"name": "Silty sand",
"strength": {
"model_id": "mohr_coulomb",
"params": {
"cohesion": 5.0,
"friction_angle": 32.0
}
},
"unit_weight": 19.0,
"sat_unit_weight": 21.0,
"use_sat_unit_weight": false,
"pore_pressure": "water_table",
…
"user_surfaces": []
}5.4.2Claves de primer nivel#
.ogr, en el orden en que se escriben.| Clave | Contenido |
|---|---|
format_version | La cadena "0.1" (Sección 5.4.4). |
id, name | UUID y nombre del proyecto. |
settings | Todos los ajustes del análisis (Tabla 5.4.2). |
boundaries | Todas las polilíneas del modelo, cada una con id, name, type, color, line_width, visible, material_id, suppressed y polyline (id, closed y vertices, como pares [x, y]). type toma uno de estos valores: EXTERNAL, MATERIAL, WATER_TABLE, PIEZOMETRIC, DRAWDOWN, TENSION_CRACK, BLOCK_SEARCH_OBJECT, WEAK_LAYER o ANISOTROPIC_SURFACE. Un objeto de búsqueda por bloques lleva además block_object (su tipo y sus opciones) cuando se ha definido. |
materials | Todos los materiales: id, name, strength (model_id y sus params), unit_weight, sat_unit_weight, use_sat_unit_weight, pore_pressure (none, water_table, piezometric, ru, constant o fem), ru, constant_u, water_surface_id, color, hatch, hydraulic (propiedades hidráulicas), phi_b, air_entry_value, hu, auto_hu, undrained_behaviour, b_bar, drawdown_envelope, use_grid, weight_creates_excess y anisotropic_surface_id. |
supports, support_types | Los soportes del modelo y los tipos de soporte a los que remiten. |
distributed_loads, line_loads | Cargas distribuidas (kPa) y cargas lineales (kN/m). |
seismic | La carga pseudoestática: kh, kv, enabled y creates_excess_pore_pressure. |
seismic_records | Registros de aceleración para el análisis de Newmark. |
region_assignments | Una entrada por asignación: el punto (x, y), el material_id y el perímetro de la región en la que queda ese punto (footprint y, para una región con lentes, footprint_holes). |
tension_crack_properties | Agua en la grieta de tracción: mode, percent_filled, elevation, depth, piezo_id. |
water_pressure_grid | La rejilla de presiones del agua, o null. |
fem_mesh, seepage_bcs | La malla de elementos finitos y las condiciones de contorno de la filtración, o null. |
seepage_result, transient_results | El campo estacionario de agua subterránea calculado (o null) y los campos de las etapas transitorias. Solo se escriben los datos mínimos; los campos derivados se reconstruyen al leer el archivo. |
random_variables | Los datos de entrada que se tratan como aleatorios en los análisis probabilístico y de sensibilidad. |
annotations | Dibujos, textos y cotas; el análisis no los lee. |
focus_objects | Objetos de foco que restringen la búsqueda. |
user_surfaces | Círculos definidos a mano y analizados junto con la búsqueda. Los extremos en que cortan el terreno no significan nada en el archivo: son un resultado del análisis, no un dato de entrada. |
Desde la v0.1.78, el campo de filtración calculado se guarda junto con la malla. En versiones anteriores, un proyecto cuyos materiales toman la presión intersticial del campo de elementos finitos se volvía a abrir sin ese campo, y el análisis habría dado en todas partes. Ahora, en cambio, el análisis rechaza un modelo cuyos materiales usan presiones intersticiales fem y que no tiene campo (Sección 5.2).
5.4.3Claves de ajustes#
settings. Cada sección se escribe completa, así que un archivo guardado contiene todos los campos de todas las secciones.| Clave | Contenido | Algunos de sus campos |
|---|---|---|
units | Unidades de visualización y dirección de rotura | system, time, permeability, failure_direction ("L2R" o "R2L"), system_id |
methods | Métodos y convergencia | enabled_methods, num_slices, tolerance, max_iterations, interslice_function, interslice_forces |
groundwater | Cómo se obtiene la presión intersticial | method, pore_fluid_unit_weight, rapid_drawdown, rapid_drawdown_method, transient, transient_stages, default_hu, auto_hu |
search | Tipo de superficie, método de búsqueda y sus opciones, límites del talud, filtros | surface_type, search_method, grid_nx, grid_ny, radius_increment, num_surfaces, slope_limit_left, slope_limit_right (71 campos en total) |
statistics | Análisis probabilístico y de sensibilidad | probabilistic_analysis, sensitivity_analysis, sampling_method, num_samples, analysis_type, seed |
back_analysis | Retroanálisis de la fuerza del soporte | enabled, target_fos, elevation, method_id |
random_numbers | Semilla de las búsquedas aleatorias y del muestreo | method, seed, lhs_correlate |
design_standard | Coeficientes parciales | enabled, standard, factor_permanent, factor_variable, factor_cohesion, factor_friction, factor_unit_weight, factor_resistance, factor_undrained, factor_shear_strength |
advanced | Comprobaciones de admisibilidad, iteración y búsqueda en paralelo | check_tensile_stresses, tensile_percent, check_m_alpha, initial_fos, min_lambda, max_lambda, iterate_steffensen, parallel_search, parallel_cpu_percent |
seismic | Análisis sísmico más allá del factor de seguridad | compute_ky, ky_target_fos, newmark, record_id, polarity, allow_upslope, scale |
summary | Resumen del proyecto | title, analysis, author, company, date_created, comments |
max_materials, max_supports | Límites del modelo | 20 por defecto para cada uno |
El significado de cada ajuste se explica donde se define: en la Sección 2.1 para la ventana y, para la capa de operaciones, con catalog("settings") o settings_get, que enumeran todos los ajustes con su tipo y sus opciones.
5.4.4Versiones y compatibilidad#
Todo archivo lleva "format_version": "0.1", que es el valor de FILE_FORMAT_VERSION en el programa. El lector no lo consulta: un archivo antiguo se reconoce por las claves que contiene, una clave ausente toma su valor por defecto y algunas convenciones que han cambiado se convierten al leer el archivo. Esas conversiones están documentadas en el código; por ejemplo:
- un contorno cerrado que repite su primer vértice al final, como hacía toda importación de DXF antes de la v0.1.197, se lee sin el vértice repetido (es el mismo polígono);
- un proyecto de desembalse rápido guardado antes de que existieran los campos B̄ (v0.1.62) recupera el comportamiento con el que se calculó;
- un proyecto de desembalse rápido B̄ dibujado con la convención de desembalse anterior a la v0.1.69 se lee con el nivel freático y la línea de desembalse intercambiados, para que el modelo signifique lo que significaba;
- una rejilla de presiones de agua que declara además su propio tipo de valor fija en consecuencia el método de agua subterránea (v0.1.202).
La conversión de la v0.1.69 cambia, a propósito, el factor de seguridad de los archivos a los que se aplica, y el registro de cambios de esa versión lo indica. No se garantiza que una versión anterior del programa abra un archivo escrito por otra más reciente.
5.4.5Resultados en HDF5#
Los resultados de una búsqueda se guardan en un archivo HDF5, normalmente junto al proyecto, con el mismo nombre y la extensión .h5. La ventana guarda el resultado del primer método después de cada Compute, siempre que el proyecto tenga archivo; ogr-slip2d-cli compute guarda un archivo por método (Sección 5.2), y un script usa save_results (Sección 5.3). Cada archivo contiene una búsqueda, y un archivo existente se sustituye.
| Ruta | Tipo | Contenido |
|---|---|---|
/ | atributos | format_version ("0.1"), project_id, method, n_surfaces (superficies guardadas en /surfaces), n_valid, n_invalid, n_attempts, objective ("fos" o "ky"); n_focus_rejected solo si un objeto de foco ha eliminado candidatas y n_user_surfaces solo si hay superficies definidas por el usuario. |
/surfaces/surface_00000… | un grupo por superficie | Atributos fos (ausente si no hay factor de seguridad), converged, iterations, method, is_valid, error, reason (Sección 5.5.2), surface_type; en las superficies circulares y compuestas, centre_x, centre_y, radius y, si se conocen, x_left y x_right; en los cálculos sísmicos, ky, ky_fos y newmark_displacement. |
…/slices | conjunto de datos | Una fila por dovela: index, x_centre, width, base_y_left, base_y_right (m), base_angle_deg (°), base_length, height (m), weight (kN/m), pore_pressure en la base y surface_pressure de la carga distribuida situada encima (kPa). Comprimido con gzip. |
/user_surfaces/… | grupos | Las superficies definidas a mano, con la misma estructura que /surfaces; solo existen si hay alguna. |
/summary/fos_array | conjunto de datos | Factor de seguridad de cada superficie de /surfaces, en el mismo orden; NaN donde no hay un factor válido. |
/summary/centres, /summary/radii | conjuntos de datos | Centro (N × 2) y radio de cada superficie; NaN para las superficies que no son círculos. |
Las superficies rechazadas antes de poder dividirse en dovelas se cuentan en n_valid + n_invalid y en n_attempts, pero no tienen grupo, de modo que n_surfaces puede ser menor que el número de superficies intentadas. El archivo guarda una búsqueda, no el modelo, y debe leerse junto con el .ogr de origen.
Una superficie sin factor de seguridad no tiene el atributo fos, sino su reason, de modo que un lector que olvide comprobarlo recibe un error que nombra la superficie, y no un número. La cabecera del propio módulo sigue describiendo los metadatos como un grupo meta y las superficies como surface_0000; el código escribe los metadatos como atributos de la raíz y numera las superficies con cinco dígitos, como muestra esta página.