[petsc-users] Inquiry about metric-based adaptation using MMG in petsc

Jed Brown jed at jedbrown.org
Fri Sep 13 13:22:54 CDT 2024


This error message is coming from the following:

$ rg -B4 'Global metric normalization factor must be in'
src/dm/impls/plex/plexmetric.c
1308-    PetscCall(PetscDSSetObjective(ds, 0, detMFunc));
1309-    PetscCall(DMPlexComputeIntegralFEM(dmDet, determinant, &integral, NULL));
1310-  }
1311-  realIntegral = PetscRealPart(integral);
1312:  PetscCheck(realIntegral > 1.0e-30, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Global metric normalization factor must be in (0, inf). Is the input metric positive-definite?");

Perhaps you can independently check what integrand is being provided. It's probably zero or negative. You could apply this patch so the error message will report a value.


diff --git i/src/dm/impls/plex/plexmetric.c w/src/dm/impls/plex/plexmetric.c
index 61caeed28de..906cb394027 100644
--- i/src/dm/impls/plex/plexmetric.c
+++ w/src/dm/impls/plex/plexmetric.c
@@ -1309,7 +1309,7 @@ PetscErrorCode DMPlexMetricNormalize(DM dm, Vec metricIn, PetscBool restrictSize
     PetscCall(DMPlexComputeIntegralFEM(dmDet, determinant, &integral, NULL));
   }
   realIntegral = PetscRealPart(integral);
-  PetscCheck(realIntegral > 1.0e-30, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Global metric normalization factor must be in (0, inf). Is the input metric positive-definite?");
+  PetscCheck(realIntegral > 1.0e-30, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Global metric normalization factor %g must be in (0, inf). Is the input metric positive-definite?", (double)realIntegral);
   factGlob = PetscPowReal(target / realIntegral, 2.0 / dim);
 
   /* Apply local scaling */


neil liu <liufield at gmail.com> writes:

> Dear Petsc developers and users,
>
> I am  trying to explore adaptive mesh refinement (tetradedra) with Petsc.
> It seems case 12 ($PETSC DIR/src/snes/tutorials/ex12.c, from paper,
> https://urldefense.us/v3/__https://arxiv.org/pdf/2201.02806__;!!G_uCfscf7eWS!ZEwaHkvYc_IrjycFr8LiNi-nZcFqu0ZpsydAAomxptQ6C0xkBs3qhn5ba31Z4vipKf4mTrqDm8A5S65DDD_xFg$ ) is a good example.
> However when I tried,
> ./ex12 -run_type full -dm_plex_dim 3 -dm_distribute -dm_plex_box_faces
> 10,10,10 -bc_type dirichlet -petscspace_degree 1 -variable_coefficient ball
> -snes_converged
> _reason ::ascii_info_detail -ksp_type cg -pc_type sor -snes_adapt_sequence
> 3 -adaptor_target_num 1000 -dm_plex_metric_h_max  0.5  -dm_adaptor mmg
>       L_2 Error: 1.55486
>       Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 2
>
> it shows the following error,
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Argument out of range
> [0]PETSC ERROR: Global metric normalization factor must be in (0, inf). Is
> the input metric positive-definite?
>
> Do  you have any suggestions here?
>
> Thanks,
>
> Xiaodong


More information about the petsc-users mailing list