{"action":"created","comment":{"url":"https://api.github.com/repos/dealii/dealii/pulls/comments/244183983","pull_request_review_id":188121644,"id":244183983,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDE4Mzk4Mw==","diff_hunk":"@@ -0,0 +1,346 @@\n+// ---------------------------------------------------------------------\n+//\n+// Copyright (C) 2018 by the deal.II authors\n+//\n+// This file is part of the deal.II library.\n+//\n+// The deal.II library is free software; you can use it, redistribute\n+// it, and/or modify it under the terms of the GNU Lesser General\n+// Public License as published by the Free Software Foundation; either\n+// version 2.1 of the License, or (at your option) any later version.\n+// The full text of the license can be found in the file LICENSE.md at\n+// the top level directory of deal.II.\n+//\n+// ---------------------------------------------------------------------\n+\n+#ifndef dealii_distributed_cell_data_transfer_h\n+#define dealii_distributed_cell_data_transfer_h\n+\n+#include <deal.II/base/config.h>\n+\n+#include <deal.II/base/smartpointer.h>\n+\n+#include <deal.II/distributed/tria.h>\n+\n+#include <boost/range/iterator_range.hpp>\n+\n+#include <functional>\n+\n+\n+DEAL_II_NAMESPACE_OPEN\n+\n+namespace parallel\n+{\n+  namespace distributed\n+  {\n+    /**\n+     * Transfer data that is associated with each active cell (like error\n+     * indicators) while refining and/or coarsening a distributed triangulation\n+     * and handles the necessary communication.\n+     *\n+     * This class therefore does for cell-related information what\n+     * parallel::distributed::SolutionTransfer does for the values of degrees of\n+     * freedom defined on a parallel::distributed::Triangulation.\n+     *\n+     * This class has been designed to operate on any kind of datatype that is\n+     * serializable. A non-distributed Vector container holding the cell by cell\n+     * data has to be provided. Its size has to correspond to\n+     * Triangulation::n_active_cells().\n+     *\n+     * <h3>Transferring cell by cell data</h3>\n+     *\n+     * The following code snippet demonstrates how to transfer cell-related data\n+     * across refinement/coarsening of the registered triangulation.\n+     *\n+     * @code\n+     * // prepare the triangulation,\n+     * triangulation.prepare_coarsening_and_refinement();\n+     *\n+     * // prepare the CellDataTransfer object for coarsening and refinement\n+     * // and give the cell data vector that we intend to unpack later,\n+     * Vector<double> data_to_transfer (triangulation.n_active_cells());\n+     * //[fill data_to_transfer with cell by cell values...]\n+     *\n+     * parallel::distributed::CellDataTransfer<dim, spacedim, Vector<double>>\n+     *   cell_data_trans(triangulation);\n+     * cell_data_trans.prepare_for_coarsening_and_refinement(data_to_transfer);\n+     *\n+     * // actually execute the refinement,\n+     * triangulation.execute_coarsening_and_refinement();\n+     *\n+     * // unpack transferred data,\n+     * Vector<double> transferred_data (triangulation.n_active_cells());\n+     * cell_data_trans.unpack(transferred_data);\n+     *\n+     * @endcode\n+     *\n+     *\n+     * <h3>Use for serialization</h3>\n+     *\n+     * This class can be used to serialize and later deserialize a distributed\n+     * mesh with attached data to separate files. If you use more than one\n+     * parallel::distributed::CellDataTransfer object, they need to be\n+     * serialized and deserialized in the same order.\n+     *\n+     * For serialization, the following code snippet saves not only the\n+     * triangulation itself, but also the cell by cell data attached:\n+     * @code\n+     * Vector<double> data_to_transfer (triangulation.n_active_cells());\n+     * //[fill data_to_transfer with cell by cell values...]\n+     *\n+     * parallel::distributed::CellDataTransfer<dim, spacedim, Vector<double>>\n+     *   cell_data_trans(triangulation);\n+     * cell_data_trans.prepare_serialization(data_to_transfer);\n+     *\n+     * triangulation.save(filename);\n+     * @endcode\n+     *\n+     * Later, during deserialization, both triangulation and data can be\n+     * restored as follows:\n+     * @code\n+     * //[create coarse mesh...]\n+     * triangulation.load(filename);\n+     *\n+     * parallel::distributed::CellDataTransfer<dim, spacedim, Vector<double>>\n+     *   cell_data_trans(triangulation);\n+     * Vector<double> transferred_data (triangulation.n_active_cells());\n+     * cell_data_trans.deserialize(transferred_data);\n+     * @endcode\n+     *\n+     * @note If you use more than one object to attach data to a\n+     * parallel::distributed::Triangulation at the same time (e.g. a\n+     * parallel::distributed::SolutionTransfer object) with the aim of\n+     * serialization, the calls to\n+     * parallel::distributed::CellDataTransfer::prepare_serialization()\n+     * and parallel::distributed::SolutionTransfer::prepare_serialization(),\n+     * as well as parallel::distributed::CellDataTransfer::deserialize() and\n+     * parallel::distributed::SolutionTransfer::deserialize(),\n+     * need to be in the same order, respectively.\n+     *\n+     * @note See documentation of parallel::distributed::SolutionTransfer for\n+     * matching code snippets for both transfer and serialization.\n+     *\n+     * @ingroup distributed\n+     * @author Marc Fehling, 2018\n+     */\n+    template <int dim, int spacedim = dim, typename VectorType = Vector<double>>\n+    class CellDataTransfer\n+    {\n+    public:\n+      /**\n+       * Whenever data shall be transferred across coarsening, it is not a\n+       * trivial choice how to process data of cells which will be coarsened. Or\n+       * in other words, which data should be stored in the corresponding parent\n+       * cell.\n+       *\n+       * In this namespace, we offer a few strategies that cope with this\n+       * problem, that can be passed to the\n+       * parallel::distributed::CellDataTransfer constructor.\n+       */\n+      struct CoarseningStrategies\n+      {\n+        /**\n+         * Evaluate data from @p input_vector on children of @p parent.\n+         * Check if data on all children match, and return that value.\n+         */\n+        static typename VectorType::value_type\n+        check_equality(const typename parallel::distributed::\n+                         Triangulation<dim, spacedim>::cell_iterator &parent,\n+                       const VectorType *input_vector)\n+        {\n+          const typename VectorType::value_type value =\n+            (*input_vector)[parent->child(0)->active_cell_index()];\n+\n+          for (unsigned int child_index = 1; child_index < parent->n_children();\n+               ++child_index)\n+            Assert(value == (*input_vector)[parent->child(child_index)\n+                                              ->active_cell_index()],\n+                   ExcMessage(\n+                     \"Values on cells that will be coarsened are not equal!\"));\n+\n+          return value;\n+        }\n+\n+        /**\n+         * Evaluate data from @p input_vector on children of @p parent.\n+         * Return sum.\n+         */\n+        static typename VectorType::value_type\n+        sum(const typename parallel::distributed::Triangulation<dim, spacedim>::\n+              cell_iterator & parent,\n+            const VectorType *input_vector)\n+        {\n+          typename VectorType::value_type sum = 0;\n+\n+          for (unsigned int child_index = 0; child_index < parent->n_children();\n+               ++child_index)\n+            sum +=\n+              (*input_vector)[parent->child(child_index)->active_cell_index()];\n+\n+          return sum;\n+        }\n+\n+        /**\n+         * Evaluate data from @p input_vector on children of @p parent.\n+         * Return mean value.\n+         */\n+        static typename VectorType::value_type\n+        mean(const typename parallel::distributed::\n+               Triangulation<dim, spacedim>::cell_iterator &parent,\n+             const VectorType *                             input_vector)\n+        {\n+          return sum(parent, input_vector) / parent->n_children();\n+        }\n+      };\n+\n+      /**\n+       * Constructor.\n+       *\n+       * @param[in] triangulation The triangulation on which all operations will\n+       *   happen. At the time when this constructor is called, the refinement\n+       *   in question has not happened yet.\n+       * @param[in] transfer_variable_size_data Specify whether size of data to\n+       *   transfer varies from cell to cell.\n+       * @param[in] coarsening_strategy Function deciding which data to store on\n+       *   a cell, whose children will get coarsened into.\n+       */\n+      CellDataTransfer(const parallel::distributed::Triangulation<dim, spacedim>\n+                         &        triangulation,\n+                       const bool transfer_variable_size_data = false,\n+                       std::function<typename VectorType::value_type(\n+                         const typename parallel::distributed::\n+                           Triangulation<dim, spacedim>::cell_iterator &parent,\n+                         const VectorType *input_vector)> coarsening_strategy =\n+                         &CoarseningStrategies::check_equality);\n+\n+      /**\n+       * Prepare the current object for coarsening and refinement. It registers\n+       * the data transfer of @p in on the underlying triangulation. @p in includes\n+       * data to be interpolated onto the new (refined and/or coarsened) grid.\n+       */\n+      void\n+      prepare_for_coarsening_and_refinement(const VectorType &in);\n+\n+      /**\n+       * Same as the function above, only for a list of vectors.\n+       */\n+      void\n+      prepare_for_coarsening_and_refinement(\n+        const std::vector<const VectorType *> &all_in);\n+\n+      /**\n+       * Prepare the serialization of the given vector. The serialization is\n+       * done by Triangulation::save(). The given vector needs all information\n+       * on the locally active DoFs (it must be ghosted). See documentation of\n+       * this class for more information.\n+       */\n+      void\n+      prepare_serialization(const VectorType &in);","path":"include/deal.II/distributed/cell_data_transfer.h","position":238,"original_position":238,"commit_id":"01f93e27cc792e74ebbe7dcc71c347bfb4db3609","original_commit_id":"01f93e27cc792e74ebbe7dcc71c347bfb4db3609","user":{"login":"bangerth","id":7504421,"node_id":"MDQ6VXNlcjc1MDQ0MjE=","avatar_url":"https://avatars2.githubusercontent.com/u/7504421?v=4","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":"Different question: On the same object, can this function be called more than once with different vectors? I suspect the answer is \"no\", but it might be worth mentioning, with a hint towards the next function.","created_at":"2018-12-27T16:25:49Z","updated_at":"2018-12-27T16:35:44Z","html_url":"https://github.com/dealii/dealii/pull/7537#discussion_r244183983","pull_request_url":"https://api.github.com/repos/dealii/dealii/pulls/7537","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments/244183983"},"html":{"href":"https://github.com/dealii/dealii/pull/7537#discussion_r244183983"},"pull_request":{"href":"https://api.github.com/repos/dealii/dealii/pulls/7537"}},"in_reply_to_id":244183157},"pull_request":{"url":"https://api.github.com/repos/dealii/dealii/pulls/7537","id":239544842,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM5NTQ0ODQy","html_url":"https://github.com/dealii/dealii/pull/7537","diff_url":"https://github.com/dealii/dealii/pull/7537.diff","patch_url":"https://github.com/dealii/dealii/pull/7537.patch","issue_url":"https://api.github.com/repos/dealii/dealii/issues/7537","number":7537,"state":"open","locked":false,"title":"Introduced p::d::CellDataTransfer.","user":{"login":"marcfehling","id":18285973,"node_id":"MDQ6VXNlcjE4Mjg1OTcz","avatar_url":"https://avatars0.githubusercontent.com/u/18285973?v=4","gravatar_id":"","url":"https://api.github.com/users/marcfehling","html_url":"https://github.com/marcfehling","followers_url":"https://api.github.com/users/marcfehling/followers","following_url":"https://api.github.com/users/marcfehling/following{/other_user}","gists_url":"https://api.github.com/users/marcfehling/gists{/gist_id}","starred_url":"https://api.github.com/users/marcfehling/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marcfehling/subscriptions","organizations_url":"https://api.github.com/users/marcfehling/orgs","repos_url":"https://api.github.com/users/marcfehling/repos","events_url":"https://api.github.com/users/marcfehling/events{/privacy}","received_events_url":"https://api.github.com/users/marcfehling/received_events","type":"User","site_admin":false},"body":"Recently, it turned out that we need a class that transfers cell by cell data across refinement and serialization (see #7515). This pull requests provides such a class for the `parallel::distributed::Triangulation`. We need another variant for the other cases as well.\r\n\r\nIn a follow-up pull request, this newly introduced class `p::d::CellDataTransfer` will replace `p::d::ActiveFEIndicesTransfer`, which has been introduced a couple of months ago, and we will hide the whole `active_fe_transfer` business in the `hp::DoFHandler` class, including serialization. Thus for now, we only provide a test for transfer across refinement.\r\n\r\nPart of #3511.","created_at":"2018-12-18T16:08:52Z","updated_at":"2018-12-27T16:35:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a0315caa8ae5c71aa707182a30b7b084bf761681","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dealii/dealii/pulls/7537/commits","review_comments_url":"https://api.github.com/repos/dealii/dealii/pulls/7537/comments","review_comment_url":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dealii/dealii/issues/7537/comments","statuses_url":"https://api.github.com/repos/dealii/dealii/statuses/01f93e27cc792e74ebbe7dcc71c347bfb4db3609","head":{"label":"marcfehling:cell-data-transfer","ref":"cell-data-transfer","sha":"01f93e27cc792e74ebbe7dcc71c347bfb4db3609","user":{"login":"marcfehling","id":18285973,"node_id":"MDQ6VXNlcjE4Mjg1OTcz","avatar_url":"https://avatars0.githubusercontent.com/u/18285973?v=4","gravatar_id":"","url":"https://api.github.com/users/marcfehling","html_url":"https://github.com/marcfehling","followers_url":"https://api.github.com/users/marcfehling/followers","following_url":"https://api.github.com/users/marcfehling/following{/other_user}","gists_url":"https://api.github.com/users/marcfehling/gists{/gist_id}","starred_url":"https://api.github.com/users/marcfehling/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marcfehling/subscriptions","organizations_url":"https://api.github.com/users/marcfehling/orgs","repos_url":"https://api.github.com/users/marcfehling/repos","events_url":"https://api.github.com/users/marcfehling/events{/privacy}","received_events_url":"https://api.github.com/users/marcfehling/received_events","type":"User","site_admin":false},"repo":{"id":116528450,"node_id":"MDEwOlJlcG9zaXRvcnkxMTY1Mjg0NTA=","name":"dealii","full_name":"marcfehling/dealii","private":false,"owner":{"login":"marcfehling","id":18285973,"node_id":"MDQ6VXNlcjE4Mjg1OTcz","avatar_url":"https://avatars0.githubusercontent.com/u/18285973?v=4","gravatar_id":"","url":"https://api.github.com/users/marcfehling","html_url":"https://github.com/marcfehling","followers_url":"https://api.github.com/users/marcfehling/followers","following_url":"https://api.github.com/users/marcfehling/following{/other_user}","gists_url":"https://api.github.com/users/marcfehling/gists{/gist_id}","starred_url":"https://api.github.com/users/marcfehling/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marcfehling/subscriptions","organizations_url":"https://api.github.com/users/marcfehling/orgs","repos_url":"https://api.github.com/users/marcfehling/repos","events_url":"https://api.github.com/users/marcfehling/events{/privacy}","received_events_url":"https://api.github.com/users/marcfehling/received_events","type":"User","site_admin":false},"html_url":"https://github.com/marcfehling/dealii","description":"The development repository for the deal.II finite element library.","fork":true,"url":"https://api.github.com/repos/marcfehling/dealii","forks_url":"https://api.github.com/repos/marcfehling/dealii/forks","keys_url":"https://api.github.com/repos/marcfehling/dealii/keys{/key_id}","collaborators_url":"https://api.github.com/repos/marcfehling/dealii/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/marcfehling/dealii/teams","hooks_url":"https://api.github.com/repos/marcfehling/dealii/hooks","issue_events_url":"https://api.github.com/repos/marcfehling/dealii/issues/events{/number}","events_url":"https://api.github.com/repos/marcfehling/dealii/events","assignees_url":"https://api.github.com/repos/marcfehling/dealii/assignees{/user}","branches_url":"https://api.github.com/repos/marcfehling/dealii/branches{/branch}","tags_url":"https://api.github.com/repos/marcfehling/dealii/tags","blobs_url":"https://api.github.com/repos/marcfehling/dealii/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/marcfehling/dealii/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/marcfehling/dealii/git/refs{/sha}","trees_url":"https://api.github.com/repos/marcfehling/dealii/git/trees{/sha}","statuses_url":"https://api.github.com/repos/marcfehling/dealii/statuses/{sha}","languages_url":"https://api.github.com/repos/marcfehling/dealii/languages","stargazers_url":"https://api.github.com/repos/marcfehling/dealii/stargazers","contributors_url":"https://api.github.com/repos/marcfehling/dealii/contributors","subscribers_url":"https://api.github.com/repos/marcfehling/dealii/subscribers","subscription_url":"https://api.github.com/repos/marcfehling/dealii/subscription","commits_url":"https://api.github.com/repos/marcfehling/dealii/commits{/sha}","git_commits_url":"https://api.github.com/repos/marcfehling/dealii/git/commits{/sha}","comments_url":"https://api.github.com/repos/marcfehling/dealii/comments{/number}","issue_comment_url":"https://api.github.com/repos/marcfehling/dealii/issues/comments{/number}","contents_url":"https://api.github.com/repos/marcfehling/dealii/contents/{+path}","compare_url":"https://api.github.com/repos/marcfehling/dealii/compare/{base}...{head}","merges_url":"https://api.github.com/repos/marcfehling/dealii/merges","archive_url":"https://api.github.com/repos/marcfehling/dealii/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/marcfehling/dealii/downloads","issues_url":"https://api.github.com/repos/marcfehling/dealii/issues{/number}","pulls_url":"https://api.github.com/repos/marcfehling/dealii/pulls{/number}","milestones_url":"https://api.github.com/repos/marcfehling/dealii/milestones{/number}","notifications_url":"https://api.github.com/repos/marcfehling/dealii/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/marcfehling/dealii/labels{/name}","releases_url":"https://api.github.com/repos/marcfehling/dealii/releases{/id}","deployments_url":"https://api.github.com/repos/marcfehling/dealii/deployments","created_at":"2018-01-07T01:30:14Z","updated_at":"2018-12-24T13:16:25Z","pushed_at":"2018-12-27T01:12:24Z","git_url":"git://github.com/marcfehling/dealii.git","ssh_url":"git@github.com:marcfehling/dealii.git","clone_url":"https://github.com/marcfehling/dealii.git","svn_url":"https://github.com/marcfehling/dealii","homepage":"http://www.dealii.org/","size":209415,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dealii:master","ref":"master","sha":"28fa42f944c428dde697f7cb01516dac088e0bf8","user":{"login":"dealii","id":7506070,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc1MDYwNzA=","avatar_url":"https://avatars3.githubusercontent.com/u/7506070?v=4","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,"node_id":"MDEwOlJlcG9zaXRvcnkyMTk0Mzk4MA==","name":"dealii","full_name":"dealii/dealii","private":false,"owner":{"login":"dealii","id":7506070,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc1MDYwNzA=","avatar_url":"https://avatars3.githubusercontent.com/u/7506070?v=4","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},"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}","deployments_url":"https://api.github.com/repos/dealii/dealii/deployments","created_at":"2014-07-17T14:00:26Z","updated_at":"2018-12-27T15:58:39Z","pushed_at":"2018-12-27T15:58:32Z","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":"https://www.dealii.org/","size":209438,"stargazers_count":402,"watchers_count":402,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":335,"mirror_url":null,"archived":false,"open_issues_count":321,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":335,"open_issues":321,"watchers":402,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/7537"},"html":{"href":"https://github.com/dealii/dealii/pull/7537"},"issue":{"href":"https://api.github.com/repos/dealii/dealii/issues/7537"},"comments":{"href":"https://api.github.com/repos/dealii/dealii/issues/7537/comments"},"review_comments":{"href":"https://api.github.com/repos/dealii/dealii/pulls/7537/comments"},"review_comment":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dealii/dealii/pulls/7537/commits"},"statuses":{"href":"https://api.github.com/repos/dealii/dealii/statuses/01f93e27cc792e74ebbe7dcc71c347bfb4db3609"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"bangerth"}}