{"action":"created","comment":{"url":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/22860321","id":22860321,"diff_hunk":"@@ -0,0 +1,702 @@\n+/*\n+  Copyright (C) 2011 - 2014 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+\n+#include <aspect/global.h>\n+#include <aspect/velocity_boundary_conditions/ascii_data.h>\n+\n+#include <aspect/geometry_model/box.h>\n+#include <aspect/geometry_model/spherical_shell.h>\n+#include <aspect/utilities.h>\n+\n+#include <deal.II/base/parameter_handler.h>\n+#include <deal.II/base/table.h>\n+#include <deal.II/base/table_indices.h>\n+#include <fstream>\n+#include <iostream>\n+#include <cmath>\n+\n+\n+namespace aspect\n+{\n+  namespace VelocityBoundaryConditions\n+  {\n+\n+    namespace internal\n+    {\n+      template <int dim>\n+      AsciiDataLookup<dim>::AsciiDataLookup(const Point<dim> &grid_extent_,\n+                                            const unsigned int npoints_[3],\n+                                            const unsigned int boundary_dimensions_[dim-1],\n+                                            const double scale_factor_)\n+                                            :\n+                                            scale_factor(scale_factor_)\n+     {\n+        for (unsigned int i = 0; i < dim-1; i++)\n+          {\n+            boundary_dimensions[i] = boundary_dimensions_[i];\n+            grid_extent[i] = grid_extent_[boundary_dimensions[i]];\n+            npoints[i] = npoints_[boundary_dimensions[i]];\n+            spacing[i] = grid_extent[i] / (npoints[i]-1);\n+          }\n+\n+        velocity_vals.TableBase<dim-1,Tensor<1,3> >::reinit(npoints);\n+        old_velocity_vals.TableBase<dim-1,Tensor<1,3> >::reinit(npoints);\n+\n+\n+        // TODO: make lookup and ascii data as generic as possible\n+        // TODO: different dimensions for boundary condition and initial condition\n+        // TODO: correct names for the velocity input files\n+        // TODO: should we output every new file in screen_output?\n+      }\n+\n+      template <int dim>\n+      void AsciiDataLookup<dim>::screen_output(const ConditionalOStream &pcout) const\n+      {\n+        std::ostringstream output;\n+\n+        output << std::setprecision (3) << std::setw(3) << std::fixed << std::endl\n+               << \"   Set up Ascii Data boundary velocity module.\"  << std::endl\n+               << \"   The grid extents to: \" << grid_extent\n+               << std::endl;\n+\n+        pcout << output.str();\n+      }\n+\n+      template <int dim>\n+      bool\n+      AsciiDataLookup<dim>::fexists(const std::string &filename) const\n+      {\n+        std::ifstream ifile(filename.c_str());\n+        return !(!ifile); // only in c++11 you can convert to bool directly\n+      }\n+\n+      template <int dim>\n+      void\n+      AsciiDataLookup<dim>::load_file(const std::string &filename,\n+                                      const ConditionalOStream &pcout)\n+      {\n+        pcout << std::endl << \"   Loading Ascii data boundary velocity file \"\n+              << filename << \".\" << std::endl << std::endl;\n+\n+        // Check whether file exists, we do not want to throw\n+        // an exception in case it does not, because it could be by purpose\n+        // (i.e. the end of the boundary condition is reached)\n+        AssertThrow (fexists(filename),\n+                     ExcMessage (std::string(\"Ascii data file <\")\n+                                 +\n+                                 filename\n+                                 +\n+                                 \"> not found!\"));\n+\n+        std::ifstream in(filename.c_str(), std::ios::in);\n+        AssertThrow (in,\n+                     ExcMessage (std::string(\"Couldn't find velocities. Is file format for velocities correct?\")));\n+\n+        // swap pointers to old and new values, we overwrite the old ones\n+        // and the new ones become the old ones\n+        velocity_vals.swap(old_velocity_vals);\n+\n+        unsigned int i = 0;\n+        unsigned int j = 0;\n+\n+        double temp_data[3];\n+\n+        while (in >> temp_data[j%3])\n+          {\n+            if (j%3 == 2)\n+              {\n+                dealii::TableIndices<dim-1> idx;\n+                idx[0] = i % npoints[0];\n+                if (dim == 3)\n+                  idx[1] = i / npoints[0];\n+\n+                const Tensor<1,3> temp_velocity(temp_data);\n+                velocity_vals(idx) = temp_velocity * scale_factor;\n+                i++;\n+              }\n+            j++;\n+          }\n+\n+        AssertThrow(i == velocity_vals.n_elements(),\n+                    ExcMessage (std::string(\"Number of read in points does not match number of assumed points. File corrupted?\")));\n+     }\n+\n+      template <int dim>\n+      Tensor<1,dim>\n+      AsciiDataLookup<dim>::surface_velocity(const Point<dim> &position,\n+                                      const double time_weight) const\n+      {\n+        // spatial index will contain indexes (which grid point to use)\n+        dealii::TableIndices<dim-1> spatial_index = calculate_spatial_index(position);\n+\n+        // point_weight will contain weightings (how close position is to the grid point)\n+        double point_weight[dim-1];\n+        calculate_point_weight(point_weight, position, spatial_index);\n+\n+        // interpolate between the 2*(dim-1) neighbouring points\n+        Tensor<1,dim> surf_vel = add_interpolation_point(spatial_index,\n+                                                         point_weight,\n+                                                         time_weight);\n+\n+        // the second point: index increased by one, weighting = 1 - weighting\n+        spatial_index[0] = std::min(spatial_index[0]+1,npoints[0]-1);\n+        point_weight[0] = 1 - point_weight[0];\n+        surf_vel += add_interpolation_point(spatial_index,\n+                                            point_weight,\n+                                            time_weight);\n+\n+        // third and fourth point only in 3D\n+        if (dim == 3)\n+          {\n+            spatial_index[1] = std::min(spatial_index[1]+1,npoints[1]-1);\n+            point_weight[1] = 1 - point_weight[1];\n+            surf_vel += add_interpolation_point(spatial_index,\n+                                                point_weight,\n+                                                time_weight);\n+\n+            spatial_index[0] = spatial_index[0]-1;\n+            point_weight[0] = 1 - point_weight[0];\n+            surf_vel += add_interpolation_point(spatial_index,\n+                                                point_weight,\n+                                                time_weight);\n+          }\n+\n+        return surf_vel;\n+      }\n+\n+\n+      template <int dim> template <int in, int out>\n+      Tensor<1,out>\n+      AsciiDataLookup<dim>::convert_tensor (const Tensor<1,in> &old_tensor) const\n+      {\n+        Tensor<1,out> new_tensor;\n+        for (unsigned int i = 0; i < out; i++)\n+          if (i < in) new_tensor[i] = old_tensor[i];\n+          else new_tensor[i] = 0.0;\n+\n+        return new_tensor;\n+      }\n+\n+\n+      template <int dim>\n+      Tensor<1,dim>\n+      AsciiDataLookup<dim>::add_interpolation_point(const dealii::TableIndices<dim-1> spatial_index,\n+                                                    const double point_weight[dim-1],\n+                                                    const double time_weight) const\n+      {\n+        const Tensor<1,dim> velocity = convert_tensor<3,dim>(velocity_vals(spatial_index));\n+        const Tensor<1,dim> old_velocity = convert_tensor<3,dim>(old_velocity_vals(spatial_index));\n+\n+        Tensor<1,dim> surf_vel = time_weight * velocity + (1-time_weight) * old_velocity;\n+\n+        surf_vel *= point_weight[0];\n+        if (dim == 3)\n+          surf_vel *= point_weight[1];\n+\n+        return surf_vel;\n+      }\n+\n+\n+      template <int dim>\n+      dealii::TableIndices<dim-1>\n+      AsciiDataLookup<dim>::calculate_spatial_index(const Point<dim> &position) const\n+      {\n+        dealii:TableIndices<dim-1> spatial_index;\n+        spatial_index[0] = std::min(static_cast<unsigned int> (position[boundary_dimensions[0]]/spacing[0]),npoints[0]-1);\n+        if (dim == 3)\n+          spatial_index[1] = std::min(static_cast<unsigned int> (position[boundary_dimensions[1]]/spacing[1]),npoints[1]-1);\n+        return spatial_index;\n+      }\n+\n+    template <int dim>\n+    void\n+    AsciiDataLookup<dim>::calculate_point_weight(double *point_weight,\n+                                                 const Point<dim> &position,\n+                                                 const dealii::TableIndices<dim-1> spatial_index) const\n+    {\n+      point_weight[0] = 1-((position[boundary_dimensions[0]]/spacing[0])-spatial_index[0]);\n+      if (dim == 3)\n+        point_weight[1] = 1-((position[boundary_dimensions[1]]/spacing[1])-spatial_index[1]);\n+    }\n+  }\n+\n+\n+    template <int dim>\n+    AsciiData<dim>::AsciiData ()\n+      :\n+      time_relative_to_vel_file_start_time(0.0),\n+      current_file_number(0),\n+      first_velocity_file_model_time(0.0),\n+      boundary_id(255),\n+      velocity_file_time_step(0.0),\n+      time_weight(0.0),\n+      time_dependent(true),\n+      lookup()\n+    {}\n+\n+\n+    template <int dim>\n+    void\n+    AsciiData<dim>::initialize ()\n+    {\n+      const std::map<types::boundary_id,std_cxx1x::shared_ptr<VelocityBoundaryConditions::Interface<dim> > >\n+        bvs = this->get_prescribed_velocity_boundary_conditions();\n+      for (typename std::map<types::boundary_id,std_cxx1x::shared_ptr<VelocityBoundaryConditions::Interface<dim> > >::const_iterator\n+           p = bvs.cbegin();\n+           p != bvs.cend(); ++p)\n+        {\n+          if (p->second.get() == this)\n+            boundary_id = p->first;\n+        }\n+      AssertThrow(boundary_id != 255,","path":"source/velocity_boundary_conditions/ascii_data.cc","position":269,"original_position":269,"commit_id":"41f0fd51704b4e6ecd94bce83f353165fdf940a7","original_commit_id":"41f0fd51704b4e6ecd94bce83f353165fdf940a7","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":"same here.","created_at":"2015-01-13T13:10:32Z","updated_at":"2015-01-13T13:10:32Z","html_url":"https://github.com/geodynamics/aspect/pull/240#discussion_r22860321","pull_request_url":"https://api.github.com/repos/geodynamics/aspect/pulls/240","_links":{"self":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/22860321"},"html":{"href":"https://github.com/geodynamics/aspect/pull/240#discussion_r22860321"},"pull_request":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/240"}}},"pull_request":{"url":"https://api.github.com/repos/geodynamics/aspect/pulls/240","id":27092169,"html_url":"https://github.com/geodynamics/aspect/pull/240","diff_url":"https://github.com/geodynamics/aspect/pull/240.diff","patch_url":"https://github.com/geodynamics/aspect/pull/240.patch","issue_url":"https://api.github.com/repos/geodynamics/aspect/issues/240","number":240,"state":"open","locked":false,"title":"Side boundary conditions","user":{"login":"ebredow","id":9881327,"avatar_url":"https://avatars.githubusercontent.com/u/9881327?v=3","gravatar_id":"","url":"https://api.github.com/users/ebredow","html_url":"https://github.com/ebredow","followers_url":"https://api.github.com/users/ebredow/followers","following_url":"https://api.github.com/users/ebredow/following{/other_user}","gists_url":"https://api.github.com/users/ebredow/gists{/gist_id}","starred_url":"https://api.github.com/users/ebredow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebredow/subscriptions","organizations_url":"https://api.github.com/users/ebredow/orgs","repos_url":"https://api.github.com/users/ebredow/repos","events_url":"https://api.github.com/users/ebredow/events{/privacy}","received_events_url":"https://api.github.com/users/ebredow/received_events","type":"User","site_admin":false},"body":"We are currently working on models that would like to prescribe velocity boundary conditions read in from a file. Therefore we created a generic plugin that reads in ascii files and uses the velocities as boundary condition. While writing the plugin we noticed that it would be nice to have similar plugins for the other boundary conditions and initial conditions. Therefore we would like to ask for comments, before we start implementing similar things for the other plugin types. Later on, with this set of plugins we will be able to create a cookbook that is similar to the CitcomS cookbook 5 (subduction with trench rollback).","created_at":"2015-01-09T10:46:23Z","updated_at":"2015-01-13T13:10:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a9a4d8b26bf320d7a92e26632c9a2518b1e02a4f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/geodynamics/aspect/pulls/240/commits","review_comments_url":"https://api.github.com/repos/geodynamics/aspect/pulls/240/comments","review_comment_url":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/{number}","comments_url":"https://api.github.com/repos/geodynamics/aspect/issues/240/comments","statuses_url":"https://api.github.com/repos/geodynamics/aspect/statuses/41f0fd51704b4e6ecd94bce83f353165fdf940a7","head":{"label":"ebredow:side_boundary_conditions","ref":"side_boundary_conditions","sha":"41f0fd51704b4e6ecd94bce83f353165fdf940a7","user":{"login":"ebredow","id":9881327,"avatar_url":"https://avatars.githubusercontent.com/u/9881327?v=3","gravatar_id":"","url":"https://api.github.com/users/ebredow","html_url":"https://github.com/ebredow","followers_url":"https://api.github.com/users/ebredow/followers","following_url":"https://api.github.com/users/ebredow/following{/other_user}","gists_url":"https://api.github.com/users/ebredow/gists{/gist_id}","starred_url":"https://api.github.com/users/ebredow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebredow/subscriptions","organizations_url":"https://api.github.com/users/ebredow/orgs","repos_url":"https://api.github.com/users/ebredow/repos","events_url":"https://api.github.com/users/ebredow/events{/privacy}","received_events_url":"https://api.github.com/users/ebredow/received_events","type":"User","site_admin":false},"repo":{"id":28975227,"name":"aspect","full_name":"ebredow/aspect","owner":{"login":"ebredow","id":9881327,"avatar_url":"https://avatars.githubusercontent.com/u/9881327?v=3","gravatar_id":"","url":"https://api.github.com/users/ebredow","html_url":"https://github.com/ebredow","followers_url":"https://api.github.com/users/ebredow/followers","following_url":"https://api.github.com/users/ebredow/following{/other_user}","gists_url":"https://api.github.com/users/ebredow/gists{/gist_id}","starred_url":"https://api.github.com/users/ebredow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebredow/subscriptions","organizations_url":"https://api.github.com/users/ebredow/orgs","repos_url":"https://api.github.com/users/ebredow/repos","events_url":"https://api.github.com/users/ebredow/events{/privacy}","received_events_url":"https://api.github.com/users/ebredow/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ebredow/aspect","description":"A parallel, extendible finite element code to simulate thermal convection in both 2D and 3D models.","fork":true,"url":"https://api.github.com/repos/ebredow/aspect","forks_url":"https://api.github.com/repos/ebredow/aspect/forks","keys_url":"https://api.github.com/repos/ebredow/aspect/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ebredow/aspect/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ebredow/aspect/teams","hooks_url":"https://api.github.com/repos/ebredow/aspect/hooks","issue_events_url":"https://api.github.com/repos/ebredow/aspect/issues/events{/number}","events_url":"https://api.github.com/repos/ebredow/aspect/events","assignees_url":"https://api.github.com/repos/ebredow/aspect/assignees{/user}","branches_url":"https://api.github.com/repos/ebredow/aspect/branches{/branch}","tags_url":"https://api.github.com/repos/ebredow/aspect/tags","blobs_url":"https://api.github.com/repos/ebredow/aspect/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ebredow/aspect/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ebredow/aspect/git/refs{/sha}","trees_url":"https://api.github.com/repos/ebredow/aspect/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ebredow/aspect/statuses/{sha}","languages_url":"https://api.github.com/repos/ebredow/aspect/languages","stargazers_url":"https://api.github.com/repos/ebredow/aspect/stargazers","contributors_url":"https://api.github.com/repos/ebredow/aspect/contributors","subscribers_url":"https://api.github.com/repos/ebredow/aspect/subscribers","subscription_url":"https://api.github.com/repos/ebredow/aspect/subscription","commits_url":"https://api.github.com/repos/ebredow/aspect/commits{/sha}","git_commits_url":"https://api.github.com/repos/ebredow/aspect/git/commits{/sha}","comments_url":"https://api.github.com/repos/ebredow/aspect/comments{/number}","issue_comment_url":"https://api.github.com/repos/ebredow/aspect/issues/comments/{number}","contents_url":"https://api.github.com/repos/ebredow/aspect/contents/{+path}","compare_url":"https://api.github.com/repos/ebredow/aspect/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ebredow/aspect/merges","archive_url":"https://api.github.com/repos/ebredow/aspect/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ebredow/aspect/downloads","issues_url":"https://api.github.com/repos/ebredow/aspect/issues{/number}","pulls_url":"https://api.github.com/repos/ebredow/aspect/pulls{/number}","milestones_url":"https://api.github.com/repos/ebredow/aspect/milestones{/number}","notifications_url":"https://api.github.com/repos/ebredow/aspect/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ebredow/aspect/labels{/name}","releases_url":"https://api.github.com/repos/ebredow/aspect/releases{/id}","created_at":"2015-01-08T16:40:47Z","updated_at":"2015-01-08T16:40:53Z","pushed_at":"2015-01-09T13:09:00Z","git_url":"git://github.com/ebredow/aspect.git","ssh_url":"git@github.com:ebredow/aspect.git","clone_url":"https://github.com/ebredow/aspect.git","svn_url":"https://github.com/ebredow/aspect","homepage":"http://aspect.dealii.org/","size":106550,"stargazers_count":0,"watchers_count":0,"language":"Gnuplot","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":"geodynamics:master","ref":"master","sha":"fef0a8c311e49678b2ecbce0941ac0f2fd57d12e","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-01-10T00:21:49Z","pushed_at":"2015-01-10T00:21:44Z","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":106550,"stargazers_count":8,"watchers_count":8,"language":"Gnuplot","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":25,"mirror_url":null,"open_issues_count":26,"forks":25,"open_issues":26,"watchers":8,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/240"},"html":{"href":"https://github.com/geodynamics/aspect/pull/240"},"issue":{"href":"https://api.github.com/repos/geodynamics/aspect/issues/240"},"comments":{"href":"https://api.github.com/repos/geodynamics/aspect/issues/240/comments"},"review_comments":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/240/comments"},"review_comment":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/geodynamics/aspect/pulls/240/commits"},"statuses":{"href":"https://api.github.com/repos/geodynamics/aspect/statuses/41f0fd51704b4e6ecd94bce83f353165fdf940a7"}}}}