{"action":"created","issue":{"url":"https://api.github.com/repos/libMesh/libmesh/issues/1497","repository_url":"https://api.github.com/repos/libMesh/libmesh","labels_url":"https://api.github.com/repos/libMesh/libmesh/issues/1497/labels{/name}","comments_url":"https://api.github.com/repos/libMesh/libmesh/issues/1497/comments","events_url":"https://api.github.com/repos/libMesh/libmesh/issues/1497/events","html_url":"https://github.com/libMesh/libmesh/pull/1497","id":272729982,"number":1497,"title":"Break EquationSystems::reinit() into solutions,systems parts","user":{"login":"roystgnr","id":2367346,"avatar_url":"https://avatars1.githubusercontent.com/u/2367346?v=4","gravatar_id":"","url":"https://api.github.com/users/roystgnr","html_url":"https://github.com/roystgnr","followers_url":"https://api.github.com/users/roystgnr/followers","following_url":"https://api.github.com/users/roystgnr/following{/other_user}","gists_url":"https://api.github.com/users/roystgnr/gists{/gist_id}","starred_url":"https://api.github.com/users/roystgnr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roystgnr/subscriptions","organizations_url":"https://api.github.com/users/roystgnr/orgs","repos_url":"https://api.github.com/users/roystgnr/repos","events_url":"https://api.github.com/users/roystgnr/events{/privacy}","received_events_url":"https://api.github.com/users/roystgnr/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":12,"created_at":"2017-11-09T21:27:43Z","updated_at":"2017-11-14T19:41:22Z","closed_at":"2017-11-12T16:20:07Z","author_association":"OWNER","pull_request":{"url":"https://api.github.com/repos/libMesh/libmesh/pulls/1497","html_url":"https://github.com/libMesh/libmesh/pull/1497","diff_url":"https://github.com/libMesh/libmesh/pull/1497.diff","patch_url":"https://github.com/libMesh/libmesh/pull/1497.patch"},"body":"This may let savvy users call only the former if they don't (yet) need\r\nthe latter.\r\n\r\nAs discussed in https://groups.google.com/d/msg/moose-users/ewSE3PsOkoE/FRIAu3P7CwAJ\r\n\r\nThe goal here was to avoid unnecessary Jacobian reallocation when doing multiple adaptivity steps per time step.  The benefit seems to be mediocre (2% speed up on the test application @jessecarterMOOSE gave me) and the MOOSE half of the update isn't ready to go yet (and won't be compatible with libMesh pre-this-PR), but even if the optimization never goes into MOOSE this is a sensible refactoring for libMesh, so I'd like to put it in regardless."},"comment":{"url":"https://api.github.com/repos/libMesh/libmesh/issues/comments/344374044","html_url":"https://github.com/libMesh/libmesh/pull/1497#issuecomment-344374044","issue_url":"https://api.github.com/repos/libMesh/libmesh/issues/1497","id":344374044,"user":{"login":"jessecarterMOOSE","id":12945054,"avatar_url":"https://avatars3.githubusercontent.com/u/12945054?v=4","gravatar_id":"","url":"https://api.github.com/users/jessecarterMOOSE","html_url":"https://github.com/jessecarterMOOSE","followers_url":"https://api.github.com/users/jessecarterMOOSE/followers","following_url":"https://api.github.com/users/jessecarterMOOSE/following{/other_user}","gists_url":"https://api.github.com/users/jessecarterMOOSE/gists{/gist_id}","starred_url":"https://api.github.com/users/jessecarterMOOSE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jessecarterMOOSE/subscriptions","organizations_url":"https://api.github.com/users/jessecarterMOOSE/orgs","repos_url":"https://api.github.com/users/jessecarterMOOSE/repos","events_url":"https://api.github.com/users/jessecarterMOOSE/events{/privacy}","received_events_url":"https://api.github.com/users/jessecarterMOOSE/received_events","type":"User","site_admin":false},"created_at":"2017-11-14T19:41:22Z","updated_at":"2017-11-14T19:41:22Z","author_association":"CONTRIBUTOR","body":"@roystgnr I think I see where you got 2% speedup from. I didn't actually program the logic into `FEProblemBase` to delay the call to `reinit_systems()` but I did look at the time spent there and it was on the order of 2%-3% for my benchmark problem. Unfortunately, with more CPU's this drops down below 1%. Same thing goes for a 3D problem. The good news is that code is pretty efficient!\r\n\r\nThis gets me wondering, since each reinit is so expensive, and since there can be so many, is there any precedence for delaying _all_ reinitialization until the end? In my naive view of things, if you have a linear variable on an element, and you split (refine) that element into a bunch of children and grandchildren, you can wait until the end to project your solution, right? (I believe some discussion on this led to #896). \r\n\r\nAdditionally, what if, instead of doing \"sweeps\" across the mesh, you recursively called each child element you created? In my problem, my refinement criteria is solely based on position, so you don't need the solution on the previous mesh to inform your algorithm. Once you have your element centroid and list of \"interesting\" coordinates (and the distance between them), you have enough to make a decision.\r\n\r\nI'm sure there's a lot more going on under the hood than I realize or even can possibly understand. If this is all crazy talk then just let me know."}}
{"actor":{"display_login":"jessecarterMOOSE"}}