{"action":"created","comment":{"url":"https://api.github.com/repos/dealii/dealii/pulls/comments/30942565","id":30942565,"diff_hunk":"@@ -2126,6 +2126,289 @@ operator*(const PackagedOperation<Range> &comp,\n   return return_comp;\n }\n \n+\n+/**\n+ * @relates LinearOperator\n+ *\n+ * A function that takes a block matrix @p a and returns its associated\n+ * lower triangular matrix operator (diagonal is not included).\n+ *\n+ * @code\n+ *  a00 | a01 | a02                 |     |\n+ *  ---------------             ---------------\n+ *  a10 | a11 | a12     ->      a10 |     |\n+ *  ---------------             ---------------\n+ *  a20 | a21 | a22             a20 | a21 |\n+ * @endcode\n+ *\n+ * @ingroup LAOperators\n+ */\n+template <typename Range = BlockVector<double>,\n+          typename Domain = Range,\n+          typename BlockMatrix>\n+LinearOperator<Range, Domain>\n+lower_triangular_operator(const BlockMatrix &block_matrix)\n+{\n+  Assert( block_matrix.n_block_rows() == block_matrix.n_block_cols(),\n+          ExcDimensionMismatch(block_matrix.n_block_rows(),block_matrix.n_block_cols()) );\n+\n+  LinearOperator<Range, Domain> return_op;\n+\n+  return_op.reinit_range_vector = [&block_matrix](Range &v, bool fast)\n+  {\n+    // Reinitialize the block vector to have the number of blocks\n+    // equal to the number of row blocks of the matrix block_matrix.\n+    v.reinit(block_matrix.n_block_rows());\n+\n+    // And reinitialize every individual block with reinit_range_vectors:\n+    for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)\n+      linear_operator(block_matrix.block(i,0)).reinit_range_vector(v.block(i), fast);\n+\n+    v.collect_sizes();\n+  };\n+\n+  return_op.reinit_domain_vector = [&block_matrix](Domain &v, bool fast)\n+  {\n+    // Reinitialize the block vector to have the number of blocks\n+    // equal to the number of coloumn blocks of the matrix block_matrix.\n+    v.reinit(block_matrix.n_block_cols());\n+\n+    // And reinitialize every individual block with reinit_domain_vectors:\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      linear_operator(block_matrix.block(0,i)).reinit_domain_vector(v.block(i), fast);\n+\n+    v.collect_sizes();\n+  };\n+\n+  return_op.vmult = [&block_matrix](Range &v, const Domain &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));\n+    Assert( u.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));\n+\n+    v.block(0) *= 0;\n+    for (unsigned int i = 1; i < block_matrix.n_block_rows(); ++i)\n+      {\n+        block_matrix.block(i,0).vmult(v.block(i), u.block(0));\n+        for (unsigned int j = 1; j < i; ++j)\n+          block_matrix.block(i,j).vmult_add(v.block(i), u.block(j));\n+      }\n+  };\n+\n+  return_op.vmult_add = [&block_matrix](Range &v, const Domain &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));\n+    Assert( u.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));\n+\n+    for (unsigned int i = 1; i < block_matrix.n_block_rows(); ++i)\n+      {\n+        block_matrix.block(i,0).vmult_add(v.block(i), u.block(0));\n+        for (unsigned int j = 1; j < i; ++j)\n+          block_matrix.block(i,j).vmult_add(v.block(i), u.block(j));\n+      }\n+  };\n+\n+  return_op.Tvmult = [&block_matrix](Domain &v, const Range &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));\n+    Assert( u.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      {\n+        v.block(i) *= 0;\n+        for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)\n+          block_matrix.block(j,i).Tvmult_add(v.block(i), u.block(j));\n+      }\n+  };\n+\n+  return_op.Tvmult_add = [&block_matrix](Domain &v, const Range &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));\n+    Assert( u.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)\n+        block_matrix.block(j,i).Tvmult_add(v.block(i), u.block(j));\n+  };\n+\n+  return return_op;\n+}\n+\n+\n+/**\n+ * @relates LinearOperator\n+ *\n+ * A function that takes a block matrix @p a and returns its associated\n+ * upper triangular matrix operator (diagonal is not included).\n+ *\n+ * @code\n+ *  a00 | a01 | a02                 | a01 | a02\n+ *  ---------------             ---------------\n+ *  a10 | a11 | a12     ->          |     | a12\n+ *  ---------------             ---------------\n+ *  a20 | a21 | a22                 |     |\n+ * @endcode\n+ *\n+ * @ingroup LAOperators\n+ */\n+template <typename Range = BlockVector<double>,\n+          typename Domain = Range,\n+          typename BlockMatrix>\n+LinearOperator<Range, Domain>\n+upper_triangular_operator(const BlockMatrix &block_matrix)\n+{\n+  Assert( block_matrix.n_block_rows() == block_matrix.n_block_cols(),\n+          ExcDimensionMismatch(block_matrix.n_block_rows(),block_matrix.n_block_cols()) );\n+\n+  LinearOperator<Range, Domain> return_op;\n+\n+  return_op.reinit_range_vector = [&block_matrix](Range &v, bool fast)\n+  {\n+    // Reinitialize the block vector to have the number of blocks\n+    // equal to the number of row blocks of the matrix block_matrix.\n+    v.reinit(block_matrix.n_block_rows());\n+\n+    // And reinitialize every individual block with reinit_range_vectors:\n+    for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)\n+      linear_operator(block_matrix.block(i,0)).reinit_range_vector(v.block(i), fast);\n+\n+    v.collect_sizes();\n+  };\n+\n+  return_op.reinit_domain_vector = [&block_matrix](Domain &v, bool fast)\n+  {\n+    // Reinitialize the block vector to have the number of blocks\n+    // equal to the number of coloumn blocks of the matrix block_matrix.\n+    v.reinit(block_matrix.n_block_cols());\n+\n+    // And reinitialize every individual block with reinit_domain_vectors:\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      linear_operator(block_matrix.block(0,i)).reinit_domain_vector(v.block(i), fast);\n+\n+    v.collect_sizes();\n+  };\n+\n+  return_op.vmult = [&block_matrix](Range &v, const Domain &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));\n+    Assert( u.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_rows(); ++i)\n+      {\n+        v.block(i) *= 0;\n+        for (unsigned int j = i + 1; j < block_matrix.n_block_cols(); ++j)\n+          block_matrix.block(i,j).Tvmult_add(v.block(i), u.block(j));\n+      }\n+\n+  };\n+\n+  return_op.vmult_add = [&block_matrix](Range &v, const Domain &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_rows()));\n+    Assert( u.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_cols()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      for (unsigned int j = i + 1; j < block_matrix.n_block_rows(); ++j)\n+        block_matrix.block(i,j).Tvmult_add(v.block(i), u.block(j));\n+  };\n+\n+  return_op.Tvmult = [&block_matrix](Domain &v, const Range &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));\n+    Assert( u.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      {\n+        v.block(i) *= 0;\n+        for (unsigned int j = 0; j < i; ++j)\n+          block_matrix.block(j,i).vmult_add(v.block(i), u.block(j));\n+      }\n+  };\n+\n+  return_op.Tvmult_add = [&block_matrix](Domain &v, const Range &u)\n+  {\n+    Assert( v.n_blocks() == block_matrix.n_block_cols(),\n+            ExcDimensionMismatch(v.n_blocks(), block_matrix.n_block_cols()));\n+    Assert( u.n_blocks() == block_matrix.n_block_rows(),\n+            ExcDimensionMismatch(u.n_blocks(), block_matrix.n_block_rows()));\n+\n+    for (unsigned int i = 0; i < block_matrix.n_block_cols(); ++i)\n+      for (unsigned int j = 0; j < i; ++j)\n+        block_matrix.block(j,i).vmult_add(v.block(i), u.block(j));\n+  };\n+\n+  return return_op;\n+}\n+\n+\n+/**\n+ * @relates LinearOperator\n+ *\n+ * Let M be a block matrix of the form Id + T made of nxn blocks\n+ * and where T is a lower / upper triangular (without diagonal).\n+ * Then, its inverse is of the form:\n+ * @code\n+ *  Id + sum_{i=1}^{n-1} (-1)^i T^i\n+ * @endcode\n+ * This formula can be used to invert all triangular matrices\n+ * (diagonal included of course).\n+ *\n+ * This function takes a block matrix @p a (possibly full) and a linear block operator\n+ * @p inverse_diagonal made of the inverse of the diagonal blocks inverses.\n+ * The output is the inverse of the matrix in the case of a triangular matrix and\n+ * as inverse_diagonal its diagonal blocks inverses.\n+ * Otherwise, the result is a preconditioner.\n+ *\n+ * The parameter @p lower is a bool that allows to specify if we want\n+ * to use lower triangular part of a (true, this is the default value) or\n+ * to use upper triangular part of a (false).\n+ * @ingroup LAOperators\n+ */\n+template <typename Range = BlockVector<double>,\n+          typename Domain = Range,\n+          typename BlockMatrix>\n+LinearOperator<Range, Domain>\n+preconditioner_from_diagonal_inverse( const BlockMatrix &block_matrix,\n+                                      const LinearOperator<Range, Domain> &inverse_diagonal,\n+                                      bool lower = true)\n+{\n+  Assert( block_matrix.n_block_rows() == block_matrix.n_block_cols(),\n+          ExcDimensionMismatch(block_matrix.n_block_rows(),block_matrix.n_block_cols()) );\n+\n+  LinearOperator<Domain, Range> op_a;\n+\n+  if (lower)\n+    {\n+      op_a = lower_triangular_operator(block_matrix);\n+    }\n+  else\n+    {\n+      op_a = upper_triangular_operator(block_matrix);\n+    }\n+\n+  auto id     = identity_operator(op_a.reinit_range_vector);\n+  auto result = identity_operator(op_a.reinit_range_vector);\n+\n+  for (unsigned int i = 0; i < block_matrix.n_block_cols() - 1; ++i)\n+    result = id - inverse_diagonal * op_a * result;","path":"include/deal.II/lac/linear_operator.h","position":281,"original_position":281,"commit_id":"ad2451c8e1c0a568e3bbd48b87e8fa282fecf8be","original_commit_id":"ad2451c8e1c0a568e3bbd48b87e8fa282fecf8be","user":{"login":"bangerth","id":7504421,"avatar_url":"https://avatars.githubusercontent.com/u/7504421?v=3","gravatar_id":"","url":"https://api.github.com/users/bangerth","html_url":"https://github.com/bangerth","followers_url":"https://api.github.com/users/bangerth/followers","following_url":"https://api.github.com/users/bangerth/following{/other_user}","gists_url":"https://api.github.com/users/bangerth/gists{/gist_id}","starred_url":"https://api.github.com/users/bangerth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bangerth/subscriptions","organizations_url":"https://api.github.com/users/bangerth/orgs","repos_url":"https://api.github.com/users/bangerth/repos","events_url":"https://api.github.com/users/bangerth/events{/privacy}","received_events_url":"https://api.github.com/users/bangerth/received_events","type":"User","site_admin":false},"body":"Oh oh, I see. I think both @tamiko and I missed that you are re-using `result` on the right hand side for the recursive call. I let @tamiko decide whether that can work or not. Maybe a comment before the loop explaining what you are doing here would have elucidated the issue.","created_at":"2015-05-23T06:44:05Z","updated_at":"2015-05-23T06:44:05Z","html_url":"https://github.com/dealii/dealii/pull/950#discussion_r30942565","pull_request_url":"https://api.github.com/repos/dealii/dealii/pulls/950","_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments/30942565"},"html":{"href":"https://github.com/dealii/dealii/pull/950#discussion_r30942565"},"pull_request":{"href":"https://api.github.com/repos/dealii/dealii/pulls/950"}}},"pull_request":{"url":"https://api.github.com/repos/dealii/dealii/pulls/950","id":35912481,"html_url":"https://github.com/dealii/dealii/pull/950","diff_url":"https://github.com/dealii/dealii/pull/950.diff","patch_url":"https://github.com/dealii/dealii/pull/950.patch","issue_url":"https://api.github.com/repos/dealii/dealii/issues/950","number":950,"state":"open","locked":false,"title":"Block lin op inv","user":{"login":"ESeNonFossiIo","id":8956997,"avatar_url":"https://avatars.githubusercontent.com/u/8956997?v=3","gravatar_id":"","url":"https://api.github.com/users/ESeNonFossiIo","html_url":"https://github.com/ESeNonFossiIo","followers_url":"https://api.github.com/users/ESeNonFossiIo/followers","following_url":"https://api.github.com/users/ESeNonFossiIo/following{/other_user}","gists_url":"https://api.github.com/users/ESeNonFossiIo/gists{/gist_id}","starred_url":"https://api.github.com/users/ESeNonFossiIo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ESeNonFossiIo/subscriptions","organizations_url":"https://api.github.com/users/ESeNonFossiIo/orgs","repos_url":"https://api.github.com/users/ESeNonFossiIo/repos","events_url":"https://api.github.com/users/ESeNonFossiIo/events{/privacy}","received_events_url":"https://api.github.com/users/ESeNonFossiIo/received_events","type":"User","site_admin":false},"body":"A function to use preconditioners with linear operators.","created_at":"2015-05-21T08:55:52Z","updated_at":"2015-05-23T06:44:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3733342e7dadae8ae9bb7fe13b0bb7e1332e5491","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dealii/dealii/pulls/950/commits","review_comments_url":"https://api.github.com/repos/dealii/dealii/pulls/950/comments","review_comment_url":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dealii/dealii/issues/950/comments","statuses_url":"https://api.github.com/repos/dealii/dealii/statuses/ad2451c8e1c0a568e3bbd48b87e8fa282fecf8be","head":{"label":"ESeNonFossiIo:block_lin_op_inv","ref":"block_lin_op_inv","sha":"ad2451c8e1c0a568e3bbd48b87e8fa282fecf8be","user":{"login":"ESeNonFossiIo","id":8956997,"avatar_url":"https://avatars.githubusercontent.com/u/8956997?v=3","gravatar_id":"","url":"https://api.github.com/users/ESeNonFossiIo","html_url":"https://github.com/ESeNonFossiIo","followers_url":"https://api.github.com/users/ESeNonFossiIo/followers","following_url":"https://api.github.com/users/ESeNonFossiIo/following{/other_user}","gists_url":"https://api.github.com/users/ESeNonFossiIo/gists{/gist_id}","starred_url":"https://api.github.com/users/ESeNonFossiIo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ESeNonFossiIo/subscriptions","organizations_url":"https://api.github.com/users/ESeNonFossiIo/orgs","repos_url":"https://api.github.com/users/ESeNonFossiIo/repos","events_url":"https://api.github.com/users/ESeNonFossiIo/events{/privacy}","received_events_url":"https://api.github.com/users/ESeNonFossiIo/received_events","type":"User","site_admin":false},"repo":{"id":33110155,"name":"dealii","full_name":"ESeNonFossiIo/dealii","owner":{"login":"ESeNonFossiIo","id":8956997,"avatar_url":"https://avatars.githubusercontent.com/u/8956997?v=3","gravatar_id":"","url":"https://api.github.com/users/ESeNonFossiIo","html_url":"https://github.com/ESeNonFossiIo","followers_url":"https://api.github.com/users/ESeNonFossiIo/followers","following_url":"https://api.github.com/users/ESeNonFossiIo/following{/other_user}","gists_url":"https://api.github.com/users/ESeNonFossiIo/gists{/gist_id}","starred_url":"https://api.github.com/users/ESeNonFossiIo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ESeNonFossiIo/subscriptions","organizations_url":"https://api.github.com/users/ESeNonFossiIo/orgs","repos_url":"https://api.github.com/users/ESeNonFossiIo/repos","events_url":"https://api.github.com/users/ESeNonFossiIo/events{/privacy}","received_events_url":"https://api.github.com/users/ESeNonFossiIo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ESeNonFossiIo/dealii","description":"The development repository for the deal.II finite element library.","fork":true,"url":"https://api.github.com/repos/ESeNonFossiIo/dealii","forks_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/forks","keys_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/teams","hooks_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/hooks","issue_events_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/issues/events{/number}","events_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/events","assignees_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/assignees{/user}","branches_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/branches{/branch}","tags_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/tags","blobs_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/git/refs{/sha}","trees_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/statuses/{sha}","languages_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/languages","stargazers_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/stargazers","contributors_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/contributors","subscribers_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/subscribers","subscription_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/subscription","commits_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/commits{/sha}","git_commits_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/git/commits{/sha}","comments_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/comments{/number}","issue_comment_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/issues/comments{/number}","contents_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/contents/{+path}","compare_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/merges","archive_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/downloads","issues_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/issues{/number}","pulls_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/pulls{/number}","milestones_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/milestones{/number}","notifications_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/labels{/name}","releases_url":"https://api.github.com/repos/ESeNonFossiIo/dealii/releases{/id}","created_at":"2015-03-30T07:57:41Z","updated_at":"2015-05-06T15:24:04Z","pushed_at":"2015-05-21T16:10:58Z","git_url":"git://github.com/ESeNonFossiIo/dealii.git","ssh_url":"git@github.com:ESeNonFossiIo/dealii.git","clone_url":"https://github.com/ESeNonFossiIo/dealii.git","svn_url":"https://github.com/ESeNonFossiIo/dealii","homepage":"http://www.dealii.org/","size":114529,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dealii:master","ref":"master","sha":"ba08346a47880686a80d13a661e501b4350c4b76","user":{"login":"dealii","id":7506070,"avatar_url":"https://avatars.githubusercontent.com/u/7506070?v=3","gravatar_id":"","url":"https://api.github.com/users/dealii","html_url":"https://github.com/dealii","followers_url":"https://api.github.com/users/dealii/followers","following_url":"https://api.github.com/users/dealii/following{/other_user}","gists_url":"https://api.github.com/users/dealii/gists{/gist_id}","starred_url":"https://api.github.com/users/dealii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dealii/subscriptions","organizations_url":"https://api.github.com/users/dealii/orgs","repos_url":"https://api.github.com/users/dealii/repos","events_url":"https://api.github.com/users/dealii/events{/privacy}","received_events_url":"https://api.github.com/users/dealii/received_events","type":"Organization","site_admin":false},"repo":{"id":21943980,"name":"dealii","full_name":"dealii/dealii","owner":{"login":"dealii","id":7506070,"avatar_url":"https://avatars.githubusercontent.com/u/7506070?v=3","gravatar_id":"","url":"https://api.github.com/users/dealii","html_url":"https://github.com/dealii","followers_url":"https://api.github.com/users/dealii/followers","following_url":"https://api.github.com/users/dealii/following{/other_user}","gists_url":"https://api.github.com/users/dealii/gists{/gist_id}","starred_url":"https://api.github.com/users/dealii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dealii/subscriptions","organizations_url":"https://api.github.com/users/dealii/orgs","repos_url":"https://api.github.com/users/dealii/repos","events_url":"https://api.github.com/users/dealii/events{/privacy}","received_events_url":"https://api.github.com/users/dealii/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dealii/dealii","description":"The development repository for the deal.II finite element library.","fork":false,"url":"https://api.github.com/repos/dealii/dealii","forks_url":"https://api.github.com/repos/dealii/dealii/forks","keys_url":"https://api.github.com/repos/dealii/dealii/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dealii/dealii/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dealii/dealii/teams","hooks_url":"https://api.github.com/repos/dealii/dealii/hooks","issue_events_url":"https://api.github.com/repos/dealii/dealii/issues/events{/number}","events_url":"https://api.github.com/repos/dealii/dealii/events","assignees_url":"https://api.github.com/repos/dealii/dealii/assignees{/user}","branches_url":"https://api.github.com/repos/dealii/dealii/branches{/branch}","tags_url":"https://api.github.com/repos/dealii/dealii/tags","blobs_url":"https://api.github.com/repos/dealii/dealii/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dealii/dealii/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dealii/dealii/git/refs{/sha}","trees_url":"https://api.github.com/repos/dealii/dealii/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dealii/dealii/statuses/{sha}","languages_url":"https://api.github.com/repos/dealii/dealii/languages","stargazers_url":"https://api.github.com/repos/dealii/dealii/stargazers","contributors_url":"https://api.github.com/repos/dealii/dealii/contributors","subscribers_url":"https://api.github.com/repos/dealii/dealii/subscribers","subscription_url":"https://api.github.com/repos/dealii/dealii/subscription","commits_url":"https://api.github.com/repos/dealii/dealii/commits{/sha}","git_commits_url":"https://api.github.com/repos/dealii/dealii/git/commits{/sha}","comments_url":"https://api.github.com/repos/dealii/dealii/comments{/number}","issue_comment_url":"https://api.github.com/repos/dealii/dealii/issues/comments{/number}","contents_url":"https://api.github.com/repos/dealii/dealii/contents/{+path}","compare_url":"https://api.github.com/repos/dealii/dealii/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dealii/dealii/merges","archive_url":"https://api.github.com/repos/dealii/dealii/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dealii/dealii/downloads","issues_url":"https://api.github.com/repos/dealii/dealii/issues{/number}","pulls_url":"https://api.github.com/repos/dealii/dealii/pulls{/number}","milestones_url":"https://api.github.com/repos/dealii/dealii/milestones{/number}","notifications_url":"https://api.github.com/repos/dealii/dealii/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dealii/dealii/labels{/name}","releases_url":"https://api.github.com/repos/dealii/dealii/releases{/id}","created_at":"2014-07-17T14:00:26Z","updated_at":"2015-05-12T13:47:50Z","pushed_at":"2015-05-23T05:12:04Z","git_url":"git://github.com/dealii/dealii.git","ssh_url":"git@github.com:dealii/dealii.git","clone_url":"https://github.com/dealii/dealii.git","svn_url":"https://github.com/dealii/dealii","homepage":"http://www.dealii.org/","size":150245,"stargazers_count":57,"watchers_count":57,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":76,"mirror_url":null,"open_issues_count":86,"forks":76,"open_issues":86,"watchers":57,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/950"},"html":{"href":"https://github.com/dealii/dealii/pull/950"},"issue":{"href":"https://api.github.com/repos/dealii/dealii/issues/950"},"comments":{"href":"https://api.github.com/repos/dealii/dealii/issues/950/comments"},"review_comments":{"href":"https://api.github.com/repos/dealii/dealii/pulls/950/comments"},"review_comment":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dealii/dealii/pulls/950/commits"},"statuses":{"href":"https://api.github.com/repos/dealii/dealii/statuses/ad2451c8e1c0a568e3bbd48b87e8fa282fecf8be"}}}}