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: edgar <edg...@cr...> - 2021-05-05 22:35:11
|
On 2021-05-05 20:02, John Peterson wrote: > Hi Edgar, > > Sorry for not responding, your email got kind of lost in my inbox. Not at all. Thank you very much. I can only imagine how busy you are :) . > > LibMesh does support penalty BCs, some examples which use penalty BCs > are: adjoints_ex1,2,4; adaptivity_ex1,2,4. It sounds like you may be > interested in DirichletBoundary objects, which impose the BCs as > user-defined constraints. Examples using DirichletBoundary objects are: > adaptivity_ex3; adjoints_ex5,6,7; fem_system_ex1,3,4. The > implementation of > DirichletBoundary objects corresponds to the description you gave in > your > original email about modifying the matrix and rhs. > This is super useful. Thanks! |
From: John P. <jwp...@gm...> - 2021-05-05 20:02:39
|
Hi Edgar, Sorry for not responding, your email got kind of lost in my inbox. LibMesh does support penalty BCs, some examples which use penalty BCs are: adjoints_ex1,2,4; adaptivity_ex1,2,4. It sounds like you may be interested in DirichletBoundary objects, which impose the BCs as user-defined constraints. Examples using DirichletBoundary objects are: adaptivity_ex3; adjoints_ex5,6,7; fem_system_ex1,3,4. The implementation of DirichletBoundary objects corresponds to the description you gave in your original email about modifying the matrix and rhs. -- John On Wed, May 5, 2021 at 2:50 PM edgar <edg...@cr...> wrote: > Nevermind. I found this [1]: > > - Cons of this approach : > - Works for an interpolary finite element basis but not in > general. > - May be inefficient to change individual entries once the global > matrix is assembled. > - Need to enforce boundary conditions for a generic finite element > basis at the element stiffness matrix level. > > [1] > > https://users.oden.utexas.edu/~roystgnr/libmeshpdfs/roystgnr/sandia_libmesh.pdf > > On 2021-04-24 05:14, edgar wrote: > > ββββββββββββββββββββββββββββββββββββββββββββββββββ > > ARE THERE QBC, NON-HOMOGENEOUS > > BC, ESSENTIAL BC BY MODIFYING EQUATIONS? > > ββββββββββββββββββββββββββββββββββββββββββββββββββ > > > > > > Hello busy developers and scientists! Iβll try to make it short. > > > > [Logan12] calls them /nonhomogeneous boundary conditions/ (BC), > > [Ashgar05] refers to them as /essential boundary conditions by > > modifying > > equations/ and I am sure that some people call them qualifying boundary > > conditions (who?). > > > > The procedure consists, for example, from a 1D system like this (2 > > elements, 3 nodes), where nodes 1 (n1) and 3 (n3) have an imposed value > > of f and node 2 (n2) has essential (Dirichlet) BC. The global matrix of > > the system would be like this > > > > βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ > > [ k_{1,1} k_{1,2} k_{1,3} ] [ u_{1} ] [ f_{1} ] > > [ k_{2,1} k_{2,2} k_{2,3} ] Β· [ u_{2} ] = [ f_{2} ] > > [ k_{3,1} k_{3,2} k_{3,3} ] [ u_{3} ] [ f_{3} ] > > βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ > > > > The above mentioned procedure does this [Ashgar05]: > > (i) Insert 1 at the diagonal location and zero at all > > off-diagonal locations in the row corresponding to the > > specified degree of freedom. > > > > (ii) Insert the known nodal value to the corresponding > > location in the right-hand side. > > > > βββββββββββββββββββββββββββββββββββββββββββββββββββββ > > [ k_{1,1} 0 k_{1,3} ] [ u_{1} ] [ f_{1} ] > > [ 0 1 0 ] Β· [ u_{2} ] = [ Ξ{u} ] > > [ k_{3,1} 0 k_{3,3} ] [ u_{3} ] [ f_{3} ] > > βββββββββββββββββββββββββββββββββββββββββββββββββββββ > > > > I read that libMesh solves equations with a penalty method [CMISS, > > hooshi]. Does it also apply the method described above? > > > > Thatβs it. Thanks! > > > > > > > > [Logan05] Daryl L. Logan, A first course in the finite element method, > > (2012), Cengage Learning, Stanford, CT, U.S.A. > > > > [Ashgar05] M. Ashgar Bhatti, Fundamental finite element analysis and > > applications: with mathematica and matlab computations (2005), John > > Wiley \& Sons. > > > > [CMISS] > > <https://www.cmiss.org/openCMISS/wiki/LibmeshBoundaryConditions> > > > > [hooshi] <https://hooshi.gitlab.io/FILES/math521_libmesh.pdf> > |
From: edgar <edg...@cr...> - 2021-05-05 19:50:22
|
Nevermind. I found this [1]: - Cons of this approach : - Works for an interpolary finite element basis but not in general. - May be inefficient to change individual entries once the global matrix is assembled. - Need to enforce boundary conditions for a generic finite element basis at the element stiffness matrix level. [1] https://users.oden.utexas.edu/~roystgnr/libmeshpdfs/roystgnr/sandia_libmesh.pdf On 2021-04-24 05:14, edgar wrote: > ββββββββββββββββββββββββββββββββββββββββββββββββββ > ARE THERE QBC, NON-HOMOGENEOUS > BC, ESSENTIAL BC BY MODIFYING EQUATIONS? > ββββββββββββββββββββββββββββββββββββββββββββββββββ > > > Hello busy developers and scientists! Iβll try to make it short. > > [Logan12] calls them /nonhomogeneous boundary conditions/ (BC), > [Ashgar05] refers to them as /essential boundary conditions by > modifying > equations/ and I am sure that some people call them qualifying boundary > conditions (who?). > > The procedure consists, for example, from a 1D system like this (2 > elements, 3 nodes), where nodes 1 (n1) and 3 (n3) have an imposed value > of f and node 2 (n2) has essential (Dirichlet) BC. The global matrix of > the system would be like this > > βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ > [ k_{1,1} k_{1,2} k_{1,3} ] [ u_{1} ] [ f_{1} ] > [ k_{2,1} k_{2,2} k_{2,3} ] Β· [ u_{2} ] = [ f_{2} ] > [ k_{3,1} k_{3,2} k_{3,3} ] [ u_{3} ] [ f_{3} ] > βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ > > The above mentioned procedure does this [Ashgar05]: > (i) Insert 1 at the diagonal location and zero at all > off-diagonal locations in the row corresponding to the > specified degree of freedom. > > (ii) Insert the known nodal value to the corresponding > location in the right-hand side. > > βββββββββββββββββββββββββββββββββββββββββββββββββββββ > [ k_{1,1} 0 k_{1,3} ] [ u_{1} ] [ f_{1} ] > [ 0 1 0 ] Β· [ u_{2} ] = [ Ξ{u} ] > [ k_{3,1} 0 k_{3,3} ] [ u_{3} ] [ f_{3} ] > βββββββββββββββββββββββββββββββββββββββββββββββββββββ > > I read that libMesh solves equations with a penalty method [CMISS, > hooshi]. Does it also apply the method described above? > > Thatβs it. Thanks! > > > > [Logan05] Daryl L. Logan, A first course in the finite element method, > (2012), Cengage Learning, Stanford, CT, U.S.A. > > [Ashgar05] M. Ashgar Bhatti, Fundamental finite element analysis and > applications: with mathematica and matlab computations (2005), John > Wiley \& Sons. > > [CMISS] > <https://www.cmiss.org/openCMISS/wiki/LibmeshBoundaryConditions> > > [hooshi] <https://hooshi.gitlab.io/FILES/math521_libmesh.pdf> |
From: John P. <jwp...@gm...> - 2021-05-04 13:58:31
|
On Wed, Apr 28, 2021 at 5:45 PM edgar <edg...@cr...> wrote: > Dear all, > > I know that some times, the documentation is hard to maintain, and you > may already know what I will tell you now. I just wanted to let you know > that `_ss_id_to_name' (from `BoundaryInfo') works on a mesh that I > created with physical groups in Gmsh. This code > > βββββ > β for (std::string >pt_boundary_name : > β gtpt_boundary_names) { > β std::cout << "Boundary name: " << gtpt_boundary_name > β << " id: " > β << my_mesh_boundaries.get_id_by_name ( > β gtpt_boundary_name) > β << std::endl; > β } > βββββ > > produces > > βββββ > β Boundary name: left id: 4 > β Boundary name: back id: 3 > β Boundary name: bottom id: 2 > β Boundary name: top id: 5 > βββββ > > Needless to say that `gtpt_boundary_names' holds a series of strings > with boundary names and `my_mesh_boundaries' is a > `libMesh::BoundaryInfo' object. The documentation states: > > Currently this is only implemented for ExodusII > > Just trying to help. Please, don't get mad at me. > Thanks for your report, I updated the docs in libmesh fe33016c4. -- John |
From: edgar <edg...@cr...> - 2021-04-30 18:17:25
|
Thanks, John. On 2021-04-30 17:53, John Peterson wrote: > Yeah, I think you've pretty well shown that GetPot only supports ASCII > files. I just wanted to make sure that I wasn't missing something. I was not nit-picking. > I actually don't know how hard it would be to generalize it to use > wchar or something, but the next problem would be that libmesh itself > uses > only std::strings everywhere, so updating GetPot would likely only be > the > tip of the iceberg of changes that would be required to fully support > UTF-8. I think that these kind of things are cumbersome enough to avoid them. I know that I send a ton of e-mails every week. Thank you for your patience. I promise that there will come a moment when my questions are more relevant. I am just getting used to libMesh. |
From: John P. <jwp...@gm...> - 2021-04-30 17:54:12
|
On Thu, Apr 29, 2021 at 4:50 PM edgar <edg...@cr...> wrote: > Dear list, > > I noticed that if I have a GetPot file such as: > > βββββ > β [./Γ³] > β val = 1 > β [../] > βββββ > > , that my program would crash. As soon as I change `Γ³' by `o', it works > fine. This makes me think that the crash arises because of this line in > getpot.h > > βββββ > β str += getpot_cast_int<char>(tmp); > βββββ > > which is #define'd in getpot.h > > βββββ > | #define getpot_cast_int libMesh::cast_int > βββββ > > and goes back to libmesh_common.h > > βββββ > β template <typename Tnew, typename Told> > β inline Tnew cast_int (Told oldvar) > β { > β libmesh_assert_equal_to > β (oldvar, static_cast<Told>(static_cast<Tnew>(oldvar))); > β > β return(static_cast<Tnew>(oldvar)); > β } > βββββ > > It seems that only int-equivalent (i.e. 8-bit) characters are allowed in > the GetPot file, is that correct? Is there support for UTF-x? (x: a > number base, e.g. 8, 16, etc.) > Yeah, I think you've pretty well shown that GetPot only supports ASCII files. I actually don't know how hard it would be to generalize it to use wchar or something, but the next problem would be that libmesh itself uses only std::strings everywhere, so updating GetPot would likely only be the tip of the iceberg of changes that would be required to fully support UTF-8. -- John |
From: edgar <edg...@cr...> - 2021-04-29 21:50:32
|
Dear list, I noticed that if I have a GetPot file such as: βββββ β [./Γ³] β val = 1 β [../] βββββ , that my program would crash. As soon as I change `Γ³' by `o', it works fine. This makes me think that the crash arises because of this line in getpot.h βββββ β str += getpot_cast_int<char>(tmp); βββββ which is #define'd in getpot.h βββββ | #define getpot_cast_int libMesh::cast_int βββββ and goes back to libmesh_common.h βββββ β template <typename Tnew, typename Told> β inline Tnew cast_int (Told oldvar) β { β libmesh_assert_equal_to β (oldvar, static_cast<Told>(static_cast<Tnew>(oldvar))); β β return(static_cast<Tnew>(oldvar)); β } βββββ It seems that only int-equivalent (i.e. 8-bit) characters are allowed in the GetPot file, is that correct? Is there support for UTF-x? (x: a number base, e.g. 8, 16, etc.) |
From: edgar <edg...@cr...> - 2021-04-28 22:44:58
|
Dear all, I know that some times, the documentation is hard to maintain, and you may already know what I will tell you now. I just wanted to let you know that `_ss_id_to_name' (from `BoundaryInfo') works on a mesh that I created with physical groups in Gmsh. This code βββββ β for (std::string >pt_boundary_name : β gtpt_boundary_names) { β std::cout << "Boundary name: " << gtpt_boundary_name β << " id: " β << my_mesh_boundaries.get_id_by_name ( β gtpt_boundary_name) β << std::endl; β } βββββ produces βββββ β Boundary name: left id: 4 β Boundary name: back id: 3 β Boundary name: bottom id: 2 β Boundary name: top id: 5 βββββ Needless to say that `gtpt_boundary_names' holds a series of strings with boundary names and `my_mesh_boundaries' is a `libMesh::BoundaryInfo' object. The documentation states: Currently this is only implemented for ExodusII Just trying to help. Please, don't get mad at me. |
From: edgar <edg...@cr...> - 2021-04-25 08:48:54
|
ββββββββββββββββββββββββββββββββββββββββββββββββββ ARE THERE QBC, NON-HOMOGENEOUS BC, ESSENTIAL BC BY MODIFYING EQUATIONS? ββββββββββββββββββββββββββββββββββββββββββββββββββ Hello busy developers and scientists! Iβll try to make it short. [Logan12] calls them /nonhomogeneous boundary conditions/ (BC), [Ashgar05] refers to them as /essential boundary conditions by modifying equations/ and I am sure that some people call them qualifying boundary conditions (who?). The procedure consists, for example, from a 1D system like this (2 elements, 3 nodes), where nodes 1 (n1) and 3 (n3) have an imposed value of f and node 2 (n2) has essential (Dirichlet) BC. The global matrix of the system would be like this βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ [ k_{1,1} k_{1,2} k_{1,3} ] [ u_{1} ] [ f_{1} ] [ k_{2,1} k_{2,2} k_{2,3} ] Β· [ u_{2} ] = [ f_{2} ] [ k_{3,1} k_{3,2} k_{3,3} ] [ u_{3} ] [ f_{3} ] βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ The above mentioned procedure does this [Ashgar05]: (i) Insert 1 at the diagonal location and zero at all off-diagonal locations in the row corresponding to the specified degree of freedom. (ii) Insert the known nodal value to the corresponding location in the right-hand side. βββββββββββββββββββββββββββββββββββββββββββββββββββββ [ k_{1,1} 0 k_{1,3} ] [ u_{1} ] [ f_{1} ] [ 0 1 0 ] Β· [ u_{2} ] = [ Ξ{u} ] [ k_{3,1} 0 k_{3,3} ] [ u_{3} ] [ f_{3} ] βββββββββββββββββββββββββββββββββββββββββββββββββββββ I read that libMesh solves equations with a penalty method [CMISS, hooshi]. Does it also apply the method described above? Thatβs it. Thanks! [Logan05] Daryl L. Logan, A first course in the finite element method, (2012), Cengage Learning, Stanford, CT, U.S.A. [Ashgar05] M. Ashgar Bhatti, Fundamental finite element analysis and applications: with mathematica and matlab computations (2005), John Wiley \& Sons. [CMISS] <https://www.cmiss.org/openCMISS/wiki/LibmeshBoundaryConditions> [hooshi] <https://hooshi.gitlab.io/FILES/math521_libmesh.pdf> |
From: Renato P. <re...@gm...> - 2021-04-22 18:31:54
|
Sure! That is exactly what I needed. Thank you very much. Renato Em qui, 22 de abr de 2021 15:27, John Peterson <jwp...@gm...> escreveu: > > > On Thu, Apr 22, 2021 at 1:11 PM Renato Poli <re...@gm...> wrote: > >> Thanks John, >> >> What would be the straightforward way to append normals and tangents in a >> single tensor? >> The idea is to define them as a base so I can operate and iterate. >> > > It just depends on what data structure you want to use for the tensor. For > example, you could use the libmesh RealTensorValue class which has a > constructor taking 3 Points as rows: > > auto T = RealTensorValue(n, t1, t2).transpose(); > > (This may or may not compile, hopefully you get the idea.) > > -- > John > |
From: John P. <jwp...@gm...> - 2021-04-22 18:27:31
|
On Thu, Apr 22, 2021 at 1:11 PM Renato Poli <re...@gm...> wrote: > Thanks John, > > What would be the straightforward way to append normals and tangents in a > single tensor? > The idea is to define them as a base so I can operate and iterate. > It just depends on what data structure you want to use for the tensor. For example, you could use the libmesh RealTensorValue class which has a constructor taking 3 Points as rows: auto T = RealTensorValue(n, t1, t2).transpose(); (This may or may not compile, hopefully you get the idea.) -- John |
From: Renato P. <re...@gm...> - 2021-04-22 18:12:10
|
Thanks John, What would be the straightforward way to append normals and tangents in a single tensor? The idea is to define them as a base so I can operate and iterate. rgds, Renato On Thu, Apr 22, 2021 at 10:21 AM John Peterson <jwp...@gm...> wrote: > > > On Wed, Apr 21, 2021 at 10:39 AM Renato Poli <re...@gm...> wrote: > >> Hello, >> >> I am willing to make a coordinate rotation on a Tet face to calculate >> normal and tangent displacements between discontinuous elements. >> >> As I understand, I need a transformation matrix gathering normal and >> tangents to define a local coordinate system: >> T_ij = [ nx_i ns_i nt_i ] >> >> I can see all the calculations are there, but I am not sure what is the >> most elegant/usual way to get such matrix in libmesh. >> >> Any suggestion? Any documentation pointer would be helpful! >> > > See FEAbstract::get_normals() and get_tangents() in > include/fe/fe_abstract.h. These call the corresponding functions on FEMap. > Similarly to the other "get_" interfaces on FE, the values are computed at > quadrature points, so you would need to reinit a "side" FE after > pre-requesting these values, similarly to what is done in > systems_of_equations_ex4, for example. > > -- > John > |
From: John P. <jwp...@gm...> - 2021-04-22 13:21:25
|
On Wed, Apr 21, 2021 at 10:39 AM Renato Poli <re...@gm...> wrote: > Hello, > > I am willing to make a coordinate rotation on a Tet face to calculate > normal and tangent displacements between discontinuous elements. > > As I understand, I need a transformation matrix gathering normal and > tangents to define a local coordinate system: > T_ij = [ nx_i ns_i nt_i ] > > I can see all the calculations are there, but I am not sure what is the > most elegant/usual way to get such matrix in libmesh. > > Any suggestion? Any documentation pointer would be helpful! > See FEAbstract::get_normals() and get_tangents() in include/fe/fe_abstract.h. These call the corresponding functions on FEMap. Similarly to the other "get_" interfaces on FE, the values are computed at quadrature points, so you would need to reinit a "side" FE after pre-requesting these values, similarly to what is done in systems_of_equations_ex4, for example. -- John |
From: Renato P. <re...@gm...> - 2021-04-21 15:39:38
|
Hello, I am willing to make a coordinate rotation on a Tet face to calculate normal and tangent displacements between discontinuous elements. As I understand, I need a transformation matrix gathering normal and tangents to define a local coordinate system: T_ij = [ nx_i ns_i nt_i ] I can see all the calculations are there, but I am not sure what is the most elegant/usual way to get such matrix in libmesh. Any suggestion? Any documentation pointer would be helpful! Thanks upfront, Renato |
From: Jahrul A. <al...@mu...> - 2021-04-11 00:26:05
|
Hi, John I have the following error if I compile libmesh using openmpi. I am reposting it because this time it is different from what I posted earlier (sorry, it did not go to libmesh-users). I have the same petsc as mentioned in the previous post. ../configure --prefix=/opt/libmesh/1.7.0 --with-cxx=mpicxx --enable-parmesh --disable-tecio --disable-fparser --with-mpi=/usr/lib64/openmpi/bin/ gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2) CXXLD fparser_parse-opt /usr/bin/ld: warning: libmpi.so.40, needed by /autofs/awcm/shared/awcm++/libs/libmesh/build-mpi/contrib/timpi/src/.libs/libtimpi_opt.so, may conflict with libmpi.so.12 /usr/bin/ld: warning: libmpi.so.40, needed by /autofs/awcm/shared/awcm++/libs/libmesh/build-mpi/contrib/timpi/src/.libs/libtimpi_opt.so, may conflict with libmpi.so.12 /usr/bin/ld: ./.libs/libmesh_opt.so: undefined reference to `TIMPI::Communicator::Communicator(int const&)' /usr/bin/ld: ./.libs/libmesh_opt.so: undefined reference to `TIMPI::Request::Request(int const&)' collect2: error: ld returned 1 exit status make[1]: *** [Makefile:13545: fparser_parse-opt] Error 1 make[1]: Leaving directory '/autofs/awcm/shared/awcm++/libs/libmesh/build-mpi' make: *** [Makefile:32158: all-recursive] Error 1 ===================================== Jahrul Alam, PhD Associate Professor, Dept of Mathematics and Statistics Memorial University, St John's, NL, Canada http://www.math.mun.ca/~alamj/ eMail: al...@mu... Office: HH-3054, Tel: 709-864 8071 ===================================== On Mon, Apr 5, 2021 at 1:36 PM Jahrul Alam <al...@mu...> wrote: > > Hi John > Compiling with intel 2020, I get the posted error (regardless of 1.6.0, > 1.6.1, 1.7.0_pre). With intel 2020, I was able to compile libMesh-1.7.0_pre > without PETSc, where I have PETSc 3.14.1. > > On a different workstation, I have Fedora 31, gcc 9.3.1 and PETSC 3.9.x. > Here, I have a different error regarding TIMPI (I have posted earlier, see > below). > > I did a "git clone petsc" to get fresh petsc on my fedora box, and > /configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-mpich > --download-fblaslapack. > > I now configure libmes (note the choice of mpicxx download with petsc) > build]$ ../configure --prefix=/opt/libmesh/1.7.0 > --with-cxx=/autofs/awcm/shared/awcm++/libs/petsc/arch-linux-c-debug/bin/mpicxx > > Can you check if the auto pointer in parallel_algebra needs to be improved > to make it compiler friendly. This line 218 gave me some hard time, but it > is fixed in my case. > > Previous error with TIMPI: > > In file included from ../src/base/dof_map_constraints.C:39: > > ./include/libmesh/parallel_algebra.h: In constructor βTIMPI::StandardType<libMesh::Point>::StandardType(const > libMesh::Point*)β: > > ./include/libmesh/parallel_algebra.h:218:34: error: cannot convert βTIMPI::StandardType<double>β > to βMPI_Datatypeβ {aka βompi_datatype_t*β} in initialization > > 218 | MPI_Datatype tmptype, type = T_type; > > > > ===================================== > Jahrul Alam, PhD > Associate Professor, Dept of Mathematics and Statistics > Memorial University, St John's, NL, Canada > http://www.math.mun.ca/~alamj/ > eMail: al...@mu... > Office: HH-3054, Tel: 709-864 8071 > ===================================== > > > On Mon, Apr 5, 2021 at 11:22 AM John Peterson <jwp...@gm...> > wrote: > >> Hi, >> >> There was a somewhat recent discussion about this issue on #2565 and >> #2827, >> but as far as I know, it was never satisfactorily resolved at that time, >> otherwise the update would presumably have made it into 1.6.1. >> >> Jahrul, just to confirm, are you saying that libmesh master works for you >> with Intel 18 (or newer) compilers? Also, if I understand correctly, you >> had to update PETSc as well? Can you let us know what version of PETSc you >> used? >> >> -- >> John >> >> >> On Sun, Apr 4, 2021 at 11:54 AM Jahrul Alam <al...@mu...> wrote: >> >> > I have a similar error with 1.6.1.tar.gz. Using git, I get 1.7.0_pre, >> and >> > following is the error. Now, I have done a fresh installation of latest >> > PETSc, configured libmesh using >> > --with-cxx=/path/to/petsc/arch-linux-c-debug/bin/mpicxx, everything >> else is >> > as before, libmesh compiled smoothly with no error. >> > >> > >> > CXX src/base/libmesh_opt_la-dirichlet_boundary.lo >> > In file included from ./include/libmesh/fe_base.h(26), >> > from ./include/libmesh/fem_context.h(27), >> > from ./include/libmesh/fem_function_base.h(26), >> > from ./include/libmesh/composite_fem_function.h(23), >> > from ../src/base/dirichlet_boundary.C(25): >> > ./include/libmesh/fe_abstract.h(491): error: more than one operator "+" >> > matches these operands: >> > built-in operator "arithmetic + arithmetic" >> > function "operator+(const PetscInt={int} &, const >> PetscComplex >> > &)" >> > operand types are: const libMesh::OrderWrapper + const >> unsigned >> > int >> > Order get_order() const { return static_cast<Order>(fe_type.order + >> > _p_level); } >> > ^ >> > >> > make[1]: *** [Makefile:25279: >> > src/base/libmesh_opt_la-dirichlet_boundary.lo] Error 1 >> > >> > >> > >> > >> > ===================================== >> > Jahrul Alam, PhD >> > Memorial University, St John's, NL, Canada >> > http://www.math.mun.ca/~alamj/ >> > eMail: al...@mu... >> > Office: HH-3054, Tel: 709-864 8071 >> > ===================================== >> > >> > >> > On Sun, Apr 4, 2021 at 12:15 PM Charles Puelz <cha...@gm...> >> > wrote: >> > >> > > I am having an issue building 1.6.1 on TACC with the intel compilers >> > > (18.0.2) >> > > >> > > I am getting this error: >> > > >> > > ./include/libmesh/fe_abstract.h(443): error: more than one operator >> "+" >> > > matches these operands: >> > > built-in operator "arithmetic + arithmetic" >> > > function "operator+(const PetscInt={int} &, const >> > PetscComplex >> > > &)" >> > > operand types are: const libMesh::OrderWrapper + const >> > unsigned >> > > int >> > > Order get_order() const { return >> static_cast<Order>(fe_type.order + >> > > _p_level); } >> > > >> > > I've attached my configure log file. Any thoughts? >> > > >> > > Thanks! >> > > >> > > -- Charles >> > >> > >> >> _______________________________________________ >> Libmesh-users mailing list >> Lib...@li... >> https://lists.sourceforge.net/lists/listinfo/libmesh-users >> > |
From: John P. <jwp...@gm...> - 2021-04-05 13:52:47
|
Hi, There was a somewhat recent discussion about this issue on #2565 and #2827, but as far as I know, it was never satisfactorily resolved at that time, otherwise the update would presumably have made it into 1.6.1. Jahrul, just to confirm, are you saying that libmesh master works for you with Intel 18 (or newer) compilers? Also, if I understand correctly, you had to update PETSc as well? Can you let us know what version of PETSc you used? -- John On Sun, Apr 4, 2021 at 11:54 AM Jahrul Alam <al...@mu...> wrote: > I have a similar error with 1.6.1.tar.gz. Using git, I get 1.7.0_pre, and > following is the error. Now, I have done a fresh installation of latest > PETSc, configured libmesh using > --with-cxx=/path/to/petsc/arch-linux-c-debug/bin/mpicxx, everything else is > as before, libmesh compiled smoothly with no error. > > > CXX src/base/libmesh_opt_la-dirichlet_boundary.lo > In file included from ./include/libmesh/fe_base.h(26), > from ./include/libmesh/fem_context.h(27), > from ./include/libmesh/fem_function_base.h(26), > from ./include/libmesh/composite_fem_function.h(23), > from ../src/base/dirichlet_boundary.C(25): > ./include/libmesh/fe_abstract.h(491): error: more than one operator "+" > matches these operands: > built-in operator "arithmetic + arithmetic" > function "operator+(const PetscInt={int} &, const PetscComplex > &)" > operand types are: const libMesh::OrderWrapper + const unsigned > int > Order get_order() const { return static_cast<Order>(fe_type.order + > _p_level); } > ^ > > make[1]: *** [Makefile:25279: > src/base/libmesh_opt_la-dirichlet_boundary.lo] Error 1 > > > > > ===================================== > Jahrul Alam, PhD > Memorial University, St John's, NL, Canada > http://www.math.mun.ca/~alamj/ > eMail: al...@mu... > Office: HH-3054, Tel: 709-864 8071 > ===================================== > > > On Sun, Apr 4, 2021 at 12:15 PM Charles Puelz <cha...@gm...> > wrote: > > > I am having an issue building 1.6.1 on TACC with the intel compilers > > (18.0.2) > > > > I am getting this error: > > > > ./include/libmesh/fe_abstract.h(443): error: more than one operator "+" > > matches these operands: > > built-in operator "arithmetic + arithmetic" > > function "operator+(const PetscInt={int} &, const > PetscComplex > > &)" > > operand types are: const libMesh::OrderWrapper + const > unsigned > > int > > Order get_order() const { return static_cast<Order>(fe_type.order + > > _p_level); } > > > > I've attached my configure log file. Any thoughts? > > > > Thanks! > > > > -- Charles > > |
From: Jahrul A. <al...@mu...> - 2021-04-04 16:53:47
|
I have a similar error with 1.6.1.tar.gz. Using git, I get 1.7.0_pre, and following is the error. Now, I have done a fresh installation of latest PETSc, configured libmesh using --with-cxx=/path/to/petsc/arch-linux-c-debug/bin/mpicxx, everything else is as before, libmesh compiled smoothly with no error. CXX src/base/libmesh_opt_la-dirichlet_boundary.lo In file included from ./include/libmesh/fe_base.h(26), from ./include/libmesh/fem_context.h(27), from ./include/libmesh/fem_function_base.h(26), from ./include/libmesh/composite_fem_function.h(23), from ../src/base/dirichlet_boundary.C(25): ./include/libmesh/fe_abstract.h(491): error: more than one operator "+" matches these operands: built-in operator "arithmetic + arithmetic" function "operator+(const PetscInt={int} &, const PetscComplex &)" operand types are: const libMesh::OrderWrapper + const unsigned int Order get_order() const { return static_cast<Order>(fe_type.order + _p_level); } ^ make[1]: *** [Makefile:25279: src/base/libmesh_opt_la-dirichlet_boundary.lo] Error 1 ===================================== Jahrul Alam, PhD Memorial University, St John's, NL, Canada http://www.math.mun.ca/~alamj/ eMail: al...@mu... Office: HH-3054, Tel: 709-864 8071 ===================================== On Sun, Apr 4, 2021 at 12:15 PM Charles Puelz <cha...@gm...> wrote: > I am having an issue building 1.6.1 on TACC with the intel compilers > (18.0.2) > > I am getting this error: > > ./include/libmesh/fe_abstract.h(443): error: more than one operator "+" > matches these operands: > built-in operator "arithmetic + arithmetic" > function "operator+(const PetscInt={int} &, const PetscComplex > &)" > operand types are: const libMesh::OrderWrapper + const unsigned > int > Order get_order() const { return static_cast<Order>(fe_type.order + > _p_level); } > > I've attached my configure log file. Any thoughts? > > Thanks! > > -- Charles > > _______________________________________________ > Libmesh-users mailing list > Lib...@li... > https://lists.sourceforge.net/lists/listinfo/libmesh-users > |
From: Charles P. <cha...@gm...> - 2021-04-04 14:44:59
|
I am having an issue building 1.6.1 on TACC with the intel compilers (18.0.2) I am getting this error: ./include/libmesh/fe_abstract.h(443): error: more than one operator "+" matches these operands: built-in operator "arithmetic + arithmetic" function "operator+(const PetscInt={int} &, const PetscComplex &)" operand types are: const libMesh::OrderWrapper + const unsigned int Order get_order() const { return static_cast<Order>(fe_type.order + _p_level); } I've attached my configure log file. Any thoughts? Thanks! -- Charles |
From: edgar <edg...@cr...> - 2021-03-31 15:10:53
|
On 2021-03-31 13:32, John Peterson wrote: > Hi Edgar, > > Yes, clearly something like this will work: > > libmesh_example_requires_fun(bool (0), >> "TESTME", >> __FILE__, >> __LINE__); > > > but you then force the user to manually pass __FILE__ and __LINE__ to > every > invocation of the "libmesh_error_msg_fun" function. To me this makes it > not > very desirable/useful. > > There is also the issue of not being able to "stream" messages into a > function the same way that is possible with macros, for example we > often > write code like: > > libmesh_error_msg("Invalid shape function index i = " << i); > > which is very convenient. If I understand correctly, your original > issue > with the macros was that you could not properly "namespace" them, e.g. > libMesh::libmesh_error_msg() does not work, but I think this is a > relatively minor price to pay for the other conveniences that using a > macro > provides. > > -- > John Thank you for your answer. Yes, indeed. My initial situation was that I thought of the convenience of having a =namespace=, but as I mentioned (and I know the previous e-mail was long), there are some times when one needs an actual function. Fortunately, libMesh is a kitchen and anyone can prepare their own recipe :) . Thanks. |
From: John P. <jwp...@gm...> - 2021-03-31 13:33:19
|
Hi Edgar, Yes, clearly something like this will work: libmesh_example_requires_fun(bool (0), > "TESTME", > __FILE__, > __LINE__); but you then force the user to manually pass __FILE__ and __LINE__ to every invocation of the "libmesh_error_msg_fun" function. To me this makes it not very desirable/useful. There is also the issue of not being able to "stream" messages into a function the same way that is possible with macros, for example we often write code like: libmesh_error_msg("Invalid shape function index i = " << i); which is very convenient. If I understand correctly, your original issue with the macros was that you could not properly "namespace" them, e.g. libMesh::libmesh_error_msg() does not work, but I think this is a relatively minor price to pay for the other conveniences that using a macro provides. -- John |
From: edgar <edg...@cr...> - 2021-03-31 04:57:44
|
On 2021-03-31 02:01, edgar wrote: > > Dear John, > > --- 8< --- > β #endif /* LIBMESH_MACRO_HANDLER_H */ > βββββ > Listing 2: header file (libmesh_macro_handle.h). Note that > `libmesh_example_requires_fun' could have also been `int', but I > modified it to show a stack trace too. > > --- 8< --- > β } > βββββ > Listing 3: source file (libmesh_macro_handle.cpp) Apologies, I just noticed that I left the code of =libmesh_example_requires_fun= in the header file =libmesh_macro_handle.h= (should only have the declaration). Obviously, the definition needs to be in =libmesh_macro_handle.cpp=. (It used to be a template. As such, it could have been in the header file. A template seemed like too much). |
From: edgar <edg...@cr...> - 2021-03-31 02:01:46
|
On 2021-03-22 19:26, edgar wrote: > On 2021-03-22 18:26, John Peterson wrote: >> The main reason that libmesh_error_msg() and friends are macros is that >> they use the __FILE__ and __LINE__ preprocessor defines to help direct the >> user to the exact place in the code where the error was triggered. Iβm not >> sure if it is possible to do this same trick with inline functions, IIRC it >> will always report the line where the inline function is defined in the >> source rather than the line where it is called. > > Thank you very much, John Dear John, I checked the C++ documentation. It seems that both `__FILE__' and `__LINE__' should show up anywhere. They are also usable by functions as well. I was not planning to give more attention to this subject, but it came back to bite me when I tried to use the macro in a `void' function . So, this works: it reports the line number of the calling file, and allows the functionality that `libmesh_example_requires' and `libmesh_error_msg' provide in functions which may not be of `int' type. Again, if it convenient to have this in libMesh, I can modify `libmesh_common.h' in my local copy of the repo and push it onto <https://www.notabug.org/broncodev/libmesh> or send it to you as a diff file (the mailing list would not take attachments). βββββ β #include "../include/libmesh_macro_handler.h" β #include "libmesh/libmesh.h" β #include "libmesh/mesh.h" β #include <iostream> β β using namespace libMesh; β β int main (int argc, char * argv[]) { β libMesh::LibMeshInit β init (argc, argv); β β libmesh_example_requires_fun(bool (0), β "TESTME", β __FILE__, β __LINE__); β // This works too (comment previous function to test) β libmesh_error_msg_fun("FOUL"); β β printf("Not to be shown"); β β return 0; β } βββββ Listing 1: Main function βββββ β #ifndef LIBMESH_MACRO_HANDLER_H β #define LIBMESH_MACRO_HANDLER_H β β #include <iostream> β #include "libmesh/libmesh.h" β #include "libmesh/libmesh_common.h" β β /** β * @brief Turns =libmesh_error_msg= into a function β * β * @details =libmesh_error_msg= is a macro. To use β * it inside a function, the function needs β * to be of =int= type. This function just β * captures the result of the macro, β * β * @param msg: (std::string) message to show β * β * @return int β */ β int β libmesh_error_msg_fun(const std::string msg); β β /** β * @brief Function which is equivalent to libmesh_example_requires β * β * @details This function allows to have the same functionality as libmesh_example_requires, but does not have a return value. Since it is not a macro, it can be called from within functions which are not of int type β * β * @param condition: (const bool. Ex: bool(0)) condition which needs to occur to trigger the exception handling β * msg: (const char *. Ex: "--enable-lib") The functionality which the example requires β * file: (const char *. Ex: __FILE__) Name of calling file β * line: (const int. Ex: __LINE__) Line from where the exception happened in file β * β * @return void β */ β void β libmesh_example_requires_fun (const bool condition, β const char *msg, β const char *file, β const int line) { β β // // This would not work, because of the =void= type: β // libmesh_example_requires (condition, option); β β if (!condition) { β do { β β libMesh::out β << "Configuring libMesh with " << msg β << " is required to run this example." β << std::endl; β std::stringstream msg_stream; β msg_stream << msg; β libMesh::MacroFunctions::report_error ( β file, line, LIBMESH_DATE, LIBMESH_TIME); β LIBMESH_THROW ( β libMesh::LogicError (msg_stream.str ())); β } while (0); β } β } β β #endif /* LIBMESH_MACRO_HANDLER_H */ βββββ Listing 2: header file (libmesh_macro_handle.h). Note that `libmesh_example_requires_fun' could have also been `int', but I modified it to show a stack trace too. βββββ β #include <stdio.h> β #include <iostream> β #include "libmesh/libmesh.h" β #include "libmesh/libmesh_common.h" β #include "../include/libmesh_macro_handler.h" β β int β libmesh_error_msg_fun(const std::string msg) { β libmesh_error_msg(msg); β β return 0; β } βββββ Listing 3: source file (libmesh_macro_handle.cpp) |
From: edgar <edg...@cr...> - 2021-03-26 23:54:11
|
>> Since your attachment did not come through, I'm not sure where you'd >> like >> to add this line. My suggestion would be to pull the branch from the >> original PR, make your proposed change, and then either push that to >> your >> own libmesh fork so that we can try it out, or paste the diff (output >> of >> git diff or git log -p for the commit) so that someone can recreate >> it. ..aaaaand here is a diff (attached). |
From: edgar <edg...@cr...> - 2021-03-23 23:09:18
|
On 2021-03-23 16:07, John Peterson wrote: > Hi Edgar, > > Sorry for the lack of reply. I did get your patch, but did not have a > chance to try it out yet. Should this be applied on top of the changes > in > the related PR (https://github.com/libMesh/libmesh/pull/2602)? On > libmesh > master? Also, you mentioned: > >> "and needs further fixing" > > Any hints as to what else might need to be changed? Hi John. Further apologies for missing the discussion (https://github.com/libMesh/libmesh/pull/2388). I thought that it was abandoned. What I can report about https://github.com/libMesh/libmesh/pull/2602 is this: With the b91a8d3c5 commit of libMesh, I removed the line where my patch is applied, then ran =autoconf=, and omitted the =sed= line which changes =configure=. The summary is that it still uses =contrib/netcdf= for me (https://bitbin.it/pVrS2245/). I do have =--enable-netcdf= --with-netcdf=/usr/include --with-netcdf-lib=/usr/lib= as configuration flags. I _am_ able to compile with my local netcdf if 1. I apply the patch 2. Run =autoconf= 3. Run the =sed= line on =configure= After I read https://github.com/libMesh/libmesh/wiki/Updating-configure-tests%2C-Makefiles%2C-etc and it seems that libMesh's building stack creates a new an error with TIMPI configure: error: libmesh/contrib/timpi/configure failed for contrib/timpi ==> ERROR: A failure occurred in build(). Aborting... In any case, you can see the final =configure= and my =netcdf.m4= here: https://notabug.org/broncodev/libMesh.git (my internet connection could be better an it is uploading as I click Send) |
From: edgar <edg...@cr...> - 2021-03-22 19:27:08
|
On 2021-03-22 18:26, John Peterson wrote: > The main reason that libmesh_error_msg() and friends are macros is that > they use the __FILE__ and __LINE__ preprocessor defines to help direct > the > user to the exact place in the code where the error was triggered. I'm > not > sure if it is possible to do this same trick with inline functions, > IIRC it > will always report the line where the inline function is defined in the > source rather than the line where it is called. Thank you very much, John. |