00001 #ifndef GTOPOLOGY_H
00002 #define GTOPOLOGY_H
00003
00004 #include <stdio.h>
00005 #include "iotools.h"
00006 #include "gnode.h"
00007 #include "gelement.h"
00008 #include "lgnode.h"
00009 #include "gphase.h"
00010 #include "floatsub.h"
00011 #include "itablefunct.h"
00012 #include "galias.h"
00013 #include "gedge.h"
00014 #include "endnode.h"
00015 #include "seqtop.h"
00016 #include "ordering.h"
00017
00018 class gmatrix;
00019
00020
00021
00022
00023
00024
00025
00026
00027 class gtopology
00028 {
00029 public:
00030 gtopology ();
00031 ~gtopology ();
00032
00033 void initiate (long **icn,long *nc,long m);
00034 void alloc_nodes (long m);
00035 void alloc_elements (long m);
00036 void alloc_lnodes (long m);
00037 void alloc_phases (long m);
00038 void alloc_growstr ();
00039
00040
00041
00042 long give_ndofn (long nid);
00043 long give_nmult (long lnid);
00044 long give_ndofe (long eid);
00045 long give_gndofe (long eid);
00046 long give_ndofedge (long edid);
00047 long give_nnedge (long edid);
00048 long give_nne (long eid);
00049 long give_original_nne (long eid);
00050 long give_nmne (long eid);
00051 long give_cne (long eid);
00052 long give_dof (long nid,long n);
00053 void save_dof (long nid,long n,long num);
00054 long give_ldof (long nid,long lid,long n);
00055 void save_ldof (long nid,long lid,long n,long num);
00056 void give_original_nodes (long eid,ivector &nod);
00057 void give_nodes (long eid,ivector &nod);
00058 void give_master_nodes (long eid,ivector &nod);
00059 void give_node_coord1d (vector &x,long eid);
00060 void give_node_coord2d (vector &x,vector &y,long eid);
00061 void give_node_coord2dxz (vector &x,vector &z,long eid);
00062 void give_node_coord3d (vector &x,vector &y,vector &z,long eid);
00063 void give_code_numbers (long eid,long *cn);
00064 void give_cn (long eid,long *cn);
00065 void give_gcode_numbers (long eid,long *cn);
00066 void give_node_code_numbers (long nid,long *cn);
00067 void give_mult_code_numbers (long nid,long lid,long *cn);
00068 void give_edge_code_numbers (long edid,long fln,long *ncn1,long *ncn2,long *mcn);
00069 void give_endnode_code_numbers (long enid,long *ncn1,long *ncn2,long *mcn);
00070
00071 gelemtype give_elem_type (long eid);
00072 void give_end_nodes (long eid,long *nodes);
00073 void give_edge_nodes (long eid,long edid,long *nodes);
00074 void give_edge_loc_nodes (long eid,long edid,ivector &edgenod);
00075 void give_surf_nodes (long eid,long surfid,long *nodes);
00076
00077 long give_nen (long eid);
00078 long give_ned (long eid);
00079 long give_nned (long eid);
00080 long give_nsurf (long eid);
00081 long give_nnsurf (long eid);
00082 long give_degree (long eid);
00083 long give_whole_dim(long eid);
00084 void backup_cn ();
00085
00086 long codenum_generation (FILE *out);
00087 long gencodnum ();
00088 long schur_ordering ();
00089 long saddlepoint_ordering (long ns,long *nnsd,long **ltg);
00090
00091 void edge_localization (gmatrix *gm);
00092
00093
00094 void node_mark (long n);
00095
00096 void comptop (gtopology *gt1,gtopology *gt2);
00097 void cndistr (gtopology *gt1,gtopology *gt2);
00098 void adjacelem (FILE *out);
00099
00100
00101 void adjacnodes (FILE *out);
00102 void adjacnodes_edge (FILE *out);
00103
00104
00105 void backup_codnum (void);
00106 void restore_codnum (void);
00107 void write_nodes(FILE *out);
00108 void unodelnode ();
00109 void initiate_elemmult ();
00110 void comp_domain_sizes ();
00111 void give_domain_sizes (double *sizes);
00112 void build_nodal_octree();
00113
00114
00115 void read_gf (XFILE *in);
00116 void print_gf (FILE *out);
00117
00118 void auxinf_init ();
00119 void search_newdofs (double time);
00120
00121
00122
00123 void print_time_functions (FILE *kon,double time);
00124
00125
00126
00127
00128 void update_elem (double time);
00129 void update_nodes ();
00130
00131 void update_auxinf();
00132
00133 void remove_nodes(long *sn);
00134
00135 long search_changed_elem(double time, long &nae);
00136
00137 long search_iface_nodes(long *ifn);
00138
00139 long search_changed_dofs (double time,double prev_time);
00140
00141 void switch_new_elem();
00142
00143 void update_active_dofs (double time);
00144
00145 void clear_intf_dofs(long *ifn);
00146
00147 long search_newelem (double time,double prev_time);
00148 long search_newdofs (double time,double prev_time);
00149 void update_dofs (double time);
00150
00151
00152 void lneso_init ();
00153
00154
00155
00156
00157
00158 void end_nodes (FILE *out);
00159 void endnodes_auxprint (FILE *out);
00160 void alloc_endnode_cn ();
00161 void endnodes_localization (gmatrix *gm);
00162 void enodes_allelem (FILE *out);
00163
00164 void edges (FILE *out);
00165 void edges_mat (long matrad,FILE *out);
00166 void edge_dirvect ();
00167 void edge_normvect ();
00168 void edgenode_sorting ();
00169 void prev_next_edges ();
00170 void edge_series (FILE *out);
00171 void edge_elem (FILE *out);
00172 void edge_allelem (FILE *out);
00173 void normvectorient ();
00174
00175 void edges_auxprint (FILE *out);
00176
00177 void alloc_edge_cn ();
00178
00179 void auto_subdom_detection (FILE *out);
00180 long codenum_multip ();
00181 void mult_localization (gmatrix *gm);
00182
00183 void domdecomp ();
00184 void create_ltg (FILE *out);
00185 void read_seq_top (XFILE *in);
00186
00187
00188 void cuthill_mckee_renumb (FILE *out);
00189
00190 void writePriorityQueue(int *fronta);
00191 void sloan_renumb (FILE *out);
00192 void shell_sort( int *array, int arrayLength);
00193 void shell_sort_x(ivector &x_ord);
00194 void shell_sort_y(ivector &y_ord);
00195 void shell_sort_z(ivector &z_ord);
00196 void lastLevelOfRootedStructure(int start, int *velikost, int *maxSirka, int*hloubka, int *vzdalenost, int **lastLevel);
00197 int findMinimumDegree();
00198 void removeRepetitiousDegrees(int **pole, int *velikost);
00199 void generateInitialList(int start, int **seznam, int * velikostSeznamu, int *hloubkaSeznamu, int *maxSirka);
00200 void findPseudoPheripheral(int *startUzel, int *cilUzel);
00201
00202
00203 void searching_hanging_nodes (FILE *out);
00204 void dof_transfer_hangnod (FILE *out);
00205 void approx_weights (gtypel et, long nid, vector &w, FILE *out);
00206 void hang_nodes_check (FILE *out);
00207
00208 void code_num_mod (long ncomp,long &ndof,FILE *out);
00209
00210
00211 enum Status{
00212 ACTIVE = 1,
00213 INACTIVE = 2,
00214 PREACTIVE= 3,
00215 POSTACTIVE = 4
00216 };
00217
00218
00219 gnode *gnodes;
00220 gelement *gelements;
00221 lgnode *lgnodes;
00222 gphase *gphases;
00223
00224
00225
00226 long nn;
00227
00228 long ne;
00229
00230 long nln;
00231
00232 long ndof;
00233
00234 long nidof;
00235
00236 long nbdof;
00237
00238 long nsad;
00239
00240
00241 long nnso;
00242
00243
00244 long neso;
00245
00246 long ns;
00247
00248 long nph;
00249
00250
00251
00252 long hangnod;
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 long dofcontr;
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274 long cnstate;
00275
00276
00277
00278
00279
00280 long *ordering;
00281
00282 noderenumb nodren;
00283
00284
00285 long ngf;
00286
00287 gfunct *gf;
00288
00289
00290
00291
00292
00293
00294 long cngen;
00295
00296
00297 double *domsizes;
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309 long *nadjelnod;
00310
00311
00312
00313
00314 long **adjelnod;
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 long *nadjelel;
00325
00326
00327
00328
00329
00330 long **adjelel;
00331
00332
00333
00334
00335
00336
00337
00338
00339 long *nadjnodnod;
00340
00341
00342
00343 long **adjnodnod;
00344
00345
00346 long *nadjacnodesedge;
00347 long **adjacnodesedge;
00348
00349
00350 long **bckcn;
00351
00352
00353 long *unln;
00354
00355
00356 long *unnl;
00357
00358 long *cngtopcorr;
00359
00360
00361 floatsub flsub;
00362
00363
00364
00365
00366
00367
00368
00369
00370 long *lnso;
00371
00372
00373
00374
00375
00376
00377
00378
00379 long *leso;
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392 edgetype edtype;
00393
00394
00395 long nged;
00396
00397
00398 long nser;
00399
00400
00401
00402
00403 long *edgeser;
00404
00405
00406
00407
00408 long *nedser;
00409
00410
00411
00412
00413 long **edgelist;
00414
00415
00416
00417 gedge *gedges;
00418
00419
00420 long nen;
00421
00422
00423
00424 endnode *endnodes;
00425
00426
00427
00428 seqtop *stop;
00429
00430
00431
00432
00433
00434 long rst;
00435
00436
00437 };
00438
00439 #endif