From 1840b0f581e1e826fa9e88b5bbf4076e7d46ebfa Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:08 +0200 Subject: [PATCH 01/11] Update version.txt --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 1cc5f657..8cfbc905 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.1.0 \ No newline at end of file +1.1.1 \ No newline at end of file From 6e0da7c016e4a8b3e6824c69a9d2cb6bc9961132 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:25 +0200 Subject: [PATCH 02/11] Update README.md --- README.md | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index f485238a..1033e282 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,19 @@ -# Tensor Toolbox for Modern Fortran (ttb) - -![Image](docs/images/header.jpg) - -Commercial FEM software packages offer interfaces (user subroutines written in Fortran) for custom defined user materials like UMAT in [Abaqus](https://www.3ds.com/products-services/simulia/products/abaqus/) or HYPELA2 in [MSC.Marc](http://www.mscsoftware.com/product/marc). In comparison to other scientific programming languages like MATLAB or Python Fortran is not as comfortable to use when dealing with high level programming features of tensor manipulation. On the other hand it's super fast - so why not combine the handy features from MATLAB or Python's NumPy/Scipy with the speed of Fortran? That's the reason why I started working on a simple but effective module called **Tensor Toolbox for Modern Fortran**. I adopted the idea to my needs from [Naumann, C. (2016)](http://nbn-resolving.de/urn:nbn:de:bsz:ch1-qucosa-222075). - -The full documentation is available at [https://adtzlr.github.io/ttb](https://adtzlr.github.io/ttb). This project is licensed under the terms of the MIT license. - -## How to cite +

+ +

Tensor Toolbox for Modern Fortran.

+

