SoybeanClass Module

########################################

########################################

########################################



Contents


Variables

TypeVisibility AttributesNameInitial
integer(kind=int32), public, parameter:: PF_DEFAULT_SOYBEAN_ASIZE =300

Derived Types

type, public :: soybean_NodeID_Branch_

Components

TypeVisibility AttributesNameInitial
integer(kind=int32), public, allocatable:: ID(:)

type, public :: soybean_

Components

TypeVisibility AttributesNameInitial
character(len=20), public :: growth_habit
character(len=2), public :: growth_stage
integer(kind=int32), public :: Num_Of_Node
integer(kind=int32), public :: num_leaf
integer(kind=int32), public :: num_stem_node
integer(kind=int32), public :: Num_Of_Root
integer(kind=int32), public :: MaxLeafNum =PF_DEFAULT_SOYBEAN_ASIZE
integer(kind=int32), public :: MaxRootNum =PF_DEFAULT_SOYBEAN_ASIZE
integer(kind=int32), public :: MaxStemNum =PF_DEFAULT_SOYBEAN_ASIZE
logical, public :: determinate
integer(kind=int32), public :: ms_node
integer(kind=int32), public :: br_node(PF_DEFAULT_SOYBEAN_ASIZE)
integer(kind=int32), public :: br_from(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: ms_length
real(kind=real64), public :: br_length(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: ms_width
real(kind=real64), public :: br_width(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: ms_angle_ave
real(kind=real64), public :: br_angle_ave(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: ms_angle_sig
real(kind=real64), public :: br_angle_sig(PF_DEFAULT_SOYBEAN_ASIZE)
integer(kind=int32), public :: mr_node
integer(kind=int32), public :: brr_node(PF_DEFAULT_SOYBEAN_ASIZE)
integer(kind=int32), public :: brr_from(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: mr_length
real(kind=real64), public :: brr_length(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: mr_width
real(kind=real64), public :: brr_width(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: mr_angle_ave
real(kind=real64), public :: brr_angle_ave(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: mr_angle_sig
real(kind=real64), public :: brr_angle_sig(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_size_ave(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_size_sig(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_width_ave(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_width_sig(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_angle_ave(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: peti_angle_sig(PF_DEFAULT_SOYBEAN_ASIZE)
real(kind=real64), public :: leaf_angle_ave(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_angle_sig(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_length_ave(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_length_sig(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_width_ave(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_width_sig(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_thickness_ave(PF_DEFAULT_SOYBEAN_ASIZE*3)
real(kind=real64), public :: leaf_thickness_sig(PF_DEFAULT_SOYBEAN_ASIZE*3)
character(len=3), public :: Stage
character(len=200), public :: name
integer(kind=int32), public :: stage_id =0
real(kind=real64), public :: dt
type(Seed_), public :: Seed
type(PlantNode_), public, allocatable:: NodeSystem(:)
type(PlantRoot_), public, allocatable:: RootSystem(:)
type(Stem_), public, allocatable:: Stem(:)
type(Leaf_), public, allocatable:: Leaf(:)
type(Root_), public, allocatable:: Root(:)
type(Soil_), public, allocatable:: Soil
real(kind=real64), public, allocatable:: stemYoungModulus(:)
real(kind=real64), public, allocatable:: leafYoungModulus(:)
real(kind=real64), public, allocatable:: rootYoungModulus(:)
real(kind=real64), public, allocatable:: stemPoissonRatio(:)
real(kind=real64), public, allocatable:: leafPoissonRatio(:)
real(kind=real64), public, allocatable:: rootPoissonRatio(:)
real(kind=real64), public, allocatable:: stemDensity(:)
real(kind=real64), public, allocatable:: leafDensity(:)
real(kind=real64), public, allocatable:: rootDensity(:)
type(Mesh_), public :: struct
integer(kind=int32), public, allocatable:: leaf2stem(:,:)
integer(kind=int32), public, allocatable:: stem2stem(:,:)
integer(kind=int32), public, allocatable:: root2stem(:,:)
integer(kind=int32), public, allocatable:: root2root(:,:)
type(FEMDomain_), public, allocatable:: leaf_list(:)
type(FEMDomain_), public, allocatable:: stem_list(:)
type(FEMDomain_), public, allocatable:: root_list(:)
type(ContactMechanics_), public :: contact
real(kind=real64), public :: time
real(kind=real64), public :: seed_length
real(kind=real64), public :: seed_width
real(kind=real64), public :: seed_height
real(kind=real64), public, allocatable:: stem_angle(:,:)
real(kind=real64), public, allocatable:: root_angle(:,:)
real(kind=real64), public, allocatable:: leaf_angle(:,:)
character(len=200), public :: stemconfig =" "
character(len=200), public :: rootconfig =" "
character(len=200), public :: leafconfig =" "
integer(kind=int32), public, allocatable:: NodeID_MainStem(:)
type(soybean_NodeID_Branch_), public, allocatable:: NodeID_Branch(:)
logical, public :: inLoop =.false.
real(kind=real64), public :: hours =0.0d0

Type-Bound Procedures

procedure, public :: addStem => addStemSoybean
procedure, public :: Init => initsoybean
procedure, public :: remove => removeSoybean
procedure, public :: create => initsoybean
procedure, public :: new => initsoybean
procedure, public :: sowing => initsoybean
procedure, public :: export => exportSoybean
procedure, public :: expanition => expanitionSoybean
procedure, public :: development => developmentSoybean
procedure, public :: stemlength => stemlengthSoybean
procedure, public :: NumberOfBranch => NumberOfBranchSoybean
procedure, public :: isMainStem => isMainStemSoybean
procedure, public :: isBranchStem => isBranchStemSoybean
procedure, public :: findApical => findApicalSoybean
procedure, public :: grow => growSoybean
procedure, public :: getVolume => getVolumeSoybean
procedure, public :: getBioMass => getBiomassSoybean
procedure, public :: getTotalWeight => getTotalWeightSoybean
procedure, public :: getSubDomain => getSubDomainSoybean
procedure, public :: getSubDomainType => getSubDomainTypeSoybean
procedure, public :: setSubDomain => setSubDomainSoybean
procedure, public :: resize => resizeSoybean
procedure, public :: deform => deformSoybean
procedure, public :: show => showSoybean
procedure, public :: gmsh => gmshSoybean
procedure, public :: msh => mshSoybean
procedure, public :: vtk => vtkSoybean
procedure, public :: stl => stlSoybean
procedure, public :: json => jsonSoybean
procedure, public :: ns => nsSoybean
procedure, public :: ne => neSoybean
procedure, public :: nn => nnSoybean
procedure, public :: np => nnSoybean
procedure, public :: branchID => branchIDSoybean
procedure, public :: WaterAbsorption => WaterAbsorptionSoybean
procedure, public :: move => moveSoybean
procedure, public :: numleaf => numleafsoybean
procedure, public :: numstem => numstemsoybean
procedure, public :: numroot => numrootsoybean
procedure, public :: laytracing => laytracingsoybean
procedure, public :: SinkSourceFlow => SinkSourceFlowSoybean
procedure, public :: update => updateSoybean
procedure, public :: updateFlowers => updateFlowersSoybean
procedure, public :: updatePods => updatePodsSoybean
procedure, public :: AddNode => addNodeSoybean

type, public :: SoybeanCanopy_

Components

TypeVisibility AttributesNameInitial
real(kind=real64), public :: inter_row
real(kind=real64), public :: intra_row
type(soybean_), public, allocatable:: Canopy(:,:)

Functions

public function numleafsoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function numstemsoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function numrootsoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function getVolumeSoybean(obj, stem, leaf, root) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
logical, intent(in), optional :: stem
logical, intent(in), optional :: leaf
logical, intent(in), optional :: root

Return Value real(kind=real64)

public function getBiomassSoybean(obj, stem, leaf, root) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
logical, intent(in), optional :: stem
logical, intent(in), optional :: leaf
logical, intent(in), optional :: root

Return Value real(kind=real64)

public function getTotalWeightSoybean(obj, stem, leaf, root, waterDensity) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
logical, intent(in), optional :: stem
logical, intent(in), optional :: leaf
logical, intent(in), optional :: root
real(kind=real64), intent(in), optional :: waterDensity

Return Value real(kind=real64)

public function stemlengthSoybean(obj, StemID) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
integer(kind=int32), intent(in) :: StemID

Return Value real(kind=real64), allocatable, (:)

public function NumberOfBranchSoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function findApicalSoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32), allocatable, (:)

public function nnSoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function neSoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function nsSoybean(obj) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj

Return Value integer(kind=int32)

public function getSubDomainSoybean(obj, id) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
integer(kind=int32), intent(in) :: id

Return Value type(FEMDomain_)

public function getSubDomainTypeSoybean(obj, id) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
integer(kind=int32), intent(in) :: id

Return Value character(len=:), allocatable

public pure function isMainStemSoybean(obj, StemNodeID) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
integer(kind=int32), intent(in) :: StemNodeID

Return Value logical

public pure function isBranchStemSoybean(obj, StemNodeID) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
integer(kind=int32), intent(in) :: StemNodeID

Return Value logical

public pure function branchIDSoybean(obj, StemNodeID) result(ret)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(in) :: obj
integer(kind=int32), intent(in) :: StemNodeID

Return Value integer(kind=int32), allocatable


Subroutines

public recursive subroutine updateSoybean(obj, stem_id, root_id, leaf_id, debug)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
integer(kind=int32), intent(in), optional :: stem_id
integer(kind=int32), intent(in), optional :: root_id
integer(kind=int32), intent(in), optional :: leaf_id
logical, intent(in), optional :: debug

public subroutine initsoybean(obj, config, regacy, mass, water_content, radius, location, x, y, z, PlantRoot_diameter_per_seed_radius, max_PlantNode_num, Variety, FileName, max_leaf_num, max_stem_num, max_root_num, profiler)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in), optional :: config
logical, intent(in), optional :: regacy
real(kind=real64), intent(in), optional :: mass
real(kind=real64), intent(in), optional :: water_content
real(kind=real64), intent(in), optional :: radius
real(kind=real64), intent(in), optional :: location(3)
real(kind=real64), intent(in), optional :: x
real(kind=real64), intent(in), optional :: y
real(kind=real64), intent(in), optional :: z
real(kind=real64), intent(in), optional :: PlantRoot_diameter_per_seed_radius
integer(kind=int32), intent(in), optional :: max_PlantNode_num
character(len=*), intent(in), optional :: Variety
character(len=*), intent(in), optional :: FileName
integer(kind=int32), intent(in), optional :: max_leaf_num
integer(kind=int32), intent(in), optional :: max_stem_num
integer(kind=int32), intent(in), optional :: max_root_num
logical, intent(in), optional :: profiler

public subroutine growSoybean(obj, dt, light, air, temp, simple)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
real(kind=real64), intent(in) :: dt
type(Light_), intent(inout), optional :: light
type(air_), intent(in), optional :: air
real(kind=real64), intent(in), optional :: temp
logical, intent(in), optional :: simple

public subroutine SinkSourceFlowSoybean(obj, simple)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
logical, intent(in), optional :: simple

public subroutine expanitionSoybean(obj)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj

public subroutine developmentSoybean(obj)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj

public subroutine updateFlowersSoybean(obj)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj

public subroutine updatePodsSoybean(obj)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj

public subroutine WaterAbsorptionSoybean(obj, temp, dt)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
real(kind=real64), intent(in) :: temp
real(kind=real64), intent(in) :: dt

public subroutine exportSoybean(obj, FilePath, FileName, SeedID, withSTL, withMesh)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in), optional :: FilePath
character(len=*), intent(in) :: FileName
integer(kind=int32), intent(inout), optional :: SeedID
logical, intent(in), optional :: withSTL
logical, intent(in), optional :: withMesh

public subroutine showSoybean(obj, name)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name

public subroutine gmshSoybean(obj, name, num_threads)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name
integer(kind=int32), intent(in), optional :: num_threads

public subroutine mshSoybean(obj, name, num_threads)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name
integer(kind=int32), intent(in), optional :: num_threads

public subroutine vtkSoybean(obj, name, num_threads)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name
integer(kind=int32), intent(in), optional :: num_threads

public subroutine jsonSoybean(obj, name)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name

public subroutine stlSoybean(obj, name, num_threads)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
character(len=*), intent(in) :: name
integer(kind=int32), intent(in), optional :: num_threads

public subroutine moveSoybean(obj, x, y, z)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: x
real(kind=real64), intent(in), optional :: y
real(kind=real64), intent(in), optional :: z

public subroutine laytracingsoybean(obj, light)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
type(Light_), intent(in) :: light

public subroutine addNodeSoybean(obj, StemNodeID, RootNodeID, peti_width_ave, peti_width_sig, peti_size_ave, peti_size_sig, peti_angle_ave, peti_angle_sig, leaf_thickness_ave, leaf_thickness_sig, leaf_length_ave, leaf_length_sig, leaf_width_ave, leaf_width_sig, leaf_angle_sig, leaf_angle_ave)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
integer(kind=int32), intent(in), optional :: StemNodeID
integer(kind=int32), intent(in), optional :: RootNodeID
real(kind=real64), intent(in), optional :: peti_width_ave
real(kind=real64), intent(in), optional :: peti_width_sig
real(kind=real64), intent(in), optional :: peti_size_ave
real(kind=real64), intent(in), optional :: peti_size_sig
real(kind=real64), intent(in), optional :: peti_angle_ave
real(kind=real64), intent(in), optional :: peti_angle_sig
real(kind=real64), intent(in), optional :: leaf_thickness_ave
real(kind=real64), intent(in), optional :: leaf_thickness_sig
real(kind=real64), intent(in), optional :: leaf_length_ave
real(kind=real64), intent(in), optional :: leaf_length_sig
real(kind=real64), intent(in), optional :: leaf_width_ave
real(kind=real64), intent(in), optional :: leaf_width_sig
real(kind=real64), intent(in), optional :: leaf_angle_sig
real(kind=real64), intent(in), optional :: leaf_angle_ave

public subroutine addStemSoybean(obj, stemid, rotx, roty, rotz, json)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
integer(kind=int32), intent(in) :: stemid
real(kind=real64), intent(in), optional :: rotx
real(kind=real64), intent(in), optional :: roty
real(kind=real64), intent(in), optional :: rotz
character(len=*), intent(in), optional :: json

public subroutine deformSoybean(obj, penaltyparameter, groundLevel, disp, x_min, x_max, y_min, y_max, z_min, z_max)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout), target:: obj
real(kind=real64), intent(in), optional :: penaltyparameter
real(kind=real64), intent(in), optional :: groundLevel
real(kind=real64), intent(in), optional :: disp(3)
real(kind=real64), intent(in), optional :: x_min
real(kind=real64), intent(in), optional :: x_max
real(kind=real64), intent(in), optional :: y_min
real(kind=real64), intent(in), optional :: y_max
real(kind=real64), intent(in), optional :: z_min
real(kind=real64), intent(in), optional :: z_max

public subroutine removeSoybean(obj)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj

public subroutine resizeSoybean(obj, StemID, StemLength)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
integer(kind=int32), intent(in), optional :: StemID
real(kind=real64), intent(in), optional :: StemLength(:)

public subroutine setSubDomainSoybean(obj, domain, id)

Arguments

Type IntentOptional AttributesName
class(soybean_), intent(inout) :: obj
type(FEMDomain_), intent(in) :: domain
integer(kind=int32), intent(in) :: id