Matthew Knepley <[email protected]> 于2022年10月5日周三 00:33写道:
> On Tue, Oct 4, 2022 at 3:19 PM Zongze Yang <[email protected]> wrote: > >> Hi everyone, >> >> I am learning how to use the `DMAdaptLabel` for `DMPlex`, and found the >> example `src/dm/impls/plex/tests/ex20.c` which label one cell to refine. >> >> 1. This example is just a uniform refinement when using the following >> command. (see attached pdfs for the results). >> ``` >> [real-int32-gcc] >> z2yang@ws5:~/opt/firedrake/real-int32-gcc/petsc/src/dm/impls/plex/tests$ >> ./ex20 -dm_plex_box_faces 3,3 -dm_coord_space 0 -pre_adapt_dm_view >> ascii::ascii_info -post_adapt_dm_view draw:tikz:figure2.tex >> ``` >> Is this expected for this example? >> > > Hi Zongze, > > Yes, I agree this is not easy to see. If you give -dm_plex_transform_view, > you can see the kind of transform being used > > knepley/pylith $:/PETSc3/petsc/petsc-pylith$ PETSC_ARCH=arch-pylith-opt > make -j8 -f ./gmakefile test search="dm_impls_plex_tests-ex20_ > 2d" TIMEOUT=5000 EXTRA_OPTIONS="-dm_plex_transform_view" > Using MAKEFLAGS: --jobserver-fds=3,4 -j -- > EXTRA_OPTIONS=-dm_plex_transform_view TIMEOUT=5000 > search=dm_impls_plex_tests-ex20_2d > TEST > arch-pylith-opt/tests/counts/dm_impls_plex_tests-ex20_2d.counts > ok dm_impls_plex_tests-ex20_2d > not ok diff-dm_impls_plex_tests-ex20_2d # Error code: 1 > # 11a12,14 > # > DMPlexTransform Object: 1 MPI process > # > type: refine_regular > # > Regular refinement DMPlexTransform_0x84000000_1 > > You can see that it is regular refinement, so it ignores the input and > refines everything. If you change it, you can get adaptive refinement, > > knepley/pylith $:/PETSc3/petsc/petsc-pylith$ PETSC_ARCH=arch-pylith-opt > make -j8 -f ./gmakefile test search="dm_impls_plex_tests-ex20_ > 2d" TIMEOUT=5000 EXTRA_OPTIONS="-pre_adapt_dm_view draw > -post_adapt_dm_view draw -draw_pause -1 -dm_plex_transform_type refine_sbr" > > I attached the plot. > > Hi Matt, Thanks for your clear explanation. Now, I see that by setting different transform types I can refine the mesh by different algorithms. But why the refinement algorithms are classified as transform? 2. I found there is a function named `DMAdaptLabel_Plex`, and >> `DMAdaptLabel` did not call that function when the type of the dm is >> `DMPlex`. Is the function `DMAdaptLabel_Plex` still in use? >> > > No. I rewrote all the transformations last year. I think the new form is > much smaller, cleaner, and more performant. I should delete this function, > but I am finishing > up the review of all adaptive refinement with Joe Wallwork at Imperial. > > >> 3. `DMAdaptLabel` seems to lack some useful information when I use the >> wrong adaptor. For example, if I set `-dm_adaptor mmg`, then the process >> will give a segment fault because the `metric` passed to >> `DMAdaptMetric_Mmg_Plex` is NULL, see the output below: >> ``` >> [real-int32-gcc] >> z2yang@ws5:~/opt/firedrake/real-int32-gcc/petsc/src/dm/impls/plex/tests$ >> ./ex20 -dm_plex_box_faces 3,3 -dm_coord_space 0 -pre_adapt_dm_view >> draw:tikz:figure1.tex -post_adapt_dm_view draw:tikz:figure2.tex -dm_adaptor >> mmg >> [0]PETSC ERROR: >> ------------------------------------------------------------------------ >> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, >> probably memory access out of range >> [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger >> [0]PETSC ERROR: or see https://petsc.org/release/faq/#valgrind and >> https://petsc.org/release/faq/ >> [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, >> and run >> [0]PETSC ERROR: to get more information on the crash. >> [0]PETSC ERROR: Run with -malloc_debug to check if memory corruption is >> causing the crash. >> Abort(59) on node 0 (rank 0 in comm 0): application called >> MPI_Abort(MPI_COMM_WORLD, 59) - process 0 >> ``` >> > > Hmm, I at least get an error message: > > # [0]PETSC ERROR: --------------------- Error Message > -------------------------------------------------------------- > # [0]PETSC ERROR: Null argument, when expecting valid pointer > # [0]PETSC ERROR: Null Pointer: Parameter # 1 > # [0]PETSC ERROR: WARNING! There are option(s) set that were not > used! Could be the program crashed before they were used or a spelling > mistake, etc! > # [0]PETSC ERROR: Option left: name:-post_adapt_dm_view value: > ascii::ascii_info > # [0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble > shooting. > # [0]PETSC ERROR: Petsc Development GIT revision: > v3.17.4-1472-ga50e2f9f007 GIT Date: 2022-09-23 13:01:31 +0000 > # [0]PETSC ERROR: ../ex20 on a arch-master-debug named > MacBook-Pro.local by knepley Tue Oct 4 17:29:20 2022 > # [0]PETSC ERROR: Configure options --PETSC_ARCH=arch-master-debug > --download-bamg --download-bison --download-chaco --download-ctetgen > --download-egads --download-eigen --download-exodusii --download-fftw > --download-hpddm --download-ks --download-libceed --download-libpng > --download-metis --download-ml --download-mmg --download-mumps > --download-netcdf --download-opencascade --download-p4est > --download-parmetis --download-parmmg --download-pnetcdf > --download-pragmatic --download-ptscotch --download-scalapack > --download-slepc --download-suitesparse --download-superlu_dist > --download-tetgen --download-triangle > --with-cmake-exec=/PETSc3/petsc/apple/bin/cmake > --with-ctest-exec=/PETSc3/petsc/apple/bin/ctest > --with-hdf5-dir=/PETSc3/petsc/apple --with-mpi-dir=/PETSc3/petsc/apple > --with-petsc4py=1 --with-shared-libraries --with-slepc --with-zlib > --download-muparser > # [0]PETSC ERROR: #1 VecViewFromOptions() at > /PETSc3/petsc/petsc-dev/src/vec/vec/interface/vector.c:627 > # [0]PETSC ERROR: #2 DMAdaptMetric_Mmg_Plex() at > /PETSc3/petsc/petsc-dev/src/dm/impls/plex/adaptors/mmg/mmgadapt.c:130 > # [0]PETSC ERROR: #3 DMAdaptLabel() at > /PETSc3/petsc/petsc-dev/src/dm/interface/dmgenerate.c:179 > # [0]PETSC ERROR: #4 main() at > /PETSc3/petsc/petsc-dev/src/dm/impls/plex/tests/ex20.c:24 > # [0]PETSC ERROR: PETSc Option Table entries: > # [0]PETSC ERROR: -dm_adaptor mmg > # [0]PETSC ERROR: -dm_coord_space 0 > # [0]PETSC ERROR: -dm_plex_box_faces 3,3 > # [0]PETSC ERROR: -post_adapt_dm_view ascii::ascii_info > # [0]PETSC ERROR: -pre_adapt_dm_view ascii::ascii_info > # [0]PETSC ERROR: ----------------End of Error Message -------send > entire error message to [email protected] > # application called MPI_Abort(MPI_COMM_SELF, 85) - process 0 > ok dm_impls_plex_tests-ex20_2d # SKIP Command failed so no diff > I should use `--with-debugging=yes` when configuring petsc for more information. > I agree that it would be nice to segregate the adaptors into those that > work with labels and those that work with metrics, but I thought we could > have an automated system to convert between metrics and labels. However, I > have not implemented it yet, since I am still trying to figure out exactly > how everything should work. > That would be really nice! Thanks, Zongze Thanks, > > Matt > > >> Thanks, >> Zongze Yang >> > > > -- > 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.cse.buffalo.edu/~knepley/> >
