{"id":15574343,"url":"https://github.com/gpmueller/mwe-expression-template","last_synced_at":"2025-03-29T07:12:48.662Z","repository":{"id":152302594,"uuid":"115264508","full_name":"GPMueller/mwe-expression-template","owner":"GPMueller","description":"Trying out expression templates for scalar- and vectorfield operations","archived":false,"fork":false,"pushed_at":"2017-12-25T18:49:41.000Z","size":927,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-03T20:13:25.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GPMueller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-24T13:27:23.000Z","updated_at":"2017-12-24T16:36:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"e8c611cb-943c-4d17-8997-39f67d856941","html_url":"https://github.com/GPMueller/mwe-expression-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPMueller%2Fmwe-expression-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPMueller%2Fmwe-expression-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPMueller%2Fmwe-expression-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPMueller%2Fmwe-expression-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GPMueller","download_url":"https://codeload.github.com/GPMueller/mwe-expression-template/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246150454,"owners_count":20731419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T18:16:41.036Z","updated_at":"2025-03-29T07:12:48.636Z","avatar_url":"https://github.com/GPMueller.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Expression Template MWE\n=============================\n**Efficient and expressive use of abstract Fields**\u003cbr /\u003e\n\n\u0026nbsp;\n\n**Requirements:**\n- C++17\n- (later maybe OpenMP 4.5)\n- (later maybe CUDA 8)\n\n\n**Goals:**\n- scalar /op/ scalarfield\n- scalar /op/ vectorfield      (should maybe not include `+`/`-`)\n- vector /op/ scalarfield      (should maybe not include `+`/`-`)\n- vector /op/ vectorfield      (should not include `*`, but should include `.dot(...)`, `.cross(...)` etc.)\n- vectorfield /op/ vectorfield (should not include `*`, but should include `.dot(...)`, `.cross(...)` etc.)\n\n\n**TODO:**\n- enable mixture of field contents types (currently Fields need to have the exact same type): enables e.g. `Field\u003cint\u003e*Field\u003cscalar\u003e` and `Field\u003cscalar\u003e*Field\u003cVector3\u003e`\n- add more operators `-`, `+=`, `-=`, `*=`, `/=`\n- enable choice of backend: single-thread, OpenMP, CUDA\n- add function to extract a set of entries via an index list: field.set(list), field.set({0,1,3,4,20})\n\n\nScalarField Example:\n--------------------\n```C++\nusing FieldMath::detail::Field;\nusing FieldMath::detail::scalar;\n\n// Initialize\nField\u003cscalar\u003e sf1({1,2,3,4,5});\nField\u003cscalar\u003e sf2({1,2,3,4,5});\nField\u003cscalar\u003e sf3(5, 2);\n\n// Operate\nField\u003cscalar\u003e sf_res1 = sf1 + sf2 * sf3;\n\n// Print\nstd::cerr \u003c\u003c \"sf1 + sf2 * sf3:\" \u003c\u003c std::endl;\nfor (int i=0; i \u003c sf_res1.size(); ++i)\n    std::cerr \u003c\u003c sf_res1[i] \u003c\u003c std::endl;\n```\nshould print:\n```\nsf1 + sf2 * sf3:\n3\n6\n9\n12\n15\n```\n\nVectorField Example:\n--------------------\n```C++\nusing FieldMath::detail::Field;\nusing FieldMath::detail::scalar;\nusing FieldMath::detail::Vector3;\n\n// Initialize\nField\u003cscalar\u003e sf1(5, 2);\n\nField\u003cVector3\u003e vf1(5, {0, 0,   1});\nField\u003cVector3\u003e vf2(5, {0, 0.5, 0.5});\n\n// Operate\nField\u003cscalar\u003e sf_res2 = vf1.dot(vf2) + sf1;\nField\u003cVector3\u003e vf_res1 = vf1 + vf2;\nField\u003cVector3\u003e vf_res2 = vf1.cross(vf2);\n\n// Print\nstd::cerr \u003c\u003c std::endl;\nstd::cerr \u003c\u003c \"vf1.dot(vf2):\" \u003c\u003c std::endl;\nfor (int i=0; i \u003c sf_res2.size(); ++i)\n    std::cerr \u003c\u003c sf_res2[i] \u003c\u003c std::endl;\n\nstd::cerr \u003c\u003c std::endl;\nstd::cerr \u003c\u003c \"vf1 + vf1.cross(vf2):\" \u003c\u003c std::endl;\nfor (int i=0; i \u003c vf_res1.size(); ++i)\n    std::cerr \u003c\u003c vf_res1[i].transpose() \u003c\u003c std::endl;\n```\nshould print:\n```\nvf1.dot(vf2):\n2.5\n2.5\n2.5\n2.5\n2.5\n\nvf1 + vf1.cross(vf2):\n-0.5    0    1\n-0.5    0    1\n-0.5    0    1\n-0.5    0    1\n-0.5    0    1\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpmueller%2Fmwe-expression-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgpmueller%2Fmwe-expression-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpmueller%2Fmwe-expression-template/lists"}