You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(2) |
Nov
(27) |
Dec
(31) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(6) |
Feb
(15) |
Mar
(33) |
Apr
(10) |
May
(46) |
Jun
(11) |
Jul
(21) |
Aug
(15) |
Sep
(13) |
Oct
(23) |
Nov
(1) |
Dec
(8) |
2005 |
Jan
(27) |
Feb
(57) |
Mar
(86) |
Apr
(23) |
May
(37) |
Jun
(34) |
Jul
(24) |
Aug
(17) |
Sep
(50) |
Oct
(24) |
Nov
(10) |
Dec
(60) |
2006 |
Jan
(47) |
Feb
(46) |
Mar
(127) |
Apr
(19) |
May
(26) |
Jun
(62) |
Jul
(47) |
Aug
(51) |
Sep
(61) |
Oct
(42) |
Nov
(50) |
Dec
(33) |
2007 |
Jan
(60) |
Feb
(55) |
Mar
(77) |
Apr
(102) |
May
(82) |
Jun
(102) |
Jul
(169) |
Aug
(117) |
Sep
(80) |
Oct
(37) |
Nov
(51) |
Dec
(43) |
2008 |
Jan
(71) |
Feb
(94) |
Mar
(98) |
Apr
(125) |
May
(54) |
Jun
(119) |
Jul
(60) |
Aug
(111) |
Sep
(118) |
Oct
(125) |
Nov
(119) |
Dec
(94) |
2009 |
Jan
(109) |
Feb
(38) |
Mar
(93) |
Apr
(88) |
May
(29) |
Jun
(57) |
Jul
(53) |
Aug
(48) |
Sep
(68) |
Oct
(151) |
Nov
(23) |
Dec
(35) |
2010 |
Jan
(84) |
Feb
(60) |
Mar
(184) |
Apr
(112) |
May
(60) |
Jun
(90) |
Jul
(23) |
Aug
(70) |
Sep
(119) |
Oct
(27) |
Nov
(47) |
Dec
(54) |
2011 |
Jan
(22) |
Feb
(19) |
Mar
(92) |
Apr
(93) |
May
(35) |
Jun
(91) |
Jul
(32) |
Aug
(61) |
Sep
(7) |
Oct
(69) |
Nov
(81) |
Dec
(23) |
2012 |
Jan
(64) |
Feb
(95) |
Mar
(35) |
Apr
(36) |
May
(63) |
Jun
(98) |
Jul
(70) |
Aug
(171) |
Sep
(149) |
Oct
(64) |
Nov
(67) |
Dec
(126) |
2013 |
Jan
(108) |
Feb
(104) |
Mar
(171) |
Apr
(133) |
May
(108) |
Jun
(100) |
Jul
(93) |
Aug
(126) |
Sep
(74) |
Oct
(59) |
Nov
(145) |
Dec
(93) |
2014 |
Jan
(38) |
Feb
(45) |
Mar
(26) |
Apr
(41) |
May
(125) |
Jun
(70) |
Jul
(61) |
Aug
(66) |
Sep
(60) |
Oct
(110) |
Nov
(27) |
Dec
(30) |
2015 |
Jan
(43) |
Feb
(67) |
Mar
(71) |
Apr
(92) |
May
(39) |
Jun
(15) |
Jul
(46) |
Aug
(63) |
Sep
(84) |
Oct
(82) |
Nov
(69) |
Dec
(45) |
2016 |
Jan
(92) |
Feb
(91) |
Mar
(148) |
Apr
(43) |
May
(58) |
Jun
(117) |
Jul
(92) |
Aug
(140) |
Sep
(49) |
Oct
(33) |
Nov
(85) |
Dec
(40) |
2017 |
Jan
(41) |
Feb
(36) |
Mar
(49) |
Apr
(41) |
May
(73) |
Jun
(51) |
Jul
(12) |
Aug
(69) |
Sep
(26) |
Oct
(43) |
Nov
(75) |
Dec
(23) |
2018 |
Jan
(86) |
Feb
(36) |
Mar
(50) |
Apr
(28) |
May
(53) |
Jun
(65) |
Jul
(26) |
Aug
(43) |
Sep
(32) |
Oct
(28) |
Nov
(52) |
Dec
(17) |
2019 |
Jan
(39) |
Feb
(26) |
Mar
(71) |
Apr
(30) |
May
(73) |
Jun
(18) |
Jul
(5) |
Aug
(10) |
Sep
(8) |
Oct
(24) |
Nov
(12) |
Dec
(34) |
2020 |
Jan
(17) |
Feb
(10) |
Mar
(6) |
Apr
(4) |
May
(15) |
Jun
(3) |
Jul
(8) |
Aug
(15) |
Sep
(6) |
Oct
(3) |
Nov
|
Dec
(4) |
2021 |
Jan
(4) |
Feb
(4) |
Mar
(21) |
Apr
(14) |
May
(13) |
Jun
(18) |
Jul
(1) |
Aug
(39) |
Sep
(1) |
Oct
|
Nov
(3) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
(2) |
Apr
(8) |
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
|
Oct
(3) |
Nov
|
Dec
|
2023 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(7) |
Sep
(3) |
Oct
|
Nov
|
Dec
(1) |
From: Vinicius C. R. <vin...@co...> - 2018-06-04 18:12:27
|
Hi, I'm trying to perform a h-refinement and a subdomain evaluation/reevaluation for each refinement iteration, prior to initializing an EquationSystems object. Currently when call init() I get a out_of_range exception. I suspect it is thrown from within its node or the element loop. Everything works fine if only I leave the subdomain evaluation prior to the refinements (i.e., I comment the subdomain reevaluation inside the refinement iterations). The refinement is made by setting the refine flag directly in each selected element and calling refine_elements() in the MeshRefinement object. I'm not using any ErrorEstimator because there's no error to be estimated a the point the refinement is performed. Can someone point me what might be the wrong assumption(s) I'm making? Is it possible for a parent element to have childrens in different subdomains? If I iterate from *MeshBase->active_local_subdomain_elements_begin ([MySubDomain])* through *MeshBase->active_local_subdomain_elements_begin ([MySubDomain])* right after a refinement step will the iterators be correctly pointing to the new subdomain's range? I'm using libmesh compiled with Petsc and MPI support, nevertheless I'm running it in a desktop and with only one node (-np1). If it helps to contextualize, I'm working on an embedded domain problem. I'd appreciate any help! Thanks, Vinícius da Costa Reis Master's Candidate Department of Civil Engineering COPPE/Federal University of Rio de Janeiro |
From: Roy S. <roy...@ic...> - 2018-05-31 15:47:00
|
On Sat, 12 May 2018, Adriano Côrtes wrote: > If we use a fixed grid with no AMR, then the code works pretty fine, > but with AMR turned on we are having the same issue as reported by > David in the mailing list thread pointed by Roy. > That is, there is a MatSetValue in a position that is not > preallocated in the BAIJ data structure. Let us know if we could be > of any help to fix this issue. The reported error is bellow. Sorry about the delayed reply. Is there any possibility you could set up a small test case that triggers the problem? I'm running through our usual test suites with --enable-blocked-storage now to see if I can set it off, but at least the initial AMR tests are still passing so I'm not sure how likely the rest are to reproduce the bug. Thanks, --- Roy |
From: Viviana P. B. <vpa...@uc...> - 2018-05-30 19:49:32
|
Hello, I am trying to solve the diffusion equation with two types of Dirichlet BCs. Let's say for example: df/dt = lapl(f). f(0<x<0.5,y,t) = 1; f(0.5<x<1,y,t) = 0. I was thinking of taking advantage of subdomains in which subdomain_id = 1 is the bulk. subdomain_id = 2 is surface1. subdomain_id=3 is surface 2. Once the subdomains are read correctly, I could assemble the RHS accordingly by using active_local_subdomain_elements_begin( subdomain_id ). I was able to successfully assemble the corresponding terms using both type of subdomains but I'm seeing that although it's solved simultaneously, the solution of one subdomain is not being projected onto the other one. Is this something I should project manually? Thank you in advance. Best, Viviana. |
From: David K. <dav...@ak...> - 2018-05-30 12:51:29
|
Hi Roy, Regarding the thread below: I wasn't interested in adaptive p-refinement per se in this case, instead my motivation was to enable different variable orders in different regions of a mesh. One use-case for this is to have 2nd order beam elements and 1st order shell elements in the same mesh, for example. The beams and shells use the same variables (u,v,w,theta_x,theta_y,theta_z), but it'd be nice to vary the orders depending on whether we're in a beam subdomain or a shell subdomain. It occurred to me that one way to do this more directly than with p-refinement would be to enable "subdomain based variable order", i.e. analogously to how we can specify whether a variable is active on a subdomain, we could also specify its order on a subdomain. Does that seem like a reasonable idea to you? And what do you think regarding the implementation, would it be a big undertaking? Best, David On Fri, Mar 9, 2018 at 3:02 PM, David Knezevic <dav...@ak...> wrote: > On Fri, Mar 9, 2018 at 2:53 PM, Roy Stogner <roy...@ic...> > wrote: > >> >> On Fri, 9 Mar 2018, David Knezevic wrote: >> >> - If I were to look into adding a special case for non-uniform 1st >>> to 2nd order refinement for LAGRANGE variables, do you think this >>> would be of interest to include that in libMesh, or would it be too >>> specific to include? (I'd like to know if it's potentially of >>> broader interest before looking further into this.) >>> >> >> Uninteresting to me, but I try like mad to avoid writing >> LAGRANGE-specific code, so if I want C0 p refinement I just use >> HIERARCHIC. Others who've coded themselves too far into a >> LAGRANGE-only corner might disagree... but from what I've seen the >> very first way to screw up is to assume that every node has a dof for >> every variable, and any code like that will *still* be broken if those >> users have second-order geometric elements (so they can support p=2) >> but start with p=1. >> >> - How complex do you think it would be to add that special case? >>> >> >> Not very. I personally don't think it's worth it when you'd just end >> up stuck restricted by p<=2 anyways, but if anyone else disagrees I'd >> still happily merge their work. ;-) >> > > > OK, thanks for that info. I'll think some more about whether this is worth > working on or not for my use-case. > > Thanks, > David > |
From: John P. <jwp...@gm...> - 2018-05-24 18:58:54
|
On Wed, May 23, 2018 at 12:54 PM, Charles Puelz <cha...@gm...> wrote: > thanks for the reply. > > this is part of a dynamic quadrature rule, so its not clear what orders I > may need, but in my current application, they are almost always greater > than 43. > I think it should be possible to use an arbitrary integral value in the QGrid class. I opened Github issue https://github.com/libMesh/libmesh/issues/1711 to keep the discussion going. -- John |
From: John P. <jwp...@gm...> - 2018-05-24 18:42:55
|
On Wed, May 23, 2018 at 6:37 PM, Viviana Palacio Betancur < vpa...@uc...> wrote: > Hello, > > I have a correct solution of my problem and now I want to run in parallel. > I'm using all the correct iterators and the program compiles and runs, > except now the solution is completely different and inconsistent to the > problem run in serial. I'm using the SuperLU solver. > > I suspect that I'm making some mistakes when running in parallel, since it > might be the case that the information is not being shared simultaneously? > Is it necessary to impose communication barriers and if so in which steps > of the solution should this be implemented? > In general it is not necessary to impose communication barriers in order to get library code working in parallel, I can't speak for any parallel code you may have written yourself. The usual issue is that you are using an active_element_iterator for assembly, which works fine in serial, but obviously breaks when you try to switch to parallel because you should be using active_local_element_iterators. Another possibility is that you are missing a system.update() call somewhere. This can cause issues if you are using current_local_solution values before they have been updated with values from the parallel solution vector, but isn't very common. Without seeing your code, it's hard to say what the issue might be... -- John |
From: <li...@si...> - 2018-05-24 11:30:06
|
Dear developers, I want to couple two variables into one system, one with the continuous FE type and the other with the discontinuous FE type. I tried system.add_variable ("p", FIRST, LAGRANGE); system.add_variable ("s", FIRST, L2_LAGRANGE); When inserting the neighbor matrix "Ken" for the second variable into the global stiffness matrix as in "example/miscellaneous_ex5", PETSc error reports that there is no MatrixPreallocation for inserting "Ken". But if I used L2_LAGRANGE for both variables, system.add_variable ("p", FIRST, L2_LAGRANGE); system.add_variable ("s", FIRST, L2_LAGRANGE); There is no error report. I believe the sparsity_patterns are different between LAGRANGE and L2_LAGRANGE. But right now I need to use different FE types for the two variable respectively. I don't know why it outputs error when I do the inserting of "Ken" ONLY for the second variable, which is already set to be L2_LAGRANGE. It seems that as long as one variable in the system is set to LAGRANGE, the whole Dof_map will build a sparsity_pattern based on the LAGRANGE type, even the other variable is set to L2_LAGRANGE type. It is hard for me to find such setting in the libmesh source codes such as dof_map.C. Best, Li Luo -----Original Messages----- From:"John Peterson" <jwp...@gm...> Sent Time:2018-05-17 00:19:38 (Thursday) To: "li.luo" <li...@si...> Cc: libmesh-users <lib...@li...> Subject: Re: [Libmesh-users] The use of MONOMIAL/XYZ FE_type On Wed, May 16, 2018 at 6:53 AM, <li...@si...> wrote: Dear developers, I tried using the MONOMIAL/XYZ FE_type as in the miscellaneous_ex5 example. After simplification under the choice of some parameters, my problem reduces to a Laplace equation with Dirichlet boundary condition. If a default FE_type is used (system.add_variable ("p", FIRST);), the Laplace problem outputs a right result, but if a MONOMIAL/XYZ FE_type is used instead (i.e. system.add_variable ("p", FIRST, XYZ)), the interior part is wrong, it isn't changed from its initial solution value (I set zero for the initial value), only the boundary is right due to the impose of Dirichlet condition. I have implemented the contribution of each element boundary flux as that in the miscellaneous_ex5 example. I don't know why it fails in the interior part. I'm not sure why XYZ would not work. It's possible that the solution is actually OK but the error arises in the ExodusII::write_discontinuous_exodusII() output? I don't think we have much testing of the XYZ FEType in libmesh or in apps which use libmesh, so it's possible that i regressed. 2. Another question is, if I want to couple two variables into one system, one with a default FE_type and the other with the MONOMIAL/XYZ FE_type, is that possible? I tried and found that when inserting the contribution of neighbor values into the matrix (as "Ken, Kne" in miscellaneous_ex5), PETSc error reports that --------------------------------------------------------------- Argument out of range! New nonzero at (13,33164) caused a malloc! MatSetValues_MPIAIJ() line 572 in src/mat/impls/aij/mpi/mpiaij.c MatSetValues() line 1106 in src/mat/interface/matrix.c add_matrix() line 699 in "unknowndirectory/"petsc_matrix.C --------------------------------------------------------------- It seems that different FE_types lead to different matrix preallocations, the MONOMIAL/XYZ FE_type allows the insert of Ken, Kne but the default FE_type does not. Can I use the same matrix preallocation for the two variables to allow such inserting? And you are using libmesh master? This is interesting, as we are discussing a similar error right now over on https://github.com/libMesh/libmesh/issues/1697 that might be related, although I suspect yours might have more to do with DG sparsity patterns. -- John -- Shenzhen Institutes of Advanced Technology, Chinese Academy of Sciences 1068 Xueyuan Avenue, Shenzhen University Town, Shenzhen, P. R. China Tel: +86 13691688103 Mail: li...@si... https://sites.google.com/site/rolyliluo/ |
From: Viviana P. B. <vpa...@uc...> - 2018-05-24 00:38:01
|
Hello, I have a correct solution of my problem and now I want to run in parallel. I'm using all the correct iterators and the program compiles and runs, except now the solution is completely different and inconsistent to the problem run in serial. I'm using the SuperLU solver. I suspect that I'm making some mistakes when running in parallel, since it might be the case that the information is not being shared simultaneously? Is it necessary to impose communication barriers and if so in which steps of the solution should this be implemented? Thank you. Best, Viviana. |
From: Charles P. <cha...@gm...> - 2018-05-23 18:54:43
|
thanks for the reply. this is part of a dynamic quadrature rule, so its not clear what orders I may need, but in my current application, they are almost always greater than 43. On Wed, May 23, 2018 at 2:51 PM, John Peterson <jwp...@gm...> wrote: > > > On Wed, May 23, 2018 at 11:10 AM, Charles Puelz <cha...@gm...> > wrote: > >> Hi everyone, >> >> I'd like to use the QGrid object as a quadrature rule, and use an order >> that's potentially >> much bigger than what is defined in the Order enum. For example, I'd like >> to do: >> >> Order foo = static_cast<Order>(100) >> >> but I am concerned about undefined behavior with this cast. Is there a >> good way >> to use QGrid with an order greater than 43? >> > > The easiest thing would probably be to just add your own enumerations up > to whatever order you need. The list can be sparse, i.e. you don't have to > list everything between 43 and 100. > > -- > John > -- Charles Puelz Postdoc UNC Math Department cpuelz.github.io |
From: John P. <jwp...@gm...> - 2018-05-23 18:52:04
|
On Wed, May 23, 2018 at 11:10 AM, Charles Puelz <cha...@gm...> wrote: > Hi everyone, > > I'd like to use the QGrid object as a quadrature rule, and use an order > that's potentially > much bigger than what is defined in the Order enum. For example, I'd like > to do: > > Order foo = static_cast<Order>(100) > > but I am concerned about undefined behavior with this cast. Is there a > good way > to use QGrid with an order greater than 43? > The easiest thing would probably be to just add your own enumerations up to whatever order you need. The list can be sparse, i.e. you don't have to list everything between 43 and 100. -- John |
From: Charles P. <cha...@gm...> - 2018-05-23 17:10:12
|
Hi everyone, I'd like to use the QGrid object as a quadrature rule, and use an order that's potentially much bigger than what is defined in the Order enum. For example, I'd like to do: Order foo = static_cast<Order>(100) but I am concerned about undefined behavior with this cast. Is there a good way to use QGrid with an order greater than 43? Thanks! -- Charles -- Charles Puelz Postdoc UNC Math Department cpuelz.github.io |
From: Chang, H. <mo...@nf...> - 2018-05-21 00:35:17
|
Hi, Now I try to solve Poisson's equation for the electrostatic field and continuity equations for plasma fluids in the same mesh. In this case, dielectric region has to be included in Poisson solve, but not in continuity equations. In LIBMESH example, I found that subdomain method make it possible to determine whether included or not. I'd like to ask about how can I make flat the uneven boundaries between two different domains. Not only is it not good to look at but it also presents difficulties in correcting errors in boundary conditions. |
From: Roy S. <roy...@ic...> - 2018-05-18 12:16:25
|
On Thu, 17 May 2018, Viviana Palacio Betancur wrote: > Thank you for your response! I was able to find the parent element. Is > there a way I could obtain the nodal information as well? Elem::node_ref, node_ptr, or node_id will get you a reference to, pointer to, or id() of a node indexed by local node number. If you're looking specifically for the mapping between local node numbers on a surface element vs on the interior_parent() then there's no single API for that, but you can call node_id or node_ptr on one and then look up the result with local_node or get_node_index on the other. --- Roy |
From: Viviana P. B. <vpa...@uc...> - 2018-05-18 03:38:40
|
Thank you for your response! I was able to find the parent element. Is there a way I could obtain the nodal information as well? Viviana Palacio Betancur PhD Student | 2016 Cohort de Pablo Group Institute for Molecular Engineering University of Chicago On Thu, May 17, 2018 at 4:34 PM, John Peterson <jwp...@gm...> wrote: > > > On Thu, May 17, 2018 at 2:58 PM, Viviana Palacio Betancur < > vpa...@uc...> wrote: > >> Hello, >> >> Currently I'm working on calculating surface normals for a 3D mesh. The >> way >> I have set up this is by extracting the surface mesh by using >> mesh->get_boundary_info().sync(mesh_surf); >> This gives me a 2D mesh that I can use for calculating element normals. >> However, I haven't been able to establish the connection between the >> element ids of the surface mesh to the ids of the original mesh. >> > > The elements in mesh_surf will have an interior_parent() which points to > the higher-dimensional element they came from. > > > -- > John > |
From: John P. <jwp...@gm...> - 2018-05-17 21:35:01
|
On Thu, May 17, 2018 at 2:58 PM, Viviana Palacio Betancur < vpa...@uc...> wrote: > Hello, > > Currently I'm working on calculating surface normals for a 3D mesh. The way > I have set up this is by extracting the surface mesh by using > mesh->get_boundary_info().sync(mesh_surf); > This gives me a 2D mesh that I can use for calculating element normals. > However, I haven't been able to establish the connection between the > element ids of the surface mesh to the ids of the original mesh. > The elements in mesh_surf will have an interior_parent() which points to the higher-dimensional element they came from. -- John |
From: Viviana P. B. <vpa...@uc...> - 2018-05-17 21:31:31
|
Hello, Currently I'm working on calculating surface normals for a 3D mesh. The way I have set up this is by extracting the surface mesh by using mesh->get_boundary_info().sync(mesh_surf); This gives me a 2D mesh that I can use for calculating element normals. However, I haven't been able to establish the connection between the element ids of the surface mesh to the ids of the original mesh. Is there an existing id list from when I first performed get_boundary_info(). Thank you. Best, Viviana. Viviana Palacio Betancur |
From: John P. <jwp...@gm...> - 2018-05-17 14:31:38
|
On Thu, May 17, 2018 at 2:13 AM, <li...@si...> wrote: > > Thank you for the reply. > However, I still don't know how to fix it. Any hints? > Nothing beyond good old fashioned debugging. As I suggested, you could start by checking whether the problem lies in the FE formulation/solution itself or is an error within the Exodus writer. > I am not using libmesh master. > If you plan to do serious debugging, I highly recommend working with libmesh master. Otherwise, anything you fix may not be applicable/mergeable to the current version of the code. -- John |
From: <li...@si...> - 2018-05-17 08:13:34
|
Thank you for the reply. However, I still don't know how to fix it. Any hints? I am not using libmesh master. Regards, Li Luo -----Original Messages----- From:"John Peterson" <jwp...@gm...> Sent Time:2018-05-17 00:19:38 (Thursday) To: "li.luo" <li...@si...> Cc: libmesh-users <lib...@li...> Subject: Re: [Libmesh-users] The use of MONOMIAL/XYZ FE_type On Wed, May 16, 2018 at 6:53 AM, <li...@si...> wrote: Dear developers, I tried using the MONOMIAL/XYZ FE_type as in the miscellaneous_ex5 example. After simplification under the choice of some parameters, my problem reduces to a Laplace equation with Dirichlet boundary condition. If a default FE_type is used (system.add_variable ("p", FIRST);), the Laplace problem outputs a right result, but if a MONOMIAL/XYZ FE_type is used instead (i.e. system.add_variable ("p", FIRST, XYZ)), the interior part is wrong, it isn't changed from its initial solution value (I set zero for the initial value), only the boundary is right due to the impose of Dirichlet condition. I have implemented the contribution of each element boundary flux as that in the miscellaneous_ex5 example. I don't know why it fails in the interior part. I'm not sure why XYZ would not work. It's possible that the solution is actually OK but the error arises in the ExodusII::write_discontinuous_exodusII() output? I don't think we have much testing of the XYZ FEType in libmesh or in apps which use libmesh, so it's possible that i regressed. 2. Another question is, if I want to couple two variables into one system, one with a default FE_type and the other with the MONOMIAL/XYZ FE_type, is that possible? I tried and found that when inserting the contribution of neighbor values into the matrix (as "Ken, Kne" in miscellaneous_ex5), PETSc error reports that --------------------------------------------------------------- Argument out of range! New nonzero at (13,33164) caused a malloc! MatSetValues_MPIAIJ() line 572 in src/mat/impls/aij/mpi/mpiaij.c MatSetValues() line 1106 in src/mat/interface/matrix.c add_matrix() line 699 in "unknowndirectory/"petsc_matrix.C --------------------------------------------------------------- It seems that different FE_types lead to different matrix preallocations, the MONOMIAL/XYZ FE_type allows the insert of Ken, Kne but the default FE_type does not. Can I use the same matrix preallocation for the two variables to allow such inserting? And you are using libmesh master? This is interesting, as we are discussing a similar error right now over on https://github.com/libMesh/libmesh/issues/1697 that might be related, although I suspect yours might have more to do with DG sparsity patterns. -- John -- Shenzhen Institutes of Advanced Technology, Chinese Academy of Sciences 1068 Xueyuan Avenue, Shenzhen University Town, Shenzhen, P. R. China Tel: +86 13691688103 Mail: li...@si... https://sites.google.com/site/rolyliluo/ |
From: John P. <jwp...@gm...> - 2018-05-16 16:20:10
|
On Wed, May 16, 2018 at 6:53 AM, <li...@si...> wrote: > Dear developers, > > > > > I tried using the MONOMIAL/XYZ FE_type as in the miscellaneous_ex5 example. > > > After simplification under the choice of some parameters, my problem > reduces to a Laplace equation with Dirichlet boundary condition. > If a default FE_type is used (system.add_variable ("p", FIRST);), the > Laplace problem outputs a right result, > but if a MONOMIAL/XYZ FE_type is used instead (i.e. system.add_variable > ("p", FIRST, XYZ)), > the interior part is wrong, it isn't changed from its initial solution > value (I set zero for the initial value), > only the boundary is right due to the impose of Dirichlet condition. > I have implemented the contribution of each element boundary flux as that > in the miscellaneous_ex5 example. > I don't know why it fails in the interior part. > I'm not sure why XYZ would not work. It's possible that the solution is actually OK but the error arises in the ExodusII::write_discontinuous_exodusII() output? I don't think we have much testing of the XYZ FEType in libmesh or in apps which use libmesh, so it's possible that i regressed. > 2. Another question is, if I want to couple two variables into one > system, one with a default FE_type and the other with the MONOMIAL/XYZ > FE_type, is that possible? > I tried and found that when inserting the contribution of neighbor values > into the matrix (as "Ken, Kne" in miscellaneous_ex5), > PETSc error reports that > --------------------------------------------------------------- > Argument out of range! > New nonzero at (13,33164) caused a malloc! > MatSetValues_MPIAIJ() line 572 in src/mat/impls/aij/mpi/mpiaij.c > MatSetValues() line 1106 in src/mat/interface/matrix.c > add_matrix() line 699 in "unknowndirectory/"petsc_matrix.C > --------------------------------------------------------------- > > > It seems that different FE_types lead to different matrix preallocations, > the MONOMIAL/XYZ FE_type allows the insert of Ken, Kne but the default > FE_type does not. > Can I use the same matrix preallocation for the two variables to allow > such inserting? > And you are using libmesh master? This is interesting, as we are discussing a similar error right now over on https://github.com/libMesh/libmesh/issues/1697 that might be related, although I suspect yours might have more to do with DG sparsity patterns. -- John |
From: <li...@si...> - 2018-05-16 12:53:16
|
Dear developers, I tried using the MONOMIAL/XYZ FE_type as in the miscellaneous_ex5 example. After simplification under the choice of some parameters, my problem reduces to a Laplace equation with Dirichlet boundary condition. If a default FE_type is used (system.add_variable ("p", FIRST);), the Laplace problem outputs a right result, but if a MONOMIAL/XYZ FE_type is used instead (i.e. system.add_variable ("p", FIRST, XYZ)), the interior part is wrong, it isn't changed from its initial solution value (I set zero for the initial value), only the boundary is right due to the impose of Dirichlet condition. I have implemented the contribution of each element boundary flux as that in the miscellaneous_ex5 example. I don't know why it fails in the interior part. 2. Another question is, if I want to couple two variables into one system, one with a default FE_type and the other with the MONOMIAL/XYZ FE_type, is that possible? I tried and found that when inserting the contribution of neighbor values into the matrix (as "Ken, Kne" in miscellaneous_ex5), PETSc error reports that --------------------------------------------------------------- Argument out of range! New nonzero at (13,33164) caused a malloc! MatSetValues_MPIAIJ() line 572 in src/mat/impls/aij/mpi/mpiaij.c MatSetValues() line 1106 in src/mat/interface/matrix.c add_matrix() line 699 in "unknowndirectory/"petsc_matrix.C --------------------------------------------------------------- It seems that different FE_types lead to different matrix preallocations, the MONOMIAL/XYZ FE_type allows the insert of Ken, Kne but the default FE_type does not. Can I use the same matrix preallocation for the two variables to allow such inserting? Thank you! Regards, Li Luo |
From: Griffith, B. E. <bo...@em...> - 2018-05-15 16:04:52
|
On May 15, 2018, at 10:23 AM, John Peterson <jwp...@gm...<mailto:jwp...@gm...>> wrote: On Tue, May 15, 2018 at 8:17 AM, Griffith, Boyce Eugene <bo...@em...<mailto:bo...@em...>> wrote: On May 15, 2018, at 10:13 AM, John Peterson <jwp...@gm...<mailto:jwp...@gm...>> wrote: On Tue, May 15, 2018 at 5:37 AM, Griffith, Boyce Eugene <bo...@em...<mailto:bo...@em...>> wrote: Folks -- Is there an easy way in the library to get normal vectors on surface meshes (e.g. 2D elements in 3D space, 1D elements in 2D space, etc)? It seems like most of the support for this assumes that these are only needed for doing surface integrals on volumetric meshes, but I am sure I am overlooking something. The "simplest" way is to build an FE object and only pre-request the normals by calling: const std::vector<Point> & face_normals = fe_face->get_normals(); I may be making a blunder here, but this doesn't seem to work if the dimension of the quadrature rule is equal to the dimension of the mesh --- the normals do not appear to be computed. Hmm... yes generally you would use a dim-1 dimensional quadrature rule in this context, e.g. the following (from adaptivity_ex4) should work: std::unique_ptr<FEBase> fe_face (FEBase::build(dim, fe_type)); std::unique_ptr<QBase> qface(fe_type.default_quadrature_rule(dim-1)); fe_face->attach_quadrature_rule (qface.get()); const std::vector<Point> & face_normals = fe_face->get_normals(); fe_face->reinit(elem, s); I need to integrate on a surface mesh (for instance, a boundary mesh extracted from a volumetric mesh --- although it could simply be a surface that is not derived from a volumetric mesh) and to get the normals --- something like: std::unique_ptr<FEBase> fe_surface(FEBase::build(dim, fe_type)); std::unique_ptr<QBase> quad_surface(fe_type.default_quadrature_rule(dim)); fe_surface->attach_quadrature_rule (quad_surface.get()); const std::vector<Point> & face_normals = fe_surface->get_normals(); fe_surface->reinit(elem); Again, I do know that I can do this myself --- I was just going to see if the library already does it. where "s" is the numerical index of a side. -- John |
From: Paul T. B. <ptb...@gm...> - 2018-05-15 14:53:19
|
Not to butt-in, but just to confirm, I also compute this "manually" as John suggests for things like normal pressure on membranes, etc. I don't believe there's a canned function for it. On Tue, May 15, 2018 at 10:38 AM, John Peterson <jwp...@gm...> wrote: > On Tue, May 15, 2018 at 8:31 AM, Griffith, Boyce Eugene < > bo...@em...> wrote: > > > > > > > On May 15, 2018, at 10:23 AM, John Peterson <jwp...@gm...> > wrote: > > > > > > > > On Tue, May 15, 2018 at 8:17 AM, Griffith, Boyce Eugene < > > bo...@em...> wrote: > > > >> > >> > >> On May 15, 2018, at 10:13 AM, John Peterson <jwp...@gm...> > wrote: > >> > >> > >> > >> On Tue, May 15, 2018 at 5:37 AM, Griffith, Boyce Eugene < > >> bo...@em...> wrote: > >> > >>> Folks -- > >>> > >>> Is there an easy way in the library to get normal vectors on surface > >>> meshes (e.g. 2D elements in 3D space, 1D elements in 2D space, etc)? > It > >>> seems like most of the support for this assumes that these are only > needed > >>> for doing surface integrals on volumetric meshes, but I am sure I am > >>> overlooking something. > >>> > >> > >> The "simplest" way is to build an FE object and only pre-request the > >> normals by calling: > >> > >> const std::vector<Point> & face_normals = fe_face->get_normals(); > >> > >> > >> I may be making a blunder here, but this doesn't seem to work if the > >> dimension of the quadrature rule is equal to the dimension of the mesh > --- > >> the normals do not appear to be computed. > >> > > > > > > Hmm... yes generally you would use a dim-1 dimensional quadrature rule in > > this context, e.g. the following (from adaptivity_ex4) should work: > > > > std::unique_ptr<FEBase> fe_face (FEBase::build(dim, fe_type)); > > std::unique_ptr<QBase> qface(fe_type.default_quadrature_rule(dim-1)); > > fe_face->attach_quadrature_rule (qface.get()); > > const std::vector<Point> & face_normals = fe_face->get_normals(); > > fe_face->reinit(elem, s); > > > > > > I need to integrate on a surface mesh (for instance, a boundary mesh > > extracted from a volumetric mesh --- although it could simply be a > surface > > that is not derived from a volumetric mesh) and to get the normals --- > > something like: > > > > std::unique_ptr<FEBase> fe_surface(FEBase::build(dim, fe_type)); > > std::unique_ptr<QBase> quad_surface(fe_type.default_ > quadrature_rule(dim)); > > fe_surface->attach_quadrature_rule (quad_surface.get()); > > const std::vector<Point> & face_normals = fe_surface->get_normals(); > > fe_surface->reinit(elem); > > > > > I see now what you are saying. Yeah, the normals are only computed during > *side* reinits, since they are outward normals relative to > higher-dimensional element. > > So, for a 2D element I would compute them manually by computing dx/d(xi) > \cross dx/d(eta), (those two quantities are available from the FE object to > help you). > > -- > John > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Libmesh-users mailing list > Lib...@li... > https://lists.sourceforge.net/lists/listinfo/libmesh-users > |
From: John P. <jwp...@gm...> - 2018-05-15 14:38:51
|
On Tue, May 15, 2018 at 8:31 AM, Griffith, Boyce Eugene < bo...@em...> wrote: > > > On May 15, 2018, at 10:23 AM, John Peterson <jwp...@gm...> wrote: > > > > On Tue, May 15, 2018 at 8:17 AM, Griffith, Boyce Eugene < > bo...@em...> wrote: > >> >> >> On May 15, 2018, at 10:13 AM, John Peterson <jwp...@gm...> wrote: >> >> >> >> On Tue, May 15, 2018 at 5:37 AM, Griffith, Boyce Eugene < >> bo...@em...> wrote: >> >>> Folks -- >>> >>> Is there an easy way in the library to get normal vectors on surface >>> meshes (e.g. 2D elements in 3D space, 1D elements in 2D space, etc)? It >>> seems like most of the support for this assumes that these are only needed >>> for doing surface integrals on volumetric meshes, but I am sure I am >>> overlooking something. >>> >> >> The "simplest" way is to build an FE object and only pre-request the >> normals by calling: >> >> const std::vector<Point> & face_normals = fe_face->get_normals(); >> >> >> I may be making a blunder here, but this doesn't seem to work if the >> dimension of the quadrature rule is equal to the dimension of the mesh --- >> the normals do not appear to be computed. >> > > > Hmm... yes generally you would use a dim-1 dimensional quadrature rule in > this context, e.g. the following (from adaptivity_ex4) should work: > > std::unique_ptr<FEBase> fe_face (FEBase::build(dim, fe_type)); > std::unique_ptr<QBase> qface(fe_type.default_quadrature_rule(dim-1)); > fe_face->attach_quadrature_rule (qface.get()); > const std::vector<Point> & face_normals = fe_face->get_normals(); > fe_face->reinit(elem, s); > > > I need to integrate on a surface mesh (for instance, a boundary mesh > extracted from a volumetric mesh --- although it could simply be a surface > that is not derived from a volumetric mesh) and to get the normals --- > something like: > > std::unique_ptr<FEBase> fe_surface(FEBase::build(dim, fe_type)); > std::unique_ptr<QBase> quad_surface(fe_type.default_quadrature_rule(dim)); > fe_surface->attach_quadrature_rule (quad_surface.get()); > const std::vector<Point> & face_normals = fe_surface->get_normals(); > fe_surface->reinit(elem); > I see now what you are saying. Yeah, the normals are only computed during *side* reinits, since they are outward normals relative to higher-dimensional element. So, for a 2D element I would compute them manually by computing dx/d(xi) \cross dx/d(eta), (those two quantities are available from the FE object to help you). -- John |
From: John P. <jwp...@gm...> - 2018-05-15 14:24:06
|
On Tue, May 15, 2018 at 8:17 AM, Griffith, Boyce Eugene < bo...@em...> wrote: > > > On May 15, 2018, at 10:13 AM, John Peterson <jwp...@gm...> wrote: > > > > On Tue, May 15, 2018 at 5:37 AM, Griffith, Boyce Eugene < > bo...@em...> wrote: > >> Folks -- >> >> Is there an easy way in the library to get normal vectors on surface >> meshes (e.g. 2D elements in 3D space, 1D elements in 2D space, etc)? It >> seems like most of the support for this assumes that these are only needed >> for doing surface integrals on volumetric meshes, but I am sure I am >> overlooking something. >> > > The "simplest" way is to build an FE object and only pre-request the > normals by calling: > > const std::vector<Point> & face_normals = fe_face->get_normals(); > > > I may be making a blunder here, but this doesn't seem to work if the > dimension of the quadrature rule is equal to the dimension of the mesh --- > the normals do not appear to be computed. > Hmm... yes generally you would use a dim-1 dimensional quadrature rule in this context, e.g. the following (from adaptivity_ex4) should work: std::unique_ptr<FEBase> fe_face (FEBase::build(dim, fe_type)); std::unique_ptr<QBase> qface(fe_type.default_quadrature_rule(dim-1)); fe_face->attach_quadrature_rule (qface.get()); const std::vector<Point> & face_normals = fe_face->get_normals(); fe_face->reinit(elem, s); where "s" is the numerical index of a side. -- John |
From: Griffith, B. E. <bo...@em...> - 2018-05-15 14:17:21
|
On May 15, 2018, at 10:13 AM, John Peterson <jwp...@gm...<mailto:jwp...@gm...>> wrote: On Tue, May 15, 2018 at 5:37 AM, Griffith, Boyce Eugene <bo...@em...<mailto:bo...@em...>> wrote: Folks -- Is there an easy way in the library to get normal vectors on surface meshes (e.g. 2D elements in 3D space, 1D elements in 2D space, etc)? It seems like most of the support for this assumes that these are only needed for doing surface integrals on volumetric meshes, but I am sure I am overlooking something. The "simplest" way is to build an FE object and only pre-request the normals by calling: const std::vector<Point> & face_normals = fe_face->get_normals(); I may be making a blunder here, but this doesn't seem to work if the dimension of the quadrature rule is equal to the dimension of the mesh --- the normals do not appear to be computed. (an example can be seen in adaptivity_ex4). The normals could of course be computed using only geometric information, but this is not currently implemented. -- John |