soybean_ Derived Type

type, public :: soybean_


Contents


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

  • 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

procedure, public :: Init => initsoybean

  • 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

procedure, public :: remove => removeSoybean

  • public subroutine removeSoybean(obj)

    Arguments

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

procedure, public :: create => initsoybean

  • 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

procedure, public :: new => initsoybean

  • 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

procedure, public :: sowing => initsoybean

  • 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

procedure, public :: export => exportSoybean

  • 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

procedure, public :: expanition => expanitionSoybean

  • public subroutine expanitionSoybean(obj)

    Arguments

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

procedure, public :: development => developmentSoybean

procedure, public :: stemlength => stemlengthSoybean

  • 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, (:)

procedure, public :: NumberOfBranch => NumberOfBranchSoybean

  • public function NumberOfBranchSoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: isMainStem => isMainStemSoybean

  • 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

procedure, public :: isBranchStem => isBranchStemSoybean

  • 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

procedure, public :: findApical => findApicalSoybean

  • public function findApicalSoybean(obj) result(ret)

    Arguments

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

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

procedure, public :: grow => growSoybean

  • 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

procedure, public :: getVolume => getVolumeSoybean

  • 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)

procedure, public :: getBioMass => getBiomassSoybean

  • 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)

procedure, public :: getTotalWeight => getTotalWeightSoybean

  • 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)

procedure, public :: getSubDomain => getSubDomainSoybean

  • 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_)

procedure, public :: getSubDomainType => getSubDomainTypeSoybean

  • 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

procedure, public :: setSubDomain => setSubDomainSoybean

  • 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

procedure, public :: resize => resizeSoybean

  • 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(:)

procedure, public :: deform => deformSoybean

  • 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

procedure, public :: show => showSoybean

  • public subroutine showSoybean(obj, name)

    Arguments

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

procedure, public :: gmsh => gmshSoybean

  • 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

procedure, public :: msh => mshSoybean

  • 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

procedure, public :: vtk => vtkSoybean

  • 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

procedure, public :: stl => stlSoybean

  • 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

procedure, public :: json => jsonSoybean

  • public subroutine jsonSoybean(obj, name)

    Arguments

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

procedure, public :: ns => nsSoybean

  • public function nsSoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: ne => neSoybean

  • public function neSoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: nn => nnSoybean

  • public function nnSoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: np => nnSoybean

  • public function nnSoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: branchID => branchIDSoybean

  • 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

procedure, public :: WaterAbsorption => WaterAbsorptionSoybean

  • 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

procedure, public :: move => moveSoybean

  • 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

procedure, public :: numleaf => numleafsoybean

  • public function numleafsoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: numstem => numstemsoybean

  • public function numstemsoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: numroot => numrootsoybean

  • public function numrootsoybean(obj) result(ret)

    Arguments

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

    Return Value integer(kind=int32)

procedure, public :: laytracing => laytracingsoybean

  • public subroutine laytracingsoybean(obj, light)

    Arguments

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

procedure, public :: SinkSourceFlow => SinkSourceFlowSoybean

  • public subroutine SinkSourceFlowSoybean(obj, simple)

    Arguments

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

procedure, public :: update => updateSoybean

  • 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

procedure, public :: updateFlowers => updateFlowersSoybean

procedure, public :: updatePods => updatePodsSoybean

  • public subroutine updatePodsSoybean(obj)

    Arguments

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

procedure, public :: AddNode => addNodeSoybean

  • 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