00001 #ifndef FIXNODESEL_H
00002 #define FIXNODESEL_H
00003 #include <stdio.h>
00004 #include <string.h>
00005 #include <math.h>
00006 #include <time.h>
00007 #include <float.h>
00008 #include <limits.h>
00009 #include <stdlib.h>
00010 #include <mpi.h>
00011 #include "gtopology.h"
00012 #include "pgalias.h"
00013 #include "galias.h"
00014 #include "partop.h"
00015
00016
00017
00018
00019
00020
00021
00022 class fixnodesel
00023 {
00024 public:
00025
00026
00027 fixnodesel (int np,int mr,long nd,meshdescription meshd,long* domproces,char *nameproc,int nl,long mes);
00028
00029
00030 ~fixnodesel();
00031
00032
00033 bool check_ltg(long *ltg,long nnd,FILE *out);
00034
00035
00036 void initiate(gtopology *topol,partop *part,FILE *out);
00037
00038 double compute_length_of_vector(long a,long b);
00039
00040 double compute_angle_of_vector_a_and_b(long a,long b,long c);
00041
00042 double compute_area_of_triangle(long a,long b,long c);
00043
00044 void check_triangle();
00045
00046
00047 void set_fictitious_subdomain();
00048
00049 void compute_size_of_fictitious_subdomain();
00050
00051 long compute_number_of_combination(long n, long k);
00052
00053 void compute_statistics_of_multiplicity();
00054
00055 void give_whole_dim();
00056
00057 void create_link_dom_nod();
00058
00059 void assemble_ltg_with_fixings(long *ltg);
00060
00061 void create_subdom_graph_3d ();
00062
00063 void create_master_graph();
00064
00065 void select_fixing_nodes_on_master();
00066
00067 void fixing_detection(long *ltg);
00068
00069
00070
00071 void create_subdom_graph_2d();
00072
00073 void select_minimal_number_2d();
00074
00075 void check_minimal_number_2d();
00076
00077 void select_fixing_nodes_geom_2d(long auxnv);
00078
00079 void select_minimal_number_3d();
00080
00081 void check_minimal_number_3d();
00082
00083 void select_fixing_nodes_geom_3d(long auxnv);
00084
00085 void reduce_master_graph_curve();
00086
00087 void reduce_master_graph_surface();
00088 void reduce_master_graph_surface_2();
00089
00090
00091
00092
00093
00094
00095 void set_curves();
00096
00097 void set_curves_3D( );
00098
00099 void print_info_curves();
00100 void print_info_surfaces();
00101
00102 void add_fixings();
00103
00104 void add_rand();
00105
00106 void add_each_nth_member();
00107
00108 void add_nth_member();
00109
00110 void add_all_members();
00111
00112 void add_centroid();
00113
00114 void add_intpoint();
00115
00116 void add_n_part_curve();
00117
00118 void add_n_rand_nodes_on_surf();
00119
00120 void add_additional_fixing_nodes();
00121
00122 void add_user_pos_def();
00123
00124 void add_all_surfnod();
00125
00126 void add_centroid_surface();
00127
00128 void select_centers_of_surfaces();
00129 void select_centers_of_surfaces_2();
00130
00131 void mark_surfnodes();
00132
00133 void mark_ring_nodes();
00134
00135 void add_n_th_mark();
00136
00137 void select_optimum_2d();
00138
00139 void add_rings();
00140
00141 void add_max_ring();
00142
00143 void add_boundary_of_surface();
00144 void add_int_points_surface();
00145
00146
00147 void add_max_triangle_on_surface();
00148
00149 void order_selected_ring_nodes();
00150
00151
00152
00153
00154
00155 int nproc;
00156
00157 int myrank;
00158
00159 char procName[MPI_MAX_PROCESSOR_NAME];
00160
00161 int nameLength;
00162
00163 long ndom;
00164
00165 long nn;
00166
00167 long ne;
00168
00169
00170 gtopology *top;
00171
00172
00173 partop *ptop;
00174
00175
00176 long nbn;
00177
00178
00179 long maxnbn;
00180
00181
00182 long nin;
00183
00184
00185 meshdescription md;
00186
00187 long dim;
00188
00189
00190 long *domproc;
00191
00192
00193
00194
00195 long *nodmultip;
00196
00197
00198
00199
00200
00201 long *lnbn;
00202
00203
00204
00205
00206 long *lnin;
00207
00208
00209
00210
00211 long *lgnbn;
00212
00213
00214
00215
00216
00217 long mespr;
00218
00219
00220
00221
00222 long condfixing;
00223
00224 long methodcondcor;
00225
00226 long typecondcur;
00227
00228 long typecondsurf;
00229
00230 long nmembercur;
00231
00232 long nmembersurf;
00233
00234
00235 long nring;
00236
00237 long *ring;
00238
00239
00240 long *nadjacboundnod;
00241
00242 long **adjacboundnod;
00243
00244 long *boundnodes;
00245
00246 long nuserdefnod;
00247 long *userdefnod;
00248
00249 long corGeomSearch;
00250
00251 long minSelStrat;
00252
00253
00254 long **glinknod;
00255
00256 long **glinkdom;
00257
00258 long *loclinknod;
00259
00260 long **loclinkdom;
00261
00262
00263
00264
00265
00266
00267
00268 long *nodeidentif;
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279 double *fictdom;
00280
00281 double sizefictdom;
00282
00283 double lx,ly,lz;
00284
00285
00286
00287
00288
00289 double *ratio;
00290
00291 long *curnadjac;
00292 long **curadjac;
00293 long *curidentif;
00294 long ncurnod;
00295
00296
00297
00298
00299
00300
00301
00302 long tnbn;
00303
00304
00305
00306
00307
00308
00309 long *multip;
00310
00311
00312
00313
00314
00315 long *nbnd;
00316
00317
00318
00319
00320
00321
00322 long **cnbn;
00323
00324
00325
00326
00327 long maxmultip;
00328
00329
00330 long **statdom;
00331
00332
00333
00334
00335 long *nstatdom;
00336
00337
00338
00339 double tol;
00340
00341
00342 long *coarsenadjac;
00343
00344 long **coarseadjac;
00345
00346 long *coarseidentif;
00347
00348
00349
00350
00351 FILE *out;
00352
00353
00354 long *surfidentif;
00355
00356
00357 long nsurfnod;
00358
00359 long *surfnod;
00360
00361
00362 long ncurves;
00363
00364 long *start;
00365
00366 long *end;
00367
00368 long **members;
00369
00370 long *nmembers;
00371
00372 long *nedges;
00373
00374
00375 long *ndomid;
00376
00377 long **domid;
00378
00379
00380 long ***memcor;
00381
00382
00383 long reduce_flag;
00384
00385 long *curnod;
00386
00387 long nsurf;
00388
00389 long **surfmembers;
00390
00391 long *nsurfmembers;
00392
00393 long **surfdom;
00394
00395 long **surfnodmark;
00396
00397 long *subdomneib;
00398
00399 long nsubdomneib;
00400
00401 long **subdomsurf;
00402
00403 long *nsurfcentres;
00404
00405 long **surfcenters;
00406
00407 long *surfnodpoint;
00408
00409
00410 long *automember;
00411 double **realcg;
00412
00413 };
00414 #endif