54 std::cout<<
"Usage: "<<cmd<<
" [options] infile\n"
56 <<
" -h, --help\n\tHelp! Prints this message.\n"
57 <<
" -v, --verbose\n\tVerbose output.\n"
58 <<
" -c factor, --coarsen factor\n\tCoarsening factor is some number greater than 1, e.g. -c 2 with half the mesh resolution.\n"
59 <<
" -o filename, --output filename\n\tName of outfile -- without the extension.\n";
63 int parse_arguments(
int argc,
char **argv, std::string &infilename, std::string &outfilename,
bool &verbose,
double &factor){
74 struct option longOptions[] = {
76 {
"verbose", 0, 0,
'v'},
77 {
"coarsen", optional_argument, 0,
'c'},
78 {
"output", optional_argument, 0,
'o'},
84 const char *shortopts =
"hvc:o:";
89 c = getopt_long(argc, argv, shortopts, longOptions, &optionIndex);
101 factor = atof(optarg);
104 outfilename = std::string(optarg);
109 std::cerr<<
"ERROR: unknown option or missing argument\n";
113 std::cerr<<
"ERROR: missing argument\n";
118 std::cerr<<
"ERROR: getopt returned unrecognized character code\n";
123 infilename = std::string(argv[argc-1]);
133 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
136 std::cout<<operation<<
": step in quality (mean, min): ("<<qmean<<
", "<<qmin<<
")"<<std::endl;
139 int main(
int argc,
char **argv){
140 int required_thread_support=MPI_THREAD_SINGLE;
141 int provided_thread_support;
142 MPI_Init_thread(&argc, &argv, required_thread_support, &provided_thread_support);
143 assert(required_thread_support==provided_thread_support);
146 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
153 std::string infilename, outfilename;
166 time_metric = (
get_wtime() - time_metric);
175 double L_up = sqrt(2.0);
181 double time_coarsen=0, time_swapping=0;
182 for(
size_t i=0;i<5;i++){
184 std::cout<<
"INFO: Sweep "<<i<<std::endl;
187 coarsen.
coarsen(L_up, L_up,
true);
204 time_smooth = (
get_wtime() - time_smooth);
209 std::cout<<
"Times for metric, coarsen, swapping, smoothing = "<<time_metric<<
", "<<time_coarsen<<
", "<<time_swapping<<
", "<<time_smooth<<std::endl;
211 if(outfilename.size()==0)
void smart_laplacian(int max_iterations=10, double quality_tol=-1.0)
int main(int argc, char **argv)
void update_mesh()
Update the metric field on the mesh.
void cout_quality(const Mesh< double > *mesh, std::string operation)
Performs 2D mesh coarsening.
double get_qmean() const
Get the element mean quality in metric space.
Performs edge/face swapping.
double get_qmin() const
Get the element minimum quality in metric space.
void coarsen(real_t L_low, real_t L_max, bool enable_sliver_deletion=false)
Constructs metric tensor field which encodes anisotropic edge size information.
void generate_mesh_metric(double resolution_scaling_factor)
void swap(real_t quality_tolerance)
Applies Laplacian smoothen in metric space.
int parse_arguments(int argc, char **argv, std::string &infilename, std::string &outfilename, bool &verbose, double &factor)
void optimisation_linf(int max_iterations=10, double quality_tol=-1.0)