[petsc-users] FEM & conformal mesh
Yann Jobic
yann.jobic at univ-amu.fr
Thu Feb 15 07:38:25 CST 2018
Hello Matt,
Le 15/02/2018 à 00:41, Matthew Knepley a écrit :
> On Tue, Jan 23, 2018 at 11:14 AM, Yann Jobic <yann.jobic at univ-amu.fr
> <mailto:yann.jobic at univ-amu.fr>> wrote:
>
> Hello,
>
> I'm trying to understand the numbering of quadrature points in
> order to solve the FEM system, and how you manage this numbering
> in order to allow conformal mesh. I looked in several files in
> order to understand. Here's what
>
>
> I need to understand what you mean by "quadrature points". I mean the
> following thing:
>
> I want to do an integral over the domain for a variational form:
> <v, f(u)> = \int_\Omega v . f(u, x)
> Now I can break this up into a sum of integrals over each element
> because integrals are additive
> = \sum_T \int_T v . f(u)
> And we normally integrate over a reference element T_r instead
> = \sum_T \int_{T_r} v_r . f_r(u_r, x) |J|
> And then we approximate these cell integrals with quadrature
> = \sum_T \sum_q v_r(x_q) . f_r(u_r(x_q), x_q) |J(x_q)| w_q
> The quadrature points x_q and weights w_q are defined on the
> reference element. This means they
> are not shared by definition.
>
> Does this make sense?
Perfectly. I was mixing the notions of nodes of an element, and the
quadrature points. Thanks a lot for the clarification !
Best regards,
Yann
>
> Thanks,
>
> Matt
>
> i understood so far (which is not far...)
> I took the example of the jacobian calculus.
>
> I found this comment in dmplexsnes.c, which explains the basic idea:
> 1725: /* 1: Get sizes from dm and dmAux */
> 1726: /* 2: Get geometric data */
> 1727: /* 3: Handle boundary values */
> 1728: /* 4: Loop over domain */
> 1729: /* Extract coefficients */
> 1730: /* Loop over fields */
> 1731: /* Set tiling for FE*/
> 1732: /* Integrate FE residual to get elemVec */
> [...]
> 1740: /* Loop over domain */
> 1741: /* Add elemVec to locX */
>
> I almost get that. The critical part should be :
> loop over fieldI
> 2434: PetscFEGetQuadrature(fe, &quad);
> 2435: PetscFEGetDimension(fe, &Nb);
> 2436: PetscFEGetTileSizes(fe, NULL, &numBlocks, NULL,
> &numBatches);
> 2437: PetscQuadratureGetData(quad, NULL, NULL, &numQuadPoints,
> NULL, NULL);
> 2438: blockSize = Nb*numQuadPoints;
> 2439: batchSize = numBlocks * blockSize;
> 2440: PetscFESetTileSizes(fe, blockSize, numBlocks, batchSize,
> numBatches);
> 2441: numChunks = numCells / (numBatches*batchSize);
> 2442: Ne = numChunks*numBatches*batchSize;
> 2443: Nr = numCells % (numBatches*batchSize);
> 2444: offset = numCells - Nr;
> 2445: for (fieldJ = 0; fieldJ < Nf; ++fieldJ) {
>
> From there, we can have the numbering with (in dtfe.c)
> basic idea :
> 6560: $ Loop over element matrix entries (f,fc,g,gc --> i,j):
> Which leads to :
> 4511: PetscPrintf(PETSC_COMM_SELF, "Element matrix for
> fields %d and %d\n", fieldI, fieldJ);
> 4512: for (fc = 0; fc < NcI; ++fc) {
> 4513: for (f = 0; f < NbI; ++f) {
> 4514: const PetscInt i = offsetI + f*NcI+fc;
> 4515: for (gc = 0; gc < NcJ; ++gc) {
> 4516: for (g = 0; g < NbJ; ++g) {
> 4517: const PetscInt j = offsetJ + g*NcJ+gc;
> 4518: PetscPrintf(PETSC_COMM_SELF, "
> elemMat[%d,%d,%d,%d]: %g\n", f, fc, g, gc,
> PetscRealPart(elemMat[eOffset+i*totDim+j]));
> [...]
> 4525: cOffset += totDim;
> 4526: cOffsetAux += totDimAux;
> 4527: eOffset += PetscSqr(totDim);
> 4528: }
>
> But i didn't get how you can find that there are duplicates
> quadrature nodes, and how you manage them.
> Maybe i looked at the wrong part of the code ?
>
> Thanks !
>
> Best regards,
>
> Yann
>
>
> ---
> L'absence de virus dans ce courrier électronique a été vérifiée
> par le logiciel antivirus Avast.
> https://www.avast.com/antivirus <https://www.avast.com/antivirus>
>
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/%7Emk51/>
--
___________________________
Yann JOBIC
HPC engineer
IUSTI-CNRS UMR 7343 - Polytech Marseille
Technopôle de Château Gombert
5 rue Enrico Fermi
13453 Marseille cedex 13
Tel : (33) 4 91 10 69 43
Fax : (33) 4 91 10 69 69
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180215/cd5b79b4/attachment.html>
More information about the petsc-users
mailing list