! This file is AUTOGENERATED!!!!
! Do not edit this file; edit m_wcml_quantity.m4 and regenerate.
!
!
module m_wcml_property

  use fox_m_fsys_realtypes, only: sp, dp
  use FoX_wxml, only: xmlf_t

#ifndef DUMMYLIB
  use FoX_wxml, only: xml_NewElement, xml_AddAttribute
  use FoX_wxml, only: xml_EndElement
  use m_wcml_stml, only: stmAddValue

! Fix for pgi, requires this explicitly:
  use m_wxml_overloads
#endif

  implicit none
  private

  interface cmlAddproperty
     module procedure propertyCmplxDpSca
     module procedure propertyCmplxDpArrSi
     module procedure propertyCmplxDpArrSh
     module procedure propertyCmplxDpMatSi
     module procedure propertyCmplxDpMatSh
     module procedure propertyCmplxSpSca
     module procedure propertyCmplxSpArrSi
     module procedure propertyCmplxSpArrSh
     module procedure propertyCmplxSpMatSi
     module procedure propertyCmplxSpMatSh
     module procedure propertyRealDpSca
     module procedure propertyRealDpArrSi
     module procedure propertyRealDpArrSh
     module procedure propertyRealDpMatSi
     module procedure propertyRealDpMatSh
     module procedure propertyRealSpSca
     module procedure propertyRealSpArrSi
     module procedure propertyRealSpArrSh
     module procedure propertyRealSpMatSi
     module procedure propertyRealSpMatSh
     module procedure propertyIntSca
     module procedure propertyIntArrSi
     module procedure propertyIntArrSh
     module procedure propertyIntMatSi
     module procedure propertyIntMatSh
     module procedure propertyLgSca
     module procedure propertyLgArrSi
     module procedure propertyLgArrSh
     module procedure propertyLgMatSi
     module procedure propertyLgMatSh
     module procedure propertyChSca
     module procedure propertyChArrSi
     module procedure propertyChArrSh
     module procedure propertyChMatSi
     module procedure propertyChMatSh

  end interface

  public :: cmlAddproperty

contains

  subroutine propertyCmplxDpSca &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(dp), intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxDpSca

  subroutine propertyCmplxSpSca &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(sp), intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxSpSca

  subroutine propertyRealDpSca &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(dp), intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealDpSca

  subroutine propertyRealSpSca &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(sp), intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealSpSca

  subroutine propertyIntSca &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    integer, intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyIntSca

  subroutine propertyLgSca &
    (xf, value, dictRef, convention, title, id, ref, role)

    type(xmlf_t), intent(inout)              :: xf
    logical, intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role


#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyLgSca

  subroutine propertyChSca &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    character(len=*), intent(in)   :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in) , optional  :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyChSca


  subroutine propertyCmplxDpArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(dp), intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxDpArrSi

  subroutine propertyCmplxSpArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(sp), intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxSpArrSi

  subroutine propertyRealDpArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(dp), intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealDpArrSi

  subroutine propertyRealSpArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(sp), intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealSpArrSi

  subroutine propertyIntArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    integer, intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyIntArrSi

  subroutine propertyLgArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role)

    type(xmlf_t), intent(inout)              :: xf
    logical, intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role


#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems))
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyLgArrSi

  subroutine propertyChArrSi &
    (xf, value,nitems,  dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    character(len=*), intent(in) , dimension(:)  :: value
    integer, intent(in) :: nitems
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in) , optional  :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nitems), units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyChArrSi


  subroutine propertyCmplxDpArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(dp), intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxDpArrSh

  subroutine propertyCmplxSpArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(sp), intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxSpArrSh

  subroutine propertyRealDpArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(dp), intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealDpArrSh

  subroutine propertyRealSpArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(sp), intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealSpArrSh

  subroutine propertyIntArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    integer, intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyIntArrSh

  subroutine propertyLgArrSh &
    (xf, value, dictRef, convention, title, id, ref, role)

    type(xmlf_t), intent(inout)              :: xf
    logical, intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role


#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyLgArrSh

  subroutine propertyChArrSh &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    character(len=*), intent(in) , dimension(:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in) , optional  :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyChArrSh


  subroutine propertyCmplxDpMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(dp), intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxDpMatSi

  subroutine propertyCmplxSpMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(sp), intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxSpMatSi

  subroutine propertyRealDpMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(dp), intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealDpMatSi

  subroutine propertyRealSpMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(sp), intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealSpMatSi

  subroutine propertyIntMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    integer, intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyIntMatSi

  subroutine propertyLgMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role)

    type(xmlf_t), intent(inout)              :: xf
    logical, intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role


#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols))
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyLgMatSi

  subroutine propertyChMatSi &
    (xf, value,nrows, ncols,  dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    character(len=*), intent(in) , dimension(:,:)  :: value
    integer, intent(in) :: nrows
    integer, intent(in) :: ncols
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in) , optional  :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value(:nrows, :ncols), units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyChMatSi


  subroutine propertyCmplxDpMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(dp), intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxDpMatSh

  subroutine propertyCmplxSpMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    complex(sp), intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyCmplxSpMatSh

  subroutine propertyRealDpMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(dp), intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealDpMatSh

  subroutine propertyRealSpMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units, fmt)

    type(xmlf_t), intent(inout)              :: xf
    real(sp), intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units
    character(len=*), intent(in), optional :: fmt

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units, fmt=fmt)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyRealSpMatSh

  subroutine propertyIntMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    integer, intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in)   :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyIntMatSh

  subroutine propertyLgMatSh &
    (xf, value, dictRef, convention, title, id, ref, role)

    type(xmlf_t), intent(inout)              :: xf
    logical, intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role


#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyLgMatSh

  subroutine propertyChMatSh &
    (xf, value, dictRef, convention, title, id, ref, role, units)

    type(xmlf_t), intent(inout)              :: xf
    character(len=*), intent(in) , dimension(:,:)  :: value
    character(len=*), intent(in), optional :: dictRef
    character(len=*), intent(in), optional :: convention
    character(len=*), intent(in), optional :: title
    character(len=*), intent(in), optional :: id
    character(len=*), intent(in), optional :: ref
    character(len=*), intent(in), optional :: role

    character(len=*), intent(in) , optional  :: units

#ifndef DUMMYLIB
    call xml_NewElement(xf, "property")
    if (present(dictRef)) call xml_addAttribute(xf, "dictRef", dictRef)
    if (present(convention)) call xml_addAttribute(xf, "convention", convention)
    if (present(title)) call xml_addAttribute(xf, "title", title)
    if (present(id)) call xml_addAttribute(xf, "id", id)
    if (present(ref)) call xml_addAttribute(xf, "ref", ref)
    if (present(role)) call xml_addAttribute(xf, "role", role)

    call stmAddValue(xf=xf, value=value, units=units)
    call xml_EndElement(xf, "property")
#endif
 
  end subroutine propertyChMatSh


end module m_wcml_property