+![Fortran](https://img.shields.io/badge/Fortran-%23734F96.svg?style=for-the-badge&logo=fortran&logoColor=white) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4077378.svg)](https://doi.org/10.5281/zenodo.4077378) -If you use *Tensor Toolbox for Modern Fortran (ttb)* in your work, please cite this toolbox in your publications. Thanks! **Hint**: The DOI-badge always resolves to the latest version of this toolbox - if you prefer a version-specific DOI, hit the DOI-badge and pick a version on Zenodo. - -Andreas Dutzler. *Tensor Toolbox for Modern Fortran - High-Level Tensor Manipulation in Fortran*. DOI: 10.5281/zenodo.4077378. +Commercial FEM software packages offer interfaces (user subroutines written in Fortran) for custom defined user materials like UMAT in [Abaqus](https://www.3ds.com/products-services/simulia/products/abaqus/) or HYPELA2 in [MSC.Marc](http://www.mscsoftware.com/product/marc). In comparison to other scientific programming languages like MATLAB or Python Fortran is not as comfortable to use when dealing with high level programming features of tensor manipulation. On the other hand it's super fast - so why not combine the handy features from MATLAB or Python's NumPy/Scipy with the speed of Fortran? That's the reason why I started working on a simple but effective module called **Tensor Toolbox for Modern Fortran**. I adopted the idea to my needs from [Naumann, C. (2016)](http://nbn-resolving.de/urn:nbn:de:bsz:ch1-qucosa-222075). -``` -@software{dutzler2022, - author = {Andreas Dutzler}, - title = {Tensor Toolbox for Modern Fortran - High-Level Tensor Manipulation in Fortran}, - doi = {10.5281/zenodo.4077378}, - url = {https://doi.org/10.5281/zenodo.4077378} -} -``` +The full documentation is available at [https://adtzlr.github.io/ttb](https://adtzlr.github.io/ttb). This project is licensed under the terms of the [MIT license](LICENSE). ## Overview +![deformation](https://github.com/adtzlr/ttb/assets/5793153/14f0f4f3-2b17-4253-ad06-c279a5d75193) + It provides the following [basic operations for tensor calculus](docs/functions.md) (all written in double precision `real(kind=8)`): - Dot Product `C(i,j) = A(i,k) B(k,j)` written as `C = A*B` - Double Dot Product `C = A(i,j) B(i,j)` written as `C = A**B` @@ -131,3 +120,6 @@ The isochoric part of the material elasticity tensor `C4_iso` of a nearly-incomp ## Credits Naumann, C.: [Chemisch-mechanisch gekoppelte Modellierung und Simulation oxidativer Alterungsvorgänge in Gummibauteilen (German)](http://nbn-resolving.de/urn:nbn:de:bsz:ch1-qucosa-222075). PhD thesis. Fakultät für Maschinenbau der Technischen Universität Chemnitz, 2016. + +# Changelog +All notable changes to this project will be documented in [this file](CHANGELOG.md). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). From 29238f49be4f9bbbab7ea3be1103b853d68dadaa Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:28 +0200 Subject: [PATCH 03/11] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 18bc8c28..edb8d3fd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Andreas Dutzler +Copyright (c) 2023 Andreas Dutzler Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From cde9cf457454ff5662863adb7f25a4e11d0b57c0 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:45 +0200 Subject: [PATCH 04/11] Add logo and deformation figures --- docs/images/deformation.png | Bin 0 -> 30187 bytes docs/images/deformation.svg | 377 ++++++++++++++++++++++++++++++++++++ docs/images/logo.png | Bin 0 -> 28368 bytes docs/images/logo.svg | 138 +++++++++++++ 4 files changed, 515 insertions(+) create mode 100644 docs/images/deformation.png create mode 100644 docs/images/deformation.svg create mode 100644 docs/images/logo.png create mode 100644 docs/images/logo.svg diff --git a/docs/images/deformation.png b/docs/images/deformation.png new file mode 100644 index 0000000000000000000000000000000000000000..055bb5563880fd07b434aa56934d57c4aab8ded9 GIT binary patch literal 30187 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 WABt-qMIe8^)!?*|ZmG7zo&N)3i7ed! literal 0 HcmV?d00001 diff --git a/docs/images/deformation.svg b/docs/images/deformation.svg new file mode 100644 index 00000000..a979d1c2 --- /dev/null +++ b/docs/images/deformation.svg @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F + φ + + + X1, x1 + X + x + u + X2, x2 + X3, x3 + + + + + + Ω + ω + + diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4010943d95faab773fb26b34fb43e683b11d8779 GIT binary patch literal 28368 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 z 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 + + + + + + + + + + + + + + + + ttb + tensorToolbox + for modern Fortran + + + + + + + From 2cf0bf3361141c6d5bc8308ee350779c683637c4 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:48 +0200 Subject: [PATCH 05/11] Create CITATION.cff --- CITATION.cff | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..d7127d95 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,11 @@ +authors: +- family-names: "Dutzler" + given-names: "Andreas" + orcid: "https://orcid.org/0000-0002-9383-9686" +cff-version: 1.2.0 +message: "If you use this software, please cite it using these metadata." +title: "Tensor Toolbox for Modern Fortran - High-Level Tensor Manipulation in Fortran" +type: software +doi: 10.5281/zenodo.4077378 +url: https://github.com/adtzlr/ttb +license: GPL-3.0 \ No newline at end of file From 840a30126cba25416982f9d29f728e0e8455b37f Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:08:50 +0200 Subject: [PATCH 06/11] Create CHANGELOG.md --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..532bb26d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog +All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.1.1] - 2023-05-12 + +### Added +- Start keeping a Changelog. +- Add `CITATION.cff` file and remove *How To Cite* section in README. +- Add a text logo and add badges to `README.md`. + +### Changed +- Add a new logo. \ No newline at end of file From e56eca07785695e6cf44f847a46df21ec5c7986b Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:17:05 +0200 Subject: [PATCH 07/11] README: Add License Badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1033e282..a99699cd 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@

![Fortran](https://img.shields.io/badge/Fortran-%23734F96.svg?style=for-the-badge&logo=fortran&logoColor=white) +![License](https://img.shields.io/github/license/adtzlr/ttb) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4077378.svg)](https://doi.org/10.5281/zenodo.4077378) Commercial FEM software packages offer interfaces (user subroutines written in Fortran) for custom defined user materials like UMAT in [Abaqus](https://www.3ds.com/products-services/simulia/products/abaqus/) or HYPELA2 in [MSC.Marc](http://www.mscsoftware.com/product/marc). In comparison to other scientific programming languages like MATLAB or Python Fortran is not as comfortable to use when dealing with high level programming features of tensor manipulation. On the other hand it's super fast - so why not combine the handy features from MATLAB or Python's NumPy/Scipy with the speed of Fortran? That's the reason why I started working on a simple but effective module called **Tensor Toolbox for Modern Fortran**. I adopted the idea to my needs from [Naumann, C. (2016)](http://nbn-resolving.de/urn:nbn:de:bsz:ch1-qucosa-222075). From 91ed590d8ce2a2a69a45d44d34ca66546bd17704 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:17:49 +0200 Subject: [PATCH 08/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a99699cd..bd96cacf 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

Tensor Toolbox for Modern Fortran.

-![Fortran](https://img.shields.io/badge/Fortran-%23734F96.svg?style=for-the-badge&logo=fortran&logoColor=white) +![Fortran](https://img.shields.io/badge/modern-fortran-blueviolet) ![License](https://img.shields.io/github/license/adtzlr/ttb) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4077378.svg)](https://doi.org/10.5281/zenodo.4077378) From 48b10906998f7a3856910d5fbca3a6f2c3dc36a3 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:18:35 +0200 Subject: [PATCH 09/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bd96cacf..4e25ac60 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The full documentation is available at [https://adtzlr.github.io/ttb](https://ad ![deformation](https://github.com/adtzlr/ttb/assets/5793153/14f0f4f3-2b17-4253-ad06-c279a5d75193) -It provides the following [basic operations for tensor calculus](docs/functions.md) (all written in double precision `real(kind=8)`): +This tensor toolbox provides the following [basic operations for tensor calculus](docs/functions.md) (all written in double precision `real(kind=8)`): - Dot Product `C(i,j) = A(i,k) B(k,j)` written as `C = A*B` - Double Dot Product `C = A(i,j) B(i,j)` written as `C = A**B` - Dyadic Product `C(i,j,k,l) = A(i,j) B(k,l)` written as `C = A.dya.B` From 8628a0f8e7ff4f5ef1eedf876cbe630b27cfe2e9 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:20:38 +0200 Subject: [PATCH 10/11] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 532bb26d..c2b62791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. The format ## [Unreleased] -## [1.1.1] - 2023-05-12 +## [1.1.1] - 2023-05-13 ### Added - Start keeping a Changelog. From 90fb5f44e1860228fb530309a59f70ceaefcd28d Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 13 May 2023 00:21:11 +0200 Subject: [PATCH 11/11] Update CHANGELOG.md --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2b62791..8a179261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,4 @@ All notable changes to this project will be documented in this file. The format ### Added - Start keeping a Changelog. - Add `CITATION.cff` file and remove *How To Cite* section in README. -- Add a text logo and add badges to `README.md`. - -### Changed -- Add a new logo. \ No newline at end of file +- Add a text logo and add badges to `README.md`. \ No newline at end of file