You are on page 1of 20

STANBUL NVERSTES

MHENDSLK FAKLTES
NAAT MHENDSL BLM

NAAT MHENDSLNDE JAVA PROGRAMLAMA


FNAL ALIMASI

Hazrlayanlar:

Hamed FARAJZADEH (2602130074)


Rouhollah NASRZADEHDZAJ (2602150082)
Serdar ULUSOY (2602150141)
Vefa OKUMU (2602150142)

HAZRAN, 2016

STANBUL

-2-

. Final almas.

NDEKLER
NDEKLER......................................................................................................................... 2
EKL LSTES ....................................................................................................................... 3
1

GR VE YNTEM........................................................................................................ 4
1.1

GR.......................................................................................................................... 4

1.2

YAZILIM ................................................................................................................... 4

1.2.1 Snflar ................................................................................................................... 5


1.2.2 NodeData Metodu.................................................................................................. 5
1.2.3 FrameData Metodu ................................................................................................ 6
1.2.4 Kg Metodu ............................................................................................................. 8
1.2.5 ForceVector Metodu .............................................................................................. 8
1.2.6 Restraint Metodu ................................................................................................... 9
1.2.7 Displacement Metodu ............................................................................................ 9
1.2.8 FrameForces Metodu ........................................................................................... 10
1.2.9 Reactions Metodu ................................................................................................ 11
1.2.10 Invert Metodu ...................................................................................................... 12
2

RNEK SSTEM............................................................................................................ 16
2.1

SSTEMN TANIMI ............................................................................................... 16

2.2

VER DOSYALARI ................................................................................................ 16

2.3

SONULAR............................................................................................................. 17

DEERLENDRME VE SONU................................................................................. 19

KAYNAKLAR ........................................................................................................................ 20

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-3-

. Final almas.

EKL LSTES
ekil 2.1
ekil 2.2
ekil 2.3
ekil 2.4
ekil 2.5

: rnek sistem geometrisi ve yklemesi ........................................................... 16


: rnek sistem dm noktas data dosyas...................................................... 16
: rnek sistem ubuk data dosyas.................................................................... 17
: Sistemin zlm hali ................................................................................... 17
: rnek sistemin yazlmla zlen sonular ................................................... 18

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-4-

. Final almas.

1
1.1

GR VE YNTEM
GR

Kafes sistemlerin matris-deplasman yntemiyle analizini konu edinen bu alma kapsamnda


Java platformunda alan bir yazlm hazrlanmtr. almada ncelikle programn genel
yaps ve kodlar sunulmu sonrasnda ise rnek bir sistemin zm verilmitir.

1.2

YAZILIM

Yazlmn main metodu aada sunulmutur. Yazlm 8 farkl metod ile almaktadr. Bunlar
nokta bilgilerini data dosyasndan alan nodeData metodu, frame bilgilerini data dosyasndan
alan frameData metodu, global rijitlik matrisini kuran kg metodu, kuvvet vektrn kuran
forceVector metodu, mesnet koullarn global matrise ileyen restraint metodu,
deplasmanlar

hesaplayan

displacements

metodu,

ubuk

kuvvetlerini

hesaplayan

frameforces metodu ve reaksiyonlar hesaplayan reactions metodu.


static
static
static
static
static
static
static
static

node node[] = new node[100];


frame frame[] = new frame[100];
double kg[][];
double kgunrest[][];
double f[][];
int r[][];
int nn;
double disp[][];

public static void main(String[] args) throws IOException {


// Call nodeData function to get node information
nodeData();
// Call nodeData function to get frame information
frameData();
// Call kg function to build global stiffness matrix
kg();
// Call restraint function to build force vector
forceVector();
// Call restraint function to modify kg for restraints
restraint();
// Call displacement function for calculation of displacements
displacements();
// Call frameforces function for calculation of frame forces
frameforces();
// Call reactions function for calculation of frame forces
reactions();
}

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-5-

. Final almas.

1.2.1

Snflar

Programda MSA01 ana snfnn yannda node ve frame isimli iki farkl snf bulunmaktadr.

public class node {


int nodeNo, nodeResX, nodeResY;
double nodeX, nodeY, nodeFx, nodeFy;
}
public class frame {
int frameNo, frameNodei, frameNodej;
double frameiX, frameiY, framejX, framejY;
double frameE, frameA, frameL;
double frameSM[][] = new double[4][4];
}

1.2.2

NodeData Metodu

Bu metod veri dosyasndan dm noktas bilgilerini okur.


