All Projects → kazulagi → plantFEM

kazulagi / plantFEM

Licence: MIT license
This is a plant/farming 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. Please try and give us feedback. This github-page is a mirror of the following gitlab-page.

Programming Languages

fortran
972 projects
python
139335 projects - #7 most used programming language
shell
77523 projects
c
50402 projects - #5 most used programming language
javascript
184084 projects - #8 most used programming language
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to plantFEM

ameshref
Efficient Matlab Implementation of Adaptive Mesh Refinement in 2D
Stars: ✭ 28 (-9.68%)
Mutual labels:  fem, finite-element-methods
MinimalFem
podgorskiy.com/spblog/304/writing-a-fem-solver-in-less-the-180-lines-of-code
Stars: ✭ 23 (-25.81%)
Mutual labels:  fem, finite-element-methods
feappv
FEAPpv -- free personal version of the FEAP
Stars: ✭ 57 (+83.87%)
Mutual labels:  fem, finite-element-methods
fem mesh matlab
MATLAB Toolbox for Handling 2D and 3D FEM Meshes
Stars: ✭ 23 (-25.81%)
Mutual labels:  fem, finite-element-methods
agro
AgrO describes agronomic practices, techniques, and variables used in agronomic experiments.
Stars: ✭ 39 (+25.81%)
Mutual labels:  agriculture
suanPan
🧮 An Open Source, Parallel and Heterogeneous Finite Element Analysis Framework
Stars: ✭ 29 (-6.45%)
Mutual labels:  fem
ogs
DO NOT USE THIS REPO! Migrated to https://gitlab.opengeosys.org/ogs/ogs!
Stars: ✭ 104 (+235.48%)
Mutual labels:  fem
openminder
Open Source Rootzone Monitoring
Stars: ✭ 24 (-22.58%)
Mutual labels:  agriculture
FreeFem-website
FreeFEM website
Stars: ✭ 13 (-58.06%)
Mutual labels:  finite-element-methods
foodon
The core repository for the FOODON food ontology project. This holds the key classes of the ontology; larger files and the results of text-mining projects will be stored in other repos.
Stars: ✭ 137 (+341.94%)
Mutual labels:  agriculture
YOLOV2-Tensorflow-2.0
Just another YOLO V2 implementation. Train your own dataset in a jupyter notebook!
Stars: ✭ 46 (+48.39%)
Mutual labels:  agriculture
pyFEM
A modular Finite Element Method solver implemented in Python
Stars: ✭ 16 (-48.39%)
Mutual labels:  fem
awesome-agtech
A curated list of technology companies, resources, and tools in the agricultural field.
Stars: ✭ 43 (+38.71%)
Mutual labels:  agriculture
getfem
Mirror of GetFEM repository
Stars: ✭ 23 (-25.81%)
Mutual labels:  finite-element-methods
oasis-grow
Data collection, equipment control, and imaging engine for environmental IoT applications. Runs on RPi/ARM and interfaces with Arduino/ATmega minions over serial.
Stars: ✭ 53 (+70.97%)
Mutual labels:  agriculture
Farm-Data-Relay-System
A system that uses ESP-NOW, LoRa, and other protocols to transport sensor data in remote areas without relying on WiFi.
Stars: ✭ 97 (+212.9%)
Mutual labels:  agriculture
ImportMesh
Utilities for importing FEM meshes to Mathematica
Stars: ✭ 14 (-54.84%)
Mutual labels:  finite-element-methods
FinEtools.jl
Finite Element tools in Julia
Stars: ✭ 126 (+306.45%)
Mutual labels:  finite-element-methods
agroclimatology
Ruby client for interacting with the NASA (POWER) Agroclimatology Web Resource
Stars: ✭ 16 (-48.39%)
Mutual labels:  agriculture
ELEMENTS
The C++ ELEMENTS library contains a suite of sub-libraries to support mathematical functions (elements), data representations (MATAR), and novel mesh classes (geometry and SWAGE) to support a very broad range of element types, numerical methods, and mesh connectivity data structures useful for computational physics and engineering.
Stars: ✭ 13 (-58.06%)
Mutual labels:  finite-element-methods

Growth

soy_scalar_field

soyfield

grass_leaf

Civil_Engineering

[New!] plantFEM 22.04(LTS) is released!

Specification

plantFEM
Developer Haruka Tomobe & 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
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

Documentation

Click here!

For detail, you can create documentation by

ford ford.md

How to install

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 .
  1. Enjoy!

For Ubuntu users:

You can download pre-build packages for

[Click to download] Ubuntu 18.04

[Click to download] Ubuntu 20.04

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,

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.

  1. Open editors (e.g. VSCode) and edit&save it with extention of .f90

  2. Build your script (For example, test.f90) by

plantfem load test.f90
plantfem build
  1. Run your script.
./server.out

Or you can run it with multi-core workstations or HPC-clusters.

  1. Execute
plantfem init

to initialize directory.

  1. Edit server.f90

  2. Build the project by

plantfem deploy
  1. Run it by
mpirun --hostfile [your hostfile for OpenMPI] -np [number of process] ./server.out 

Here is an example of hostfile

192.168.0.1  cpu=6
192.168.0.2  cpu=6
192.168.0.3  cpu=6

call plantfem from Python (experimental)

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

Plant simulator based on Finite Element Method (FEM).

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.

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) :: intVal

    obj%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)

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] plantFEM: A Numerical Platform for Multi-physical Simulation of Plants, Third International Workshop on Machine Learning for Cyber-Agricultural Systems (MLCAS2021), Page 22.

Others are under revision and/or under preparation.

TODO:

  • Python-interface
  • Spline curve
  • NURBS curve
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].