Informatyka I – Lab 07, r.a. 2011/2012
prow. Sławomir Czarnecki
Przykład – Algorytm – Zadanie na laboratorium nr. 7. Suplement
Opisany algorytm obliczania sił w kratownicach statycznie wyznaczalnych wyjaśniony będzie
dodatkowo na przykładzie 8-prętowej kratownicy statycznie wyznaczalnej – por. Rys.1.
Krok 0. Globalny układ kartezjański 0XY przyjęto jak na rysunku Rys.1.
Krok 1. Numeracja globalna węzłów
w = 0, 1,…, N = 5
, numeracja globalna prętów
p = 0,
1,…, M = 7
, liczba odebranych stopni swobody Z = 4 (pionowy stopień swobody w węźle
3
,
poziomy stopień swobody w węźle
4
, poziomy i pionowy stopień swobody w węźle
5
).
Definiowanie dynamiczne w programie macierzy i wektorów:
2
M ×
ALOK
,
2
N ×
X
,
T
Q ,
Z
R
zaleca się poprzedzić utworzeniem w dowolnym katalogu, plików tekstowych o
przykładowych nazwach: alok.txt, cart.txt, force.txt, bondary.txt (kojarzących się z
przeznaczeniem danych przechowywanych w tych plikach). Proponuje się następujący zapis
danych do tych plików:
topologię połączeń prętów kratownicy (relacje definiujące dla każdego numeru pręta
numery węzłów na jego końcach) –
plik
alok.txt,
geometrię (współrzędne kartezjańskie węzłów) –
plik
cart.txt,
obciążenia (składowe kartezjańkie sił przyłożonych do węzłów) –
plik
force.txt
warunki podparcia (numery odebranych stopnii swobody w kierunku poziomym i/lub
pionowym) –
plik
bondary.txt
Dla 8-prętowej kratownicy statycznie wyznaczalnej przedstawionej na rys.1 przyjmujemy, że:
[ ]
1.5
l
h
m
=
=
,
[ ]
3
1.0 10
Q
N
=
⋅
.
0
1
2
3
4
5
0
1
2
3
4
7
5
6
Q
l
l
l
h
X
Y
Rys.1.
plik
: alok.txt
plik
: cart.txt
plik
: force.txt
w pierwszym wierszu
w pierwszym wierszu
w kolejnych wierszach
liczba prętów (równa 8)
liczba węzłów (równa 6)
wszystkie składowe
a następnie w kolejnych
a następnie w kolejnych
wektorów obciążenia
wierszach wszystkie
wierszach wszystkie
węzłów w układzie 0XY
składowe macierzy
składowe kartezjańskie
przy czym nieznane
alokacji oddzielone
położeń węzłów w
składowe reakcji
spacją
przyjętym układzie 0XY
przyjąć równe 0
8
6
0.0 0.0
4 5
1.5 0.0
0.0 0.0
0 5
3.0 1.5
0.0 -1.0e3
0 4
4.5 1.5
0.0 0.0
0 1
3.0 0.0
0.0 0.0
1 3
0.0 0.0
0.0 0.0
1 2
0.0 1.5
2 3
0 3
plik
: boundary.txt
Uwaga !
Przyjmujemy numerację stopni swobody
w pierwszym wierszu
,
x
y
i i
w kierunku odpowiednio osi X i Y w węźle i-tym
liczba odebranych
następująco:
stopni swobody (równa 4)
2
x
i
i
= ⋅
(w kierunku poziomym X)
a następnie w kolejnych
2
1
y
i
i
= ⋅ +
(w kierunku pionowym Y)
wierszach wszystkie
numery odebranych
stopni swobody
4
7
8
10
11
W
pliku
alok.txt pierwszą liczbą jest liczba prętów M. Kolejność pozostałych zapisywanych
danych musi odpowiadać kolejności przyjętej numeracji prętów (od 0 do 7).
W
pliku
cart.txt pierwszą liczbą jest liczba węzłów N. Kolejność pozostałych zapisywanych
danych musi odpowiadać kolejności przyjętej numeracji węzłów (od 0 do 5).
W
pliku
force.txt nie ma już konieczności zapisu liczby węzłów N jeśli założymy, że w
programie plik ten będzie czytany po wczytaniu pliku cart.txt. Kolejność zapisywanych
danych musi odpowiadać kolejności przyjętej numeracji węzłów (od 0 do 5).
W
pliku
bondary.txt pierwszą liczbą jest liczba odebranych stopni swobody Z. Kolejność
pozostałych zapisywanych danych nie jest w tym przypadku istotna pod warunkiem, że po
wczytaniu tych danych w programie do wektora R, będzie on posortowany od najmniejszej
do największej wartości.
Krok 2. Przed dynamicznym utworzeniem macierzy
2
M ×
ALOK
zaleca się najpierw
wczytanie pierwszej danej – liczby prętów M z pliku alok.txt, a następnie zdefiniowanie
dynamiczne macierzy
2
M ×
ALOK
i kontynuowanie wczytywania danych z pliku alok.txt z
jednoczesnym inicjalizowaniem odpowiednich składowych macierzy
2
M ×
ALOK
.
Krok 3. Przed dynamicznym utworzeniem wektora
Z
R zaleca się najpierw wczytanie z pliku
boundary.txt pierwszej danej – liczby odebranych stopni swobody Z, a następnie
zdefiniowanie dynamiczne wektora
Z
R i kontynuowanie wczytywania danych z pliku
boundary.txt z jednoczesnym inicjalizowaniem odpowiednich składowych wektora
Z
R .
Krok 4. W celu posortowania utworzonego w ten sposób wektora można wywołać funkcję
quick_sort(…) lub bubble_sort(…) z biblioteki bibs.h.
Krok 5. Przed dynamicznym utworzeniem macierzy
2
N ×
X
zaleca się najpierw wczytanie z
pliku cart.txt pierwszej danej – liczby węzłów N, a następnie zdefiniowanie dynamiczne
macierzy
2
N ×
X
i kontynuowanie wczytywania danych z pliku cart.txt z jednoczesnym
inicjalizowaniem odpowiednich składowych macierzy
2
N ×
X
.
Krok 6. W przyjętej powyżej kolejności wczytywania danych, możliwe jest dynamiczne
utworzenie wektora
T
Q dla T = 2N, a następnie rozpoczęcie wczytywanie danych z pliku
force.txt z jednoczesnym inicjalizowaniem odpowiednich składowych wektora
T
Q .
Krok 7. Należy dynamicznie zdefiniować wektor
M
L oraz macierz
M
T
×
B
i postępować
zgodnie z opisanym algorytmem w celu zainicjalizowania składowych wektora
M
L i
macierzy
M
T
×
B
.
Krok 8. Należy dynamicznie zdefiniować macierz
T
M
×
D
i w odpowiedni sposób ją
zainicjalizować.
Krok 9. Należy dynamicznie zdefiniować macierze
,
g
d
D
D
, wektor F oraz wektory
,
g
d
Q
Q
o wymiarach podanych w kroku 9 i postępować zgodnie z opisanym algorytmem w celu
zainicjalizowania składowych obu macierzy
,
g
d
D
D
i wektora
g
Q
.
Krok 10. Należy sprawdzić warunek
?
T
Z
M
−
=
i w przypadku jego spełnienia obliczyć siły
w prętach kratownicy rozwiązując układ równań liniowych
g
g
=
D F
Q
(każda kratownica
będzie zdefiniowana jako statycznie wyznaczalna, stąd traktować należy warunek
?
T
Z
M
−
=
jedynie jako formalne sprawdzenie poprawności przyjmowanych/wczytywanych/obliczanych
danych). Do rozwiązania układu równań można na przykład wywołać funkcję gauss(…) z
biblioteki bibs.h . Należy pamiętać, że macierz
g
D
układu równań nie jest symetryczna. Po
znalezieniu wektora F, reakcje zewnętrzne
d
Q obliczamy z formuły
d
d
=
Q
D F .
Dodatkowe uwagi
• Po uruchomieniu programu, na ekranie monitora konieczne jest wyświetlenie
wszystkich dynamicznie definiowanych wektorów i macierzy. W tym celu można
wywoływać funkcję display(…) z biblioteki bibs.h .
• Dodatkowo, należy zapisać do pliku tekstowego sily.txt oraz reakcje.txt wartości
składowych wektorów odpowiednio F i
d
Q (
nie zmieniać nazw plików !
).
• Po utworzeniu się plików sily.txt oraz reakcje.txt (sprawdzić czy się utworzyły i czy
zapisane zostały do nich poprawne wartości) należy wywołać program Wizualizacja
Kratownicy.exe napisany w C#. Program ten będzie dostępny w odpowiednim
katalogu. Po wywołaniu programu wizualizacji, na ekranie pojawić powinna się
analizowana kratownica oraz obliczone siły podłużne.
Wydrukuj obie powyższe wizualizacje i dołącz je do
wydrukowanego
kodu
programu
wraz
z
rozwiązaniem ręcznym otrzymanym po zastosowaniu
metody równoważenia sił w węzłach.