{"action":"created","comment":{"url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/comments/210927336","pull_request_review_id":147248847,"id":210927336,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMDkyNzMzNg==","diff_hunk":"@@ -0,0 +1,203 @@\n+// KRATOS  ___|  |                   |                   |\n+//       \\___ \\  __|  __| |   |  __| __| |   |  __| _` | |\n+//             | |   |    |   | (    |   |   | |   (   | |\n+//       _____/ \\__|_|   \\__,_|\\___|\\__|\\__,_|_|  \\__,_|_| MECHANICS\n+//\n+//  License:     BSD License\n+//           license: structural_mechanics_application/license.txt\n+//\n+//  Main authors:    Martin Fusseder, https://github.com/MFusseder\n+//\n+\n+\n+#include \"adjoint_finite_difference_truss_element_linear_3D2N.h\"\n+#include \"structural_mechanics_application_variables.h\"\n+#include \"custom_response_functions/response_utilities/stress_response_definitions.h\"\n+#include \"includes/checks.h\"\n+\n+\n+namespace Kratos\n+{\n+\n+AdjointFiniteDifferenceTrussElementLinear::AdjointFiniteDifferenceTrussElementLinear(Element::Pointer pPrimalElement)\n+    : AdjointFiniteDifferencingBaseElement(pPrimalElement)\n+{\n+}\n+\n+AdjointFiniteDifferenceTrussElementLinear::~AdjointFiniteDifferenceTrussElementLinear()\n+{\n+}\n+\n+void AdjointFiniteDifferenceTrussElementLinear::Calculate(const Variable<Vector >& rVariable,\n+                        Vector& rOutput,\n+                        const ProcessInfo& rCurrentProcessInfo)\n+{\n+    KRATOS_TRY;\n+\n+    if(rVariable == STRESS_ON_GP)\n+    {\n+        TracedStressType traced_stress_type = static_cast<TracedStressType>(this->GetValue(TRACED_STRESS_TYPE));\n+\n+        const SizeType  GP_num = (mpPrimalElement->GetGeometry().IntegrationPoints()).size();\n+        if (rOutput.size() != GP_num) \n+            rOutput.resize(GP_num, false);\n+\n+        switch (traced_stress_type)\n+        {\n+            case TracedStressType::FX:\n+            {\n+                std::vector< array_1d<double, 3 > > force_vector;\n+                mpPrimalElement->GetValueOnIntegrationPoints(FORCE, force_vector, rCurrentProcessInfo);\n+                for(IndexType i = 0; i < GP_num ; ++i)\n+                    rOutput(i) = force_vector[i][0];\n+                break;\n+            }\n+            default:\n+                KRATOS_ERROR << \"Invalid stress type! Stress type not supported for this element!\" << std::endl;\n+        }\n+    }\n+    else\n+    {\n+        rOutput.resize(1);\n+        rOutput.clear();\n+    }\n+\n+    KRATOS_CATCH(\"\")\n+}\n+\n+void AdjointFiniteDifferenceTrussElementLinear::CalculateStressDisplacementDerivative(const Variable<Vector>& rStressVariable,\n+                                    Matrix& rOutput, const ProcessInfo& rCurrentProcessInfo)\n+{\n+    KRATOS_TRY;\n+\n+    TracedStressType traced_stress_type = static_cast<TracedStressType>(this->GetValue(TRACED_STRESS_TYPE));\n+\n+    if(traced_stress_type  == TracedStressType::FX)\n+    {\n+        // ensure that adjoint load is determined without influence of pre-stress\n+        // pre-stress does not cancel out when computing this derivative with unit-displacements!\n+        Properties::Pointer p_global_properties = mpPrimalElement->pGetProperties();\n+\n+        Properties::Pointer p_local_property(Kratos::make_shared<Properties>(Properties(*p_global_properties)));\n+        mpPrimalElement->SetProperties(p_local_property);\n+\n+        p_local_property->SetValue(TRUSS_PRESTRESS_PK2, 0.0);\n+\n+        AdjointFiniteDifferencingBaseElement::CalculateStressDisplacementDerivative(rStressVariable,\n+                                           rOutput, rCurrentProcessInfo);\n+\n+        mpPrimalElement->SetProperties(p_global_properties);\n+    }\n+    else\n+        AdjointFiniteDifferencingBaseElement::CalculateStressDisplacementDerivative(rStressVariable,\n+                                   rOutput, rCurrentProcessInfo);\n+ \n+    KRATOS_CATCH(\"\")                               \n+}\n+\n+int AdjointFiniteDifferenceTrussElementLinear::Check(const ProcessInfo& rCurrentProcessInfo)\n+{\n+    KRATOS_TRY\n+\n+    KRATOS_ERROR_IF_NOT(mpPrimalElement) << \"Primal element pointer is nullptr!\" << std::endl;\n+\n+    //TODO: Check() of primal element should be called, but is not possible because of DOF check!\n+\n+    KRATOS_ERROR_IF(this->GetGeometry().WorkingSpaceDimension() != 3 || this->GetGeometry().size() != 2)\n+        << \"The truss element works only in 3D and with 2 noded elements\" << \"\" << std::endl;\n+\n+    CheckVariables();\n+    CheckDofs();\n+    CheckProperties(rCurrentProcessInfo);\n+\n+    KRATOS_ERROR_IF(this->GetGeometry().Length() < std::numeric_limits<double>::epsilon()*1000)\n+        << \"Element #\" << this->Id() << \" has an length of zero!\" << std::endl;\n+   \n+    return 0;\n+\n+    KRATOS_CATCH(\"\")\n+}\n+\n+\n+void AdjointFiniteDifferenceTrussElementLinear::CheckVariables()\n+{\n+    KRATOS_CHECK_VARIABLE_KEY(DISPLACEMENT);\n+    KRATOS_CHECK_VARIABLE_KEY(VELOCITY);\n+    KRATOS_CHECK_VARIABLE_KEY(ACCELERATION);\n+    KRATOS_CHECK_VARIABLE_KEY(DENSITY);\n+    KRATOS_CHECK_VARIABLE_KEY(CROSS_AREA);\n+    KRATOS_CHECK_VARIABLE_KEY(ADJOINT_DISPLACEMENT);\n+}\n+\n+void AdjointFiniteDifferenceTrussElementLinear::CheckDofs()\n+{\n+    const SizeType number_of_nodes = this->GetGeometry().size();\n+\n+    for (IndexType i = 0; i < number_of_nodes; ++i) \n+    {\n+        NodeType &r_node = this->GetGeometry()[i];\n+\n+        KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(DISPLACEMENT, r_node);\n+        KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(ADJOINT_DISPLACEMENT, r_node);\n+\n+        KRATOS_CHECK_DOF_IN_NODE(ADJOINT_DISPLACEMENT_X, r_node);\n+        KRATOS_CHECK_DOF_IN_NODE(ADJOINT_DISPLACEMENT_Y, r_node);\n+        KRATOS_CHECK_DOF_IN_NODE(ADJOINT_DISPLACEMENT_Z, r_node);\n+    }\n+}\n+\n+void AdjointFiniteDifferenceTrussElementLinear::CheckProperties(const ProcessInfo& rCurrentProcessInfo)\n+{\n+    const double numerical_limit = std::numeric_limits<double>::epsilon();\n+    const PropertiesType & r_properties = GetProperties();\n+\n+    KRATOS_ERROR_IF(r_properties.Has(CROSS_AREA) == false || r_properties[CROSS_AREA] <= numerical_limit)\n+    << \"CROSS_AREA not provided for this element\" << this->Id() << std::endl;\n+    KRATOS_ERROR_IF(r_properties.Has(YOUNG_MODULUS) == false || r_properties[YOUNG_MODULUS] <= numerical_limit)\n+    << \"YOUNG_MODULUS not provided for this element\" << this->Id() << std::endl;\n+    KRATOS_ERROR_IF_NOT( r_properties.Has(DENSITY) )\n+    << \"DENSITY not provided for this element\" << this->Id() << std::endl;\n+\n+    KRATOS_ERROR_IF_NOT(r_properties.Has(CONSTITUTIVE_LAW))\n+    << \"CONSTITUTIVE_LAW not provided for element \" << this->Id() << std::endl;\n+    const ConstitutiveLaw::Pointer& cl = r_properties[CONSTITUTIVE_LAW];\n+    KRATOS_ERROR_IF(cl == nullptr) \n+    << \"CONSTITUTIVE_LAW not provided for element \" << this->Id() << std::endl;\n+    cl->Check(r_properties ,this->GetGeometry(),rCurrentProcessInfo);\n+}\n+\n+double AdjointFiniteDifferenceTrussElementLinear::GetPerturbationSizeModificationFactor(const Variable<array_1d<double,3>>& rDesignVariable)\n+{\n+    KRATOS_TRY;\n+\n+    if(rDesignVariable == SHAPE)","path":"applications/StructuralMechanicsApplication/custom_response_functions/adjoint_elements/adjoint_finite_difference_truss_element_linear_3D2N.cpp","position":173,"original_position":173,"commit_id":"291aaaac784a502d92315573d615b987a7069258","original_commit_id":"291aaaac784a502d92315573d615b987a7069258","user":{"login":"armingeiser","id":25903585,"node_id":"MDQ6VXNlcjI1OTAzNTg1","avatar_url":"https://avatars2.githubusercontent.com/u/25903585?v=4","gravatar_id":"","url":"https://api.github.com/users/armingeiser","html_url":"https://github.com/armingeiser","followers_url":"https://api.github.com/users/armingeiser/followers","following_url":"https://api.github.com/users/armingeiser/following{/other_user}","gists_url":"https://api.github.com/users/armingeiser/gists{/gist_id}","starred_url":"https://api.github.com/users/armingeiser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/armingeiser/subscriptions","organizations_url":"https://api.github.com/users/armingeiser/orgs","repos_url":"https://api.github.com/users/armingeiser/repos","events_url":"https://api.github.com/users/armingeiser/events{/privacy}","received_events_url":"https://api.github.com/users/armingeiser/received_events","type":"User","site_admin":false},"body":"seems to be the same as for the nonlinear one","created_at":"2018-08-17T14:28:22Z","updated_at":"2018-08-17T14:28:23Z","html_url":"https://github.com/KratosMultiphysics/Kratos/pull/2693#discussion_r210927336","pull_request_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/comments/210927336"},"html":{"href":"https://github.com/KratosMultiphysics/Kratos/pull/2693#discussion_r210927336"},"pull_request":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693"}}},"pull_request":{"url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693","id":209106636,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5MTA2NjM2","html_url":"https://github.com/KratosMultiphysics/Kratos/pull/2693","diff_url":"https://github.com/KratosMultiphysics/Kratos/pull/2693.diff","patch_url":"https://github.com/KratosMultiphysics/Kratos/pull/2693.patch","issue_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/2693","number":2693,"state":"open","locked":false,"title":"Feature adjoint truss element","user":{"login":"MFusseder","id":30687316,"node_id":"MDQ6VXNlcjMwNjg3MzE2","avatar_url":"https://avatars2.githubusercontent.com/u/30687316?v=4","gravatar_id":"","url":"https://api.github.com/users/MFusseder","html_url":"https://github.com/MFusseder","followers_url":"https://api.github.com/users/MFusseder/followers","following_url":"https://api.github.com/users/MFusseder/following{/other_user}","gists_url":"https://api.github.com/users/MFusseder/gists{/gist_id}","starred_url":"https://api.github.com/users/MFusseder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MFusseder/subscriptions","organizations_url":"https://api.github.com/users/MFusseder/orgs","repos_url":"https://api.github.com/users/MFusseder/repos","events_url":"https://api.github.com/users/MFusseder/events{/privacy}","received_events_url":"https://api.github.com/users/MFusseder/received_events","type":"User","site_admin":false},"body":"Within this PR two adjoint truss elements (linear/nonlinear) are added. The nonlinear truss is derived form the linear one. Please note: In comparison with the already existing adjoint elements, the nonlinear adjoint truss is able to compute the stress-displacement derivative analytically.\r\n \r\nThis PR also includes test cases to check the new adjoint elements. ","created_at":"2018-08-17T10:24:00Z","updated_at":"2018-08-17T14:28:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d86d9b6c3acf96b8f72fb00a942025b8d382b326","assignee":null,"assignees":[],"requested_reviewers":[{"login":"philbucher","id":25484702,"node_id":"MDQ6VXNlcjI1NDg0NzAy","avatar_url":"https://avatars3.githubusercontent.com/u/25484702?v=4","gravatar_id":"","url":"https://api.github.com/users/philbucher","html_url":"https://github.com/philbucher","followers_url":"https://api.github.com/users/philbucher/followers","following_url":"https://api.github.com/users/philbucher/following{/other_user}","gists_url":"https://api.github.com/users/philbucher/gists{/gist_id}","starred_url":"https://api.github.com/users/philbucher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philbucher/subscriptions","organizations_url":"https://api.github.com/users/philbucher/orgs","repos_url":"https://api.github.com/users/philbucher/repos","events_url":"https://api.github.com/users/philbucher/events{/privacy}","received_events_url":"https://api.github.com/users/philbucher/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693/commits","review_comments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693/comments","review_comment_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/2693/comments","statuses_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/statuses/291aaaac784a502d92315573d615b987a7069258","head":{"label":"KratosMultiphysics:feature-adjoint-truss-element","ref":"feature-adjoint-truss-element","sha":"291aaaac784a502d92315573d615b987a7069258","user":{"login":"KratosMultiphysics","id":24840449,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0ODQwNDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/24840449?v=4","gravatar_id":"","url":"https://api.github.com/users/KratosMultiphysics","html_url":"https://github.com/KratosMultiphysics","followers_url":"https://api.github.com/users/KratosMultiphysics/followers","following_url":"https://api.github.com/users/KratosMultiphysics/following{/other_user}","gists_url":"https://api.github.com/users/KratosMultiphysics/gists{/gist_id}","starred_url":"https://api.github.com/users/KratosMultiphysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KratosMultiphysics/subscriptions","organizations_url":"https://api.github.com/users/KratosMultiphysics/orgs","repos_url":"https://api.github.com/users/KratosMultiphysics/repos","events_url":"https://api.github.com/users/KratosMultiphysics/events{/privacy}","received_events_url":"https://api.github.com/users/KratosMultiphysics/received_events","type":"Organization","site_admin":false},"repo":{"id":81815495,"node_id":"MDEwOlJlcG9zaXRvcnk4MTgxNTQ5NQ==","name":"Kratos","full_name":"KratosMultiphysics/Kratos","owner":{"login":"KratosMultiphysics","id":24840449,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0ODQwNDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/24840449?v=4","gravatar_id":"","url":"https://api.github.com/users/KratosMultiphysics","html_url":"https://github.com/KratosMultiphysics","followers_url":"https://api.github.com/users/KratosMultiphysics/followers","following_url":"https://api.github.com/users/KratosMultiphysics/following{/other_user}","gists_url":"https://api.github.com/users/KratosMultiphysics/gists{/gist_id}","starred_url":"https://api.github.com/users/KratosMultiphysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KratosMultiphysics/subscriptions","organizations_url":"https://api.github.com/users/KratosMultiphysics/orgs","repos_url":"https://api.github.com/users/KratosMultiphysics/repos","events_url":"https://api.github.com/users/KratosMultiphysics/events{/privacy}","received_events_url":"https://api.github.com/users/KratosMultiphysics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KratosMultiphysics/Kratos","description":"Kratos Multiphysics (A.K.A Kratos) is a framework for building parallel multi-disciplinary simulation software. Modularity, extensibility and HPC are the main objectives. Kratos has BSD license and is written in C++ with extensive Python interface.","fork":false,"url":"https://api.github.com/repos/KratosMultiphysics/Kratos","forks_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/forks","keys_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/teams","hooks_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/hooks","issue_events_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/events{/number}","events_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/events","assignees_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/assignees{/user}","branches_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/branches{/branch}","tags_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/tags","blobs_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/refs{/sha}","trees_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/statuses/{sha}","languages_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/languages","stargazers_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/stargazers","contributors_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/contributors","subscribers_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/subscribers","subscription_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/subscription","commits_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/commits{/sha}","git_commits_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/commits{/sha}","comments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/comments{/number}","issue_comment_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/comments{/number}","contents_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/contents/{+path}","compare_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/merges","archive_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/downloads","issues_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues{/number}","pulls_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls{/number}","milestones_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/milestones{/number}","notifications_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/labels{/name}","releases_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/releases{/id}","deployments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/deployments","created_at":"2017-02-13T10:58:24Z","updated_at":"2018-08-17T13:16:52Z","pushed_at":"2018-08-17T13:23:56Z","git_url":"git://github.com/KratosMultiphysics/Kratos.git","ssh_url":"git@github.com:KratosMultiphysics/Kratos.git","clone_url":"https://github.com/KratosMultiphysics/Kratos.git","svn_url":"https://github.com/KratosMultiphysics/Kratos","homepage":"http://www.cimne.com/kratos/","size":1211841,"stargazers_count":177,"watchers_count":177,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"archived":false,"open_issues_count":127,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":43,"open_issues":127,"watchers":177,"default_branch":"master"}},"base":{"label":"KratosMultiphysics:master","ref":"master","sha":"6532a45b5dfda276acaa21ffe3f0e3564b6e1058","user":{"login":"KratosMultiphysics","id":24840449,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0ODQwNDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/24840449?v=4","gravatar_id":"","url":"https://api.github.com/users/KratosMultiphysics","html_url":"https://github.com/KratosMultiphysics","followers_url":"https://api.github.com/users/KratosMultiphysics/followers","following_url":"https://api.github.com/users/KratosMultiphysics/following{/other_user}","gists_url":"https://api.github.com/users/KratosMultiphysics/gists{/gist_id}","starred_url":"https://api.github.com/users/KratosMultiphysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KratosMultiphysics/subscriptions","organizations_url":"https://api.github.com/users/KratosMultiphysics/orgs","repos_url":"https://api.github.com/users/KratosMultiphysics/repos","events_url":"https://api.github.com/users/KratosMultiphysics/events{/privacy}","received_events_url":"https://api.github.com/users/KratosMultiphysics/received_events","type":"Organization","site_admin":false},"repo":{"id":81815495,"node_id":"MDEwOlJlcG9zaXRvcnk4MTgxNTQ5NQ==","name":"Kratos","full_name":"KratosMultiphysics/Kratos","owner":{"login":"KratosMultiphysics","id":24840449,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0ODQwNDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/24840449?v=4","gravatar_id":"","url":"https://api.github.com/users/KratosMultiphysics","html_url":"https://github.com/KratosMultiphysics","followers_url":"https://api.github.com/users/KratosMultiphysics/followers","following_url":"https://api.github.com/users/KratosMultiphysics/following{/other_user}","gists_url":"https://api.github.com/users/KratosMultiphysics/gists{/gist_id}","starred_url":"https://api.github.com/users/KratosMultiphysics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KratosMultiphysics/subscriptions","organizations_url":"https://api.github.com/users/KratosMultiphysics/orgs","repos_url":"https://api.github.com/users/KratosMultiphysics/repos","events_url":"https://api.github.com/users/KratosMultiphysics/events{/privacy}","received_events_url":"https://api.github.com/users/KratosMultiphysics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KratosMultiphysics/Kratos","description":"Kratos Multiphysics (A.K.A Kratos) is a framework for building parallel multi-disciplinary simulation software. Modularity, extensibility and HPC are the main objectives. Kratos has BSD license and is written in C++ with extensive Python interface.","fork":false,"url":"https://api.github.com/repos/KratosMultiphysics/Kratos","forks_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/forks","keys_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/teams","hooks_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/hooks","issue_events_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/events{/number}","events_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/events","assignees_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/assignees{/user}","branches_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/branches{/branch}","tags_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/tags","blobs_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/refs{/sha}","trees_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/statuses/{sha}","languages_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/languages","stargazers_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/stargazers","contributors_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/contributors","subscribers_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/subscribers","subscription_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/subscription","commits_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/commits{/sha}","git_commits_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/git/commits{/sha}","comments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/comments{/number}","issue_comment_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/comments{/number}","contents_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/contents/{+path}","compare_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/merges","archive_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/downloads","issues_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues{/number}","pulls_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls{/number}","milestones_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/milestones{/number}","notifications_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/labels{/name}","releases_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/releases{/id}","deployments_url":"https://api.github.com/repos/KratosMultiphysics/Kratos/deployments","created_at":"2017-02-13T10:58:24Z","updated_at":"2018-08-17T13:16:52Z","pushed_at":"2018-08-17T13:23:56Z","git_url":"git://github.com/KratosMultiphysics/Kratos.git","ssh_url":"git@github.com:KratosMultiphysics/Kratos.git","clone_url":"https://github.com/KratosMultiphysics/Kratos.git","svn_url":"https://github.com/KratosMultiphysics/Kratos","homepage":"http://www.cimne.com/kratos/","size":1211841,"stargazers_count":177,"watchers_count":177,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"archived":false,"open_issues_count":127,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":43,"open_issues":127,"watchers":177,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693"},"html":{"href":"https://github.com/KratosMultiphysics/Kratos/pull/2693"},"issue":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/2693"},"comments":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/issues/2693/comments"},"review_comments":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693/comments"},"review_comment":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/pulls/2693/commits"},"statuses":{"href":"https://api.github.com/repos/KratosMultiphysics/Kratos/statuses/291aaaac784a502d92315573d615b987a7069258"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"armingeiser"}}