Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kazulagi/plantFEM
This is a plant/farming simulator based on Finite Element Method, which targets crops in fields and soil foundations. This software provides multi-physical simulations of agriculture for canopies, plants, and organs for farmers, breeders, agronomists, and civil engineers. Please try and give us feedback.
https://github.com/kazulagi/plantFEM
agriculture fem finite-element-methods
Last synced: about 2 months ago
JSON representation
This is a plant/farming simulator based on Finite Element Method, which targets crops in fields and soil foundations. This software provides multi-physical simulations of agriculture for canopies, plants, and organs for farmers, breeders, agronomists, and civil engineers. Please try and give us feedback.
- Host: GitHub
- URL: https://github.com/kazulagi/plantFEM
- Owner: kazulagi
- License: mit
- Created: 2019-09-22T16:31:08.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-27T12:29:34.000Z (3 months ago)
- Last Synced: 2024-10-29T22:31:36.829Z (2 months ago)
- Topics: agriculture, fem, finite-element-methods
- Language: Fortran
- Homepage: https://github.com/kazulagi/plantFEM.git
- Size: 304 MB
- Stars: 42
- Watchers: 4
- Forks: 4
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- open-sustainable-technology - plantFEM - A plant simulator based on Finite Element Method, which targets crops in fields. This software provides multi-physical simulations of agriculture for canopies, plants, and organs for farmers, breeders, and agronomists. (Consumption / Agriculture and Nutrition)
README
![Growth](https://user-images.githubusercontent.com/54159711/177001085-9ecd60a8-94b9-4848-b33e-af51545e1c9c.gif)
![soy_scalar_field](https://user-images.githubusercontent.com/54159711/147451703-cd0ecca3-5a87-4cc7-81e2-4621210dc0c4.jpeg)
![soyfield](https://user-images.githubusercontent.com/54159711/130534646-8bf5797a-f04f-4d05-aa47-6ca79a481a11.png)
![grass_leaf](https://user-images.githubusercontent.com/54159711/84125213-311c7480-aa77-11ea-8c61-e7bbce016f8a.gif)
![Civil_Engineering](https://user-images.githubusercontent.com/54159711/167798367-782058ff-e679-411d-a250-d3399e17fd21.png)
# [New!] plantFEM 22.04(LTS) is released!
## Specification
| plantFEM | |
| ---- | ---- |
| Developer | [Haruka Tomobe](https://scholar.google.com/citations?user=aJsSCAYAAAAJ&hl=en) & [plantFEM.org](https://plantfem.org) |
| Working state | current |
| Written in | Fortran 2003, Python 3.x, C89 |
|Source model | Open-source |
| Initial release | 21.10 (20 October 2021)|
| First Long-Term Surpport (LTS) release | 22.04 (23 April 2022) |
| Repository | https://github.com/kazulagi/plantfem |
| Usage | Agricultural CAE, Digital Twins for Agricultural/Civil Engineering |
| Target | Personal computers, HPC-Clusters, Servers |
| Package Manager | soja (experimental) |
|Platforms | x86-64 |
|Default user interface | CLI |
| Lisence | MIT |
| Community | Slack (private channel) |
| Official Website | [plantFEM.org](https://plantfem.org) || Objects | Simulation | Simulation (experimental) |
| ---- | ---- | ---- |
| Elementary entities | Pseudo-static Deformation, Diffusion | Contact, Dynamic deformation, Reaction-diffusion |
| Soybean | Creation, Measure size, Measure mass | Deformation, Contact, Photosynthesis |
| Grape | Creation, Measure size, Measure mass | Deformation, Contact, Photosynthesis |
| Maize | Creation, Measure size, Measure mass | Deformation, Contact, Photosynthesis || Library structure | |
| ---- | ---- |
| std | Extention of Fortran 2003. Contains fundamental classes for file-IOs and Mathematical operations.|
| fem | Library for implementing Finite Element Method. You can create meshes (```FEMDomain```), shape-functions, boundary conditions, initial conditions and some elemental matrices.|
| sim | A set of simulators for ```FEMDomain```. Contains deformation, diffusion, and some experimental implementations. |
| obj | A set of classes for realistic agricultural high-/low-level objects. High-level objects: Soil, Soybean, Maize, Grape...etc. Low-level objects: stem, leaf, air, light ...etc. || IO formats | |
| ---- | ---- |
| Input | json, vtk, msh, ASCII-text|
| Output | json, vtk, msh, stl, ply, ASCII-text|| Commands | |
| ---- | ---- |
| plantfem search | Search sample codes by a keyword |
| plantfem install | Build library and setting PATH |
| plantfem build | Build ```server.f90``` and creates executable file ```server.out``` |
| plantfem run | = ```plantfem build && mpirun ./server.out``` |
| plantfem man | Manual for plantfem command. || Finite Elements | |
| ---- | ---- |
| 2-node line element | 1D 2D 3D|
| 4-node isoparametric element | 2D|
| 8-node isoparametric element | 3D|| System Requirements | |
| ---- | ---- |
| Operation System | Linux (Ubuntu 16.04+, ElementaryOS, LinuxMint, Debian), Windows 10/11 (with WSL-Ubuntu), macOS |
| CPU | 2 cores, 1.4 GHz|
| RAM | 2 GB |
| Storage | 1 GB || Dependancies (minimal) | version |
| ---- | ---- |
| git | 2.25.1 |
| Python | 3.4 or later || Dependancies (Installed by setup/setup.py) | version, info |
| ---- | ---- |
| gcc | 6.4.0 or later |
| gfortran | 4.8.0 or later (Fortran 2003 or later) |
| mpif90 | = OpenMPI compiler, 2.x or later |
| apt | 1.2.35 or later |
| pip | pip3 or later |
| curl | 7.47.0 or later |# What's next plantFEM 22.10 ?
## APIs for Python, C/C++, and JavaScript (Experimental).
[![Experimental](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1lPEzZnAS5CGuXjBw-P8VhMkcpoBxV4-k?usp=sharing)# Documentation
## [Click here!](https://kazulagi.github.io/plantfem.github.io/)
For detail, you can create documentation by
```
ford ford.md
```# How to install
1. Clone the repository.
```
git clone https://github.com/kazulagi/plantFEM.git
```2. Run ```python3 install.py```. The default compiler is ```mpif90```. If you want to use Intel compiler, run ```python3 install.py --compiler=intel``` instead of it.
### For Windows users:
1. Activate your WSL2 (Windows 10)2. Install "Ubuntu 20.04" from Microsoft Store
3. Run command
```
wget https://plantfem.org/download/plantfem_22.04-ubuntu2004_amd64.deb
sudo apt install plantfem_22.04-ubuntu2004_amd64.deb
```1. You can open files by this command
```
explorer.exe .
```5. Enjoy!
### For Ubuntu users:
You can download pre-build packages for
## [[Click to download] Ubuntu 18.04](https://plantfem.org/download/plantfem_22.04-ubuntu2004_amd64.deb)
## [[Click to download] Ubuntu 20.04](https://plantfem.org/download/plantfem_22.04-ubuntu2004_amd64.deb)In case you are using Ubuntu 18.04, execute the next one-liner.
```
wget https://plantfem.org/download/plantfem_22.04-ubuntu1804_amd64.deb && sudo apt install plantfem_22.04-ubuntu1804_amd64.deb
```If you are using Ubuntu 20.04, execute the next one-liner.
```
wget https://plantfem.org/download/plantfem_22.04-ubuntu2004_amd64.deb && sudo apt install plantfem_22.04-ubuntu2004_amd64.deb
```If you want to build and run as a docker container,
- (1) Activate "Docker for Windows" (https://docs.docker.com/docker-for-windows/)
- (2) Open command-prompt and run
```{.copy}
git clone -b 22.04 https://github.com/kazulagi/plantFEM && cd plantFEM/docker
```# How to Use
1. Search sample codes
You can search sample codes by
```
plantfem search
```and type your keywords.
2. Open editors (e.g. VSCode) and edit&save it with extention of ```.f90```
3. Build your script (For example, ```test.f90```) by
```
plantfem load test.f90
plantfem build
```4. Run your script.
```
./server.out
```Or you can run it with multi-core workstations or HPC-clusters.
1. Execute
```
plantfem init
```to initialize directory.
2. Edit ```server.f90```
3. Build the project by
```
plantfem deploy
```4. Run it by
```
mpirun --hostfile [your hostfile for OpenMPI] -np [number of process] ./server.out
```Here is an example of hostfile
```hostfile
192.168.0.1 cpu=6
192.168.0.2 cpu=6
192.168.0.3 cpu=6
```# call plantfem from Python (experimental)
```python
import plantfem as pf
soy = pf.soybean(name="hello_soy")
soy.create(config="./plantfem/Tutorial/obj/realSoybeanConfig.json")
soy.msh(name="hello_soy")
soy.json(name="hello_soy")#soy.stl(name="hello_soy")
# path to plantfem
soy.run(path="./plantfem")```
# Try it now
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1H5cmdKa9MJUC-22dHnvIgo8k6sdQ6NnF?usp=sharing)Plant simulator based on Finite Element Method (FEM).
- Tutorial:
[Click here!](https://kazulagi.github.io/pf/)## How to add modules for plantFEM?
(1) Create your Fortran add-on in plantfem/addon or other places. An example is shown in addon/addon_example.f90.
```Fortran
module addon_example
use plantfem
type::addon_example_
! Member variables
real(real64),private :: realVal
real(int32 ),private :: intVal
contains
! methods (public_name => private_name)
procedure :: set => setaddon_sample
procedure :: show => showaddon_sample
end type
contains! Definitions of methods
! ################################################
subroutine setaddon_sample(obj,realVal, intVal)
class(addon_example_),intent(inout) :: obj
real(real64),optional,intent(in) :: realVal
integer(int32),optional,intent(in) :: intValobj%realVal = input(default=0.0d0, option=realVal)
obj%intVal = input(default=0, option=intVal)end subroutine
! ################################################! ################################################
subroutine showaddon_sample(obj)
class(addon_example_),intent(in) :: obj
print *, "Real-64bit value is :: ", obj%realVal
print *, "int-32bit value is :: ", obj%intVal
end subroutine
! ################################################end module addon_example
```(2) Compile your addon by typing "addon" after
```
plantfem
```Then, type ```addon``` and tap ENTER
```
>>> addon
installing add-on
Directory path of your awesome addon is : (default path = addon)
> addon
installing from addon
addon_example
Compiling ./addon/addon_example.f90
>> addon_example.o
| ########################### | (100%)
>>>
```(3) Run your script (An example is shown in Tutorial/HowToUseAddon/ex1.f90)
```Fortran
program main
use addon_example
implicit none
type(addon_example_) :: obj
call obj%set(realVal=8.0d0, intVal=-100)
call obj%show()
end program
```
(4) Done!
```
>>> test.f90
>
Real-64bit value is :: 8.0000000000000000
int-32bit value is :: -100.000000
>>>
```You can set a hostfile
```
vi ./etc/hostfile
```and a number of process by
```
./plantfem cpu-core
```or
```
vi ./etc/cpucore
```### logs;
- 2019/01/19 :: This Document is written.
- 2019/01/20 :: ControlParameterClass is included
- 2019/01/21 :: Bug Fixed :: FEMDomainClass/ExportFEMDomain.f90 about Neumann-Boundary
- 2019/01/21 :: "Method:DeallocateAll"::Deallocate all alleles.(For all objects)
- 2019/01/25 :: DisplayMesh.f90/ Implement >> Export Mesh data.
- 2019/02/19 :: DiffusionEquationClass.f90 >> Solver for diffusion equations with time-integration by Clank-Nicolson Method
- 2019/03/03 :: FiniteDeformationClass.f90 >> Solver for Finite Deformation problems (2D and 3D).
- 2019/03/10 :: FEMIfaceClass.f90 >> Interface objects (3D).
- 2019/03/10 :: MeshOperationClass.f90 >> Mesh can be devided and interface mesh ca be generated (3D).
- 2019/03/21 :: install.sh and run.sh is created.
- 2019/03/23 :: Standarize FEMDomain(.scf) objects
- 2019/03/24 :: Field class and Simulator Class are created.
- 2019/03/26 :: Interface Solvers are created as MultiPhysics
- 2019/04/13 :: PreprocessingClass is created.
- 2019/04/13 :: DictionaryClass is created.
- 2019/05/13 :: PreProcessingClass is created.
- 2019/06/29 :: ContactMechanicsClass is under debug
- 2019/08/01 :: Jupyter notebook is introduced as GUI.
- 2019/08/01 :: Installer for Windows/macOS/Linux is created.
- 2019/08/03 :: Delauney triangulation is now under development.
- 2019/09/06 :: Bugfix of Simulatior
- 2019/09/23 :: Source code is opened.Now solvers for diffusion, finite deformation, and diffusion-deformation coupling are available. Contact solver is under debugging.
- 2021/05/15 :: Now you can install plantFEM by ```install.py``` and can run by ```plantfem run```
- 2021/10/21 :: Release plantFEM 21.10
- 2022/04/21 :: Beat-release: plantFEM 22.04## Acknowledgements
This project is financially supported by the following research grants.
- Grant-in-Aid for Young Scientists(Start-up), (ID:20K22599), JSPS, JAPAN
- Grant-in-Aid for JSPS Fellows, (ID:17J02383), JSPS, JAPAN## Relevant publications
[1] Haruka Tomobe, Kazunori Fujisawa, Akira Murakami, Experiments and FE-analysis of 2-D root-soil contact problems based on node-to-segment approach, Soils and Foundations, Volume 59, Issue 6, 2019, Pages 1860-1874.
[2] Haruka Tomobe, Kazunori Fujisawa, Akira Murakami, A Mohr-Coulomb-Vilar model for constitutive relationship in root-soil interface under changing suction, Soils and Foundations, Volume 61,2021, Pages 815–835.
[3] Haruka Tomobe, Yu Tanaka, Tomoya Watanabe, plantFEM: A Numerical Platform for Multi-physical Simulation of Plants, Third International Workshop on Machine Learning for Cyber-Agricultural Systems (MLCAS2021), Page 22.
[4] Haruka Tomobe, Vikas Sharma, Harusato Kimura, Hitoshi Morikawa, An Energy-based Overset Finite Element Method for Pseudo-static Structural Analysis. J. Sci. Comput. 2023, 94:55.
Others are under revision and/or under preparation.
### TODO:
- Python-interface
- Spline curve
- NURBS curve