public static void nodeData() throws IOException {
// This method opens text file and parses element data
int i=0;
File file = new File("C:/java/nodes.txt");
FileReader fileReader = new FileReader(file);
String line;
BufferedReader br = new BufferedReader(fileReader);
while ((line = br.readLine()) != null) {
node[i] = new node();
String[] values = line.split("\\t");
node[i].nodeNo = Integer.parseInt(values[0]);
node[i].nodeX = Double.parseDouble(values[1]);
node[i].nodeY = Double.parseDouble(values[2]);
node[i].nodeResX = Integer.parseInt(values[3]);
node[i].nodeResY = Integer.parseInt(values[4]);
node[i].nodeFx = Integer.parseInt(values[5]);
node[i].nodeFy = Integer.parseInt(values[6]);
i=i+1;
}
// number of nodes
nn = i;

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-6-

. Final almas.
br.close();
}

Dm noktas bilgileri C:\java klasrnde bulunan nodes.txt dosyasndan okunmaktadr.


Dosyann data yaps aadaki ekilde olmaldr. Veriler ayn satrda ve tab karakteriyle
ayrlm olmaldr.

Node numaras

X Koordinat

Y Koordinat

X Ynnde Mesnetlenme

Y Ynnde Mesnetlenme

X Ynnde Kuvvet

Y Ynnde Kuvvet

1.2.3

FrameData Metodu

Bu metod veri dosyasndan ubuk bilgilerini okur.


public static void frameData() throws IOException {
// This method opens text file and parses element data
int i=0;
double c, s;
File file = new File("C:/java/frames.txt");
FileReader fileReader = new FileReader(file);
String line;
BufferedReader br = new BufferedReader(fileReader);
while ((line = br.readLine()) != null) {
//Get frame data
frame[i] = new frame();
String[] values = line.split("\\t");
frame[i].frameNo = Integer.parseInt(values[0]);
frame[i].frameNodei = Integer.parseInt(values[1]);
frame[i].frameNodej = Integer.parseInt(values[2]);
frame[i].frameE = Double.parseDouble(values[3]);
frame[i].frameA = Double.parseDouble(values[4]);
// Get frame coordinates
frame[i].frameiX = node[frame[i].frameNodei].nodeX;
frame[i].frameiY = node[frame[i].frameNodei].nodeY;
frame[i].framejX = node[frame[i].frameNodej].nodeX;

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-7-

. Final almas.
frame[i].framejY = node[frame[i].frameNodej].nodeY;
// Calculate frame length
frame[i].frameL = Math.sqrt(Math.pow((frame[i].framejX-frame[i].frameiX),
2) + Math.pow((frame[i].framejY-frame[i].frameiY),2));
// Calculate cos and sin
c = (frame[i].framejX-frame[i].frameiX)/frame[i].frameL;
s = (frame[i].framejY-frame[i].frameiY)/frame[i].frameL;
frame[i].frameSM[0][0] =
c*c*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[0][1] =
c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[0][2] = 1*c*c*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[0][3] = 1*c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[1][0] =
c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[1][1] =
s*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[1][2] = 1*c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[1][3] = 1*s*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[2][0] = 1*c*c*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[2][1] = 1*c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[2][2] =
c*c*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[2][3] =
c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[3][0] = 1*c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[3][1] = 1*s*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[3][2] =
c*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
frame[i].frameSM[3][3] =
s*s*frame[i].frameE*frame[i].frameA/frame[i].frameL;
i=i+1;
}
br.close();
}

ubuk bilgileri C:\java klasrnde bulunan frames.txt dosyasndan okunmaktadr.


Dosyann data yaps aadaki ekilde olmaldr. Veriler ayn satrda ve tab karakteriyle
ayrlm olmaldr.

ubuk numaras

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-8-

. Final almas.

i Nokta Numaras

j Nokta Numaras

ubuk elastisite modl

ubuk alan

1.2.4

Kg Metodu

Bu metod global rijitlik matrisini kurar.


public static void kg() throws IOException {
// This method builds global stiffness matrix
MSA01.kg = new double[2*nn][2*nn];
MSA01.kgunrest = new double[2*nn][2*nn];
int i = 0, j = 0, t=0;
int iNode = 0, jNode = 0;
while (i < nn-1) {
//Get frame node numbers
iNode = frame[i].frameNodei;
jNode = frame[i].frameNodej;
int DOFs[] = {2*iNode, 2*iNode+1, 2*jNode, 2*jNode+1};
for(j=0; j<4; j++){
for(t=0; t<4; t++){
kg[DOFs[j]][DOFs[t]] = kg[DOFs[j]][DOFs[t]] +
frame[i].frameSM[j][t];
kgunrest[DOFs[j]][DOFs[t]] = kgunrest[DOFs[j]][DOFs[t]] +
frame[i].frameSM[j][t];
}
}
i++;
}
}

