OpenGeoRock
5.4

El formato de archivo .ogr

Válido para OGR Slip2D 0.1.235

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_id y una asignación de región apunta a su material con material_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_get entrega 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#

Tabla 5.4.1 Claves de primer nivel de un archivo .ogr, en el orden en que se escriben.
ClaveContenido
format_versionLa cadena "0.1" (Sección 5.4.4).
id, nameUUID y nombre del proyecto.
settingsTodos los ajustes del análisis (Tabla 5.4.2).
boundariesTodas 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.
materialsTodos 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_typesLos soportes del modelo y los tipos de soporte a los que remiten.
distributed_loads, line_loadsCargas distribuidas (kPa) y cargas lineales (kN/m).
seismicLa carga pseudoestática: kh, kv, enabled y creates_excess_pore_pressure.
seismic_recordsRegistros de aceleración para el análisis de Newmark.
region_assignmentsUna 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_propertiesAgua en la grieta de tracción: mode, percent_filled, elevation, depth, piezo_id.
water_pressure_gridLa rejilla de presiones del agua, o null.
fem_mesh, seepage_bcsLa malla de elementos finitos y las condiciones de contorno de la filtración, o null.
seepage_result, transient_resultsEl 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_variablesLos datos de entrada que se tratan como aleatorios en los análisis probabilístico y de sensibilidad.
annotationsDibujos, textos y cotas; el análisis no los lee.
focus_objectsObjetos de foco que restringen la búsqueda.
user_surfacesCí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.
El campo de agua subterránea se guarda

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 u=0u = 0 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#

Tabla 5.4.2 Claves de settings. Cada sección se escribe completa, así que un archivo guardado contiene todos los campos de todas las secciones.
ClaveContenidoAlgunos de sus campos
unitsUnidades de visualización y dirección de roturasystem, time, permeability, failure_direction ("L2R" o "R2L"), system_id
methodsMétodos y convergenciaenabled_methods, num_slices, tolerance, max_iterations, interslice_function, interslice_forces
groundwaterCómo se obtiene la presión intersticialmethod, pore_fluid_unit_weight, rapid_drawdown, rapid_drawdown_method, transient, transient_stages, default_hu, auto_hu
searchTipo de superficie, método de búsqueda y sus opciones, límites del talud, filtrossurface_type, search_method, grid_nx, grid_ny, radius_increment, num_surfaces, slope_limit_left, slope_limit_right (71 campos en total)
statisticsAnálisis probabilístico y de sensibilidadprobabilistic_analysis, sensitivity_analysis, sampling_method, num_samples, analysis_type, seed
back_analysisRetroanálisis de la fuerza del soporteenabled, target_fos, elevation, method_id
random_numbersSemilla de las búsquedas aleatorias y del muestreomethod, seed, lhs_correlate
design_standardCoeficientes parcialesenabled, standard, factor_permanent, factor_variable, factor_cohesion, factor_friction, factor_unit_weight, factor_resistance, factor_undrained, factor_shear_strength
advancedComprobaciones de admisibilidad, iteración y búsqueda en paralelocheck_tensile_stresses, tensile_percent, check_m_alpha, initial_fos, min_lambda, max_lambda, iterate_steffensen, parallel_search, parallel_cpu_percent
seismicAnálisis sísmico más allá del factor de seguridadcompute_ky, ky_target_fos, newmark, record_id, polarity, allow_upslope, scale
summaryResumen del proyectotitle, analysis, author, company, date_created, comments
max_materials, max_supportsLímites del modelo20 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.

Tabla 5.4.3 Estructura de un archivo de resultados.
RutaTipoContenido
/atributosformat_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 superficieAtributos 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.
…/slicesconjunto de datosUna 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/…gruposLas superficies definidas a mano, con la misma estructura que /surfaces; solo existen si hay alguna.
/summary/fos_arrayconjunto de datosFactor de seguridad de cada superficie de /surfaces, en el mismo orden; NaN donde no hay un factor válido.
/summary/centres, /summary/radiiconjuntos de datosCentro (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.

En OGR Slip2D

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.

Código: ogr_core/project/project.py · ogr_core/project/settings.py · ogr_core/project/results_io.py