ЛИРА-САПФИР RES API

 

ЛИРА-САПФИР RES API позволяет получить доступ к результатам, используя языки программирования, поддерживающие технологию ActiveX или COM, такие как Visual Basic Script, Java Script, C#, Java, Visual Basic, Visual Basic.NET, C++, Delphi и т.д.

 

В этом разделе:

Быстрый старт: простой пример использования ЛИРА-САПФИР RES API на языке C#

Гибкий запрос: пример использования ЛИРА-САПФИР RES API, демонстрирующий как можно экономить вычислительные ресурсы

Обработка исключений: пример, демонстрирующий как избежать падения программы при попытке получить несуществующие данные

LoadCaseDisplacements: доступ к перемещениям узлов от загружений

LoadCaseForces: доступ к усилиям, возникающим в элементах от загружений

LoadCombinationDisplacements: доступ к перемещениям узлов от РСН

LoadCombinationForces: доступ к усилиям, возникающим в элементах от РСН

FragmLoads: доступ к нагрузкам на фрагмент

PunchLoads: доступ к нагрузкам на контуры продавливания

DesignCombinationForces: доступ к усилиям, возникающим в элементах от РСУ

PeriodsOfVibrations: получение частот динамических загружений

SelectedReinforcement: доступ к данным армирования элементов

Таблица интерфейсов

 

 

Быстрый старт: простой пример использования ЛИРА-САПФИР RES API на языке C#  наверх

 

Для разработки программы на C# в этом примере мы будем использовать Microsoft Visual Studio. Ее бесплатную версию, Microsoft Visual Studio Community Edition, можно загрузить с веб-сайта microsoft.com.

 

  1. Создание нового проекта

 

 

Запустите Visual Studio, выберите пункт меню File > New > Project, выберите тип проекта Visual C# Console App. В качестве имени Name проекта укажите LiraSapphireResApiTest1, а в качестве расположения Location укажите, например, D:\Tests\ и нажмите OK.

 

  1. Добавление ссылки на библиотеку типов ЛИРА-САПФИР RES API

 

Перейдите в окно Solution Explorer и щелкните правой кнопкой мыши на элементе Dependencies. В появившемся контекстном меню выберите пункт Add COM Reference... Далее выберите строку LIRA-SAPPHIRE Result Access Type Library и нажмите OK.

 

 

Если вы не видите строки LIRA-SAPPHIRE Result Access Type Library в списке, значит данная библиотека типов не зарегистрирована. Выполните переустановку ЛИРА-САПФИР или запустите regsvr32 LiraResAPI.dll от имени администратора.

 

  1. Выполнение расчета тестовой задачи

 

Откройте в ЛИРА-САПФИР тестовую задачу 05_башня МК.lir и поставьте ее на расчет.

 

  1. Добавление тела программы

 

Вернитесь в среду разработки 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();

}

  1. Компиляция программы

 

Выберите пункт меню Build > Build Solution.

 

  1. Запуск программы

 

Выберите пункт меню 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 Базовый интерфейс доступа к результатам