Returns the fortran code string that would define this value element.

        :arg suffix: an optional suffix to append to the name of the variable.
          Useful for re-using definitions with new names.
        :arg local: when True, the parameter definition is re-cast as a local
          variable definition that has the "intent" and "optional" modifiers removed.
        :arg ctype: if a ctype should be used as the data type of the variable
          instead of the original type, specify that string here.
        :arg optionals: removes the "optional" modifier from the definition before
          generating it.
        :arg customdim: if the dimension string needs to be changed, specify the
          new one here.
        :arg modifiers: specify an additional list of modifiers to add to the
          variable definition.

def definition(self, suffix = "", local=False, ctype=None, optionals=True,
                   customdim=None, modifiers=None):
        """Returns the fortran code string that would define this value element.

        :arg suffix: an optional suffix to append to the name of the variable.
          Useful for re-using definitions with new names.
        :arg local: when True, the parameter definition is re-cast as a local
          variable definition that has the "intent" and "optional" modifiers removed.
        :arg ctype: if a ctype should be used as the data type of the variable
          instead of the original type, specify that string here.
        :arg optionals: removes the "optional" modifier from the definition before
          generating it.
        :arg customdim: if the dimension string needs to be changed, specify the
          new one here.
        :arg modifiers: specify an additional list of modifiers to add to the
          variable definition.
        """
        kind = "({})".format(self.kind) if self.kind is not None else ""   
        cleanmods = [m for m in self.modifiers if m != "" and m != " "
                     and not (local and ("intent" in m or m == "optional"))
                     and not (not optionals and m == "optional")]
        if modifiers is not None:
            cleanmods.extend(modifiers)
        if len(cleanmods) > 0:
            mods = ", " + ", ".join(cleanmods) + " " 
        else:
            mods = " "
        if customdim is not None:
            dimension = "({})".format(customdim)
        else:
            dimension = "({})".format(self.dimension) if self.dimension is not None else ""

        if self.default is None:
            default = ""
        else:
            if ">" in self.default: #We have a pointer, don't add an extra space.
                default = " ={}".format(self.default) if self.default is not None else ""
            else:
                default = " = {}".format(self.default) if self.default is not None else ""
        name = "{}{}".format(self.name, suffix)
        stype = self.dtype if ctype is None else ctype
        return "{}{}{}:: {}{}{}".format(stype, kind, mods, name, dimension, default)