{"action":"created","issue":{"url":"https://api.github.com/repos/idaholab/moose/issues/9669","repository_url":"https://api.github.com/repos/idaholab/moose","labels_url":"https://api.github.com/repos/idaholab/moose/issues/9669/labels{/name}","comments_url":"https://api.github.com/repos/idaholab/moose/issues/9669/comments","events_url":"https://api.github.com/repos/idaholab/moose/issues/9669/events","html_url":"https://github.com/idaholab/moose/issues/9669","id":250426202,"number":9669,"title":"Contribute to Multiple Named Matrices/Vectors via Tagging","user":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"labels":[{"id":80663214,"url":"https://api.github.com/repos/idaholab/moose/labels/C:%20MOOSE","name":"C: MOOSE","color":"0052cc","default":false},{"id":80663266,"url":"https://api.github.com/repos/idaholab/moose/labels/P:%20normal","name":"P: normal","color":"ededed","default":false},{"id":80663264,"url":"https://api.github.com/repos/idaholab/moose/labels/T:%20task","name":"T: task","color":"cccccc","default":false}],"state":"open","locked":false,"assignee":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"assignees":[{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2017-08-15T20:20:29Z","updated_at":"2018-02-22T17:25:04Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"### Description of the enhancement or error report\r\nA new capability needs to be added to MOOSE to allow for the creation/filling of multiple Matrices/Vectors.  This will be accomplished by declaring new matrices/vectors in a `System` using \"tags\"... and then objects that contribute to matrices/vectors (Kernels, BCs, etc.) would then be assigned tags that they would contribute to.\r\n\r\nWe are going to create `BundleVector` and `BundleMatrix` that manage multiple vectors and matrices. The `BundleVector` and `BundleMatrix`  should work as if they were  regular vector and regular matrix, except  that they accept tags.   Each tag corresponds to a matrix/vector, and when we do operations on the  `BundleVector/matrix`,  all the matrices/vectors with which the passed in tags or internal tags  are associated  should accept the operations. \r\n\r\n### Rationale for the enhancement or information for reproducing the error\r\nMany use-cases exist for a capability that would allow MOOSE to create multiple residual/jacobians and have objects selectively contribute to them.  A few examples are generalized eigenvalue solvers, explicit implementations that would like to use lumped mass matrices, producing a mass matrix for inspection and better \"save in\" capability (more efficient).\r\n\r\n### Identified impact\r\nThe impact will be significant.  Most of the work will be done in `Assembly` with some modifications to `SystemBase`, etc."},"comment":{"url":"https://api.github.com/repos/idaholab/moose/issues/comments/367755893","html_url":"https://github.com/idaholab/moose/issues/9669#issuecomment-367755893","issue_url":"https://api.github.com/repos/idaholab/moose/issues/9669","id":367755893,"user":{"login":"friedmud","id":870705,"avatar_url":"https://avatars0.githubusercontent.com/u/870705?v=4","gravatar_id":"","url":"https://api.github.com/users/friedmud","html_url":"https://github.com/friedmud","followers_url":"https://api.github.com/users/friedmud/followers","following_url":"https://api.github.com/users/friedmud/following{/other_user}","gists_url":"https://api.github.com/users/friedmud/gists{/gist_id}","starred_url":"https://api.github.com/users/friedmud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/friedmud/subscriptions","organizations_url":"https://api.github.com/users/friedmud/orgs","repos_url":"https://api.github.com/users/friedmud/repos","events_url":"https://api.github.com/users/friedmud/events{/privacy}","received_events_url":"https://api.github.com/users/friedmud/received_events","type":"User","site_admin":false},"created_at":"2018-02-22T17:25:04Z","updated_at":"2018-02-22T17:25:04Z","author_association":"CONTRIBUTOR","body":"![img_0329](https://user-images.githubusercontent.com/870705/36552659-a0ea3d10-17b7-11e8-975d-a6fbaca65470.JPG)\r\n\r\n@fdkong and myself did a bunch of design work this morning to figure out what the tagging should do.  The above picture are the 4 use-cases that we identified... and we think we have a design that will satisfy them.  Here it is:\r\n\r\n  1.  There is a 1 to 1 relationship between a tag and a vector/matrix.  This is critical to make things easy.\r\n1.  Vector tags and Matrix tags are separate (they always have been)\r\n1.  Tags are added independently of adding vectors/matrices\r\n1.  Vectors/matrices are then associated with tags through a separate `associateVectorToTag()` and `associateMatirxToTag()` calls.\r\n1.  Nonlinear problems will have three vector tags by default: `residual`, `time` and `nontime`\r\n    1. `residual` is the final combined residual.  The residual vector that comes in from the PETSc callback will be associated with that tag at the top of `computeResidual()`\r\n    1. `time` is the residual for `TimeKernel` derived Kernels\r\n    1. `nontime` is the residual for all other Kernels\r\n    1. `time` and `nontime` are only to be used _before_ the callback to `TimeIntegrator::postResidual()` in `NonlinearSystem::computeResidualInternal()`.  After that - all objects should contribute to `residual` directly.\r\n    1. The job of `TimeIntegrator::postResidual()` is to combine the `time` and `nontime` vectors into the `residual` vector\r\n1.  Kernels default to `vector_tags` of either `time` or `nontime` depending on what they are\r\n1.  Kernels default to `matrix_tags` of `system` which will be the tag for the main matrix in the nonlinear system.\r\n1.  NeumannBCs default to the same things as Kernels\r\n1.  DirichletBCs default to `vector_tags` of `residual` and `matrix_tags` of `system`\r\n1.  All objects will have input_parameters of `vector_tags` and `matrix_tags` to allow the specification of where stuff goes from the input file\r\n1.  All objects will also have `extra_vector_tags` and `extra_matrix_tags` so as not to override the defaults (this is what the new `save_in` will be).\r\n1.  `computeResidual()` will take a `std::set` of `TagID`s... that will restrict what objects are run during that residual computation.\r\n    1. The \"normal\" compute residual operation will pass in the residual from the callback and the `residual`, `time` and `nontime` tags."}}
{"actor":{"display_login":"friedmud"}}