
ЛИРА-САПФИР RES API позволяет получить доступ к результатам, используя языки программирования, поддерживающие технологию ActiveX или COM, такие как Visual Basic Script, Java Script, C#, Java, Visual Basic, Visual Basic.NET, C++, Delphi и т.д.
Быстрый старт: простой пример использования ЛИРА-САПФИР RES API на языке C#
LoadCaseDisplacements: доступ к перемещениям узлов от загружений
LoadCaseForces: доступ к усилиям, возникающим в элементах от загружений
LoadCombinationDisplacements: доступ к перемещениям узлов от РСН
LoadCombinationForces: доступ к усилиям, возникающим в элементах от РСН
FragmLoads: доступ к нагрузкам на фрагмент
PunchLoads: доступ к нагрузкам на контуры продавливания
DesignCombinationForces: доступ к усилиям, возникающим в элементах от РСУ
PeriodsOfVibrations: получение частот динамических загружений
SelectedReinforcement: доступ к данным армирования элементов
Быстрый старт: простой пример использования ЛИРА-САПФИР RES API на языке C# наверх
Для разработки программы на C# в этом примере мы будем использовать Microsoft Visual Studio. Ее бесплатную версию, Microsoft Visual Studio Community Edition, можно загрузить с веб-сайта microsoft.com.
Создание нового проекта

Запустите Visual Studio, выберите пункт меню File > New > Project, выберите тип проекта Visual C# Console App. В качестве имени Name проекта укажите LiraSapphireResApiTest1, а в качестве расположения Location укажите, например, D:\Tests\ и нажмите OK.
Добавление ссылки на библиотеку типов ЛИРА-САПФИР RES API
Перейдите в окно Solution Explorer и щелкните правой кнопкой мыши на элементе Dependencies. В появившемся контекстном меню выберите пункт Add COM Reference... Далее выберите строку LIRA-SAPPHIRE Result Access Type Library и нажмите OK.

Если вы не видите строки LIRA-SAPPHIRE Result Access Type Library в списке, значит данная библиотека типов не зарегистрирована. Выполните переустановку ЛИРА-САПФИР или запустите regsvr32 LiraResAPI.dll от имени администратора.
Выполнение расчета тестовой задачи
Откройте в ЛИРА-САПФИР тестовую задачу 05_башня МК.lir и поставьте ее на расчет.
Добавление тела программы
Вернитесь в среду разработки Microsoft Visual Studio, откройте файл Program.cs и замените его содержимое на следующее:
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCaseDisplacementsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCaseDisplacement) as LiraLoadCaseDisplacementsRequest;
// объявление интерфейса Response (ответ)
LiraLoadCaseDisplacementsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_башня МК";
// заполнение массива Nodes номерами узлов, перемещения которых мы хотим получить
Request.Nodes.AddFromString("2-6");
Response = Result.LoadCaseDisplacements(Request);
// номер загружения, от которого мы хотим получить перемещения в узлах
int lc = 1;
for (int i = 0; i < Request.Nodes.Count; i++)
{
double X, Y, Z;
int node = Request.Nodes.Item[i];
// получение данных о перемещении узла node от загружения lc
X = Response.GetNodeX(node, lc);
Y = Response.GetNodeY(node, lc);
Z = Response.GetNodeZ(node, lc);
// вывод результатов на консоль
Console.WriteLine("Node: " + node);
Console.WriteLine("X: " + X);
Console.WriteLine("Y: " + Y);
Console.WriteLine("Z: " + Z);
Console.WriteLine();
}
Компиляция программы
Выберите пункт меню Build > Build Solution.
Запуск программы
Выберите пункт меню Debug > Start Debugging.
При выполнении этого примера в консоли выведутся перемещения узлов: 2, 3, 4, 5, 6 от загружения №1.
Microsoft Visual Studio Debug Console |
Node: 1 Error: -2147024809 Node: 2 X: 0 Y: 0 Z: 0 Node: 3 X: -4,048145562577549E-07 Y: -4,0481455624914383E-07 Z: -0,0008168965839923102 Node: 4 X: -1,525171001098383E-05 Y: -1,525171001098395E-05 Z: -0,00013445393257742173 Node: 5 X: -1,3227261924145788E-05 Y: -1,3227261924145852E-05 Z: -0,00026462911842193193 Node: 6 X: -1,3610353319645481E-05 Y: -1,361035331964509E-05 Z: -0,0003838470156483524 |
Вывод
В данном примере мы рассмотрели механизм получения данных результатов расчета. Этот процесс можно условно разбить на три шага.
1. Создание запроса.
Заполняем поля объекта Request (название документа, перечень узлов, ... ).
2. Обработка запроса.
Вызываем у объекта Result метод LoadCaseDisplacements, результат передаем в объект Response.
3. Получение данных.
У объекта Response вызываем методы (GetNodeX, GetNodeY, GetNodeZ).
Гибкий запрос: пример использования ЛИРА-САПФИР RES API, демонстрирующий как можно экономить вычислительные ресурсы наверх
В предыдущем примере из главы Быстрый старт при формировании запроса мы заполнили поля: название документа (DocumentName) и перечень узлов (Nodes), далее программа вывела на консоль координаты перемещений узлов от первого загружения. В объекте Response остались данные, которые нам не понадобились, а именно, перемещения узлов от загружений 2, 3 и 4, а также данные связанные с кручением в узлах (Ux, Uy, Uz), депланацией B и температурой T. Мы не эффективно использовали ресурсы нашего компьютера, а значит время затраченное на обработку запроса могло быть меньшим. Для больших задач разница в скорости обработки запросов может оказаться существенной.
Сделаем код из предыдущей главы более оптимизированным, для этого заполним поля LoadCases и Directions, перечислив лишь те загружения и направления, которые нас интересуют. Добавим в наш код следующие строки:
// заполнение массива LoadCases номерами загружений
Request.LoadCases.AddFromString("1");
// заполнение массива Directions номерами направлений (X, Y, Z), по которым мы хотим получить перемещения
Request.Directions.Count = 3;
Request.Directions.set_Item(0, (int)LiraDirectionEnum.kLiraDirection_X);
Request.Directions.set_Item(1, (int)LiraDirectionEnum.kLiraDirection_Y);
Request.Directions.set_Item(2, (int)LiraDirectionEnum.kLiraDirection_Z);
Вывод
В ЛИРА-САПФИР RES API заполнение необязательных полей объекта Request может ускорить процесс обработки запроса и уменьшить объем используемой оперативной памяти.
Обработка исключений: пример, демонстрирующий как избежать падения программы при попытке получить несуществующие данные наверх
В примере из главы Быстрый старт при формировании запроса мы заполнили поле Nodes диапазоном номеров узлов от 2 до 6. Давайте расширим этот диапазон и запросим узлы с номерами от 1 до 6. Заменим строку в файле Program.cs:
Request.Nodes.AddFromString("2-6");
на
Request.Nodes.AddFromString("1-6");
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).

