{"action":"created","comment":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/23194683","id":23194683,"diff_hunk":"@@ -0,0 +1,386 @@\n+/**\n+ * Copyright 2014 Marco Garten, Axel Huebl, Heiko Burau, Rene Widera, \n+ *                  Richard Pausch, Felix Schmitt\n+ *\n+ * This file is part of PIConGPU.\n+ *\n+ * PIConGPU 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 3 of the License, or\n+ * (at your option) any later version.\n+ *\n+ * PIConGPU 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 PIConGPU.\n+ * If not, see <http://www.gnu.org/licenses/>.\n+ */\n+\n+#pragma once\n+\n+\n+#include <iostream>\n+\n+#include \"simulation_defines.hpp\"\n+#include \"particles/Particles.hpp\" \n+#include <cassert>\n+\n+#include \"mappings/kernel/AreaMapping.hpp\"\n+\n+#include \"particles/ParticlesInit.kernel\"\n+#include \"mappings/simulation/GridController.hpp\"\n+\n+#include \"simulationControl/MovingWindow.hpp\"\n+\n+#include <limits>\n+\n+#include \"traits/Resolve.hpp\"\n+\n+//#include \"particles/traits/GetIonizer.hpp\"\n+#include \"types.h\"\n+\n+#include \"particles/ionization/ionizationMethods.hpp\"\n+\n+namespace picongpu\n+{\n+    \n+using namespace PMacc;\n+\n+/* IONIZE PER FRAME */\n+\n+template<class IonizeAlgo, class TVec, class T_Field2ParticleInterpolation, class NumericalCellType>\n+struct IonizeParticlesPerFrame\n+{\n+\n+    template<class FrameType, class BoxB, class BoxE >\n+    DINLINE void operator()(FrameType& ionFrame, int localIdx, BoxB& bBox, BoxE& eBox, unsigned int& newElectrons)\n+    {\n+\n+        typedef TVec Block;\n+        /* @new type for field to particle interpolation */\n+        typedef T_Field2ParticleInterpolation Field2ParticleInterpolation;\n+\n+        typedef typename BoxB::ValueType BType;\n+        typedef typename BoxE::ValueType EType;\n+\n+        PMACC_AUTO(particle,ionFrame[localIdx]);\n+        const float_X weighting = particle[weighting_];\n+        \n+        floatD_X pos = particle[position_];\n+        const int particleCellIdx = particle[localCellIdx_];\n+\n+        DataSpace<TVec::dim> localCell(DataSpaceOperations<TVec::dim>::template map<TVec > (particleCellIdx));\n+\n+       \n+        EType eField = Field2ParticleInterpolation()\n+            (eBox.shift(localCell).toCursor(), pos, NumericalCellType::getEFieldPosition());\n+        BType bField =Field2ParticleInterpolation()\n+            (bBox.shift(localCell).toCursor(), pos, NumericalCellType::getBFieldPosition());\n+\n+        float3_X mom = particle[momentum_];\n+        const float_X mass = attribute::getMass(weighting,particle);\n+        \n+        /* define charge state before ionization */\n+        float_X prevChState = particle[chargeState_];\n+ \n+        /* this is the point where actual ionization takes place */\n+        IonizeAlgo ionizeAlgo;\n+        ionizeAlgo(\n+             bField, eField,\n+             particle\n+             );\n+        \n+        particle[momentum_] = mom;\n+        particle[position_] = pos;\n+        /* determine number of new electrons to be created */\n+        newElectrons = particle[chargeState_] - prevChState;\n+        /*calculate one dimensional cell index*/\n+        particle[localCellIdx_] = DataSpaceOperations<TVec::dim>::template map<TVec > (localCell);\n+    }\n+}; // struct IonizeParticlesPerFrame\n+\n+\n+template<class BlockDescription_, class ParBoxIons, class ParBoxElectrons, class BBox, class EBox, class Mapping, class FrameIonizer>\n+__global__ void kernelIonizeParticles(ParBoxIons ionBox,\n+                                      ParBoxElectrons electronBox,\n+                                      EBox fieldE,\n+                                      BBox fieldB,\n+                                      FrameIonizer frameIonizer,\n+                                      Mapping mapper)\n+{\n+    \n+    /* \"particle box\" : container/iterator where the particles live in \n+     * and where one can get the frame in a super cell from */\n+    typedef typename ParBoxElectrons::FrameType ELECTRONFRAME;\n+    typedef typename ParBoxIons::FrameType IONFRAME;\n+    /* for not mixing assign up with the nVidia functor assign */\n+    namespace partOp = PMacc::particles::operations;\n+    \n+    /* definitions for domain variables, like indices of blocks and threads */\n+    typedef typename BlockDescription_::SuperCellSize SuperCellSize;\n+    /* \"offset\" 3D distance to origin in units of super cells */\n+    const DataSpace<simDim> block(mapper.getSuperCellIndex(DataSpace<simDim > (blockIdx)));\n+\n+    /* 3D vector from origin of the block to a cell in units of cells */\n+    const DataSpace<simDim > threadIndex(threadIdx);\n+    /* conversion from a 3D cell coordinate to a linear coordinate of the cell in its super cell */\n+    const int linearThreadIdx = DataSpaceOperations<simDim>::template map<SuperCellSize > (threadIndex);\n+\n+    /* \"offset\" from origin of the grid in unit of cells */\n+    const DataSpace<simDim> blockCell = block * SuperCellSize::toRT();\n+    \n+    typedef typename particles::ionization::WriteElectronIntoFrame WriteElectronIntoFrame;\n+\n+    __syncthreads();\n+\n+    __shared__ IONFRAME *ionFrame;\n+    __shared__ ELECTRONFRAME *electronFrame;\n+    __shared__ bool isValid;\n+    __shared__ lcellId_t maxParticlesInFrame;\n+\n+    __syncthreads(); /*wait that all shared memory is initialized*/\n+\n+    /* find last frame in super cell \n+     * define maxParticlesInFrame as the maximum frame size */\n+    if (linearThreadIdx == 0)\n+    {\n+        ionFrame = &(ionBox.getLastFrame(block, isValid));\n+        maxParticlesInFrame = PMacc::math::CT::volume<SuperCellSize>::type::value;\n+    }\n+\n+    __syncthreads();\n+    if (!isValid)\n+        return; //end kernel if we have no frames\n+\n+    /* caching of E and B fields */\n+    PMACC_AUTO(cachedB, CachedBox::create < 0, typename BBox::ValueType > (BlockDescription_()));\n+    PMACC_AUTO(cachedE, CachedBox::create < 1, typename EBox::ValueType > (BlockDescription_()));\n+\n+    __syncthreads();\n+    \n+    nvidia::functors::Assign assign;\n+    \n+    PMACC_AUTO(fieldBBlock, fieldB.shift(blockCell));\n+    ThreadCollective<BlockDescription_> collectiv(linearThreadIdx);\n+    collectiv(\n+              assign,\n+              cachedB,\n+              fieldBBlock\n+              );\n+\n+    PMACC_AUTO(fieldEBlock, fieldE.shift(blockCell));\n+    collectiv(\n+              assign,\n+              cachedE,\n+              fieldEBlock\n+              );\n+    \n+    /* Declare counter in shared memory that will later tell the current fill level or \n+     * occupation of the newly created target electron frames. */\n+    __shared__ int newFrameFillLvl;\n+    \n+    __syncthreads(); /*wait that all shared memory is initialized*/\n+    \n+    /* Declare local variable oldFrameFillLvl for each thread */\n+    int oldFrameFillLvl;\n+    \n+    /* Initialize local (register) counter for each thread \n+     * - describes how many new electrons should be created */\n+    unsigned int newElectrons = 0;\n+    \n+    /* Declare local electron ID\n+     * - describes at which position in the new frame the new electron is to be created */\n+    int electronId;\n+    \n+    /* Master initializes the frame fill level with 0 */\n+    if (linearThreadIdx == 0)\n+    {\n+        newFrameFillLvl = 0;        \n+        electronFrame = NULL;\n+    }\n+    __syncthreads();\n+    \n+    /* move over particle frames and call frameIonizer \n+     * frames are worked on in backwards order to avoid asking if there is another frame\n+     * --> performance \n+     * Because all frames are completely filled except the last and apart from that last frame \n+     * one wants to make sure that all threads are working and every frame is worked on. */\n+    while (isValid)\n+    {\n+        /* casting uint8_t multiMask to boolean */\n+        bool isParticle = (*ionFrame)[linearThreadIdx][multiMask_];\n+        __syncthreads();;\n+\n+        /* < IONIZATION and change of charge states > \n+         * if the threads contain particles, the frameIonizer can ionize them \n+         * if they are non-particles their inner ionization counter remains at 0 */\n+        if (isParticle)\n+        {\n+        /* ionization based on ionization model - this actually increases charge states*/\n+        frameIonizer(*ionFrame, linearThreadIdx, cachedB, cachedE, newElectrons);\n+        }\n+        __syncthreads();\n+        /* always true while-loop over all source frames */\n+        while (true)\n+        {\n+            /* < INIT >\n+             * - electronId is initialized as -1 (meaning: invalid)\n+             * - (local) oldFrameFillLvl set equal to (shared) newFrameFillLvl for each thread \n+             * --> each thread remembers the old \"counter\"\n+             * - then sync */\n+            electronId = -1;\n+            oldFrameFillLvl = newFrameFillLvl;\n+            __syncthreads();\n+            /* < ASK >\n+             * - if a thread wants to create electrons in each cycle it can do that only once \n+             * and before that it atomically adds to the shared counter and uses the current\n+             * value as electronId in the new frame \n+             * - then sync */\n+            if (newElectrons > 0) \n+            {\n+                electronId = atomicAdd(&newFrameFillLvl, 1);\n+            }\n+            __syncthreads();\n+            /* < EXIT? > \n+             * - if the counter hasn't changed all threads break out of the loop */\n+            if (oldFrameFillLvl == newFrameFillLvl)\n+            {","path":"src/picongpu/include/particles/ionization/ionization.hpp","position":250,"original_position":250,"commit_id":"3bd72bf8f5bdac2848411e92534c3b84379a0629","original_commit_id":"3bd72bf8f5bdac2848411e92534c3b84379a0629","user":{"login":"ax3l","id":1353258,"avatar_url":"https://avatars.githubusercontent.com/u/1353258?v=3","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false},"body":"now `{}` for one-liners","created_at":"2015-01-19T23:49:06Z","updated_at":"2015-01-19T23:49:06Z","html_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595#discussion_r23194683","pull_request_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595","_links":{"self":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/23194683"},"html":{"href":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595#discussion_r23194683"},"pull_request":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595"}}},"pull_request":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595","id":25491945,"html_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595","diff_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595.diff","patch_url":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595.patch","issue_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/595","number":595,"state":"open","locked":false,"title":"Ionization in PIConGPU","user":{"login":"n01r","id":5416860,"avatar_url":"https://avatars.githubusercontent.com/u/5416860?v=3","gravatar_id":"","url":"https://api.github.com/users/n01r","html_url":"https://github.com/n01r","followers_url":"https://api.github.com/users/n01r/followers","following_url":"https://api.github.com/users/n01r/following{/other_user}","gists_url":"https://api.github.com/users/n01r/gists{/gist_id}","starred_url":"https://api.github.com/users/n01r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n01r/subscriptions","organizations_url":"https://api.github.com/users/n01r/orgs","repos_url":"https://api.github.com/users/n01r/repos","events_url":"https://api.github.com/users/n01r/events{/privacy}","received_events_url":"https://api.github.com/users/n01r/received_events","type":"User","site_admin":false},"body":"# Ionizatiooooooon! :zap:  \r\n-------------------------\r\nFinally ... a working rudimentary version of ionization can be introduced to the PIConGPU project. This feature is yet unphysical because it makes use of an ionization model that was tailored to assure that one can check the number of particles that are created in the process. Still it features already all important mechanisms and lacks therefore only the physically field-tested ionization schemes.   \r\n\r\n~~### IMPORTANT: Do not merge, yet because of perfomance issues with the trait `GetCharge()`   \r\nThe trait `particles/traits/GetCharge.hpp` had to be edited and now also needs the attribute `chargeState` in addition to `weighting`. So currently every particle has a `chargeState` and this is pointless e.g. for electrons.~~\r\n\r\n-----------------\r\n## The new feature includes: \r\n- [x] a new particle **attribute** `chargeState` \r\n- [x] a new **example** `LWFA_with_Ionization` \r\n- [x] an **ionization model flag** `particleIonizer< IonizationModel< SpeciesToBeCreated > >`\r\n- [x] a simple ionization model `BSI` (Barrier Suppression Ionization) with **arbitrary** ionization threshold\r\n- [x] a **fallback** for particle species without the ionization flag\r\n- [x] **particle creation** during simulation runtime\r\n\r\n## Features not included but yet to come:\r\n- [ ] physical ionization models like `ADK`, real `BSI`, various field ionization models\r\n- [ ] starting simulation with neutral atoms? (that might require much change)\r\n- [ ] momentum conservation\r\n- [ ] energy conservation with ionization current\r\n\r\n## Future prospects:\r\n- Multi-Photon Ionization for lower laser intensities\r\nrequires *field-to-photon-and-back* conversion :wink: @PrometheusPi \r\n- Impact- / Collision Ionization in cooperation with @mxmlnkn \r\n\r\n","created_at":"2014-12-04T12:22:02Z","updated_at":"2015-01-19T23:49:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ab2469608ea1bff17a706b7b58f7a3ff6f6964a9","assignee":{"login":"psychocoderHPC","id":4037125,"avatar_url":"https://avatars.githubusercontent.com/u/4037125?v=3","gravatar_id":"","url":"https://api.github.com/users/psychocoderHPC","html_url":"https://github.com/psychocoderHPC","followers_url":"https://api.github.com/users/psychocoderHPC/followers","following_url":"https://api.github.com/users/psychocoderHPC/following{/other_user}","gists_url":"https://api.github.com/users/psychocoderHPC/gists{/gist_id}","starred_url":"https://api.github.com/users/psychocoderHPC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psychocoderHPC/subscriptions","organizations_url":"https://api.github.com/users/psychocoderHPC/orgs","repos_url":"https://api.github.com/users/psychocoderHPC/repos","events_url":"https://api.github.com/users/psychocoderHPC/events{/privacy}","received_events_url":"https://api.github.com/users/psychocoderHPC/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones/2","labels_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones/2/labels","id":395839,"number":2,"title":"Open Beta","description":"Tasks to complete until the release of our open beta (version 0.1)\r\n\r\nThe [beta](https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta) release shall be useful for *physicist* that used a Particle-in-Cell code *before*. Experience with *compiling libraries from source* and a *good Linux knowledge* is required for the initial installation.\r\n","creator":{"login":"ax3l","id":1353258,"avatar_url":"https://avatars.githubusercontent.com/u/1353258?v=3","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false},"open_issues":47,"closed_issues":520,"state":"open","created_at":"2013-08-06T16:38:57Z","updated_at":"2015-01-19T11:59:15Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595/commits","review_comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595/comments","review_comment_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/{number}","comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/595/comments","statuses_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/3bd72bf8f5bdac2848411e92534c3b84379a0629","head":{"label":"n01r:Multiple_Ionizers","ref":"Multiple_Ionizers","sha":"3bd72bf8f5bdac2848411e92534c3b84379a0629","user":{"login":"n01r","id":5416860,"avatar_url":"https://avatars.githubusercontent.com/u/5416860?v=3","gravatar_id":"","url":"https://api.github.com/users/n01r","html_url":"https://github.com/n01r","followers_url":"https://api.github.com/users/n01r/followers","following_url":"https://api.github.com/users/n01r/following{/other_user}","gists_url":"https://api.github.com/users/n01r/gists{/gist_id}","starred_url":"https://api.github.com/users/n01r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n01r/subscriptions","organizations_url":"https://api.github.com/users/n01r/orgs","repos_url":"https://api.github.com/users/n01r/repos","events_url":"https://api.github.com/users/n01r/events{/privacy}","received_events_url":"https://api.github.com/users/n01r/received_events","type":"User","site_admin":false},"repo":{"id":12918493,"name":"picongpu","full_name":"n01r/picongpu","owner":{"login":"n01r","id":5416860,"avatar_url":"https://avatars.githubusercontent.com/u/5416860?v=3","gravatar_id":"","url":"https://api.github.com/users/n01r","html_url":"https://github.com/n01r","followers_url":"https://api.github.com/users/n01r/followers","following_url":"https://api.github.com/users/n01r/following{/other_user}","gists_url":"https://api.github.com/users/n01r/gists{/gist_id}","starred_url":"https://api.github.com/users/n01r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n01r/subscriptions","organizations_url":"https://api.github.com/users/n01r/orgs","repos_url":"https://api.github.com/users/n01r/repos","events_url":"https://api.github.com/users/n01r/events{/privacy}","received_events_url":"https://api.github.com/users/n01r/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/n01r/picongpu","description":"PIConGPU - A particle-in-cell code for GPGPUs","fork":true,"url":"https://api.github.com/repos/n01r/picongpu","forks_url":"https://api.github.com/repos/n01r/picongpu/forks","keys_url":"https://api.github.com/repos/n01r/picongpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/n01r/picongpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/n01r/picongpu/teams","hooks_url":"https://api.github.com/repos/n01r/picongpu/hooks","issue_events_url":"https://api.github.com/repos/n01r/picongpu/issues/events{/number}","events_url":"https://api.github.com/repos/n01r/picongpu/events","assignees_url":"https://api.github.com/repos/n01r/picongpu/assignees{/user}","branches_url":"https://api.github.com/repos/n01r/picongpu/branches{/branch}","tags_url":"https://api.github.com/repos/n01r/picongpu/tags","blobs_url":"https://api.github.com/repos/n01r/picongpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/n01r/picongpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/n01r/picongpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/n01r/picongpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/n01r/picongpu/statuses/{sha}","languages_url":"https://api.github.com/repos/n01r/picongpu/languages","stargazers_url":"https://api.github.com/repos/n01r/picongpu/stargazers","contributors_url":"https://api.github.com/repos/n01r/picongpu/contributors","subscribers_url":"https://api.github.com/repos/n01r/picongpu/subscribers","subscription_url":"https://api.github.com/repos/n01r/picongpu/subscription","commits_url":"https://api.github.com/repos/n01r/picongpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/n01r/picongpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/n01r/picongpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/n01r/picongpu/issues/comments/{number}","contents_url":"https://api.github.com/repos/n01r/picongpu/contents/{+path}","compare_url":"https://api.github.com/repos/n01r/picongpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/n01r/picongpu/merges","archive_url":"https://api.github.com/repos/n01r/picongpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/n01r/picongpu/downloads","issues_url":"https://api.github.com/repos/n01r/picongpu/issues{/number}","pulls_url":"https://api.github.com/repos/n01r/picongpu/pulls{/number}","milestones_url":"https://api.github.com/repos/n01r/picongpu/milestones{/number}","notifications_url":"https://api.github.com/repos/n01r/picongpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/n01r/picongpu/labels{/name}","releases_url":"https://api.github.com/repos/n01r/picongpu/releases{/id}","created_at":"2013-09-18T08:57:42Z","updated_at":"2014-12-18T19:53:39Z","pushed_at":"2015-01-15T14:54:45Z","git_url":"git://github.com/n01r/picongpu.git","ssh_url":"git@github.com:n01r/picongpu.git","clone_url":"https://github.com/n01r/picongpu.git","svn_url":"https://github.com/n01r/picongpu","homepage":"http://picongpu.hzdr.de","size":7566,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":0,"default_branch":"dev"}},"base":{"label":"ComputationalRadiationPhysics:dev","ref":"dev","sha":"4e8546069fcb2a4f0cbc01a945026e541c8f16aa","user":{"login":"ComputationalRadiationPhysics","id":5120388,"avatar_url":"https://avatars.githubusercontent.com/u/5120388?v=3","gravatar_id":"","url":"https://api.github.com/users/ComputationalRadiationPhysics","html_url":"https://github.com/ComputationalRadiationPhysics","followers_url":"https://api.github.com/users/ComputationalRadiationPhysics/followers","following_url":"https://api.github.com/users/ComputationalRadiationPhysics/following{/other_user}","gists_url":"https://api.github.com/users/ComputationalRadiationPhysics/gists{/gist_id}","starred_url":"https://api.github.com/users/ComputationalRadiationPhysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ComputationalRadiationPhysics/subscriptions","organizations_url":"https://api.github.com/users/ComputationalRadiationPhysics/orgs","repos_url":"https://api.github.com/users/ComputationalRadiationPhysics/repos","events_url":"https://api.github.com/users/ComputationalRadiationPhysics/events{/privacy}","received_events_url":"https://api.github.com/users/ComputationalRadiationPhysics/received_events","type":"Organization","site_admin":false},"repo":{"id":11764461,"name":"picongpu","full_name":"ComputationalRadiationPhysics/picongpu","owner":{"login":"ComputationalRadiationPhysics","id":5120388,"avatar_url":"https://avatars.githubusercontent.com/u/5120388?v=3","gravatar_id":"","url":"https://api.github.com/users/ComputationalRadiationPhysics","html_url":"https://github.com/ComputationalRadiationPhysics","followers_url":"https://api.github.com/users/ComputationalRadiationPhysics/followers","following_url":"https://api.github.com/users/ComputationalRadiationPhysics/following{/other_user}","gists_url":"https://api.github.com/users/ComputationalRadiationPhysics/gists{/gist_id}","starred_url":"https://api.github.com/users/ComputationalRadiationPhysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ComputationalRadiationPhysics/subscriptions","organizations_url":"https://api.github.com/users/ComputationalRadiationPhysics/orgs","repos_url":"https://api.github.com/users/ComputationalRadiationPhysics/repos","events_url":"https://api.github.com/users/ComputationalRadiationPhysics/events{/privacy}","received_events_url":"https://api.github.com/users/ComputationalRadiationPhysics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ComputationalRadiationPhysics/picongpu","description":"PIConGPU - A particle-in-cell code for GPGPUs","fork":false,"url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu","forks_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/forks","keys_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/teams","hooks_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/hooks","issue_events_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/events{/number}","events_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/events","assignees_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/assignees{/user}","branches_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/branches{/branch}","tags_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/tags","blobs_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/{sha}","languages_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/languages","stargazers_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/stargazers","contributors_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/contributors","subscribers_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/subscribers","subscription_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/subscription","commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/comments/{number}","contents_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/contents/{+path}","compare_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/merges","archive_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/downloads","issues_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues{/number}","pulls_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls{/number}","milestones_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/milestones{/number}","notifications_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/labels{/name}","releases_url":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/releases{/id}","created_at":"2013-07-30T12:28:20Z","updated_at":"2015-01-16T15:51:57Z","pushed_at":"2015-01-19T11:59:16Z","git_url":"git://github.com/ComputationalRadiationPhysics/picongpu.git","ssh_url":"git@github.com:ComputationalRadiationPhysics/picongpu.git","clone_url":"https://github.com/ComputationalRadiationPhysics/picongpu.git","svn_url":"https://github.com/ComputationalRadiationPhysics/picongpu","homepage":"http://picongpu.hzdr.de","size":13011,"stargazers_count":81,"watchers_count":81,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"open_issues_count":88,"forks":43,"open_issues":88,"watchers":81,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595"},"html":{"href":"https://github.com/ComputationalRadiationPhysics/picongpu/pull/595"},"issue":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/595"},"comments":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/issues/595/comments"},"review_comments":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595/comments"},"review_comment":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/pulls/595/commits"},"statuses":{"href":"https://api.github.com/repos/ComputationalRadiationPhysics/picongpu/statuses/3bd72bf8f5bdac2848411e92534c3b84379a0629"}}}}