1.2.5

ForceVector Metodu

Bu metod yk vektrn kurar.


public static void forceVector() throws IOException {
MSA01.f = new double[1][2*nn];
for(int i=0; i<nn; i++){
f[0][2*i] = node[i].nodeFx;
f[0][2*i+1] = node[i].nodeFy;
}
}

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

-9-

. Final almas.

1.2.6

Restraint Metodu

Bu metod nokta mesnetlerinin rijitlik matrisine etkisini ayarlar.


public static void restraint() throws IOException {
MSA01.r= new int[2*nn][1];
for(int i=0; i<nn; i++){
if (node[i].nodeResX == 1) {
r[2*i][0] = 1;
}
if (node[i].nodeResY == 1) {
r[2*i+1][0] = 1;
}
}

for(int i=0; i<2*nn; i++){


if (r[i][0] == 1) {
f[0][i] = 0;

for(int j=0; j<2*nn; j++){


kg[i][j] = 0;
}
for(int j=0; j<2*nn; j++){
kg[j][i] = 0;
}
kg[i][i] = 1;
}
}
}

1.2.7

Displacement Metodu

Bu metod deplasmanlar hesaplar.


public static void displacements() throws IOException {

double kg_inv[][] = invert(kg);


int mA = f.length;
int nA = f[0].length;
int mB = kg_inv.length;
int nB = kg_inv[0].length;

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 10 -

. Final almas.

File file = new File("C:/java/results.txt");


if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file, true);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

MSA01.disp = new double[mA][nB];


bWriter.write("Displacements");
bWriter.write(System.lineSeparator());

if (nA != mB) throw new RuntimeException("Illegal matrix


dimensions.");

for (int i = 0; i < mA; i++){


for (int j = 0; j < nB; j++){
for (int k = 0; k < nA; k++){
disp[i][j] += f[i][k] * kg_inv[k][j];
}
bWriter.write(String.valueOf(disp[0][j]));
bWriter.write(System.lineSeparator());
}
}
bWriter.close();
}

1.2.8

FrameForces Metodu

Bu metod ubuk kuvvetlerini hesaplar.


