Skip to content

Commit

Permalink
removes the weight from ref_metric_lp and ref_metric_local_scale
Browse files Browse the repository at this point in the history
  • Loading branch information
Mike Park authored and Mike Park committed Oct 5, 2022
1 parent 969f9dc commit a01ee39
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 166 deletions.
34 changes: 9 additions & 25 deletions src/ref_metric.c
Expand Up @@ -2187,15 +2187,14 @@ REF_FCN REF_STATUS ref_metric_buffer_at_complexity(REF_DBL *metric,
}

REF_FCN REF_STATUS ref_metric_lp(REF_DBL *metric, REF_GRID ref_grid,
REF_DBL *scalar, REF_DBL *weight,
REF_DBL *scalar,
REF_RECON_RECONSTRUCTION reconstruction,
REF_INT p_norm, REF_DBL gradation,
REF_DBL target_complexity) {
RSS(ref_recon_hessian(ref_grid, scalar, metric, reconstruction), "recon");
RSS(ref_recon_roundoff_limit(metric, ref_grid),
"floor metric eigenvalues based on grid size and solution jitter");
RSS(ref_metric_local_scale(metric, weight, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
target_complexity),
"gradation at complexity");
Expand All @@ -2211,8 +2210,7 @@ REF_FCN REF_STATUS ref_metric_lp_mixed(REF_DBL *metric, REF_GRID ref_grid,
RSS(ref_recon_hessian(ref_grid, scalar, metric, reconstruction), "recon");
RSS(ref_recon_roundoff_limit(metric, ref_grid),
"floor metric eigenvalues based on grid size and solution jitter");
RSS(ref_metric_local_scale(metric, NULL, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");
RSS(ref_metric_gradation_at_complexity_mixed(metric, ref_grid, gradation,
target_complexity),
"gradation at complexity");
Expand Down Expand Up @@ -2435,8 +2433,7 @@ REF_FCN REF_STATUS ref_metric_multigrad(REF_DBL *metric, REF_GRID ref_grid,

RSS(ref_recon_roundoff_limit(metric, ref_grid),
"floor metric eigenvalues based on grid size and solution jitter");
RSS(ref_metric_local_scale(metric, NULL, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
target_complexity),
"gradation at complexity");
Expand Down Expand Up @@ -2505,8 +2502,7 @@ REF_FCN REF_STATUS ref_metric_moving_multiscale(
ref_free(jac);
ref_free(hess);

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
"gradation at complexity");
Expand All @@ -2523,17 +2519,16 @@ REF_FCN REF_STATUS ref_metric_eig_bal(REF_DBL *metric, REF_GRID ref_grid,
RSS(ref_recon_roundoff_limit(metric, ref_grid),
"floor metric eigenvalues based on grid size and solution jitter");
RSS(ref_metric_histogram(metric, ref_grid, "hess.tec"), "histogram");
RSS(ref_metric_local_scale(metric, NULL, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
target_complexity),
"gradation at complexity");

return REF_SUCCESS;
}

REF_FCN REF_STATUS ref_metric_local_scale(REF_DBL *metric, REF_DBL *weight,
REF_GRID ref_grid, REF_INT p_norm) {
REF_FCN REF_STATUS ref_metric_local_scale(REF_DBL *metric, REF_GRID ref_grid,
REF_INT p_norm) {
REF_NODE ref_node = ref_grid_node(ref_grid);
REF_INT i, node;
REF_INT dimension;
Expand Down Expand Up @@ -2569,16 +2564,6 @@ REF_FCN REF_STATUS ref_metric_local_scale(REF_DBL *metric, REF_DBL *weight,
}
}

/* weight in now length scale, convert to eigenvalue */
if (NULL != weight) {
each_ref_node_valid_node(ref_node, node) {
if (weight[node] > 0.0) {
for (i = 0; i < 6; i++)
metric[i + 6 * node] /= (weight[node] * weight[node]);
}
}
}

return REF_SUCCESS;
}

Expand Down Expand Up @@ -2637,8 +2622,7 @@ REF_FCN REF_STATUS ref_metric_opt_goal(REF_DBL *metric, REF_GRID ref_grid,
RSS(ref_recon_roundoff_limit(metric, ref_grid),
"floor metric eigenvalues based on grid size and solution jitter");

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p_norm),
"local scale lp norm");
RSS(ref_metric_local_scale(metric, ref_grid, p_norm), "local scale lp norm");

RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
target_complexity),
Expand Down
6 changes: 3 additions & 3 deletions src/ref_metric.h
Expand Up @@ -125,7 +125,7 @@ REF_FCN REF_STATUS ref_metric_multigrad(REF_DBL *metric, REF_GRID ref_grid,
REF_DBL *grad, REF_INT p_norm,
REF_DBL gradation, REF_DBL complexity);
REF_FCN REF_STATUS ref_metric_lp(REF_DBL *metric, REF_GRID ref_grid,
REF_DBL *scalar, REF_DBL *weight,
REF_DBL *scalar,
REF_RECON_RECONSTRUCTION reconstruction,
REF_INT p_norm, REF_DBL gradation,
REF_DBL complexity);
Expand All @@ -143,8 +143,8 @@ REF_FCN REF_STATUS ref_metric_eig_bal(REF_DBL *metric, REF_GRID ref_grid,
REF_RECON_RECONSTRUCTION reconstruction,
REF_INT p_norm, REF_DBL gradation,
REF_DBL complexity);
REF_FCN REF_STATUS ref_metric_local_scale(REF_DBL *metric, REF_DBL *weight,
REF_GRID ref_grid, REF_INT p_norm);
REF_FCN REF_STATUS ref_metric_local_scale(REF_DBL *metric, REF_GRID ref_grid,
REF_INT p_norm);
REF_FCN REF_STATUS ref_metric_opt_goal(REF_DBL *metric, REF_GRID ref_grid,
REF_INT nequations, REF_DBL *solution,
REF_RECON_RECONSTRUCTION reconstruction,
Expand Down
137 changes: 19 additions & 118 deletions src/ref_metric_test.c
Expand Up @@ -126,7 +126,6 @@ int main(int argc, char *argv[]) {
REF_INT fixed_point_pos = REF_EMPTY;
REF_INT curve_limit_pos = REF_EMPTY;
REF_INT parent_pos = REF_EMPTY;
REF_INT wlp_pos = REF_EMPTY;
REF_INT moving_pos = REF_EMPTY;
REF_INT explore_pos = REF_EMPTY;
REF_INT multigrad_pos = REF_EMPTY;
Expand Down Expand Up @@ -166,8 +165,6 @@ int main(int argc, char *argv[]) {
REF_NOT_FOUND, "arg search");
RXS(ref_args_find(argc, argv, "--parent", &parent_pos), REF_NOT_FOUND,
"arg search");
RXS(ref_args_find(argc, argv, "--wlp", &wlp_pos), REF_NOT_FOUND,
"arg search");
RXS(ref_args_find(argc, argv, "--lp", &lp_pos), REF_NOT_FOUND, "arg search");
RXS(ref_args_find(argc, argv, "--combine", &combine_pos), REF_NOT_FOUND,
"arg search");
Expand Down Expand Up @@ -290,101 +287,6 @@ int main(int argc, char *argv[]) {
return 0;
}

if (wlp_pos != REF_EMPTY) {
REF_GRID ref_grid;
REF_DBL *scalar, *weight, *metric;
REF_INT p;
REF_DBL gradation, complexity, current_complexity, hmin, hmax;
REF_RECON_RECONSTRUCTION reconstruction = REF_RECON_L2PROJECTION;
REF_INT ldim, wdim;
REIS(1, wlp_pos,
"required args: --wlp grid.meshb scalar.solb weight.solb "
"p gradation complexity output-metric.solb");
if (9 > argc) {
printf(
"required args: --wlp grid.meshb scalar.solb weight.solb "
"p gradation complexity output-metric.solb\n");
return REF_FAILURE;
}
hmin = -1.0;
hmax = -1.0;
if (REF_EMPTY != hmax_pos) {
if (hmax_pos >= argc - 1) {
printf("option missing value: --hmax max_edge_length\n");
return REF_FAILURE;
}
hmax = atof(argv[hmax_pos + 1]);
}

p = atoi(argv[5]);
gradation = atof(argv[6]);
complexity = atof(argv[7]);
if (REF_EMPTY != kexact_pos) {
reconstruction = REF_RECON_KEXACT;
}
if (ref_mpi_once(ref_mpi)) {
printf("Lp=%d\n", p);
printf("gradation %f\n", gradation);
printf("complexity %f\n", complexity);
printf("reconstruction %d\n", (int)reconstruction);
printf("hmin %f hmax %f (negative is inactive)\n", hmin, hmax);
printf("buffer %d (negative is inactive)\n", buffer_pos);
}

if (ref_mpi_once(ref_mpi)) printf("reading grid %s\n", argv[2]);
if (ref_mpi_para(ref_mpi)) {
if (ref_mpi_once(ref_mpi)) printf("part %s\n", argv[2]);
RSS(ref_part_by_extension(&ref_grid, ref_mpi, argv[2]), "part");
ref_mpi_stopwatch_stop(ref_mpi, "part mesh");
} else {
if (ref_mpi_once(ref_mpi)) printf("import %s\n", argv[2]);
RSS(ref_import_by_extension(&ref_grid, ref_mpi, argv[2]), "import");
ref_mpi_stopwatch_stop(ref_mpi, "import mesh");
}

if (ref_mpi_once(ref_mpi)) printf("reading scalar %s\n", argv[3]);
RSS(ref_part_scalar(ref_grid, &ldim, &scalar, argv[3]),
"unable to load scalar in position 3");
REIS(1, ldim, "expected one scalar");
ref_mpi_stopwatch_stop(ref_mpi, "read scalar");

if (ref_mpi_once(ref_mpi)) printf("reading weight %s\n", argv[4]);
RSS(ref_part_scalar(ref_grid, &wdim, &weight, argv[4]),
"unable to load weight in position 4");
REIS(1, wdim, "expected one weight");

ref_malloc(metric, 6 * ref_node_max(ref_grid_node(ref_grid)), REF_DBL);
RSS(ref_metric_lp(metric, ref_grid, scalar, weight, reconstruction, p,
gradation, complexity),
"lp norm");
ref_mpi_stopwatch_stop(ref_mpi, "compute metric");
if (REF_EMPTY != buffer_pos) {
RSS(ref_metric_buffer_at_complexity(metric, ref_grid, complexity),
"buffer at complexity");
}
if (hmin > 0.0 || hmax > 0.0) {
RSS(ref_metric_limit_h_at_complexity(metric, ref_grid, hmin, hmax,
complexity),
"limit at complexity");
}
RSS(ref_metric_complexity(metric, ref_grid, &current_complexity), "cmp");
if (ref_mpi_once(ref_mpi))
printf("actual complexity %e\n", current_complexity);
RSS(ref_metric_to_node(metric, ref_grid_node(ref_grid)), "set node");
ref_free(metric);
ref_free(weight);
ref_free(scalar);

if (ref_mpi_once(ref_mpi)) printf("writing metric %s\n", argv[8]);
RSS(ref_gather_metric(ref_grid, argv[8]), "export curve limit metric");
ref_mpi_stopwatch_stop(ref_mpi, "write metric");

RSS(ref_grid_free(ref_grid), "free");
RSS(ref_mpi_free(ref_mpi), "free");
RSS(ref_mpi_stop(), "stop");
return 0;
}

if (lp_pos != REF_EMPTY) {
REF_GRID ref_grid;
REF_DBL *scalar, *metric;
Expand Down Expand Up @@ -438,8 +340,8 @@ int main(int argc, char *argv[]) {
ref_mpi_stopwatch_stop(ref_mpi, "read scalar");

ref_malloc(metric, 6 * ref_node_max(ref_grid_node(ref_grid)), REF_DBL);
RSS(ref_metric_lp(metric, ref_grid, scalar, NULL, reconstruction, p,
gradation, complexity),
RSS(ref_metric_lp(metric, ref_grid, scalar, reconstruction, p, gradation,
complexity),
"lp norm");
ref_mpi_stopwatch_stop(ref_mpi, "compute metric");
if (REF_EMPTY != buffer_pos) {
Expand Down Expand Up @@ -524,12 +426,12 @@ int main(int argc, char *argv[]) {
ref_malloc(metric1, 6 * ref_node_max(ref_grid_node(ref_grid)), REF_DBL);
ref_malloc(metric2, 6 * ref_node_max(ref_grid_node(ref_grid)), REF_DBL);

RSS(ref_metric_lp(metric1, ref_grid, scalar1, NULL, reconstruction, p,
gradation, complexity),
RSS(ref_metric_lp(metric1, ref_grid, scalar1, reconstruction, p, gradation,
complexity),
"lp norm");
ref_mpi_stopwatch_stop(ref_mpi, "multiscale metric1");
RSS(ref_metric_lp(metric2, ref_grid, scalar2, NULL, reconstruction, p,
gradation, complexity),
RSS(ref_metric_lp(metric2, ref_grid, scalar2, reconstruction, p, gradation,
complexity),
"lp norm");
ref_mpi_stopwatch_stop(ref_mpi, "multiscale metric2");

Expand Down Expand Up @@ -755,8 +657,8 @@ int main(int argc, char *argv[]) {
each_ref_node_valid_node(ref_grid_node(ref_grid), node) {
scalar[node] = field[node + ldim * var];
}
RSS(ref_metric_lp(metric, ref_grid, scalar, NULL, reconstruction, p,
gradation, complexity),
RSS(ref_metric_lp(metric, ref_grid, scalar, reconstruction, p, gradation,
complexity),
"lp norm");
ref_mpi_stopwatch_stop(ref_mpi, "compute metric");
if (REF_EMPTY != buffer_pos) {
Expand Down Expand Up @@ -859,8 +761,7 @@ int main(int argc, char *argv[]) {
ref_mpi_stopwatch_stop(ref_mpi, "timestep processed");
}

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p),
"local lp norm scaling");
RSS(ref_metric_local_scale(metric, ref_grid, p), "local lp norm scaling");
ref_mpi_stopwatch_stop(ref_mpi, "local scale metric");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
Expand Down Expand Up @@ -1113,8 +1014,8 @@ int main(int argc, char *argv[]) {

if (ref_mpi_once(ref_mpi)) printf("multiscale metric\n");
ref_malloc(metric, 6 * ref_node_max(ref_grid_node(ref_grid)), REF_DBL);
RSS(ref_metric_lp(metric, ref_grid, scalar, NULL, reconstruction, p,
gradation, complexity),
RSS(ref_metric_lp(metric, ref_grid, scalar, reconstruction, p, gradation,
complexity),
"lp");

if (ref_mpi_once(ref_mpi)) printf("imply current metric\n");
Expand Down Expand Up @@ -1247,7 +1148,7 @@ int main(int argc, char *argv[]) {
RSS(ref_node_ghost_dbl(ref_grid_node(ref_grid), metric, 6),
"update ghosts");

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p), "local scale");
RSS(ref_metric_local_scale(metric, ref_grid, p), "local scale");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
"gradation");
Expand Down Expand Up @@ -1313,7 +1214,7 @@ int main(int argc, char *argv[]) {
RSS(ref_node_ghost_dbl(ref_grid_node(ref_grid), metric, 6),
"update ghosts");

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p), "local scale");
RSS(ref_metric_local_scale(metric, ref_grid, p), "local scale");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
"gradation");
Expand Down Expand Up @@ -1385,7 +1286,7 @@ int main(int argc, char *argv[]) {
RSS(ref_node_ghost_dbl(ref_grid_node(ref_grid), metric, 6),
"update ghosts");

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p), "local scale");
RSS(ref_metric_local_scale(metric, ref_grid, p), "local scale");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
"gradation");
Expand Down Expand Up @@ -1469,7 +1370,7 @@ int main(int argc, char *argv[]) {
RSS(ref_node_ghost_dbl(ref_grid_node(ref_grid), metric, 6),
"update ghosts");

RSS(ref_metric_local_scale(metric, NULL, ref_grid, p), "local scale");
RSS(ref_metric_local_scale(metric, ref_grid, p), "local scale");
RSS(ref_metric_gradation_at_complexity(metric, ref_grid, gradation,
complexity),
"gradation");
Expand Down Expand Up @@ -3051,8 +2952,8 @@ int main(int argc, char *argv[]) {
0.02 * pow(ref_node_xyz(ref_node, 1, node), 2) +
0.03 * pow(ref_node_xyz(ref_node, 2, node), 2);
}
RSS(ref_metric_lp(metric, ref_grid, scalar, NULL, REF_RECON_L2PROJECTION, 2,
1.5, 1000.0),
RSS(ref_metric_lp(metric, ref_grid, scalar, REF_RECON_L2PROJECTION, 2, 1.5,
1000.0),
"lp norm");
ref_free(metric);
ref_free(scalar);
Expand All @@ -3072,8 +2973,8 @@ int main(int argc, char *argv[]) {
each_ref_node_valid_node(ref_grid_node(ref_grid), node) {
scalar[node] = 0.5;
}
RSS(ref_metric_lp(metric, ref_grid, scalar, NULL, REF_RECON_L2PROJECTION, 2,
1.5, 1000.0),
RSS(ref_metric_lp(metric, ref_grid, scalar, REF_RECON_L2PROJECTION, 2, 1.5,
1000.0),
"const metric");
RSS(ref_metric_complexity(metric, ref_grid, &current_complexity), "cmp");
RWDS(1000.0, current_complexity, -1.0, "complexity");
Expand Down

0 comments on commit a01ee39

Please sign in to comment.