code: def definition(self, suffix = "", local=False, ctype=None, optionals=True,
                     customdim=None, modifiers=None):
          
          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)
docs: 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.