All pastes #832037 Raw Edit

Mine

public cpp v1 · immutable
#832037 ·published 2007-12-25 18:50 UTC
rendered paste body
/*Obliczanie naprężeń i kierunków głównych w węzłach siatki - kostka 3D z dyskretyzacją siatką regularną, analiza skalowalności - pthreads Miłosz Czarnota i Bzowski Krzysztofgr 1. IS/IMiIP Ogólny sens:Klasa punkt reprezentuje jeden węzeł. Celem jest stworzenie dużej ilości punktów (umieszczonych w tablicy) a nastepnie policzenie dla nich naprężeń głównych.Tensor reprezentowany jest przez tablicę 3x3. Tworzymy więc tablicę wskaźników składającą się z 3 komórek, a potem w każdej tworzymy kolejną tablicę trój-elementową - dostajemy macież 2-wymiarową 3x3. Zapełniamy ją losowymi liczbami z zachowaniem jednak reguły, że musi być to tensor symetryczny (jak we wzorze z pdfa). Liczymy współczynniki (zmienne I1, I2, I3) równania III rzędu - stosując wzory z PDFa. Tworzymy równanie 3-rzędu. Za pomocą wzorów Cardana obliczamy pierwiastki tego równania, które są zarazem naprężeniami głównymi w punkcie. Czas operacji mierzymy za pomocą dedykowanej biblioteki stworzonej przez dr Krzysztofa Banasia. */#include <stdio.h>#include <stdlib.h>#include <iostream>#include <pthread.h>#include <math.h>//------------------------------#include "pomiar_czasu.c"#include "punkt.h"unsigned int rozmiar;int debug;void *thread_func( void *vptr_args );punkt *cube;pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;//------------------------------using namespace std;main (){do {cout<<"Debug Mode [0/1]: ";cin >> debug;}while(debug !=0 && debug !=1);cout<<"Ilosc wezlow: ";cin>>rozmiar;punkt *cube = new punkt[rozmiar];cout<<"$$ OBLICZENIA SEKWENCYJNE $$"<<endl;inicjuj_czas();for(int i=0; i<rozmiar; i++){	if(debug) cube[i].show();	cube[i].oblicz_wspolczynniki();	if(debug) cube[i].show_rownanie();	cube[i].oblicz_pierwiastki();	if(debug) cube[i].show();	}drukuj_czas();delete [] cube;cout<<"$$ OBLICZENIA ROWNOLEGLE $$"<<endl;cube = new punkt[rozmiar];punkt :: delta = 0;inicjuj_czas();pthread_t watek;pthread_create( &watek, NULL, &thread_func, NULL );for(int i=0; i<rozmiar/2; i++){	if(debug) cube[i].show();	cube[i].oblicz_wspolczynniki();	if(debug) cube[i].show_rownanie();	pthread_mutex_lock (&mut);	cube[i].oblicz_pierwiastki();	pthread_mutex_unlock (&mut);	if(debug) cube[i].show();	}pthread_join(watek, NULL );drukuj_czas();delete [] cube;}void *thread_func( void *vptr_args ){cout<<"Watek 2"<<endl;for(int j=(rozmiar/2)+1; j<rozmiar; j++){	if(debug) cube[j].show();	cube[j].oblicz_wspolczynniki();	if(debug) cube[j].show_rownanie();		cube[j].oblicz_pierwiastki();		if(debug) cube[j].show();	}}