У нас возникла ошибка при попытке получить данные о перемещении узла 1 от загружения 1 вдоль оси X. Почему так произошло? В расчетной схеме 05_башня МК отсутствует узел с номером 1, мы попытались получить данные которых не существует. Для избегания подобных проблем необходимо использовать операторы обработки исключений try-catch. Ниже приведен безопасный вариант кода из главы Быстрый старт:
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCaseDisplacementsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCaseDisplacement) as LiraLoadCaseDisplacementsRequest;
// объявление интерфейса Response (ответ)
LiraLoadCaseDisplacementsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_башня МК";
// заполнение массива Nodes номерами узлов, перемещения которых мы хотим получить
Request.Nodes.AddFromString("1-6");
Response = Result.LoadCaseDisplacements(Request);
// номер загружения, от которого мы хотим получить перемещения в узлах
int lc = 1;
for (int i = 0; i < Request.Nodes.Count; i++)
{
double X, Y, Z;
int node = Request.Nodes.Item[i];
// получение данных о перемещении узла node от загружения lc
try
{
X = Response.GetNodeX(node, lc);
Y = Response.GetNodeY(node, lc);
Z = Response.GetNodeZ(node, lc);
}
catch (Exception e)
{
Console.WriteLine("Node: " + node);
Console.WriteLine("Error: " + e.HResult);
Console.WriteLine();
continue;
}
// вывод результатов на консоль
Console.WriteLine("Node: " + node);
Console.WriteLine("X: " + X);
Console.WriteLine("Y: " + Y);
Console.WriteLine("Z: " + Z);
Console.WriteLine();
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Node: 1 Error: -2147024809 Node: 2 X: 0 Y: 0 Z: 0 Node: 3 X: -4,048145562577549E-07 Y: -4,0481455624914383E-07 Z: -0,0008168965839923102 Node: 4 X: -1,525171001098383E-05 Y: -1,525171001098395E-05 Z: -0,00013445393257742173 Node: 5 X: -1,3227261924145788E-05 Y: -1,3227261924145852E-05 Z: -0,00026462911842193193 Node: 6 X: -1,3610353319645481E-05 Y: -1,361035331964509E-05 Z: -0,0003838470156483524 |
Программа отработала корректно, вместо данных о перемещении узла №1 мы видим код ошибки.
Вывод
В тех случаях, когда достоверно неизвестно наличие запрашиваемых данных в результатах расчета, необходимо использовать операторы обработки исключений try-catch.
LoadCaseDisplacements: доступ к перемещениям узлов от загружений наверх
Как получить перемещение узлов от загружений, было рассмотрено в главе Быстрый старт. В этой же главе будет рассмотрен случай деформированной схемы, когда у загружения присутствуют формы перемещений (составляющие). В ЛИРА-САПФИР RES API есть возможность узнать детальную информацию о загружениях. Для этого следует использовать интерфейс LiraLoadCaseInfos (все загружения) и LiraLoadCaseInfo (определенное загружение). Приведенный ниже пример выведет на консоль детальную информацию о загружениях задачи 05_башня МК.lir, а также перемещения узла №37 от загружения №4 для всех составляющих.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCaseDisplacementsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCaseDisplacement) as LiraLoadCaseDisplacementsRequest;
// объявление интерфейса Response (ответ)
LiraLoadCaseDisplacementsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_башня МК";
// заполнение массива Nodes номерами узлов
Request.Nodes.AddFromString("2-37");
// запрос составляющих
Request.Deformation = LiraDeformationEnum.kLiraDeformation_DeformedShape;
// обработка запроса
try
{
Response = Result.LoadCaseDisplacements(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о загружениях
LiraLoadCaseInfos LoadCases = Response.LoadCases;
for (int i = 0; i < LoadCases.Count; i++)
{
LiraLoadCaseInfo LoadCase = LoadCases.Item[i];
// вывод номера загружения
Console.WriteLine("Load case number: " + LoadCase.Number);
// вывод количества форм
Console.WriteLine("Number of dynamic mode shapes: " + LoadCase.DynamicModeShapeCount);
// вывод количества составляющих
Console.WriteLine("Number of deformed shapes: " + LoadCase.DeformedShapeCount);
// вывод номеров составляющих
var DynamicModeShapesArray = new LiraLongsArray();
DynamicModeShapesArray = LoadCase.DeformedShapes;
Console.Write("Deformed shapes: ");
for (int j = 0; j < DynamicModeShapesArray.Count; j++)
Console.Write(DynamicModeShapesArray.Item[j] + " ");
Console.WriteLine("\n------------------------------------");
}
// объявление массива ShapesArray
var ShapesArray = new LiraLongsArray();
// заполнение массива ShapesArray номерами составляющих
ShapesArray = LoadCases.Item[3].DeformedShapes;
// номер загружения
int lc = LoadCases.Item[3].Number;
// номер узла
int node = 37;
// вывод перемещений узла №37 от загружения №4 для всех составляющих
for (int i = 0; i < ShapesArray.Count; i++)
{
// номер составляющей
int shape = ShapesArray.Item[i];
Console.WriteLine("Shape: " + shape);
Console.WriteLine("X: " + Response.GetNodeX(node, lc, shape));
Console.WriteLine("Y: " + Response.GetNodeY(node, lc, shape));
Console.WriteLine("Z: " + Response.GetNodeZ(node, lc, shape));
Console.WriteLine();
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load case number: 1 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 2 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 3 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 4 Number of dynamic mode shapes: 9 Number of deformed shapes: 6 Deformed shapes: 1 2 3 4 5 6 ------------------------------------ Shape: 1 X: -0,005156627881796163 Y: 0,005916541142563568 Z: -0,0008630716214106978 Shape: 2 X: -0,006778773310106286 Y: -0,005904943962571179 Z: -6,8108622542672E-05 Shape: 3 X: 5,742996898173208E-10 Y: 5,74297746470658E-10 Z: 8,956154759334056E-16 Shape: 4 X: 1,6165108496175207E-06 Y: -2,0850613741223447E-05 Z: 1,0126599927418515E-05 Shape: 5 X: 0,000326528362004841 Y: 1,6299669054262422E-05 Z: 0,00013982931458619705 Shape: 6 X: -0,010788352690828765 Y: 9,072983136240118E-06 Z: -0,00073020730664088 |
LoadCaseForces: доступ к усилиям, возникающим в элементах от загружений наверх
Для получения доступа к усилиям, возникающим в элементах от загружений, понадобятся интерфейсы LiraLoadCaseInfos (информация о всех загружениях), LiraLoadCaseInfo (информация об определенном загружении), LiraLoadCaseForcesRequest (формирование запроса) и LiraLoadCaseForcesResponse (получение данных о конечных элементах). Приведенный ниже пример выведет на консоль детальную информацию о загружениях задачи 05_башня МК.lir, а также данные об элементе №37 (вид конечного элемента, количество сечений, перечень и значения усилий от загружения №1).
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCaseForcesRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCaseForces) as LiraLoadCaseForcesRequest;
// объявление интерфейса Response (ответ)
LiraLoadCaseForcesResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_башня МК";
// заполнение массива Elements номерами конечных элементов
Request.Elements.AddFromString("1-144");
// обработка запроса
try
{
Response = Result.LoadCaseForces(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о всех загружениях
LiraLoadCaseInfos LoadCases = Response.LoadCases;
for (int i = 0; i < LoadCases.Count; i++)
{
LiraLoadCaseInfo LoadCase = LoadCases.Item[i];
// вывод номера загружения
Console.WriteLine("Load case number: " + LoadCase.Number);
// вывод количества форм
Console.WriteLine("Number of dynamic mode shapes: " + LoadCase.DynamicModeShapeCount);
// вывод количества составляющих
Console.WriteLine("Number of deformed shapes: " + LoadCase.DeformedShapeCount);
// вывод номеров составляющих
var DynamicModeShapesArray = new LiraLongsArray();
DynamicModeShapesArray = LoadCase.DeformedShapes;
Console.Write("Deformed shapes: ");
for (int j = 0; j < DynamicModeShapesArray.Count; j++)
Console.Write(DynamicModeShapesArray.Item[j] + " ");
Console.WriteLine("\n------------------------------------");
}
// номер загружения
int LC = LoadCases.Item[0].Number;
// номер элемента
int Element = 37;
// вывод на консоль номера конечного элемента
Console.WriteLine("Element number: " + Element);
// вывод на консоль номера загружения
Console.WriteLine("Load cases number: " + LC);
// перечень наименований семейств конечных элементов (LiraElementFamilyEnum)
string[] ElementFamilyes = { "Undefined", "Bar", "Plate", "Solid", "SpecElement", "Spec_58_5", "Spec_310", "Spec_264" };
// получение семейства (вида) конечного элемента
int ElementFamily = (int)Response.GetFamily(Element);
// вывод на консоль названия семейства, к которому принадлежит конечный элемент
Console.WriteLine("Element family: " + ElementFamilyes[ElementFamily]);
// инициализация перечня внутренних усилий (LiraForceEnum)
string[] StringElementForces = { "Undefined", "BarN", "BarMx", "BarMy", "BarQz", "BarMz", "BarQy", "BarRy", "BarRz", "BarBw", "BarTw", "PlateNx", "PlateNy", "PlateNz", "PlateTxy", "PlateTxz", "PlateMx", "PlateMy", "PlateMxy", "PlateQx", "PlateQy", "PlateRz", "SolidNx", "SolidNy", "SolidNz", "SolidTxy", "SolidTxz", "SolidTyz", "SpecElementRx", "SpecElementRy", "SpecElementRz", "SpecElementRux", "SpecElementRuy", "SpecElementRuz", "Spec_58_59_Qz", "Spec_58_59_Ny", "Spec_58_59_Qx", "Spec_310_N", "Spec_310_My", "Spec_310_Qz", "Spec_310_Mx", "Spec_310_Mz", "Spec_310_Qy", "Spec_264_N", "Spec_264_Qz", "Spec_264_Qy" };
// получение усилий в конечном элементе
LiraLongsArray ElemenForces = Response.GetForces(Element);
// вывод на консоль перечня усилий в конечном элементе
Console.Write("Forces: ");
for (int i = 0; i < ElemenForces.Count; i++)
Console.Write(StringElementForces[ElemenForces.Item[i]] + " ");
Console.WriteLine("\n------------------------------------");
// количество сечений в элементе
int SectionCount = Response.GetSectionCount(Element);
// вывод значений усилий в элементе Element от загружения LC для всех сечений
for (int i = 1; i <= SectionCount; i++)
{
Console.WriteLine("Section: " + i);
Console.WriteLine("BarN: " + Response.GetBarN(Element, i, LC));
Console.WriteLine("BarMx: " + Response.GetBarMx(Element, i, LC));
Console.WriteLine("BarMy: " + Response.GetBarMy(Element, i, LC));
Console.WriteLine("BarQz: " + Response.GetBarQz(Element, i, LC));
Console.WriteLine("BarMz: " + Response.GetBarMz(Element, i, LC));
Console.WriteLine("BarQy: " + Response.GetBarQy(Element, i, LC));
Console.WriteLine("");
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load case number: 1 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 2 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 3 Number of dynamic mode shapes: 0 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 4 Number of dynamic mode shapes: 9 Number of deformed shapes: 6 Deformed shapes: 1 2 3 4 5 6 ------------------------------------ Element number: 37 Load cases number: 1 Element family: Bar Forces: BarN BarMx BarMy BarQz BarMz BarQy ------------------------------------ Section: 1 BarN: 0,057537626 BarMx: 0 BarMy: 0 BarQz: 0,0014608275 BarMz: 0 BarQy: 0 Section: 2 BarN: 0,057537626 BarMx: -0 BarMy: -0 BarQz: -0,0014608275 BarMz: -0 BarQy: -0 |
LoadCombinationDisplacements: доступ к перемещениям узлов от РСН наверх
Для получения данных о перемещениях узлов от РСН понадобятся интерфейсы LiraLoadCombinationInfos (информация о всех РСН), LiraLoadCombinationInfo (информация об определенном РСН), LiraLoadCombinationDisplacementsRequest (формирование запроса) и LiraLoadCombinationDisplacementsResponse (получение перемещений). Откройте в ЛИРА-САПФИР тестовую задачу 05_tower_MK_RSN.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCombinationDisplacementsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCombinationDisplacements) as LiraLoadCombinationDisplacementsRequest;
// объявление интерфейса Response (ответ)
LiraLoadCombinationDisplacementsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_tower_MK_RSN";
// заполнение массива Nodes номерами узлов
Request.Nodes.AddFromString("2-37");
// инициализация номера таблицы РСН
Request.LoadCombinationTable = 1;
// обработка запроса
try
{
Response = Result.LoadCombinationDisplacements(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о всех РСН
LiraLoadCombinationInfos LoadCombinations = Response.LoadCombinations;
// предельные состояния эксплуатационной надежности РСН (LiraLoadCombinationUseEnum)
string[] LoadCombinationUsed = { "All", "Cracks", "Deflections" };
for (int i = 0; i < LoadCombinations.Count; i++)
{
LiraLoadCombinationInfo LoadCombination = LoadCombinations.Item[i];
// вывод номера РСН
Console.WriteLine("Load combination number: " + LoadCombination.Number);
// вывод названия РСН
Console.WriteLine("Load combination name: " + LoadCombination.Name);
// вывод номера формулы
Console.WriteLine("Formula number: " + LoadCombination.FormulaNumber);
// вывод предельного состояния эксплуатационной надежности РСН
Console.WriteLine("Load combination used: " + LoadCombinationUsed[(int)LoadCombination.LoadCombinationUsed]);
// является ли РСН специальным
Console.Write("Is special: ");
if (LoadCombination.IsSpecial != 0)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
// является ли РСН сейсмическим
Console.Write("Is seismic: ");
if (LoadCombination.IsSeismic != 0)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
Console.WriteLine("\n------------------------------------");
}
// номер узла
int node = 37;
// вывод перемещений для узла node от всех РСН
Console.WriteLine("Node: "+ node);
for (int i = 0; i < LoadCombinations.Count; i++)
{
// номер РСН
int lc = LoadCombinations.Item[i].Number;
Console.WriteLine("\nLoad combination: " + lc);
Console.WriteLine();
Console.WriteLine("X: " + Response.GetNodeX(node, lc));
Console.WriteLine("Y: " + Response.GetNodeY(node, lc));
Console.WriteLine("Z: " + Response.GetNodeZ(node, lc));
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load combination number: 1 Load combination name: РСН1 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Load combination number: 2 Load combination name: РСН2 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Load combination number: 3 Load combination name: РСН3 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Node: 37 Load combination: 1 X: -0,038323868289137406 Y: 0,007563910188755442 Z: -0,012817616037821809 Load combination: 2 X: -0,02208694137776124 Y: 0,0033948277335884435 Z: -0,021988936822539492 Load combination: 3 X: -0,03333746626949764 Y: 0,00757898321841084 Z: -0,02106863251076873 |
LoadCombinationForces: доступ к усилиям, возникающим в элементах от РСН наверх
Для получения данных об усилиях от РСН понадобятся интерфейсы LiraLoadCombinationInfos (информация о всех РСН), LiraLoadCombinationInfo (информация об определенном РСН), LiraLoadCombinationForcesRequest (формирование запроса) и LiraLoadCombinationForcesResponse (получение усилий). Откройте в ЛИРА-САПФИР тестовую задачу 05_tower_MK_RSN.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraLoadCombinationForcesRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_LoadCombinationForces) as LiraLoadCombinationForcesRequest;
// объявление интерфейса Response (ответ)
LiraLoadCombinationForcesResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_tower_MK_RSN";
// заполнение массива Elements номерами конечных элементов
Request.Elements.AddFromString("1-144");
// инициализация номера таблицы РСН
Request.LoadCombinationTable = 1;
// инициализация массива, содержащего перечень предельных состояний внутренних усилий (РСН расчетные и РСН нормативные)
// для получения всех предельных состояний необходимо оставить поле LoadCombinationLimitState пустым или перечислить все виды предельных состояний
Request.LoadCombinationLimitState.Count = 2;
// РСН расчетные
Request.LoadCombinationLimitState.Item[0] = (int)LiraLimitStateForcesEnum.kLiraLimitStateForces_UltimateFull;
// РСН нормативные
Request.LoadCombinationLimitState.Item[1] = (int)LiraLimitStateForcesEnum.kLiraLimitStateForces_ServiceabilityFull;
// обработка запроса
try
{
Response = Result.LoadCombinationForces(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о всех РСН
LiraLoadCombinationInfos LoadCombinations = Response.LoadCombinations;
// предельные состояния эксплуатационной надежности РСН (LiraLoadCombinationUseEnum)
string[] LoadCombinationUsed = { "All", "Cracks", "Deflections" };
for (int i = 0; i < LoadCombinations.Count; i++)
{
LiraLoadCombinationInfo LoadCombination = LoadCombinations.Item[i];
// вывод номера РСН
Console.WriteLine("Load combination number: " + LoadCombination.Number);
// вывод номера формулы
Console.WriteLine("Formula number: " + LoadCombination.FormulaNumber);
// вывод предельного состояния эксплуатационной надежности РСН
Console.WriteLine("Load combination used: " + LoadCombinationUsed[(int)LoadCombination.LoadCombinationUsed]);
// является ли РСН специальным
Console.Write("Is special: ");
if (LoadCombination.IsSpecial != 0)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
// является ли РСН сейсмическим
Console.Write("Is seismic: ");
if (LoadCombination.IsSeismic != 0)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
Console.WriteLine("\n------------------------------------");
}
// номер элемента
int Element = 37;
// номер РСН
int LC = LoadCombinations.Item[0].Number;
// вывод на консоль номера конечного элемента
Console.WriteLine("Element number: " + Element);
// вывод на консоль номера РСН
Console.WriteLine("Load combination number: " + LC);
// перечень наименований семейств конечных элементов (LiraElementFamilyEnum)
string[] ElementFamilyes = { "Undefined", "Bar", "Plate", "Solid", "SpecElement", "Spec_58_5", "Spec_310", "Spec_264" };
// получение семейства (вида) конечного элемента
int ElementFamily = (int)Response.GetFamily(Element);
// вывод на консоль названия семейства, к которому принадлежит конечный элемент
Console.WriteLine("Element family: " + ElementFamilyes[ElementFamily]);
// инициализация перечня внутренних усилий (LiraForceEnum)
string[] StringElementForces = { "Undefined", "BarN", "BarMx", "BarMy", "BarQz", "BarMz", "BarQy", "BarRy", "BarRz", "BarBw", "BarTw", "PlateNx", "PlateNy", "PlateNz", "PlateTxy", "PlateTxz", "PlateMx", "PlateMy", "PlateMxy", "PlateQx", "PlateQy", "PlateRz", "SolidNx", "SolidNy", "SolidNz", "SolidTxy", "SolidTxz", "SolidTyz", "SpecElementRx", "SpecElementRy", "SpecElementRz", "SpecElementRux", "SpecElementRuy", "SpecElementRuz", "Spec_58_59_Qz", "Spec_58_59_Ny", "Spec_58_59_Qx", "Spec_310_N", "Spec_310_My", "Spec_310_Qz", "Spec_310_Mx", "Spec_310_Mz", "Spec_310_Qy", "Spec_264_N", "Spec_264_Qz", "Spec_264_Qy" };
// получение усилий в конечном элементе
LiraLongsArray ElemenForces = Response.GetForces(Element);
// вывод на консоль перечня усилий в конечном элементе
Console.Write("Forces: ");
for (int i = 0; i < ElemenForces.Count; i++)
Console.Write(StringElementForces[ElemenForces.Item[i]] + " ");
Console.WriteLine("\n------------------------------------");
// количество сечений в элементе
int SectionCount = Response.GetSectionCount(Element);
// вывод значений усилий в элементе Element от РСН LC для всех сечений
// РСН расчетные
int LS = (int)LiraLimitStateForcesEnum.kLiraLimitStateForces_UltimateFull;
Console.WriteLine("Ultimate full\n");
for (int i = 1; i <= SectionCount; i++)
{
Console.WriteLine("Section: " + i);
Console.WriteLine("BarN: " + Response.GetBarN(Element, i, LC, LS));
Console.WriteLine("BarMx: " + Response.GetBarMx(Element, i, LC, LS));
Console.WriteLine("BarMy: " + Response.GetBarMy(Element, i, LC, LS));
Console.WriteLine("BarQz: " + Response.GetBarQz(Element, i, LC, LS));
Console.WriteLine("BarMz: " + Response.GetBarMz(Element, i, LC, LS));
Console.WriteLine("BarQy: " + Response.GetBarQy(Element, i, LC, LS));
Console.WriteLine("");
}
Console.WriteLine("\n------------------------------------");
// РСН нормативные
LS = (int)LiraLimitStateForcesEnum.kLiraLimitStateForces_ServiceabilityFull;
Console.WriteLine("Serviceability full\n");
for (int i = 1; i <= SectionCount; i++)
{
Console.WriteLine("Section: " + i);
Console.WriteLine("BarN: " + Response.GetBarN(Element, i, LC, LS));
Console.WriteLine("BarMx: " + Response.GetBarMx(Element, i, LC, LS));
Console.WriteLine("BarMy: " + Response.GetBarMy(Element, i, LC, LS));
Console.WriteLine("BarQz: " + Response.GetBarQz(Element, i, LC, LS));
Console.WriteLine("BarMz: " + Response.GetBarMz(Element, i, LC, LS));
Console.WriteLine("BarQy: " + Response.GetBarQy(Element, i, LC, LS));
Console.WriteLine("");
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load combination number: 1 Load combination name: РСН1 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Load combination number: 2 Load combination name: РСН2 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Load combination number: 3 Load combination name: РСН3 Formula number: 0 Load combination used: All Is special: No Is seismic: No ------------------------------------ Element number: 37 Load combination number: 1 Element family: Bar Forces: BarN BarMx BarMy BarQz BarMz BarQy ------------------------------------ Ultimate full Section: 1 BarN: -0,14982627 BarMx: 0 BarMy: 0 BarQz: 0,09389608 BarMz: 0 BarQy: 0 Section: 2 BarN: -0,14982627 BarMx: 0 BarMy: 0 BarQz: -0,09389608 BarMz: 0 BarQy: 0 ------------------------------------ Serviceability full Section: 1 BarN: -0,106573395 BarMx: 0 BarMy: 0 BarQz: 0,07225451 BarMz: 0 BarQy: 0 Section: 2 BarN: -0,106573395 BarMx: 0 BarMy: 0 BarQz: -0,07225451 BarMz: 0 BarQy: 0 |
FragmLoads: доступ к нагрузкам на фрагмент наверх
Для получения доступа к нагрузкам на фрагмент понадобятся интерфейсы LiraLoadCaseInfos (информация о всех загружениях), LiraLoadCaseInfo (информация об определенном загружении), LiraFragmLoadsRequest (формирование запроса) и LiraFragmLoadsResponse (получение нагрузок). Откройте в ЛИРА-САПФИР тестовую задачу 05_tower_MK_RSN.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraFragmLoadsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_FragmLoadForces) as LiraFragmLoadsRequest;
// объявление интерфейса Response (ответ)
LiraFragmLoadsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_tower_MK";
// заполнение массива Nodes номерами узлов
Request.Nodes.AddFromString("1-37");
// обработка запроса
try
{
Response = Result.FragmLoads(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о всех загружениях
LiraLoadCaseInfos LoadCases = Response.LoadCases;
for (int i = 0; i < LoadCases.Count; i++)
{
LiraLoadCaseInfo LoadCase = LoadCases.Item[i];
// вывод номера загружения
Console.WriteLine("Load case number: " + LoadCase.Number);
// вывод количества составляющих
Console.WriteLine("Number of deformed shapes: " + LoadCase.DeformedShapeCount);
// вывод номеров составляющих
var DynamicModeShapesArray = new LiraLongsArray();
DynamicModeShapesArray = LoadCase.DeformedShapes;
Console.Write("Deformed shapes: ");
for (int j = 0; j < DynamicModeShapesArray.Count; j++)
Console.Write(DynamicModeShapesArray.Item[j] + " ");
Console.WriteLine("\n------------------------------------");
}
// объявление массива ShapesArray
var ShapesArray = new LiraLongsArray();
// заполнение массива ShapesArray номерами составляющих
ShapesArray = LoadCases.Item[3].DeformedShapes;
// номер загружения
int LC = LoadCases.Item[3].Number;
// номер узла
int Node = 11;
// вывод на консоль номера узла
Console.WriteLine("Node: " + Node);
// вывод на консоль номера загружения
Console.WriteLine("Load cases number: " + LC);
// инициализация перечня внутренних усилий (LiraFragmLoadForceEnum)
string[] StringFragmForces = { "Undefined", "RX", "RY", "RZ", "RUX", "RUY", "RUZ", "RBW" };
// получение усилий на фрагмент
LiraLongsArray Forces = Response.Forces;
// вывод на консоль перечня усилий на фрагмент
Console.Write("Forces: ");
for (int i = 0; i < Forces.Count; i++)
Console.Write(StringFragmForces[Forces.Item[i]] + " ");
Console.WriteLine("\n------------------------------------");
// вывод значений усилий в узле Node от загружения LC всех составляющих
for (int i = 0; i < LoadCases.Item[3].DeformedShapeCount; i++)
{
// номер составляющей
int shape = ShapesArray.Item[i];
Console.WriteLine("Deformed shape: " + shape);
Console.WriteLine("RX: " + Response.GetNodeRX(Node, LC, shape));
Console.WriteLine("RY: " + Response.GetNodeRY(Node, LC, shape));
Console.WriteLine("RZ: " + Response.GetNodeRZ(Node, LC, shape));
Console.WriteLine("");
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load case number: 1 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 2 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 3 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 4 Number of deformed shapes: 6 Deformed shapes: 1 2 3 4 5 6 ------------------------------------ Load case number: 5 Number of deformed shapes: 2 Deformed shapes: 1 2 ------------------------------------ Node: 11 Load cases number: 4 Forces: RX RY RZ ------------------------------------ Deformed shape: 1 RX: 0,4821899386783562 RY: -0,49112310601740894 RZ: -2,5449783188392687 Deformed shape: 2 RX: 0,11295639237220015 RY: 0,036148328516009354 RZ: -0,20083472247197387 Deformed shape: 3 RX: 2,556301516598463E-07 RY: 2,5562842224851154E-07 RZ: -1,8020882127759272E-12 Deformed shape: 4 RX: 0,00382230986043694 RY: -0,014893634946231542 RZ: -0,019316413418073657 Deformed shape: 5 RX: 0,22788278815258997 RY: -0,03054679027275529 RZ: -0,2667203689341983 Deformed shape: 6 RX: 0,8778898377032781 RY: -0,4595663935036354 RZ: -2,7702968288396903 |
PunchLoads: доступ к нагрузкам на контуры продавливания наверх
Для получения доступа к нагрузкам на контуры продавливания понадобятся интерфейсы LiraLoadCaseInfos (информация о всех загружениях), LiraLoadCaseInfo (информация об определенном загружении), LiraPunchLoadsRequest (формирование запроса) и LiraPunchLoadsResponse (получение нагрузок). Откройте в ЛИРА-САПФИР тестовую задачу Punching_Emergency_Dynamic_Load_Caces.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraPunchLoadsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_PunchLoadForces) as LiraPunchLoadsRequest;
// объявление интерфейса Response (ответ)
LiraPunchLoadsResponse Response;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "Punching_Emergency_Dynamic_Load_Caces";
// заполнение массива Nodes номерами узлов
Request.Nodes.AddFromString("1-999");
// обработка запроса
try
{
Response = Result.PunchLoads(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// получение данных о всех загружениях
LiraLoadCaseInfos LoadCases = Response.LoadCases;
for (int i = 0; i < LoadCases.Count; i++)
{
LiraLoadCaseInfo LoadCase = LoadCases.Item[i];
// вывод номера загружения
Console.WriteLine("Load case number: " + LoadCase.Number);
// вывод количества составляющих
Console.WriteLine("Number of deformed shapes: " + LoadCase.DeformedShapeCount);
// вывод номеров составляющих
var DynamicModeShapesArray = new LiraLongsArray();
DynamicModeShapesArray = LoadCase.DeformedShapes;
Console.Write("Deformed shapes: ");
for (int j = 0; j < DynamicModeShapesArray.Count; j++)
Console.Write(DynamicModeShapesArray.Item[j] + " ");
Console.WriteLine("\n------------------------------------");
}
// объявление массива ShapesArray
var ShapesArray = new LiraLongsArray();
// заполнение массива ShapesArray номерами составляющих
ShapesArray = LoadCases.Item[3].DeformedShapes;
// номер загружения
int LC = LoadCases.Item[3].Number;
// номер узла
int Node = 145;
// вывод на консоль номера узла
Console.WriteLine("Node: " + Node);
// вывод на консоль номера загружения
Console.WriteLine("Load cases number: " + LC);
// инициализация перечня внутренних усилий (LiraPunchLoadForceEnum)
string[] StringElementForces = { "Undefined", "N", "MX", "MY", "QX", "QY", "MZ" };
// получение усилий на элемент
LiraLongsArray Forces = Response.Forces;
// вывод на консоль перечня усилий на элемент
Console.Write("Forces: ");
for (int i = 0; i < Forces.Count; i++)
Console.Write(StringElementForces[Forces.Item[i]] + " ");
Console.WriteLine("\n------------------------------------");
// вывод значений усилий в узле Node от загружения LC для всех составляющих
for (int i = 0; i < LoadCases.Item[3].DeformedShapeCount; i++)
{
// номер составляющей
int shape = ShapesArray.Item[i];
Console.WriteLine("Deformed shape: " + shape);
Console.WriteLine("N: " + Response.GetNodeN(Node, LC, shape));
Console.WriteLine("MX: " + Response.GetNodeMX(Node, LC, shape));
Console.WriteLine("MY: " + Response.GetNodeMY(Node, LC, shape));
Console.WriteLine("QX: " + Response.GetNodeQX(Node, LC, shape));
Console.WriteLine("QY: " + Response.GetNodeQY(Node, LC, shape));
Console.WriteLine("MZ: " + Response.GetNodeMZ(Node, LC, shape));
Console.WriteLine("");
}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Load case number: 1 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 2 Number of deformed shapes: 1 Deformed shapes: 1 ------------------------------------ Load case number: 3 Number of deformed shapes: 5 Deformed shapes: 1 2 3 4 5 ------------------------------------ Load case number: 4 Number of deformed shapes: 5 Deformed shapes: 1 3 4 5 6 ------------------------------------ Node: 145 Load cases number: 4 Forces: N MX MY QX QY MZ ------------------------------------ Deformed shape: 1 N: 0,0008730748 MX: -0,37297738 MY: -0,116737366 QX: 0,0029353618 QY: 0,0008386748 MZ: -0 Deformed shape: 3 N: 1,1195903 MX: -0,11750943 MY: 0,36842918 QX: -0,111807294 QY: -0,03194494 MZ: -0 Deformed shape: 4 N: 0 MX: -0 MY: -0 QX: 0 QY: 0 MZ: -0 Deformed shape: 5 N: 0,6009387 MX: 0,05798592 MY: -0,011416376 QX: 0,01564201 QY: 0,0044691456 MZ: -0 Deformed shape: 6 N: 0 MX: -0 MY: -0 QX: 0 QY: 0 MZ: -0 |
DesignCombinationForces: доступ к усилиям, возникающим в элементах от РСУ наверх
Для получения доступа к усилиям, возникающим в элементах от РСУ, понадобятся интерфейсы LiraDesignCombinationForcesRequest (формирование запроса) и LiraDesignCombinationForcesResponse (получение нагрузок). Откройте в ЛИРА-САПФИР тестовую задачу 05_tower_MK_RSU.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
var Result = new LiraResultsAccess();
// объявление интерфейса Response (ответ)
LiraDesignCombinationForcesResponse Response;
// объявление и инициализация интерфейса Request (запрос)
LiraDesignCombinationForcesRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_DesignCombinationForces) as LiraDesignCombinationForcesRequest;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "05_tower_MK_RSU";
// заполнение массива Elements номерами конечных элементов
Request.Elements.AddFromString("1-99");
// номер таблицы
Request.DesignCombinationTable = 1;
// обработка запроса
try
{
Response = Result.DesignCombinationForces(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// флаги наличия в сочетаниях кранового и/или сейсмического загружений (LiraCraneEarthquakeFlagsEnum)
string[] Flags = { "---", "Cr.", "EQ.", "Both" };
// внутренние группы расчетного сочетания сил (LiraInternalGroupsEnum)
string[] InternalGroups = { "Undefined", "A1", "B1", "C1", "D1", "A2", "B2", "C2", "D2", "E1" };
int Element = 1;
int DC = 1;
// вывод на консоль номера РСУ
Console.WriteLine("Design combination number: " + DC);
// перечень семейств конечных элементов (LiraElementFamilyEnum)
string[] ElementFamilyes = { "Undefined", "Bar", "Plate", "Solid", "SpecElement", "Spec_58_5", "Spec_310", "Spec_264" };
// вывод на консоль номера элемента
Console.WriteLine("Element: " + Element);
// получение семейства конечного элемента
int ElementFamily = (int)Response.GetFamily(Element);
// вывод на консоль названия семейства, к которому принадлежит конечный элемент
Console.WriteLine("Element family: " + ElementFamilyes[ElementFamily]);
// инициализация перечня внутренних усилий (LiraForceEnum)
string[] StringElementForces = { "Undefined", "BarN", "BarMx", "BarMy", "BarQz", "BarMz", "BarQy", "BarRy", "BarRz", "BarBw", "BarTw", "PlateNx", "PlateNy", "PlateNz", "PlateTxy", "PlateTxz", "PlateMx", "PlateMy", "PlateMxy", "PlateQx", "PlateQy", "PlateRz", "SolidNx", "SolidNy", "SolidNz", "SolidTxy", "SolidTxz", "SolidTyz", "SpecElementRx", "SpecElementRy", "SpecElementRz", "SpecElementRux", "SpecElementRuy", "SpecElementRuz", "Spec_58_59_Qz", "Spec_58_59_Ny", "Spec_58_59_Qx", "Spec_310_N", "Spec_310_My", "Spec_310_Qz", "Spec_310_Mx", "Spec_310_Mz", "Spec_310_Qy", "Spec_264_N", "Spec_264_Qz", "Spec_264_Qy" };
// получение усилий в конечном элементе
LiraLongsArray ElemenForces = Response.GetForces(Element);
// вывод на консоль перечня усилий в конечном элементе
Console.Write("Forces: ");
for (int i = 0; i < ElemenForces.Count; i++)
Console.Write(StringElementForces[ElemenForces.Item[i]] + " ");
Console.WriteLine();
// вывод данных РСУ расчетных для элемента Element
int LS = (int)LiraLimitStateForcesEnum.kLiraLimitStateForces_UltimateFull;
Console.WriteLine("+------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+");
Console.WriteLine("| Sec. | Crit. | Col. | Flag | Group | N | Mx | My | Qz | Mz | Qy | Load Cases |");
Console.WriteLine("+------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+");
for (int CS = 1; CS <= Response.GetSectionCount(Element); CS++)
{
// количество расчетных комбинаций сил в расчетном сечении CS элемента Element
int DCLCount = Response.GetDCLCount(Element, CS, LS);
for (int DCF = 1; DCF <= Response.GetSectionCount(Element); DCF++)
{
// номер критерия
int Crit = Response.GetCriterionNumber(Element, CS, LS, DCF);
// номер столбца коэффициентов сочетаний
int Col = Response.GetColumnNumber(Element, CS, LS, DCF);
// флаг наличия в сочетаниях кранового и/или сейсмического загружений
int Flag = (int)Response.GetCraneEarthquakeFlag(Element, CS, LS, DCF);
// индекс внутренней группы
int Group = (int)Response.GetInternalGroup(Element, CS, LS, DCF);
// усилия (получение и округление)
double N = Math.Round(Response.GetBarN(Element, CS, LS, DCF), 3);
double Mx = Math.Round(Response.GetBarMx(Element, CS, LS, DCF), 3);
double My = Math.Round(Response.GetBarMy(Element, CS, LS, DCF), 3);
double Qz = Math.Round(Response.GetBarQz(Element, CS, LS, DCF), 3);
double Mz = Math.Round(Response.GetBarMz(Element, CS, LS, DCF), 3);
double Qy = Math.Round(Response.GetBarQy(Element, CS, LS, DCF), 3);
string LoadCasesStr = "";
// массив загружений
ILiraLongsArray LoadCasesArr = Response.GetLoadCases(Element, CS, LS, DCF);
for (int j = 0; j < LoadCasesArr.Count; j++)
LoadCasesStr = string.Concat(LoadCasesStr, LoadCasesArr.Item[j].ToString() + " ");
Console.Write("| {0,-4} | {1,-5} | {2,-4} | {3,-4} | {4,-5} ", CS, Crit, Col, Flags[Flag], InternalGroups[Group]);
Console.WriteLine("| {0,-7} | {1,-7} | {2,-7} | {3,-7} | {4,-7} | {5,-7} | {6,-10} |", N, Mx, My, Qz, Mz, Qy, LoadCasesStr);
}
Console.WriteLine("+------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+");}
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
Design combination number: 1 Element: 1 Element family: Bar Forces: BarN BarMx BarMy BarQz BarMz BarQy +------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+ | Sec. | Crit. | Col. | Flag | Group | N | Mx | My | Qz | Mz | Qy | Load Cases | +------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+ | 1 | 2 | 1 | --- | A1 | -0,648 | -0 | 0,006 | -0,007 | 0 | 0 | 1 | | 1 | 1 | 1 | --- | B1 | 4,707 | 0 | 0,0062 | -0,0069 | -0,0001 | -0,0001 | 1 -4 | | 1 | 2 | 2 | Cr. | B1 | -7,763 | -0 | 0,0059 | -0,0071 | 0,0002 | 0,0002 | 1 3 4 | | 1 | 1 | 3 | EQ. | C1 | -24,116 | 0 | 0,7799 | -0,9334 | -0,0001 | -0,0001 | 1 2 -4 | | 1 | 2 | 3 | EQ. | C1 | 22,95 | -0 | -0,7691 | 0,9208 | 0,0001 | 0,0001 | 1 -2 4 | | 1 | 5 | 3 | EQ. | C1 | 28,305 | 0 | -0,7689 | 0,9209 | -0,0001 | -0,0001 | 1 -2 -4 | | 1 | 6 | 3 | EQ. | C1 | -29,471 | -0 | 0,7798 | -0,9334 | 0,0001 | 0,0001 | 1 2 4 | +------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+ | 2 | 2 | 1 | --- | A1 | -0,64 | -0 | -0,0095 | -0,0083 | -0 | -0 | 1 | | 2 | 1 | 1 | --- | B1 | 4,715 | 0 | -0,0092 | -0,0082 | -0,0003 | -0,0003 | 1 -4 | | 2 | 2 | 2 | Cr. | B1 | -7,755 | -0 | -0,0098 | -0,0084 | 0,0003 | 0,0003 | 1 3 4 | | 2 | 1 | 3 | EQ. | C1 | 27,811 | 0 | 1,1899 | 1,0081 | -0,0001 | -0,0001 | 1 -2 -4 | | 2 | 2 | 3 | EQ. | C1 | -28,964 | -0 | -1,207 | -1,023 | 0,0001 | 0,0001 | 1 2 4 | | 2 | 5 | 3 | EQ. | C1 | -23,609 | 0 | -1,2067 | -1,023 | -0,0001 | -0,0001 | 1 2 -4 | | 2 | 6 | 3 | EQ. | C1 | 22,456 | -0 | 1,1897 | 1,008 | 0,0001 | 0,0001 | 1 -2 4 | +------+-------+------+------+-------+---------+---------+---------+---------+---------+---------+------------+ |
PeriodsOfVibrations: получение частот динамических загружений наверх
Для получения частот динамических загружений понадобятся интерфейсы LiraPeriodsOfVibrationsRequest (формирование запроса) и LiraPeriodsOfVibrationsResponse (получение частот). Откройте в ЛИРА-САПФИР тестовую задачу PK_rama-GB.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
// объявление интерфейса Response (ответ)
LiraPeriodsOfVibrationsResponse Response;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraPeriodsOfVibrationsRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_PeriodsOfVibrations) as LiraPeriodsOfVibrationsRequest;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "PK_rama-GB";
// обработка запроса
try
{
Response = Result.PeriodsOfVibrations(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// перечень типов динамических загружений в виде строк
string[] LoadCaseTypes = { "Undefined dynamic load case", "Earthquake (SNIP II-7-81*)", "Pulsation", "Impulse", "Impact", "Harmonic", "Accelerogram", "Three-component accelerogram", "Earthquake (SNIP II - 7 - 81 * modif.1996)", "Earthquake (SNRA II - 6.02 - 2006)", "Earthquake (KMK 2.01.03-2019)", "Earthquake (MGSN 4.19 - 05)", "Earthquake / 01.01.2000 / SP 14.13330.2011 /", "Earthquake (DBN B.1.1-12:2006)", "Earthquake (DBN B.1.1-12:2006, App.B)", "Earthquake (with torsion)", "Earthquake (SNT 2.01.08-99*)", "Earthquake (NF P 06-013)", "Earthquake (response spectrum)", "Earthquake (IBC-2006)", "Earthquake (SNIP RK 2.03-30-2006)", "Earthquake (EN 1998 - 1:2004)", "Earthquake (RPA 99 (2003))", "Earthquake (DBN B.1.1-12:2006, App.G)", "Earthquake (NP-031-01 for nuclear plants)", "Earthquake (MKC 22-07-2007)", "Earthquake (DBN B.2.2-24:2009)", "Earthquake (AzDTN 2.3-1-2010, with modif. of Jan 01,2014)", "Earthquake (PN 01.01.-09)", "Earthquake (SP 14.13330.2014/2018, modif.No.2,3)", "Earthquake (DBN B.1.1-12:2014)", "Earthquake (SNIP KP 20-02:2009)", "Earthquake (SP RK 2.03-30-2017, SN KR 20-02:2018)", "Earthquake (SP RK EN 1998-1:2004/2012, NTP RK 08-01.1-2017)", "Earthquake (SP 14.13330.2018, with Modif. No.1)", "Earthquake (TBEC-2018)", "Earthquake (three-component response spectrum)", "Modal analysis (100)" };
// перечень типов динамических загружений в виде LiraDynamicLoadCaseTypesEnum
LiraSapphireRes.LiraDynamicLoadCaseTypesEnum[] LoadCaseTypesEnums = { LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Undefined, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_20, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Pulsation, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Impulse, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Impact, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Harmonic, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Accelerogram, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Three_component_accelerogram, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_30, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_32, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_33, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_34, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_35, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_36, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_37, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_38, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_39, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_40, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_41, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_42, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_43, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_44, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_45, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_46, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_47, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_48, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_49, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_50, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_53, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_56, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_57, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_58, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_60, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_61, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_62, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_63, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Earthquake_64, LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Modal_analysis_100 };
// создание словаря соответствий между LiraDynamicLoadCaseTypesEnum и LoadCaseTypes
SortedDictionary < LiraSapphireRes.LiraDynamicLoadCaseTypesEnum, string > LoadCaseTypeDictionary = new SortedDictionary < LiraSapphireRes.LiraDynamicLoadCaseTypesEnum, string > ();
for (int i = 0; i < LoadCaseTypesEnums.Count(); i++)
LoadCaseTypeDictionary.Add(LoadCaseTypesEnums[i], LoadCaseTypes[i]);
// объявление массива, в котором будут храниться номера динамических загружений
var DynamicLoadCases = new LiraLongsArray();
// получение номеров динамических загружений
DynamicLoadCases = Response.LoadCaseNumbers;
Console.WriteLine("+-----------+----------------------------------------------------+");
Console.WriteLine("| Load Case | Type |");
Console.WriteLine("+-----------+----------------------------------------------------+");
for (int i = 0; i < DynamicLoadCases.Count; i++)
{
string LoadCaseType = LoadCaseTypeDictionary[Response.GetDynamicLoadCaseType(DynamicLoadCases.Item[i])];
Console.WriteLine("| {0,-9} | {1,-50} |", DynamicLoadCases.Item[i], LoadCaseType);
}
Console.WriteLine("+-----------+----------------------------------------------------+");
// вывод данных акселерограммы
Console.WriteLine("\nAccelerogram");
for (int i = 0; i < DynamicLoadCases.Count; i++)
{
if (Response.GetDynamicLoadCaseType(DynamicLoadCases.Item[i]) == LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Accelerogram)
{
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
Console.WriteLine("| Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses |");
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
var Eigenvalues = Response.GetEigenvalues(DynamicLoadCases.Item[i]);
var FreqRadSec = Response.GetFrequenciesRadPerSec(DynamicLoadCases.Item[i]);
var FreqHz = Response.GetFrequenciesHz(DynamicLoadCases.Item[i]);
var Periods = Response.GetPeriods(DynamicLoadCases.Item[i]);
var Factors = Response.GetParticipFactors(DynamicLoadCases.Item[i]);
var Masses = Response.GetModalMasses(DynamicLoadCases.Item[i]);
var AccMasses = Response.GetAccumulatedModalMasses(DynamicLoadCases.Item[i]);
for (int j = 0; j < Eigenvalues.Count; j++)
{
Console.Write("| {0,-9:##} | {1,-11:##.######} | {2,-11:##.######} ", DynamicLoadCases.Item[i], Eigenvalues.Item[j], FreqRadSec.Item[j]);
Console.Write("| {0,-11:##.######} | {1,-11:##.######} | {2,-11:##.######} ", FreqHz.Item[j], Periods.Item[j], Factors.Item[j]);
Console.WriteLine("| {0,-11:##.#####} | {1,-11:##.#####} |", Masses.Item[j], AccMasses.Item[j]);
}
}
}
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
// вывод ударных нагрузок
Console.WriteLine("\nImpact");
for (int i = 0; i < DynamicLoadCases.Count; i++)
{
if (Response.GetDynamicLoadCaseType(DynamicLoadCases.Item[i]) == LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Impact)
{
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
Console.WriteLine("| Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses |");
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
var Eigenvalues = Response.GetEigenvalues(DynamicLoadCases.Item[i]);
var FreqRadSec = Response.GetFrequenciesRadPerSec(DynamicLoadCases.Item[i]);
var FreqHz = Response.GetFrequenciesHz(DynamicLoadCases.Item[i]);
var Periods = Response.GetPeriods(DynamicLoadCases.Item[i]);
var Factors = Response.GetParticipFactors(DynamicLoadCases.Item[i]);
var Masses = Response.GetModalMasses(DynamicLoadCases.Item[i]);
var AccMasses = Response.GetAccumulatedModalMasses(DynamicLoadCases.Item[i]);
for (int j = 0; j < Eigenvalues.Count; j++)
{
Console.Write("| {0,-9:##} | {1,-11:##.######} | {2,-11:##.######} ", DynamicLoadCases.Item[i], Eigenvalues.Item[j], FreqRadSec.Item[j]);
Console.Write("| {0,-11:##.######} | {1,-11:##.######} | {2,-11:##.######} ", FreqHz.Item[j], Periods.Item[j], Factors.Item[j]);
Console.WriteLine("| {0,-11:##.#####} | {1,-11:##.#####} |", Masses.Item[j], AccMasses.Item[j]);
}
}
}
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
// вывод данных модального анализа
Console.WriteLine("\nModal analysis");
for (int i = 0; i < DynamicLoadCases.Count; i++)
{
if (Response.GetDynamicLoadCaseType(DynamicLoadCases.Item[i]) == LiraDynamicLoadCaseTypesEnum.kLiraLoadCaseType_Modal_analysis_100)
{
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
Console.WriteLine("| Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses |");
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
var Eigenvalues = Response.GetEigenvalues(DynamicLoadCases.Item[i]);
var FreqRadSec = Response.GetFrequenciesRadPerSec(DynamicLoadCases.Item[i]);
var FreqHz = Response.GetFrequenciesHz(DynamicLoadCases.Item[i]);
var Periods = Response.GetPeriods(DynamicLoadCases.Item[i]);
var Factors = Response.GetParticipFactors(DynamicLoadCases.Item[i]);
var Masses = Response.GetModalMasses(DynamicLoadCases.Item[i]);
var AccMasses = Response.GetAccumulatedModalMasses(DynamicLoadCases.Item[i]);
for (int j = 0; j < Eigenvalues.Count; j++)
{
Console.Write("| {0,-9:##} | {1,-11:##.######} | {2,-11:##.######} ", DynamicLoadCases.Item[i], Eigenvalues.Item[j], FreqRadSec.Item[j]);
Console.Write("| {0,-11:##.######} | {1,-11:##.######} | {2,-11:##.######} ", FreqHz.Item[j], Periods.Item[j], Factors.Item[j]);
Console.WriteLine("| {0,-11:##.#####} | {1,-11:##.#####} |", Masses.Item[j], AccMasses.Item[j]);
}
}
}
Console.WriteLine("+-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+");
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
+-----------+----------------------------------------------------+ | Load Case | Type | +-----------+----------------------------------------------------+ | 5 | Accelerogram | | 6 | Accelerogram | | 7 | Impact | | 13 | Accelerogram | | 14 | Modal analysis (100) | +-----------+----------------------------------------------------+ Accelerogram +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | 5 | 10,591586 | 3,254472 | ,518228 | 1,929653 | 1,438075 | 68,27848 | 68,27848 | | 5 | 173,742331 | 13,181135 | 2,098907 | ,476438 | -,667439 | 15,42102 | 83,69949 | | 5 | 901,0962 | 30,018264 | 4,779978 | ,209206 | ,189254 | ,8065 | 84,506 | | 5 | 972,726866 | 31,188569 | 4,966333 | ,201356 | ,340743 | 5,43425 | 89,94024 | | 5 | 2072,346249 | 45,52303 | 7,24889 | ,137952 | -,020958 | ,00708 | 89,94732 | | 5 | 2929,096162 | 54,121125 | 8,618014 | ,116036 | ,277072 | 3,24386 | 93,19118 | | 5 | 3233,171639 | 56,860985 | 9,054297 | ,110445 | ,01525 | ,00636 | 93,19755 | | 5 | 3817,773975 | 61,788138 | 9,838875 | ,101638 | -,161344 | ,05076 | 93,2483 | | 5 | 4449,867954 | 66,707331 | 10,622186 | ,094143 | ,07068 | ,03109 | 93,27939 | | 5 | 4700,50401 | 68,560222 | 10,917233 | ,091598 | ,008353 | ,00079 | 93,28018 | | 5 | 4775,555906 | 69,105397 | 11,004044 | ,090876 | ,008758 | ,00081 | 93,28099 | | 5 | 4890,050305 | 69,928895 | 11,135174 | ,089806 | ,016049 | ,00305 | 93,28403 | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | 6 | 10,591575 | 3,25447 | ,518228 | 1,929654 | 1,438073 | 68,27843 | 68,27843 | | 6 | 173,738908 | 13,181006 | 2,098886 | ,476443 | -,667424 | 15,42066 | 83,69909 | | 6 | 900,922023 | 30,015363 | 4,779516 | ,209226 | ,189142 | ,80568 | 84,50478 | | 6 | 972,62962 | 31,18701 | 4,966084 | ,201366 | ,340701 | 5,43341 | 89,93819 | | 6 | 2071,983992 | 45,519051 | 7,248257 | ,137964 | -,020854 | ,00701 | 89,9452 | | 6 | 2927,055732 | 54,102271 | 8,615011 | ,116076 | ,276084 | 3,23106 | 93,17627 | | 6 | 3233,008469 | 56,85955 | 9,054069 | ,110448 | ,015132 | ,00626 | 93,18253 | | 6 | 3816,953604 | 61,781499 | 9,837818 | ,101649 | -,159245 | ,04946 | 93,23199 | | 6 | 4204,168752 | 64,839562 | 10,324771 | ,096854 | ,040107 | ,00391 | 93,23589 | | 6 | 4438,947022 | 66,625423 | 10,609144 | ,094258 | -,07364 | ,03389 | 93,26979 | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | 13 | 10,591586 | 3,254472 | ,518228 | 1,929653 | 1,438075 | 68,27848 | 68,27848 | | 13 | 173,742331 | 13,181135 | 2,098907 | ,476438 | -,667439 | 15,42102 | 83,69949 | | 13 | 901,0962 | 30,018264 | 4,779978 | ,209206 | ,189254 | ,8065 | 84,506 | | 13 | 972,726866 | 31,188569 | 4,966333 | ,201356 | ,340743 | 5,43425 | 89,94024 | | 13 | 2072,346249 | 45,52303 | 7,24889 | ,137952 | -,020958 | ,00708 | 89,94732 | | 13 | 2929,096162 | 54,121125 | 8,618014 | ,116036 | ,277072 | 3,24386 | 93,19118 | | 13 | 3233,171639 | 56,860985 | 9,054297 | ,110445 | ,01525 | ,00636 | 93,19755 | | 13 | 3817,773975 | 61,788138 | 9,838875 | ,101638 | -,161344 | ,05076 | 93,2483 | | 13 | 4449,867954 | 66,707331 | 10,622186 | ,094143 | ,07068 | ,03109 | 93,27939 | | 13 | 4700,50401 | 68,560222 | 10,917233 | ,091598 | ,008353 | ,00079 | 93,28018 | | 13 | 4775,555906 | 69,105397 | 11,004044 | ,090876 | ,008758 | ,00081 | 93,28099 | | 13 | 4890,050305 | 69,928895 | 11,135174 | ,089806 | ,016049 | ,00305 | 93,28403 | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ Impact +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | 7 | 10,591586 | 3,254472 | ,518228 | 1,929653 | | | | | 7 | 173,742331 | 13,181135 | 2,098907 | ,476438 | | | | | 7 | 901,0962 | 30,018264 | 4,779978 | ,209206 | | | | | 7 | 972,726866 | 31,188569 | 4,966333 | ,201356 | | | | | 7 | 2072,346249 | 45,52303 | 7,24889 | ,137952 | | | | | 7 | 2929,096162 | 54,121125 | 8,618014 | ,116036 | | | | | 7 | 3233,171639 | 56,860985 | 9,054297 | ,110445 | | | | | 7 | 3817,773975 | 61,788138 | 9,838875 | ,101638 | | | | | 7 | 4449,867954 | 66,707331 | 10,622186 | ,094143 | | | | | 7 | 4700,50401 | 68,560222 | 10,917233 | ,091598 | | | | | 7 | 4775,555906 | 69,105397 | 11,004044 | ,090876 | | | | | 7 | 4890,050305 | 69,928895 | 11,135174 | ,089806 | | | | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ Modal analysis +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | Load Case | Eigenvalues | Rad/sec | Hz | Periods | Factors | Masses | Acc. Masses | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | 14 | 10,591586 | 3,254472 | ,518228 | 1,929653 | 1,472454 | 35,79106 | 35,79106 | | 14 | 173,742331 | 13,181135 | 2,098907 | ,476438 | -,603771 | 6,30963 | 42,10069 | | 14 | 901,0962 | 30,018264 | 4,779978 | ,209206 | 1,68903 | 32,11908 | 74,21978 | | 14 | 972,726866 | 31,188569 | 4,966333 | ,201356 | -,048139 | ,05423 | 74,27401 | | 14 | 2072,346249 | 45,52303 | 7,24889 | ,137952 | ,6656 | 3,56968 | 77,84369 | | 14 | 2929,096162 | 54,121125 | 8,618014 | ,116036 | ,293821 | 1,82395 | 79,66764 | | 14 | 3233,171639 | 56,860985 | 9,054297 | ,110445 | ,808016 | 8,93218 | 88,59982 | | 14 | 3817,773975 | 61,788138 | 9,838875 | ,101638 | -,428546 | ,17904 | 88,77886 | | 14 | 4449,867954 | 66,707331 | 10,622186 | ,094143 | -,840541 | 2,19836 | 90,97722 | | 14 | 4700,50401 | 68,560222 | 10,917233 | ,091598 | -,018425 | ,00192 | 90,97914 | | 14 | 4775,555906 | 69,105397 | 11,004044 | ,090876 | -,018539 | ,00181 | 90,98095 | | 14 | 4890,050305 | 69,928895 | 11,135174 | ,089806 | -,020036 | ,00237 | 90,98332 | +-----------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ |
SelectedReinforcement: доступ к данным армирования элементов наверх
Для получения данных армирования элементов понадобятся интерфейсы LiraSelectedReinforcementRequest (формирование запроса) и LiraSelectedReinforcementResponse (получение данных). Откройте в ЛИРА-САПФИР тестовую задачу example18_fire.lir, поставьте ее на расчет. Далее скопируйте приведенный пример кода и вставьте его в ваш проект C#. О том, как создать проект в Visual Studio, описано здесь.
// подключение библиотеки LiraSapphireRes
using LiraSapphireRes;
// объявление интерфейса Response (ответ)
LiraSelectedReinforcementResponse Response;
var Result = new LiraResultsAccess();
// объявление и инициализация интерфейса Request (запрос)
LiraSelectedReinforcementRequest Request = Result.CreateNewRequest(LiraRequestEnum.kLiraRequest_SelectedReinforcement) as LiraSelectedReinforcementRequest;
// инициализация поля DocumentName (имя задачи)
Request.DocumentName = "example18_fire";
// инициализация поля, отвечающего за номер варианта подбора арматуры
Request.DesignOption = 1;
// инициализация списка элементов
Request.Elements.AddFromString("1611,75,96");
// инициализация массива категорий данных армирования
LiraReinforcementDataEnum[] RD = { LiraReinforcementDataEnum.kLiraReinforcementData_Total, LiraReinforcementDataEnum.kLiraReinforcementData_Strength, LiraReinforcementDataEnum.kLiraReinforcementData_Torsion };
// строковое представление элементов RD
string[] RDstr = { "Total", "Strn.", "Tors." };
Request.ReinforcementData.Count = RD.Length;
// заполнение массива категорий данных армирования в запросе
for (int i = 0; i < RD.Length; i++)
Request.ReinforcementData.Item[i] = (int)RD[i];
// обработка запроса
try
{
Response = Result.SelectedReinforcement(Request);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.HResult);
return;
}
// массив случайных элементов, для которых будут выведены на консоль данные армирования
int[] Elements = { 1611, 75, 96 };
for (int i = 0; i < Elements.Length; i++)
{
Console.WriteLine("+-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+");
Console.WriteLine("| Elem. | Sec. | Type. |S/A| AU1 | AU2 | AU3 | AU4 | AS1 | AS2 | AS3 | AS4 | % | ASW1 | ASW2 | Short | Long |");
Console.WriteLine("+-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+");
int SecCount = Response.GetSectionCount(Elements[i]);
for (int CS = 1; CS <= SecCount; CS++)
{
for (int s = 1; s >= 0; s--)
{
for (int k = 0; k < RD.Length; k++)
{
// симметрия / асимметрия
string SA = "S";
if (s == 0)
SA = "A";
// код ошибок
int Err = 0;
// получение данных армирования
float AU1 = Response.GetBarAU1(Elements[i], CS, RD[k], s, 0, out Err);
float AU2 = Response.GetBarAU2(Elements[i], CS, RD[k], s, 0, out Err);
float AU3 = Response.GetBarAU3(Elements[i], CS, RD[k], s, 0, out Err);
float AU4 = Response.GetBarAU4(Elements[i], CS, RD[k], s, 0, out Err);
float AS1 = Response.GetBarAS1(Elements[i], CS, RD[k], s, 0, out Err);
float AS2 = Response.GetBarAS2(Elements[i], CS, RD[k], s, 0, out Err);
float AS3 = Response.GetBarAS3(Elements[i], CS, RD[k], s, 0, out Err);
float AS4 = Response.GetBarAS4(Elements[i], CS, RD[k], s, 0, out Err);
float Pre = Response.GetBarPERC(Elements[i], CS, RD[k], s, 0, out Err);
float ASW1 = Response.GetBarASW1(Elements[i], CS, RD[k], s, 0, out Err);
float ASW2 = Response.GetBarASW2(Elements[i], CS, RD[k], s, 0, out Err);
float CrShrt = Response.GetBarCrackSHORT(Elements[i], CS, s, 0, out Err);
float CrLong = Response.GetBarCrackLONG(Elements[i], CS, s, 0, out Err);
// вывод на консоль данных армирования
Console.Write("| {0,-5} | {1,-4} | {2,-5} | {3,-1} ", Elements[i], CS, RDstr[k], SA);
Console.Write("| {0,-5:#.##} | {1,-5:#.##} | {2,-5:#.##} | {3,-5:#.##} ", AU1, AU2, AU3, AU4);
Console.Write("| {0,-5:#.##} | {1,-5:#.##} | {2,-5:#.##} | {3,-5:#.##} ", AS1, AS2, AS3, AS4);
Console.Write("| {0,-3:#.##} | {1,-4:#.##} | {2,-4:#.##} ", Pre, ASW1, ASW2);
Console.WriteLine("| {0,-5:#.##} | {1,-4:#.##} |", CrShrt, CrLong);
}
}
}
}
Console.WriteLine("+-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+");
Откомпилируйте программу (Build > Build Solution) и запустите ее (Debug > Start Debugging).
Microsoft Visual Studio Debug Console |
+-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | Elem. | Sec. | Type. |S/A| AU1 | AU2 | AU3 | AU4 | AS1 | AS2 | AS3 | AS4 | % | ASW1 | ASW2 | Short | Long | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | 1611 | 1 | Total | S | 1,75 | 1,75 | 1,75 | 1,75 | ,02 | ,02 | ,02 | ,02 | ,28 | ,27 | ,27 | ,3 | ,3 | | 1611 | 1 | Strn. | S | ,88 | ,88 | ,88 | ,88 | ,02 | ,02 | ,02 | ,02 | ,14 | | | ,3 | ,3 | | 1611 | 1 | Tors. | S | | | | | ,02 | | ,02 | ,02 | | ,12 | ,12 | ,3 | ,3 | | 1611 | 1 | Total | A | 1,79 | 2,37 | 1,01 | 1,59 | ,02 | ,02 | ,02 | ,02 | ,27 | ,27 | ,27 | ,28 | ,28 | | 1611 | 1 | Strn. | A | 1,04 | 1,12 | ,51 | ,59 | ,02 | ,02 | ,02 | ,02 | ,13 | | | ,28 | ,28 | | 1611 | 1 | Tors. | A | | | | | ,02 | | ,02 | ,02 | | ,12 | ,12 | ,28 | ,28 | | 1611 | 2 | Total | S | 3,25 | 3,25 | 3,25 | 3,25 | ,02 | ,02 | ,02 | ,02 | ,52 | ,27 | ,27 | ,3 | ,3 | | 1611 | 2 | Strn. | S | 1,88 | 1,88 | 1,88 | 1,88 | ,02 | ,02 | ,02 | ,02 | ,3 | | | ,3 | ,3 | | 1611 | 2 | Tors. | S | | | | | ,02 | | ,02 | ,02 | | ,12 | ,12 | ,3 | ,3 | | 1611 | 2 | Total | A | 2,78 | 2,06 | 4,19 | 3,47 | ,02 | ,02 | ,02 | ,02 | ,5 | ,27 | ,27 | ,3 | ,3 | | 1611 | 2 | Strn. | A | 1,28 | 1,06 | 2,31 | 2,09 | ,02 | ,02 | ,02 | ,02 | ,27 | | | ,3 | ,3 | | 1611 | 2 | Tors. | A | | | | | ,02 | | ,02 | ,02 | | ,12 | ,12 | ,3 | ,3 | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | Elem. | Sec. | Type. |S/A| AU1 | AU2 | AU3 | AU4 | AS1 | AS2 | AS3 | AS4 | % | ASW1 | ASW2 | Short | Long | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | 75 | 1 | Total | S | | | | | | | | | | | | | | | 75 | 1 | Strn. | S | | | | | | | | | | | | | | | 75 | 1 | Tors. | S | | | | | | | | | | | | | | | 75 | 1 | Total | A | 1,6 | 1,6 | 5,69 | 5,69 | ,7 | ,7 | ,9 | ,9 | ,89 | 5,41 | 4,85 | ,3 | ,3 | | 75 | 1 | Strn. | A | ,5 | ,5 | 2,89 | 2,89 | ,7 | ,7 | ,9 | ,9 | ,5 | | | ,3 | ,3 | | 75 | 1 | Tors. | A | | | | | ,7 | | ,9 | ,9 | | 4,85 | 4,85 | ,3 | ,3 | | 75 | 2 | Total | S | | | | | | | | | | | | | | | 75 | 2 | Strn. | S | | | | | | | | | | | | | | | 75 | 2 | Tors. | S | | | | | | | | | | | | | | | 75 | 2 | Total | A | 1,6 | 1,6 | 5,69 | 5,69 | ,7 | ,7 | ,9 | ,9 | ,89 | 5,41 | 4,85 | ,3 | ,3 | | 75 | 2 | Strn. | A | ,5 | ,5 | 2,89 | 2,89 | ,7 | ,7 | ,9 | ,9 | ,5 | | | ,3 | ,3 | | 75 | 2 | Tors. | A | | | | | ,7 | | ,9 | ,9 | | 4,85 | 4,85 | ,3 | ,3 | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | Elem. | Sec. | Type. |S/A| AU1 | AU2 | AU3 | AU4 | AS1 | AS2 | AS3 | AS4 | % | ASW1 | ASW2 | Short | Long | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ | 96 | 1 | Total | S | | | | | | | | | | | | | | | 96 | 1 | Strn. | S | | | | | | | | | | | | | | | 96 | 1 | Tors. | S | | | | | | | | | | | | | | | 96 | 1 | Total | A | 2,89 | 2,89 | | | ,32 | ,32 | ,4 | ,4 | ,36 | 2,37 | 2,19 | ,3 | ,3 | | 96 | 1 | Strn. | A | 1,39 | 1,39 | | | ,32 | ,32 | ,4 | ,4 | ,21 | | | ,3 | ,3 | | 96 | 1 | Tors. | A | | | | | ,32 | | ,4 | ,4 | | 2,19 | 2,19 | ,3 | ,3 | | 96 | 2 | Total | S | | | | | | | | | | | | | | | 96 | 2 | Strn. | S | | | | | | | | | | | | | | | 96 | 2 | Tors. | S | | | | | | | | | | | | | | | 96 | 2 | Total | A | 2,89 | 2,89 | | | ,32 | ,32 | ,4 | ,4 | ,36 | 2,37 | 2,19 | ,3 | ,3 | | 96 | 2 | Strn. | A | 1,39 | 1,39 | | | ,32 | ,32 | ,4 | ,4 | ,21 | | | ,3 | ,3 | | 96 | 2 | Tors. | A | | | | | ,32 | | ,4 | ,4 | | 2,19 | 2,19 | ,3 | ,3 | +-------+------+-------+---+-------+-------+-------+-------+-------+-------+-------+-------+-----+------+------+-------+------+ |
Таблица интерфейсов наверх
В таблице приведен список интерфейсов, позволяющих получить доступ к результатам расчета. Условно интерфейсы можно разделить на группы: базовые, вспомогательные, информационные, интерфейсы запроса и интерфейсы доступа (ответа).
Базовые интерфейсы (ILiraResultRequestBase, ILiraResultsAccess) предназначены для создания объектов запрос и ответ.
Вспомогательные интерфейсы (ILiraLongsArray, ILiraDoublesArray) используются для взаимодействия с массивами чисел.
Информационные интерфейсы имеют в конце своего названия ключевое слово Info, предназначены для доступа к информации о загружениях, информации об историях нелинейных загружений, данных РСН и РСУ.
Интерфейсы запроса имеют в конце своего названия ключевое слово Request, предназначены для формирования запроса.
Интерфейсы доступа имеют в конце своего названия ключевое слово Response, предназначены для доступа к запрашиваемым данным.
| Название интерфейса | Краткое описание |
ILiraLongsArray |
Вспомогательный интерфейс для массива чисел типа long |
ILiraDoublesArray |
Вспомогательный интерфейс для массива чисел типа double |
ILiraResultRequestBase |
Базовый интерфейс запроса результатов расчета ЛИРА-САПФИР |
ILiraLoadCaseDisplacementsRequest |
Интерфейс запроса перемещений узлов от загружений |
ILiraLoadCaseForcesRequest |
Интерфейс запроса усилий от загружений |
ILiraLoadCombinationDisplacementsRequest |
Интерфейс запроса перемещений узлов от РСН |
ILiraLoadCombinationForcesRequest |
Интерфейс запроса усилий от РСН |
ILiraFragmLoadsRequest |
Интерфейс запроса нагрузок на фрагмент |
ILiraPunchLoadsRequest |
Интерфейс запроса нагрузок на контуры продавливания |
ILiraDesignCombinationForcesRequest |
Интерфейс запроса усилий от РСУ |
ILiraPeriodsOfVibrationsRequest |
Интерфейс запроса частот динамических загружений |
ILiraSelectedReinforcementRequest |
Интерфейс запроса данных армирования в элементах |
ILiraLoadCaseInfo |
Интерфейс доступа к свойствам загружений |
ILiraLoadCaseInfos |
Интерфейс доступа к массиву свойств загружений |
ILiraLoadHistoryInfo |
Интерфейс доступа к свойствам истории нелинейных загружений |
ILiraLoadHistoryInfos |
Интерфейс доступа к массиву свойств историй нелинейных загружений |
ILiraLoadCombinationInfo |
Интерфейс доступа к свойствам РСН |
ILiraLoadCombinationInfos |
Интерфейс доступа к массиву свойств РСН |
ILiraLoadCaseDisplacementsResponse |
Интерфейс получения перемещений узлов от загружений |
ILiraLoadCombinationDisplacementsResponse |
Интерфейс получения перемещений узлов от РСН |
ILiraLoadCaseForcesResponse |
Интерфейс получения усилий, возникающих в конечных элементах от загружений |
ILiraLoadCombinationForcesResponse |
Интерфейс получения усилий, возникающих в конечных элементах от РСН |
ILiraFragmLoadsResponse |
Интерфейс получения нагрузок на фрагмент |
ILiraPunchLoadsResponse |
Интерфейс получения нагрузок на контуры продавливания |
ILiraDesignCombinationForcesResponse |
Интерфейс получения усилий, возникающих в элементах от РСУ |
ILiraPeriodsOfVibrationsResponse |
Интерфейс доступа к периодам колебаний динамических загружений |
ILiraSelectedReinforcementResponse |
Интерфейс получения данных армирования в элементах |
ILiraResultsAccess |
Базовый интерфейс доступа к результатам |