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

December 3, 2025 · View on GitHub

Growth

soyphoto

soy_scalar_field

soyfield

grass_leaf

Civil_Engineering

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

Specification

plantFEM
DeveloperHaruka Tomobe & plantFEM.org
Working statecurrent
Written inFortran 2003, Python 3.x, C89
Source modelOpen-source
Initial release21.10 (20 October 2021)
First Long-Term Surpport (LTS) release22.04 (23 April 2022)
Repositoryhttps://github.com/kazulagi/plantfem
UsageAgricultural CAE, Digital Twins for Agricultural/Civil Engineering
TargetPersonal computers, HPC-Clusters, Servers
Package Managersoja (experimental)
Platformsx86-64
Default user interfaceCLI
LisenceMIT
CommunitySlack (private channel)
Official WebsiteplantFEM.org
ObjectsSimulationSimulation (experimental)
Elementary entitiesPseudo-static Deformation, DiffusionContact, Dynamic deformation, Reaction-diffusion
SoybeanCreation, Measure size, Measure massDeformation, Contact, Photosynthesis
GrapeCreation, Measure size, Measure massDeformation, Contact, Photosynthesis
MaizeCreation, Measure size, Measure massDeformation, Contact, Photosynthesis
Library structure
stdExtention of Fortran 2003. Contains fundamental classes for file-IOs and Mathematical operations.
femLibrary for implementing Finite Element Method. You can create meshes (FEMDomain), shape-functions, boundary conditions, initial conditions and some elemental matrices.
simA set of simulators for FEMDomain. Contains deformation, diffusion, and some experimental implementations.
objA 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
Inputjson, vtk, msh, ASCII-text
Outputjson, vtk, msh, stl, ply, ASCII-text
Commands
plantfem searchSearch sample codes by a keyword
plantfem installBuild library and setting PATH
plantfem buildBuild server.f90 and creates executable file server.out
plantfem run= plantfem build && mpirun ./server.out
plantfem manManual for plantfem command.
Finite Elements
2-node line element1D 2D 3D
4-node isoparametric element2D
8-node isoparametric element3D
System Requirements
Operation SystemLinux (Ubuntu 16.04+, ElementaryOS, LinuxMint, Debian), Windows 10/11 (with WSL-Ubuntu), macOS
CPU2 cores, 1.4 GHz
RAM2 GB
Storage1 GB
Dependancies (minimal)version
git2.25.1
Python3.4 or later
Dependancies (Installed by setup/setup.py)version, info
gcc6.4.0 or later
gfortran4.8.0 or later (Fortran 2003 or later)
mpif90= OpenMPI compiler, 2.x or later
apt1.2.35 or later
pippip3 or later
curl7.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

  1. Clone the repository.
git clone https://github.com/kazulagi/plantFEM.git
  1. 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 .
  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] 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