{"action":"created","comment":{"url":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/44287454","id":44287454,"diff_hunk":"@@ -0,0 +1,295 @@\n+/*\n+  Copyright (C) 2015 by the authors of the ASPECT code.\n+\n+ This file is part of ASPECT.\n+\n+ ASPECT is free software; you can redistribute it and/or modify\n+ it under the terms of the GNU General Public License as published by\n+ the Free Software Foundation; either version 2, or (at your option)\n+ any later version.\n+\n+ ASPECT is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ GNU General Public License for more details.\n+\n+ You should have received a copy of the GNU General Public License\n+ along with ASPECT; see the file doc/COPYING.  If not see\n+ <http://www.gnu.org/licenses/>.\n+ */\n+\n+#include <aspect/particle/generator/probability_density_function.h>\n+\n+#include <deal.II/base/quadrature_lib.h>\n+#include <deal.II/fe/fe_values.h>\n+#include <deal.II/base/geometry_info.h>\n+\n+#include <boost/random.hpp>\n+\n+\n+namespace aspect\n+{\n+  namespace Particle\n+  {\n+    namespace Generator\n+    {\n+      template <int dim>\n+      ProbabilityDensityFunction<dim>::ProbabilityDensityFunction()\n+        :\n+        random_number_generator(5432),\n+        n_tracers()\n+      {}\n+\n+      template <int dim>\n+      std::multimap<types::LevelInd, Particle<dim> >\n+      ProbabilityDensityFunction<dim>::generate_particles()\n+      {\n+        // Get the local accumulated probabilities for every cell\n+        const std::vector<double> accumulated_cell_weights = local_accumulated_cell_weights();\n+\n+        // Sum the local integrals over all nodes\n+        double local_function_integral = accumulated_cell_weights.back();\n+        const double global_function_integral = Utilities::MPI::sum (local_function_integral,\n+                                                                     this->get_mpi_communicator());\n+\n+        AssertThrow(global_function_integral > std::numeric_limits<double>::min(),\n+                    ExcMessage(\"The integral of the user prescribed probability density function over the domain equals zero, \"\n+                               \"ASPECT has no way to determine the cell of generated tracers. Please ensure that the provided \"\n+                               \"function is positive in at least a part of the domain, also check the syntax of the function.\"));\n+\n+        // Determine the starting weight of this process, which is the sum of\n+        // the weights of all processes with a lower rank\n+        double start_weight = 0.0;\n+        MPI_Scan(&local_function_integral, &start_weight, 1, MPI_DOUBLE, MPI_SUM, this->get_mpi_communicator());\n+        start_weight -= local_function_integral;\n+\n+        // Build the map between integrated probability density and cell\n+        std::map<double, types::LevelInd> cell_weights;\n+        typename DoFHandler<dim>::active_cell_iterator cell = this->get_dof_handler().begin_active(),\n+                                                       endc = this->get_dof_handler().end();\n+        for (unsigned int i = 0; cell!=endc; ++cell)\n+          if (cell->is_locally_owned())\n+            {\n+              // adjust the cell_weights according to the local starting weight\n+              cell_weights.insert(std::make_pair(accumulated_cell_weights[i] + start_weight, types::LevelInd(cell->level(),cell->index())));\n+              ++i;\n+            }\n+\n+        // Calculate start and end IDs so there are no gaps\n+        const types::particle_index start_id = llround(n_tracers * start_weight / global_function_integral) + 1;\n+\n+        return generate_particles_in_subdomain(cell_weights,global_function_integral,start_weight,n_tracers, 1.1 * start_id);\n+      }\n+\n+      template <int dim>\n+      std::vector<double>\n+      ProbabilityDensityFunction<dim>::local_accumulated_cell_weights () const\n+      {\n+        //evaluate function at all cell midpoints, sort cells according to weight\n+        const QMidpoint<dim> quadrature_formula;\n+        const unsigned int n_quadrature_points = quadrature_formula.size();\n+\n+        FEValues<dim> fe_values (this->get_mapping(),\n+                                 this->get_fe(),\n+                                 quadrature_formula,\n+                                 update_quadrature_points |\n+                                 update_JxW_values);\n+\n+        std::vector<double> accumulated_cell_weights;\n+\n+        // compute the integral weight by quadrature\n+        typename DoFHandler<dim>::active_cell_iterator\n+        cell = this->get_dof_handler().begin_active(),\n+        endc = this->get_dof_handler().end();\n+        for (; cell!=endc; ++cell)\n+          if (cell->is_locally_owned())\n+            {\n+              fe_values.reinit (cell);\n+              const std::vector<Point<dim> > position = fe_values.get_quadrature_points();\n+\n+              // Then add the weight of the current cell. Weights are always\n+              // interpreted positively, even if the function evaluates to a\n+              // negative number.\n+              double next_cell_weight = 0.0;\n+              if (accumulated_cell_weights.size() > 0)\n+                next_cell_weight = accumulated_cell_weights.back();\n+\n+              for (unsigned int q = 0; q < n_quadrature_points; ++q)\n+                next_cell_weight += std::fabs(function.value(position[q]) * fe_values.JxW(q));\n+\n+              // Start from the weight of the previous cell\n+              accumulated_cell_weights.push_back(next_cell_weight);\n+            }\n+        return accumulated_cell_weights;\n+      }\n+\n+      template <int dim>\n+      std::multimap<types::LevelInd, Particle<dim> >\n+      ProbabilityDensityFunction<dim>::generate_particles_in_subdomain (const std::map<double,types::LevelInd> &cells,\n+                                                                        const double global_weight,\n+                                                                        const double start_weight,\n+                                                                        const types::particle_index num_particles,\n+                                                                        const types::particle_index start_id)\n+      {\n+        std::multimap<types::LevelInd, Particle<dim> > particles;\n+\n+        // Pick cells and assign particles at random points inside them\n+        for (types::particle_index cur_id = start_id; cur_id < start_id + num_particles; ++cur_id)\n+          {\n+            // Draw the random number that determines the cell of the tracer\n+            const double random_weight =  global_weight * uniform_distribution_01(random_number_generator);\n+\n+            // If the selected cell is not owned by this process, continue with next tracer\n+            const std::map<double,types::LevelInd>::const_iterator select_cell_iterator = cells.lower_bound(random_weight);\n+            if ((random_weight < start_weight) || (select_cell_iterator == cells.end()))\n+              continue;\n+\n+            const types::LevelInd select_cell = select_cell_iterator->second;\n+\n+            const typename parallel::distributed::Triangulation<dim>::active_cell_iterator\n+            it (&(this->get_triangulation()), select_cell.first, select_cell.second);\n+\n+            Point<dim> max_bounds, min_bounds;\n+            // Get the bounds of the cell defined by the vertices\n+            for (unsigned int d=0; d<dim; ++d)\n+              {\n+                min_bounds[d] = INFINITY;\n+                max_bounds[d] = -INFINITY;\n+              }\n+            for (unsigned int v = 0; v < GeometryInfo<dim>::vertices_per_cell; ++v)\n+              {\n+                const Point<dim> vertex_position = it->vertex(v);\n+                for (unsigned int d=0; d<dim; ++d)\n+                  {\n+                    min_bounds[d] = fmin(vertex_position[d], min_bounds[d]);\n+                    max_bounds[d] = fmax(vertex_position[d], max_bounds[d]);\n+                  }\n+              }\n+\n+            // Generate random points in these bounds until one is within the cell\n+            unsigned int num_tries = 0;\n+            Point<dim> particle_position;\n+            while (num_tries < 100)\n+              {\n+                for (unsigned int d=0; d<dim; ++d)\n+                  {\n+                    particle_position[d] = uniform_distribution_01(random_number_generator) *\n+                                           (max_bounds[d]-min_bounds[d]) + min_bounds[d];\n+                  }\n+                try\n+                  {\n+                    const Point<dim> p_unit = this->get_mapping().transform_real_to_unit_cell(it, particle_position);\n+                    if (GeometryInfo<dim>::is_inside_unit_cell(p_unit)) break;\n+                  }\n+                catch (typename Mapping<dim>::ExcTransformationFailed &)\n+                  {\n+                    // The point is not in this cell. Do nothing, just try again.\n+                  }\n+                num_tries++;\n+              }\n+            AssertThrow (num_tries < 100, ExcMessage (\"Couldn't generate particle (unusual cell shape?).\"));\n+\n+            // Add the generated particle to the set\n+            const Particle<dim> new_particle(particle_position, cur_id);\n+            particles.insert(std::make_pair(select_cell, new_particle));\n+          }\n+\n+        return particles;\n+      }\n+\n+\n+\n+      template <int dim>\n+      void\n+      ProbabilityDensityFunction<dim>::declare_parameters (ParameterHandler &prm)\n+      {\n+        prm.enter_subsection(\"Postprocess\");\n+        {\n+          prm.enter_subsection(\"Tracers\");\n+          {\n+            prm.declare_entry (\"Number of tracers\", \"1000\",\n+                               Patterns::Double (0),\n+                               \"Total number of tracers to create (not per processor or per element). \"\n+                               \"The number is parsed as a floating point number (so that one can \"\n+                               \"specify, for example, '1e4' particles) but it is interpreted as \"\n+                               \"an integer, of course.\");\n+\n+            prm.enter_subsection(\"Generator\");\n+            {\n+              prm.enter_subsection(\"Random function\");\n+              {\n+                Functions::ParsedFunction<dim>::declare_parameters (prm, 1);\n+              }\n+              prm.leave_subsection();\n+            }\n+            prm.leave_subsection();\n+          }\n+          prm.leave_subsection();\n+        }\n+        prm.leave_subsection();\n+      }\n+\n+\n+      template <int dim>\n+      void\n+      ProbabilityDensityFunction<dim>::parse_parameters (ParameterHandler &prm)\n+      {\n+        prm.enter_subsection(\"Postprocess\");\n+        {\n+          prm.enter_subsection(\"Tracers\");\n+          {\n+            n_tracers    = static_cast<types::particle_index>(prm.get_double (\"Number of tracers\"));\n+\n+            prm.enter_subsection(\"Generator\");\n+            {\n+              prm.enter_subsection(\"Random function\");\n+              {\n+                try\n+                  {\n+                    function.parse_parameters (prm);\n+                  }\n+                catch (...)\n+                  {\n+                    std::cerr << \"ERROR: FunctionParser failed to parse\\n\"\n+                              << \"\\t'Initial conditions.Function'\\n\"\n+                              << \"with expression\\n\"\n+                              << \"\\t'\" << prm.get(\"Function expression\") << \"'\";\n+                    throw;\n+                  }\n+              }\n+              prm.leave_subsection();\n+            }\n+            prm.leave_subsection();\n+          }\n+          prm.leave_subsection();\n+        }\n+        prm.leave_subsection();\n+      }\n+    }\n+  }\n+}\n+\n+\n+// explicit instantiations\n+namespace aspect\n+{\n+  namespace Particle\n+  {\n+    namespace Generator\n+    {\n+      ASPECT_REGISTER_PARTICLE_GENERATOR(ProbabilityDensityFunction,\n+                                         \"probability density function\",\n+                                         \"Generate random distribution of \"\n+                                         \"particles over entire simulation domain. \"\n+                                         \"The particle density is prescribed in the \"","path":"source/particle/generator/probability_density_function.cc","position":284,"original_position":284,"commit_id":"1ab08dbd53a0ebc4c4199830951e534e85730726","original_commit_id":"1ab08dbd53a0ebc4c4199830951e534e85730726","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":"it's actually not a particle density you are describing, but just a (non-normalized) probability density. The two are proportional to each other, but not the same.","created_at":"2015-11-09T15:30:55Z","updated_at":"2015-11-09T15:30:55Z","html_url":"https://github.com/geodynamics/aspect/pull/657#discussion_r44287454","pull_request_url":"https://api.github.com/repos/geodynamics/aspect/pulls/657","_links":{"self":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/44287454"},"html":{"href":"https://github.com/geodynamics/aspect/pull/657#discussion_r44287454"},"pull_request":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/657"}}},"pull_request":{"url":"https://api.github.com/repos/geodynamics/aspect/pulls/657","id":49329062,"html_url":"https://github.com/geodynamics/aspect/pull/657","diff_url":"https://github.com/geodynamics/aspect/pull/657.diff","patch_url":"https://github.com/geodynamics/aspect/pull/657.patch","issue_url":"https://api.github.com/repos/geodynamics/aspect/issues/657","number":657,"state":"open","locked":false,"title":"Tracer improvements. Only source files. Not compiling.","user":{"login":"gassmoeller","id":7582930,"avatar_url":"https://avatars.githubusercontent.com/u/7582930?v=3","gravatar_id":"","url":"https://api.github.com/users/gassmoeller","html_url":"https://github.com/gassmoeller","followers_url":"https://api.github.com/users/gassmoeller/followers","following_url":"https://api.github.com/users/gassmoeller/following{/other_user}","gists_url":"https://api.github.com/users/gassmoeller/gists{/gist_id}","starred_url":"https://api.github.com/users/gassmoeller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gassmoeller/subscriptions","organizations_url":"https://api.github.com/users/gassmoeller/orgs","repos_url":"https://api.github.com/users/gassmoeller/repos","events_url":"https://api.github.com/users/gassmoeller/events{/privacy}","received_events_url":"https://api.github.com/users/gassmoeller/received_events","type":"User","site_admin":false},"body":"This is a part of #411 to make reviewing easer. @bangerth when you have some time (no hurry): please skip all generator, integrator and interpolator files, as well as output/interface.cc, output/hdf5.cc and output/ascii.cc. You have reviewed them already, and your changes are not incorporated here yet. You can roughly start 2/3 down this PR at output/vtu.cc","created_at":"2015-10-30T22:20:50Z","updated_at":"2015-11-09T15:30:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bf10c3a177ce74707778135ef3b446587bc7d6a8","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/geodynamics/aspect/pulls/657/commits","review_comments_url":"https://api.github.com/repos/geodynamics/aspect/pulls/657/comments","review_comment_url":"https://api.github.com/repos/geodynamics/aspect/pulls/comments{/number}","comments_url":"https://api.github.com/repos/geodynamics/aspect/issues/657/comments","statuses_url":"https://api.github.com/repos/geodynamics/aspect/statuses/1ab08dbd53a0ebc4c4199830951e534e85730726","head":{"label":"gassmoeller:tracer-source","ref":"tracer-source","sha":"1ab08dbd53a0ebc4c4199830951e534e85730726","user":{"login":"gassmoeller","id":7582930,"avatar_url":"https://avatars.githubusercontent.com/u/7582930?v=3","gravatar_id":"","url":"https://api.github.com/users/gassmoeller","html_url":"https://github.com/gassmoeller","followers_url":"https://api.github.com/users/gassmoeller/followers","following_url":"https://api.github.com/users/gassmoeller/following{/other_user}","gists_url":"https://api.github.com/users/gassmoeller/gists{/gist_id}","starred_url":"https://api.github.com/users/gassmoeller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gassmoeller/subscriptions","organizations_url":"https://api.github.com/users/gassmoeller/orgs","repos_url":"https://api.github.com/users/gassmoeller/repos","events_url":"https://api.github.com/users/gassmoeller/events{/privacy}","received_events_url":"https://api.github.com/users/gassmoeller/received_events","type":"User","site_admin":false},"repo":{"id":19785507,"name":"aspect","full_name":"gassmoeller/aspect","owner":{"login":"gassmoeller","id":7582930,"avatar_url":"https://avatars.githubusercontent.com/u/7582930?v=3","gravatar_id":"","url":"https://api.github.com/users/gassmoeller","html_url":"https://github.com/gassmoeller","followers_url":"https://api.github.com/users/gassmoeller/followers","following_url":"https://api.github.com/users/gassmoeller/following{/other_user}","gists_url":"https://api.github.com/users/gassmoeller/gists{/gist_id}","starred_url":"https://api.github.com/users/gassmoeller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gassmoeller/subscriptions","organizations_url":"https://api.github.com/users/gassmoeller/orgs","repos_url":"https://api.github.com/users/gassmoeller/repos","events_url":"https://api.github.com/users/gassmoeller/events{/privacy}","received_events_url":"https://api.github.com/users/gassmoeller/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gassmoeller/aspect","description":"Finite element parallel code to simulate problems in thermal convection in both 2D and 3D models.","fork":true,"url":"https://api.github.com/repos/gassmoeller/aspect","forks_url":"https://api.github.com/repos/gassmoeller/aspect/forks","keys_url":"https://api.github.com/repos/gassmoeller/aspect/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gassmoeller/aspect/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gassmoeller/aspect/teams","hooks_url":"https://api.github.com/repos/gassmoeller/aspect/hooks","issue_events_url":"https://api.github.com/repos/gassmoeller/aspect/issues/events{/number}","events_url":"https://api.github.com/repos/gassmoeller/aspect/events","assignees_url":"https://api.github.com/repos/gassmoeller/aspect/assignees{/user}","branches_url":"https://api.github.com/repos/gassmoeller/aspect/branches{/branch}","tags_url":"https://api.github.com/repos/gassmoeller/aspect/tags","blobs_url":"https://api.github.com/repos/gassmoeller/aspect/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gassmoeller/aspect/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gassmoeller/aspect/git/refs{/sha}","trees_url":"https://api.github.com/repos/gassmoeller/aspect/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gassmoeller/aspect/statuses/{sha}","languages_url":"https://api.github.com/repos/gassmoeller/aspect/languages","stargazers_url":"https://api.github.com/repos/gassmoeller/aspect/stargazers","contributors_url":"https://api.github.com/repos/gassmoeller/aspect/contributors","subscribers_url":"https://api.github.com/repos/gassmoeller/aspect/subscribers","subscription_url":"https://api.github.com/repos/gassmoeller/aspect/subscription","commits_url":"https://api.github.com/repos/gassmoeller/aspect/commits{/sha}","git_commits_url":"https://api.github.com/repos/gassmoeller/aspect/git/commits{/sha}","comments_url":"https://api.github.com/repos/gassmoeller/aspect/comments{/number}","issue_comment_url":"https://api.github.com/repos/gassmoeller/aspect/issues/comments{/number}","contents_url":"https://api.github.com/repos/gassmoeller/aspect/contents/{+path}","compare_url":"https://api.github.com/repos/gassmoeller/aspect/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gassmoeller/aspect/merges","archive_url":"https://api.github.com/repos/gassmoeller/aspect/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gassmoeller/aspect/downloads","issues_url":"https://api.github.com/repos/gassmoeller/aspect/issues{/number}","pulls_url":"https://api.github.com/repos/gassmoeller/aspect/pulls{/number}","milestones_url":"https://api.github.com/repos/gassmoeller/aspect/milestones{/number}","notifications_url":"https://api.github.com/repos/gassmoeller/aspect/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gassmoeller/aspect/labels{/name}","releases_url":"https://api.github.com/repos/gassmoeller/aspect/releases{/id}","created_at":"2014-05-14T15:40:43Z","updated_at":"2015-08-12T21:27:48Z","pushed_at":"2015-11-08T01:31:26Z","git_url":"git://github.com/gassmoeller/aspect.git","ssh_url":"git@github.com:gassmoeller/aspect.git","clone_url":"https://github.com/gassmoeller/aspect.git","svn_url":"https://github.com/gassmoeller/aspect","homepage":null,"size":112654,"stargazers_count":1,"watchers_count":1,"language":"Gnuplot","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"geodynamics:master","ref":"master","sha":"6a8ffc18ff2a15135226f6ea8765bd3ea16bf7a2","user":{"login":"geodynamics","id":4052461,"avatar_url":"https://avatars.githubusercontent.com/u/4052461?v=3","gravatar_id":"","url":"https://api.github.com/users/geodynamics","html_url":"https://github.com/geodynamics","followers_url":"https://api.github.com/users/geodynamics/followers","following_url":"https://api.github.com/users/geodynamics/following{/other_user}","gists_url":"https://api.github.com/users/geodynamics/gists{/gist_id}","starred_url":"https://api.github.com/users/geodynamics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geodynamics/subscriptions","organizations_url":"https://api.github.com/users/geodynamics/orgs","repos_url":"https://api.github.com/users/geodynamics/repos","events_url":"https://api.github.com/users/geodynamics/events{/privacy}","received_events_url":"https://api.github.com/users/geodynamics/received_events","type":"Organization","site_admin":false},"repo":{"id":19502452,"name":"aspect","full_name":"geodynamics/aspect","owner":{"login":"geodynamics","id":4052461,"avatar_url":"https://avatars.githubusercontent.com/u/4052461?v=3","gravatar_id":"","url":"https://api.github.com/users/geodynamics","html_url":"https://github.com/geodynamics","followers_url":"https://api.github.com/users/geodynamics/followers","following_url":"https://api.github.com/users/geodynamics/following{/other_user}","gists_url":"https://api.github.com/users/geodynamics/gists{/gist_id}","starred_url":"https://api.github.com/users/geodynamics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geodynamics/subscriptions","organizations_url":"https://api.github.com/users/geodynamics/orgs","repos_url":"https://api.github.com/users/geodynamics/repos","events_url":"https://api.github.com/users/geodynamics/events{/privacy}","received_events_url":"https://api.github.com/users/geodynamics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/geodynamics/aspect","description":"A parallel, extendible finite element code to simulate thermal convection in both 2D and 3D models.","fork":false,"url":"https://api.github.com/repos/geodynamics/aspect","forks_url":"https://api.github.com/repos/geodynamics/aspect/forks","keys_url":"https://api.github.com/repos/geodynamics/aspect/keys{/key_id}","collaborators_url":"https://api.github.com/repos/geodynamics/aspect/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/geodynamics/aspect/teams","hooks_url":"https://api.github.com/repos/geodynamics/aspect/hooks","issue_events_url":"https://api.github.com/repos/geodynamics/aspect/issues/events{/number}","events_url":"https://api.github.com/repos/geodynamics/aspect/events","assignees_url":"https://api.github.com/repos/geodynamics/aspect/assignees{/user}","branches_url":"https://api.github.com/repos/geodynamics/aspect/branches{/branch}","tags_url":"https://api.github.com/repos/geodynamics/aspect/tags","blobs_url":"https://api.github.com/repos/geodynamics/aspect/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/geodynamics/aspect/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/geodynamics/aspect/git/refs{/sha}","trees_url":"https://api.github.com/repos/geodynamics/aspect/git/trees{/sha}","statuses_url":"https://api.github.com/repos/geodynamics/aspect/statuses/{sha}","languages_url":"https://api.github.com/repos/geodynamics/aspect/languages","stargazers_url":"https://api.github.com/repos/geodynamics/aspect/stargazers","contributors_url":"https://api.github.com/repos/geodynamics/aspect/contributors","subscribers_url":"https://api.github.com/repos/geodynamics/aspect/subscribers","subscription_url":"https://api.github.com/repos/geodynamics/aspect/subscription","commits_url":"https://api.github.com/repos/geodynamics/aspect/commits{/sha}","git_commits_url":"https://api.github.com/repos/geodynamics/aspect/git/commits{/sha}","comments_url":"https://api.github.com/repos/geodynamics/aspect/comments{/number}","issue_comment_url":"https://api.github.com/repos/geodynamics/aspect/issues/comments{/number}","contents_url":"https://api.github.com/repos/geodynamics/aspect/contents/{+path}","compare_url":"https://api.github.com/repos/geodynamics/aspect/compare/{base}...{head}","merges_url":"https://api.github.com/repos/geodynamics/aspect/merges","archive_url":"https://api.github.com/repos/geodynamics/aspect/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/geodynamics/aspect/downloads","issues_url":"https://api.github.com/repos/geodynamics/aspect/issues{/number}","pulls_url":"https://api.github.com/repos/geodynamics/aspect/pulls{/number}","milestones_url":"https://api.github.com/repos/geodynamics/aspect/milestones{/number}","notifications_url":"https://api.github.com/repos/geodynamics/aspect/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/geodynamics/aspect/labels{/name}","releases_url":"https://api.github.com/repos/geodynamics/aspect/releases{/id}","created_at":"2014-05-06T16:47:18Z","updated_at":"2015-11-05T22:04:15Z","pushed_at":"2015-11-09T11:50:45Z","git_url":"git://github.com/geodynamics/aspect.git","ssh_url":"git@github.com:geodynamics/aspect.git","clone_url":"https://github.com/geodynamics/aspect.git","svn_url":"https://github.com/geodynamics/aspect","homepage":"http://aspect.dealii.org/","size":133105,"stargazers_count":20,"watchers_count":20,"language":"Gnuplot","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"open_issues_count":60,"forks":43,"open_issues":60,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/657"},"html":{"href":"https://github.com/geodynamics/aspect/pull/657"},"issue":{"href":"https://api.github.com/repos/geodynamics/aspect/issues/657"},"comments":{"href":"https://api.github.com/repos/geodynamics/aspect/issues/657/comments"},"review_comments":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/657/comments"},"review_comment":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/657/commits"},"statuses":{"href":"https://api.github.com/repos/geodynamics/aspect/statuses/1ab08dbd53a0ebc4c4199830951e534e85730726"}}}}