Reference Guide  2.5.0
psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata Class Reference
Inheritance diagram for psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata:
Collaboration diagram for psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata:

Public Member Functions

def __init__ (self, meta_args_args)
 
def fortran_string (self)
 
def meta_args_args (self)
 
def meta_args_args (self, values)
 

Static Public Member Functions

def create_from_fparser2 (fparser2_tree)
 

Public Attributes

 meta_args_args
 

Additional Inherited Members

Detailed Description

Class to capture the values of the LFRic kernel
meta_args metadata. This class supports the creation,
modification and Fortran output of this metadata.

meta_args metadata specifies information about data that the
kernel code expects to be passed to it via its argument list.

:param meta_args_args: a list of meta_args arguments.
:type meta_args_args: List[:py:class:`psyclone.domain.lfric.kernel.\
    CommonMetaArgMetadata`]

Definition at line 62 of file meta_args_metadata.py.

Member Function Documentation

◆ create_from_fparser2()

def psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata.create_from_fparser2 (   fparser2_tree)
static
Create an instance of MetaArgsMetadata from an fparser2
tree.

:param fparser2_tree: fparser2 tree capturing the meta \
    args metadata.
:type fparser2_tree: :py:class:`fparser.two.Fortran2003.\
    Data_Component_Def_Stmt`

:returns: an instance of MetaArgsMetadata.
:rtype: :py:class:`psyclone.domain.lfric.kernel.\
    MetaArgsMetadata`

:raises ParseError: if an unknown MetaArgsArgMetadata argument \
    is found.

Reimplemented from psyclone.domain.lfric.kernel.common_metadata.CommonMetadata.

Definition at line 88 of file meta_args_metadata.py.

88  def create_from_fparser2(fparser2_tree):
89  '''Create an instance of MetaArgsMetadata from an fparser2
90  tree.
91 
92  :param fparser2_tree: fparser2 tree capturing the meta \
93  args metadata.
94  :type fparser2_tree: :py:class:`fparser.two.Fortran2003.\
95  Data_Component_Def_Stmt`
96 
97  :returns: an instance of MetaArgsMetadata.
98  :rtype: :py:class:`psyclone.domain.lfric.kernel.\
99  MetaArgsMetadata`
100 
101  :raises ParseError: if an unknown MetaArgsArgMetadata argument \
102  is found.
103 
104  '''
105  MetaArgsMetadata.get_derived_array_declaration(
106  fparser2_tree, "ARG_TYPE", "META_ARGS")
107  args = walk(fparser2_tree, Fortran2003.Ac_Value_List)
108  meta_args_args = []
109  for meta_arg in args[0].children:
110  form = meta_arg.children[1].children[0].tostr()
111  form = form.lower()
112  if form == "gh_scalar":
113  arg = ScalarArgMetadata.create_from_fparser2(meta_arg)
114  elif form == "gh_operator":
115  arg = OperatorArgMetadata.create_from_fparser2(meta_arg)
116  elif form == "gh_columnwise_operator":
117  arg = ColumnwiseOperatorArgMetadata.create_from_fparser2(
118  meta_arg)
119  elif "gh_field" in form:
120  vector_arg = "*" in form
121  nargs = len(meta_arg.children[1].children)
122  intergrid_arg = False
123  if nargs == 5:
124  fifth_arg = meta_arg.children[1].children[4]
125  intergrid_arg = (
126  fifth_arg.children and
127  fifth_arg.children[0].string.lower() == "mesh_arg")
128 
129  if intergrid_arg and vector_arg:
130  arg = InterGridVectorArgMetadata.create_from_fparser2(
131  meta_arg)
132  elif intergrid_arg and not vector_arg:
133  arg = InterGridArgMetadata.create_from_fparser2(meta_arg)
134  elif vector_arg and not intergrid_arg:
135  arg = FieldVectorArgMetadata.create_from_fparser2(meta_arg)
136  else:
137  arg = FieldArgMetadata.create_from_fparser2(meta_arg)
138  else:
139  raise ParseError(
140  f"Expected a 'meta_arg' entry to be a "
141  f"field, a scalar or an operator, but found "
142  f"'{meta_arg}'.")
143  meta_args_args.append(arg)
144  return MetaArgsMetadata(meta_args_args)
145 
Here is the caller graph for this function:

◆ fortran_string()

def psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata.fortran_string (   self)
:returns: the meta_args metadata as Fortran.
:rtype: str

Definition at line 79 of file meta_args_metadata.py.

79  def fortran_string(self):
80  '''
81  :returns: the meta_args metadata as Fortran.
82  :rtype: str
83  '''
84  return self.type_declaration_string(
85  "ARG_TYPE", "META_ARGS", self._meta_args_args)
86 

References psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata._meta_args_args, and psyclone.domain.lfric.kernel.common_declaration_metadata.CommonDeclarationMetadata.type_declaration_string().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ meta_args_args() [1/2]

def psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata.meta_args_args (   self)
:returns: a list of meta args argument objects.
:rtype: List[:py:class:`psyclone.domain.lfric.kernel.\
    CommonArg`]

Definition at line 147 of file meta_args_metadata.py.

147  def meta_args_args(self):
148  '''
149  :returns: a list of meta args argument objects.
150  :rtype: List[:py:class:`psyclone.domain.lfric.kernel.\
151  CommonArg`]
152  '''
153  return self._meta_args_args[:]
154 

References psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata._meta_args_args.

◆ meta_args_args() [2/2]

def psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata.meta_args_args (   self,
  values 
)
:param values: set the meta_args metadata to the \
    supplied list of values.
:type values: List[:py:class:`psyclone.domain.lfric.kernel.\
    CommonArg`]

Definition at line 156 of file meta_args_metadata.py.

156  def meta_args_args(self, values):
157  '''
158  :param values: set the meta_args metadata to the \
159  supplied list of values.
160  :type values: List[:py:class:`psyclone.domain.lfric.kernel.\
161  CommonArg`]
162 
163  '''
164  self.validate_list(values, CommonMetaArgMetadata)
165  # Take a copy of the list so that it can't be modified
166  # externally.
167  self._meta_args_args = values[:]
168 
169 

References psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata._meta_args_args, and psyclone.domain.lfric.kernel.common_declaration_metadata.CommonDeclarationMetadata.validate_list().

Here is the call graph for this function:

The documentation for this class was generated from the following file: