From: Andrew D. <and...@gm...> - 2013-12-10 15:25:47
|
Hi all, I'm observing some strange behavior using the System::point_valuefunction. I have a system of two variables (say "u" and "v"), each added using the function system.add_variable(name, libMeshEnums::Order); if they have the same libMesh::Enums::Order, there is no problem. However, if they have different orders I am noticing that system.point_value(varNum, point) does not always work properly. If the first one is lower order: system.point_value(0, point) is correct system.point_value(1, point) is wrong if the first one is higher order: system.point_value(0, point) is correct system.point_value(1, point) results in a seg. fault Does anyone know what I am doing wrong? Thanks! Andy |
From: John P. <jwp...@gm...> - 2013-12-10 16:03:26
|
On Tue, Dec 10, 2013 at 8:25 AM, Andrew Davis <and...@gm...> wrote: > Hi all, > > I'm observing some strange behavior using the > System::point_valuefunction. I have a system of two variables (say > "u" and "v"), each added > using the function > > system.add_variable(name, libMeshEnums::Order); > > if they have the same libMesh::Enums::Order, there is no problem. However, > if they have different orders I am noticing that system.point_value(varNum, > point) does not always work properly. > > If the first one is lower order: > > system.point_value(0, point) is correct > system.point_value(1, point) is wrong Wrong how? Does it return 0? Is this is serial or parallel? > if the first one is higher order: > > system.point_value(0, point) is correct > system.point_value(1, point) results in a seg. fault That certainly sounds like a bug... Roy initially wrote this code quite a while ago (Feb 2010) so he may have a better suggestion, but can you try running in debug mode, preferably configured with --enable-tracefiles, and see if you either hit an assert or generate a useful stack trace? -- John |
From: Roy S. <roy...@ic...> - 2013-12-10 16:41:45
|
On Tue, 10 Dec 2013, Andrew Davis wrote: > Does anyone know what I am doing wrong? Assuming you're doing something wrong was wrong. You just caught a bug in our system.C. I've committed a fix to our git master. If you're using a release libMesh and don't want to upgrade or wait for a backported fix, you can change three lines in src/systems/system.C from FEType fe_type = dof_map.variable_type(0); to FEType fe_type = dof_map.variable_type(var); --- Roy |
From: Andrew D. <and...@gm...> - 2013-12-11 00:07:58
|
Excellent! that seems to have fixed the problem! Thanks! Andy On Tue, Dec 10, 2013 at 11:41 AM, Roy Stogner <roy...@ic...>wrote: > > On Tue, 10 Dec 2013, Andrew Davis wrote: > > Does anyone know what I am doing wrong? >> > > Assuming you're doing something wrong was wrong. You just caught a > bug in our system.C. > > I've committed a fix to our git master. If you're using a release > libMesh and don't want to upgrade or wait for a backported fix, you > can change three lines in src/systems/system.C from > > FEType fe_type = dof_map.variable_type(0); > > to > > FEType fe_type = dof_map.variable_type(var); > --- > Roy > |