#import "/.template/lib/index.typ": corp-table, formula, vref, vrefs, eqref, numbered-list #let img-width = 14cm = Определение физико-механических свойств массива Для выполнения численного моделирования и оценки устойчивости бортов карьеров в программном комплексе Prorock необходимо принять физико-механические свойства породного массива. Назначение параметров выполнялось на основе: - данных блочной геомеханической модели, - эмпирических зависимостей Хука--Брауна @hoekHoekBrownFailureCriterionGSI2019, - особенностей реализации метода в Prorock (#vref(, "р")). В качестве исходных данных для расчёта физико-механических свойств использованы параметры блочной модели участка Кварцитовый: - $"UCS"$ -- предел прочности при одноосном сжатии; - $m_i$ -- материальная константа интактной породы в критерии Хука--Брауна @hoekHoekBrownFailureCriterion2002; - $"GSI"$ -- геологический индекс прочности @hoekStrengthRockMasses1994; - $"Density"$ -- плотность; - $D$ -- коэффициент нарушенности массива. Для каждого литотипа определялись средневзвешенные значения UCS и GSI с учётом пространственного распределения параметров в пределах разрезов. Импорт физико-механических свойств из блочной модели не исключает необходимости предварительного задания параметров материалов по умолчанию в ПО Prorock: блочная модель не всегда обеспечивает полное покрытие расчётной области, и часть конечных элементов может оказаться вне области интерполяции, на слабо обеспеченных данными участках либо в зонах, где сопоставление параметров выполнено некорректно или не выполнено вовсе. В таких условиях свойства по умолчанию выполняют роль базовых параметров, необходимых для полного заполнения модели, корректной инициализации расчёта и предотвращения ошибок, связанных с наличием элементов без назначенных характеристик. == Коэффициент нарушенности массива Коэффициент нарушенности массива (Disturbance factor, $D$) задан distance-функцией в блочной модели с помощью ПО Leapfrog. Результат расчёта distance-функции показан на #vref(, "п"). #figure( image("/assets/images/d_zone_example.png", width: img-width), caption:[Пример работы distance-функции в блочной модели] ) == Учёт порового давления Для задания порового давления в численных моделях использованы результаты гидрогеологических расчётов в ПО Rocscience Slide2. По результатам осреднения значений по всем моделям принят коэффициент гидростатического воздействия $H_u = 0","755$. == Расчёт физико-механических свойств Резервные параметры массива (свойства материалов по умолчанию) и свойства литотипов рассчитаны по эмпирическим зависимостям Хука--Брауна @hoekHoekBrownFailureCriterionGSI2019, широко применяемым для описания прочности трещиноватых массивов. Величина $sigma_3$ принята по исходным паспортам RocData для скальных пород. По формулам, приведённым в #vref(, "п"), из параметров блочной модели UCS, $"GSI"$ и $m_i$ через постоянные массива ($m_b$, $s$, $a$) получены: - модуль упругости ($E$), - сцепление ($C$), - угол внутреннего трения ($phi$), - предел прочности при растяжении ($"UTS"$). Плотность $rho$ принята по данным блочной модели. В рамках метода конечно-дискретных элементов существенную роль играет задание параметров контактов и трещинных элементов, определяющих поведение массива при разрушении. Свойства тектонических разломов приняты из блочной модели. Для трещинных элементов приняты параметры, полученные по результатам испытаний на сдвиг по естественной трещине и по распилу @geomechKvarcitovyi2026: - угол внутреннего трения по трещине ($phi$), - сцепление по трещине ($C$), - предел прочности при растяжении ($"UTS"$). Параметр штрафа $p$ и остальные расчётные параметры приняты по умолчанию согласно руководству @prorockDocumentation2x. Результаты расчёта физико-механических параметров сведены в #vref(, "в"), которая включает значения свойств всех материалов и параметры трещинных элементов, используемых в расчётах. // Данные таблицы: материалы по строкам CSV, параметры выводятся по столбцам #let fms-properties = csv("/assets/tables/properties.csv").slice(1) #let fms-format(v) = if v == "" { [--] } else if v == "1E^6" { $1 dot 10^6$ } else { v.replace(".", ",") } #block(breakable: false)[ #figure( corp-table( columns: (1fr, 1.2fr, 1.2fr, 1.2fr, 1.2fr, 1.2fr), align: right + horizon, table-align: "center", text-size: 10pt, body-inset: (x: 5pt, y: 4pt), repeat_header: true, continuation: true, [Параметр], ..fms-properties.map(row => row.first()), [$rho$, кг/м³], ..fms-properties.map(row => fms-format(row.at(1))), [$E$, ГПа], ..fms-properties.map(row => fms-format(row.at(2))), [$nu$], ..fms-properties.map(row => fms-format(row.at(3))), [VD], ..fms-properties.map(row => fms-format(row.at(4))), [$C$, МПа], ..fms-properties.map(row => fms-format(row.at(5))), [$phi$, град.], ..fms-properties.map(row => fms-format(row.at(6))), [UTS, МПа], ..fms-properties.map(row => fms-format(row.at(7))), [$phi_r$, град.], ..fms-properties.map(row => fms-format(row.at(8))), table.cell(inset: (x: 5pt, y: 8pt), breakable: false)[#text(size: 12pt)[$frac(S_p, h)$]], ..fms-properties.map(row => fms-format(row.at(9))), table.cell(inset: (x: 5pt, y: 8pt), breakable: false)[#text(size: 12pt)[$frac(S_r, S_p)$]], ..fms-properties.map(row => fms-format(row.at(10))), table.cell(inset: (x: 5pt, y: 8pt), breakable: false)[#text(size: 12pt)[$frac(O_p, h)$]], ..fms-properties.map(row => fms-format(row.at(11))), table.cell(inset: (x: 5pt, y: 8pt), breakable: false)[#text(size: 12pt)[$frac(O_r, O_p)$]], ..fms-properties.map(row => fms-format(row.at(12))), [$p$, ГПа], ..fms-properties.map(row => fms-format(row.at(13))), ), caption: [Физико-механические свойства материалов расчётных моделей], ) ] Примечание: для зоны влияния тектонических разломов свойства импортированы из блочной модели и учитываются в расчёте. Расшифровка и описание параметров свойств приведены в документации Prorock 2.x @prorockDocumentation2x. == Параметры системной трещиноватости Трещиноватость породного массива обусловливает анизотропию физико-механических свойств, поэтому в моделях дополнительно задано направление систем трещин. Пересечение домена с разрезом принято по каркасам, построенным в ПО Leapfrog: на разрезе определялись попадающие в его плоскость домены, после чего сопоставлялись азимут разреза и азимут соответствующей системы трещин. Системы, азимут которых отличался от азимута разреза более чем на 40°, при задании анизотропии не учитывались. Кажущийся угол падения системы трещин в плоскости разреза определён проецированием @jointsProjectionOnSection: #formula[$"DIP"_"разрез" = -arctan(cos("AZ"_"разрез" - "AZ"_"системы") dot tan("DIP"_"системы"))$] где $"DIP"_"разрез"$ -- спроецированный угол падения системы трещин на разрезе, °, $"AZ"_"разрез"$ -- азимут профильной линии, °, $"AZ"_"системы"$ -- азимут падения системы трещин, °, $"DIP"_"системы"$ -- истинный угол падения системы трещин, °. Принятые значения азимутов, истинных и спроецированных углов падения систем трещин по профильным линиям приведены в #vref(, "п"). // Данные таблицы: по одной строке на домен системы трещин, попавший в плоскость разреза #let anisotropy-angles = csv("/assets/tables/anisotropy_angles.csv", delimiter: ";").slice(1) // Пустая ячейка в столбце профильной линии -- продолжение предыдущей строки, // в столбцах домена прочерк означает отсутствие данных. #let anisotropy-format(v, i) = if v == "" { if i == 0 { [] } else { [--] } } else if v == "-" { [--] } else { v.replace("-", "−") } // Ячейки тела таблицы: если у профильной линии несколько систем трещин, // столбец «№/Азимут» объединяется по высоте на все её строки-домены. // Строка другой линии со всеми «=» в столбцах домена относится к тем же // доменам, что и первая строка предыдущего блока: если она идёт сразу // за ней, её ячейки доменов накрываются объединением по высоте, // иначе (между ними строка-домен той же линии) значения повторяются // явно. Кажущийся угол падения зависит от азимута линии, поэтому // собственный у каждой строки и не объединяется. Объединённые // по высоте ячейки выравниваются по центру по вертикали. #block(breakable: false)[ #let anisotropy-cells(rows) = { let cells = () let i = 0 while i < rows.len() { let span = 1 while i + span < rows.len() and rows.at(i + span).at(0) == "" { span += 1 } let head = rows.at(i) // Блок следующей линии с «=» в столбцах домена делит их с первой строкой этого блока let share-next = ( i + span < rows.len() and rows.at(i + span).at(0) != "" and rows.at(i + span).at(1) == "=" ) // Объединение по высоте возможно, только когда строка «=» идёт сразу за первой let merge-next = share-next and span == 1 let line = anisotropy-format(head.at(0), 0) if span == 1 { cells.push(line) } else { cells.push(table.cell(rowspan: span, align: right + horizon, line)) } // Столбцы домена -- с 1-го по 4-й: азимут падения, № домена, № системы, угол падения for j in range(span) { let row = rows.at(i + j) let rowspan = if j == 0 and merge-next { 2 } else { 1 } for k in range(1, 5) { if rowspan > 1 { cells.push(table.cell(rowspan: rowspan, align: right + horizon, anisotropy-format(row.at(k), k))) } else { cells.push(anisotropy-format(row.at(k), k)) } } cells.push(anisotropy-format(row.at(5), 5)) } i += span // Блок линии с общими доменами («=»): домены берутся из первой строки // предыдущего блока, выводятся столбец профильной линии и собственный // кажущийся угол каждой строки. if share-next { let eq-span = 1 while i + eq-span < rows.len() and rows.at(i + eq-span).at(0) == "" { eq-span += 1 } let eq-line = anisotropy-format(rows.at(i).at(0), 0) if eq-span == 1 { cells.push(eq-line) } else { cells.push(table.cell(rowspan: eq-span, align: right + horizon, eq-line)) } if not merge-next { for k in range(1, 5) { cells.push(anisotropy-format(head.at(k), k)) } } cells.push(anisotropy-format(rows.at(i).at(5), 5)) for j in range(1, eq-span) { let row = rows.at(i + j) for k in range(1, 5) { cells.push(anisotropy-format(row.at(k), k)) } cells.push(anisotropy-format(row.at(5), 5)) } i += eq-span } } cells } // Шапка таблицы: горизонтальные заголовки переносятся только по словам // (перенос по слогам отключён), ширины столбцов подобраны под самый // длинный заголовок «Спроецированный угол падения системы, °». #figure( corp-table( columns: (1.3fr, 1fr, 1.05fr, 1fr,1.05fr, 1.35fr), align: right + top, table-align: "center", text-size: 10pt, body-inset: (x: 5pt, y: 4pt), header-hyphenate: false, [№/Азимут профильной линии, °], [Азимут падения системы трещин, °], [№ структурного домена], [№ системы трещин], [Истинный угол падения системы, °], [Спроецированный угол падения системы, °], ..anisotropy-cells(anisotropy-angles), ), caption: [Азимуты и углы падения систем трещин, принятые для учёта системной трещиноватости], ) ] Примечание: профильная линия №6 не пересекается с системами трещин с разницей азимутов падения менее 40$degree$, поэтому влияние направления трещин на устойчивость борта на данном разрезе не учитывается.