00001 #ifndef _TICCO_MESH_3D_H_
00002 #define _TICCO_MESH_3D_H_
00003
00004
00005 #include "texty.h"
00006 #include "wektor.h"
00007 #include "plansza.h"
00008 #include "rozrost.h"
00009 #include "losowanie.h"
00010 #include "delanouy3d.h"
00011 #include "figury.h"
00012
00013 class TicooMesh3D{
00014
00015
00016 time_t losowa;
00017 double wielkoscTabX;
00018 double wielkoscTabY;
00019 double wielkoscTabZ;
00020 double wielkoscTabMax;
00021
00022
00023 Plansza plansza;
00024 Rozrost rozrost;
00025 Kula kula;
00026 IntList Trasa;
00027
00028 Losowanie losowane;
00029 Delanouy3D siatka,siatka1;
00030
00031
00032
00033
00034
00035
00036 int aktualneIDElementu;
00037
00038
00039 public:
00040
00041 bool empty();
00042 void zmienWarunkeSciana(double r_max,double r_min,int zWar,int naWar);
00043
00044
00045
00046 void count_bc_surface(FILE *out);
00047 void mesh_quality_stats(FILE *out);
00048
00049 void utr_smoothing(double l_step,int repetition);
00050 void mmr_get_vec_norm_at_node(int node,double *vec_norm);
00051 int mmr_node_status(int Node);
00052 int mmr_grups_number();
00053 int mmr_grups_ids(int *tab,int l_tab);
00054 void mmr_split_into_blocks_add_contact(const char *workdir,int *tabMat,int l_mat,int *tabBlock,int l_block,int *war,int l_war,double *tempBlock,int l_tempBlock,int *groups_fluid,int l_groups_fluid);
00055 int mmr_get_fa_el_bc_connect(int face_id,int *el_id);
00056 int mmr_el_groupID(int idEl);
00057 void mmr_el_node_coor(int Nel, int* Nodes, double* Node_coor);
00058 int mmr_el_eq_neig(int El, int* Neig, int* Neig_sides);
00059 void mmr_node_coor(int Node,double *Coor);
00060 int mmr_el_faces(int El,int *Face, int *Orient);
00061 int mmr_el_edges(int El,int *Edges);
00062 int mmr_edge_elems(int Ed,int *Edge_elems);
00063 void mmr_edge_nodes(int Ed,int *Edge_nodes);
00064 void mmr_fa_node_coor(int Fa,int *Nodes,double *Node_coor);
00065 void mmr_fa_edges(int Fa,int *Fa_edges,int *Ed_orient);
00066 double mmr_el_hsize(int El);
00067 void mmr_fa_area(int Fa,double *Area,double *Vec_norm);
00068 void getElwithFace(int Fa,int *El,int *Neig_sides);
00069
00070 void mmr_get_coor_from_motion_element(int idEl,int idLP,double *coor,int flagaSiatki);
00071
00072
00073 void copyMesh(int flaga);
00074
00075
00076
00077 void creatEdgeFace();
00078 void czyscEdgeFace();
00079 void czyscEdge();
00080 void czyscFace();
00081
00082 void delElement(int el){siatka.elements.deleteElement(el);}
00083 void delPoints(int nP){siatka.points.usunElement(nP);}
00084
00085
00086
00087
00088
00089 TicooMesh3D(int wielkoscTab);
00090 int getNumberElements() {return siatka.elements.getIter();}
00091 int getNumberPoints() {return siatka.points.getIter();}
00092 int getNumberFaces(){return siatka.faces.getIter();}
00093 int getNumberEdges(){return siatka.edges.getIter();}
00094 double getWielkoscTabX(){return wielkoscTabX;}
00095 double getWielkoscTabY(){return wielkoscTabY;}
00096 double getWielkoscTabZ(){return wielkoscTabZ;}
00097 double getWielkoscTabMax(){return wielkoscTabMax;}
00098
00099
00100
00101 void wczytajAC(const char *nazwa);
00102 void setPlansza(double wX,double wY,double wZ,bool periodyczne,bool wlaczAC);
00103 void elementyDoZiarnaAC();
00104 void elementyDoZiarnaPunktyGraniczne();
00105
00106
00107 void rozrostLosuj(int iloscZiaren);
00108 void rozrostLosujRange(int iloscZiaren,int range);
00109 void rozrostZiarenGranicy(int wspPrawdop);
00110 void pomniejszenieZiarnaGranicy(int wspPomniejszaniaZiaren);
00111 void rozrostZiarnaZOtoczeniem(int wspPrawdop,int wpsOtoczenia,int ileRozrost,int ileOtocz,int ilePetla);
00112 void komplekosoweTworzenieZiaren(int wspPrawdop,int ilePetla,int ileRozrost,int ileOtocz,int wspPomniejszaniaZiaren);
00113 void granica();
00114
00115
00116 void losowanieDodatkowychPunktow(bool pobierzPunkty,bool losuj,int ileP,int rozdz,int odG,int odP,bool flagaPer,double ax,double b0,int rSzuk);
00117 void ustawPunktySpaw1();
00118 void zmianaKolejnosciPunktow(int ileRazy,int wielkoscKomurki,int ileNaKomurke);
00119
00120
00121 void delanouy(bool dokladneWyszukanie);
00122 void reMes();
00123 void wygladzanieReMES(int ileRazy,double waga,bool wyglZWaga);
00124 double objetoscT(FILE *out);
00125 void sasiedniePunkty();
00126 void sasiednieElementy();
00127 void wygladzanieLaplaceWaga(int ileR,double waga);
00128 void wygladzanieLaplace(int ileR);
00129 void optymalizacjaStosunekRdor(int ile,double dokladnosc);
00130 void poprawWszystkieElFAST(double docelowyStosunekRdor,bool narozneTez);
00131 void conwersjaDoTicooMesh3DZapisu();
00132 int getFace_bc(int nrFace){return siatka.faces.getElement(nrFace).getBC();}
00133 void setFace_bc(int nrFace,int bc){siatka.faces.getElement(nrFace).setBC(bc);}
00134 void init_all_change(int a);
00135
00136
00137 void siatkaNaSrodek(double powiekszPrzestrzen);
00138
00139
00140
00141
00142 void wczytajAbaqus(const char *nazwa,int mnoznik,double px,double py,double pz);
00143 void wczytajNAS(const char *nazwa,int mnoznik,double px,double py,double pz);
00144 void zapiszDoPlikuNas(const char *nazwa,double podzielZ, bool brick,double tX,double tY,double tZ,double podzielAll);
00145
00146 void zapiszAbqus(const char *nazwa);
00147 void wczytajPunktyGraniczne(const char *nazwa);
00148 void zapiszPunkty(const char *nazwa);
00149 void zapisParaView(const char *nazwa);
00150 void wczytajPunktyPSS(const char *nazwa);
00151 void wczytajPunktyPSSnast(const char *nazwa);
00152 void zapiszPSS1DoPlikuNasWOparciuOPowTetra(const char *nazwa);
00153 void zapiszPSS1DoPlikuNasWOparciuOPowHybrydPSS(const char *nazwa);
00154 void ZapiszDoPlikuNasZPrzesunieciem_BC_Face(const char *nazwa);
00155
00156
00157 double ruchSpawanie(double obecnyKrok, double krok_start,double minPoprawy,double doX,double doY,double dl,double zmiejszaPrzes,double limit,double szerokosc);
00158 void ruchPrzestrzen(int ileWarstw,int obecny_krok, int od_krok,int ileKrok,double minPoprawy,double px0,double py0,double pz0,double px1,double py1,double pz1,double endX,double endY,double endZ);
00159
00160
00161
00162 void createCube(const char *nazwa,int node_x,int node_y,int node_z,double size_x,double size_y,double size_z,double divide,int *warunki);
00163 };
00164
00165 #endif //_TICCO_MESH_3D_H_