public static void frameforces() throws IOException {
int i = 0;
int iNode = 0, jNode = 0;
double c=0, s=0, E = 0, A = 0, L = 0;
double dix = 0, diy=0, djx=0, djy=0;
double F = 0;
File file = new File("C:/java/results.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file, true);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
bWriter.write(System.lineSeparator());
bWriter.write("Frame Forces");
bWriter.write(System.lineSeparator());

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 11 -

. Final almas.

while (i < nn-1) {


//Get frame node numbers
iNode = frame[i].frameNodei;
jNode = frame[i].frameNodej;
E = frame[i].frameE;
A = frame[i].frameA;
L = frame[i].frameL;
// Calculate cos and sin
c = (frame[i].framejX-frame[i].frameiX)/frame[i].frameL;
s = (frame[i].framejY-frame[i].frameiY)/frame[i].frameL;
dix
diy
djx
djy

=
=
=
=

MSA01.disp[0][2*iNode];
MSA01.disp[0][2*iNode+1];
MSA01.disp[0][2*jNode];
MSA01.disp[0][2*jNode+1];

F = (E*A/L)*(c*(djx-dix) + s*(djy-diy));
bWriter.write("Frame" + String.valueOf(i) +": " +
String.valueOf(F));
bWriter.write(System.lineSeparator());
i++;
}
bWriter.close();
}

1.2.9

Reactions Metodu

Bu nokta reaksiyonlarn hesaplar.


public static void reactions() throws IOException {
int mA = disp.length;
int nA = disp[0].length;
int mB = kgunrest.length;
int nB = kgunrest[0].length;
File file = new File("C:/java/results.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file, true);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
bWriter.write(System.lineSeparator());
bWriter.write("Reactions");
bWriter.write(System.lineSeparator());
if (nA != mB) throw new RuntimeException("Illegal matrix
dimensions.");

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 12 -

. Final almas.

for (int i = 0; i < mA; i++){


for (int j = 0; j < nB; j++){
for (int k = 0; k < nA; k++){
f[i][j] += disp[i][k] * kgunrest[k][j];
}
bWriter.write(String.valueOf(f[0][j]));
bWriter.write(System.lineSeparator());
}
}

bWriter.close();
}

1.2.10 Invert Metodu


Bu metod bir matrisin tersini almaya yarar. Bu metod tarafmzca yazlm olmayp internet
kaynakldr.

public static double[][] invert(double a[][])


{
int n = a.length;
double x[][] = new double[n][n];
double b[][] = new double[n][n];
int index[] = new int[n];
for (int i=0; i<n; ++i)
b[i][i] = 1;

// Transform the matrix into an upper triangle


gaussian(a, index);

// Update the matrix b[i][j] with the ratios stored


for (int i=0; i<n-1; ++i)
for (int j=i+1; j<n; ++j)
for (int k=0; k<n; ++k)
b[index[j]][k]
-= a[index[j]][i]*b[index[i]][k];

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 13 -

. Final almas.
// Perform backward substitutions
for (int i=0; i<n; ++i)
{
x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
for (int j=n-2; j>=0; --j)
{
x[j][i] = b[index[j]][i];
for (int k=j+1; k<n; ++k)
{
x[j][i] -= a[index[j]][k]*x[k][i];
}
x[j][i] /= a[index[j]][j];
}
}
return x;
}

// Method to carry out the partial-pivoting Gaussian


// elimination.

Here index[] stores pivoting order.

public static void gaussian(double a[][], int index[])


{
int n = index.length;
double c[] = new double[n];

// Initialize the index


for (int i=0; i<n; ++i)
index[i] = i;

// Find the rescaling factors, one from each row


for (int i=0; i<n; ++i)
{
double c1 = 0;
for (int j=0; j<n; ++j)
{
double c0 = Math.abs(a[i][j]);
if (c0 > c1) c1 = c0;

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 14 -

. Final almas.

}
c[i] = c1;
}

// Search the pivoting element from each column


int k = 0;
for (int j=0; j<n-1; ++j)
{
double pi1 = 0;
for (int i=j; i<n; ++i)
{
double pi0 = Math.abs(a[index[i]][j]);
pi0 /= c[index[i]];
if (pi0 > pi1)
{
pi1 = pi0;
k = i;
}
}

// Interchange rows according to the pivoting order


int itmp = index[j];
index[j] = index[k];
index[k] = itmp;
for (int i=j+1; i<n; ++i)
{
double pj = a[index[i]][j]/a[index[j]][j];

// Record pivoting ratios below the diagonal


a[index[i]][j] = pj;

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 15 -

. Final almas.

// Modify other elements accordingly


for (int l=j+1; l<n; ++l)
a[index[i]][l] -= pj*a[index[j]][l];
}
}
}

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 16 -

. Final almas.

2
2.1

RNEK SSTEM
SSTEMN TANIMI

Sistem geometrisi ve ykleme aada verildii gibidir. ubuk elastisite modl 200 kN/mm2,
ubuk alan ise 100 mm2dir.

ekil 2.1 : rnek sistem geometrisi ve yklemesi

2.2

VER DOSYALARI

Sistem dm noktas data dosyas aadaki ekildedir:

ekil 2.2 : rnek sistem dm noktas data dosyas

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 17 -

. Final almas.

Sistem ubuk data dosyas aadaki ekildedir:

ekil 2.3 : rnek sistem ubuk data dosyas

2.3

SONULAR

ekil 2.4 : Sistemin zlm hali

Buna gre sistem tepe noktasnda y ynnde 100 mm deplasman yapmtr. Sistem simetrik
olduundan ubuk kuvveti 502 kN (70kN), mesnet reaksiyonlar da her iki ynde 50
kNdur.

Yazlmdan elde edilen sonular aadaki ekildedir:

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 18 -

. Final almas.

ekil 2.5 : rnek sistemin yazlmla zlen sonular

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 19 -

. Final almas.

DEERLENDRME VE SONU

Bu alma kapsamnda matris-deplasman yntemiyle kafes sistem zm yapan bir Java


program hazrlanm ve rnek bir sistem programla zlmtr. Programn rnek
zmdeki sonularla ayn deeri verdii grlmtr.

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

- 20 -

. Final almas.

KAYNAKLAR
Structural Analysis IV, Dr. C Caprani Lecture Notes,
http://www.colincaprani.com/files/notes/SAIV/4%20-20Matrix%20Stiffness%20Method.pdf

naat Mhendisliinde Java Programlama


Final almas

02.06.2016

You might also like