Расчет плоских ферм и арок. Расчетная схема фермы с принятой нумерацией узлов и стержней, страница 10

{

public:

  void FillForceMatrix(double *MatrixB, long node);

  void SetValue(double xValue, double yValue);

  double x, y; // Величины внешней силы вдоль осей 0Х и 0Y

  CForce();

  virtual ~CForce();

};

Конец листинга всех файлов проекта Ferma

По завершении набора кода соберите программу (меню "Build->Build Ferma.exe") и запустите ее (меню "Build->Execute Ferma.exe").

Результат работы программы - созданный файл "result.txt" в директории программы Ferma, с перемещениями узлов и усилиями в элементах (стержнях) фермы. Результаты расчета тестового примера № 1 совпадают с полученными нами ранее при расчете аналитическим способом (в kH и см)

Перемещения узлов

  0: x =      0.000000 ; y =      0.000000

  1: x =      0.000000 ; y =     -0.003236

  2: x =      0.000000 ; y =      0.000000

Усилия в элементах

  0:          -5.774

  1:          -5.774

Программа составлена таким образом, что для выполнения нового расчета, расчета другой схемы фермы это можно сделать, изменив соответственно новой задаче только строки файла "Ferma.cpp", относящиеся к пунктам 1-8 алгоритма. После снова соберите программу и запустите ее.

Например, для расчета фермы тестового примера № 2 приведем новые строки ввода исходных данных, которыми надо заменить строки ввода исходных данных тестового примера № 1 (некоторые комментарии с целью экономии места опущены)

Начало листинга

Вставить в файл Ferma.cpp взамен аналогичных строк

//                     

// Ввод исходных данных

//                     

  // Пункт 1

  numNodes = 3;

  node = new CNode[numNodes];

  // Пункт 2

  node[0].SetCoord(0, 0);

  node[1].SetCoord(50.0, 86.60254);

  node[2].SetCoord(100, 0);

  // Пункт 3

  numRods = 3;

  rod = new CRod[numRods];

  // Пункт 4

  rod[0].SetNodesNumber( 0, 1 );

  rod[1].SetNodesNumber( 1, 2 );

  rod[2].SetNodesNumber( 0, 2 );

  // Пункт 5

  rod[0].SetParam( 10, 2.06e4 );

  rod[1].SetParam( 10, 2.06e4 );

rod[2].SetParam( 10, 2.06e4 );

  // Пункт 6

  node[0].SetConnection( true, true );

  node[1].SetConnection( false, false );

  node[2].SetConnection( false, true );

  // Пункт 7

  force = new CForce[numNodes];

  // Пункт 8

  force[0].SetValue( 0, 0 );

  force[1].SetValue( 0, -10 );

  force[2].SetValue( 0, 0 );

Конец листинга

Результаты расчета тестового примера № 2 совпадают с полученными нами ранее при расчете аналитическим способом (в kH и см)

Перемещения узлов

  0: x =      0.000000 ; y =      0.000000

  1: x =      0.000701 ; y =     -0.003641

  2: x =      0.001401 ; y =      0.000000

Усилия в элементах

  0:          -5.774

  1:          -5.774

  2:           2.887

Измените в последнем листинге три строки пункта 8 так, чтобы была учтена внешняя сила по оси 0Х

Начало листинга

  // Пункт 8

  force[0].SetValue( 0, 0 );

  force[1].SetValue( 10, -10 );

  force[2].SetValue( 0, 0 );

Конец листинга

Результаты расчета совпадают с полученными ранее (в kH и см)

Перемещения узлов

  0: x =      0.000000 ; y =      0.000000

  1: x =      0.011622 ; y =     -0.004341

  2: x =      0.003829 ; y =      0.000000

Усилия в элементах

  0:           4.226

  1:         -15.773

  2:           7.887

Тестовый пример № 3. Решим еще один пример и сравним результаты расчета с программой SCAD 7.29. Расчетная схема фермы с указанными размерами, внешними связями и силами приведена на рис. 11 а). Принятая нумерация узлов и стержней - на рис. 11 б).

                

Рис. 11 а) Расчетная схема фермы тестового примера № 3;

б) схема с нанесенными номерами узлов и стержней.

Модуль упругости всех стержней фермы Е = 2.1.104 kH/см2. Площадь всех стержней Ak = 30 см2.

Начало листинга

Вставить в файл Ferma.cpp взамен аналогичных строк

//                     

// Ввод исходных данных

//                     

// Пункт 1

  numNodes = 4;

  node = new CNode[numNodes];

// Пункт 2

  node[0].SetCoord(0, 0);

  node[1].SetCoord(200, 0);

  node[2].SetCoord(400, 0);

  node[3].SetCoord(200, 100);

// Пункт 3

  numRods = 5;

  rod = new CRod[numRods];

// Пункт 4

  rod[0].SetNodesNumber( 0, 1 );

  rod[1].SetNodesNumber( 1, 2 );