<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Nicolas,</div><br class=""><blockquote type="cite" class="">I am trying to understand how the class IDs of a DM field are set</blockquote><div class=""><br class=""></div>Class ID’s are unique (internal) identifiers that every type of object of a petsc-created class shares to identify them. This is especially useful when these objects are passed around semi-opaquely by casting to PetscObject. Think of it as similar to c++ typeid <a href="https://en.cppreference.com/w/cpp/language/typeid" class="">https://en.cppreference.com/w/cpp/language/typeid</a> <div class=""><br class=""></div><div class=""><blockquote type="cite" class="">ierr = PetscFECreateDefault(PetscObjectComm((PetscObject) dmGrad), dim, coordDim, PETSC_TRUE, NULL, -1, &feGrad);CHKERRQ(ierr);<br class="">ierr = PetscDSSetDiscretization(probGrad, f, (PetscObject) feGrad);CHKERRQ(ierr);<br class="">ierr = PetscFEDestroy(&feGrad);CHKERRQ(ierr);<br class=""><br class="">Yet, when I call DMPlexComputeGradientClementInterpolant, I get the following error:<br class="">[0]PETSC ERROR: Unknown discretization type for field 0</blockquote><div class=""><br class=""></div>This function walks through all of the fields you have added to the DM and performs a sanity check (using the classics) to determine whether they are all the correct object. </div><div class=""><br class=""></div><div class="">It seems like you’ve missed a step here. Have you called DMAddField()/DMSetField() to associate your PetscFE with your plex? Note that </div><div class=""><br class=""></div><div class=""><blockquote type="cite" class="">ierr = PetscFECreateDefault(PetscObjectComm((PetscObject) dmGrad), dim, coordDim, PETSC_TRUE, NULL, -1, &feGrad);CHKERRQ(ierr);</blockquote><div class=""><br class=""></div>Does not directly tie the feGrad to your dmGrad, rather just gives it the same MPI_Comm. </div><div class=""><div class=""><br class=""><div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div>Best regards,<br class=""><br class="">Jacob Faibussowitsch<br class="">(Jacob Fai - booss - oh - vitch)<br class="">Cell: (312) 694-3391</div></div>

</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On Dec 11, 2020, at 11:02, Nicolas Barral <<a href="mailto:nicolas.barral@math.u-bordeaux.fr" class="">nicolas.barral@math.u-bordeaux.fr</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi all (and probably more specifically Matt ?)<br class=""><br class="">I am trying to understand how the class IDs of a DM field are set, and can't find it in the documentation.<br class=""><br class="">A little background, I am mimicking SNES/utils/dmadapt.c/DMAdaptorAdapt_Sequence_Private for a specific case (I'm trying to build the same kind of metric from a single sensor field, without all the SNES layer).<br class=""><br class="">I need to compute the gradient of the sensor field, using DMPlexComputeGradientClementInterpolant, for which I create a DM, to which I associate a PetscFE, a DS, like in existing code:<br class=""><br class="">PetscFE  feGrad<br class="">PetscDS  probGrad<br class=""><br class="">ierr = PetscFECreateDefault(PetscObjectComm((PetscObject) dmGrad), dim, coordDim, PETSC_TRUE, NULL, -1, &feGrad);CHKERRQ(ierr);<br class="">ierr = PetscDSSetDiscretization(probGrad, f, (PetscObject) feGrad);CHKERRQ(ierr);<br class="">ierr = PetscFEDestroy(&feGrad);CHKERRQ(ierr);<br class=""><br class="">Yet, when I call DMPlexComputeGradientClementInterpolant, I get the following error:<br class="">[0]PETSC ERROR: Unknown discretization type for field 0<br class=""><br class="">I don't fully understand what all these objects are (FE, DS and Field), and how they are related, where would that be documented ?<br class="">And what else do I need to do to make my example work ?<br class=""><br class="">Thanks<br class=""><br class="">-- <br class="">Nicolas<br class=""></div></div></blockquote></div><br class=""></div></div></body></html>